(verwandt: eins , zwei , drei )
Ein Akrostichon ist ein Gedicht- / Schreibstil, bei dem das Anfangszeichen jeder Zeile, wenn es vertikal gelesen wird, auch ein Wort oder eine Nachricht hervorbringt. Beispielsweise,
Together
Everyone
Achieves
More
buchstabiert das Wort auch, TEAM
wenn die erste Spalte vertikal gelesen wird.
Akrostatik ist eine Teilmenge der Mesostik , wobei das vertikale Wort an einer beliebigen Stelle in den horizontalen Wörtern stehen kann. Zum Beispiel könnte die TEAM
obige auch wie folgt als Mesostik geschrieben werden
togeTher
everyonE
Achieves
More
zusammen mit mehreren anderen Variationen.
Die Herausforderung hierbei wird darin bestehen, aus einer gegebenen Liste von Eingabewörtern einen Akrostichon oder einen Mesostichon zu erzeugen.
Eingang
- Eine Liste von Wörtern in jedem geeigneten Format .
- Die Liste enthält nur Wörter, die aus Kleinbuchstaben bestehen
[a-z]
. - Es ist garantiert, dass die Liste einen Akrostichon oder einen Mesostichon bildet (keine falsche Eingabe erforderlich).
- Eines der Wörter in der Eingabe wird das vertikale Wort bilden, während der Rest die horizontalen Wörter ergibt. Ein Teil der Herausforderung besteht darin, das entsprechende vertikale Wort zu finden, sodass es nicht separat verwendet werden kann.
Ausgabe
- Das aus den in STDOUT geschriebenen oder zurückgegebenen Eingabewörtern gebildete ASCII-Akrostichon oder Mesostichon in einem beliebigen vernünftigen Format.
- Das entsprechende vertikale Wort muss (wie in den Beispielen) großgeschrieben werden.
- Es sind führende Leerzeichen erforderlich , um das vertikale Wort entsprechend auszurichten . Nachgestellte Leerzeichen und führende / nachfolgende Zeilenumbrüche sind optional. Zusätzliche führende Leerzeichen sind ebenfalls in Ordnung, solange die Wörter korrekt ausgerichtet sind.
- Wenn sowohl Akrostichon als auch Mesostik möglich sind, geben Sie nur den Akrostichon aus.
- Wenn mehr als ein Akrostichon / Mesostiker möglich ist, kann Ihr Code einen oder alle davon ausgeben.
Regeln
- Es ist entweder ein vollständiges Programm oder eine Funktion zulässig.
- Standardlücken sind verboten.
- Dies ist Codegolf, daher gelten alle üblichen Golfregeln, und der kürzeste Code (in Byte) gewinnt.
Beispiele
['together', 'team', 'everyone', 'achieves', 'more']
Together
Everyone
Achieves
More
['aaa', 'aaa', 'aaa', 'aaa']
Aaa
Aaa
Aaa
# One output, or multiple (of the same) output is allowed
['aaa', 'aaa', 'aab', 'baa']
Aaa
Aaa
Baa
# This is the only allowed output, since others would be mesostic, which are lower priority
['live', 'every', 'love', 'very', 'ohio']
Live
Ohio
Very
Every
# Note that 'live' couldn't be the vertical word since then it would be a mesostic, which is lower priority output
['cow', 'of', 'fox']
cOw
Fox
# A shorter mesostic test case
['late', 'ballroom', 'anvil', 'to', 'head']
anviL
bAllroom
To
hEad
Antworten:
Pyth,
52494746 BytesProbieren Sie es online aus.
Das ist wahrscheinlich sehr golfen. Es druckt eine Reihe von führenden Leerzeichen.
quelle
Brachylog , 145 Bytes
Probieren Sie es online!
(Dauert eine halbe Minute, also hab etwas Geduld.)
quelle
JavaScript (ES6), 255
263 269 286Edit 17 Bytes, die als willkürliche Anzahl von führenden Leerzeichen gespeichert wurden, sind erlaubt.
Edit 2: Mischen, 6 Bytes, gespeichert.
Edit 3: Liefert eine Liste von Strings anstelle eines einzelnen Strings mit Zeilenumbrüchen (OP-Kommentar zu Feersums Antwort). 8 weitere Bytes werden gespeichert
Für jedes Wort in der Eingabeliste verwende ich eine rekursive DFS, um alle möglichen Mesostiken / Akrostiken zu finden. Jedes ist als Array mit Wort- und Zielbuchstabenposition innerhalb des Wortes gespeichert. Jedes gefundene Ergebnis wird im globalen Ergebnisfeld an Position 1 (wenn es ein Akrostichon ist) oder 0 (wenn es ein Mesostik ist) gespeichert.
Nach dem vollständigen Scan aller Wörter erhalte ich das Ergebnis an der letzten Position im Array und erstelle und sende seine ASCII-Kunst-Darstellung.
Weniger golfen
Prüfung
quelle
Perl6,
287277269 Bytesquelle
Mathematica 10.0, 139 Bytes
Eine unbenannte Funktion, die eine Liste von Zeilen zurückgibt:
Anwendungsbeispiel:
Ich suche nach Vorschlägen für bessere Möglichkeiten zur Kapitalisierung.Ich habe eine sehr schöne Funktion gefunden,MapAt
um den Buchstaben in der Zeichenkette groß zu schreiben.quelle
Haskell,
214206204202 BytesGibt eine Liste mit mit Leerzeichen aufgefüllten Zeichenfolgen zurück, z. B.
f ["late","ballroom","anvil","to","head"]
->[" baLlroom"," Anvil"," To"," hEad"]
oder mehr anzeigefreundlich:f
Wählt die horizontal geschriebenen Wörter zusammen mit einer Liste von Offsets aus.h
Füllt jedes Wort entsprechend dem entsprechenden Versatz auf und fügt den Großbuchstaben ein. Im Detail:quelle
Python, 249 Bytes
Vermutlich noch sehr golfen
Nimmt eine Liste von Zeichen auf und gibt sie zurück.
- zB
" bAllroom"
ist[' ',' ',' ','b','A','l','l','r','o','o','m']
Gibt immer nur das erste Ergebnis zurück und überprüft die Reihenfolge so, dass alle Akrostatiken zuerst überprüft werden.
Alle im Anzeigeformat auf ideone gedruckten Testfälle anzeigen
Hier ist eine besser lesbare funktionale Form, die dasselbe tut (außer dass sie das erste Ergebnis sofort zurückgibt, anstatt das erste Ergebnis auszuwerten und dann zurückzugeben):
quelle
Perl 6, 177 Bytes
Brute-Force-Lösung.
Wie es funktioniert
Jeder Kandidat sieht aus wie:
Das Umsetzen der Liste der Kandidatenlisten ist erforderlich, um sicherzustellen, dass ein Akrostichon, falls vorhanden, vor einem Mesostikus gefunden wird.
quelle