61 lines
1.7 KiB
V
61 lines
1.7 KiB
V
/*
|
|
Random Markov Text Generator
|
|
|
|
This program generates pseudo-random text using a Markov chain built from
|
|
one of several embedded corpora in the strings module. It produces structured output in the
|
|
form of paragraphs and sentences, with configurable parameters.
|
|
|
|
Usage:
|
|
|
|
v run lorem.v [--options]
|
|
./lorem [--options]
|
|
|
|
Example:
|
|
|
|
./lorem -order 2 -words 12 -sentences 4 -paragraphs 3 -corpus poe
|
|
*/
|
|
import strings.lorem
|
|
import flag
|
|
import os
|
|
import rand
|
|
import time
|
|
|
|
fn main() {
|
|
mut fp := flag.new_flag_parser(os.args[1..])
|
|
fp.application('lorem')
|
|
fp.version('1.0')
|
|
fp.description('Random text generator using a Markov chain')
|
|
|
|
order := fp.int('order', `o`, 2, 'Markov order [default: 2]')
|
|
words_per_sentence := fp.int('words', `w`, 10, 'Words per sentence [default: 10]')
|
|
sentences_per_paragraph := fp.int('sentences', `s`, 5, 'Sentences per paragraph [default: 5]')
|
|
paragraphs := fp.int('paragraphs', `p`, 3, 'Paragraph count [default: 3]')
|
|
corpus_name := fp.string('corpus', `c`, 'lorem',
|
|
'Corpus name (lorem, poe, darwin, bard) [default: lorem]')
|
|
seed_text := fp.string('seed', `S`, '', 'Seed phrase (random if omitted)')
|
|
mut rng_seed := fp.int('rngseed', `r`, 0, 'RNG seed (0 = random)')
|
|
|
|
fp.finalize() or {
|
|
eprintln(err)
|
|
return
|
|
}
|
|
|
|
if rng_seed == 0 {
|
|
t := time.now().unix_milli()
|
|
rand.seed([u32(t), u32(t >> 32)])
|
|
rng_seed = rand.int()
|
|
}
|
|
|
|
text := lorem.generate(
|
|
markov_order: order
|
|
words_per_sentence: words_per_sentence
|
|
sentences_per_paragraph: sentences_per_paragraph
|
|
paragraphs: paragraphs
|
|
corpus_name: corpus_name
|
|
seed_text: seed_text
|
|
rng_seed: rng_seed
|
|
)
|
|
|
|
println(text)
|
|
}
|