├── Readme.md ├── all-levels.txt ├── call-by-push-block-no-buffering.hs ├── call-by-push-block-ungolfed.hs ├── call-by-push-block.hs ├── encode-levels ├── Encode.hs ├── ghc-unicode-chars.txt └── levels-raw.txt └── puzzle-scratch.txt /Readme.md: -------------------------------------------------------------------------------- 1 | # Call-by-push-block 2 | 3 | Call-by-push-block is a sokoban game written in 10 lines of Haskell for the Feb 4 | '23 [Haskell Tiny Game Jam](https://github.com/haskell-game/tiny-games-hs). It 5 | is for the Prelude category and so does not use any imports. 6 | 7 | In Call-by-push-block, you are code golfing. To clear a level, you must move the 8 | lambda (`λ`) to push a block (`o`) into every hole (`_`). 9 | 10 | Your score is the number of moves you take. Like in real golf, a lower 11 | score is better, but make sure you can complete the level first before you 12 | try to get the best score. 13 | 14 | There are 15 levels of roughly increasing difficulty. They will take around an 15 | hour to complete, depending on experience. Your scores for each level are given 16 | at the end: compete with your friends to see who can get the lowest scores! 17 | 18 | ## General advice 19 | 20 | - You need to press Enter to submit your move (a quirk of this entry being in 21 | the Prelude category). 22 | - Try everything! You can always undo or reset if you reach an unsolvable 23 | state. 24 | - Read the [Controls in detail](#controls-in-detail) section if you're confused by the controls. 25 | - Read the "Hints" section if you get stuck. 26 | 27 | ## Quick start 28 | 29 | ### I have Haskell installed 30 | 31 | Run this for the vanilla user experience (`stack runghc` works too). 32 | 33 | ``` bash 34 | $ runghc call-by-push-block.hs 35 | ``` 36 | 37 | Run this version if you do not like having to press Enter after every move. Note 38 | that this version is provided for convenience and does not fit the rules and 39 | category of the game jam. 40 | 41 | ``` bash 42 | $ runghc call-by-push-block-no-buffering.hs 43 | ``` 44 | 45 | ### I don't want to install Haskell 46 | 47 | All credit for this solution goes to [Radon](https://github.com/raxod502) and 48 | [Radian](https://radian.codes/) for creating and hosting Riju. 49 | 50 | First, open up either `call-by-push-block.hs` or 51 | `call-by-push-block-no-buffering.hs` and copy the source code. 52 | 53 | Then, go to [https://riju.codes/haskell](https://riju.codes/haskell). 54 | 55 | Paste the code and hit Run. 56 | 57 | You'll be able to play the game in the terminal on the right side. 58 | 59 | ### More details 60 | 61 | See the [Running section](#running) for more details. 62 | 63 | ## The cast 64 | 65 | - `λ`: The player character. 66 | - `o`: A block you can push. 67 | - `_`: The hole you need to push a block into. 68 | - Joined by several others! 69 | 70 | ## Scoring 71 | 72 | - Your score is displayed beneath the level number, starting at 1. 73 | - It increments for every move and undo you make and resets whenever you 74 | reset the level. 75 | - A lower score is better, except for a score of 0 which indicates an 76 | incompleted level. 77 | 78 | ## Controls in detail 79 | 80 | Note that you need to press Enter in order to make a move. 81 | - Movement: wasd 82 | - w: up 83 | - s: down 84 | - a: left 85 | - d: right 86 | - Reset: x 87 | - Resets the level. Also resets your score. 88 | - Undo: u 89 | - Undoes one move. This feature is added for convenience since moves must 90 | be sent using the Enter key (and thus it takes longer to get back where 91 | you were if you make a mistake) and incurs a small score penalty. 92 | - Additional notes 93 | - When prompted with `↩`, press Enter to continue. 94 | - Technically, all keys map to a control. Try to avoid pressing an 95 | unlabeled key as you can accidentally skip a level this way. 96 | 97 | 98 | ## Hints 99 | ***WARNING**: Do not read this in plaintext, as the hints are "hidden" using 100 | `
` tags. Read the comments in `call-by-push-block.hs` for rot-13 101 | enciphered hints. 102 | 103 | I recommend revealing them in order until you find one that helps. If you 104 | are completely stuck on a level, there is a level skip code at the end. 105 | 106 | - Levels 1-5 107 | -
SpoilerYou can direct the player character off 108 | the grid. This will require you to reset in order to beat the 109 | level.
110 | -
SpoilerThe hash is a static obstacle. Like a 111 | hole, it cannot be moved or passed through. You also cannot push blocks into 112 | it.
113 | -
SpoilerYou can push multiple blocks at a 114 | time.
115 | -
SpoilerYou can push blocks off of the grid. Be 116 | careful not to push a block you need off the grid.
117 | -
SpoilerYou need an empty tile adjacent to a 118 | block in order to push it. For example, to push a block down, it needs an 119 | empty tile above it. Keep this in mind even for later levels since it will 120 | allow you to identify holes that are inaccessible to certain 121 | blocks.
122 | - Levels 5-8 123 | -
SpoilerThe first hint is no longer true: there 124 | are conditions where pushing a player character off the grid is necessary. 125 | Remember: you only need to push a block into each hole.
126 | -
SpoilerThe order you try things in often 127 | matters. Sometimes you may have the right idea but wrong execution 128 | order.
129 | -
SpoilerReset or undo early if you realize you 130 | are in an unwinnable state. A quick trick to determine whether you are in 131 | one is to count the number of remaining holes and check if there is a block 132 | that can be pushed into each. Refer also to the last hint of the previous 133 | section.
134 | - Levels 9-15 135 | -
SpoilerThe plus is a tile that destroys both 136 | player characters and blocks alike. When a block is pushed into it or a 137 | player character moves into it, both the plus and the object encountering it 138 | are replaced with an empty tile.
139 | -
SpoilerTake advantage of hashes or holes to move 140 | some player characters will keeping others stationary.
141 | -
SpoilerElaborating on the above hint, you will 142 | find that some things which seem impossible are only so because your player 143 | characters are not coordinated in space properly. Sometimes you need to 144 | coordinate them by moving one and keeping another stationary. Other times 145 | they will be separated in an unwinnable state.
146 | - Level skip cheat code 147 | -
SpoilerType "Cheat Code" (case sensitive) and 148 | press enter to skip the level. This will confer a score of 0, indicating the 149 | level was skipped. If you are playing on the unbuffered version, just typing 150 | the first letter will suffice.
151 | 152 | ## Running 153 | 154 | First, make sure that you have Haskell installed. I recommend using 155 | [GHCUp](https://www.haskell.org/ghcup/). This game is tested on GHC 9.2.5 but 156 | should run on most modern GHC versions. 157 | 158 | I highly recommend running `call-by-push-block-no-buffering.hs` for a better 159 | experience, although it might be behind `call-by-push-block.hs` if I make any 160 | more changes since I probably won't update the two at the same time. 161 | 162 | Both files require no additional arguments and can be run using `runghc`. For example, 163 | 164 | ``` bash 165 | $ runghc call-by-push-block.hs 166 | ``` 167 | 168 | Or with `stack`, 169 | 170 | ``` bash 171 | $ stack runghc call-by-push-block.hs 172 | ``` 173 | 174 | ## File structure 175 | 176 | - `call-by-push-block.hs` is the submission to the game jam. 177 | - `call-by-push-block-no-buffering.hs` is a version of `call-by-push-block.hs` 178 | with unbuffered IO which means that you do _not_ have to hit Enter after each 179 | move. 180 | - `call-by-push-block-ungolfed.hs` is a much earlier version that I wrote before 181 | golfing it. It has, however, diverged significantly from the golfed version. 182 | - `all-levels.txt` is all of the levels in order and their encoded form. This 183 | contains spoilers on the level contents. 184 | - `puzzle-scratch.txt` is where I have sketches of the levels (including some 185 | alternate/initial versions and unused levels). This contains spoilers on the 186 | level contents and solutions. 187 | - `encode-levels` contains code to compress the levels into Unicode characters. 188 | This folder may spoilers on level content (particularly 189 | `encode-levels/levels-raw.txt`). 190 | 191 | ## Acknowledgements 192 | - Golfing: I've learned a bunch about code golfing in Haskell from various 193 | tips and threads I've read from inumerably many people. I got some 194 | explicit help from The Ninteenth Byte on Stack Exchange with shaving 195 | characters off. Thank you! 196 | - Testing and design: I solicited help from a bunch of people who 197 | graciously lent me their time and feedback. Thank you! 198 | - The jam and feedback: #haskell-game and the organizers of The Haskell Tiny 199 | Game Jam. Thank you! 200 | - Playing the game in the browser: [Radon](https://github.com/raxod502) and 201 | [Radian](https://radian.codes/) for creating and hosting Riju. 202 | -------------------------------------------------------------------------------- /all-levels.txt: -------------------------------------------------------------------------------- 1 | Encoding set: "λo .+#_\n" 2 | Raw Length: 665 3 | Encoded: 晘㋲㛻嚵ѫ盝㞝ቂ㝑߳ⳛ㎋拓㾋ⱘ孭ひ・励㓛⭭マᙲ㛾⃝㱛㚙㛨宪㕵㝘㋐⛎㫛ϛ㙉ኛ㙈ኛ涀ʶ氉Ⴖぉ㚛㛛ᇛⴙ䘈㭾⛛䉀媴㛛㫯ⶭッ㑍坝㚤㛛坓䥫㛚≫〃㾵㛝㛛囚㛛ڛ㛫⛛孭嫭ᅕ䤉喤孭坫㛚㫛㪛囃盃㞛⛳䞛⛳䨫❭ቫ⨉੫❍婫❍ቅ❙孫❅㛛盫棛⛜䛣✛㛛⛛卝⫩㘛⛃㫫❝桝⫌㛝竛㝭㛛㪛㛰㛃ᝪ㭫哈坛ë㝓坝烰 4 | 5 | Level 1 6 | λ.o._ 7 | _.o.. 8 | 9 | Level 2 10 | ...#_ 11 | .#.#o 12 | λ#... 13 | 14 | Level 3 15 | #._.. 16 | λoooo 17 | #..._ 18 | 19 | Level 4 20 | .λ..._ 21 | .o_o.. 22 | .o_.o_ 23 | 24 | Level 5 25 | .λ.o_ 26 | ##### 27 | _oλ.. 28 | 29 | Level 6 30 | .λ.o_ 31 | o#... 32 | .#### 33 | _..λ. 34 | _o.o_ 35 | 36 | Level 7 37 | ...#..λ 38 | ..o_.o. 39 | ..λ#... 40 | #_###_# 41 | .λ.#..λ 42 | .o._o.. 43 | ...#... 44 | 45 | Level 8 46 | oλooo.... 47 | ooλoo.... 48 | ooλλ_____ 49 | oλooλ____ 50 | λooooλ... 51 | ......... 52 | 53 | Level 9 54 | λoo.+_ 55 | λoλ.+_ 56 | 57 | Level 10 58 | ##..... 59 | λλoo++_ 60 | ##..... 61 | 62 | Level 11 63 | #.#.##__ 64 | .λ.λ.#oo 65 | .#.#.#++ 66 | ........ 67 | #.#.##++ 68 | .....#oo 69 | .λλλ.#__ 70 | 71 | Level 12 72 | .#......... 73 | ...#....... 74 | .λ.#....... 75 | #######.### 76 | #λooo+++++_ 77 | ######.##.# 78 | .......#... 79 | #..λ..#.λ.. 80 | 81 | Level 13 82 | .._..._.. 83 | .._.+._.. 84 | .#λ#+###. 85 | .#oooooλ# 86 | .#o#λ#o#. 87 | .#o###o#. 88 | #λoooo.#. 89 | .#####λ#. 90 | ......#.. 91 | 92 | Level 14 93 | ...+_+... 94 | .+..+..+. 95 | ......... 96 | #.#o#o#.# 97 | ..λ...λ.. 98 | .#.#.#.#. 99 | #.o+_+o.# 100 | #.......# 101 | 102 | Level 15 103 | ###......... 104 | #.λ_....λ... 105 | ##.o.###.λo. 106 | #..#.#.#.λλ. 107 | #..#.#.#λ_.λ 108 | -------------------------------------------------------------------------------- /call-by-push-block-no-buffering.hs: -------------------------------------------------------------------------------- 1 | import System.IO 2 | n="晘㋲㛻嚵ѫ盝㞝ቂ㝑߳ⳛ㎋拓㾋ⱘ孭ひ・励㓛⭭マᙲ㛾⃝㱛㚙㛨宪㕵㝘㋐⛎㫛ϛ㙉ኛ㙈ኛ涀ʶ氉Ⴖぉ㚛㛛ᇛⴙ䘈㭾⛛䉀媴㛛㫯ⶭッ㑍坝㚤㛛坓䥫㛚≫〃㾵㛝㛛囚㛛ڛ㛫⛛孭嫭" 3 | e('λ':c)|(a,b)<-span(>'n')c=u(u a#m 1 b)%e(y b);e(c:d)=c:e d;e l=l;e&0=u.v;f&_=f 4 | v=foldr(zipWith(:))a;main=do{hSetBuffering stdin NoBuffering; print=<<(mapM o.zip[1..].r(h.words).lines$m 5.w.c=<f;p=putStr;l=length;w n="λo .+#_\n"!!mod n 8:w(n`div`8);d=getChar;z=m 1.u 6 | r=map;1?f=z;4?f=h[];5?f=y%z%z;i?f=(h.(f&i).r e.f.head)%id;q(x:_)=c x`mod`7;q _=0 7 | g=print;o(n,x)|x==[]=h 0|any(elem '_')$x!!0=do{n!x;p"λ:wasd 🔄:x 🔙:u\n";i<-q.pure<$>d; 8 | o(n,i?([v.u,v,id,v,v,v,r u]!!i)$x)}|0<3=l x<$n!x<*p"↩"<*d;k="λ.";y=drop 1;m=take 9 | n!x@(s:_)=p"\^[cLvl "*>g n*>g(l x)*>p(unlines s);c=fromEnum;[]#""=".";l#""=y l%k 10 | n#"."=n%k;[]#"+"="..";l#"+"='.':y l%k;('o':r)#"_"='O':r%k;l#x=x%l%"λ";h x=pure x 11 | a=[]:a;u=reverse;x=n%"ᅕ䤉喤孭坫㛚㫛㪛囃盃㞛⛳䞛⛳䨫❭ቫ⨉੫❍婫❍ቅ❙孫❅㛛盫棛⛜䛣✛㛛⛛卝⫩㘛⛃㫫❝桝⫌㛝竛㝭㛛㪛㛰㛃ᝪ㭫哈坛ë㝓坝烰" 12 | -- ^10 ------------------------------------------------------------------ 80> -- 13 | {- call-by-push-block-no-buffering (cole-k), ghc 9.2.5 14 | 15 | λ.o.o.o.o.o._.o.o.o.o.o.λ Call-by-push-block λ.o.o.o.o.o._.o.o.o.o.o.λ 16 | 17 | !!! This is a convenience version of call-by-push-block.hs which !!! 18 | !!! makes it so you do not have to press enter to submit each move. !!! 19 | !!! Refer to call-by-push-block.hs for more details. !!! 20 | -} 21 | -------------------------------------------------------------------------------- /call-by-push-block-ungolfed.hs: -------------------------------------------------------------------------------- 1 | module Sokoban where 2 | 3 | -- This is the basic ungolfed version, although I ended up making significant 4 | -- changes to the golfed version so the two have diverged quite a bit. 5 | 6 | import Data.List (transpose) 7 | 8 | sokobanGame :: [[Char]] 9 | sokobanGame = lines "@..._\n..o..\n..o..\n_...." 10 | 11 | main :: IO () 12 | main = gameLoop sokobanGame 13 | 14 | gameLoop :: [[Char]] -> IO () 15 | gameLoop sokoban = do 16 | mapM_ putStrLn sokoban 17 | if all ('o' `notElem`) sokoban 18 | then putStrLn "Winner!" 19 | else do 20 | playerInput <- getChar 21 | let index = playerInputToIndex playerInput 22 | let modifySokoban = [map reverse, id, transpose.reverse, transpose, undefined] !! index 23 | let undoSokoban = if index == 2 then reverse.transpose else modifySokoban 24 | let newSokoban = if index == 4 then sokoban else undoSokoban $ map doMove (modifySokoban sokoban) 25 | gameLoop newSokoban 26 | 27 | playerInputToIndex :: Char -> Int 28 | playerInputToIndex c = case c of 29 | 'a' -> 0 30 | 'd' -> 1 31 | 'w' -> 2 32 | 's' -> 3 33 | _ -> 4 34 | 35 | doMove :: [Char] -> [Char] 36 | doMove ('@':'o':c:rest) = '.':'@':(if c /= '_' then 'o' else c):doMove rest 37 | doMove ('@':'.':rest) = '.':'@':doMove rest 38 | doMove (c:rest) = c:doMove rest 39 | doMove x = x 40 | -------------------------------------------------------------------------------- /call-by-push-block.hs: -------------------------------------------------------------------------------- 1 | n="晘㋲㛻嚵ѫ盝㞝ቂ㝑߳ⳛ㎋拓㾋ⱘ孭ひ・励㓛⭭マᙲ㛾⃝㱛㚙㛨宪㕵㝘㋐⛎㫛ϛ㙉ኛ㙈ኛ涀ʶ氉Ⴖぉ㚛㛛ᇛⴙ䘈㭾⛛䉀媴㛛㫯ⶭッ㑍坝㚤㛛坓䥫㛚≫〃㾵㛝㛛囚㛛ڛ㛫⛛孭嫭" 2 | e('λ':c)|(a,b)<-span(>'n')c=u(u a#m 1 b)%e(y b);e(c:d)=c:e d;e l=l;e&0=u.v;f&_=f 3 | v=foldr(zipWith(:))a;main=print=<<(mapM o.zip[1..].r(h.words).lines$m 5.w.c=<f;p=putStr;l=length;w n="λo .+#_\n"!!mod n 8:w(n`div`8);d=getLine;z=m 1.u 5 | r=map;1?f=z;4?f=h[];5?f=y%z%z;i?f=(h.(f&i).r e.f.head)%id;q(x:_)=c x`mod`7;q _=0 6 | g=print;o(n,x)|x==[]=h 0|any(elem '_')$x!!0=do{n!x;p"λ:wasd 🔄:x 🔙:u\n";i<-q<$>d; 7 | o(n,i?([v.u,v,id,v,v,v,r u]!!i)$x)}|0<3=l x<$n!x<*p"↩"<*d;k="λ.";y=drop 1;m=take 8 | n!x@(s:_)=p"\^[cLvl "*>g n*>g(l x)*>p(unlines s);c=fromEnum;[]#""=".";l#""=y l%k 9 | n#"."=n%k;[]#"+"="..";l#"+"='.':y l%k;('o':r)#"_"='O':r%k;l#x=x%l%"λ";h x=pure x 10 | a=[]:a;u=reverse;x=n%"ᅕ䤉喤孭坫㛚㫛㪛囃盃㞛⛳䞛⛳䨫❭ቫ⨉੫❍婫❍ቅ❙孫❅㛛盫棛⛜䛣✛㛛⛛卝⫩㘛⛃㫫❝桝⫌㛝竛㝭㛛㪛㛰㛃ᝪ㭫哈坛ë㝓坝烰" 11 | -- ^10 ------------------------------------------------------------------ 80> -- 12 | {- gam-10-80-hs-prelude/call-by-push-block (cole-k), ghc 9.2.5 13 | 14 | λ.o.o.o.o.o._.o.o.o.o.o.λ Call-by-push-block λ.o.o.o.o.o._.o.o.o.o.o.λ 15 | 16 | Call-by-push-block is a sokoban game where you go code golfing. To clear a 17 | level, you must move the lambda (`λ`) to push a block (`o`) into every hole 18 | (`_`). 19 | 20 | Your score is the number of moves you take. Like in real golf, a lower 21 | score is better, but make sure you can complete the level first before you 22 | try to get the best score. 23 | 24 | There are 15 levels of roughly increasing difficulty. They will take around 25 | an hour to complete, depending on experience. Your scores for each level 26 | are given at the end: compete with your friends to see who can get the 27 | lowest scores! 28 | 29 | Running: 30 | - This program requires no additional arguments and can be run using 31 | `runghc`. 32 | 33 | General advice: 34 | - You need to hit enter to submit your move (a quirk of this entry being in 35 | the Prelude category). 36 | - Try everything! You can always undo or reset if you reach an unsolvable 37 | state. 38 | - Read the "Controls in detail" section if you're confused by the controls. 39 | - Read the "Hints" section if you get stuck. 40 | 41 | The cast: 42 | - λ: The player character. 43 | - o: A block you can push. 44 | - _: The hole you need to push a block into. 45 | - Joined by several others! 46 | 47 | Scoring: 48 | - Your score is displayed beneath the level number, starting at 1. 49 | - It increments for every move and undo you make and resets whenever you 50 | reset the level. 51 | - A lower score is better, except for a score of 0 which indicates an 52 | incompleted level. 53 | 54 | Controls in detail: 55 | Note that you need to press enter in order to make a move. 56 | - Movement: [wasd] 57 | - [w]: up [s]: down [a]: left [d]: right. 58 | - Reset: [x] 59 | - Resets the level. Also resets your score. 60 | - Undo: [u] 61 | - Undoes one move. This feature is added for convenience since moves must 62 | be sent using the enter key (and thus it takes longer to get back where 63 | you were if you make a mistake) and incurs a small score penalty. 64 | - Additional notes 65 | - You need to press enter in order to make a move. 66 | - When prompted with ↩, press enter to continue. 67 | - Technically, all keys map to a control. Try to avoid pressing an 68 | unlabeled key as you can accidentally skip a level this way. 69 | 70 | Hints: 71 | These hints all contain spoilers and as such are enciphered using rot-13. 72 | 73 | I recommend revealing them in order until you find one that helps. If you 74 | are completely stuck on a level, there is a level skip code at the end. 75 | - Levels 1-5 76 | - Lbh pna qverpg gur cynlre punenpgre bss gur tevq. Guvf jvyy erdhver lbh 77 | gb erfrg va beqre gb orng gur yriry. 78 | - Gur unfu vf n fgngvp bofgnpyr. Yvxr n ubyr, vg pnaabg or zbirq be 79 | cnffrq guebhtu. Lbh nyfb pnaabg chfu oybpxf vagb vg. 80 | - Lbh pna chfu zhygvcyr oybpxf ng n gvzr. 81 | - Lbh pna chfu oybpxf bss bs gur tevq. Or pnershy abg gb chfu n oybpx lbh 82 | arrq bss gur tevq. 83 | - Lbh arrq na rzcgl gvyr nqwnprag gb n oybpx va beqre gb chfu vg. Sbe 84 | rknzcyr, gb chfu n oybpx qbja, vg arrqf na rzcgl gvyr nobir vg. Xrrc 85 | guvf va zvaq rira sbe yngre yriryf fvapr vg jvyy nyybj lbh gb vqragvsl 86 | ubyrf gung ner vanpprffvoyr gb pregnva oybpxf. 87 | - Levels 5-8 88 | - Gur svefg uvag vf ab ybatre gehr: gurer ner pbaqvgvbaf jurer chfuvat n 89 | cynlre punenpgre bss gur tevq vf arprffnel. Erzrzore: lbh bayl arrq gb 90 | chfu n oybpx vagb rnpu ubyr. 91 | - Gur beqre lbh gel guvatf va bsgra znggref. Fbzrgvzrf lbh znl unir gur 92 | evtug vqrn ohg jebat rkrphgvba beqre. 93 | - Erfrg be haqb rneyl vs lbh ernyvmr lbh ner va na hajvaanoyr fgngr. N 94 | dhvpx gevpx gb qrgrezvar jurgure lbh ner va bar vf gb pbhag gur ahzore 95 | bs erznvavat ubyrf naq purpx vs gurer vf n oybpx gung pna or chfurq 96 | vagb rnpu. Ersre nyfb gb gur ynfg uvag bs gur cerivbhf frpgvba. 97 | - Levels 9-15 98 | - Gur cyhf vf n gvyr gung qrfgeblf obgu cynlre punenpgref naq oybpxf 99 | nyvxr. Jura n oybpx vf chfurq vagb vg be n cynlre punenpgre zbirf vagb 100 | vg, obgu gur cyhf naq gur bowrpg rapbhagrevat vg ner ercynprq jvgu 101 | na rzcgl gvyr. 102 | - Gnxr nqinagntr bs unfurf be ubyrf gb zbir fbzr cynlre punenpgref jvyy 103 | xrrcvat bguref fgngvbanel. 104 | - Rynobengvat ba gur nobir uvag, lbh jvyy svaq gung fbzr guvatf juvpu 105 | frrz vzcbffvoyr ner bayl fb orpnhfr lbhe cynlre punenpgref ner abg 106 | pbbeqvangrq va fcnpr cebcreyl. Fbzrgvzrf lbh arrq gb pbbeqvangr gurz ol 107 | zbivat bar naq xrrcvat nabgure fgngvbanel. Bgure gvzrf gurl jvyy or 108 | frcnengrq va na hajvaanoyr fgngr. 109 | - Level skip cheat code 110 | - Glcr "Purng Pbqr" (pnfr frafvgvir) naq cerff ragre gb fxvc gur yriry. 111 | Guvf jvyy pbasre n fpber bs 0, vaqvpngvat gur yriry jnf fxvccrq. Vs 112 | lbh ner cynlvat ba gur haohssrerq irefvba, whfg glcvat gur svefg 113 | yetter will suffice. 114 | 115 | Acknowledgements : 116 | - Golfing: I've learned a bunch about code golfing in Haskell from various 117 | tips and threads I've read from inumerably many people. I got some 118 | explicit help from The Ninteenth Byte on Stack Exchange with shaving 119 | characters off. Thank you! 120 | - Testing and design: I solicited help from a bunch of people who 121 | graciously lent me their time and feedback. Thank you! 122 | - The jam and feedback: #haskell-game and the organizers of The Haskell Tiny 123 | Game Jam. Thank you! 124 | -} 125 | -------------------------------------------------------------------------------- /encode-levels/Encode.hs: -------------------------------------------------------------------------------- 1 | module Encode where 2 | 3 | import Data.ByteString (ByteString) 4 | import qualified Data.ByteString as B 5 | import Data.List (elemIndex, nub, permutations, sortOn, sort, tails, maximumBy) 6 | import Data.Maybe (fromJust, catMaybes) 7 | import Data.Set (Set) 8 | import qualified Data.Set as S 9 | import Data.Trie (Trie) 10 | import qualified Data.Trie as T 11 | 12 | import System.Environment (getArgs) 13 | 14 | import GHC.Unicode (isPrint) 15 | 16 | import Debug.Trace (trace) 17 | 18 | encodingChars :: [Char] 19 | encodingChars = "λ_.o+# \n" 20 | 21 | encodeChar :: [Char] -> Char -> Maybe Int 22 | encodeChar encodingChars c = elemIndex c encodingChars 23 | 24 | decodeChar :: [Char] -> Int -> Maybe Char 25 | decodeChar encodingChars c 26 | | c >= 0, c < 8 = Just $ encodingChars !! c 27 | | otherwise = Nothing 28 | 29 | fromBase8 :: [Int] -> Int 30 | fromBase8 = sum . zipWith convert [0..] 31 | where 32 | convert exp digit = digit * 8^exp 33 | 34 | chunksOf :: Int -> [a] -> [[a]] 35 | chunksOf _ [] = [] 36 | chunksOf n xs = chunk : chunksOf n rest 37 | where 38 | (chunk, rest) = splitAt n xs 39 | 40 | encodeInChunksOf :: Int -> [Char] -> [Char] -> [Int] 41 | encodeInChunksOf n encodingChars = map fromBase8 . chunksOf n . map encode 42 | where 43 | encode = fromJust . encodeChar encodingChars 44 | 45 | readCharacterList :: String -> IO (Set Int) 46 | readCharacterList filename = S.fromList . map read . lines <$> readFile filename 47 | 48 | printableUnicodes :: [Char] 49 | printableUnicodes = [c | c <- toEnum <$> [1..2^20], isPrint c] 50 | 51 | firstJust :: [Maybe a] -> Maybe a 52 | firstJust [] = Nothing 53 | firstJust (Just a:_) = Just a 54 | firstJust (Nothing:rest) = firstJust rest 55 | 56 | -- pairwiseDiffs :: [Int] -> [Int] 57 | -- pairwiseDiffs (x:y:rest) = y - x : pairwiseDiffs (y:rest) 58 | -- pairwiseDiffs _ = [] 59 | -- 60 | -- subsequencesOf :: Int -> [a] -> [[a]] 61 | -- subsequencesOf n xs = map (take n) $ tails xs 62 | -- 63 | -- lengthAtLeast :: Int -> [Int] -> Bool 64 | -- lengthAtLeast n [] 65 | -- | n <= 0 = True 66 | -- | otherwise = False 67 | -- lengthAtLeast n (_:xs) = lengthAtLeast (n-1) xs 68 | -- 69 | -- tryFindDiff :: Int -> [Int] -> [Int] -> Maybe Int 70 | -- tryFindDiff _ [] _ = Nothing 71 | -- tryFindDiff _ _ [] = Nothing 72 | -- tryFindDiff encodedCharsLength encodedChars sortedCharList 73 | -- | not $ lengthAtLeast encodedCharsLength sortedCharList = Nothing 74 | -- | all (==firstDiff) diffs = Just firstDiff 75 | -- | otherwise = tryFindDiff encodedCharsLength encodedChars (tail sortedCharList) 76 | -- where 77 | -- firstDiff = head diffs 78 | -- diffs = zipWith (-) sortedCharList encodedChars 79 | 80 | compressToRange :: [Int] -> [(Int, Int)] 81 | compressToRange [] = [] 82 | compressToRange (x:rest) = go x x rest 83 | where 84 | go start prev [] = [(start, prev)] 85 | go start prev (curr:rest) 86 | | curr - prev == 1 = go start curr rest 87 | | otherwise = (start, prev) : compressToRange (curr:rest) 88 | 89 | diffs :: [Int] -> [Int] 90 | diffs [] = [] 91 | diffs [_] = [] 92 | diffs xs@(_:xs') = zipWith (-) xs' xs 93 | 94 | intToByteString :: Int -> ByteString 95 | intToByteString i 96 | | i >= 2^24 = error $ "intToByteString: unsupported size " <> show i 97 | | otherwise = B.pack [fromIntegral lo, fromIntegral mid, fromIntegral hi] 98 | where 99 | (intermediate, lo) = i `divMod` (2^8) 100 | (hi, mid) = intermediate `divMod` (2^8) 101 | 102 | diffsToByteString :: [Int] -> ByteString 103 | diffsToByteString = foldMap intToByteString 104 | 105 | createDiffTrie :: Int -> [Int] -> Trie () 106 | createDiffTrie maxLength [] = T.empty 107 | createDiffTrie maxLength diffs@(_:rest) = go diffs T.empty 108 | where 109 | go [] dt = dt 110 | go diffs@(_:rest) dt = go rest (T.insert (diffsToByteString $ take maxLength diffs) () dt) 111 | 112 | tryEncodeDiffTree :: Int -> [Char] -> Trie () -> [Char] -> Maybe (Int, [Char], [Char], Int) 113 | tryEncodeDiffTree n encodingChars diffTrie charsToEncode = 114 | if isValid 115 | then do 116 | (k, newEncoding) <- findNaiveOffset encoding 117 | Just (n, encodingChars, newEncoding, k) 118 | else 119 | Nothing 120 | where 121 | encoding = encodeInChunksOf n encodingChars charsToEncode 122 | uniqueCodes = S.toList . S.fromList $ encoding 123 | diffByteString = diffsToByteString (diffs uniqueCodes) 124 | isValid = not . T.null $ T.submap diffByteString diffTrie 125 | 126 | findNaiveOffset :: [Int] -> Maybe (Int, [Char]) 127 | findNaiveOffset codes@(_:_) 128 | = firstJust [Just (k, newEncoding)| k<-[-minC..2^20] 129 | , let newEncoding = [toEnum $ code + k | code<-codes] 130 | , all isPrint newEncoding] 131 | where 132 | minC = minimum codes 133 | findNaiveOffset [] = Nothing 134 | 135 | -- findNaiveOffset :: [Int] -> (Int, Int, [Char]) 136 | -- findNaiveOffset codes@(_:_) 137 | -- = maximumBy (\(x, _, _) (y, _, _) -> compare x y) [(numMissing, k, newEncoding)| k<-[-minC..(2^20) - maxC] 138 | -- , let newEncoding = [toEnum $ code + k | code<-codes] 139 | -- , let numMissing = length . filter isPrint $ newEncoding] 140 | -- where 141 | -- minC = minimum codes 142 | -- maxC = maximum codes 143 | 144 | findEncodingDiffTree :: Int -> [Char] -> Maybe (Int, [Char], [Char], Int) 145 | findEncodingDiffTree n chars 146 | = firstJust $ map (\ecs -> tryEncodeDiffTree n ecs diffTrie chars) (permutations encodingChars) 147 | where 148 | diffTrie = createDiffTrie (1 + (length chars `div` n)) (diffs $ map fromEnum printableUnicodes) 149 | 150 | tryEncodeNaive :: Int -> [Char] -> [Char] -> Maybe ((Int, [Char], [Char]), [Int]) 151 | tryEncodeNaive n encodingChars charsToEncode = 152 | if invalidEncoding 153 | then Nothing 154 | else Just ((n, encodingChars, map toEnum encoding), missingNums) 155 | where 156 | encoding = encodeInChunksOf n encodingChars charsToEncode 157 | invalidEncoding = any (>(2^20)) encoding 158 | missingNums = filter (not . isPrint . toEnum) encoding 159 | 160 | data OutputType 161 | = NoMissing 162 | | First Int 163 | deriving (Eq, Show) 164 | 165 | findEncodingNaive :: Int -> [Char] -> OutputType -> [((Int, [Char], [Char]), [Int])] 166 | findEncodingNaive n chars outputType 167 | = selector outputType . sortOn (length . snd) . catMaybes $ map (\ecs -> tryEncodeNaive n ecs chars) (permutations encodingChars) 168 | where 169 | selector NoMissing = takeWhile (\(_, missing) -> null missing) 170 | selector (First n) = take n 171 | 172 | printEncodingNaive :: ((Int, [Char], [Char]), [Int]) -> IO () 173 | printEncodingNaive ((_n, encodingChars, encoded), missingNums) = do 174 | putStr "Encoding set: " 175 | print encodingChars 176 | putStr "Encoded message length: " 177 | print (length encoded) 178 | putStr "Encoded message: " 179 | putStrLn encoded 180 | putStr "Missing nums: " 181 | print missingNums 182 | 183 | printEncodingDiffTree :: Maybe (Int, [Char], [Char], Int) -> IO () 184 | printEncodingDiffTree Nothing = putStrLn "No encoding found" 185 | printEncodingDiffTree (Just (_n, encodingChars, encoded, k)) = do 186 | putStr "Encoding set: " 187 | print encodingChars 188 | putStr "Offset: " 189 | print k 190 | putStr "Encoded message length: " 191 | print (length encoded) 192 | putStr "Encoded message: " 193 | putStrLn encoded 194 | 195 | main :: IO () 196 | main = do 197 | nStr:file:_ <- getArgs 198 | let n = read nStr 199 | chars <- readFile file 200 | -- validChars <- readCharacterList "ghc-unicode-chars.txt" 201 | mapM_ printEncodingNaive $ findEncodingNaive n chars (First 100) 202 | -------------------------------------------------------------------------------- /encode-levels/ghc-unicode-chars.txt: -------------------------------------------------------------------------------- 1 | 0 2 | 32 3 | 33 4 | 36 5 | 37 6 | 40 7 | 41 8 | 42 9 | 43 10 | 44 11 | 45 12 | 46 13 | 48 14 | 58 15 | 60 16 | 63 17 | 65 18 | 91 19 | 92 20 | 93 21 | 94 22 | 95 23 | 96 24 | 97 25 | 123 26 | 124 27 | 125 28 | 126 29 | 127 30 | 160 31 | 161 32 | 162 33 | 166 34 | 167 35 | 168 36 | 169 37 | 170 38 | 171 39 | 172 40 | 173 41 | 174 42 | 175 43 | 176 44 | 177 45 | 178 46 | 180 47 | 181 48 | 182 49 | 184 50 | 185 51 | 186 52 | 187 53 | 188 54 | 191 55 | 192 56 | 215 57 | 216 58 | 223 59 | 224 60 | 247 61 | 248 62 | 255 63 | 256 64 | 257 65 | 258 66 | 259 67 | 260 68 | 261 69 | 262 70 | 263 71 | 264 72 | 265 73 | 266 74 | 267 75 | 268 76 | 269 77 | 270 78 | 271 79 | 272 80 | 273 81 | 274 82 | 275 83 | 276 84 | 277 85 | 278 86 | 279 87 | 280 88 | 281 89 | 282 90 | 283 91 | 284 92 | 285 93 | 286 94 | 287 95 | 288 96 | 289 97 | 290 98 | 291 99 | 292 100 | 293 101 | 294 102 | 295 103 | 296 104 | 297 105 | 298 106 | 299 107 | 300 108 | 301 109 | 302 110 | 303 111 | 304 112 | 305 113 | 306 114 | 307 115 | 308 116 | 309 117 | 310 118 | 311 119 | 312 120 | 313 121 | 314 122 | 315 123 | 316 124 | 317 125 | 318 126 | 319 127 | 320 128 | 321 129 | 322 130 | 323 131 | 324 132 | 325 133 | 326 134 | 327 135 | 328 136 | 329 137 | 330 138 | 331 139 | 332 140 | 333 141 | 334 142 | 335 143 | 336 144 | 337 145 | 338 146 | 339 147 | 340 148 | 341 149 | 342 150 | 343 151 | 344 152 | 345 153 | 346 154 | 347 155 | 348 156 | 349 157 | 350 158 | 351 159 | 352 160 | 353 161 | 354 162 | 355 163 | 356 164 | 357 165 | 358 166 | 359 167 | 360 168 | 361 169 | 362 170 | 363 171 | 364 172 | 365 173 | 366 174 | 367 175 | 368 176 | 369 177 | 370 178 | 371 179 | 372 180 | 373 181 | 374 182 | 375 183 | 376 184 | 377 185 | 378 186 | 379 187 | 380 188 | 381 189 | 382 190 | 383 191 | 384 192 | 385 193 | 386 194 | 387 195 | 388 196 | 389 197 | 390 198 | 391 199 | 392 200 | 393 201 | 395 202 | 396 203 | 397 204 | 398 205 | 399 206 | 400 207 | 401 208 | 402 209 | 403 210 | 404 211 | 405 212 | 406 213 | 407 214 | 408 215 | 409 216 | 410 217 | 411 218 | 412 219 | 413 220 | 414 221 | 415 222 | 416 223 | 417 224 | 418 225 | 419 226 | 420 227 | 421 228 | 422 229 | 423 230 | 424 231 | 425 232 | 426 233 | 428 234 | 429 235 | 430 236 | 431 237 | 432 238 | 433 239 | 435 240 | 436 241 | 437 242 | 438 243 | 439 244 | 440 245 | 441 246 | 442 247 | 443 248 | 444 249 | 445 250 | 446 251 | 447 252 | 448 253 | 452 254 | 453 255 | 454 256 | 455 257 | 456 258 | 457 259 | 458 260 | 459 261 | 460 262 | 461 263 | 462 264 | 463 265 | 464 266 | 465 267 | 466 268 | 467 269 | 468 270 | 469 271 | 470 272 | 471 273 | 472 274 | 473 275 | 474 276 | 475 277 | 476 278 | 477 279 | 478 280 | 479 281 | 480 282 | 481 283 | 482 284 | 483 285 | 484 286 | 485 287 | 486 288 | 487 289 | 488 290 | 489 291 | 490 292 | 491 293 | 492 294 | 493 295 | 494 296 | 495 297 | 496 298 | 497 299 | 498 300 | 499 301 | 500 302 | 501 303 | 502 304 | 503 305 | 504 306 | 505 307 | 506 308 | 507 309 | 508 310 | 509 311 | 510 312 | 511 313 | 512 314 | 513 315 | 514 316 | 515 317 | 516 318 | 517 319 | 518 320 | 519 321 | 520 322 | 521 323 | 522 324 | 523 325 | 524 326 | 525 327 | 526 328 | 527 329 | 528 330 | 529 331 | 530 332 | 531 333 | 532 334 | 533 335 | 534 336 | 535 337 | 536 338 | 537 339 | 538 340 | 539 341 | 540 342 | 541 343 | 542 344 | 543 345 | 544 346 | 545 347 | 546 348 | 547 349 | 548 350 | 549 351 | 550 352 | 551 353 | 552 354 | 553 355 | 554 356 | 555 357 | 556 358 | 557 359 | 558 360 | 559 361 | 560 362 | 561 363 | 562 364 | 563 365 | 564 366 | 570 367 | 571 368 | 572 369 | 573 370 | 574 371 | 575 372 | 577 373 | 578 374 | 579 375 | 580 376 | 581 377 | 582 378 | 583 379 | 584 380 | 585 381 | 586 382 | 587 383 | 588 384 | 589 385 | 590 386 | 591 387 | 592 388 | 593 389 | 594 390 | 595 391 | 596 392 | 597 393 | 598 394 | 600 395 | 601 396 | 602 397 | 603 398 | 604 399 | 605 400 | 608 401 | 609 402 | 610 403 | 611 404 | 612 405 | 613 406 | 614 407 | 615 408 | 616 409 | 617 410 | 618 411 | 619 412 | 620 413 | 621 414 | 623 415 | 624 416 | 625 417 | 626 418 | 627 419 | 629 420 | 630 421 | 637 422 | 638 423 | 640 424 | 641 425 | 642 426 | 643 427 | 644 428 | 647 429 | 648 430 | 649 431 | 650 432 | 652 433 | 653 434 | 658 435 | 659 436 | 660 437 | 661 438 | 669 439 | 670 440 | 671 441 | 688 442 | 706 443 | 710 444 | 722 445 | 736 446 | 741 447 | 748 448 | 749 449 | 750 450 | 751 451 | 768 452 | 837 453 | 838 454 | 880 455 | 881 456 | 882 457 | 883 458 | 884 459 | 885 460 | 886 461 | 887 462 | 890 463 | 891 464 | 894 465 | 895 466 | 900 467 | 902 468 | 903 469 | 904 470 | 908 471 | 910 472 | 912 473 | 913 474 | 931 475 | 940 476 | 941 477 | 944 478 | 945 479 | 962 480 | 963 481 | 972 482 | 973 483 | 975 484 | 976 485 | 977 486 | 978 487 | 981 488 | 982 489 | 983 490 | 984 491 | 985 492 | 986 493 | 987 494 | 988 495 | 989 496 | 990 497 | 991 498 | 992 499 | 993 500 | 994 501 | 995 502 | 996 503 | 997 504 | 998 505 | 999 506 | 1000 507 | 1001 508 | 1002 509 | 1003 510 | 1004 511 | 1005 512 | 1006 513 | 1007 514 | 1008 515 | 1009 516 | 1010 517 | 1011 518 | 1012 519 | 1013 520 | 1014 521 | 1015 522 | 1016 523 | 1017 524 | 1018 525 | 1019 526 | 1020 527 | 1021 528 | 1024 529 | 1040 530 | 1072 531 | 1104 532 | 1120 533 | 1121 534 | 1122 535 | 1123 536 | 1124 537 | 1125 538 | 1126 539 | 1127 540 | 1128 541 | 1129 542 | 1130 543 | 1131 544 | 1132 545 | 1133 546 | 1134 547 | 1135 548 | 1136 549 | 1137 550 | 1138 551 | 1139 552 | 1140 553 | 1141 554 | 1142 555 | 1143 556 | 1144 557 | 1145 558 | 1146 559 | 1147 560 | 1148 561 | 1149 562 | 1150 563 | 1151 564 | 1152 565 | 1153 566 | 1154 567 | 1155 568 | 1160 569 | 1162 570 | 1163 571 | 1164 572 | 1165 573 | 1166 574 | 1167 575 | 1168 576 | 1169 577 | 1170 578 | 1171 579 | 1172 580 | 1173 581 | 1174 582 | 1175 583 | 1176 584 | 1177 585 | 1178 586 | 1179 587 | 1180 588 | 1181 589 | 1182 590 | 1183 591 | 1184 592 | 1185 593 | 1186 594 | 1187 595 | 1188 596 | 1189 597 | 1190 598 | 1191 599 | 1192 600 | 1193 601 | 1194 602 | 1195 603 | 1196 604 | 1197 605 | 1198 606 | 1199 607 | 1200 608 | 1201 609 | 1202 610 | 1203 611 | 1204 612 | 1205 613 | 1206 614 | 1207 615 | 1208 616 | 1209 617 | 1210 618 | 1211 619 | 1212 620 | 1213 621 | 1214 622 | 1215 623 | 1216 624 | 1217 625 | 1218 626 | 1219 627 | 1220 628 | 1221 629 | 1222 630 | 1223 631 | 1224 632 | 1225 633 | 1226 634 | 1227 635 | 1228 636 | 1229 637 | 1230 638 | 1231 639 | 1232 640 | 1233 641 | 1234 642 | 1235 643 | 1236 644 | 1237 645 | 1238 646 | 1239 647 | 1240 648 | 1241 649 | 1242 650 | 1243 651 | 1244 652 | 1245 653 | 1246 654 | 1247 655 | 1248 656 | 1249 657 | 1250 658 | 1251 659 | 1252 660 | 1253 661 | 1254 662 | 1255 663 | 1256 664 | 1257 665 | 1258 666 | 1259 667 | 1260 668 | 1261 669 | 1262 670 | 1263 671 | 1264 672 | 1265 673 | 1266 674 | 1267 675 | 1268 676 | 1269 677 | 1270 678 | 1271 679 | 1272 680 | 1273 681 | 1274 682 | 1275 683 | 1276 684 | 1277 685 | 1278 686 | 1279 687 | 1280 688 | 1281 689 | 1282 690 | 1283 691 | 1284 692 | 1285 693 | 1286 694 | 1287 695 | 1288 696 | 1289 697 | 1290 698 | 1291 699 | 1292 700 | 1293 701 | 1294 702 | 1295 703 | 1296 704 | 1297 705 | 1298 706 | 1299 707 | 1300 708 | 1301 709 | 1302 710 | 1303 711 | 1304 712 | 1305 713 | 1306 714 | 1307 715 | 1308 716 | 1309 717 | 1310 718 | 1311 719 | 1312 720 | 1313 721 | 1314 722 | 1315 723 | 1316 724 | 1317 725 | 1318 726 | 1319 727 | 1320 728 | 1321 729 | 1322 730 | 1323 731 | 1324 732 | 1325 733 | 1326 734 | 1327 735 | 1329 736 | 1369 737 | 1370 738 | 1376 739 | 1377 740 | 1415 741 | 1417 742 | 1418 743 | 1421 744 | 1423 745 | 1425 746 | 1470 747 | 1471 748 | 1472 749 | 1473 750 | 1475 751 | 1476 752 | 1478 753 | 1479 754 | 1488 755 | 1519 756 | 1523 757 | 1536 758 | 1542 759 | 1545 760 | 1547 761 | 1548 762 | 1550 763 | 1552 764 | 1563 765 | 1564 766 | 1565 767 | 1568 768 | 1600 769 | 1601 770 | 1611 771 | 1632 772 | 1642 773 | 1646 774 | 1648 775 | 1649 776 | 1748 777 | 1749 778 | 1750 779 | 1757 780 | 1758 781 | 1759 782 | 1765 783 | 1767 784 | 1769 785 | 1770 786 | 1774 787 | 1776 788 | 1786 789 | 1789 790 | 1791 791 | 1792 792 | 1807 793 | 1808 794 | 1809 795 | 1810 796 | 1840 797 | 1869 798 | 1958 799 | 1969 800 | 1984 801 | 1994 802 | 2027 803 | 2036 804 | 2038 805 | 2039 806 | 2042 807 | 2045 808 | 2046 809 | 2048 810 | 2070 811 | 2074 812 | 2075 813 | 2084 814 | 2085 815 | 2088 816 | 2089 817 | 2096 818 | 2112 819 | 2137 820 | 2142 821 | 2144 822 | 2160 823 | 2184 824 | 2185 825 | 2192 826 | 2200 827 | 2208 828 | 2249 829 | 2250 830 | 2274 831 | 2275 832 | 2307 833 | 2308 834 | 2362 835 | 2363 836 | 2364 837 | 2365 838 | 2366 839 | 2369 840 | 2377 841 | 2381 842 | 2382 843 | 2384 844 | 2385 845 | 2392 846 | 2402 847 | 2404 848 | 2406 849 | 2416 850 | 2417 851 | 2418 852 | 2433 853 | 2434 854 | 2437 855 | 2447 856 | 2451 857 | 2474 858 | 2482 859 | 2486 860 | 2492 861 | 2493 862 | 2494 863 | 2497 864 | 2503 865 | 2507 866 | 2509 867 | 2510 868 | 2519 869 | 2524 870 | 2527 871 | 2530 872 | 2534 873 | 2544 874 | 2546 875 | 2548 876 | 2554 877 | 2555 878 | 2556 879 | 2557 880 | 2558 881 | 2561 882 | 2563 883 | 2565 884 | 2575 885 | 2579 886 | 2602 887 | 2610 888 | 2613 889 | 2616 890 | 2620 891 | 2622 892 | 2625 893 | 2631 894 | 2635 895 | 2641 896 | 2649 897 | 2654 898 | 2662 899 | 2672 900 | 2674 901 | 2677 902 | 2678 903 | 2689 904 | 2691 905 | 2693 906 | 2703 907 | 2707 908 | 2730 909 | 2738 910 | 2741 911 | 2748 912 | 2749 913 | 2750 914 | 2753 915 | 2759 916 | 2761 917 | 2763 918 | 2765 919 | 2768 920 | 2784 921 | 2786 922 | 2790 923 | 2800 924 | 2801 925 | 2809 926 | 2810 927 | 2817 928 | 2818 929 | 2821 930 | 2831 931 | 2835 932 | 2858 933 | 2866 934 | 2869 935 | 2876 936 | 2877 937 | 2878 938 | 2879 939 | 2880 940 | 2881 941 | 2887 942 | 2891 943 | 2893 944 | 2901 945 | 2903 946 | 2908 947 | 2911 948 | 2914 949 | 2918 950 | 2928 951 | 2929 952 | 2930 953 | 2946 954 | 2947 955 | 2949 956 | 2958 957 | 2962 958 | 2969 959 | 2972 960 | 2974 961 | 2979 962 | 2984 963 | 2990 964 | 3006 965 | 3008 966 | 3009 967 | 3014 968 | 3018 969 | 3021 970 | 3024 971 | 3031 972 | 3046 973 | 3056 974 | 3059 975 | 3065 976 | 3066 977 | 3072 978 | 3073 979 | 3076 980 | 3077 981 | 3086 982 | 3090 983 | 3114 984 | 3132 985 | 3133 986 | 3134 987 | 3137 988 | 3142 989 | 3146 990 | 3157 991 | 3160 992 | 3165 993 | 3168 994 | 3170 995 | 3174 996 | 3191 997 | 3192 998 | 3199 999 | 3200 1000 | 3201 1001 | 3202 1002 | 3204 1003 | 3205 1004 | 3214 1005 | 3218 1006 | 3242 1007 | 3253 1008 | 3260 1009 | 3261 1010 | 3262 1011 | 3263 1012 | 3264 1013 | 3270 1014 | 3271 1015 | 3274 1016 | 3276 1017 | 3285 1018 | 3293 1019 | 3296 1020 | 3298 1021 | 3302 1022 | 3313 1023 | 3328 1024 | 3330 1025 | 3332 1026 | 3342 1027 | 3346 1028 | 3387 1029 | 3389 1030 | 3390 1031 | 3393 1032 | 3398 1033 | 3402 1034 | 3405 1035 | 3406 1036 | 3407 1037 | 3412 1038 | 3415 1039 | 3416 1040 | 3423 1041 | 3426 1042 | 3430 1043 | 3440 1044 | 3449 1045 | 3450 1046 | 3457 1047 | 3458 1048 | 3461 1049 | 3482 1050 | 3507 1051 | 3517 1052 | 3520 1053 | 3530 1054 | 3535 1055 | 3538 1056 | 3542 1057 | 3544 1058 | 3558 1059 | 3570 1060 | 3572 1061 | 3585 1062 | 3633 1063 | 3634 1064 | 3636 1065 | 3647 1066 | 3648 1067 | 3654 1068 | 3655 1069 | 3663 1070 | 3664 1071 | 3674 1072 | 3713 1073 | 3716 1074 | 3718 1075 | 3724 1076 | 3749 1077 | 3751 1078 | 3761 1079 | 3762 1080 | 3764 1081 | 3773 1082 | 3776 1083 | 3782 1084 | 3784 1085 | 3792 1086 | 3804 1087 | 3840 1088 | 3841 1089 | 3844 1090 | 3859 1091 | 3860 1092 | 3861 1093 | 3864 1094 | 3866 1095 | 3872 1096 | 3882 1097 | 3892 1098 | 3893 1099 | 3894 1100 | 3895 1101 | 3896 1102 | 3897 1103 | 3898 1104 | 3899 1105 | 3900 1106 | 3901 1107 | 3902 1108 | 3904 1109 | 3913 1110 | 3953 1111 | 3967 1112 | 3968 1113 | 3973 1114 | 3974 1115 | 3976 1116 | 3981 1117 | 3993 1118 | 4030 1119 | 4038 1120 | 4039 1121 | 4046 1122 | 4048 1123 | 4053 1124 | 4057 1125 | 4096 1126 | 4139 1127 | 4141 1128 | 4145 1129 | 4146 1130 | 4152 1131 | 4153 1132 | 4155 1133 | 4157 1134 | 4159 1135 | 4160 1136 | 4170 1137 | 4176 1138 | 4182 1139 | 4184 1140 | 4186 1141 | 4190 1142 | 4193 1143 | 4194 1144 | 4197 1145 | 4199 1146 | 4206 1147 | 4209 1148 | 4213 1149 | 4226 1150 | 4227 1151 | 4229 1152 | 4231 1153 | 4237 1154 | 4238 1155 | 4239 1156 | 4240 1157 | 4250 1158 | 4253 1159 | 4254 1160 | 4256 1161 | 4295 1162 | 4301 1163 | 4304 1164 | 4347 1165 | 4348 1166 | 4349 1167 | 4352 1168 | 4682 1169 | 4688 1170 | 4696 1171 | 4698 1172 | 4704 1173 | 4746 1174 | 4752 1175 | 4786 1176 | 4792 1177 | 4800 1178 | 4802 1179 | 4808 1180 | 4824 1181 | 4882 1182 | 4888 1183 | 4957 1184 | 4960 1185 | 4969 1186 | 4992 1187 | 5008 1188 | 5024 1189 | 5104 1190 | 5112 1191 | 5120 1192 | 5121 1193 | 5741 1194 | 5742 1195 | 5743 1196 | 5760 1197 | 5761 1198 | 5787 1199 | 5788 1200 | 5792 1201 | 5867 1202 | 5870 1203 | 5873 1204 | 5888 1205 | 5906 1206 | 5909 1207 | 5919 1208 | 5938 1209 | 5940 1210 | 5941 1211 | 5952 1212 | 5970 1213 | 5984 1214 | 5998 1215 | 6002 1216 | 6016 1217 | 6068 1218 | 6070 1219 | 6071 1220 | 6078 1221 | 6086 1222 | 6087 1223 | 6089 1224 | 6100 1225 | 6103 1226 | 6104 1227 | 6107 1228 | 6108 1229 | 6109 1230 | 6112 1231 | 6128 1232 | 6144 1233 | 6150 1234 | 6151 1235 | 6155 1236 | 6158 1237 | 6159 1238 | 6160 1239 | 6176 1240 | 6211 1241 | 6212 1242 | 6272 1243 | 6277 1244 | 6279 1245 | 6313 1246 | 6314 1247 | 6320 1248 | 6400 1249 | 6432 1250 | 6435 1251 | 6439 1252 | 6441 1253 | 6448 1254 | 6450 1255 | 6451 1256 | 6457 1257 | 6464 1258 | 6468 1259 | 6470 1260 | 6480 1261 | 6512 1262 | 6528 1263 | 6576 1264 | 6608 1265 | 6618 1266 | 6622 1267 | 6656 1268 | 6679 1269 | 6681 1270 | 6683 1271 | 6686 1272 | 6688 1273 | 6741 1274 | 6742 1275 | 6743 1276 | 6744 1277 | 6752 1278 | 6753 1279 | 6754 1280 | 6755 1281 | 6757 1282 | 6765 1283 | 6771 1284 | 6783 1285 | 6784 1286 | 6800 1287 | 6816 1288 | 6823 1289 | 6824 1290 | 6832 1291 | 6846 1292 | 6847 1293 | 6912 1294 | 6916 1295 | 6917 1296 | 6964 1297 | 6965 1298 | 6966 1299 | 6971 1300 | 6972 1301 | 6973 1302 | 6978 1303 | 6979 1304 | 6981 1305 | 6992 1306 | 7002 1307 | 7009 1308 | 7019 1309 | 7028 1310 | 7037 1311 | 7040 1312 | 7042 1313 | 7043 1314 | 7073 1315 | 7074 1316 | 7078 1317 | 7080 1318 | 7082 1319 | 7083 1320 | 7086 1321 | 7088 1322 | 7098 1323 | 7142 1324 | 7143 1325 | 7144 1326 | 7146 1327 | 7149 1328 | 7150 1329 | 7151 1330 | 7154 1331 | 7164 1332 | 7168 1333 | 7204 1334 | 7212 1335 | 7220 1336 | 7222 1337 | 7227 1338 | 7232 1339 | 7245 1340 | 7248 1341 | 7258 1342 | 7288 1343 | 7294 1344 | 7296 1345 | 7297 1346 | 7298 1347 | 7299 1348 | 7301 1349 | 7302 1350 | 7303 1351 | 7304 1352 | 7312 1353 | 7357 1354 | 7360 1355 | 7376 1356 | 7379 1357 | 7380 1358 | 7393 1359 | 7394 1360 | 7401 1361 | 7405 1362 | 7406 1363 | 7412 1364 | 7413 1365 | 7415 1366 | 7416 1367 | 7418 1368 | 7424 1369 | 7468 1370 | 7531 1371 | 7544 1372 | 7545 1373 | 7546 1374 | 7549 1375 | 7550 1376 | 7566 1377 | 7567 1378 | 7579 1379 | 7616 1380 | 7680 1381 | 7681 1382 | 7682 1383 | 7683 1384 | 7684 1385 | 7685 1386 | 7686 1387 | 7687 1388 | 7688 1389 | 7689 1390 | 7690 1391 | 7691 1392 | 7692 1393 | 7693 1394 | 7694 1395 | 7695 1396 | 7696 1397 | 7697 1398 | 7698 1399 | 7699 1400 | 7700 1401 | 7701 1402 | 7702 1403 | 7703 1404 | 7704 1405 | 7705 1406 | 7706 1407 | 7707 1408 | 7708 1409 | 7709 1410 | 7710 1411 | 7711 1412 | 7712 1413 | 7713 1414 | 7714 1415 | 7715 1416 | 7716 1417 | 7717 1418 | 7718 1419 | 7719 1420 | 7720 1421 | 7721 1422 | 7722 1423 | 7723 1424 | 7724 1425 | 7725 1426 | 7726 1427 | 7727 1428 | 7728 1429 | 7729 1430 | 7730 1431 | 7731 1432 | 7732 1433 | 7733 1434 | 7734 1435 | 7735 1436 | 7736 1437 | 7737 1438 | 7738 1439 | 7739 1440 | 7740 1441 | 7741 1442 | 7742 1443 | 7743 1444 | 7744 1445 | 7745 1446 | 7746 1447 | 7747 1448 | 7748 1449 | 7749 1450 | 7750 1451 | 7751 1452 | 7752 1453 | 7753 1454 | 7754 1455 | 7755 1456 | 7756 1457 | 7757 1458 | 7758 1459 | 7759 1460 | 7760 1461 | 7761 1462 | 7762 1463 | 7763 1464 | 7764 1465 | 7765 1466 | 7766 1467 | 7767 1468 | 7768 1469 | 7769 1470 | 7770 1471 | 7771 1472 | 7772 1473 | 7773 1474 | 7774 1475 | 7775 1476 | 7776 1477 | 7777 1478 | 7778 1479 | 7779 1480 | 7780 1481 | 7781 1482 | 7782 1483 | 7783 1484 | 7784 1485 | 7785 1486 | 7786 1487 | 7787 1488 | 7788 1489 | 7789 1490 | 7790 1491 | 7791 1492 | 7792 1493 | 7793 1494 | 7794 1495 | 7795 1496 | 7796 1497 | 7797 1498 | 7798 1499 | 7799 1500 | 7800 1501 | 7801 1502 | 7802 1503 | 7803 1504 | 7804 1505 | 7805 1506 | 7806 1507 | 7807 1508 | 7808 1509 | 7809 1510 | 7810 1511 | 7811 1512 | 7812 1513 | 7813 1514 | 7814 1515 | 7815 1516 | 7816 1517 | 7817 1518 | 7818 1519 | 7819 1520 | 7820 1521 | 7821 1522 | 7822 1523 | 7823 1524 | 7824 1525 | 7825 1526 | 7826 1527 | 7827 1528 | 7828 1529 | 7829 1530 | 7830 1531 | 7835 1532 | 7836 1533 | 7838 1534 | 7839 1535 | 7840 1536 | 7841 1537 | 7842 1538 | 7843 1539 | 7844 1540 | 7845 1541 | 7846 1542 | 7847 1543 | 7848 1544 | 7849 1545 | 7850 1546 | 7851 1547 | 7852 1548 | 7853 1549 | 7854 1550 | 7855 1551 | 7856 1552 | 7857 1553 | 7858 1554 | 7859 1555 | 7860 1556 | 7861 1557 | 7862 1558 | 7863 1559 | 7864 1560 | 7865 1561 | 7866 1562 | 7867 1563 | 7868 1564 | 7869 1565 | 7870 1566 | 7871 1567 | 7872 1568 | 7873 1569 | 7874 1570 | 7875 1571 | 7876 1572 | 7877 1573 | 7878 1574 | 7879 1575 | 7880 1576 | 7881 1577 | 7882 1578 | 7883 1579 | 7884 1580 | 7885 1581 | 7886 1582 | 7887 1583 | 7888 1584 | 7889 1585 | 7890 1586 | 7891 1587 | 7892 1588 | 7893 1589 | 7894 1590 | 7895 1591 | 7896 1592 | 7897 1593 | 7898 1594 | 7899 1595 | 7900 1596 | 7901 1597 | 7902 1598 | 7903 1599 | 7904 1600 | 7905 1601 | 7906 1602 | 7907 1603 | 7908 1604 | 7909 1605 | 7910 1606 | 7911 1607 | 7912 1608 | 7913 1609 | 7914 1610 | 7915 1611 | 7916 1612 | 7917 1613 | 7918 1614 | 7919 1615 | 7920 1616 | 7921 1617 | 7922 1618 | 7923 1619 | 7924 1620 | 7925 1621 | 7926 1622 | 7927 1623 | 7928 1624 | 7929 1625 | 7930 1626 | 7931 1627 | 7932 1628 | 7933 1629 | 7934 1630 | 7935 1631 | 7936 1632 | 7944 1633 | 7952 1634 | 7960 1635 | 7968 1636 | 7976 1637 | 7984 1638 | 7992 1639 | 8000 1640 | 8008 1641 | 8016 1642 | 8017 1643 | 8018 1644 | 8019 1645 | 8020 1646 | 8021 1647 | 8022 1648 | 8023 1649 | 8025 1650 | 8027 1651 | 8029 1652 | 8031 1653 | 8032 1654 | 8040 1655 | 8048 1656 | 8050 1657 | 8054 1658 | 8056 1659 | 8058 1660 | 8060 1661 | 8064 1662 | 8072 1663 | 8080 1664 | 8088 1665 | 8096 1666 | 8104 1667 | 8112 1668 | 8114 1669 | 8115 1670 | 8116 1671 | 8118 1672 | 8120 1673 | 8122 1674 | 8124 1675 | 8125 1676 | 8126 1677 | 8127 1678 | 8130 1679 | 8131 1680 | 8132 1681 | 8134 1682 | 8136 1683 | 8140 1684 | 8141 1685 | 8144 1686 | 8146 1687 | 8150 1688 | 8152 1689 | 8154 1690 | 8157 1691 | 8160 1692 | 8162 1693 | 8165 1694 | 8166 1695 | 8168 1696 | 8170 1697 | 8172 1698 | 8173 1699 | 8178 1700 | 8179 1701 | 8180 1702 | 8182 1703 | 8184 1704 | 8186 1705 | 8188 1706 | 8189 1707 | 8192 1708 | 8203 1709 | 8208 1710 | 8214 1711 | 8216 1712 | 8217 1713 | 8218 1714 | 8219 1715 | 8221 1716 | 8222 1717 | 8223 1718 | 8224 1719 | 8232 1720 | 8233 1721 | 8234 1722 | 8239 1723 | 8240 1724 | 8249 1725 | 8250 1726 | 8251 1727 | 8255 1728 | 8257 1729 | 8260 1730 | 8261 1731 | 8262 1732 | 8263 1733 | 8274 1734 | 8275 1735 | 8276 1736 | 8277 1737 | 8287 1738 | 8288 1739 | 8294 1740 | 8304 1741 | 8305 1742 | 8308 1743 | 8314 1744 | 8317 1745 | 8318 1746 | 8319 1747 | 8320 1748 | 8330 1749 | 8333 1750 | 8334 1751 | 8336 1752 | 8352 1753 | 8400 1754 | 8413 1755 | 8417 1756 | 8418 1757 | 8421 1758 | 8448 1759 | 8450 1760 | 8451 1761 | 8455 1762 | 8456 1763 | 8458 1764 | 8459 1765 | 8462 1766 | 8464 1767 | 8467 1768 | 8468 1769 | 8469 1770 | 8470 1771 | 8472 1772 | 8473 1773 | 8478 1774 | 8484 1775 | 8485 1776 | 8486 1777 | 8487 1778 | 8488 1779 | 8489 1780 | 8490 1781 | 8491 1782 | 8492 1783 | 8494 1784 | 8495 1785 | 8496 1786 | 8498 1787 | 8499 1788 | 8500 1789 | 8501 1790 | 8505 1791 | 8506 1792 | 8508 1793 | 8510 1794 | 8512 1795 | 8517 1796 | 8518 1797 | 8522 1798 | 8523 1799 | 8524 1800 | 8526 1801 | 8527 1802 | 8528 1803 | 8544 1804 | 8560 1805 | 8576 1806 | 8579 1807 | 8580 1808 | 8581 1809 | 8585 1810 | 8586 1811 | 8592 1812 | 8597 1813 | 8602 1814 | 8604 1815 | 8608 1816 | 8609 1817 | 8611 1818 | 8612 1819 | 8614 1820 | 8615 1821 | 8622 1822 | 8623 1823 | 8654 1824 | 8656 1825 | 8658 1826 | 8659 1827 | 8660 1828 | 8661 1829 | 8692 1830 | 8960 1831 | 8968 1832 | 8969 1833 | 8970 1834 | 8971 1835 | 8972 1836 | 8992 1837 | 8994 1838 | 9001 1839 | 9002 1840 | 9003 1841 | 9084 1842 | 9085 1843 | 9115 1844 | 9140 1845 | 9180 1846 | 9186 1847 | 9280 1848 | 9312 1849 | 9372 1850 | 9398 1851 | 9424 1852 | 9450 1853 | 9472 1854 | 9655 1855 | 9656 1856 | 9665 1857 | 9666 1858 | 9720 1859 | 9728 1860 | 9839 1861 | 9840 1862 | 10088 1863 | 10089 1864 | 10090 1865 | 10091 1866 | 10092 1867 | 10093 1868 | 10094 1869 | 10095 1870 | 10096 1871 | 10097 1872 | 10098 1873 | 10099 1874 | 10100 1875 | 10101 1876 | 10102 1877 | 10132 1878 | 10176 1879 | 10181 1880 | 10182 1881 | 10183 1882 | 10214 1883 | 10215 1884 | 10216 1885 | 10217 1886 | 10218 1887 | 10219 1888 | 10220 1889 | 10221 1890 | 10222 1891 | 10223 1892 | 10224 1893 | 10240 1894 | 10496 1895 | 10627 1896 | 10628 1897 | 10629 1898 | 10630 1899 | 10631 1900 | 10632 1901 | 10633 1902 | 10634 1903 | 10635 1904 | 10636 1905 | 10637 1906 | 10638 1907 | 10639 1908 | 10640 1909 | 10641 1910 | 10642 1911 | 10643 1912 | 10644 1913 | 10645 1914 | 10646 1915 | 10647 1916 | 10648 1917 | 10649 1918 | 10712 1919 | 10713 1920 | 10714 1921 | 10715 1922 | 10716 1923 | 10748 1924 | 10749 1925 | 10750 1926 | 11008 1927 | 11056 1928 | 11077 1929 | 11079 1930 | 11085 1931 | 11126 1932 | 11159 1933 | 11264 1934 | 11312 1935 | 11360 1936 | 11361 1937 | 11362 1938 | 11363 1939 | 11364 1940 | 11365 1941 | 11366 1942 | 11367 1943 | 11368 1944 | 11369 1945 | 11370 1946 | 11371 1947 | 11372 1948 | 11373 1949 | 11374 1950 | 11375 1951 | 11376 1952 | 11377 1953 | 11378 1954 | 11379 1955 | 11380 1956 | 11381 1957 | 11382 1958 | 11383 1959 | 11388 1960 | 11390 1961 | 11392 1962 | 11393 1963 | 11394 1964 | 11395 1965 | 11396 1966 | 11397 1967 | 11398 1968 | 11399 1969 | 11400 1970 | 11401 1971 | 11402 1972 | 11403 1973 | 11404 1974 | 11405 1975 | 11406 1976 | 11407 1977 | 11408 1978 | 11409 1979 | 11410 1980 | 11411 1981 | 11412 1982 | 11413 1983 | 11414 1984 | 11415 1985 | 11416 1986 | 11417 1987 | 11418 1988 | 11419 1989 | 11420 1990 | 11421 1991 | 11422 1992 | 11423 1993 | 11424 1994 | 11425 1995 | 11426 1996 | 11427 1997 | 11428 1998 | 11429 1999 | 11430 2000 | 11431 2001 | 11432 2002 | 11433 2003 | 11434 2004 | 11435 2005 | 11436 2006 | 11437 2007 | 11438 2008 | 11439 2009 | 11440 2010 | 11441 2011 | 11442 2012 | 11443 2013 | 11444 2014 | 11445 2015 | 11446 2016 | 11447 2017 | 11448 2018 | 11449 2019 | 11450 2020 | 11451 2021 | 11452 2022 | 11453 2023 | 11454 2024 | 11455 2025 | 11456 2026 | 11457 2027 | 11458 2028 | 11459 2029 | 11460 2030 | 11461 2031 | 11462 2032 | 11463 2033 | 11464 2034 | 11465 2035 | 11466 2036 | 11467 2037 | 11468 2038 | 11469 2039 | 11470 2040 | 11471 2041 | 11472 2042 | 11473 2043 | 11474 2044 | 11475 2045 | 11476 2046 | 11477 2047 | 11478 2048 | 11479 2049 | 11480 2050 | 11481 2051 | 11482 2052 | 11483 2053 | 11484 2054 | 11485 2055 | 11486 2056 | 11487 2057 | 11488 2058 | 11489 2059 | 11490 2060 | 11491 2061 | 11492 2062 | 11493 2063 | 11499 2064 | 11500 2065 | 11501 2066 | 11502 2067 | 11503 2068 | 11506 2069 | 11507 2070 | 11513 2071 | 11517 2072 | 11518 2073 | 11520 2074 | 11559 2075 | 11565 2076 | 11568 2077 | 11631 2078 | 11632 2079 | 11647 2080 | 11648 2081 | 11680 2082 | 11688 2083 | 11696 2084 | 11704 2085 | 11712 2086 | 11720 2087 | 11728 2088 | 11736 2089 | 11744 2090 | 11776 2091 | 11778 2092 | 11779 2093 | 11780 2094 | 11781 2095 | 11782 2096 | 11785 2097 | 11786 2098 | 11787 2099 | 11788 2100 | 11789 2101 | 11790 2102 | 11799 2103 | 11800 2104 | 11802 2105 | 11803 2106 | 11804 2107 | 11805 2108 | 11806 2109 | 11808 2110 | 11809 2111 | 11810 2112 | 11811 2113 | 11812 2114 | 11813 2115 | 11814 2116 | 11815 2117 | 11816 2118 | 11817 2119 | 11818 2120 | 11823 2121 | 11824 2122 | 11834 2123 | 11836 2124 | 11840 2125 | 11841 2126 | 11842 2127 | 11843 2128 | 11856 2129 | 11858 2130 | 11861 2131 | 11862 2132 | 11863 2133 | 11864 2134 | 11865 2135 | 11866 2136 | 11867 2137 | 11868 2138 | 11869 2139 | 11904 2140 | 11931 2141 | 12032 2142 | 12272 2143 | 12288 2144 | 12289 2145 | 12292 2146 | 12293 2147 | 12294 2148 | 12295 2149 | 12296 2150 | 12297 2151 | 12298 2152 | 12299 2153 | 12300 2154 | 12301 2155 | 12302 2156 | 12303 2157 | 12304 2158 | 12305 2159 | 12306 2160 | 12308 2161 | 12309 2162 | 12310 2163 | 12311 2164 | 12312 2165 | 12313 2166 | 12314 2167 | 12315 2168 | 12316 2169 | 12317 2170 | 12318 2171 | 12320 2172 | 12321 2173 | 12330 2174 | 12334 2175 | 12336 2176 | 12337 2177 | 12342 2178 | 12344 2179 | 12347 2180 | 12348 2181 | 12349 2182 | 12350 2183 | 12353 2184 | 12441 2185 | 12443 2186 | 12445 2187 | 12447 2188 | 12448 2189 | 12449 2190 | 12539 2191 | 12540 2192 | 12543 2193 | 12549 2194 | 12593 2195 | 12688 2196 | 12690 2197 | 12694 2198 | 12704 2199 | 12736 2200 | 12784 2201 | 12800 2202 | 12832 2203 | 12842 2204 | 12872 2205 | 12880 2206 | 12881 2207 | 12896 2208 | 12928 2209 | 12938 2210 | 12977 2211 | 12992 2212 | 13312 2213 | 19904 2214 | 19968 2215 | 40981 2216 | 40982 2217 | 42128 2218 | 42192 2219 | 42232 2220 | 42238 2221 | 42240 2222 | 42508 2223 | 42509 2224 | 42512 2225 | 42528 2226 | 42538 2227 | 42560 2228 | 42561 2229 | 42562 2230 | 42563 2231 | 42564 2232 | 42565 2233 | 42566 2234 | 42567 2235 | 42568 2236 | 42569 2237 | 42570 2238 | 42571 2239 | 42572 2240 | 42573 2241 | 42574 2242 | 42575 2243 | 42576 2244 | 42577 2245 | 42578 2246 | 42579 2247 | 42580 2248 | 42581 2249 | 42582 2250 | 42583 2251 | 42584 2252 | 42585 2253 | 42586 2254 | 42587 2255 | 42588 2256 | 42589 2257 | 42590 2258 | 42591 2259 | 42592 2260 | 42593 2261 | 42594 2262 | 42595 2263 | 42596 2264 | 42597 2265 | 42598 2266 | 42599 2267 | 42600 2268 | 42601 2269 | 42602 2270 | 42603 2271 | 42604 2272 | 42605 2273 | 42606 2274 | 42607 2275 | 42608 2276 | 42611 2277 | 42612 2278 | 42622 2279 | 42623 2280 | 42624 2281 | 42625 2282 | 42626 2283 | 42627 2284 | 42628 2285 | 42629 2286 | 42630 2287 | 42631 2288 | 42632 2289 | 42633 2290 | 42634 2291 | 42635 2292 | 42636 2293 | 42637 2294 | 42638 2295 | 42639 2296 | 42640 2297 | 42641 2298 | 42642 2299 | 42643 2300 | 42644 2301 | 42645 2302 | 42646 2303 | 42647 2304 | 42648 2305 | 42649 2306 | 42650 2307 | 42651 2308 | 42652 2309 | 42654 2310 | 42656 2311 | 42726 2312 | 42736 2313 | 42738 2314 | 42752 2315 | 42775 2316 | 42784 2317 | 42786 2318 | 42787 2319 | 42788 2320 | 42789 2321 | 42790 2322 | 42791 2323 | 42792 2324 | 42793 2325 | 42794 2326 | 42795 2327 | 42796 2328 | 42797 2329 | 42798 2330 | 42799 2331 | 42800 2332 | 42802 2333 | 42803 2334 | 42804 2335 | 42805 2336 | 42806 2337 | 42807 2338 | 42808 2339 | 42809 2340 | 42810 2341 | 42811 2342 | 42812 2343 | 42813 2344 | 42814 2345 | 42815 2346 | 42816 2347 | 42817 2348 | 42818 2349 | 42819 2350 | 42820 2351 | 42821 2352 | 42822 2353 | 42823 2354 | 42824 2355 | 42825 2356 | 42826 2357 | 42827 2358 | 42828 2359 | 42829 2360 | 42830 2361 | 42831 2362 | 42832 2363 | 42833 2364 | 42834 2365 | 42835 2366 | 42836 2367 | 42837 2368 | 42838 2369 | 42839 2370 | 42840 2371 | 42841 2372 | 42842 2373 | 42843 2374 | 42844 2375 | 42845 2376 | 42846 2377 | 42847 2378 | 42848 2379 | 42849 2380 | 42850 2381 | 42851 2382 | 42852 2383 | 42853 2384 | 42854 2385 | 42855 2386 | 42856 2387 | 42857 2388 | 42858 2389 | 42859 2390 | 42860 2391 | 42861 2392 | 42862 2393 | 42863 2394 | 42864 2395 | 42865 2396 | 42873 2397 | 42874 2398 | 42875 2399 | 42876 2400 | 42877 2401 | 42878 2402 | 42879 2403 | 42880 2404 | 42881 2405 | 42882 2406 | 42883 2407 | 42884 2408 | 42885 2409 | 42886 2410 | 42887 2411 | 42888 2412 | 42889 2413 | 42891 2414 | 42892 2415 | 42893 2416 | 42894 2417 | 42895 2418 | 42896 2419 | 42897 2420 | 42898 2421 | 42899 2422 | 42900 2423 | 42901 2424 | 42902 2425 | 42903 2426 | 42904 2427 | 42905 2428 | 42906 2429 | 42907 2430 | 42908 2431 | 42909 2432 | 42910 2433 | 42911 2434 | 42912 2435 | 42913 2436 | 42914 2437 | 42915 2438 | 42916 2439 | 42917 2440 | 42918 2441 | 42919 2442 | 42920 2443 | 42921 2444 | 42922 2445 | 42923 2446 | 42924 2447 | 42925 2448 | 42926 2449 | 42927 2450 | 42928 2451 | 42929 2452 | 42930 2453 | 42931 2454 | 42932 2455 | 42933 2456 | 42934 2457 | 42935 2458 | 42936 2459 | 42937 2460 | 42938 2461 | 42939 2462 | 42940 2463 | 42941 2464 | 42942 2465 | 42943 2466 | 42944 2467 | 42945 2468 | 42946 2469 | 42947 2470 | 42948 2471 | 42949 2472 | 42950 2473 | 42951 2474 | 42952 2475 | 42953 2476 | 42954 2477 | 42960 2478 | 42961 2479 | 42963 2480 | 42965 2481 | 42966 2482 | 42967 2483 | 42968 2484 | 42969 2485 | 42994 2486 | 42997 2487 | 42998 2488 | 42999 2489 | 43000 2490 | 43002 2491 | 43003 2492 | 43010 2493 | 43011 2494 | 43014 2495 | 43015 2496 | 43019 2497 | 43020 2498 | 43043 2499 | 43045 2500 | 43047 2501 | 43048 2502 | 43052 2503 | 43056 2504 | 43062 2505 | 43064 2506 | 43065 2507 | 43072 2508 | 43124 2509 | 43136 2510 | 43138 2511 | 43188 2512 | 43204 2513 | 43214 2514 | 43216 2515 | 43232 2516 | 43250 2517 | 43256 2518 | 43259 2519 | 43260 2520 | 43261 2521 | 43263 2522 | 43264 2523 | 43274 2524 | 43302 2525 | 43310 2526 | 43312 2527 | 43335 2528 | 43346 2529 | 43359 2530 | 43360 2531 | 43392 2532 | 43395 2533 | 43396 2534 | 43443 2535 | 43444 2536 | 43446 2537 | 43450 2538 | 43452 2539 | 43454 2540 | 43457 2541 | 43471 2542 | 43472 2543 | 43486 2544 | 43488 2545 | 43493 2546 | 43494 2547 | 43495 2548 | 43504 2549 | 43514 2550 | 43520 2551 | 43561 2552 | 43567 2553 | 43569 2554 | 43571 2555 | 43573 2556 | 43584 2557 | 43587 2558 | 43588 2559 | 43596 2560 | 43597 2561 | 43600 2562 | 43612 2563 | 43616 2564 | 43632 2565 | 43633 2566 | 43639 2567 | 43642 2568 | 43643 2569 | 43644 2570 | 43645 2571 | 43646 2572 | 43696 2573 | 43697 2574 | 43698 2575 | 43701 2576 | 43703 2577 | 43705 2578 | 43710 2579 | 43712 2580 | 43713 2581 | 43714 2582 | 43739 2583 | 43741 2584 | 43742 2585 | 43744 2586 | 43755 2587 | 43756 2588 | 43758 2589 | 43760 2590 | 43762 2591 | 43763 2592 | 43765 2593 | 43766 2594 | 43777 2595 | 43785 2596 | 43793 2597 | 43808 2598 | 43816 2599 | 43824 2600 | 43859 2601 | 43860 2602 | 43867 2603 | 43868 2604 | 43872 2605 | 43881 2606 | 43882 2607 | 43888 2608 | 43968 2609 | 44003 2610 | 44005 2611 | 44006 2612 | 44008 2613 | 44009 2614 | 44011 2615 | 44012 2616 | 44013 2617 | 44016 2618 | 44032 2619 | 55216 2620 | 55243 2621 | 55296 2622 | 56192 2623 | 56320 2624 | 57344 2625 | 63744 2626 | 64112 2627 | 64256 2628 | 64275 2629 | 64285 2630 | 64286 2631 | 64287 2632 | 64297 2633 | 64298 2634 | 64312 2635 | 64318 2636 | 64320 2637 | 64323 2638 | 64326 2639 | 64434 2640 | 64467 2641 | 64830 2642 | 64831 2643 | 64832 2644 | 64848 2645 | 64914 2646 | 64975 2647 | 65008 2648 | 65020 2649 | 65021 2650 | 65024 2651 | 65040 2652 | 65047 2653 | 65048 2654 | 65049 2655 | 65056 2656 | 65072 2657 | 65073 2658 | 65075 2659 | 65077 2660 | 65078 2661 | 65079 2662 | 65080 2663 | 65081 2664 | 65082 2665 | 65083 2666 | 65084 2667 | 65085 2668 | 65086 2669 | 65087 2670 | 65088 2671 | 65089 2672 | 65090 2673 | 65091 2674 | 65092 2675 | 65093 2676 | 65095 2677 | 65096 2678 | 65097 2679 | 65101 2680 | 65104 2681 | 65108 2682 | 65112 2683 | 65113 2684 | 65114 2685 | 65115 2686 | 65116 2687 | 65117 2688 | 65118 2689 | 65119 2690 | 65122 2691 | 65123 2692 | 65124 2693 | 65128 2694 | 65129 2695 | 65130 2696 | 65136 2697 | 65142 2698 | 65279 2699 | 65281 2700 | 65284 2701 | 65285 2702 | 65288 2703 | 65289 2704 | 65290 2705 | 65291 2706 | 65292 2707 | 65293 2708 | 65294 2709 | 65296 2710 | 65306 2711 | 65308 2712 | 65311 2713 | 65313 2714 | 65339 2715 | 65340 2716 | 65341 2717 | 65342 2718 | 65343 2719 | 65344 2720 | 65345 2721 | 65371 2722 | 65372 2723 | 65373 2724 | 65374 2725 | 65375 2726 | 65376 2727 | 65377 2728 | 65378 2729 | 65379 2730 | 65380 2731 | 65382 2732 | 65392 2733 | 65393 2734 | 65438 2735 | 65440 2736 | 65474 2737 | 65482 2738 | 65490 2739 | 65498 2740 | 65504 2741 | 65506 2742 | 65507 2743 | 65508 2744 | 65509 2745 | 65512 2746 | 65513 2747 | 65517 2748 | 65529 2749 | 65532 2750 | 65536 2751 | 65549 2752 | 65576 2753 | 65596 2754 | 65599 2755 | 65616 2756 | 65664 2757 | 65792 2758 | 65799 2759 | 65847 2760 | 65856 2761 | 65909 2762 | 65913 2763 | 65930 2764 | 65932 2765 | 65936 2766 | 65952 2767 | 66000 2768 | 66045 2769 | 66176 2770 | 66208 2771 | 66272 2772 | 66273 2773 | 66304 2774 | 66336 2775 | 66349 2776 | 66369 2777 | 66370 2778 | 66378 2779 | 66384 2780 | 66422 2781 | 66432 2782 | 66463 2783 | 66464 2784 | 66504 2785 | 66512 2786 | 66513 2787 | 66560 2788 | 66600 2789 | 66640 2790 | 66720 2791 | 66736 2792 | 66776 2793 | 66816 2794 | 66864 2795 | 66927 2796 | 66928 2797 | 66940 2798 | 66956 2799 | 66964 2800 | 66967 2801 | 66979 2802 | 66995 2803 | 67003 2804 | 67072 2805 | 67392 2806 | 67424 2807 | 67456 2808 | 67463 2809 | 67506 2810 | 67584 2811 | 67592 2812 | 67594 2813 | 67639 2814 | 67644 2815 | 67647 2816 | 67671 2817 | 67672 2818 | 67680 2819 | 67703 2820 | 67705 2821 | 67712 2822 | 67751 2823 | 67808 2824 | 67828 2825 | 67835 2826 | 67840 2827 | 67862 2828 | 67871 2829 | 67872 2830 | 67903 2831 | 67968 2832 | 68028 2833 | 68030 2834 | 68032 2835 | 68050 2836 | 68096 2837 | 68097 2838 | 68101 2839 | 68108 2840 | 68112 2841 | 68117 2842 | 68121 2843 | 68152 2844 | 68159 2845 | 68160 2846 | 68176 2847 | 68192 2848 | 68221 2849 | 68223 2850 | 68224 2851 | 68253 2852 | 68288 2853 | 68296 2854 | 68297 2855 | 68325 2856 | 68331 2857 | 68336 2858 | 68352 2859 | 68409 2860 | 68416 2861 | 68440 2862 | 68448 2863 | 68472 2864 | 68480 2865 | 68505 2866 | 68521 2867 | 68608 2868 | 68736 2869 | 68800 2870 | 68858 2871 | 68864 2872 | 68900 2873 | 68912 2874 | 69216 2875 | 69248 2876 | 69291 2877 | 69293 2878 | 69296 2879 | 69376 2880 | 69405 2881 | 69415 2882 | 69424 2883 | 69446 2884 | 69457 2885 | 69461 2886 | 69488 2887 | 69506 2888 | 69510 2889 | 69552 2890 | 69573 2891 | 69600 2892 | 69632 2893 | 69633 2894 | 69634 2895 | 69635 2896 | 69688 2897 | 69703 2898 | 69714 2899 | 69734 2900 | 69744 2901 | 69745 2902 | 69747 2903 | 69749 2904 | 69759 2905 | 69762 2906 | 69763 2907 | 69808 2908 | 69811 2909 | 69815 2910 | 69817 2911 | 69819 2912 | 69821 2913 | 69822 2914 | 69826 2915 | 69837 2916 | 69840 2917 | 69872 2918 | 69888 2919 | 69891 2920 | 69927 2921 | 69932 2922 | 69933 2923 | 69942 2924 | 69952 2925 | 69956 2926 | 69957 2927 | 69959 2928 | 69968 2929 | 70003 2930 | 70004 2931 | 70006 2932 | 70016 2933 | 70018 2934 | 70019 2935 | 70067 2936 | 70070 2937 | 70079 2938 | 70081 2939 | 70085 2940 | 70089 2941 | 70093 2942 | 70094 2943 | 70095 2944 | 70096 2945 | 70106 2946 | 70107 2947 | 70108 2948 | 70109 2949 | 70113 2950 | 70144 2951 | 70163 2952 | 70188 2953 | 70191 2954 | 70194 2955 | 70196 2956 | 70197 2957 | 70198 2958 | 70200 2959 | 70206 2960 | 70272 2961 | 70280 2962 | 70282 2963 | 70287 2964 | 70303 2965 | 70313 2966 | 70320 2967 | 70367 2968 | 70368 2969 | 70371 2970 | 70384 2971 | 70400 2972 | 70402 2973 | 70405 2974 | 70415 2975 | 70419 2976 | 70442 2977 | 70450 2978 | 70453 2979 | 70459 2980 | 70461 2981 | 70462 2982 | 70464 2983 | 70465 2984 | 70471 2985 | 70475 2986 | 70480 2987 | 70487 2988 | 70493 2989 | 70498 2990 | 70502 2991 | 70512 2992 | 70656 2993 | 70709 2994 | 70712 2995 | 70720 2996 | 70722 2997 | 70725 2998 | 70726 2999 | 70727 3000 | 70731 3001 | 70736 3002 | 70746 3003 | 70749 3004 | 70750 3005 | 70751 3006 | 70784 3007 | 70832 3008 | 70835 3009 | 70841 3010 | 70842 3011 | 70843 3012 | 70847 3013 | 70849 3014 | 70850 3015 | 70852 3016 | 70854 3017 | 70855 3018 | 70864 3019 | 71040 3020 | 71087 3021 | 71090 3022 | 71096 3023 | 71100 3024 | 71102 3025 | 71103 3026 | 71105 3027 | 71128 3028 | 71132 3029 | 71168 3030 | 71216 3031 | 71219 3032 | 71227 3033 | 71229 3034 | 71230 3035 | 71231 3036 | 71233 3037 | 71236 3038 | 71248 3039 | 71264 3040 | 71296 3041 | 71339 3042 | 71340 3043 | 71341 3044 | 71342 3045 | 71344 3046 | 71350 3047 | 71351 3048 | 71352 3049 | 71353 3050 | 71360 3051 | 71424 3052 | 71453 3053 | 71456 3054 | 71458 3055 | 71462 3056 | 71463 3057 | 71472 3058 | 71482 3059 | 71484 3060 | 71487 3061 | 71488 3062 | 71680 3063 | 71724 3064 | 71727 3065 | 71736 3066 | 71737 3067 | 71739 3068 | 71840 3069 | 71872 3070 | 71904 3071 | 71914 3072 | 71935 3073 | 71945 3074 | 71948 3075 | 71957 3076 | 71960 3077 | 71984 3078 | 71991 3079 | 71995 3080 | 71997 3081 | 71998 3082 | 71999 3083 | 72000 3084 | 72001 3085 | 72002 3086 | 72003 3087 | 72004 3088 | 72016 3089 | 72096 3090 | 72106 3091 | 72145 3092 | 72148 3093 | 72154 3094 | 72156 3095 | 72160 3096 | 72161 3097 | 72162 3098 | 72163 3099 | 72164 3100 | 72192 3101 | 72193 3102 | 72203 3103 | 72243 3104 | 72249 3105 | 72250 3106 | 72251 3107 | 72255 3108 | 72263 3109 | 72272 3110 | 72273 3111 | 72279 3112 | 72281 3113 | 72284 3114 | 72330 3115 | 72343 3116 | 72344 3117 | 72346 3118 | 72349 3119 | 72350 3120 | 72368 3121 | 72704 3122 | 72714 3123 | 72751 3124 | 72752 3125 | 72760 3126 | 72766 3127 | 72767 3128 | 72768 3129 | 72769 3130 | 72784 3131 | 72794 3132 | 72816 3133 | 72818 3134 | 72850 3135 | 72873 3136 | 72874 3137 | 72881 3138 | 72882 3139 | 72884 3140 | 72885 3141 | 72960 3142 | 72968 3143 | 72971 3144 | 73009 3145 | 73018 3146 | 73020 3147 | 73023 3148 | 73030 3149 | 73031 3150 | 73040 3151 | 73056 3152 | 73063 3153 | 73066 3154 | 73098 3155 | 73104 3156 | 73107 3157 | 73109 3158 | 73110 3159 | 73111 3160 | 73112 3161 | 73120 3162 | 73440 3163 | 73459 3164 | 73461 3165 | 73463 3166 | 73648 3167 | 73664 3168 | 73685 3169 | 73693 3170 | 73697 3171 | 73727 3172 | 73728 3173 | 74752 3174 | 74864 3175 | 74880 3176 | 77712 3177 | 77809 3178 | 77824 3179 | 78896 3180 | 82944 3181 | 92160 3182 | 92736 3183 | 92768 3184 | 92782 3185 | 92784 3186 | 92864 3187 | 92880 3188 | 92912 3189 | 92917 3190 | 92928 3191 | 92976 3192 | 92983 3193 | 92988 3194 | 92992 3195 | 92996 3196 | 92997 3197 | 93008 3198 | 93019 3199 | 93027 3200 | 93053 3201 | 93760 3202 | 93792 3203 | 93824 3204 | 93847 3205 | 93952 3206 | 94031 3207 | 94032 3208 | 94033 3209 | 94095 3210 | 94099 3211 | 94176 3212 | 94178 3213 | 94179 3214 | 94180 3215 | 94192 3216 | 94208 3217 | 100352 3218 | 101632 3219 | 110576 3220 | 110581 3221 | 110589 3222 | 110592 3223 | 110928 3224 | 110948 3225 | 110960 3226 | 113664 3227 | 113776 3228 | 113792 3229 | 113808 3230 | 113820 3231 | 113821 3232 | 113823 3233 | 113824 3234 | 118528 3235 | 118576 3236 | 118608 3237 | 118784 3238 | 119040 3239 | 119081 3240 | 119141 3241 | 119143 3242 | 119146 3243 | 119149 3244 | 119155 3245 | 119163 3246 | 119171 3247 | 119173 3248 | 119180 3249 | 119210 3250 | 119214 3251 | 119296 3252 | 119362 3253 | 119365 3254 | 119520 3255 | 119552 3256 | 119648 3257 | 119808 3258 | 119834 3259 | 119860 3260 | 119886 3261 | 119894 3262 | 119912 3263 | 119938 3264 | 119964 3265 | 119966 3266 | 119970 3267 | 119973 3268 | 119977 3269 | 119982 3270 | 119990 3271 | 119995 3272 | 119997 3273 | 120005 3274 | 120016 3275 | 120042 3276 | 120068 3277 | 120071 3278 | 120077 3279 | 120086 3280 | 120094 3281 | 120120 3282 | 120123 3283 | 120128 3284 | 120134 3285 | 120138 3286 | 120146 3287 | 120172 3288 | 120198 3289 | 120224 3290 | 120250 3291 | 120276 3292 | 120302 3293 | 120328 3294 | 120354 3295 | 120380 3296 | 120406 3297 | 120432 3298 | 120458 3299 | 120488 3300 | 120513 3301 | 120514 3302 | 120539 3303 | 120540 3304 | 120546 3305 | 120571 3306 | 120572 3307 | 120597 3308 | 120598 3309 | 120604 3310 | 120629 3311 | 120630 3312 | 120655 3313 | 120656 3314 | 120662 3315 | 120687 3316 | 120688 3317 | 120713 3318 | 120714 3319 | 120720 3320 | 120745 3321 | 120746 3322 | 120771 3323 | 120772 3324 | 120778 3325 | 120779 3326 | 120782 3327 | 120832 3328 | 121344 3329 | 121399 3330 | 121403 3331 | 121453 3332 | 121461 3333 | 121462 3334 | 121476 3335 | 121477 3336 | 121479 3337 | 121499 3338 | 121505 3339 | 122624 3340 | 122634 3341 | 122635 3342 | 122880 3343 | 122888 3344 | 122907 3345 | 122915 3346 | 122918 3347 | 123136 3348 | 123184 3349 | 123191 3350 | 123200 3351 | 123214 3352 | 123215 3353 | 123536 3354 | 123566 3355 | 123584 3356 | 123628 3357 | 123632 3358 | 123647 3359 | 124896 3360 | 124904 3361 | 124909 3362 | 124912 3363 | 124928 3364 | 125127 3365 | 125136 3366 | 125184 3367 | 125218 3368 | 125252 3369 | 125259 3370 | 125264 3371 | 125278 3372 | 126065 3373 | 126124 3374 | 126125 3375 | 126128 3376 | 126129 3377 | 126209 3378 | 126254 3379 | 126255 3380 | 126464 3381 | 126469 3382 | 126497 3383 | 126500 3384 | 126503 3385 | 126505 3386 | 126516 3387 | 126521 3388 | 126523 3389 | 126530 3390 | 126535 3391 | 126537 3392 | 126539 3393 | 126541 3394 | 126545 3395 | 126548 3396 | 126551 3397 | 126553 3398 | 126555 3399 | 126557 3400 | 126559 3401 | 126561 3402 | 126564 3403 | 126567 3404 | 126572 3405 | 126580 3406 | 126585 3407 | 126590 3408 | 126592 3409 | 126603 3410 | 126625 3411 | 126629 3412 | 126635 3413 | 126704 3414 | 126976 3415 | 127024 3416 | 127136 3417 | 127153 3418 | 127169 3419 | 127185 3420 | 127232 3421 | 127245 3422 | 127462 3423 | 127504 3424 | 127552 3425 | 127568 3426 | 127584 3427 | 127744 3428 | 127995 3429 | 128000 3430 | 128733 3431 | 128752 3432 | 128768 3433 | 128896 3434 | 128992 3435 | 129008 3436 | 129024 3437 | 129040 3438 | 129104 3439 | 129120 3440 | 129168 3441 | 129200 3442 | 129280 3443 | 129632 3444 | 129648 3445 | 129656 3446 | 129664 3447 | 129680 3448 | 129712 3449 | 129728 3450 | 129744 3451 | 129760 3452 | 129776 3453 | 129792 3454 | 129940 3455 | 130032 3456 | 131072 3457 | 173824 3458 | 177984 3459 | 178208 3460 | 183984 3461 | 194560 3462 | 196608 3463 | 917505 3464 | 917536 3465 | 917760 3466 | 983040 3467 | 1048576 3468 | -------------------------------------------------------------------------------- /encode-levels/levels-raw.txt: -------------------------------------------------------------------------------- 1 | λ.o._ _.o.. 2 | ...#_ .#.#o λ#... 3 | #._.. λoooo #..._ 4 | .λ..._ .o_o.. .o_.o_ 5 | .λ.o_ ##### _oλ.. 6 | .λ.o_ o#... .#### _..λ. _o.o_ 7 | ...#..λ ..o_.o. ..λ#... #_###_# .λ.#..λ .o._o.. ...#... 8 | oλooo.... ooλoo.... ooλλ_____ oλooλ____ λooooλ... ......... 9 | λoo.+_ λoλ.+_ 10 | ##..... λλoo++_ ##..... 11 | #.#.##__ .λ.λ.#oo .#.#.#++ ........ #.#.##++ .....#oo .λλλ.#__ 12 | .#......... ...#....... .λ.#....... #######.### #λooo+++++_ ######.##.# .......#... #..λ..#.λ.. 13 | .._..._.. .._.+._.. .#λ#+###. .#oooooλ# .#o#λ#o#. .#o###o#. #λoooo.#. .#####λ#. ......#.. 14 | ...+_+... .+..+..+. ......... #.#o#o#.# ..λ...λ.. .#.#.#.#. #.o+_+o.# #.......# 15 | ###......... #.λ_....λ... ##.o.###.λo. #..#.#.#.λλ. #..#.#.#λ_.λ 16 | -------------------------------------------------------------------------------- /puzzle-scratch.txt: -------------------------------------------------------------------------------- 1 | "Call-by-push-block" 2 | char set: λ_.o+# \n 3 | additional chars: O 4 | 5 | Level 1 6 | λ.o._ 7 | _.o.. 8 | 9 | minified: λ.o._ _.o.. 10 | 11 | Level 2 12 | λ.o_ 13 | o#o# 14 | _#_# 15 | 16 | minified: λ.o_ o#o# _#_# 17 | 18 | Level 3 19 | #._.. 20 | λoooo 21 | #..._ 22 | 23 | minified: #._.. λoooo #..._ 24 | 25 | Level 4 26 | .λ..._ 27 | .o_o.. 28 | .o_.o_ 29 | 30 | minified: .λ..._ .o_o.. .o_.o_ 31 | 32 | Level 5 33 | .λ.o_ 34 | ##### 35 | _oλ.. 36 | 37 | minified: .λ.o_ ##### _oλ.. 38 | 39 | Level 6 40 | 41 | .λ.o_ 42 | o#... 43 | .#### 44 | _..λ. 45 | _o.o_ 46 | 47 | minified: .λ.o_ o#... .#### _..λ. _o.o_ 48 | 49 | Level 7 50 | 51 | ._.o.. 52 | ._.o.# 53 | .o_.λ. 54 | .o_### 55 | ....o_ 56 | .λ#.o_ 57 | 58 | minified: ._.o.. ._.o.# .o_.λ. .o_### ....o_ .λ#.o_ 59 | 60 | Level 8 61 | 62 | oλooo.... 63 | ooλoo.... 64 | ooλλ_____ 65 | oλooλ____ 66 | λooooλ... 67 | ......... 68 | 69 | minified: oλooo.... ooλoo.... ooλλ_____ oλooλ____ λooooλ... ......... 70 | 71 | Level 9 72 | 73 | λoo+_ 74 | 75 | Level 10 76 | 77 | λoλ+_ 78 | 79 | Level 9-10 combined 80 | 81 | λoo.+_ 82 | λoλ.+_ 83 | 84 | minified: λoo.+_ λoλ.+_ 85 | 86 | Level 11 87 | ##..... 88 | λλoo++_ 89 | ##..... 90 | 91 | minified: ##..... λλoo++_ ##..... 92 | 93 | Level 12 94 | #.#.####### 95 | .λ.λ.###### 96 | .#.#.###### 97 | .....++++o_ 98 | #.#.####### 99 | .....###### 100 | .λλλ.###### 101 | 102 | minified: #.#.####### .λ.λ.###### .#.#.###### .....++++o_ #.#.####### .....###### .λλλ.###### 103 | 104 | Level 12 Alt 105 | #.#.##__ 106 | .λ.λ.#oo 107 | .#.#.#++ 108 | ........ 109 | #.#.##++ 110 | .....#oo 111 | .λλλ.#__ 112 | 113 | minified: #.#.##__ .λ.λ.#oo .#.#.#++ ........ #.#.##++ .....#oo .λλλ.#__ 114 | 115 | Level 13 116 | 117 | .#......... 118 | ...#....... 119 | .λ.#....... 120 | #######.### 121 | #λooo+++++_ 122 | ######.##.# 123 | .......#... 124 | #..λ..#.λ.. 125 | 126 | minified: .#......... ...#....... .λ.#....... #######.### #λooo+++++_ ######.##.# .......#... #..λ..#.λ.. 127 | 128 | Level 14 129 | ...._.... 130 | ..._+.... 131 | ..#_+.... 132 | .#λ#+###. 133 | .#oooooλ# 134 | .#o#λ#o#. 135 | .#o###o#. 136 | #λoooo.#. 137 | .#####λ#. 138 | ......#.. 139 | 140 | minified: ...._.... ..._+.... ..#_+.... .#λ#+###. .#oooooλ# .#o#λ#o#. .#o###o#. #λoooo.#. .#####λ#. ......#.. 141 | 142 | Level 14 Alt 143 | .._..._.. 144 | .._.+._.. 145 | .#λ#+###. 146 | .#oooooλ# 147 | .#o#λ#o#. 148 | .#o###o#. 149 | #λoooo.#. 150 | .#####λ#. 151 | ......#.. 152 | 153 | minified: .._..._.. .._.+._.. .#λ#+###. .#oooooλ# .#o#λ#o#. .#o###o#. #λoooo.#. .#####λ#. ......#.. 154 | 155 | Level 14 Harder 156 | ..._____. 157 | .._.+..._ 158 | ..#.+..._ 159 | .#λ#+###. 160 | .#oooooλ# 161 | .#o#λ#o#. 162 | .#o###o#. 163 | #λoooo.#. 164 | .#####λ#. 165 | ......#.. 166 | 167 | minified: ..._____. .._.+..._ ..#.+..._ .#λ#+###. .#oooooλ# .#o#λ#o#. .#o###o#. #λoooo.#. .#####λ#. ......#.. 168 | 169 | 170 | Level 15 171 | ...+_+... 172 | .+..+..+. 173 | ......... 174 | #.#o#o#.# 175 | ..λ...λ.. 176 | .#.#.#.#. 177 | #.o+_+o.# 178 | #.......# 179 | 180 | minified: ...+_+... .+..+..+. ......... #.#o#o#.# ..λ...λ.. .#.#.#.#. #.o+_+o.# #.......# 181 | 182 | Level end 1 183 | 184 | ###.......... 185 | #..._.λ..o... 186 | ##..#.#λ##... 187 | #...#.#λλ#._. 188 | ......λ..λo.. 189 | 190 | minified: 191 | 192 | Level end 2 193 | 194 | ###........ 195 | #λ.._.o.o.. 196 | ##λ.#.###.. 197 | #.λλ#.#.#_. 198 | .λ..λ...... 199 | 200 | 201 | minified: ###........ #λ.._.o.o.. ##λ.#.###.. #.λλ#.#.#_. .λ..λ...... 202 | 203 | Level end 3 (fits currently) 204 | 205 | ###......... 206 | #.λ_....λ... 207 | ##.o.###.λo. 208 | #λλ#.#.#.λλ. 209 | #..#.#.#λ_.λ 210 | 211 | minified: ###......... #.λ_....λ... ##.o.###.λo. #λλ#.#.#.λλ. #..#.#.#λ_.λ 212 | 213 | Level end 4 (fits currently) 214 | 215 | ###......... 216 | #.._....λ... 217 | ##.o.###.λo. 218 | #.λ#.#.#.λλ. 219 | #..#λ#.#λ_.λ 220 | 221 | minified: ###......... #.._....λ... ##.o.###.λo. #.λ#.#.#.λλ. #..#λ#.#λ_.λ 222 | 223 | Level end 5 (harder) 224 | 225 | ###......... 226 | #.λ_....λ... 227 | ##.o.###.λo. 228 | #..#.#.#.λλ. 229 | #..#.#.#λ_.λ 230 | 231 | minified: ###......... #.λ_....λ... ##.o.###.λo. #..#.#.#.λλ. #..#.#.#λ_.λ 232 | 233 | Level end Alt 234 | λλλ.......... 235 | λ...o........ 236 | λλ....λλλλ... 237 | λ...λ.λ..λ... 238 | λ._.λ_λ..λ.o. 239 | 240 | minified: λλλ.......... λ...o........ λλ....λλλλ... λ...λ.λ..λ... λ._.λ_λ..λ.o. 241 | 242 | Level ? 243 | .λ.λ.λ... 244 | #.#.#.#.# 245 | ..+.+.+.. 246 | ##o#λ#o## 247 | .._.#._.. 248 | 249 | Level ? 250 | ...#_#... 251 | ...#+#.λ. 252 | ...#+#... 253 | ...#+#... 254 | ......... 255 | ....λ.... 256 | ......... 257 | 258 | Level ? 259 | ++λ+__o.λ 260 | +..+o+#.. 261 | ..oooooo. 262 | .__....#_ 263 | 264 | minified: ++λ+__o.λ +..+o+#.. ..oooooo. ._o....#_ 265 | 266 | Level 1 Alt 267 | ####### 268 | #λ.o._# 269 | #_.o..# 270 | ####### 271 | 272 | Level 1 Alt 2 273 | ....... 274 | .λ.o._. 275 | ._.o... 276 | ....... 277 | 278 | Level 2 Alt 279 | ...#_ 280 | .#.#o 281 | λ#... 282 | 283 | minified: ...#_ .#.#o λ#... 284 | 285 | Level 5 Alt 286 | (-3 chars) 287 | .λo_ 288 | #### 289 | _oλ. 290 | 291 | minified: .λo_ #### _oλ. 292 | 293 | Level 7 Alt 294 | 295 | ...#..λ 296 | ..o_.o. 297 | ..λ#... 298 | #_###_# 299 | .λ.#..λ 300 | .o._o.. 301 | ...#... 302 | 303 | minified: ...#..λ ..o_.o. ..λ#... #_###_# .λ.#..λ .o._o.. ...#... 304 | 305 | Level 7 Alt Old 306 | .λ.#..λ 307 | ..o_... 308 | ...#.o. 309 | #_###_# 310 | .λ.#... 311 | .o._o.λ 312 | ...#... 313 | 314 | solution: LDDDRUR 315 | minified: .λ.#..λ ..o_... ...#.o. #_###_# .λ.#... .o._o.λ ...#... 316 | 317 | -- ...#..λ .o._.o. .λ.#... #_###_# ..λ#..λ .o._o.. ...#... 318 | 319 | Level 9-10 combined Alt 320 | (-2 chars) 321 | 322 | λoo+_ 323 | λoλ+_ 324 | 325 | minified: λoo+_ λoλ+_ 326 | 327 | Level 9-10 combined Alt 2 328 | (+13 chars) 329 | 330 | ...λoo+_ 331 | ######## 332 | _+λoλ... 333 | 334 | minified: ...λoo+_ ######## _+λoλ... 335 | --------------------------------------------------------------------------------