我一直在努力使这项工作一整天......有些事情似乎与你期望的输出一样。
我现在的输出:
1
FIZZ
BUZZ
7
FIZZ
11
13...
应该看起来像这样:
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz...
似乎正在跳过一些。
以下是代码:(JavaScript)
var VARIABLES = global;
global.VARIABLES = global;
VARIABLES.CONDITION_TRUE = function(func) {
return func;
}
VARIABLES.CONDITION_FALSE = CONDITION_TRUE;
VARIABLES.COMPARATOR = function(condition, if_true, if_false) {
return (condition ?
FUNCTION_CALL(if_true) : FUNCTION_CALL(if_false));
}
VARIABLES.FUNCTION_CALL = function(func, params) {
return func.apply(null, params);
}
VARIABLES.MEMBER_FUNCTION_CALL = function(object, name, params) {
return object[name].apply(object, params);
}
VARIABLES.ARITHMETIC = function(a, b, what) {
switch(what) {
case 'plus':
return a + b;
case 'minus':
return a - b;
case 'divide':
return a / b;
case 'multiply':
return a / b;
case 'mod':
return a % b;
default:
return a;
}
}
VARIABLES.ARRAY_MAKE = function(params) {
return arguments;
}
VARIABLES.OBJECT_LITERAL = function(a) {
return a;
}
var FUNCTION_DECLARATOR = function(func_name, func_params, func) {
VARIABLES[func_name] = new Function(func_params,
MEMBER_FUNCTION_CALL(func.toString(), 'slice', ARRAY_MAKE(
ARITHMETIC(
MEMBER_FUNCTION_CALL(func.toString(), 'indexOf', ARRAY_MAKE('{')),
1,
'plus'
),
MEMBER_FUNCTION_CALL(func.toString(), 'lastIndexOf', ARRAY_MAKE('}'))
)));
return VARIABLES[func_name];
}
FUNCTION_DECLARATOR('CHECK_RAND', ['RAND'], function() {
COMPARATOR(RAND > OBJECT_LITERAL(0.5), CONDITION_TRUE(function() {
FUNCTION_CALL(console.log, ARRAY_MAKE('YES'));
}),
CONDITION_FALSE(function() {
FUNCTION_CALL(console.log, ARRAY_MAKE('NO'));
}));
});
FUNCTION_CALL(VARIABLES.CHECK_RAND, ARRAY_MAKE(
FUNCTION_CALL(Math.random, null)
));
FUNCTION_DECLARATOR('FIZZ_OR_BUZZ', ['NUM'], function() {
COMPARATOR(ARITHMETIC(NUM, OBJECT_LITERAL(3), 'mod') == OBJECT_LITERAL(0), CONDITION_TRUE(function() {
FUNCTION_CALL(console.log, ARRAY_MAKE('FIZZ'));
}),
CONDITION_FALSE(function() {
COMPARATOR(ARITHMETIC(NUM, OBJECT_LITERAL(5), 'mod') == OBJECT_LITERAL(0), CONDITION_TRUE(function() {
FUNCTION_CALL(console.log, ARRAY_MAKE('BUZZ'));
}),
CONDITION_FALSE(function() {
FUNCTION_CALL(console.log, ARRAY_MAKE(NUM));
}));
}));
});
FUNCTION_DECLARATOR('TRY_FIZZBUZZ', ['NUM'], function() {
FUNCTION_CALL(VARIABLES.FIZZ_OR_BUZZ, ARRAY_MAKE(NUM));
COMPARATOR(NUM > OBJECT_LITERAL(100), CONDITION_TRUE(function() {
FUNCTION_CALL(console.log, ARRAY_MAKE('DONE'));
}),
CONDITION_FALSE(function() {
FUNCTION_CALL(VARIABLES.TRY_FIZZBUZZ, ARRAY_MAKE(NUM + OBJECT_LITERAL(2)));
}));
});
FUNCTION_CALL(VARIABLES.TRY_FIZZBUZZ, ARRAY_MAKE(OBJECT_LITERAL(1)));
这个是我一直在修改的地方:
FUNCTION_DECLARATOR('FIZZ_OR_BUZZ', ['NUM'], function() {
COMPARATOR(ARITHMETIC(NUM, OBJECT_LITERAL(3), 'mod') == OBJECT_LITERAL(0), CONDITION_TRUE(function() {
FUNCTION_CALL(console.log, ARRAY_MAKE('FIZZ'));
}),
CONDITION_FALSE(function() {
COMPARATOR(ARITHMETIC(NUM, OBJECT_LITERAL(5), 'mod') == OBJECT_LITERAL(0), CONDITION_TRUE(function() {
FUNCTION_CALL(console.log, ARRAY_MAKE('BUZZ'));
}),
CONDITION_FALSE(function() {
FUNCTION_CALL(console.log, ARRAY_MAKE(NUM));
}));
}));
});
我按照本指南实施了该计划:http://c2.com/cgi/wiki?FizzBuzzTest
我也遵守严格的编程指南。
谢谢!
答案 0 :(得分:0)
FUNCTION_CALL(VARIABLES.TRY_FIZZBUZZ, ARRAY_MAKE(NUM + OBJECT_LITERAL(2)));
将2改为1 ......