Na potrzeby obecnego wyzwania „obrysowania” słowo oznacza otaczanie go sukcesywnie własnymi literami, zaczynając od ostatniego, a na końcu zamieniając oryginalne słowo w środku spacjami:
oooooo
onnnno
on -> on no
onnnno
oooooo
Zadanie:
Biorąc pod uwagę listę słów, składającą się wyłącznie z małych i / lub wielkich liter angielskich, obrysuj każde słowo i wyświetlaj wszystkie powstałe bloki obok siebie poziomo, oddzielone kolumną pojedynczej spacji, wyrównane pionowo w środku bloków.
Możesz napisać pełny program lub funkcję.
Wejście:
Lista słów lub, jeśli wolisz, łańcuch rozdzielany spacjami lub innymi symbolami
Wynik:
Reprezentacja ASCII bloków dla wyszczególnionych słów. Wiodące / końcowe białe znaki są dozwolone.
Przypadki testowe:
Input 1: ["code", "golf"] (or "code golf")
Output 1:
cccccccccccc gggggggggggg
cooooooooooc goooooooooog
coddddddddoc gollllllllog
codeeeeeedoc golfffffflog
code edoc golf flog
codeeeeeedoc golfffffflog
coddddddddoc gollllllllog
cooooooooooc goooooooooog
cccccccccccc gggggggggggg
Input 2: ["I", "am", "just", "a", "man"] (or "I am just a man")
Output 2:
jjjjjjjjjjjj
juuuuuuuuuuj mmmmmmmmm
aaaaaa jussssssssuj maaaaaaam
III ammmma justtttttsuj aaa mannnnnam
I I am ma just tsuj a a man nam
III ammmma justtttttsuj aaa mannnnnam
aaaaaa jussssssssuj maaaaaaam
juuuuuuuuuuj mmmmmmmmm
jjjjjjjjjjjj
Kryteria wygranej:
Najkrótszy kod w bajtach w każdym języku wygrywa. Będę bardzo wdzięczny, jeśli skomentujesz / wyjaśnisz swój kod i podejście.
Odpowiedzi:
Płótno ,
2220 bajtówWypróbuj tutaj!
Wyjaśnienie:
źródło
Węgiel drzewny , 35 bajtów
Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:
Pętla nad listą wprowadzania.
Uzyskaj długość bieżącego słowa.
Przejdź do lewego górnego rogu wynikowego konturu.
Zapętlić raz dla każdej postaci.
Narysuj pudełko o odpowiedniej wysokości, szerokości i charakterze.
Przejdź do lewego górnego rogu następnego pola.
Przejdź do następnego konturu.
źródło
Haskell ,
188183174171167 bajtów-9-13 bajtów dzięki Laikoni .Wypróbuj online!
źródło
\a->and[p a>=p x|x<-f<$>w]
może być\a->all((p a>=).p)$f<$>w
ik c=(++[c]).(c:)
może byćk c s=c:s++[c]
.Pyth,
3433 bajtyWypróbuj online.
Zrzuca całą masę dodatkowych białych znaków, ale wyzwanie na to pozwala.
Wyjaśnienie
m
…Q
Wykonuje następujące czynności dla każdego słowad
na wejściuQ
:m\ d
mapuje słowo za pomocąx => " "
, zasadniczo tworząc listę[" ", ..., " "]
z tyloma elementami, ile słowo ma liter..idd
przeplata słowo ze sobą, powtarzając dwukrotnie litery tego słowa._
odwraca ten ciąg.word
staje sięddrrooww
.u
zaczyna się odG
= tablica spacji i stosuje następujące wartości do każdej litery w przeplatanym ciągu wH
:*2H
powtarza znak dwa razy.jR
…G
Umieszcza każdy ciągG
między parą znaków.C
zamienia wiersze i kolumny. Gdy te trzy kroki zostaną wykonane dwa razy z tym samym znakiem wH
, oznacza to linieG
tego znaku.d
.+;
dodaje kolumnę spacji.s
spłaszcza tablicę kolumn dla każdego słowa iJ
zapisuje ją w zmiennejJ
.m
…J
Wykonuje następujące czynności dla każdej kolumny wyniku:.[lJd;
wypełnia obie strony kolumny spacjami, aby długość kolumny była równa liczbie kolumn. Jest to zawsze wystarczające wypełnienie, aby kolumny były wyrównane w pionie.C
zamienia kolumny w wiersze ij
łączy wiersze z nowymi liniami.Alternatywne rozwiązanie, 33 bajty
Wypróbuj online.
Zauważ, że jest spacja. Przeważnie ten sam algorytm, z wyjątkiem tylko wypełnienia kolumn u góry, a następnie transpozycji z wypełnieniem spacją.
źródło
R 189 bajtów
Wypróbuj online!
Współpraca między digEmAll a mną na czacie .
źródło
APL (Dyalog Classic) ,
575150 bajtówWypróbuj online!
źródło
Stax ,
2625 bajtówUruchom i debuguj
źródło
05AB1E , 46 bajtów
Nie jestem zbyt szczęśliwy z tego powodu, ale cieszę się, że to działa.
Wypróbuj online lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie:
źródło