Introdução
Minha calculadora está se comportando de forma estranha. Às vezes, quando digito um, 8
ele exibe a 2
. E às vezes, quando digito em, 6
ele exibe a +
. Alguns botões estão misturados!
Alguém poderia me ajudar a determinar qual?
Desafio:
Entrada: lista de equações incorretas , com resultados corretos .
Saída: os dois botões que são trocados.
Por exemplo:
Uma entrada pode ser:
123 = 3
8423 = 252
4+4 = 8
4*7-10 = 417
9/3 = 3
42-9 = -36
Para os quais os resultados esperados são: 2
e *
.
Por quê? Porque TODAS as equações estariam corretas se trocássemos os 2 e *:
1*3 = 3
84*3 = 252
4+4 = 8
427-10 = 417
9/3 = 3
4*-9 = -36
Regras do desafio:
- A entrada pode estar em qualquer formato razoável. Pode ser uma única sequência com espaço delimitado; uma lista de strings ou matriz; uma lista com equações e outra lista com os resultados corretos. Sua chamada. Por favor, indique qual formato de entrada você usou!
NOTA: Isso também significa que você tem permissão para inserir o caso de teste-5--15
como-5- -15
ou-5 - -15
. No entanto, um número resultante--
deve ser inserido sem espaços ou com um espaço entre cada dígito. Portanto, o caso de teste9119
pode ser inserido como9119
ou9 1 1 9
(o motivo91 19
não é permitido é porque você pode ser guiado pelo espaço para encontrar- -
). Portanto, os espaços são (um pouco) opcionais e permitidos. - O formato de saída também pode estar em qualquer formato razoável. Pode ter dois caracteres; uma única sequência de dois caracteres; uma lista de cadeias contendo os dois caracteres. Sua chamada. Novamente, indique qual formato de saída você usou!
- Você tem permissão para usar quaisquer 14 saídas distintas para as quais é mapeado
0123456789+-*/
. Portanto, você pode gerar dois números inteiros distintos, se desejar (novamente, especifique o mapeamento que você usou, se houver). - Você só precisa suportar números inteiros. Portanto, não haverá casos de teste como
1/8=0.125
ou1/8=0
. - Operandos aritméticos que você terá que suportar: adição (
+
); subtração (-
); multiplicação (*
ou×
ou·
); divisão (/
ou÷
). (NOTA: Os caracteres entre parênteses são adicionados apenas como esclarecimento.) - Você terá que suportar números negativos. Este meio
-
pode ser interpretado na equação como um operando matemático ou um indicador negativo. - Você pode assumir que as equações incorretas fornecidas e as supostas equações corretas são sempre válidas (portanto, não haverá coisas como
4-/2
ou9+-+8
por exemplo). - As equações de entrada incorretas podem conter uma divisão por 0, mas as equações corrigidas e esperadas nunca conterão uma divisão por 0.
- As equações de entrada incorretas já podem estar corretas, mesmo se você trocar os botões pretendidos novamente.
- Uma determinada equação de entrada pode ser irrelevante para os botões serem trocados (como as equações
4+4=8
e9/3=3
, com os botões trocados2
e*
). - Você pode assumir que sempre haverá apenas uma troca possível que pode ser feita com os casos de teste fornecidos.
- Os dois botões a serem trocados sempre estarão presentes em pelo menos uma das equações incorretas.
Regras gerais:
- Isso é código-golfe , então a resposta mais curta em bytes vence.
Não permita que idiomas com código de golfe o desencorajem a postar respostas com idiomas que não sejam codegolf. Tente encontrar uma resposta o mais curta possível para 'qualquer' linguagem de programação. - As regras padrão se aplicam à sua resposta, para que você possa usar STDIN / STDOUT, funções / método com os parâmetros adequados e programas completos do tipo retorno. Sua chamada.
- As brechas padrão são proibidas.
- Se possível, adicione um link com um teste para o seu código.
- Além disso, adicione uma explicação, se necessário.
Casos de teste:
Input:
123 = 3
8423 = 252
4+4 = 8
4*7-10 = 417
9/3 = 3
42-9 = -36
Output: 2 *
Input:
4/2 = 6
3/0 = 3
0/8+2 = 4
95-5 = 90
4+2 = 2
Output: + /
Input:
7+4 = 11
5-15 = 46
212-23 = -2121
Output: 1 -
Input:
4+8/2-9*1 = -5
99/3-13 = 20
1+2+3+4 = 10
4-3-2-1 = -6
Output: 2 4
Input:
18/18 = 1
98-8 = 90
55*88 = 4840
-5--15 = 10
Ouput: 5 8
Input:
9119 = 18
5-3 = 513
8*-9 = 152
13116/3 = -1
Output: 1 -
--
. Por exemplo 1991 = 2, -/3 = 3
. (Muitas línguas confunda isso com o operador de decremento.)
91 19
se a solução estiver 9--9
e de espaço 9119
se a solução 9229
exigir conhecimento sobre a solução ao criar os casos de teste. Se isso fosse permitido, eu poderia simplesmente adicionar um espaço apenas antes dos caracteres trocados e a solução poder ser derivada imediatamente do caso de teste.
*
e /
antes +
e binário -
?