Problema:
Sua tarefa é decidir se, em uma sequência de números, cada número contém pelo menos um dos dígitos do número que o precedeu.
Por exemplo, o seguinte deve retornar verdade:
[1, 12, 203, 0, 30]
^ ^ Contains a 0
^ Contains a 2
^ Contains a 1
O seguinte deve retornar falsey:
[1, 32, 23, 34]
^ Doesn't contain a 1, therefore false
Seu envio pode ser uma função ou um programa completo.
Entrada:
A entrada pode ser qualquer tipo razoável de sequência. Uma matriz de números, uma matriz de cadeias, uma cadeia de números delimitada, etc.
Porém, a ordem é importante, portanto, qualquer estrutura que você escolher aceitar como entrada obviamente deve ter uma ordem definida.
A entrada pode ser obtida via stdin ou como argumento.
Você pode assumir:
todos os números serão inteiros não negativos
entrada sempre conterá pelo menos 2 números
os números de entrada não começarão com um 0
Saída:
A saída será um valor verdadeiro ou falso (conforme definido pelo seu idioma), representando se a especificação acima foi ou não atendida.
Os valores de verdade / falsey não precisam ser consistentes entre os testes.
Pode ser enviado para o stdout ou retornado.
Casos de teste:
True cases:
[1, 1, 1, 11, 111, 11, 1]
[12, 23, 34, 45, 56]
[65, 54, 43, 32, 21]
[123, 29, 9, 59, 55, 52, 2017, 2]
[1234567890, 19, 95, 5012, 23]
False cases:
[1, 2, 3, 4, 5, 1, 11] (2 doesn't contain a 1)
[12, 23, 33, 45] (45 doesn't contain a 3)
[98, 87, 76, 11, 12, 23] (11 doesn't contain a 7 or 6)
Isso é código-golfe, então o menor número de bytes vence.
JavaScript (ES6),
4744 *43 bytesGuardou um byte graças a @Neil
Recebe entrada como uma lista de seqüências de caracteres.
Snippet de teste
Mostrar snippet de código
* ( riscado 44 ainda é regular 44 )
fonte
`[${p}]`
funciona?a=>a.reduce((l,r)=>`${l}`.match(`[${r}]`)&&r)
(que também funciona para entrada numérica).p&&
se você definirp=1/19
?05AB1E , 10 bytes
Experimente online! ou como um conjunto de testes
Explicação
fonte
€Sü.å
- Eu gostaria que isso funcionasse como eu pensava.ü.å
ou€Süå
.CJam ,
181514 bytesEconomizou 4 bytes graças a Martin Ender
Experimente online!
Explicação
fonte
Haskell,
514835 Bytes-3 bytes graças a @NickHansen! Eu realmente preciso melhorar com esses operadores de mônada
-4 e -9 bytes graças a @Laikoni e @nimi, respectivamente!
Esta versão aceita a entrada como uma matriz de seqüências de caracteres, eliminando a necessidade
show
, mas, tanto quanto posso ver, funciona da mesma maneira que a versão anterior:(Tenho certeza de que tenho permissão para enviar uma função anônima como esta, mas vou corrigi-la se necessário)
Primeiro, os números são convertidos em strings. Então a mônada mágica
zip=<<tail
cria uma função que fecha a lista consigo mesma, que emparelha cada entrada com seus vizinhos. Em seguida,all
mapeia um lambda para cada par que verifica se uma sequência contém caracteres da outra e, finalmente, verifica se todas elas saemTrue
.Versão antiga que funciona basicamente da mesma maneira:
fonte
and.(zipWith(any.flip elem)=<<tail).map show
["1234567890", "19", "95", "5012", "23"]
, para que você possa largar o.map show
.Mathematica
62 4735 bytesCom 12 bytes salvos, graças ao MartinE.
fonte
Ruby,
4948 bytesA saída é
nil
para false e um número inteiro "aleatório" para true.fonte
Java 8,
949087 bytesEntrada é uma matriz de cadeias que representam os números. Começando com a segunda corda, ele executa uma comparação expressão regular contra cada corda anterior para ver se ele contém qualquer uma de suas personagens:
.*[previous string].*
.Golfe:
Ungolfed:
fonte
a->{for(int i=1;i<a.length;)if(!a[i].matches(".*["+a[i++-1]+"].*"))return 0>1;return 1>0;}
( 90 bytes )a->{int r=1;for(int i=0;++i<a.length;)r*=a[i].matches(".*["+a[i-1]+"].*")?1:0;return r>0;}
a->{int r=1,i=0;for(;++i<a.length;)r*=a[i].matches(".*["+a[i-1]+"].*")?1:0;return r>0;}
Gelatina , 6 bytes
Experimente online!
Explicação
É mais óbvio tentar usar
2/
aqui, mas isso executa uma função unária em todas as fatias de tamanho 2."Ḋ
efetivamente executa uma função binária em todos os pares de elementos adjacentes, o que significa que podemos usarf
diretamente (em vez de precisar convertê-la em unária) funcionar comof/
). Isso acaba deixando o último elemento da entrada no lugar, mas felizmente nem mesmo uma entrada de 0 se torna uma lista vazia quando convertida em decimal, portanto, não tem efeito naẠ
.fonte
Python 3 , 48 bytes
Experimente online!
fonte
Geléia , 8 bytes
Experimente online!
Quão?
fonte
05AB1E , 5 bytes
Código:
Usa a codificação CP-1252 . Experimente online! ou Verifique todos os casos de teste!.
Explicação:
fonte
RüÃõå_
foi o que eu criei por conta própria. Sinto-me honrado por ter estado tão perto da sua melhor resposta, excluindo a minha. Por que você não precisa doR
pensamento?R
então? : pPowerShell , 87 bytes
Experimente online!
Não é o mais curto em nenhuma medida, mas uma abordagem um pouco diferente do que os outros estão usando e mostra a
|?{}
funcionalidade bacana .Isso leva a entrada como uma matriz de strings para
$n
, em seguida, faz um loop de1
até olength-1
. UsamosWhere-Object
(the|?{...}
) para obter os índices verdadeiros para uma condição específica. Você pode pensar nisso como umfor
loop de combinação com umif
cláusula.A cláusula aqui é
[char[]]$n[($i=$_)-1]|?{$n[$i]-like"*$_*"}
. Ou seja, estamos pegando o índice atual$_
, configurando-o$i
e subtraindo-o1
e usando-o para indexar$n
(ou seja, para obter o elemento anterior em nossa matriz de entrada). Que é então lançado como umchar
array e enviado através de outroWhere-Object
procedimento.A cláusula interna
$n[$i]-like"*$_*"
especifica que a sequência no índice atual$i
é-like
o caractere atual$_
do índice anterior. Portanto, será gerado qualquer caractere comum entre os dois elementos da matriz. Portanto, a cláusula externa somente será verdadeira se houver um caractere em comum (já que uma matriz vazia é falsey no PowerShell) e, portanto, o índice será selecionado apenas se houver caracteres em comum.Em seguida, reunimos todos os índices que correspondiam aos critérios e verificamos se o
.count
mesmo corresponde-eq
ao comprimento da matriz de entrada. Esse resultado booleano é deixado no pipeline e a saída é implícita.fonte
Perl 5 , 31 bytes
Um porto da bela resposta de Martin Ender .
30 bytes de código +
-p
sinalizador.Experimente online!
fonte
APL (Dyalog APL) , 9 bytes
Experimente online!
∧/
são todos na lista de×
os sinais≢
da contagem de¨
cada um2∩/
as interseções pares de⎕
a entrada?fonte
PHP,
6568itere sobre todos os números e remova todos os dígitos que apareceram no anterior. Conte quantas vezes ele é igual ao número em si (nenhum dígito removido). Se pelo menos um igualasse, não tínhamos correspondência em nenhum dos pares.
Corrigido um erro usando
trim
insted destrtr
. Obrigado a @ JörgHülsermannfonte
["filename",1,11,414]
funciona não.trim
só funciona para os caracteres à esquerda e à direita. Corrigido.a&
vez denull!==
(-5 bytes).$argv[$i]
, porque "Se de e para ter comprimentos diferentes, os caracteres extras no mais longo dos dois serão ignorados". (do manual)PHP, 75 bytes
recebe números dos argumentos da linha de comando; sai com
1
para falsidade, com0
para verdade.Execute
-r
ou teste on-line .$b
= um número que contém todos os dígitos$b
argumento$b
1
0
fonte
PHP, 77 bytes
fonte
foreach($argv as$k=>$v)$t=$k--?$t*preg_match("#[{$argv[$k]}]#",$v)):1;echo$t;
77 bytes (não testado).$k--
para--$k
e soltar um) depois que a sua abordagem deve funcionar e você deve adicionar um @ para o aviso$k--
. Eu o usei especificamente para que $ k ainda seja 0 na primeira execução. E os avisos são ignoráveis. Isso significa que o código agora é de 76 bytes, mas ainda não foi testado.foreach($argv as$k=>$v)$t=$k--?$t*preg_match("#[{$argv[$k]}]#",$v):1;echo$t;
está funcionando como deveria. Teste com$argv = array(1, 12, 123, 3, 34, 45, 5, 5);
telas1
e testes com$argv = array(1, 12, 123, 3, 34, 45, 5, 6);
telas0
, conforme o esperado.MATL , 14 bytes
Experimente online!
Obrigado @LuisMendo por salvar um byte. Explicação:
fonte
1)VG
por1&)
(e isso evita repetir o primeiro número))
fornece os valores selecionados como primeira saída e, em seguida, os valores restantes como segunda saída.Clojure, 71 bytes
Uma função anônima que aceita uma sequência de números. Devoluções
true
/false
.Eu gosto de como se lê. Definitivamente, existem algumas áreas que podem ser aprimoradas aqui. Minha função transmitida
map
não pode ser alterada facilmente, de modo que não exija a macro de função, o que significa que toda a função não pode usar a macro, o que provavelmente adicionou alguns bytes. Também seria bom se eu pudesse descobrir uma maneira melhor de descompactar os valores noevery?
predicado.fonte
SimpleTemplate, 124 bytes
Uau, isso foi um treino!
Isso "simplesmente" cria uma regex usando o elemento antigo, mostrando
1
como um valor verdadeiro ou nada mais.Ungolfed:
fonte
JavaScript (ES6), 37 bytes
Aceita entrada como uma sequência de números separados por nova linha. Com base na excelente resposta Retina de @ MartinEnder ♦, mas fazendo o teste inteiro em uma única regexp, porque dessa forma é mais curto em JavaScript.
fonte
Pip ,
1210 bytesRecebe entrada como uma série de argumentos da linha de comando. Saída é uma lista não vazia para a verdade e uma lista vazia para falsey. Experimente online ou verifique todos os casos de teste .
Explicação
fonte
Röda ,
4535 bytesExperimente online!
Isso é semelhante à solução Perl 5, que é uma porta da solução Retina de Martin Ender. -10 bytes graças a @Neil.
Aqui está uma solução diferente (
7372 bytes):É uma função anônima que extrai cadeias de caracteres do fluxo e verifica se as cadeias consecutivas contêm os mesmos caracteres. Explicação:
Possivelmente poderia ser jogado mais ...
fonte
^(\S*(\S)\S* (?=\S*\2))+\S+$
.Utilitários Bash + Unix,
7169 bytesExperimente online!
A entrada está em stdin, um número por linha.
A saída está no código de saída: 0 para truthy, 1 para falsey.
Provavelmente isso pode ser jogado mais.
Para que o código acima funcione, não pode haver nenhum arquivo no diretório atual cujo nome seja um único dígito. Se isso não for aceitável, substitua
[\1]
no programa por'[\1]'
(a um custo de 2 bytes adicionais).Execução de amostra (o último caso de teste fornecido no desafio):
(1 aqui é falsey.)
Como funciona:
Vou demonstrar na amostra executada acima.
O comando sed converte a entrada em:
O comando tr converte isso para a string:
Essa string é um comando shell para realizar a operação desejada, então eu canalizo isso para sh e pronto.
fonte
Q, 57 bytes
Nota: 0 anexado ao início da matriz de entrada na função. Isso foi feito para que a comparação do primeiro elemento fosse realizada. Caso contrário, o último caractere do primeiro elemento é capturado para comparação. No entanto, poderia fazer uma verificação de tipo que adiciona 7 bytes à contagem atual.
fonte