Dans l'épisode d'aujourd'hui de l'AAOD, nous allons construire un sanctuaire chinois de différentes hauteurs.
Considérez les exemples suivants pour height ( N
) 1
to6
N = 1
:
.
|
. ]#[ .
\_______/
. ]###[ .
\__]#.-.#[__/
|___| |___|
|___|_|___|
####/_\####
|___|
/_____\
N = 2
:
.
|
. ]#[ .
\_______/
. ]###[ .
\___________/
. ]#####[ .
\___]#.---.#[___/
|__|_| |_|__|
|__|_|___|_|__|
#####/___\#####
|_____|
/_______\
N = 3
:
.
|
. ]#[ .
\_______/
. ]###[ .
\___________/
. ]#####[ .
\_______________/
. ]#######[ .
\____]#.-----.#[____/
|__|__| |__|__|
|__|__|_____|__|__|
######/_____\######
|_______|
/_________\
N = 4
:
.
|
. ]#[ .
\_______/
. ]###[ .
\___________/
. ]#####[ .
\_______________/
. ]#######[ .
\___________________/
. ]#########[ .
\_____]##.-----.##[_____/
|__|__|_| |_|__|__|
|__|__|_|_____|_|__|__|
########/_____\########
|_______|
/_________\
N = 5
:
.
|
. ]#[ .
\_______/
. ]###[ .
\___________/
. ]#####[ .
\_______________/
. ]#######[ .
\___________________/
. ]#########[ .
\_______________________/
. ]###########[ .
\______]###.-----.###[______/
|__|__|___| |___|__|__|
|__|__|___|_____|___|__|__|
##########/_____\##########
|_______|
/_________\
N = 6
:
.
|
. ]#[ .
\_______/
. ]###[ .
\___________/
. ]#####[ .
\_______________/
. ]#######[ .
\___________________/
. ]#########[ .
\_______________________/
. ]###########[ .
\___________________________/
. ]#############[ .
\_______]####.-----.####[_______/
|__|__|__|__| |__|__|__|__|
|__|__|__|__|_____|__|__|__|__|
############/_____\############
|_______|
/_________\
etc.
Détails de construction
Je suis sûr que la plupart des détails sur le motif sont clairs. Voici quelques détails plus fins:
- La porte au bas du sanctuaire peut être au minimum de
1
_
largeur et au maximum être de5
_
largeur. - Il y en aura toujours deux
.
directement au-dessus des piliers autour de la porte (deux verticaux|
). - Les escaliers commencent avec la même largeur que la porte et augmentent comme indiqué dans le motif
- Les
]##..##[
blocs au-dessus de chaque niveau de toit augmentent en taille de2
haut en bas. - Les
\__...__/
niveaux des toits augmentent en taille de4
haut en bas. - Les blocs de murs autour de la porte doivent au minimum contenir
1
_
et au maximum3
_
entre les deux|
. La priorité va aux blocs muraux extérieurs afin que celui le plus proche de la porte ait une taille variable pour chaque niveau. - L'espace entre le
.
et le]
(ou[
) est rempli par#
le toit juste au-dessus des portes.
Détails du défi
- Écrire une fonction ou un programme complet qui lit un entier positif supérieur à
0
via STDIN / ARGV / argument de fonction ou l'équivalent le plus proche et affiche (vers STDOUT ou l'équivalent le plus proche) leN
e sanctuaire chinois - Le retour à la ligne est facultatif.
- Il ne doit pas y avoir d'espaces de fin ou suffisamment d'espaces de fin pour remplir la sortie dans le rectangle de délimitation minimum.
- Il ne doit pas y avoir d'espaces de début qui ne font pas partie du motif.
Classement
Le premier post de la série génère un classement.
Pour vous assurer que vos réponses s'affichent, veuillez commencer chaque réponse par un titre, en utilisant le modèle Markdown suivant:
# Language Name, N bytes
où N
est la taille de votre soumission. Si vous améliorez votre score, vous pouvez conserver les anciens scores dans le titre, en les rayant. Par exemple:
# Ruby, <s>104</s> <s>101</s> 96 bytes
N=1
cas? Pourquoi pas 3 et avoir des fenêtres latérales plus petites comme dans leN=2
cas?N=1
cas, le premier toit n'est-il pas trop long (large)?#
côté du.
pour soutenir le]
et[
au - dessus. À propos de la taille de toit de départ - C'est la taille du toit dans le toit supérieur de chaque hauteur.Réponses:
CJam, 200 octets
Ajout de nouvelles lignes pour éviter le défilement. Essayez-le en ligne
Brève explication:
Le programme construit la moitié gauche du sanctuaire (y compris le milieu), puis l'inverse et remplace certains personnages pour obtenir la moitié droite. Une série de n espaces est représentée par le nombre ~ n (au niveau du bit "non") pendant la construction, et remplacée par les espaces réels à la fin.
Le programme commence par les 2 premières lignes, puis pour chaque niveau de toit, il ajoute toutes les lignes précédentes avec 2 espaces et ajoute le nouveau toit (2 lignes). Le dernier toit est modifié pour ajouter la partie "au dessus de la porte".
Ensuite, le mur supérieur est construit en répétant "| __" et en tronquant à la bonne longueur, suivi d'un "_ |" fixe et les espaces. Le mur est ensuite dupliqué et les espaces de porte sont remplacés par des soulignements. Enfin, la partie inférieure est construite ligne par ligne.
la source
Perl,
332 316294Essayez- moi .
C, 371
Essayez- moi .
JavaScript, 365
Ce qui précède peut être traduit presque 1 à 1 en JavaScript:
Utilisation:
la source
s
. À moins que vous ne l'allouiez dynamiquement, bien sûr.Python 2,
356352347344 octetsCela construit essentiellement le sanctuaire ligne par ligne. La fonction
p
imprime une chaîne avec les espaces nécessaires pour la centrer.J'ai utilisé python 2 pour enregistrer de nombreux octets, car l' objet de carte python 3 ne se déclenche pas. Je suppose que je devrais toujours jouer au golf python 2 , économise juste quelques octets de plus (même si c'est juste pour ne pas avoir à analyser l'entrée dans int). Hehehe, ce n'est pas comme si le code était joli pour jouer au golf en premier lieu.
Edit: et bien sûr, je n'ai plus besoin de la carte maintenant ...
Voici le code sous forme non golfée:
la source
print(B*(5+2*n-len(s)//2)+s)
parprint B*(5+2*n-len(s)/2)+s
(supprimer les parenthèses et le remplacer//
par/
).print B*(5+2*n-len(s)/2)+s
àprint(5+2*n-len(s)/2)*B+s
, vous pouvez supprimer l'espace aprèsprint
.JavaScript ( ES6 ), 440
Éditer bug du linteau fixe
Une fonction avec hauteur comme paramètre, sortie vers la console.
Beaucoup utiliser la chaîne de modèle , toutes les nouvelles lignes sont significatives et comptées.
Exécutez un extrait pour tester dans Firefox (avec sortie console)
Version non golfée pour test interactif:
la source
Haskell, 473 octets
la source
#
C, 660 octets
Le modèle semblait juste trop irrégulier pour proposer quelque chose de fantaisiste, en particulier dans une langue sans traitement de chaîne. Voici donc mon approche par force brute:
Avant de jouer au golf:
Pas grand chose à expliquer ici. Il va juste ligne par ligne et génère le nombre nécessaire de chaque caractère. J'ai essayé de garder le code lui-même compact, mais il s'additionne toujours.
d
est la largeur de la porte,w
la largeur de chaque mur de briques.la source
c(char*s){for(;*s;)putchar(*s++);}
==>#define c printf
;r(n,c){for(j=0;j++<n;)putchar(c);}
==>r(n,C){while(n--)putchar(C);}