qb-answer-checker 1.1.4 → 1.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/main.mjs CHANGED
@@ -1,3 +1,3 @@
1
1
  /*! For license information please see main.mjs.LICENSE.txt */
2
- var e={225:e=>{const t=(e,t,r,i,n,o)=>{e>1&&t>1&&r[e-1]===i[t-2]&&r[e-2]===i[t-1]&&(n[e][t]=Math.min.apply(null,[n[e][t],n[e-2][t-2]+o]))},r=(e,r)=>{if(null==e||null==r||"string"!=typeof e||"string"!=typeof r)return-1;let i=((e,t)=>{if(null==e||null==t)return null;let r=[];for(let t=0;t<=e.length;t++)r[t]=[],r[t][0]=t;for(let e=0;e<=t.length;e++)r[0][e]=e;return r})(e,r);if(null===i)return-1;for(var n=1;n<=e.length;n++){let o;for(let a=1;a<=r.length;a++)o=e.charAt(n-1)===r.charAt(a-1)?0:1,i[n][a]=Math.min.apply(null,[i[n-1][a]+1,i[n][a-1]+1,i[n-1][a-1]+o]),t(n,a,e,r,i,o)}return i[e.length][r.length]};e.exports={distanceProm:(e,t)=>new Promise(((i,n)=>{let o=r(e,t);0<=o?i(o):n(o)})),distance:r,minDistanceProm:(e,t)=>new Promise(((i,n)=>{if(null==t||!Array.isArray(t))return void n(-1);if(0===t.length)return void i(r(e,""));let o=-2;t.forEach((t=>{let i=r(e,t);(-2===o||i<o)&&(o=i)})),0<=o?i(o):n(o)}))}},381:(e,t,r)=>{!function(){function i(e){return!("number"!=typeof e||e!=e||e===1/0||e===-1/0)}function n(e){return"number"==typeof e&&Math.abs(e)<=9007199254740991}"object"==typeof self&&self.self===self&&self||"object"==typeof r.g&&r.g.global===r.g&&r.g;var o=/(hundred|thousand|(m|b|tr|quadr)illion)$/,a=/teen$/,s=/y$/,u=/(zero|one|two|three|four|five|six|seven|eight|nine|ten|eleven|twelve)$/,l={zero:"zeroth",one:"first",two:"second",three:"third",four:"fourth",five:"fifth",six:"sixth",seven:"seventh",eight:"eighth",nine:"ninth",ten:"tenth",eleven:"eleventh",twelve:"twelfth"};function c(e){return o.test(e)||a.test(e)?e+"th":s.test(e)?e.replace(s,"ieth"):u.test(e)?e.replace(u,m):e}function m(e,t){return l[t]}var h=1e3,f=1e6,p=1e9,d=1e12,w=1e15,g=["zero","one","two","three","four","five","six","seven","eight","nine","ten","eleven","twelve","thirteen","fourteen","fifteen","sixteen","seventeen","eighteen","nineteen"],b=["zero","ten","twenty","thirty","forty","fifty","sixty","seventy","eighty","ninety"];function v(e,t){var r,o=parseInt(e,10);if(!i(o))throw new TypeError("Not a finite number: "+e+" ("+typeof e+")");if(!n(o))throw new RangeError("Input is not a safe number, it’s either too large or too small.");return r=function e(t){var r,i,n=arguments[1];return 0===t?n?n.join(" ").replace(/,$/,""):"zero":(n||(n=[]),t<0&&(n.push("minus"),t=Math.abs(t)),t<20?(r=0,i=g[t]):t<100?(r=t%10,i=b[Math.floor(t/10)],r&&(i+="-"+g[r],r=0)):t<h?(r=t%100,i=e(Math.floor(t/100))+" hundred"):t<f?(r=t%h,i=e(Math.floor(t/h))+" thousand,"):t<p?(r=t%f,i=e(Math.floor(t/f))+" million,"):t<d?(r=t%p,i=e(Math.floor(t/p))+" billion,"):t<w?(r=t%d,i=e(Math.floor(t/d))+" trillion,"):t<=9007199254740992&&(r=t%w,i=e(Math.floor(t/w))+" quadrillion,"),n.push(i),e(r,n))}(o),t?c(r):r}var y={toOrdinal:function(e){var t=parseInt(e,10);if(!i(t))throw new TypeError("Not a finite number: "+e+" ("+typeof e+")");if(!n(t))throw new RangeError("Input is not a safe number, it’s either too large or too small.");var r=String(t),o=Math.abs(t%100),a=11<=o&&o<=13,s=r.charAt(r.length-1);return r+(a?"th":"1"===s?"st":"2"===s?"nd":"3"===s?"rd":"th")},toWords:v,toWordsOrdinal:function(e){return c(v(e))}};e.exports&&(t=e.exports=y),t.numberToWords=y}()},862:(e,t,r)=>{e.exports={toArabic:r(993),toRoman:r(24)}},993:e=>{Array.prototype.forEach,e.exports=function(e){if("string"!=typeof e&&!(e instanceof String))throw new TypeError("toArabic expects a string");if(/^nulla$/i.test(e)||!e.length)return 0;if(!(e=e.toUpperCase().match(/^(M{0,3})(CM|DC{0,3}|CD|C{0,3})(XC|LX{0,3}|XL|X{0,3})(IX|VI{0,3}|IV|I{0,3})$/)))throw new Error("toArabic expects a valid roman number");var t=0;return t+=1e3*e[1].length,"CM"===e[2]?t+=900:"CD"===e[2]?t+=400:t+=100*e[2].length+("D"===e[2][0]?400:0),"XC"===e[3]?t+=90:"XL"===e[3]?t+=40:t+=10*e[3].length+("L"===e[3][0]?40:0),"IX"===e[4]?t+=9:"IV"===e[4]?t+=4:t+=1*e[4].length+("V"===e[4][0]?4:0),t}},24:e=>{!function(){function t(e,t,r,i){var n="";switch(e){case 0:return n;case 9:return t+i;case 4:return t+r}for(e>=5&&(n=r,e-=5);e-- >0;)n+=t;return n}e.exports=function(e){if(e instanceof Number&&(e=parseInt(e,10)),("string"==typeof e||e instanceof String)&&(e=parseInt(e,10),isNaN(e)))throw new TypeError("toArabic expects a number");if("number"!=typeof e)throw new TypeError("toArabic expects a number");if(isNaN(e))throw new TypeError("toArabic expects a real number");if(e<0)throw new Error("toArabic cannot express negative numbers");if(e>3999)throw new Error("toArabic cannot express numbers over 3999");if(0===e)return"nulla";var r="";return r+=t(Math.floor(e/1e3),"M","",""),e%=1e3,r+=t(Math.floor(e/100),"C","D","M"),e%=100,(r+=t(Math.floor(e/10),"X","L","C"))+t(e%=10,"I","V","X")}}()}},t={};function r(i){var n=t[i];if(void 0!==n)return n.exports;var o=t[i]={exports:{}};return e[i](o,o.exports,r),o.exports}r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}();var i=r(225);const n={ational:"ate",tional:"tion",enci:"ence",anci:"ance",izer:"ize",bli:"ble",alli:"al",entli:"ent",eli:"e",ousli:"ous",ization:"ize",ation:"ate",ator:"ate",alism:"al",iveness:"ive",fulness:"ful",ousness:"ous",aliti:"al",iviti:"ive",biliti:"ble",logi:"log"},o={icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:""},a="[aeiouy]",s="([^aeiou][^aeiouy]*)",u="("+a+"[aeiou]*)",l=new RegExp("^"+s+"?"+u+s),c=new RegExp("^"+s+"?"+u+s+u+"?$"),m=new RegExp("^"+s+"?("+u+s+"){2,}"),h=new RegExp("^"+s+"?"+a),f=new RegExp("^"+s+a+"[^aeiouwxy]$"),p=/ll$/,d=/^(.+?)e$/,w=/^(.+?)y$/,g=/^(.+?(s|t))(ion)$/,b=/^(.+?)(ed|ing)$/,v=/(at|bl|iz)$/,y=/^(.+?)eed$/,x=/^.+?[^s]s$/,j=/^.+?(ss|i)es$/,A=/([^aeiouylsz])\1$/,M=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,k=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,z=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/;function $(e){let t=String(e).toLowerCase();if(t.length<3)return t;let r,i=!1;return 121===t.codePointAt(0)&&(i=!0,t="Y"+t.slice(1)),j.test(t)?t=t.slice(0,-2):x.test(t)&&(t=t.slice(0,-1)),(r=y.exec(t))?l.test(r[1])&&(t=t.slice(0,-1)):(r=b.exec(t))&&h.test(r[1])&&(t=r[1],v.test(t)?t+="e":A.test(t)?t=t.slice(0,-1):f.test(t)&&(t+="e")),(r=w.exec(t))&&h.test(r[1])&&(t=r[1]+"i"),(r=M.exec(t))&&l.test(r[1])&&(t=r[1]+n[r[2]]),(r=k.exec(t))&&l.test(r[1])&&(t=r[1]+o[r[2]]),(r=z.exec(t))?m.test(r[1])&&(t=r[1]):(r=g.exec(t))&&m.test(r[1])&&(t=r[1]),(r=d.exec(t))&&(m.test(r[1])||c.test(r[1])&&!f.test(r[1]))&&(t=r[1]),p.test(t)&&m.test(t)&&(t=t.slice(0,-1)),i&&(t="y"+t.slice(1)),t}function P(e,t,r,n,o){let a=0;for(const s of e){let e=!1;for(;a<t.length;){const u=t[a];a++;const l=o?(0,i.distance)($(s),$(u)):(0,i.distance)(s,u);if(r>0&&r*l<=u.length){e=!0;break}if(n&&u.includes(s)){e=!0;break}if(0===l){e=!0;break}}if(!e)return!1}return!0}function E(e){const t=C(e).split(" ");return I(e=e.split(" ").filter((e=>e.length>0)).filter((e=>e.match(/<\/?u>/)||t.includes(e))).reduce(((e,t)=>e+t+" "),"").trim())}function O(e){const t=e.match(/(?<=["])[^"]*(?=["])/g);return I(t?t.reduce(((e,t)=>e+" "+t),"").trim():e)}function C(e){const t=e.match(/(?<=<u>)[^<]*(?=<\/u>)/g);return I(t?t.reduce(((e,t)=>e+t+" "),"").trim():e)}function I(e){return e.replace(/<[^>]*>/g,"")}function W(e){return e.replace(/[.,!;:'"\\/?@#$%^&*_~’]/g,"")}const q={hydrogen:["h"],helium:["he"],lithium:["li"],beryllium:["be"],boron:["b"],carbon:["c"],nitrogen:["n"],oxygen:["o"],fluorine:["f"],neon:["ne"],sodium:["na"],magnesium:["mg"],aluminum:["al"],silicon:["si"],phosphorus:["p"],sulfur:["s"],chlorine:["cl"],argon:["ar"],potassium:["k"],calcium:["ca"],scandium:["sc"],titanium:["ti"],vanadium:["v"],chromium:["cr"],manganese:["mn"],iron:["fe"],cobalt:["co"],nickel:["ni"],copper:["cu"],zinc:["zn"],gallium:["ga"],germanium:["ge"],arsenic:["as"],selenium:["se"],bromine:["br"],krypton:["kr"],rubidium:["rb"],strontium:["sr"],yttrium:["y"],zirconium:["zr"],niobium:["nb"],molybdenum:["mo"],technetium:["tc"],ruthenium:["ru"],rhodium:["rh"],palladium:["pd"],silver:["ag"],cadmium:["cd"],indium:["in"],tin:["sn"],antimony:["sb"],tellurium:["te"],iodine:["i"],xenon:["xe"],cesium:["cs"],barium:["ba"],lanthanum:["la"],cerium:["ce"],praseodymium:["pr"],neodymium:["nd"],promethium:["pm"],samarium:["sm"],europium:["eu"],gadolinium:["gd"],terbium:["tb"],dysprosium:["dy"],holmium:["ho"],erbium:["er"],thulium:["tm"],ytterbium:["yb"],lutetium:["lu"],hafnium:["hf"],tantalum:["ta"],tungsten:["w"],rhenium:["re"],osmium:["os"],iridium:["ir"],platinum:["pt"],gold:["au"],mercury:["hg"],thallium:["tl"],lead:["pb"],bismuth:["bi"],polonium:["po"],astatine:["at"],radon:["rn"],francium:["fr"],radium:["ra"],actinium:["ac"],thorium:["th"],protactinium:["pa"],uranium:["u"],neptunium:["np"],plutonium:["pu"],americium:["am"],curium:["cm"],berkelium:["bk"],californium:["cf"],einsteinium:["es"],fermium:["fm"],mendelevium:["md"],nobelium:["no"],lawrencium:["lr"],rutherfordium:["rf"],dubnium:["db"],seaborgium:["sg"],bohrium:["bh"],hassium:["hs"],meitnerium:["mt"],darmstadtium:["ds"],roentgenium:["rg"],copernicium:["cn"],nihonium:["nh"],flerovium:["fl"],moscovium:["mc"],livermorium:["lv"],tennessine:["ts"],oganesson:["og"],"atomic bombs":["atomic weapons","nuclear bombs","nuclear weapons","nukes","fission bombs","A-bombs"],"nuclear weapons":["atomic bombs","atomic weapons","nuclear bombs","nukes","fission bombs","A-bombs"],nukes:["atomic bombs","atomic weapons","nuclear bombs","nuclear weapons","fission bombs","A-bombs"],fairytales:["fairy tales"],"fairy tales":["fairytales"],house:["home","dwelling","residence"],mouse:["mice"],rail:["railroad"],railroad:["rail"],"nineteen eighty-four":["1984","nineteen eighty four"],"nineteen eighty four":["1984","nineteen eighty-four"],"oxidation number":["oxidation state"],"oxidation state":["oxidation number"],"ralph vaughan-williams":["rvw"],spacewalk:["space walk"],spacewalks:["space walk"],"sugar cane":["sugarcane"],sugarcane:["sugar cane"],wavefunction:["wave function"],"wave function":["wavefunction"],"world war 1":["first world war","great war","world war i","world war one"],"world war i":["first world war","great war","world war 1","world war one"],"world war one":["first world war","great war","world war 1","world war i"],"world war ii":["ww2","wwii","world war 2","world war two","second world war"],"world war two":["ww2","wwii","world war ii","world war 2","second world war"],"world war 2":["ww2","wwii","world war ii","world war two","second world war"],"Kanye West":["kayne","west"],superconductors:["super conductors","super conductor"],"baha' i":["bahai"],"united states of america":["united states","usa","us","america"],"the united states of america":["united states","usa","us","america"],usa:["united states","us","america"]};function N(e){return e.split(" ").filter((e=>e.length>0)).map((e=>I(e).charAt(0))).reduce(((e,t)=>e+t),"").trim()}function T(e,t){if(/-/.test(e))return[...T(e.replace(/-/g," "),t),...T(e.replace(/-/g,""),t)];const r=[I(e),C(e),E(e),O(e)];return t&&(r.push(N(e)),r.push(N(C(e)))),r[0]in q&&r.push(...q[r[0]]),r.map((e=>W(e)))}const X={accept:["accept","or","antiprompt on","anti-prompt on","antiprompt","anti-prompt"],prompt:["prompt on","prompt"],reject:["reject","do not accept or prompt on","do not accept"]},R=Object.values(X).flat(),D={"accept either":["accept either","accept any"],"prompt on partial":["prompt on partial","prompt on a partial","prompt on either"]};function F(e){for(const t of Object.keys(X))for(const r of X[t])if(e.startsWith(r))return{directive:t,clause:e=e.replace(r,"").trim()};return{directive:"accept",clause:e}}function L(e){for(const t of["by asking","with"]){const r=e.indexOf(t);if(!(r<0))return{directedPrompt:O(e.slice(r+t.length)),clause:e=e.slice(0,r).trim()}}return{clause:e}}var S=r(381),V=r(862);const{toWords:B}=S,H={сontainor:"container",сontainors:"containers",сontains:"contains",contentinal:"continental",évaluate:"evaluate",mittani:"mitanni",ludmilla:"lyudmila"},G={"1st":"first","2nd":"second","3rd":"third","4th":"fourth","5th":"fifth","6th":"sixth","7th":"seventh","8th":"eighth","9th":"ninth","10th":"tenth","11th":"eleventh","12th":"twelfth","13th":"thirteenth","14th":"fourteenth","15th":"fifteenth","16th":"sixteenth","17th":"seventeenth","18th":"eighteenth","19th":"nineteenth","20th":"twentieth","30th":"thirtieth","40th":"fortieth","50th":"fiftieth","60th":"sixtieth","70th":"seventieth","80th":"eightieth","90th":"ninetieth"},J={dr:"doctor",st:"saint",mr:"mister",mrs:"missus",ms:"miss",esq:"esquire",jr:"junior",sr:"senior",rev:"reverend",fr:"father",prof:"professor",hon:"honorable",pres:"president",vp:"vice president",gov:"governor",ofc:"officer",pr:"pastor",br:"brother",rep:"representative",Mme:"Madame",Mlle:"Mademoiselle",Hr:"Herr",Fr:"Frau"},K={kg:"kilogram",mol:"mole",cd:"candela",Hz:"hertz",Pa:"pascal",rad:"radian",W:"watt",J:"joule",V:"volt",Wb:"weber",F:"farad",Ohm:"ohm",Ω:"ohm",kat:"katal",lm:"lumen",lx:"lux",Bq:"becquerel",Gy:"gray",Sv:"sievert",in:"inch",ft:"foot",yd:"yard",mi:"mile",nmi:"nautical mile",sqmi:"square mile",gal:"gallon",qt:"quart",pt:"pint",cup:"cup"},U={colour:"color",flavour:"flavor",humour:"humor",labour:"labor",neighbour:"neighbor",odour:"odor",organize:"organise",leukaemia:"leukemia",manoeuvre:"maneuver",oestrogen:"estrogen",paediatric:"pediatric"},Y={muhammed:"muhammad",muhamad:"muhammad",mohammad:"muhammad",mohammed:"muhammad",mahammad:"muhammad",maxammed:"muhammad",mehemmed:"muhammad",mohamad:"muhammad",mohamed:"muhammad"};function _(e){try{e=(0,V.toArabic)(e)}catch(t){if("toArabic expects a valid roman number"===t.message||t instanceof TypeError)return e;throw t}return B(e)}function Q(e,t=!1){const r=e.split(" ").filter((e=>e.length>0));for(let e=0;e<=r.length-1;e++)Object.prototype.hasOwnProperty.call(G,r[e])&&(r[e]=G[r[e]]),Object.prototype.hasOwnProperty.call(J,r[e])&&(r[e]=J[r[e]]),Object.prototype.hasOwnProperty.call(K,r[e])&&(r[e]=K[r[e]]),Object.prototype.hasOwnProperty.call(U,r[e])&&(r[e]=U[r[e]]),Object.prototype.hasOwnProperty.call(H,r[e])&&(r[e]=H[r[e]]),Object.prototype.hasOwnProperty.call(Y,r[e])&&(r[e]=Y[r[e]]),r[e].endsWith("s")&&r[e].length>1&&isFinite(r[e].at(-2))&&(r[e]=r[e].slice(0,-1)),r[e]=_(r[e]),isFinite(r[e])&&(r[e]=parseInt(r[e]),r[e]=r[e]<=100?B(r[e]):r[e].toString());return r.sort()}function Z(e){return e.normalize("NFD").replace(/[\u0300-\u036f]/g,"").toLowerCase().replace(/\(s\)/g,"s").replace(/["“‟❝”❞]/g,'"').replace(/[\u2018-\u201B]/g,"'").replace(/\p{Pd}/gu,"-").replace(/[\u00B7\u22C5\u2027]/g,"").replace(/<\/?i>/g,"")}const ee=function(e,t,r=7,i=!1){if("string"!=typeof e||"string"!=typeof t)return{directive:"reject",directedPrompt:void 0};if(""===e||""===t)return{directive:"reject",directedPrompt:void 0};const n=/<u>/.test(e);e=Z(e);const o=Q(t=W(t=Z(t)),!0),a=function(e){const t=e.replace(/\([^)]*\)/g,"").replace(/\[[^\]]*\]/g,"");let r=e.match(/(?<=\[)[^\]]*(?=\])/g)??[],i=e.match(/(?<=\()[^)]*(?=\))/g)??[];return r=r.filter((e=>R.some((t=>e.startsWith(t))))),i=i.filter((e=>R.some((t=>e.startsWith(t))))),[t,...r,...i]}(e).flatMap(((e,t)=>function(e,t){const r=e.split(";").map((e=>e.trim())),i=t?/,? or /:/,? or |, /,n=[];for(let e of r){let r,o;({directive:r,clause:e}=F(e)),"prompt"===r&&({directedPrompt:o,clause:e}=L(e));let a=e.split(i);a=a.map((e=>e.trim())).filter((e=>e.length>0)),n.push({directive:r,formattedAnswers:a,directedPrompt:o,isMainAnswer:t})}return n}(e,0===t))),s=a[0].formattedAnswers[0];if(!n&&s?.length>1&&1===t.length&&isNaN(t))return{directive:"reject"};for(const t of function(e){const t=[];for(const r of Object.keys(D))for(const i of D[r])e.includes(i)&&t.push(r);return t}(e))"accept either"===t&&a.push({directive:"accept",formattedAnswers:s.split(" ")}),"prompt on partial"===t&&a.push({directive:"prompt",formattedAnswers:s.split(" ")});a.sort(((e,t)=>("reject"===e.directive?-1:1)-("reject"===t.directive?-1:1)));for(const{directive:e,formattedAnswers:t,directedPrompt:i,isMainAnswer:s}of a)for(const a of t)for(const t of T(a,s)){const a=Q(t,!0);if(P(n||"reject"===e?a:o,n||"reject"===e?o:a,"reject"===e?-1:r,!n,"reject"!==e))return{directive:e,directedPrompt:i}}return{directive:"reject"}};export{ee as default};
2
+ var e={225:e=>{const t=(e,t,r,i,n,o)=>{e>1&&t>1&&r[e-1]===i[t-2]&&r[e-2]===i[t-1]&&(n[e][t]=Math.min.apply(null,[n[e][t],n[e-2][t-2]+o]))},r=(e,r)=>{if(null==e||null==r||"string"!=typeof e||"string"!=typeof r)return-1;let i=((e,t)=>{if(null==e||null==t)return null;let r=[];for(let t=0;t<=e.length;t++)r[t]=[],r[t][0]=t;for(let e=0;e<=t.length;e++)r[0][e]=e;return r})(e,r);if(null===i)return-1;for(var n=1;n<=e.length;n++){let o;for(let a=1;a<=r.length;a++)o=e.charAt(n-1)===r.charAt(a-1)?0:1,i[n][a]=Math.min.apply(null,[i[n-1][a]+1,i[n][a-1]+1,i[n-1][a-1]+o]),t(n,a,e,r,i,o)}return i[e.length][r.length]};e.exports={distanceProm:(e,t)=>new Promise(((i,n)=>{let o=r(e,t);0<=o?i(o):n(o)})),distance:r,minDistanceProm:(e,t)=>new Promise(((i,n)=>{if(null==t||!Array.isArray(t))return void n(-1);if(0===t.length)return void i(r(e,""));let o=-2;t.forEach((t=>{let i=r(e,t);(-2===o||i<o)&&(o=i)})),0<=o?i(o):n(o)}))}},381:(e,t,r)=>{!function(){function i(e){return!("number"!=typeof e||e!=e||e===1/0||e===-1/0)}function n(e){return"number"==typeof e&&Math.abs(e)<=9007199254740991}"object"==typeof self&&self.self===self&&self||"object"==typeof r.g&&r.g.global===r.g&&r.g;var o=/(hundred|thousand|(m|b|tr|quadr)illion)$/,a=/teen$/,s=/y$/,l=/(zero|one|two|three|four|five|six|seven|eight|nine|ten|eleven|twelve)$/,u={zero:"zeroth",one:"first",two:"second",three:"third",four:"fourth",five:"fifth",six:"sixth",seven:"seventh",eight:"eighth",nine:"ninth",ten:"tenth",eleven:"eleventh",twelve:"twelfth"};function c(e){return o.test(e)||a.test(e)?e+"th":s.test(e)?e.replace(s,"ieth"):l.test(e)?e.replace(l,m):e}function m(e,t){return u[t]}var h=1e3,f=1e6,p=1e9,d=1e12,w=1e15,g=["zero","one","two","three","four","five","six","seven","eight","nine","ten","eleven","twelve","thirteen","fourteen","fifteen","sixteen","seventeen","eighteen","nineteen"],b=["zero","ten","twenty","thirty","forty","fifty","sixty","seventy","eighty","ninety"];function v(e,t){var r,o=parseInt(e,10);if(!i(o))throw new TypeError("Not a finite number: "+e+" ("+typeof e+")");if(!n(o))throw new RangeError("Input is not a safe number, it’s either too large or too small.");return r=function e(t){var r,i,n=arguments[1];return 0===t?n?n.join(" ").replace(/,$/,""):"zero":(n||(n=[]),t<0&&(n.push("minus"),t=Math.abs(t)),t<20?(r=0,i=g[t]):t<100?(r=t%10,i=b[Math.floor(t/10)],r&&(i+="-"+g[r],r=0)):t<h?(r=t%100,i=e(Math.floor(t/100))+" hundred"):t<f?(r=t%h,i=e(Math.floor(t/h))+" thousand,"):t<p?(r=t%f,i=e(Math.floor(t/f))+" million,"):t<d?(r=t%p,i=e(Math.floor(t/p))+" billion,"):t<w?(r=t%d,i=e(Math.floor(t/d))+" trillion,"):t<=9007199254740992&&(r=t%w,i=e(Math.floor(t/w))+" quadrillion,"),n.push(i),e(r,n))}(o),t?c(r):r}var y={toOrdinal:function(e){var t=parseInt(e,10);if(!i(t))throw new TypeError("Not a finite number: "+e+" ("+typeof e+")");if(!n(t))throw new RangeError("Input is not a safe number, it’s either too large or too small.");var r=String(t),o=Math.abs(t%100),a=11<=o&&o<=13,s=r.charAt(r.length-1);return r+(a?"th":"1"===s?"st":"2"===s?"nd":"3"===s?"rd":"th")},toWords:v,toWordsOrdinal:function(e){return c(v(e))}};e.exports&&(t=e.exports=y),t.numberToWords=y}()},862:(e,t,r)=>{e.exports={toArabic:r(993),toRoman:r(24)}},993:e=>{Array.prototype.forEach,e.exports=function(e){if("string"!=typeof e&&!(e instanceof String))throw new TypeError("toArabic expects a string");if(/^nulla$/i.test(e)||!e.length)return 0;if(!(e=e.toUpperCase().match(/^(M{0,3})(CM|DC{0,3}|CD|C{0,3})(XC|LX{0,3}|XL|X{0,3})(IX|VI{0,3}|IV|I{0,3})$/)))throw new Error("toArabic expects a valid roman number");var t=0;return t+=1e3*e[1].length,"CM"===e[2]?t+=900:"CD"===e[2]?t+=400:t+=100*e[2].length+("D"===e[2][0]?400:0),"XC"===e[3]?t+=90:"XL"===e[3]?t+=40:t+=10*e[3].length+("L"===e[3][0]?40:0),"IX"===e[4]?t+=9:"IV"===e[4]?t+=4:t+=1*e[4].length+("V"===e[4][0]?4:0),t}},24:e=>{!function(){function t(e,t,r,i){var n="";switch(e){case 0:return n;case 9:return t+i;case 4:return t+r}for(e>=5&&(n=r,e-=5);e-- >0;)n+=t;return n}e.exports=function(e){if(e instanceof Number&&(e=parseInt(e,10)),("string"==typeof e||e instanceof String)&&(e=parseInt(e,10),isNaN(e)))throw new TypeError("toArabic expects a number");if("number"!=typeof e)throw new TypeError("toArabic expects a number");if(isNaN(e))throw new TypeError("toArabic expects a real number");if(e<0)throw new Error("toArabic cannot express negative numbers");if(e>3999)throw new Error("toArabic cannot express numbers over 3999");if(0===e)return"nulla";var r="";return r+=t(Math.floor(e/1e3),"M","",""),e%=1e3,r+=t(Math.floor(e/100),"C","D","M"),e%=100,(r+=t(Math.floor(e/10),"X","L","C"))+t(e%=10,"I","V","X")}}()}},t={};function r(i){var n=t[i];if(void 0!==n)return n.exports;var o=t[i]={exports:{}};return e[i](o,o.exports,r),o.exports}r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}();var i=r(225);const n={ational:"ate",tional:"tion",enci:"ence",anci:"ance",izer:"ize",bli:"ble",alli:"al",entli:"ent",eli:"e",ousli:"ous",ization:"ize",ation:"ate",ator:"ate",alism:"al",iveness:"ive",fulness:"ful",ousness:"ous",aliti:"al",iviti:"ive",biliti:"ble",logi:"log"},o={icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:""},a="[aeiouy]",s="([^aeiou][^aeiouy]*)",l="("+a+"[aeiou]*)",u=new RegExp("^"+s+"?"+l+s),c=new RegExp("^"+s+"?"+l+s+l+"?$"),m=new RegExp("^"+s+"?("+l+s+"){2,}"),h=new RegExp("^"+s+"?"+a),f=new RegExp("^"+s+a+"[^aeiouwxy]$"),p=/ll$/,d=/^(.+?)e$/,w=/^(.+?)y$/,g=/^(.+?(s|t))(ion)$/,b=/^(.+?)(ed|ing)$/,v=/(at|bl|iz)$/,y=/^(.+?)eed$/,x=/^.+?[^s]s$/,j=/^.+?(ss|i)es$/,A=/([^aeiouylsz])\1$/,M=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,k=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,z=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/;function $(e){let t=String(e).toLowerCase();if(t.length<3)return t;let r,i=!1;return 121===t.codePointAt(0)&&(i=!0,t="Y"+t.slice(1)),j.test(t)?t=t.slice(0,-2):x.test(t)&&(t=t.slice(0,-1)),(r=y.exec(t))?u.test(r[1])&&(t=t.slice(0,-1)):(r=b.exec(t))&&h.test(r[1])&&(t=r[1],v.test(t)?t+="e":A.test(t)?t=t.slice(0,-1):f.test(t)&&(t+="e")),(r=w.exec(t))&&h.test(r[1])&&(t=r[1]+"i"),(r=M.exec(t))&&u.test(r[1])&&(t=r[1]+n[r[2]]),(r=k.exec(t))&&u.test(r[1])&&(t=r[1]+o[r[2]]),(r=z.exec(t))?m.test(r[1])&&(t=r[1]):(r=g.exec(t))&&m.test(r[1])&&(t=r[1]),(r=d.exec(t))&&(m.test(r[1])||c.test(r[1])&&!f.test(r[1]))&&(t=r[1]),p.test(t)&&m.test(t)&&(t=t.slice(0,-1)),i&&(t="y"+t.slice(1)),t}function P(e,t,r,n,o){let a=0;for(const s of e){let e=!1;for(;a<t.length;){const l=t[a];a++;const u=o?(0,i.distance)($(s),$(l)):(0,i.distance)(s,l);if(r>0&&r*u<=l.length){e=!0;break}if(n&&l.includes(s)){e=!0;break}if(0===u){e=!0;break}}if(!e)return!1}return!0}function E(e){const t=C(e).split(" ");return I(e=e.split(" ").filter((e=>e.length>0)).filter((e=>e.match(/<\/?u>/)||t.includes(e))).reduce(((e,t)=>e+t+" "),"").trim())}function O(e){const t=e.match(/"[^"]*(?=["])/g)?.map((e=>e.slice(1)));return I(t?t.reduce(((e,t)=>e+" "+t),"").trim():e)}function C(e){const t=e.match(/<u>[^<]*(?=<\/u>)/g)?.map((e=>e.slice(3)));return I(t?t.reduce(((e,t)=>e+t+" "),"").trim():e)}function I(e){return e.replace(/<[^>]*>/g,"")}function W(e){return e.replace(/[.,!;:'"\\/?@#$%^&*_~’]/g,"")}const q={hydrogen:["h"],helium:["he"],lithium:["li"],beryllium:["be"],boron:["b"],carbon:["c"],nitrogen:["n"],oxygen:["o"],fluorine:["f"],neon:["ne"],sodium:["na"],magnesium:["mg"],aluminum:["al"],silicon:["si"],phosphorus:["p"],sulfur:["s"],chlorine:["cl"],argon:["ar"],potassium:["k"],calcium:["ca"],scandium:["sc"],titanium:["ti"],vanadium:["v"],chromium:["cr"],manganese:["mn"],iron:["fe"],cobalt:["co"],nickel:["ni"],copper:["cu"],zinc:["zn"],gallium:["ga"],germanium:["ge"],arsenic:["as"],selenium:["se"],bromine:["br"],krypton:["kr"],rubidium:["rb"],strontium:["sr"],yttrium:["y"],zirconium:["zr"],niobium:["nb"],molybdenum:["mo"],technetium:["tc"],ruthenium:["ru"],rhodium:["rh"],palladium:["pd"],silver:["ag"],cadmium:["cd"],indium:["in"],tin:["sn"],antimony:["sb"],tellurium:["te"],iodine:["i"],xenon:["xe"],cesium:["cs"],barium:["ba"],lanthanum:["la"],cerium:["ce"],praseodymium:["pr"],neodymium:["nd"],promethium:["pm"],samarium:["sm"],europium:["eu"],gadolinium:["gd"],terbium:["tb"],dysprosium:["dy"],holmium:["ho"],erbium:["er"],thulium:["tm"],ytterbium:["yb"],lutetium:["lu"],hafnium:["hf"],tantalum:["ta"],tungsten:["w"],rhenium:["re"],osmium:["os"],iridium:["ir"],platinum:["pt"],gold:["au"],mercury:["hg"],thallium:["tl"],lead:["pb"],bismuth:["bi"],polonium:["po"],astatine:["at"],radon:["rn"],francium:["fr"],radium:["ra"],actinium:["ac"],thorium:["th"],protactinium:["pa"],uranium:["u"],neptunium:["np"],plutonium:["pu"],americium:["am"],curium:["cm"],berkelium:["bk"],californium:["cf"],einsteinium:["es"],fermium:["fm"],mendelevium:["md"],nobelium:["no"],lawrencium:["lr"],rutherfordium:["rf"],dubnium:["db"],seaborgium:["sg"],bohrium:["bh"],hassium:["hs"],meitnerium:["mt"],darmstadtium:["ds"],roentgenium:["rg"],copernicium:["cn"],nihonium:["nh"],flerovium:["fl"],moscovium:["mc"],livermorium:["lv"],tennessine:["ts"],oganesson:["og"],"atomic bombs":["atomic weapons","nuclear bombs","nuclear weapons","nukes","fission bombs","A-bombs"],"nuclear weapons":["atomic bombs","atomic weapons","nuclear bombs","nukes","fission bombs","A-bombs"],nukes:["atomic bombs","atomic weapons","nuclear bombs","nuclear weapons","fission bombs","A-bombs"],fairytales:["fairy tales"],"fairy tales":["fairytales"],house:["home","dwelling","residence"],mouse:["mice"],rail:["railroad"],railroad:["rail"],"nineteen eighty-four":["1984","nineteen eighty four"],"nineteen eighty four":["1984","nineteen eighty-four"],"oxidation number":["oxidation state"],"oxidation state":["oxidation number"],"ralph vaughan-williams":["rvw"],spacewalk:["space walk"],spacewalks:["space walk"],"sugar cane":["sugarcane"],sugarcane:["sugar cane"],wavefunction:["wave function"],"wave function":["wavefunction"],"world war 1":["first world war","great war","world war i","world war one"],"world war i":["first world war","great war","world war 1","world war one"],"world war one":["first world war","great war","world war 1","world war i"],"world war ii":["ww2","wwii","world war 2","world war two","second world war"],"world war two":["ww2","wwii","world war ii","world war 2","second world war"],"world war 2":["ww2","wwii","world war ii","world war two","second world war"],"Kanye West":["kayne","west"],superconductors:["super conductors","super conductor"],"baha' i":["bahai"],"united states of america":["united states","usa","us","america"],"the united states of america":["united states","usa","us","america"],usa:["united states","us","america"]};function N(e,t){if(/-/.test(e))return[...N(e.replace(/-/g," "),t),...N(e.replace(/-/g,""),t)];const r=[I(e),C(e),E(e),O(e)];if(t)for(const t of[e,C(e)]){const e=t.split(" ").filter((e=>e.length>0)).map((e=>I(e).charAt(0))).reduce(((e,t)=>e+t),"").trim();e.length>1&&r.push(e)}return r[0]in q&&r.push(...q[r[0]]),r.map((e=>W(e)))}const T={accept:["accept","or","antiprompt on","anti-prompt on","antiprompt","anti-prompt"],prompt:["prompt on","prompt"],reject:["reject","do not accept or prompt on","do not accept"]},X=Object.values(T).flat(),R={"accept either":["accept either","accept any"],"prompt on partial":["prompt on partial","prompt on a partial","prompt on either"]};function D(e){for(const t of Object.keys(T))for(const r of T[t])if(e.startsWith(r))return{directive:t,clause:e=e.replace(r,"").trim()};return{directive:"accept",clause:e}}function F(e){for(const t of["by asking","with"]){const r=e.indexOf(t);if(!(r<0))return{directedPrompt:O(e.slice(r+t.length)),clause:e=e.slice(0,r).trim()}}return{clause:e}}var L=r(381),S=r(862);const{toWords:V}=L,B={сontainor:"container",сontainors:"containers",сontains:"contains",contentinal:"continental",évaluate:"evaluate",mittani:"mitanni",ludmilla:"lyudmila"},H={"1st":"first","2nd":"second","3rd":"third","4th":"fourth","5th":"fifth","6th":"sixth","7th":"seventh","8th":"eighth","9th":"ninth","10th":"tenth","11th":"eleventh","12th":"twelfth","13th":"thirteenth","14th":"fourteenth","15th":"fifteenth","16th":"sixteenth","17th":"seventeenth","18th":"eighteenth","19th":"nineteenth","20th":"twentieth","30th":"thirtieth","40th":"fortieth","50th":"fiftieth","60th":"sixtieth","70th":"seventieth","80th":"eightieth","90th":"ninetieth"},G={dr:"doctor",st:"saint",mr:"mister",mrs:"missus",ms:"miss",esq:"esquire",jr:"junior",sr:"senior",rev:"reverend",fr:"father",prof:"professor",hon:"honorable",pres:"president",vp:"vice president",gov:"governor",ofc:"officer",pr:"pastor",br:"brother",rep:"representative",Mme:"Madame",Mlle:"Mademoiselle",Hr:"Herr",Fr:"Frau"},J={kg:"kilogram",mol:"mole",cd:"candela",Hz:"hertz",Pa:"pascal",rad:"radian",W:"watt",J:"joule",V:"volt",Wb:"weber",F:"farad",Ohm:"ohm",Ω:"ohm",kat:"katal",lm:"lumen",lx:"lux",Bq:"becquerel",Gy:"gray",Sv:"sievert",in:"inch",ft:"foot",yd:"yard",mi:"mile",nmi:"nautical mile",sqmi:"square mile",gal:"gallon",qt:"quart",pt:"pint",cup:"cup"},K={colour:"color",flavour:"flavor",humour:"humor",labour:"labor",neighbour:"neighbor",odour:"odor",organize:"organise",leukaemia:"leukemia",manoeuvre:"maneuver",oestrogen:"estrogen",paediatric:"pediatric"},U={muhammed:"muhammad",muhamad:"muhammad",mohammad:"muhammad",mohammed:"muhammad",mahammad:"muhammad",maxammed:"muhammad",mehemmed:"muhammad",mohamad:"muhammad",mohamed:"muhammad"};function Y(e){try{e=(0,S.toArabic)(e)}catch(t){if("toArabic expects a valid roman number"===t.message||t instanceof TypeError)return e;throw t}return V(e)}function _(e,t=!1){const r=e.split(" ").filter((e=>e.length>0));for(let e=0;e<=r.length-1;e++)Object.prototype.hasOwnProperty.call(H,r[e])&&(r[e]=H[r[e]]),Object.prototype.hasOwnProperty.call(G,r[e])&&(r[e]=G[r[e]]),Object.prototype.hasOwnProperty.call(J,r[e])&&(r[e]=J[r[e]]),Object.prototype.hasOwnProperty.call(K,r[e])&&(r[e]=K[r[e]]),Object.prototype.hasOwnProperty.call(B,r[e])&&(r[e]=B[r[e]]),Object.prototype.hasOwnProperty.call(U,r[e])&&(r[e]=U[r[e]]),r[e].endsWith("s")&&r[e].length>1&&isFinite(r[e].at(-2))&&(r[e]=r[e].slice(0,-1)),r[e]=Y(r[e]),isFinite(r[e])&&(r[e]=parseInt(r[e]),r[e]=r[e]<=100?V(r[e]):r[e].toString());return r.sort()}function Q(e){return e.normalize("NFD").replace(/[\u0300-\u036f]/g,"").toLowerCase().replace(/\(s\)/g,"s").replace(/["“‟❝”❞]/g,'"').replace(/[\u2018-\u201B]/g,"'").replace(/\p{Pd}/gu,"-").replace(/[\u00B7\u22C5\u2027]/g,"").replace(/<\/?i>/g,"")}const Z=function(e,t,r=7,i=!1){if("string"!=typeof e||"string"!=typeof t)return{directive:"reject",directedPrompt:void 0};if(""===e||""===t)return{directive:"reject",directedPrompt:void 0};("number"!=typeof r||r<0)&&(r=7);const n=/<u>/.test(e);e=Q(e);const o=_(t=W(t=Q(t)),!0),a=function(e){const t=e.replace(/\([^)]*\)/g,"").replace(/\[[^\]]*\]/g,"");let r=e.match(/\[[^\]]*(?=\])/g)??[];r=r.map((e=>e.slice(1)));let i=e.match(/\([^)]*(?=\))/g)??[];return i=i.map((e=>e.slice(1))),r=r.filter((e=>X.some((t=>e.startsWith(t))))),i=i.filter((e=>X.some((t=>e.startsWith(t))))),[t,...r,...i]}(e).flatMap(((e,t)=>function(e,t){const r=e.split(";").map((e=>e.trim())),i=t?/,? or /:/,? or |, /,n=[];for(let e of r){let r,o;({directive:r,clause:e}=D(e)),"prompt"===r&&({directedPrompt:o,clause:e}=F(e));let a=e.split(i);a=a.map((e=>e.trim())).filter((e=>e.length>0)),n.push({directive:r,formattedAnswers:a,directedPrompt:o,isMainAnswer:t})}return n}(e,0===t))),s=a[0].formattedAnswers[0];if(!n&&s?.length>1&&1===t.length&&isNaN(t))return{directive:"reject"};for(const t of function(e){const t=[];for(const r of Object.keys(R))for(const i of R[r])e.includes(i)&&t.push(r);return t}(e))"accept either"===t&&a.push({directive:"accept",formattedAnswers:s.split(" ")}),"prompt on partial"===t&&a.push({directive:"prompt",formattedAnswers:s.split(" ")});a.sort(((e,t)=>("reject"===e.directive?-1:1)-("reject"===t.directive?-1:1)));for(const{directive:e,formattedAnswers:t,directedPrompt:i,isMainAnswer:s}of a)for(const a of t)for(const t of N(a,s)){if(""===t)continue;const a=_(t,!0);if(P(n||"reject"===e?a:o,n||"reject"===e?o:a,"reject"===e?-1:r,!n,"reject"!==e))return{directive:e,directedPrompt:i}}return{directive:"reject"}};export{Z as default};
3
3
  //# sourceMappingURL=main.mjs.map
package/dist/main.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"main.mjs","mappings":"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","sources":["webpack://qb-answer-checker/./node_modules/damerau-levenshtein-js/app.js","webpack://qb-answer-checker/./node_modules/number-to-words/numberToWords.min.js","webpack://qb-answer-checker/./node_modules/roman-numerals/index.js","webpack://qb-answer-checker/./node_modules/roman-numerals/lib/toArabic.js","webpack://qb-answer-checker/./node_modules/roman-numerals/lib/toRoman.js","webpack://qb-answer-checker/webpack/bootstrap","webpack://qb-answer-checker/webpack/runtime/global","webpack://qb-answer-checker/./node_modules/stemmer/index.js","webpack://qb-answer-checker/./src/contains-tokens.js","webpack://qb-answer-checker/./src/utils.js","webpack://qb-answer-checker/./src/generate-unformatted-answers.js","webpack://qb-answer-checker/./src/constants.js","webpack://qb-answer-checker/./src/split-section-into-clauses.js","webpack://qb-answer-checker/./src/tokenize.js","webpack://qb-answer-checker/./src/check-answer.js","webpack://qb-answer-checker/./src/split-into-sections.js","webpack://qb-answer-checker/./src/get-special-directives.js"],"sourcesContent":["/**\n * MIT License\n *\n * Copyright (c) 2018 Fabvalaaah - fabvalaaah@laposte.net\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n/**\n * DISCLAIMER:\n * I am not responsible in any way of any consequence of the usage of this piece\n * of software. You are warned, use it at your own risks.\n */\n\nconst initMatrix = (s1, s2) => {\n /* istanbul ignore next */\n if (undefined == s1 || undefined == s2) {\n return null;\n }\n\n let d = [];\n for (let i = 0; i <= s1.length; i++) {\n d[i] = [];\n d[i][0] = i;\n }\n for (let j = 0; j <= s2.length; j++) {\n d[0][j] = j;\n }\n\n return d;\n};\n\nconst damerau = (i, j, s1, s2, d, cost) => {\n if (i > 1 && j > 1 && s1[i - 1] === s2[j - 2] && s1[i - 2] === s2[j - 1]) {\n d[i][j] = Math.min.apply(null, [d[i][j], d[i - 2][j - 2] + cost]);\n }\n};\n\nconst distance = (s1, s2) => {\n if (\n undefined == s1 ||\n undefined == s2 ||\n \"string\" !== typeof s1 ||\n \"string\" !== typeof s2\n ) {\n return -1;\n }\n\n let d = initMatrix(s1, s2);\n /* istanbul ignore next */\n if (null === d) {\n return -1;\n }\n for (var i = 1; i <= s1.length; i++) {\n let cost;\n for (let j = 1; j <= s2.length; j++) {\n if (s1.charAt(i - 1) === s2.charAt(j - 1)) {\n cost = 0;\n } else {\n cost = 1;\n }\n\n d[i][j] = Math.min.apply(null, [\n d[i - 1][j] + 1,\n d[i][j - 1] + 1,\n d[i - 1][j - 1] + cost,\n ]);\n\n damerau(i, j, s1, s2, d, cost);\n }\n }\n\n return d[s1.length][s2.length];\n};\n\nconst distanceProm = (s1, s2) =>\n new Promise((resolve, reject) => {\n let result = distance(s1, s2);\n if (0 <= result) {\n resolve(result);\n } else {\n reject(result);\n }\n });\n\nconst minDistanceProm = (s1, list) =>\n new Promise((resolve, reject) => {\n if (undefined == list || !Array.isArray(list)) {\n reject(-1);\n return;\n } else if (0 === list.length) {\n resolve(distance(s1, \"\"));\n return;\n }\n\n let min = -2;\n\n list.forEach((s2) => {\n let d = distance(s1, s2);\n if (-2 === min || d < min) {\n min = d;\n }\n });\n\n if (0 <= min) {\n resolve(min);\n } else {\n reject(min);\n }\n });\n\nmodule.exports = {\n distanceProm,\n distance,\n minDistanceProm,\n};\n","/*!\n * Number-To-Words util\n * @version v1.2.4\n * @link https://github.com/marlun78/number-to-words\n * @author Martin Eneqvist (https://github.com/marlun78)\n * @contributors Aleksey Pilyugin (https://github.com/pilyugin),Jeremiah Hall (https://github.com/jeremiahrhall),Adriano Melo (https://github.com/adrianomelo),dmrzn (https://github.com/dmrzn)\n * @license MIT\n */\n!function(){\"use strict\";var e=\"object\"==typeof self&&self.self===self&&self||\"object\"==typeof global&&global.global===global&&global||this,t=9007199254740991;function f(e){return!(\"number\"!=typeof e||e!=e||e===1/0||e===-1/0)}function l(e){return\"number\"==typeof e&&Math.abs(e)<=t}var n=/(hundred|thousand|(m|b|tr|quadr)illion)$/,r=/teen$/,o=/y$/,i=/(zero|one|two|three|four|five|six|seven|eight|nine|ten|eleven|twelve)$/,s={zero:\"zeroth\",one:\"first\",two:\"second\",three:\"third\",four:\"fourth\",five:\"fifth\",six:\"sixth\",seven:\"seventh\",eight:\"eighth\",nine:\"ninth\",ten:\"tenth\",eleven:\"eleventh\",twelve:\"twelfth\"};function h(e){return n.test(e)||r.test(e)?e+\"th\":o.test(e)?e.replace(o,\"ieth\"):i.test(e)?e.replace(i,a):e}function a(e,t){return s[t]}var u=10,d=100,p=1e3,v=1e6,b=1e9,y=1e12,c=1e15,g=9007199254740992,m=[\"zero\",\"one\",\"two\",\"three\",\"four\",\"five\",\"six\",\"seven\",\"eight\",\"nine\",\"ten\",\"eleven\",\"twelve\",\"thirteen\",\"fourteen\",\"fifteen\",\"sixteen\",\"seventeen\",\"eighteen\",\"nineteen\"],w=[\"zero\",\"ten\",\"twenty\",\"thirty\",\"forty\",\"fifty\",\"sixty\",\"seventy\",\"eighty\",\"ninety\"];function x(e,t){var n,r=parseInt(e,10);if(!f(r))throw new TypeError(\"Not a finite number: \"+e+\" (\"+typeof e+\")\");if(!l(r))throw new RangeError(\"Input is not a safe number, it’s either too large or too small.\");return n=function e(t){var n,r,o=arguments[1];if(0===t)return o?o.join(\" \").replace(/,$/,\"\"):\"zero\";o||(o=[]);t<0&&(o.push(\"minus\"),t=Math.abs(t));t<20?(n=0,r=m[t]):t<d?(n=t%u,r=w[Math.floor(t/u)],n&&(r+=\"-\"+m[n],n=0)):t<p?(n=t%d,r=e(Math.floor(t/d))+\" hundred\"):t<v?(n=t%p,r=e(Math.floor(t/p))+\" thousand,\"):t<b?(n=t%v,r=e(Math.floor(t/v))+\" million,\"):t<y?(n=t%b,r=e(Math.floor(t/b))+\" billion,\"):t<c?(n=t%y,r=e(Math.floor(t/y))+\" trillion,\"):t<=g&&(n=t%c,r=e(Math.floor(t/c))+\" quadrillion,\");o.push(r);return e(n,o)}(r),t?h(n):n}var M={toOrdinal:function(e){var t=parseInt(e,10);if(!f(t))throw new TypeError(\"Not a finite number: \"+e+\" (\"+typeof e+\")\");if(!l(t))throw new RangeError(\"Input is not a safe number, it’s either too large or too small.\");var n=String(t),r=Math.abs(t%100),o=11<=r&&r<=13,i=n.charAt(n.length-1);return n+(o?\"th\":\"1\"===i?\"st\":\"2\"===i?\"nd\":\"3\"===i?\"rd\":\"th\")},toWords:x,toWordsOrdinal:function(e){return h(x(e))}};\"undefined\"!=typeof exports?(\"undefined\"!=typeof module&&module.exports&&(exports=module.exports=M),exports.numberToWords=M):e.numberToWords=M}();","(function () {\n module.exports = {\n toArabic: require('./lib/toArabic.js'),\n toRoman:require('./lib/toRoman.js')\n };\n})();\n","(function () {\n var forEach = Array.prototype.forEach;\n\n\n /**\n * Converts a roman number to its arabic equivalent.\n *\n * Will throw TypeError on non-string inputs.\n *\n * @param {String} roman\n * @return {Number}\n */\n function toArabic (roman) {\n if (('string' !== typeof roman) && (!(roman instanceof String))) throw new TypeError('toArabic expects a string');\n\n // Zero is/was a special case. I'll go with Dionysius Exiguus on this one as\n // seen on http://en.wikipedia.org/wiki/Roman_numerals#Zero\n if (/^nulla$/i.test(roman) || !roman.length) return 0;\n\n // Ultra magical regexp to validate roman numbers!\n roman = roman.toUpperCase().match(/^(M{0,3})(CM|DC{0,3}|CD|C{0,3})(XC|LX{0,3}|XL|X{0,3})(IX|VI{0,3}|IV|I{0,3})$/);\n if (!roman) throw new Error('toArabic expects a valid roman number');\n var arabic = 0;\n\n // Crunching the thousands...\n arabic += roman[1].length * 1000;\n\n // Crunching the hundreds...\n if (roman[2] === 'CM') arabic += 900;\n else if (roman[2] === 'CD') arabic += 400;\n else arabic += roman[2].length * 100 + (roman[2][0] === 'D' ? 400 : 0);\n\n\n // Crunching the tenths\n if (roman[3] === 'XC') arabic += 90;\n else if (roman[3] === 'XL') arabic += 40;\n else arabic += roman[3].length * 10 + (roman[3][0] === 'L' ? 40 : 0);\n\n // Crunching the...you see where I'm going, right?\n if (roman[4] === 'IX') arabic += 9;\n else if (roman[4] === 'IV') arabic += 4;\n else arabic += roman[4].length * 1 + (roman[4][0] === 'V' ? 4 : 0);\n return arabic;\n };\n\n\n module.exports = toArabic;\n\n})();\n","(function () {\n /**\n * Generate the roman number for the current power of tenth\n *\n * @param {Number} num\n * @param {String} one\n * @param {String} five\n * @param {String} ten\n * @return {String}\n */\n function upToTen (num, one, five, ten) {\n var value = '';\n switch (num) {\n case 0: return value;\n case 9: return one + ten;\n case 4: return one + five;\n }\n if (num >= 5) value = five, num -= 5;\n while (num-- > 0) value += one;\n return value;\n }\n\n\n /**\n * Converts an arabic number from 0 to 3999 to its roman equivalent.\n *\n * Will throw TypeError on non-number inputs (stringed numbers are accepted)\n * or NaN and Error on number under 0 or over 3999.\n *\n * @param {Number/String} arabic\n * @return {String}\n */\n function toRoman (arabic) {\n // Checking input first with type comparisons, convert Number() instances to\n // a literal, etc...\n if (arabic instanceof Number) arabic = parseInt(arabic, 10);\n if ('string' === typeof arabic || arabic instanceof String) {\n arabic = parseInt(arabic, 10);\n if (isNaN(arabic)) throw new TypeError('toArabic expects a number');\n }\n if ('number' !== typeof arabic) throw new TypeError('toArabic expects a number');\n\n // Rounding up \"bad\" numbers: NaN, negative numbers, numbers over 3999,...\n if (isNaN(arabic)) throw new TypeError('toArabic expects a real number');\n if (arabic < 0) throw new Error('toArabic cannot express negative numbers');\n if (arabic > 3999) throw new Error('toArabic cannot express numbers over 3999');\n\n // Zero is/was a special case. I'll go with Dionysius Exiguus on this one as\n // seen on http://en.wikipedia.org/wiki/Roman_numerals#Zero\n if (arabic === 0) return 'nulla';\n var roman = '';\n\n // Chomping away by the power of tenths\n roman += upToTen(Math.floor(arabic / 1000), 'M', '', ''), arabic %= 1000;\n roman += upToTen(Math.floor(arabic / 100), 'C', 'D', 'M'), arabic %= 100;\n roman += upToTen(Math.floor(arabic / 10), 'X', 'L', 'C'), arabic %= 10;\n roman += upToTen(arabic, 'I', 'V', 'X');\n return roman;\n };\n\n\n module.exports = toRoman;\n\n})();\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","// Standard suffix manipulations.\n/** @type {Record<string, string>} */\nconst step2list = {\n ational: 'ate',\n tional: 'tion',\n enci: 'ence',\n anci: 'ance',\n izer: 'ize',\n bli: 'ble',\n alli: 'al',\n entli: 'ent',\n eli: 'e',\n ousli: 'ous',\n ization: 'ize',\n ation: 'ate',\n ator: 'ate',\n alism: 'al',\n iveness: 'ive',\n fulness: 'ful',\n ousness: 'ous',\n aliti: 'al',\n iviti: 'ive',\n biliti: 'ble',\n logi: 'log'\n}\n\n/** @type {Record<string, string>} */\nconst step3list = {\n icate: 'ic',\n ative: '',\n alize: 'al',\n iciti: 'ic',\n ical: 'ic',\n ful: '',\n ness: ''\n}\n\n// Consonant-vowel sequences.\nconst consonant = '[^aeiou]'\nconst vowel = '[aeiouy]'\nconst consonants = '(' + consonant + '[^aeiouy]*)'\nconst vowels = '(' + vowel + '[aeiou]*)'\n\nconst gt0 = new RegExp('^' + consonants + '?' + vowels + consonants)\nconst eq1 = new RegExp(\n '^' + consonants + '?' + vowels + consonants + vowels + '?$'\n)\nconst gt1 = new RegExp('^' + consonants + '?(' + vowels + consonants + '){2,}')\nconst vowelInStem = new RegExp('^' + consonants + '?' + vowel)\nconst consonantLike = new RegExp('^' + consonants + vowel + '[^aeiouwxy]$')\n\n// Exception expressions.\nconst sfxLl = /ll$/\nconst sfxE = /^(.+?)e$/\nconst sfxY = /^(.+?)y$/\nconst sfxIon = /^(.+?(s|t))(ion)$/\nconst sfxEdOrIng = /^(.+?)(ed|ing)$/\nconst sfxAtOrBlOrIz = /(at|bl|iz)$/\nconst sfxEED = /^(.+?)eed$/\nconst sfxS = /^.+?[^s]s$/\nconst sfxSsesOrIes = /^.+?(ss|i)es$/\nconst sfxMultiConsonantLike = /([^aeiouylsz])\\1$/\nconst step2 =\n /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/\nconst step3 = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/\nconst step4 =\n /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/\n\n/**\n * Get the stem from a given value.\n *\n * @param {string} value\n * Value to stem.\n * @returns {string}\n * Stem for `value`\n */\n// eslint-disable-next-line complexity\nexport function stemmer(value) {\n let result = String(value).toLowerCase()\n\n // Exit early.\n if (result.length < 3) {\n return result\n }\n\n /** @type {boolean} */\n let firstCharacterWasLowerCaseY = false\n\n // Detect initial `y`, make sure it never matches.\n if (\n result.codePointAt(0) === 121 // Lowercase Y\n ) {\n firstCharacterWasLowerCaseY = true\n result = 'Y' + result.slice(1)\n }\n\n // Step 1a.\n if (sfxSsesOrIes.test(result)) {\n // Remove last two characters.\n result = result.slice(0, -2)\n } else if (sfxS.test(result)) {\n // Remove last character.\n result = result.slice(0, -1)\n }\n\n /** @type {RegExpMatchArray|null} */\n let match\n\n // Step 1b.\n if ((match = sfxEED.exec(result))) {\n if (gt0.test(match[1])) {\n // Remove last character.\n result = result.slice(0, -1)\n }\n } else if ((match = sfxEdOrIng.exec(result)) && vowelInStem.test(match[1])) {\n result = match[1]\n\n if (sfxAtOrBlOrIz.test(result)) {\n // Append `e`.\n result += 'e'\n } else if (sfxMultiConsonantLike.test(result)) {\n // Remove last character.\n result = result.slice(0, -1)\n } else if (consonantLike.test(result)) {\n // Append `e`.\n result += 'e'\n }\n }\n\n // Step 1c.\n if ((match = sfxY.exec(result)) && vowelInStem.test(match[1])) {\n // Remove suffixing `y` and append `i`.\n result = match[1] + 'i'\n }\n\n // Step 2.\n if ((match = step2.exec(result)) && gt0.test(match[1])) {\n result = match[1] + step2list[match[2]]\n }\n\n // Step 3.\n if ((match = step3.exec(result)) && gt0.test(match[1])) {\n result = match[1] + step3list[match[2]]\n }\n\n // Step 4.\n if ((match = step4.exec(result))) {\n if (gt1.test(match[1])) {\n result = match[1]\n }\n } else if ((match = sfxIon.exec(result)) && gt1.test(match[1])) {\n result = match[1]\n }\n\n // Step 5.\n if (\n (match = sfxE.exec(result)) &&\n (gt1.test(match[1]) ||\n (eq1.test(match[1]) && !consonantLike.test(match[1])))\n ) {\n result = match[1]\n }\n\n if (sfxLl.test(result) && gt1.test(result)) {\n result = result.slice(0, -1)\n }\n\n // Turn initial `Y` back to `y`.\n if (firstCharacterWasLowerCaseY) {\n result = 'y' + result.slice(1)\n }\n\n return result\n}\n","import { distance } from 'damerau-levenshtein-js';\nimport { stemmer } from 'stemmer';\n\n/**\n * Check if all elements of `tokens` are present in `reference`.\n * @param {string[]} tokens\n * @param {string[]} references\n * @param {number} strictness\n * @param {boolean} acceptSubstring\n * @param {boolean} useStemmer\n */\nexport default function referenceContainsTokens (tokens, references, strictness, acceptSubstring, useStemmer) {\n let index = 0;\n for (const token of tokens) {\n let containsToken = false;\n while (index < references.length) {\n const reference = references[index];\n index++;\n const errors = useStemmer ? distance(stemmer(token), stemmer(reference)) : distance(token, reference);\n\n if (strictness > 0 && strictness * errors <= reference.length) {\n containsToken = true;\n break;\n }\n\n if (acceptSubstring && reference.includes(token)) {\n containsToken = true;\n break;\n }\n\n if (errors === 0) {\n containsToken = true;\n break;\n }\n }\n\n if (!containsToken) { return false; }\n }\n\n return true;\n}\n","/**\n * Get all words which are partially or wholly underlined.\n * @param {string} string\n * @returns {string}\n */\nfunction extractKeyWords (string) {\n const requiredWords = extractUnderlining(string).split(' ');\n\n string = string\n .split(' ')\n .filter(token => token.length > 0)\n .filter(token => token.match(/<\\/?u>/) || requiredWords.includes(token))\n .reduce((prev, curr) => prev + curr + ' ', '')\n .trim();\n\n return removeHTMLTags(string);\n}\n\n/**\n * Extracts the text in quotes from a given string.\n * @param {string} string - The input string.\n * @returns {string} - The extracted quotes or the string without HTML tags.\n */\nfunction extractQuotes (string) {\n const matches = string.match(/(?<=[\"])[^\"]*(?=[\"])/g);\n\n if (matches) {\n return removeHTMLTags(matches.reduce((prev, curr) => prev + ' ' + curr, '').trim());\n } else {\n return removeHTMLTags(string);\n }\n}\n\n/**\n * Extracts the underlined text from a string.\n * If no underlined text is found, it removes HTML tags from the string.\n * @param {string} string - The input string.\n * @returns {string} - The extracted underlined text or the string without HTML tags.\n */\nfunction extractUnderlining (string) {\n const matches = string.match(/(?<=<u>)[^<]*(?=<\\/u>)/g);\n\n if (matches) {\n return removeHTMLTags(matches.reduce((prev, curr) => prev + curr + ' ', '').trim());\n } else {\n return removeHTMLTags(string);\n }\n}\n\n/**\n * Removes HTML tags from a string.\n * @param {string} string\n * @returns {string}\n */\nfunction removeHTMLTags (string) {\n return string.replace(/<[^>]*>/g, '');\n}\n\nfunction removePunctuation (string) {\n return string.replace(/[.,!;:'\"\\\\/?@#$%^&*_~’]/g, '');\n}\n\nexport {\n extractKeyWords,\n extractQuotes,\n extractUnderlining,\n removeHTMLTags,\n removePunctuation\n};\n","import * as utils from './utils.js';\n\nconst elements = {\n hydrogen: ['h'],\n helium: ['he'],\n lithium: ['li'],\n beryllium: ['be'],\n boron: ['b'],\n carbon: ['c'],\n nitrogen: ['n'],\n oxygen: ['o'],\n fluorine: ['f'],\n neon: ['ne'],\n sodium: ['na'],\n magnesium: ['mg'],\n aluminum: ['al'],\n silicon: ['si'],\n phosphorus: ['p'],\n sulfur: ['s'],\n chlorine: ['cl'],\n argon: ['ar'],\n potassium: ['k'],\n calcium: ['ca'],\n scandium: ['sc'],\n titanium: ['ti'],\n vanadium: ['v'],\n chromium: ['cr'],\n manganese: ['mn'],\n iron: ['fe'],\n cobalt: ['co'],\n nickel: ['ni'],\n copper: ['cu'],\n zinc: ['zn'],\n gallium: ['ga'],\n germanium: ['ge'],\n arsenic: ['as'],\n selenium: ['se'],\n bromine: ['br'],\n krypton: ['kr'],\n rubidium: ['rb'],\n strontium: ['sr'],\n yttrium: ['y'],\n zirconium: ['zr'],\n niobium: ['nb'],\n molybdenum: ['mo'],\n technetium: ['tc'],\n ruthenium: ['ru'],\n rhodium: ['rh'],\n palladium: ['pd'],\n silver: ['ag'],\n cadmium: ['cd'],\n indium: ['in'],\n tin: ['sn'],\n antimony: ['sb'],\n tellurium: ['te'],\n iodine: ['i'],\n xenon: ['xe'],\n cesium: ['cs'],\n barium: ['ba'],\n lanthanum: ['la'],\n cerium: ['ce'],\n praseodymium: ['pr'],\n neodymium: ['nd'],\n promethium: ['pm'],\n samarium: ['sm'],\n europium: ['eu'],\n gadolinium: ['gd'],\n terbium: ['tb'],\n dysprosium: ['dy'],\n holmium: ['ho'],\n erbium: ['er'],\n thulium: ['tm'],\n ytterbium: ['yb'],\n lutetium: ['lu'],\n hafnium: ['hf'],\n tantalum: ['ta'],\n tungsten: ['w'],\n rhenium: ['re'],\n osmium: ['os'],\n iridium: ['ir'],\n platinum: ['pt'],\n gold: ['au'],\n mercury: ['hg'],\n thallium: ['tl'],\n lead: ['pb'],\n bismuth: ['bi'],\n polonium: ['po'],\n astatine: ['at'],\n radon: ['rn'],\n francium: ['fr'],\n radium: ['ra'],\n actinium: ['ac'],\n thorium: ['th'],\n protactinium: ['pa'],\n uranium: ['u'],\n neptunium: ['np'],\n plutonium: ['pu'],\n americium: ['am'],\n curium: ['cm'],\n berkelium: ['bk'],\n californium: ['cf'],\n einsteinium: ['es'],\n fermium: ['fm'],\n mendelevium: ['md'],\n nobelium: ['no'],\n lawrencium: ['lr'],\n rutherfordium: ['rf'],\n dubnium: ['db'],\n seaborgium: ['sg'],\n bohrium: ['bh'],\n hassium: ['hs'],\n meitnerium: ['mt'],\n darmstadtium: ['ds'],\n roentgenium: ['rg'],\n copernicium: ['cn'],\n nihonium: ['nh'],\n flerovium: ['fl'],\n moscovium: ['mc'],\n livermorium: ['lv'],\n tennessine: ['ts'],\n oganesson: ['og']\n};\n\nconst equivalentAnswers = {\n ...elements,\n 'atomic bombs': ['atomic weapons', 'nuclear bombs', 'nuclear weapons', 'nukes', 'fission bombs', 'A-bombs'],\n 'nuclear weapons': ['atomic bombs', 'atomic weapons', 'nuclear bombs', 'nukes', 'fission bombs', 'A-bombs'],\n nukes: ['atomic bombs', 'atomic weapons', 'nuclear bombs', 'nuclear weapons', 'fission bombs', 'A-bombs'],\n fairytales: ['fairy tales'],\n 'fairy tales': ['fairytales'],\n house: ['home', 'dwelling', 'residence'],\n mouse: ['mice'],\n rail: ['railroad'],\n railroad: ['rail'],\n 'nineteen eighty-four': ['1984', 'nineteen eighty four'],\n 'nineteen eighty four': ['1984', 'nineteen eighty-four'],\n 'oxidation number': ['oxidation state'],\n 'oxidation state': ['oxidation number'],\n 'ralph vaughan-williams': ['rvw'],\n spacewalk: ['space walk'],\n spacewalks: ['space walk'],\n 'sugar cane': ['sugarcane'],\n sugarcane: ['sugar cane'],\n wavefunction: ['wave function'],\n 'wave function': ['wavefunction'],\n 'world war 1': ['first world war', 'great war', 'world war i', 'world war one'],\n 'world war i': ['first world war', 'great war', 'world war 1', 'world war one'],\n 'world war one': ['first world war', 'great war', 'world war 1', 'world war i'],\n 'world war ii': ['ww2', 'wwii', 'world war 2', 'world war two', 'second world war'],\n 'world war two': ['ww2', 'wwii', 'world war ii', 'world war 2', 'second world war'],\n 'world war 2': ['ww2', 'wwii', 'world war ii', 'world war two', 'second world war'],\n 'Kanye West': ['kayne', 'west'],\n superconductors: ['super conductors', 'super conductor'],\n 'baha\\' i': ['bahai'],\n 'united states of america': ['united states', 'usa', 'us', 'america'],\n 'the united states of america': ['united states', 'usa', 'us', 'america'],\n usa: ['united states', 'us', 'america']\n};\n\n/**\n * Get the abbreviation of a string by taking the first letter of each word.\n * For example, \"World Health Organization\" becomes \"WHO\".\n * @param {string} string\n * @returns {string}\n */\nfunction getAbbreviation (string) {\n return string\n .split(' ')\n .filter(token => token.length > 0)\n .map(token => utils.removeHTMLTags(token).charAt(0))\n .reduce((a, b) => a + b, '')\n .trim();\n}\n\n/**\n * @param {string} formattedAnswer\n * @param {boolean} isMainAnswer\n * @returns {string[]}\n */\nexport default function generateUnformattedAnswers (formattedAnswer, isMainAnswer) {\n if (/-/.test(formattedAnswer)) {\n const object1 = generateUnformattedAnswers(formattedAnswer.replace(/-/g, ' '), isMainAnswer);\n const object2 = generateUnformattedAnswers(formattedAnswer.replace(/-/g, ''), isMainAnswer);\n return [...object1, ...object2];\n }\n\n const answers = [\n utils.removeHTMLTags(formattedAnswer),\n utils.extractUnderlining(formattedAnswer),\n utils.extractKeyWords(formattedAnswer),\n utils.extractQuotes(formattedAnswer)\n ];\n\n if (isMainAnswer) {\n answers.push(getAbbreviation(formattedAnswer));\n answers.push(getAbbreviation(utils.extractUnderlining(formattedAnswer)));\n }\n\n if (answers[0] in equivalentAnswers) {\n answers.push(...equivalentAnswers[answers[0]]);\n }\n\n return answers.map(answer => utils.removePunctuation(answer));\n}\n","export const DIRECTIVES = {\n accept: ['accept', 'or', 'antiprompt on', 'anti-prompt on', 'antiprompt', 'anti-prompt'],\n prompt: ['prompt on', 'prompt'],\n reject: ['reject', 'do not accept or prompt on', 'do not accept']\n};\nexport const DIRECTIVES_FLATTENED = Object.values(DIRECTIVES).flat();\n\nexport const SPECIAL_DIRECTIVES = {\n 'accept either': ['accept either', 'accept any'],\n 'prompt on partial': ['prompt on partial', 'prompt on a partial', 'prompt on either']\n};\n","import { DIRECTIVES } from './constants.js';\nimport * as utils from './utils.js';\n\n/**\n * @param {string} clause\n * @returns {{directive: \"accept\" | \"prompt\" | \"reject\", clause: string}}\n */\nfunction getDirective (clause) {\n for (const directive of Object.keys(DIRECTIVES)) {\n for (const phrase of DIRECTIVES[directive]) {\n if (clause.startsWith(phrase)) {\n clause = clause.replace(phrase, '').trim();\n return { directive, clause };\n }\n }\n }\n\n return { directive: 'accept', clause };\n}\n\n/**\n * @param {string} clause\n */\nfunction getDirectedPrompt (clause) {\n for (const key of ['by asking', 'with']) {\n const index = clause.indexOf(key);\n if (index < 0) { continue; }\n\n const directedPrompt = utils.extractQuotes(clause.slice(index + key.length));\n clause = clause.slice(0, index).trim();\n return { directedPrompt, clause };\n }\n\n return { clause };\n}\n\n/**\n * @param {string} section\n * @param {boolean} isMainAnswer\n */\nexport default function splitSectionIntoParsedClauses (section, isMainAnswer) {\n const clauses = section.split(';').map(clause => clause.trim());\n const regex = isMainAnswer ? /,? or / : /,? or |, /;\n const parsedClauses = [];\n\n for (let clause of clauses) {\n let directive;\n ({ directive, clause } = getDirective(clause));\n let directedPrompt;\n if (directive === 'prompt') {\n ({ directedPrompt, clause } = getDirectedPrompt(clause));\n }\n\n let formattedAnswers = clause.split(regex);\n formattedAnswers = formattedAnswers.map(token => token.trim()).filter(token => token.length > 0);\n parsedClauses.push({ directive, formattedAnswers, directedPrompt, isMainAnswer });\n }\n\n return parsedClauses;\n}\n","import numberToWords from 'number-to-words';\nimport { toArabic } from 'roman-numerals';\n\nconst { toWords } = numberToWords;\n\nconst typoCorrections = {\n сontainor: 'container',\n сontainors: 'containers',\n сontains: 'contains',\n contentinal: 'continental',\n évaluate: 'evaluate',\n mittani: 'mitanni',\n ludmilla: 'lyudmila'\n};\n\nconst ordinalConversions = {\n '1st': 'first',\n '2nd': 'second',\n '3rd': 'third',\n '4th': 'fourth',\n '5th': 'fifth',\n '6th': 'sixth',\n '7th': 'seventh',\n '8th': 'eighth',\n '9th': 'ninth',\n '10th': 'tenth',\n '11th': 'eleventh',\n '12th': 'twelfth',\n '13th': 'thirteenth',\n '14th': 'fourteenth',\n '15th': 'fifteenth',\n '16th': 'sixteenth',\n '17th': 'seventeenth',\n '18th': 'eighteenth',\n '19th': 'nineteenth',\n '20th': 'twentieth',\n '30th': 'thirtieth',\n '40th': 'fortieth',\n '50th': 'fiftieth',\n '60th': 'sixtieth',\n '70th': 'seventieth',\n '80th': 'eightieth',\n '90th': 'ninetieth'\n};\n\nconst honorificConversions = {\n dr: 'doctor',\n st: 'saint',\n mr: 'mister',\n mrs: 'missus',\n ms: 'miss',\n esq: 'esquire',\n jr: 'junior',\n sr: 'senior',\n rev: 'reverend',\n fr: 'father',\n prof: 'professor',\n hon: 'honorable',\n pres: 'president',\n vp: 'vice president',\n gov: 'governor',\n ofc: 'officer',\n pr: 'pastor',\n br: 'brother',\n rep: 'representative',\n // 'M': 'Monsieur', this might convert things that are not honorifics.\n Mme: 'Madame',\n Mlle: 'Mademoiselle',\n Hr: 'Herr',\n Fr: 'Frau'\n};\n\n// XXX: There will most definatly be cases where this dictionary might erroneously convert a non-unit word to a unit.\n// For example, \"in\" could be a preposition or an abbreviation for \"inch\".\n// As a concequence, some single letter abbeviations are commented out for now.\nconst unitConversions = {\n // SI units\n // 's': 'second',\n // 'm': 'metere',\n kg: 'kilogram',\n mol: 'mole',\n cd: 'candela',\n // 'A': 'ampere',\n // 'K': 'kelvin',\n // 22 Derived units\n Hz: 'hertz',\n // 'N': 'newton',\n Pa: 'pascal',\n rad: 'radian',\n // 'sr': 'steradian',\n W: 'watt',\n // 'C': 'coulomb', // might be speed of light?\n J: 'joule',\n V: 'volt',\n Wb: 'weber',\n F: 'farad',\n Ohm: 'ohm',\n Ω: 'ohm',\n // 'S': 'siemens',\n kat: 'katal',\n lm: 'lumen',\n lx: 'lux',\n Bq: 'becquerel',\n Gy: 'gray',\n Sv: 'sievert',\n // imperical units\n in: 'inch',\n ft: 'foot',\n yd: 'yard',\n mi: 'mile',\n nmi: 'nautical mile',\n sqmi: 'square mile',\n gal: 'gallon',\n qt: 'quart',\n pt: 'pint',\n cup: 'cup'\n};\n\n// very humourous, in'it?\nconst britishConversions = {\n colour: 'color',\n flavour: 'flavor',\n humour: 'humor',\n labour: 'labor',\n neighbour: 'neighbor',\n odour: 'odor',\n organize: 'organise',\n leukaemia: 'leukemia',\n manoeuvre: 'maneuver',\n oestrogen: 'estrogen',\n paediatric: 'pediatric'\n};\n\nconst muhammadConversions = {\n muhammed: 'muhammad',\n muhamad: 'muhammad',\n mohammad: 'muhammad',\n mohammed: 'muhammad',\n mahammad: 'muhammad',\n maxammed: 'muhammad',\n mehemmed: 'muhammad',\n mohamad: 'muhammad',\n mohamed: 'muhammad'\n};\n\n/**\n * Tries to interpret token as a roman numeral and convert it to a word.\n * @param {string} token\n */\nfunction romanToWord (token) {\n try {\n token = toArabic(token);\n } catch (e) {\n if (e.message !== 'toArabic expects a valid roman number' && !(e instanceof TypeError)) {\n throw e;\n } else {\n return token;\n }\n }\n return toWords(token);\n}\n\n/**\n * Generates standardized tokens from a string.\n * @param {string} string\n * @param {boolean} sort - Whether to sort the tokens alphabetically before returning.\n */\nexport default function tokenize (string, sort = false) {\n const tokens = string.split(' ').filter(token => token.length > 0);\n\n for (let i = 0; i <= tokens.length - 1; i++) {\n if (Object.prototype.hasOwnProperty.call(ordinalConversions, tokens[i])) {\n tokens[i] = ordinalConversions[tokens[i]];\n }\n\n if (Object.prototype.hasOwnProperty.call(honorificConversions, tokens[i])) {\n tokens[i] = honorificConversions[tokens[i]];\n }\n\n if (Object.prototype.hasOwnProperty.call(unitConversions, tokens[i])) {\n tokens[i] = unitConversions[tokens[i]];\n }\n\n if (Object.prototype.hasOwnProperty.call(britishConversions, tokens[i])) {\n tokens[i] = britishConversions[tokens[i]];\n }\n\n if (Object.prototype.hasOwnProperty.call(typoCorrections, tokens[i])) {\n tokens[i] = typoCorrections[tokens[i]];\n }\n\n if (Object.prototype.hasOwnProperty.call(muhammadConversions, tokens[i])) {\n tokens[i] = muhammadConversions[tokens[i]];\n }\n\n if (tokens[i].endsWith('s') && tokens[i].length > 1 && isFinite(tokens[i].at(-2))) {\n tokens[i] = tokens[i].slice(0, -1);\n }\n\n tokens[i] = romanToWord(tokens[i]);\n\n if (isFinite(tokens[i])) {\n tokens[i] = parseInt(tokens[i]);\n tokens[i] = tokens[i] <= 100 ? toWords(tokens[i]) : tokens[i].toString();\n }\n }\n\n return tokens.sort();\n}\n","import referenceContainsTokens from './contains-tokens.js';\nimport generateUnformattedAnswers from './generate-unformatted-answers.js';\nimport getSpecialDirectives from './get-special-directives.js';\nimport splitIntoSections from './split-into-sections.js';\nimport splitSectionIntoParsedClauses from './split-section-into-clauses.js';\nimport tokenize from './tokenize.js';\nimport * as utils from './utils.js';\n\n/**\n * @param {string} string\n * @returns\n */\nfunction normalizeString (string) {\n return string\n .normalize('NFD').replace(/[\\u0300-\\u036f]/g, '') // replace special characters\n .toLowerCase()\n .replace(/\\(s\\)/g, 's') // standardize (s) -> s\n .replace(/[\"“‟❝”❞]/g, '\"') // replace all types of quotes with the same quote\n .replace(/[\\u2018-\\u201B]/g, '\\'') // replace all types of single quotes with the same quote\n .replace(/\\p{Pd}/gu, '-') // replace all dashes with the same dash\n .replace(/[\\u00B7\\u22C5\\u2027]/g, '') // interpuncts\n .replace(/<\\/?i>/g, ''); // remove italics\n}\n\n/**\n * Check if the given answer matches the answerline.\n * @param {string} answerline\n * @param {string} givenAnswer\n * @param {number} [strictness]\n * @param {boolean} [verbose] - whether to print debug information\n * @returns {{directive: \"accept\" | \"prompt\" | \"reject\", directedPrompt: string | undefined}}\n */\nfunction checkAnswer (answerline, givenAnswer, strictness = 7, verbose = false) {\n if (typeof answerline !== 'string' || typeof givenAnswer !== 'string') {\n return { directive: 'reject', directedPrompt: undefined };\n }\n\n if (answerline === '' || givenAnswer === '') {\n return { directive: 'reject', directedPrompt: undefined };\n }\n\n const isFormattedAnswerline = /<u>/.test(answerline);\n\n answerline = normalizeString(answerline);\n\n givenAnswer = normalizeString(givenAnswer);\n givenAnswer = utils.removePunctuation(givenAnswer);\n const givenAnswerTokens = tokenize(givenAnswer, true);\n\n const sections = splitIntoSections(answerline);\n const parsedClauses = sections.flatMap((section, index) => splitSectionIntoParsedClauses(section, index === 0));\n const mainAnswer = parsedClauses[0].formattedAnswers[0];\n\n if (!isFormattedAnswerline && mainAnswer?.length > 1 && givenAnswer.length === 1 && isNaN(givenAnswer)) {\n return { directive: 'reject' };\n }\n\n for (const specialDirective of getSpecialDirectives(answerline)) {\n if (specialDirective === 'accept either') {\n parsedClauses.push({ directive: 'accept', formattedAnswers: mainAnswer.split(' ') });\n }\n\n if (specialDirective === 'prompt on partial') {\n parsedClauses.push({ directive: 'prompt', formattedAnswers: mainAnswer.split(' ') });\n }\n }\n\n parsedClauses.sort((a, b) => (a.directive === 'reject' ? -1 : 1) - (b.directive === 'reject' ? -1 : 1));\n\n for (const { directive, formattedAnswers, directedPrompt, isMainAnswer } of parsedClauses) {\n for (const formattedAnswer of formattedAnswers) {\n for (const unformattedAnswer of generateUnformattedAnswers(formattedAnswer, isMainAnswer)) {\n const tokens = tokenize(unformattedAnswer, true);\n\n const matches = referenceContainsTokens(\n isFormattedAnswerline || directive === 'reject' ? tokens : givenAnswerTokens,\n isFormattedAnswerline || directive === 'reject' ? givenAnswerTokens : tokens,\n directive === 'reject' ? -1 : strictness,\n !isFormattedAnswerline,\n directive !== 'reject'\n );\n\n if (matches) { return { directive, directedPrompt }; }\n }\n }\n }\n\n return { directive: 'reject' };\n}\n\nexport default checkAnswer;\n","import { DIRECTIVES_FLATTENED } from './constants.js';\n\n/**\n * Removes parentheses and square brackets from a string.\n * @param {string} string - The input string.\n * @returns {string} The string with parentheses and square brackets removed.\n */\nfunction removeParentheses (string) {\n return string.replace(/\\([^)]*\\)/g, '').replace(/\\[[^\\]]*\\]/g, '');\n}\n\n/**\n *\n * @param {string} answerline\n * @returns {string[]} An array of **answer sections**, where the first element is the **main answer section**.\n */\nexport default function splitIntoSections (answerline) {\n const mainSection = removeParentheses(answerline);\n\n let bracketSections = answerline.match(/(?<=\\[)[^\\]]*(?=\\])/g) ?? [];\n let parenthesisSections = answerline.match(/(?<=\\()[^)]*(?=\\))/g) ?? [];\n\n bracketSections = bracketSections.filter(section => DIRECTIVES_FLATTENED.some(directive => section.startsWith(directive)));\n parenthesisSections = parenthesisSections.filter(section => DIRECTIVES_FLATTENED.some(directive => section.startsWith(directive)));\n\n return [mainSection, ...bracketSections, ...parenthesisSections];\n}\n","import { SPECIAL_DIRECTIVES } from './constants.js';\n\n/**\n * @param {string} answerline\n */\nexport default function getSpecialDirectives (answerline) {\n const directives = [];\n\n for (const directive of Object.keys(SPECIAL_DIRECTIVES)) {\n for (const phrase of SPECIAL_DIRECTIVES[directive]) {\n if (answerline.includes(phrase)) {\n directives.push(directive);\n }\n }\n }\n\n return directives;\n}\n"],"names":["damerau","i","j","s1","s2","d","cost","Math","min","apply","distance","undefined","length","initMatrix","charAt","module","exports","distanceProm","Promise","resolve","reject","result","minDistanceProm","list","Array","isArray","forEach","f","e","l","abs","self","g","global","n","r","o","s","zero","one","two","three","four","five","six","seven","eight","nine","ten","eleven","twelve","h","test","replace","a","t","p","v","b","y","c","m","w","x","parseInt","TypeError","RangeError","arguments","join","push","floor","M","toOrdinal","String","toWords","toWordsOrdinal","numberToWords","toArabic","toRoman","prototype","roman","toUpperCase","match","Error","arabic","upToTen","num","value","Number","isNaN","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","globalThis","this","Function","window","step2list","ational","tional","enci","anci","izer","bli","alli","entli","eli","ousli","ization","ation","ator","alism","iveness","fulness","ousness","aliti","iviti","biliti","logi","step3list","icate","ative","alize","iciti","ical","ful","ness","vowel","consonants","vowels","gt0","RegExp","eq1","gt1","vowelInStem","consonantLike","sfxLl","sfxE","sfxY","sfxIon","sfxEdOrIng","sfxAtOrBlOrIz","sfxEED","sfxS","sfxSsesOrIes","sfxMultiConsonantLike","step2","step3","step4","stemmer","toLowerCase","firstCharacterWasLowerCaseY","codePointAt","slice","exec","referenceContainsTokens","tokens","references","strictness","acceptSubstring","useStemmer","index","token","containsToken","reference","errors","includes","extractKeyWords","string","requiredWords","extractUnderlining","split","removeHTMLTags","filter","reduce","prev","curr","trim","extractQuotes","matches","removePunctuation","equivalentAnswers","hydrogen","helium","lithium","beryllium","boron","carbon","nitrogen","oxygen","fluorine","neon","sodium","magnesium","aluminum","silicon","phosphorus","sulfur","chlorine","argon","potassium","calcium","scandium","titanium","vanadium","chromium","manganese","iron","cobalt","nickel","copper","zinc","gallium","germanium","arsenic","selenium","bromine","krypton","rubidium","strontium","yttrium","zirconium","niobium","molybdenum","technetium","ruthenium","rhodium","palladium","silver","cadmium","indium","tin","antimony","tellurium","iodine","xenon","cesium","barium","lanthanum","cerium","praseodymium","neodymium","promethium","samarium","europium","gadolinium","terbium","dysprosium","holmium","erbium","thulium","ytterbium","lutetium","hafnium","tantalum","tungsten","rhenium","osmium","iridium","platinum","gold","mercury","thallium","lead","bismuth","polonium","astatine","radon","francium","radium","actinium","thorium","protactinium","uranium","neptunium","plutonium","americium","curium","berkelium","californium","einsteinium","fermium","mendelevium","nobelium","lawrencium","rutherfordium","dubnium","seaborgium","bohrium","hassium","meitnerium","darmstadtium","roentgenium","copernicium","nihonium","flerovium","moscovium","livermorium","tennessine","oganesson","nukes","fairytales","house","mouse","rail","railroad","spacewalk","spacewalks","sugarcane","wavefunction","superconductors","usa","getAbbreviation","map","generateUnformattedAnswers","formattedAnswer","isMainAnswer","answers","answer","DIRECTIVES","accept","prompt","DIRECTIVES_FLATTENED","Object","values","flat","SPECIAL_DIRECTIVES","getDirective","clause","directive","keys","phrase","startsWith","getDirectedPrompt","key","indexOf","directedPrompt","typoCorrections","contentinal","mittani","ludmilla","ordinalConversions","honorificConversions","dr","st","mr","mrs","ms","esq","jr","sr","rev","fr","prof","hon","pres","vp","gov","ofc","pr","br","rep","Mme","Mlle","Hr","Fr","unitConversions","kg","mol","cd","Hz","Pa","rad","W","J","V","Wb","F","Ohm","kat","lm","lx","Bq","Gy","Sv","in","ft","yd","mi","nmi","sqmi","gal","qt","pt","cup","britishConversions","colour","flavour","humour","labour","neighbour","odour","organize","leukaemia","manoeuvre","oestrogen","paediatric","muhammadConversions","muhammed","muhamad","mohammad","mohammed","mahammad","maxammed","mehemmed","mohamad","mohamed","romanToWord","message","tokenize","sort","hasOwnProperty","call","endsWith","isFinite","at","toString","normalizeString","normalize","answerline","givenAnswer","verbose","isFormattedAnswerline","givenAnswerTokens","parsedClauses","mainSection","bracketSections","parenthesisSections","section","some","splitIntoSections","flatMap","clauses","regex","formattedAnswers","splitSectionIntoParsedClauses","mainAnswer","specialDirective","directives","getSpecialDirectives","unformattedAnswer"],"sourceRoot":""}
1
+ {"version":3,"file":"main.mjs","mappings":"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","sources":["webpack://qb-answer-checker/./node_modules/damerau-levenshtein-js/app.js","webpack://qb-answer-checker/./node_modules/number-to-words/numberToWords.min.js","webpack://qb-answer-checker/./node_modules/roman-numerals/index.js","webpack://qb-answer-checker/./node_modules/roman-numerals/lib/toArabic.js","webpack://qb-answer-checker/./node_modules/roman-numerals/lib/toRoman.js","webpack://qb-answer-checker/webpack/bootstrap","webpack://qb-answer-checker/webpack/runtime/global","webpack://qb-answer-checker/./node_modules/stemmer/index.js","webpack://qb-answer-checker/./src/contains-tokens.js","webpack://qb-answer-checker/./src/utils.js","webpack://qb-answer-checker/./src/generate-unformatted-answers.js","webpack://qb-answer-checker/./src/constants.js","webpack://qb-answer-checker/./src/split-section-into-clauses.js","webpack://qb-answer-checker/./src/tokenize.js","webpack://qb-answer-checker/./src/check-answer.js","webpack://qb-answer-checker/./src/split-into-sections.js","webpack://qb-answer-checker/./src/get-special-directives.js"],"sourcesContent":["/**\n * MIT License\n *\n * Copyright (c) 2018 Fabvalaaah - fabvalaaah@laposte.net\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n/**\n * DISCLAIMER:\n * I am not responsible in any way of any consequence of the usage of this piece\n * of software. You are warned, use it at your own risks.\n */\n\nconst initMatrix = (s1, s2) => {\n /* istanbul ignore next */\n if (undefined == s1 || undefined == s2) {\n return null;\n }\n\n let d = [];\n for (let i = 0; i <= s1.length; i++) {\n d[i] = [];\n d[i][0] = i;\n }\n for (let j = 0; j <= s2.length; j++) {\n d[0][j] = j;\n }\n\n return d;\n};\n\nconst damerau = (i, j, s1, s2, d, cost) => {\n if (i > 1 && j > 1 && s1[i - 1] === s2[j - 2] && s1[i - 2] === s2[j - 1]) {\n d[i][j] = Math.min.apply(null, [d[i][j], d[i - 2][j - 2] + cost]);\n }\n};\n\nconst distance = (s1, s2) => {\n if (\n undefined == s1 ||\n undefined == s2 ||\n \"string\" !== typeof s1 ||\n \"string\" !== typeof s2\n ) {\n return -1;\n }\n\n let d = initMatrix(s1, s2);\n /* istanbul ignore next */\n if (null === d) {\n return -1;\n }\n for (var i = 1; i <= s1.length; i++) {\n let cost;\n for (let j = 1; j <= s2.length; j++) {\n if (s1.charAt(i - 1) === s2.charAt(j - 1)) {\n cost = 0;\n } else {\n cost = 1;\n }\n\n d[i][j] = Math.min.apply(null, [\n d[i - 1][j] + 1,\n d[i][j - 1] + 1,\n d[i - 1][j - 1] + cost,\n ]);\n\n damerau(i, j, s1, s2, d, cost);\n }\n }\n\n return d[s1.length][s2.length];\n};\n\nconst distanceProm = (s1, s2) =>\n new Promise((resolve, reject) => {\n let result = distance(s1, s2);\n if (0 <= result) {\n resolve(result);\n } else {\n reject(result);\n }\n });\n\nconst minDistanceProm = (s1, list) =>\n new Promise((resolve, reject) => {\n if (undefined == list || !Array.isArray(list)) {\n reject(-1);\n return;\n } else if (0 === list.length) {\n resolve(distance(s1, \"\"));\n return;\n }\n\n let min = -2;\n\n list.forEach((s2) => {\n let d = distance(s1, s2);\n if (-2 === min || d < min) {\n min = d;\n }\n });\n\n if (0 <= min) {\n resolve(min);\n } else {\n reject(min);\n }\n });\n\nmodule.exports = {\n distanceProm,\n distance,\n minDistanceProm,\n};\n","/*!\n * Number-To-Words util\n * @version v1.2.4\n * @link https://github.com/marlun78/number-to-words\n * @author Martin Eneqvist (https://github.com/marlun78)\n * @contributors Aleksey Pilyugin (https://github.com/pilyugin),Jeremiah Hall (https://github.com/jeremiahrhall),Adriano Melo (https://github.com/adrianomelo),dmrzn (https://github.com/dmrzn)\n * @license MIT\n */\n!function(){\"use strict\";var e=\"object\"==typeof self&&self.self===self&&self||\"object\"==typeof global&&global.global===global&&global||this,t=9007199254740991;function f(e){return!(\"number\"!=typeof e||e!=e||e===1/0||e===-1/0)}function l(e){return\"number\"==typeof e&&Math.abs(e)<=t}var n=/(hundred|thousand|(m|b|tr|quadr)illion)$/,r=/teen$/,o=/y$/,i=/(zero|one|two|three|four|five|six|seven|eight|nine|ten|eleven|twelve)$/,s={zero:\"zeroth\",one:\"first\",two:\"second\",three:\"third\",four:\"fourth\",five:\"fifth\",six:\"sixth\",seven:\"seventh\",eight:\"eighth\",nine:\"ninth\",ten:\"tenth\",eleven:\"eleventh\",twelve:\"twelfth\"};function h(e){return n.test(e)||r.test(e)?e+\"th\":o.test(e)?e.replace(o,\"ieth\"):i.test(e)?e.replace(i,a):e}function a(e,t){return s[t]}var u=10,d=100,p=1e3,v=1e6,b=1e9,y=1e12,c=1e15,g=9007199254740992,m=[\"zero\",\"one\",\"two\",\"three\",\"four\",\"five\",\"six\",\"seven\",\"eight\",\"nine\",\"ten\",\"eleven\",\"twelve\",\"thirteen\",\"fourteen\",\"fifteen\",\"sixteen\",\"seventeen\",\"eighteen\",\"nineteen\"],w=[\"zero\",\"ten\",\"twenty\",\"thirty\",\"forty\",\"fifty\",\"sixty\",\"seventy\",\"eighty\",\"ninety\"];function x(e,t){var n,r=parseInt(e,10);if(!f(r))throw new TypeError(\"Not a finite number: \"+e+\" (\"+typeof e+\")\");if(!l(r))throw new RangeError(\"Input is not a safe number, it’s either too large or too small.\");return n=function e(t){var n,r,o=arguments[1];if(0===t)return o?o.join(\" \").replace(/,$/,\"\"):\"zero\";o||(o=[]);t<0&&(o.push(\"minus\"),t=Math.abs(t));t<20?(n=0,r=m[t]):t<d?(n=t%u,r=w[Math.floor(t/u)],n&&(r+=\"-\"+m[n],n=0)):t<p?(n=t%d,r=e(Math.floor(t/d))+\" hundred\"):t<v?(n=t%p,r=e(Math.floor(t/p))+\" thousand,\"):t<b?(n=t%v,r=e(Math.floor(t/v))+\" million,\"):t<y?(n=t%b,r=e(Math.floor(t/b))+\" billion,\"):t<c?(n=t%y,r=e(Math.floor(t/y))+\" trillion,\"):t<=g&&(n=t%c,r=e(Math.floor(t/c))+\" quadrillion,\");o.push(r);return e(n,o)}(r),t?h(n):n}var M={toOrdinal:function(e){var t=parseInt(e,10);if(!f(t))throw new TypeError(\"Not a finite number: \"+e+\" (\"+typeof e+\")\");if(!l(t))throw new RangeError(\"Input is not a safe number, it’s either too large or too small.\");var n=String(t),r=Math.abs(t%100),o=11<=r&&r<=13,i=n.charAt(n.length-1);return n+(o?\"th\":\"1\"===i?\"st\":\"2\"===i?\"nd\":\"3\"===i?\"rd\":\"th\")},toWords:x,toWordsOrdinal:function(e){return h(x(e))}};\"undefined\"!=typeof exports?(\"undefined\"!=typeof module&&module.exports&&(exports=module.exports=M),exports.numberToWords=M):e.numberToWords=M}();","(function () {\n module.exports = {\n toArabic: require('./lib/toArabic.js'),\n toRoman:require('./lib/toRoman.js')\n };\n})();\n","(function () {\n var forEach = Array.prototype.forEach;\n\n\n /**\n * Converts a roman number to its arabic equivalent.\n *\n * Will throw TypeError on non-string inputs.\n *\n * @param {String} roman\n * @return {Number}\n */\n function toArabic (roman) {\n if (('string' !== typeof roman) && (!(roman instanceof String))) throw new TypeError('toArabic expects a string');\n\n // Zero is/was a special case. I'll go with Dionysius Exiguus on this one as\n // seen on http://en.wikipedia.org/wiki/Roman_numerals#Zero\n if (/^nulla$/i.test(roman) || !roman.length) return 0;\n\n // Ultra magical regexp to validate roman numbers!\n roman = roman.toUpperCase().match(/^(M{0,3})(CM|DC{0,3}|CD|C{0,3})(XC|LX{0,3}|XL|X{0,3})(IX|VI{0,3}|IV|I{0,3})$/);\n if (!roman) throw new Error('toArabic expects a valid roman number');\n var arabic = 0;\n\n // Crunching the thousands...\n arabic += roman[1].length * 1000;\n\n // Crunching the hundreds...\n if (roman[2] === 'CM') arabic += 900;\n else if (roman[2] === 'CD') arabic += 400;\n else arabic += roman[2].length * 100 + (roman[2][0] === 'D' ? 400 : 0);\n\n\n // Crunching the tenths\n if (roman[3] === 'XC') arabic += 90;\n else if (roman[3] === 'XL') arabic += 40;\n else arabic += roman[3].length * 10 + (roman[3][0] === 'L' ? 40 : 0);\n\n // Crunching the...you see where I'm going, right?\n if (roman[4] === 'IX') arabic += 9;\n else if (roman[4] === 'IV') arabic += 4;\n else arabic += roman[4].length * 1 + (roman[4][0] === 'V' ? 4 : 0);\n return arabic;\n };\n\n\n module.exports = toArabic;\n\n})();\n","(function () {\n /**\n * Generate the roman number for the current power of tenth\n *\n * @param {Number} num\n * @param {String} one\n * @param {String} five\n * @param {String} ten\n * @return {String}\n */\n function upToTen (num, one, five, ten) {\n var value = '';\n switch (num) {\n case 0: return value;\n case 9: return one + ten;\n case 4: return one + five;\n }\n if (num >= 5) value = five, num -= 5;\n while (num-- > 0) value += one;\n return value;\n }\n\n\n /**\n * Converts an arabic number from 0 to 3999 to its roman equivalent.\n *\n * Will throw TypeError on non-number inputs (stringed numbers are accepted)\n * or NaN and Error on number under 0 or over 3999.\n *\n * @param {Number/String} arabic\n * @return {String}\n */\n function toRoman (arabic) {\n // Checking input first with type comparisons, convert Number() instances to\n // a literal, etc...\n if (arabic instanceof Number) arabic = parseInt(arabic, 10);\n if ('string' === typeof arabic || arabic instanceof String) {\n arabic = parseInt(arabic, 10);\n if (isNaN(arabic)) throw new TypeError('toArabic expects a number');\n }\n if ('number' !== typeof arabic) throw new TypeError('toArabic expects a number');\n\n // Rounding up \"bad\" numbers: NaN, negative numbers, numbers over 3999,...\n if (isNaN(arabic)) throw new TypeError('toArabic expects a real number');\n if (arabic < 0) throw new Error('toArabic cannot express negative numbers');\n if (arabic > 3999) throw new Error('toArabic cannot express numbers over 3999');\n\n // Zero is/was a special case. I'll go with Dionysius Exiguus on this one as\n // seen on http://en.wikipedia.org/wiki/Roman_numerals#Zero\n if (arabic === 0) return 'nulla';\n var roman = '';\n\n // Chomping away by the power of tenths\n roman += upToTen(Math.floor(arabic / 1000), 'M', '', ''), arabic %= 1000;\n roman += upToTen(Math.floor(arabic / 100), 'C', 'D', 'M'), arabic %= 100;\n roman += upToTen(Math.floor(arabic / 10), 'X', 'L', 'C'), arabic %= 10;\n roman += upToTen(arabic, 'I', 'V', 'X');\n return roman;\n };\n\n\n module.exports = toRoman;\n\n})();\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","// Standard suffix manipulations.\n/** @type {Record<string, string>} */\nconst step2list = {\n ational: 'ate',\n tional: 'tion',\n enci: 'ence',\n anci: 'ance',\n izer: 'ize',\n bli: 'ble',\n alli: 'al',\n entli: 'ent',\n eli: 'e',\n ousli: 'ous',\n ization: 'ize',\n ation: 'ate',\n ator: 'ate',\n alism: 'al',\n iveness: 'ive',\n fulness: 'ful',\n ousness: 'ous',\n aliti: 'al',\n iviti: 'ive',\n biliti: 'ble',\n logi: 'log'\n}\n\n/** @type {Record<string, string>} */\nconst step3list = {\n icate: 'ic',\n ative: '',\n alize: 'al',\n iciti: 'ic',\n ical: 'ic',\n ful: '',\n ness: ''\n}\n\n// Consonant-vowel sequences.\nconst consonant = '[^aeiou]'\nconst vowel = '[aeiouy]'\nconst consonants = '(' + consonant + '[^aeiouy]*)'\nconst vowels = '(' + vowel + '[aeiou]*)'\n\nconst gt0 = new RegExp('^' + consonants + '?' + vowels + consonants)\nconst eq1 = new RegExp(\n '^' + consonants + '?' + vowels + consonants + vowels + '?$'\n)\nconst gt1 = new RegExp('^' + consonants + '?(' + vowels + consonants + '){2,}')\nconst vowelInStem = new RegExp('^' + consonants + '?' + vowel)\nconst consonantLike = new RegExp('^' + consonants + vowel + '[^aeiouwxy]$')\n\n// Exception expressions.\nconst sfxLl = /ll$/\nconst sfxE = /^(.+?)e$/\nconst sfxY = /^(.+?)y$/\nconst sfxIon = /^(.+?(s|t))(ion)$/\nconst sfxEdOrIng = /^(.+?)(ed|ing)$/\nconst sfxAtOrBlOrIz = /(at|bl|iz)$/\nconst sfxEED = /^(.+?)eed$/\nconst sfxS = /^.+?[^s]s$/\nconst sfxSsesOrIes = /^.+?(ss|i)es$/\nconst sfxMultiConsonantLike = /([^aeiouylsz])\\1$/\nconst step2 =\n /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/\nconst step3 = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/\nconst step4 =\n /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/\n\n/**\n * Get the stem from a given value.\n *\n * @param {string} value\n * Value to stem.\n * @returns {string}\n * Stem for `value`\n */\n// eslint-disable-next-line complexity\nexport function stemmer(value) {\n let result = String(value).toLowerCase()\n\n // Exit early.\n if (result.length < 3) {\n return result\n }\n\n /** @type {boolean} */\n let firstCharacterWasLowerCaseY = false\n\n // Detect initial `y`, make sure it never matches.\n if (\n result.codePointAt(0) === 121 // Lowercase Y\n ) {\n firstCharacterWasLowerCaseY = true\n result = 'Y' + result.slice(1)\n }\n\n // Step 1a.\n if (sfxSsesOrIes.test(result)) {\n // Remove last two characters.\n result = result.slice(0, -2)\n } else if (sfxS.test(result)) {\n // Remove last character.\n result = result.slice(0, -1)\n }\n\n /** @type {RegExpMatchArray|null} */\n let match\n\n // Step 1b.\n if ((match = sfxEED.exec(result))) {\n if (gt0.test(match[1])) {\n // Remove last character.\n result = result.slice(0, -1)\n }\n } else if ((match = sfxEdOrIng.exec(result)) && vowelInStem.test(match[1])) {\n result = match[1]\n\n if (sfxAtOrBlOrIz.test(result)) {\n // Append `e`.\n result += 'e'\n } else if (sfxMultiConsonantLike.test(result)) {\n // Remove last character.\n result = result.slice(0, -1)\n } else if (consonantLike.test(result)) {\n // Append `e`.\n result += 'e'\n }\n }\n\n // Step 1c.\n if ((match = sfxY.exec(result)) && vowelInStem.test(match[1])) {\n // Remove suffixing `y` and append `i`.\n result = match[1] + 'i'\n }\n\n // Step 2.\n if ((match = step2.exec(result)) && gt0.test(match[1])) {\n result = match[1] + step2list[match[2]]\n }\n\n // Step 3.\n if ((match = step3.exec(result)) && gt0.test(match[1])) {\n result = match[1] + step3list[match[2]]\n }\n\n // Step 4.\n if ((match = step4.exec(result))) {\n if (gt1.test(match[1])) {\n result = match[1]\n }\n } else if ((match = sfxIon.exec(result)) && gt1.test(match[1])) {\n result = match[1]\n }\n\n // Step 5.\n if (\n (match = sfxE.exec(result)) &&\n (gt1.test(match[1]) ||\n (eq1.test(match[1]) && !consonantLike.test(match[1])))\n ) {\n result = match[1]\n }\n\n if (sfxLl.test(result) && gt1.test(result)) {\n result = result.slice(0, -1)\n }\n\n // Turn initial `Y` back to `y`.\n if (firstCharacterWasLowerCaseY) {\n result = 'y' + result.slice(1)\n }\n\n return result\n}\n","import { distance } from 'damerau-levenshtein-js';\nimport { stemmer } from 'stemmer';\n\n/**\n * Check if all elements of `tokens` are present in `reference`.\n * @param {string[]} tokens\n * @param {string[]} references\n * @param {number} strictness\n * @param {boolean} acceptSubstring\n * @param {boolean} useStemmer\n */\nexport default function referenceContainsTokens (tokens, references, strictness, acceptSubstring, useStemmer) {\n let index = 0;\n for (const token of tokens) {\n let containsToken = false;\n while (index < references.length) {\n const reference = references[index];\n index++;\n const errors = useStemmer ? distance(stemmer(token), stemmer(reference)) : distance(token, reference);\n\n if (strictness > 0 && strictness * errors <= reference.length) {\n containsToken = true;\n break;\n }\n\n if (acceptSubstring && reference.includes(token)) {\n containsToken = true;\n break;\n }\n\n if (errors === 0) {\n containsToken = true;\n break;\n }\n }\n\n if (!containsToken) { return false; }\n }\n\n return true;\n}\n","/**\n * Get all words which are partially or wholly underlined.\n * @param {string} string\n * @returns {string}\n */\nfunction extractKeyWords (string) {\n const requiredWords = extractUnderlining(string).split(' ');\n\n string = string\n .split(' ')\n .filter(token => token.length > 0)\n .filter(token => token.match(/<\\/?u>/) || requiredWords.includes(token))\n .reduce((prev, curr) => prev + curr + ' ', '')\n .trim();\n\n return removeHTMLTags(string);\n}\n\n/**\n * Extracts the text in quotes from a given string.\n * @param {string} string - The input string.\n * @returns {string} - The extracted quotes or the string without HTML tags.\n */\nfunction extractQuotes (string) {\n const matches = string.match(/\"[^\"]*(?=[\"])/g)?.map(match => match.slice(1));\n\n if (matches) {\n return removeHTMLTags(matches.reduce((prev, curr) => prev + ' ' + curr, '').trim());\n } else {\n return removeHTMLTags(string);\n }\n}\n\n/**\n * Extracts the underlined text from a string.\n * If no underlined text is found, it removes HTML tags from the string.\n * @param {string} string - The input string.\n * @returns {string} - The extracted underlined text or the string without HTML tags.\n */\nfunction extractUnderlining (string) {\n const matches = string.match(/<u>[^<]*(?=<\\/u>)/g)?.map(match => match.slice(3));\n\n if (matches) {\n return removeHTMLTags(matches.reduce((prev, curr) => prev + curr + ' ', '').trim());\n } else {\n return removeHTMLTags(string);\n }\n}\n\n/**\n * Removes HTML tags from a string.\n * @param {string} string\n * @returns {string}\n */\nfunction removeHTMLTags (string) {\n return string.replace(/<[^>]*>/g, '');\n}\n\nfunction removePunctuation (string) {\n return string.replace(/[.,!;:'\"\\\\/?@#$%^&*_~’]/g, '');\n}\n\nexport {\n extractKeyWords,\n extractQuotes,\n extractUnderlining,\n removeHTMLTags,\n removePunctuation\n};\n","import * as utils from './utils.js';\n\nconst elements = {\n hydrogen: ['h'],\n helium: ['he'],\n lithium: ['li'],\n beryllium: ['be'],\n boron: ['b'],\n carbon: ['c'],\n nitrogen: ['n'],\n oxygen: ['o'],\n fluorine: ['f'],\n neon: ['ne'],\n sodium: ['na'],\n magnesium: ['mg'],\n aluminum: ['al'],\n silicon: ['si'],\n phosphorus: ['p'],\n sulfur: ['s'],\n chlorine: ['cl'],\n argon: ['ar'],\n potassium: ['k'],\n calcium: ['ca'],\n scandium: ['sc'],\n titanium: ['ti'],\n vanadium: ['v'],\n chromium: ['cr'],\n manganese: ['mn'],\n iron: ['fe'],\n cobalt: ['co'],\n nickel: ['ni'],\n copper: ['cu'],\n zinc: ['zn'],\n gallium: ['ga'],\n germanium: ['ge'],\n arsenic: ['as'],\n selenium: ['se'],\n bromine: ['br'],\n krypton: ['kr'],\n rubidium: ['rb'],\n strontium: ['sr'],\n yttrium: ['y'],\n zirconium: ['zr'],\n niobium: ['nb'],\n molybdenum: ['mo'],\n technetium: ['tc'],\n ruthenium: ['ru'],\n rhodium: ['rh'],\n palladium: ['pd'],\n silver: ['ag'],\n cadmium: ['cd'],\n indium: ['in'],\n tin: ['sn'],\n antimony: ['sb'],\n tellurium: ['te'],\n iodine: ['i'],\n xenon: ['xe'],\n cesium: ['cs'],\n barium: ['ba'],\n lanthanum: ['la'],\n cerium: ['ce'],\n praseodymium: ['pr'],\n neodymium: ['nd'],\n promethium: ['pm'],\n samarium: ['sm'],\n europium: ['eu'],\n gadolinium: ['gd'],\n terbium: ['tb'],\n dysprosium: ['dy'],\n holmium: ['ho'],\n erbium: ['er'],\n thulium: ['tm'],\n ytterbium: ['yb'],\n lutetium: ['lu'],\n hafnium: ['hf'],\n tantalum: ['ta'],\n tungsten: ['w'],\n rhenium: ['re'],\n osmium: ['os'],\n iridium: ['ir'],\n platinum: ['pt'],\n gold: ['au'],\n mercury: ['hg'],\n thallium: ['tl'],\n lead: ['pb'],\n bismuth: ['bi'],\n polonium: ['po'],\n astatine: ['at'],\n radon: ['rn'],\n francium: ['fr'],\n radium: ['ra'],\n actinium: ['ac'],\n thorium: ['th'],\n protactinium: ['pa'],\n uranium: ['u'],\n neptunium: ['np'],\n plutonium: ['pu'],\n americium: ['am'],\n curium: ['cm'],\n berkelium: ['bk'],\n californium: ['cf'],\n einsteinium: ['es'],\n fermium: ['fm'],\n mendelevium: ['md'],\n nobelium: ['no'],\n lawrencium: ['lr'],\n rutherfordium: ['rf'],\n dubnium: ['db'],\n seaborgium: ['sg'],\n bohrium: ['bh'],\n hassium: ['hs'],\n meitnerium: ['mt'],\n darmstadtium: ['ds'],\n roentgenium: ['rg'],\n copernicium: ['cn'],\n nihonium: ['nh'],\n flerovium: ['fl'],\n moscovium: ['mc'],\n livermorium: ['lv'],\n tennessine: ['ts'],\n oganesson: ['og']\n};\n\nconst equivalentAnswers = {\n ...elements,\n 'atomic bombs': ['atomic weapons', 'nuclear bombs', 'nuclear weapons', 'nukes', 'fission bombs', 'A-bombs'],\n 'nuclear weapons': ['atomic bombs', 'atomic weapons', 'nuclear bombs', 'nukes', 'fission bombs', 'A-bombs'],\n nukes: ['atomic bombs', 'atomic weapons', 'nuclear bombs', 'nuclear weapons', 'fission bombs', 'A-bombs'],\n fairytales: ['fairy tales'],\n 'fairy tales': ['fairytales'],\n house: ['home', 'dwelling', 'residence'],\n mouse: ['mice'],\n rail: ['railroad'],\n railroad: ['rail'],\n 'nineteen eighty-four': ['1984', 'nineteen eighty four'],\n 'nineteen eighty four': ['1984', 'nineteen eighty-four'],\n 'oxidation number': ['oxidation state'],\n 'oxidation state': ['oxidation number'],\n 'ralph vaughan-williams': ['rvw'],\n spacewalk: ['space walk'],\n spacewalks: ['space walk'],\n 'sugar cane': ['sugarcane'],\n sugarcane: ['sugar cane'],\n wavefunction: ['wave function'],\n 'wave function': ['wavefunction'],\n 'world war 1': ['first world war', 'great war', 'world war i', 'world war one'],\n 'world war i': ['first world war', 'great war', 'world war 1', 'world war one'],\n 'world war one': ['first world war', 'great war', 'world war 1', 'world war i'],\n 'world war ii': ['ww2', 'wwii', 'world war 2', 'world war two', 'second world war'],\n 'world war two': ['ww2', 'wwii', 'world war ii', 'world war 2', 'second world war'],\n 'world war 2': ['ww2', 'wwii', 'world war ii', 'world war two', 'second world war'],\n 'Kanye West': ['kayne', 'west'],\n superconductors: ['super conductors', 'super conductor'],\n 'baha\\' i': ['bahai'],\n 'united states of america': ['united states', 'usa', 'us', 'america'],\n 'the united states of america': ['united states', 'usa', 'us', 'america'],\n usa: ['united states', 'us', 'america']\n};\n\n/**\n * Get the abbreviation of a string by taking the first letter of each word.\n * For example, \"World Health Organization\" becomes \"WHO\".\n * @param {string} string\n * @returns {string}\n */\nfunction getAbbreviation (string) {\n return string\n .split(' ')\n .filter(token => token.length > 0)\n .map(token => utils.removeHTMLTags(token).charAt(0))\n .reduce((a, b) => a + b, '')\n .trim();\n}\n\n/**\n * @param {string} formattedAnswer\n * @param {boolean} isMainAnswer\n * @returns {string[]}\n */\nexport default function generateUnformattedAnswers (formattedAnswer, isMainAnswer) {\n if (/-/.test(formattedAnswer)) {\n const object1 = generateUnformattedAnswers(formattedAnswer.replace(/-/g, ' '), isMainAnswer);\n const object2 = generateUnformattedAnswers(formattedAnswer.replace(/-/g, ''), isMainAnswer);\n return [...object1, ...object2];\n }\n\n const answers = [\n utils.removeHTMLTags(formattedAnswer),\n utils.extractUnderlining(formattedAnswer),\n utils.extractKeyWords(formattedAnswer),\n utils.extractQuotes(formattedAnswer)\n ];\n\n if (isMainAnswer) {\n for (const answer of [formattedAnswer, utils.extractUnderlining(formattedAnswer)]) {\n const abbreviation = getAbbreviation(answer);\n if (abbreviation.length > 1) {\n answers.push(abbreviation);\n }\n }\n }\n\n if (answers[0] in equivalentAnswers) {\n answers.push(...equivalentAnswers[answers[0]]);\n }\n\n return answers.map(answer => utils.removePunctuation(answer));\n}\n","export const DIRECTIVES = {\n accept: ['accept', 'or', 'antiprompt on', 'anti-prompt on', 'antiprompt', 'anti-prompt'],\n prompt: ['prompt on', 'prompt'],\n reject: ['reject', 'do not accept or prompt on', 'do not accept']\n};\nexport const DIRECTIVES_FLATTENED = Object.values(DIRECTIVES).flat();\n\nexport const SPECIAL_DIRECTIVES = {\n 'accept either': ['accept either', 'accept any'],\n 'prompt on partial': ['prompt on partial', 'prompt on a partial', 'prompt on either']\n};\n","import { DIRECTIVES } from './constants.js';\nimport * as utils from './utils.js';\n\n/**\n * @param {string} clause\n * @returns {{directive: \"accept\" | \"prompt\" | \"reject\", clause: string}}\n */\nfunction getDirective (clause) {\n for (const directive of Object.keys(DIRECTIVES)) {\n for (const phrase of DIRECTIVES[directive]) {\n if (clause.startsWith(phrase)) {\n clause = clause.replace(phrase, '').trim();\n return { directive, clause };\n }\n }\n }\n\n return { directive: 'accept', clause };\n}\n\n/**\n * @param {string} clause\n */\nfunction getDirectedPrompt (clause) {\n for (const key of ['by asking', 'with']) {\n const index = clause.indexOf(key);\n if (index < 0) { continue; }\n\n const directedPrompt = utils.extractQuotes(clause.slice(index + key.length));\n clause = clause.slice(0, index).trim();\n return { directedPrompt, clause };\n }\n\n return { clause };\n}\n\n/**\n * @param {string} section\n * @param {boolean} isMainAnswer\n */\nexport default function splitSectionIntoParsedClauses (section, isMainAnswer) {\n const clauses = section.split(';').map(clause => clause.trim());\n const regex = isMainAnswer ? /,? or / : /,? or |, /;\n const parsedClauses = [];\n\n for (let clause of clauses) {\n let directive;\n ({ directive, clause } = getDirective(clause));\n let directedPrompt;\n if (directive === 'prompt') {\n ({ directedPrompt, clause } = getDirectedPrompt(clause));\n }\n\n let formattedAnswers = clause.split(regex);\n formattedAnswers = formattedAnswers.map(token => token.trim()).filter(token => token.length > 0);\n parsedClauses.push({ directive, formattedAnswers, directedPrompt, isMainAnswer });\n }\n\n return parsedClauses;\n}\n","import numberToWords from 'number-to-words';\nimport { toArabic } from 'roman-numerals';\n\nconst { toWords } = numberToWords;\n\nconst typoCorrections = {\n сontainor: 'container',\n сontainors: 'containers',\n сontains: 'contains',\n contentinal: 'continental',\n évaluate: 'evaluate',\n mittani: 'mitanni',\n ludmilla: 'lyudmila'\n};\n\nconst ordinalConversions = {\n '1st': 'first',\n '2nd': 'second',\n '3rd': 'third',\n '4th': 'fourth',\n '5th': 'fifth',\n '6th': 'sixth',\n '7th': 'seventh',\n '8th': 'eighth',\n '9th': 'ninth',\n '10th': 'tenth',\n '11th': 'eleventh',\n '12th': 'twelfth',\n '13th': 'thirteenth',\n '14th': 'fourteenth',\n '15th': 'fifteenth',\n '16th': 'sixteenth',\n '17th': 'seventeenth',\n '18th': 'eighteenth',\n '19th': 'nineteenth',\n '20th': 'twentieth',\n '30th': 'thirtieth',\n '40th': 'fortieth',\n '50th': 'fiftieth',\n '60th': 'sixtieth',\n '70th': 'seventieth',\n '80th': 'eightieth',\n '90th': 'ninetieth'\n};\n\nconst honorificConversions = {\n dr: 'doctor',\n st: 'saint',\n mr: 'mister',\n mrs: 'missus',\n ms: 'miss',\n esq: 'esquire',\n jr: 'junior',\n sr: 'senior',\n rev: 'reverend',\n fr: 'father',\n prof: 'professor',\n hon: 'honorable',\n pres: 'president',\n vp: 'vice president',\n gov: 'governor',\n ofc: 'officer',\n pr: 'pastor',\n br: 'brother',\n rep: 'representative',\n // 'M': 'Monsieur', this might convert things that are not honorifics.\n Mme: 'Madame',\n Mlle: 'Mademoiselle',\n Hr: 'Herr',\n Fr: 'Frau'\n};\n\n// XXX: There will most definatly be cases where this dictionary might erroneously convert a non-unit word to a unit.\n// For example, \"in\" could be a preposition or an abbreviation for \"inch\".\n// As a concequence, some single letter abbeviations are commented out for now.\nconst unitConversions = {\n // SI units\n // 's': 'second',\n // 'm': 'metere',\n kg: 'kilogram',\n mol: 'mole',\n cd: 'candela',\n // 'A': 'ampere',\n // 'K': 'kelvin',\n // 22 Derived units\n Hz: 'hertz',\n // 'N': 'newton',\n Pa: 'pascal',\n rad: 'radian',\n // 'sr': 'steradian',\n W: 'watt',\n // 'C': 'coulomb', // might be speed of light?\n J: 'joule',\n V: 'volt',\n Wb: 'weber',\n F: 'farad',\n Ohm: 'ohm',\n Ω: 'ohm',\n // 'S': 'siemens',\n kat: 'katal',\n lm: 'lumen',\n lx: 'lux',\n Bq: 'becquerel',\n Gy: 'gray',\n Sv: 'sievert',\n // imperical units\n in: 'inch',\n ft: 'foot',\n yd: 'yard',\n mi: 'mile',\n nmi: 'nautical mile',\n sqmi: 'square mile',\n gal: 'gallon',\n qt: 'quart',\n pt: 'pint',\n cup: 'cup'\n};\n\n// very humourous, in'it?\nconst britishConversions = {\n colour: 'color',\n flavour: 'flavor',\n humour: 'humor',\n labour: 'labor',\n neighbour: 'neighbor',\n odour: 'odor',\n organize: 'organise',\n leukaemia: 'leukemia',\n manoeuvre: 'maneuver',\n oestrogen: 'estrogen',\n paediatric: 'pediatric'\n};\n\nconst muhammadConversions = {\n muhammed: 'muhammad',\n muhamad: 'muhammad',\n mohammad: 'muhammad',\n mohammed: 'muhammad',\n mahammad: 'muhammad',\n maxammed: 'muhammad',\n mehemmed: 'muhammad',\n mohamad: 'muhammad',\n mohamed: 'muhammad'\n};\n\n/**\n * Tries to interpret token as a roman numeral and convert it to a word.\n * @param {string} token\n */\nfunction romanToWord (token) {\n try {\n token = toArabic(token);\n } catch (e) {\n if (e.message !== 'toArabic expects a valid roman number' && !(e instanceof TypeError)) {\n throw e;\n } else {\n return token;\n }\n }\n return toWords(token);\n}\n\n/**\n * Generates standardized tokens from a string.\n * @param {string} string\n * @param {boolean} sort - Whether to sort the tokens alphabetically before returning.\n */\nexport default function tokenize (string, sort = false) {\n const tokens = string.split(' ').filter(token => token.length > 0);\n\n for (let i = 0; i <= tokens.length - 1; i++) {\n if (Object.prototype.hasOwnProperty.call(ordinalConversions, tokens[i])) {\n tokens[i] = ordinalConversions[tokens[i]];\n }\n\n if (Object.prototype.hasOwnProperty.call(honorificConversions, tokens[i])) {\n tokens[i] = honorificConversions[tokens[i]];\n }\n\n if (Object.prototype.hasOwnProperty.call(unitConversions, tokens[i])) {\n tokens[i] = unitConversions[tokens[i]];\n }\n\n if (Object.prototype.hasOwnProperty.call(britishConversions, tokens[i])) {\n tokens[i] = britishConversions[tokens[i]];\n }\n\n if (Object.prototype.hasOwnProperty.call(typoCorrections, tokens[i])) {\n tokens[i] = typoCorrections[tokens[i]];\n }\n\n if (Object.prototype.hasOwnProperty.call(muhammadConversions, tokens[i])) {\n tokens[i] = muhammadConversions[tokens[i]];\n }\n\n if (tokens[i].endsWith('s') && tokens[i].length > 1 && isFinite(tokens[i].at(-2))) {\n tokens[i] = tokens[i].slice(0, -1);\n }\n\n tokens[i] = romanToWord(tokens[i]);\n\n if (isFinite(tokens[i])) {\n tokens[i] = parseInt(tokens[i]);\n tokens[i] = tokens[i] <= 100 ? toWords(tokens[i]) : tokens[i].toString();\n }\n }\n\n return tokens.sort();\n}\n","import referenceContainsTokens from './contains-tokens.js';\nimport generateUnformattedAnswers from './generate-unformatted-answers.js';\nimport getSpecialDirectives from './get-special-directives.js';\nimport splitIntoSections from './split-into-sections.js';\nimport splitSectionIntoParsedClauses from './split-section-into-clauses.js';\nimport tokenize from './tokenize.js';\nimport * as utils from './utils.js';\n\n/**\n * @param {string} string\n * @returns\n */\nfunction normalizeString (string) {\n return string\n .normalize('NFD').replace(/[\\u0300-\\u036f]/g, '') // replace special characters\n .toLowerCase()\n .replace(/\\(s\\)/g, 's') // standardize (s) -> s\n .replace(/[\"“‟❝”❞]/g, '\"') // replace all types of quotes with the same quote\n .replace(/[\\u2018-\\u201B]/g, '\\'') // replace all types of single quotes with the same quote\n .replace(/\\p{Pd}/gu, '-') // replace all dashes with the same dash\n .replace(/[\\u00B7\\u22C5\\u2027]/g, '') // interpuncts\n .replace(/<\\/?i>/g, ''); // remove italics\n}\n\n/**\n * Check if the given answer matches the answerline.\n * @param {string} answerline\n * @param {string} givenAnswer\n * @param {number} [strictness]\n * @param {boolean} [verbose] - whether to print debug information\n * @returns {{directive: \"accept\" | \"prompt\" | \"reject\", directedPrompt: string | undefined}}\n */\nfunction checkAnswer (answerline, givenAnswer, strictness = 7, verbose = false) {\n if (typeof answerline !== 'string' || typeof givenAnswer !== 'string') {\n return { directive: 'reject', directedPrompt: undefined };\n }\n\n if (answerline === '' || givenAnswer === '') {\n return { directive: 'reject', directedPrompt: undefined };\n }\n\n if (typeof strictness !== 'number' || strictness < 0) {\n strictness = 7;\n }\n\n const isFormattedAnswerline = /<u>/.test(answerline);\n\n answerline = normalizeString(answerline);\n\n givenAnswer = normalizeString(givenAnswer);\n givenAnswer = utils.removePunctuation(givenAnswer);\n const givenAnswerTokens = tokenize(givenAnswer, true);\n\n const sections = splitIntoSections(answerline);\n const parsedClauses = sections.flatMap((section, index) => splitSectionIntoParsedClauses(section, index === 0));\n const mainAnswer = parsedClauses[0].formattedAnswers[0];\n\n if (!isFormattedAnswerline && mainAnswer?.length > 1 && givenAnswer.length === 1 && isNaN(givenAnswer)) {\n return { directive: 'reject' };\n }\n\n for (const specialDirective of getSpecialDirectives(answerline)) {\n if (specialDirective === 'accept either') {\n parsedClauses.push({ directive: 'accept', formattedAnswers: mainAnswer.split(' ') });\n }\n\n if (specialDirective === 'prompt on partial') {\n parsedClauses.push({ directive: 'prompt', formattedAnswers: mainAnswer.split(' ') });\n }\n }\n\n parsedClauses.sort((a, b) => (a.directive === 'reject' ? -1 : 1) - (b.directive === 'reject' ? -1 : 1));\n\n for (const { directive, formattedAnswers, directedPrompt, isMainAnswer } of parsedClauses) {\n for (const formattedAnswer of formattedAnswers) {\n for (const unformattedAnswer of generateUnformattedAnswers(formattedAnswer, isMainAnswer)) {\n if (unformattedAnswer === '') { continue; }\n\n const tokens = tokenize(unformattedAnswer, true);\n const matches = referenceContainsTokens(\n isFormattedAnswerline || directive === 'reject' ? tokens : givenAnswerTokens,\n isFormattedAnswerline || directive === 'reject' ? givenAnswerTokens : tokens,\n directive === 'reject' ? -1 : strictness,\n !isFormattedAnswerline,\n directive !== 'reject'\n );\n\n if (matches) { return { directive, directedPrompt }; }\n }\n }\n }\n\n return { directive: 'reject' };\n}\n\nexport default checkAnswer;\n","import { DIRECTIVES_FLATTENED } from './constants.js';\n\n/**\n * Removes parentheses and square brackets from a string.\n * @param {string} string - The input string.\n * @returns {string} The string with parentheses and square brackets removed.\n */\nfunction removeParentheses (string) {\n return string.replace(/\\([^)]*\\)/g, '').replace(/\\[[^\\]]*\\]/g, '');\n}\n\n/**\n *\n * @param {string} answerline\n * @returns {string[]} An array of **answer sections**, where the first element is the **main answer section**.\n */\nexport default function splitIntoSections (answerline) {\n const mainSection = removeParentheses(answerline);\n\n let bracketSections = answerline.match(/\\[[^\\]]*(?=\\])/g) ?? [];\n bracketSections = bracketSections.map(section => section.slice(1));\n let parenthesisSections = answerline.match(/\\([^)]*(?=\\))/g) ?? [];\n parenthesisSections = parenthesisSections.map(section => section.slice(1));\n\n bracketSections = bracketSections.filter(section => DIRECTIVES_FLATTENED.some(directive => section.startsWith(directive)));\n parenthesisSections = parenthesisSections.filter(section => DIRECTIVES_FLATTENED.some(directive => section.startsWith(directive)));\n\n return [mainSection, ...bracketSections, ...parenthesisSections];\n}\n","import { SPECIAL_DIRECTIVES } from './constants.js';\n\n/**\n * @param {string} answerline\n */\nexport default function getSpecialDirectives (answerline) {\n const directives = [];\n\n for (const directive of Object.keys(SPECIAL_DIRECTIVES)) {\n for (const phrase of SPECIAL_DIRECTIVES[directive]) {\n if (answerline.includes(phrase)) {\n directives.push(directive);\n }\n }\n }\n\n return directives;\n}\n"],"names":["damerau","i","j","s1","s2","d","cost","Math","min","apply","distance","undefined","length","initMatrix","charAt","module","exports","distanceProm","Promise","resolve","reject","result","minDistanceProm","list","Array","isArray","forEach","f","e","l","abs","self","g","global","n","r","o","s","zero","one","two","three","four","five","six","seven","eight","nine","ten","eleven","twelve","h","test","replace","a","t","p","v","b","y","c","m","w","x","parseInt","TypeError","RangeError","arguments","join","push","floor","M","toOrdinal","String","toWords","toWordsOrdinal","numberToWords","toArabic","toRoman","prototype","roman","toUpperCase","match","Error","arabic","upToTen","num","value","Number","isNaN","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","globalThis","this","Function","window","step2list","ational","tional","enci","anci","izer","bli","alli","entli","eli","ousli","ization","ation","ator","alism","iveness","fulness","ousness","aliti","iviti","biliti","logi","step3list","icate","ative","alize","iciti","ical","ful","ness","vowel","consonants","vowels","gt0","RegExp","eq1","gt1","vowelInStem","consonantLike","sfxLl","sfxE","sfxY","sfxIon","sfxEdOrIng","sfxAtOrBlOrIz","sfxEED","sfxS","sfxSsesOrIes","sfxMultiConsonantLike","step2","step3","step4","stemmer","toLowerCase","firstCharacterWasLowerCaseY","codePointAt","slice","exec","referenceContainsTokens","tokens","references","strictness","acceptSubstring","useStemmer","index","token","containsToken","reference","errors","includes","extractKeyWords","string","requiredWords","extractUnderlining","split","removeHTMLTags","filter","reduce","prev","curr","trim","extractQuotes","matches","map","removePunctuation","equivalentAnswers","hydrogen","helium","lithium","beryllium","boron","carbon","nitrogen","oxygen","fluorine","neon","sodium","magnesium","aluminum","silicon","phosphorus","sulfur","chlorine","argon","potassium","calcium","scandium","titanium","vanadium","chromium","manganese","iron","cobalt","nickel","copper","zinc","gallium","germanium","arsenic","selenium","bromine","krypton","rubidium","strontium","yttrium","zirconium","niobium","molybdenum","technetium","ruthenium","rhodium","palladium","silver","cadmium","indium","tin","antimony","tellurium","iodine","xenon","cesium","barium","lanthanum","cerium","praseodymium","neodymium","promethium","samarium","europium","gadolinium","terbium","dysprosium","holmium","erbium","thulium","ytterbium","lutetium","hafnium","tantalum","tungsten","rhenium","osmium","iridium","platinum","gold","mercury","thallium","lead","bismuth","polonium","astatine","radon","francium","radium","actinium","thorium","protactinium","uranium","neptunium","plutonium","americium","curium","berkelium","californium","einsteinium","fermium","mendelevium","nobelium","lawrencium","rutherfordium","dubnium","seaborgium","bohrium","hassium","meitnerium","darmstadtium","roentgenium","copernicium","nihonium","flerovium","moscovium","livermorium","tennessine","oganesson","nukes","fairytales","house","mouse","rail","railroad","spacewalk","spacewalks","sugarcane","wavefunction","superconductors","usa","generateUnformattedAnswers","formattedAnswer","isMainAnswer","answers","answer","abbreviation","DIRECTIVES","accept","prompt","DIRECTIVES_FLATTENED","Object","values","flat","SPECIAL_DIRECTIVES","getDirective","clause","directive","keys","phrase","startsWith","getDirectedPrompt","key","indexOf","directedPrompt","typoCorrections","contentinal","mittani","ludmilla","ordinalConversions","honorificConversions","dr","st","mr","mrs","ms","esq","jr","sr","rev","fr","prof","hon","pres","vp","gov","ofc","pr","br","rep","Mme","Mlle","Hr","Fr","unitConversions","kg","mol","cd","Hz","Pa","rad","W","J","V","Wb","F","Ohm","kat","lm","lx","Bq","Gy","Sv","in","ft","yd","mi","nmi","sqmi","gal","qt","pt","cup","britishConversions","colour","flavour","humour","labour","neighbour","odour","organize","leukaemia","manoeuvre","oestrogen","paediatric","muhammadConversions","muhammed","muhamad","mohammad","mohammed","mahammad","maxammed","mehemmed","mohamad","mohamed","romanToWord","message","tokenize","sort","hasOwnProperty","call","endsWith","isFinite","at","toString","normalizeString","normalize","answerline","givenAnswer","verbose","isFormattedAnswerline","givenAnswerTokens","parsedClauses","mainSection","bracketSections","section","parenthesisSections","some","splitIntoSections","flatMap","clauses","regex","formattedAnswers","splitSectionIntoParsedClauses","mainAnswer","specialDirective","directives","getSpecialDirectives","unformattedAnswer"],"sourceRoot":""}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "qb-answer-checker",
3
- "version": "1.1.4",
3
+ "version": "1.1.5",
4
4
  "type": "module",
5
5
  "description": "A package to automatically check/judge answers against quizbowl answerlines.",
6
6
  "main": "src/check-answer.js",
@@ -33,5 +33,6 @@
33
33
  "number-to-words": "^1.2.4",
34
34
  "roman-numerals": "^0.3.2",
35
35
  "stemmer": "^2.0.1"
36
- }
36
+ },
37
+ "types": "src/check-answer.d.ts"
37
38
  }
@@ -0,0 +1,9 @@
1
+ export function checkAnswer(
2
+ answerline: string,
3
+ givenAnswer: string,
4
+ strictness?: number,
5
+ verbose?: boolean
6
+ ): {
7
+ directive: "accept" | "prompt" | "reject";
8
+ directedPrompt?: string;
9
+ };
@@ -39,6 +39,10 @@ function checkAnswer (answerline, givenAnswer, strictness = 7, verbose = false)
39
39
  return { directive: 'reject', directedPrompt: undefined };
40
40
  }
41
41
 
42
+ if (typeof strictness !== 'number' || strictness < 0) {
43
+ strictness = 7;
44
+ }
45
+
42
46
  const isFormattedAnswerline = /<u>/.test(answerline);
43
47
 
44
48
  answerline = normalizeString(answerline);
@@ -70,8 +74,9 @@ function checkAnswer (answerline, givenAnswer, strictness = 7, verbose = false)
70
74
  for (const { directive, formattedAnswers, directedPrompt, isMainAnswer } of parsedClauses) {
71
75
  for (const formattedAnswer of formattedAnswers) {
72
76
  for (const unformattedAnswer of generateUnformattedAnswers(formattedAnswer, isMainAnswer)) {
73
- const tokens = tokenize(unformattedAnswer, true);
77
+ if (unformattedAnswer === '') { continue; }
74
78
 
79
+ const tokens = tokenize(unformattedAnswer, true);
75
80
  const matches = referenceContainsTokens(
76
81
  isFormattedAnswerline || directive === 'reject' ? tokens : givenAnswerTokens,
77
82
  isFormattedAnswerline || directive === 'reject' ? givenAnswerTokens : tokens,
@@ -192,8 +192,12 @@ export default function generateUnformattedAnswers (formattedAnswer, isMainAnswe
192
192
  ];
193
193
 
194
194
  if (isMainAnswer) {
195
- answers.push(getAbbreviation(formattedAnswer));
196
- answers.push(getAbbreviation(utils.extractUnderlining(formattedAnswer)));
195
+ for (const answer of [formattedAnswer, utils.extractUnderlining(formattedAnswer)]) {
196
+ const abbreviation = getAbbreviation(answer);
197
+ if (abbreviation.length > 1) {
198
+ answers.push(abbreviation);
199
+ }
200
+ }
197
201
  }
198
202
 
199
203
  if (answers[0] in equivalentAnswers) {
@@ -17,8 +17,10 @@ function removeParentheses (string) {
17
17
  export default function splitIntoSections (answerline) {
18
18
  const mainSection = removeParentheses(answerline);
19
19
 
20
- let bracketSections = answerline.match(/(?<=\[)[^\]]*(?=\])/g) ?? [];
21
- let parenthesisSections = answerline.match(/(?<=\()[^)]*(?=\))/g) ?? [];
20
+ let bracketSections = answerline.match(/\[[^\]]*(?=\])/g) ?? [];
21
+ bracketSections = bracketSections.map(section => section.slice(1));
22
+ let parenthesisSections = answerline.match(/\([^)]*(?=\))/g) ?? [];
23
+ parenthesisSections = parenthesisSections.map(section => section.slice(1));
22
24
 
23
25
  bracketSections = bracketSections.filter(section => DIRECTIVES_FLATTENED.some(directive => section.startsWith(directive)));
24
26
  parenthesisSections = parenthesisSections.filter(section => DIRECTIVES_FLATTENED.some(directive => section.startsWith(directive)));
package/src/utils.js CHANGED
@@ -22,7 +22,7 @@ function extractKeyWords (string) {
22
22
  * @returns {string} - The extracted quotes or the string without HTML tags.
23
23
  */
24
24
  function extractQuotes (string) {
25
- const matches = string.match(/(?<=["])[^"]*(?=["])/g);
25
+ const matches = string.match(/"[^"]*(?=["])/g)?.map(match => match.slice(1));
26
26
 
27
27
  if (matches) {
28
28
  return removeHTMLTags(matches.reduce((prev, curr) => prev + ' ' + curr, '').trim());
@@ -38,7 +38,7 @@ function extractQuotes (string) {
38
38
  * @returns {string} - The extracted underlined text or the string without HTML tags.
39
39
  */
40
40
  function extractUnderlining (string) {
41
- const matches = string.match(/(?<=<u>)[^<]*(?=<\/u>)/g);
41
+ const matches = string.match(/<u>[^<]*(?=<\/u>)/g)?.map(match => match.slice(3));
42
42
 
43
43
  if (matches) {
44
44
  return removeHTMLTags(matches.reduce((prev, curr) => prev + curr + ' ', '').trim());
@@ -1,6 +1,8 @@
1
1
  Directive,Given,Directed Prompt,Answer Line
2
+ reject,a,,<b><u>Weimar Republic</u></b>; prompt on “<b>Deutsches Reich</b>” or “<b>Germany</b>”
2
3
  accept,usa,,<b><u>U</u></b>nited <b><u>S</u></b>tates of America
3
4
  accept,america,,<b><u>U</u></b>nited <b><u>S</u></b>tates of America
5
+ reject,u,,<b><u>USA</u></b>
4
6
  accept,united states,,<b><u>USA</u></b>
5
7
  accept,america,,<b><u>USA</u></b>
6
8
  accept,Ruslan and Ludmilla,,<b><u>Ruslan and Lyudmila</u></b>