Отыскать количество 10-ти шаговых последовательностей хода конем по доске следующей формы.(image 1)
Условия:
1. Первый шаг может быть сделан на любую клетку.
2. Последуюший шаг должен быть обязательно ход конем.
3. В 10 символьной последовательности могут быть только 2 гласные.
Приводится пример ходов конем:
(image 2)
Выслал решение на Python и Java (http://forum.privet.com/download/file.p ... w&id=46598).
Получил от них ответ:
Вопрос в студию: Как еше более кратко (succinct) можно написать решение, да еше используя OO?Code Program Review: Not very fast, not OO, not particularly succinct, no unit tests.
Все что короче работает медленнее и ну никак не понятнее. Вот решение из 2-х строк на Питоне:
Code: Select all
kseq = lambda (y,x,vl,sl, refs): 0 if vl<0 else (0 if ((y,x) in [(0,0),(0,4),(1,3),(2,4)]) and vl==0 else 1) if sl==1 else sum([kseq((r[0],r[1],vl-1,sl-1, refs)) for r in refs[y][x] if ((y,x) in [(0,0),(0,4),(1,3),(2,4)])]+[kseq((r[0],r[1],vl,sl-1, refs)) for r in refs[y][x] if not ((y,x) in [(0,0),(0,4),(1,3),(2,4)])])
print sum([sum(row) for row in [[kseq((y,x,2,10,[[[(iy+k[0],jx+k[1]) for k in ((-2,-1),(-2,1),(-1,2),(1,2),(2,1),(2,-1),(-1,-2),(1,-2)) if (jx+k[1]>=0 and jx+k[1]<5) and (iy+k[0]>=0 and iy+k[0]<4) and not ((iy+k[0],jx+k[1]) in [(3,0),(3,4)]) ] for jx in range(0,5) ] for iy in range(0,4)])) for x in range(0,5) if not ((y,x) in [(3,0),(3,4)])] for y in range(0,4)]])