All checks were successful
Deploy Online Pages / Pages-Deployment (push) Successful in 22s
190 lines
7.0 KiB
JavaScript
190 lines
7.0 KiB
JavaScript
const consPhoneme = [
|
|
["b", "p", "f"],
|
|
["d", "t"],
|
|
["g", "k"],
|
|
["h", "f"],
|
|
["j", "q", "zh", "ch", "z", "c"],
|
|
["x", "sh", "s"],
|
|
["l", "r"],
|
|
["B", "P", "F"],
|
|
["D", "T"],
|
|
["G", "K"],
|
|
["H", "F"],
|
|
["J", "Q", "Zh", "Ch", "Z", "C"],
|
|
["X", "Sh", "S"],
|
|
["L", "R"],
|
|
["H", "F"]
|
|
];
|
|
const vowPhoneme = [
|
|
["ā", "á", "ǎ", "à"],
|
|
["ī", "í", "ǐ", "ì"],
|
|
["ū", "ú", "ǔ", "ù"],
|
|
["ē", "é", "ě", "è"],
|
|
["ō", "ó", "ǒ", "ò"],
|
|
["ng"]
|
|
];
|
|
let consPhonemeType;
|
|
let foundConsPhoneme = [];
|
|
let foundVowPhoneme = [];
|
|
let consWrongList = [];
|
|
let wrongList = [];
|
|
let consWrong;
|
|
let vowWrong;
|
|
let temp;
|
|
let temptemp;
|
|
let zhCheck = -1;
|
|
let chCheck = -1;
|
|
let shCheck = -1;
|
|
let ngCheck = -1;
|
|
let ZhCheck = -1;
|
|
let ChCheck = -1;
|
|
let ShCheck = -1;
|
|
let NgCheck = -1;
|
|
|
|
function mkWrongChoice(choice){
|
|
foundConsPhoneme = [];
|
|
foundVowPhoneme = [];
|
|
consWrongList = [];
|
|
wrongList = [];
|
|
//zh, ch, sh, ng の例外処理が必要
|
|
zhCheck = choice.indexOf("zh");
|
|
chCheck = choice.indexOf("ch");
|
|
shCheck = choice.indexOf("sh");
|
|
ngCheck = choice.indexOf("ng");
|
|
ZhCheck = choice.indexOf("Zh");
|
|
ChCheck = choice.indexOf("Ch");
|
|
ShCheck = choice.indexOf("Sh");
|
|
NgCheck = choice.indexOf("Ng");
|
|
|
|
//子音探索
|
|
for(let i = 0; i < consPhoneme.length; ++i){
|
|
for(let j = 0; j < consPhoneme[i].length; ++j){
|
|
if(choice.indexOf(consPhoneme[i][j]) != -1){
|
|
//hの例外処理
|
|
if(consPhoneme[i][j] == "h"){
|
|
if(zhCheck + chCheck + shCheck + ZhCheck + ChCheck + ShCheck > -6){
|
|
if(zhCheck + 1 == choice.indexOf(consPhoneme[i][j])){
|
|
continue;
|
|
}else if(chCheck + 1 == choice.indexOf(consPhoneme[i][j])){
|
|
continue;
|
|
}else if(shCheck + 1 == choice.indexOf(consPhoneme[i][j])){
|
|
continue;
|
|
}else if(ZhCheck + 1 == choice.indexOf(consPhoneme[i][j])){
|
|
continue;
|
|
}else if(ChCheck + 1 == choice.indexOf(consPhoneme[i][j])){
|
|
continue;
|
|
}else if(ShCheck + 1 == choice.indexOf(consPhoneme[i][j])){
|
|
continue;
|
|
}else{
|
|
foundConsPhoneme.push([i, j]);
|
|
}
|
|
}else{
|
|
foundConsPhoneme.push([i, j]);
|
|
}
|
|
//zの例外処理
|
|
}else if(consPhoneme[i][j] == "z" && zhCheck != -1){
|
|
if(zhCheck == choice.indexOf(consPhoneme[i][j])){
|
|
continue;
|
|
}else{
|
|
foundConsPhoneme.push([i, j]);
|
|
}
|
|
//cの例外処理
|
|
}else if(consPhoneme[i][j] == "c" && chCheck != -1){
|
|
if(chCheck == choice.indexOf(consPhoneme[i][j])){
|
|
continue;
|
|
}else{
|
|
foundConsPhoneme.push([i, j]);
|
|
}
|
|
//sの例外処理
|
|
}else if(consPhoneme[i][j] == "s" && shCheck != -1){
|
|
if(shCheck == choice.indexOf(consPhoneme[i][j])){
|
|
continue;
|
|
}else{
|
|
foundConsPhoneme.push([i, j]);
|
|
}
|
|
//Zの例外処理
|
|
}else if(consPhoneme[i][j] == "Z" && ZhCheck != -1){
|
|
if(ZhCheck == choice.indexOf(consPhoneme[i][j])){
|
|
continue;
|
|
}else{
|
|
foundConsPhoneme.push([i, j]);
|
|
}
|
|
//Cの例外処理
|
|
}else if(consPhoneme[i][j] == "C" && ChCheck != -1){
|
|
if(ChCheck == choice.indexOf(consPhoneme[i][j])){
|
|
continue;
|
|
}else{
|
|
foundConsPhoneme.push([i, j]);
|
|
}
|
|
//Sの例外処理
|
|
}else if(consPhoneme[i][j] == "S" && ShCheck != -1){
|
|
if(ShCheck == choice.indexOf(consPhoneme[i][j])){
|
|
continue;
|
|
}else{
|
|
foundConsPhoneme.push([i, j]);
|
|
}
|
|
//gの例外処理
|
|
}else if(consPhoneme[i][j] == "g"){
|
|
if(ngCheck + NgCheck > -2){
|
|
if(ngCheck + 1 == choice.indexOf(consPhoneme[i][j])){
|
|
continue;
|
|
}else if(NgCheck + 1 == choice.indexOf(consPhoneme[i][j])){
|
|
continue;
|
|
}else{
|
|
foundConsPhoneme.push([i, j]);
|
|
}
|
|
}else{
|
|
foundConsPhoneme.push([i, j]);
|
|
}
|
|
//例外でない状態
|
|
}else{
|
|
foundConsPhoneme.push([i, j]);
|
|
}
|
|
//素通り
|
|
}else{
|
|
continue;
|
|
}
|
|
}
|
|
}
|
|
//同グループの自分以外の子音に置換される
|
|
for(let i = 0; i < foundConsPhoneme.length; ++i){
|
|
for(let j = 0; j < consPhoneme[foundConsPhoneme[i][0]].length; j++){
|
|
if(j == foundConsPhoneme[i][1]) continue;
|
|
consWrong = choice.replace(consPhoneme[foundConsPhoneme[i][0]][foundConsPhoneme[i][1]], consPhoneme[foundConsPhoneme[i][0]][j])
|
|
consWrongList.push(consWrong)
|
|
}
|
|
}
|
|
consWrongList.push(choice)
|
|
|
|
//母音探索
|
|
for(let i = 0; i < vowPhoneme.length; ++i){
|
|
for(let j = 0; j < vowPhoneme[i].length; ++j){
|
|
if(choice.indexOf(vowPhoneme[i][j]) != -1){
|
|
foundVowPhoneme.push([i, j]);
|
|
}else{
|
|
continue;
|
|
}
|
|
}
|
|
}
|
|
//consWrongListの全語の母音が、同グループの自分以外の母音に置換される
|
|
for(let k = 0; k < consWrongList.length; ++k){
|
|
for(let i = 0; i < foundVowPhoneme.length; ++i){
|
|
if(vowPhoneme[foundVowPhoneme[i][0]][foundVowPhoneme[i][1]] == "ng"){
|
|
vowWrong = consWrongList[k].replace("ng", "n")
|
|
wrongList.push(vowWrong)
|
|
}else{
|
|
for(let j = 0; j < vowPhoneme[foundVowPhoneme[i][0]].length; j++){
|
|
if(j == foundVowPhoneme[i][1]) continue;
|
|
vowWrong = consWrongList[k].replace(vowPhoneme[foundVowPhoneme[i][0]][foundVowPhoneme[i][1]], vowPhoneme[foundVowPhoneme[i][0]][j])
|
|
wrongList.push(vowWrong)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
console.log({wrongList});
|
|
|
|
return wrongList;
|
|
}
|
|
|
|
mkWrongChoice("Zhōngguó");
|
|
mkWrongChoice("kuàngquánshuǐ"); |