J'espère que cette image vous semble familière.
C'est l'un des fantômes de Pacman dans son état "vulnérable" , après que Pacman a mangé une pillule de pouvoir.
Le défi
Imaginez notre fantôme dans un petit cadre, en utilisant l'art ASCII. À l’échelle normale (pour en savoir plus sur cela plus tard), chaque carré de l’image ci-dessus doit correspondre à un caractère et le cadre doit comporter une séparation d’un caractère vers le haut et le bas et une séparation de deux caractères à gauche et à droite du fantôme. :
####################
# #
# #### #
# ######## #
# ########## #
# ############ #
# ############ #
# ### ## ### #
# #### ## #### #
# ############## #
# ############## #
# ## ## ## ## #
# # ## ## ## # #
# ############## #
# ## ### ### ## #
# # ## ## # #
# #
####################
Mais cela ne semble pas très joli. #
peut ne pas être le meilleur choix pour les pixels actifs. De plus, les cellules de personnage ne sont pas carrées, ce qui donne à notre ami un air plus fantomatique qu'il ne l'est déjà.
Donc, pour plus de flexibilité, l’image changera en fonction de trois paramètres d’entrée:
- Caractère à utiliser pour les pixels actifs;
- Facteur d'échelle horizontale;
- Facteur d'échelle verticale.
Par exemple, avec %
, 4
, 2
le ouput serait la meilleure image à la recherche
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%% %%%%
%%%% %%%%
%%%% %%%%%%%%%%%%%%%% %%%%
%%%% %%%%%%%%%%%%%%%% %%%%
%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%
%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%
%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%
%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%
%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%
%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%
%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%
%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%
%%%% %%%%%%%%%%%% %%%%%%%% %%%%%%%%%%%% %%%%
%%%% %%%%%%%%%%%% %%%%%%%% %%%%%%%%%%%% %%%%
%%%% %%%%%%%%%%%%%%%% %%%%%%%% %%%%%%%%%%%%%%%% %%%%
%%%% %%%%%%%%%%%%%%%% %%%%%%%% %%%%%%%%%%%%%%%% %%%%
%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%
%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%
%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%
%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%
%%%% %%%%%%%% %%%%%%%% %%%%%%%% %%%%%%%% %%%%
%%%% %%%%%%%% %%%%%%%% %%%%%%%% %%%%%%%% %%%%
%%%% %%%% %%%%%%%% %%%%%%%% %%%%%%%% %%%% %%%%
%%%% %%%% %%%%%%%% %%%%%%%% %%%%%%%% %%%% %%%%
%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%
%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%
%%%% %%%%%%%% %%%%%%%%%%%% %%%%%%%%%%%% %%%%%%%% %%%%
%%%% %%%%%%%% %%%%%%%%%%%% %%%%%%%%%%%% %%%%%%%% %%%%
%%%% %%%% %%%%%%%% %%%%%%%% %%%% %%%%
%%%% %%%% %%%%%%%% %%%%%%%% %%%% %%%%
%%%% %%%%
%%%% %%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Règles
Toutes les tâches intégrées sont autorisées.
Les entrées sont prises dans n'importe quel format et dans n'importe quel ordre. La première entrée ci-dessus (caractère pour les pixels actifs) est un caractère imprimable ASCII (codes 32 à 126).
L'espace de fin après chaque ligne ou les nouvelles lignes après la dernière ligne sont acceptables.
Code golf, le moins d'octets gagne.
la source
Réponses:
CJam,
535149 octetsNotez que trois des caractères ne sont pas imprimables. Essayez-le en ligne!
Contexte
La moitié droite de la sortie non mise à l'échelle est identique à celle de gauche, il suffit donc de coder l'une d'entre elles. Si nous remplaçons les espaces par des zéros et les non-espaces par des uns, nous obtenons
où chaque ligne peut être interprétée comme un nombre binaire. Cela donne
Le moyen le plus simple de coder ces informations consiste à remplacer chaque entier par le caractère Unicode à ce point de code, mais ils nécessiteraient tous deux codages avec UTF-8.
En XORing les entiers avec 544, nous gardons tous les entiers sauf deux en dessous de 128 et évitons les octets nuls.
Le résultat est
sous forme d'entiers ou
comme une chaîne échappée.
Comment ça marche
la source
Perl,
1131051041009796Ajouté +2 pour
-ap
Suggestions de dev-null save 9 octets Correction du nombre incorrect corrigé tel que remarqué par Dennis
Courir en utilisant
echo "2 4 %" | perl -ap pacman.pl
pacman.pl
:sauf que la chaîne
"\xff\x00\x03\x0f\x1f\x3f\x3f\x39\x79\x7f\x7f\x66\x59\x7f\x6e\x46\x00\xff"
doit être écrite sous forme binaire avec des guillemets simplesL'espace en tant que caractère de remplacement devient la chaîne vide et conduit à des lignes courtes. Mais de toute façon, tout sera vide
la source
Dyalog APL, 64 octets
Cela prend le facteur d'échelle comme argument de gauche et le caractère comme argument de droite, à savoir:
Explication:
⍉(7/2)⊤⎕AV⍳'Äâ\⊥⊥∘)⍞⍞┬#⍞`⍒'
: La moitié gauche du fantôme, sans la frontière. (Il est symétrique.) Chaque caractère a son bit de poids fort afin d’empêcher la sélection de caractères non imprimables⎕AV
, mais seuls les 7 premiers octets sont utilisés.0,⍪⍨0⍪0,0,
: ajoute une bordure de blancs à gauche, en haut et en bas1⍪⍨1⍪1,
: ajouter le cadre à gauche, en haut et en bas,∘⌽⍨
: rejoignez-le avec son miroir vertical1+
: add 1, car les tableaux sont 1-indexés par défaut' '⍵[
...]
: utilisez cette matrice comme index dans la chaîne' '⍵
pour que chaque 0 soit associé à un blanc et que chaque 1 soit associé⍵
.⍺,⊂
: joindre la matrice et la joindre aux facteurs d'échelle/
: pli droit avec la fonction suivante:/∘⍉
: transposer et redimensionner horizontalementla source
MATL , 71 octets
Essayez-le en ligne!
Explication
L’image étant symétrique horizontalement, seule la moitié gauche doit être codée. Chaque ligne de 10 pixels est codée binaire comme un nombre compris entre 0 et 1023. Les pixels actifs sont codés comme 0 plutôt que 1, la première ligne est donc le numéro 0 plutôt que 1023.
Comme les lignes consécutives ne diffèrent que de quelques pixels, les nombres sont ensuite codés de manière différentielle. Ainsi, chaque ligne sera décodée en tant que somme cumulée de tous les nombres jusqu’à cette ligne, suivie de la conversion en binaire.
Les nombres nécessaires sont alors
0 est introduit dans MATL à l'aide de la
O
fonction, ce qui évite un séparateur avec des nombres voisins. De plus, les signes négatifs n'impliquent pas d'octets supplémentaires car ils servent de séparateurs.Une fois le tableau créé, il est cumulé, décodé en binaire et mis en miroir horizontalement. Le tableau 2D résultant est utilisé pour indexer une chaîne de deux caractères afin de produire le résultat. Cette chaîne est de la forme
'% '
, où'%'
est un caractère en entrée.Comme noté par @Conor, le code fonctionne également avec deux caractères en entrée. Dans ce cas, la dernière chaîne indexée sera de la forme
'%_ '
où l'entrée est une chaîne à deux caractères'%_'
. L'espace sera simplement ignoré, car le tableau d'indexation ne traite que les deux premiers caractères.la source
C (gcc) ,
199197 octets-2 octets grâce à @JonathanFrech
Essayez-le en ligne!
188 octets (non imprimables)
Gracieuseté de @JonathanFrech.
Essayez-le en ligne!
Rien de spectaculaire ne se passe. Comme d'autres remarqués, le fantôme est très symétrique. L'image elle-même a une largeur de 20 unités, mais à l'exception des lignes du haut et du bas, les trois colonnes les plus à droite sont identiques. Cela nous permet de stocker la moitié de l'image sous forme de caractères au lieu d'utiliser des entiers:
La chaîne résultante a été inversée afin de gagner quelques octets lorsqu’une boucle for décroissante (résolvant également un problème gênant lié aux échappements hexadécimaux). D'autres boucles peuvent être retournées sans problème grâce à la symétrie.
Chaque personnage est décalé à gauche et se voit attribuer une bordure (avec un soin particulier sur les première et dernière rangées). Ensuite, il suffit de sortir la chaîne correctement mise à l'échelle.
Toutes les boucles for me font penser qu'il existe un meilleur moyen.
la source
\xff
ne peut pas être remplacé parÿ
( TIO )?Sérieusement, 116 octets
Cette nouvelle ligne est importante. Hexdump:
Même stratégie que celle de Dennis dans CJam , mais les valeurs sont codées en hexa, plutôt qu'en XOR avec 544, et la manipulation des chaînes est beaucoup plus difficile dans Seriously.
Essayez-le en ligne!
la source
BBC BASIC,
239236232214 octetsL'appel
PROCM(1,1,35)
produit le fantôme composé de # symboles. Les arguments de PROCM sont les suivants: échelle horizontale, échelle verticale, valeur ASCII du caractère.Ce programme fonctionnera à la fois pour Brandy Basic et BASIC 2 sur un modèle B. original.
la source
Lot,
740722720 octetsEdit: Sauvegardé
1820 octets en supprimant les espaces inutiles.la source
Stax , 45 octets
Exécuter et déboguer
Explication:
la source
JavaScript (ES6), 167 octets
Basé sur la réponse de @ Dennis. J'imagine que vous pourriez supprimer un octet en utilisant un FF littéral au lieu de
\f
, mais je doute que je puisse en coller un ici. En essayant cela, vous voudrez peut-être aussi utiliser à la\u01CA
place duNJ
personnage à la place.Malheureusement, ajouter un espace à l'argument de caractère coûte 6 octets entiers.
la source
Python 2,
838828618 octetsSauvegardé 210 octets en utilisant une chaîne au lieu d'un tableau, merci à Dennis pour cette suggestion, je sais que je peux faire encore mieux, mais pour l'instant c'est une bonne amélioration.
C'est le mieux que je puisse faire, je ne suis pas très bon avec les graphiques en ligne de commande.J'ai pris le petit fantôme comme base.
J'utilise l'asci 219 par défaut, car avec ce personnage, le fantôme a l'air génial !!!
Golfé
Essayez-le sur repl.it
Ungolfed
Tester
la source
Python 2, 244 octets
la source
Python 2, 169 octets
Essayez-le en ligne!
Explication:
Comme dans la réponse de Dennis , chaque caractère de cette chaîne représente la représentation binaire d'une ligne de la moitié gauche de "l'image", XOR 544.
Pour chaque caractère de la chaîne, procédez comme suit:
Transformez le caractère en sa représentation entière, puis effectuez un XOR binaire avec 544. Puis transformez cet entier en une chaîne de caractères de sa représentation binaire, telle que '0xb1111111111'.
Pour chaque caractère de la piqûre, en partant de la position 2 (qui saute le 0b au début), procédez comme suit:
Si le caractère == "1", remplacez-le par le caractère fourni, sinon remplacez-le par un espace. Copiez ensuite ce caractère x fois. (x = 0 donnera une chaîne vide.)
Concaténez toutes les chaînes en une seule chaîne longue, séparée par une chaîne vide "".
créez une chaîne de b + l'inverse de b, puis créez un tableau contenant y instances de cette chaîne (y = 0 produira une liste vide []), puis ajoutera cette liste à la liste z.
Enfin, imprimez sur chacune des chaînes produites, en les séparant par des sauts de ligne.
la source