""" from zad1testy import runtests def insertion_sort(A, p, r): for i in range(p + 1, r): for j in range(i, p, -1): if A[j - 1][0] > A[j][0]: A[j - 1], A[j] = A[j], A[j - 1] else: break def chaos_index(T): n = len(T) A = [(T[i], i) for i in range(n)] insertion_sort(A, 0, n) k = 0 for i in range(n): k = max(k, abs(A[i][1] - i)) return k runtests(chaos_index)
def build_G(u, v): for u_prim in range(n): for v_prim in range(n): if (M[u][u_prim] != 0 or u == u_prim) and \ (M[v][v_prim] != 0 or v == v_prim) and \ dist[u_prim][v_prim] >= d and \ (not (u_prim == v and v_prim == u)): # dodajemy krawędź między ustawieniami uv i uv_prim jeśli: # - jest krawędz z u do u_prim i v do v_prim (lub stoimy w miejscu) # - odległość (separacja) w nowym ustawieniu >= d # - nie idziemy tą samą krawędzią w przeciwnych kierunkach G[u][v].append( ((u_prim, v_prim), M[u][u_prim] + M[v][v_prim])) for u in range(n): for v in range(n): build_G(u, v) d, parent = dijkstra(G, (x, y)) # zamiast dijkstry DFS ale zostawiłem dijkstrę bo ładnie działa (DFS oczywiście też) # d, parent = dfs(G, x, y) return rebuild_path(y, x, parent) runtests(keep_distance)
def is_empty(self): return self.elements == 0 def dijkstra(G, s, t): n = len(G) distances = [float("inf")] * n distances[s] = 0 q = PriorityQueue(100) q.put((s, 0), distances) while not q.is_empty(): v = q.get() for i in range(n): if G[v[0]][i] > 0 and G[v[0]][i] != v[1]: if distances[i] > distances[v[0]] + G[v[0]][i]: distances[i] = distances[v[0]] + G[v[0]][i] q.put((i, G[v[0]][i]), distances) return distances[t] def islands(G, A, B): x = dijkstra(G, A, B) if x < float('inf'): return x else: return None runtests(islands)
x_letter_pos[ord_i(x[i])].append(i) y_letter_pos[ord_i(y[i])].append(i) for ci in range(num_chars): # dopasuj wszystkie wystąpienia while len(x_letter_pos[ci]) > 0: if len(y_letter_pos[ci]) == 0: # nie ma do czego dopasować return False # weż pierwsze wystąpienia xi = x_letter_pos[ci].popleft() yi = y_letter_pos[ci].popleft() # jeśli pierwsze wystąpienie znaku w x nie da się dopasować do pierwszego wystąpienia w y # to znaczy, że znak w y nie można dopasować do żadnego innego znaku w x if abs(xi - yi) > t: return False return True if __name__ == "__main__": print(tanagram("kotomysz", "tokmysoz", 3)) print(tanagram2("kotomysz", "tokmysoz", 3)) print(tanagram("kotomysz", "tokmysoz", 2)) print(tanagram2("kotomysz", "tokmysoz", 2)) runtests(tanagram2)