Um número escadaria é um número inteiro positivo x tal que a sua n th dígitos (uma indexadas começando com o dígito menos significativo) é igual a X% (n + 1) . Isso é um pouco exagerado, então vamos ver um exemplo. Pegue 7211311 , se usarmos os resíduos modulares de 7211311 no intervalo de 2 a 8, obteremos o seguinte:
7211311 % 2 = 1
7211311 % 3 = 1
7211311 % 4 = 3
7211311 % 5 = 1
7211311 % 6 = 1
7211311 % 7 = 2
7211311 % 8 = 7
Estes são os dígitos de 7211311 ! Portanto, 7211311 é um número da escada.
Tarefa
Escreva o código que recebe quando recebe um número positivo como entrada, produzirá dois valores distintos, um se o número for um número de escada e o outro se não for.
Como é uma competição de código-golfe , seu objetivo deve ser minimizar o número de bytes no seu código-fonte.
Casos de teste
Aqui estão os 13 primeiros números da escada:
1, 10, 20, 1101, 1121, 11311, 31101, 40210, 340210, 4620020, 5431101, 7211311, 12040210
code-golf
number
decision-problem
Assistente de Trigo
fonte
fonte
0
um número de escada? Muitas respostas pensam assim.Respostas:
Haskell, 55
57bytesUma abordagem diferente da outra solução Haskell.
Obrigado xnor por salvar 2 bytes.
fonte
let
expressão.Brachylog ,
25211614 bytesExperimente online!
Primeira submissão ao Brachylog: D
provavelmente muito não-destruído... muito obrigado a Leaky Nun e Fatalize pelo incentivo e ajuda a jogar de 25 a 25 para apenas 14. :) :)fonte
Javascript,
42413938 bytes-4 bytes graças a @Shaggy e @ETHProductions
Isso pega o número como uma sequência e retorna
false
se o número for um número de escada outrue
não.Exemplo de trecho de código:
fonte
!
pois o desafio não especifica explicitamente que você deve retornartrue
para true efalse
false, simplesmente que você deve retornar 2 valores distintos.i
-se:s=>[...s].some(d=>s%i--^d,i=s.length+1)
~x == -(x+1)
em números inteiros ex%-y == x%y
, acho que você pode obter mais um:s=>[...s].some(d=>s%i++^d,i=~s.length)
05AB1E , 6 bytes
Código:
Usa a codificação 05AB1E . Experimente online!
Explicação:
fonte
Haskell, 60 bytes
Pega o número como int
fonte
Mathematica, 60 bytes
Experimente online!
@alephalpha jogou até 48
Mathematica, 48 bytes
o próximo é 24120020
fonte
Python 2 , 54 bytes
Experimente online!
fonte
Japonês ,
97 bytesRecebe a entrada como uma sequência.
Teste-o
Explicação
Nós assumimos implicitamente a string como entrada.
Mapeie sobre cada caractere na sequência.
J
é a constante Japt para-1
e a´
diminui em 1 em cada passagem (--
em JavaScript). Então, na primeira passagem, isso nos dá-2
.Usamos esse valor para executar uma operação de módulo na sequência de entrada que é automaticamente convertida em um número inteiro no processo. Em JavaScript
x%-y
dá o mesmo resultado quex%y
.Inverta a sequência resultante.
Verifique se a nova sequência é igual à entrada original e gera implicitamente o resultado como um booleano.
fonte
(Y+2
, eu sinto que poderia ser de pelo menos 1 byte mais curto ...¥£%´JÃw
:-) (funciona porquex%y == x%-y
em JS)Neim , 6 bytes
Explicação:
Experimente online!
fonte
Geléia , 7 bytes
Experimente online!
fonte
Python 2 , 56 bytes
Experimente online!
fonte
Perl 6 , 32 bytes
Experimente online!
.comb
é o número de caracteres na representação em cadeia do argumento de entrada$_
(ou seja, o número de dígitos).1 + .comb ... 2
é a sequência de números de um maior que o número de dígitos até 2.«%«
é o módulo de hyperoperator que dá o restante quando$_
, o argumento de entrada no seu lado esquerdo, é dividida por cada um dos elementos da sequcia no seu direito:$_ % 2, $_ % 3, ...
.[~]
concatena esses dígitos em um novo número, que é comparado com o argumento de entrada usando o operador de igualdade de cadeiaseq
.fonte
PHP , 43 bytes
Experimente online!
PHP , 44 bytes
imprime 1 para verdadeiro e nada para falso
Experimente online!
fonte
Pitão , 13 bytes
-1 bytes graças a Okx .
Experimente online!
Explicação
Solução alternativa , ainda com 13 bytes (graças a karlkastor )
Experimente online! Isso é essencialmente o mesmo que a primeira solução, exceto pelo fato de ele ser usado
i
para converter da matriz de números em um número, e que o intervalo é gerado de maneira diferente.fonte
ss`M_
porjk_
para salvar 2 bytes.j
gera uma string, enquanto preciso de um número para comparar com a entrada (que é um número).qi_.e%Q+2k`QT
usando map enumerated (.e
) em vez de map. E convertendo os restantes para uma base 10 int da lista em vez de usar junção.C ++, 104 bytes
1) versão original:
2) de forma legível:
Experimente Online!
fonte
Pari / GP , 42 bytes
Experimente online!
fonte
Python 2 ,
66 60 5857 bytesx and
(não deve verificar se há 0)enumerate
Experimente online!
fonte
Python 3: 63 bytes
Se eu pudesse contar o número de vezes que desejava que "enumerar" fosse menor ...
Experimente online!
fonte
lambda m:all(m%n==int(x)for n,x in enumerate(str(m)[::-1],2))
Java (OpenJDK 8) , 60 bytes
Experimente online!
Uma versão sem sequência.
fonte
Java 8,
156149bytesUngolfed:
Experimente Online!
UPDATE:
-7 bytes : removido inútil
{}
e substituídoInteger.parseInt(...)
pornew Integer(...)
-9 bytes : graças a Kevin Cruijssen, removemos um monte de inúteis
()
, usados emLong
vez deInteger
e emprint
vez deprintln
. Obrigado Kévin!fonte
new Integer
podem sernew Long
(-3 bytes);println
pode serprint
(-2 bytes); e você pode remover o parêntese ao redornew Long(s[0])%i+f;
(-4 bytes).Carvão ,
2015 bytesExperimente online! Saídas
-
para um número de escada, nada diferente. Link é a versão detalhada do código.fonte
Python 2, 61 bytes
fonte
q / kdb +, 34 bytes
Solução:
Exemplo:
Explicação:
Converta o número da entrada em uma string, conte de 0..length da string, adicione 2 a todos, inverta-o e alimente cada número
mod
junto com a entrada original. Lance o resultado do mod para uma string e reduza a lista, verifique se é igual à string do número de entrada:Notas:
A maior parte da solução é para gerar a
2,3,4..
lista, eu tenho outra solução que faz menos coisas, mas acaba sendo 37 bytes depois do golfe:fonte
Clojure, 75 bytes
A entrada é uma string, usando
map
e o final%
acabou sendo mais curto que afor[i(range(count %))]
abordagem.fonte
Haskell, 62 bytes
f x=and$zipWith(==)(reverse$show x)$map(head.show.mod x)[2..]
Em vez de reverter a lista (infinita) de módulos, ela trunca a lista, compactando-a com a representação de seqüência de caracteres invertida da integral x, o que garante que seja igual em termos de elementos.
fonte
Perl 5 , 41 bytes
39 bytes de código + 2 sinalizadores
-pa
Experimente online!
Não produz nada (undef) para números de escadas, 1 para qualquer outra coisa
fonte