Rozważ kwadratowy blok tekstu, N znaków o szerokości N i wysokości, dla nieparzystej liczby całkowitej N większej niż 1.
Jako przykład niech N = 5, a tekst będzie:
MLKJI
NWVUH
OXYTG
PQRSF
ABCDE
Zauważ, że jest to alfabet (oprócz Z) spiralny wokół lewego dolnego rogu przeciwnie do ruchu wskazówek zegara. To trochę jak zwinięty dywan.
„Rozwijanie” tekstu o jedną czwartą obrotu w prawo, więc FGHI
są na tym samym poziomie, co ABCDE
powoduje:
PONM
QXWL
RYVK
STUJ
ABCDEFGHI
To rozwijanie można wykonać jeszcze 7 razy, aż tekst będzie w jednym wierszu:
SRQP
TYXO
UVWN
ABCDEFGHIJKLM
UTS
VYR
WXQ
ABCDEFGHIJKLMNOP
WVU
XYT
ABCDEFGHIJKLMNOPQRS
XW
YV
ABCDEFGHIJKLMNOPQRSTU
YX
ABCDEFGHIJKLMNOPQRSTUVW
Y
ABCDEFGHIJKLMNOPQRSTUVWX
ABCDEFGHIJKLMNOPQRSTUVWXY
Wyzwanie
Wyzwanie polega na napisaniu programu, który jest blokiem tekstu N × N, który generuje liczbę razy „rozwinął się” o ćwierć obrotu, gdy jest przestawiony na wzorce rozwijania i działa.
Są tu naprawdę dwa konkursy: (mam nadzieję, że nie będzie zbyt bałagan)
- Zrób to z najmniejszą N. (do granicy N = 3)
- Zrób to z największym N. (bez limitu)
Odpowiedź nie będzie zaakceptowana, ale zwycięzca w każdej z tych kategorii otrzyma ode mnie co najmniej 50 powtórzeń nagrody. W przypadku remisów wygrywają najstarsze odpowiedzi.
Przykład
Jeśli twój blok kodu to
MyP
rog
ram
uruchomienie go tak, jak jest powinno, powinno dać wynik 0.
Bieganie
rM
oy
ramgP
powinien wypisać 1.
Bieganie
or
ramgPyM
powinien wypisać 2.
Bieganie
o
ramgPyMr
powinien wypisać 3.
Wreszcie uruchomienie ramgPyMro
powinno dać 4.
Detale
- Wyjście powinno być drukowane samo na standardowe wyjście (lub najbliższą alternatywę). Brak danych wejściowych.
- W kodzie możesz używać tylko ASCII do wydruku (kody szesnastkowe od 20 do 7E, które zawierają spację).
- Przestrzenie wypełniają puste miejsce w rozwijających się układach. (Chyba że rozwijasz się w lewo.)
- Tylko układy od całkowicie kwadratowego do całkowicie płaskiego muszą mieć prawidłową moc wyjściową. Żadne inne ustalenia nie będą realizowane.
- Nie możesz czytać własnego źródła.
- Możesz użyć komentarzy.
- N = 1 jest wykluczone, ponieważ w wielu językach program
0
będzie działał. W razie potrzeby możesz rozwinąć w lewo zamiast w prawo. Więc np
MyP rog ram
staje się
Pg yo Mrram
i tak dalej. Podczas toczenia w ten sposób nie są dodawane żadne dodatkowe spacje. Linie właśnie się kończą
(Powiązane: Napisz prostokątny program, który wyświetli liczbę razy, kiedy został obrócony )