Desafio
Escreva uma calculadora que receba informações de forma verbal (como se pode falar uma equação) e também produza formas verbais (como se pode dizer um número).
Regras
A calculadora deve ser capaz de:
- adicione, subtraia, multiplique e divida
- lidar com operandos entre um milhão e um milhão negativos
- lidar com saídas entre um bilhão e um bilhão negativos
- manipular pontos decimais em sua entrada e colocá-los corretamente em sua saída
- lida com a saída decimal na casa dos centésimos, arredondando onde for necessário
Todas as operações que produzem resultados fracionários devem arredondar para o centésimo mais próximo (idêntico à formatação de saída).
Relate com a saída "E" (por erro) quando a entrada causaria falha no programa devido a formatação incorreta ou divisão por 0; basicamente, o programa não deve travar com entradas ruins, porque isso seria uma péssima calculadora.
A calculadora é permitida , mas não é obrigada a relatar erros quando operandos ou saída escapam de seus limites. Isso visa simplificar o problema, mas se você não concordar comigo, fique à vontade para criar uma calculadora capaz de lidar corretamente com maiores operandos e saídas sem relatar erros.
Saída "E" no caso de um operando para uma operação exceder os limites definidos para operandos.
Saída "E" no caso de a saída exceder os limites descritos para as saídas
A maneira como o programa lida com a distinção entre maiúsculas e minúsculas e os espaços em branco fica a cargo do jogador, assim como a escolha do inglês britânico ou americano. 1 1
Os programas que ignoram a implementação da calculadora usando um idioma ou biblioteca que já implementou a funcionalidade descrita acima serão inelegíveis para a vitória.
Vencedora
O programa com o menor número de caracteres vence.
Exemplos
Entrada: dois mais dois
Saída: quatro
Entrada: vinte e um ponto cinco menos um ponto cinco
Saída: vinte
Entrada: um menos dois
Saída: um negativo
Entrada: cinco vezes cinco
Saída: vinte e cinco
Entrada: vinte e cinco dividido por cinco
Saída: cinco
Entrada: dois mais dois menos cinco vezes cinco dividido pelo ponto zero negativo cinco
Saída: dez
Entrada um milhão de vezes mil
Saída: um bilhão
Entrada: um milhão de vezes mil mais uma
Saída: E
Entrada: dois milhões mais um milhão
Saída: E
Entrada: um milhão mais um milhão mais um milhão
Saída: E
two plus two minus five times five divided by negative zero point five
->2 + 2 - 5 * 5 / -0.5
->54
.one million one
na entrada ouone billion one
na saída? Além disso, o limite 1e6 ou 1e9 também se aplica a resultados intermediários?one hundred divided by three point nought
? (Além disso, por que é a saída do último exemploE
, em vez dethree million
?)Respostas:
Primeiro de tudo, isso é totalmente barato e não completo para as especificações.
requer a
--disable-web-security
bandeira no chrome, +22Javascript 509 + 22 = 531
O primeiro fora da especificação é bem como o exemplo de saída
a entrada
two plus two minus five times five divided by negative zero point five
saídasQualquer outro caso deve ser tratado bem (agora), isso ainda é bastante destrutivo, só queria que ele fosse consertado.
Ah, e se você realmente testá-lo, pode levar alguns segundos, pois carrega a página completa do Wolfram Alpha até duas vezes.
Bem, pode haver muito o que melhorar.
fonte
Python, 982
Eu acho que funciona como deveria, de acordo com as especificações, mas provavelmente existem mais alguns bugs. Pode agir de maneira estranha para entrada> = um bilhão ou para quaisquer palavras inesperadas que ele interpreta incorretamente.
Aqui está uma versão um pouco mais legível, com algumas alterações:
fonte
Aqui vamos nós. Jogar golfe na versão anterior quebrou, mas agora estamos de volta online. Tenho certeza de que pode ser ainda mais jogado. Vou trabalhar mais amanhã. Foi bastante difícil fazê-lo funcionar corretamente, sem jogar golfe, e meus olhos estão cansados de encará-lo. Haha
Java - 3220
Com quebras de linha e guias
fonte