Tre pedine
Si abbia una striscia orizzontale di $8$ caselle, numerate da $0$ a $7$ da sinistra a destra.
Vi siano tre pedine posizionate sulle caselle $3-5-7$.
I giocatori sono due e l'unica mossa che, a turno, possono fare è lo spostamento di una sola pedina nella casella che preferiscono, anche se occupata da una o due pedine, purché sia a sinistra della casella di partenza.
Il vincitore è colui che pone l'ultima pedina nella casella $0$.
Chi vince? E come fa?
Cordialmente, Alex
Vi siano tre pedine posizionate sulle caselle $3-5-7$.
I giocatori sono due e l'unica mossa che, a turno, possono fare è lo spostamento di una sola pedina nella casella che preferiscono, anche se occupata da una o due pedine, purché sia a sinistra della casella di partenza.
Il vincitore è colui che pone l'ultima pedina nella casella $0$.
Chi vince? E come fa?
Cordialmente, Alex
Risposte
Allora sei tu che dovresti ringraziare noi ...
Certo che ringrazio voi...non si capiva?
Secondo me ...site un pelino prevenuti!

Noto che commenti solo ciò che più ti garba (giustamente) ...
Evito le discussioni sterili...

"Bolle":
Secondo me ...site un pelino prevenuti!
![]()
Noto che commenti solo ciò che più ti garba (giustamente) ...
Evito le discussioni sterili...
Dipende dai punti di vista ...

Cordialmente, Alex
E' nata la versione 1.3 con la possibilità di 'vedere' come e perchè il calcolatore fa le sue mosse...
http://www.energialternativa.info/Public/NewForum/discussione.php?213586&1#MSG14
Nella versione successiva inserisco anche 'l'algoritmo orsoulx'...ma secondo me non lo capiranno e mi manderanno anche a quel paese!
Come è giusto che sia!
http://www.energialternativa.info/Public/NewForum/discussione.php?213586&1#MSG14
Nella versione successiva inserisco anche 'l'algoritmo orsoulx'...ma secondo me non lo capiranno e mi manderanno anche a quel paese!

Dipende dai punti di vista ...![]()
Come è giusto che sia!

"Bolle":Per non farsi mandare a quel paese basta non inserire alcunché. E, come già detto, non è di orsoulx.
inserisco anche 'l'algoritmo orsoulx'...ma secondo me non lo capiranno e mi manderanno anche a quel paese!
Grazie per il link in merito alla "collina del sapone", ma la spiegazione che vi ho trovato è molto lacunosa.
Ciao
B.
E, come già detto, non è di orsoulx.
Ho capito...ma posso mettere un flag con su scritto "orsoulx" (io implemento il tuo algoritmo) e sull'altro "4 regolette"?
Altrimenti dimmi tu cosa scriverci!

Per non farsi mandare a quel paese basta non inserire alcunché.
ok, vediamo come reagiranno...acqua in bocca!

"axpgn":Beh! Se "informaticamente" vuol dire far digerire ad un computer l'algoritmo per vincere quando è possibile, l'elenco delle posizioni "cattive" non è di alcuna utilità e ho molti dubbi sulla semplicità dell'implementazione. Dai una definizione di 'semplice' e poi possiamo confrontarli.
A dir la verità, secondo me, "informaticamente" la soluzione più semplice (in questo caso) è fare due semplici elenchi di posizioni "buone" e posizioni "cattive" ...![]()

Ciao
B.
Il computer scorre l'elenco "cattivo" e seleziona la prima posizione che differisce di una sola cifra dalla posizione attuale e sia minore di questa; se ciò non è possibile ne seleziona una dall'elenco "buono" allo stesso modo ... a me pare semplice ... 
Cordialmente, Alex

Cordialmente, Alex
"Bolle":
Ho capito...ma posso mettere un flag con su scritto "orsoulx"
Alex ha detto che la sua fonte attribuisce l'algoritmo a "C.L.Bouton", quale problema hai se ritieni necessario citare?
Ciao
B.
Anche su Wikipedia si trova lo stesso riferimento ...
"axpgn":
Il computer scorre l'elenco "cattivo" e seleziona la prima posizione che differisce di una sola cifra dalla posizione attuale e sia minore di questa
Se serve quello cattivo è inutile quello "buono". Su questi termini non ci siamo ancora accordati.
Permangono le perplessità sulla semplicità: prova ad implementare la ricerca e la creazione dell'elenco... e non farti contagiare. Svicolare non è simpatico.

"axpgn":
Anche su Wiki
Bene!
Ciao
B.
Forse non stiamo parlando della stessa cosa ... io mi riferisco "solo" al giochino che ha generato il thread non al Nim in generale, per il quale il metodo di Bouton per me è quello ottimale ...
Comunque, non è inutile avere due elenchi perché trovo più facile (per me ma anche per il computer ...
) "cercare" la posizione piuttosto che "crearla" ... e l'elenco (praticamente) ce l'ho già ... (mi riferisco sempre al caso specifico)
Cordialmente, Alex
Comunque, non è inutile avere due elenchi perché trovo più facile (per me ma anche per il computer ...

Cordialmente, Alex
Dai Alex, stiamo parlando della medesima cosa il Nim 'storico' semplificato, perché è sparita la fila con un solo fiammifero.
Ti ho chiesto una definizione di 'semplice' (con meno istruzioni, con meno cicli macchina da usare.. quello che vuoi tu), altrimenti ragioniamo sul nulla.
Come può essere più semplice (per te e per il computer) andare a cercare anche una sola situazione sull'elenco (che deve essere controllata per vedere se è raggiungibile), quando, nelle posizioni che non portano alla vittoria certa, basta prendere una 'cifra' a caso e diminuirla di $ 1 $?
Ciao
B.
Ti ho chiesto una definizione di 'semplice' (con meno istruzioni, con meno cicli macchina da usare.. quello che vuoi tu), altrimenti ragioniamo sul nulla.
Come può essere più semplice (per te e per il computer) andare a cercare anche una sola situazione sull'elenco (che deve essere controllata per vedere se è raggiungibile), quando, nelle posizioni che non portano alla vittoria certa, basta prendere una 'cifra' a caso e diminuirla di $ 1 $?
Ciao
B.
È un elenchino ... 
Va beh, proviamoci ... una tabella dove uso come indice il numero della posizione con quattro campi: flag buona/cattiva/non valida e le tre cifre della posizione; me lo scorro all'indietro partendo dalla posizione precedente a quella dove mi trovo e mi fermo alla prima "cattiva" (cioè che lascio al mio avversario), verifico che solo una delle cifre sia diversa (altrimenti proseguo) e la "gioco", se non ne trovo "abbandono" ...
Cordialmente, Alex

Va beh, proviamoci ... una tabella dove uso come indice il numero della posizione con quattro campi: flag buona/cattiva/non valida e le tre cifre della posizione; me lo scorro all'indietro partendo dalla posizione precedente a quella dove mi trovo e mi fermo alla prima "cattiva" (cioè che lascio al mio avversario), verifico che solo una delle cifre sia diversa (altrimenti proseguo) e la "gioco", se non ne trovo "abbandono" ...

Cordialmente, Alex
@Alex:
sei cattivo e forse anche brutto
, meriteresti di non ottenere alcuna risposta, ma nella mia incommensurabile bontà
, ti ricordo che ti stai confrontando con qualche cosa che in turco si può scrivere così:
P1, P2 e P3 sono le posizioni delle tre pedine (tutti numeri interi) e l'istruzione IF è del tipo SE(condizione, istruzione nel caso vero, istruzione nel caso falso).
SE(P1+P2+P3=0, hai perso fai i complimenti all'avversario);
SE( P1 XOR P2 XOR P3=0, gioca a caso, SE(P2 XOR P3
SE(P1+P2+P3=0, hai vinto).
Ciao
B.
sei cattivo e forse anche brutto


P1, P2 e P3 sono le posizioni delle tre pedine (tutti numeri interi) e l'istruzione IF è del tipo SE(condizione, istruzione nel caso vero, istruzione nel caso falso).
SE(P1+P2+P3=0, hai perso fai i complimenti all'avversario);
SE( P1 XOR P2 XOR P3=0, gioca a caso, SE(P2 XOR P3
Ciao
B.
Parti dal presupposto (sbagliato) che io sia in grado di comprendere appieno il funzionamento dell'XOR (o peggio che io sia in grado di programmare ...
)
Verrà notte prima che io riesca a decifrare correttamente quello che hai scritto ...
Quello che scriverei io sarebbe questo (tralasciando tutto l'input/output, la grafica, ecc. e presupponendo esista una tabella fatta come detto prima):
Mi sembra più "semplice" ...
... a me, ovviamente ...
Cordialmente, Alex

Verrà notte prima che io riesca a decifrare correttamente quello che hai scritto ...

Quello che scriverei io sarebbe questo (tralasciando tutto l'input/output, la grafica, ecc. e presupponendo esista una tabella fatta come detto prima):
Mossa(posin) pos=posin posout=-1 do while pos a=0 b=0 c=0 if TAB(pos-1,0)=0 then if TAB(pos-1,1)=TAB(posin,1) then a=1 end if if TAB(pos-1,2)=TAB(posin,2) then b=1 end if if TAB(pos-1,3)=TAB(posin,3) then c=1 end if if (a+b+c)=2 then posout=(pos-1) pos=1 end if end if pos=pos-1 wend return(posout)
Mi sembra più "semplice" ...

Cordialmente, Alex
"axpgn":
È un elenchino ...
una tabella dove uso come indice il numero della posizione con quattro campi: flag buona/cattiva/non valida e le tre cifre della posizione;
come fai a configurare nella tabella le posizioni buone a priori? usi lo xor ?

cioè, vero che si può fare quello che dici (modificando un pelino il tuo algoritmo) ma occorre trovare delle regole...oppure senza regole , cioè mettendo solo quelle della validità delle mosse e quelle della vincita finale si può fare un algoritmo che giochi senza regole: occorre fare un grafo, dove la mossa del calcolatore,viene calcolata implementando una ricorsione che analizza tutte le possibili (ipotetiche) mosse successive...e viene estratta una che porta alla vittoria finale!

Ma le ho già classificate tutte le posizioni ...
Nel nostro specifico caso (e non in generale) le posizioni "cattive" (cioè quelle che DEVI lasciare al tuo avversario affinché lui muova partendo da queste) sono queste: $000, 0text(nn), 123, 145, 246, 257$.
Dato che io mi sono fermato qui perché non serviva sapere altro per vincere partendo dalla posizione iniziale (cioè $357$), a queste andrebbero aggiunte almeno altre due: $347, 356$.
Questo basta ... sicuro ...
Cordialmente, Alex
Nel nostro specifico caso (e non in generale) le posizioni "cattive" (cioè quelle che DEVI lasciare al tuo avversario affinché lui muova partendo da queste) sono queste: $000, 0text(nn), 123, 145, 246, 257$.
Dato che io mi sono fermato qui perché non serviva sapere altro per vincere partendo dalla posizione iniziale (cioè $357$), a queste andrebbero aggiunte almeno altre due: $347, 356$.
Questo basta ... sicuro ...

Cordialmente, Alex
@Alex:
traduzione da turco a basic; degli errori è responsabile google translate:
Quante sono le posizioni con flag 0 nel tuo elenchino?
Ciao
B.
traduzione da turco a basic; degli errori è responsabile google translate:
If (p1 Xor p2 Xor p3)=0 Then 'muovi a caso ElseIf (p2 Xor p3)<p1 Then p1=p2 Xor p3 ElseIf (p1 Xor p3)<p2 Then p2=p1 Xor p3 Else p3=p1 Xor p2 End If
Quante sono le posizioni con flag 0 nel tuo elenchino?
Ciao
B.
Quelle nel post sopra il tuo ...
@Alex:
nel post sopra il mio ne conto $ 8 $, una delle quali è però non completamente definita. Se sono solo quelle io credo che la tua routine non funzioni. Nel senso che trovandosi in una situazione che permetterebbe di vincere con certezza, non riesca ad individuare la mossa corretta.
Ciao
B.
nel post sopra il mio ne conto $ 8 $, una delle quali è però non completamente definita. Se sono solo quelle io credo che la tua routine non funzioni. Nel senso che trovandosi in una situazione che permetterebbe di vincere con certezza, non riesca ad individuare la mossa corretta.
Ciao
B.