From fa4a9b3efdaa4a2f61e4dfc1694bda817b3ee8f5 Mon Sep 17 00:00:00 2001 From: Lucia Ceionia Date: Sun, 10 Dec 2023 04:45:09 -0600 Subject: [PATCH] day 10 parts 1&2 --- 10/Makefile | 3 + 10/input | 140 ++++++++++++++++++++++++++ 10/main.s | 231 +++++++++++++++++++++++++++++++++++++++++++ 10/main_part1.s | 208 ++++++++++++++++++++++++++++++++++++++ 10/solution.png | Bin 0 -> 19513 bytes 10/utils.s | 258 ++++++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 840 insertions(+) create mode 100644 10/Makefile create mode 100644 10/input create mode 100644 10/main.s create mode 100644 10/main_part1.s create mode 100644 10/solution.png create mode 100644 10/utils.s diff --git a/10/Makefile b/10/Makefile new file mode 100644 index 0000000..573eb71 --- /dev/null +++ b/10/Makefile @@ -0,0 +1,3 @@ +all: + nasm -g -felf32 main.s && ld -melf_i386 -g main.o + diff --git a/10/input b/10/input new file mode 100644 index 0000000..f7340df --- /dev/null +++ b/10/input @@ -0,0 +1,140 @@ +J.7--J-.LL77FJ-F7FLJ-7.|FFF.F7FL-7F-7.L-FF77.-F-L7.F-L--7FL7..LF|J.7FF7.FLJ.-7-F7F-J77F77.|7.777FJ7FL7F-|.FFJ7|-|7FL-.LL7F77.|J7.|JJ-7-7|-|7 +J.|.FJ|FJ.-|LJ|L7FJ|.F.7-|J7L-J|L7|..-JF-JL77-|F|JL||.|L|J7L.|F7J-F-77--L|.-JF7F|JJ-|J||F7-77.|||L-FJ7J-|--7.F|7|LF|F--JF-F.LJ|.F|L|.|||7JL| +|.|-JJFJL|LJ.FLJ-|-FJL-|L|||.|-F-F7-F7|7|F-|L-FF.|.-7FJ.|7F.F-|-7--JL..FLF-J|LLLJJ..J.LL.|L.-.L--J|L||JF|J||F-|L|LL|JJ.L7J.77L|-L|7--L7|||.| +F-J..FL--F--L7LJ7L||.|.|FFL|-F-FJ.LFJ77FJJ.L7.-J|-7L-J.F|||-FLF--.L-J7F7F-7||-|J||.FL|.F--.FLJLL-L7.LL-FJ.FLJ.|-7-7..LF-J|-J7.|FJJ|7.7.LL7.| +||F77F7--|LJ|F|F7-J7F-F-.|JF.|-7LJF77|J||.|-JFL-F-|.L..FJFJ7J.|F|.L7.FLJ7L|---J-F7|77|FJ7F-FF|L|LF-LJ7--J.L.L7JF-7L|-FL7LF7L7.F-|-F--L-|7F.7 +|---J7.|LJJFF-LJLF|--7|.LLFLF-7J.LLJLL-7.--7J-JF|7|-7L---J--.FFFF7L|-LJ.--77LF.|FL7--J-JL|.||--L7J7|LL7|.777.|.LJ|.|LF7F-JL7.F|7J7|-|.7FJ|7| +JLJLF|-LF7FL--L-FF|.LJ7-||..|LL7|7F7-LFJ-J-|LLF77LJ7|FLLJ7L7L7-F7-F--7-L7.LF7LFF7L7-F|J7FJ7|JFL7|.L-7|||F|-J-J7|.J7LFLJJL-7|F|LJ.FJ---J-7L7| +LF..LJ.LLF|J-7F-LJ|L7.|.|FL7.J|FJF7J7JL|L7.L7J|L77F7L|.F7|-J.F-JL7L7FJJ|-77F7F7||F7F77F77L|..|.F7J.L7-J-FJ||FLF|7.7|LL.-.7||.L7|LF7FL7-|7.-| +-77-L-|7|.L-7|F|JFJJ-F|-|J-F7|FF77J|77FFF77FF7|FJ7|7LL7|F|7LLL--7|FJL7.L-JL|LJ||LJ|||F7J..LF7FF7J|-||-.L|-F|--F.LFF|-.|FF--L7JFJ.|-|-77-J|-F +.-J7LFLJJ7..-L7FF7J|7FJ.L|-F-|L-JL7.LFF7||F-J||L-7J-.FFFFJ||.|F7|||F-JFFL7-L-7|L7FJ|||L777JF7FJ|F|77|-J.7.F7L7J77||JL-JF-.L7L-LJ.7L|J.-JJJJ. +77LL.7LLJL7-7JLJ||.7F7-7LL-7LF7L-FF--7F7||L-7LJF-JLL-F7JLF7F7FJLJ||L--777L-F-J|FJL-JLJFJ|FFJLJFJJ||F7-7FF-7J.|---F|-F|F-J7.L7F|LFJ7L-LJ|...F +J7..L.F||J..|7JL-F-LL|-7-7|F-J|--LL7FJ||||F7L-7L77FLFJ|F-JLJ|L--7LJF--J-77J|F7|L--7F-7||7FL-7FJLFLJ-F7-FJFJF77FL-.|J||L.F77LF|L-7F--|LJ|7-|J +||J.LFLJ--FJL|7F|L-JL|7|JLLL7FJJ.|L|L7|LJLJ|7FJFJ7F7L7|L--7FJF7F|F-J-|JLL7.LJ|L7F7||.LJ-F7F-JL7F7|.F|FFL7L7-F7J--LL--JJ.|JL7|L-7JL7-7JFFJ7.J +FL777L|.L7J|JJLJJ-F-7FJF7-JJ||F7-FFJFJL-7F-JFJFJF7||J|L7F7||FJ|FJ|F-7F7J7.F77|FJ|LJL7F7FJ|L7F-J|L77-FF-7|FJFJ|J|.||..|.LFJ.L77.F7F7J|.FJFFJ. +JJFL7LJ.F|FL-7.7J.7LF7-F77.F|||L-7L7|F7L|L7FJFJFJ||L7|FJ|||LJFJL7||FJ||F7FJL7|L7L-7FJ||L7|FJL-7L7|F7FL7LJL7|FJJ-FFJ7.F7-L7..LL|J|7|.|.F7---J +FFJ.LJF-FFJLL|-F----7J|||7FFJ||F-JFJ||L7|FJL7L7L7LJFJ|L-J||F7L-7|||L7|||LJF-JL7|F-J|FJL7||L7F-JFJLJ|F7L-7FJ||F77F7JL-|LFJF--7|LJ|L7FF-L|-|LL +JJF7JJF7|JFL|L-L---7L--J|F7L7|||F7L7||FJ||F7L7|FJF-J-|F--JLJL7FJ|LJFJ||L-7L-7-||L-7|L7FJ|L7|L-7L7F-J|L-7|L-JLJ|FJ|.JL77JFJFJJ|FJL||FL7.J..FJ +LF7LLF.---J--F-L|7LL-7F7LJL7||||||FJLJL-J|||L||L7L7F7|L7F7|F7||-L-7|F||F7L-7|FJL7FJL-JL-JFJ|F-J||L-7L-7||F----J|FJ77F7---.7|.JJJ---7J|F-7FJ. +FLJ7.|7.JFJ7|LF--7F-7||L--7|||||||L---7F7|||FJ|FJFJ|||FJ|L7|LJL--7|L-JLJ|F7||L7FJL--7F7F-JFJL7F7|F7|F-JLJL-----JL-7-J|F-LFL77LJ7-|--JL77FJ-J +F-7FFJ-7-JJLL7L-7|L7|LJLF-JLJLJLJ|F--7||||||L7|L7L-J||L7L7|L----7LJF7F--J|||L7||F7F7LJ|L-7L-7|||||LJL-7F-7F----7F-J7F|J|7|...F7|--7||.L-|JFJ +|JJ7J|FL-JJL|-F-J|FJL-7.L------7FJL-7LJ|LJ|L-JL7L--7LJFJFJ|F7FF7L7FJLJF7L||L7||LJ||L-7|F-JF-JLJ||L7F-7LJFJL7F7LLJLF--7---|.|-J-L7-J7J7J||7JJ +||---JF-J.FF|FL-7|L7F-JF-7F7F--JL7F7L7FJ7FL-7F-JF7JL-7L7|FJ|L7||FJL-77||FJL7||L-7|L7FJ|L-7L-7F-J|FJ|FJF7L-7LJL7JF7|F7|7.LFF7L7JL|..LLJJ|L|77 +-7.FL-JJJFFJ-F--JL7||F7L7|||L--7FJ|L7||F7F7L|L7FJ|F7.|FJ|L7|FJ||L7F-JFJ|L-7|||F-JL-JL-JF-JF-J|F7||L|L7|L-7|F-7|FJ|||LJJ-F7||F-7J|F-F|JLL-|7J +JJ-L7J...--7.L---7LJ||L-JLJ|F77||.|FJ||||||FJFJL7|||FJ|FJFJ||FJ|FJL-7L7L7FJLJ|L---7F---JF7L-7LJ||L7|FJL-7LJL7LJL7LJL7FLFJ||||FJFLLF7.7..|.-. +F|LJ|FL.L7FFF-7F7L7FJL----7|||FJ|FJ|L|LJ|||L7|F7||||L7|L7L7||L7||F--J-L7LJF-7|F---J|FF7FJL7FJF-J|FJ|L7F7L-7FJFF7|F--JF7|FJ|||L7--F||F|7.|.|F +F|7.FF.JF-||L7LJL-JL7F----JLJ|L7LJFJFJF-J||FJ||||LJL-JL7L7||L7||||-F7F7|F7L7LJL---7|FJLJF7|L7|7FJL7L7|||F7|L-7|||L7F-JLJL-JLJFJ|.FJL7-7--F7| +||L-7.|L-LLLJL---7F-JL-7F7F-7|FL-7L7L7L7FJ|L7|||L-7F7F-J||LJFJ|||L7||||LJL7|F7F7F7|LJF--J||FJL7L-7|FJ||LJ||F-J|||FJ|F---7F-7FJF-7L7FJJJJ|LL| +F7LL|-J|||.L-F---JL7F-7LJLJF||F--JFJFJFJL7|FJ||L7|LJ|L7F7L-7L7|LJFJ|LJL7JL|||LJLJ||F-JF7|||L-7L7FJ|L7|L-7LJL-7||||FJL-7LLJF||L|FJFJL7FF7|7-| +|.J7...F-J-7.L----7||FJF7|F7||L--7L7L7L-7|||FJ|FJF77L7||L-7L7||F7L7L--7L7FJ|L--7FJ|L7L|L7LJF7L7|L7L7||F-JF---J|LJLJF--JF7F7||FJL7L7FJ7JJ||JJ +|..F-FJLJFLF-F--7F|LJL-JL7||||FF-JFJFJF-J|||L7|L7||F-JLJF-J.||||L-JF7FL7|L7|F7.||.L7L7L7L7FJ|J||||FJ||L-7L-7|FJF7F-JLF7||||LJL7FJFJL7|-|7|.F +|FF--J|-LJ7||L-7|FJF7F7F7LJLJL7L7FJFJFJF7|LJFJL7|||L-7F-JF7FJLJL-7FJL7FJ|FJLJ|FJL7J|FJFJFJ|FJFJ|FJ|L||F7|F-JFJFJLJF-7|LJLJL7F7||FJF7|J.LJ|F7 +F|J|-||.|LFFF--JLJFJLJLJ|F7F-7L-J|.L7|7|||F7|F7||||F7||F7|LJF----J|F-JL7LJF-7|L-7L-J|FJFJFJL-JFJL7L7|||LJL7LL7L--7|FJ|F----J|||LJFJ|||.JFJ-| +.|JL7-L7-F--JF----JF7F--J|||FL7F7L7FJ|FJ|LJ|||||||||||LJ|L-7|F7F-7|L7FFJF7L7LJF7L-7FJL7|LL7F--J.FJFJ||L7F7L7L|F--J|L7||F7F77|LJF-JJLJ-JLJJF| +|77-7FL|JL-7FJF----JLJF7FJLJF7LJL7LJFJL7L7FJ||||LJ||LJF-JFFJLJ||FJL7|FJFJL-JF-J|F7|L7FJ|F-J|F7F7L7L7|L7||L-JFJL--7|FJ|||||L-JF7L7JF|...LJFL7 +L|L7.|F||LLLJJL-7F--7FJLJF7FJL7F7|F7|F7|FJL7|||L7FJ|F-J7F7L7F-J||F7||L7|F7F7|F-J|||FJ|FJL-7|||||||FJL7|||-F7L7F--J||FJLJLJF-7||FJ||F7FL..L7| +LJ.LJJ-7FFJF7F--J|F7||.F7||L-7LJ|LJ||||||F7||||FJL7||F-7||FJ|F-J||||L7||||||||F-J|||FJ|F--J||||L7|L7FJ||L-JL-JL---JLJF7F-7|LLJLJ|FF7.F-J-L|7 +|L-7FF7.7LFJ|L---J|LJ|FJLJ|F7L-7|F7||||||||||||L77||||FJ|LJ|||F-J|||FJ|||||||||F-J||L7|L7F-J|||.LJFJ|FJ|-F7F---------JLJJLJF7F7FFFJ|F77JF|LF +77-L-L77FFL7|F7F-7|F-JL7F7LJL7FJLJLJLJ||LJ|||||FJFJ|||L7L-7FJ|L7FJ|||FJ||LJ|||||F7||FJ|FJ|F7|||F--JFJ|FJFJLJF-7F7F---------JLJL7FL7LJL7L-J|| +|L-7FF7-F-7||||L7LJL7F-J||F-7LJF-----7|L7FJ|LJ|L7L7|||FJF7|L7L7||FJ|||FJL7LLJLJLJLJ||FJL7LJ||LJ|F-7L7||FL---JFJ|LJF--7F7F------JF7|F--J.L|7| +7J7FFJ|FL7LJLJL7|F--JL-7|||FJF-JJF---J|FJL7L-7|FJ-LJLJ|FJLJFJFJ||L7||||F7L-------77|||F7||FJL7FJ|FJFJ||F----7L-JF7|F7LJLJF------JLJL--77FLF7 +|L--L7L7|L----7|LJF7F7FJ|LJ|FJ|F-JF--7|L7LL7FJLJF7F---JL--7|FJ-LJFJ|||LJL7F-7F--7L7||LJ|L7L7FJL7|L7L7LJL---7|F7FJLJ||F---JF7F--7F7F7F7|.F-77 +L7J|FL7L-7F7F7|L7FJ|||L-JF7LJF-JF7|F-JL-JF-JL-7FJLJF-7F7F-J|L-7F7L7||L-7L||FJL-7L7||L7FJFJ-LJF7||FL-JF----7||||L---JLJF-7FJ|L-7LJLJ||LJ7JLLJ +.|FF--JF-J|LJLJFJL7||L7F-JL7FJF-JLJL7F7F7L---7|L--7L7|||L-7L7FJ|L-J|L7FJFJ|L-7FJFJ|L-J|FJ.F--JLJL-7F7L---7LJLJL----7F-JFJ|.L-7L--7L||.FJ7LJ. +FLFL7F7L7FJF7F7L--JLJFJL-7FJL-J.F7F-J|||L--7FJL-7FJFJ||L7FJ.||FL7F7||||FJFJF-J|7L7L--7LJF7L--7F7F-J||F7F7L7F7F----7|L-7L7L-7J|F-7|-|L7-LJ-JF +7JL.||L7LJFJLJL-7F--7||F-J|F7F--J|L--JLJF7FJL7F-JL7L7||J||F-JL7FJ||L7||L7L7L-7L7FJF7FJ.FJL---J||L-7|||LJ|FJ|||F---J|F-JF|F7L7LJ7|L7L-JF7-|.| +77LF||F|F7|F-7F-J|-FJL7|F7|||L--7L---7F-J||.|LJJF7|FJ|L7LJL7F7|L7|L-JLJ|L7L-7|FJL7||L7FJF----7|L--J||L-7||FJLJL7F7JLJFF-J|L7L--7|FJJ|-F--J7J +|7JLLJ-||||L7|L-7|FJF7|LJ|LJL---JF-7FLJF7|L7F---JLJL7L7L--7||||FJL-7F----JF7||L7FJ|L7|L7L7F--J|7F7|||LFJ|||F---J||F7F7L-7L7|F7FJ||J7|-|L|L|7 +.--FFLFLJLJFJL--J|L-J|L--JF--7F7FJJL---J||FJL7F--7F7L7L7F7|||||L7F-JL-7F7FJ||L7|L7|FJ||L7|L--7|FJL7|L7L7|LJL-7F7|LJLJL-7|FJ||LJ-||.F77|-LJL| +7J--|.LL-F7L--7F-JF--JF---JF7LJLJF|F7F7FJLJF7||F-J|L7||LJLJLJ|L7||F---J||L7||FJL7||L7|F-J||F-J|L-7|L7L-JL----J|LJF-----JLJ.LJJ|-LJFJL--7.--J +L--7..FLFJL-7-LJF7L---JF---JL-7F-7FJLJLJF7J||||L-7|7|L---7F-7|FJLJ|F7F7||FJ||L7FJ|L7||L-7|FJF7|F-JL-JF------7FJF7L-7F--7F---7FFF-7|F---J7-FJ +-|F7-L77L--7L7|FJL-----JF7F-7FJL7|L-----JL-J|LJF7|L7|F7F7LJFJ|L--7LJ|||||L7|L7||FJFJ||F-J|L-J||L-7F-7L7F----J|FJL7FJ|F-J|F--J7JL7LJL-7LLJ-L- +|FLJ.L-7L|.L7L-JF--7F-7FJLJFJL--JL----------JF7|LJFJ|||||F7L7|F7FJF-J||||FJL-JLJL7L7LJL7FJF-7LJF-JL7L-JL-----JL-7||7|L--JL7F7-F7L-7F-J.L7.FJ +7|L|7J...F7FL7F7L7LLJJ||F--JF7F7F7F---------7|||F7L7||LJ||L-JLJLJJL-7|LJ|L---7L|F|FJF7.LJJL7|F-JF7FJF7F7F---7F--JLJFJF7F7FJ|L7|L7FJL-7..LJ7| +.|-LL.|-FF---J|L7L7F7FJ|L---J||LJ||F-------7|||LJL7||L-7|L--------7FJL-7|F-7FJF--J||||F7F7-||L-7|LJFJLJ|L--7LJF7F7-|FJLJLJ.L7LJFJL7F-J7.|-|7 +J|-FJF|-LL7F--JJL7|||L7L7F---J|F-J|L--7FF7FLJ|L7F-J|L-7|L7F7F7F7F-JL7F7||L7LJLL--7|FJLJ|||FJL--JL7FL7F7L---JF-J||L7|L------7L7FJF7||FLF--7L- +|--JFLF-|J||F---7LJ||J|FJ|F-7FJL--JF-7L-JL7F-JFJL-7L-7|L7LJLJ|||L-7FJ|LJL7|-|JJFFJ|L--7||LJF-----JF7LJL7F---JF7LJFJ|F---7F7L-JL-JLJL7-|F-JLJ +77FLF-F-7J||L7F7L--JL-J|FJ|FJ|F----J7L----JL-7L--7|F7|L7L7F7-LJ|F-JL7L7JJ|L-7-F-L-JF--JLJF7|F---7FJL---J|F-7FJ|F7L-JL--7|||F-7F7F7F7L-JL--7| +F-F-J.|7F-LJ7LJL-----7FJ|FJL7|L-------------7|F--JLJ|L7|FJ||F77LJ-LLL-J|L|F-JF7|F7.L-----J||L-7FJ|F7F---JL7LJ||||F-7F--JLJLJ.|||||||F7F---J7 +|||J|FLLJ7L||.F7F--7|LJFJL77LJFF--7F7F7F----J|L----7L-J||FJ|||F7F7JFLJFL.LJ-FJL7|L--7F7-F7LJF-JL-J|||F----JF-7||||FJL-7F7F7F7LJLJ||LJ|L-7|J| +F|..FJ.L-F7F7FJLJF7L---JF-JF---JF7LJ||LJF7-F7|F----J|F7LJL7LJLJLJ|-LJ.-.LJLFL-7|L--7LJL-JL--JF7F-7|LJL-----JFJLJLJL7F-J|LJ|||F--7|L7|L-7L77. +LL777|7-FJLJ|L-7FJL-7F7FJF-JF---JL-7|L--JL-JLJL------JL7F7|F----7|JLF-F77LFF--JL---JF7F7F7F7FJ|L7||F--------JF7F7-FJL--JF-J||L7FJL7L--7|FJ|7 +L||L77|-L--7|F7LJF7JLJLJ-L--JF--7|FJL7F-7F7F7F---7F-7F7LJ||L---7LJ-JL7-LFFJL--7F-7F7|||LJLJLJFJFJ|||F7F------JLJL7L-----JF7|L-JL-7|F--J||JL7 +.L7FL-JFF--JLJ|F7||F-7FF7F7F-JF7L7L-7LJJ||LJ|L--7LJFJ||F7LJF---J-|.7J|7||.FJFFJ||LJLJLJF-----JFJ|LJLJLJF--7F7F7F7L7-F----JLJF7F7FJLJ-F7LJ|.L +F-LF.FFFJF---7LJLJ|L7L-JLJ|L--JL7L--JF-7|L-7|F-7L-7L-J||L7FJ|7.JL|F|.7---7.LLL-JF-----7|F--7F7|.F7F---7L-7LJLJLJL7L-JF---7F-J|||L----JL7-|7J +.LL|7J7L-J-F7L7F-7L7L7F--7|F7FF7L--7F|FJ|F7|||FJF7L--7LJF|L-7-J7LLL.-|.JJJ7-|F--JF-7F7LJL-7LJLJFJ|L--7|F7L----7F7L--7L-7FJL7|||L7F-----JFJJ7 +--F-|.FL7F-J|.LJ7L7|7LJLFJLJ|FJL--7L7|L7LJLJLJL7|L--7L7F-JF-J.|L7||J|LFJ||J|FL--7|.LJL----JF--7L7L---JLJL-----J|L--7|F7||F7L7LJJ|L----7----L +|F-JL-JJFJF-JF--7|||F7F7L--7|L-7F7L-J|FJF7-F7.FJL--7L-J|F7L---7J||J|||L-7FF-L7FLLJF7F-----7L7FJFL--------7F-7F-JF--JLJLJ|||FJF7F|F-7F-J7|.L| +||-J|LJ.L7L7L|F-JFJLJ|||F7FJL--J|L-7.|L-JL-JL7L--7FJ|F7LJ|F---J7|JJ-LL7-L7L-7F|-LFJLJF---7L-J|F7F7F------J|FJ|F-JF7F---7|||L7|L7|L7LJJ--7.F| +|7.F|7F7FL7|FJ|F7L-7FJ||||L7F7F-JF7L-JF7F----JF-7LJFFJL-7|L7F7J7F7.F7-|FL-7L7JLF|L---J|F7L7F7LJ|||L7F7F7F7|||||F7|||F--JLJL7LJFJ|FJJL||.F|FJ +L.77LJ-F--JLJFJ|L--JL7|LJL-J|||F-J|F7FJ|L----7|FJF7FJF7FJL7LJ|FFJLF-|--||LL--7-7-FF----JL-J|L-7LJ|FJ|||||LJL-JLJLJLJL-----7|F7|7|||LLFF7-FL. +J7|.FL.L--7F7L-JF-7F7LJF-7F7|LJL-7LJLJLL7F7F7LJ|FJ||FJLJF7L--JF7-|.|LF.|-F7FLL7JLFJF--7F---JF7L-7|L-JLJLJF---7F7F--7F7F7F-JLJLJFJ|7-.|L-J||J +||LFJLFLLFJ||F--JFJ||F7L7||||F---JF7F7F7LJLJL--J|FJ||F|FJL-7F7FF-7-L-7|7LLJJ-7F-FL-JF7LJF7F7|L--JL7LF77F7L--7|||L-7LJLJLJF7F--7L-J|||77|.-JJ +FJFL7.|.||FJ||F--JFJLJ|FJLJLJL----JLJ||L---7F7|FJ|FJL7FJF--J|L7|FJJLLJLFJL.|FL|JLLF7||F-J|||L--7F7L7|L-JL-7FJLJ|F-JF-----JLJF-JFJJ|JJLJJ-|LF +F-7JLFF7FJ|FJ||F--JF--J|F--------7F--J|F---J|L7|FJ|F-J|FJF7FJFJ||JF7.LF-7J-J-JLF--JLJLJF7LJL---J||FJL-7F-7LJF-7||F7L7F------JF77-F--7-|J7F-| +L-J|.L|LJFJ|FJLJLF7L7F-JL----7F-7|L---JL----JFJ|L7|L-7||FJ||FJFJL7J||.F|JF77F7L|F---7F-J|F------J||F7FLJ-L--JFJLJ|L-JL------7||F-7LFL7L--J-J +.L-JFLL-7L7LJL|F-JL-J|F----7-LJFJL--7F-------JFJFJ|F-J|||FJ|L-JF7|FLFF77.|L-7.F||.|.LJ7FJ|F------JLJ|F7F7F---JF--JF-7F7F----J|LJFJFJL-JJ|JFJ +||.|L-J-L7|.F7FJF7F--JL---7L7F7L---7LJF--7F7F7L7L-JL--JLJL-JF--JLJ7FL||L|J|LL-LLJ-L7F--JFJL-7F--7F-7LJLJ|L---7|F--JFLJLJF7JF7|F7|L7.F|FL|.|| +.LL7JJL-LLJFJLJFJ||F7.F7F-JFJ|L----JF-JF7LJLJL-JF-7F----7F-7|F---7JJL|L7|-J7|JF||.LFL---JF-7LJF-J|FL---7L-7F7||L7F--77F7|L-JLJ|LJ|L-7FJFJ777 +J..|7L7.LLFJF-7|FJ||L7|LJF7L7L---7F7L7FJ|F-7F7F7|FJL7F-7|L7|LJF7FJ|.F|FJJ||L7-L7-F7F7F7F7|FJF-JF7|F----JF7LJ|LJFJ|F-JFJLJF-7F7|F77.LLLJL-LLJ +F-LLL-LF7L|FJJLJL7|L7LJF7|L7L----J|L-JL7|||LJLJ|||F-J|FJL-JL7FJLJF7-FJ|L||-FJL.|J|||||||LJ|FJF7||||F7F7FJL-7L--JFJL--JF7FJ-LJLJ||77FJ||7|.LF +FJ-LLF--|JLJF-7F7LJF|F7||L7L7F----JF7F-J|L----7|||L--JL---7FJL--7|L7L7|L7|LJ|LFF7|LJLJ|L-7LJFJLJLJLJ||||F--JF--7|F---7|||F-----JL7.L7L--.F.- +L7FFLJJL|7L|L7||L---J||||FJLLJF----JLJF7L--7F7|||L7F-7F7F-JL--7FJL7|FJ|-JF-F7.FJ||F7F7|F7L--JF------J|LJL---JF-J|L--7LJLJ|F-7F-7FJJL-|J.F-.| +L777J|J.L||F7||L-----JLJLJ|F-7L-------JL--7LJLJLJ-|L7||LJ-F7F7||F-JLJFJLF7|LF-JFJLJLJ|LJ|.F7FL--7F---JF7-F7F7|F-JF--JF7.FJL7|L7LJJ-F7L7FJJF7 +F||||.F7F|-||||F7FF--7F7JF7L7L---------7F7|F7F7F-7|FJ|L7F7||||LJL---7L7FJL7LL-7|F7|F7|F7L-JL7F7-LJF-7FJL-JLJ|LJF7L---JL-JF7|L-JJF7-LF7L|JJJJ +|FJ--7LJ||.|LJLJL-JF7LJL7|L7L---------7|||LJLJLJFJ|L7L7LJ||||L7JF--7L7LJF-JF77||||FJ|LJL7F7FJ|L-7.L7|L-----7L7FJL7F----7FJLJLF7F|JFLLJLF7L7| +.L|J|FFJ|JFL-7F7F--JL--7||FJF---------JLJL--7F--J-L-JFJF7LJLJFJFJF-JF|F-JF-J|FJ||||FJJF7LJ|L7|F7L--JL------JJ|L-7|L---7|L-7F-JL----7FJ-LJ7|7 +F.L77-F--7JF-J||L7F----JLJL7L--7F----7F7JF-7|L------7L7||F7F-J.|FJF|FJL7||F-JL7||||L7FJL7FJFJLJL----7F-7F---7L--JL----JL--J|F------J7J||L-.F +L|.||JL|LF.L-7|L-JL-------7|LF7LJF---J||FJFJL7F----7L7LJ|||||F-J|F7FJF7L-JL77FJLJ||FJL-7|L7L7F7F7F7LLJFLJF--J|F7F---7LF7.F-JL-7F--7L-JL7J|-| +FJJ----J7LF7JLJF7F-------7||FJL7FL----JLJFJF-JL---7L-JF7LJLJFJF-J|||FJL7F-7L7L-7FJ||F7FJL-JFJ||||||F--7F-JF7F7|||F--JFJL-JF---J|F-J7JF--7L7| +7|.LJLF.F7JLF7|||L---7F-7LJLJF7L--7F7F---JLL-7F---JF7FJL7FF7L7|F7||LJF-J|LL-JF7||FJLJ|L-7F7L7||||||L-7|L-7|LJLJLJL---JF7F7L7F-7|L-7F--7FJ.|J +L7.FL-J-|-7-|L-JL7F7.LJFJF-7FJL--7||LJF---7F7||F7F7||L-7L7|L-JSJ||L-7L-7|F7F-J|||L7F-JF7LJL7LJLJLJL7FJL--J|F-7F7F7F---JLJL-J|FJ|F-J|F-J7.F|J +|L-7-|7L|L.LL-7F7LJL--7|FJFJ|F7F7||L7FJF--J||LJ|LJ|||F7L7||F7F7FJL-7|7FJLJ|L-7||L7||-FJ|F7|L--7F--7LJF----JL7|||||L-----7F--J|FJL--JL7-7JJJ7 +LF-7-7-77J-7JLLJL----7LJL7L-J|||LJL-J|FJF--J|F-JF-J|LJL7|LJ|||LJF--JL7L-7FJ|FJ|L7LJL7L7||L7F--JL7|L--JF7JF-7||||||F7F---JL7F-J|F-7F--J7J|.L| +|L7J-J.|-7-JF|LF7F7F7L---JF--JLJF----JL-JF--JL-7|F7L--7|L7FJLJF7L---7L7FJ|F7L7L7L7F7L7||L7|L-7F7L7-F--JL-J7LJLJLJLJ|L-7F7FJL--JL7LJ|F-77.FF| +JJ.|.FFL-|.FJLFJLJLJ|F-7F7L-----JF------7L7F7F7|LJL7JFJ|FJL7F7||F7F-JFJL7|||FJFJ7LJ|FJ|L7||F7||L-JFJF----7F------7FJF7LJLJF-7F-7L--7L7L7F7-. +LFF-777|FL-J7.L---7FJL7||L-------JF----7L7LJLJ|L-7FJFJFJ|F-J|||LJ|L-7|F7|||||FJF7F7|L7|FJ|||||L7F-JFJF---JL7F----JL7|L7F7FJL|L7|F7FJFJFJ|||7 +F|L-J.LL|.FLFF7F--J|F7||L---------JF7F7L7|F---JF7|L-JFJFJL--J||F7L7FJLJLJ||LJL-J||||FJ||FJ|||L-J|F-J||F----JL-7-F77LJFLJ|L-7|FJ|||L-JFJFJL77 +F-J|.F7.L---FJ|L--7|||||F--7JF-----J||L-JLJF-7J||L7F-J7L7F---JLJL7|L-7F7FJL-7F--J|||L7||L7||L7F-J|F-7LJF--7F7FJFJL-7F7F7L7FJ|L7||L7F7L-JF7L7 +|L7JF|-77L7FL7|F--JLJLJ|L-7L7|F7F--7LJF7F7-L7L-JL-JL-7F7||FF-7-F7||F7LJ|L-77|L7F7|LJFJ||FJ||FJL--JL7L--JF7LJ|L7|F-7|||||7LJ.L7|||F|||F7FJL7| +-JF7LJJJF.F77||L------7|F7|FJLJ||F7L7FJLJL-7|F7F--7F7||||L7L7L7|LJLJ|F7L-7|FJFJ||L-7L7|||FJ|L-7F-7FJF---JL-7L7LJL7|LJLJL----7|||L7LJLJ|L7-LJ +.L7L77J.F-JL-JL-------JLJLJL7F7LJ|L-JL7F---JLJ||F7LJLJ|||FJJL7|L--7FJ||F7||L7L-JL7.L7LJ|||FJF-J|FJL-JF-----JFL---J|F--7F7F--J||L7|J|7LL7|-J| +L.L7--JLL-------7F----7F7F-7LJL-7L---7||LF-77FJLJ|F7F7||||JF7||F7FJ|FJ||LJL-JF---JF7L-7||||FJJFJL7-F7L---7LF7F7F7.|L-7|||L--7|L7LJF7J-FJ|JFJ +.F7L-|7JFLF-----J||F7LLJLJ-L-7F-JF---J|L7L7L7L7F-J|||||||L-JLJ|||L7|L7|L--7F-JF7F7||JFJLJ|||F-JF-JFJ|F7F7L-JLJLJL7L--JLJL-7FJL-J7.LL-FL-JF|| +7LJ|F7J||-|F----7|FJL---7F7F7||F7L-7F7|FJFJFJF||F7||||||L--7F-J|L7|L7||F-7|L-7|||||L7L7F-J||L-7|F7|FJ|||L--7F7F--J.F7FF--7|L7-F--7.|.||J.F7| +77.FF7LF--J|F---J|L7F7F7LJLJLJLJL--J||||-|FJF7||||||||||F7J||F7L7||FJ|||FJL7FJ||||L7|L||F7||F7||||||7||L-7|LJ|L--7FJL-JF-JL-JFJF-J7.F--7.7-- +F-F7||-L---JL7F-7||LJLJL-7F-7F-7F7F7||||FJ|FJ||||||||||||L7||||FJ||L7||||F7|L7||||FJL7|||||||||LJ||L7||F7L--7|F-7LJF--7L-7F-7L7|F7-FLJLJ7|-J +L-JL|J7LF---7|||LJF7F----JL7||FJ|LJ||||LJFJL7||||||||LJLJFJ|||||FJ|FJ|LJLJ|L7||LJ|L-7||||||LJ|L7FJL7LJ|||F7FJ|L7|F7L-7|F-JL7|FJLJ|-J-F7.|7-| +F|-LJ.L-L--7|LJF--J|L---7F7|||L-J-FJ||L-7|F-JLJ|||||L--7FJFJ|||||FJL7|F7F-JFJ|L7J|F-JLJLJ||F-JFJL7FJF7||LJ|L7|FJLJL--JLJF7FJLJF--JJ.F7-7LL-7 +FL.L7.|.F--J|F7L--7|F---J|||LJ|F7FJFJ|F-J|L7F--J||||F7FJL7|FJ|||||-FJLJ|L-7|FL-JFJL---7F-J|L-7L-7|L-J||L-7|FJ|L----7F-77||L7F-JF7|.F7JL.77F| +77FJ|F--JF-7LJL---JLJF7F7|||F--JLJFJF|L-7|FJ|F7FJ||||LJF7LJL7|LJ|L7|F7FJF-JL--7L|F-7F7|L-7L7FJF7|L7F7||F7|||FJF----JL7|FJL-JL--JL7-F7.FJL7-7 +|FF-LL7F7|.L-7F7F---7|LJLJ||L----7|7FJF7||L7||||FJ||L-7|||F-J|F-JFJ||||FJF7F7FJFJL7||||F-JFJ|FJ|L7||||||LJ||L7L------JLJF-7F7F---JF|L-J-7J7| +FJ||.L||LJF--J|||F--J|F---J|F----JL7L7||||FJ||||L7||F7LJL7L--JL7FJJ||||L7|||LJ7L7FJLJ||L--JL|||L7|||||LJF-JL7|F-7F7F---7L7LJ|L-7..F7.F7.-JFL +JF-L-FLJLLL--7|LJ|F-7||F7F7|L7F-7F7L7LJ||LJ.||LJ7||LJL7F7L7F---JL7FJ|||-LJ||F7F7||F7FJ|F----JL-7LJLJ|L7FJF7FJ|L7|||L--7L7L-7|F7|7F|FFJ-7JFLJ +L|J|J|FL7LLF-JL7FJL7LJ|||||L7||FJ|L7L-7|L--7||F--JL-7F||L7|L7F-7FJ|FJLJF--J||LJLJLJ||FJ|F7F-7F7L---7L7|L7|||FJFJ|||F7FJ.L7FJ||LJJ--F.LLJ.LJ| +FJL|FJ7FFF-JF--JL7FJF-J||||FJ||L7|FJF-JL7F7|||L--7F7|FJ|FJ|FJ|FJL7|L-7FJF-7||F-7F7FJLJ|||LJFJ||F7F-JFJ|FJ|LJ|FJ-LJ|||L-77||-||LJL|FL77-J.F-7 +JJ-F-.F7L|F7|F--7|L7L--J|||L7LJ|LJL7L-7FJ|||LJF--J||||FJ|FJL7|L7FJ|F7||FJ7||||FJ||L-7F7||FFJFJLJ||F7L7||FJF-JL-7F-J||F7L7LJ-|L7J.LJ7L--.L7L7 +L|FL|.|.FLJLJL-7LJFJF---J|L-JF-----JF-JL-J|L-7L7F7|||||J||F-J|FJL7||||LJF-J|LJL7|L7FJ||||FJFJJF-JLJL7LJLJ7L7F7FJL-7|LJL7L7|FJFJ7..LJ-|.|.|.7 +FFF.LF|-F-7F---JF7L7|F7F7L--7L-----7L----7|F7|L||LJ||LJFJ|L7FJL7FJLJ|L-7L-7L7F7|L7||FJLJ|L7|F-JF-7F7L-----7LJ|L--7|L--7L7L7|FJ.|F-.JJLFL7F.| +FLJ7|F-7L7LJF7F7||FJ|||||F--JF7F7F-JF--7FJLJLJFJL-7|L7-|FJFJL7FJL7-FJF7L7FJFJ|LJFJ||L--7L7LJ|F7|FJ|L-----7|F-JF7FJ|F7FJFJFJLJJF-J|..7.|JFJF- +|JJF|JL7LL7FJ||||||-||||||F7FJLJLJF7L7-LJF7F7LL7F7|L7L7|L7L7FJL-7L7|FJ|FJL7L7|F7L7||F--JFJ-FJ|||L7L-----7|||F7||L7|||L7L7L-7F-7J-F7F|7JFF7J7 +||FLJ.F|.LLJ|LJ|||L7||LJLJ||L7F--7|L7L---JLJL-7|||L7|FJ|FJ7LJF7FJFJ||F|L-7|FJ|||FJ||L7F7L-7|FJLJ-L7F7F--JLJLJ|||FJLJ|FJFJF-J|FJJFL-7JJF|7F77 +L-||FL|J7F||F--J||FJLJF---J|-LJF7||FJF7F-7F7F7|LJ|FJLJFJL7F--JLJFJL|L7L-7|||-||||FJL7LJ|F-J|L--7F-J|LJ7F---7FJ||L-7LLJJL7L--JL7FJ-J||F-7||.| +|7|LF-L--J--L--7|||-JLL-7F7L7F7|LJ||FJ|L7||||||F7|L--7L7FJL7F7F7L7.L7L7FJ||L7||||L-7L7L|L-7|F7FJ|F7L7F7|F--JL7||F7L7F7-LL-7F7FJJFL---7FJ-|F| +7-FJJ.||7|7-|FFJ|LJ-|J.FLJL7LJLJF7||L7L7|LJLJ|||LJF--JFJL-7||LJL7L7FJFJL7||FJLJ|L7LL7L7L7FJ||||LLJL7LJLJL---7LJ||L7LJ|F-F-J|LJFL|.F|LJ|JFF77 +|JJJLL-L7L7J.FL-J.JJ|.FF77LL-7F7|||L7|FJL--7|LJL-7L--7L---J||F--JFJ|FJF7||LJLF-JFJF7L7|FJL7||LJF7F-JF-7F----JF-J|JL-7|J7L-7|FJJ7|-FF--7-FJLJ +F7|FF7LL|-L.F7L|.J7-|FFJL7FF-J|LJ|L7LJL-7F7|F7F--JF-7L---7|LJL7F7L7LJFJLJL--7L-7L7|L-J||F7|||-FJLJF-JFJL----7L-7L-7-||-JJFLJJJ-LJ|L7|.|.L7|7 +LL7-L|J|LFJ77|.-J.77FFJF7L-JF7|F-JFJF---J|LJ||L--7L7|F-7FJJ-F-J|L7L-7L7F7F-7|F-JFJL7F7||||||L7|F-7L-7|F7F7F7|FLL7FJ-LJ.L--|FL7.L-J-||7FF---F +.F77.|7|FLFF-J7.L7|FFL-JL-7FJ|||F-JFJF7F7L--JL--7|FJ|L7||7LL|F7L7L7FJ7LJ|L7LJL-7L7-LJ|||||||FJ||-L7FJLJ|||||L7LFJL7..L..F-L7-F7F|JLJ7-F.L|-| +FFJ|FJ7LL7JF7LL|.F-F------J|FJ||L-7|FJLJL7F--7F7||L7|FJLJ7LFLJL7L7|L7F--JFJJL7.L7|F--J|||LJ||J|L-7|L-7-LJ||L7L7L7FJ--L--J--JFJFL|-F-F-L7---J +F|-LLJFF-J-L7FJL-FJL-7F--7FJL7|L7FJLJF---J|LFJ|LJ|FJLJ..F|-FLJFJFJ|FJ|F7FJJ.J-|.LJL-7FJ||LL||FJF-J|F7L7F|LJJL-J-||J|FJ.LL7L-L-F7|.|.LJ.|7.LL +|J7-J-F|.|LLJ-.|F|7|J|L7FJ|LFJ|FJL7F-JF7F7L7L7L-7LJJF|-L-L7|JFJFJ7LJF||LJ|.77-|-|LJ|LJFLJLLLJL7|7LLJL7|J7LLL7.|LLJL-|.J7.|7L|JLF-7JF|F7F--.. +|L-7-L|J.|FLL7F-|J-JFL-JL7|7L-JL7FJL7FJLJ|FJFJF7|.LLFF7LJJ|7-|FJF7L|-||7LFF--FJFJ|LFJ|J-|-.LF-JL77-LL||7L7|LFFJ-.L7||-L--JF7J--7.FJFL7-F-J-L +7-LJ7|L--|7JL77.L||L|LL7LLJJ7F77|L-7||LLFJL7L-JLJ.F.LJ||7.F77LJ7|L-7J|L7|FL-7.F|-F-JJ||.JJFLL7F-J7JFL|L7J---F7J|-|F|J..|7L7.J7L|..7|FLF||.|J +L-J7.|.LJL-JF--7J|||L77-JJ|LFJL-JF-JLJ-L|F7L77LJ-L|FLL.F|-L|LJJ7|-FLJ|FJF|LLJ-7LF|F7.J--J7|-FLJ7|7.J-|FJL|L7LL7-.|L7L7-J7|JL|77|.F|F|.JL7777 +...F7|F7|LJFJ7F7.LF7L-L-J7LJ|F7F7|J|F|J7LJ|FJJJ-J-J.LL-F|JL-7|LLL.JJFLJJ-77LJ.|-J7.-FJFLJL7.L|--JF7|-LJJF--J-FJ|FJFJLL7L|JLLFJ-J7JL-J7JLFJF7 +-F|7LLJ-L.LF.-J|F|JLJJ-L.FJ.LJLJLJ.FFJJ7LLLJJ7JJ.JF|-JF-J-FL7-7|L7.||-JJ-J-7FF-7.77-77JL||J-7J-L7|JF7L-L-77L-LF|LLJLF7.7J--F|JJ-J7|J-77-JFJ7 +.LJ|7LL7L-F7-LJ||LFJ.|-L|JF7.J7|-L-J|JFL-7|LL7FFL-7.|7-FL7.-J|L7L7-L|JL7LL|L7J||FL-7-JJ.7J7.|J|||77||7F-L-7.FFJJ-FJ.F-J|-L.-JJ.|L7|.7L77F-7| +77L|-.|L7FLLJJ.L|7J..-.F-7-|7|7|||JFJ.-J.7J.FJ-JL|JJ.7-L7|77FJ.J.L.|JLFJJL7LLJFJLF7J.FF|J--7||||||FL7LJF|L|7-7|JFF--7FLL.||J7.-77FJJ|FF7JFF7 +-7-LLLJ|L|7FJ|F.J7...L7|F-7||7|J-J.L|7.|F|-JJ-F|||.|7LJL7.|L|F-FJJF|7FL|.7J..--77.|.L|JJ.|.F-7||F-F7L77FL.|7FJ---J77L-7|L-|JFF7L-7|-FJ|.L|L7 +L7LLLL--7L-JJL.LL--.|-F-L-|-7-LJJ-F.LJ--LJFJ--JL---7-LJLL-7.|JJ|.LF-FJ-LF|-7-|-J-F|-LLLL|-JLLFJLJ.L|JLJ7-F-FJ-7-J.-J-LJ7JL7-J.J7JJ|J|L-|.7-| diff --git a/10/main.s b/10/main.s new file mode 100644 index 0000000..c773045 --- /dev/null +++ b/10/main.s @@ -0,0 +1,231 @@ +global _start +[bits 32] +[section .text] + +%include "utils.s" + +_start: + +; find line length +mov edi, file +mov ecx, file.over - file +mov al, 10 ; \n +repne scasb +mov eax, edi +sub eax, file +mov [line_len], eax + +call print_dec +call newline + +; find S +mov edi, file +mov ecx, file.over - file +mov al, 'S' ; \n +repne scasb +mov eax, edi +sub eax, file +dec eax +mov [s_idx], eax +mov ebx, [line_len] +div ebx +mov [s_line], eax +call print_dec +call space +mov [s_col], edx +mov eax, edx +call print_dec +call newline + +mov ecx, (1024*64)/141 +mov edi, new_f +fill_new_f: +push ecx +mov al, '.' +mov ecx, 140 +rep stosb +mov al, 10 +stosb +pop ecx +loop fill_new_f + +; walk the loop +mov esi, file +add esi, [s_idx] +mov edx, esi ; last loc +mov ebx, [line_len] +; downs +lea edi, [esi+ebx] +cmp byte [edi], '|' +je walking_loop +cmp byte [edi], 'J' +je walking_loop +cmp byte [edi], 'L' +je walking_loop +; ups +neg ebx +lea edi, [esi+ebx] +cmp byte [edi], '|' +je walking_loop +cmp byte [edi], 'F' +je walking_loop +cmp byte [edi], '7' +je walking_loop +; lefts +lea edi, [esi-1] +cmp byte [edi], '-' +je walking_loop +cmp byte [edi], 'L' +je walking_loop +cmp byte [edi], 'F' +je walking_loop +; rights +lea edi, [esi+1] +cmp byte [edi], '-' +je walking_loop +cmp byte [edi], 'J' +je walking_loop +cmp byte [edi], '7' +je walking_loop +jmp fucked_up + +; | - 7 J L F +walking_loop: +pushad +xor edx, edx +mov eax, edi +sub eax, file +mov ebx, [line_len] +div ebx +call print_dec +call space +mov eax, edx +call print_dec +call newline +popad +inc dword [final_value] +mov ebx, edi +sub ebx, file +mov al, [edi] +mov [ebx+new_f], al +cmp byte [edi], 'S' +je done_walking +c_pipe: +cmp byte [edi], '|' +jne c_hyphen +mov eax, edi +add eax, [line_len] +cmp eax, edx ; last loc +je .other_dir +mov edx, edi ; last loc = loc +mov edi, eax +jmp walking_loop +.other_dir: +mov edx, edi ; last loc = loc +sub edi, [line_len] +jmp walking_loop +c_hyphen: +cmp byte [edi], '-' +jne c_7 +mov eax, edi +add eax, 1 +cmp eax, edx ; last loc +je .other_dir +mov edx, edi ; last loc = loc +mov edi, eax +jmp walking_loop +.other_dir: +mov edx, edi ; last loc = loc +sub edi, 1 +jmp walking_loop +c_7: +cmp byte [edi], '7' +jne c_J +mov eax, edi +add eax, [line_len] ; down +cmp eax, edx ; last loc +je .other_dir +mov edx, edi ; last loc = loc +mov edi, eax +jmp walking_loop +.other_dir: +mov edx, edi ; last loc = loc +sub edi, 1 ; left +jmp walking_loop +c_J: +cmp byte [edi], 'J' +jne c_L +mov eax, edi +sub eax, [line_len] ; up +cmp eax, edx ; last loc +je .other_dir +mov edx, edi ; last loc = loc +mov edi, eax +jmp walking_loop +.other_dir: +mov edx, edi ; last loc = loc +sub edi, 1 ; left +jmp walking_loop +c_L: +cmp byte [edi], 'L' +jne c_F +mov eax, edi +sub eax, [line_len] ; up +cmp eax, edx ; last loc +je .other_dir +mov edx, edi ; last loc = loc +mov edi, eax +jmp walking_loop +.other_dir: +mov edx, edi ; last loc = loc +add edi, 1 ; right +jmp walking_loop +c_F: +cmp byte [edi], 'F' +jne fucked_up +mov eax, edi +add eax, [line_len] ; down +cmp eax, edx ; last loc +je .other_dir +mov edx, edi ; last loc = loc +mov edi, eax +jmp walking_loop +.other_dir: +mov edx, edi ; last loc = loc +add edi, 1 ; right +jmp walking_loop + +done_walking: +mov eax, [final_value] +inc eax +shr eax, 1 +mov [final_value], eax + +game_over: +mov eax, [final_value] +call print_dec +call newline +; go get an image editor and fill +; and ready for lots of counting :3 +mov esi, new_f +mov ecx, file.over - file +call print_string +call newline +jmp exit + +fucked_up: +mov eax, 999999999 +call print_dec +jmp exit + +[section .data] +line_len: dd 0 +s_idx: dd 0 +s_line: dd 0 +s_col: dd 0 +final_value: dd 0 +file: incbin "input" +.over: + +[section .bss] +new_f: resb 1024*64 diff --git a/10/main_part1.s b/10/main_part1.s new file mode 100644 index 0000000..bea3060 --- /dev/null +++ b/10/main_part1.s @@ -0,0 +1,208 @@ +global _start +[bits 32] +[section .text] + +%include "utils.s" + +_start: + +; find line length +mov edi, file +mov ecx, file_lim - file +mov al, 10 ; \n +repne scasb +mov eax, edi +sub eax, file +mov [line_len], eax + +call print_dec +call newline + +; find S +mov edi, file +mov ecx, file_lim - file +mov al, 'S' ; \n +repne scasb +mov eax, edi +sub eax, file +dec eax +mov [s_idx], eax +mov ebx, [line_len] +div ebx +mov [s_line], eax +call print_dec +call space +mov [s_col], edx +mov eax, edx +call print_dec +call newline + +; walk the loop +mov esi, file +add esi, [s_idx] +mov edx, esi ; last loc +mov ebx, [line_len] +; downs +lea edi, [esi+ebx] +cmp byte [edi], '|' +je walking_loop +cmp byte [edi], 'J' +je walking_loop +cmp byte [edi], 'L' +je walking_loop +; ups +neg ebx +lea edi, [esi+ebx] +cmp byte [edi], '|' +je walking_loop +cmp byte [edi], 'F' +je walking_loop +cmp byte [edi], '7' +je walking_loop +; lefts +lea edi, [esi-1] +cmp byte [edi], '-' +je walking_loop +cmp byte [edi], 'L' +je walking_loop +cmp byte [edi], 'F' +je walking_loop +; rights +lea edi, [esi+1] +cmp byte [edi], '-' +je walking_loop +cmp byte [edi], 'J' +je walking_loop +cmp byte [edi], '7' +je walking_loop +jmp fucked_up + +; | - 7 J L F +walking_loop: +pushad +xor edx, edx +mov eax, edi +sub eax, file +mov ebx, [line_len] +div ebx +call print_dec +call space +mov eax, edx +call print_dec +call newline +popad +inc dword [final_value] +cmp byte [edi], 'S' +je done_walking +c_pipe: +cmp byte [edi], '|' +jne c_hyphen +mov eax, edi +add eax, [line_len] +cmp eax, edx ; last loc +je .other_dir +mov edx, edi ; last loc = loc +mov edi, eax +jmp walking_loop +.other_dir: +mov edx, edi ; last loc = loc +sub edi, [line_len] +jmp walking_loop +c_hyphen: +cmp byte [edi], '-' +jne c_7 +mov eax, edi +add eax, 1 +cmp eax, edx ; last loc +je .other_dir +mov edx, edi ; last loc = loc +mov edi, eax +jmp walking_loop +.other_dir: +mov edx, edi ; last loc = loc +sub edi, 1 +jmp walking_loop +c_7: +cmp byte [edi], '7' +jne c_J +mov eax, edi +add eax, [line_len] ; down +cmp eax, edx ; last loc +je .other_dir +mov edx, edi ; last loc = loc +mov edi, eax +jmp walking_loop +.other_dir: +mov edx, edi ; last loc = loc +sub edi, 1 ; left +jmp walking_loop +c_J: +cmp byte [edi], 'J' +jne c_L +mov eax, edi +sub eax, [line_len] ; up +cmp eax, edx ; last loc +je .other_dir +mov edx, edi ; last loc = loc +mov edi, eax +jmp walking_loop +.other_dir: +mov edx, edi ; last loc = loc +sub edi, 1 ; left +jmp walking_loop +c_L: +cmp byte [edi], 'L' +jne c_F +mov eax, edi +sub eax, [line_len] ; up +cmp eax, edx ; last loc +je .other_dir +mov edx, edi ; last loc = loc +mov edi, eax +jmp walking_loop +.other_dir: +mov edx, edi ; last loc = loc +add edi, 1 ; right +jmp walking_loop +c_F: +cmp byte [edi], 'F' +jne fucked_up +mov eax, edi +add eax, [line_len] ; down +cmp eax, edx ; last loc +je .other_dir +mov edx, edi ; last loc = loc +mov edi, eax +jmp walking_loop +.other_dir: +mov edx, edi ; last loc = loc +add edi, 1 ; right +jmp walking_loop + +done_walking: +mov eax, [final_value] +inc eax +shr eax, 1 +mov [final_value], eax + +game_over: +mov eax, [final_value] +call print_dec +jmp exit + +fucked_up: +mov eax, 999999999 +call print_dec +jmp exit + +[section .data] +line_len: dd 0 +s_idx: dd 0 +s_line: dd 0 +s_col: dd 0 +final_value: dd 0 +file_lim: dd file.over - file +file: incbin "input" +.over: + +[section .bss] diff --git a/10/solution.png b/10/solution.png new file mode 100644 index 0000000000000000000000000000000000000000..78b1e9e6f2a09f3bf94cff3674d316c30ecb4dbc GIT binary patch literal 19513 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 Y$j{ASu9^+r1qR4UD!wRwZuI8=1KNBdlmGw# literal 0 HcmV?d00001 diff --git a/10/utils.s b/10/utils.s new file mode 100644 index 0000000..089c245 --- /dev/null +++ b/10/utils.s @@ -0,0 +1,258 @@ +; call # val val2 +; int $0x80 eax eax edx - +; +; arg1 arg2 arg3 arg4 arg5 arg6 arg7 +; ebx ecx edx esi edi ebp - + +exit: +mov eax, 1 ; exit +int 0x80 + +; filename in EBX +; return handle in EBX +; read only +open_file: +push eax +push ecx +mov eax, 5 ; open +xor ecx, ecx ; read only +int 0x80 +mov ebx, eax +pop ecx +pop eax +ret + +; file handle in EBX +; buffer in ECX +; count of bytes to read in EDX +; return bytes actually read in EAX +; exits on error +read_file: +mov eax, 3 ; read +int 0x80 +test eax, eax +js .err +ret +.err: +mov eax, 4 ; write +mov ebx, 1 ; stdout +mov ecx, .err_str +mov edx, 21 +int 0x80 +jmp exit +.err_str: db `Could not read file.\n` + +; string input in ESI +; value in EAX +; CF set if none, clear if some +; ESI set past checked area +dec_parse: +push ebx +push edx +push edi +xor eax, eax +xor edi, edi +mov ebx, 10 ; base +lodsb +sub al, '0' +js .no_input +cmp al, 9 +jle .got_char +.no_input: +stc ; set CF +jmp .done +.loop: +xor eax,eax +lodsb +sub al, '0' +js .dec_done +cmp al, 9 +jg .dec_done +.got_char: +xchg edi,eax +mul ebx +add edi,eax +jmp .loop +.dec_done: +clc ; clear CF +.done: +mov eax,edi +pop edi +pop edx +pop ebx +ret + +; string input in ESI +; value in EAX +; CF set if none, clear if some +; ESI set past checked area +sign_dec_parse: +push ebx +push ecx +push edx +push edi +xor eax, eax +xor edi, edi +xor ecx, ecx ; neg flag +mov ebx, 10 ; base +cmp byte [esi], '-' +jne .no_minus +inc esi +mov cl, 1 +.no_minus: +lodsb +sub al, '0' +js .no_input +cmp al, 9 +jle .got_char +.no_input: +stc ; set CF +jmp .done +.loop: +xor eax,eax +lodsb +sub al, '0' +js .dec_done +cmp al, 9 +jg .dec_done +.got_char: +xchg edi,eax +mul ebx +add edi,eax +jmp .loop +.dec_done: +test ecx, ecx +jz .not_neg +neg edi +.not_neg: +clc ; clear CF +.done: +mov eax,edi +pop edi +pop edx +pop ecx +pop ebx +ret + +; modifies no regs +newline: +pushad +push 10 +mov eax, 4 ; write +mov ebx, 1 ; stdout +mov ecx, esp ; string +mov edx, 1 ; length +int 0x80 +add esp, 4 +popad +ret +; modifies no regs +space: +pushad +push 9 +mov eax, 4 ; write +mov ebx, 1 ; stdout +mov ecx, esp ; string +mov edx, 1 ; length +int 0x80 +add esp, 4 +popad +ret + +; input in EAX, all regs unmodified +print_dec: +pushad ; save regs +; max 4294967296 is 10 chars +; round to nearest 32-bit boundary +sub esp, 12 +; string in ECX, length in EDX +lea ecx, [esp+11] ; last possible byte +; check for 0 +test eax, eax +jz .zero +mov ebx, 10 ; base 10 +xor esi, esi ; counter +.div_shit: +xor edx, edx +; divide +div ebx +dec ecx ; next char +inc esi +; store +add dl, '0' +mov byte [ecx], dl +; check if done +test eax, eax +jnz .div_shit ; continue +mov edx, esi ; counter in edx +jmp .write +.zero: +mov byte [ecx], '0' +mov edx, 1 ; length +.write: +mov eax, 4 ; write +mov ebx, 1 ; stdout +int 0x80 +add esp, 12 ; restore stack +popad ; restore regs +ret + +; input in EAX, all regs unmodified +print_sign_dec: +pushad ; save regs +; range -2147483648 to 2147483647 is 11 chars +; round to nearest 32-bit boundary +sub esp, 12 +; string in ECX, length in EDX +lea ecx, [esp+11] ; last possible byte +; check for 0, negative +xor ebp, ebp +test eax, eax +jz .zero +jns .positive +neg eax +mov ebp, 1 +.positive: +mov ebx, 10 ; base 10 +xor esi, esi ; counter +.div_shit: +xor edx, edx +; divide +div ebx +dec ecx ; next char +inc esi +; store +add dl, '0' +mov byte [ecx], dl +; check if done +test eax, eax +jnz .div_shit ; continue +mov edx, esi ; counter in edx +jmp .write +.zero: +mov byte [ecx], '0' +mov edx, 1 ; length +.write: +test ebp, ebp +jz .no_minus +dec ecx +inc edx +mov byte [ecx], '-' +.no_minus: +mov eax, 4 ; write +mov ebx, 1 ; stdout +int 0x80 +add esp, 12 ; restore stack +popad ; restore regs +ret + +; input in ESI, len in ECX, all regs unmodified +print_string: +pushad ; save regs +mov eax, 4 ; write +mov ebx, 1 ; stdout +mov edx, ecx ; length +mov ecx, esi ; string +int 0x80 +popad ; restore regs +ret