Le premier cube Ascii terminé par un prédécesseur (PAC 1) est un cube simple dont la longueur du côté est 1 et se présente comme suit:
/////\
///// \
\\\\\ /
\\\\\/
Le PAC 2 est une forme géométrique telle que sa combinaison avec son prédécesseur (le PAC 1 ) complète un cube de côté 2:
front back
/////////\ /////////\
///////// \ ///////// \
/////\\\\\ \ ///////// \
///// \\\\\ \ ///////// \
\\\\\ ///// / \\\\\\\\\ /
\\\\\///// / \\\\\\\\\ /
\\\\\\\\\ / \\\\\\\\\ /
\\\\\\\\\/ \\\\\\\\\/
Parce que la vision arrière est assez ennuyeuse, nous ne sommes intéressés que par la vue de face .
Il en va de même pour le CIP 3 : avec quelques réflexions visuelles, le CIP 2 peut être retourné et branché au CIP 3 pour former un cube de 3 cm de côté solide:
/////////////\
///////////// \
/////\\\\\\\\\ \
///// \\\\\\\\\ \
///// /////\\\\\ \
///// ///// \\\\\ \
\\\\\ \\\\\ ///// /
\\\\\ \\\\\///// /
\\\\\ ///////// /
\\\\\///////// /
\\\\\\\\\\\\\ /
\\\\\\\\\\\\\/
Et ainsi de suite avec PAC 4 :
/////////////////\
///////////////// \
/////\\\\\\\\\\\\\ \
///// \\\\\\\\\\\\\ \
///// /////////\\\\\ \
///// ///////// \\\\\ \
///// /////\\\\\ \\\\\ \
///// ///// \\\\\ \\\\\ \
\\\\\ \\\\\ ///// ///// /
\\\\\ \\\\\///// ///// /
\\\\\ \\\\\\\\\ ///// /
\\\\\ \\\\\\\\\///// /
\\\\\ ///////////// /
\\\\\///////////// /
\\\\\\\\\\\\\\\\\ /
\\\\\\\\\\\\\\\\\/
Tâche:
Ecrivez un programme complet ou une fonction qui prend un entier positif n en entrée et renvoie ou affiche la vue de face correspondante de PAC n exactement comme indiqué ci-dessus. Un espace blanc de fuite supplémentaire est acceptable.
C'est du code-golf , alors essayez d'utiliser le moins d'octets possible dans la langue de votre choix.
Réponses:
JavaScript (ES6), 229 octets
la source
Lot,
559432400 octetsExplication: La moitié inférieure du cube est dessinée en reflétant la moitié supérieure. Les moitiés sont ensuite divisées en
septsixtroisbandes, conformément à ce diagramme représentant la moitié supérieure:Edit: Economisé plus de 20% en améliorant le code qui reflétait le haut vers le bas. Épargné de près de 10% en fusionnant les bandes de deux et trois médianes.
la source
Toile , 36 octets
Essayez-le ici!
la source
SOGL V0.12 , 32 octets
Essayez-le ici!
Explication simple:
1. Effectuez
une itération pour chacun des éléments 1..x 2. Créez une
⌐
forme avec la largeuri*4+1
et la hauteur =(0-indexed)i // 2
3. Remplissez-la de manière à ce qu'elle ressemble à
⦧
4. ajoutez une forme "\" à celle-ci horizontalement
5. insérez l'étape précédente à l'intérieur de ce 6. inversé après tout, miroir verticalement
programme complet:
la source
Haskell ,
232227224187183180 180175 octetsLa fonction anonyme dans la dernière ligne prend un argument entier et génère les lignes à imprimer pour un cube de cette taille.
L'idée est d'utiliser la récursivité pour dessiner des cubes plus gros à partir de petits. Regardons la moitié supérieure d'un cube de taille 1. Ensuite, nous obtenons la moitié supérieure d'un cube de taille 2 en reflétant l'ancienne moitié et en ajoutant un motif fixe de barres obliques et d'espaces autour de lui:
Donc, l'algorithme pour dessiner un cube de taille n est
/
s et\
s), pad////
et\
autour.////
n plus/\
et/ \
.la source
g=
.(\l->r l++k(k m)l)
est le même queliftM2 (++) r (k(k m))
, qui peut à nouveau être raccourci(++).r<*>k(k m)
. Essayez-le en ligne!Ruby ,
174 167 169167 octetsEssayez-le en ligne!
crée un tableau de
n*4
chaînes remplies d'espaces, puis le remplace par des cubes de plus en plus petits.Code commenté
la source
Python 2 ,
254234226203201199 octetsEnfin sous 200!
Des trucs:
Cette fonction est utilisée pour échanger toutes
\
avec/
et vice versaun peu long en python2 - fonctionne uniquement avec unicode
Découvrez ce pour la façon dont cela fonctionne
Génère de nouvelles deux premières lignes pour chaque itération
Pour l'instant, je ne trouve pas de moyen compact de recevoir ces lignes de l'itération précédente.
Inverser toutes les lignes de l'itération précédente et échanger les barres obliques
Copier la moitié supérieure, inversée par des lignes, permuter les barres obliques
Méthode soignée pour les chaînes de rembourrage central
Essayez-le en ligne!
la source
Stax , 36 octets
Exécuter et déboguer
Cette approche construit la moitié supérieure de la sortie de manière itérative. Il exécute le bloc principal le nombre de fois spécifié. Dans ce bloc, chaque ligne est mise en miroir et son préfixe et son suffixe sont ajoutés. Les deux premières lignes sont ajoutées séparément. Lorsque toutes les lignes sont construites, elles sont centrées, puis le bas est mis en miroir verticalement.
Voici le programme déballé, non-golfé et commenté.
Exécuter celui-ci
la source
Haskell, 193 octets
Plus long que le gagnant, mais l'approche peut être intéressante - utilise même
cos
etpi
:)Code:
Exécutez-le comme ceci:
Ce programme "dessine" de nombreux diamants comme celui-ci:
La fonction
i s e f
"dessine" un diamant de tailles
, oùe, f
sont(abs$z-y)(abs$z+y-1)
.Fonction
w
déplace les diamants tirés pari
pour corriger les lieux.head
utilisé dans sa définition est chargé d'examiner uniquement la couche la plus élevée.Essayez-le ici
la source
Charbon de bois , 42 octets
Essayez-le en ligne! Le lien est vers la version verbeuse du code. Explication:
Dessine les cubes du plus petit au plus grand. (Dessiner du plus grand au plus petit signifiait que je me retrouvais avec une image en miroir pour les nombres impairs qui coûtait trop d'octets à corriger.)
Imprimer une ligne de
/
s. (Cela deviendra le\
s sur la droite, mais le dessin est fait en miroir car il est plus golfeur de refléter à la fin de la boucle.)Imprimer les deux premières lignes de
\
s. (Dessiner tous les\
s dans un polygone signifiait que le curseur se retrouvait dans une position inconfortable, ce qui coûtait trop d'octets à réparer.)Imprimer les quatre rangées de gauche de
\
s. (La cinquième ligne provient du cube précédent.)Déplacer au début du prochain cube.
Réfléchis horizontalement, prêt pour le prochain cube.
Miroir tout verticalement pour compléter le cube.
la source