Dessinez cette tasse de café Ascii:
o o o __________ / \ __ | J | \ | A | | | V | | | A | __ / \ __________ /
Points brownie pour le script de café ou java :)
Le code le plus court en octets, fonction ou programme, saut de ligne ou espace blanc est acceptable, buvez!
Réponses:
SOGL , 48 octets
Explication:
SOGL a une compression de chaîne intégrée et l'une des choses qu'il a est une compression de dictionnaire de caractères. Encore mieux, il a un type de compression boxstring où les seuls caractères disponibles sont "/ \ | _- \ n". Ainsi, l'ensemble du programme est une chaîne enfermée dans "'(le" est implicite).
La chaîne que j'ai donnée au compresseur est (échappée):
la source
JavaScript (ES6),
110104 bytes4 octets enregistrés grâce à edc65
Comment ça marche
La compression de l'art ASCII d'origine est obtenue en remplaçant toutes les séquences de 2 à 10 espaces consécutifs et les deux séquences de 10 traits de soulignement consécutifs par un seul chiffre:
N
espaces consécutifs est codée avec le chiffreN-1
.9
.Nous utilisons
N-1
plutôt queN
pour ne jamais avoir à utiliser plus d'un chiffre. D'où la nécessité de++n
décoder.L'expression
n>>3
(décalage au niveau du bit vers la droite) est égale à 0 pourn = 1
àn = 7
et égale à 1 pourn = 8
(non utilisé) etn = 9
. Par conséquent,' _'[n>>3]
donne un trait de soulignement9
et un espace pour toutes les autres valeurs rencontrées.Le seul cas particulier est la séquence de 10 espaces consécutifs juste au-dessus de "JAVA". L'encoder avec un
9
serait en conflit avec les séquences de soulignement. Nous devons donc le diviser en deux séquences de 5 espaces, codées comme44
.la source
f=
). Vous pouvez enregistrer 4 octets de cette façon:n>>3
au lieu de+!(n&7)
,9
au lieu de_8
(deux fois) et44
au lieu de9
f=
dans celui-là ... Merci pour les octets enregistrés!' '
). Mais je ne sais pas exactement comment cela se fait. Que fait le décalage de bits? Pourquoi incrémentons-nous n?Gelée ,
6764 octets-2 octets grâce à Dennis (1. supprimer la redondance
”
, et 2. remplacer la transposition et le décodage de longueur,,ZŒṙ
avec réduction par répétition d'élément,.x/
)Essayez-le en ligne!
Comment?
“...“...’
est une liste de deux nombres compressés en base 250:D
convertit en décimal pour produire deux listes de chiffres:x/
réduit par répétition d'élément pour donner une liste de chiffres (en répétant le nombre de la première liste par la valeur correspondante de l'autre):ị
demande d'indexer dans la liste de droite, une basée et modulaire (0 index dans l'élément le plus à droite). La liste de droite¶_/\|JAVo
,, est simplement le caractère utilisé dans l'ordre requis où le pilcrow,,¶
est le même point de code qu'un saut de ligne. Le partenaire de fermeture de“
n'est pas requis car c'est la fin du programme:Jelly effectue une impression implicite de cette liste qui, puisqu'elle contient des caractères, s'imprime comme s'il s'agissait d'une chaîne:
la source
”
est implicite et vous pouvez la remplacerZŒṙ
parx/
. De plus, bien qu'il n'ait pas d'octets, l'utilisation¶
au lieu d'une nouvelle ligne littérale rend le code plus réductible imo.CoffeeScript ES6,
214180 octetsCoffeeScript, 135 octets avec codage en dur
la source
Python 2,
174172171167 167 octetsPas de codage en dur.
Pas d'encodage Base-64.
Pas de regex.
Sauvegardé 2 octets en externalisant
'_'*10
et en exploitant la conversion Python deTrue -> 1
etFalse -> 0
.1 octet enregistré en supprimant les espaces inutiles.
4 octets enregistrés grâce à @TuukkaX!
la source
] for
etin [
.[2,7,4]
et[3,4,5,6]
à2,4,7
et3,4,5,6
.PowerShell ,
136124123105 105 octetsEssayez-le en ligne!
Merci à @briantist d'avoir trouvé la
-replace
méthode la plus courte que je connaissais était quelque part.Cela prend la chaîne avec des nombres à la place du nombre requis d'espaces. Nous regex ensuite
-replace
les chiffres avec une expression de script$(" "*$1)
. Ainsi, par exemple, la première ligne de la chaîne sera$(" "*2)o
, la seconde sera$(" "*7)o
et ainsi de suite. En raison de la citation triple, celle-ci est laissée sous forme de chaîne sur le pipeline. Nous la vidons dansiex
(abréviation deInvoke-Expression
et similaire àeval
), qui traite les expressions de script et laisse la chaîne multiligne résultante sur le pipeline. La sortie est implicite.la source
($_,' '*$_)[+$_-in48..57]
- peu importe ce que je change, il semble échouer pour moi.space
paro
et barfs.GNU sed ,
113112 octetsEncodage de base, il stocke 3 espaces as
S
,\n
as@
et 5 souligne asU
. Je continuerai d'essayer des combinaisons pour trouver quelque chose de plus court.Essayez-le en ligne!
La solution triviale d'imprimer directement la chaîne est donnée ci-dessous. Il a 136 octets, ce qui entraîne une compression de 18%, en utilisant le schéma de codage ci-dessus.
Essayez-le en ligne!
la source
ss
commeS
enregistre 1 octet.S
stockage de 3 espaces, nons
. Je pense que je vais éditer celui-ci à la place, car il conserve le même nombre de transformations.MATL,
8786838278 octetsCette solution casse le café en deux morceaux: les "bulles" et la tasse. Pour créer les bulles, nous créons une matrice clairsemée avec 111 situés à trois endroits et la convertissons en un tableau de caractères
Pour le composant mug, nous comptons sur la compression des chaînes
Les deux composants sont imprimés sur la sortie et une nouvelle ligne est automatiquement placée entre les composants
Essayez-le sur MATL Online
la source
Python 2 ,
128127 octets-1 octet grâce à Rod (utilisez la multiplication de tuple
('_'*10,)
pour éviter une déclaration).Essayez-le en ligne!
Remarque: cette double barre oblique inverse est nécessaire avant le saut de ligne.
Tout entre le
'''
et'''
est une seule chaîne, les deux%s
sont des formateurs qui sont remplacés par le contenu du%(...)
tuple final, qui à son tour contient deux copies de'_'*10
via la multiplication du tuple(...)*2
. Le'_'*10
effectue une multiplication de chaînes pour donner'__________'
.Le code parcourt les caractères,
c
, de cette chaîne tout en utilisantfor c in '''...
et crée une nouvelle chaîne en joignant (join(...)
)soit le nombre d'espaces identifiés par
c
,int(c)
sic
est un chiffreou
c
lui - même- étant un chiffre est identifié par
'0'<c<':'
économiser plusc.isdigit()
.la source
u,u
par('_'*10,)*2
déposer lau
déclarationJava 8,
294289248 octetsGolfé:
Dans l'esprit de la complexité de kolmogorov , cela ne code pas en dur la chaîne à afficher. Au lieu de cela, il utilise le fait qu'il existe de nombreux cas d'espaces multiples suivis d'un caractère imprimable. Il code le nombre d'espaces qui précèdent un caractère dans l'octet de poids fort du caractère, avec le caractère ASCII réel dans l'octet de poids faible.
Non golfé:
la source
\u0641
.F
. Il devrait être possible de les intégrer tous les deux.0x
préfixe a aidé.if
redondant, par exemple) et raser environ 1/6 de la taille.Befunge,
158105101 octetsEssayez-le en ligne!
Les caractères de la chaîne sont d'abord codés sous forme d'indices dans une table de recherche des dix valeurs possibles. Les indices sont ensuite regroupés en paires, chaque paire étant combinée en un seul nombre (i1 + i2 * 10) compris entre 0 et 99. En choisissant soigneusement l'ordre de la table de recherche, nous pouvons garantir que ces valeurs seront toujours valides Caractères ASCII pouvant être représentés dans un littéral de chaîne.
Il s'agit d'une ventilation du code lui-même:
Nous commençons par initialiser le dernier élément de la table de recherche avec un caractère de nouvelle ligne (ASCII 10).
Nous utilisons ensuite un littéral de chaîne pour pousser le contenu encodé sur la pile.
Enfin, nous bouclons sur les valeurs de la pile, décodons et sortons deux caractères à la fois.
La dernière ligne contient la table de recherche: le 9ème élément est un espace implicite et le 10ème (nouvelle ligne) est défini manuellement, comme expliqué précédemment.
la source
Rétine , 71 octets
Contrairement à mon autre réponse , celle-ci a été écrite à la main.
(il y a un espace à la fin)
Essayez-le en ligne!
Le principe est toujours d'avoir une chaîne "compressée" à partir de laquelle la tasse de café peut être reconstruite par des substitutions. En essayant différentes substitutions, il s'est avéré que les seules valent la peine d'être faites:
=
se transforme en__________
(10 traits de soulignement)la source
Lisp commun,
125123122 122120114 octetsJ'ai sauvé 6 octets, en utilisant l'idée de simplement mettre les entrées dans la chaîne au lieu de
~&
s.Les idées d'amélioration sont les bienvenues.
la source
Python3, 206 octets
la source
s=' '
variable et l'utiliser.'o\n'
a la même longueur que'o'+n
.print(*(' o',7*' '+'o',4*' '+'o',' '+10*'_','/'+10*' '+'\__','|'+3*' '+'J'+6*' '+'| \\','|'+4*' '+'A'+5*' '+'| |','|'+5*' '+'V'+4*' '+'| |','|'+6*' '+'A'+3*' '+'|__/','\\'+10*'_'+'/'),sep='\n')
ou lesfor x in(' o',7*' '+'o',4*' '+'o',' '+10*'_','/'+10*' '+'\__','|'+3*' '+'J'+6*' '+'| \\','|'+4*' '+'A'+5*' '+'| |','|'+5*' '+'V'+4*' '+'| |','|'+6*' '+'A'+3*' '+'|__/','\\'+10*'_'+'/'):print(x)
deux sont 197. Encore plus long qu'un code dur 136 .Pyth, 80 octets
Interprète en ligne disponible ici.
Décodage simple en longueur.
la source
C - 179
Solution avec utilisation extensive de la chaîne de format:
Voici une version plus lisible:
la source
void g(){puts(" o\n o\n o\n __________\n/ \\__\n| J | \\\n| A | |\n| V | |\n| A |__/\n\__________/\n");}
Rétine , 99 octets
Cette solution a été générée automatiquement à l'aide de ce script.
(il y a des espaces de fin sur plusieurs lignes)
Cela fonctionne en utilisant les nombres 1, 2, 3, 4 à la place de certaines séquences de caractères qui sont répétées dans la chaîne cible, puis en les substituant.
Je sais qu'il pourrait être joué plus en ajustant ce code ou en changeant complètement d'approche, mais comme le défi du méta-golf de kolmogorov a eu un résultat assez décevant, je voulais essayer d'utiliser mon script sur un vrai défi.
Essayez-le en ligne!
la source
3
, puis déplacer la substitution jusqu'à avant le 3. Vous pouvez également changer2\n
pour2\n3
et déplacer cette substitution avant le 3. Essayez en ligne!1\n__________
de1\n_____
puis changer chaque1
dans la substitution principale à11
essayer en ligne!Python 3.6
(non compétitif)Voici ma tentative d'encodage Huffman. C'est définitivement golfable si quelqu'un veut reprendre l'idée.
Le littéral pourrait être encore compressé en le convertissant en base64 ou autre, et l'arborescence Huffman pourrait être optimisée pour produire un bitarray encore plus court.
la source
Langue GameMaker, 138 octets
la source
C, 141 octets
Usage
Solution facile, 148 octets:
la source
PHP, 116 octets
Cela ressemble beaucoup à la réponse d'Arnauld - et fait à peu près la même chose. Courez avec
-r
.la source
zsh, 86 octets
Explication: cette chaîne est l'art ascii de la tasse Java compressée par gzip. J'utilise
printf
, car avececho
,zcat
imprime un avertissement etecho -e
est un caractère plus long. Cela ne fonctionne pas avecbash
oush
, car ils pensent que c'est un fichier binaire. Comme vous ne pouvez pas coller efficacement cette sortie à partir du navigateur, voici un fichier utilisable.la source
Java 9 / JShell, 299 octets
Non golfé:
Utilisation dans JShell:
Encode chaque caractère sous la forme de dix bits consistant en un décompte du nombre d'espaces avant le caractère dans les trois bits supérieurs suivis du point de code dans les sept bits inférieurs.
(Puisqu'il n'y a que trois bits pour le décompte, il ne peut pas représenter plus de sept espaces consécutifs, et il y a dix espaces à un point dans la chaîne. Ceux-ci sont codés comme un décompte de six, suivi d'un espace, puis d'un compter trois, suivi du caractère suivant.)
Malheureusement, il perd face à cette solution Java triviale de 140 octets:
la source
05AB1E , 85 octets
Essayez-le en ligne!
la source