Aufgabe
Bei einem nicht leeren Array von 0
und 1
halbieren Sie die Länge der Läufe von 0
.
Eingang
Eine Reihe von 0
und 1
. Akzeptables Format:
- Reales Array in Ihrer Sprache
- Durch Zeilenvorschub getrennte Zeichenfolge von
0
und1
- Fortlaufende Zeichenfolge von
0
und1
- Jedes andere vernünftige Format
Beispielsweise sind die folgenden drei Eingaben zulässig:
[1, 0, 0, 1]
"1\n0\n0\n1"
(wo\n
ist ein Zeilenvorschub U + 000A)"1001"
Sie können davon ausgehen , dass die Läufe 0
haben sogar Länge .
Ausgabe
Ein Array von 0
und 1
in den oben angegebenen akzeptablen Formaten.
Testfälle
input ↦ output
[1,0,0,1,0,0,1] ↦ [1,0,1,0,1]
[1,1,0,0,1,1,0,0,1] ↦ [1,1,0,1,1,0,1]
[1,1,0,0,1,1,1,0,0,1,1] ↦ [1,1,0,1,1,1,0,1,1]
[1,1,1] ↦ [1,1,1]
[0,0,1] ↦ [0,1]
[0,0] ↦ [0]
[1,1,1,0,0,0,0,1,1,1,1,0,0,1,0,0,1,1,0,0,1,1,1,1,0,0,1,0,0] ↦ [1,1,1,0,0,1,1,1,1,0,1,0,1,1,0,1,1,1,1,0,1,0]
Wertung
Das ist Code-Golf . Kürzeste Antwort in Bytes gewinnt.
Es gelten Standardlücken .
code-golf
array-manipulation
Undichte Nonne
quelle
quelle
true
undfalse
statt1
und nehmen0
?0
wahr erachtet wird.Antworten:
Retina , 4 Bytes
Probieren Sie es online!
quelle
05AB1E , 5 Bytes
Probieren Sie es online!
Erläuterung
quelle
00
ist seltsames Verhalten ...11
es elf und nicht elf1,1
. Ein Nebeneffekt davon ist , dass00
wird00
statt0,0
:)0
oder0 0
stattdessen, aber was auch immer.Haskell , 33 Bytes
Probieren Sie es online! Verbrauch:
f[1,1,0,0,1,1,0,0,1]
. Durchläuft die Liste und ersetzt zwei aufeinanderfolgende Nullen durch eine Null.quelle
C (gcc) , 35 Bytes
48 ist der ASCII-Code von '0'
bessere Version 43 Bytes, wie von Neil vorgeschlagen
ein weiteres 40 Byte dieses Mal (wieder wie von Neil & VisualMelon vorgeschlagen) :)
und dann 35 Bytes dank Khaled.K
Probieren Sie es online!
quelle
s+=2-*s%2
funktionierenfor(;*s;s+=2-*s%2)putchar(*s);
spart ein weiteres Byte.s+=50-*s
?putchar
Dokumente ansehen, können Sie das tunf(char*s){for(;*s;s+=50-putchar(*s));}
?f(char*s){*s&&f(s+50-putchar(*s));}
sed , 8 bytes
Probieren Sie es online!
quelle
0
s mit ersetzen würde0
.Oktave, 22 Bytes
Überprüfen Sie hier alle Testfälle.
Dies ist eine anonyme Funktion, die eine Zeichenfolge für das Format
'1001000011'
als Eingabe verwendet und zwei aufeinanderfolgende Nullen durch eine einzige Null ersetzt.quelle
Java, 50 Bytes
Versuchen Sie es online
quelle
s->s.replaceAll("00","0")
.replace
anstelle vonreplaceAll
3 Bytes zu speichernreplace
nur das erste VorkommenHaskell , 28 Bytes
Probieren Sie es online!
Nimmt rekursiv das erste Element und löscht das zweite, wenn das erste Null ist, bis die Liste leer ist. Wenn der erste Eintrag ist
h
, werden die ersten1-h
aus dem Rest gelöscht.quelle
Japt ,
7 65 BytesProbieren Sie es online!
Ersetzt einfach jeden Lauf mit zwei Nullen in der Eingabe durch eine Null. Verwendet die Zeichenketteneingabe (dh
"1001001"
).quelle
'
ich denke"00"
mit'0²
:-)PHP, 26
Ersetzen Sie einfach alle
00
durch0
.quelle
Alice , 13 Bytes
Probieren Sie es online!
Erläuterung
Dies ist eine einfache Vorlage für lineare Programme, die vollständig im Ordinalmodus arbeiten. Die Initiale
/
spiegelt die IP wider, die sich nach Südosten bewegt, und springt dann diagonal durch den Code auf und ab, bis die Spiegel am Ende sind. Diese versetzen die Position einfach um eins, so dass die IP auf dem Rückweg die verbleibenden Zellen durchquert. Das Lesen des Codes in dieser Zick-Zack-Weise wird zu:Dies ist eine einfache Zeichenfolgensubstitution:
Es gibt ein paar andere Möglichkeiten, die beiden Zeichenfolgen zu verschieben, z. B.
'00'0
odere000t
, aber ich habe dort nichts gefunden, das 5 Byte überschreitet (und ich müsste zwei Byte abschneiden, um das Programm kürzen zu können).quelle
Prolog (SWI) , 42 Bytes
Probieren Sie es online!
quelle
*
Operator zu benutzen .Java ,
131123 BytesProbieren Sie es online!
quelle
JavaScript (ES6),
2621 BytesNimmt die Eingabe als Zeichenfolge und gibt eine Zeichenfolge zurück.
Versuch es
quelle
Lua, 33 Bytes
Nimmt einen String über die Eingabe und verdichtet die Doppel-Nullen. Einfach.
quelle
Gelee , 8 Bytes
Probieren Sie es online!
Möglicherweise können andere Antworten in Sprachen ohne
.replace()
oder mit ähnlichem diesen Trick verwenden.Erläuterung
quelle
Alice ,
1210 Bytes2 Bytes gespart dank Martin Ender
Probieren Sie es online!
Erläuterung
Dies ist ein 1-D-Code, der im Kardinalmodus ausgeführt wird, sodass der Ablauf leicht zu verfolgen ist:
quelle
i.h%...
Python (Listen-E / A), 36 Byte
Probieren Sie es online!
Nimmt rekursiv das erste Element und entfernt dann das verbleibende, wenn das erste Null war.
38 Bytes:
Online testen Hiermit wird eine Python-Liste erstellt und eine Python-Liste ausgegeben, indem die Zeichenfolgendarstellung ersetzt wird. String I / O würde eine direktere und kürzere Lösung ermöglichen, wie z
für das
'1001'
Format.quelle
lambda s:s.replace('00','0')
sollte gut sein.APL (Dyalog) , 9 Bytes
Probieren Sie es online!
quelle
Perl 5, 7 + 1 (-p Flag) = 8 Bytes
Nimmt die Eingabe als durch Zeilenumbrüche getrennte Zahlen vor. Überspringt die nächste Zeile, wenn eine Null angezeigt wird.
quelle
V , 4 Bytes
Probieren Sie es online!
quelle
MATL , 5 Bytes
Probieren Sie es online!
Erläuterung
Dies ist vergleichbar mit Stewie Griffin Octave Antwort :
8 Bytes
Dies vermeidet das eingebaute Ersetzen von Strings / Arrays.
Probieren Sie es online!
Erläuterung
Betrachten Sie die Eingabe
[1,0,0,1,0,0,1]
als Beispiel:quelle
Brachylog , 10 Bytes
Probieren Sie es online!
Ich bin mir nicht sicher, ob das noch optimal ist ...
Erläuterung
Dies nutzt den Fehler aus, der
c
bei einer Liste von Ganzzahlen mit führenden Nullen fehlschlägt.quelle
[0,0,4,2]
in42
. Führende Nullen führen derzeit zum Fehlschlagen, da hier verhindert werden soll, dass unendliche führende Nullen auftreten, wenn der Eingang eine Variable ist. Hier ist der Eingang jedoch vollständig geerdet, sodass keine Einschränkung bestehen sollte.C #, 191 Bytes
Probieren Sie es online!
Es ist weder sauber noch kurz, aber es funktioniert.
Nimmt Eingaben als zusammenhängende Zeichenfolge an und gibt sie im gleichen Format aus
Erläuterung:
Hinweis
Ja, ich bin mir bewusst, dass dies einfach mit getan werden
s.Replace("00","0")
kann. Mein Ziel war es, die offensichtliche Lösung zu vermeiden. Schließlich geht es bei PPCG darum, Spaß zu haben, oder? ;)quelle
Replace
Ich benutze C # und mache mir keine Illusionen darüber, den kürzestmöglichen Code zu erhalten, besonders wenn Sprachen wie Jelly in der Nähe sind in dem Prozess.string a(string s){var r="";for(int i=0;i<s.Length;i+=50-s[i])r+=s[i];return r;}
(sieht aus wie dies ist im Grunde die C-Antwort)Pyth, 8 Bytes
Try-it-Link.
Erläuterung:
quelle
Awk - 18 Bytes
Versuchen Sie zuerst, etwas mit Awk zu tun, damit Sie möglicherweise mehr Golf spielen können.
Verwendung:
echo "1001001" | awk '{gsub(00,0);print}'
quelle
Batch, 24 Bytes
Übernimmt die Eingabe für STDIN. Einmal etwas konkurrenzfähig.
quelle
Common Lisp, SBCL,
4832 Bytes-16 Bytes dank Julian Wolf
Eingang:
Ausgabe:
Erläuterung
Wir lesen die Eingabeliste. Liste wird in
format
Funktion verwendet. Wir durchlaufen die Ausgabe,1
wenn das Element ist,1
und geben das0
nächste Element der Liste für aus und überspringen es0
.quelle
~[
anstatt~:[
können Sie direkt mit 0 und 1 indizieren, was Ihnen eine Menge Bytes ersparen sollteMathematica, 24 Bytes
Eine Funktion, die eine Zeichenfolge von
"0"
s und"1"
s erwartet und eine ähnliche Zeichenfolge zurückgibt. Selbsterklärende Syntax. Mathematica verfügt über viele Transformationsfunktionen. Der Schlüssel ist, einen zu verwenden, der alle relevanten Unterausdrücke transformiert (anders als/.
), den Ausdruck jedoch nur einmal durchläuft (anders als//.
).quelle
Gelee , 10 Bytes
Probieren Sie es online!
Erläuterung
quelle