Tout hexagone ordinaire peut être carrelé de diamants, par exemple comme ceci:
______
/_/_/\_\
/_/\_\/\_\
/\_\/_/\/_/\
\/_/\_\/_/\/
\_\/_/\_\/
\_\_\/_/
Nous considérerons ce qui précède comme un carrelage de taille 1
(puisque les côtés des diamants sont constitués d'un /
ou de \
chacun). Le même pavage de taille 2
ressemblerait à:
____________
/ / /\ \
/___/___/ \___\
/ /\ \ /\ \
/___/ \___\/ \___\
/\ \ / /\ / /\
/ \___\/___/ \/___/ \
\ / /\ \ / /\ /
\/___/ \___\/___/ \/
\ \ / /\ \ /
\___\/___/ \___\/
\ \ \ / /
\___\___\/___/
Votre tâche consiste à recevoir un tel pavage d'art ASCII (de taille 1
) en entrée, avec un entier positif N
(en décimal ou unaire), spécifiant la taille de la sortie souhaitée. Vous devez ensuite sortir une version agrandie du même pavage.
Notez que l' hexagone peut être de n'importe quelle taille et aussi petit que 1x1x1 (contenant trois diamants).
Ni l'entrée ni la sortie ne doivent contenir d'espaces de fin, ni plus d'espaces de tête que nécessaire pour aligner la forme hexagonale. L'entrée et la sortie peuvent éventuellement contenir une seule nouvelle ligne de fin (ce choix ne doit pas nécessairement être le même pour l'entrée et la sortie).
Vous pouvez écrire un programme ou une fonction, en prenant une entrée via STDIN (ou l'alternative la plus proche), un argument de ligne de commande ou un argument de fonction et en sortant le résultat via STDOUT (ou l'alternative la plus proche), une valeur de retour de fonction ou un paramètre de fonction (out).
Il s'agit du code golf, donc la réponse la plus courte (en octets) en victoires.
Exemples de pavages
Voici une poignée de pavages d'entrée que vous pouvez utiliser pour tester votre soumission.
__
/_/\
\_\/
____
/_/\_\
/\_\/_/\
\/_/\_\/
\_\/_/
______
/_/_/\_\
/_/\_\/\_\
/\_\/_/\/_/\
\/_/\_\/_/\/
\_\/_/\_\/
\_\_\/_/
________
/_/\_\_\_\
/\_\/\_\_\_\
/\/_/\/_/_/\_\
/\/\_\/_/_/\/\_\
\/\/_/\_\_\/\/_/
\/\_\/_/\_\/_/
\/\_\_\/_/_/
\/_/_/_/_/
L'extrait de code suivant contient les sorties correspondantes pour les entrées N = 1
via N = 6
.
__
/_/\
\_\/
____
/ /\
/___/ \
\ \ /
\___\/
______
/ /\
/ / \
/_____/ \
\ \ /
\ \ /
\_____\/
________
/ /\
/ / \
/ / \
/_______/ \
\ \ /
\ \ /
\ \ /
\_______\/
__________
/ /\
/ / \
/ / \
/ / \
/_________/ \
\ \ /
\ \ /
\ \ /
\ \ /
\_________\/
____________
/ /\
/ / \
/ / \
/ / \
/ / \
/___________/ \
\ \ /
\ \ /
\ \ /
\ \ /
\ \ /
\___________\/
____
/_/\_\
/\_\/_/\
\/_/\_\/
\_\/_/
________
/ /\ \
/___/ \___\
/\ \ / /\
/ \___\/___/ \
\ / /\ \ /
\/___/ \___\/
\ \ / /
\___\/___/
____________
/ /\ \
/ / \ \
/_____/ \_____\
/\ \ / /\
/ \ \ / / \
/ \_____\/_____/ \
\ / /\ \ /
\ / / \ \ /
\/_____/ \_____\/
\ \ / /
\ \ / /
\_____\/_____/
________________
/ /\ \
/ / \ \
/ / \ \
/_______/ \_______\
/\ \ / /\
/ \ \ / / \
/ \ \ / / \
/ \_______\/_______/ \
\ / /\ \ /
\ / / \ \ /
\ / / \ \ /
\/_______/ \_______\/
\ \ / /
\ \ / /
\ \ / /
\_______\/_______/
____________________
/ /\ \
/ / \ \
/ / \ \
/ / \ \
/_________/ \_________\
/\ \ / /\
/ \ \ / / \
/ \ \ / / \
/ \ \ / / \
/ \_________\/_________/ \
\ / /\ \ /
\ / / \ \ /
\ / / \ \ /
\ / / \ \ /
\/_________/ \_________\/
\ \ / /
\ \ / /
\ \ / /
\ \ / /
\_________\/_________/
________________________
/ /\ \
/ / \ \
/ / \ \
/ / \ \
/ / \ \
/___________/ \___________\
/\ \ / /\
/ \ \ / / \
/ \ \ / / \
/ \ \ / / \
/ \ \ / / \
/ \___________\/___________/ \
\ / /\ \ /
\ / / \ \ /
\ / / \ \ /
\ / / \ \ /
\ / / \ \ /
\/___________/ \___________\/
\ \ / /
\ \ / /
\ \ / /
\ \ / /
\ \ / /
\___________\/___________/
______
/_/_/\_\
/_/\_\/\_\
/\_\/_/\/_/\
\/_/\_\/_/\/
\_\/_/\_\/
\_\_\/_/
____________
/ / /\ \
/___/___/ \___\
/ /\ \ /\ \
/___/ \___\/ \___\
/\ \ / /\ / /\
/ \___\/___/ \/___/ \
\ / /\ \ / /\ /
\/___/ \___\/___/ \/
\ \ / /\ \ /
\___\/___/ \___\/
\ \ \ / /
\___\___\/___/
__________________
/ / /\ \
/ / / \ \
/_____/_____/ \_____\
/ /\ \ /\ \
/ / \ \ / \ \
/_____/ \_____\/ \_____\
/\ \ / /\ / /\
/ \ \ / / \ / / \
/ \_____\/_____/ \/_____/ \
\ / /\ \ / /\ /
\ / / \ \ / / \ /
\/_____/ \_____\/_____/ \/
\ \ / /\ \ /
\ \ / / \ \ /
\_____\/_____/ \_____\/
\ \ \ / /
\ \ \ / /
\_____\_____\/_____/
________________________
/ / /\ \
/ / / \ \
/ / / \ \
/_______/_______/ \_______\
/ /\ \ /\ \
/ / \ \ / \ \
/ / \ \ / \ \
/_______/ \_______\/ \_______\
/\ \ / /\ / /\
/ \ \ / / \ / / \
/ \ \ / / \ / / \
/ \_______\/_______/ \/_______/ \
\ / /\ \ / /\ /
\ / / \ \ / / \ /
\ / / \ \ / / \ /
\/_______/ \_______\/_______/ \/
\ \ / /\ \ /
\ \ / / \ \ /
\ \ / / \ \ /
\_______\/_______/ \_______\/
\ \ \ / /
\ \ \ / /
\ \ \ / /
\_______\_______\/_______/
______________________________
/ / /\ \
/ / / \ \
/ / / \ \
/ / / \ \
/_________/_________/ \_________\
/ /\ \ /\ \
/ / \ \ / \ \
/ / \ \ / \ \
/ / \ \ / \ \
/_________/ \_________\/ \_________\
/\ \ / /\ / /\
/ \ \ / / \ / / \
/ \ \ / / \ / / \
/ \ \ / / \ / / \
/ \_________\/_________/ \/_________/ \
\ / /\ \ / /\ /
\ / / \ \ / / \ /
\ / / \ \ / / \ /
\ / / \ \ / / \ /
\/_________/ \_________\/_________/ \/
\ \ / /\ \ /
\ \ / / \ \ /
\ \ / / \ \ /
\ \ / / \ \ /
\_________\/_________/ \_________\/
\ \ \ / /
\ \ \ / /
\ \ \ / /
\ \ \ / /
\_________\_________\/_________/
____________________________________
/ / /\ \
/ / / \ \
/ / / \ \
/ / / \ \
/ / / \ \
/___________/___________/ \___________\
/ /\ \ /\ \
/ / \ \ / \ \
/ / \ \ / \ \
/ / \ \ / \ \
/ / \ \ / \ \
/___________/ \___________\/ \___________\
/\ \ / /\ / /\
/ \ \ / / \ / / \
/ \ \ / / \ / / \
/ \ \ / / \ / / \
/ \ \ / / \ / / \
/ \___________\/___________/ \/___________/ \
\ / /\ \ / /\ /
\ / / \ \ / / \ /
\ / / \ \ / / \ /
\ / / \ \ / / \ /
\ / / \ \ / / \ /
\/___________/ \___________\/___________/ \/
\ \ / /\ \ /
\ \ / / \ \ /
\ \ / / \ \ /
\ \ / / \ \ /
\ \ / / \ \ /
\___________\/___________/ \___________\/
\ \ \ / /
\ \ \ / /
\ \ \ / /
\ \ \ / /
\ \ \ / /
\___________\___________\/___________/
________
/_/\_\_\_\
/\_\/\_\_\_\
/\/_/\/_/_/\_\
/\/\_\/_/_/\/\_\
\/\/_/\_\_\/\/_/
\/\_\/_/\_\/_/
\/\_\_\/_/_/
\/_/_/_/_/
________________
/ /\ \ \ \
/___/ \___\___\___\
/\ \ /\ \ \ \
/ \___\/ \___\___\___\
/\ / /\ / / /\ \
/ \/___/ \/___/___/ \___\
/\ /\ \ / / /\ /\ \
/ \/ \___\/___/___/ \/ \___\
\ /\ / /\ \ \ /\ / /
\/ \/___/ \___\___\/ \/___/
\ /\ \ / /\ \ / /
\/ \___\/___/ \___\/___/
\ /\ \ \ / / /
\/ \___\___\/___/___/
\ / / / / /
\/___/___/___/___/
________________________
/ /\ \ \ \
/ / \ \ \ \
/_____/ \_____\_____\_____\
/\ \ /\ \ \ \
/ \ \ / \ \ \ \
/ \_____\/ \_____\_____\_____\
/\ / /\ / / /\ \
/ \ / / \ / / / \ \
/ \/_____/ \/_____/_____/ \_____\
/\ /\ \ / / /\ /\ \
/ \ / \ \ / / / \ / \ \
/ \/ \_____\/_____/_____/ \/ \_____\
\ /\ / /\ \ \ /\ / /
\ / \ / / \ \ \ / \ / /
\/ \/_____/ \_____\_____\/ \/_____/
\ /\ \ / /\ \ / /
\ / \ \ / / \ \ / /
\/ \_____\/_____/ \_____\/_____/
\ /\ \ \ / / /
\ / \ \ \ / / /
\/ \_____\_____\/_____/_____/
\ / / / / /
\ / / / / /
\/_____/_____/_____/_____/
________________________________
/ /\ \ \ \
/ / \ \ \ \
/ / \ \ \ \
/_______/ \_______\_______\_______\
/\ \ /\ \ \ \
/ \ \ / \ \ \ \
/ \ \ / \ \ \ \
/ \_______\/ \_______\_______\_______\
/\ / /\ / / /\ \
/ \ / / \ / / / \ \
/ \ / / \ / / / \ \
/ \/_______/ \/_______/_______/ \_______\
/\ /\ \ / / /\ /\ \
/ \ / \ \ / / / \ / \ \
/ \ / \ \ / / / \ / \ \
/ \/ \_______\/_______/_______/ \/ \_______\
\ /\ / /\ \ \ /\ / /
\ / \ / / \ \ \ / \ / /
\ / \ / / \ \ \ / \ / /
\/ \/_______/ \_______\_______\/ \/_______/
\ /\ \ / /\ \ / /
\ / \ \ / / \ \ / /
\ / \ \ / / \ \ / /
\/ \_______\/_______/ \_______\/_______/
\ /\ \ \ / / /
\ / \ \ \ / / /
\ / \ \ \ / / /
\/ \_______\_______\/_______/_______/
\ / / / / /
\ / / / / /
\ / / / / /
\/_______/_______/_______/_______/
________________________________________
/ /\ \ \ \
/ / \ \ \ \
/ / \ \ \ \
/ / \ \ \ \
/_________/ \_________\_________\_________\
/\ \ /\ \ \ \
/ \ \ / \ \ \ \
/ \ \ / \ \ \ \
/ \ \ / \ \ \ \
/ \_________\/ \_________\_________\_________\
/\ / /\ / / /\ \
/ \ / / \ / / / \ \
/ \ / / \ / / / \ \
/ \ / / \ / / / \ \
/ \/_________/ \/_________/_________/ \_________\
/\ /\ \ / / /\ /\ \
/ \ / \ \ / / / \ / \ \
/ \ / \ \ / / / \ / \ \
/ \ / \ \ / / / \ / \ \
/ \/ \_________\/_________/_________/ \/ \_________\
\ /\ / /\ \ \ /\ / /
\ / \ / / \ \ \ / \ / /
\ / \ / / \ \ \ / \ / /
\ / \ / / \ \ \ / \ / /
\/ \/_________/ \_________\_________\/ \/_________/
\ /\ \ / /\ \ / /
\ / \ \ / / \ \ / /
\ / \ \ / / \ \ / /
\ / \ \ / / \ \ / /
\/ \_________\/_________/ \_________\/_________/
\ /\ \ \ / / /
\ / \ \ \ / / /
\ / \ \ \ / / /
\ / \ \ \ / / /
\/ \_________\_________\/_________/_________/
\ / / / / /
\ / / / / /
\ / / / / /
\ / / / / /
\/_________/_________/_________/_________/
________________________________________________
/ /\ \ \ \
/ / \ \ \ \
/ / \ \ \ \
/ / \ \ \ \
/ / \ \ \ \
/___________/ \___________\___________\___________\
/\ \ /\ \ \ \
/ \ \ / \ \ \ \
/ \ \ / \ \ \ \
/ \ \ / \ \ \ \
/ \ \ / \ \ \ \
/ \___________\/ \___________\___________\___________\
/\ / /\ / / /\ \
/ \ / / \ / / / \ \
/ \ / / \ / / / \ \
/ \ / / \ / / / \ \
/ \ / / \ / / / \ \
/ \/___________/ \/___________/___________/ \___________\
/\ /\ \ / / /\ /\ \
/ \ / \ \ / / / \ / \ \
/ \ / \ \ / / / \ / \ \
/ \ / \ \ / / / \ / \ \
/ \ / \ \ / / / \ / \ \
/ \/ \___________\/___________/___________/ \/ \___________\
\ /\ / /\ \ \ /\ / /
\ / \ / / \ \ \ / \ / /
\ / \ / / \ \ \ / \ / /
\ / \ / / \ \ \ / \ / /
\ / \ / / \ \ \ / \ / /
\/ \/___________/ \___________\___________\/ \/___________/
\ /\ \ / /\ \ / /
\ / \ \ / / \ \ / /
\ / \ \ / / \ \ / /
\ / \ \ / / \ \ / /
\ / \ \ / / \ \ / /
\/ \___________\/___________/ \___________\/___________/
\ /\ \ \ / / /
\ / \ \ \ / / /
\ / \ \ \ / / /
\ / \ \ \ / / /
\ / \ \ \ / / /
\/ \___________\___________\/___________/___________/
\ / / / / /
\ / / / / /
\ / / / / /
\ / / / / /
\ / / / / /
\/___________/___________/___________/___________/
N-1
des lignes vides en tête. :(Réponses:
CJam,
85797672 octetsLa taille doit être sur la première ligne. Et le diamant suit.
Pas très bien joué au golf ... Et la moitié des personnages venaient des détails.
Explications (de la version précédente)
la source
Python 2, 164
Sortie sur les cas de test.
Alors, que se passe-t-il ici?
L'idée principale est que chaque personnage de l'original explose dans un
n*n
bloc. Par exemple, pour n = 4,/
pourrait devenirLe caractère d'origine apparaît une fois sur chaque ligne et il y a un rembourrage de chaque côté. Ici, c'est
à gauche,
et
_
à droite. Seule la rangée inférieure peut être rembourrée'_'
; le reste est toujours' '
.La principale difficulté est que le rembourrage à droite peut dépendre du prochain symbole. Plus précisément,
'/ '
a un rembourrage différent de'/_'
, nous aurions donc besoin d'un peu d'anticipation. De plus, pour éviter de laisser des espaces, nous devons noter que nous sommes au dernier symbole et nous abstenir de remplir à droite.Nous avons surmonté ces deux problèmes en remplissant uniquement à gauche le caractère actuel. Lorsque nous le faisons, nous effectuons également le remplissage à droite du caractère précédent en utilisant le symbole de remplissage actuel. Ainsi, nous imprimons le remplissage droit dû au caractère précédent, le remplissage gauche du caractère actuel, puis le caractère actuel. Nous stockons également le montant de la «dette» de rembourrage que le prochain personnage devra payer.
Passons maintenant en revue le code.
La chaîne d'entrée est
s
et le facteur d'échelle estn
. Nous allons ligne par ligne, en imprimant desn
lignes pour chaque ligne d'entréeW
, avec les copies indexéesj=n,n-1,...,2,1
. La première ligne n'est copiée qu'une seule fois, ce que nous réalisons en initialisantj
à 1 mais en la modifiant dansn
chaque boucle.Nous parcourons la ligne d'entrée, accumulant la ligne à imprimer
O
. Tout d'abord, nous déterminons le caractère de remplissage appropriéq
, qui est un trait de soulignement si nous sommes sur la dernière ligne et que le caractère actuel ou précédent est un trait de soulignement, et sinon un espace.Ensuite, nous décidons de la quantité de rembourrage à mettre à gauche (
e
). Pour/
, c'estj-1
(décroissant avec le nombre de copies de ligne décroissant), et le complémentairen-j
pour\
. Nous traitons les autres personnages de la même manière. Par exemple, bien qu'il_
semble donner une rangée den
traits de soulignement, il donne en fait un seul trait de soulignement, complété par des traits de soulignement à gauche et à droite. Cela semble inefficace, mais cela nous permet de travailler avec_
etdans le même cadre que
/
et\
La position du trait de soulignement "central" n'a pas d'importance, nous le regroupons doncavec
\
; ce choix permet également à la rangée supérieure de fonctionner sans boîtier spécial.Ensuite, nous ajoutons à la chaîne de sortie. Nous avons déterminé le symbole de remplissage
q
et le montant de remplissage actuele
, mais nous devons également nous souvenir de la detted
de remplissage du symbole précédent. Donc, nous ajoutonsq*(e+d)
. Ensuite, nous ajoutons le symbole actuelc
, sauf que nous devons éviter les traits de soulignement dans une ligne non inférieure, que nous corrigeons en convertissant les traits de soulignement en symbole de remplissage.Enfin, nous enregistrons le montant de la dette de remplissage, qui est le complément
n+~d
du montant de remplissage à gauche actuel. Nous enregistrons également le symbole actuel dansp
, afin que nous sachions plus tard si le symbole précédent l'était_
.la source
JavaScript ( ES6 ) 274
281 289 338la source
Python 2,
2172111951941906 octets grâce au Sp3000.
Appelez
m
avec le premier argument étant le diamant sous forme de chaîne et le deuxième argument le numéro de répétition.Ceci est basé sur une séquence de remplacement de chaîne en 3 étapes:
/\
par/ \
, le nombre d'espaces intermédiaires allant de 2 à 2 * (n-1) sur les lignes.\/
par\ /
, le nombre d'espaces intermédiaires passant de 2 * (n-1) à 2 sur les lignes.Ensuite, il y a une variété de déblayage pour obtenir les bons espaces de tête et obtenir la première ligne droite.
Notez que la dernière ligne du programme doit être une tabulation et non 4 espaces. Markdown ne prend pas en charge les onglets.
la source
(i+(n-i+~i)*(d[-1]>f)) --> [i,n+~i][d[-1]>f]
et vous n'utilisez'_'
qu'une seule fois, vous perdez donc un octet en la définissant.Python,
272238228243 octetsVersion mise à jour, prend désormais une seule chaîne en entrée, au lieu d'une séquence de chaînes. Supprime également les espaces de fin qui étaient présents dans la version précédente. Malheureusement, ces changements augmentent la taille.
Version avec espace blanc et instructions divisées en unités plus petites pour plus de lisibilité:
L'approche de base ici est:
N
, générant une ligne de sortie dans chaque itération de boucle. Il existe un cas particulier pour la première ligne, où seule la dernière ligne de sortie est générée, pour éviter de générer des lignes vides au début de la sortie.N
caractères, où:N
espaces.N
espaces pour les premièresN -1
itérations de boucle et desN
traits de soulignement pour la dernière itération de boucle.N - 1
espaces ou de traits de soulignement.La partie la plus délicate ici est que le remplissage des barres obliques / barres obliques inverses utilise des espaces ou des traits de soulignement en fonction du caractère d'entrée suivant (pour les barres obliques) ou précédent (pour les barres obliques inverses). Cela ne semblait pas bien correspondre à la stratégie de substitution de chaînes.
Ce que j'ai fait pour résoudre ce problème, c'est que je remplace d'abord certaines combinaisons de deux caractères par des caractères différents, afin de pouvoir les traiter différemment lors de la substitution réelle. Par exemple,
/_
est remplacé par(_
. Après cela, il(
s'agit effectivement d'une "barre oblique suivie d'un trait de soulignement", qui peut ensuite être remplacée en conséquence.Programme principal utilisé pour tester la fonction:
la source
n-1-k
estn+~k
.rstrip()
pour 9 caractères supplémentaires. J'espère que je peux faire mieux, et j'ai également trouvé un moyen de découper 5 caractères.sys.stdin
n'est pas un paramètre d'entrée autorisé - vous devez manipuler la chaîne elle-même.sys.stdin
etint(sys.argv[1])
vous ne les obtiendrez pas gratuitement en vous attendant à ce qu'ils soient passés en tant que variables (si c'était un jeu équitable, vous pouvez également vous attendre à des alias pourrange
et à remplacer` et tout ce que vous devez prédéfinir) .stdin
et une liste de chaînes sont des séquences de chaînes.Perl, 132
Entrée combinée STDIN et ARGV. Exemple:
la source
Rubis 236
237Test en ligne: http://ideone.com/e6XakQ
Voici le code avant de jouer au golf:
la source