Джек и Джейн решили поиграть в шахматы, чтобы скоротать время. К сожалению, Джек плохо умеет визуализировать. Он считает, что трудно определить возможные ходы для данной фигуры, кроме пешки, конечно!
Ваша задача состоит в том, чтобы помочь Джеку найти возможные варианты для данной фигуры (кроме пешки).
Если кто-то забыл, различные части обозначаются как:
- К: Кинг
- Q: королева
- N: рыцарь
- Б: епископ
- R: Ладья
В качестве примера, на следующем изображении конь расположен на d4
и может перейти к c2
, b3
, b5
, c6
, e6
, f5
, f3
, e2
. Для данного входа:
Nd4
вы бы произвели:
Nc2 Nb3 Nb5 Nc6 Ne6 Nf5 Nf3 Ne2
Правила:
- Порядок вывода не имеет значения, если перечислены все возможные ходы
- Возможные шаги могут быть разделены пробелами, символами новой строки или любым другим разделителем
- Ввод может быть передан в программу в качестве параметра или через
STDIN
- Пробелы в программе должны учитываться, поэтому используйте их оптимально
Это код гольф. (Пожалуйста, избегайте использования каких-либо инструментов / утилит, специально предназначенных для этой цели.) Самый короткий ответ выигрывает!
f(x)... case "Q": {f("B");f("R")}
если функция требует какой-либо #include, они должны быть частью числа байтов.Ответы:
GolfScript,
9493 символаМоя первая в мире программа GolfScript! Это заняло у меня много часов бездельничания, не зная, что я делаю, но я упорствовал и думаю, что сумел выучить основы языка и довольно хорошо его освоить.
Полностью в гольф :
Прокомментированный и более хороший источник :
Это может выглядеть как ответ Клаудиу, потому что я ссылался на его ответ, а также на мое (не представленное) решение C, пока принимал мой. Он предоставил хороший образец (относительно) сложной, работающей программы GolfScript, и это помогло мне многое узнать о языке. Так что спасибо, Клавдиу!
Будучи новичком в GolfScript, если у вас, ребята, есть какие-либо отзывы, я был бы рад услышать это!
источник
Python,
217212220217213 символовСвязал 213-байтовое решение Mathematica
Я начал с генерации всех правильных ходов, но они стали слишком большими, поэтому подход очень похож на подход Mathematica.
источник
Mathematica,
278272264260215213 символовБезголовая версия:
Пример использования:
Безгольфовая версия создает полный пансион, а затем выбирает правильные позиции с помощью
Cases
, тогда как гольфовая версия немедленно сбрасывает недействительные ходы вTable
команде, выдавая##&[]
, что просто исчезает.источник
N4d
? Не должно ли бытьNd4
вместо этого?Nd4
.ChessboardDistance
Abs
в Mathematica, потому что они обозначают альтернативы в шаблоне.Haskell
225 220 208 205 200182Будет сложно потрогать Mathematica, когда в него встроены шахматные ходы: rollseyes: (хорошо играл m.buettner)Я забираю все это обратно. Обыграв Математику на 31!Последнее редактирование: заменен регистр с функцией, встроенный фильтр в понимание, чтобы превзойти запись в R;)
использование:
Ungolfed (соответствует версии 208 символов до того, как 'u' было вставлено):
источник
piece
в список,[piece,newfile, newrank]
если вы не используете его в сопоставлении с образцом, можете сэкономить некоторые символы?Баш, 238
Как это работает
Идея состоит в том, чтобы представлять каждое поле на доске числовым значением, принимая его координаты в качестве числа base-20 и вычитая 200. Таким образом,
a1
становится20 * 10 + 1 - 200 = 1
,h8
становится20 * 17 + 8 - 200 = 148
и т. Д.Теперь возможные ходы епископа могут быть представлены (положительные или отрицательные) кратные 19 - одинаковое количество шагов вверх (+20) и влево (-1) - или 21 - такое же количество шагов вверх (+20 ) и направо (+1).
Размещение фигуры после перемещения - это просто сумма ее первоначальной позиции и движения. После добавления этих чисел мы должны проверить, соответствует ли их сумма действительному полю на доске.
Поскольку основание (20) более чем в два раза больше максимально возможного числа (8), сумма не может обернуться вокруг доски, например, перемещение Bh1 на семь шагов вправо и вверх приведет к неправильному положению доски.
Линия
Перечисляет все возможные ходы фигур, которые представлены положительными числами.
Команды
хранит идентификатор куска в переменной a , числовое представление исходной позиции в b и буквы от a до h в массиве d .
После расширения скобки
eval{,} echo '$'$a
становитсяeval eval echo '$'$a
(вдвойне зло), который оценивает, напримерeval echo $K
, который оцениваетecho 1 19 20 21
.for i in $c -${c// / -};do …; done
циклы над всеми возможными движениями и их негативными аналогами.echo $a${d[$[(i+=b)/20]]}$[i%20]
дает окончательную позицию после движения.grep '[a-h][1-8]$'
удостоверяется, что у нас есть правильная позицияисточник
Golfscript,
144135 знаковВместо того, чтобы продолжать пытаться поиграть в свое решение Python , я перевел его на Golfscript:
Простой перевод без особой игры в гольф, так что, скорее всего, его можно будет убрать дальше. Принимает ввод из стандартного ввода без перевода строки, попробуйте здесь (первые две строки для имитации стандартного ввода).
источник
C
634632629625600 символовЛюбые предложения о том, как улучшить это? Я впервые отправляю ответ.
источник
C
может быть значительно упрощена с помощью троичного оператора?:
и с помощью возвращаемого значенияprintf
. (printf
возвращает количество написанных символов, поэтому в этом случае оно всегда ненулевое.)C(P,c,r){return(0<=c)&(c<8)&(0<r)&(r<9)?printf("%c%c%d ",P,c+'a',r):0;}
. Незначительные изменения: есть дополнительное пространствоM
после того ,if
что вы можете удалить.Haskell,
300269 символовСпасибо bazzargh за помощь в потере 31 персонажа ...
Тот же алгоритм, что и в версии Mathematica. Пример вывода из ghci:
(Вы не просили проверки работоспособности!)
источник
Haskell, 446 символов
Вызывается с помощью
j
функцииЯ не работал с Haskell в течение нескольких месяцев, поэтому он не оказался таким же коротким, как большинство других решений, но я уверен, что есть некоторые оптимизации, в основном с
h
. Я мог бы сократить это немного.источник
Q & K [
311262 символов]Существует потенциальная возможность уменьшить количество персонажей. Я буду уменьшать его в следующей итерации.
использование
ладья
король
рыцарь
епископ
Королева
источник
R 203 символа
Безголовая версия:
Использование:
Решение даже хорошо читаемое. Однако я добавил несколько скобок и комментариев для читателей, незнакомых с кодом R (в версии без заглавных букв).
источник
Haskell (гипотетический), 248 символов
К сожалению, у каждого компилятора Haskell, который я могу получить прямо сейчас, есть проблемы со строковыми литералами Unicode. Вот (более длинная) версия, которая действительно работает:
Определение
h x y=...
является хеш-функцией; допустимые ходы будут хэшировать номера символов, которые находятся в 41-символьной строке. Это избавляет от необходимости использования оператора case или его эквивалента.Я не планирую работать над этим прямо сейчас. Было бы интересно посмотреть, может ли кто-нибудь использовать хеш-функцию на более лаконичном языке, чтобы сделать более короткое решение.
источник