(Jest to wariacja na temat drukowania negatywu twojego kodu , co bardzo mi się podobało! Dzięki Martin Büttner ♦ - prawie cały ten tekst jest jego.)
Rozważmy te symbole jako następujące drukowalne znaki ASCII (zauważ, że spacja jest uwzględniona):
!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
I będą to alfanumeryczne :
0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
Rozważ kwadrat drukowanych znaków ASCII dla długości boku N, taki jak poniżej:
ONE,
{two}
&3,+=
!four
f|ve.
Wymagamy również, aby każdy wiersz i każda kolumna zawierały co najmniej jeden symbol i jeden alfanumeryczny. (Powyższy przykład to spełnia.)
Definiujemy symboliczny minus takiego kwadratu jako kwadrat o tym samym rozmiarze, w którym każdy symbol jest zastępowany alfanumerycznym i odwrotnie. Na przykład poniższe byłoby poprawnym symbolicznym negatywem powyższego przykładu:
[&]OK
a...b
1/100
i@#$%
(R) z
Wybór konkretnych znaków nie ma znaczenia, o ile znajdują się w powyższych kategoriach.
Wyzwanie
Twoim zadaniem jest napisanie programu o kwadratowym kodzie źródłowym o długości boku N> 1, który wypisuje symboliczny negatyw kodu źródłowego do STDOUT. Spacje końcowe należy wydrukować. Możesz wydrukować pojedynczy znak nowej linii lub nie.
Obowiązują również zwykłe reguły quine, więc nie wolno czytać własnego kodu źródłowego, bezpośrednio lub pośrednio. Podobnie nie wolno zakładać środowiska REPL, które automatycznie drukuje wartość każdego wprowadzonego wyrażenia.
Zwycięzcą jest program o najniższej długości boku N. W przypadku remisu wygrywa zgłoszenie z najmniejszą liczbą symboli w kodzie źródłowym. Jeśli nadal jest remis, wygrywa najwcześniejsza odpowiedź.