u_0 = 0
u_1 = 5
u_2 = 9
u_3 = 12
u_4 = 14
u_5 = 15
function plotStr(coord) {
const str = ''
//plot everything as X except idx as O
const lines = []
for(let i = 0; i < 5; ++i) {
line = Array(9).fill(' ')
for(let j = 0; j < 5-i; ++j) {
if (coord.i === i && coord.j === j) {
line[i+j*2] = 'W'
} else {
line[i+j*2] = 'X'
}
}
lines.push(line)
}
return lines.map(line => line.join('')).reverse().join('\n')
}
function u(k) {
return 6*k - k*(k+1)/2
}
function getCoord(x) {
const k = Math.floor(-Math.sqrt(121/4 - 2*x) + 11/2)
return {
i: k,
j: x-u(k)
}
}
for(let i = 0; i< 15; ++i){
console.log(plotStr(getCoord(i)))
}
9
5 8
2 4 7
0 1 3 6
GaBuZoMeu a écrit:Moi,si j'étais ton robot, je préférerais construire la pyramide dans cet ordre :
- Code: Tout sélectionner
9
5 8
2 4 7
0 1 3 6
Comme ça, j'aurais moins de boulot pour m'adapter à une demande différente (construire une pyramide de 7 étages au lieu de 5, faire la pyramide la plus haute possible avec un nombre de pièces fixé mais inconnu ...)
fatal_error a écrit:@risu75, Je pensais que tu avais volontairement simplifié le problème.
Mais si c'est vraiment juste associer un index à sa position dans la pyramide, alors moeux vaut faire comme pascal: itere et associe petit a petit les coordonnées a chaque index, que tu stores dans un tableau
Cest plus rapide, moins chiant (mentalement), et a le bon gout de tenir en memoire...
GaBuZoMeu a écrit:Je ne cherche pas non plus à optimiser le temps de cycle.
Je cherche à avoir une approche qui se prête mieux à une formalisation. Avec ma proposition, on peut reprendre par exemple ce que fait fatal_error, en un peu plus simple, et de façon qui puisse servir pour n'importe quelle taille de pyramide.
Dans quel langage programmes-tu ton robot ?
GaBuZoMeu a écrit:Et que fait l'arrondi pour 15.5 ?
GaBuZoMeu a écrit:Bon, ça permet d'avoir un "floor(x)" comme arrondi de x-0.5.
import numpy as np
from matplotlib import pyplot as plt
def pyramide(largeur,hauteur,ecart,nombre) :
for i in range(nombre) :
rang = np.floor(np.sqrt(1+8*i)/2-1/2)
niveau = i-rang*(rang+1)/2
x = rang*(largeur+ecart)-niveau*(largeur+ecart)/2
y = niveau*hauteur
plt.fill([x,x+largeur,x+largeur,x],[y,y,y+hauteur,y+hauteur])
plt.show()
pyramide(20,30,10,100)
from matplotlib import pyplot as plt
def pyramidebis(largeur,hauteur,ecart,nombre) :
reste = nombre
rang = 0
niveau = 0
while reste > 0 :
while niveau <= rang and reste > 0 :
x = (largeur+ecart)*(rang-niveau/2)
y = niveau*hauteur
plt.fill([x,x+largeur,x+largeur,x],\
[y,y,y+hauteur,y+hauteur])
reste -= 1
niveau += 1
rang += 1
niveau = 0
plt.show()
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 9 invités
Tu pars déja ?
Identification
Pas encore inscrit ?
Ou identifiez-vous :