Website Summary Files Commits Branches @commit @diff @stats
path: root / homework / 9MI0800164 / Homework1_9MI0800164 / result.html
blob: f84c6737bea91e16459aa2ada078b8508af16308 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
<!doctype><html><head>    <title>markov_chain.lua</title>    <style>        .keyword {            color: red;        }        .identifier {            color: purple;        }        .string {            color: orange;        }        .number {            color: blue;        }        .string {            color: green;        }        .operator {            font-style: bold;        }        .comment {            color: gray;        }    </style></head><body>    <pre class="code">
<span class="comment">-- </span><span class="identifier">Markov</span> <span class="identifier">Chain</span> <span class="identifier">Program</span> <span class="keyword">in</span> <span class="identifier">Lua</span>

<span class="keyword">function</span> <span class="identifier">allwords</span> <span class="operator">(</span><span class="operator">)</span>
  <span class="keyword">local</span> <span class="identifier">line</span> <span class="operator">=</span> <span class="identifier">io</span><span class="string">.</span><span class="identifier">read</span><span class="operator">(</span><span class="operator">)</span>    <span class="comment">-- </span><span class="identifier">current</span> <span class="identifier">line</span>
  <span class="keyword">local</span> <span class="identifier">pos</span> <span class="operator">=</span> <span class="number">1</span>             <span class="comment">-- </span><span class="identifier">current</span> <span class="identifier">position</span> <span class="keyword">in</span> <span class="identifier">the</span> <span class="identifier">line</span>
  <span class="keyword">return</span> <span class="keyword">function</span> <span class="operator">(</span><span class="operator">)</span>        <span class="comment">-- </span><span class="identifier">iterator</span> <span class="keyword">function</span>
    <span class="keyword">while</span> <span class="identifier">line</span> <span class="keyword">do</span>           <span class="comment">-- </span><span class="keyword">repeat</span> <span class="keyword">while</span> <span class="identifier">there</span> <span class="identifier">are</span> <span class="identifier">lines</span>
      <span class="keyword">local</span> <span class="identifier">s</span><span class="operator">,</span> <span class="identifier">e</span> <span class="operator">=</span> <span class="identifier">string</span><span class="string">.</span><span class="identifier">find</span><span class="operator">(</span><span class="identifier">line</span><span class="operator">,</span> <span class="operator">"</span><span class="operator">%</span><span class="identifier">w</span><span class="operator">+</span><span class="operator">"</span><span class="operator">,</span> <span class="identifier">pos</span><span class="operator">)</span>
      <span class="keyword">if</span> <span class="identifier">s</span> <span class="keyword">then</span>      <span class="comment">-- </span><span class="identifier">found</span> <span class="identifier">a</span> <span class="identifier">word</span><span class="operator">?</span>
        <span class="identifier">pos</span> <span class="operator">=</span> <span class="identifier">e</span> <span class="operator">+</span> <span class="number">1</span>  <span class="comment">-- </span><span class="identifier">update</span> <span class="identifier">next</span> <span class="identifier">position</span>
        <span class="keyword">return</span> <span class="identifier">string</span><span class="string">.</span><span class="identifier">sub</span><span class="operator">(</span><span class="identifier">line</span><span class="operator">,</span> <span class="identifier">s</span><span class="operator">,</span> <span class="identifier">e</span><span class="operator">)</span>   <span class="comment">-- </span><span class="keyword">return</span> <span class="identifier">the</span> <span class="identifier">word</span>
      <span class="keyword">else</span>
        <span class="identifier">line</span> <span class="operator">=</span> <span class="identifier">io</span><span class="string">.</span><span class="identifier">read</span><span class="operator">(</span><span class="operator">)</span>    <span class="comment">-- </span><span class="identifier">word</span> <span class="keyword">not</span> <span class="identifier">found</span><span class="operator">;</span> <span class="identifier">try</span> <span class="identifier">next</span> <span class="identifier">line</span>
        <span class="identifier">pos</span> <span class="operator">=</span> <span class="number">1</span>             <span class="comment">-- </span><span class="identifier">restart</span> <span class="identifier">from</span> <span class="identifier">first</span> <span class="identifier">position</span>
      <span class="keyword">end</span>
    <span class="keyword">end</span>
    <span class="keyword">return</span> <span class="keyword">nil</span>            <span class="comment">-- </span><span class="identifier">no</span> <span class="identifier">more</span> <span class="identifier">lines</span><span class="operator">:</span> <span class="keyword">end</span> <span class="identifier">of</span> <span class="identifier">traversal</span>
  <span class="keyword">end</span>
<span class="keyword">end</span>

<span class="keyword">function</span> <span class="identifier">prefix</span> <span class="operator">(</span><span class="identifier">w1</span><span class="operator">,</span> <span class="identifier">w2</span><span class="operator">)</span>
  <span class="keyword">return</span> <span class="identifier">w1</span> <span class="operator">..</span> <span class="operator">'</span> <span class="operator">'</span> <span class="operator">..</span> <span class="identifier">w2</span>
<span class="keyword">end</span>

<span class="keyword">local</span> <span class="identifier">statetab</span>

<span class="keyword">function</span> <span class="identifier">insert</span> <span class="operator">(</span><span class="identifier">index</span><span class="operator">,</span> <span class="identifier">value</span><span class="operator">)</span>
  <span class="keyword">if</span> <span class="keyword">not</span> <span class="identifier">statetab</span><span class="operator">[</span><span class="identifier">index</span><span class="operator">]</span> <span class="keyword">then</span>
    <span class="identifier">statetab</span><span class="operator">[</span><span class="identifier">index</span><span class="operator">]</span> <span class="operator">=</span> <span class="operator">{</span><span class="identifier">n</span><span class="operator">=</span><span class="number">0</span><span class="operator">}</span>
  <span class="keyword">end</span>
  <span class="identifier">table</span><span class="string">.</span><span class="identifier">insert</span><span class="operator">(</span><span class="identifier">statetab</span><span class="operator">[</span><span class="identifier">index</span><span class="operator">]</span><span class="operator">,</span> <span class="identifier">value</span><span class="operator">)</span>
<span class="keyword">end</span>

<span class="keyword">local</span> <span class="identifier">N</span>  <span class="operator">=</span> <span class="number">2</span>
<span class="keyword">local</span> <span class="identifier">MAXGEN</span> <span class="operator">=</span> <span class="number">10000</span>
<span class="keyword">local</span> <span class="identifier">NOWORD</span> <span class="operator">=</span> <span class="operator">"</span><span class="operator">\n</span><span class="operator">"</span>

<span class="comment">-- </span><span class="identifier">build</span> <span class="identifier">table</span>
<span class="identifier">statetab</span> <span class="operator">=</span> <span class="operator">{</span><span class="operator">}</span>
<span class="keyword">local</span> <span class="identifier">w1</span><span class="operator">,</span> <span class="identifier">w2</span> <span class="operator">=</span> <span class="identifier">NOWORD</span><span class="operator">,</span> <span class="identifier">NOWORD</span>
<span class="keyword">for</span> <span class="identifier">w</span> <span class="keyword">in</span> <span class="identifier">allwords</span><span class="operator">(</span><span class="operator">)</span> <span class="keyword">do</span>
  <span class="identifier">insert</span><span class="operator">(</span><span class="identifier">prefix</span><span class="operator">(</span><span class="identifier">w1</span><span class="operator">,</span> <span class="identifier">w2</span><span class="operator">)</span><span class="operator">,</span> <span class="identifier">w</span><span class="operator">)</span>
  <span class="identifier">w1</span> <span class="operator">=</span> <span class="identifier">w2</span><span class="operator">;</span> <span class="identifier">w2</span> <span class="operator">=</span> <span class="identifier">w</span><span class="operator">;</span>
<span class="keyword">end</span>
<span class="identifier">insert</span><span class="operator">(</span><span class="identifier">prefix</span><span class="operator">(</span><span class="identifier">w1</span><span class="operator">,</span> <span class="identifier">w2</span><span class="operator">)</span><span class="operator">,</span> <span class="identifier">NOWORD</span><span class="operator">)</span>


<span class="comment">-- </span><span class="identifier">generate</span> <span class="identifier">text</span>
<span class="identifier">w1</span> <span class="operator">=</span> <span class="identifier">NOWORD</span><span class="operator">;</span> <span class="identifier">w2</span> <span class="operator">=</span> <span class="identifier">NOWORD</span>     <span class="comment">-- </span><span class="identifier">reinitialize</span>
<span class="keyword">for</span> <span class="identifier">i</span><span class="operator">=</span><span class="number">1</span><span class="operator">,</span><span class="identifier">MAXGEN</span> <span class="keyword">do</span>
  <span class="keyword">local</span> <span class="identifier">list</span> <span class="operator">=</span> <span class="identifier">statetab</span><span class="operator">[</span><span class="identifier">prefix</span><span class="operator">(</span><span class="identifier">w1</span><span class="operator">,</span> <span class="identifier">w2</span><span class="operator">)</span><span class="operator">]</span>
  <span class="comment">-- </span><span class="identifier">choose</span> <span class="identifier">a</span> <span class="identifier">random</span> <span class="identifier">item</span> <span class="identifier">from</span> <span class="identifier">list</span>
  <span class="keyword">local</span> <span class="identifier">r</span> <span class="operator">=</span> <span class="identifier">math</span><span class="string">.</span><span class="identifier">random</span><span class="operator">(</span><span class="identifier">table</span><span class="string">.</span><span class="identifier">getn</span><span class="operator">(</span><span class="identifier">list</span><span class="operator">)</span><span class="operator">)</span>
  <span class="keyword">local</span> <span class="identifier">nextword</span> <span class="operator">=</span> <span class="identifier">list</span><span class="operator">[</span><span class="identifier">r</span><span class="operator">]</span>
  <span class="keyword">if</span> <span class="identifier">nextword</span> <span class="operator">==</span> <span class="identifier">NOWORD</span> <span class="keyword">then</span> <span class="keyword">return</span> <span class="keyword">end</span>
  <span class="identifier">io</span><span class="string">.</span><span class="identifier">write</span><span class="operator">(</span><span class="identifier">nextword</span><span class="operator">,</span> <span class="operator">"</span> <span class="operator">"</span><span class="operator">)</span>
  <span class="identifier">w1</span> <span class="operator">=</span> <span class="identifier">w2</span><span class="operator">;</span> <span class="identifier">w2</span> <span class="operator">=</span> <span class="identifier">nextword</span>
<span class="keyword">end</span>

</pre></body></html>