(powiązane: jeden , dwa , trzy )
Akrostych to styl poematu / pisanie gdzie początkowy znak każdej linii, kiedy czytać pionowo, produkuje również wyraz lub wiadomość. Na przykład,
Together
Everyone
Achieves
More
również przeliteruje słowo, TEAM
gdy pierwsza kolumna jest czytana pionowo.
Akrostiki to podzbiór mezostycznych , w których pionowe słowo może znajdować się w dowolnym miejscu w słowach poziomych. Na przykład TEAM
powyższy można również zapisać jako mezostyczny w następujący sposób
togeTher
everyonE
Achieves
More
wraz z kilkoma innymi odmianami.
Wyzwanie będzie polegało na wytworzeniu akrostyka lub mezostycy z podanej listy słów wejściowych.
Wkład
- Lista słów w dowolnym odpowiednim formacie .
- Lista będzie zawierać tylko słowa wykonane małymi literami
[a-z]
. - Lista ma gwarancję, że tworzy akrostyk lub mezostyk (nie trzeba obsługiwać fałszywych danych wejściowych).
- Jedno ze słów na wejściu utworzy słowo pionowe, a pozostałe słowa horyzontalne - w tym przypadku wyzwaniem jest znalezienie odpowiedniego słowa pionowego, więc nie można go traktować osobno.
Wydajność
- Akrostyk lub mezostyk ASCII-art utworzony ze słów wejściowych, zapisanych do STDOUT lub zwróconych, w dowolnym rozsądnym formacie.
- Odpowiednie słowo pionowe musi być pisane wielkimi literami (jak w przykładach).
- Wymagane są spacje wiodące, aby odpowiednio wyrównać pionowe słowo . Końcowe spacje i wiodące / końcowe znaki nowej linii są opcjonalne. Dodatkowe spacje wiodące są również w porządku, pod warunkiem, że słowa są wyrównane poprawnie.
- Jeśli możliwy jest zarówno akrostyk, jak i mezostyk, wyprowadzaj tylko akrostyk .
- Jeśli możliwy jest więcej niż jeden akrostyk / mezostyk, twój kod może wypisać jeden lub wszystkie z nich.
Zasady
- Dopuszczalny jest pełny program lub funkcja.
- Standardowe luki są zabronione.
- To jest golf golfowy, więc obowiązują wszystkie zwykłe zasady gry w golfa, a wygrywa najkrótszy kod (w bajtach).
Przykłady
['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
Odpowiedzi:
Pyth,
52494746 bajtówWypróbuj online.
Jest to prawdopodobnie bardzo gra w golfa. Drukuje kilka wiodących miejsc.
źródło
Brachylog , 145 bajtów
Wypróbuj online!
(Trwa to pół minuty, więc bądź cierpliwy.)
źródło
JavaScript (ES6), 255
263 269 286Edytuj 17 bajtów zapisanych jako dowolną liczbę wiodących spacji jest dozwolona
Edytuj2 trochę tasowania, 6 bajtów zapisanych
Edytuj3 zwraca listę ciągów zamiast jednego ciągu z nowymi wierszami (komentarz OP do odpowiedzi feersum), zapisano 8 kolejnych bajtów
Dla każdego słowa na liście wejściowej używam rekurencyjnego DFS, aby znaleźć wszystkie możliwe mezostyki / akrostyki. Każdy z nich jest przechowywany jako tablica ze słowem i docelową pozycją litery wewnątrz słowa. Każdy znaleziony wynik jest zapisywany w globalnej tablicy wyników na pozycji 1 (jeśli jest akrostatyczny) lub 0, jeśli jest mezostyczny.
Po zakończeniu skanowania wszystkich słów uzyskuję wynik na ostatniej pozycji w tablicy i buduję i zwracam jego ascii art rapresentation.
Mniej golfa
Test
źródło
Perl6,
287277269 bajtówźródło
Mathematica 10,0, 139 bajtów
Nienazwana funkcja zwracająca listę linii:
Przykładowe użycie:
Szukam sugestii na temat lepszych sposobów wykonywania wielkich liter.Znalazłem bardzo fajną funkcjęMapAt
do pisania wielką literą w ciągu.źródło
Haskell,
214206204202 bajtówZwraca listę łańcuchów wypełnionych spacją, np.
f ["late","ballroom","anvil","to","head"]
->[" baLlroom"," Anvil"," To"," hEad"]
lub więcej przyjaznych dla wyświetlania:f
wybiera słowa pisane poziomo wraz z listą odsunięć.h
wstawia każde słowo zgodnie z odpowiednim przesunięciem i wstawia wielką literę. Szczegółowo:źródło
Python, 249 bajtów
Prawdopodobnie nadal bardzo gra w golfa
Pobiera i zwraca listę znaków.
- np.
" bAllroom"
jest[' ',' ',' ','b','A','l','l','r','o','o','m']
Zwraca tylko pierwszy wynik i sprawdza w takiej kolejności, aby wszystkie akrostyki były sprawdzane jako pierwsze.
Zobacz wszystkie przypadki testowe wydrukowane w formacie wyświetlania na ideone
Oto bardziej czytelna forma funkcjonalna, która robi to samo (z wyjątkiem tego, że natychmiast zwraca pierwszy wynik, a nie ocenia, a następnie zwraca pierwszy wynik):
źródło
Perl 6, 177 bajtów
Rozwiązanie siłowe.
Jak to działa
Każdy kandydat wygląda następująco:
Transpozycja listy list kandydatów jest konieczna, aby upewnić się, że akrostyk, jeśli istnieje, zostanie znaleziony przed jakimkolwiek mezostykiem.
źródło