Alternierend ist der Vorgang, bei dem eine Zeichenfolge in abwechselnde Klammern gesetzt wird. Hier sehen Sie, wie Sie eine Zeichenfolge abwechseln .
Nehmen Sie für eine Zeichenfolge der Länge N die mittleren N Zeichen und umgeben Sie sie in Klammern. Wenn also unsere Zeichenfolge
Hello world!
(12 Zeichen) war, werden wir mit enden(Hello world!)
Nehmen Sie dann die verbleibenden mittleren
n-2
Zeichen und umgeben Sie sie in eckigen Klammern. In diesem Fall sind die mittleren 10 Zeichen.ello world
Die nächste Iteration lautet also:(H[ello world]!)
Solange mehr als zwei Zeichen in der Mitte der Zeichenfolge verbleiben, wiederholen Sie die letzten beiden Schritte abwechselnd mit
()
und[]
. Hier sind die letzten Schritte:(Hello world!) (H[ello world]!) (H[e(llo worl)d]!) (H[e(l[l(o[ w]o)r]l)d]!)
Da bei der letzten Iteration nur noch zwei Zeichen in der Mitte übrig sind, hören wir auf. Unsere letzte Saite ist
(H[e(l[l(o[ w]o)r]l)d]!)
Beachten Sie, wie es zwei Zeichen in den mittleren Klammern gibt. Dies passiert, wenn die Eingabe eine gerade Länge hat. Wenn die Eingabe eine ungerade Länge hätte (zum Beispiel
Hello, world!
mit einem Komma), hätten wir nur ein Zeichen in der Mitte:(H[e(l[l(o[,( )w]o)r]l)d]!)
Für die heutige Herausforderung müssen Sie ein Programm oder eine Funktion schreiben, die eine Zeichenfolge als Eingabe verwendet und diese alterniert, wobei die neue Zeichenfolge ausgegeben wird. Sie können Eingaben und Ausgaben in jedem vernünftigen Format vornehmen, das Sie möchten. Die Eingabe ist immer mindestens ein Zeichen lang und enthält nur druckbares ASCII. Sie können auch davon ausgehen , dass der Eingang nicht jede Klammer oder eckige Klammern enthalten. Für traditionelle Sprachen sollte dies nicht allzu wichtig sein, aber es könnte für einige esoterische Sprachen einfacher sein.
Wie üblich ist dies ein Code-Golf- Wettbewerb. Versuchen Sie daher, die kürzestmögliche Antwort in der Sprache Ihrer Wahl zu geben. Habe Spaß!
Testen Sie IO
#Input #Output
"Alternesting is fun!" --> (A[l(t[e(r[n(e[s(t[in]g) ]i)s] )f]u)n]!)
"PPCG" --> (P[PC]G)
"Code-golf" --> (C[o(d[e(-)g]o)l]f)
"4 8 15 16 23 42" --> (4[ (8[ (1[5( [1]6) ]2)3] )4]2)
"a" --> (a)
"ab" --> (ab)
"abc" --> (a[b]c)
quelle
()
) beginnen oder können wir mit Klammern ([]
) beginnen?()
HelloWorld
.Antworten:
Python 3 ,
706965 Bytes-1 Byte dank @Uriel
-4 Byte dank @xnor
Probieren Sie es online!
quelle
C
143137135 BytesProbieren Sie es online!
Erläuterung:
quelle
0
. Sie sollten das also nicht brauchenk=i=0,
. Ich könnte falsch liegen. Siehe diese SO AntwortNetzhaut , 52 Bytes
Probieren Sie es online! Die erste Stufe fügt Klammerpaare zwischen jedes Eingabezeichenpaar ein, während die zweite und dritte Stufe abwechselnde Klammern in eckige Klammern setzen.
quelle
Sed, 78
Die Punktzahl enthält +1 für
-r
die an sed übergebene Option.Probieren Sie es online aus .
quelle
JavaScript (ES6),
69 bis68 ByteTestfälle
Code-Snippet anzeigen
quelle
V ,
252625 Bytes12 Bytes weniger dank @DJMcMayhemProbieren Sie es online!
Einige Ideen von @udioca entlehnt.
Außerdem wurde schließlich das in V enthaltene Surround-Plugin für eine Antwort verwendet, obwohl es möglicherweise nicht der beste Weg war, wer weiß.Das Plugin will NICHT verwendet werden.Hexdump:
Erläuterung:
quelle
;
anstelle des letzten verwenden.f)
Probieren Sie es online aus!()
und[]
ist ein Byte kürzer, aber viel weniger coolHaskell ,
9691817977 BytesProbieren Sie es online!
quelle
(x:y)
und fallen lassen(init y)
.k==""=""
ist kürzer alsk==""=k
.cycle["()","[]"]
einfach"()[]"
: Versuchen Sie es online!cycle
noch kürzer hält. Sie können die Klammer immer noch entfernen(init y)
.k==""=k
an das Ende verschieben und in ändern0<1=k
.Ruby ,
7977 Bytes-2 Bytes dank @Value Ink
Probieren Sie es online!
quelle
s.insert k=i*2,'(['[i%2];s[~k]+=')]'[i%2]
um 2 Bytes zu sparen. Probieren Sie es online!Javascript (ES6)
110105 BytesVielen Dank an @powelles, der mich daran erinnert hat
x%y<1
.Danke @Luke für
a-b?y:x
Code-Snippet anzeigen
Das erste, was dieses Biest versteht, ist, es zu entgolfen:
Fast jede Linie ist Teil der Golfversion.
Zeile 1: Die Funktion Anweisung wird eine Pfeil - Funktion , die Umbenennung
input
zui
. Wirdi=>
.Zeile 2:
Array.from
ist die neue, richtige Methode zum Konvertieren eines Strings in ein Array und das, was wir in dieser Zeile verwenden. Allerdings ist der Spread-Operator eine kostengünstigere Methode als.split('')
die bisherige, die in der Golf-Version verwendet wird. Endet als[...i]
.Zeile 3:
.map
Schleifen durch eine Anordnung, so dass Sie drei Argumente:item
(a
in der golfed)index
; golfen alsb
, undbaseArray
oderc
. Während wir uns nur umitem
und kümmernindex
, haben wir behaltenbaseArray
(siehe Zeile 4 für warum). Golf zu.map((a,b,c,...)=>...
.Zeile 4: Die Variable
middle
, das oder das Argumentd
in der Golf-Version wird erstellt, um ein paar Bytes zu sparen, wenn es wiederholt wird. Das Argumentc
musste aufbewahrt werden, damit das Argumentd
erstellt werden konnte. Wird konvertiert zu(...,d=i.length/2-1,...)
.Zeile 5 : Die Variable
alternate
oder das Argumente
wird verwendet, um zu überprüfen, auf welchem Zeichen es sich befand "(" oder "[" oder ob es nach der Mitte ")" und "]".b%2<1
ist gleich,b%2==0
weil es nicht weniger als 1 sein kann, in diesem Fall aber 0. Equals(...,e=b%2<1)
.Zeile 6: Ein Helfer Variable mir zu erlauben , das zu konvertieren ,
ternary operators
umif
Aussagen. Ist nichts im eigentlichen Codegolf.Zeilen 7-8 : Wenn der Index kleiner als die Mitte des Strings ist, setzen Sie das Symbol auf eine Abwechslung von "[" und "(". Entspricht
d>b?e?'[':'(':...
.Zeilen 9-12 : Andernfalls (wenn der Index größer als die Mitte ist), überprüfen Sie, ob die Mitte eine ganze Zahl ist, und schalten Sie in diesem Fall die Abwechslung um. Setzen Sie dann das Symbol auf eine Abwechslung von ')' und ']'. Verschleiert zu
(d%1==0?!e:e)?')':']'
.Zeilen 13-15 : Wenn in der Mitte, setzen Sie das Symbol auf eine leere Zeichenkette. Dies gilt nicht für ungerade Alternativen, da die Mitte eine Dezimalstelle hat. Wird:
d==b?'':...
.Zeile 16 : Verbindet das Zeichenfeld wieder zu einer Zeichenfolge. Entspricht
.join``
.Zeile 17 : Liefert das Startsymbol "(" und das Ergebnis. Entspricht
'('+...
.quelle
%2==0
%2<1
[...i]
i.split
[..i] idea
, aber ich habe vergessen,%2<1
danke.b%2<1
könnte ersetzt werden durch!b%2
d==b?x:y
könnte werdend-b?y:x
undd%1==0
könnte werden!d%1
.!d%1
funktioniert es aufgrund der Reihenfolge der Operationen nur mit Klammern:!(d%1)
und es werden keine Bytes abgeschabt. Ich habe vergessen, dass 0 die einzige falsche Zahl ist. Aus irgendeinem Grund dachte ich, -1 sei die falsche Zahl. Korrigieren Sie mich, wenn beim zweiten Fehler auftritt.Jelly ,
2321 BytesProbieren Sie es online!
-2 Bytes dank @EricTheOutgolfer
quelle
ị
zumLHĊRị¶ç⁾)]żUFUż@ç⁾([$
SCALA,
140138 Zeichen,140138 ByteEs tut mir leid, dass ich es nicht besser machen konnte ... Ich bin mir sicher, dass es viele Möglichkeiten gibt, es zu verbessern. Immer noch:
Probieren Sie es online!
Danke für diese Herausforderung, das war ziemlich schwer für mich.
EDIT: -2 Bytes dank Mar Dev.
PS: Ich werde allerdings etwas fragen. Ich verstehe, warum DIESER CODE das zentrale Zeichen meines Strings immer wieder dupliziert, wenn ich eine ungerade Länge habe (ich überprüfe es einfach nicht und füge es zweimal hinzu, in beiden
l
und inr
Strings). Aber warum bekomme ich ein Paar Klammern , wenn ich es so versuchen zu korrigieren , DASS ? Ich verstehe überhaupt nicht.quelle
i%2==0
to änderni%2<1
, um zwei Bytes zu speichern.Perl,
7774 (73 + 1) BytesReguläre Ausdrücke sind herrliche Dinge. Führen Sie mit dem
-p
Befehlszeilenflag aus.quelle
05AB1E , 31 Bytes
Probieren Sie es online!
Erläuterung
Mit Beispielen für die Eingabe:
abcd
/abcde
quelle
C ++ 14,
154145 Bytes[Rekursiv]
C ++ 14, 177 Bytes
[Iterativ]
quelle
Pyth , 42 (!) Bytes
Online testen! Die Eingabe muss in Anführungszeichen stehen.
Erklärungen
Im Grunde genommen entferne ich also nach und nach den Kopf und das Ende von H (wobei es sich am Anfang um die Eingabezeichenfolge handelt), während ich die Klammern / Klammern verkette. G ist nur ein Boolescher Wert, der sich daran erinnert, ob ich Klammern oder Klammern verwenden muss.
quelle
05AB1E ,
4942 BytesProbieren Sie es online!
quelle
PowerShell,
125119111 ByteProbieren Sie es online!
Vorherige Version*
* Danke @Digital Trauma.
quelle
QuadR , 82 Bytes
(81 Byte +1 für
≡
Flag)Probieren Sie es online!
quelle
AWK, 118 Bytes
Getestet mit gawk, aber es sollte mit jedem kompatiblen awk-Interpreter funktionieren
quelle
JavaScript, 101 Bytes
Kein Gewinner, aber es war interessant, den
replace
Ansatz zu versuchen . Dies könnte definitiv verbessert werden, aber es wurde schnell außer Kontrolle geraten ...quelle
Java (OpenJDK 8) , 124 Byte
Probieren Sie es online!
Credits
quelle