Il s'agit d'une variation quine .
introduction
Nous écrivons tous du code court, car des raisons obscures , mais quoi que nous fassions, cela prendra au moins 144 pixels / octet (avec une police de 12 pixels). Mais que se passerait-il si nous encodions notre code en images? Telle est votre tâche aujourd'hui.
Défi
Votre tâche consiste à lire votre propre code source (les quines non appropriés sont autorisés, par exemple en lisant littéralement le fichier source), et à en créer une image, en définissant les composants rouge, vert et bleu d'un pixel en fonction de l'ASCII valeur du caractère.
Exemple:
Nous avons la chaîne "Hello world!"
Hello world!
Convertissons ceci en valeurs ASCII:
72 101 108 108 111 32 119 111 114 108 100 33
Mappez-y les valeurs RVB (si la longueur du code source n'est pas divisible par 3, utilisez 0 comme caractères restants):
__________________________________________________
| R | G | B || R | G | B || R | G | B || R | G | B |
----------------------------------------------------
|72 |101|108||108|111|32 ||119|111|114||108|100|33 |
----------------------------------------------------
Nous créons ensuite l'image avec la plus petite zone. Nous avons 4 ensembles de valeurs RVB, donc la plus petite image sera une image 2 * 2, allant du pixel supérieur gauche vers la droite:
Et nous obtenons cette image terriblement colorée (redimensionnée, donc au moins visible, prouve également à quel point elle peut devenir petite)
Règlement / Informations complémentaires
- Il n'y a pas d'entrée
- La sortie doit être dans un fichier séparé ou dans une fenêtre distincte.
- Pour les caractères multi-octets, divisez le caractère en 2 octets.
- Le code source doit être d'au moins 1 octet
- L'image doit être celle parmi les tailles possibles, qui a le rapport largeur / hauteur le plus proche de 1
- Le nombre de pixels sur l'image doit être exactement ceil (nombre d'octets / 3), aucun pixel supplémentaire ne doit être ajouté
Notation
Il s'agit d'un code-golf , donc la plus petite réponse en octets l'emporte.
la source
height = N
etwidth = 1
? Je pense que vous voulez dire la largeur / hauteur la plus proche de 1.Réponses:
En fait, 12 octets
Essayez-le en ligne!
Ce programme fonctionne également dans Sérieusement.
Ce programme génère une image PPM , ce qui est acceptable par défaut .
Image de sortie (agrandie 50x):
Explication:
la source
MATLAB,
817269 octetsCela crée une fonction anonyme qui peut être collée dans la fenêtre de commande et exécutée à l'aide de
ans()
. Lorsqu'il est exécuté, cela crée une image de 23 pixels (un premier) donc la représentation la plus carrée est un simple tableau de pixels.Explication
Lorsqu'elle est collée dans la fenêtre de commande, la fonction anonyme s'assigne automatiquement à la variable
ans
. Ensuite, dans la fonction anonyme, nous utilisons:qui évalue
char(ans)
dans l'espace de noms de la fenêtre de commande plutôt que dans l'espace de noms local de la fonction anonyme. Il est donc capable de convertir la fonction anonyme elle-même en une représentation sous forme de chaîne.Ensuite, nous avons les opérations suivantes qui sont plus simples:
la source
ans
idée!ans
jusqu'à la fin de la première exécution, ce qui aboutit àans
devenir la fonction elle-même. La deuxième fois, il utilise "son propre" code (enfin, c'est le code d'une fonction anonyme distincte mais identique). Cela étant dit, je ne connais pas MATLAB, donc je peux me tromper.evalin
pour appelerchar(ans)
dans l'espace de travail de base. Leevalin
n'est évalué qu'au moment de l' exécution, donc même s'ilans
n'est pas défini lorsque vous le collez dans la fenêtre de commande, lorsque vous appelezans()
pour exécuter cette fonction anonyme, ilans
est défini et l'evalin
appel à l'intérieur de la fonction anonyme peut y accéder. Vous n'avez donc pas à l'exécuter deux fois. Si je pouvais compter sur le fait qu'il soit exécuté deux fois,evalin('base', 'char(ans)')
serait remplacé par simplementchar(ans)
Javascript (ES6)
324312309 octetsJe suis sûr que cela pourrait être un peu joué au golf:
Nouvelles lignes pour la lisibilité:
Production
la source
f=()=>{
Ici, faites-lef=_=>
, -1 octet, ne l'utilisez pas, le javascript est vaguement tapéJavascript ES6 - 216 octets
Non golfé:
Remarque:
f
renvoie un canevas.Exemple d'exécution (suppose qu'il y a un
<body>
à ajouter):Devrait vider l'image suivante sur la page (agrandie):
la source
PowerShell v4, 64 octets
Il obtient le contenu de son propre nom de fichier, convertit la chaîne en un tableau de caractères, ajoute un en-tête PPM et définit le contenu sur a.ppm en sortie. 64 octets en fait 11x2 pixels:
la source
Node.js, 63 octets
Exporte l'image dans un fichier nommé
P6
qui se trouve dans le PPM format (P6).Voici un rendu PNG (7x3 pixels):
la source
PHP, 226 octets
Golfé
Version non golfée
Entrez ce script dans un fichier nommé 'p.php' et exécutez-le. Vous avez besoin de votre propre méthode d'exécution du script PHP, car elle lit à partir d'un fichier local.
Image de sortie:
la source
Caractères Java 511
La longueur de la solution conduit à une image plus grande, ce qui est cool, car ces images sont vraiment belles.
Notez qu'il existe une nouvelle ligne de fin invisible! Il lit le fichier source, qui doit être "Q.java" et crée une image "Q.png" qui ressemble à ceci:
ou à l'échelle 100x
la source
APL (Dyalog) , 33 octets
Requiert
⎕IO←0
ce qui est par défaut sur de nombreux systèmes. En outre, la mise en forme automatique doit être désactivée pour conserver le programme exactement comme indiqué.Hex B9 BA FD 4E 50 55 54 BB F8 0D 50 0D C2 CD FD 41 56 B2 0D 03 0B 01 FF 0D C2 BB C8 FD 4E 52 0D 16 0D
Unicode 28 2282 2395 4E 50 55 54 2283 29 27 50 27 2C 2355 2395 41 56 2373 27 0D 026B 08 2363 27 2C 2283 233D 2395 4E 52 27 66 27
Crée
P
: P3 11 12555185186253 78 80 85 84187248 13 80 13194205253 65 86178 13 3 11 1255 13194187200253 78 82 13 22 13 quevous enregistrez et déposez ici pour voir:
⎕NR'f'
N ested R ePresentation du programme f⊃⌽
choisissez le dernier (allumé premier de l'élément inversé) (ligne)'␍ɫ␉⍣',
ajouter les quatre caractères (type de fichier, largeur, hauteur, max)⎕AV⍳
trouver des indices correspondants dans la A tomic V ecteur (le jeu de caractères⍕
format comme texte'P',
ajouter une lettre(
…)
Appliquez la fonction tacite suivante:⊂
prendre tout l'argument [et dans un]⎕NPUT
N atif [fichier,] Mettez- le, avec un nom de fichier composé de]⊃
le premier caractère ("P")la source
Python, 81 octets
La sortie est au format PPM.
Voici à quoi ressemble l'image:
Élargis:
la source
q
P6
format, vous n'avez pas besoin de convertir en ordinaux. De plus, pour RVB 8 bits,255
doit être utilisé à la place de256
.q
qu'une seule fois, comme il semble que vous le fassiez, supprimez l'affectation et remplacez-la directement - cela vous fera économiser trois octets.print'P3\n9 3 256 '+' '.join(map(lambda x:str(ord(x)),open(__file__).read()))
. C'est -4 octets, tho!