diff options
author | David Phillips <david@sighup.nz> | 2019-10-26 18:03:42 +1300 |
---|---|---|
committer | David Phillips <david@sighup.nz> | 2019-10-26 18:04:53 +1300 |
commit | 2f0feee0d3e654d58fa5b7de3d53930783581605 (patch) | |
tree | ad5dcec423196dfef01a8dfa1378af4a1ba188ae | |
parent | bc41a099b3f01c8ad646d2725ea27d99fa37eb87 (diff) | |
download | idalius-2f0feee0d3e654d58fa5b7de3d53930783581605.tar.xz |
Markov: Retry limited times if message isn't long enough
-rw-r--r-- | Plugin/Markov.pm | 30 |
1 files changed, 18 insertions, 12 deletions
diff --git a/Plugin/Markov.pm b/Plugin/Markov.pm index 1733372..e29bb45 100644 --- a/Plugin/Markov.pm +++ b/Plugin/Markov.pm @@ -74,18 +74,24 @@ sub some sub do_markov { - my $word = $_[0]; - $word = some(keys %markov_data) unless $word; - my $message = ""; - my $i = 0; - do { - $i++; - $message .= "$word "; - $word = some(@{$markov_data{$word}}); - } until(not $word or $word eq "" or $i == 1000); - - return if scalar(split / /, $message) <= 2; - return $message; + my $tries = 0; + + while ($tries++ < 10) { + my $word = $_[0]; + $word = some(keys %markov_data) unless $word; + my $message = ""; + my $i = 0; + do { + $i++; + $message .= "$word "; + $word = some(@{$markov_data{$word}}); + } until(not $word or $word eq "" or $i == 1000); + + return $message if scalar(split / /, $message) > 2; + } + + # fallthrough: didn't form a long enough message in enough tries + return; } sub markov_cmd |