Nareszcie znalazłem jakąś grę curlingową, z rozsądną fizyką i grywalnością (multiplayer!).
http://www.playcurling.com/pl/
http://www.playcurling.com/pl/
# encoding=utf-8 from heapq import heappop, heappush, heapify import turtle import time f = open("p082_matrix.txt") lines = f.readlines() matrix = [map(int, line.strip().split(",")) for line in lines] N = len(matrix) # matrix is square, [0..N-1] x [0..N-1] queue = [(matrix[0][0], 0, 0, None)] heapify(queue) dist = {} # Ustawienia malowania turtle.hideturtle() turtle.penup() turtle.tracer(0, 0) turtle.colormode(255) def nice_colors(): step = 7 x = y = z = 0 while True: yield x, y, z if x >= 170 and y >= 255 and z >= 255: x = y = z = 0 elif y == 255 and z == 255: y = z = 0 x = min(x + 3 * step, 255) elif z == 255: z = 0 y = min(y + 7 * step, 255) else: z = min(z + step, 255) color_generator = nice_colors() def draw(wait, (row, col), color=None): if not color: color = next(color_generator) time.sleep(wait) turtle.setpos((col * 5 - 200, row * 5 - 200)) turtle.dot(None, *color) turtle.update() # Wyliczanie odległości i malowanie grafu przeszukiwania. parent = {} while queue: cost, row, col, prev = heappop(queue) curr = row, col if curr in dist: continue parent[curr] = prev dist[curr] = cost if row == N - 1 and col == N - 1: break if col < N - 1: heappush(queue, (cost + matrix[row][col + 1], row, col + 1, curr)) if col > 0: heappush(queue, (cost + matrix[row][col - 1], row, col - 1, curr)) if row > 0: heappush(queue, (cost + matrix[row - 1][col], row - 1, col, curr)) if row < N - 1: heappush(queue, (cost + matrix[row + 1][col], row + 1, col, curr)) draw(0.001, curr) print dist[N - 1, N - 1] # Malowanie najlepszej ścieżki. while curr: draw(0.2, curr, (255, 0, 0)) curr = parent[curr] turtle.exitonclick()
"Nie można, oczywiście, całej matematyki sprowadzać do zagadek i rozrywki..." Ale my to właśnie zrobimy!
Dodatkowo możesz nauczyć się sztuczek, którymi będziesz mógł zaimponować w towarzystwie, nauczycielom w szkole, a na pewno ubogacisz nimi swoją łamigłówkową duszę!
Wymagania wstępne? Prawie żadne! Wystarczy ciekawość do świata, duch podróżnika (po krainie matematycznych rozrywek) w sercu i umiejętność dodawania małych liczb.
![]() |
Oznaczenie miejsca warsztatów. |
![]() |
Zespołowe sudoku w grupie późniejszej. |
![]() |
Zespołowe sudoku w grupie wcześniejszej. |
![]() |
Próba ułożenia łódeczki z tangramu. Warto zauważyć, że na stole jest plakat wydany na dwusetlecie Uniwersytetu Warszawskiego. |
from heapq import heappop, heappush, heapify f = open("p082_matrix.txt") lines = f.readlines() matrix = [map(int, line.strip().split(",")) for line in lines] N = len(matrix) # matrix is square, [0..N-1] x [0..N-1] queue = [(matrix[row][0] + matrix[row][1], row, 1) for row in range(N)] dist = {(row, 0): matrix[row][0] for row in range(N)} heapify(queue) while queue: cost, row, col = heappop(queue) if col == N - 1: print cost, row, col break if (row, col) in dist: continue dist[(row, col)] = cost heappush(queue, (cost + matrix[row][col + 1], row, col + 1)) if row > 0: heappush(queue, (cost + matrix[row - 1][col], row - 1, col)) if row < N - 1: heappush(queue, (cost + matrix[row + 1][col], row + 1, col))
# encoding=utf-8 from heapq import heappop, heappush, heapify import turtle import time f = open("p082_matrix.txt") lines = f.readlines() matrix = [map(int, line.strip().split(",")) for line in lines] N = len(matrix) # matrix is square, [0..N-1] x [0..N-1] queue = [(matrix[row][0] + matrix[row][1], row, 1, None) for row in range(N)] heapify(queue) dist = {(row, 0): matrix[row][0] for row in range(N)} # Ustawienia malowania turtle.hideturtle() turtle.penup() turtle.tracer(0, 0) turtle.colormode(255) def nice_colors(): step = 7 x = y = z = 0 while True: yield x, y, z if x >= 170 and y >= 255 and z >= 255: x = y = z = 0 elif y == 255 and z == 255: y = z = 0 x = min(x + 3 * step, 255) elif z == 255: z = 0 y = min(y + 7 * step, 255) else: z = min(z + step, 255) color_generator = nice_colors() def draw(wait, (row, col), color=None): if not color: color = next(color_generator) time.sleep(wait) turtle.setpos((col * 5 - 200, row * 5 - 200)) turtle.dot(None, *color) turtle.update() # Wyliczanie odległości i malowanie grafu przeszukiwania. parent = {} while queue: cost, row, col, prev = heappop(queue) curr = row, col if col == N - 1: parent[curr] = prev break if curr in dist: continue parent[curr] = prev dist[curr] = cost heappush(queue, (cost + matrix[row][col + 1], row, col + 1, curr)) if row > 0: heappush(queue, (cost + matrix[row - 1][col], row - 1, col, curr)) if row < N - 1: heappush(queue, (cost + matrix[row + 1][col], row + 1, col, curr)) draw(0.001, curr) # Malowanie najlepszej ścieżki. while curr: draw(0.2, curr, (255, 0, 0)) curr = parent[curr] turtle.exitonclick()