RosettaCodeData/Task/Random-sentence-from-book/ALGOL-68/random-sentence-from-book-2.alg
2023-07-01 13:44:08 -04:00

128 lines
3.3 KiB
Text
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#NoEnv
#SingleInstance, force
; press Esc to stop and display the output text
; (a debug file describing ongoing steps will be created in the end)
FileEncoding, UTF-8
FileRead, warWords, war of words.txt ; wrapped booktext
global textOut := " "
global warWords := strreplace(warWords,"`r`n", " ")
warWords := strreplace(warWords,"`r", " ")
warWords := strreplace(warWords,"`n", " ")
warWords := strreplace(warWords,"-", " ")
warWords := strreplace(warWords,"—", " ")
warWords := strreplace(warWords,"`t", " ")
warWords := strreplace(warWords,"“")
warWords := strreplace(warWords,"_")
warWords := strreplace(warWords,"”")
warWords := strreplace(warWords,"")
warWords := strreplace(warWords,"'")
warWords := strreplace(warWords,"""")
warWords := strreplace(warWords,")")
warWords := strreplace(warWords,"(")
warWords := strreplace(warWords,"[")
warWords := strreplace(warWords,"]")
warWords := strreplace(warWords,"{")
warWords := strreplace(warWords,"}")
warWords := strreplace(warWords,"»")
warWords := strreplace(warWords,"«")
warWords := trim(warWords)
Loop
{
warWords := strreplace(warWords," ", " ")
if (Errorlevel = 0)
break
}
FileDelete, debug.txt
InputBox, fOne, War of Words, Choice a punctuation to start ( . or ! or ? or `, ),,,,,,,,.
treco := NextPunct(fOne)
Loop
{
loop,parse,treco," "
if A_LoopField
fOne := trim(A_LoopField)
textOut .= fOne . " "
tremPos := InStr(textOut," ",,0,3)
tremText := trim(substr(textOut,tremPos))
if tremText
{
tremText := strreplace(tremText,".","\.")
tremText := strreplace(tremText,";","\;")
tremText := strreplace(tremText,",","\,")
tremText := strreplace(tremText,"!","\!")
tremText := " " . strreplace(tremText,"?","\?")
treco := NextWord(tremText)
}
else
treco := NextWord(fOne)
}
NextPunct(punct) {
xpos := 1
prox := []
Loop
{
spos := RegExMatch(warWords, "(*UCP)\" . punct . " \w+.",gg,xpos)
if (spos = 0)
break
prox[a_index] := gg
xpos := spos + 1
}
proximas := ""
loop, % prox.MaxIndex()
proximas .= a_index . " -> " . prox[a_index] . "`n"
FileAppend, %proximas%, debug.txt, UTF-8
Random, linha, 1, prox.MaxIndex()
FileAppend, % "---------------`nescolhido = " . linha . " -> " . prox[linha] . " -> " . textOut . "`n----------------`n", debug.txt, UTF-8
return prox[linha]
}
NextWord(word) {
xpos := 1
prox := []
loop
{
spos := RegExMatch(warWords, "(*UCP)" . word . " \w+.",gg,xpos)
if !spos
break
prox[a_index] := gg
xpos := spos + 1
}
if (prox.MaxIndex() > 0)
{
proximas := ""
loop, % prox.MaxIndex()
proximas .= a_index . " -> " . prox[a_index] . "`n"
FileAppend, %proximas%, debug.txt, UTF-8
Random, linha, 1, prox.MaxIndex()
FileAppend, % "---------------`nescolhido = " . linha . " -> " . prox[linha] . " -> " . textOut . "`n----------------`n", debug.txt, UTF-8
return % prox[linha]
}
loop,parse,word," "
wrd := A_LoopField
word := wrd
spos := xpos := 1
prox := []
loop
{
spos := RegExMatch(warWords, "(*UCP)" . word . " \w+.",gg,xpos)
if (spos = 0)
break
prox[a_index] := gg
xpos := spos + 1
}
proximas := ""
loop, % prox.MaxIndex()
proximas .= a_index . " -> " . prox[a_index] . "`n"
FileAppend, %proximas%, debug.txt, UTF-8
Random, linha, 1, prox.MaxIndex()
FileAppend, % "---------------`nescolhido = " . linha . " -> " . prox[linha] . " -> " . textOut . "`n----------------`n", debug.txt, UTF-8
return % prox[linha]
}
ExitApp
~Esc::
msgbox % textOut . "..."
ExitApp