elle même!
La tâche est simple: écrivez un programme ou une fonction affichant le petit sprite Mario inactif, de Super Mario Bros, sur NES, sur fond bleu.
Tout type d’entrée est valable tant qu’il affiche ces 12 * 16 pixels n’importe où sur l’écran / la fenêtre / le navigateur.
(EDITER: l’image affichée peut être agrandie si votre langue ne sait pas faire de pixel art. Vous pouvez également produire de l’art ASCII ou HTML, mais en utilisant les bonnes couleurs.)
Image (zoomé de 400%):
Vous devez utiliser les couleurs suivantes:
- bleu: # 6B8CFF
- rouge: # B13425
- vert / marron: # 6A6B04
- orange: # E39D25
Le programme le plus court (en nombre de caractères) gagne!
Les failles standard s'appliquent (en particulier, aucune connexion réseau n'est autorisée), mais le codage en dur et l'affichage d'un fichier image dans votre programme sont autorisés. (les entrées utilisant cette astuce seront classées séparément)
Et c'est parti!
Classement actuel
Réponse la plus courte en utilisant uniquement le code:
- Mathematica, 141. https://codegolf.stackexchange.com/a/39916/10732 (par Martin Büttner)
- Bash, 158. https://codegolf.stackexchange.com/a/40002/10732 (par hpsMouse)
- ...
Réponse la plus courte en utilisant une sorte d'image codée en dur:
- HTML, 102b. https://codegolf.stackexchange.com/a/39923/10732 (par xem et NiettheDarkAbsol)
- PHP, 131b. https://codegolf.stackexchange.com/a/39926/10732 (par NiettheDarkAbsol)
- ...
Réponses:
HTML / JS,
206158153102102
Astuce utilisée: enregistrez le fichier GIF compressé en tant que fichier HTML et ajoutez <img src = #> à la fin
Merci à cette entrée: https://codegolf.stackexchange.com/a/39926/10732 by @NiettheDarkAbsol
Démo: http://meuziere.free.fr/mario/gif.html
Versions plus anciennes:
153
Astuce utilisée: enregistrez le fichier PNG compressé en tant que fichier HTML et ajoutez <img src = #> à la fin
158
Astuce utilisée: définir l'URI de données ajustée d'un fichier PNG compressé en tant que SRC d'une balise IMG et le tout dans des caractères Unicode.
Exécutez-le dans votre console JS:
206
Déballé (206b):
Démo
Les outils utilisés:
la source
Mathematica,
412292252212163148143141 caractèresCeci utilise la notation caret
^A
pour le caractère de contrôle au point de code1
. Dans Mathematica, je peux réellement intégrer le caractère à la lettre, bien que cela conduise à toutes sortes de laideurs lors de la copie. Quoi qu’il en soit, ce qui précède a deux caractères plus courts que ma version précédente, et j’ai reçu ceux qui utilisent l’utilisation de la base 4 au lieu de la base 5 pour coder les index de la palette de couleurs. Pour le moment, je ne peux pas être dérangé pour corriger l'explication et la capture d'écran ci-dessous, je vous laisse donc ici avec la version originale en base 5 de ma réponse:J'encode les pixels en caractères Unicode (oui pour compter par caractères!).
Voici à quoi cela ressemble dans Mathematica:
Voilà comment cela fonctionne:
Nous définissons d’abord une fonction
f
qui transforme les chaînes Unicode (transmises comme premier argument#
) en listes d’entiers. Nous obtenons d’abord les codes de caractères. Ceux-ci peuvent être interprétés comme des chiffres d'un numéro de base 65536. Et ensuite, nous convertissons ce nombre en une autre base, transmise comme second argument#2
.Faisons maintenant cela pour la chaîne Unicode plus longue.
ToCharacterCode
donne cette liste:Traiter cela comme base 65536:
Et en convertissant en base 5:
Ce sont les indices de couleur des pixels, dans l'ordre bleu, rouge, vert, orange. Nous utilisons ceux-ci pour indexer dans cette liste de nombres, qui est la palette de couleurs.
Maintenant pour la palette de couleurs. Ça c'est
"넴╫賿橫ӣ鴥"
. Nous utilisons les indices ci-dessus pour sélectionner la chaîne correcte. Ensuite, nous appliquons à nouveau notre fonction, mais en utilisant la base 256, ce qui donne une liste de 12 entiers:Nous utilisons l'
;;
indexation de plage pour extraire la tranche appropriée pour la couleur actuelle.Enfin, nous utilisons simplement
Partition
pour scinder cela en lignes12
et l’alimenterImage
. Voilà!Edit: Avec l’emballage Unicode, le RLE n’en valait plus la peine. En le supprimant, vous enregistrez 50 caractères.
Edit: Bien sûr, sans RLE, il n’est pas nécessaire d’aller en base 16.
Edit: Et pendant que nous y sommes, pourquoi ne pas emballer également la palette de couleurs au format Unicode? (Je suis persuadé que je peux économiser un peu plus en transformant la palette de couleurs entière en une seule chaîne et en l'utilisant
Partition
également. J'essaierai cela plus tard.)Edit: Oui, cela a supprimé 5 octets supplémentaires.
la source
Java:
398377Dessine simplement le sprite en décompressant un int pour chaque colonne. Montré dans un programme complet:
Capture d'écran obligatoire:
la source
import java.awt.*
.Code machine x86, 102 octets
Comment cela fonctionne: L'image est stockée en tant qu'image 2 bits à l'aide d'une palette. Chaque ligne de l'image est stockée sous forme de 3 octets, suivis d'un octet de la palette de couleurs. Cela permet aux données d'être chargées en tant que DWORD unique. Les douze pixels sont générés en masquant les 2 bits les plus bas de la valeur, en les écrivant dans la mémoire vidéo, puis en décalant à droite la valeur entière de deux bits. Une fois que les pixels de la ligne ont été générés, l'octet de palette est écrit dans la palette VGA. Lorsque l'image est terminée, le programme entre dans une boucle infinie.
Code d'assemblage pour générer le binaire:
Bande-annonce codée
Exemple de sortie:
la source
GIF - 93 octets
Le codage en dur de l'image est apparemment correct maintenant, alors ... oui? :RÉ
Comme on le voit dans Notepad ++
En PHP - 131 octets
la source
Bash + ImageMagick:
350331321 caractères(Palette volée sans vergogne de la réponse de Martin Büttner .)
Exemple de sortie:
Pour inspecter ajouter facilement
-scale 120
auxconvert
paramètres de » pour obtenir une version réduite 10x:la source
s/185 191 127 185 254 254/1{85,91,27,85} 254{,}/
;s/do/{/
;s/done/}/
{
..}
. Merci, @grawity.Octo / XO-Chip , 70 octets
Octo est un langage d'assemblage de haut niveau qui est compilé en instructions bytecodées pour la machine virtuelle CHIP-8 . Octo fournit des extensions personnalisées appelées "XO-Chip" au bytecode de base de CHIP-8, notamment la possibilité de dessiner des bitmaps 4 couleurs via des plans superposés.
Les octets compilés sont les suivants:
Exécutez-le ici dans votre navigateur: http://johnearnest.github.io/Octo/index.html?gist=33aa37d4717a425ccd4f
Il est probablement plus éclairant de voir le langage d'assemblage Octo qui produit ce bytecode:
Le programme principal comprend trois instructions sur deux octets. Définissez le registre d’indexation de la mémoire
i
au début du segment de données, sélectionnez le plan de dessin 3 (3 est un masque de bits; cela indique que vous souhaitez dessiner en mode 4 couleurs avec les deux plans bitmap), puis dessinez un sprite à une position x et y donnée par registrev0
(initialisé à zéro). Le 0 final indique la taille de l'image-objet qui, dans les jeux d'instructions SuperChip et XO-Chip, dessine une image-objet 16x16. En mode 4 couleurs, un bitmap pour le premier plan est suivi immédiatement par un bitmap pour le second plan.Pour voir comment les avions fonctionnent, considérons ce programme modifié qui fait défiler un avion à droite après avoir dessiné Mario:
Si vous aimez cela, vous aimerez peut-être une de mes autres solutions écrites avec Octo. Il y a en fait un jeu vidéo en cours pour le mois d'octobre basé sur cet outil.
la source
Groovy
417386Amusant, mais avec un nombre de personnages terrible. GroovyFX nécessaire
ungolfed:
la source
grep()
au lieu detoList()
HTML / JS,
427408264256239226 caractèresObfuscatweet,
271270264256239226 caractèresObfuscatweet a réussi à réduire ce nombre à <250: D
Le code ci-dessous est ce en quoi cela consiste.
Astuce utilisée: image convertie en base4 Chaîne de carreaux de couleur, convertie en chaîne hexadécimale. L'index de la base 4 indique la couleur (0 = bleu, 1 = ROUGE, etc.) Le CSS avec un en-ligne p est utilisé car les div ont besoin de contenu pour se développer (p est également plus court). Comme CSS doit commencer par une lettre, la lettre A est ajoutée avant les balises CSS.
Le rembourrage du CSS donne des pixels. Rien de tout cela n'utilise des caractères Unicode, avec lesquels je ne suis pas très familier, même si, dans ce cas, il passerait probablement au-dessous de 300. L'avantage relatif de l'utilisation du remplissage est que vous pouvez, comme dans ce cas, agrandir l'image à la taille souhaitée pour chaque pixel. J'ai utilisé 9 pixels, mais si vous dépensez un caractère supplémentaire, vous pouvez obtenir jusqu'à 99 pixels par pixel représenté.
CSS,
127119118114100130 caractèresPasser de
p
àrp
supprime le besoin dedisplay:inline
, coûte +1 caractère, -15! les caractères!Suppression de toutes les couleurs et mise dans un tableau dans JS -87 caractères. Puis je viens de supprimer tous les css
JS,
300289280275329325 caractèresJ'ai essayé de couper autant que possible de cette plaine JS en traitant une chaîne hexagonale, mais étant donné que c'est mon premier essai, voici à quel point je n'ai utilisé que ce que je sais. L'écriture HTML a été raccourcie par une fonction qui ajoute des balises et les classes utilisent la valeur de base 4 pour déterminer la couleur à afficher.
Utilisation de raccourcissements supplémentaires, remplacement de charAt par des crochets [], suppression de la classe A0 et définition du bleu en tant que couleur par défaut pour p, enregistrement de 10 caractères supplémentaires. Le coût supplémentaire lié à l'utilisation des
rp
balises est compensé par une énorme perte de CSS.Décalage supplémentaire de la suppression du pad de boucle while pour ajouter simplement '000' pour le cas d'utilisation et en découper -12.
Ajout de JS supplémentaire pour les couleurs, puis mettre le rembourrage dedans. Remarqué un bug avec le remplissage qui nécessite 2 caractères supplémentaires à corriger. Compacté un tas de boucles
Fichier HTML,
430429419399366342 caractèresDémo
la source
MATLAB,
194193 octetsLe code:
Et la sortie:
Fondamentalement, j'ai converti l'image de Mario afin que chaque pixel soit un nombre de 2 bits. J'ai ensuite encodé cela en base 32 qui est la chaîne montrée dans le code. Cette chaîne est tout d’abord remodelée à 5 x 16 (chaque rangée (12px) de nombres à 2 bits a été codée en base 32), puis reconvertie en base 10. Le résultat est à nouveau converti, cette fois en base 4, donnant un tableau 12x16 de 2 nombres de bits. Ces nombres sont tracés en utilisant
imagesc()
. Ensuite, les couleurs sont affectées à l'aidecolormap()
d'une carte de couleurs personnalisée des valeurs hexadécimales requises.De manière amusante, un tiers du nombre d'octets utilisés sert simplement à ce que MATLAB définisse les couleurs correctes une fois tracées. Le code de couleur est presque le même nombre d'octets que la chaîne base32 entière !.
Sans corriger la couleur (supprimer l'
colormap()
appel), il s'agit de 135 octets. Voici la sortie de la palette de couleurs par défaut sur MATLAB R2013a:la source
JavaScript /
CSS/ HTML446430407353328316J'ai joué au golf autant que j'ai pu et je me suis retrouvé avec du HTML / JS sale, mais peu importe ... ça marche.
Edit : C'est ça ... J'ai fini.
Edit Sérieusement fait cette fois.
JavaScript
JSFiddle
la source
*{line-height:1}
serait utile.<div></div>
est plus court quedocument.createElement('div')
. Et JSFiddle n'aime pasdocument.write
i%12?"":"<br>"
.Matlab -
449/332305 octetscompression partielle + Utilisation de la symétrie inférieure de l'image:
- Version partiellement compressée (332 octets):
Version entièrement décompressée (449 octets):
Sortie dans les deux cas (agrandie à l'écran évidemment, le vrai est 12x16pix):
la source
C, 4999 octets
Cela ne peut absolument pas rivaliser avec certaines des réponses ici, mais je pensais donner une réponse rapide à un C. Le code est une seule longue ligne, donc voici un lien pastebin. Si vous préférez, voici un encodage base64 du code gzippé:
H4sICAzFGFYCA21hcmlvLmMA3Zc9DsIwDIXv0qndUqchkXwUurAgdYiFEEyIu4NYaZBI7PzNT3Lsz4mf408bjdPjct3odh6HVeujdgg4K4vzohCM8esdjHOpkrVoALUtIrBX8y1R04DKNCGZmTp85CVdAHifYuxO3mElIlju6xaRICOgCo4pD64PoiTzHnkZcHYnRhAYcEEpFznxB1mXP4TdS/KeVGYPZbmVaQHlnRVZFi65OkhoGodq+RHrby4xsTj8i6RmapXrPvfa0Q8ZWZY1/UPbSiC7Z2bYA7r0zla57Xmo8sOEzxdNYIXFhxMAAA==
Notable en ce qu'il ne nécessite aucune bibliothèque externe à exécuter.
Requiert xterm, Konsole ou GNOME, car il utilise l’extension RVB des codes d’échappement de couleur ANSI pour produire les couleurs correctes (l’ANSI ne définit pas l’orange). Pour des raisons évidentes, ideone ne fonctionnera pas. Il peut être exécuté sous Windows sous Cygwin, qui utilise xterm (en fait, c'est comme ça que je l'ai testé). MSYS pourrait fonctionner; Je ne suis pas sûr.
Sortie sur ma machine (xterm):
la source
Excel VBA,
310307295 octetsAnonymous VBE Immediates fonction Window qui sort un Mario à l’objet Activesheet au niveau des cellules
A1:L16
Aide d'
Sub
une routineVersion non-golfée
-3 octets pour supprimer les espaces -12 octets pour utiliser
[...]
notation surRange(...)
notation; passage des couleurs hexagonales aux couleurs intSortie
la source
Bash 346
pure bash avec VT100 comme des séquences d'échappement (désolé, pas d'orange dans cette palette)
la source
Pyth, 83 octets
Avertissement: Ce n'est pas un candidat gagnant, car certaines fonctionnalités linguistiques ont été créées après la publication de la question.
Voici un vidage hexadécimal:
Vous pouvez également télécharger le programme ici et l’exécuter avec
Cela crée un fichier
o.png
:Explication:
Il n'y a que 4 couleurs différentes, donc je n'ai besoin que de 2 bits pour enregistrer la couleur de chaque pixel.
la source
Traitement 2 - 359 caractères
J'ai vu ce défi et j'ai immédiatement pensé à la fonction pixel [] de Processing. J'espérais que ce serait plus court mais je suis quand même assez satisfait du résultat vu que c'est ma première tentative de code golf.
ungolfed:
vous pouvez télécharger le traitement ici
la source
Javascript 515
Je viens juste de le faire fonctionner, je dois encore y aller et jouer au golf
la source
div
s qui composent les lignes par une balise intégrée par défaut. Je ne l'ai pas testé, mais utilisera
devrait marcher. Vous pouvez également utiliserbackground
au lieu debackground-color
.Perl - Ungolfed 927
Je vais devoir jouer au golf plus tard. Première fois essayer
Image::Magick
.Je suis sûr que nous en avons beaucoup, mais voici le mien:
la source
Bash imprimable:
179158 octetsInspiré par la réponse de user2485710 .
Vous devez régler votre terminal pour faire correspondre les couleurs exactement.
la source
-D
pour le décodage et-d
pour le débogage .Tcl 298
C'est une image de 2 bits par pixel en base 64. Les pixels sont mappés sur les codes d'échappement ansi.
la source
JavaScript - 256 caractères (161 obfusc-a-tweeted)
Méthode:
Pour déterminer l'ordre optimal du cycle de couleur, j'ai exécuté l'algorithme de compression en fonction des données brutes pour chacune des 24 permutations de [R, V, B, O] et j'ai sélectionné celui qui donnait la sortie la plus courte (126 était la meilleure, la moins optimale environ 150 environ)
ETA a découvert cela seulement après avoir lu les autres réponses en utilisant obfusca-tweet ...
Autres idées. - Essayez la plage de données 3 bits 0-6, les rares 7,8,9 gagnent 4 supplémentaires chacun: 60000N. - vérifiez les permutations du cycle de couleur dans toutes les directions et à des vitesses autres qu'horizontalement, pixel par pixel. - essayez plusieurs passes de rendu afin que les couleurs puissent être superposées.
la source
Javascript,
253240238236Obfuscatweet ed source -
253240238236Non obscurci -
395370365361Merci à @compass pour les
<p>
astuces de balises et à @xem pour 2 (5) caractères.Démo
Il convertit les données de la base 36 et les convertit en base 4.
la source
padding:9
quoi que ce soit sans unité après. Vous pouvez également utiliser un élément d'une seule lettre commea
ouq
qui est implicitement en ligne, au lieu dep
.document.write
de variable (nous devrions utiliserdocument.write.bind(document)
), le mieux est d’affecterdocument
une variable.JavaScript ES6 (HTML + CSS), 199
30731953630Utiliser Obfusc-a-tweet :
Cela affiche l'image-objet sans utiliser d'images ni plusieurs éléments; il utilise simplement la
box-shadow
propriété CSS pour créer chaque pixel. Essayez-le sur http://jsbin.com/pozohiyezo/ . Cette version non obscurcie contient 307 caractères :Ceci est la version originale, HTML vanille. Voyez-le en action sur http://jsfiddle.net/gfeLn1ey/1/ .
la source
Javascript,
256 ou 245252 ou 241256
Il est triste de remplacer 256, mais 245 est possible si vous utilisez des caractères non imprimables:
Il y a un problème avec la solution d'envoi avec des caractères non imprimables. L'argument de
btoa
doit être le résultat deatob("ij6n56kcraqlaqasasjaqbsasibtdlstlb2cmc2b2cid5dra2q3q2au7u55rj4j4kclcidld")
avec 1 symbole de longueur ajouté pour échapper à la barre oblique inversée.Raccourcissez les deux solutions de 4 symboles: nous n’avons pas besoin de nouvelles pour la création de tableaux.
252
241
Aucune échappement n'est nécessaire dans cette version. L'
btoa
argument de est le résultat deatob("k6n56kcraqlaqasasjaqbsasibtdlstlb2cmc2b2cid5dra2q3q2au7u55rj4j4kclbaidld")
la source
Perl,
266260257249245 octetsUtilise une approche similaire à la solution bash de user2485710 pour écrire une sortie de style VT100. Enlève le N explicite de nouvelle ligne en insérant une nouvelle ligne tous les 12 "vt100 pixels", 12 * 7 = 84.
la source
SmileBASIC,
147136 caractèresSortie (recadrée):
J'ai remplacé tous les caractères dans les chaînes de données par
x
's, voici les codes de caractères (en UCS-2):P$
(Palette):FF6B,8CFF,FFB1,3425,FF6A,6B04,FFE3,D925
Données d'image:
0000,83F8,0A80,A3FA,8BE4,A5EA,BEA5,A55A,7EE5,0575,BFF5,0156,BFF5,0156,BBA5,0575,3AF4,A55A,3BC4,A5EA,0BC4,A3FA,0300,83F8
La palette est stockée dans une chaîne, chaque couleur (32 bits) est stockée dans deux caractères (16 bits chacun). Les données d'image (2 bits par pixel) sont stockées dans une autre chaîne (8 pixels par caractère).
Heureusement, le défi est noté en caractères, car ce fichier est considérablement plus volumineux s'il est enregistré en UTF-8.
la source
05AB1E , 87 octets (non concurrents)
Essayez-le en ligne!
Les sorties:
Parce que 05AB1E ne peut pas faire de couleurs, ni de graphiques de toutes sortes ... Si cela n’est pas acceptable, je le supprime.
la source
Bash + 05AB1E
Sinclair BASIC - 573 octets
OK, le spectre ne peut donc pas afficher les couleurs RVB spécifiées. Vous avez donc utilisé le plus près possible.
La chaîne est la couleur (1 = bleu, 2 = rouge, etc.) suivie d'une lettre pour représenter le nombre de répétitions de ce bloc (en prenant la valeur ASCII moins 96 pour devenir 1,2,3, etc.). Un nombre sans lettre après ne dessine qu'un bloc.
"\::"
La ligne 60 indique comment entrer des graphiques dans un éditeur de texte avant de passer à un fichier TAP à charger dans l’émulateur Fuse. (Affiche sous forme de bloc graphique à l’écran).Chaque mot clé correspond à un octet dans Sinclair BASIC et inclut un nombre à partir d’une commande PEEK après sa génération.
la source
Perl -
399171 octetsEcrit le fichier gif sur stdout.
la source