Kontext
Chess960 (oder Fischer Random Chess) ist eine Schachvariante, die vom ehemaligen Schachweltmeister Bobby Fischer erfunden und befürwortet wurde und am 19. Juni 1996 in Buenos Aires, Argentinien, öffentlich angekündigt wurde. Es werden die gleichen Bretter und Figuren wie beim Standardschach verwendet. Die Startposition der Figuren in den Heimrängen der Spieler ist jedoch zufällig
Regeln
- Weiße Bauern werden wie beim Standardschach auf den zweiten Rang gesetzt
- Alle verbleibenden weißen Teile werden zufällig auf den ersten Rang gesetzt
- Die Bischöfe müssen auf Quadrate mit entgegengesetzter Farbe gestellt werden
- Der König muss auf ein Feld zwischen den Türmen gestellt werden.
- Die Stücke von Schwarz sind den Stücken von Weiß gleich und entgegengesetzt platziert.
Von: http://en.wikipedia.org/wiki/Chess960
Für alle Leute, die Antworten posten möchten ...
Sie müssen einen Chess960-Positionsgenerator erstellen, der in der Lage ist, eine der 960-Positionen nach den oben beschriebenen Regeln zufällig zu generieren (er muss in der Lage sein, eine der 960-Positionen auszugeben, eine Hardcodierung einer Position wird nicht akzeptiert!), und Sie müssen nur Geben Sie die weißen Rang-1-Stücke aus.
Beispielausgabe:
rkrbnnbq
wo:
- k König
- q Königin
- b Bischof
- n Ritter
- r Turm
Dies wird Code Golf sein, und der Tie Breaker werden die Upvotes sein.
quelle
Antworten:
GolfScript (
4948 Zeichen oder 47 für die Ausgabe in Großbuchstaben)Dies verwendet die Standardtechnik des zufälligen Permutierens, bis wir die Kriterien erfüllen. Im Gegensatz zur GolfScript-Lösung von w0lf werden hier beide Zeichenfolgen überprüft, sodass die Schleife wahrscheinlich mehrmals durchlaufen wird.
Wenn Sie Großbuchstaben verwenden, können Sie ein Zeichen speichern:
quelle
Ruby 1.9,
6765 ZeichenAh, die alte Technik "Randomisieren, bis Sie etwas Gültiges generieren" ...
(In Ruby 2.0
%w(r r n n b b q k)
könnte sein'rrnnbbqk'.chars
)quelle
~
mit den Kosten einer Warnung ersparen, sofern verfügbar. pastebin.com/nuE9zWSw$_
Variable. Es funktioniert, weil Ruby einige nette Methoden wie Kernel # chop hat, die wie die entsprechende String # chop-Methode funktionieren, aber mit$_
als Empfänger. Dies spart viel Zeit, wenn Sie (zum Beispiel) eine Lese- / Prozess- / Schreibschleife mitruby -n
oder schreibenruby -p
.GolfScript
6049(verkürzt auf 49 Zeichen dank Peter Taylors tollen Tipps)
Online Test hier .
Eine Erklärung des Codes:
quelle
b
s eine gerade Anzahl von Buchstaben steht, scheint sehr lang zu sein. Wie wäre es.'b'/1=,2%
?'qbbnnxxx'
die Schleife aus der Schleife ziehen und dieselbe Zeichenfolge neu mischen.J, 56 Zeichen
Aufgrund des ineffizienten Algorithmus dauert es auf meinem Computer einige Sekunden. Eine gewisse Geschwindigkeit kann durch vorheriges Hinzufügen
~.
(Entfernen von Duplikaten) erreicht werden'kqbbnnrr'
.Erläuterung:
?~!8
behandelt8!
zufällige Elemente aus0 ... 8!
'kqbbnnrr'A.~
verwendet sie als Anagrammindizes für die Zeichenfolgekqbbnnrr
.(#~'...'&rxeq"1)'
filtert sie nach dem regulären Ausdruck in Anführungszeichen.{.
bedeutet "nimm das erste Element"quelle
K, 69
quelle
Python, 105 Zeichen
Grundsätzlich Chron's Technik, abzüglich des eleganten Ruby-Materials.
Vielen Dank an Peter Taylor für die Verkürzung der Regex.
quelle
not s('b(..)*b',a)
scheint eine langatmige Art zu sagens('b.(..)*b',a)
. Auchsample
kann ein Zeichen kürzer alsshuffle
, aber es erfordert ein zusätzliches Argument.Shuffle
kehrtNone
aber zurück, also ist es nicht gut :(or
alternation (|
) entsprechen. Spart 13 Zeichen.