txt: ## dist_zef-andinus-octans.md
  # Table of Contents
  
  1. [Demo](#org38aecf3)
  2. [Documentation](#orgec7c921)
  3. [News](#org1aee33b)
  
  |  |  |
  | --- | --- |
  | Website | <https://andinus.unfla.me/projects/octans> |
  | Source | <https://git.unfla.me/octans> |
  | GitHub | <https://github.com/andinus/octans> |
  
  * Algot's Puzzles: <http://runeman.org/embroidery/>
  
  # Demo
  
  This was recorded with `asciinema`.
  
  [![img](https://asciinema.org/a/385500.png)](https://asciinema.org/a/385500)
  
  * Octans v0.2.3: [Visualized Output](https://andinus.unfla.me/resources/projects/octans/v0.2.3_2022-01-12_sample_input.mp4)
  * Octans v0.1.0 - finds 10 solutions to a puzzle:
    <https://asciinema.org/a/385598>
  * Octans v0.1.0: <https://asciinema.org/a/385500>
  * Octans 2021-01-14: <https://asciinema.org/a/384464>
  * alt-link (download): <https://andinus.nand.sh/static/octans>
  
  # Documentation
  
  ## Implementation
  
  Initially it went over the list of words & checked if they exist in the
  grid. This was very slow.
  
  Currently it walks the grid & checks if the current string exist in the
  dictionary. This is faster for these reasons:
  
  * The dictionary is sorted, we perform binary range search on the
    dictionary to return the list of all words that start with specific
    string.
  * Starting positions are limited.
  
  If the dictionary wasn't sorted then this probably would've been slower
  than previous implementation.
  
  The `neighbors` subroutine (`lib/Octans/Neighbors.rakumod`) was taken from
  my AoC (Advent of Code) 2020's day-11 solution.
  
  ## Options
  
  ### dict
  
  Octans's default dictionary file is `/usr/share/dict/words`, use `--dict`
  flag to change the dictionary. The words in dictionary must be seperated
  by a newline (`\n`) & sorted alphabetically.
  
  ### visualize
  
  Generates a video solution for the puzzle.
  
  ### length
  
  Minimum word length to look for. Default is 7.
  
  ### path
  
  The path to be passed must be a **readable file** or an **url** in either
  format:
  
  * Link when you view it from your local instance:
    <https://tilde.zone/web/statuses/105531207939242077>
  * Link from Algot's profile:
    <https://mastodon.art/@Algot/105333136907848390>
  
  ### verbose
  
  This will increase verbosity.
  
  # News
  
  ## v0.2.5 - 2023-07-02
  
  * Fixed puzzle output with visualize turned off.
  
    Earlier the program would output a bunch of new lines, etc. The issue was that
    word-search subroutine was passed `:visualize` which sets that flag to always
    true and that caused weird behaviour, this has been fixed.
  
  ## v0.2.3 - 2022-01-12
  
  * Add visualize option.
  
    `--visualize` now generates a video solution for the puzzle using Cairo
    and ffmpeg.
  
  ## v0.2.0 - 2021-03-04
  
  * Removed `sample` option
  
    `--sample` will not solve the sample puzzle.
  * Removed shorthand for verbose option
  
    `-v` won't work in `v0.2.0`.
  * Change representation of visited squares
  
    When `--verbose` was passed, it would print the solved puzzle with
    visited squares replaced with fancy characters. Now it marks them by
    adding:
  
    * `*` to visited + gray squares (start positions)
    * `/` to visited squares
  * Removed time taken
  
    Time taken won't be printed anymore.
  
    > It was misleading because the time printed was not the time taken to
    > find that specific word, it was the time taken to find all the words
    > upto that word. It would reset for each starting position.
  
  ## v0.1.4 - 2021-02-19
  
  * Fixed the puzzle parsing regex
  
    The older regex fails to parse this puzzle:
    <https://mastodon.art/@Algot/105690195742318751>.
  
  ## v0.1.3 - 2021-01-24
  
  * Added an option to specify minimum word length.
  
  ## v0.1.2 - 2021-01-20
  
  * Input puzzle can now be of any size & not restricted to 4x4 grid.
  
  ## v0.1.1 - 2021-01-20
  
  * Read puzzle from a file.
  
  ## v0.1.0 - 2021-01-19
  
  * Improved performance by using a better algorithm to find words in the
    grid.
  