Le programme est blanc.
Exemple stdin:
8 ║♜ ♞ ♝ ♛ ♚ ♝ ♞ ♜
7 ║♟ ♟ ♟ ♟ … ♟ ♟ ♟
6 ║… … … … … … … …
5 ║… … … … ♟ … … …
4 ║… … … … … … … …
3 ║… … ♘ … … … … …
2 ║♙ ♙ ♙ ♙ ♙ ♙ ♙ ♙
1 ║♖ … ♗ ♕ ♔ ♗ ♘ ♖
——╚═══════════════
—— a b c d e f g h
Exemple de sortie standard:
8 ║♜ ♞ ♝ ♛ ♚ ♝ ♞ ♜
7 ║♟ ♟ ♟ ♟ … ♟ ♟ ♟
6 ║… … … … … … … …
5 ║… … … … ♟ … … …
4 ║… … … … ♙ … … …
3 ║… … ♘ … … … … …
2 ║♙ ♙ ♙ ♙ … ♙ ♙ ♙
1 ║♖ … ♗ ♕ ♔ ♗ ♘ ♖
——╚═══════════════
—— a b c d e f g h
Tout mouvement valide est correct. "En passant" et le roque sont ignorés. Il est correct d'afficher des messages d'erreur ou de ne rien imprimer s'il n'y a pas de déplacement valide.
La réponse avec le plus de votes l'emporte.
popularity-contest
chess
Hristo Hristov
la source
la source
Réponses:
Je ne me plains pas des votes positifs, mais pour être juste ... ma solution ici n'est pas vraiment géniale. Ugoren est meilleur, à part le manque de support Unicode. Assurez-vous de regarder toutes les réponses avant de voter, si vous n'êtes tombé sur cette question que maintenant!
En tous cas.
Haskell, 893
888904952(sans roque)862 (sans double coup de pion)(Vous n'avez pas précisé si c'était censé être du code golf, mais il me semble que ça devrait l'être)
Lorsque vous avez installé GHC (par exemple dans le cadre de la plate-forme Haskell ), vous pouvez simplement
la source
C,
734672640 caractèresCaractères comptés sans espace amovible.
Le format de fichier que j'ai utilisé n'est pas tel que demandé, mais ASCII simplifié.
J'ai besoin d'ajouter la prise en charge des caractères Unicode, cela coûterait quelques caractères.
Format de fichier d'entrée / sortie:
Doit être exactement 8 lignes d'exactement 8 caractères.
pnbrqk
sont utilisés pour les pièces blanches,PNBRQK
pour les pièces noires, les espaces pour les espaces:La logique est assez simple:
pour chaque mouvement possible de chaque pièce blanche, essayez chaque mouvement possible de chaque pièce noire.
Si aucun coup noir ne capture le roi blanc, le coup blanc est valide.
La carte est conservée comme
char[256]
, traitée comme une matrice 16x16, où seul le 8x8 en haut à gauche est utilisé. Les positions et les vecteurs de mouvement sont conservés dans des entiers 8 bits (x:4,y:4
). Le bit supplémentaire permet d'utiliser une arithmétique simple (new_pos = old_pos + steps*direction
), avec une détection facile du bord de la carte (&0x88
fait la magie).r[]
code trois choses:'('+vector
.Les fonctions:
main
lit le tableau, convertit les lettres en code interne, appellea
pour trouver des mouvements blancs, imprime le tableau.a
boucle récursivement sur les 64 carrés. Pour chaque pièce de la bonne couleur (paramètrec
), elle trouve la règle de déplacement de la pièce et appelled
.d
boucle récursivement sur la règle de mouvement codée, qui est une liste de vecteurs, appelante
pour chacun d'eux. Il donnee
la position d'origine, le vecteur et la limite de portée (7 pour les pièces au-dessus de B, 2 pour les pions de deuxième rang, 1 sinon).e
teste tous les mouvements le long d'un vecteur. Si le mouvement est possible (c'est-à-dire que les pions avancent, à l'intérieur du plateau, non bloqués, la capture du pion en diagonale), vérifie l'une des deux choses. Pour les coups blancs, exécutev
pour valider le coup. Pour les coups noirs, vérifie si le roi blanc est capturé. Si c'est vrai, le coup est joué sur le plateau.v
valide un coup blanc. Il copie le tableau de côté, exécute le mouvement pour tester et appelle àa
nouveau pour rechercher les mouvements noirs.la source
Python 2.6,
886- 1425 caractèresMa version initiale (dans les révisions) était de 886 caractères mais ne satisfaisait pas complètement la spécification (elle ne vérifiait pas pour éviter l'échec et échec; elle ne considérait même pas les mouvements possibles des pièces noires).
Maintenant c'est le cas (et j'ai corrigé plusieurs bugs dans l'original). Hélas, cela a un coût en caractères: 1425 pour l'instant, mais il devrait encore y avoir peu de place pour l'amélioration. Cette version devrait être beaucoup plus solide dans la gestion des cas de bord que la précédente.
Exemple d'entrée et de sortie:
la source