Reconstruction.divide: def of bend-edit-distance@0.2.2.0 Import: import bend-edit-distance@0.2.2.0/src/Reconstruction.bend as Reconstruction Lines 173-202 of bend-edit-distance@0.2.2.0/src/Reconstruction.bend: https://jend.leeeet.dev/read.txt?path=bend-edit-distance@0.2.2.0/src/Reconstruction.bend&start_line=173&end_line=202 import Base import bend-edit-distance@0.2.2.0/EdlibTypes.bend as E # The fuel is the initial row length; every nonbase call halves that length. # Score passes run in balanced parallel calls and are consumed before recursion. # Subpaths are evaluated sequentially to bound live score storage even on many # threads; the result lists themselves necessarily use O(m+n) space. def divide(fuel: Nat, +query: String, +target: String, +query_length: Nat, +target_length: Nat, +pairs: List<&2, E.EqualityPair>, small: Bool) -> List<&2, E.Operation>: match fuel query target small: case _ SNil{} _ _: List.replicate(E.Operation, target_length, E.Delete{}) case _ _ SNil{} _: List.replicate(E.Operation, query_length, E.Insert{}) case 0n _ _ _: dp(query, target, pairs) case 1n+p SCon{_, SNil{}} _ _: dp(query, target, pairs) case 1n+p _ _ True{}: dp(query, target, pairs) case Succ{+p} _ _ False{}: +half = Nat.div(query_length, 2n) +left = String.take(query, half) +right = String.drop(query, half) +cut = midpoint(left, right, target, pairs) left_path = divide(p, left, String.take(target, cut), half, cut, pairs, small_matrix(half, cut)) +right_length = Nat.sub(query_length, half) +right_width = Nat.sub(target_length, cut) right_path = divide(p, right, String.drop(target, cut), right_length, right_width, pairs, small_matrix(right_length, right_width)) List.append(&2, E.Operation, left_path, right_path) Uses (15): https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Bool https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=List https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=List.append https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=List.replicate https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Nat https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Nat.div https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Nat.sub https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=String https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=String.drop https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=String.take https://jend.leeeet.dev/definition.txt?path=bend-edit-distance@0.2.2.0/EdlibTypes.bend&name=EqualityPair https://jend.leeeet.dev/definition.txt?path=bend-edit-distance@0.2.2.0/EdlibTypes.bend&name=Operation https://jend.leeeet.dev/definition.txt?path=bend-edit-distance@0.2.2.0/src/Reconstruction.bend&name=dp https://jend.leeeet.dev/definition.txt?path=bend-edit-distance@0.2.2.0/src/Reconstruction.bend&name=midpoint https://jend.leeeet.dev/definition.txt?path=bend-edit-distance@0.2.2.0/src/Reconstruction.bend&name=small_matrix