Herausforderung
Ein Repdigit ist eine nicht negative Ganzzahl, deren Ziffern alle gleich sind.
Erstellen Sie eine Funktion oder ein vollständiges Programm, das eine einzelne Ganzzahl als Eingabe annimmt und einen Wahrheitswert ausgibt, wenn die eingegebene Zahl in der Basis 10 eine Umstellziffer ist, andernfalls einen falschen Wert.
Die Eingabe ist garantiert eine positive Ganzzahl.
Sie können die Eingabe ungestraft als Zeichenfolgendarstellung in Basis 10 verwenden.
Testfälle
Dies sind alles Umbuchungen unter 1000.
1
2
3
4
5
6
7
8
9
11
22
33
44
55
66
77
88
99
111
222
333
444
555
666
777
888
999
Eine größere Liste finden Sie auf OEIS .
Gewinnen
Der kürzeste Code in Bytes gewinnt. Das heißt nicht, dass kluge Antworten in ausführlichen Sprachen nicht erwünscht sind.
code-golf
math
number
arithmetic
decision-problem
Aidan F. Pierce
quelle
quelle
Antworten:
Brachylog , 1 Byte
Probieren Sie es online!
Dies wirkt sich auf ganze Zahlen aus.
Von
src/predicates.pl#L1151
:quelle
C (GCC) ,
333029 ByteProbieren Sie es online!
quelle
return
(denke, ich werde letzteres für meine Antwort stehlen :)).-O0
das Endergebnisn
von genau schreibteax
, um es zum Rückgabewert zu machen? Könnten Sie die Logik näher erläutern, warum Sie wussten, dass sie funktionieren würde?return n
, ein NOP zu sein, und es gibt keinen Grund, eine lokale Variable am Ende einer Funktion zuzuweisen, wenn Sie das Ergebnis nicht zurückgeben wollen.COBOL , 139 BYTES
Ich habe das Gefühl, dass COBOL das Code-Golfen nicht mag (wahrscheinlich, weil es auf keinen Fall gewinnen kann), aber hier ist:
A ist als PIC 9 (4) definiert.
quelle
TRUE
undFALSE
auf 1 bzw. 005AB1E , 1 Byte
Prüft, ob alle Ziffern gleich sind
Probieren Sie es online!
quelle
Python 3,
25, 24,19 Bytes.Eine stdin => Fehlercodevariante.
Gibt den Fehlercode 0 zurück, wenn es sich um eine Neuziffer handelt - oder um einen Fehler bei einem Fehler.
Vielen Dank an Dennis, der mir in den Kommentaren geholfen hat.
quelle
>1
eher testen als<2
. Das Auslösen eines tatsächlichen Fehlers wäre kürzer als das Verwenden vonexit
BTW.if python3 repdigit.py; then echo truthy; else echo falsy; fi
muss nach unserer Definition funktionieren, also ist 0 wahr und alles andere falsch.*
Unary entpackt eine iterable. Beispielsweise{*'123'}
erzeugt das Set{'1','2','3'}
.Mathematica, 27 Bytes
Es schlägt nicht
Equal@@IntegerDigits@#&
, aber es schlägt die andere arithmetikbasierte Mathematica-Lösung.Wiederholungsziffern haben die Form n = d (10 m & supmin; ¹ ) / 9, wobei m die Anzahl der Ziffern und d die wiederholte Ziffer ist. Wir können d von n wiederherstellen, indem wir es modulo 10 nehmen (denn wenn es eine Wiederholungsziffer ist, ist es die letzte Ziffer d ). Wir können dies also einfach als m = log 10 (9 n / (n% 10) + 1) neu anordnen und prüfen, ob m eine ganze Zahl ist.
quelle
Haskell , 15 Bytes
Probieren Sie es online! Übernimmt die Zeichenketteneingabe.
Entspricht
\s->all(==head s)s
. Schmale Alternativen:quelle
f s=(s<*s)==(s*>s)
ist eine sehr interessante idee, mir war dieses verhalten<*
vorher nicht bewusst .C (gcc), 41 Bytes
Dies ist eine Funktion, die Eingaben als Zeichenfolge
1
akzeptiert und zurückgibt, wenn es sich um eine Umdigit handelt, und0
ansonsten.Hierzu wird die
strspn
Funktion verwendet, die zwei Zeichenfolgen verwendet und die Länge des längsten Präfixes der ersten Zeichenfolge zurückgibt, das nur aus Zeichen der zweiten Zeichenfolge besteht. Hier ist die erste Zeichenfolge die Eingabe, und die zweite Zeichenfolge ist die letzte Ziffer der Eingabe, die durch Übergeben eines Zeigers auf das letzte Zeichen der Eingabezeichenfolge erhalten wird.Iff dem Eingang ist eine Schnapszahl, dann auf das Ergebnis des Aufrufs
strspn
wirdstrlen(s)
. Die Indizierung in gibts
dann ein Null-Byte zurück, wenn dies der Fall ist (str[strlen(str)]
immer der Fall ist\0
) oder die erste Ziffer, die sonst nicht mit der letzten Ziffer übereinstimmt. Wenn Sie dies mit negieren, wird festgestellt,!
ob es sichs
um eine Neuziffer handelt.Probieren Sie es online!
Vielen Dank an @Dennis, der mich indirekt über seine unglaublich beeindruckende Antwort an den Trick "Zuweisen statt Zurückgeben" erinnert hat und dabei 4 Bytes gespart hat!
quelle
strlen
indem Sie eine neue Zeichenfolge vermeiden und erstellen von*s
:c;f(char*s){c=*s;c=!s[strspn(s,&c)];}
für 37.PHP,
252825entferne alle Zeichen von rechts, die gleich dem ersten sind und drucke,
1
wenn alle Zeichen entfernt wurden.quelle
R, 31 Bytes
Diese Funktion arbeitet mit Zeichenfolgeneingaben und verwendet einen regulären Ausdruck, um zu bestimmen, ob die Eingabe eine Umstellziffer ist.
Beispiel
quelle
/// 110 Bytes
Probieren Sie es online!
Die /// Sprache hat kein Konzept von Wahrhaftigkeit und Falschheit, daher gibt diese "T" aus, wenn die Eingabe eine Umstellziffer ist, und gibt keine Zeichen aus, wenn die Eingabe keine Umstellziffer ist.
quelle
Jelly ,
21 ByteProbieren Sie es online!
quelle
1
-9
zählen als repdigits?Oktave , 11 Bytes
Probieren Sie es online!
Nimmt die Eingabe als String.
Es prüft alle Zeichen auf Gleichheit mit den ersten Zeichen. Wenn alle gleich sind, ist das Ergebnis ein Vektor mit nur
1
(wahr in Oktave), andernfalls gibt es mindestens einen0
(falsch in Oktave). Hier ist ein Beweis .quelle
all(...)
Müssten Sie es nicht einpacken, um eine Ausgabe mit wahrem / falschem Wert zu erhalten?grep, 17 bytes
Stimmt mit jeder Zeichenfolge überein, die eine Wiederholung des ersten Zeichens darstellt.
quelle
C #,
423328 Bytesi
muss eine Zeichenfolge sein.Dank @LethalCoder viel rasiert
quelle
i[0].ToString()
verkürzt werden kanni[0]+""
,<1
ist kürzer als==0
..Length<1
kann einfach sein==""
Braingolf , 6 Bytes
Probieren Sie es online!
Leider kann Braingolfs implizite Eingabe von Kommandozeilenargumenten keine Ganzzahleingabe als Zeichenfolge akzeptieren. Sie wird immer in eine Zahl umgewandelt. Stattdessen besteht die Lösung darin, sie über STDIN zu übergeben, wodurch 1 Byte zum Lesen von STDIN (
i
) hinzugefügt wird.Erläuterung:
Nachdem
u
die Länge des Stapels die Anzahl der eindeutigen Zeichen in der Eingabe entspricht, Subtrahieren von 1 bedeutet , dass es sein ,0
wenn , und nur , wenn es genau 1 eindeutige Zeichen in der Eingabe ist,0
ist die einzige Falsey Zahl in Python, son
ersetzt0
mit1
, und alles andere mit0
.quelle
Japt , 4 Bytes
Probieren Sie es online!
quelle
JavaScript (ES6),
2321 Bytes2 Bytes gespart dank Neil
Übernimmt die Eingabe entweder als Ganzzahl oder als Zeichenfolge. Gibt einen Booleschen Wert zurück.
Demo
Code-Snippet anzeigen
quelle
test
anstatt!!exec
2 Bytes zu sparen?Ohm , 4 Bytes
Probieren Sie es online!
Erläuterung
quelle
Ul≤
sollte funktionieren.0
ist falsch und jede andere Zahl ist wahr. Mir ist gerade aufgefallen, dass wir für diese Herausforderung genau das Gegenteil brauchen (oft dürfen wir tauschen, solange wir erklären, welcher Fall wahr und welcher falsch ist). Wahrheit wird definiert durch "würde eine Pause einlegen".Ul1E
sollte auch funktionieren (obwohl ich Ohm nicht kenne), da es nicht mit 0 umgehen muss.APL, 5 Bytes
2 Bytes gespart dank @KritixiLithos
Probieren Sie es online!
quelle
⊢≡1⌽⊢
.⊢
mit⍕
, um sowohl Zeichenfolgen als auch Zahlen zu behandeln.Java, 21 Bytes:
l
ist eineMutableList<Character>
von Eclipse-Sammlungen.quelle
l
könnte auch ein CharAdapter sein.Kotlin ,
2819 BytesProbieren Sie es online!
Nimmt Eingaben als
String
weilErläuterung
Wenn Sie die Tatsache nicht mögen, dass es eine braucht
String
, können Sie eine haben, die eineInt
für 24 Bytes benötigt .quelle
Regex (ECMAScript), 31 Bytes
Probieren Sie es online!
Nimmt Eingaben in Unary auf, wie es für mathematische Regexes üblich ist (beachte, dass das Problem bei Dezimaleingaben trivial ist: just
^(.)\1*$
).Erläuterung:
quelle
PHP, 30 Bytes
quelle
Neim , 1 Byte
Überprüft einfach, ob alle Elemente gleich sind.
Ohne eingebautes, 2 Bytes:
Erläuterung:
Das funktioniert da nur
1
in Neim als wahr angesehen wird und alles andere falsch ist.Alternativ für 4 Bytes:
Erläuterung:
Versuch es!
quelle
C 38 Bytes
Geht rekursiv eine Zeichenfolge. Wenn sich die ersten beiden Zeichen unterscheiden (
*s^s[1]
), ist dies nur dann erfolgreich, wenn wir am Ende der Zeichenfolge (!s[1]
) sind, andernfalls wiederholen wir den Test an der nächsten Position (f(s+1)
).Testprogramm
quelle
Java,
383323 Bytesn
istString
natürlich ein.Beachten Sie, dass
^...$
der reguläre Ausdruck nicht erforderlich ist, da er immatch
Vergleich zum Suchen in der Zeichenfolge automatisch für die exakte Zuordnung verwendet wird (z. B. die Methode).Versuch es!
Speichert
String
seit "Sie können Eingaben ungestraft als Zeichenfolge verwenden."quelle
matches
Nichterfordernis,^$
da es mit dem gesamten String übereinstimmt. Also ein definitives +1 von mir. ;)R, 25 Bytes
Probieren Sie es online aus
Die beste Nicht-Regex-Lösung, die ich finden konnte, war 36 Byte:
quelle
rle(charToRaw(scan(,'')))$v[2]<1
Cubix , 15 Bytes
Probieren Sie es online!
Beobachten Sie es laufen
Gibt 1 für wahr und nichts für falsch aus
Ganz einfach lesen liest die Eingabe zeichenweise ein. Es entfernt das aktuelle Zeichen vom vorherigen. Wenn das Ergebnis nicht Null ist, wird es sofort angehalten. Andernfalls wird die Eingabe und der Vergleich bis zum EOI fortgesetzt. Negieren Sie auf EOI (-1) und beenden Sie
quelle
QBasic 4.5, 55 Bytes
Ich habe es nachgerechnet! Die FOR-Schleife überprüft die Anzahl der Stellen in der Eingabe und erstellt dann
c
eine Reihe von Einsen , deren Länge der Eingabe entspricht. Eine Zahl ist dann repdigit, wenn sie den Einstring == 0 moduliert.Probieren Sie es online! Beachten Sie, dass der Online-Interpreter etwas schrullig ist und ich einige Anweisungen schreiben musste, dass die DOS-basierte QBasic-IDE automatisch erweitert wird.
quelle