Le contexte
Chess960 (ou Fischer Random Chess) est une variante des échecs inventée et préconisée par l'ancien champion du monde d'échecs Bobby Fischer, annoncée publiquement le 19 juin 1996 à Buenos Aires, Argentine. Il utilise la même planche et les mêmes pièces que les échecs standard; cependant, la position de départ des pièces sur les rangs à domicile des joueurs est aléatoire
Règles
- Les pions blancs sont placés au deuxième rang comme dans les échecs standard
- Toutes les pièces blanches restantes sont placées au hasard au premier rang
- Les évêques doivent être placés sur des carrés de couleur opposée
- Le roi doit être placé sur une case entre les tours.
- Les pièces noires sont placées de manière égale et opposée aux pièces blanches.
De: http://en.wikipedia.org/wiki/Chess960
Pour toutes les personnes qui souhaitent poster des réponses ...
vous devez créer un générateur de positions Chess960, capable de générer aléatoirement l'une des 960 positions en suivant les règles décrites ci-dessus (il doit être capable de produire n'importe laquelle des 960, le codage en dur d'une position n'est pas accepté!), et vous n'avez qu'à produire les pièces blanches de rang un.
Exemple de sortie:
rkrbnnbq
où:
- k king
- q reine
- évêque
- chevalier
- r tour
Ce sera le golf de code, et le bris d'égalité sera les votes positifs.
la source
Réponses:
GolfScript (
4948 caractères ou 47 pour la sortie en majuscules)Cela utilise la technique standard de permutation aléatoire jusqu'à ce que nous remplissions les critères. Contrairement à la solution GolfScript de w0lf, cela vérifie la chaîne, il est donc probable qu'elle passe plusieurs fois dans la boucle.
L'utilisation de majuscules permet d'enregistrer un caractère:
la source
Ruby 1.9,
6765 caractèresAh, l'ancienne technique de "continuer à randomiser jusqu'à ce que vous génériez quelque chose de valide" ...
(Dans Ruby 2.0,
%w(r r n n b b q k)
pourrait être'rrnnbbqk'.chars
)la source
~
avec le coût d'un avertissement, lorsqu'il est disponible. pastebin.com/nuE9zWSw$_
variable. Cela fonctionne parce que ruby a des méthodes soignées telles que Kernel # chop qui fonctionnent comme la méthode équivalente String # chop mais avec$_
comme récepteur. Cela vous fait gagner beaucoup de temps lorsque (par exemple) vous écrivez une boucle de lecture / traitement / écriture à l'aide deruby -n
ouruby -p
.GolfScript
6049(raccourci à 49 caractères grâce aux bons conseils de Peter Taylor)
Test en ligne ici .
Une explication du code:
la source
b
s semble très longue. Et alors.'b'/1=,2%
?'qbbnnxxx'
sur la boucle et en remaniant la même chaîne.J, 56 caractères
cela prend plusieurs secondes sur ma machine en raison de l'algorithme inefficace. Une certaine vitesse peut être gagnée en ajoutant
~.
(supprimez les doublons) avant'kqbbnnrr'
.explication:
?~!8
traite8!
des éléments aléatoires de0 ... 8!
'kqbbnnrr'A.~
les utilise comme index anagrammes de la chaînekqbbnnrr
.(#~'...'&rxeq"1)'
les filtre par l'expression régulière entre guillemets.{.
signifie "prendre le premier élément"la source
K, 69
la source
Python, 105 caractères
Fondamentalement, la technique de chron, moins l'élégante substance Ruby.
Merci à Peter Taylor pour le raccourcissement de l'expression régulière.
la source
not s('b(..)*b',a)
semble être une façon de dire de longue haleines('b.(..)*b',a)
. En outre,sample
peut être un caractère plus court queshuffle
, mais il nécessite un argument supplémentaire.Shuffle
retourneNone
cependant, donc ce n'est pas bon :(or
équivaut à l'alternance regex (|
). Enregistre 13 caractères.