Zagubiony pionek
Po zakończeniu gry w szachy pozostawiono ocalały pionek za liniami wroga. pomóżmy mu znaleźć najkrótszą drogę do domu.
Pierwotny problem opisuje tablicę „szachy” nXn i funkcję f: {1,..,n-1}X{1,..,n}X{-1,0,1} => R+
wag. celem jest znalezienie najlepszej ścieżki z jakiegoś kwadratu w linii buttom do innego kwadratu w górnej linii, gdzie możliwe ruchy to: w lewo, w górę, w prawo w górę i nie możesz wyjść z planszy.
Problem jest stosunkowo łatwy do rozwiązania w O (n ^ 2) przy użyciu programowania dynamicznego, ale jest to kodegolf i nie dbamy o bezużyteczne rzeczy, takie jak złożoność czasu pracy ...
Problem
dane wejściowe: tablica 3-wymiarowa (lub inna wybrana przez Ciebie kolekcja, otrzymana przez stdin lub jako argument funkcji), odpowiadająca zwykłej szachownicy, dokładnie w rozmiarze: 7X8X3 (#linePasses X #rowSize X #movesPerPass) zawierająca nieujemne liczby całkowite. koszt przeniesienia z pewnej pozycji, (i,j)
gdzie i
jest indeks wiersza i j
indeks kolumny, to:
a[i][j][0]
na koszt podróży w górę w lewo do kwadratu(i+1,j-1)
lub graficznie\
.a[i][j][1]
na koszt podróży do kwadratu(i+1,j)
lub graficznie|
.a[i][j][2]
na koszt podróży w górę w prawo do kwadratu(i+1,j+1)
lub graficznie/
.
możesz założyć, że nie będzie zawierać ścieżki o wartości większej niż MAX_INT
.
wyjście: wyjście ascii 8X8 pokazujące najlepszą (najkrótszą, tj. minimalną sumę wag) ścieżkę (jeśli jest więcej niż 1 optymalny wynik, możesz pokazać dowolną wybraną ścieżkę). ścieżka jest rysowana od dołu do góry, gdzie w każdej linii postać odpowiadająca pozycji pionka na ścieżce jest tą, którą zamierza wykonać. np. jeśli pionek ma zamiar przesunąć się w górę w lewo z kolumny 3 (do kolumny 2), powinieneś narysować:
#?######
##\#####
gdzie ?
należy zastąpić kolejnym ruchem. ostateczne stanowisko należy ustalić jako X
.
Przykłady
Wejście:
[
[[1,1,1],[1,1,1],[0,1,1],[1,1,1],[1,1,1],[1,1,1],[1,1,1],[1,1,1]],
[[1,1,1],[1,0,1],[1,1,1],[1,1,1],[1,1,1],[1,1,1],[1,1,1],[1,1,1]],
[[1,1,1],[1,1,0],[1,1,1],[1,1,1],[1,1,1],[1,1,1],[1,1,1],[1,1,1]],
[[1,1,1],[1,1,1],[1,1,0],[1,1,1],[1,1,1],[1,1,1],[1,1,1],[1,1,1]],
[[1,1,1],[1,1,1],[1,1,1],[1,0,1],[1,1,1],[1,1,1],[1,1,1],[1,1,1]],
[[1,1,1],[1,1,1],[1,1,1],[1,0,1],[1,1,1],[1,1,1],[1,1,1],[1,1,1]],
[[1,1,1],[1,1,1],[1,1,1],[0,1,1],[1,1,1],[1,1,1],[1,1,1],[1,1,1]]
]
wynik:
##X#####
###\####
###|####
###|####
##/#####
#/######
#|######
##\#####
Wejście:
[
[[41,27,38],[12,83,32],[50,53,35],[46,32,26],[55,89,82],[75,30,87],[2,11,64],[8,55,22]],
[[56,21,0],[83,25,38],[43,75,63],[56,60,77],[68,55,89],[99,48,67],[94,30,9],[62,62,58]],
[[23,18,40],[24,47,61],[96,45,72],[71,6,48],[75,63,98],[93,56,51],[23,31,30],[49,34,99]],
[[20,47,42],[62,79,72],[32,28,44],[68,61,55],[62,39,57],[4,17,49],[97,85,6],[91,18,12]],
[[51,50,11],[32,39,56],[12,82,23],[33,88,87],[60,55,22],[29,78,14],[70,11,42],[63,94,67]],
[[75,64,60],[27,79,86],[70,72,56],[55,45,32],[95,67,12],[87,93,98],[81,36,53],[38,22,93]],
[[31,80,50],[77,71,22],[59,46,86],[64,71,53],[41,19,95],[62,71,22],[92,80,41],[26,74,29]]
]
wynik:
######X#
#####/##
####/###
#####\##
#####|##
######\#
######|#
#######\
to jest kod-golf , więc wygrywa najkrótszy kod.
Graj sprawiedliwie. brak luk ...
EDYTOWAĆ:
Iv'e napisał proste rozwiązanie do gry w golfa w scala, na które można spojrzeć. Istnieje również strona, na której można grać za pomocą kodu Scala on-line: scalakata (wystarczy skopiować i wkleić zawartość do scalakata, a następnie nacisnąć przycisk odtwarzania)