Ich bin auf SO auf diese Frage gestoßen und dachte, es wäre eine schöne Golfherausforderung. Hier ist es also:
Herausforderung:
Schreiben Sie ein Programm, das eine Folge von Zeichenfolgen (eine pro Zeile) liest und eine Liste aller Positionen ausgibt, an denen jede Zeichenfolge dasselbe Zeichen enthält.
Ein- und Ausgabe:
Die Eingabe besteht aus einer oder mehreren Zeilen druckbarer Nicht-Leerzeichen-ASCII-Zeichen, denen jeweils eine neue Zeile folgt. Sie können davon ausgehen, dass alle Eingabezeilen gleich lang sind. Die neue Zeile ist nicht als Teil der Eingabe zu betrachten (dh Sie sollten sie nicht als übereinstimmendes Zeichen ausgeben).
Beispiel-Eingabe (schamlos aus der SO-Frage gestohlen):
abcdefg
avcddeg
acbdeeg
Nach dem Lesen der Eingabe sollte Ihr Programm die Positionen jeder übereinstimmenden Spalte und die darin enthaltenen Zeichen drucken. (Ihr Programm hört möglicherweise auf, weitere Eingaben zu lesen, muss dies aber nicht, wenn es frühzeitig feststellen kann, dass keine übereinstimmenden Spalten vorhanden sind.) Jedes sinnvolle Ausgabeformat ist zulässig. Insbesondere können Sie entweder 0-basierte oder 1-basierte Indizierung für die Positionen verwenden.
Beispielausgabe für die obige Eingabe (mit 0-basierter Indizierung):
0: a
3: d
6: g
Wertung:
Dies ist Codegolf, also gewinnt die kürzeste Antwort. Im Falle eines Gleichstands können Bruchstücke von Trennzeichen für zusätzliche Merkmale vergeben werden:
- −½ Zeichen für den korrekten Umgang mit Eingabezeilen ungleicher Länge. (Die Ausgabe sollte keine Positionen nach dem Ende der kürzesten Eingabezeile enthalten.)
- −¼ Zeichen für die korrekte Verarbeitung von Eingaben, die aus beliebigen UTF-8-codierten Unicode-Zeichen bestehen.
Zur Inspiration finden Sie bei der SO-Frage (siehe oben) möglicherweise einige ungolfed Lösungen.
Klarstellungen:
Das einfache Verketten der Positionen und Zeichen wie in
0a3d6gzählt nicht als "sinnvolle Ausgabe". Sie sollten eine Art Trennzeichen (z. B. ein Leerzeichen) zwischen den einzelnen Elementen der Ausgabe angeben, damit sie eindeutig analysiert werden können.Die Eingabe erfolgt über den Standardeingabestream (
stdin) oder mithilfe des für Ihre Sprache am besten geeigneten Eingabemechanismus für Textdateien. (Wenn Ihre gewählte Sprache nicht haben einen natürlichen Mechanismus für Dateieingabe, tun , was am nächsten Geist erscheint.)Die Eingabe endet, wenn keine Daten mehr gelesen werden müssen (dh wenn eine Dateiende-Bedingung eintritt). Wenn Sie möchten, Sie können verlangen , dass der Eingang durch eine Leerzeile beendet werden (die Sie dann nicht als Teil des Eingangs zählen sollten, natürlich). Wenn Sie dies tun, erwähnen Sie dies bitte in Ihrer Antwort, damit andere die richtigen Eingaben zum Testen machen können.
Jede Eingabezeile, einschließlich der letzten, endet mit einem Zeilenumbruch. Ihre Antwort darf diese neue Zeile nicht als übereinstimmende Spalte enthalten. (Es ist in Ordnung, wenn Ihre Lösung auch Eingaben verarbeiten kann, bei denen die letzte Zeile nicht in einer neuen Zeile endet, dies jedoch nicht erforderlich ist.)