
E' abbastanza da nerd, ma è favoloso

Per chi ha matlab, gli è sufficiente copiare e inviare il file nella command window o altrimenti creare un M-file, salvare e farlo girare

%% auguri amici!!!!
clear all
close all
clc
%% scritta (beceramente copiata da un giornale di punto croce, con somma gioia della fuchessa...)
x_a=[3,2,2,3,4,5,6,7,8,9,10,11,11,10,9,9,8,8,8,8,7,7,7,6,6,5,4,3,2,1,2,3,4,5,6,9,10,11,12,13,14,15,13,13,13,13,13,12,12,12,12,11,11,11];
x_u=[2,1,1,2,3,4,5,6,7,8,9,9,9,8,8,8,7,7,7,6,6,6,7,8,9,10,11,12,10,10,11,11,11,12,12,12,13,13,14,14];
x_g=[8,9,10,11,11,10,9,8,7,6,5,4,3,3,2,2,1,1,1,1,2,2,3,4,5,6,7,8,9,10,10,10,10,9,9,8,7,6,5,4,3,2,3,4,5,6,7,8,10];
x_r=[2,1,1,2,3,4,5,6,7,8,9,8,8,7,7,7,6,6,6,5,5,4,3,2,10,11,12,12,12,12,12,11,10,9,8,8,9,10,10,10,11,12];
x_i=[3,2,2,3,4,5,6,7,8,9,10,11,10,10,10,10,9,9,9,9,8,8,7,6,5,4,3,2,1];
x_m=[2,1,1,2,3,4,5,6,7,8,9,9,9,8,8,8,7,7,7,6,6,6,5,4,3,2,1,10,11,11,11,11,10,10,10,11,12,12,12,12,13,14,15,16,17,18,18,18,17,17,16,16,16,15,15,15,14,14,14];
x_c=[8,9,10,11,11,10,9,8,7,6,5,4,3,3,2,2,2,1,1,1,1,1,2,2,3,4,5,6,7,8,9,9];
x_pto=[1,2,2,3,3,3,4,4,4,5,5,6,6,6];
x_a1=x_a;
x_u1=x_u+(max(x_a1)+2)*ones(size(x_u));
x_g1=x_g+(max(x_u1)+2)*ones(size(x_g));
x_u2=x_u+(max(x_g1)+2)*ones(size(x_u));
x_r1=x_r+(max(x_u2)+2)*ones(size(x_r));
x_i1=x_i+(max(x_r1)+2)*ones(size(x_i));
lun_auguri=max(x_i1);
lun_amici=max(x_a)+max(x_m)+2*max(x_i)+max(x_c);
if lun_auguri >= lun_amici
shift=10+lun_auguri-lun_amici;
end
x_a2=x_a+shift*ones(size(x_a));
x_m1=x_m+(max(x_a2)+2)*ones(size(x_m));
x_i2=x_i+(max(x_m1)+2)*ones(size(x_i));
x_c1=x_c+(max(x_i2)+2)*ones(size(x_c));
x_i3=x_i+(max(x_c1)+2)*ones(size(x_i));
x_pto1=x_pto+(max(x_i3)+2)*ones(size(x_pto));
x=[x_a1,x_u1,x_g1,x_u2,x_r1,x_i1,x_a2,x_m1,x_i2,x_c1,x_i3,x_pto1];
y_a=[6,5,4,3,2,2,1,1,1,1,1,1,3,4,5,6,6,7,8,9,8,9,10,11,12,13,14,14,14,13,12,11,10,9,9,9,9,9,2,2,2,2,3,4,5,6,7,8,9,10,11,12,13,14];
y_u=[6,5,4,3,2,2,1,1,1,1,2,3,4,5,6,7,8,9,10,11,12,13,14,14,13,13,14,13,12,11,10,9,8,7,6,5,4,3,2,1];
y_g=[4,5,5,4,3,2,1,1,1,1,1,2,3,4,5,6,7,8,9,10,11,12,13,13,13,13,12,12,11,10,11,12,13,14,15,16,17,18,18,18,18,17,16,16,16,15,15,15,15];
y_r=[6,5,4,3,2,2,1,1,1,1,1,3,4,5,6,7,8,9,10,11,12,13,14,14,2,2,3,4,5,6,7,8,9,8,8,9,10,11,12,13,14,13];
y_i=[5,4,3,2,2,1,1,1,1,1,1,1,2,3,4,5,6,7,8,9,10,11,12,13,14,14,14,14,14];
y_m=[5,4,3,2,2,1,1,1,1,1,2,3,4,5,6,7,8,9,10,10,11,12,13,14,14,14,13,3,4,5,6,7,8,9,10,11,10,9,8,6,5,4,3,2,1,1,2,3,4,5,6,7,8,9,10,11,12,13,14];
y_c=[4,5,5,4,3,2,1,1,1,1,1,2,3,4,4,5,6,7,8,9,10,11,12,13,13,14,14,14,14,13,12,11];
y_pto=[14,14,13,11,10,9,8,7,6,5,4,3,2,1];
y_auguri=[y_a,y_u,y_g,y_u,y_r,y_i];
y_amici_provv=[y_a,y_m,y_i,y_c,y_i,y_pto];
acapo=(5+max(y_auguri))*ones(size(y_amici_provv));
y_amici=y_amici_provv+acapo;
y=-[y_auguri,y_amici];
i=sqrt(-1);
s=x+i*y;
%% ascissa curvilinea punti in ordine
n=length(x);
%% randomizzazione
caso=round(rand(size(x))*n);
prova=10;
fregawhile=2;
nit=0;
while prova~=fregawhile
clear fregawhile
clear prova
fregawhile=10;
prova=10;
for kk=1:n
pos_contr=find(caso==caso(kk));
check=find(pos_contr~=kk);
caso(pos_contr(check(:)))=round(rand(size(check))*n);
clear check
if pos_contr==kk*ones(size(pos_contr))
s=1;
else
prova=prova+1;
end
clear pos_contr
end
nit=nit+1;
end
%% verifica non zeri
if min(caso)==0
a=find(caso==0);
sommaok=n*(n+1)/2;
delta=sommaok-sum(caso);
caso(a)=delta;
end
%% disegno
l=5;
dt= 1/1000;
ampiezza=[-range(x) range(x) -range(y) range(y)]*1.2/2;
centro=[mean(x) mean(x) mean(y) mean(y)];
dist=find(round(abs(x+i*y))==max(round(abs(x+i*y))));
pos_dist=[min(dist):1:max(dist)];
pos=[length(x)-length(x_pto1)+1:1:length(x)];
figure(3)
axis([ampiezza+centro])
title('BUON NATALE by Fede','Color','r','FontSize',30,'FontName','Jokerman')
set(gcf, 'color', 'green');
set(gca, 'color', 'cyan');
set(gcf, 'InvertHardCopy', 'off');
pause(2)
hold all
for kk=1:n
plot(x(caso(kk)),y(caso(kk)),'ro','MarkerSize',l,'MarkerEdgeColor','r','MarkerFaceColor','r')
pause(dt)
end
pause(1)
plot(x(pos),y(pos),'y*','MarkerSize',4*l)
plot(x(pos),y(pos),'y*','MarkerSize',l)
% pause(0.5)
% menu ('scusate il kitch...','ok, perdonata...');
