JavaScript、169/195バイト
169バイトをソートする前に最初の文字を置き換えることができる場合
x=>x.map(k=>{for(i=0;i<26;)if(!k.indexOf("l,r,ha,e,c,ox,ol,ot,nd,uli,il,im,ik,ov,s,ap,ue,o,ie,ang,n,i,h,-,a,u".split`,`[i++]))return String.fromCharCode(i+64)+k}).sort()
オンラインでお試しください!
最初の文字を追加する前にソートを行う必要がある場合195バイト
x=>x.sort((a,b)=>g(a)-g(b)).map(a=>String.fromCharCode(g(a)+64)+a)
g=k=>{for(i=0;i<26;)if(!k.indexOf("l,r,ha,e,c,ox,ol,ot,nd,uli,il,im,ik,ov,s,ap,ue,o,ie,ang,n,i,h,-,a,u".split`,`[i++]))return i}
オンラインでお試しください!
これらの各プログラムの完全な20バイトは、文字を取り戻すためのString.fromCharCode()です...
別の69バイトは、発音アルファベットの各単語の始まりを一意に識別する文字列です。
最初の例の説明
for(i=0;i<26;)if(!k.indexOf("l,r,ha,e,c,ox,ol,ot,nd,uli,il,im,ik,ov,s,ap,ue,o,ie,ang,n,i,h,-,a,u".split
、[i++]))return i
ここでハードコーディングされた文字列は、最初の文字が削除された後に音声アルファベットワードを開始する一意の識別文字のリストに分けられます。
return String.fromCharCode(i+64)+k
この情報は、開始文字を戻すために、文字列がアルファベットに該当するインデックスを見つけるために使用されます。
.sort()
JavaScriptは暗黙的に文字のASCII値によって文字列としてソートします
2番目の例の説明
関数g = k => ...は、文字列が表音アルファベットに該当するインデックスを検索します。
.sort((a,b)=>g(a)-g(b))
g(...)を実行して返された数値で文字列を並べ替えます
.map(a=>String.fromCharCode(g(a)+64)+a)
各表音文字列の最初の文字を置き換えます