#!/usr/bin/python
# -*- coding: utf-8 -*-
# Jakub Burzyński 2011 Python 2.7.2
# www.algorytm.org
# Problem skoczka (konika) szachowego,
# dodatkowo mierzy czas wykonania
import sys, time
g_size = -1 # rozmiar szachownicy
g_board = [] # szachownica
g_d = 0 # zmienna do mierzenia czasu
def main():
global g_size,g_d
print "Problem skoczka na szachownicy"
start_x = 0
start_y = 0
while g_size == -1:
if len(sys.argv) == 2:
try:
g_size = int(sys.argv[1])
break
except:
print("Bledny parametr! <rozmiar>")
g_size = input("Rozmiar szachownicy: ")
start_x = input("Pozycja X: ")
start_y = input("Pozycja Y: ")
for i in range(0, g_size):
g_board.append(g_size*[0])
sys.stdout.write("... ")
g_d = time.strftime("%S")
move(start_y, start_x, 1)
print("Nie znaleziono rozwiazania")
def move(y,x,counter):
assert g_board[y][x] == 0
g_board[y][x] = counter
if counter == g_size*g_size: # sprawdz czy znaleziono rozwiazanie - liczba ruchow równa liczbie pól
drawChessboard()
sys.exit(1)
jumps = ((-2,1),(-1,2),(1,2),(2,1),(2,-1),(1,-2),(-1,-2),(-2,-1)) # możliwe ruchy skoczka
for jump in jumps:
ty,tx = y+jump[0],x+jump[1]
if canMove(ty,tx):
move(ty,tx,counter+1) # rekurencja
g_board[y][x] = 0
def canMove(ty,tx): # sprawdza czy ruch nie wychodzi poza szachownice
return ty>=0 and tx>=0 and ty<g_size and tx<g_size and g_board[ty][tx] == 0
def drawChessboard(): # wypisuje szachownicę z rozwiązaniem
global g_d
d2 = time.strftime("%S")
delta = int(d2)-int(g_d)
print(str(delta) + "s")
scale = len(str(g_size*g_size))
print(g_size*("+" + scale*"-") + "+")
for linia in g_board:
for kolumna in linia:
sys.stdout.write("|%*d" % (scale,kolumna))
print("|\n"+g_size*("+" + scale*"-") + "+")
if __name__ == "__main__":
main()
77u/IyEvdXNyL2Jpbi9weXRob24KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIyBKYWt1YiBCdXJ6ecWEc2tpIDIwMTEgUHl0aG9uIDIuNy4yCiMgd3d3LmFsZ29yeXRtLm9yZwojIFByb2JsZW0gc2tvY3prYSAoa29uaWthKSBzemFjaG93ZWdvLAojIGRvZGF0a293byBtaWVyenkgY3phcyB3eWtvbmFuaWEKCmltcG9ydCBzeXMsIHRpbWUKCmdfc2l6ZSA9IC0xICAgICMgcm96bWlhciBzemFjaG93bmljeQpnX2JvYXJkID0gW10gICAjIHN6YWNob3duaWNhCmdfZCA9IDAgICAgICAgICMgem1pZW5uYSBkbyBtaWVyemVuaWEgY3phc3UKCmRlZiBtYWluKCk6CiAgICBnbG9iYWwgZ19zaXplLGdfZAogICAgcHJpbnQgIlByb2JsZW0gc2tvY3prYSBuYSBzemFjaG93bmljeSIKICAgIHN0YXJ0X3ggPSAwCiAgICBzdGFydF95ID0gMAoKICAgIHdoaWxlIGdfc2l6ZSA9PSAtMToKICAgICAgICBpZiBsZW4oc3lzLmFyZ3YpID09IDI6CiAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgIGdfc2l6ZSA9IGludChzeXMuYXJndlsxXSkKICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgICAgIHByaW50KCJCbGVkbnkgcGFyYW1ldHIhIDxyb3ptaWFyPiIpCgogICAgICAgIGdfc2l6ZSA9IGlucHV0KCJSb3ptaWFyIHN6YWNob3duaWN5OiAiKQogICAgICAgIHN0YXJ0X3ggPSBpbnB1dCgiUG96eWNqYSBYOiAiKQogICAgICAgIHN0YXJ0X3kgPSBpbnB1dCgiUG96eWNqYSBZOiAiKQoKICAgIGZvciBpIGluIHJhbmdlKDAsIGdfc2l6ZSk6CiAgICAgICAgZ19ib2FyZC5hcHBlbmQoZ19zaXplKlswXSkKICAgIAogICAgc3lzLnN0ZG91dC53cml0ZSgiLi4uICIpCgogICAgZ19kID0gdGltZS5zdHJmdGltZSgiJVMiKQogICAgbW92ZShzdGFydF95LCBzdGFydF94LCAxKQogICAgCiAgICBwcmludCgiTmllIHpuYWxlemlvbm8gcm96d2lhemFuaWEiKQoKCmRlZiBtb3ZlKHkseCxjb3VudGVyKToKICAgIGFzc2VydCBnX2JvYXJkW3ldW3hdID09IDAKICAgIGdfYm9hcmRbeV1beF0gPSBjb3VudGVyCiAgICAKICAgIGlmIGNvdW50ZXIgPT0gZ19zaXplKmdfc2l6ZTogIyBzcHJhd2R6IGN6eSB6bmFsZXppb25vIHJvendpYXphbmllIC0gbGljemJhIHJ1Y2hvdyByw7N3bmEgbGljemJpZSBww7NsIAogICAgICAgIGRyYXdDaGVzc2JvYXJkKCkgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICBzeXMuZXhpdCgxKSAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAKICAgIGp1bXBzID0gKCgtMiwxKSwoLTEsMiksKDEsMiksKDIsMSksKDIsLTEpLCgxLC0yKSwoLTEsLTIpLCgtMiwtMSkpICMgbW/FvGxpd2UgcnVjaHkgc2tvY3prYQogICAgZm9yIGp1bXAgaW4ganVtcHM6CiAgICAgICAgdHksdHggPSB5K2p1bXBbMF0seCtqdW1wWzFdCiAgICAgICAgaWYgY2FuTW92ZSh0eSx0eCk6CiAgICAgICAgICAgIG1vdmUodHksdHgsY291bnRlcisxKSAgICMgcmVrdXJlbmNqYQogICAgZ19ib2FyZFt5XVt4XSA9IDAgCgogICAgCmRlZiBjYW5Nb3ZlKHR5LHR4KTogIyBzcHJhd2R6YSBjenkgcnVjaCBuaWUgd3ljaG9kemkgcG96YSBzemFjaG93bmljZQogICAgcmV0dXJuIHR5Pj0wIGFuZCB0eD49MCBhbmQgdHk8Z19zaXplIGFuZCB0eDxnX3NpemUgYW5kIGdfYm9hcmRbdHldW3R4XSA9PSAwCiAgICAKICAgIApkZWYgZHJhd0NoZXNzYm9hcmQoKTogIyB3eXBpc3VqZSBzemFjaG93bmljxJkgeiByb3p3acSFemFuaWVtCiAgICBnbG9iYWwgZ19kICAKICAgIGQyID0gdGltZS5zdHJmdGltZSgiJVMiKQogICAgZGVsdGEgPSBpbnQoZDIpLWludChnX2QpCiAgICBwcmludChzdHIoZGVsdGEpICsgInMiKQogICAgCiAgICBzY2FsZSA9IGxlbihzdHIoZ19zaXplKmdfc2l6ZSkpCiAgICBwcmludChnX3NpemUqKCIrIiArIHNjYWxlKiItIikgKyAiKyIpCiAgICBmb3IgbGluaWEgaW4gZ19ib2FyZDoKICAgICAgICBmb3Iga29sdW1uYSBpbiBsaW5pYToKICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgifCUqZCIgJSAoc2NhbGUsa29sdW1uYSkpCiAgICAgICAgcHJpbnQoInxcbiIrZ19zaXplKigiKyIgKyBzY2FsZSoiLSIpICsgIisiKQoKICAgICAgICAKaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgIG1haW4oKQ==