ThoughtWorks FizzBuzzWhizz 代码实现
当时拉钩网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. 让所有学生拍成一队,然后按顺序报数。
5. 学
生报数时,如果所报数字包含了第一个特殊数,那么也不能说该数字,而是要说相应的单词,比如本例中第一个特殊数是3,那么要报13的同学应该说Fizz。
如果数字中包含了第一个特殊数,那么忽略规则3和规则4,比如要报35的同学只报Fizz,不报BuzzWhizz。
<?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 代码实现的更多相关文章
- ThoughtWorks代码挑战——FizzBuzzWhizz游戏 通用高速版(C/C++ & C#)
最早看到这个题目是从@ 程序媛想事儿(Alexia) 的 最难面试的IT公司之ThoughtWorks代码挑战——FizzBuzzWhizz游戏 开始的,然后这几天陆陆续续有N个小伙伴发表了自己的文章 ...
- ThoughtWorks代码挑战——FizzBuzzWhizz
很久没发表过文章了,今天看到一篇文章 最难面试的IT公司之ThoughtWorks代码挑战——FizzBuzzWhizz游戏(C#解法) 看到LZ的2B青年代码,实在是惨不忍睹,故写篇文章来探讨下这类 ...
- 最难面试的IT公司之ThoughtWorks代码挑战——FizzBuzzWhizz游戏
最近互联网招聘平台拉勾网在五一期间推出个“最难面试的IT公司”代码挑战活动,评选出了5个最难面试的IT公司,即:ThoughtWorks.Google.Unisys.Rackspace.Cypress ...
- 最艰难的采访IT公司ThoughtWorks代码挑战——FizzBuzzWhizz游戏
最近的互联网招聘平台拉勾网在五月推出了"最艰难的采访IT公司"码挑战活动,评选出了5个最难面试的IT公司,即:ThoughtWorks.Google.Unisys.Rackspac ...
- 最难面试的IT公司之ThoughtWorks代码挑战——FizzBuzzWhizz游戏(C#解法)
原题 看到那么多人看到前面这么糟粕的代码各种不忍直视后,楼主还是把最终实现放在页首吧. Console.WriteLine("说出三个不同的特殊数,用','隔开 &q ...
- 拉勾网ThoughtWorks面试题代码实现
今天看到一个很有意思的面试活动(活动链接),不需要简历,只有一道编程题目,在线提交你的代码即可. 本菜鸟对面试不感兴趣,但题目让我很兴奋,特来挑战一下~ 或许当你看到这篇博文的时候活动已经失效了,所以 ...
- 一行代码搞定ThoughtWorks面试题
今天在微博看到一道有趣的题目.作为python的脑残粉,自然手痒. 题目在这里. FizzBuzzWhizz 你是一名体育老师.在某次课距离下课还有五分钟时,你决定搞一个游戏.此时有100名学生在上课 ...
- 对Thoughtworks的有趣笔试题实践
记得2014年在网上看到Thoughtworks的一道笔试题,当时觉得挺有意思,但是没动手去写.这几天又在网上看到了,于是我抽了一点时间写了下,我把程序运行的结果跟网上的答案对了一下,应该是对的,但是 ...
- 关于今天很热的--FizzBuzzWhizz
今天早上到现在看到了3篇关于FizzBuzzWhizz的问题,第一篇是@程序媛想事儿(Alexia)[最难面试的IT公司之ThoughtWorks代码挑战--FizzBuzzWhizz游戏]其实题目不 ...
随机推荐
- iOS UIwebView html 字符串转换
解析json字段是一段html串,平常解析出来都能在uiwebview上正常显示,这却出现以下状况,文本内容夹杂好多不需要显示的字符,例如: NSString*string =@"<s ...
- 工作流_JBPM之Helloword
环境:Eclipse 3.5 + java 6 + MySQL 5.5 + jBPM 4.4 1.建立 Java Project: 2.拷贝 XML配置文件放进工程目录: 3. 建立 JPDL ...
- u163是什么故障 佳能MX328 u163是什么意思?墨水打完了,我加了墨水后还是显示U163(请检查墨水-彩色)警告灯亮
U163:墨水已用完.请更换墨盒,然后关闭“扫描单元”(“机盖”).如果打印正在进行并希望继续打印,请在不取出墨盒的情况下按 [Stop] (停止) 按钮至少 5 秒. 然后可以在墨水用完的情况下继续 ...
- nodejs(一) 简单登录验证 使用mongoose 操作MongoDB
---恢复内容开始--- 开发使用webstorm 9 新建nodejs+express 项目 newfarmer 文章目录 配置Mongoose 创建目录及文件 插入数据,POST提交JSON增加 ...
- ajaxFileUpload 报这错jQuery.handleError is not a function 博客分类: WEB前端jquery
ajaxfileuploadhandleError 今天刚打个一个技术群,里面有人问标题上的问题,嘿,我恰好遇过,现在大家至少也在用jquery1.9以上的版本,ajaxfileupload的版本早 ...
- Java中String常用方法
java中String的常用方法1.length() 字符串的长度 例:char chars[]={'a','b'.'c'}; String s=new String(chars); int len= ...
- .net C# 网页播放器 支持多种格式 媒体播放器 播放器 代码
.avi格式代码片断如下:<object id='video' width='400' height='200' border='0' classid='clsid:CFCDAA03-8BE4- ...
- return,exit,die
return:代表退出某个函数,但是函数体外的语句仍然需要执行. exit:退出程序,但是不从内存中卸载,exit其实也是可以输出语句的,加一个括号即可. die:退出程序,并且从内存中卸载.
- Android文字转语音
虽然视觉上的反馈通常是给用户提供信息最快的方式,但这要求用户把注意力设备上.当用户不能查看设备时,则需要一些其他通信的方法.Android提供了强大的文字转语音Text-to-Speech,TTS A ...
- OSPF路由汇总和默认路由设置
目标 掌握OSPF路由汇总的配置 掌握OSPF默认路由的配置 一.——区域间汇总 配置IP,R2四个环回口 R1(config)#inter s1/0 R1(config-if)#ip add 200 ...