Eine Treppennummer ist eine positive Ganzzahl x , sodass ihre n- te Ziffer (eine, die mit der niedrigstwertigen Ziffer beginnt) gleich x% (n + 1) ist . Das ist ein bisschen mundvoll, also schauen wir uns ein Beispiel an. Nehmen wir 7211311 , wenn wir die modularen Reste von 7211311 im Bereich 2-8 nehmen, erhalten wir Folgendes:
7211311 % 2 = 1
7211311 % 3 = 1
7211311 % 4 = 3
7211311 % 5 = 1
7211311 % 6 = 1
7211311 % 7 = 2
7211311 % 8 = 7
Das sind die Ziffern von 7211311 ! Somit ist 7211311 eine Treppennummer .
Aufgabe
Wenn Sie einen Code schreiben, der eine positive Zahl als Eingabe annimmt, werden zwei unterschiedliche Werte ausgegeben, einer, wenn es sich um eine Treppennummer handelt, und der andere, wenn dies nicht der Fall ist.
Dies ist ein Code-Golf- Wettbewerb, daher sollte Ihr Ziel darin bestehen, die Anzahl der Bytes in Ihrem Quellcode zu minimieren.
Testfälle
Hier sind die ersten 13 Treppennummern:
1, 10, 20, 1101, 1121, 11311, 31101, 40210, 340210, 4620020, 5431101, 7211311, 12040210
quelle
0
eine Treppe Nummern? Viele Antworten glauben es.Antworten:
Haskell, 55
57BytesEin anderer Ansatz als die andere Haskell-Lösung.
Danke xnor für das Speichern von 2 Bytes.
quelle
let
Ausdruck verkürzen .Brachylog ,
25211614 BytesProbieren Sie es online!
Erste Brachylog-Einreichung: D
wahrscheinlich sehr ungolfed... vielen Dank an Leaky Nun und Fatalize für die Ermutigung und Hilfe beim Golfen von 25 auf nur 14! :) :)quelle
Javascript,
42413938 Bytes-4 Bytes dank @Shaggy und @ETHProductions
Dabei wird die Nummer als Zeichenfolge verwendet und zurückgegeben,
false
wenn es sich bei der Nummer um eine Treppennummer handelt,true
andernfalls.Beispielcode-Snippet:
quelle
!
da die Abfrage nicht explizit angibt, dass Sietrue
für true undfalse
für false zurückgeben müssen, sondern lediglich zwei unterschiedliche Werte zurückgeben müssen.i
selbst berechnen :s=>[...s].some(d=>s%i--^d,i=s.length+1)
~x == -(x+1)
bei ganzen Zahlen undx%-y == x%y
, glaube ich, eine weitere erhalten wird:s=>[...s].some(d=>s%i++^d,i=~s.length)
05AB1E , 6 Bytes
Code:
Verwendet die 05AB1E- Codierung. Probieren Sie es online!
Erläuterung:
quelle
Haskell, 60 Bytes
Nimmt die Nummer als int
quelle
Mathematica, 60 Bytes
Probieren Sie es online!
@alephalpha spielte es auf 48
Mathematica, 48 Bytes
Das nächste ist 24120020
quelle
Python 2 , 54 Bytes
Probieren Sie es online!
quelle
Japt ,
97 BytesÜbernimmt die Eingabe als Zeichenfolge.
Probier es aus
Erläuterung
Wir nehmen implizit den String als Eingabe.
Ordnen Sie jedes Zeichen in der Zeichenfolge zu.
J
ist die Japt-Konstante für-1
und´
dekrementiert sie bei jedem Durchgang um 1 (--
in JavaScript). Das gibt uns also beim ersten Durchgang-2
.Wir verwenden diesen Wert, um eine Modulo-Operation für die Eingabezeichenfolge auszuführen, die dabei automatisch in eine Ganzzahl umgewandelt wird. In JavaScript
x%-y
ergibt sich das gleiche Ergebnis wiex%y
.Kehre die resultierende Zeichenfolge um.
Überprüfen Sie, ob die neue Zeichenfolge der ursprünglichen Eingabe entspricht, und geben Sie das Ergebnis implizit als Booleschen Wert aus.
quelle
(Y+2
, ich glaube, das könnte mindestens 1 Byte kürzer sein ...¥£%´JÃw
:-) (funktioniert weilx%y == x%-y
in JS)Neim , 6 Bytes
Erläuterung:
Probieren Sie es online!
quelle
Gelee , 7 Bytes
Probieren Sie es online!
quelle
Python 2 , 56 Bytes
Probieren Sie es online!
quelle
Perl 6 , 32 Bytes
Probieren Sie es online!
.comb
ist die Anzahl der Zeichen in der Zeichenfolgendarstellung des Eingabearguments$_
(dh die Anzahl der Stellen).1 + .comb ... 2
ist die Zahlenfolge von eins größer als die Anzahl der Ziffern bis 2.«%«
ist der Modul-Hyperoperator, der den Rest ergibt, wenn$_
das Eingabeargument auf der linken Seite durch jedes der Elemente der Sequenz auf der rechten Seite geteilt wird:$_ % 2, $_ % 3, ...
.[~]
Verkettet diese Ziffern zu einer neuen Zahl, die mit dem Eingabeargument unter Verwendung des String-Gleichheitsoperators verglichen wirdeq
.quelle
PHP , 43 Bytes
Probieren Sie es online!
PHP , 44 Bytes
Gibt 1 für wahr und nichts für falsch aus
Probieren Sie es online!
quelle
Pyth , 13 Bytes
-1 Bytes dank Okx .
Probieren Sie es online!
Erläuterung
Alternative Lösung , noch 13 Bytes (danke an karlkastor )
Probieren Sie es online! Dies ist im Wesentlichen dieselbe wie bei der ersten Lösung, mit der Ausnahme, dass das
i
Array von Zahlen in eine Zahl konvertiert wird und der Bereich unterschiedlich generiert wird.quelle
ss`M_
mitjk_
zu speichern 2 Byte.j
eine Zeichenkette ausgibt, während ich eine Zahl brauche, um sie mit der Eingabe zu vergleichen (die eine Zahl ist).qi_.e%Q+2k`QT
Verwenden von Enumerated Map (.e
) anstelle von Map. Und konvertieren Sie die Reste in eine Basis 10 int aus der Liste, anstatt Join zu verwenden.C ++, 104 Bytes
1) ursprüngliche Version:
2) in lesbarer Form:
Probieren Sie es online!
quelle
Pari / GP , 42 Bytes
Probieren Sie es online!
quelle
Python 2 ,
66 60 5857 Bytesx and
(sollte nicht auf 0 überprüft werden)enumerate
Probieren Sie es online!
quelle
Python 3: 63 Bytes
Wenn ich zählen könnte, wie oft ich wünschte, die Aufzählung wäre kürzer ...
Probieren Sie es online!
quelle
lambda m:all(m%n==int(x)for n,x in enumerate(str(m)[::-1],2))
Java (OpenJDK 8) , 60 Byte
Probieren Sie es online!
Eine Nicht-String-Version.
quelle
Java 8,
156149BytesUngolfed:
Probieren Sie es online!
UPDATE:
-7 Bytes : entfernt nutzlos
{}
und ersetztInteger.parseInt(...)
durchnew Integer(...)
-9 Bytes : Dank Kevin Cruijssen, entfernt , um eine Reihe von nutzlos
()
, verwendetLong
stattInteger
undprint
stattprintln
. Danke Kévin!quelle
new Integer
Kannnew Long
(-3 Bytes) sein;println
kann seinprint
(-2 Bytes); und Sie können die umgebende Klammer entfernennew Long(s[0])%i+f;
(-4 Bytes).Charcoal ,
2015 BytesProbieren Sie es online! Ausgänge
-
für eine Treppennummer, sonst nichts. Link ist eine ausführliche Version des Codes.quelle
Python 2, 61 Bytes
quelle
q / kdb + 34 Bytes
Lösung:
Beispiel:
Erläuterung:
Wandeln Sie die eingegebene Nummer in eine Zeichenfolge um, zählen Sie ab der Länge der Zeichenfolge, addieren Sie 2 zu allen, kehren Sie sie um und geben Sie jede Zahl
mod
zusammen mit der ursprünglichen Eingabe ein. Wandle das Ergebnis des Mods in eine Zeichenkette und reduziere die Liste. Überprüfe, ob es der Zeichenkette der eingegebenen Nummer entspricht:Anmerkungen:
Der Großteil der Lösung ist für das Generieren der
2,3,4..
Liste, ich habe eine andere Lösung, die weniger Zeug macht, aber nach dem Golfen 37 Bytes ergibt:quelle
Clojure, 75 Bytes
Die Eingabe ist eine Zeichenfolge, die verwendet,
map
und das%
Ende ist kürzer als derfor[i(range(count %))]
Ansatz.quelle
Haskell, 62 Bytes
f x=and$zipWith(==)(reverse$show x)$map(head.show.mod x)[2..]
Anstatt die (unendliche) Liste von Modulen umzukehren, wird die Liste gekürzt, indem sie mit der umgekehrten Zeichenfolgenrepräsentation des Integrals x gezippt wird, wodurch sichergestellt wird, dass sie in Bezug auf die Elemente gleich ist.
quelle
Perl 5 , 41 Bytes
39 Byte Code + 2 Flags
-pa
Probieren Sie es online!
Gibt nichts (undef) für Treppennummern aus, 1 für alles andere
quelle