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游戏]其实题目不 ...
随机推荐
- Handle类的用法
android中Handle类的用法 当我们在处理下载或是其他需要长时间执行的任务时,如果直接把处理函数放Activity的OnCreate或是OnStart中,会导致执行过程中整个Activity无 ...
- 【Android 界面效果38】android:inputType常用取值
<EditText android:layout_width="fill_parent" android:layout_height="wrap_content&q ...
- 机房收费系统之uml图——初版
说起uml图,在我心中最难的当属类图无疑.虽然敲了三层的小例子,但真正让把三层和uml图结合起来,并且还要考虑设计模式的时候,总是让人有一种无从下手的感觉,不过还好,通过这半个多月的思考与探索(竟然用 ...
- Plupload文件上传组件使用API
Plupload有以下功能和特点: 1.拥有多种上传方式:HTML5.flash.silverlight以及传统的<input type=”file” />.Plupload会自动侦测当前 ...
- oledb,odbc简易实体生成器.
DataSet to code file(C#)工具. 方便自己写的odbc或者oledb的东西用的. sql server或者oracle等大数据库已经有EF的支持. 一些其他数据库还是用oledb ...
- Javascript addEventListener dispatchEvent
测试代码:分别在嵌套的元素body,div#level1,div#level2,div#level3上附加事件,仅在chrome中测试通过. <!DOCTYPE html> <htm ...
- C# 简单邮件群发通用类
public static class Email { /// <summary> /// 发件人 /// </summary> public static string ma ...
- kettle菜鸟学习笔记1----相关准备知识
最近导师让给师弟师妹做个关于kettle的培训,瞬间囧了,kettle我也只是简单学过,连皮毛都算不上,而且,上次使用kettle已然是去年的事了…… 没办法,只好重新学习下,好在之前写了几个文档,也 ...
- 拓展开源库SwipeToLoadLayout实现EmptyView和Empty时自动禁用LoadMore
Android应用开发中,经常需要使用到界面的下拉刷新和上拉加载,在support v7之前,一般都是用ListView去做列表视图,而ListView对EmptyView是提供支持的,并且有许多开源 ...
- Jquery实现循环删除Reaper某一行
一.实现的效果图:(点击删除图标,juery实现删除整行) 二.MVC开发模式 SQLServer层 #region 删除 /// <summary> /// 根据自动编号删除快递线路信息 ...