Recentemente, fiz um teste de matemática e notei que um determinado número no teste correspondia a um padrão interessante. O número ( 28384
) corresponde a uma sequência genérica de dígitos semelhante a esta
(n)(x)(n+1)(x)(n+2)(x)(n+3) etc...
onde n
e x
são números inteiros de um dígito. A sequência pode começar com um x
ou n
e terminar com um x
ou n+y
.
Sua tarefa é, dado um número inteiro positivo de vários dígitos, gerar um valor de verdade ou falsey, dependendo se a entrada corresponde ao padrão. A entrada terá entre 4 e 18 dígitos. Você pode receber a entrada como uma representação de seqüência de caracteres do número inteiro. A entrada não começará com um 0, mas pode conter ou terminar com 0s.
n+y
sempre será um número de um dígito (por isso, o limite de comprimento é 18).
Casos de teste
Isso deve gerar um valor verdadeiro
182838485868788898
4344
85868
12223242526
E estes devem ser falsey
12345
6724013635
36842478324836
1222232425
5859510511
Como em todos os campos de código, o código mais curto vence! Boa sorte e que as probabilidades estejam sempre a seu favor!
x
en
diferentes de zero para os números que se encaixam na regra?Respostas:
Python 2 ,
84818079 bytes-1 byte graças a ovs
Experimente online!
Python 3 ,
82797877 bytesExperimente online!
Um pouco mais curto no Python 3, mas não achei que merecesse sua própria resposta.
Explicação
Montamos uma função
g
que recebe string e um índice (1 ou 0).g
em seguida, retorna se é ou nãolen(set(x[a::2]))
o número de dígitos únicos em todas as outras posições, é igual a(x[a==0::2]in"123456789")
, se os outros dígitos estão ou não em ordem crescente. Se os dígitos estiverem em ordem crescente, retornará se são todos iguais ou não; caso contrário, perguntará se o conjunto está vazio, o que não pode ser, retornando sempre falso.fonte
x[a<1::2]in"123456789"
pode ser"0"<x[a<1::2]<":"
(comparando chars e comparando charcodes)a<1
? Parece que isso pode ser justoa
.Geléia ,
1311 bytesExperimente online!
Explicação:
fonte
05AB1E , 15 bytes
Experimente online!
Explicação
Deve funcionar (os casos de teste funcionaram), mas se você encontrar alguma falha, entre em contato.
14 bytes se nenhuma saída conta como falso:
fonte
D, 117 bytes
Definitivamente abaixo do ideal, mas funciona bem
Experimente Online!
fonte
Haskell,
1081139795 bytesExemplo de chamada:
f "182838485868788898"
rendimentosTrue
Versão não destruída com explicações:
fonte
isPrefixOf
não está no Prelude, então você deve incluirimport Data.List
no seu código ou usar uma alternativa, por exemploand(zipWith(==)(n:r)[n..])
.x/=y
pode ser1>0
porque, se não forx/=y
,x==y
o primeiro caso pega.where
definiçãoc
e de ajudad
externaf
.f
pode então ser encurtado paraf s@(_:n:_)=c s||c(n:s)
.;
. É a mesma contagem de bytes, mas melhora a legibilidade do código.JavaScript (ES6),
666360 bytesRecebe a entrada como uma sequência.
Casos de teste
Mostrar snippet de código
fonte
C (gcc), 123 bytes
Experimente online!
fonte
Python 3 ,
99 9689 bytesall()
função&
|
e substitui a variável extra pork<1
Experimente online!
Explicação:
Primeiro, divida a sequência em duas listas: uma com elementos ímpares e outra com elementos pares. As duas listas A e B devem ser tais que:
OU exatamente o oposto
A condição consecutiva é verificada por:
a in '123456789'
A condição de mesmo número é verificada por:
all(i=a[x] for i in a)
fonte
i
comk<1
e soltar oi
argumento todos juntos.&
vez deand
. O seu tambémor
pode ser substituído|
.PHP , 68 bytes
Experimente online!
Parte de saída da string de pesquisa iniciando e incluindo a primeira ocorrência de entrada até o final da string de pesquisa como valor de verdade e nada para falsidade
por mais 2 bytes você pode substituir
echo$s;
por!!echo$s;
para obter o1
valor mais verdadeiroEncontre a ocorrência da entrada em uma das seguintes seqüências de caracteres na matriz
fonte
JavaScript (ES6), 54 bytes
Recebe a entrada como uma sequência.
fonte
MATL , 15 bytes
Experimente online!
Com alguma ajuda de @LuisMendo no chat. Observe que, se a saída vazia + o erro também for considerado 'falso', ele
X
poderá ser deixado de fora, aumentando a pontuação para 14 bytes .fonte
Mathematica, 121 bytes
fonte
Pitão , 20 bytes
Saída
[]
quando o número corresponde ao padrão de dígitos, qualquer outra coisa.Experimente online!
Explicações (exemplo com entrada
85868
)fonte
Pitão, 17 bytes
Experimente aqui
O mesmo algoritmo da minha resposta Jelly.
Explicação:
fonte
Python 3 ,
167 161 157 131106 bytes-55 bytes graças às sugestões de @ WheatWizard
Experimente online!
fonte
set(c)
é o mesmo que{*c}
. (pelo menos em python 3)[t[z]for z in range(0,len(t),2)]
também é apenas uma emenda da lista. Você pode fazer isso simplesmente comt[::2]
. Se você não estiver familiarizado com esta sintaxe, sugiro dar uma olhada nos documentos, porque é bastante útil.Java (OpenJDK 8) ,
128119118108107104 bytesExperimente online!
Explicação:
fonte
Retina , 47 bytes
Experimente online!
Emite 1 se corresponder ao padrão, 0 se não corresponder
Explicação
Converta cada dígito n em n + 1 em unário, separados por ponto e vírgula
(Trailing newline) converte cada dígito na diferença entre si e os dois pontos anteriores
(Trailing newline) remove os 2 primeiros dígitos
Conta o número de correspondências desse padrão, que verifica 0s e 1s alternados
fonte