2015-07-03 2 views
-4

Я изо всех сил старался сделать эту работу весь день ... Что-то кажется неправильным с выходом, как вы ожидали.Почему моя программа 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

И Я также придерживаюсь строгих правил программирования.

Спасибо!

+0

Я просто хотел бы помочь .. –

+0

Я не думаю, что это как у объявить глобалам в JavaScript. вам лучше удалить «ПЕРЕМЕННЫЕ». полностью и функции будут глобальными в любом случае – softwarenewbie7331

+0

Это nodejs. https://nodejs.org/api/globals.html –

ответ

0
FUNCTION_CALL(VARIABLES.TRY_FIZZBUZZ, ARRAY_MAKE(NUM + OBJECT_LITERAL(2))); 

Изменение 2 к 1 ...

+0

Я чувствую себя глупо. –

Смежные вопросы