Tre pedine

axpgn
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

Risposte
Bolle1
Allora sei tu che dovresti ringraziare noi ... :-D

Certo che ringrazio voi...non si capiva?

Secondo me ...site un pelino prevenuti!
:D

Noto che commenti solo ciò che più ti garba (giustamente) ...

Evito le discussioni sterili... :-)

axpgn
"Bolle":
Secondo me ...site un pelino prevenuti!
:D

Noto che commenti solo ciò che più ti garba (giustamente) ...

Evito le discussioni sterili... :-)


Dipende dai punti di vista ... :wink:

Cordialmente, Alex

Bolle1
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! :lol:

Dipende dai punti di vista ... :wink:

Come è giusto che sia!

orsoulx
"Bolle":
inserisco anche 'l'algoritmo orsoulx'...ma secondo me non lo capiranno e mi manderanno anche a quel paese! :lol:
Per non farsi mandare a quel paese basta non inserire alcunché. E, come già detto, non è di orsoulx.
Grazie per il link in merito alla "collina del sapone", ma la spiegazione che vi ho trovato è molto lacunosa.
Ciao
B.

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

Per non farsi mandare a quel paese basta non inserire alcunché.

ok, vediamo come reagiranno...acqua in bocca! :P

orsoulx
"axpgn":
A dir la verità, secondo me, "informaticamente" la soluzione più semplice (in questo caso) è fare due semplici elenchi di posizioni "buone" e posizioni "cattive" ... :wink:
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. :wink:
Ciao
B.

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 ciò non è possibile ne seleziona una dall'elenco "buono" allo stesso modo ... a me pare semplice ... :-)

Cordialmente, Alex

orsoulx
"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.

axpgn
Anche su Wikipedia si trova lo stesso riferimento ...

orsoulx
"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. :D

"axpgn":
Anche su Wiki

Bene!

Ciao
B.

axpgn
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

orsoulx
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.

axpgn
È un elenchino ... :-D

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

Cordialmente, Alex

orsoulx
@Alex:
sei cattivo e forse anche brutto :D , meriteresti di non ottenere alcuna risposta, ma nella mia incommensurabile bontà :smt059, 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.

axpgn
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 ... :-D )
Verrà notte prima che io riesca a decifrare correttamente quello che hai scritto ... :D

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" ... :D ... a me, ovviamente ...

Cordialmente, Alex

Bolle1
"axpgn":
È un elenchino ... :-D
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 ? :D
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! :roll:

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

Cordialmente, Alex

orsoulx
@Alex:
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.

axpgn
Quelle nel post sopra il tuo ...

orsoulx
@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.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.