blob: 4ccde67d8b7ccba928b584c8df2b521b66184e46 (
plain) (
tree)
|
|
// Evol functions.
// Author:
// Reid
// Description:
// Riddle enigma validator
//
// Arguments
// 0 PC answer
// 1 English correct answer
// 2 Translated correct answer
// TODO: levenshtein(), similar_text(), and maybe even soundex()
function script riddlevalidation {
.@answer$ = strip(strtolower(getarg(0)));
.@good$ = strip(strtolower(getarg(1)));
.@good_translated$ = strip(strtolower(getarg(2)));
.@size_answer = getstrlen(.@answer$);
.@size_good = getstrlen(.@good$);
.@size_good_translated = getstrlen(.@good_translated$);
.@max = max(.@size_answer, .@size_good_translated, .@size_good);
// Input is too long.
if (.@max > 30) {
return false;
}
// if 90% of the word is correct
.@size_good *= 90;
.@size_good_translated *= 90;
freeloop(true);
for (.@i = 0; .@i < .@max; .@i++)
{
.@correct = 0;
.@correct_translated = 0;
for (.@k = .@k_translated = .@j = .@i; .@j < .@max; .@j++)
{
if (charat(.@answer$, .@j) == charat(.@good$, .@k)) {
.@correct++;
.@k++;
} else {
.@correct--;
}
if (charat(.@answer$, .@j) == charat(.@good_translated$, .@k_translated)) {
.@correct_translated++;
.@k_translated++;
} else {
.@correct_translated--;
}
}
// if 70% of the word is correct
.@correct *= 100;
.@correct_translated *= 100;
if (.@correct >= .@size_good ||
.@correct_translated >= .@size_good_translated) {
freeloop(false);
return true;
}
}
freeloop(false);
return false;
}
|