J'ai déjà fait cela en Python, mais il semble que cela pourrait être beaucoup raccourci:
txt = input("Type something.. ")
c = "#"
b = " "
print(c * (len(txt) + 4))
print(c, b * len(txt), c)
print(c, txt, c)
print(c, b * len(txt), c)
print(c * (len(txt) + 4))
Donc, si l'utilisateur tape:
Hello World
Le programme imprime:
###############
# #
# Hello World #
# #
###############
Le nombre d'octets le plus faible l'emporte et, bien sûr, la réponse peut être écrite dans n'importe quelle langue.
Réponses:
CJam,
2220 octetsTestez-le ici.
Explication
Comment encapsuler une grille 2D de caractères dans une couche d'espaces (ou tout autre caractère)? Correct: quatre fois, vous ajoutez un espace à chaque ligne, puis faites pivoter la grille de 90 degrés. C'est exactement ce que je fais ici avec huit rotations: quatre pour les espaces, quatre pour
#
:la source
vim,
2827 frappesSuppose que l'entrée est fournie sous la forme d'une seule ligne de texte dans le fichier actuellement ouvert.
Explication:
Cela peut également être exécuté comme un "programme" comme ceci:
Ce qui est un peu compliqué, mais ça marche.
la source
pb - 89 octets
C'est le genre de défi pour lequel pb était fait! Non pas qu'il soit compétitif pour ce genre de défi ou quoi que ce soit. C'est toujours un langage de golf horrible. Cependant, des défis comme celui-ci sont beaucoup moins pénibles à résoudre en pb que d'autres. Étant donné que pb traite sa sortie comme un canevas 2D et est capable d'écrire dans tous les accords, tout ce qui implique le positionnement du texte / dessin autour du texte (c'est-à-dire ce défi) est géré de manière plutôt intuitive.
Regardez-le fonctionner:
Cette visualisation a été créée avec une version en développement de pbi, l'interpréteur pb. La ligne avec le fond bleu est
Y=-1
, où l'entrée est stockée au démarrage du programme. Le rectangle avec le fond rouge est l'emplacement actuel du pinceau. Les rectangles avec des arrière-plans jaunes sont partout où le caractère ascii 32 (un espace) est explicitement écrit sur la toile. Tous les espaces vides sans ce fond ont en fait la valeur0
, qui est convertie en espace.Voici le code avec les commentaires que j'ai utilisés lors de son écriture, avec quelques en-têtes de section pertinents sur le plan thématique;)
la source
Not that it's competitive... It's still a horrible golf language.
Je dis cela, mais pour l'instant je ne suis à égalité que pour la dernière. Je m'attendais à être le dernier tout à fait. : Dbrainfuck - 156 octets
C'est probablement golfable. Il y a des endroits où je ne savais pas s'il valait mieux stocker une valeur quelque part pour la réutiliser ou la refaire / aller la chercher ailleurs sur la bande. Au lieu de faire le travail pour le comprendre, je ne l'ai pas fait. :RÉ
Avec commentaires:
la source
K, 21 octets
Inscrire la chaîne, ajouter un espace aux quatre côtés d'une chaîne, puis ajouter un octothorpe de chaque côté de la chaîne. En action:
Fonctionne en oK, Kona et k5.
Il y a pas mal de variations à l'intérieur d'un caractère de longueur qui suppriment la redondance ci-dessus, mais aucune ne semble briser même lorsque nous n'avons qu'à effectuer deux fois l'opération de "bouclage":
la source
Pyth, 31 octets
Merci aux gens dans les commentaires qui donnent des conseils sur la façon de jouer au golf, je ne connais vraiment pas bien la langue comme vous pouvez (probablement) le dire.
la source
"#"
est égal à\#
. Si vous devez concaténer un grand nombre d'objets, il vaut mieux utiliserj""[
suivi d'une liste d'objets, qui est égale àjk[
.s[
est égal àjk[
pour les tableaux de chaînes. En outre, vous pouvez également attribuerK
à la volée, commejk[K\#
, et simplement déposer l'assignation initiale. L'affectationlz
àJ
n'aide pas si elle n'est utilisée que deux fois, alors économisezJ
pour autre chose. Ici, si vous échangezZ
pourJ
vous pouvez supprimer le=
. Enfin, vous pouvez attribuerJ
à la volée. Le code ressemble alors à ceci:_Js[K\#*d+2lzKb*K+4lz)jd[KzK)J
Python 3, 88 octets
Merci @WorldSEnder
Exemple d'E / S:
la source
s=" "
au début enregistre 1 octet au total je pense.;
au lieu de nouvelles lignes btw? Les deux devraient être un octet, non?Perl,
4376 octetsTransformez chaque ligne de saisie de texte comme spécifié:
Par exemple:
Voici comment voir ce qu'il fait vraiment:
Donc quelque chose de plus comme ça:
la source
e
modificateur ... mais si vous faites cela, vous pourriez tout aussi bien laisser tomber la substitution tout à fait:$x="#"x(4+($z=y!!!c));$y="#".$"x(2+$z)."#\n";$_="$x\n$y# $_ #\n$y$x"
. Utilisez des sauts de ligne réels au lieu de\n
et ce n'est que 65 octets, plus 2 pour-lp
.JavaScript (ES6), 73
Utilisant fortement la chaîne de modèle, les 2 nouvelles lignes sont significatives et comptées.
Testez l'exécution de l'extrait ci-dessous dans n'importe quel navigateur compatible EcmaScript 6 (FireFox et dernière version de Chrome, peut-être Safari).
C'est beaucoup plus court que mon premier essai, dérivé de cet autre défi :
la source
z
comme effet secondaire?)Python 2, 74
Prend entrée entre guillemets comme
"Hello World"
.# _ #
.b
sont# #
avec le bon nombre d'espaces, entourées de nouvelles lignes de chaque côté pour prendre soin des quatre nouvelles lignes.#
multipliées par la longueur de l'entréeLes lignes sont concaténées et imprimées.
la source
MATLAB,
9391 octetsPas le plus joli, mais ça fait le travail.
Explication du code
Étape 1
Lisez une chaîne de STDIN et placez-y un seul espace de début et de fin. 32 est le code ASCII d'un espace et la lecture de l'entrée comme un type de chaîne fusionne les 32 en espaces.
Étape 2
Déclarez un tableau de caractères de 5 signes de hachage dans un vecteur de colonne.
Étape 3
Créez une matrice de caractères à 2 lignes remplie de signes de hachage en premier, suivie d'un espace blanc après. Le nombre de caractères est la longueur de la chaîne d'entrée plus 2 afin que nous puissions tenir compte de l'espace avant et après la chaîne.
Étape 4
Nous allons tout assembler. Nous plaçons la première colonne de 5 hachages, suivie de la partie centrale et suivie d'une autre colonne de 5 hachages. La partie centrale se compose de la matrice de caractères à 2 lignes créée à l'étape # 3, la chaîne d'entrée elle-même qui a un espace de fin et de début, suivie de la matrice de caractères à 2 lignes mais inversée.
Exemples d'exécutions
la source
Perl 5.14+,
5756 octets54 octets + 2 octets pour
-lp
(si l'entrée ne se termine pas par une nouvelle ligne,-l
peut être supprimée pour enregistrer un octet).Accepte les entrées sur STDIN:
Comment ça marche
Le cœur du programme est une tranche de liste:
Cela fournit un moyen compact de stocker les trois lignes uniques de la sortie (les deux premières lignes du cadre de sélection sont les mêmes que les deux dernières, uniquement en miroir). Pour la chaîne d'entrée
foo
, les résultats de la tranche seraient:Rejoindre ces valeurs avec
#\n#
nous donne notre box.Notez que Perl 5.14+ est requis pour utiliser le
r
modificateur non destructif de l'opérateur de translittérationy///
.la source
PHP,
9593 octetsPas exactement brillant ou quelque chose de similaire, mais c'était vraiment amusant!
Pas exactement joli ou quoi que ce soit, mais cela fonctionne à merveille!
Merci à @Titus pour avoir économisé 2 octets.
la source
$argv
au lieu de$_GET
et-r
.C ++, 198 octets
Mon premier coup de couteau au codegolf, et bien que j'aie appris le C ++ n'est probablement pas le meilleur langage pour le golf, j'ai senti que j'avais fait décemment (?) Pour mon premier essai.
Non golfé
n, o et t représentent les lignes entièrement hachées, l'entrée (avec des hachages à chaque extrémité) et les lignes entre l'entrée et les lignes hachées respectivement.
la source
> <> ,
106104 octetsJ'ai l'impression que> <> n'est peut-être pas la meilleure langue pour cela, mais je suis allé trop loin pour abandonner et ne pas poster ceci. Le
*
à la fin de la ligne 4 est censé être un espace. N'aimez-vous pas à quel point ce code est incroyablement grotesque? Essayez-le en ligne .Voici une version sans autre chose que des changeurs de direction pour donner une idée de la façon dont le pointeur se déplace (notez que j'ai omis les instructions "teleport", c'est-à-dire
.
).Flux directionnel:
Explication
Ma visualisation de la pile sera basée sur l'entrée
input
. > <> est un langage à deux dimensions, alors faites attention à l'endroit où le pointeur se déplace entre les lignes, car il exécute du code en dessous (dans ce code, il<>v^
est principalement utilisé pour changer de direction). Je vais commencer mes explications à partir du point de départ du pointeur. Notez qu'il y aura deux lignes répétées, car le pointeur recule après la cinquième ligne.Ce que je trouve toujours cool à propos de> <>, c'est sa capacité à modifier son propre code source, et je l'utilise dans ce programme. Les lignes 3 et 4 sont réutilisées pour imprimer les deux dernières lignes via une modification d'un caractère dans chacune.
Ligne 1: boucle d'entrée
Empiler:
[-1,t,u,p,n,i]
Ligne 2: génère la troisième ligne de sortie
Empiler:
[9,9,9,9,#, ,t,u,p,n,i, ,#]
Ligne 3: imprime la première ligne de sortie
Empiler:
[0,9,9,9,#, ,t,u,p,n,i, ,#]
Sortie:
Ligne 4: imprime la deuxième ligne de sortie
Empiler:
[0,9,9,#, ,t,u,p,n,i, ,#]
Sortie (
*
représente l'espace):Ligne 5: imprime la troisième ligne de sortie
Empiler:
[9,9,0]
Sortie:
Ligne 6: se configure pour imprimer les quatrième et cinquième lignes de sortie
Empiler:
[0,9,9,0]
Ligne 4: imprimer la quatrième ligne de sortie
Empiler:
[0,9,0]
Sortie (
*
représente l'espace):Ligne 3: imprimer la dernière ligne de sortie
Empiler:
[0,0]
Sortie:
la source
PHP,
9391 octetsPrend l'entrée de l'argument de ligne de commande; échapper aux espaces ou utiliser des guillemets simples. Courez avec
-r
.la source
Pyke (non compétitif), 6 octets
Essayez-le ici!
Pyke a été écrit après le challenge et n'est donc pas compétitif.
.X
prend une chaîne et une chaîne constante arg et entoure une chaîne avec ce groupe de caractères. L'argument constant peut contenir jusqu'à 8 caractères et avoir différents effets sur la façon dont la chaîne est entourée.la source
05AB1E,
26 octets, pas en compétitionEssayez-le en ligne!
EDIT: Woah! Je n'ai pas remarqué qu'il s'agit d'un vieux défi! Désolé!
la source
C # - 142 octets (le corps de la méthode est 104)
Non golfé:
la source
PowerShell,
8482 octetsla source
Lua, 90 octets
la source
Rubis, 83 octets
Je suppose que cela pourrait être joué plus loin, mais comme il n'y a pas encore de réponse Ruby, la voici:
la source
Raquette 172 octets
Non golfé:
Essai:
Sortie:
la source
C #,
116110 octetsNon golfé:
Version initiale:
Programme complet avec cas de test:
la source
var
au lieu destring
.var
mot clé ne permet qu'une seule déclaration.C (gcc) 165 octets
Version non golfée
la source
SmileBASIC, 73 octets
la source