Se le dará un número entero positivo (que nunca contendrá un 0) como entrada. Su tarea es verificar si es un número de Lynch-Bell o no.
Un número es un número de Lynch-Bell si todos sus dígitos son únicos y el número es divisible por cada uno de sus dígitos.
De hecho, en realidad solo hay 548 números de Lynch-Bell, por lo que la codificación es una posibilidad, pero seguramente será más larga.
126 es un número de Lynch-Bell porque todos sus dígitos son únicos, y 126 es divisible por 1, 2 y 6.
Puede generar cualquier valor verdadero y falso.
Ejemplos:
7 -> truthy
126 -> truthy
54 -> falsy
55 -> falsy
3915 -> truthy
Este es OEIS A115569 .
Respuestas:
Mathematica, 42 bytes
Creo que
0!=##&@@d&&##&@@
es un nuevo bajo en legibilidad para Mathematica ...Explicación
Algunos de los azúcares sintácticos básicos utilizados aquí:
&
tiene muy poca precedencia y convierte todo lo que queda en una función sin nombre.&&
es solo elAnd
operador.#
es el argumento de la función sin nombre adjunta más cercana.##
es una secuencia de todos los argumentos de la función.@
es la notación de prefijo para llamadas a funciones, es decirf@x == f[x]
.@@
es decirApply
, que pasa los elementos de una lista como argumentos individuales a una función, es decirf@@{a,b,c} == f[a,b,c]
.Con eso fuera del camino ...
Esto debería explicarse por sí mismo: esto nos da una lista de los dígitos decimales de la entrada y almacena el resultado en
d
.Esto prueba la entrada para la divisibilidad por cada uno de sus dígitos (porque el operador de divisibilidad es
Listable
). Esto nos da una lista deTrue
syFalse
s.Aplicamos la función del lado izquierdo a la lista de booleanos, de modo que cada booleano es un argumento separado.
Aplicamos otra función a
d
, para que los dígitos individuales se den como argumentos separados. La función es0!=##&
, es decir . Comprueba que todos los dígitos son distintos (y que son distintos, pero eso está dado por el desafío, y si no fuera así, no sería un divisor de todos modos). en realidad es solo un ahorro de 1 byte en el uso de sí mismo, y funciona porque hay un elemento de 1 byte (Unequal[0, d1, d2, ...]
0
0!=##&
Unequal
0
) que sabemos que no está presente. Entonces, lo primero que verifica es que los dígitos son únicos. Llamemos a este resultadoU
De nuevo, esto es realmente solo una abreviatura para
And[U, ##]
. Al##
ser una secuencia, los booleanos individuales de la verificación de divisibilidad inicial se expanden en laAnd
, por lo que obtenemos qué comprobaciones de que ambos dígitos son únicos y que cada dígito divide la entrada.And[U, d1∣n, d2∣n, ...]
fuente
##&@@d&&##&@@
? ¿Qué hace eso?0!=
por0<
?Python 3 , 56 bytes
Pruébalo en línea!
Salida
False
si es IS un número de Lynch-Bell, de loTrue
contrario.fuente
0
entradaBrachylog , 10 bytes
Pruébalo en línea!
Explicación
fuente
C #,
8783 bytesEscribí esto en el bloc de notas antes de probar en Visual Studio, donde funcionó bien, así que me di cuenta de que ahora soy ese nivel de nerd ...
Versión completa / formateada:
fuente
JavaScript (ES6),
4241 bytesToma la entrada como una cadena y devuelve
true
ofalse
según corresponda. Editar: guardado 1 byte gracias a @RickHitchcock. Otras versiones:Toma la entrada como una cadena y devuelve
0
o1
(es decir, inversa lógica) para 40 bytes:Toma la entrada como un número y devuelve
0
o1
para 43 bytes:Toma la entrada como un número y devuelve
1
o0
para 45 bytes:fuente
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
obtuve en5081
lugar de lo esperado548
, por lo que esto no es correcto como está escrito. Código realmente apretado, sin embargo..filter(x => x.indexOf('0')===-1)
esto devuelve 548 según lo prometido.Jalea ,
64 bytesPruébalo en línea!
Cómo funciona
fuente
gQV=
si prefiere una solución solo ASCII.Python 3 , 54 bytes
Devuelve
False
cuando un número es un número de Lynch-Bell. Toma cadenas como entrada. Se me ocurrió solo pero muy similar al de Rod. Hubiera comentado debajo de su publicación, pero todavía no tengo reputación.Pruébalo en línea!
fuente
Jalea , 8 bytes
Pruébalo en línea!
fuente
PHP,
6248 bytesEjecutar como tubería con
-nR
o probarlo en línea . Salida vacía para falsedad,1
para verdad.Descompostura
fuente
Haskell , 61 bytes
Pruébalo en línea!
Define una función anónima
(#)=<<show
que, dado un número, devuelveTrue
oFalse
.fuente
05AB1E , 4 bytes
Pruébalo en línea!
Mismo algoritmo que esta respuesta a una pregunta relacionada .
fuente
05AB1E , 8 bytes
Utiliza la codificación 05AB1E . Pruébalo en línea!
fuente
Mathematica, 57 bytes
fuente
IsLynchBellNumber
LynchBellNumberQ
. ;)Python 2 , 66 bytes
Esta es una solución en Python 2, cuyo
True
único propósito es generar datos verdaderos yFalse
falsos:Pruébalo en línea!
fuente
Haskell,
260241201162 bytesExplicación
Han acortado significativamente gracias a Laikoni
fuente
Japt ,
151411109 bytesIntentalo
fuente
©!
->«
para -1 byteNeim , 9 bytes
Pruébalo en línea!
-2 gracias a Okx .
Hmm, hay una buena simetría ...
oO.O.O.Oo
fuente
𝐂D𝐮𝔼
a𝐮ℚ
(uniquify, verificación de los tipos de igualdad ignorando)Perl 6 , 27 bytes
Pruébalo en línea!
.comb
es un método que, cuando no tiene argumentos, divide una cadena en sus caracteres individuales. Un número se convierte implícitamente en una cadena y, por lo tanto,.comb
devuelve sus dígitos..comb.all
es una unión de todos los dígitos.$_ %% .comb.all
es una unión y de la divisibilidad del argumento de entrada$_
por todos sus dígitos. Por ejemplo, si$_
es123
, la unión esall(True, False, True)
, que colapsa aFalse
en un contexto verdadero.[!=] .comb
reduce los dígitos del argumento de entrada con el!=
operador, que evalúaTrue
si los dígitos son todos diferentes.fuente
Retina , 37 bytes
Pruébalo en línea! El enlace incluye casos de prueba. Explicación: La primera etapa reemplaza cualquier dígito duplicado con un cero. La segunda etapa reemplaza cada dígito con su representación unaria seguida de la representación unaria del número original. La tercera etapa luego calcula el resto de la división del número original por cada dígito distinto de cero. Si el número es un número de Lynch-Bell, esto eliminará todo y esto se probará en la etapa final.
fuente
Ruby 2.4, 42 bytes
(No hay TIO todavía, lo siento)
fuente
CJam, 17 bytes
CJam es el Java de los lenguajes de golf. ¡Incluso se interpreta en Java!
Explicación:
fuente
VBScript, 177 bytes
Hola a todos, esta es mi primera publicación de CG, y mi primer intento, así que espero seguir todas las reglas ...
Esto se puede ejecutar desde el Bloc de notas agregando una línea al final
Y luego guardarlo como .vbs, luego hacer doble clic.
Explicación:
VBScript es un instrumento un poco contundente para jugar al golf, pero bueno, todavía no he aprendido a Ruby ...
fuente
PHP , 51 bytes
imprime cero para verdadero y uno para falso
Pruébalo en línea!
PHP , 62 bytes
imprime cero para verdadero y uno para falso
Pruébalo en línea!
fuente
Pyth , 10 bytes
Verifique todos los casos de prueba.
¿Cómo?
Pyth , 11 bytes
Verifique todos los casos de prueba.
¿Cómo?
fuente
Perl 5 , 34 bytes
33 bytes de código + 1 para
-p
banderaPruébalo en línea!
Salidas
0
para la verdad, cualquier otro número para la falsedadfuente
Kotlin 1.1,
986659 bytesEmbellecido
Prueba
fuente
APL (Dyalog Unicode) , 24 bytes
Pruébalo en línea!
Dfn simple, probablemente se puede jugar un poco más. Rendimiento booleanos APL estándar 1 para verdadero, 0 para falso.
Vale la pena mencionar que la función toma los argumentos como cadenas en lugar de ints.
Cómo:
fuente
Julia 1.0 , 39 bytes
rem.(x,d)
es un vector que contiene los restos después de dividir x por cada dígito enx
.0*unique(d)
es un vector con una longitud igual al número de dígitos únicos, con todos los valores cero. Comprueba si son iguales.Pruébalo en línea!
fuente
ruby -n , 40 bytes
Pruébalo en línea!
Lea el número como una cadena. Sustituya cada carácter (dígito) con una aparición posterior de ese carácter, si está presente, o el número entero módulo de ese dígito. Esto dará como resultado una cadena de solo
0
s si y solo si se trata de un número de Lynch-Bell. ¿Por qué? Si hay un dígito repetido, cada instancia del último permanece igual, y dado que la entrada no contiene ceros, eso significa un dígito distinto de cero. De lo contrario, solo estamos verificando si cada dígito divide equitativamente el número.Dado que no hay números de Lynch-Bell de 8 o más dígitos (prueba formal: OEIS lo dice), verificar si la cadena resultante es lexicográficamente anterior a la cadena
'00000000'
es equivalente a verificar si todos son ceros.fuente
R , 86 bytes
Toma la entrada como una cadena. Ciertamente siento que esto es golfable.
Pruébalo en línea!
fuente