Gegeben ein Muster (String- oder Array-Format) von Bits:
[0,1,1,1,0,1,1,0,0,0,1,1,1,1,1,1]
Die Aufgabe besteht darin, eine beliebige Anzahl aufeinanderfolgender 1-Bits durch eine aufsteigende Zahlenfolge zu ersetzen, die bei 1 beginnt.
Eingang
- Muster (kann als String oder Array empfangen werden) Beispiel:
- Zeichenfolge:
1001011010110101001
- Array:
[1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1]
- Zeichenfolge:
Ausgabe
- Aufsteigende Zahlenfolge (kann als Zeichenfolge oder Array zurückgegeben werden) Beispiel:
- Zeichenfolge:
1 0 0 1 0 1 2 0 1 0 1 2 0 1 0 1 0 0 1
- Array:
[1, 0, 0, 1, 0, 1, 2, 0, 1, 0, 1, 2, 0, 1, 0, 1, 0, 0, 1]
- Zeichenfolge:
Regeln
- (gilt nur für Zeichenketten) Die Eingabe enthält keine Leerzeichen zwischen
1
und0
- Eingabe übernehmen
length > 0
- (gilt nur für Zeichenfolgen) Die Ausgabe wird durch ein Leerzeichen getrennt. (Verwenden Sie ein beliebiges anderes Trennzeichen, wenn Sie nicht eine Zahl oder einen Buchstaben aus dem Alphabet benötigen.)
Beispiel:
Given [0,1,1,1,0,1,1,0,0,0,1,1,1,1,1,1]
Output [0,1,2,3,0,1,2,0,0,0,1,2,3,4,5,6]
--------------------------------------------------------------------------
Given 0110101111101011011111101011111111
Output 0 1 2 0 1 0 1 2 3 4 5 0 1 0 1 2 0 1 2 3 4 5 6 0 1 0 1 2 3 4 5 6 7 8
---------------------------------------------------------------------------
Given 11111111111101
Output 1 2 3 4 5 6 7 8 9 10 11 12 0 1
Gewinnkriterien: Codegolf
03 B3 20 AC 01 B6 02 DC
) oder 9 Bytes (utf-8:)CE B3 E2 82 AC C6 B6 CB 9C
oder 10 Bytes (z. B. UTF-16 einschließlich der 2-Byte-Stückliste) sein. in irgendeiner Nicht-Spielzeug-Kodierung? (Ja, man könnte eine 8-Bit-Codierung für Spielzeugeγ€ƶ˜
würde dargestellt werden als04 80 8F 98
. Die Codepage dient in erster Linie dazu, das Schreiben von Code zu vereinfachen. Um diese 4-Byte-Datei auszuführen, müssen Sie den Interpreter mit dem--osabie
Flag ausführen .Haskell , 15 Bytes
Probieren Sie es online!
Erklärung / Ungolfed
scanl1
iteriert von links über eine Liste mit einer Funktion, die das letzte Ergebnis und das aktuelle Element verwendet, um eine neue Liste mit den Ergebnissen zu erstellen, wobei leere Listen und Singletons "unverändert" bleiben.(*).succ
ist das Äquivalent von\x y-> (x+1)*y
Die Verwendung dieser Funktion zusammen mit funktioniert
scanl1
nur, weil die aufsteigenden Sequenzen ( 1,2,3, .. ) mit 1 beginnen und entweder kein vorhergehendes Element haben (in diesem Fall ist es das erste Element in der Liste, das nicht "modifiziert" wird). oder sie haben eine führende 0 .quelle
Python 2 , 36 Bytes
Probieren Sie es online!
quelle
Schale ,
5 43 BytesProbieren Sie es online!
Erläuterung
Verlauf bearbeiten
-1 Byte bei Verwendung von
scanl1
overzipWith
-1 Byte durch Portierung von Dennis ' Lösung
quelle
APL (Dyalog Unicode) , 5 Bytes
Probieren Sie es online!
Wie es funktioniert
quelle
⊥⍨
Tricks.JavaScript (ES6), 22 Byte
Übernimmt die Eingabe als Array.
Probieren Sie es online!
Die kürzeren
a=>a.map(n=>a=n*-~a)
(20 Bytes) würden leider fehlschlagen,[1]
da Singleton-Arrays zu der Ganzzahl gezwungen werden, die sie halten.quelle
J , 4 Bytes
Ein Port der APL-Lösung von Bubbler
Probieren Sie es online!
J , 8 Bytes
Wie?
Es ist einfach die Entfernung zum vorhergehenden
0
Probieren Sie es online!
quelle
Python 2 ,
3938 Bytes-1 Byte dank Erik dem Outgolfer
Probieren Sie es online!
quelle
,
.,
du bist nicht mehr im Code, aber du wirst für immer in meinem Herzen seinGelee , 4 Bytes
Probieren Sie es online!
quelle
K (oK) ,
118 BytesLösung:
Probieren Sie es online!
Erläuterung:
Durchlaufen Sie die Liste. Inkrement-Akku, multiplizieren mit aktuellem Artikel (setzt den Akku zurück, wenn der Artikel 0 ist):
quelle
Gelee , 4 Bytes
Probieren Sie es online!
Wie es funktioniert
quelle
R ,
4631 BytesProbieren Sie es online!
sequence
Hier ist es ganz praktisch , was "hauptsächlich in Ehrfurcht vor der sehr frühen Geschichte von R existiert" .quelle
RAD, 8 Bytes
Probieren Sie es online!
Wie?
(⊢×1+⊣)
Wenn das rechte Argument "0
return" ist , erhöhen Sie0
andernfalls das linke Argument⍂
, LTR-Scan ((A f B) f C
anstelle vonA f (B f C)
), wenden Sie dies auf das gesamte Array anquelle
Japt,
765 BytesVersuch es
Erläuterung
quelle
Java 8,
5548 BytesÄndert das Eingabe-Array, anstatt ein neues zurückzugeben, um Bytes zu sparen.
-7 Bytes dank @TimSeguine .
Probieren Sie es online aus.
Erläuterung:
quelle
a->{int p=0,i=0;for(int b:a)a[i++]=b<1?p=0:++p;}
a->{int i=0;for(int v:a)a[i]+=v*i++<1?0:a[i-2];}
TIS , 68 + 33 = 101 Bytes
Code (68 Bytes):
Layout (33 Bytes):
Probieren Sie es online!
Erläuterung:
quelle
Gaia , 5 Bytes
Probieren Sie es online!
Erläuterung
Ugh, ich dachte, SE-Code-Schriften wären Monospace ...
quelle
C (GCC) ,
454438 BytesProbieren Sie es online!
Sparen Sie ein Byte dank Toby Speight!
Sparen Sie 6 Bytes, indem Sie * = und eine intelligentere while-Bedingung verwenden.
quelle
*(a-1)
→a[-1]
Perl 6 ,
29 2418 Bytes-6 Bytes danke an Sean!
Probieren Sie es online!
Die innere Funktion könnte durch
($+=1)*=*
, aber dann würde die anonyme Variable über Funktionsaufrufe hinweg bestehen bleiben. Dies erreichen wir, indem wir es in einen expliziten Codeblock einschließen.Erläuterung:
quelle
*.map(($+=1)*=*)
. Diese Lösung hat den Vorbehalt, dass die Statusvariable bei$
allen Aufrufen der Funktion erhalten bleibt. Wenn also das letzte Element, das an einen Aufruf übergeben wird, und das erste Element, das an den nächsten Aufruf übergeben wird, beide ungleich Null sind, beginnt die Zählung mit der falschen Nummer.*.map:{...}
.Gelee , 5 Bytes
Probieren Sie es online!
quelle
Haskell , 19 Bytes
Probieren Sie es online!
Erläuterung: Der Code ist äquivalent zu
scanl1(\b a->(b+a)*a)
, wobeib
das aktuelle Bit unda
der Akkumulator ist.scanl1
Nimmt eine Liste, instanziiert das erste Listenelement als Akkumulator, faltet die Liste um und sammelt die Zwischenwerte in einer neuen Liste.Edit: BMO schlug mich um ein paar Sekunden und 4 Bytes .
quelle
Pyth , 6 Bytes
Probieren Sie es hier aus!
Wie es funktioniert
quelle
Wollte eine Antwort mit regulären Ausdrücken bekommen. Es gibt wahrscheinlich eine einfachere Lösung, die ich dem Leser als Übung überlasse.
PowerShell Core , 86 Byte
Probieren Sie es online!
quelle
Wolfram Language (Mathematica) , 16 Byte
Probieren Sie es online!
quelle
QBasic, 60 Bytes
Nimmt die Eingabe als String; gibt die Ausgabe als durch Zeilenumbrüche getrennte Zahlen aus.
Erläuterung
Wir lesen die Zeichenfolge
s$
und Schleifei
von1
bis zu ihrer Länge.MID$(s$,i)
Ruft die Teilzeichenfolge vom Zeicheni
(1-indiziert) bis zum Ende der Zeichenfolge ab. Wenn dies mit a beginnt1
, ist es lexikografisch>=
die Zeichenfolge"1"
. Wenn es mit einem beginnt0
, wird es nicht sein. Sob
wird ermittelt,0
ob das Zeichen bei Indexi
steht0
oder-1
ob das Zeichen steht1
.Als nächstes aktualisieren wir den aktuellen Wert
v
. Wenn wir nur a lesen0
, wollen wirv
werden0
; ansonsten wollen wirv
um eins inkrementieren . Mit anderen Wortenv = (-b) * (v+1)
; Vereinfachung der Mathematik ergibt den kürzeren Ausdruck im Code. Zum Schluss druckenv
und loopen wir .quelle
Brain-Flak , 60 Bytes
Probieren Sie es online!
Erläuterung:
quelle
Retina , 14 Bytes
Probieren Sie es online!
quelle
C (gcc),
575251 BytesDurch die JavaScript-Antwort von Port of Arnauld wird das Array direkt geändert. Probieren Sie es hier online aus .
quelle
f(a,l,c)int*a;{for(c=0;l--;)c=*a++*=c+1;}
Shakespeare, 365 Bytes
versuche es hier
weniger Golf Version
quelle
C ++, 47 Bytes
Ein Lambda, das ein Array an der richtigen Stelle ändert und Start- und Endzeiger erhält.
Probieren Sie es online! (erfordert Javascript)
Generische Version mit 55 Bytes (dies funktioniert für jeden Container mit Elementen des arithmetischen Typs):
quelle