Я изо всех сил старался сделать эту работу весь день ... Что-то кажется неправильным с выходом, как вы ожидали.Почему моя программа fizzbuzz работает неправильно?
Вывод, который я сейчас:
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
И Я также придерживаюсь строгих правил программирования.
Спасибо!
Я просто хотел бы помочь .. –
Я не думаю, что это как у объявить глобалам в JavaScript. вам лучше удалить «ПЕРЕМЕННЫЕ». полностью и функции будут глобальными в любом случае – softwarenewbie7331
Это nodejs. https://nodejs.org/api/globals.html –