C'est un peu similaire à cette entrée couverte de poussière, mais j'espère que ma rotation le rendra assez unique. Pas pu trouver quoi que ce soit qui me dissuade de poster ceci mais il y a tout à fait la mer là-bas.
En tous cas! Le défi:
Votre code reçoit une chaîne de caractères; Il le convertit en une version de style ASCII de la même chaîne, mais avec un hic.
Transformation d'entrée
- Les seuls caractères à prendre en charge sont AZ et 0-9
- Les lettres minuscules sont transformées en majuscules
- Tout le reste est supprimé en silence
Dessin de personnages
- Chaque "pixel" de la police agrandie est tiré de la chaîne d'entrée
- Le nième pixel est égal au nième caractère de la chaîne d'entrée. Si n est supérieur à la longueur de la chaîne d'entrée, retournez au début
- Les lettres individuelles sont dessinées de gauche à droite, de haut en bas
- Les lettres suivantes récupèrent leur index de "caractère pixel" d'où la dernière lettre s'est arrêtée (par exemple avec une longueur d'entrée de 10, si la première lettre avait 9 pixels, le premier pixel de la deuxième lettre sera tracé avec le 10ème caractère d'entrée, le second pixel sera dessiné avec le 1er caractère saisi)
- Chaque lettre est dessinée dans une grille 5x5, entièrement rembourrée avec des espaces. Vous pouvez trouver la police que vous devez utiliser pré-rendue pour vous dans cette boîte à pâte ou un peu plus bas dans ce post
- Chaque lettre est dessinée sur la même ligne, donc le nombre total de sauts de ligne dans votre sortie sera de 4
- Chaque lettre est séparée par 2 colonnes d'espaces
La police
000
0 00
0 0 0
00 0
000
111
1
1
1
11111
2222
2
222
2
22222
3333
3
333
3
3333
44
4 4
44444
4
4
55555
5
5555
5
5555
6666
6
6666
6 6
666
77777
7
7
7
7
888
8 8
888
8 8
888
999
9 9
9999
9
9999
AAA
A A
AAAAA
A A
A A
BBBB
B B
BBBB
B B
BBBB
CCCC
C
C
C
CCCC
DDDD
D D
D D
D D
DDDD
EEEEE
E
EEE
E
EEEEE
FFFFF
F
FFF
F
F
GGGG
G
G GG
G G
GGGG
H H
H H
HHHHH
H H
H H
IIIII
I
I
I
IIIII
JJJJJ
J
J
J
JJ
K K
K K
KKK
K K
K K
L
L
L
L
LLLLL
M M
MM MM
M M M
M M
M M
N N
NN N
N N N
N NN
N N
OOO
O O
O O
O O
OOO
PPPP
P P
PPPP
P
P
QQ
Q Q
Q QQ
Q Q
QQ Q
RRRR
R R
RRRR
R R
R R
SSSS
S
SSS
S
SSSS
TTTTT
T
T
T
T
U U
U U
U U
U U
UUU
V V
V V
V V
V V
V
W W
W W
W W W
WW WW
W W
X X
X X
X
X X
X X
Y Y
Y Y
Y
Y
Y
ZZZZZ
Z
Z
Z
ZZZZZ
Oui je sais que les 4 et Q sont moches
Un exemple
Contribution
0123456789
Production
012 567 6789 0123 34 45678 9012 34567 234 567
3 45 8 0 4 5 6 9 3 8 5 6 8 9
6 7 8 9 123 567 78901 0123 4567 9 789 0123
90 1 0 4 8 2 4 8 9 0 0 1 4
234 12345 56789 9012 3 5678 012 1 234 5678
Un autre exemple
Contribution
a3 B'2
Production
A3B B2A3 2A3B 2A3B
2 A B 2 A 2
3B2A3 2A3 3B2A A3B
B 2 B 3 B 2
A 3 2A3B 2A3B A3B2A
Les failles standard sont interdites. Code golf donc aucune coche verte ne sera donnée.
[A-Z\d]
- je ne pense pas que le filtrage des caractères invalides ajoute quoi que ce soit au défi.Réponses:
Python 2 ,
413411373364352345 octets-1 octet merci à Kevin Cruijssen .
-9 octets grâce à Jo King .
-1 octet grâce à Lynn .
La chaîne de données contient la version d'échappement non imprimable ci-dessous.
Essayez-le en ligne!
Comme chaque caractère a 25 pixels, il peut être facilement encodé en 25 bits. Le nombre de base 126
'uM\x04<L\x10x\x14Se#ye\x0f>El4NpD@$\tgh>\x1d\x10\x15I,\x0em]a\x0e\x03B>e\x15,\x0c]\x03?kFL\x01\x0byglxV!\x18\x16\x0c\x0b\x10\x0b%w832wGj%uT{Hr*K,*[P\n6.&ED#T\x0c}^\x1c\x0fD\x17LI&p7\x17f\\d`*\x01l\x1bG\x12!Fac\x05\x08\x0eG\rz?!\x1aA'
code tous les caractères, le0
est codé par les 25 bits les moins significatifs, le1
par les 25 bits suivants et leZ
est codé par les 25 bits les plus significatifs. Un seul caractère est codé dans l'ordre suivant:(
00
est le bit le moins significatif,25
le plus significatif)Les espaces sont codés par un zéro, les non-espaces par un. Exemple :
Non golfé
Essayez-le en ligne!
la source
+' '
devrait être le cas+' '
. Bonne réponse malgré tout, alors +1 de ma part..upper()
quelque part cependant, sinon les lettres intérieures finissent en minuscules>1
.APL (Dyalog Unicode) ,
228225224214 octetsProgramme complet. Demande stdin pour la chaîne. Imprime à la sortie standard. Environ la moitié du code décode simplement l'alphabet codé.
_
…_
Représente la chaîne codée LZ4 de 143 octets entre guillemets:"⊥\u0004pæ€}€\\⊃⌿Æ€â<Å€∧€ÀÆ€Ð┬:Ëcü\u0000≥ðè⊤õ⍨¢∧·èý\u0005þÐÕ\u001EÐ :\u001Eè⌊×ßi[B⊂ɫoãà oéìÐ⍙⊃Ý∣à)≥èB⊃\u001B\u001F⊥ä{⌿⍨ G⍺\u001B⌿Æ\u001F∇x└îR`:└è→⊂\u0000ê∧⍒\u0003ɫqè$$ÛD⊥â∊\u001B\u001Eéu|\u001B@4A|⍪┌nàkááЀ€€€€€€"
Essayez-le en ligne!
_
…_
Chaîne codée LZ4 de 143 octets entre guillemets⎕AV⍳
ɩ ndices de celle de la A tomic V ecteur (le jeu de caractères)¯125+
ajoutez -125 à cela (pour obtenir des entiers 8 bits signés)¯1(219⌶)
Décompression LZ40(220⌶)
désérialiser en un tableau booléen de 36 couches, 5 lignes et 5 colonnes(
…)⌷
Indexez-le en utilisant les indices suivants:⎕A
majuscule A lphabet⎕D,
préfixer les D igitsa←
stockera
(pour un alphabet)(
…)∩
Intersection des éléments suivants et qui (supprime une entrée non valide):⍞
invite pour la saisie de texte depuis stdin (console)1(819⌶)
plier en majuscules (819
ressembleBig
, 1 est pour oui grand par opposition à petit)i←
stocker dansi
(pour i nput)a⍳
ɩ ndices de cela dansa
⊂
entourer (pour indexer avec chacun représentant la coordonnée principale)t←
stocker danst
(pour t ext),
défiler (aplatir)r←
stocker dansr
(pour r avelled)+/
somme cela (c.-à-d. nombre de caractères nécessaires pour peindre l'œuvre d'art)i⍴⍨
cyclique r Eshape l'entrée à cette longueurr\
développer cela; insérer un espace à 0s, consommer des lettres à 1s(
…) ⍴` remodeler à la forme suivante:⍴t
la forme du texte↓
diviser le réseau N-by-5-by5 en une matrice N-by-5 de lignes artistiques⍉
transposer en une matrice 5 par N de lignes artistiques (cela aligne les lignes correspondantes des personnages)Par défaut, APL sépare les éléments simples d'un tableau imbriqué avec 2 espaces.
la source
Python 2 , 428 octets
Essayez-le en ligne!
Les lettres sont codées comme suit:
Chaque partie unique (il y en a 23) est convertie en binaire et un 1 est ajouté devant. Il est ensuite converti en base 36.
Les nombres de base 36 résultants sont:
L'initiale
1
est supprimée, nous avons donc un seul caractère:Chaque lettre (
A-Z0-9
) est ensuite encodée en cinq de ces nouveaux caractères.En cinq listes:
Pour mapper l'entrée à un index dans ces listes, l'ordinal est modifié:
Parce que les ordinaux ne sont pas 0-35, mais légèrement mélangés, les 5 listes sont réorganisées et concaténées:
Pour chaque caractère dans l'entrée, ses 5 lettres sont trouvées et converties en entiers (base36):
Si le nombre est inférieur
30
,36
est ajouté (le manquant que1
nous avons supprimé plus tôt)Ensuite, le nombre est reconverti en binaire, et
0
s et1
s sont convertis enet
.
. Deux espaces sont ajoutés à la fin lors de la conversion.Par exemple.
Pour chacun
.
dans le résultat, il est remplacé par le caractère suivant de l'entrée (itéré parx
)la source
Java 8,
917907 octetsEst-ce que je vais jouer au golf d'ici au moins pour diviser par deux le nombre d'octets actuel, espérons
Essayez-le en ligne.
Explication:
la source
i=-1
intérieur du lambda. Mais peut-être que je me trompe et que ce n'est pas autorisé selon la méta? EDIT: Quelque chose de similaire se fait assez souvent dans les réponses C.int i;f->{for(;i++<10;)print(i);}
est 1 octet plus court quef->{for(int i=0;i++<10;)print(i);}
.i=-1
intérieur est dans la fonction lambda. Votre exemple ne fonctionne pas si vous exécutez le même lambda deux fois, le mien le fait, ce qui est la principale différence ici.int i;f->{for(i=0;i++<10;)print(i);}
serait autorisé par exemple (mais pas vraiment plus court).Japt v2.0a0
-R
,213211210209206193191 191190 octetsComprend un espace de tête sur chaque ligne.
Essayez-le ou testez tous les caractères (les octets supplémentaires sont dus au fait que TIO ne prend pas encore en charge Japt v2)
Explication
Table de recherche
Chaque groupe de 4 caractères dans la chaîne (représenté par
...
ici pour économiser de l'espace et parce qu'il contient un tas d'imprimables) est la représentation binaire de chaque caractère (0
pour les espaces,1
pour les caractères) avec les retours à la ligne supprimés et convertis en base-100.Exemple
Le code
la source
Rubis , 366 octets
Essayez-le en ligne!
Cela peut être beaucoup joué au golf, mais maintenant je n'ai plus de temps et d'idées. Cela a été plus difficile que je ne le pensais pour la faire fonctionner.
Comment ça fonctionne:
Ce n'est pas si difficile à comprendre, je vais juste expliquer comment l'alphabet est codé avec un exemple. Chaque ligne de chaque caractère est convertie en binaire puis en base-36.
La première étape consiste à supprimer tous les caractères non alphanumériques de la chaîne d'entrée.
Ensuite, je génère une table de recherche pour le rendu final, car je veux imprimer ligne par ligne.
Après cela, en itérant sur la ligne de l'alphabet, je crée le motif binaire des lettres.
Enfin, je remplace 0 par des espaces et 1 par des caractères de la table de recherche.
N'hésitez pas à jouer au golf plus loin, je sais que cela pourrait être de 20 à 30 octets plus court (en utilisant gsub au lieu de tr, etc.), mais je ne suis pas intéressé maintenant, à moins que je puisse rendre la table alphabétique drastiquement plus petite.
la source
Charbon de bois ,
172164 octetsEssayez-le en ligne!Le lien est vers la version détaillée du code. Explication:
Faites précéder les chiffres de l'alphabet majuscule prédéfini.
Mettez en majuscule l'entrée et filtrez tous les caractères non pris en charge.
Faites une boucle sur les caractères restants.
Boucle sur chaque ligne, imprimant implicitement chaque résultat sur sa propre ligne.
La chaîne compressée est la grande constante entière de @ ovs, convertie en binaire et inversée. Il est ensuite découpé en 180 sous-chaînes de 5 caractères, et la sous-chaîne appropriée pour le caractère et la ligne actuels est ensuite bouclée.
Si le bit a été défini, imprimez cycliquement le caractère suivant de l'entrée filtrée, sinon imprimez un espace.
Positionnez le curseur prêt à imprimer le caractère suivant.
la source
Perl 5 avec
-nlaF/[^A-Za-z0-9]+|/
, 247 octetsEssayez-le en ligne!
Explication
Tout d'abord, une table de recherche est créée en
%l
utilisant lespack
données ed. Ces données sont une chaîne binaire de 900 bits de chaque caractère compressée sous forme de chaîne binaire de 25 bits (stockée sous forme de 113 octets - seulement 1 octet de plus que le charbon de bois!), Semblable à certaines autres réponses, toutA
comme:qui, en utilisant
0
pour l'espace et1
pourA
est:et sans les sauts de ligne c'est:
Une fois la recherche initialisée, nous itérons sur chaque caractère valide dans
@F
(qui est-a
rempli à l' aide de l'option utosplit de Perl ) en ajoutant à chacun des 5 éléments de la liste@;
pour chaque ligne du tableau de la recherche, en remplaçant tous les1
s paruc$F[$i++%@F]
lesquels est le$i
th caractère (modulo@F
qui est la longueur de@F
) converti enu
pperc
ase, et tous les0
s avec$"
lesquels par défaut l'espace. Une fois que chaque index@;
est rempli pour chaque caractère@F
,say
imprime chaque ligne avec une nouvelle ligne de fin.Remarque : la chaîne suivante
unpack
contient des caractères non imprimables qui sont échappés à l'aide de la\xXX
notation. Vérification pour un score de 247 .la source
SOGL v0.12 ,
165164163 octetsEssayez-le ici!
Explication:
la source
JavaScript (Node.js) ,
365347 octets1 octet enregistré grâce à @Scoots
Renvoie un tableau de 5 chaînes. Comprend un espace de tête sur chaque ligne.
3736 octets sont perdus lors de la conversion de tout en majuscules et de la correspondance[A-Z0-9]
: - /Essayez-le en ligne!
Encodage de caractère
Les caractères sont encodés à l'envers et convertis en une base-80 personnalisée avec un décalage de 4 , en utilisant la plage ASCII [35..114] .
Les valeurs 35 à 79 sont directement mappées au caractère ASCII correspondant, tandis que les valeurs 0 à 34 sont mappées aux caractères 80 à 114 . Cela permet de décoder en prenant simplement le code ASCII modulo 80 .
Par exemple, «F» est codé comme suit
"RZW["
:En commençant par i = v = 4 , il est décodé en un entier de 25 bits en faisant:
Dans le code complet, nous traitons en fait une tranche illimitée () du flux codé, ce qui signifie que nous sommes susceptibles d'itérer beaucoup plus de 4 fois. Ce n'est pas un problème car toutes les itérations avec i <0 n'affecteront que la partie décimale du résultat, qui est de toute façon ignorée par les opérations au niveau du bit qui suivent immédiatement.
Essayez-le en ligne!
la source
toUpperCase
par lei
drapeau dans le RegEx?[A-Z\d]
au lieu de[A-Z0-9]
?C (gcc) ,
792690 octetsEssayez-le en ligne!
A réussi à presser ce chiffre sous 800 avec une réutilisation variable. Vous avez choisi de stocker la police sous la forme d'un tableau deint
s, comme si le stockage en une longue chaîne ressemblait à une idée attrayante, de nombreux morceaux de 8 bits de la police n'étaient pas un joli caractère ASCII pratique que les codes d'échappement prenaient plus de caractères que leint
tableau.Edit: obtenu moins de 700 en passant à un codage de chaîne après tout - quelque peu inspiré par de nombreuses autres réponses ici, j'ai bricolé une représentation en base 92 en utilisant (la plupart) des caractères ASCII imprimables. La représentation inclut des barres obliques inverses qui nécessitent un extra pour être échappées mais cela ne se produit qu'une seule fois dans la police.
En dehors de cela, il n'y a pas grand-chose de trop flashy - l'entrée (constituée du premier argument de ligne de commande) est copiée dans un tableau de pile, moins tous les caractères qui ne sont pas dans la police et avec des lettres minuscules remplacées par leur les versions majuscules, quel caractère "pixel" commence chaque lettre complète (en utilisant
__builtin_popcount
a un nom douloureusement long mais était toujours meilleur que n'importe quelle méthode de comptage sur les bits auxquels je pouvais penser), puis l'impression passe ligne par ligne. Le compilateur génère bien sûr plusieurs fois la longueur du programme dans les avertissements.Un peu dégouliné ci-dessous pour votre plaisir visuel:
la source
Excel VBA, 816 octets
Une fonction de fenêtre immédiate VBE anonyme qui prend les entrées de la plage
[A1]
et les sorties vers la console.Pour autant que je sache, c'est la première réponse VBA à utiliser la
base64
compression.Remarque: Cette réponse dépend de la
Microsoft XML, v3.0
référence VBAExemple d'E / S
Non golfé et expliqué
La majeure partie de cette solution stocke la grande police en tant que chaîne de base 64. Cela se fait en convertissant d'abord la police en binaire, où
1
représente un pixel actif et0
représente un pixel désactivé. Par exemple, pour0
, cela est représenté parAvec cette approche, les alphanumériques peuvent alors être représentés comme
Ces segments ont été concaténés et convertis en MSXML base 64, rendant
Le sous-programme ci-dessous prend cela, convertit en arrière en binaire et utilise ceci une référence à partir de laquelle construire une chaîne de sortie, ligne par ligne, en saisissant d'abord les 5 premiers pixels de chaque caractère, puis la deuxième ligne et ainsi de suite jusqu'à ce que la chaîne soit construite .
Le sous-programme parcourt ensuite la chaîne de sortie et remplace les pixels «activés» par des caractères de la chaîne d'entrée.
la source
K (ngn / k) ,
230231 octets(+1 octet après un changement de langue impl)
Essayez-le en ligne!
où
a
est un littéral de chaîne entre guillemets qui code la police. K considère les chaînes comme des séquences d'octets, donc un programme contenant un tel littéral est valide, mais il ne peut pas être exécuté sur TIO, car sa forme HTML essaie de l'interpréter comme UTF-8 et le gâche.Le nombre d'octets est calculé comme suit:
119 signalés par TIO
-2 pour nommer la fonction
f:
-1 pour l'espace réservé
a
2 pour une paire de citations
""
113 pour la longueur du littéral de chaîne
a
qui ne contient aucun caractère nécessitant un échappementla source