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 -
code-golf
number
arithmetic
integer
code-golf
math
number
geometry
code-golf
grid
code-golf
math
number
sequence
primes
code-golf
sequence
kolmogorov-complexity
code-golf
string
ascii-art
alphabet
code-golf
math
sequence
integer
code-golf
number-theory
integer
natural-language
code-golf
date
code-golf
function
code-golf
ascii-art
code-golf
math
number-theory
primes
classification
code-golf
array-manipulation
decision-problem
matrix
code-golf
number
code-golf
code-golf
ascii-art
matrix
code-golf
string
code-golf
sequence
base-conversion
code-golf
code-golf
math
number-theory
combinatorics
integer-partitions
code-golf
integer
binary
base-conversion
code-golf
integer
base-conversion
palindrome
code-golf
code-golf
integer-partitions
code-golf
math
ascii-art
matrix
code-golf
number
sequence
number-theory
matrix
code-golf
interpreter
code-golf
graph-theory
code-golf
ascii-art
decision-problem
code-golf
division
code-golf
array-manipulation
primes
code-golf
string
ascii-art
code-golf
primes
counting
code-golf
matrix
unicode
code-golf
source-layout
code-golf
grammars
code-golf
string
cops-and-robbers
regular-expression
obfuscation
string
code-challenge
cops-and-robbers
regular-expression
code-golf
kolmogorov-complexity
game
card-games
code-golf
kolmogorov-complexity
code-golf
array-manipulation
matrix
code-challenge
cops-and-robbers
code-challenge
decision-problem
cops-and-robbers
code-golf
permutations
Kevin Cruijssen
fonte
fonte
--
. Por exemplo1991 = 2, -/3 = 3
. (Muitas línguas confunda isso com o operador de decremento.)91 19
se a solução estiver9--9
e de espaço9119
se a solução9229
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-
?Respostas:
Perl 6 ,
132113 bytesAgradecimentos a Jo King por -19 bytes.
Experimente online!
Input é uma sequência de equações separada por vírgula e uma sequência de resultados separados por vírgula (espero que esteja tudo bem). Saída é uma sequência que contém os dois botões trocados.
Alças corretamente
--
. Produto poderá falsos positivos para---
,++
,**
ou//
, mas eu não poderia vir acima com um caso de teste.fonte
---
;++
;**
;//
; ou outras coisas como*+
etc. O único não dígito duplo adjacente que você terá que suportar é--
. Além disso, se eu entendo seu código corretamente, você não precisará.subst('-','- '
, pois-5--15
é permitido inserir o caso de teste com um espaço. Você não é o primeiro a adicionar código para adicionar esse espaço programaticamente, por isso vou especificar isso mais claramente na descrição do desafio.**
porque elas têm um significado como expressões Perl 6 e podem causar falsos positivos.1992 = 1
poderia ser1**2 = 1
ou1//2 = 1
, por exemplo. Asubst
é para casos em que a equação correta contém--
, por exemplo, o novo caso de teste que você adicionou.JavaScript (ES7),
159158 bytesEdit: nova versão para cumprir com as regras atualizadas sobre
--
1 byte salvo graças a @Shaggy
Recebe entrada na sintaxe de curry,
(e)(r)
onde e é a matriz de equações er é a matriz de resultados esperados. Retorna uma matriz de caracteres.Casos de teste
Mostrar snippet de código
Formatado e comentado
fonte
eval
seguintetry / catch
: codepen.io/anon/pen/rzRrLp .1991 = 2
. A solução deve estar1--1 = 2
com9
e-
trocada.Python 2 ,
204,199,193,173, 165 bytesExperimente online!
fonte
Oracle SQL e PL / SQL, 458 bytes
Compile a função PL / SQL (210 bytes):
Execute o SQL (248 bytes):
Depois de criar uma tabela
T
com os dados de teste:Saída:
Versão anterior :
Assumiu uma entrada de string como
'123 = 3'
:A mesma função PL / SQL e o SQL (322 bytes):
Depois de criar uma tabela
T
com os dados de teste:Saída:
Atualização - Teste :
SQL Fiddle
Configuração do esquema do Oracle 11g R2 :
Consulta 1 :
Resultados :
Consulta 2 :
Resultados :
Consulta 3 :
Resultados :
Consulta 4 :
Resultados :
Consulta 5 :
Resultados :
Consulta 6 :
Resultados :
fonte
||REPLACE(x,'--','- -')||
, o formato de entrada / saída é flexível; portanto, você pode inserir-5--15
como-5- -15
quiser. Além disso, qual seria a maneira mais fácil de verificar se todos os casos de teste funcionam, especialmente o último? Um link TIO é de alguma forma possível?||REPLACE(x,'--','- -')||
usado para uma equação correta esperada, como o último caso de teste que eu adicionei?--
inicia um comentário no SQL; portanto, os casos de teste precisam ser formulados para que--
nunca ocorram na equação (substituindo-a por- -
) ou precisam de alguma codificação defensiva para fazer isso.13116/3 = -1
seria necessário escrever131 16/3 = -1
para remover essa chamadaREPLACE
.PowerShell,
222209192 bytesScript de teste e explicação:
Saída:
fonte
05AB1E , 21 bytes
Introduza como duas listas, primeiro sendo as equações e segundo sendo os resultados. Saída como uma lista filtrada de pares com ambas as rotações (ie
[["2","*"],["*","2"]]
).Experimente online ou verifique todos os casos de teste . (OBSERVAÇÃO: Usa a versão herdada de 05AB1E no TIO, porque
.E
está desativada na versão mais recente no TIO. Por isso, um adicionalï
(conversão para número inteiro) é adicionado, porque na versão herdada de 05AB1E1.0
e1
nas listas internas não eram iguais .)Explicação:
fonte