#crossword #word #generator #generate #position #direction #stream

crossword_generator

一个用于从提供的单词生成填字游戏的库

2 个版本

0.0.2 2024 年 6 月 28 日
0.0.1 2024 年 4 月 25 日

181配置

每月 23 次下载

MIT 许可证

85KB
1K SLoC

Crossword_Generator

Crossword_generator 是一个用于从提供的单词创建填字游戏的库。它确定单词的位置和方向,但不会生成一个完成的空白填字游戏供解答。

在异步运行时中工作。

use crossword_generator::{crossword::Crossword, generator::{CrosswordGenerationRequest, CrosswordGenerator, CrosswordGeneratorSettings}, word::Word};
use tokio_stream::StreamExt;

// A quick function to print the crossword to the console
fn print_crossword(cw: &Crossword<u8, String>)
{
    let table = cw.generate_char_table();
    println!(" {} ", vec!['-'; table[0].len() * 2 - 1].into_iter().collect::<String>());
    for i in 0..table.len()
    {
        print!("|");
        for j in 0..table[0].len()
        {
            print!("{}", (if table[i][j] != 0 {table[i][j]} else {32}) as char);
            if j != table[0].len() - 1 { print!(" "); } 
        }
        println!("|");
    }
    println!(" {} ", vec!['-'; table[0].len() * 2 - 1].into_iter().collect::<String>());
}

#[tokio::main]
async fn main()
{
    // Create a generator.
    let mut generator = CrosswordGenerator::<u8, String>::default();

    // Set some settings.
    generator.settings = CrosswordGeneratorSettings::default();

    // Specify the words crosswords will be consisted from.
    generator.words = vec!["hello", "world", "foo", "raw"].into_iter().map(|s| Word::new(s.to_lowercase(), None)).collect();
    
    // Create the crossword stream, this will generate crosswords and return them to you. If you wait long enough, you will get every possible crossword that satisfies the settings.
    let mut str = generator.crossword_stream(|s| String::from_utf8(s.to_owned()).expect("The word is not in proper utf8 format"));

    // You can request a concrete number of crosswords, or all of them.
    str.request_crossword(CrosswordGenerationRequest::All).await;
    while let Some(cw) = str.next().await 
    {
        print_crossword(&cw);
        println!("");
    }
}

依赖项

~4–6MB
~108K SLoC