Quelles chances donnez vous à Daniël ?

Donnez votre avis !

Modérateur : Politburo

Quelle est d'après vous la proposition la plus invraisemblable

- C.Ret tu as bien fait Daniël va pouvoir sauter éternellement sur cet échiquier infini; tu est un bienfaiteur des animaux de compagnie.
8
53%
- C.Ret tu es bête, jamais Daniël n'atteindra la case n°961.
0
Aucun vote
- C.Ret tu es un idiot, ce pauvre cavalier est maintenant condamné, il ne fera pas plus de 2016 sauts.
1
7%
- C.Ret tu es un monstre, Daniël va maintenant rester coincé sur la case n°2084. Toi qui voulais que Daniël soit libre à jamais :(
6
40%
 
Nombre total de votes : 15

jxano
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2325
Inscription : 17 févr. 2008 00:34
Localisation : Paris 20ème

Re: Quelles chances donnez vous à Daniël ?

Message par jxano » 02 nov. 2020 23:02

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ù.
Programmeur abscons.

Avatar de l’utilisateur
gege
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 7009
Inscription : 31 janv. 2008 15:24
Localisation : Banlieue Paârisienne
Contact :

Re: Quelles chances donnez vous à Daniël ?

Message par gege » 02 nov. 2020 23:36

Bonjour,
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
Avec ses deux potes sous-programmes :

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
Et :

Code : Tout sélectionner

SPIFIND
For Dim List 1→I To 1 Step ‾1
R=List 1[I]=>Return
Next:0→I
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.

jxano
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2325
Inscription : 17 févr. 2008 00:34
Localisation : Paris 20ème

Re: Quelles chances donnez vous à Daniël ?

Message par jxano » 02 nov. 2020 23:48

Et voici donc mon programme C (créer un projet "console" pour y insérer le source) :

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;
}
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.
Programmeur abscons.

Avatar de l’utilisateur
C.Ret
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2318
Inscription : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: Quelles chances donnez vous à Daniël ?

Message par C.Ret » 03 nov. 2020 18:39

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.
Daniël move #2016.gif
Daniël move #2016.gif (85.39 Kio) Consulté 409 fois
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é)

Daniël's boardmap.gif
Daniël's boardmap.gif (52.44 Kio) Consulté 397 fois
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 ?
Dernière édition par C.Ret le 03 nov. 2020 20:41, édité 4 fois.
SHARP PC-1211 + CE-121 + CE-122. | VIC 20 Commodore 128D + Printer P-803 + SD2iec. | TI-57 LCD | TI-74 BasiCalc | TI-92 II | HP-28S + HP82240A | HP-41C + (2 memory + stat + IR) modules. | HP Prime Wireless Graphing Calculator | HP-15C | CASIO fx-602p + FA-1. .Sommaire des M.P.O.. . Sommaire du P.C.T.M. .

Avatar de l’utilisateur
rogeroge
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3754
Inscription : 14 mai 2010 21:41
Localisation : Entre Nancy et Bercy : à Torcy

Re: Quelles chances donnez vous à Daniël ?

Message par rogeroge » 03 nov. 2020 19:12

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 ?????
Il faut être fou pour venir sur ce site mais encore plus fou pour ne pas y revenir !

Avatar de l’utilisateur
Danny
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 326
Inscription : 28 déc. 2013 17:34

Re: Quelles chances donnez vous à Daniël ?

Message par Danny » 03 nov. 2020 19:37

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

Image
Casio fx-3900p, 7000G, 6000G, 6800G, 8500G, 9900GC, 9950GB +, Graph 100+ USB
HP 35, 45, 65, 21, 25, 33E, 41CX, 42S, 28S, 32SII, 48SX, 48GX, 50g, Prime
Sharp EL-9000

Avatar de l’utilisateur
C.Ret
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2318
Inscription : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: Quelles chances donnez vous à Daniël ?

Message par C.Ret » 03 nov. 2020 20:08

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 :D :D

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 + CE-121 + CE-122. | VIC 20 Commodore 128D + Printer P-803 + SD2iec. | TI-57 LCD | TI-74 BasiCalc | TI-92 II | HP-28S + HP82240A | HP-41C + (2 memory + stat + IR) modules. | HP Prime Wireless Graphing Calculator | HP-15C | CASIO fx-602p + FA-1. .Sommaire des M.P.O.. . Sommaire du P.C.T.M. .

jxano
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2325
Inscription : 17 févr. 2008 00:34
Localisation : Paris 20ème

Re: Quelles chances donnez vous à Daniël ?

Message par jxano » 04 nov. 2020 00:05

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.

Répondre

Revenir vers « Sondages »