Geben Sie bei einer Eingabe einer Liste von Segmenten einer Zeichenfolge die ursprüngliche Zeichenfolge aus.
Jedes Slice wird als Liste mit der Länge 2 angegeben, die die Startposition des Slice (eine Ganzzahl ≥0) und das Slice selbst enthält. Wenn Ihre Sprache keine Arrays beliebigen Typs unterstützt, können Sie dies auch als eine Struktur oder Ähnliches oder einfach als eine Zeichenfolge aus der Zahl, einem Leerzeichen und dann dem Slice verwenden.
Die Reihenfolge der beiden Elemente eines jeden Slice liegt bei Ihnen. Wenn Sie die Darstellung von Slices als Array der Länge 2 verwenden, können Sie Eingaben entweder als zweidimensionales Array oder als einzelnes flaches Array annehmen. Schließlich kann die Ganzzahl, die die Position darstellt, entweder nullindexiert oder einsindexiert sein (alle Beispiele hier sind nullindexiert).
Die Eingabe ist immer ausreichend, um die gesamte Zeichenfolge bis zur höchsten angegebenen Position zu bestimmen. Das heißt, es wird keine "Löcher" oder "Lücken" geben. Daher darf die Ausgabe keine zusätzlichen nachgestellten oder führenden Zeichen enthalten (außer den typischen optionalen nachgestellten Zeilenumbrüchen). Die Eingabe ist immer konsistent und es treten keine Konflikte zwischen den Slices auf.
Da es sich um Code-Golf , wird der kürzeste Code in Bytes gewinnen.
Testfälle:
In Out
-----------------------------------------------------------
[[2, "CG"], [0, "PP"], [1, "PC"]] | PPCG
[[0, "foobarbaz"]] | foobarbaz
[[0, "foobar"], [6, "baz"]] | foobarbaz
[[2, "ob"], [5, "rba"], [0, "fooba"], [8, "z"]] | foobarbaz
[[0, "fo"], [0, "fooba"], [0, "foobarbaz"]] | foobarbaz
Antworten:
Gelee,
109 BytesProbieren Sie es online!
Wie es funktioniert
quelle
Python 2, 49 Bytes
Richten Sie zuerst die Zeichenfolgen aus, indem Sie ihre Offsets mit Leerzeichen auffüllen (zur Verdeutlichung als Unterstriche dargestellt).
Verwenden Sie anschließend
map
tozip
und take für jede Spalte das Maximum. Dabei werden die kleineren Werte für Leerzeichen (das kleinste druckbare Zeichen) undNone
s, bei denen einige Zeichenfolgen zu kurz waren , ignoriert .Schließlich
''.join
zu einer Zeichenfolge mit dem[2::5]
Trick.quelle
Perl, 25
+2 für hinzugefügt
-lp
Holen Sie sich die Eingabe von STDIN, z
(Schließen mit ^ D oder ^ Z oder was auch immer STDIN auf Ihrem System schließt)
slices.pl
:quelle
v0
Ihnen das Null-Byte nicht zwei Bytes ersparen (weil Sie auch den Platz vor dem weglassen könntenx
)? Edit: Hm, nein, als ich es versuchte, bekam ichCan't locate object method "x" via package "2"
(oder was auch immer die Nummer in meiner ersten Zeile ist) aus irgendeinem Grund.JavaScript (ES6), 61 Byte
Bearbeiten: 4 Bytes dank @ edc65 gespeichert.
quelle
Haskell, 57 Bytes
Anwendungsbeispiel:
So funktioniert es:
(index,letter)
Für jeden Buchstaben eines jeden Slice ein Paar bilden , zu einer einzigen Liste verketten, Duplikate entfernen, nach Index sortieren, Indizes entfernen.quelle
MATL , 15 Bytes
Funktioniert mit der aktuellen Version (13.0.0) der Sprache / des Compilers.
Die Eingabe erfolgt in geschweiften Klammern und einfachen Anführungszeichen. (Geschweifte Klammern in MATLAB / MATL definieren Zellenanordnungen , die Listen sind , die Inhalte von beliebigen, möglicherweise unterschiedlichen Typen haben kann.) Die Testfälle sind somit:
Probieren Sie es online!
quelle
DUP , 14 Bytes
Try it here.
Anonymes Lambda. Verwendung:
HINWEIS: DUP verfügt nicht wirklich über Arrays, daher hoffe ich, dass dieses Eingabeformat in Ordnung ist.
Erläuterung
Nun, das String-Verständnis von DUP ist ... interessant. Zeichenfolgen werden als eine Reihe von Zahlenvariablen gespeichert, von denen jede einen Zeichencode aus der Zeichenfolge enthält. Etwa so,
2"CG"
als würde man 2 auf den Stack schieben und dann eine Zeichenkette mit Index ab 2 erstellen.Da diese Indizes wirklich Variablen sind, können sie überschrieben werden. Das ist, was die Eingabe wirklich tut: Überschreiben! Klicken Sie Stepauf der Dolmetscherseite auf, um eine bessere Vorstellung davon zu erhalten. Danach erhalten wir eine ungeschnittene Zeichenfolge.
Hier kommt die Ausgabe ins Spiel.
quelle
PHP, 146 Zeichen
Hinweis: Die Auswertung von Benutzereingaben ist immer eine gute Idee.
Golf gespielt
Ungolfed
Sie können sehen, dass ich die Eingabe nur mit dem spezifischen Schlüssel, den jedes Zeichen hat, in ein Array schreibe und sie dann alle ausgebe.
Tests
php unslice.php '[[0, "foobar"], [6, "baz"]]'
-> Foobarbazphp unslice.php '[[2, "CG"], [0, "PP"], [1, "PC"]]'
-> PPCGphp shorten.php unslice.php
-> Verkürzte Schrift um 107 Zeichen. : Dquelle
$a[$f]=$c;$f++;
Ich kenne PHP nicht, aber kann das nicht sein$a[$f++]=c;
?Im Ernst, 48 Bytes
Ernst ist ernsthaft schlecht bei der Manipulation von Saiten.
Probieren Sie es online!
Erläuterung:
Karte 1:
Karte 2:
Karte 3:
Karte 4:
Kurz gesagt, dieses Programm erstellt eine Zeichenfolge mit
n
Leerzeichen. Dabein
handelt es sich um die Mindestlänge, die die Zeichenfolge auf der Eingabe basieren kann. Es bestimmt den Index in der Ergebniszeichenfolge jedes Zeichens in jedem Segment und setzt das Zeichen in der Ergebniszeichenfolge an diesem Index auf das Zeichen.quelle
Python, 91 Bytes.
1 Byte dank cat gespeichert.
Es ist ein bisschen lang. Ich werde es in Kürze noch weiter ausbauen.
quelle
Python,
119115 BytesTestfälle
quelle
CJam, 26 Bytes
Probieren Sie es online! . Übernimmt die Eingabe in Form
[["CG"2]["PP"0]["PC"1]]
.Erläuterung:
quelle
R, 181 Bytes
Mit Zeilenumbrüchen:
Funktioniert in R Gui (Single Line One oder Sourcing für Multi Line One), aber nicht in Ideone, Beispiel:
Hinweis zur Eingabemethode:
Ich gehe davon aus, dass ich diesen Teil der Spezifikation mit dieser Art von Eingabe einhalte. Sie kann in mehreren Zeilen angegeben werden. Dies hat keine Auswirkung, solange eine leere Zeile zum Beenden der Eingabe vorhanden ist.
Ich denke, 2 Zeichen können durch Entfernen der +1 und Verwendung der 1-basierten Indizierung gespeichert werden, aber ich habe mit der Challenge-Eingabe begonnen.
quelle
C 110 Bytes
Dieses Programm nimmt das Slice nach seinem Index in jeweils eine Eingabezeile.
Ungolfed:
Test auf ideone.com
quelle
Lua, 113 Bytes
Dies ist wahrscheinlich einer der sichereren Codes, die ich geschrieben habe. Die Idee ist einfach. Der Benutzer gibt ein Array ein, das wie folgt formatiert ist:
{{1, "1"}, {3, "3"}, {2, "2"}}
Anschließend wird die Tabelle nach dem ersten Index sortiert und der zweite Index gedruckt.quelle