Você receberá um número inteiro positivo (que nunca conterá um 0) como entrada. Sua tarefa é verificar se é um número Lynch-Bell ou não.
Um número é um número Lynch-Bell se todos os seus dígitos forem exclusivos e o número for divisível por cada um dos dígitos.
Na verdade, existem apenas 548 números da Lynch-Bell, então a codificação é uma possibilidade, mas quase certamente será mais longa.
126 é um número de Lynch-Bell porque todos os seus dígitos são únicos e 126 é divisível por 1, 2 e 6.
Você pode gerar qualquer valor verdadeiro e falso.
Exemplos:
7 -> truthy
126 -> truthy
54 -> falsy
55 -> falsy
3915 -> truthy
Este é o OEIS A115569 .
Respostas:
Mathematica, 42 bytes
Eu acho que
0!=##&@@d&&##&@@
é uma nova baixa legibilidade para o Mathematica ...Explicação
Alguns dos açúcares sintáticos básicos usados aqui:
&
tem precedência muito baixa e transforma tudo o que resta dele em uma função sem nome.&&
é apenas oAnd
operador.#
é o argumento da função sem nome que o encerra mais próxima.##
é uma sequência de todos os argumentos da função.@
é uma notação de prefixo para chamadas de função, ief@x == f[x]
.@@
éApply
, que passa os elementos de uma lista como argumentos individuais para uma função, ief@@{a,b,c} == f[a,b,c]
.Com isso fora do caminho ...
Isso deve ser bastante auto-explicativo: isso nos fornece uma lista dos dígitos decimais da entrada e armazena o resultado
d
.Isso testa a entrada quanto à divisibilidade de cada um de seus dígitos (porque o operador de divisibilidade é
Listable
). Isso nos dá uma lista deTrue
s eFalse
s.Aplicamos a função no lado esquerdo à lista de booleanos, de modo que cada booleano seja um argumento separado.
Aplicamos outra função a
d
, para que os dígitos individuais sejam dados como argumentos separados. A função é0!=##&
, ie . Ele verifica se todos os dígitos são distintos (e que são distintos, mas isso é dado pelo desafio e, se não fosse, não seria um divisor de qualquer maneira). é realmente apenas uma economia de 1 byte no uso de si mesmo, e funciona porque há um elemento de 1 byte ( ) que sabemos que não está presente. Portanto, essa primeira coisa verifica se os dígitos são únicos. Vamos chamar esse resultadoUnequal[0, d1, d2, ...]
0
0!=##&
Unequal
0
U
Novamente, isso é realmente apenas uma abreviação para
And[U, ##]
. Com##
sendo uma sequência, as booleans individuais a partir da verificação inicial divisibilidade são expandidos para oAnd
, então temos que verifica que ambos os dígitos são únicas e cada dígito divide a entrada.And[U, d1∣n, d2∣n, ...]
fonte
##&@@d&&##&@@
? O que isso faz?0!=
por0<
?Python 3 , 56 bytes
Experimente online!
Saída
False
se for um número Lynch-Bell,True
caso contrário.fonte
0
na entradaBraquilog , 10 bytes
Experimente online!
Explicação
fonte
C #,
8783 bytesEu escrevi isso no bloco de notas antes de testar no Visual Studio, onde funcionou bem, então percebi que agora eu sou esse nível de nerd ...
Versão completa / formatada:
fonte
JavaScript (ES6),
4241 bytesRecebe a entrada como uma sequência e retorna
true
oufalse
conforme apropriado. Edit: Salvo 1 byte graças a @RickHitchcock. Outras versões:Recebe a entrada como uma string e retorna
0
ou1
( ou seja, inverso lógico) por 40 bytes:Pega a entrada como um número e retorna
0
ou1
para 43 bytes:Pega a entrada como um número e retorna
1
ou0
para 45 bytes:fonte
s=>![...s].some((e,i)=>s%e|s.search(e)<i)
[...new Array(9999999)].map((_,n)=>n+1+"").filter(s=>![...s].some((e,i)=>s%e|s.search(e)<i)).length
, cheguei ao5081
invés do esperado548
, portanto, isso não está correto como está escrito. Código realmente apertado, no entanto..filter(x => x.indexOf('0')===-1)
isso retorna 548 conforme prometido.Geléia ,
64 bytesExperimente online!
Como funciona
fonte
gQV=
se você preferir uma solução somente ASCII.Python 3 , 54 bytes
Retorna
False
quando um número é um número Lynch-Bell. Toma seqüências de caracteres como entrada. Surgiu sozinho, mas muito parecido com o de Rod. Eu teria comentado sob o post dele, mas ainda não tenho nenhuma reputação.Experimente online!
fonte
Geléia , 8 bytes
Experimente online!
fonte
PHP,
6248 bytesExecutar como tubo
-nR
ou testá-lo on-line . Saída vazia por falsidade,1
por verdade.demolir
fonte
Haskell , 61 bytes
Experimente online!
Define uma função anônima
(#)=<<show
que, dado um número, retornaTrue
ouFalse
.fonte
05AB1E , 4 bytes
Experimente online!
O mesmo algoritmo que esta resposta a uma pergunta relacionada .
fonte
05AB1E , 8 bytes
Usa a codificação 05AB1E . Experimente online!
fonte
Mathematica, 57 bytes
fonte
IsLynchBellNumber
LynchBellNumberQ
. ;)Python 2 , 66 bytes
Esta é uma solução no Python 2, cujo objetivo é produzir
True
por verdade eFalse
por falsidade:Experimente online!
fonte
Haskell,
260241201162 bytesExplicação
Reduziram significativamente o thanx para Laikoni
fonte
Japt ,
151411109 bytesTente
fonte
©!
->«
for -1 byteNeim , 9 bytes
Experimente online!
-2 graças a Okx .
Hmm, há uma boa simetria ...
oO.O.O.Oo
fonte
𝐂D𝐮𝔼
para𝐮ℚ
(uniquify, cheque de tipos ignorando igualdade)Perl 6 , 27 bytes
Experimente online!
.comb
é um método que, quando não recebe argumentos, divide uma string em seus caracteres individuais. Um número é implicitamente convertido em uma sequência e, portanto,.comb
retorna seus dígitos..comb.all
é uma junção e de todos os dígitos.$_ %% .comb.all
é uma junção e da divisibilidade do argumento de entrada$_
por todos os seus dígitos. Por exemplo, se$_
for123
, a junção éall(True, False, True)
, que cai paraFalse
entra em em um contexto de verdade.[!=] .comb
reduz os dígitos do argumento de entrada com o!=
operador, que avaliaTrue
se os dígitos são todos diferentes.fonte
Retina , 37 bytes
Experimente online! O link inclui casos de teste. Explicação: O primeiro estágio substitui qualquer dígito duplicado por um zero. O segundo estágio substitui cada dígito por sua representação unária, seguida pela representação unária do número original. O terceiro estágio calcula o restante da divisão do número original por cada dígito diferente de zero. Se o número for um número Lynch-Bell, isso excluirá tudo e será testado no estágio final.
fonte
Ruby 2.4, 42 bytes
(Nenhum TIO ainda, desculpe)
fonte
CJam, 17 bytes
CJam é o Java das linguagens de golfe. É até interpretado em Java!
Explicação:
fonte
VBScript, 177 bytes
Olá a todos, este é o meu primeiro post em CG, e a primeira tentativa, então espero ter seguido todas as regras ...
Isso pode ser executado no bloco de notas adicionando uma linha no final
E, em seguida, salve-o como .vbs e clique duas vezes.
Explicação:
O VBScript é um instrumento sem corte para o golfe, mas, ainda não aprendi Ruby ...
fonte
PHP , 51 bytes
imprime zero para verdadeiro e um para falso
Experimente online!
PHP , 62 bytes
imprime zero para verdadeiro e um para falso
Experimente online!
fonte
Pitão , 10 bytes
Verifique todos os casos de teste.
Quão?
Pitão , 11 bytes
Verifique todos os casos de teste.
Quão?
fonte
Perl 5 , 34 bytes
33 bytes de código + 1 para
-p
sinalizadorExperimente online!
Saídas
0
para verdade, qualquer outro número para falsidadefonte
Kotlin 1.1,
986659 bytesEmbelezado
Teste
fonte
APL (Dyalog Unicode) , 24 bytes
Experimente online!
Dfn simples, provavelmente pode ser jogado um pouco mais. Rendimento booleanos APL padrão 1 para verdade, 0 para falsidade.
Vale ressaltar que a função aceita os argumentos como strings em vez de ints.
Quão:
fonte
Julia 1.0 , 39 bytes
rem.(x,d)
é um vetor que contém os restantes depois de dividir x por cada dígito emx
.0*unique(d)
é um vetor com comprimento igual ao número de dígitos únicos, com todos os valores zero. Verifique se são iguais.Experimente online!
fonte
ruby -n , 40 bytes
Experimente online!
Leia o número como uma sequência. Substitua cada caractere (dígito) por uma ocorrência subsequente desse caractere, se presente, ou o número inteiro module esse dígito. Isso resultará em uma sequência de apenas
0
s se e somente se este for um número Lynch-Bell. Por quê? Se houver um dígito repetido, todas as instâncias da última permanecerão as mesmas e, como a entrada não contém zeros, isso significa um dígito diferente de zero. Caso contrário, estamos apenas verificando se cada dígito divide igualmente o número.Como não há números de Lynch-Bell de 8 ou mais dígitos (prova formal: a OEIS diz isso), verificar se a sequência resultante é lexicograficamente mais cedo que a sequência
'00000000'
é equivalente a verificar se são todos os zeros.fonte
R , 86 bytes
Recebe a entrada como uma sequência. Eu certamente sinto que isso é jogável.
Experimente online!
fonte