Wprowadzenie
Napisz kompletny program, który obraca prostokątny blok znaków ASCII o 90 stopni w prawo. Gdy sam program jest obracany o 90 stopni w kierunku zgodnym z ruchem wskazówek zegara, obraca blok znaków ASCII o 90 w kierunku przeciwnym do ruchu wskazówek zegara.
Zasady
- Wielu nie używa wbudowanych, które obracają lub transponują matryce. Na przykład w MATLAB / Octave
rot90
i operator transpozycji'
nie są dozwolone. - Musisz napisać pełny program, który używa STDIN i STDOUT lub najbliższego odpowiednika.
- Twój program musi być prostokątny i zakładać, że wejście jest również prostokątne.
- Dane wejściowe i wyjściowe są ciągami oddzielonymi znakiem nowej linii i nie będą miały końcowych znaków nowej linii.
Po uruchomieniu z kodem źródłowym jako danymi wejściowymi program musi obracać się o 90 stopni w kierunku zgodnym z ruchem wskazówek zegara. Wyjściem musi być drugi program w tym samym języku, który obraca wejście o 90 stopni przeciwnie do ruchu wskazówek zegara. Kiedy obrócony program otrzymuje kod źródłowy jako dane wejściowe, powinien wypisać kod źródłowy oryginalnego programu.
Uwaga: Oba programy muszą działać na dowolnym wejściu, nie tylko na własnym kodzie źródłowym, więc znak jednoznakowy jest niedozwolony.
Przykład
Powiedzmy, że poniżej znajduje się poprawny program, który obraca wejście o 90 stopni w hipotetycznym języku ExampleLang.
^f a2% 3
lk (^_^&
v
D8 $4 /
Po uruchomieniu z samym sobą jako wejściem, wyświetla inny prawidłowy program, który obraca swój sygnał wejściowy przeciwnie do ruchu wskazówek zegara:
D l^
8 kf
$ (a
4 ^2
_%
^
/v&3
Ten drugi program, podany samemu sobie jako dane wejściowe, wyświetla oryginalny program. Zwróć uwagę, że pusta linia powinna mieć cztery spacje, aw drugiej do ostatniej linii znajduje się spacja, której nie można wyrenderować w przecenie. W celu wyjaśnienia:
$ examplelang program < program > rotProg
$ examplelang rotProg < rotProg > program1
$ diff -s program program1
Files program and program1 are identical
Najkrótszy program wygrywa. Standardowe luki są zabronione.
:.+
da się rozbić na kilka linii?