U1 = 0
Un = min { Un∈ℕ \ ∀k∈[1,n-1], Un-Un-k ≠ Un+k-Un }
Un = min { Un∈ℕ \ ∀k∈[1,n-1], Un-Un-k ≠ Un+k-Un }
Category Artwork (Traditional) / Abstract
Species Unspecified / Any
Size 1000 x 694px
File Size 460.6 kB
En voilà une bonne question !
Mais avant tout, une petite mise en contexte. Dans sa dernière vidéo, El JJ a décidé de refaire le Inktober mais avec des illustrations mathématiques. Pour la journée consacrée au thème "sparkle" (étincelle) il a choisi de l'illustrer par la suite du "feu de forêt" qui se défini comme une suite U d'entiers naturels (non nuls dans certaines définitions) telle que pour tout n, U(n) soit MIMIMALE et vérifie la condition suivante : pour tout k, trois éléments de la suite U(n), U(n+k) et U(n+2k) ne soient pas "alignés". Du coup, on sait que les valeurs suivantes NE DOIVENT PAS avoir certaines valeurs (définies par les termes précédents) et qu'il faut prendre le minimum parmi les valeurs restantes.
Mais avant tout, une petite mise en contexte. Dans sa dernière vidéo, El JJ a décidé de refaire le Inktober mais avec des illustrations mathématiques. Pour la journée consacrée au thème "sparkle" (étincelle) il a choisi de l'illustrer par la suite du "feu de forêt" qui se défini comme une suite U d'entiers naturels (non nuls dans certaines définitions) telle que pour tout n, U(n) soit MIMIMALE et vérifie la condition suivante : pour tout k, trois éléments de la suite U(n), U(n+k) et U(n+2k) ne soient pas "alignés". Du coup, on sait que les valeurs suivantes NE DOIVENT PAS avoir certaines valeurs (définies par les termes précédents) et qu'il faut prendre le minimum parmi les valeurs restantes.
Voici le code / script en GNU Octave :
%====================================
% [] = fire3(n)
%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
% Test de la suite du feu de foret
% Retourne 'fire3.png'
%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
% LAEFL - 12/12/2021 - 14:07
%====================================
function [] = fire3(N)
tic;
T = zeros(N,1);
U = repmat((1:N)',[1,2*N]);
U(1,3) = N;
for k = 3:N
[~,t] = min(U(:,k));
T(k) = t-1;
for kk = 1:(k-1)
u = 2*T(k) - T(k-kk);
if u >= 0
U(u+1,k+kk) = 2*N;
endif
endfor
endfor
V = zeros(N,2*N,3,'uint8');
for k = 1:N
V(T(k)+1,k,1) = uint8(255);
endfor
V(:,:,3) = uint8(255*U/(2*N));
imwrite(flip(V,1),'fire3.png');
s = toc;
m = floor(s/60);
s = floor(s - 60*m);
fprintf('\n- Time - %i:%i\n\n',m,s);
endfunction
Bon, c'est pas optimal, mais c'est juste un test !
%====================================
% [] = fire3(n)
%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
% Test de la suite du feu de foret
% Retourne 'fire3.png'
%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
% LAEFL - 12/12/2021 - 14:07
%====================================
function [] = fire3(N)
tic;
T = zeros(N,1);
U = repmat((1:N)',[1,2*N]);
U(1,3) = N;
for k = 3:N
[~,t] = min(U(:,k));
T(k) = t-1;
for kk = 1:(k-1)
u = 2*T(k) - T(k-kk);
if u >= 0
U(u+1,k+kk) = 2*N;
endif
endfor
endfor
V = zeros(N,2*N,3,'uint8');
for k = 1:N
V(T(k)+1,k,1) = uint8(255);
endfor
V(:,:,3) = uint8(255*U/(2*N));
imwrite(flip(V,1),'fire3.png');
s = toc;
m = floor(s/60);
s = floor(s - 60*m);
fprintf('\n- Time - %i:%i\n\n',m,s);
endfunction
Bon, c'est pas optimal, mais c'est juste un test !
Enfin, je me dois de préciser que mon script ne renvoie pas la suite à proprement parler mais une image. Les valeurs de la suite sont données par les pixels rouges (les pixels bleus donnant les valeurs interdites). Le résultat illustré par l'image ci-dessus est une anamorphose suivant les abscisses dont je n'ai plus trop les paramètre en tête (facteur 10 avec les 5 premiers en rouge et les 5 autres en vert je crois).
FA+

Comments