Vous recevrez un nombre entier positif (qui ne contiendra jamais de 0) en entrée. Votre tâche consiste à vérifier s'il s'agit d'un numéro Lynch-Bell ou non.
Un numéro est un numéro de Lynch-Bell si tous ses chiffres sont uniques et le nombre est divisible par chacun de ses chiffres.
En fait, il n'y a en fait que 548 numéros de Lynch-Bell, donc le codage en dur est une possibilité, mais sera certainement plus long.
126 est un numéro de Lynch-Bell car tous ses chiffres sont uniques et 126 est divisible par 1, 2 et 6.
Vous pouvez afficher n'importe quelle valeur véridique et fausse.
Exemples:
7 -> truthy
126 -> truthy
54 -> falsy
55 -> falsy
3915 -> truthy
Il s'agit d' OEIS A115569 .
Réponses:
Mathematica, 42 octets
Je pense que
0!=##&@@d&&##&@@
c'est une nouvelle faible lisibilité pour Mathematica ...Explication
Une partie du sucre syntaxique de base utilisé ici:
&
a une très faible priorité et transforme tout ce qui en reste en une fonction sans nom.&&
est juste l'And
opérateur.#
est l'argument de la fonction sans nom englobante la plus proche.##
est une séquence de tous les arguments de la fonction.@
est la notation de préfixe pour les appels de fonction, c'est-à-diref@x == f[x]
.@@
isApply
, qui transmet les éléments d'une liste en tant qu'arguments individuels à une fonction, c'est-à-diref@@{a,b,c} == f[a,b,c]
.Avec cela à l'écart ...
Cela devrait être assez explicite: cela nous donne une liste des chiffres décimaux de l'entrée et stocke le résultat dans
d
.Cela teste la divisibilité de l'entrée par chacun de ses chiffres (car l'opérateur de divisibilité est
Listable
). Cela nous donne une liste deTrue
s etFalse
s.Nous appliquons la fonction sur le côté gauche à la liste des booléens, de sorte que chaque booléen est un argument distinct.
Nous appliquons une autre fonction à
d
, de sorte que les chiffres individuels soient donnés comme arguments séparés. La fonction est0!=##&
, ie . Il vérifie que tous les chiffres sont distincts (et qu'ils sont différents mais que cela est donné par le défi, et si ce n'était pas le cas, ce ne serait pas un diviseur de toute façon). est vraiment juste un économiseur de 1 octet sur l'utilisation de lui-même, et cela fonctionne parce qu'il y a un élément ( ) de 1 octet que nous savons absent. Donc, cette première chose vérifie que les chiffres sont uniques. Appelons ce résultatUnequal[0, d1, d2, ...]
0
0!=##&
Unequal
0
U
Encore une fois, c'est vraiment un raccourci pour
And[U, ##]
. Avec##
une séquence, les booléens individuels de la vérification de divisibilité initiale sont développés dans leAnd
, nous obtenons donc les vérifications que les deux chiffres sont uniques et que chaque chiffre divise l'entrée.And[U, d1∣n, d2∣n, ...]
la source
##&@@d&&##&@@
? Qu'est-ce que ça fait?0!=
par0<
?Python 3 , 56 octets
Essayez-le en ligne!
Sortie
False
si c'est un numéro Lynch-Bell,True
sinon.la source
0
en entréeBrachylog , 10 octets
Essayez-le en ligne!
Explication
la source
C #,
8783 octetsJ'ai écrit cela dans le bloc-notes avant de tester dans Visual Studio, où cela fonctionnait bien, alors je viens de réaliser que je suis maintenant à ce niveau de nerd ...
Version complète / formatée:
la source
JavaScript (ES6),
4241 octetsPrend l'entrée sous forme de chaîne et renvoie
true
oufalse
selon le cas. Edit: sauvé 1 octet grâce à @RickHitchcock. Autres versions:Prend l'entrée sous forme de chaîne et retourne
0
ou1
(c'est-à-dire l'inverse logique) pour 40 octets:Prend l'entrée sous forme de nombre et renvoie
0
ou1
pour 43 octets:Prend l'entrée sous forme de nombre et renvoie
1
ou0
pour 45 octets:la source
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
j'ai obtenu à la5081
place de ce qui était attendu548
, donc ce n'est pas correct comme écrit. Code vraiment serré, cependant..filter(x => x.indexOf('0')===-1)
cela renvoie 548 comme promis.Gelée ,
64 octetsEssayez-le en ligne!
Comment ça marche
la source
gQV=
si vous préférez une solution ASCII uniquement.Python 3 , 54 octets
Renvoie
False
lorsqu'un numéro est un numéro de Lynch-Bell. Prend des chaînes en entrée. Je suis venu seul mais très similaire à celui de Rod. J'aurais commenté sous son post mais je n'ai pas encore de réputation.Essayez-le en ligne!
la source
Gelée , 8 octets
Essayez-le en ligne!
la source
PHP,
6248 octetsExécuter en tant que pipe avec
-nR
ou tester en ligne . Sortie vide pour faux,1
pour vrai.panne
la source
Haskell , 61 octets
Essayez-le en ligne!
Définit une fonction anonyme
(#)=<<show
qui, à partir d'un nombre, renvoieTrue
ouFalse
.la source
05AB1E , 4 octets
Essayez-le en ligne!
Même algorithme que cette réponse à une question connexe .
la source
05AB1E , 8 octets
Utilise l' encodage 05AB1E . Essayez-le en ligne!
la source
Mathematica, 57 octets
la source
IsLynchBellNumber
LynchBellNumberQ
. ;)Python 2 , 66 octets
Ceci est une solution en Python 2, dont le but est de produire
True
pour la vérité et laFalse
fausse:Essayez-le en ligne!
la source
Haskell,
260241201162 octetsExplication
Ont considérablement raccourci thanx à Laikoni
la source
Japt ,
151411109 octetsEssayez-le
la source
©!
->«
pour -1 octetNeim , 9 octets
Essayez-le en ligne!
-2 grâce à Okx .
Hmm, il y a une symétrie sympa ...
oO.O.O.Oo
la source
𝐂D𝐮𝔼
au golf à𝐮ℚ
(unifier, vérifier l'égalité en ignorant les types)Perl 6 , 27 octets
Essayez-le en ligne!
.comb
est une méthode qui, sans argument, divise une chaîne en ses caractères individuels. Un nombre est implicitement converti en chaîne et.comb
renvoie donc ses chiffres..comb.all
est une jonction de tous les chiffres.$_ %% .comb.all
est une jonction de la divisibilité de l'argument d'entrée$_
par tous ses chiffres. Par exemple, si$_
c'est le cas123
, la jonction estall(True, False, True)
, qui s'effondreFalse
dans un contexte véridique.[!=] .comb
réduit les chiffres de l'argument d'entrée avec l'!=
opérateur, qui évalueTrue
si les chiffres sont tous différents.la source
Rétine , 37 octets
Essayez-le en ligne! Le lien inclut des cas de test. Explication: La première étape remplace tout chiffre en double par un zéro. La deuxième étape remplace chaque chiffre par sa représentation unaire suivie de la représentation unaire du nombre d'origine. La troisième étape calcule ensuite le reste de la division du nombre d'origine par chaque chiffre non nul. Si le numéro est un numéro Lynch-Bell, cela supprimera tout et cela sera testé par l'étape finale.
la source
Ruby 2.4, 42 octets
(Pas encore de TIO, désolé)
la source
CJam, 17 octets
CJam est le Java des langages de golf. Il est même interprété en Java!
Explication:
la source
VBScript, 177 octets
Salut à tous, ceci est mon tout premier post CG, et ma première tentative, alors j'espère avoir suivi toutes les règles ...
Cela peut être exécuté à partir du bloc-notes en ajoutant une ligne à la fin
Et puis l'enregistrer en tant que .vbs, puis double-cliquez.
Explication:
VBScript est un peu un instrument contondant pour le golf, mais bon, je n'ai pas encore appris Ruby ...
la source
PHP , 51 octets
imprime zéro pour vrai et un pour faux
Essayez-le en ligne!
PHP , 62 octets
imprime zéro pour vrai et un pour faux
Essayez-le en ligne!
la source
Pyth , 10 octets
Vérifiez tous les cas de test.
Comment?
Pyth , 11 octets
Vérifiez tous les cas de test.
Comment?
la source
Perl 5 , 34 octets
33 octets de code + 1 pour l'
-p
indicateurEssayez-le en ligne!
Sorties
0
pour vérité, tout autre numéro pour faussela source
Kotlin 1.1,
986659 octetsEmbellie
Tester
la source
APL (Dyalog Unicode) , 24 octets
Essayez-le en ligne!
Dfn simple, peut probablement être joué un peu plus. Rendement booléen APL standard 1 pour la vérité, 0 pour la fausse.
Il convient de mentionner que la fonction prend les arguments comme des chaînes plutôt que des entiers.
Comment:
la source
Julia 1.0 , 39 octets
rem.(x,d)
est un vecteur contenant les restes après avoir divisé x par chaque chiffre dex
.0*unique(d)
est un vecteur de longueur égale au nombre de chiffres uniques, avec toutes les valeurs nulles. Vérifiez s'ils sont égaux.Essayez-le en ligne!
la source
rubis -n , 40 octets
Essayez-le en ligne!
Lisez le nombre sous forme de chaîne. Remplacez chaque caractère (chiffre) par une occurrence ultérieure de ce caractère, s'il est présent, ou le nombre entier modulo ce chiffre. Il en résultera une chaîne de
0
s uniquement si et seulement s'il s'agit d'un numéro de Lynch-Bell. Pourquoi? S'il y a un chiffre répété, chaque instance de la dernière reste la même, et puisque l'entrée ne contient pas de zéros, cela signifie un chiffre différent de zéro. Sinon, nous vérifions simplement si chaque chiffre divise également le nombre.Puisqu'il n'y a pas de numéros de Lynch-Bell à 8 chiffres ou plus (preuve formelle: OEIS le dit), vérifier si la chaîne résultante est lexicographiquement plus tôt que la chaîne
'00000000'
équivaut à vérifier si ce sont tous des zéros.la source
R , 86 octets
Prend l'entrée sous forme de chaîne. J'ai l'impression que c'est jouable au golf.
Essayez-le en ligne!
la source