I before E except after C: Difference between revisions

→‎{{header|Wren}}: Added stretch goal.
(→‎{{header|Wren}}: Doh, 7 'awkward' words in fact.)
(→‎{{header|Wren}}: Added stretch goal.)
Line 3,419:
Cases against : 24
Ratio for/agst : 0.54
Plausible : no
 
Plausible overall: no
</pre>
 
And the code and results for the 'stretch goal' which has just the one double-counted word:
 
<lang ecmascript>import "io" for File
import "/pattern" for Pattern
import "/fmt" for Fmt
 
var yesNo = Fn.new { |b| (b) ? "yes" : "no" }
 
var plausRatio = 2
 
var count1 = 0 // [^c]ie
var count2 = 0 // [^c]ei
var count3 = 0 // cie
var count4 = 0 // cei
var count5 = 0 // ^ie
var count6 = 0 // ^ei
 
var p0 = Pattern.new("+1/s")
var p1 = Pattern.new("^cie")
var p2 = Pattern.new("^cei")
 
var entries = File.read("corpus.txt").split("\n").map { |w| w.trim() }.where { |w| w != "" }
System.print("The following words fall into more than one category")
System.print("and so are counted more than their frequency:")
for (entry in entries.skip(1)) {
var items = p0.splitAll(entry)
if (items.count == 3) {
var word = items[0] // leave any trailing * in place
var freq = Num.fromString(items[2])
var tc1 = count1 + count2 + count3 + count4 + count5 + count6
if (p1.isMatch(word)) count1 = count1 + freq
if (p2.isMatch(word)) count2 = count2 + freq
if (word.contains("cie")) count3 = count3 + freq
if (word.contains("cei")) count4 = count4 + freq
if (word.startsWith("ie")) count5 = count5 + freq
if (word.startsWith("ei")) count6 = count6 + freq
var tc2 = count1 + count2 + count3 + count4 + count5 + count6
if ((tc2 -tc1) > freq) System.print(" " + word)
}
}
 
System.print("\nChecking plausability of \"i before e except after c\":")
var nFor = count1 + count5
var nAgst = count2 + count6
var ratio = nFor / nAgst
var plaus = (ratio > plausRatio)
Fmt.print(" Cases for : $d", nFor)
Fmt.print(" Cases against : $d", nAgst)
Fmt.print(" Ratio for/agst : $4.2f", ratio)
Fmt.print(" Plausible : $s", yesNo.call(plaus))
 
System.print("\nChecking plausability of \"e before i when preceded by c\":")
var ratio2 = count4 / count3
var plaus2 = (ratio2 > plausRatio)
Fmt.print(" Cases for : $d", count4)
Fmt.print(" Cases against : $d", count3)
Fmt.print(" Ratio for/agst : $4.2f", ratio2)
Fmt.print(" Plausible : $s", yesNo.call(plaus2))
 
Fmt.print("\nPlausible overall: $s", yesNo.call(plaus && plaus2))</lang>
 
{{out}}
<pre>
The following words fall into more than one category
and so are counted more than their frequency:
societies
 
Checking plausability of "i before e except after c":
Cases for : 8192
Cases against : 4826
Ratio for/agst : 1.70
Plausible : no
 
Checking plausability of "e before i when preceded by c":
Cases for : 327
Cases against : 994
Ratio for/agst : 0.33
Plausible : no
 
9,485

edits