Wydrukuj symboliczny negatywny kod

18

(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ź.

Łukasz
źródło
Czy to naprawdę wyzwanie typu „quine”, ponieważ wyjście nie musi być kodem źródłowym żadnego typu?
Liam,
Dobra uwaga, nie sądzę, że tak naprawdę jest.
Łukasz
@LiamNoronha Uznałbym to za uogólniony quine, ponieważ dane wyjściowe są funkcją kodu źródłowego i mają zastosowanie standardowe reguły quine.
Martin Ender
1
Zdefiniuj „odczytywanie własnego kodu źródłowego”; jeśli istnieje polecenie, które, powiedzmy, kopiuje znaki na wynik, czy byłoby to wystąpienie tego „czytania”?
Conor O'Brien,

Odpowiedzi:

11

GolfScript, 3 × 3 (4 symbole)

4,m
`3/
n*o

Wypróbuj online na Web GolfScript .

Wynik

[0 
1 2
 3]

Jak to działa

4,  # Push the array [0 1 2 3].
  m # Undefined token. Does nothing.
`   # Push the string representation of the array. Pushes "[0 1 2 3]".
 3/ # Split into chunks of length 3. Pushes ["[0 " " 1 " "2 3]"].
n*  # Join the chunks, separated by linefeeds. Pushes the output.
  o # Undefined token. Does nothing.
Dennis
źródło
11

CJam, 3 × 3 (5 symboli)

[5,
S*3
/N*

Wypróbuj online w interpretatorze CJam .

Jak to działa

[   e# Unmatched [. Does nothing.
 5, e# Push [0 1 2 3 4].
S*  e# Join the integers, separating by spaces. Pushes "0 1 2 3 4".
  3 e#
/   e# Split into chunks of length 3. Pushes ["0 1" " 2 " "3 4"].
 N* e# Join the chunks, separated by linefeeds. Pushes the output.

Wynik

0 1
 2 
3 4
Dennis
źródło
10

Pyth, 3x3, 4 symbole

S]1
.5;
S]1

Wynik:

[1]
0.5
[1]

Wyjaśnienie:

  • S sortuje listę jednego elementu ]1
  • Literał liczbowy .5jest drukowany jako 0.5, ;kończy instrukcję (w tym przypadku nic nie robi)
Fabian Schmengler
źródło
Zastanawiałem się długo, jak mogę dostać się <alphanum><symbol><alphanum>do Pyth lub CJam. Nigdy nie przyszło mi do głowy, żeby używać pływaków ... Dobra robota!
Dennis
5

C ++, 18 x 18

„Zawsze wybieraj najgorsze narzędzie do pracy”.

#include<cstdio>  
int main(){ for  (
int line =  0lu;  
1lu*line <  18l;  
1lu*line++){pri\  
ntf(line == 0lu * 
123*line? "\x41.\\
x2e\x02e...\x2e\\ 
x42\x02e...\x2e.\ 
CDE\x00a":  14l!= 
1lu*line?".\x2e.\\
x46\x02e...\x47""\
HIJ\x02e..""KLM"  
 /*O*/"\n":  /*The
bad code:*/"NOP.\ 
QRS\x054." "UVW\  
XYZ\x02e" "\x2e\\ 
x2e\x00a"); 0lu;}}

Wynik:

A.......B......CDE
...F....GHIJ...KLM
...F....GHIJ...KLM
...F....GHIJ...KLM
...F....GHIJ...KLM
...F....GHIJ...KLM
...F....GHIJ...KLM
...F....GHIJ...KLM
...F....GHIJ...KLM
...F....GHIJ...KLM
...F....GHIJ...KLM
...F....GHIJ...KLM
...F....GHIJ...KLM
...F....GHIJ...KLM
NOP.QRST.UVWXYZ...
...F....GHIJ...KLM
...F....GHIJ...KLM
...F....GHIJ...KLM
Łukasz
źródło