Imprimer un négatif symbolique de votre code

18

(Il s'agit d'une variante de Imprimer un négatif de votre code , que j'ai beaucoup appréciée! Merci à Martin Büttner ♦ - presque tout ce texte est le sien.)

Considérons les symboles comme les caractères ASCII imprimables suivants (notez que l'espace est inclus):

 !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~

Et les alphanumériques à être ceux-ci:

0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz

Considérons un carré de caractères ASCII imprimables pour la longueur de côté N, comme suit:

ONE, 
{two}
&3,+=
!four
f|ve.

Nous exigeons également que chaque ligne et chaque colonne contiennent au moins un symbole et un alphanumérique. (L'exemple ci-dessus satisfait cela.)

Nous définissons le négatif symbolique d'un tel carré comme étant un carré de même taille où chaque symbole est remplacé par un alphanumérique et vice versa. Par exemple, ce qui suit serait un négatif symbolique valide de l'exemple ci-dessus:

[&]OK
a...b
1/100
i@#$%
(R) z

Le choix de caractères spécifiques est sans importance tant qu'ils se trouvent dans les catégories ci-dessus.

Le défi

Votre tâche consiste à écrire un programme avec un code source carré avec une longueur latérale N> 1, qui imprime un négatif symbolique de son code source dans STDOUT. Les espaces de fin doivent être imprimés. Vous pouvez ou non imprimer une seule nouvelle ligne de fin.

Les règles de quine habituelles s'appliquent également, vous ne devez donc pas lire votre propre code source, directement ou indirectement. De même, vous ne devez pas supposer un environnement REPL qui imprime automatiquement la valeur de chaque expression entrée.

Le gagnant est le programme avec la plus petite longueur de côté N. En cas d'égalité, la soumission avec le moins de symboles dans le code source l'emporte. S'il y a toujours égalité, la première réponse l'emporte.

Luc
la source
Est-ce vraiment un défi de type "quine" puisque la sortie n'a pas besoin d'être du code source d'aucun type?
Liam
Bon point, je ne pense pas que ce soit le cas.
Luke
@LiamNoronha Je considérerais cela comme un quine généralisé dans la mesure où la sortie est une fonction du code source, et les règles de quine standard s'appliquent.
Martin Ender
1
Définissez "lire votre propre code source"; s'il existe une commande qui, par exemple, copie des caractères dans la sortie, serait-ce une instance de ladite "lecture"?
Conor O'Brien

Réponses:

11

GolfScript, 3 × 3 (4 symboles)

4,m
`3/
n*o

Essayez-le en ligne sur Web GolfScript .

Production

[0 
1 2
 3]

Comment ça fonctionne

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
la source
11

CJam, 3 × 3 (5 symboles)

[5,
S*3
/N*

Essayez-le en ligne dans l' interpréteur CJam .

Comment ça fonctionne

[   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.

Production

0 1
 2 
3 4
Dennis
la source
10

Pyth, 3x3, 4 symboles

S]1
.5;
S]1

Production:

[1]
0.5
[1]

Explication:

  • S trie la liste des éléments ]1
  • Le littéral numérique .5est imprimé en tant que 0.5, ;termine l'instruction (ne fait rien dans ce cas)
Fabian Schmengler
la source
Je <alphanum><symbol><alphanum>réfléchissais longuement et durement à la façon dont je pouvais entrer en Pyth ou CJam. Il ne m'est jamais venu à l'esprit d'utiliser des flotteurs ... Beau travail!
Dennis
5

C ++, 18 x 18

"Choisissez toujours le pire outil pour le travail."

#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;}}

Production:

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
Luc
la source