C'est un problème sur Luogu OJ. J'ai décidé de le poster ici parce que sur Luogu OJ, beaucoup de gens, y compris moi et mon ami, sont intéressés par la façon de résoudre ce problème avec le moins de caractères.
Votre tâche consiste à sortir l'art ASCII suivant:
************
####....#.
#..###.....##....
###.......###### ### ###
........... #...# #...#
##*####### #.#.# #.#.#
####*******###### #.#.# #.#.#
...#***.****.*###.... #...# #...#
....**********##..... ### ###
....**** *****....
#### ####
###### ######
##############################################################
#...#......#.##...#......#.##...#......#.##------------------#
###########################################------------------#
#..#....#....##..#....#....##..#....#....#####################
########################################## #----------#
#.....#......##.....#......##.....#......# #----------#
########################################## #----------#
#.#..#....#..##.#..#....#..##.#..#....#..# #----------#
########################################## ############
C'est le code-golf, donc le programme le plus court gagne.
code-golf
ascii-art
kolmogorov-complexity
Hautement radioactif
la source
la source
Réponses:
Brainfuck , 1347 octets
Pourquoi je me fais ça
Essayez-le en ligne!
La version "lisible":
la source
T-SQL,
322 298288 octetsUtilise la compression G-Zip intégrée à SQL 2016 et versions ultérieures, ainsi que l'encodage Base64, consultez ces conseils pour plus de détails .
Dans SSMS, vous devrez soit sortir sous forme de texte après avoir manipulé les limites de caractères SSMS dans les paramètres, soit simplement copier-coller la sortie dans la fenêtre de code:
EDITS : 24 octets enregistrés avec une meilleure chaîne compressée, grâce à @someone; enregistré 10 octets avec une conversion implicite en utilisant
CONCAT
, grâce à @digscoop.la source
H4sIAAAAAAACA6WRQYrEIBQF955CqJ0wdf/jjehM2rwOdofUQvIoHj9f65m2UMLRsYNng/4ZQU0NThjUtBFLDXwRBpWIWYfGpCaIRCy5cZswuFVX6U3bOAA73/+8nXYw2368uWwfj3r5MKzfq4W0UHhEQcUBsk0/b9yafllX9P/YpeDu7rVDTF6226WoPpy6bMUmPZ66UH4BHz4rVE8EAAA=
. Je ne peux pas tester cela parce que je ne sais pas comment, mais vous pourriez ou ne pourrez pas omettre le=
.=
) et économise 24 octets; suppose que ma routine d'encodage est loin d'être idéale.DECLARE @ XML='H4sIAAAAAAACA6WRQYrEIBQF955CqJ0wdf/jjehM2rwOdofUQvIoHj9f65m2UMLRsYNng/4ZQU0NThjUtBFLDXwRBpWIWYfGpCaIRCy5cZswuFVX6U3bOAA73/+8nXYw2368uWwfj3r5MKzfq4W0UHhEQcUBsk0/b9yafllX9P/YpeDu7rVDTF6226WoPpy6bMUmPZ66UH4BHz4rVE8EAAA='SELECT CONCAT('',DECOMPRESS(@.value('.','varbinary(max)')))
CONCAT
astuce, mais pas la variable XML, car cela aurait ajouté 3 octets (ce serait plus court, cependant, dans les situations où j'avais déjà une variable)PHP ,
176155 octets-21 octets grâce à chaîne super compressée Ryan Moore .
Cette version utilise la sortie brute de gzdeflate et contient des données binaires non imprimables, donc le code lui-même et le lien TIO ne peuvent pas être publiés ici, mais voici un vidage hexadécimal de celui-ci:
Merci à @dzaima , voici un TIO qui utilise bash pour créer et exécuter ce fichier: Essayez-le en ligne!
Cela inverse essentiellement le dégonflage et imprime le résultat. Enregistrez-le en tant que fichier binaire puis exécutez-le comme ceci:
php mario.php
PHP ,
239216 octets-23 octets grâce à la chaîne super compressée de Ryan Moore .
Essayez-le en ligne!
Identique à la version ci-dessus, mais utilisé base64_encode à la sortie de
gzdeflate
, donc le code est lisible et le lien TIO est également disponible. Cela inverse fondamentalement la base64 et dégonfle et imprime le résultat.la source
Bubblegum , 138 octets
Essayez-le en ligne!
la source
Gelée ,
235213 octetsEssayez-le en ligne!
Utilise une combinaison d'encodage de longueur et de remplacement de séquences de longueur 2 communes par un seul chiffre. N'utilise aucune bibliothèque de compression standard comme gzip. Globalement, 169 octets de données compressées et 44 de code.
Explication
Étape 1: remplacer les valeurs des données entre 17 et 39 par des paires d'octets préenregistrées
Étape 2: décoder et convertir en chaîne
la source
LaTeX,
452448 octetsCréé avec le remplacement du bigramme (et un trigramme) au lieu de programmer une boucle pour remplacer plusieurs symboles consécutifs.
LaTeX, 506 octets
Il y aura très probablement une variante plus efficace, mais c'est ce que j'ai réussi à obtenir à la main (pas d'outils de compression intégrés dans LaTeX ...). J'ai créé une petite boucle pour remplacer des séquences consécutives.
Sortie borne (des deux codes):
la source
Bash + coreutils + xz,
243242240 octetsla source
Keg ,
22041012745 octetsEssayez-le en ligne!
267 octets enregistrés grâce à @Sriotchilism O'Zaic
Programme 1012 octets
Essayez-le en ligne!
Ceci est juste un encodage de la longueur de l'image ascii mais implémenté dans Keg
Ancien programme
Essayez-le en ligne!
Je sais que cela ne gagnera probablement aucune compétition, mais bon, ça a l'air bien. Échapper littéralement à chaque caractère et l'imprimer. Je veux dire, il pourrait être joué au golf, mais n'aimez-vous pas seulement les programmes d'art ascii?
la source
JavaScript (Node.js) ,
265264 octets1 octet enregistré grâce à @ Night2
Dégonflé.
Essayez-le en ligne!
JavaScript (Node.js) , 318 octets
Substitutions de chaînes consécutives.
Essayez-le en ligne!
JavaScript (ES7), 340 octets
Écrasé.
Essayez-le en ligne!
Ou ici:
Afficher l'extrait de code
la source
C (gcc) ,
322320318316 octets-2 octets grâce au plafond.
Essayez-le en ligne!
la source
Bash + coreutils,
269262261 octetsUn peu trivial - rien d'intelligent ne se passe ici. Je ne sais pas si je suis autorisé à utiliser gzip comme ça. Si je ne le suis pas, je ne doute pas que quelqu'un me crie dessus.
(mieux si je supprime les espaces / guillemets inutiles)
Merci à @manatwork d'avoir enregistré un octet
Essayez-le en ligne!
la source
echo
commande et un tuyau en le faisantbase64 -d<<<...|gunzip
Python3,
921 916 752 751 539 534476 octetsEt voici une version équitable obligatoire. J'ai utilisé un script pour compter les caractères individuels, devrait être identique:
Essayez-le en ligne!
Gracieuseté des gars géniaux dans les commentaires qui sont bien meilleurs que moi!
Et voici le script (python3) pour tous ceux qui pourraient vouloir générer du code et sont trop paresseux / efficaces pour compter manuellement:
Absence de faille Python3, 167 octetsComme rien n'a été dit sur les échappatoires standard, je vais glisser celle-ci ici pendant que je peux. TIO n'aime pas urllib pour une raison quelconque, si quelqu'un connaît un site pour héberger le script, veuillez me le dire. De toute évidence, un raccourcisseur de lien pourrait économiser quelques octets, mais je ne voulais pas descendre plus loin dans ce trou de lapin.
la source
many people, including me and my friend, are interested about how to solve this problem within the fewest characters
, je pensais que ça valait le coup un bon rire; qui correspond au thème de la programmation récréative de cet article et de certaines parties de ce site.print(input())
MarioLANG ,
3287 32863285 octetsJe devais le faire pour le thème.
Essayez-le en ligne!
C'est horrible et je suis vraiment désolé.Les boucles peuvent devenir très chères (en octets) dans MarioLANG si vous n'êtes pas intelligent à leur sujet et aussi j'avais presque perdu la volonté de vivre au moment où j'arrivais si loin, donc Mario fonctionne littéralement en ligne droite, d'abord définir 6 cellules de mémoire sur les valeurs ASCII correctes, puis basculer entre elles pour sortir dans le bon ordre. Cela peut certainement être approfondi et si vous vous détestez vraiment, je vous suggère fortement de l'essayer.(Enregistré un octet en supprimant les derniers égaux (caractère de plancher) puisque Mario frappe la dernière instruction alors qu'il tombe même sans elle et un autre en réalisant qu'il pourrait réellement frapper deux instructions à l'automne.)
5413 octets
Essayez-le en ligne!
Il s'agit d'un portage de la réponse de The random guy utilisant le convertisseur Brainfuck vers MarioLANG de Dennis, apportant des modifications très mineures pour économiser quelques octets. Bien qu'il soit évidemment beaucoup plus long, il comprend plus de fonctionnalités du langage et montre mieux comment le langage fonctionne, alors j'ai pensé l'inclure.
la source
Pyth , 211 octets
Essayez-le en ligne!
Méthode de compression: Puisqu'il n'y a que 6 caractères, l'espace, la nouvelle ligne ainsi que
#.-*
, remplacent chacun d'eux par une lettre dea-f
. Ensuite, run-length encode le tout (aaaaaccc
->5a3c
etc.), puis compresse en utilisant zlib.La chaîne compressée est
la source
Bash , 486 octets
Essayez-le en ligne!
La chaîne encodée Run-Length $ S générée par le programme non-golfé ici: Essayez-la en ligne!
Ensuite, les variables $ a, $ b, $ c dans $ S ont été remplacées par une inspection manuelle, et un seul back-tick a dû être échappé dans $ S pour permettre l'utilisation des variables.
la source
Perl,
422396370366365 caractèresRun-length encodé en 2 étapes: caractères consécutifs et motifs consécutifs de plusieurs caractères.
Essayez-le en ligne!
la source
PHP,
608565557 octetsUtilise GMP, la
5kJvr...
chaîne a été créée en utilisant d'abord des substitutions pour convertir l'original en base56, puis GMP pour convertir en base 62.Exécutez en ligne.
la source
Python3, 557 octets
Longueur de la course encodée, puis quelques sous-chaînes répétées (espaces puis trois "#", "-" entourés de blocs, etc.) extraits manuellement. Certainement matière à amélioration
Python3, 789 octets
Amusez-vous avec des générateurs de nombres aléatoires. L'image est codée en longueur, puis divisée en blocs de 6. Le premier bloc (indices du symbole à imprimer) est généré à partir d'un générateur de nombres pseudo-aléatoires. Le second est un encodage base64 des 6 nombres.
la source
print(line1,line2,...,sep='\n')
C,
114210681044 octetsCe n'est pas très bon, mais je l'ai fait. Fondamentalement, je suis allé ligne par ligne et chaque fois qu'une fonction plus deux appels de fonction ou plus étaient plus courts que le texte d'origine, j'ai remplacé le texte par une fonction.
Il économise 99 octets de plus en utilisant simplement printf.
69 octets enregistrés en supprimant les spécificateurs int et void et le #include <stdio> . Sauvegardé encore 2 octets en déclarant i comme global au lieu de dans la boucle for . Sauvegardé encore 3 octets en changeant printf en putchar à deux endroits. Suppression de 21 autres octets avec les modifications proposées par @Christian Gibbons: déclarations de variables éliminé à l'origine, changé de boucle à une décrémentation tandis que la boucle, modifié « \ n » à 10 dans le n () fonction. Sauvegardé encore 3 octets en changeant putchar (10) en put ("") , grâce à cette réponse .
1143 octets
Essayez-le en ligne ici .
Non golfé (ish)
la source
s,a,h,d,m,
du début, ceux-ci seront implicitement déclarés commeint
s lorsque vous les initialiserez immédiatement après.for(;i++>n;)
vous permettra d'éviter d'écrire ài
nouveau dans la boucle.putchar('\n')
->putchar(10)
pour raser quelques octets de plus. Il semble également que vous ayez un étranger;
dans votrez
fonction.i
complètement. Au lieu d'une boucle for, faiteswhile(n--)
x()
vous déplaçant vers le haut, vous pouvez l'avoirc()
et l'o()
appeler pour économiser quelques octets.x()
lui-même peut prendreint*
, car tous les pointeurs ont tendance à avoir la même taille, et imprimer en utilisantprintf(c)
pour économiser quelques octets de plus. Deux fonctions peuvent être quelque peu raccourcies:n(){p(10,1);}
etp(c,n){while(n--)x(&c);}
(suppose peu d'endian). Chaque fois que vous appelez une fonction sans argument, vous pouvez utiliser l'appel de fonction précédent comme argument, comme ceci:c();n();
->n(c());
.Python ,
340378 octetsJ'ai foiré l'encodage dans la réponse originale, en voici une basée sur la compression LZW. Pourrait revoir ma réponse originale à un moment donné.
Essayez-le en ligne!
la source
JavaScript pur 419 octets (pas de bibliothèque)
Compression (1 étape: comptez chaque caractère en hexadécimal, par exemple
**********
donne*a
, 2 étapes: convertissez deux caractères comme * 1 ou # 4 en code ascii gratuit avec un seul caractère)Afficher l'extrait de code
Décompression
Afficher l'extrait de code
la source
PowerShell + tar, 265 = 9 + 256 octets
Ce script fonctionne avec Windows et Linux. Le script extrait la sortie de l'archive tar
t
(256 octets). Let
doit être placé dans le même répertoire que le script.Essayez-le en ligne!
Le script powershell pour créer l'archive tar
t
:la source
Perl avec filtre: module sh, 672 octets
C'est long mais c'est aussi assez illisible donc j'ai pensé que ça pouvait être une réponse golfique ...
Explication: le filtre remplace
S
par" "
et un nombre parx(num) .
,S14
devient ainsi par exemple" "x14
. En Perl, cela signifie "imprimer un espace 14 fois". En outre, il existe une compression manuelle pour les séquences qui se produisent souvent à l'aide de variables$a
-$h
.la source
s/regex/replace/g
syntaxe en natif?e
modificateur regex qui est nécessaire ici pour exécuter l'opérateur x après substitution - mais maintenant je le fais: DSOGL V0.12 , 971 octets
J'ai simplement copié toute la chaîne dans le compresseur. J'ai réalisé que la chaîne n'était pas beaucoup compressée.
Essayez-le ici!
la source