Vor kurzem hatte ich einen Mathetest und bemerkte, dass eine bestimmte Zahl auf dem Test einem interessanten Muster entsprach. Die Zahl ( 28384
) stimmte mit einer generischen Ziffernfolge überein, die so aussieht
(n)(x)(n+1)(x)(n+2)(x)(n+3) etc...
wo n
und x
sind einstellige ganze Zahlen. Die Sequenz kann mit entweder beginnen x
oder n
mit und Ende entweder x
odern+y
.
Ihre Aufgabe ist es, bei einer mehrstelligen positiven Ganzzahl einen Wahrheits- oder Falschwert auszugeben, je nachdem, ob die Eingabe mit dem Muster übereinstimmt. Die Eingabe ist zwischen 4 und 18 Ziffern lang. Sie können die Eingabe als Zeichenfolgendarstellung der Ganzzahl annehmen. Die Eingabe beginnt nicht mit einer 0, sondern kann 0en enthalten oder damit enden.
n+y
wird immer eine einstellige Zahl sein (daher ist die Länge auf 18 begrenzt).
Testfälle
Diese sollten einen Wahrheitswert ausgeben
182838485868788898
4344
85868
12223242526
Und diese sollten falsch sein
12345
6724013635
36842478324836
1222232425
5859510511
Wie bei allen Code-Golfspielen gewinnt der kürzeste Code! Viel Glück und möge die Wahrscheinlichkeit immer zu Ihren Gunsten sein!
x
undn
nicht Null für Zahlen, die der Regel entsprechen?Antworten:
Python 2 ,
84818079 Bytes-1 Byte dank ovs
Probieren Sie es online!
Python 3 ,
82797877 BytesProbieren Sie es online!
In Python 3 etwas kürzer, aber ich dachte nicht, dass es eine eigene Antwort verdient.
Erläuterung
Wir haben eine Funktion eingerichtet, die einen
g
String und einen Index (entweder 1 oder 0) akzeptiert.g
dann wird zurückgegeben, ob oder ob nichtlen(set(x[a::2]))
, das ist die Anzahl der eindeutigen Stellen an jeder anderen Position, gleich ist(x[a==0::2]in"123456789")
, ob die anderen Stellen in aufsteigender Reihenfolge sind oder nicht. Wenn die Ziffern in aufsteigender Reihenfolge sind, wird zurückgegeben, ob sie alle gleich sind oder nicht. Wenn nicht, wird gefragt, ob die Menge leer ist, was nicht möglich ist. Daher wird immer false zurückgegeben.quelle
x[a<1::2]in"123456789"
kann sein"0"<x[a<1::2]<":"
(Vergleichen von Zeichen vergleicht Zeichencodes)a<1
? Scheint so kann nur seina
.Jelly ,
1311 BytesProbieren Sie es online!
Erläuterung:
quelle
05AB1E , 15 Bytes
Probieren Sie es online!
Erläuterung
Es sollte funktionieren (Testfälle haben funktioniert), aber wenn Sie Fehler finden, lassen Sie es mich bitte wissen.
14 Bytes, wenn keine Ausgabe als falsch gilt:
quelle
D, 117 Bytes
Auf jeden Fall suboptimal, aber es funktioniert gut
Probieren Sie es online!
quelle
Haskell,
1081139795 BytesBeispielanruf:
f "182838485868788898"
ErträgeTrue
Ungolfed-Version mit Erläuterungen:
quelle
isPrefixOf
ist nicht im Prelude, so müssen Sieimport Data.List
in Ihren Code aufnehmen oder eine Alternative verwenden, zand(zipWith(==)(n:r)[n..])
.x/=y
kann nur1>0
daran liegen wenn nichtx/=y
dannx==y
und der erste Fall fängt es auf.where
, definierenc
undd
als Hilfsfunktionen außerhalb vonf
ist in Ordnung.f
kann dann auf gekürzt werdenf s@(_:n:_)=c s||c(n:s)
.;
. Die Anzahl der Bytes ist identisch, verbessert jedoch die Lesbarkeit des Codes.JavaScript (ES6),
666360 BytesÜbernimmt die Eingabe als Zeichenfolge.
Testfälle
Code-Snippet anzeigen
quelle
C (gcc), 123 Bytes
Probieren Sie es online!
quelle
Python 3 ,
99 9689 Bytesall()
Funktion&
|
und ersetze zusätzliche Variable durchk<1
Probieren Sie es online!
Erläuterung:
Teilen Sie die Zeichenfolge zunächst in zwei Listen auf: eine mit ungeraden und eine mit geraden Elementen. Die zwei Listen A und B sollen so sein, dass entweder:
ODER genau das Gegenteil
Die Folgebedingung wird überprüft durch:
a in '123456789'
Die Bedingung mit der gleichen Nummer wird überprüft durch:
all(i=a[x] for i in a)
quelle
i
mit ersetzenk<1
und dasi
Argument insgesamt löschen.&
anstelle von verwendenand
. Sieor
können auch durch ersetzt werden|
.PHP , 68 Bytes
Probieren Sie es online!
Geben Sie einen Teil des Suchstrings ab dem ersten Auftreten der Eingabe bis zum Ende des Suchstrings als Wahrheitswert und nichts für falsch aus
für 2 Bytes mehr können Sie ersetzen
echo$s;
mit!!echo$s;
bekommen1
als truthy WertSuchen Sie das Vorkommen der Eingabe in einer der folgenden Zeichenfolgen im Array
quelle
JavaScript (ES6), 54 Byte
Übernimmt die Eingabe als Zeichenfolge.
quelle
MATL , 15 Bytes
Probieren Sie es online!
Mit Hilfe von @LuisMendo im Chat. Beachten Sie, dass, wenn leere Ausgabe + Fehler ebenfalls als "falsch" eingestuft werden, das weggelassen werden
X
kann, was die Punktzahl auf 14 Byte erhöht .quelle
Mathematica, 121 Bytes
quelle
Pyth , 20 Bytes
Ausgabe
[]
wenn die Zahl mit dem Ziffernmuster übereinstimmt, ansonsten nichts.Probieren Sie es online!
Erläuterungen (Beispiel mit Eingabe
85868
)quelle
Pyth, 17 Bytes
Probieren Sie es hier aus
Gleicher Algorithmus wie meine Jelly-Antwort.
Erläuterung:
quelle
Python 3 ,
167 161 157 131106 Bytes-55 Bytes dank @ WheatWizard's Vorschlägen
Probieren Sie es online!
quelle
set(c)
ist der gleiche wie{*c}
. (zumindest in Python 3)[t[z]for z in range(0,len(t),2)]
ist auch nur ein Listenspleiß. Das geht ganz einfach mitt[::2]
. Wenn Sie mit dieser Syntax nicht vertraut sind, empfehle ich Ihnen, einen Blick auf die Dokumente zu werfen, da dies sehr nützlich ist.Java (OpenJDK 8) ,
128119118108107104 BytesProbieren Sie es online!
Erläuterung:
quelle
Retina , 47 Bytes
Probieren Sie es online!
Gibt 1 aus, wenn es mit dem Muster übereinstimmt, und 0, wenn es nicht übereinstimmt
Erläuterung
Konvertieren Sie jede Ziffer n in n + 1 in unary, getrennt durch Semikolon
(Hinterste Zeile) wandelt jede Ziffer in die Differenz zwischen sich selbst und der einen Stelle davor um
(Hinterer Zeilenumbruch) entfernt die ersten 2 Ziffern
Zählt die Anzahl der Übereinstimmungen dieses Musters, wobei nach abwechselnden Nullen und Einsen gesucht wird
quelle