Às vezes, é útil executar um problema de matemática com várias entradas. O objetivo deste desafio é criar um programa que facilite essa tarefa.
Expressões geradoras de número
Você deve suportar 3 tipos de expressão:
- Gerador de número único: muito simples, apenas um número literal
- Gerador de vários números: Um pouco mais complicado. Eles estão cercados por colchetes (
[]
). Os números são,
separados por vírgula ( ) na expressão. Exemplo[-1,2,3.26]
. - Gerador de alcance: este é cercado por chaves (
{}
). Ele terá 3 números separados por vírgula. O formato desta expressão é{start,stop,step}
.start
estop
são inclusivos.
Regras para avaliação
- Você deve suportar a ordem das operações. ( https://en.wikipedia.org/wiki/Order_of_operations#Definition )
- Você não precisa apoiar parênteses.
- Qualquer número de espaços pode ocorrer na expressão.
- Você deve oferecer suporte a números de ponto flutuante (qualquer que seja a precisão padrão de seu idioma).
- Divisão por
0
resultados emNaN
(não um número).
Seu programa deve suportar multiplicação ( *
), divisão ( /
), adição ( +
) e subtração (-
).
Resultado
Cada linha de saída é uma das combinações dos geradores. O formato é a expressão (com os números reais substituídos nela) seguida por um sinal de igual (=
) e o resultado da avaliação. Todas as combinações dos geradores devem ser representadas na saída.
Exemplos
( >>>
indica entrada)
>>>3 * [3,2]
3 * 3 = 9
3 * 2 = 6
>>>{1,2,3}
1 = 1 <-- this is because 1 + 3 > the end
>>>{0,2,1} + {0,1,1}
0 + 0 = 0
1 + 0 = 1
2 + 0 = 2
0 + 1 = 1
1 + 1 = 2
2 + 1 = 3
>>>6/[2,3]
6/2 = 3
6/3 = 2
>>>{1.5,2.5,0.5}
1.5 = 1.5
2 = 2
2.5 = 2.5
>>>3-{6,5,-1}
3-6 = -3
3-5 = -2
>>>5/{-1,1,1}
5/-1 = -5
5/0 = NaN
5/1 = 5
>>>4.4 / [1,2.2] + {0,2,1}
4.4 / 1 + 0 = 4.4
4.4 / 1 + 1 = 5.4
4.4 / 1 + 2 = 6.4
4.4 / 2.2 + 0 = 2
4.4 / 2.2 + 1 = 3
4.4 / 2.2 + 2 = 4
>>> [1,2] / 0 + 5
1 / 0 + 5 = NaN
2 / 0 + 5 = NaN
O programa precisa ser curto para que eu possa memorizá-lo e usá-lo em qualquer lugar.
Agradeço a @PeterTaylor e @geokavel por me ajudarem com este post na sandbox
x/0
resulta em uma avaliação instantânea do NaN ou tenho que tratar o NaN como um valor?