Sie erhalten eine positive ganze Zahl (die niemals eine 0 enthält) als Eingabe. Ihre Aufgabe ist es zu überprüfen, ob es sich um eine Lynch-Bell-Nummer handelt oder nicht.
Eine Zahl ist eine Lynch-Bell-Zahl, wenn alle Ziffern eindeutig sind und die Zahl durch jede Ziffer teilbar ist.
Tatsächlich gibt es nur 548 Lynch-Bell-Nummern. Eine Hardcodierung ist also möglich, wird aber mit ziemlicher Sicherheit länger dauern.
126 ist eine Lynch-Bell-Zahl, da alle Ziffern eindeutig sind und 126 durch 1, 2 und 6 teilbar ist.
Sie können jeden wahrheitsgemäßen und falschen Wert ausgeben.
Beispiele:
7 -> truthy
126 -> truthy
54 -> falsy
55 -> falsy
3915 -> truthy
Dies ist OEIS A115569 .
Antworten:
Mathematica, 42 Bytes
Ich denke,
0!=##&@@d&&##&@@
Mathematica hat eine neue Lesbarkeitsschwäche ...Erläuterung
Einige der hier verwendeten syntaktischen Grundzucker:
&
hat eine sehr niedrige Priorität und verwandelt alles, was davon übrig bleibt, in eine unbenannte Funktion.&&
ist nur derAnd
Betreiber.#
ist das Argument der nächsten umschließenden unbenannten Funktion.##
ist eine Folge aller Argumente der Funktion.@
ist die Präfixnotation für Funktionsaufrufe, dhf@x == f[x]
.@@
istApply
, das die Elemente einer Liste als einzelne Argumente an eine Funktion übergibt, dhf@@{a,b,c} == f[a,b,c]
.Damit aus dem Weg ...
Dies sollte ziemlich selbsterklärend sein: Dies gibt uns eine Liste der Dezimalstellen der Eingabe und speichert das Ergebnis in
d
.Dies testet die Eingabe auf Teilbarkeit durch jede ihrer Ziffern (weil der Teilbarkeitsoperator ist
Listable
). Dies gibt uns eine Liste vonTrue
s undFalse
s.Wir wenden die Funktion auf der linken Seite auf die Liste der Booleschen Werte an, sodass jeder Boolesche Wert ein separates Argument ist.
Wir wenden eine andere Funktion an
d
, so dass die einzelnen Ziffern als separate Argumente angegeben werden. Die Funktion ist0!=##&
, dh . Es prüft, ob alle Ziffern verschieden sind (und ob sie verschieden sind von, aber das ist durch die Herausforderung gegeben, und wenn es nicht so wäre, wäre es sowieso kein Divisor). ist wirklich nur ein 1-Byte-Sparer bei der Verwendung von sich selbst, und es funktioniert, weil es ein 1-Byte-Element ( ) gibt, von dem wir wissen, dass es nicht vorhanden ist. Das erste, was überprüft, dass die Ziffern eindeutig sind. Nennen wir dieses ErgebnisUnequal[0, d1, d2, ...]
0
0!=##&
Unequal
0
U
Auch dies ist wirklich nur eine Abkürzung für
And[U, ##]
. Da##
es sich um eine Sequenz handelt, werden die einzelnen Booleschen Werte aus der anfänglichen Teilbarkeitsprüfung in die erweitertAnd
, sodass überprüft wird, ob beide Ziffern eindeutig sind und jede Ziffer die Eingabe teilt.And[U, d1∣n, d2∣n, ...]
quelle
##&@@d&&##&@@
? Was macht das überhaupt?0!=
durch0<
?Python 3 , 56 Bytes
Probieren Sie es online!
False
Wird ausgegeben, wenn es sich um eine Lynch-Bell-Nummer handelt,True
ansonsten.quelle
0
Eingabe gebenBrachylog , 10 Bytes
Probieren Sie es online!
Erläuterung
quelle
C #,
8783 BytesIch habe das vor dem Testen in Visual Studio in Notepad geschrieben, wo es gut funktioniert hat. Ich habe gerade gemerkt, dass ich jetzt so ein Nerd bin ...
Voll / Formatierte Version:
quelle
JavaScript (ES6),
42 -41 ByteNimmt die Eingabe als eine Zeichenfolge und kehrt
true
oderfalse
gegebenenfalls. Bearbeiten: 1 Byte dank @RickHitchcock gespeichert. Andere Versionen:Übernimmt die Eingabe als Zeichenfolge und gibt für 40 Bytes
0
oder1
(dh die logische Umkehrung) zurück:Nimmt die Eingabe als Zahl und gibt
0
oder1
für 43 Bytes zurück:Nimmt die Eingabe als Zahl und gibt
1
oder0
für 45 Bytes zurück:quelle
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
ich5081
anstelle der erwarteten548
, so ist dies nicht korrekt wie geschrieben. Wirklich knapper Code..filter(x => x.indexOf('0')===-1)
dies wie versprochen 548 zurück.Gelee ,
64 BytesProbieren Sie es online!
Wie es funktioniert
quelle
gQV=
wenn Sie eine reine ASCII-Lösung bevorzugen.Python 3 , 54 Bytes
Gibt zurück,
False
wenn eine Zahl eine Lynch-Bell-Zahl ist. Nimmt Strings als Eingabe. Kam auf eigene Faust, aber sehr ähnlich wie Rod. Ich hätte unter seinem Beitrag kommentiert, aber ich habe noch keinen Ruf.Probieren Sie es online!
quelle
Gelee , 8 Bytes
Probieren Sie es online!
quelle
PHP,
6248 BytesLaufen Sie als Pipe mit
-nR
oder testen Sie es online . Leere Ausgabe für falsch,1
für wahr.Nervenzusammenbruch
quelle
Haskell , 61 Bytes
Probieren Sie es online!
Definiert eine anonyme Funktion,
(#)=<<show
die unter Angabe einer NummerTrue
oder zurückgibtFalse
.quelle
05AB1E , 4 Bytes
Probieren Sie es online!
Gleicher Algorithmus wie diese Antwort auf eine verwandte Frage .
quelle
05AB1E , 8 Bytes
Verwendet die 05AB1E- Codierung. Probieren Sie es online!
quelle
Mathematica, 57 Bytes
quelle
IsLynchBellNumber
LynchBellNumberQ
. ;)Python 2 , 66 Bytes
Dies ist eine Lösung in Python 2, deren gesamter Zweck darin besteht,
True
für die Wahrheit undFalse
für die Falschheit auszugeben:Probieren Sie es online!
quelle
Haskell,
260241201162 BytesErläuterung
Habe Danke an Laikoni deutlich gekürzt
quelle
Japt ,
151411109 BytesVersuch es
quelle
©!
->«
für -1 ByteNeim , 9 Bytes
Probieren Sie es online!
-2 danke an Okx .
Hmm, da ist eine schöne Symmetrie ...
oO.O.O.Oo
quelle
𝐂D𝐮𝔼
auf𝐮ℚ
(uniquify, Scheck für die Gleichstellung zu ignorieren Typen)Perl 6 , 27 Bytes
Probieren Sie es online!
.comb
ist eine Methode, die, wenn keine Argumente angegeben werden, einen String in seine einzelnen Zeichen aufteilt. Eine Zahl wird implizit in eine Zeichenfolge konvertiert und gibt daher.comb
ihre Ziffern zurück..comb.all
ist eine Verknüpfung aller Ziffern.$_ %% .comb.all
ist eine Verknüpfung der Teilbarkeit des Eingabearguments$_
durch alle seine Ziffern. Wenn zum Beispiel$_
ist123
, ist die Kreuzungall(True, False, True)
, dieFalse
in einem wahrheitsgemäßen Kontext zusammenbricht.[!=] .comb
Reduziert die Ziffern des Eingabearguments mit dem!=
Operator, der auswertet,True
ob die Ziffern alle unterschiedlich sind.quelle
Retina , 37 Bytes
Probieren Sie es online! Link enthält Testfälle. Erläuterung: Die erste Stufe ersetzt jede doppelte Ziffer durch eine Null. Die zweite Stufe ersetzt jede Ziffer durch ihre unäre Darstellung, gefolgt von der unären Darstellung der ursprünglichen Nummer. Die dritte Stufe berechnet dann den Rest der Division der ursprünglichen Zahl durch jede Ziffer ungleich Null. Handelt es sich bei der Nummer um eine Lynch-Bell-Nummer, wird alles gelöscht und dies wird in der Endphase geprüft.
quelle
Ruby 2.4, 42 Bytes
(Noch kein TIO, sorry)
quelle
CJam, 17 Bytes
CJam ist das Java der Golfsprachen. Es ist sogar in Java interpretiert!
Erläuterung:
quelle
VBScript, 177 Bytes
Hey allerseits, dies ist mein allererster CG-Beitrag und der erste Versuch, also hoffe ich habe alle Regeln befolgt ...
Dies kann über den Editor ausgeführt werden, indem am Ende eine Zeile hinzugefügt wird
Und dann als .vbs speichern, dann doppelklicken.
Erläuterung:
VBScript ist ein stumpfes Instrument zum Golfen, aber hey, ich habe Ruby noch nicht gelernt ...
quelle
PHP , 51 Bytes
gibt null für wahr und eins für falsch aus
Probieren Sie es online!
PHP , 62 Bytes
gibt null für wahr und eins für falsch aus
Probieren Sie es online!
quelle
Pyth , 10 Bytes
Überprüfen Sie alle Testfälle.
Wie?
Pyth , 11 Bytes
Überprüfen Sie alle Testfälle.
Wie?
quelle
Perl 5 , 34 Bytes
33 Byte Code + 1 für
-p
FlagProbieren Sie es online!
Ausgaben
0
für Wahrheiten, andere Zahlen für Falschheitenquelle
Kotlin 1.1,
986659 BytesVerschönert
Prüfung
quelle
APL (Dyalog Unicode) , 24 Byte
Probieren Sie es online!
Simple Dfn, kann wohl etwas mehr golfen werden. Yield-Standard-APL-Boolesche Werte 1 für Wahrhaftigkeit, 0 für Falschheit.
Es ist erwähnenswert, dass die Funktion die Argumente eher als Zeichenfolgen als als Ints verwendet.
Wie:
quelle
Julia 1.0 , 39 Bytes
rem.(x,d)
ist ein Vektor, der die Reste enthält, nachdem x durch jede Ziffer in geteilt wurdex
.0*unique(d)
ist ein Vektor mit einer Länge, die der Anzahl der eindeutigen Stellen entspricht, mit allen Nullwerten. Überprüfen Sie, ob sie gleich sind.Probieren Sie es online!
quelle
Ruby-n , 40 Bytes
Probieren Sie es online!
Lesen Sie die Nummer als Zeichenfolge ein. Ersetzen Sie jedes Zeichen (Ziffer) durch ein nachfolgendes Vorkommen dieses Zeichens, falls vorhanden, oder die ganze Zahl, die diese Ziffer moduliert. Dies führt
0
nur dann zu einer Zeichenfolge von s, wenn es sich um eine Lynch-Bell-Nummer handelt. Warum? Wenn es eine wiederholte Ziffer gibt, bleibt jede Instanz der letzten gleich, und da die Eingabe keine Nullen enthält, bedeutet dies, dass die Ziffer nicht Null ist. Ansonsten prüfen wir nur, ob jede Ziffer die Zahl gleichmäßig teilt.Da es keine 8-stelligen oder mehrstelligen Lynch-Bell-Zahlen gibt (formaler Beweis: OEIS sagt dies), ist die Überprüfung, ob die resultierende Zeichenfolge lexikografisch früher als die Zeichenfolge
'00000000'
ist, gleichbedeutend mit der Überprüfung, ob es sich nur um Nullen handelt.quelle
R , 86 Bytes
Übernimmt die Eingabe als Zeichenfolge. Ich halte das auf jeden Fall für Golf.
Probieren Sie es online!
quelle