Учитывая размер шахматной доски и начальную позицию коня, рассчитайте вероятность того, что после k
ходов конь окажется внутри шахматной доски.
Замечания:
Рыцарь делает все 8 возможных ходов с равной вероятностью.
Как только рыцарь оказывается вне шахматной доски, он не может вернуться внутрь.
вход
Входы разделяются запятыми в виде:
l,k,x,y
где l
- длина и ширина шахматной доски, k
- количество ходов, которые совершит рыцарь, x
- x-позиция начальной позиции рыцаря и y
y-позиция начальной позиции рыцаря. Обратите внимание, что 0,0
это левый нижний угол доски и l-1,l-1
верхний правый угол доски.
Алгоритм:
Начните с начальных координат рыцаря. Сделайте все возможные ходы для этой позиции и умножьте эти ходы на их вероятность, для каждого рекурсивного вызова функции продолжайте этот процесс, пока не будет выполнено условие завершения. Условие завершения - если конь находится вне шахматной доски, в этом случае верните 0 или желаемое количество ходов исчерпано, в этом случае верните 1.
Как мы видим, текущее состояние рекурсии зависит только от текущих координат и количества выполненных шагов. Поэтому мы можем запомнить эту информацию в табличной форме.
кредит
Эта проблема изначально появилась в блоге crazyforcode.com, опубликованном под лицензией CC BY-NC-ND 2.5 IN . Это было немного изменено, чтобы сделать его более сложным.
Ответы:
Pyth, 38 байт
Попробуйте онлайн: демонстрация
Объяснение:
источник
Рубин 134
Попробуйте онлайн: http://ideone.com/ZIjOmP
Эквивалентный негольфовый код:
источник
Хаскелл - 235
Реализует функцию
f
с параметрамиl k x y
источник
Матлаб,
124119Точно реализует описанный алгоритм.
Мне удалось сократить его на 5 байт с помощью @sanchises, спасибо!
Expanded:
Старая версия
источник
s
инициализируется MATLAB, так что вы можете просто сделатьs(l,l)=0
; Жаль, что в MATLAB нет встроенной функции fibonnaci, что было бы отличной оптимизациейm
.m
с помощью разложения матрицы ...m+m'+fliplr(m+m')
Похоже, увеличение bytecount, как и все мои другие варианты.Mathematica - 137
Использование:
Выход:
источник
MATLAB - 106
Улучшает решение @ flawr, будучи более MATLAB-y.
Expanded:
источник
> <> - 620 (без учета пробелов)
Начальный стек должен быть
l,k,x,y
Проверьте это
источник