Uma versão simplista da calculadora de números em inglês
Tarefa
Escreva um programa que use uma string como entrada e produz o resultado da expressão.
Regras
A sequência de entrada será redigida e não numeral.
Não haverá parênteses.
A ordem do cálculo será dividida, multiplicada, subtraída e depois adicionada.
Para as mesmas operações, os cálculos devem ser feitos da esquerda para a direita.
Todos os números de entrada serão números inteiros de -999 a 999 (ambos inclusive)
A saída será um número inteiro de qualquer intervalo.
A divisão sempre será perfeitamente divisível e zero nunca será um denominador.
A restrição de caso para entrada é opcional. Você não precisa verificar a validade da entrada.
Formato numérico
0 to 20 -> zero,one,two...nineteen,twenty
21 to 99 -> twenty one,twenty two.....ninety eight,ninety nine
100 to 999 -> one hundred, one hundred one, one hundred two...one hundred ten....two hundred fifty....nine hundred ninety eight,nine hundred ninety nine
Para números negativos: adicione minus
ao seu equivalente positivo
Formato de Operação
Addition: one plus two
Subtraction: one minus two
Multiplication: one time two #Note that for one on the left of multiplication, it is one time and not times.
two times one hundred
Division: forty divided by two
Exemplos:
o/p <- input
20 four times five
35 twenty plus fifteen
70 fifty plus five times four
-90 minus one time ninety
25 twenty one minus minus four
45 ninety divided by two
700 one time seven hundred
555 one hundred eleven times two plus three hundred thirty three
99 one hundred plus minus one
45 forty five plus two hundred times zero
4 four
-3 three minus three minus three
Isso é código-golfe, então o código mais curto ganha
one times two
. Está usandotime
normal?Respostas:
JavaScript (ES6),
257252249235 bytesGuardado 3 bytes graças a @Shaggy
Experimente online!
Quão?
Números
Operadores
Interpretação
fonte
Perl 6 ,
170 139 129 128 124122 bytes-13 bytes graças ao nwellnhof!
Experimente online!
unival
para o resgate de novo! Isto é (atualmente) até mesmo batendo idiomas de golfe como05AB1E
!Explicação:
fonte
Python 2 ,
333...284277275 bytesExperimente online!
fonte
Wolfram Language
95 9482 bytes#
representa a entrada para a função pura.Se necessário,
StringReplace
substitui "tempo" com os tempos " "plus minus" com "menos"(através de"me "->"mes "
,"plus m"->"m
", respectivamente). Os formulários de substituição reduzidos, sugeridos porlirtosiast
, salvaram 12 bytes.Interpreter["SemanticExpression"]
faz todo o resto.fonte
"time "->"times "
para"me"->"mes"
e"plus minus"->"minus"
para"plus m"->"m"
?05AB1E ,
166147141139135 bytesMuito tempo .. Tentará jogar golfe daqui.
-4 bytes graças a @Emigna .
-2 bytes graças a @JoKing .
Experimente online ou verifique todos os casos de teste .
Explicação:
Veja este 05AB1E ponta do meu (seções Como usar o dicionário? , Como cordas compressa não faz parte do dicionário? E Como comprimir grandes inteiros? ) Para entender como
“¡×€µ‚•„í†ìˆÈŒšï¿Ÿ¯¥Š—¿áÓÁÏ“
,'…§
,'°¡
,.•4º»Ÿć'Rþн•
,Ž9o
, e“‰´Øè„Æ€ººß“
trabalho.Exemplo passo a passo:
two hundred twenty two divided by two times minus fifty seven plus three hundred eighteen minus minus ten
two hundred twenty two divided two times minus fifty seven plus three hundred eighteen minus minus ten
2 hundred twenty 2 divided 2 times minus fifty 7 plus 3 hundred 8een minus minus 10
2 hundred weny 2 divided 2 imes minus fify 7 plus 3 hundred 8een minus minus 10
2 hundred weny 2 divided 2 imes minus fify 7 plus 3 hundred 8+10 minus minus 10
2 *100 weny 2 divided 2 imes minus fify 7 plus 3 *100 8+10 minus minus 10
2 *100 2y 2 divided 2 imes minus 5y 7 plus 3 *100 8+10 minus minus 10
2 *100 2 *10 2 divided 2 imes minus 5 *10 7 plus 3 *100 8+10 minus minus 10
["2 *100 2 *10 2 "," 2 "," "," 5 *10 7 "," 3 *100 8+10 "," "," 10"]
[["2","","*100","2","*10","2",""],["","","2",""],["",""],["","5","*10","7",""],["","3","","*100","8+10",""],["",""],["","10"]]
[["2","*100","2","*10","2"],["2"],[],["5","*10","7"],["3","*100","8+10"],[],["10"]]
[["2*100","2*10","2"],["2"],"",["5*10","7"],["3*100","8+10"],"",["10"]]
eval
cada:[[200,20,2],[2],"",[50,7],[300,18],"",[10]]
[222,2,"",57,318,"",10]
dividedimesminusplusminusminus
[" /"," *"," -"," +"," -"," -"]
222 /2 * -57 +318 - -10
eval
a string e saída implicitamente:-5999.0
fonte
sfk ,
572449423 bytesTudo isso pode ter uma linha, mas para fins de leitura, usei novas linhas em vez de espaços.
Experimente online!
fonte