Napisz program, który pobiera ciąg zawierający tylko spacje, znaki nowej linii i kątowników: <
, >
( jodełkowe ). Wyjście ciąg miejsc, nowej linii, a ukośnikami: /
, \
( soliduses ), których kształty odpowiadają wejściu, lecz obrócony o jedną czwartą obrotu w kierunku ruchu wskazówek zegara, za pomocą kolumny z przestrzeni wstawione pomiędzy każdy rząd pierwotnego wejścia (estetyki).
Na przykład, jeśli dane wejściowe to:
<>
Wynik byłby następujący:
/\
\/
Jeśli dane wejściowe są następujące:
><<<>
<><
Wynik byłby następujący:
\/
/\ /\
\/ /\
/\ /\
\/
Jeśli dane wejściowe są następujące:
>> <<
<> <>
<
><
Wynik byłby następujący:
/\ \/
\/ \/
\/ /\
/\
/\ /\
\/ /\
Zauważ, że w dwóch ostatnich przykładach jest jedna kolumna spacji między oryginalnymi wierszami wejściowymi.
Możesz napisać pełny program, który pobiera dane wejściowe w dowolny zwykły sposób (wiersz poleceń, standardowe wyjście) i wypisuje dane wyjściowe, lub możesz napisać funkcję z argumentem łańcuchowym, która wypisuje lub zwraca dane wyjściowe.
Puste początkowe i końcowe wiersze lub kolumny białych znaków na wejściu nie muszą być obecne na wyjściu. Dodatkowo, może być dowolna ilość wiodących i / lub końcowych spacji i / lub nowych linii w danych wyjściowych, w dowolnych lokalizacjach, o ile uzyskane kształty są prawidłowe. Innymi słowy, tłumaczenie sztuki ascii nie ma znaczenia, jedynie kształty i ich wzajemne relacje .
Możesz opcjonalnie założyć, że wejście ma końcowy znak nowej linii.
Najkrótszy kod w bajtach wygrywa.
Odpowiedzi:
CJam, 35 bajtów
Wypróbuj online tutaj
źródło
$
sztuczki wciąż miał 37 bajtów ...$
sztuczka już wiele razy uratowała mi życie;)CJam, 37 bajtów
Wypróbuj online w interpretatorze CJam .
Jak to działa
źródło
Python 2, 105 bajtów
Ze wszystkich niewłaściwych powodów musi to być jedno z najmilszych zastosowań
map(None, ...)
, jakie do tej pory miałem. Wyjście wyrównuje się nawet do idealnego prostokąta.Weźmy drugi przykład:
map(None,*s.split("\n"))
wykonuje biedakazip_longest
, dając:Zauważ, że druga linia jest krótsza niż pierwsza, więc otrzymujemy
None
na końcu. Zwykle byłby to problem, ale z jakiegoś powodu prawie wszystko jest porównywalne w Pythonie 2, w szczególnościOznacza to, że wyrażenie
1-cmp(c,"<")
powraca0, 1, 2
do">", "<", None
odpowiednio, pozwalając nam korzystać ciąg krojenia sztuczki, aby wyodrębnić jeden"\/", "/\", " "
. Korzystając z tego, drukujemy wynik linii po linii, łącząc grupy 2-znakowe ze spacjami.źródło
Scala,
201188180 znakówUwaga:
działa to tylko wtedy, gdy podany ciąg ma wszystkie linie o równej długości (tj. wypełnione spacjami)
wyjaśnienie:
Używam fold z początkową wartością krotki
Seq[String]
ai anInt
(zamiast pisaćSeq.empty[String]
im pisząc krótszySeq("")
i.init
po fold), fold działa na kolekcji ciągów, każdy ciąg jest linią na oryginalnym wejściu, a każda linia jest podwojony. sztuczka polegała na przetestowaniu modulo char. ponieważ'<'
wartość wynosi 60, a'>'
wartość 62, testowanie dla modulo 4, da 0 lub 2. dlatego też fold zawiera takżeInt
zestaw przerzucania na 0 i przerzucany między 0 a 2 za pomocą2-i
. każda linia nieparzysta powinna być odwzorowana'>'
na'/'
i'<'
do'\\'
, a każda linia parzysta powinna być odwzorowana'>'
na'\\
'i'<'
do'/'
. dlatego testujęc%4==i
i uderz 2 ptaki 1 kamieniem. fold „odbudowuje” początkową sekwencję ciągów w odwrotnej kolejności, a następnie (po upuszczeniu ostatniego wiersza) transponuję sekwencję (dlatego wszystkie ciągi muszą mieć dokładnie taką samą długość). z powodu zaangażowanych implikacji, muszę_.mkString
w każdej linii (poprzednio kolumna), a następniemkString("\n")
dla ostatecznego wyniku.źródło
Perl - 119
Najpierw
@l
jest przypisywany jako lista list reprezentujących znaki w każdym wierszu wprowadzania z wierszami w odwrotnej kolejności. Następnie przechodzi przez kolumny znaków, zastępując nawiasy kątowe odpowiednimi ukośnikami, łącząc elementy ze spacjami i drukując połączone ukośniki jako linię.źródło