Le théorème de Nichomachus relie le carré d'une somme à la somme de cubes:
et a une belle visualisation géométrique:
Défi: Créez la partie 2d de cette visualisation en ascii.
Vous devrez vous assurer que toutes les démarcations visuelles sont respectées par votre diagramme. Ceci est plus simple à faire avec quatre "couleurs", bien qu'il soit possible d'obtenir avec seulement trois (voir le dernier exemple ci-dessous pour savoir comment). Avec quatre couleurs, vous en utilisez deux pour distinguer les régions d'une "bande" (c'est-à-dire les différentes parties qui constituent un seul cube) et deux pour distinguer les bandes adjacentes. Vous pouvez également utiliser plus de quatre couleurs si vous le souhaitez. Si l'une de ces choses est source de confusion, l'exemple de sortie ci-dessous devrait clarifier.
Entrée sortie
L'entrée est un entier unique supérieur à 0. La sortie est une grille ascii similaire aux exemples ci-dessous, correspondant à la grille aplatie de ce numéro d'entrée dans l'image ci-dessus. Les espaces de début et de fin sont acceptables.
C'est du code golf, avec des règles standards.
Exemples de sorties
N = 1
#
N = 2
#oo
o@@
o@@
N = 3
#oo+++
o@@+++
o@@+++
+++###
+++###
+++###
N = 4
#oo+++oooo
o@@+++oooo
o@@+++@@@@
+++###@@@@
+++###@@@@
+++###@@@@
oo@@@@oooo
oo@@@@oooo
oo@@@@oooo
oo@@@@oooo
N = 5
#oo+++oooo+++++
o@@+++oooo+++++
o@@+++@@@@+++++
+++###@@@@+++++
+++###@@@@+++++
+++###@@@@#####
oo@@@@oooo#####
oo@@@@oooo#####
oo@@@@oooo#####
oo@@@@oooo#####
+++++#####+++++
+++++#####+++++
+++++#####+++++
+++++#####+++++
+++++#####+++++
Version trois couleurs pour N = 4, grâce à @BruceForte:
#oo+++oooo
o##+++oooo
o##+++####
+++ooo####
+++ooo####
+++ooo####
oo####++++
oo####++++
oo####++++
oo####++++
Réponses:
MATL ,
302827 octetsEssayez-le en ligne!
Bonus caractéristiques:
Pour 26 octets , la version modifiée suivante génère une sortie graphique :
Essayez-le sur MATL Online!
L'image demande de la couleur et ne coûte que 7 octets:
Essayez-le sur MATL Online!
Ou utilisez une version plus longue (37 octets) pour voir comment la matrice de caractères est construite progressivement :
Essayez-le sur MATL Online!
Exemple de sorties
Pour l'entrée is
8
, voici la version de base, la sortie graphique et la sortie graphique couleur.Explication
Procédure générale
Une matrice numérique est construite par
N
étapes des couches externe vers interne .N
se les entrées. Chaque étape remplace une partie interne (en haut à gauche) de la matrice précédente. A la fin, les nombres dans la matrice obtenue sont changés en caractères.Exemple
Pour entrer
4
la première matrice estDans un deuxième temps, la matrice
est écrasé dans la moitié supérieure de ce dernier. Puis on fait la même chose avec
et enfin avec
La matrice résultante est
Enfin,
30
est ajouté à chaque entrée et les nombres résultants sont interprétés comme des points de code et convertis en caractères (commençant ainsi à33
, correspondant à!
).Construction des matrices intermédiaires
Pour la saisie
N
, considérez les valeurs décroissantes dek
deN
à1
. Pour chacune d'ellesk
, un vecteur d'entiers allant de1
àk*(k+1)
est généré, puis chaque entrée est divisée park
et arrondie. Par exemple, pourk=4
cela donne (tous les blocs ont une taillek
sauf le dernier):alors que pour
k=3
le résultat serait (tous les blocs ont une taillek
):Ce vecteur est ajouté élément par émission avec une copie transposée de lui-même; et
k
est ensuite ajouté à chaque entrée. Pourk=4
cela donneC'est l'une des matrices intermédiaires montrées ci-dessus, sauf qu'elle est retournée horizontalement et verticalement. Il ne reste donc qu’à retourner cette matrice et à l’écrire dans le coin supérieur gauche de la matrice "accumulée" jusqu’à présent, initialisée en une matrice vide pour la première
k=N
étape ( ).Code
la source
Python 2 ,
187178164162152 152 octets-8 octets grâce à Mr.Xcoder
-1 octet grâce à Stephen
-10 octets grâce à Jonathan Frech
Essayez-le en ligne!
la source
sum(range(y))%y
->y*~-y/2%y
Charbon de bois ,
5046 octetsEssayez-le en ligne! Le lien est vers la version verbeuse du code. Version précédente de 50 octets avec explication: essayez-la en ligne!
Remarque: j'effectue une boucle sur le caractère plutôt que d'essayer de l'affecter directement au personnage,
l
car vous ne pouvez pas affecter directement le résultat de l'indexation d'une chaîne à une variable car il s'agit d'une construction ambiguë dans Charcoal. Heureusement, le nombre d'octets est le même.la source
C (gcc) ,
135128120 octetsEssayez-le en ligne!
Utilise seulement trois couleurs.
Conceptuellement, fonctionne sur une grille pivotée à 180 degrés:
Et calcule les couleurs selon la formule:
la source
gcc -O2
.g(i%m,i/m,n)%3
)?x/k&&y/k
lieu dex>=k&y>=k
R ,
131126123 octets3 octets sauvés grâce à @Giuseppe
Essayez-le en ligne!
Ceci utilise le même algorithme que la réponse MATL de @LuisMendo . La seule différence est que plutôt que de convertir en caractères, la matrice est sortie avec toutes les valeurs mod4 pour garantir que chaque élément est un seul caractère ascii.
la source
for
boucle pour -1 octet :)Python 2 ,
176175 octetsEssayez-le en ligne!
la source
J="".join;
(+10 octets) et remplacez les deux"".join
s (-2 * 7 = -14 octets) parJ
(+2 octets), vous pouvez enregistrer un octet (car il doit y avoir un espace supplémentaire après leprint
; +1 octet) .