Warum hatte 6 Angst vor 7? Weil 7 8 9!
Wenden Sie bei einer gegebenen Zeichenfolge die folgenden Transformationen an:
- Wenn es eine 6 neben einer 7 gibt, entferne die 6 (6 hat Angst vor 7)
- Wenn die Sequenz "789" erscheint, entfernen Sie die 8 und die 9 (7 aßen 9)
(Wenn ich mich nicht irre, spielt es keine Rolle, in welcher Reihenfolge Sie die Transformationen durchführen)
Wenden Sie diese Transformationen so lange an, bis Sie sie nicht mehr können.
Beispiel:
78966
Zuerst sehen wir "789", so dass die Zeichenfolge "766" wird. Dann sehen wir "76", also nehmen wir die 6 heraus und die Zeichenfolge wird "76". Dann sehen wir wieder "76", so dass wir mit "7" belassen werden.
Testfälle:
987
=>987
(Nicht in der richtigen Reihenfolge. Tut nichts.)6 7
=>6 7
(Das Leerzeichen dient als Puffer zwischen 6 und 7. Nichts passiert)676
=>7
7896789
=>77
7689
=>7
abcd
=>abcd
68978966897896
=>68977
Antworten:
Retina , 12
Übersetzung der sed Antwort:
Probieren Sie es online aus
quelle
Javascript ES6, 29 Bytes
Prüfung:
quelle
Java,
126816658 BytesVielen Dank an @GamrCorps für die Lambda-Version dieses Codes!
Vielen Dank an @ user902383 für den Hinweis auf einen Autoboxing-Trick!
...Jep.
Tatsächlich ist es länger als erwartet - Java ersetzt Elemente in Zeichenfolgen durch
replaceAll()
einmal pro Match, nicht mehrmals, bis sich nichts mehr ändert. Also musste ich eine ausgefallene for-Schleife verwenden.Lambda-Form:
Funktionsform:
Testbarer Ungolfed Code:
quelle
.equals
in!=
, was nicht dasselbe bewirkt .==
(oder!=
) vergleicht nach Hex-Position des Objekts, nicht nach Wert. Ansonsten ist es gleich lang.while()
ist 7 Bytes,for(;;)
ist 7 Bytes.GNU Sed, 17
Die Punktzahl enthält +1 für die
-r
Option.quelle
67789
sollte zurückkehren,77
aber es kehrt stattdessen zurück677
s/67|7(6|89)/7/
anstelle vons/6?7(6|89)/7/
s///g
?Perl 6 ,
1918 Bytes(Beachten Sie, dass
[6|89]
die nicht aufzeichnende Version(6|89)
wie(?:6|89)
in Perl 5 geschrieben<[6|89]>
ist. So würden Sie schreiben, was[6|89]
in Perl 5 geschrieben ist.)Verwendungszweck:
quelle
6*
und das[6|89]*
nicht übereinstimmen, was verhindert7
, dass7
ad infinitum durch das ersetzt wird?7
mit7
und beginnt dann wieder an der nächsten Position und arbeitet sich bis zum Ende durch.:g
ist kurz für:global
nichtrepeat until it doesn't match anymore
.s/67|76|789/7/
an die Arbeit zu machen,667
müsste ich es als etwas schreiben, waswhile s/67|76|789/7/ {}
natürlich nie aufhören würde, wenn Sie es so schreiben würden,while s/6*7[6|89]*/7/ {}
wie Sie es erwarten würden. Auch das Ende des vorherigen Kommentars kann als gemein ablaufen , das ist nicht so, wie es gedacht war[]
nicht geändert werden()
? Du willst nicht zu Rohren passen oder79999
.[]
handelt sich um die Perl 6-Nicht-Capturing-Version von()
. Was Sie denken, wird wie<[6|89]>
in Perl 6 geschrieben.Pyth, 17 Bytes
Probieren Sie es hier aus.
Leaky Nun hat dies in den Kommentaren um ein Byte übertroffen.
quelle
Perl 5 , 17 Bytes
Verwendungszweck:
quelle
Mathematica, 52 Bytes
Erläuterung:
quelle
Rust, 96 Bytes
Hoffnungslos lang, wie für Rust üblich ...
Ungolfed:
quelle
Emacs Lisp, 59 Bytes
Mit Leerzeichen wird es etwas klarer:
quelle
Ruby, 27 Bytes
Diese Lösung ist aus Kommentaren, Kredit an Brad Gilbert b2gills .
Ruby, 37 Bytes
(alte Lösung)
Diese Lösung nutzt die Tatsache, dass Sie nie mehr Male als Zeichen in der Zeichenfolge ersetzen müssen.
quelle
chars
statt verwendensize.times
, um ein paar Bytes zu speichern.sub()
undgsub()
Methoden, um zuerst oder alle zu ersetzen. Global ist also nur ein Zeichen länger.->s{s.gsub /6*7(6|89)*/,'7'}
undgsub
die ganze Looparbeit machen lassen .gsub /6*7(6|89)*/,?7
mit der Nutzungruby -pe "gsub /6*7(6|89)*/,?7"
für insgesamt 20 + 1 BytesJapt , 15 Bytes
Einfache RegEx-Lösung
Probieren Sie es online aus
quelle
PowerShell, 27 Byte
Gebrauch machen von:
-replace
wird in PowerShell standardmäßig eine globale Ersetzung durchgeführt-regex
Operator auf das Array angewendet$args
wird, indem er auf alle Elemente einzeln angewendet wird, und es gibt hier nur ein Element, da es nur einen Skriptparameter gibt[0]
.Ein neuer vorheriger Versuch, bevor ein globaler Ersatz realisiert wird, würde es tun; 74 Bytes zum Erstellen einer Kette von "-replace -replace -replace" unter Verwendung der String-Multiplikation, die so oft wie die Länge des Strings ist, und anschließender Auswertung ():
(Mit ein wenig String-Ersetzung, um die Anzahl der Ersetzungen zu verringern).
quelle
CJam,
7064 BytesVielen Dank an @Peter Taylor für den Schnitt
{"789":I}{"76:":I}?
zu"789""76"?:I
"67":Iq:A{AI#:B){AB<7+A{BI,+}~>+s:A];}{"76"I={"789":I}{"76":I}?];}?}/A"67":Iq:A{AI#:B){AB<7+A{BI,+}~>+s:A];}{"76"I="789""76"?:I];}?}/A
Ich weiß, dass dies wahrscheinlich viel weiter fortgeschritten sein könnte und Ihre Hilfe wäre sehr dankbar, aber ehrlich gesagt bin ich nur froh, dass ich die Antwort bekommen habe. Dies war mein erster Versuch, CJam zu schreiben.
Erläuterung:
quelle
/
und*
. Beachten Sie auch, dass das Denken in Stapeln, wenn Sie an C-ähnliche Sprachen gewöhnt sind, einige Anpassungen erfordert. ZB{"789":I}{"76":I}?
kann die Aufgabe herausziehen werden"789""76"?:I
, die weiter golfen werden kann78976`3/?:I
.78976`3/
gibt ein Array["789" "76"]
; dann?
müssten Sie, anstatt zu verwenden,=
zum Indizieren verwenden; Aber es ist von hinten nach vorne, daher müsste der Index invertiert werden, wodurch der Vorteil verloren geht.MATL , 17 Bytes
Beispiel
EDIT : Probieren Sie es online!
Erläuterung
Dies funktioniert, indem ein regulärer Ausdrucksersatz so oft angewendet wird, wie die ursprüngliche Zeichenfolge Zeichen enthält . Dies ist ausreichend, da jede Ersetzung die Anzahl der Zeichen verringert.
quelle
Im Ernst, 29 Bytes
Nimmt die Eingabe als Zeichenfolge in doppelten Anführungszeichen an
"6789"
. Probieren Sie es online aus (Sie müssen die Eingabe manuell zitieren).Erläuterung:
quelle
Thue , 26 Bytes
einschließlich einer nachgestellten Newline.
Die Eingabe wird vor dem Start an das Programm angehängt.
Die Ausgabe wird, ähnlich wie bei einer Turing-Maschine, beim Beenden aus dem Programmzustand ausgelesen.
(Thue hat zwar einen Ausgabestream, aber es ist schwierig, ihn korrekt zu verwenden. Daher bin ich mir nicht sicher, ob dies eine akzeptable Ausgabemethode ist.)
quelle
Bash,
1028267 (+7)? Bytesextglob version
Dies soll in einer Datei abgelegt und mit zB aufgerufen werden
bash -O extglob 789.sh 6567678989689789656
. Die (+7)? Bytes ist für, wenn die Option extglob für Bytes zählt.Vielen Dank an @BinaryZebra für den Hinweis auf die Funktionen von extglob!
Non-Extglob-Version (82 Bytes)
Dies soll in einer Datei abgelegt und mit zB aufgerufen werden
./789.sh 65678989656
.Es nutzt die Parametererweiterung, um in einer Schleife zu suchen und zu ersetzen. Ich habe eine Reihe von Erweiterungen durchgeführt, um das Ersetzen durchzuführen, da mir kein Weg bekannt ist, Erweiterungen effektiver zu verketten.
quelle
@()
Syntax. Ich wusste, dass es einen Weg geben musste, diese zu kombinieren. Und @Mego, danke für die Begrüßung!R, 35 Bytes
Ich wusste nicht, dass ich
gsub
diesen Weg nutzen könnte , ein großes Dankeschön für jede Antwort, die mich dazu brachte, etwas Neues zu lernen.quelle
PHP 51 Zeichen
Testfall in langer Hand geschrieben
Dadurch werden sowohl der Zeichenfolgenvergleich als auch die Zeichenfolge in der while-Bedingung ersetzt. Wenn while-Bedingung erfüllt ist, wird die linke Hand des Vergleichs mit dem Ergebnis aktualisiert. Informieren Sie mich über mögliche Verbesserungen.
quelle
Jolf , 15 Bytes
Probieren Sie es hier aus! Muss ich das wirklich erklären?
quelle
PHP, 36 Bytes
Regex-Lösung, nimmt $ eine Zeichenfolge und ersetzt durch den Ausdruck.
quelle
$argv
oder STDIN erhalten.Clojure, 71 Bytes
Clojure ist aufgrund seiner Ausführlichkeit weniger als ideal zum Golfen - dennoch ist es eine interessante Übung:
Golf Version mit Java Interop:
Ungolf-Version mit Java-Interop:
Ungolfene "pure Clojure" -Version:
quelle
/// , 19 bytes (nicht konkurrierend)
Sie können in dieser Sprache keine Eingaben machen, die angebliche Eingabe steht also rechts vom Code.
quelle
Python 3, 46 Bytes
quelle
Japt v2.0a0, 12 Bytes
Probieren Sie es online!
Wie es funktioniert
String.e
ist eine rekursive Ersetzungsfunktion. Japt 2 hat eine neue Regex-Syntax und automatische Vervollständigung von Klammern in Regex, wodurch hier ein Byte gespart wird. (In Japt 1.x mussten wir anstelle von regulären Ausdrücken Zeichenfolgen übergeben, was etwas klobig war.)quelle
Dyalog APL , 17 Bytes
'6*
Eine beliebige Anzahl von Sechsern,7
gefolgt von einer Sieben(
…)*'
gefolgt von null oder mehr Folgen von…6|89
einer Sechs oder Acht-Neun⎕R
R rsetzen dass mit'7'
wie ebenquelle
05AB1E , 12 Bytes
Probieren Sie es online aus oder überprüfen Sie alle Testfälle .
Erläuterung:
quelle