Es ist ziemlich einfach, bei einer bestimmten Zahl n
einen Bereich von 0
bis zu erstellen n-1
. Tatsächlich bieten viele Sprachen diese Operation als eingebaut an.
Das folgende CJam-Programm liest eine Ganzzahl und druckt dann einen solchen Bereich aus ( Online ausprobieren ! ):
ri,
Beachten Sie, dass Zahlen ohne Trennzeichen ausgedruckt werden.
Die Herausforderung
Ihre Aufgabe ist es, diesen Prozess umzukehren. Sie sollten ein Programm schreiben, das anhand einer Zeichenfolge, die einen Bereich darstellt, die Zahl zurückgibt, mit der dieser Bereich erstellt wurde.
Spezifikationen
- Die Zahlen sind ohne Trennzeichen angegeben.
- Sie können davon ausgehen, dass die Zeichenfolge einen gültigen Bereich bildet.
- Sie können eine 0- oder 1-basierte Indizierung für Ihren Bereich verwenden.
- Sie können davon ausgehen, dass eine korrekte Ausgabe niemals 32.767 überschreitet (eine gültige Eingabe hat also niemals eine Länge von mehr als 152.725).
- Sie können davon ausgehen, dass eine korrekte Ausgabe immer positiv ist (Sie müssen also nicht mit 0 oder negativ umgehen).
Dies ist Code-Golf , also gewinnt die kürzeste konkurrierende Antwort (gemessen in Bytes).
Testfälle
0-indiziert:
0123 -> 4
0 -> 1
0123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 -> 101
1-indiziert:
1234 -> 4
1 -> 1
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 -> 100
Antworten:
Prolog (SWI) ,
91 bis80 Bytes0-indiziert.
Zeilenumbrüche zur besseren Lesbarkeit hinzugefügt.
Probieren Sie es online!
quelle
Schale , 5 Bytes
Probieren Sie es online!
Nur Buchstaben!
Nimmt die Eingabe als String, das Ergebnis ist 1-indiziert.
Erläuterung
quelle
05AB1E ,
76 Bytes1-indiziert.
Probieren Sie es online! oder als Testsuite
Erläuterung
quelle
0
unabhängig von der Eingabe zurückzugeben: tio.run/##MzBNTDJM/f8/3efcdi/PbLv//5UMjYxNTM3MLSwNDZQA[NÝJQ#]N
war meine Idee, aber das ist besser, weil es funktioniert""
.Java 8,
6659 Bytes0-indiziert
-7 Bytes dank @ PunPun1000 .
Ich habe das Gefühl, dass dies verkürzt werden kann, indem nur die Länge der Eingabe überprüft wird, da davon ausgegangen werden kann, dass die Eingabe immer gültig ist. Ich finde das immer noch heraus.Kann dies nicht herausfinden, und es wird wahrscheinlich zu viele Bytes in Java kosten, um trotzdem nützlich zu sein (dasselbe gilt für die Rückgabe eines Teilstrings am Ende einer 1-indizierten Eingabe).Erläuterung:
Probieren Sie es hier aus.
quelle
Brachylog ,
97 BytesProbieren Sie es online!
0-indiziert.
Erläuterung
Hier übergeben wir die Eingabe über die Variable Output und greifen über die Variable Input auf das Ergebnis zu.
quelle
Ly , 29 Bytes
Probieren Sie es online!
Ich kann nicht glauben, dass dies so gut funktioniert hat wie es ...
quelle
Japt , 8 Bytes
Beginnend mit Funktionsmethoden in Japt.
0-indiziert. Kann Eingaben als Zeichenfolge, Ganzzahl oder Array mit 0 oder 1 Elementen annehmen.
Probier es aus
Erläuterung
Implizite Eingabe eines Strings
U
.Ruft die erste Ganzzahl ab
>=0
, die true zurückgibt, wenn sie eine Funktion durchläuft, die ...Erzeugt ein Array von ganzen Zahlen von
0
bis 1 weniger als die aktuelle ganze Zahl ...Verbindet es mit einer Schnur ...
Überprüft diese Zeichenfolge auf Gleichheit mit
U
.Implizite Ausgabe der resultierenden Ganzzahl.
Alternativ 8 Bytes
Probier es aus
quelle
Kohle , 13 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung:
quelle
Haskell,
4037 BytesFunktion, die nullbasierte Bereiche umkehrt.
Danke an Laikoni für das Speichern von 3 Bytes!
Probieren Sie es online aus.
quelle
f s=[n|n<-[0..],(show=<<[0..n])>s]!!0
.|m<-n+1=s!m
.Netzhaut , 30 Bytes
Fügt nach jeder Zahl rekursiv ein Semikolon hinzu und zählt dann die Anzahl der Semikolons
Probieren Sie es online!
quelle
JavaScript (ES6),
32-31ByteDank Challenger5 1 Byte gespart
Testfälle
Code-Snippet anzeigen
quelle
f(payload_param)()
oder sogar erfordertf(payload_param)(some_constant)
. (Übrigens bin ich mir nicht sicher, ob das in diesem speziellen Fall funktionieren würde, da ich beides braucher
undn
initialisiert werden muss.)Mathematica, 46 Bytes
1-indiziert
Eingang
quelle
Ruby ,
515046 Bytes(Dies ist mein erstes Ruby-Programm überhaupt, daher muss es einfach sein, weiter Golf zu spielen.)
-4 Bytes dank @Nnnes
quelle
.index(gets)
=>.index gets
. Sie können4e4
anstelle von verwenden8**5
. Dadurch wird die Ausführung jedoch noch langsamer. Es ist im Allgemeinen in Ordnung und spart oft ein paar Bytes, anonyme Lambdas für Ruby-Antworten zu verwenden: Probieren Sie es online aus! (Ich habe das Limit auf 100 geändert, damit keinePython 2 , 43 Bytes
Probieren Sie es online!
Python 2 , 43 Bytes
Probieren Sie es online!
Python , 46 Bytes
Probieren Sie es online!
Eine andere Strategie. Nimmt eine Anzahl von Zeichen vom Ende, die der Länge des größten Laufs von
0
's in s entspricht.Python , 46 Bytes
Probieren Sie es online!
Rekursive Version des oben genannten.
quelle
... i*'0'in s[1:] for ...
oder so?R , 47 Bytes
Probieren Sie es online!
1-indiziert
quelle
"if"
anstelle vonifelse
nchar
wie Sie es von Zahlen erwarten. Sie müssen sich jedoch um das Drucken Ihrer Ausgabe kümmern, da dies bei der Ausführung als vollständiges Programm nicht möglich wäre.n=nchar(scan());cat(which(cumsum(nchar(1:n))==n))
APL (Dyalog) ,
1711 Bytes-6 Bytes dank ngn .
Probieren Sie es online!
⍳⊂
finden Sie den Index des gesamten Arguments in{
…}
Das Ergebnis dieser anonymen Funktion:≢
Länge des Arguments⍳
ɩ ntegers bis das⍕¨
jeweils formatieren (stringifizieren),\
kumulative Verkettung dieserquelle
{,\⍕¨⍳≢⍵}⍳⊂
(11 Zeichen)Perl 5 , 19 Bytes
18 Byte Code + 1 für
-p
.Verwendet 1-basierte Indizierung. -7 Bytes dank @ nwellnhof ‚s viel Ansatz besser!
Probieren Sie es online!
Erläuterung
$\
ist eine spezielle Variable, dieprint
nach jeder Anweisung automatisch bearbeitet wird. Wenn Sie also diese Variable verwenden, um unsere Nummer zu speichern, müssen wir sie nicht aktualisieren$_
(was automatisch als Teil der Funktionalität des-p
Flags gedruckt wird ), um die gewünschte Ausgabe zu enthalten. Dann, während die Eingabe mit beginnt$\
, entfernen Sie es undredo
das Programm, das es erneut inkrementiert$\
und ersetzt. Wenn die Nummer am Anfang der Zeichenfolge nicht mehr gefunden wird, sind wir fertig! Zum Schluss dekrementieren,$\
damit wir die letzte Nummer im Bereich haben.quelle
$i++while s/$i\B//
(18 + 1 Byte)?Python 2 , 46 Bytes
0-indiziert
Probieren Sie es online!
quelle
CJam , 16 Bytes
Probieren Sie es online!
Alternative 16 Bytes
Probieren Sie es online!
quelle
CJam , 13 Bytes
So viele Kommas ...
Probieren Sie es online!
Erläuterung
quelle
Perl 6 ,
30 2827 BytesProbier es aus
Probier es aus
Probier es aus
Erweitert:
'',0...*
eine unendliche Folge von Werten erzeugt''
,0
,1
,2
,3
...[\~] '',0...*
Erzeugt eine unendliche Folge aller möglichen EingabenBeachten Sie, dass dieser Code niemals beendet wird, wenn Sie eine ungültige Eingabe machen.
quelle
Pyth ,
1110 Bytes1-indiziert.
Probieren Sie es hier aus
Wenn die leere Zeichenfolge ignoriert werden konnte, kann dies auf 6 Byte verkürzt werden :
-1 Byte dank @Mnemonic
quelle
?QfqQjkUT)1
Ich kann es auch in 11 machen, aber ich habe das Gefühl, dass ein Nachbestellen von einem Byte weg Golf spielen kann. Irgendwelche Ideen?jk
anstelle von s`m verwenden.CJam,
141211 BytesProbieren Sie es online
quelle
Dyvil ,
4238 BytesGleicher Algorithmus wie diese Java-Antwort , außer dass (ab) einige syntaktische Besonderheiten von Dyvil verwendet.
Erläuterung:
4
Bytes mithilfe eines geschweiften Zugriffsausdrucks anstelle einer Variablen für den Akkumulatorquelle
MATL , 14 Bytes
1-indiziert.
Probieren Sie es online!
Erläuterung
quelle
C # , 72 Bytes
Daten
String
i
Das zu entschlüsselnde Int-ArrayInt32
Die Nummer, mit der das Array erstellt wirdGolf gespielt
Ungolfed
Ungolfed lesbar
Vollständiger Code
Releases
72 bytes
- Anfangslösung.Anmerkungen
quelle
i=>{int c,p=c=0;for(;p<i.Length;)p+=(c+++"").Length;return c;}
62 BytesSOGL V0.12 ,
11109 Bytes1-indiziert.
Probieren Sie es hier aus!
Erläuterung:
..oder 7 Bytes ohne den leeren Fall
Probieren Sie es hier aus!
quelle
Aceto ,
2725 Bytes1-basierter Index.
Wir
r
lesen den Input undM
emorisieren ihn (undL
laden ihn direkt wieder), dann negieren wir ihn (!
was nur für einen leeren String zu einem Wahrheitswert führt). Wenn dieser Wert wahr ist (`
), springen wir zum Ende (;
), wo wirp
die implizite Null eingeben .Andernfalls erhöhen wir den aktuellen Stapelwert (anfangs eine Null), duplizieren ihn und legen eine Kopie auf den Stapel nach rechts, während wir uns ebenfalls dorthin bewegen (
Id]
). Dann konstruieren wir einen abnehmenden Bereich (z
), verbinden den Stapel als String (¥
) und verschieben den Wert (und uns) wieder auf den ursprünglichen Stapel ([
). WirL
laden den zuvor gespeicherten Wert (die Eingabe) und vergleichen ihn mit dieser Zeichenfolge. Wenn gleich, springen wir wieder zum Ende, wo wir den aktuellen "Zähler" -Wert (=`;
) ausgeben .Andernfalls wird viel leerer Raum durchlaufen, bis die Hilbert-Kurve schließlich den
<
Wert erreicht, mit dem die IPI
wieder oben liegt, der Zähler erhöht und erneut getestet wird.quelle
Gestapelt , 23 Bytes
Probieren Sie es online!
Grundsätzlich wird
0
solange inkrementiert, bis der Bereich von0
bis zur Zahl der Eingabe entspricht, wobei zuerst auf Gleichheit geprüft wird.quelle
Gelee , 8 Bytes
Probieren Sie es online!
quelle