Dies ist meine erste Codegolf-Frage, daher entschuldige ich mich im Voraus, wenn dies nicht angemessen ist, und freue mich über jegliches Feedback.
Ich habe eine Datei mit diesem Format:
a | rest of first line
b | rest of second line
b | rest of third line
c | rest of fourth line
d | rest of fifth line
d | rest of sixth line
Der tatsächliche Inhalt variiert, ebenso wie das Trennzeichen. Der Inhalt ist nur Text. Das Trennzeichen wird nur einmal pro Zeile angezeigt. Für dieses Puzzle können Sie das Trennzeichen ändern, z. B. "%" als Trennzeichen verwenden.
Gewünschte Ausgabe:
a | rest of first line
b | rest of second line % rest of third line
c | rest of fourth line
d | rest of fifth line % rest of sixth line
Ich habe bereits Ruby- und Awk-Skripte, um dies zusammenzuführen, aber ich vermute, dass es möglich ist, einen kurzen Oneliner zu haben. dh ein Einzeiler, der zusammen mit Pipes und anderen Befehlen in der Befehlszeile verwendet werden kann. Ich kann es nicht herausfinden, und mein eigenes Skript ist zu lang, um es nur in der Befehlszeile zu komprimieren.
Kürzeste Zeichen bevorzugt. Die Eingabe muss nicht unbedingt sortiert sein, sondern es geht uns nur darum, aufeinanderfolgende Zeilen mit übereinstimmenden ersten Feldern zusammenzuführen. Es gibt unbegrenzte Zeilen mit übereinstimmenden ersten Feldern. Feld 1 kann alles sein, z. B. Namen von Früchten, Eigennamen usw.
(Ich laufe auf MacOS, daher bin ich persönlich am meisten an Implementierungen interessiert, die auf dem Mac laufen).
Hier ist ein zweites Beispiel / Test. Hinweis "|" ist das Trennzeichen. Der Raum vor dem "|" ist irrelevant, und wenn erneut gesendet werden sollte als Teil des Schlüssels. Ich verwende "%" als Begrenzungszeichen in der Ausgabe, kann aber auch hier das Begrenzungszeichen ändern (aber keine eckigen Klammern verwenden).
Eingang:
why|[may express] surprise, reluctance, impatience, annoyance, indignation
whom|[used in] questions, subordination
whom|[possessive] whose
whom|[subjective] who
whoever|[objective] whomever
whoever|[possessive] whosever
who|[possessive] whose
who|[objective] whom
Gewünschte Ausgabe:
why|[may express] surprise, reluctance, impatience, annoyance, indignation
whom|[used in] questions, subordination%[possessive] whose%[subjective] who
whoever|[objective] whomever%[possessive] whosever
who|[possessive] whose%[objective] whom
quelle
["A|some text", "B|other text", "A|yet some other text"]
ist keine zu testende Eingabe, da die Schlüsselwörter fürA
nicht nacheinander in der Liste stehen.Antworten:
Retina , 17 Bytes
Bewertung in ISO 8859-1-codierten Bytes.
Wird
;
anstelle von|
als Trennzeichen für Eingabefelder verwendet.Probieren Sie es online aus.
quelle
V ,
1613 BytesProbieren Sie es online!
Du sagtest
Also habe ich
|
als Trennzeichen gewählt. Wenn dies ungültig ist, lass es mich wissen und ich werde es ändern.Erläuterung:
quelle
Perl
-0n
, 2 + 43 = 45 BytesDemo:
quelle
SQL (PostgreSQL),
4372 BytesDies nutzt die praktische Funktion string_agg aggregate in PostgreSQL. Die Eingabe erfolgt aus einer Tabelle
T
mit 2 SpaltenA
undB
. Um die Frage besser zu beantworten, habe ich den Befehl zum Laden von Daten aus einer Datei in die Tabelle eingefügt. Die Datei istT
auch. Ich habe die Anweisung "table create" nicht gezählt.Die Ausgabe wird ungeordnet sein, aber wenn das ein Problem ist, kann es mit einem behoben werden
ORDER BY A
SQLFiddle wollte nicht für mich spielen, aber das ist es, was ich in meinem Setup bekomme.
quelle
C 127 Bytes
Funktioniert mit gcc. Das Trennzeichen wurde in geändert
/
. Übernimmt die Eingabe von stdin und schreibt die Ausgabe in stdout. Rufen Sie daher mit der Eingabeumleitung auf./a.out <filename
Ungolfed:
quelle
Pyth - 15 Bytes
Wenn Sie ein paar Annahmen zum Problem machen, wird sich dies ändern, wenn OP klarstellt.
Probieren Sie es hier online aus .
quelle
Python 3 - 146 Bytes
Die Eingabe ist der Dateiname oder der Dateipfad der Datei, die Ausgabe erfolgt nach stdout. Könnte viel kürzer sein, wenn ich Eingaben als Rohtext von der Kommandozeile nehmen könnteÜbernimmt die Eingabe von stdin und die Ausgabe von stdin. Setup mit Separator
"|"
. Verwenden Sie das Trennzeichen, um die erste Beispieleingabe zu testen" | "
quelle
Java 7, 167 Bytes
Es kann wahrscheinlich mehr Golf gespielt werden, wenn ein anderer Ansatz gewählt wird.
HINWEIS: Die obige Methode erstellt und gibt ein
HashMap
mit den gewünschten Schlüssel-Wert-Paaren zurück. Es wird jedoch nicht in der exakten Ausgabe wie in der Frage von OP mit einem|
Trennzeichen zwischen den Schlüsseln und neuen Werten gedruckt . Nach MickeyTs SQL-Antwort zu urteilen , in der er eine Datenbanktabelle zurückgegeben hat, dachte ich, dass dies zulässig ist. Wenn nicht, sollten weitere Bytes für eine Druckfunktion hinzugefügt werden.Ungolfed & Testcode:
Ausgabe:
quelle
PowerShell, 85 Byte
Zeichenfolgen werden mithilfe der Hashtabelle zusammengeführt:
Beispiel
Da PowerShell die stdin-Umleitung über nicht unterstützt
<
, gehe ich davon aus, dassGet-Content .\Filename.txt |
diese als Standard-E / A-Methode verwendet wird.Ausgabe
quelle
APL, 42 Zeichen
quelle
⌸
ist kein Byte in der APL-Codierung.Sed, 55 Bytes
Testlauf :
quelle
q / kdb + 46 Bytes
Lösung:
Beispiel:
Erläuterung:
quelle