Sia data una scacchiera e un colore "di turno" ossia di chi deve muovere
Consideriamo ad esempio che il colore di turno sia il bianco.
Per valutare la leicità di una mossa del bianco devo verificare che nella
(eventuale)
scacchiera risultante non ci sia nessuna possibile mossa del nero che
(virtualmente) possa mangiare il re bianco, ossia nessuna mossa del nero che
abbia come casa terminale quella nella quale si trova il re bianco.
Tra le mosse del nero che devo valutare posso escludere a priori l'arrocco e
la presa al varco.
Giusto?
Tenendo in considerazione che il turno è bianco: tra le mosse del nero che
(virtualmente) mangerebbero il re bianco (se il bianco facesse quella
mossa), e che devo quindi tenere in considerazione, ce ne sono anche alcune
che se il turno fosse nero sarebbero considerate illecite (perchè
lascerebbero il re nero sotto scacco) ma che in questa situazione vanno
considerate "come lecite" (perchè se fatte "mangerebbero" il re bianco e la
partita sarebbe finita prima che il bianco possa mangiare il re nero
lasciato sotto scacco).
Giusto?
Spero di essere stato abbastanza chiaro ;-)
Grazie.
Ciao!
Segnalo che il primo post su IHS di cui non ho capito assolutamente nulla...
Luigi Caselli
> Segnalo che il primo post su IHS di cui non ho capito assolutamente nulla...
> Luigi Caselli
Maestro...praticamente il ragazzo diceva che seguendo le coordinate
dell'alfiere campociaro bianco sulla parallasse del Re nero il seguente
scacco di scoperta in ottava lato donna doveva essere secondo lui in
rinterzo ma dubitava che ci potesse essere anche una variante a due sponde.
Chiaro ora?
talete radics
--
questo articolo e` stato inviato via web dal servizio gratuito
http://www.newsland.it/news segnala gli abusi ad ab...@newsland.it
Ora è chiaro, però bisogna anche considerare l'effetto impresso con la
stecca ai pezzi...
Luigi Caselli
E' tutto chiaro e tutto corretto.
Alex
> Tra le mosse del nero che devo valutare posso escludere a priori l'arrocco
e
> la presa al varco.
> Giusto?
Beh, sì. Non ti può catturare con l'arrocco perché ciò presupporrebbe che il
tuo Re sia accanto al suo, il che è illegale (sono entrambi in presa!!).
Nella presa al varco invece, il pedone preso al varco dovrebbe saltare il Re
(!!!) il che è ovviamente impossibile!!
> Tenendo in considerazione che il turno è bianco: tra le mosse del nero che
> (virtualmente) mangerebbero il re bianco (se il bianco facesse quella
> mossa), e che devo quindi tenere in considerazione, ce ne sono anche
alcune
> che se il turno fosse nero sarebbero considerate illecite (perchè
> lascerebbero il re nero sotto scacco) ma che in questa situazione vanno
> considerate "come lecite" (perchè se fatte "mangerebbero" il re bianco e
la
> partita sarebbe finita prima che il bianco possa mangiare il re nero
> lasciato sotto scacco).
> Giusto?
Giusto. (Anche se il Re non si cattura mai)
--
[IHS] Mario Sacchi - Società Scacchistica Novarese
http://anzwers.org/free/ssn/soci/sacchi.htm
[ICGSH] Mariov - Hendrix Team - IV.18 - 234909
[IHG] http://www.quattrostelle.it/giorgia/IHG/scheda.asp?anagrafica=100
Una premessa: hai scritto un casotto.
> Sia data una scacchiera e un colore "di turno" ossia di chi deve muovere
> Consideriamo ad esempio che il colore di turno sia il bianco.
> Per valutare la leicità di una mossa del bianco devo verificare che nella
> (eventuale)
> scacchiera risultante non ci sia nessuna possibile mossa del nero che
> (virtualmente) possa mangiare il re bianco,
Giusto, se per "scacchiera" intendi "posizione sulla scacchiera". E potevi
fermarti qui.
> ossia nessuna mossa del nero che
> abbia come casa terminale quella nella quale si trova il re bianco.
Qui gia' entri in confusione. Giusto, se per "casa terminale di una mossa"
intendi la casa di arrivo di uno qualsiasi dei pezzi neri.
> Tra le mosse del nero che devo valutare posso escludere a priori l'arrocco e
> la presa al varco.
> Giusto?
Ma perche' ti arrovelli? Basta solo che il re bianco al termine della
mossa non sia in presa. Se proprio vuoi seguire la tua logica, comunque,
quello che dici e' giusto. Ad esempio nella posizione in cui oltre al Re
Bianco sono presenti solo il Re Nero in e8 e la Torre Nera in a8, il
bianco non puo' muovere Rc8, e non occorre valutare le conseguenze di un
eventuale successivo arrocco lungo del Nero (?!?) per escludere tale
mossa.
> Tenendo in considerazione che il turno è bianco: tra le mosse del nero che
> (virtualmente) mangerebbero il re bianco (se il bianco facesse quella
> mossa), e che devo quindi tenere in considerazione, ce ne sono anche alcune
> che se il turno fosse nero sarebbero considerate illecite (perchè
> lascerebbero il re nero sotto scacco) ma che in questa situazione vanno
> considerate "come lecite" (perchè se fatte "mangerebbero" il re bianco e la
> partita sarebbe finita prima che il bianco possa mangiare il re nero
> lasciato sotto scacco).
> Giusto?
Sempre seguendo la tua logica, e' giusto. Il problema pero' non si pone,
perche' (Caissa mi perdoni...) se ad esempio il Nero puo' mangiare il Re
Bianco con l'alfiere, ma l'alfiere sta coprendo il proprio Re dallo scacco
della Torre Bianca, non ha senso stabilire se la mossa di Alfiere e'
lecita perche' siamo gia' in una situazione illecita: il Re Bianco e'
sotto scacco con mossa al Nero, quindi o e' matto o c'e' qualcosa che non
va nella mossa bianca precedente.
> Spero di essere stato abbastanza chiaro ;-)
No, ma lo sarai sicuramente la prossima volta. :)
Ciao, Bruno.
Casa di arrivo relativa alla cattura, beninteso, altrimenti sembrerebbe
che tu escluda che il Re possa bloccare un pedone ponendosi davanti a
questo (il distinguo va fatto perche', notoriamente, la casa di arrivo di
un pedone a seguito di una cattura non coincide con la casa di arrivo in
una mossa "normale", ossia senza cattura).
>Tenendo in considerazione che il turno č bianco: tra le mosse del nero che
>(virtualmente) mangerebbero il re bianco (se il bianco facesse quella
>mossa), e che devo quindi tenere in considerazione, ce ne sono anche alcune
>che se il turno fosse nero sarebbero considerate illecite (perchč
>lascerebbero il re nero sotto scacco) ma che in questa situazione vanno
>considerate "come lecite" (perchč se fatte "mangerebbero" il re bianco e la
>partita sarebbe finita prima che il bianco possa mangiare il re nero
>lasciato sotto scacco).
>Giusto?
Tanto la presa en passant quanto l'arrocco possono catturare il re
solo se la posizione č illegale.
Esempi:
B Pc4 Rc3
N Pd4
.. d:c3 cattura il re.
Perň non solo questo er sotto scacco, ma come hai fatto a spingere in
c4?
B Rf8
N Re8 Th8
.. O-O cattura il re.
Considerazioni simili.
Quindi testare quelle mosse č superfluo.
Spero che il tuo codice sia piů comprensibile del testo che hai
postato ... :-)
>
> Spero di essere stato abbastanza chiaro ;-)
Come la luna nuova in una notte di nebbia :-)
Se ho ben capito stai cercando di ottimizzare un algoritmo di generatore
di mosse.
Secondo me la cosa piu' semplice e' partire dal re bianco (supponendo
che tocchi al bianco)
e per determinare se il re sia sotto scacco, invece di partire dai pezzi
neri parti dal re bianco e verifica se c'e':
un alfiere o una donna avversaria lungo le diagonali (fino ad un
ostacolo)
una torre o una donna avversaria lungo le ortogonali (fino ad un
ostacolo)
un cavallo a salto di cavallo
un pedone nelle due case diagonali davanti al re (quelle da dove un
pedone minaccerebbe il re).
Se c'e' questa condizione, il re e' sotto scacco, altrimenti no.
Nel momento in cui il re si trova sotto scacco, l'insieme delle mosse
legali possibili e' limitato a quelle che eliminano la condizione di
scacco.
Se non esistono queste mosse, allora lo scacco e' matto.
Se tu spiegassi in dettaglio quello che stai cercando di fare, invece di
dilungarti in astrusi discorsi astratti, forse ci riusciamo ad intendere
un po' meglio...
--
Posted via Mailgate.ORG Server - http://www.Mailgate.ORG
Non è proprio una sua logica, è quello che deve sapere per esempio un
programma che genera le mosse legali :)
Alex
cut
> Per valutare la leicità di una mossa
la che ?
per il resto e' tutto chiaro ...
Robynet
cut
> Per valutare la leicità di una mossa
la che ?
cut
> Per valutare la leicità di una mossa
la che ? :)
Chiedo umilmente scusa.
Sono alle primissime armi con gli scacchi.
[cut]
> > Spero di essere stato abbastanza chiaro ;-)
>
> No, ma lo sarai sicuramente la prossima volta. :)
Ce la metterň tutta :)
Grazie mille!
Ciao
OK. Più in generale perchè non si può mai catturare con
l'arrocco perchè una delle condizioni dell'arrocco è che:
- Fra il Re e la Torre non ci devono essere altri pezzi, né amici né
avversari ( http://scacchi.qnet.it/manuale/arrocco.htm )
> Nella presa al varco invece, il pedone preso al varco dovrebbe saltare il
Re
> (!!!) il che è ovviamente impossibile!!
OK. Più in generale perchè con una presa al varco si cattura solo ed
esclusivamente un pedone.
> > Tenendo in considerazione che il turno è bianco: tra le mosse del nero
che
> > (virtualmente) mangerebbero il re bianco (se il bianco facesse quella
> > mossa), e che devo quindi tenere in considerazione, ce ne sono anche
> alcune
> > che se il turno fosse nero sarebbero considerate illecite (perchè
> > lascerebbero il re nero sotto scacco) ma che in questa situazione vanno
> > considerate "come lecite" (perchè se fatte "mangerebbero" il re bianco e
> la
> > partita sarebbe finita prima che il bianco possa mangiare il re nero
> > lasciato sotto scacco).
> > Giusto?
>
> Giusto. (Anche se il Re non si cattura mai)
OK.
Grazie
Ciao!
e purtroppo non è un errore di battitura.
Ero in dubbio tra leicità e lecità (a dire il vero lecità mi suonava un po'
strano) e allora via di Google
http://www.google.it/search?sourceid=navclient&hl=it&q=leicit%E0 che
fornisce come primo risultato il titolo di una tesi: Leicità della
contenzione a letto dei malati psichiatrici.
quindi ho dato per buona la correttezza della parola (se è pure nel titolo
di una tesi!)
Prometto: in futuro mi fiderò solo di http://www.demauroparavia.it
Non legatemi al letto ... :-)
Ciao!
Giusto!
Grazie per le risposte.
Ciao
Infatti ...
Ciao!
>Secondo me la cosa piu' semplice e' partire dal re bianco (supponendo
>che tocchi al bianco)
<snip>
Nessuno fa così: è logico, ma molto poco performante.
Ecco. Se la velocità di elaborazione non è per te un problema, nel senso che
non devi analizzare milioni di posizioni al secondo, allora c'è un approccio
molto più semlice per verificare la legalità di tutte le mosse, senza
controlli sulle case attaccate: 1) generi tutte le mosse possibili,
ignorando le catture e le lasciate in presa dei Re (si chiamano mosse
pseduolgali); 2) prendi ciascuna di queste mosse, la esegui, e dalla
posizione risultante generi tutte le mosse pseudolegali; 3) prendi ciascuna
di queste mosse, la esegui, e se nella posizione risultante ci sono entrambi
i Re, la mossa in esame (quella del punto 2), era legale, altrimenti da
scartare. Scritto in pseudo-codice è ancora più chiaro:
generamossepseudolegali
for(x=tuttelemosse){
eseguimossa(x)
generamossepseudolegali
for(y=tuttelemosse){
eseguimossa(y)
if(ci sono i due Re){
trovatamossa(x)
}
ritiramossa(y)
}
ritiramossa(x)
}
Alex
So che le ultime tecnologie si basano su degli array di bit(8x8) e
vengono fatte delle mascherature binarie (AND OR XOR) tra i vari array,
pero' non ho mai approfondito la cosa.
E comunque se l'amico non ci spiega che cosa sta facendo esattamente, e'
dura indovinare.
Tu come la verificheresti una situazione di scacco, a partire da un FEN
per esempio?
Devo specificare una partita di scacchi utilizzando dei metodi formali.
Ciò effettivamente equivale a definire un generatore di mosse.
In pratica sto specificando le regole degli scacchi utilizzando una
notazione basata sulla teoria degli insiemi e sulla logica matematica ... e
ti assicuro che il risultato è molto più comprensibile dei miei post :-)
So che il mio dubbio è (era) banale ma non avendo mai giocato una partita di
scacchi (ho solo guardato qualche partita su Internet) avevo bisogno di una
conferma prima di procedere con la specifica.
Grazie
Ciao!
>> Nessuno fa cosě: č logico, ma molto poco performante.
>
>So che le ultime tecnologie si basano su degli array di bit(8x8) e
>vengono fatte delle mascherature binarie (AND OR XOR) tra i vari array,
>pero' non ho mai approfondito la cosa.
>E comunque se l'amico non ci spiega che cosa sta facendo esattamente, e'
>dura indovinare.
>
>Tu come la verificheresti una situazione di scacco, a partire da un FEN
>per esempio?
La scriverei come hai detto tu grosso modo, visto che si tratterebbe
di farlo per una sola posizione.
Nei programmi di gioco invece molti calcoli sono esasperati, pensa che
alcuni programmi non testano le promozioni minori in base alla
convinzione che con quei cicli macchina vinceranno piů partite che non
vincendo le posizioni in cui serve una promozione minore...
Una domanda della serie "come evitare di inventare la ruota due volte":
hai gia' dato un'occhiata alla letteratura esistente? Perche' di algoritmi
possibili possono esisterne tanti (vedi per esempio quello proposto da
Alex), ma alcuni sono decisamente molto piu' efficienti di altri...
Potresti cominciare dando un'occhiata a "I Giocatori Artificiali" di Paolo
Ciancarini, Mursia, un libro ormai datato ma decisamente sempre buono.
ci mancherebbe :)
pero' ti diro' che secondo me la parola giusta e' :
" liceita' ", intesa come qualcosa di lecito ; almeno, credo fosse questo il
senso che tu gli volevi dare.
ciao
Robynet
Be, siccome la cosa credo possa interessare a molti qui dentro (gran
parte lavora nell'ambito dell'informatica), e a me in particolare questa
cosa incuriosisce, se puoi inviare man mano che definisci le cose, cosi'
eventualmente possiamo verificare che le tue definizioni siano
effettivamente corrette.
Per motivi che non vi sto a spiegare preferirei inviarvi il tutto una volta
completato.
Prometto comunque che terminato il lavoro renderò pubblicamente disponibile
il file delle difinizioni.
Ciao!
>Devo specificare una partita di scacchi utilizzando dei metodi formali.
>Ciò effettivamente equivale a definire un generatore di mosse.
>
>In pratica sto specificando le regole degli scacchi utilizzando una
>notazione basata sulla teoria degli insiemi e sulla logica matematica ... e
>ti assicuro che il risultato è molto più comprensibile dei miei post :-)
>
>So che il mio dubbio è (era) banale ma non avendo mai giocato una partita di
>scacchi (ho solo guardato qualche partita su Internet) avevo bisogno di una
>conferma prima di procedere con la specifica.
se deve specificare un generatore di mosse
con un metodo formale come pert esempio Z,
allora può essere utile avere presente un
programma scritto in Prolog,
disponibile per esempio in
http://familie-ostermann.de/Martin/chess/
(Google ne fornisce molti altri)
Anche il libro di Bratko su Prolog programming
contiene un esempio di generatore di mosse in Prolog.
Prolog e' basato su logica e su manipolazione di liste,
quindi la sua traduzione in Z e' semplice.
--
Prof. Paolo Ciancarini - Univ. of Bologna.
Director of Studies in Internet Sciences
e-mail: cianc...@cs.unibo.it http://www.cs.unibo.it/~cianca/
--
Prof. Paolo Ciancarini - Univ. of Bologna.
Director of Studies in Internet Sciences
e-mail: cianc...@cs.unibo.it http://www.cs.unibo.it/~cianca/