Dans cette police pixélisée de lettres majuscules de l'alphabet, tous les caractères font 5 unités de large et 5 de haut.
███ ████ ███ ████ █████ █████ ████ █ █ █████ █ █ █ █ █ █
█ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ ██ ██
█████ ████ █ █ █ ████ ████ █ ██ █████ █ █ ███ █ █ █ █
█ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █
█ █ ████ ███ ████ █████ █ ████ █ █ █████ ███ █ █ █████ █ █
█ █ ███ ████ ███ ████ ████ █████ █ █ █ █ █ █ █ █ █ █ █████
██ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █
█ █ █ █ █ ████ █ █ ████ ███ █ █ █ █ █ █ █ █ █ █ █
█ ██ █ █ █ █ ██ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █
█ █ ███ █ ████ █ █ ████ █ ███ █ █ █ █ █ █ █████
Il y a aussi 1 unité d'espace entre les lettres et entre les lignes, comme on peut le voir. Ainsi, chaque lettre peut occuper jusqu'à 6 × 6 unités d'espace.
Supposons qu'au lieu d'utiliser le caractère de bloc complet ( █
) pour former directement les formes des lettres, nous voulions utiliser d' autres lettres dans la même police . Cela implique de multiplier par 6 les dimensions du texte afin que les lettres constituées de blocs entiers puissent être utilisées comme remplacements de bloc complet dans le texte plus grand.
Si cela n'a pas de sens, nous espérons que cet exemple le fera. Voici un A fait de B utilisant la police pixelisée:
████ ████ ████
█ █ █ █ █ █
████ ████ ████
█ █ █ █ █ █
████ ████ ████
████ ████
█ █ █ █
████ ████
█ █ █ █
████ ████
████ ████ ████ ████ ████
█ █ █ █ █ █ █ █ █ █
████ ████ ████ ████ ████
█ █ █ █ █ █ █ █ █ █
████ ████ ████ ████ ████
████ ████
█ █ █ █
████ ████
█ █ █ █
████ ████
████ ████
█ █ █ █
████ ████
█ █ █ █
████ ████
Les B sont constitués de blocs pleins et les A sont constitués de B. Notez que les B ont toujours une unité entre eux horizontalement et verticalement.
Nous pouvons étendre cette idée en utilisant des mots au lieu de simples lettres. Voici "L'EAU" en "FEU":
█████ █████ ████ █████ █████ █████ ████ █████ █████ █████ ████ █████ █████ █████ ████ █████ █████ █████ ████
█ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █
████ █ ████ ████ ████ █ ████ ████ ████ █ ████ ████ ████ █ ████ ████ ████ █ ████
█ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █
█ █████ █ █ █████ █ █████ █ █ █████ █ █████ █ █ █████ █ █████ █ █ █████ █ █████ █ █
█████ █████ ████ █████ █████ █████ ████ █████
█ █ █ █ █ █ █ █ █ █
████ █ ████ ████ ████ █ ████ ████
█ █ █ █ █ █ █ █ █ █
█ █████ █ █ █████ █ █████ █ █ █████
█████ █████ ████ █████ █████ █████ ████ █████ █████ █████ ████ █████ █████ █████ ████ █████ █████
█ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █
████ █ ████ ████ ████ █ ████ ████ ████ █ ████ ████ ████ █ ████ ████ ████
█ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █
█ █████ █ █ █████ █ █████ █ █ █████ █ █████ █ █ █████ █ █████ █ █ █████ █
█████ █████ ████ █████ █████ █████ ████ █████ █████
█ █ █ █ █ █ █ █ █ █ █
████ █ ████ ████ ████ █ ████ ████ ████
█ █ █ █ █ █ █ █ █ █ █
█ █████ █ █ █████ █ █████ █ █ █████ █
█████ █████ ████ █████ █████ █████ ████ █████ █████ █████ ████ █████
█ █ █ █ █ █ █ █ █ █ █ █ █ █ █
████ █ ████ ████ ████ █ ████ ████ ████ █ ████ ████
█ █ █ █ █ █ █ █ █ █ █ █ █ █ █
█ █████ █ █ █████ █ █████ █ █ █████ █ █████ █ █ █████
Remarquez comment "FIRE" apparaît à plusieurs reprises sur chaque ligne, et toujours dans l'ordre, quel que soit l'espace entre les lettres. Trois des cas les plus à droite de "FEU" ont été coupés tôt en raison de la forme des lettres de "EAU".
Cette idée peut être encore développée, en utilisant ces mots faits de mots pour faire des mots faits de mots faits de mots , ou même des mots faits de mots faits de mots faits de mots . Il n'y a pas de limite théoriquement.
Un autre exemple mettrait ce message au-dessus de la limite de 30 000 caractères, mais vous pouvez voir ce que l'on entend par «mots faits de mots faits de mots» en exécutant cet astucieux extrait de pile. Laissez simplement les paramètres à leurs valeurs par défaut et appuyez sur "Go!". Vous devriez voir le mot "DOG" fait du mot "CAT" fait du mot "MOUSE".
Taper toute liste de mots séparés par des espaces ne contenant que des majuscules dans la zone de texte produira le premier mot fait du deuxième mot fait du troisième, fait du quatrième, fait de ... etc.
AVERTISSEMENT: la saisie de plus de 4 ou même de 3 mots produira BEAUCOUP de texte et prendra du temps. Cela peut planter votre navigateur / ordinateur / voiture.
Défi
Le but de ce défi est de refléter ce que fait l'extrait de pile avec le moins de caractères.
Vous devez écrire un programme qui accepte une chaîne de mots séparés par des espaces ne contenant que des lettres majuscules, et génère le premier mot "composé de" le deuxième "composé de" le troisième et ainsi de suite, en utilisant la police pixellisée indiquée ci-dessus.
La case à cocher "ASCII ordinaire" et les fonctionnalités de taille de police de l'extrait n'ont pas besoin d'être prises en charge dans votre programme. Refléter la transformation de listes de mots en mots constitués de mots est le point principal et la seule exigence.
Détails
L'entrée doit provenir de stdin, de la ligne de commande, ou vous pouvez simplement écrire une fonction qui prend une chaîne.
Vous pouvez supposer que l'entrée est toujours valide, c'est-à-dire une chaîne de mots en lettres majuscules, séparés par exactement un espace, sans espaces de début ou de fin.
La sortie doit aller vers stdout (ou une alternative similaire) ou vers un fichier avec le nom de votre choix.
La sortie doit consister entièrement en caractères vides espace , personnages espace plein , et les nouvelles lignes.
- Les caractères vides / plein espace doivent être respectivement espace et bloc plein (
,
█
), ou point et X (.
,X
) respectivement.
- Les caractères vides / plein espace doivent être respectivement espace et bloc plein (
La sortie ne doit contenir aucune colonne de début contenant uniquement des caractères d'espace vide , bien que toute combinaison de caractères d'espace vide de fin sur toutes les lignes soit autorisée.
Donc c'est permis:
X...X.XXXXX.. X...X.X X.X.X.XXXX.... X.X.X.X.. .X.X..XXXXX..
Mais ce n'est pas:
.X...X.XXXXX.. .X...X.X .X.X.X.XXXX.... .X.X.X.X.. ..X.X..XXXXX..
Il ne doit pas y avoir de lignes de début ou de fin contenant uniquement des caractères d'espace vide . Une seule nouvelle ligne de fin est éventuellement autorisée.
Voici une version plus conviviale de la police:
.XXX.
X...X
XXXXX
X...X
X...X
XXXX.
X...X
XXXX.
X...X
XXXX.
.XXX.
X...X
X....
X...X
.XXX.
XXXX.
X...X
X...X
X...X
XXXX.
XXXXX
X....
XXXX.
X....
XXXXX
XXXXX
X....
XXXX.
X....
X....
.XXXX
X....
X..XX
X...X
.XXXX
X...X
X...X
XXXXX
X...X
X...X
XXXXX
..X..
..X..
..X..
XXXXX
....X
....X
....X
X...X
.XXX.
X...X
X..X.
XXX..
X..X.
X...X
X....
X....
X....
X....
XXXXX
X...X
XX.XX
X.X.X
X...X
X...X
X...X
XX..X
X.X.X
X..XX
X...X
.XXX.
X...X
X...X
X...X
.XXX.
XXXX.
X...X
XXXX.
X....
X....
.XXX.
X...X
X...X
X..XX
.XXXX
XXXX.
X...X
XXXX.
X..X.
X...X
.XXXX
X....
.XXX.
....X
XXXX.
XXXXX
..X..
..X..
..X..
..X..
X...X
X...X
X...X
X...X
.XXX.
X...X
X...X
.X.X.
.X.X.
..X..
X...X
X...X
X.X.X
X.X.X
.X.X.
X...X
.X.X.
..X..
.X.X.
X...X
X...X
.X.X.
..X..
..X..
..X..
XXXXX
...X.
..X..
.X...
XXXXX
Notation
Il s'agit de code-golf, donc la soumission la plus courte en octets l' emporte. Toute instance d'un bloc complet ( █
) peut être comptée comme 1 octet au lieu de 3, donc les soumissions qui utilisent X
n'ont aucun avantage.
la source
javascript:
Dans la barre d'URL et de le coller) pour faire de l'art ASCII ici beaucoup, beaucoup plus facile à lire:$('#question pre').css('line-height',1)
. Résultat: i.stack.imgur.com/XmB8C.png$('#question pre, .answer pre').css('line-height',1)
Réponses:
CJam,
171 165 162161 161 octetsJe traite
█
comme 1 octet. Reste que tous les caractères sont bien dans la plage ASCII, donc les traiter comme 1 octet aussi.Vous pouvez utiliser cette boîte à pâte pour le code exact
Exemple de sortie pour entrée:
Comment ça fonctionne
Tout d'abord
est simplement le motif de chacun des 27 caractères (
A-Z
et espace) qui est composé de0
(auxX
positions) et1
(aux.
positions). Après décodage, cela donne un tableau de 27 éléments de tableaux 2D de 5 lignes et 5 colonnes représentantX
et.
pour chacun des 27 caractères. Appelons ce tableau commeL
.Maintenant, le code restant:
Essayez-le en ligne ici
la source
Python 3, 437 octets
Les formes des caractères sont encodées en ASCII. Chaque octet ASCII correspond à une ligne d'un caractère, avec des bits représentant des blocs unitaires. Ce n'est pas un schéma très efficace, mais il est facile de décompresser dans des masques de bits NumPy pour chaque caractère.
Nous commençons avec un tableau 2D de 1. Il a une colonne pour chaque caractère du premier mot et une seule ligne. Ensuite, pour chaque mot, nous créons un nouveau tableau de 0, six fois plus élevé et six fois plus large que le tableau précédent. Lorsque le tableau précédent avait un 1, la section 6x6 correspondante du nouveau tableau est remplie avec le masque de bits du caractère approprié.
Voici un exemple (avec une police extrêmement petite):
la source
CJam,
181174170 octetsTous ces caractères non ASCII sont toujours dans la plage ASCII étendue, ils peuvent donc tous être codés dans un seul octet. (Sauf pour le
█
, mais celui-ci est traité spécialement selon les spécifications du défi.) Par conséquent, je compte chaque caractère comme un octet.Stack Exchange a probablement modifié certains des caractères non imprimables, vous devrez donc peut-être copier le code à partir de cette boîte à pâte .
Testez-le ici.
Prend l'entrée via STDIN comme une liste de mots séparés par des espaces. Le premier mot est la plus grande échelle. Par exemple:
les rendements
Explication
Tout d'abord, nous stockons une table de recherche pour les formes de lettres dans
L
:La première chaîne juste un nombre compressé. Nous traitons les points de code comme des chiffres de base 257, puis nous convertissons le nombre résultant en binaire.
YYb
est 2 est en base 2, donc ça donne[1 0]
. Nous utilisons la substitution d'élément avec" █"
pour transformer les chiffres en espaces et bloquer les caractères. Enfin, nous avons divisé la chaîne en lignes de 5 caractères, puis en blocs de 5 lignes. Le résultat est stockéL
et jeté de la pile.Maintenant, l'idée générale est de commencer avec une seule ligne
█
de la longueur du mot à plus grande échelle. Et puis pour chaque mot, nous parcourons la grille existante et développons tous les blocs jusqu'au caractère correspondant à la plus petite échelle suivante (tout en insérant des lignes et des colonnes vides pour la séparation). Voici la préparation des entrées:Examinons d'abord la structure extérieure du programme restant. Le bloc suivant
{...}/
est exécuté pour chaque mot et développe chacun des caractères du bloc.Enfin, regardons comment une seule ligne est développée:
Le résultat est imprimé automatiquement à la fin du programme.
la source