Sorensen–Dice coefficient: Difference between revisions

→‎{{header|Phix}}: As per the comments for J, stop trying to use sets.
m (C++ - formatting)
(→‎{{header|Phix}}: As per the comments for J, stop trying to use sets.)
Line 205:
<!--<syntaxhighlight lang="phix">(phixonline)-->
<span style="color: #008080;">with</span> <span style="color: #008080;">javascript_semantics</span>
<span style="color: #008080;">constant</span> <span style="color: #000000;">match_raku</span> <span style="color: #0000FF;">=</span> <span style="color: #004600;">false</span>
<span style="color: #008080;">include</span> <span style="color: #000000;">sets</span><span style="color: #0000FF;">.</span><span style="color: #000000;">e</span>
<span style="color: #008080;">function</span> <span style="color: #000000;">bigram</span><span style="color: #0000FF;">(</span><span style="color: #004080;">string</span> <span style="color: #000000;">s</span><span style="color: #0000FF;">)</span>
<span style="color: #004080;">sequence</span> <span style="color: #000000;">words</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">split</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">lower</span><span style="color: #0000FF;">(</span><span style="color: #000000;">s</span><span style="color: #0000FF;">)),</span>
Line 213 ⟶ 210:
<span style="color: #008080;">for</span> <span style="color: #000000;">word</span> <span style="color: #008080;">in</span> <span style="color: #000000;">words</span> <span style="color: #008080;">do</span>
<span style="color: #008080;">for</span> <span style="color: #000000;">i</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span> <span style="color: #008080;">to</span> <span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">word</span><span style="color: #0000FF;">)-</span><span style="color: #000000;">1</span> <span style="color: #008080;">do</span>
<span style="color: #008080000000;">ifres</span> <span style="color: #0080800000FF;">not=</span> <span style="color: #7060A8;">append</span><span style="color: #0000FF;">(</span><span style="color: #000000;">match_rakures</span><span style="color: #0000FF;">,</span><span style="color: #000000;">word</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">..</span><span style="color: #000000;">i</span><span style="color: #0000FF;">+</span><span style="color: #000000;">1</span><span style="color: #0080800000FF;">then])</span>
<span style="color: #000000;">res</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">add_member</span><span style="color: #0000FF;">(</span><span style="color: #000000;">res</span><span style="color: #0000FF;">,</span><span style="color: #000000;">word</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">..</span><span style="color: #000000;">i</span><span style="color: #0000FF;">+</span><span style="color: #000000;">1</span><span style="color: #0000FF;">])</span>
<span style="color: #008080;">else</span>
<span style="color: #004080;">string</span> <span style="color: #000000;">c2</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">word</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">..</span><span style="color: #000000;">i</span><span style="color: #0000FF;">+</span><span style="color: #000000;">1</span><span style="color: #0000FF;">]</span>
<span style="color: #008080;">while</span> <span style="color: #000000;">is_member</span><span style="color: #0000FF;">(</span><span style="color: #000000;">res</span><span style="color: #0000FF;">,</span><span style="color: #000000;">c2</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">do</span>
<span style="color: #000000;">c2</span> <span style="color: #0000FF;">&=</span> <span style="color: #008000;">'1'</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">while</span>
<span style="color: #000000;">res</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">add_member</span><span style="color: #0000FF;">(</span><span style="color: #000000;">res</span><span style="color: #0000FF;">,</span><span style="color: #000000;">c2</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
<span style="color: #004080;">integer</span> <span style="color: #000000;">l1res</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">lengthsort</span><span style="color: #0000FF;">(</span><span style="color: #000000;">s1res</span><span style="color: #0000FF;">)</span>
<span style="color: #000000008080;">c2return</span> <span style="color: #0000FF;">&=</span> <span style="color: #008000000000;">'1'res</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">whilefunction</span>
<span style="color: #008080;">whilefunction</span> <span style="color: #000000;">is_memberintrasect</span><span style="color: #0000FF;">(</span><span style="color: #000000004080;">ressequence</span> <span style="color: #0000FF000000;">,s1</span><span style="color: #0000000000FF;">c2,</span> <span style="color: #0000FF000000;">)s2</span> <span style="color: #0080800000FF;">do)</span>
<span style="color: #000000004080;">s2integer</span> <span style="color: #0000FF000000;">=l1</span> <span style="color: #0000000000FF;">intersection=</span><span style="color: #0000FF;">(</span><span style="color: #0000007060A8;">s2length</span><span style="color: #0000FF;">,(</span><span style="color: #000000;">s1</span><span style="color: #0000FF;">),</span>
<span style="color: #000000;">l2</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">s2</span><span style="color: #0000FF;">),</span>
<span style="color: #000000;">resi1</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">add_member1</span><span style="color: #0000FF;">(,</span> <span style="color: #000000;">resi2</span> <span style="color: #0000FF;">,=</span> <span style="color: #000000;">c21</span><span style="color: #0000FF;">),</span>
<span style="color: #008080;">constant</span> <span style="color: #000000;">match_rakures</span> <span style="color: #0000FF;">=</span> <span style="color: #004600000000;">false0</span>
<span style="color: #004080008080;">stringwhile</span> <span style="color: #000000;">c2i1</span> <span style="color: #0000FF;"><=</span> <span style="color: #000000;">wordl1</span> <span style="color: #0000FF008080;">[and</span> <span style="color: #000000;">ii2</span><span style="color: #0000FF;">..</span><span style="color: #000000;">i</span><span style="color: #0000FF000000;">+l2</span><span style="color: #000000;">1</span><span style="color: #0000FF008080;">]do</span>
<span style="color: #000000004080;">resinteger</span> <span style="color: #0000FF000000;">=c</span> <span style="color: #0000000000FF;">add_member=</span><span style="color: #0000FF;">(</span><span style="color: #0000007060A8;">rescompare</span><span style="color: #0000FF;">,(</span><span style="color: #000000;">words1</span><span style="color: #0000FF;">[</span><span style="color: #000000;">ii1</span><span style="color: #0000FF;">..],</span><span style="color: #000000;">is2</span><span style="color: #0000FF;">+[</span><span style="color: #000000;">1i2</span><span style="color: #0000FF;">])</span>
<span style="color: #000000;">scoresres</span> <span style="color: #0000FF;">&+=</span> <span style="color: #000000;">2</span><span style="color: #0000FF;">*</span><span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">s2c</span><span style="color: #0000FF;">)/(</span><span style="color: #000000;">l1</span><span style="color: #0000FF;">+</span><span style="color: #000000;">l20</span><span style="color: #0000FF;">)</span>
<span style="color: #000000;">i1</span> <span style="color: #0000FF;">+=</span> <span style="color: #0000FF;">(</span><span style="color: #000000;">c</span><span style="color: #0000FF;"><=</span><span style="color: #000000;">0</span><span style="color: #0000FF;">)</span>
<span style="color: #000000;">i2</span> <span style="color: #0000FF;">+=</span> <span style="color: #0000FF;">(</span><span style="color: #000000;">c</span><span style="color: #0000FF;">>=</span><span style="color: #000000;">0</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">elsewhile</span>
<span style="color: #008080;">return</span> <span style="color: #000000;">res</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span>
Line 230 ⟶ 234:
<span style="color: #004080;">sequence</span> <span style="color: #000000;">scores</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{},</span>
<span style="color: #000000;">s1</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">bigram</span><span style="color: #0000FF;">(</span><span style="color: #000000;">s</span><span style="color: #0000FF;">)</span>
<span style="color: #004080;">integer</span> <span style="color: #000000;">l1</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">s1</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">for</span> <span style="color: #000000;">phrase</span> <span style="color: #008080;">in</span> <span style="color: #000000;">dictionary</span> <span style="color: #008080;">do</span>
<span style="color: #004080;">sequence</span> <span style="color: #000000;">s2</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">bigram</span><span style="color: #0000FF;">(</span><span style="color: #000000;">phrase</span><span style="color: #0000FF;">)</span>
<span style="color: #004080000000;">integerscores</span> <span style="color: #0000FF;">&=</span> <span style="color: #000000;">l22</span><span style="color: #0000FF;">*</span><span style="color: #000000;">intrasect</span><span style="color: #0000FF;">(</span><span style="color: #000000;">s1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">s2</span><span style="color: #0000FF;">)/(</span><span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">s1</span><span style="color: #0000FF;">)+</span><span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">s2</span><span style="color: #0000FF;">))</span>
<span style="color: #000000;">s2</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">intersection</span><span style="color: #0000FF;">(</span><span style="color: #000000;">s2</span><span style="color: #0000FF;">,</span><span style="color: #000000;">s1</span><span style="color: #0000FF;">)</span>
<span style="color: #000000;">scores</span> <span style="color: #0000FF;">&=</span> <span style="color: #000000;">2</span><span style="color: #0000FF;">*</span><span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">s2</span><span style="color: #0000FF;">)/(</span><span style="color: #000000;">l1</span><span style="color: #0000FF;">+</span><span style="color: #000000;">l2</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"%s &gt;\n"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">s</span><span style="color: #0000FF;">)</span>
Line 242 ⟶ 243:
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"%f %s\n"</span><span style="color: #0000FF;">,{</span><span style="color: #000000;">scores</span><span style="color: #0000FF;">[</span><span style="color: #000000;">t</span><span style="color: #0000FF;">],</span><span style="color: #000000;">dictionary</span><span style="color: #0000FF;">[</span><span style="color: #000000;">t</span><span style="color: #0000FF;">]})</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
<span style="color: #0080807060A8;">includeprintf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">sets1</span><span style="color: #0000FF;">.,</span><span style="color: #000000008000;">"\n"</span><span style="color: #0000FF;">e)</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">procedure</span>
Line 253 ⟶ 255:
Almkvist-Giullera formula for pi
Almost prime
Bell numbers
Check Machin-like formulas
Chowla numbers
Line 276 ⟶ 277:
<!--</syntaxhighlight>-->
{{out}}
Extending the task list to the full 1577 entries changes nothing.
You can get the same results as raku by setting match_raku to true, ie "uniqueify" all the bi-grams, so for instance "Primordial primes" adds "pr" and "pr1", whereas when match_raku is false it just adds "pr", once, and of course the same for "ri", "im", etc. Also, extending the task list to the full 1577 entries changes nothing either way.
<pre>
Primordial primes >
0.695652685714 FactorialSequence of primorial primes
0.642857666667 Sequence of primorialFactorial primes
0.583333571429 Primorial numbers
0.631579545455 Prime words
0.600000521739 Almost prime
0.583333 Primorial numbers
 
Sunkist-Giuliani formula >
0.571429565217 Almkvist-Giullera formula for pi
0.352941378378 HaversineFaulhaber's formula
0.342857 Faulhaber'sHaversine formula
0.350000333333 Check Machin-like formulas
0.342857 Faulhaber's formula
0.315789307692 Resistance calculator
 
Sieve of Euripides >
0.461538 Sieve of Pritchard
Line 296 ⟶ 299:
0.400000 Piprimes
0.384615 Sierpinski curve
 
Chowder numbers >
0.818182782609 Chowla numbers
0.636364640000 RhondaPowerful numbers
0.631579608696 LahRhonda numbers
0.631579608696 BellFermat numbers
0.608696600000 PowerfulLah numbers
</pre>
 
7,796

edits