Eu tenho um problema no trabalho. Eu preciso comparar dois números que vêm como seqüências de caracteres de dois bancos de dados diferentes. Os números podem vir com zeros à esquerda e / ou espaços à esquerda / à direita. Então eu posso ter "0001 "
de um banco de dados e " 1 "
do outro.
Resolvi o problema em C # com o seguinte código:
Func<string, string, bool> f = (a,b) => int.Parse(a.Trim()) == int.Parse(b.Trim())
O desafio
Este é um desafio realmente simples, adequado para iniciantes e qualquer tipo de linguagem esotérica. Dado dois números como cadeias que podem vir com zeros à esquerda e / ou espaços à esquerda / à direita, escreva o código mais curto que verifica se as duas cadeias representam o mesmo número.
- As entradas precisam ter duas strings ou o equivalente no seu idioma (uma matriz de caracteres é OK) e sempre representam valores inteiros maiores que zero.
- A saída deve ter quaisquer dois valores consistentes que representem um valor de verdade e um valor de falsey.
Exemplos
A B Result
----------------------------
"0001" "1 " true
"1450" "1450 " true
"0010001 " " 10001 " true
"0010000" " 10 " false
"101023" "101024" false
Este é o código-golfe , portanto, pode ganhar o código mais curto para cada idioma!
Respostas:
Javascript , 11 bytes
Abusando um pouco das regras de elenco do Javascript;
+a
coagea
em um tipo numérico.-6 bytes graças a Shaggy e Martin Ender ♦
Também uma tomada legal por LiefdeWen :
fonte
c=
, e o curry também é bom, para que você possa usar ema=>b=>...
vez de(a,b)=>
. Finalmente, meu JavaScript está um pouco enferrujado, mas acho que algo como!(a-b)
também funcionaria?a
para um tipo numérico com unário+
.05AB1E , 1 byte
Experimente online!
Explicação
A comparação por igualdade
Q
tentará avaliar automaticamente as strings como ints antes de comparar.fonte
|0+Q
era curto o suficiente ...Linguagem de script da operação Flashpoint , 33 bytes
Ligue para:
Saída:
Versão alternativa (41 bytes):
Ainda 5 bytes mais curto que o mais simples
f={t=_this;call(t select 0)==call(t select 1)}
39 bytes:
count
(que retorna o tamanho de uma matriz) funciona em vez deforEach
, porque você pode atribuir um "lambda" usado como condição para contar apenas os elementos da matriz que atendem a essa condição. A "condição" usada neste caso não é uma condição válida, mas não importa aqui porque não causa um erro e o valor de retorno docount
não é necessário.fonte
Táxi , 488 bytes
Experimente online!
Ungolfed:
O táxi é (relativamente) adequado para esse desafio, porque as strings são o único tipo de entrada ou saída permitido.
The Babelfishery
é o que converte seqüências de caracteres em número (e vice-versa) e lida com a remoção de todos os espaços e zeros à esquerda. Ele também manipulará números negativos se o-
for imediatamente antes do primeiro dígito. Depois disso,Equal's Corner
verifica os dois valores entre si eWriter's Depot
fornece a saída no formato de sequência. A saída é1
para verdade e0
para falsey.fonte
error: The boss couldn't find your taxi in the garage. You're fired!
?Go to Taxi Garage:n 1 r 1 l 1 r.
C (gcc) , 27 bytes
Com
-O0
(que é a configuração padrão).Experimente online!
C, 32 bytes
Experimente online!
fonte
char
, e quando você passa uma matriz para uma função, na verdade você passa o ponteiro para o primeiro elemento da matriz. Aqui, os ponteiros para aschar
matrizes são implicitamente convertidos em números inteiros quando passados para a função, e os números inteiros são convertidos novamente em ponteiros ao chamaratoi
.s=foo;
vez dereturn foo;
precisar rotular isso como "x86 gcc com otimização desativada", não apenas "C", porque esse código não retorna um valor, exceto como um artefato de implementação.s=retval;
vez dereturn retval;
realmente quebrar. Parece que a lógica interna do gcc (com-O0
apenas) trata a última expressão como o valor de retorno, talvez da mesma maneira que uma expressão de instrução GNU C funciona. (Mas requers=
). No ARM32, calcula o==
resultado emr3
e, em seguida, usa um extramov r0, r3
para tornar esse o valor de retorno! Portanto, não é um hack específico para x86, é umgcc -O0
hack que o gcc parece se esforçar para oferecer suporte.J , 4 bytes
Compare
=
depois de&
avaliardo
. Também pode ser=&".
Experimente online!fonte
-10
) e negativos como J os entende (por exemplo_10
) devido à maneira como a monádica-
funciona.Retina , 11 bytes
Experimente online!
A entrada é separada por avanço de linha, mas o conjunto de testes usa separação por vírgula por conveniência. Imprime
1
pela igualdade e0
pela desigualdade.Explicação
Converta cada linha em unário. Isso ignora zeros e espaços à esquerda.
Desduplicar: limpe a segunda linha se ambas forem iguais.
Verifique se a sequência agora termina em um avanço de linha.
fonte
Python 3 , 25 bytes
Experimente online!
fonte
Flak cerebral , 22 bytes
Experimente online!
Guardado 4 bytes graças a Jo King .
fonte
Triangularidade , 17 bytes
Experimente online!
A triangularidade é, pela primeira vez, competitiva!
Como funciona
A triangularidade exige que o código tenha uma distribuição triangular dos pontos. Ou seja, o comprimento de cada linha deve ser igual ao número de linhas multiplicado por 2 e decrementado, e cada linha deve ter (em cada lado) um número de pontos igual à sua posição no programa (a linha inferior é a linha 0, o acima é a linha 1 e assim por diante). Tendo isso em mente, vamos analisar como o código funciona:
fonte
Alice , 7 bytes
Experimente online!
Qualquer separador sem dígito funciona. Imprime
1
para igualdade ou0
não.Explicação
fonte
Japonês , 3 bytes
Tente
Converte a segunda entrada em um número inteiro e compara a igualdade com a primeira.
fonte
APL (Dyalog) , 4 bytes
3 bytes salvos graças a @ Adám
Experimente online!
fonte
=/⍎¨
jq, 24 caracteres
As 2 strings são passadas como itens de uma matriz.
Exemplo de execução:
Experimente online! ( Todos os casos de teste )
fonte
Casca , 3 bytes
Experimente online!
Explicação
fonte
Ër
também funcionará.PowerShell , 20 bytes
Semelhante à resposta JavaScript, apenas mais porque o PowerShell não tem currying. Usa
+
para converter a primeira string em número inteiro e, em seguida, os-eq
uals convertem automaticamente a segunda string em número inteiro. A saída é verdadeira / falsa.Experimente online!
fonte
PowerShell , 19 bytes
Experimente online!
-join
o array de argumentos ($args
) com a representação de string do operador de comparação (-eq
) e avalie a expressão comInvoke-Expression
(iex
).fonte
+
passa sem a necessidade de converter para inteiro, enquanto o meu quebra se eu remover o, uma vez que está fazendo verificação de igualdade de string.00009
e077
o código resultante for00009 -eq077
, um trecho de código perfeitamente válido. Você está lidando diretamente com a string no tempo de execução, portanto, deve convertê-la primeiro para que a operação seja feita numérica.Q (Kdb +), 13 bytes
Explicação
(x; y): uma lista das duas entradas.
"J" $: convertendo cada entrada para um tipo longo (7j) da string (10c), que pode interpretar corretamente
o espaço em branco e os 0s iniciais.
= /: verifica a igualdade sobre os elementos em uma lista (cada par subsequente).
Como existe apenas um par, retorna um único booliano 0b / 1b.
fonte
{=/["J"$(x;y)]}
para 15 bytes ... Embora para 8 bytes você possa ter isso:(~/)"J"$
se você estiver apenas usando o REPL e passando as entradas como uma lista de strings .. . ou{(~/)"J"$x}
para 11 como uma função.T-SQL, 35 bytes
De acordo com nossos padrões , os dados são inseridos por meio de tabela preexistente
t
comvarchar
camposa
eb
.Retorna
1
se eles corresponderem,0
se não corresponderem.Algumas funções matemáticas do SQL (incluindo
ABS
,FLOOR
eCEILING
) farão uma conversão implícita em numérico se forem fornecidos parâmetros de string, isso é mais curto que um explícitoCAST(a AS INT)
ouCONVERT(INT,b)
e funciona nesse caso, pois sabemos que os valores de entrada são sempre positivos.IIF
é específico para o MS SQL 2012 e superior, portanto, não há garantia sobre outras implementações.fonte
Excel VBA,
2716 bytes-9 Obrigado a @Nayrb e @TaylorScott
Onde você insere os valores nas células com
'string
.Ondex
ey
são as seqüências de entrada ez
é uma saída booleana.Se CInt (x) = CInt (y) Então z = 1
Usando CIntfonte
?[Int(A1)=Int(B1)]
que leva a entrada dos intervalosA1
eB1
e saídas para a janela imediata o VBER ,
2827 bytesLê números como strings, converte-os em duplas e verifica se a diferença não é zero.
Experimente online!
-1 byte graças a Giuseppe
fonte
""
é suficienteLua , 20 bytes
Experimente online!
fonte
Haskell , 20 bytes
-11 bytes graças a Laikoni. -2 bytes graças ao Zgarb.
Experimente online!
fonte
read
:a#b=0+read a==read b
Gema , 21 caracteres
Não é booleano no Gema. Enquanto o
@get-switch{}
/@set-switch{}
funções usam 0 e 1 para representar os status da chave, também são usados 0 e 1.As 2 strings são passadas em linhas de entrada separadas.
Exemplo de execução:
fonte
Perl 5, 9 + 1 (
-p
) = 10 bytesexperimente online
fonte
Empilhados , 8 bytes
Experimente online!
Explicação
fonte
Anexo , 11 bytes
Experimente online!
Isso requer uma matriz de seqüências de caracteres, como
V["0001", "1 "]
. Em termos simples,Map&:N
é uma função que mapeiaN
seu argumento eSame
verifica se a matriz contém apenas membros iguais. (Curiosidade: essa função funciona para mais de 2 argumentos de string).fonte
SNOBOL4 (CSNOBOL4) , 42 bytes
Experimente online!
Saídas 1 para verdade, nada para falsey. Como
(space) é o operador de concatenação no SNOBOL,
EVAL
um número com espaços à esquerda / à direita gera o próprio número e também cuida de todos os zeros à esquerda.EQ
testa a igualdade numérica, configurando condicionalmenteOUTPUT
como 1 ativadoSuccess
.fonte
Sinclair ZX81 / Timex TS1000 / 1500 BASIC, ~ 29 bytes BASIC tokenizados
Nova solução graças a Neil (obrigado pela dica).
Essa solução requer entrada do usuário; portanto, insira duas strings com espaços em branco e / ou zeros à esquerda, ou insira duas strings de valor numérico não igual;
0
é falso e1
verdadeiro quando a linha três compara o valor de cada sequência inserida.Solução antiga: Sinclair ZX81 / Timex TS1000 / 1500 BASIC, ~ 46 bytes BASIC tokenizados
A verificação real é feita na linha três, que tem apenas ~ 16 bytes BASIC tokenizados; portanto, inserir cada par de casos de teste usando o modo direto economizará ~ 30 bytes da listagem. Observe que essa contagem de bytes não inclui o
var stack
.fonte
INPUT A$
eINPUT B$
? Também não acho que você precise dos()
.APL (NARS2000) , 7 bytes
Bem, sim, eu sei que o NARS2000 não pode competir com o Dyalog aqui, pois usa Unicode, mas achei que preferia me exibir
⍥
(chamado Composition no NARS2000, mesmo que não esteja relacionado à composição da função), algo que o Dyalog não faz. tem como um built-in e eu nunca vi usado aqui. No Dyalog, ele deve ser implementado como{(⍵⍵⍺)⍺⍺⍵⍵ ⍵}
. O que ele faz é chamar a função monádica do operando da direita no argumento esquerdo e direito e, em seguida, chamar a função diádica do operando da esquerda nos resultados.Aqui, o operando direito é
⍎
( Executar , ou seja, eval) e o operando esquerdo é=
( Igual a , ou seja, verifique se seus argumentos são iguais).fonte