In Russland haben wir so etwas wie eine Tradition: Wir suchen gerne nach Glückstickets.
So sieht ein reguläres Ticket aus:
Wie Sie sehen, hat das Ticket eine sechsstellige Nummer.
Eine sechsstellige Zahl gilt als glücklich, wenn die Summe der ersten drei Ziffern der Summe der letzten drei Ziffern entspricht.
Die Nummer auf dem Foto hat kein Glück:
038937
038 937
0 + 3 + 8 = 11
9 + 3 + 7 = 19
11 != 19
Herausforderung
Geben Sie unter Berücksichtigung der Grenzen eines Bereichs (einschließlich) die Anzahl der darin enthaltenen Glücksscheinnummern zurück.
Parameter
- Eingabe: 2 Ganzzahlen: die erste und letzte Ganzzahl im Bereich
- Die Eingaben liegen zwischen 0 und 999999 einschließlich
- Ausgabe: 1 Ganzzahl: wie viele Glückszahlen im Bereich sind
- Sie können die Eingaben übernehmen und die Ausgabe in einem beliebigen akzeptablen Format zurückgeben
- Nehmen Sie führende Nullen für Zahlen unter 100000 an.
Beispiele
0, 1 => 1
100000, 200000 => 5280
123456, 654321 => 31607
0, 999999 => 55252
Dies ist Codegolf, daher gewinnt die kürzeste Antwort in Bytes in jeder Sprache.
Antworten:
05AB1E ,
8 (oder 10?)11 (oder 13?) BytesProbieren Sie es online aus oder überprüfen Sie einige weitere Testfälle .
HINWEIS: In 05AB1E sind Zeichenfolgen und Ganzzahlen austauschbar, sodass die Ausgabenummern keine führenden Nullen enthalten. Dies könnte jedoch mit 1 zusätzlichen Byte ( 12 Byte ) behoben werden :
Probieren Sie es online aus oder überprüfen Sie einige weitere Testfälle .
+3 Bytes zur Fehlerbehebung von Zahlen mit einer Länge von 3 oder weniger (Bereich
[000000, 000999]
).Erläuterung:
BEARBEITEN: Scheint, dass ich (und die meisten anderen Antworten) die Herausforderung leicht falsch verstanden habe und die Anzahl der Zahlen anstelle der Zahlen selbst innerhalb des Bereichs abgefragt wird. In diesem Fall kann ein Trailing
}g
hinzugefügt werden (schließen Sie den Filter und ermitteln Sie die Anzahl der in der gefilterten Liste verbleibenden Zahlen). Stattdessen sind es1013 Bytes :Probieren Sie es online aus oder überprüfen Sie einige weitere Testfälle .
quelle
R
.C # (.NET Core) , 93 + 18 = 111 Bytes
Probieren Sie es online!
18 Bytes für
using System.Linq;
. Ich nahm an, dass die Eingabe- und Ausgabeformate flexibel sein könnten. Ich nehme also zwei ganze Zahlen als Eingabe (den Bereich, einschließlich).Einige Testergebnisse:
quelle
JavaScript (ES6), 66 Byte
Nimmt Eingaben in Curry-Syntax vor
(m)(n)
, wobei m dieexklusiveinklusive Obergrenze und n die inklusive Untergrenze ist.Probieren Sie es online!
Wie?
Wir testen jede Zahl zu Fuß durch seine Ziffern d i und insgesamt Aktualisierung t :n dich t
Wenn wir am Ende des Prozesses haben , ist n eine Glückszahl.t = 0 n
JavaScript (ES6), 67 Byte
Gleiches Eingabeformat.
Probieren Sie es online!
Wie?
Für jede Nummer :n
38937 --> 38.937
['3','8','.','9','3','7']
+
:"3+8+.+9+3+7"
+.
durch^
:"3+8^+9+3+7"
24
Wenn wird kein Dezimalpunkt generiert und der ausgewertete Ausdruck ist nur eine positive Summe (falsch), es sei denn, n = 0 (wahr). Dies ist in beiden Fällen das erwartete Ergebnis.n ≤ 0( mod1000 ) n = 0
quelle
Ruby ,
5654 BytesProbieren Sie es online!
Methode:
quelle
Japt ,
3815 Bytes-23 danke an Shaggy!
Meine erste Japt-Einreichung; Danke an Shaggy für die Hilfe!
Probieren Sie es online!
quelle
Python 3,
117113106135 BytesDies ist meine allererste Antwort, daher bin ich mir sicher, dass es Raum für Verbesserungen gibt.
Ruft die ersten drei Ziffern durch Ganzzahldivision und die letzten drei durch Modulo ab. Die ersten und letzten Ganzzahlen in dem Bereich werden als Argumente der
x
Funktion asa
bzw. as eingegebenb
. Die Ausgabe erfolgtn
gedruckt.Ungolfed:
quelle
n=n+1
mitn+=1
und es direkt nach der if - Anweisung zu bewegen (if...:n+=1
)a
undb
als Pre-deklarierten Variablen. Sie müssen entweder eine Funktion haben oder sie über Eingabe übernehmenn=0
Teil in die Kopfzeile verschieben, z. B.def x(a,b,n=0)
R ,
9386 BytesKürzere Logik am Ende Komplimente von @ Giuseppe /
Probieren Sie es online!
Integer-Eingänge. Pad sie mit
0
. Konvertieren Sie in die sechs ASCII-Codepunkte. Missbrauch derF
eingebauten.quelle
scipen
Problems bei 0 fehl . Naja.Schale , 12 Bytes
Probieren Sie es online!
Erläuterung
quelle
[000000, 001001]
sollte2
(000000
und001001
) ergeben, führt aber1001
stattdessen zu. (Ich habe1,000,000
das Trailing1
als Fix für das hinzugefügt und entfernt , nicht sicher, wie einfach /Kohle , 15 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Bearbeiten: Ich dachte ursprünglich, dass es die Liste der Glückszahlen war, die erforderlich war. Dies kann in 14 Bytes (durch Entfernen von
L
, was die Länge der Liste einnimmt) oder in 20 Bytes erfolgen, wenn Sie eine schöne Formatierung wünschen:Probieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung:
quelle
Perl 5+
-pl -MList::Util+(sum)
, 49 BytesProbieren Sie es online!
Perl 5+
-nl -MList::Util+(sum) -M5.010
, 50 BytesDie Ausgabe jedes Tickets erfolgt stattdessen mit +1 Byte:
Probieren Sie es online!
quelle
Python 3 ,
8986 Bytes-2 Dank an Herrn Xcoder.
-3 inspirierend von Asone Tuhid Antwort.
Testergebnisse:
Probieren Sie es online!
quelle
sum
[...]
range(a,b+1)
spec gibt jetzt "inclusive" an (wenn es nicht so wäre, könntest du es übrigens*r
anstelle von verwendena,b
- siehe meine Python 2-Antwort). Beachten Sie auch, dass die Spezifikation jetzt bestätigt, dass es sich tatsächlich um den ausgegebenen Zähler handelt.MATL , 24 Bytes
Probieren Sie es online!
(-2 Bytes dank Luis Mendo.)
&:
- Machen Sie einen inklusiven Bereich zwischen den beiden angegebenen Zahlen1e3&\
- 'divrem' - Dividieren Sie durch 1000 und erhalten Sie die Erinnerungen und Floored-Quotienten in zwei Arrays.,
- zweimal tun!'03d'&V
- transponieren und konvertieren Sie jeden Wert in eine mit Nullen aufgefüllte Zeichenfolge mit drei Breiten&s
- Summiere die Werte jeder Zeilew
- Schalten Sie um, um das Erinnerungsarray wieder freizugeben, und wiederholen Sie dies]
- Schleife beenden=
- auf Gleichheit prüfen (gibt 1s an Stellen zurück, an denen die Arrays gleich sind)s
- Summiere diese, um die Anzahl zu erhalten (implizite Ausgabe)quelle
Kotlin ,
152119 BytesProbieren Sie es online!
Wenn Sie zwei Ganzzahlen nehmen, konvertieren Sie sie in sechs Zeichenfolgen und zählen.
Optimierte es dank mazzy und seiner Lösung auf 119 Bytes.
Probieren Sie es online!
quelle
{a:Int,b:Int->(a..b).map{"%06d".format(it)}.filter{(it[0]-'0')+(it[1]-'0')+(it[2]-'0')==(it[3]-'0')+(it[4]-'0')+(it[5]-'0')}.count()}
Gleichstrom , 44 Bytes
Nimmt zwei Argumente von einem ansonsten leeren Stapel und gibt sie an den Anfang des Stapels aus.
Probieren Sie es online!
Das Schlaue dabei ist die Verwendung eines unbenannten (dh nicht gespeicherten) Makros, das vor der Ausführung dupliziert wird, um eine Kopie von sich selbst auf dem anderen dreistelligen Teil auszuführen.
Erläuterung
Das innere Makro
[rA~rA~++rx]
hat den Effekt "Berechne die Ziffernsumme der dreistelligen Zahl, die auf dem Stapel an zweiter Stelle steht, und führe dann die ursprüngliche Oberseite des Stapels als Makro aus".Hauptprogramm:
quelle
Pascal (FPC) ,
163153 BytesProbieren Sie es online!
Erläuterung
Hier ist ein normal aussehender Code:
Probieren Sie es online!
Dann habe ich das Verhalten der for-Schleife missbraucht:
a
bisb
),a
können also als Schleifenvariable wiederverwendet werdeni
.b
vor der Schleife). Ich habe esb
als Container verwendet, indem ich es inkrementiert habe, wenn eine Glückszahl gefunden wurde und am Ende der Schleifeb
um die Anzahl der Glückszahlen von ihrem alten Wert abweicht, umb-a
das richtige Ergebnis zu erhalten. Das ist gefallens
.Das Ersetzen
d
durch Operationen direkt aufa
verkürzt die Schleife. Das Ersetzenc
durch Operationen direkt nach dera
Dosis verkürzt nicht die Schleife, sondern nach dem Fallenlassen died
Schleifenbegin
undend
unnötig und ich endete mit der Verwendung von nur 2 Variablen :)$
Startet hexadezimale Konstanten im Golf Code. Während sie keine Bytes speichern, eliminieren sie Leerzeichen, die vor den Dezimalkonstanten benötigt werden.quelle
Java (OpenJDK 8) , 162 Byte
... leiht sich aus dem obigen Kotlin-Beispiel.
Probieren Sie es online!
Das Vergleichen der Summe der Bytes des Strings ist genauso gut wie das Aufsummieren der tatsächlichen Ziffern.
quelle
a->b->
) verwenden, aber Sie müssen sich vollständig qualifizieren,IntStream
da es nicht in istjava.lang
.java.util.stream.
vorIntStream
Ihrem Code und Ihrer Byte-Anzahl hinzufügen . Wie auch von Jakob erwähnt , können Sie mit ein Byte speicherna->b->
, und Sie können auch speichern einige zusätzliche Bytes durch eine ÄnderungString.format
an"".format
. Versuchen Sie es online: 139 Bytes . Gute erste Antwort. +1 von mir. Genieße deinen Aufenthalt!PHP , 131 Bytes
Um es auszuführen:
Beispiel:
Oder versuchen Sie es online!
quelle
Perl 6 ,
5149 BytesProbieren Sie es online!
Anonymer Codeblock, der zwei Zahlen nimmt und die Anzahl der glücklichen zurückgibt. Zeitüberschreitung bei größeren Eingaben
quelle
Gelee ,
98 Bytes-1 danke an Dennis (
rµ...E)S
->r...E€S
da alles vektorisiert.)Ein dyadischer Link, der die beiden Endpunkte der Reichweite akzeptiert (oder umgekehrt) und die Anzahl der Glücksscheine angibt.
Probieren Sie es online! Oder sehen Sie ein Testsuite an
Wie?
quelle
E€S
spart dieµ
.Powershell, 85 Bytes
Testskript:
Ausgabe:
quelle
Kotlin, 95 Bytes
.kt
zum Test:Erläuterung
Zählen Sie die Zahlen aus dem Bereich, in dem die Summe aller Ziffern der doppelten Summe der ersten drei Ziffern entspricht.
quelle
Stax , 14 Bytes
Führen Sie es aus und debuggen Sie es , aber seien Sie geduldig!
quelle
Python 2 ,
8380 Bytes-3 unter Verwendung von Asone Tuhids Beobachtung - gib Kredit!
Probieren Sie es online!
Ähnlich wie meine Gelee-Antwort (aber die Eingaben müssen hier zB sortiert werden
a<=b
)75 Bytes für die Eingabe
a, b+1
(dh der Bereich schließt die rechte Grenze aus):Probier diese
quelle
Clojure, 102 Bytes
Das Mischen von Saiten und Mathe macht keinen Spaß.
quelle
J , 35 Bytes
Probieren Sie es online!
quelle
C (gcc)
9088 BytesPort meiner Java- Antwort . Probieren Sie es hier online aus . Vielen Dank an Ceilingcat für das Golfen von zwei Bytes.
Ungolfed:
quelle
L'✐'
stattdessen eine Variable vor10000
und weisen Sie sie10
zu.L'…'
Trick betrifft , ist das ordentlich; aber spart es bytes? Das scheint mir ein Multi-Byte-Zeichen zu sein, also kann es beim Speichern von Zeichen keine Bytes speichern ... oder?Java 8,
10199 BytesEin anderer Ansatz als die andere Java-Antwort . Anstatt Streams und Strings zu verwenden, wird eine Schleife verwendet und die Zahlen direkt ausgewertet. Probieren Sie es hier online aus .
Vielen Dank an Ceilingcat für das Golfen von zwei Bytes.
Ungolfed:
quelle
VBA (Excel), 159 Byte
Verwenden von Direktfenster und Zellen
[A1]
[A2]
als Eingabe.quelle
F #, 110 Bytes
Probieren Sie es online!
t
wandelt die Zeichenkette in Zahlen um und summiert sie auf.r
nimmt den Zahlenbereich vons
bise
und filtert die unglücklichen Zahlen heraus. Die ersten drei Ziffern werden von gesammeltn/1000
. Die zweiten drei Ziffern werden von berechnetn-(n/1000)*1000
.quelle