Ze wszystkich znaków ASCII łatwo jest stwierdzić, że niektóre z nich tworzą grupy będące rotacjami tego samego podstawowego znaku. Na przykład V > ^ <
. To pozwala na konstruowanie sztuki ASCII, która może być obracana o wielokrotności 90 stopni i nadal pozostaje sztuką ASCII.
Wyzwanie
Twoim celem jest zagranie w golfa w programie, który akceptuje grafikę ASCII i liczbę stopni, aby obrócić ją ze STDIN i drukuje obróconą grafikę ASCII do STDOUT.
W pierwszym wierszu wprowadzania program otrzyma numer N. Liczba ta reprezentuje szerokość i wysokość grafiki ASCII.
Otrzymasz następnie N kolejnych linii dokładnie N znaków (nowy wiersz nie jest liczony w tej liczbie). Wielkość sztuki zawsze będzie kwadratem, chociaż może mieć wypełnienie w postaci spacji, aby uczynić ją kwadratem.
Otrzymasz jeszcze jeden numer w ostatnim wierszu: 90, 180 lub 270. To pokazuje, o ile stopni należy obrócić zdjęcie w prawo.
Uwaga: Wprowadzony obraz będzie zawierał tylko znaki, które można obrócić o odpowiednią wartość. Jeśli dane wejściowe nie spełniają dokładnie tych wymagań, nie jest wymagane określone zachowanie.
Jako wynik program powinien wypisać dokładnie N linii N znaków, z nowymi liniami po każdej linii. Obraz należy obrócić, aby każdy znak w oryginale został zastąpiony wersją obróconą i został przeniesiony w odpowiednie miejsce na obrazie.
Przykłady (niezbyt piękna sztuka ASCII)
Wejście
5
<- ||
| |V
+->+
|O
<--+
90
Wynik
^ +-^
| | |
| V
+-+--
O <-
(Obroty o 90 i 270 nie będą wyglądać zbyt dobrze, ponieważ postacie nie są kwadratami)
Wejście
6
+ /\ +
| \ \|
( \/|
\ )
I \ /
:) V $
180
Wynik
$ ^ (:
/ \ I
( \
|/\ )
|\ \ |
+ \/ +
Wymagane obsługiwane znaki
W przypadku wszystkich obrotów (90, 180 i 270) program powinien mieć możliwość obracania:
- Przestrzenie,
+
,@
,X
iO
która nigdy się nie zmieniają V
>
<
^
|
-
i\
/
(obrócone o 180 pozostają takie same)
W przypadku obrotu o 180 stopni te dodatkowe znaki muszą być obsługiwane
I
N
Z
%
:
0
=
S
~
$
#
które pozostają takie sameP
d
,(
)
,[
]
,{
}
,M
W
, I9
6
v
, które nie są obsługiwanymi postaciami. Zakładam, że miała to być wielka literaV
. Ponadto ostatnia linia nie jest wypełniona długością 5 znaków.P d, ( ), [ ], { }, M W, and 9 6
czy kiedykolwiek można obrócić o 90º lub 270º?Odpowiedzi:
GolfScript,
79757367 znakówWygląda na to, że rozwiązania moje i Petera Taylora ulegają pewnej konwergencji. W każdym razie wygląda na to, że wciąż mam przed sobą kilka znaków. :-) Dziękuję (i +1) zarówno Peterowi, jak i kopiuję za pomysły, które bezwstydnie ukradłem.
Ten kod całkowicie ignoruje rozmiar podany w pierwszym wierszu, ponieważ jest to nadmiarowa informacja. Powinien nawet obsługiwać dane wejściowe o wymiarach innych niż kwadratowe, ale w dużym stopniu zależy to od wypełnienia wszystkich linii wejściowych na tej samej długości. Próbuje obrócić znaków
P
,d
,(
,)
,[
,]
,{
,}
,M
,W
,9
, lub6
90 lub 270 stopni mogą powodować nieoczekiwane wyjścia; wszystkie pozostałe znaki, które nie są jawnie odwzorowane, zostają zachowane bez zmian.Ps. Oto moje oryginalne 79-znakowe rozwiązanie:
źródło
C, 336 znaków
Jestem pewien, że jest miejsce na ulepszenia.
źródło
javascript (181 znaków)
Wymaga dopełnienia każdej linii do podanej długości.
źródło
\n
, normalne kopiowanie wkleić i wyrównać spacje do pierwszych / ostatnich wierszy i nie udało mi się, aby działałoGolfscript (
80 79 78 7776 znaków)Uwaga: Wprowadzenie „nieokreślonego zachowania” dozwolonego przez nieprawidłowe dane wejściowe może wywołać nieco ciekawy wynik, ponieważ znaki zastępcze (poza ASCII) są używane dla niektórych znaków, których obrót o 90 stopni nie jest zdefiniowany. Na przykład
(
zostałby zmapowany do punktu kodowego 160, który w ISO-8859-1 i Unicode jest przestrzenią niezniszczalną.źródło