контекст
Chess960 (или Случайные шахматы Фишера) - вариант шахмат, изобретенный и защищаемый бывшим чемпионом мира по шахматам Бобби Фишером, который был публично объявлен 19 июня 1996 года в Буэнос-Айресе, Аргентина. Он использует ту же доску и фигуры, что и стандартные шахматы; однако начальная позиция фигур в домашних рядах игроков рандомизирована
правила
- Белые пешки ставятся на второе место, как в стандартных шахматах.
- Все оставшиеся белые фигуры рандомизированы на первое место
- Епископы должны быть размещены на квадратах противоположного цвета
- Король должен быть размещен на поле между ладьями.
- Фигуры черных равны и противоположны фигурам белых.
От: http://en.wikipedia.org/wiki/Chess960
Для всех людей, которые хотели бы опубликовать ответы ...
Вы должны сделать генератор позиций Chess960, способный случайным образом генерировать одну из 960 позиций в соответствии с правилами, описанными выше (он должен быть способен выводить любую из 960, жесткое кодирование одной позиции не допускается!), и вам нужно только Выведите белый ранг одной штуки.
Пример вывода:
rkrbnnbq
где:
- К Кинг
- королева
- епископ
- русский рыцарь
- ладья
Это будет кодекс гольфа, а противоборство будет положительным.
источник
Ответы:
GolfScript (
4948 символов или 47 для вывода в верхнем регистре)При этом используется стандартная техника случайной перестановки, пока мы не встретим критерии. В отличие от решения wScript для GolfScript, оно выполняет обе проверки строки, поэтому, скорее всего, будет проходить цикл больше раз.
Использование верхнего регистра позволяет сохранить один символ:
источник
Ruby 1.9,
6765 знаковАх, старая техника "продолжай рандомизировать, пока не создашь что-то правильное" ...
(В Ruby 2.0
%w(r r n n b b q k)
может быть'rrnnbbqk'.chars
)источник
~
со стоимостью предупреждения, если оно доступно. pastebin.com/nuE9zWSw$_
переменная. Это работает, потому что у ruby есть несколько аккуратных методов, таких как Kernel # chop, которые работают как эквивалентный метод String # chop, но с$_
их приемником. Это экономит много времени, когда (например) вы пишете цикл чтения / обработки / записи, используяruby -n
илиruby -p
.GolfScript
6049(сокращено до 49 символов благодаря замечательным советам Питера Тейлора)
Онлайн тест здесь .
Объяснение кода:
источник
b
s кажется очень длинным. Как насчет.'b'/1=,2%
?'qbbnnxxx'
из цикла и перетасовывая ту же строку.J, 56 знаков
это занимает несколько секунд на моей машине из-за неэффективного алгоритма. Некоторая скорость может быть достигнута путем добавления
~.
(удаления дубликатов) раньше'kqbbnnrr'
.объяснение:
?~!8
имеет дело со8!
случайными элементами из0 ... 8!
'kqbbnnrr'A.~
использует их в качестве индексов анаграммы в строкеkqbbnnrr
.(#~'...'&rxeq"1)'
фильтрует их по регулярному выражению в кавычках.{.
означает «взять первый элемент»источник
K, 69
источник
Питон, 105 символов
В основном техника Хрона, за исключением элегантного материала Ruby.
Спасибо Питеру Тейлору за сокращение регулярного выражения.
источник
not s('b(..)*b',a)
похоже на многословный способ сказатьs('b.(..)*b',a)
. Кроме того,sample
может быть один символ корочеshuffle
, но это требует дополнительного аргумента.Shuffle
возвращаетсяNone
, так что это нехорошо :(or
эквивалентно чередованию регулярных выражений (|
). Сохраняет 13 символов.