当时拉钩网ThoughtWorks出了一道面试题(https://www.jinshuju.net/f/EGQL3D),本人用PHP实现了一下,当时忘记了把代码分享出来,今天特来补上。

FizzBuzzWhizz 这到算法题的规则如下:

1,语言不限,Java, C#, Ruby, C++, Js, Python, Scala, objective-C统统可以,小语种也没问题,只要你擅长;

2,强烈建议写单元测试;

3,请展示出你超赞的面向对象/函数式编程功底;

4,建议尽量减少圈复杂度;

5,请提交可运行的代码,及相关构建脚本/说明文档(代码运行平台和环境);

FizzBuzzWhizz

你是一名体育老师,在某次课距离下课还有五分钟时,你决定搞一个游戏。此时有100名学生在上课。游戏的规则是:

1. 你首先说出三个不同的特殊数,要求必须是个位数,比如3、5、7。
2. 让所有学生拍成一队,然后按顺序报数。

3. 学生报数时,如果所报数字是第一个特殊数(3)的倍数,那么不能说该数字,而要说Fizz;如果所报数字是第二个特殊数(5)的倍数,那么要说Buzz;如果所报数字是第三个特殊数(7)的倍数,那么要说Whizz。
4. 学生报数时,如果所报数字同时是两个特殊数的倍数情况下,也要特殊处理,比如第一个特殊数和第二个特殊数的倍数,那么不能说该数字,而是要说FizzBuzz, 以此类推。如果同时是三个特殊数的倍数,那么要说FizzBuzzWhizz。
5. 学
生报数时,如果所报数字包含了第一个特殊数,那么也不能说该数字,而是要说相应的单词,比如本例中第一个特殊数是3,那么要报13的同学应该说Fizz。
如果数字中包含了第一个特殊数,那么忽略规则3和规则4,比如要报35的同学只报Fizz,不报BuzzWhizz。
 
我实现这个这个需求用到了一下几个文件:
GameCfg.php 是这个算法用到的配置文件,在这里主要是定义一些常量之类的
Game.php 是这个算法实现的主体
TestGame.php 主要是测试这个算法的文件
README.txt 运行这个脚本的说明
 
GameCfg.php 代码如下:
<?php

/**
*
* atuhor cherry.chen
* desc Gamm initial configuration parameters
* date 2014/4/29
*
*/
class GameCfg {
const FIZZ = "Fizz";
const BUZZ = "Buzz";
const WHIZZ = "Whizz";
const ZERO = 0;
const ONE = 1;
const TWO = 2;
const NEWLINE="\n"; //<br/> running with console ,please modified "\n"
} ?>

Game.php 代码如下:

<?php

require_once (dirname(__FILE__) . "/../cfg/GameCfg.php");

/**
* author cherry
* desc Game Main Class
* date 2014/4/29
*/
class Game { private $numbers = array();
private $init_array_range = array(); public function __construct($number_arrs, $init_array_range) {
if (count($number_arrs) == 3) {
$this->numbers = $number_arrs;
}
$this->init_array_range = $init_array_range;
} /**
* init data and call the doGame
* @param <type> $init_array_range
*/
public function startGame() {
$init_array_range = $this->init_array_range;
$numbers = $this->numbers;
if (!empty($numbers)) {
$count = count($init_array_range);
for ($i = 0; $i < $count; $i++) {
$this->doGame($numbers, $init_array_range[$i]);
}
}
} /**
* do Game form the pre-rules
* @param <type> $i
*/
private function doGame($numbers, $i) {
$str_contains = $this->numberContains($numbers, $i);
if ($str_contains != null && $str_contains != "") {
echo $str_contains . GameCfg::NEWLINE;
} else {
$msts = $this->numberMod($numbers, $i);
if ($msts != "" && $msts != null) {
echo $msts . GameCfg::NEWLINE;
} else {
echo $i . GameCfg::NEWLINE;
}
}
} /**
* Judge this number satisfy the rule 5 yes or not
* @param <type> $numbers
* @param <type> $i
* @return <type>
*/
private function numberContains($numbers, $i) {
$ars = array();
$intoarrays = $this->intToArray($i);
$number_flag = $this->findFirstNumFlag($numbers, $intoarrays);
if (in_array($numbers[GameCfg::ZERO], $intoarrays) && $number_flag) {
array_push($ars, GameCfg::FIZZ);
} else if (in_array($numbers[GameCfg::ONE], $intoarrays) && $number_flag) {
if (count($ars) == 0) {
array_push($ars, GameCfg::BUZZ);
}
} else if (in_array($numbers[GameCfg::TWO], $intoarrays) && $number_flag) {
if (count($ars) == 0) {
array_push($ars, GameCfg::WHIZZ);
}
}
return implode("", $ars);
} /**
* Judge this number satisfy the rule 3,4 yes or not
* @param <type> $numbers
* @param <type> $i
* @return <type>
*/
private function numberMod($numbers, $i) {
$ars = array();
if ($i % $numbers[GameCfg::ZERO] == 0) {
array_push($ars, GameCfg::FIZZ);
} if ($i % $numbers[GameCfg::ONE] == 0) {
array_push($ars, GameCfg::BUZZ);
} if ($i % $numbers[GameCfg::TWO] == 0) {
array_push($ars, GameCfg::WHIZZ);
}
return implode("", $ars);
} private function intToArray($val) {
$input_arrs = array();
$val = $val . "";
$len = strlen($val); for ($i = 0; $i < $len; $i++) {
array_push($input_arrs, $val{$i});
}
return $input_arrs;
} private function findFirstNumFlag($numbers, $intoarrays) {
return in_array($numbers[GameCfg::ZERO], $intoarrays);
} } ?>

TestGame.php 代码如下:

<?php

require_once (dirname(__FILE__) . "/../code/Game.php");

$number_arrs = array(3, 5, 7);
$init_array_range = array(); for ($i = 0; $i < 100; $i++) {
$init_array_range[$i] = $i + 1;
} $game = new Game($number_arrs, $init_array_range);
$game->startGame();
?>

README.txt 说明如下:

1.Before runing this script ,please make sure you have installed PHP enviroment.
2.usage
In Linux: if you decompress the package in the /var/www/html directory
PHP installed path: /usr/local/php
/usr/loca/php/bin/php /var/www/html/game/test/TestGame.php In Windows: if you decompress the package in the D:\demo directory
PHP installed path: D:\programs\php
D:\programs\php\bin\php D:\demo\game/test/TestGame.php

运行效果图如下:

aaarticlea/png;base64,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" alt="" />

完整代码可以到这里下载:http://url.cn/Nq9aJg

ThoughtWorks FizzBuzzWhizz 代码实现的更多相关文章

  1. ThoughtWorks代码挑战——FizzBuzzWhizz游戏 通用高速版(C/C++ & C#)

    最早看到这个题目是从@ 程序媛想事儿(Alexia) 的 最难面试的IT公司之ThoughtWorks代码挑战——FizzBuzzWhizz游戏 开始的,然后这几天陆陆续续有N个小伙伴发表了自己的文章 ...

  2. ThoughtWorks代码挑战——FizzBuzzWhizz

    很久没发表过文章了,今天看到一篇文章 最难面试的IT公司之ThoughtWorks代码挑战——FizzBuzzWhizz游戏(C#解法) 看到LZ的2B青年代码,实在是惨不忍睹,故写篇文章来探讨下这类 ...

  3. 最难面试的IT公司之ThoughtWorks代码挑战——FizzBuzzWhizz游戏

    最近互联网招聘平台拉勾网在五一期间推出个“最难面试的IT公司”代码挑战活动,评选出了5个最难面试的IT公司,即:ThoughtWorks.Google.Unisys.Rackspace.Cypress ...

  4. 最艰难的采访IT公司ThoughtWorks代码挑战——FizzBuzzWhizz游戏

    最近的互联网招聘平台拉勾网在五月推出了"最艰难的采访IT公司"码挑战活动,评选出了5个最难面试的IT公司,即:ThoughtWorks.Google.Unisys.Rackspac ...

  5. 最难面试的IT公司之ThoughtWorks代码挑战——FizzBuzzWhizz游戏(C#解法)

    原题 看到那么多人看到前面这么糟粕的代码各种不忍直视后,楼主还是把最终实现放在页首吧.             Console.WriteLine("说出三个不同的特殊数,用','隔开 &q ...

  6. 拉勾网ThoughtWorks面试题代码实现

    今天看到一个很有意思的面试活动(活动链接),不需要简历,只有一道编程题目,在线提交你的代码即可. 本菜鸟对面试不感兴趣,但题目让我很兴奋,特来挑战一下~ 或许当你看到这篇博文的时候活动已经失效了,所以 ...

  7. 一行代码搞定ThoughtWorks面试题

    今天在微博看到一道有趣的题目.作为python的脑残粉,自然手痒. 题目在这里. FizzBuzzWhizz 你是一名体育老师.在某次课距离下课还有五分钟时,你决定搞一个游戏.此时有100名学生在上课 ...

  8. 对Thoughtworks的有趣笔试题实践

    记得2014年在网上看到Thoughtworks的一道笔试题,当时觉得挺有意思,但是没动手去写.这几天又在网上看到了,于是我抽了一点时间写了下,我把程序运行的结果跟网上的答案对了一下,应该是对的,但是 ...

  9. 关于今天很热的--FizzBuzzWhizz

    今天早上到现在看到了3篇关于FizzBuzzWhizz的问题,第一篇是@程序媛想事儿(Alexia)[最难面试的IT公司之ThoughtWorks代码挑战--FizzBuzzWhizz游戏]其实题目不 ...

随机推荐

  1. [Java] final的意义

    1.如果一个数据既是static又是final,那么它会拥有一块无法改变的存储空间. 2.final data: 当final用于基本数据类型时,final让其值(value)保持不变,但是当用于ob ...

  2. [Java] HashMap遍历的两种方式

    Java中HashMap遍历的两种方式原文地址: http://www.javaweb.cc/language/java/032291.shtml第一种: Map map = new HashMap( ...

  3. PHP面向对象(一)

    一.类和对象 1.什么是类:类(class)是对一类事物的描述,是抽象.概念上的定义.是具有某些相同属性和功能行为的一些对象集合. 在面向对象的编程中,类是应该有一个类名并包括属性书名和功能说明两个主 ...

  4. 【开源项目9】ImageLoaderConfiguration详解

    ImageLoader类中包含了所有操作.他是一个单例,为了获取它的一个单一实例,你需要调用getInstance()方法.在使用 ImageLoader来显示图片之前,你需要初始化它的配置-Imag ...

  5. CF Soldier and Badges (贪心)

    Soldier and Badges time limit per test 3 seconds memory limit per test 256 megabytes input standard ...

  6. JavaScript--匿名函数和闭包(16)

    // 匿名函数:没有名字的函数; // 闭包:可访问一个函数作用域里的变量的函数; 一 匿名函数 // 普通函数 function box(){ // 函数名是box; return 'Lee'; } ...

  7. [老老实实学WCF] 第二篇 配置WCF

    老老实实学WCF 第二篇 配置WCF 在上一篇中,我们在一个控制台应用程序中编写了一个简单的WCF服务并承载了它.先回顾一下服务端的代码: using System; using System.Col ...

  8. Cocos移植到Android的一些问题-SQLite3数据库移植问题

    首选我们讨论一下SQLite3数据库移植问题.我们在第14章节介绍了在Win32平台使用SQLite3数据库,我们介绍了两种配置环境的方法:一种是使用Cocos2d-x提供的SQLite3库配置,另一 ...

  9. JavaScript学习笔记 - 进阶篇(1)- JS基础语法

    前言 JavaScript能做什么? 1.增强页面动态效果(如:下拉菜单.图片轮播.信息滚动等) 2.实现页面与用户之间的实时.动态交互(如:用户注册.登陆验证等) JS进阶篇学习什么? 在JavaS ...

  10. hdu 3665 Seaside floyd+超级汇点

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3665 题意分析:以0为起点,求到Sea的最短路径. 所以可以N为超级汇点,使用floyd求0到N的最短 ...