xwords 0.2.0

Tooling to fill crossword puzzles
Documentation
# xwords

![](https://github.com/szunami/xwords-rs/workflows/Build/badge.svg)
[![](http://meritbadge.herokuapp.com/xwords)](https://crates.io/crates/xwords)

`xwords` is a fast library that fills crossword puzzles. This repo also contains a lightweight CLI for invoking the library.

### Caveat Emptor
This is foremost a hobbyist project for me to learn a bit about profiling and optimizing rust. I am more than happy to accept contributions or to consider feature requests, but please be aware that the future of this project is somewhat uncertain.

## CLI

This command fills a grid that is stored in a local file using a default wordlist.

```bash
$ xwords --input grids/20201005_empty.txt

CFS*ANGELI*ORDU
AIA*DEEPAS*SEIN
SCLAVONIAN*MFAS
IKANTLETGO*ALLE
OLDY**ROE*ANOSE
*YOOHOOMRSBLOOM
***FUGUE*IRIDAL
FAA*LIS*ECO*SPY
IMPROV*ACOOK***
BILLIEJEANKING*
SEUSS*IAD**CEIL
**STTIC**ALKALI
CITI*CACOMISTLE
CORN*OMOLON*LIS
CLEE*NATURA*YST
```
This command runs in about 2 seconds on my machine.

## Library

```rust
use xwords::{crossword::Crossword, fill_crossword_with_default_wordlist};

fn main() -> Result<(), String> {
    let empty_crossword = Crossword::new(String::from(
        "
    *    *     
    *    *     
         *     
   *   *   *   
**    *        
      *     ***
     *    *    
   *       *   
    *    *     
***     *      
        *    **
   *   *   *   
     *         
     *    *    
     *    *    
",
    ))?;
    let filled_crossword = fill_crossword_with_default_wordlist(&empty_crossword)?;
    println!("{}", filled_crossword);
    Ok(())
}

/*
ZETA*TWIT*VOWEL
ETAT*IANA*EVOKE
RINTINTIN*REVIE
OCT*TIE*TUI*ENR
**ATHA*TASTINGS
TOLEAN*ILIES***
ISIAC*TEAN*STEM
ZAT*ACHATES*HRA
AYES*SETE*TYEES
***TUTSI*URALIC
VENERATE*SEWA**
ORA*TRO*UES*TOA
WISHI*NETASSETS
ETHIC*EVIL*USTO
RUEDA*SWAL*OTSU
*/
```
On my machine, the above snippet runs in about 3 seconds.

Behind the scenes, this snippet loads an indexed wordlist, and iteratively fills the input with valid words.