Description de la tâche:
Dessinez un cube dans l'art ASCII dans à peu près une projection d'armoire.
Monospaced fonts
ont souvent des caractères environ deux fois plus hauts que larges. Étant donné que l'entrée correspond à la longueur des lignes verticales (à l'exclusion des coins), les lignes horizontales sont dessinées avec deux fois plus de caractères, de sorte que l'image résultante est en gros un cube. Les lignes de recul sont dessinées à la moitié de la longueur, comme le prescrit une projection de l'armoire.
Les coins du cube sont représentés par +
, les lignes horizontales par -
, les lignes verticales par |
et les diagonales utilisent /
.
Résumant: que l'entrée soit n , puis
- Un bord horizontal du cube est dessiné avec
-
et se compose de 2 n caractères. - Un bord vertical du cube est dessiné avec
|
et se compose de n caractères. - Un bord diagonal du cube est dessiné avec
/
et se compose de n / 2 caractères. - Les coins du cube sont dessinés avec
+
. Les coins ne sont pas comptés pour la longueur d'un bord comme détaillé ci-dessus (voir également les exemples ci-dessous).
Contribution:
L'entrée, donnée sur l'entrée standard, est un seul nombre pair positif n (2 ≤ n ≤ 30) qui donne la longueur des lignes verticales du cube. Elle est suivie d'un saut de ligne unique.
Sortie:
La sortie est un cube sur la sortie standard suivant les règles ci-dessus. Les espaces en fin de ligne sur les lignes sont ignorés.
Exemple d'entrée 1:
2
Exemple de sortie 1:
+----+
/ /|
+----+ |
| | +
| |/
+----+
Exemple d'entrée 2:
4
Exemple de sortie 2:
+--------+
/ /|
/ / |
+--------+ |
| | |
| | +
| | /
| |/
+--------+
ETA: J'ai maintenant accepté la solution la plus courte. Je mettrai à jour la réponse acceptée lorsqu'une réponse plus courte arrivera.
Puisque certaines personnes ont demandé combien de temps les inscriptions de nos candidats étaient:
227 - Python
240 - Perl
310 - C
315 - C
326 - VB.NET
459 - C
Ainsi que nos propres solutions (non classées parmi les autres):
140 - Golfscript
172 - Ruby
183 - PowerShell
Réponses:
Golfscript - 96 caractères
La plupart de la compacité vient du stockage agressif de presque tout dans une variable (sauf si vous incluez l'écriture dans golfscript).
Quelques autres petites astuces ici.
'LR''str'*
->'LstrR'
.'/'
seul doivent dépasser deux éléments de pile (@
) au lieu de 3 (@ .. \
).la source
Python -
248243230227191Légèrement désordonné mais il imprime essentiellement le cube ligne par ligne (en utilisant un tampon de chaîne).
Merci à @marcog, pour avoir souligné la première ligne, @ThomasO pour avoir souligné la deuxième ligne et à @Juan pour m'avoir fait réaliser que je peux combiner des lignes.
la source
s=" ";p="+";b="|";f="/";n="\n"
às,p,b,f,n=" +|/\n"
.Python - 179
Je voudrais noter que j'ai pris quelques idées de JPvdMerwe (Utiliser une chaîne pour imprimer une fois, et la ligne unique pour laquelle je ne savais pas était la syntaxe correcte en Python).
la source
fortran 77 - 484 caractères
Inutile de proposer une version "non obsolète". Et notez que la démarque ne correspond pas bien aux exigences de retrait.
J'ai essayé fortran en raison de la présence de boucles en ligne fournies par la
write
déclaration. De toute évidence, ils aident, mais ne suffisent pas à tuer les mots de la langue. Il pourrait être réduit en utilisant une entrée de forme libre.Validation:
Heureusement, la spécification ne dit pas à quelle taille doit ressembler:
mais d'autres tailles impaires sont raisonnables:
la source
Ma propre solution, car elle a déjà été battue à mort par Python:
Windows PowerShell, 183
la source
PostScript, 237
Histoire:
def
ed quelques autres choses qui sont apparues souvent.def
art.def
qui enregistre deux octets supplémentaires.[
et]
ont de belles propriétés lorsqu'elles sont utilisées comme variables :-). Merci à KirarinSnow .def
s. Merci encore :-).la source
Ruby 1.9,
172 165162 caractèresla source
Ruby - 423 caractères
Je ne veux vraiment pas partager cela, car c'est un compte horrible, mais depuis que je l'ai écrit, cela pourrait aussi bien.
Pourrait probablement être réduit d'un peu, mais je doute que cette approche par force brute puisse se rapprocher d'un nombre décent de caractères, donc je ne peux pas être dérangé.
la source
PHP,
401392382363 caractères:À l'origine, j'ai fait cela pour voir combien de temps je pouvais réussir à le faire en PHP, car je savais que ce serait assez long. Je suis sûr que cela pourrait être réduit, mais pas beaucoup étant donné que PHP n'a pas beaucoup de raccourcis.
Validation:
http://codepad.viper-7.com/ftYYz9.php53
Version non golfée: http://codepad.viper-7.com/4D3kIA
la source
Perl, 163
Perl 5.10 ou version ultérieure, exécuté avec
perl -E '<code here>'
Version modifiée:
la source
Perl,
269 269 262 256 245 244 237 226 228 224217 caractèresL'idée de base est de tout faire avec des substitutions d'expression régulière. Étant donné que deux des caractères utilisés (+ et /) sont des caractères spéciaux et apparaissent souvent dans les expressions régulières, il vaut la peine d'utiliser d'autres caractères et de les remplacer pour imprimer.
Version légèrement plus lisible:
Dans un sens, je triche en utilisant $ b comme compteur dans la boucle intermédiaire - je pourrais plutôt ajouter des espaces dans la boucle sur $ a puis utiliser des remplacements regex pour cette boucle aussi - mais je vais autoriser cette légère déviation à partir d'une solution pure-regex.
Sans aucun doute, une personne effrayante peut transformer cela en un script sed beaucoup plus court.
la source
y
fortr
n'est pas évident, et quant à la façon dont "while" peut aller avant ou après ...Lua,
294302292 octetsGolfé:
Ungolfed:
la source
or 6
après-read()
appel, ce qui économise quatre octets :-)(...)
ça ça ne marche plus pour moi sur Lua 5.1.4.Toile , 63 octets
Essayez-le ici!
la source