Considérons un carré de caractères ASCII imprimables (points de code 0x20 à 0x7E) pour la longueur du côté N , comme suit (ici, N = 6 ):
=\
g \
7
m+y "g
L ~
e> PHq
Nous avons également besoin que chaque ligne et chaque colonne contiennent au moins 1 caractère espace et 1 caractère non espace . (L'exemple ci-dessus le satisfait.)
Nous définissons le négatif d'un tel carré comme étant un carré de même taille, où chaque espace est remplacé par un non-espace et inversement. Par exemple, ce qui suit serait un négatif valide de l'exemple ci-dessus:
1234
a b cd
ZYXWV
!
{} [ ]
?
Le choix des caractères non-d'espaces est sans importance (tant qu'ils appartiennent à la plage ASCII imprimable).
Le défi
Vous devez écrire un programme, avec un code source carré avec une longueur de côté N> 1 , qui affiche un négatif de lui-même sur STDOUT. Les espaces de fin doivent être imprimés. Vous pouvez ou non imprimer une nouvelle ligne de fin.
Les règles habituelles de quine s'appliquent également, vous ne devez donc pas lire votre propre code source, directement ou indirectement. De même, vous ne devez pas assumer un environnement REPL, qui imprime automatiquement la valeur de chaque expression entrée.
Le gagnant est le programme avec la plus faible longueur du côté N . En cas d'égalité, la soumission contenant le moins de caractères non espaces du code source l'emporte. S'il y a toujours égalité, la première réponse l'emporte.
la source
Réponses:
CJam, 4 x 4 (8 non-espaces)
Essayez-le en ligne dans l' interprète CJam .
Sortie
Comment ça fonctionne
L
pousse un tableau vide et_
pousse une copie de celui-ci.Le bloc
pousse ce bloc sur la pile.
_
pousse une copie du bloc de code et l’p
imprime, suivie d’un saut de ligne.Enfin, l'interprète imprime tous les éléments restants de la pile: deux tableaux vides n'affectant pas la sortie et le bloc de code d'origine.
Version alternative
Essayez-le en ligne dans l' interprète CJam .
Sortie
Comment ça fonctionne
L
pousse un tableau vide et le vide~
. La pile est à nouveau vide.Le bloc
pousse ce bloc sur la pile.
_
pousse une copie du bloc et~
exécute la copie.L'
_
intérieur de la copie du bloc poussera une copie du bloc d'origine, quip
sera imprimée, suivie d'un saut de ligne.Enfin, l'interprète imprime l'élément restant sur la pile: le bloc de code d'origine.
la source
Perl, 7 × 7 (42 non-espaces)
Sortie:
la source
7
fait de7
. :)CJam, 4X4 (
1210 non-espaces)Sortie:
Version précédente avec 12 non-espaces:
Et la sortie est
Comme l'a souligné Martin, cette version a
*
,4
,4
comme sortie;)
Essayez-le en ligne ici
la source
Marbelous - 16x16
Testez-le ici! Les espaces vides, les panneaux cylindriques et les bibliothèques incluses doivent tous être vérifiés.
Sortie
Explication
Il y a deux cartes ici: la carte principale (illustrée ci-dessous) et la
ss
carte, qui ne prend aucune entrée et produit deux espaces (0x20) vers STDOUT.Une cellule vide équivaut à un
..
et tout ce qui suit#
est un commentaire.Chaque tick,
ss
sort deux espaces à STDOUT.Le chemin vert est une simple boucle qui génère une nouvelle ligne (0x0A) à la fin de chaque 7ème tick.
Le chemin bleu affichera les nombres (
Hp
imprime une bille sous la forme de deux chiffres hexadécimaux) présents dans la sortie, à la fin de chaque sixième tick.Après avoir imprimé
01
une fois, la boucle se termine et suit le chemin rouge qui duplique cette bille.Un duplicata est imprimé (le second
01
) et l'autre est envoyé sur le chemin noir, qui termine le tableau à la!!
cellule. En raison de l'emplacement de l'Hp
élément utilisé dans cette dernière impression, le01
symbole apparaît avant les deux espaces du même tick, plutôt qu'après, le comportement de tous les autresHp
appels.la source
Python - 11x11
Sortie
C'est une solution assez désordonnée et ennuyeuse, mais je pensais juste montrer que ...
Cette solution tire parti du fait que, si vous êtes entre parenthèses en Python, vous pouvez alors scinder votre code en plusieurs lignes et ajouter des espaces de manière arbitraire sans obtenir un
IndentationError
. Une autre façon de procéder est de terminer la ligne par une barre oblique inversée.la source
Python - 7x7 (37 non-espaces)
Sortie
Utilise l'ancien
%
opérateur de formatage de chaîne de Python pour effectuer le travail:+7
et-7
s'occupe de la justification droite / gauche, et du dernier espace pour faire correspondre la parenthèse fermanteprint
en particulier. En préparant la chaîne de format, nous avons égalementla source
JavaScript (9x9)
Sortie
Remarques
J'ai créé et joué au golf (au mieux de mes capacités) pour un carré de diagonale de toute taille n:
remplacement des nombres *** asdf *** par des constantes dépendant de la longueur du côté n, par exemple pour n = 6:
Mais, même si ce code a une longueur de 46, je ne pouvais pas obtenir l'espace constant pour s'aligner avec un espace dans la diagonale du code jusqu'à ce qu'il soit aussi gros qu'un 9x9, avec une ligne perdue (la 5ème)
Edit: Modifié pour ajouter alert (). Avant:
la source
CJam, 5x5, 12 non-espaces
Pas un gagnant, mais je voulais ajouter une soumission plutôt petite et clairsemée , car la plupart des réponses n'imprimaient qu'une diagonale.
empreintes
Testez-le ici.
Les deux derniers caractères du code, ne font rien, donc il n'a que 10 octets de code réel. Pour une grille plus petite, je pourrais même la réduire de deux octets supplémentaires à 8, mais cela ne tient pas en 3x3 et ce code ne fonctionne pas pour des tailles de grille uniformes.
Comment ça fonctionne:
la source
Befunge , 9x9
Je ne sais pas pourquoi j'ai fait ça. Cela a pris beaucoup trop de temps. J'ai un mal de tête énorme maintenant.
Sortie:
Quelques explications
Le code permet
g
de lire les@
caractères de la grille "à la volée" (ainsi que l'espace final@ / 2
) etp
de modifier la boucle pour écrire la dernière ligne de sortie.Chaque caractère du code est utilisé à un moment donné, sous forme de code ou de données (les
9
et@
les deux dernières lignes).J'ai dû faire beaucoup de contournements pour que le code fonctionne. Le pointeur d'instruction effectue plusieurs intersections pendant l'exécution, dont certaines sont sautées. (Je ne pouvais utiliser aucune instruction là-bas pour des directions différentes car ils interviendraient. Il n'y a pas de NOP.) Ailleurs, j'ai soit réutilisé le même personnage, soit je l'ai tout simplement défait (voir
$:
au milieu).J'ai aussi fait du travail créatif sur la pile:
n,0
. Je dois ensuite décrémentern
. La solution évidente serait$1-
, mais j'ai réussi à le raccourcir en utilisant!-
.0
. J'ai ensuite organisé le changement de code (20g46p7g46\p
) pour l'utiliser0
, au lieu de perdre 2 caractères$0
.la source
!-
; c'est quelque chose que je ferais. Anecdote: dans Funge-98,z
c'est un NOP.z
ne figurait pas sur le wiki et je présente pour le codage, ce qui signifie une non-commande retournée la direction IP. Quasiment tout le monde a dû refactoriser 70% du code en raison d’un endroit qui devrait être NOP.Python 3, 8x8
Il y a 50 caractères non-espace et 14 espaces. La dernière ligne a un caractère inutile, mais tout le reste est nécessaire.
Sortie:
la source
(a,*b,c)="12345"
... cession étoilée est intéressant :)Ruby, 8x8
Sortie:
la source
CJam, 5X5
Et la sortie est
J'étais si proche de la solution 4X4.Voir mon autre réponse<sigh>
Essayez-le en ligne ici
la source
C ++, 12x12
Edit: Donc, je suis devenu un peu obsédé par ce défi et j'ai réussi à le réduire de 17x17 à 12x12. Il m'a fallu un peu de temps pour réaliser que je pouvais utiliser
/**/
comme délimiteur de jeton. Ce code tire parti du fait qu'une épissure de ligne fonctionne toujours dans Clang avec un espace après, bien qu'elle donne des avertissements et ruine la colorisation du code par Xcode.Sortie:
la source
Befunge-98 , 8x8 (56 non-espaces [11 nops])
Remarque: dans l’intérêt d’un bon sport sportif, cela lit sa propre source via
'
, ce qui en fait un tricheur pour certains. Lire le débat ici .Programme
Sortie
Explication
La version non-golfée
(le non-espace et l'espace sont remplacés par 'n et' pour plus de lisibilité.)
Cette solution est basée sur le fait qu'en utilisant un index [0, width ^ 2) mod, la largeur du carré peut vous dire si vous êtes au bout de la ligne ou en diagonale. Comme tous les espaces sont placés le long de la diagonale, il est facile de savoir quand imprimer un non-espace!
En pseudocode
Discussion
J'en suis très fier, même si j'aurais aimé pouvoir transformer chaque non-espace en non-nop. Je suis également fier de ne pas avoir utilisé le trope standard Befunge get-increment-put! Il imprime différents symboles pour le non-espace parce que j'avais la place pour ça et que je ne voulais pas être ennuyeux.
Essayez-le sur Windows avec BefungeSharp !
la source
CJam, 4 x 4 (8 non-espaces)
Essayez-le en ligne dans l' interprète CJam .
Sortie
Comment ça fonctionne
N
pousse un saut de ligne sous forme de chaîne singleton.a
enveloppe cette chaîne dans un tableau.`
inspecte le résultat, c'est-à-dire qu'il pousse une représentation sous forme de chaîne du tableau.Voici le résultat:
S*
joint la chaîne résultante (tableau de caractères), en séparant ses éléments à l'aide d'espaces. En d'autres termes, il met un espace entre toutes les paires de caractères adjacents de la chaîne.Voici le résultat:
N
pousse un autre saut de ligne.X$
copie l’élément de pile à l’index 1 (en partant du haut), c’est-à-dire la chaîne multiligne.Enfin, l'interprète imprime tous les éléments de la pile: la chaîne multiligne d'origine, le saut de ligne et la copie de la chaîne multiligne.
la source
SOGL V0.12 , 2x2 (2 non-espaces)
Essayez-le ici!
Sortie
Explication
Dans SOGL, toutes les lignes, à l'exception de la dernière, sont en train de remplacer des lignes - elle remplace partout dans le code continu le dernier caractère de la ligne précédé de tout ce qui précède. SO la 1ère ligne est ici
replace space with 2 in the next line
.Ensuite, la ligne suivante
2╚
est exécutée:2
appuie sur 2 et╚
crée une diagonale de taille 2.la source
CBM BASIC v2.0 (8 × 8)
Une amélioration par rapport à ma réponse précédente , utilisant une approche complètement différente:
Sortie:
la source
Rubis,
8x87x7Sortie:
Version précédente, 8x8 avec 20 espaces:
Sortie:
la source
Pushy , carré 4x4
Non concurrente car la langue postdate le défi:
Code:
Les sorties:
Essayez-le en ligne!
Parce que les espaces ne sont pas pertinents dans Pushy, le code est facilement arrangé pour correspondre au négatif de sa sortie. Le programme actuel ressemble à ceci:
Les barres obliques inverses commencent un commentaire, la fin
\o/
est donc là pour compléter le négatif, et a l'air cool.Alternativement, pour le même score, on peut avoir les solutions suivantes:
la source
Haskell, 10 × 10
Définit une fonction d'assistance
a ! b
imprimant une ligne du formulairebbbbbbbbba
et une fonction récursiven & c
imprimant desn
lignes du formulaireccccccccc␣
suivies d'une ligne du formulaire␣␣␣␣␣␣␣␣␣c
.Utilise
<$
(fmap const
encore) sur une plage pour répéter un caractère. Notez que cette option<$
est uniquement disponible sans importation depuis GHC 7.10, ce qui est postérieur à ce défi.Je ne suis pas tout à fait sûr si cela rend cette soumission non compétitive.Rien de vraiment excitant avec le choix de la disposition ou de l’algorithme ici; Je n'avais pas beaucoup d'octets à épargner et c'est juste une chance que les coupures de lignes se produisent
putStrLn
comme elles le faisaient.la source
05AB1E , 3x3 (6 octets autres que des espaces )
Sortie:
Essayez-le en ligne.
Explication:
la source
Perl, 6x6 (26 non-espaces)
J'ai passé un bon moment à les regarder et j'étais sûr qu'il y aurait une solution Perl plus petite que 7x7 ... un défi très amusant! Cette solution nécessite
-E
.Usage:
Sortie:
la source
CBM BASIC v2.0 (9 × 9)
Sortie:
la source
C (gcc) ,
7x78x8EDIT: La version précédente avait un comportement incorrect.
Essayez-le en ligne!
la source
Gelée , 4 x 4 (12 non-espaces)
Essayez-le en ligne!
Sortie:
C'était très amusant.
Comment ça fonctionne
Partie facile: Jelly ignore les espaces (tant que seules les commandes intégrées à un octet sont utilisées).
Partie dure: Chaque ligne de Jelly est un lien (ou une fonction) distinct, il n’est donc pas très court d’étendre une déclaration constante sur plusieurs lignes. L'utilisation d'un littéral de chaîne est un bon candidat, mais vous ne savez pas comment générer le négatif.
la source