Quelles chances donnez vous à Daniël ?
Modérateur : Politburo
-
- Fonctionne à 2400 bauds
- Messages : 2362
- Enregistré le : 16 févr. 2008 23:34
- Localisation : Paris 20ème
Re: Quelles chances donnez vous à Daniël ?
Je pouvais chercher longtemps avec un programme naïf sur fx-880P et "affichage" des résultats dans le Bloc-Notes... Mais ce matin, je me suis décidé à adapter tout ça en C et ce soir, c'est plié. J'ai vu.
J'ai l'impression d'avoir vu ça dans un bouquin, mais je n'arrive pas à me rappeler où.
J'ai l'impression d'avoir vu ça dans un bouquin, mais je n'arrive pas à me rappeler où.
Programmeur abscons.
- gege
- Fonctionne à 14400 bauds
- Messages : 7148
- Enregistré le : 31 janv. 2008 14:24
- Localisation : Banlieue Paârisienne
- Contact :
Re: Quelles chances donnez vous à Daniël ?
Bonjour,
Hop un petit programme pour Casio Graph 85 SD (ou pas d'ailleurs) :
Avec ses deux potes sous-programmes :
Et :
On pourrait coller les sous-programmes dans le programme principal mais ça me semble plus clair ainsi.
Le truc affiche le parcours de notre copain, et si on attend assez longtemps...
G.E.
Hop un petit programme pour Casio Graph 85 SD (ou pas d'ailleurs) :
Code : Tout sélectionner
SPIULAM
"N="?→N
0→X:0→Y:{1}→List 1
{2,1,2,‾‾1,1,2,1,‾2,‾2,1,‾2,‾1,‾1,2,‾1,‾2}→List 2:ClrGraph
ViewWindow ‾63,64,1,‾31,32,1
For 1→J To N:1ᴱ99→S
For 1→K To 15 Step 2
X+List 2[K]→T
Y+List 2[K+1]→U
Prog "SPINUM"
If R<S:Then
Prog "SPIFIND"
If 0=I:Then
R→S:T→V:U→W
IfEnd:IfEnd
Next
If 1ᴱ99≤S:Then
"COINCE"▲
{J,X,Y}▲
Return:IfEnd
V→X:W→Y:Augment(List 1,{S})→List 1
PlotOn X,Y
Next
Code : Tout sélectionner
SPINUM
Max({Abs T,Abs U})→P
4P²+3P+1→R
If U=‾P:Then R+T→R:Return:IfEnd:R-2P→R
If T=‾P:Then R-U→R:Return:IfEnd:R-2P→R
If U=P:Then R-T→R:Return:IfEnd:R-2P+U→R
Code : Tout sélectionner
SPIFIND
For Dim List 1→I To 1 Step ‾1
R=List 1[I]=>Return
Next:0→I
Le truc affiche le parcours de notre copain, et si on attend assez longtemps...
G.E.
-
- Fonctionne à 2400 bauds
- Messages : 2362
- Enregistré le : 16 févr. 2008 23:34
- Localisation : Paris 20ème
Re: Quelles chances donnez vous à Daniël ?
Et voici donc mon programme C (créer un projet "console" pour y insérer le source) :
Il y a deux systèmes d'affichage en fonction de la constante SPI (nombre de spires) à modifier avant compilation. Le deuxième adapte la taille de l'affichage à la croissance du patatoïde.
Code : Tout sélectionner
/* Parcours du cavalier dans une spirale carrée, dite "d'Ulam". */
#include <stdio.h>
#include <string.h>
#define PRO "canaspir version Nov 2 2020"
#define SPI 40
int gaaiSpi[2*SPI][2*SPI], gaaiBon[2*SPI][2*SPI], giSpi= 5, giLim= 100;
void Construire ()
{ int i, j, iInf, iSup, n= 0;
for (i=0;i<(2*SPI);++i) for (j=0;j<(2*SPI);++j) gaaiBon[i][j]= 0;
for (i=0;i<SPI;++i)
{
iInf= SPI-i, iSup= SPI+i;
for (j=iInf; j<=iSup; ++j) ++n, gaaiSpi[j][SPI-1-i]= n;
for (j=iInf; j<=iSup; ++j) ++n, gaaiSpi[SPI+i][j]= n;
iSup= SPI-1+i, iInf= SPI-1-i;
for (j=iSup; j>=iInf; --j) ++n, gaaiSpi[j][SPI+i]= n;
for (j=iSup; j>=iInf; --j) ++n, gaaiSpi[SPI-i-1][j]= n;
}
}
void Cellule(int iL, int iC)
{ int iN= 1, iD; char c;
if (gaaiSpi[iL][iC]<1000) iN= 2;
if (gaaiSpi[iL][iC]<100) iN= 3;
if (gaaiSpi[iL][iC]<10) iN= 4;
if (iC)
{ iD= gaaiSpi[iL][iC] - gaaiSpi[iL][iC-1];
if (iD==1 || iD==-1) c='_'; else c=' '; }
for (;iN>0;--iN) printf ("%c", c); printf ("%d", gaaiSpi[iL][iC]);
}
void NroBond (int iB, char *pcN)
{ int i1, i2;
if (!iB) { pcN[0]= ' ', pcN[1]= ' '; return; }
i1= (iB-1)%52, i2= (iB-1)/52;
if (i1<26) pcN[1]='A'+i1; else i1-=26, pcN[1]='a'+i1;
if (i2)
{ --i2; if (i2<26) pcN[0]='A'+i2; else i2-= 26, pcN[0]='a'+i2; }
else pcN[0]=' ';
}
void SurCellule(int iL, int iC)
{ int iD, iBon, i1, i2; char c, acNro[4]= {'-','-',0};
if (iL)
{
iD= gaaiSpi[iL][iC] - gaaiSpi[iL-1][iC];
if (iD==1 || iD==-1) c='|'; else c=' ';
}
else c=' ';
NroBond (gaaiBon[iL][iC], acNro);
printf (" %s %c", acNro, c);
}
void Afficher ()
{ int i, j;
for (i=1;i<(2*SPI-1);++i)
{
for (j=1;j<(2*SPI-1);++j) SurCellule(i, j); printf ("\n");
for (j=1;j<(2*SPI-1);++j) Cellule(i,j); printf ("\n");
}
}
void AffCompact (int iD)
{ int i, j, iInf, iSup;
char acNro[4]= {'-','-',0};
iInf= SPI-1-giSpi, iSup= SPI+giSpi;
for (i=iInf;i<=iSup;++i)
{
for (j=iInf;j<iSup;++j)
if (!gaaiBon[i][j]) printf (" .");
else if (gaaiBon[i][j]<iD) printf ("[]");
else { NroBond (gaaiBon[i][j], acNro); printf ("%s", acNro); }
printf ("\n");
}
}
char EncoreDedans (int *piL, int *piC)
{ int iL, iC, iNL, iNC, iMin=10000;
/*printf ("Entree dans ED : %d,%d).\n", *piL, *piC);*/
iNL= *piL+1, iNC= *piC+2;
if (iNL>=(2*SPI) || iNC>=(2*SPI)) return 'A';
if (!gaaiBon[iNL][iNC] && iMin>gaaiSpi[iNL][iNC])
iL= iNL, iC= iNC, iMin= gaaiSpi[iNL][iNC];
iNL= *piL+2, iNC= *piC+1;
if (iNL>=(2*SPI) || iNC>=(2*SPI)) return 'B';
if (!gaaiBon[iNL][iNC] && iMin>gaaiSpi[iNL][iNC])
iL= iNL, iC= iNC, iMin= gaaiSpi[iNL][iNC];
iNL= *piL+2, iNC= *piC-1;
if (iNL>=(2*SPI) || iNC<0) return 'C';
if (!gaaiBon[iNL][iNC] && iMin>gaaiSpi[iNL][iNC])
iL= iNL, iC= iNC, iMin= gaaiSpi[iNL][iNC];
iNL= *piL+1, iNC= *piC-2;
if (iNL>=(2*SPI) || iNC<0) return 'D';
if (!gaaiBon[iNL][iNC] && iMin>gaaiSpi[iNL][iNC])
iL= iNL, iC= iNC, iMin= gaaiSpi[iNL][iNC];
iNL= *piL-1, iNC= *piC-2;
if (iNL<0 || iNC<0) return 'E';
if (!gaaiBon[iNL][iNC] && iMin>gaaiSpi[iNL][iNC])
iL= iNL, iC= iNC, iMin= gaaiSpi[iNL][iNC];
iNL= *piL-2, iNC= *piC-1;
if (iNL<0 || iNC<0) return 'F';
if (!gaaiBon[iNL][iNC] && iMin>gaaiSpi[iNL][iNC])
iL= iNL, iC= iNC, iMin= gaaiSpi[iNL][iNC];
iNL= *piL-2, iNC= *piC+1;
if (iNL<0 || iNC>=(2*SPI)) return 'G';
if (!gaaiBon[iNL][iNC] && iMin>gaaiSpi[iNL][iNC])
iL= iNL, iC= iNC, iMin= gaaiSpi[iNL][iNC];
iNL= *piL-1, iNC= *piC+2;
if (iNL<0 || iNC>=(2*SPI)) return 'H';
if (!gaaiBon[iNL][iNC] && iMin>gaaiSpi[iNL][iNC])
iL= iNL, iC= iNC, iMin= gaaiSpi[iNL][iNC];
if (iMin==10000)
{ printf ("BLOCAGE en (%d,%d)\n", *piL, *piC); return 'I'; }
if (gaaiSpi[iL][iC]>giLim) ++giSpi, giLim= 4*giSpi*giSpi;
*piL= iL, *piC= iC; return 'o';
}
int main()
{ int n= 1, iL= SPI, iC= SPI-1, iDeb= 1; char cRep= '-';
printf ("DEBUT %s : fait le %s a %s.\n", PRO, __DATE__, __TIME__);
Construire ();
printf ("Au debut : %d en (%d,%d).\n", n, iL, iC);
do
{ gaaiBon[iL][iC]= n;
if (!(n%52))
{ if (SPI<23) Afficher (); else AffCompact (iDeb);
printf ("SAUT %d en case %d (%d,%d)...", n, gaaiSpi[iL][iC], iL, iC);
iDeb= n; getchar(); }
++n; }
while ((cRep= EncoreDedans (&iL, &iC)) == 'o');
if (SPI<23) Afficher (); else AffCompact (iDeb);
printf ("DERNIER BOND : %d en case %d (%d,%d), reponse %c.\n",
n, gaaiSpi[iL][iC], iL, iC, cRep);
printf ("FIN %s, sans erreur.\n", PRO); return 0;
}
Programmeur abscons.
- C.Ret
- Fonctionne à 9600 bauds
- Messages : 3422
- Enregistré le : 31 mai 2008 23:43
- Localisation : N 49°22 E 6°10
Re: Quelles chances donnez vous à Daniël ?
Ah! Ah!
Du C, une CASIO, un Commodore !!!
Heureusement que je m'y suis pris en avance, car mon canasson avance à son pas de sénateur sur 8-bits et en Microsoft BASIC v7-0 !
Et oui, bien que l'échiquier que je lui ai offert soit infini (j'ai d'ailleurs toujours pas fini de le payer), son entêtement conduit à cette fin inéluctable.
Heureusement, un petit SPRMOV 1,151,125 remet tout en place et un SCNCLR 1 permet de le lâcher à nouveau et de le laisser gambader avec un petit RUN.
Nous ne sommes pas les premiers à avoir observé ce résultat : une petite vidéo en anglais montre un illustre personnage qui semble en être ravi ! Je partage son enthousiasme.
Comme vous m'avez donné vos codes, je donne ci-dessous un des miens :
Lignes 5 - 130 Initialisation (page graphique, les variables et tableaux, les coordonnées des huit sauts que sait faire Daniël.
Lignes 200 - 330 : Boucle principale - Daniël est placé et dessiné par un petit carré plein (cf. ligne 220).
Lignes 240-310 : Test possibilité des huit sauts autour de la position de Daniël.
Lignes 260-290 : Agrandi la spirale au fur et à mesure des besoins (des tests en fait)
Variables :
x y t : coordonnées de Daniël et compteur de ses mouvements
a b n : coordonnée et indice du dernier point de la spirale carrée
l c d : longueur, prochain coude et direction du segment de la spirale
i j v w r: coordonnées du saut envisagé, indice du saut et du meilleurs saut vers l'indice record (minimal donc)
s x% y% : échelle et coordonnées graphiques
Tableaux:
n%( , ) : Indices des cafes de l'échiquier (0 si non encore déterminé)
dx(),dy() : direction relative des huit sauts que sait faire Daniël.
Ainsi que le résultat graphique (commenté)
Mon idée est maintenant de voir si le même type de dénouement se produit si je lâche Daniël sur une autre cafe que la cafe initiale n°1 ?
Du C, une CASIO, un Commodore !!!
Heureusement que je m'y suis pris en avance, car mon canasson avance à son pas de sénateur sur 8-bits et en Microsoft BASIC v7-0 !
Et oui, bien que l'échiquier que je lui ai offert soit infini (j'ai d'ailleurs toujours pas fini de le payer), son entêtement conduit à cette fin inéluctable.
Heureusement, un petit SPRMOV 1,151,125 remet tout en place et un SCNCLR 1 permet de le lâcher à nouveau et de le laisser gambader avec un petit RUN.
Nous ne sommes pas les premiers à avoir observé ce résultat : une petite vidéo en anglais montre un illustre personnage qui semble en être ravi ! Je partage son enthousiasme.
Comme vous m'avez donné vos codes, je donne ci-dessous un des miens :
Code : Tout sélectionner
list
5 data -2,-1, -1,-2, +1,-2, +2,-1, +2,+1, +1,+2, -1,+2, -2,+1
100 color 0,rclr(6):color 1,rclr(5):color 4,rclr(0):graphic 1,1:graphic 5
110 t=1:x=53:y=36:s=3:n=1:i=.:j=.:w=.:v=.:r=.:d=.:l=.:a=x:b=y:c=.:x%=.:y%=.
120 dim n%(159,99),dx(7),dy(7):n%(a,b)=-1
130 restore:for w=0 to 7:read dx(w),dy(w):next w:timer$="000000"
200 do
210 : char 1,0,0,timer$+str$(t)+str$(n%(x,y)),1:char 1,33,0,str$(x-53)+str$(y-36)
220 : t=t+1:x%=s*x-1:y%=s*y-1:box 1,x%,y%,x%+2,y%+2,0,1
230 : r=9e23:w=-1
240 : for v=0 to 7
250 : : i=x+dx(v):j=y+dy(v):draw 0,s*i,s*j
260 : : do while n%(i,j)=0
270 : : : draw 1,s*a,s*b:if l=c then l=0:d=d+1 and 3:if d=1 or d=3 then c=c+1
280 : : : l=l+1:n=n+1:a=a+(d=3)-(d=1):b=b+(d=2)-(d=0):draw 1 to s*a,s*b:n%(a,b)=n
290 : : char 0,0,24,str$(n):loop
300 : : if n%(i,j)>0 and n%(i,j)<r then r=n%(i,j):w=v:char 1,0,23,str$(r)+" "
310 : next v:if w<0 then exit
320 : draw 0,s*x,s*y:x=x+dx(w):y=y+dy(w):n%(x,y)=-n%(x,y)
330 loop
ready.
Lignes 5 - 130 Initialisation (page graphique, les variables et tableaux, les coordonnées des huit sauts que sait faire Daniël.
Lignes 200 - 330 : Boucle principale - Daniël est placé et dessiné par un petit carré plein (cf. ligne 220).
Lignes 240-310 : Test possibilité des huit sauts autour de la position de Daniël.
Lignes 260-290 : Agrandi la spirale au fur et à mesure des besoins (des tests en fait)
Variables :
x y t : coordonnées de Daniël et compteur de ses mouvements
a b n : coordonnée et indice du dernier point de la spirale carrée
l c d : longueur, prochain coude et direction du segment de la spirale
i j v w r: coordonnées du saut envisagé, indice du saut et du meilleurs saut vers l'indice record (minimal donc)
s x% y% : échelle et coordonnées graphiques
Tableaux:
n%( , ) : Indices des cafes de l'échiquier (0 si non encore déterminé)
dx(),dy() : direction relative des huit sauts que sait faire Daniël.
Ainsi que le résultat graphique (commenté)
Mon idée est maintenant de voir si le même type de dénouement se produit si je lâche Daniël sur une autre cafe que la cafe initiale n°1 ?
Modifié en dernier par C.Ret le 03 nov. 2020 19:41, modifié 4 fois.
SHARP PC-1211 PC-1360 EL-5150 PC-E500 | Commodore C=128D | Texas Instruments Ti-57LCD Ti-74BASICalc Ti-92II Ti-58c Ti-95PROCalc Ti-30XPROMathPrint | Hewlett-Packard HP-28S HP-41C HP-15C HP-Prime HP-71B | CASIO fx-602p | NUMWORKS | Graphoplex Rietz Neperlog | PockEmul | Sommaire des M.P.O. | Ma...dov'il sapone.
- rogeroge
- Fonctionne à 9600 bauds
- Messages : 4253
- Enregistré le : 14 mai 2010 21:41
- Localisation : Entre Nancy et Bercy : à Torcy
Re: Quelles chances donnez vous à Daniël ?
En considérant que tu n'es pont un idiot, sans autre formalité explicative,
intuitivement, mon vote et c'est le seul aurait donc validé 2016 sauts ?????
intuitivement, mon vote et c'est le seul aurait donc validé 2016 sauts ?????
Il faut être fou pour venir sur ce site mais encore plus fou pour ne pas y revenir !
Re: Quelles chances donnez vous à Daniël ?
Jolie l'île !
Le gars de Numberphile propose une variante où il part d'un "coin" et suit un chemin en diagonales : https://www.youtube.com/watch?v=RGQe8waGJ4w
Y a même une idée de cadeau de Noël pour C.Ret : https://teespring.com/numberphile-trapp ... cid=101810
Le gars de Numberphile propose une variante où il part d'un "coin" et suit un chemin en diagonales : https://www.youtube.com/watch?v=RGQe8waGJ4w
Y a même une idée de cadeau de Noël pour C.Ret : https://teespring.com/numberphile-trapp ... cid=101810
? Apple, Atari, Canon, Casio, ????????????, HP, Psion, Sharp, Tandy... même TI.
- C.Ret
- Fonctionne à 9600 bauds
- Messages : 3422
- Enregistré le : 31 mai 2008 23:43
- Localisation : N 49°22 E 6°10
Re: Quelles chances donnez vous à Daniël ?
Ah! Oui, taille 4/5 ou large SVP !
Sinon, un tee-shirt blanc avec " Commodore C128D Personal Computer " marqué dessus en beige clair serait très bien aussi
Mais surtout pas de C64 ! Pas assez de RAM et un BASIC incapable de dessiner Daniël sans une armada de POKE et PEEK. Beurk!
Sinon, un tee-shirt blanc avec " Commodore C128D Personal Computer " marqué dessus en beige clair serait très bien aussi
Mais surtout pas de C64 ! Pas assez de RAM et un BASIC incapable de dessiner Daniël sans une armada de POKE et PEEK. Beurk!
SHARP PC-1211 PC-1360 EL-5150 PC-E500 | Commodore C=128D | Texas Instruments Ti-57LCD Ti-74BASICalc Ti-92II Ti-58c Ti-95PROCalc Ti-30XPROMathPrint | Hewlett-Packard HP-28S HP-41C HP-15C HP-Prime HP-71B | CASIO fx-602p | NUMWORKS | Graphoplex Rietz Neperlog | PockEmul | Sommaire des M.P.O. | Ma...dov'il sapone.
-
- Fonctionne à 2400 bauds
- Messages : 2362
- Enregistré le : 16 févr. 2008 23:34
- Localisation : Paris 20ème
Re: Quelles chances donnez vous à Daniël ?
J'ai eu l'idée de sortir le dada de son trou fâcheux en le faisant reculer d'un pas pour le laisser continuer sa course une fois la case litigieuse bouchée. Tombera-t-il dans un second trou ? Pour l'instant, il a seulement atteint la 39ème spire sans encombres.
Programmeur abscons.