PHP、141バイト
for($a=count_chars($argn);$c=ord($s[++$p]?:$s=[OWU,W,HG,U,FU,X,SX,G,N17.$p=0][$i-print str_repeat($i++,$x)]);)$x=$a[$i+48]+=($p?-1:1)*$a[$c];
古いバージョン、151バイト:
for($a=count_chars($argn,1);$s=[OWU,W,HG,U,FU,X,SX,G,N17][+$i++];print str_repeat($i,$a[$i+48]))for($p=0;$c=ord($s[$p]);)$a[$i+48]+=($p++?-1:1)*$a[$c];
1から9までの数字をループし、単語内の一意の文字をカウントし、一意でない文字のカウントを減算して、移動中に数字を出力します。
外出先で印刷していますが、9
ケースが機能するためには桁数を保存する必要があります。
でパイプとして実行する-nR
か、オンラインで試してください。
ASCII を使用する$a[$i]
代わりに桁数を保存するためにさらに4バイトを節約し、$a[$i+48]
1
7
、数字自体の代わりに(引用符で)します。
壊す
for(
$a=count_chars($argn,1); # count character occurences in input
$s=[OWU,W,HG,U,FU,X,SX,G,N17][+$i++]; # loop through digit names
print str_repeat($i,$a[$i+48]) # print digit repeatedly
)
for($p=0;$c=ord($s[$p]);) # loop through name
$a[$i+48]+= # add to digit count
($p++?-1:1)* # (add first, subtract other)
$a[$c]; # character occurences
ONE
はを持つ唯一の単語ではないO
ため、W
(にのみ出現するTWO
)およびU
(にのみ出現するFOUR
)などのカウントを減算する必要があります。
NINE
文字を使用した場合(I-X-G-F+U
またはが必要な場合N-O-S+W+U+X
)を単に減算する方法がないため、代わりに桁数を使用します。
PHP、160バイト
$a=count_chars($argn);foreach([W2O,U4FOR,X6SI,G8I,F5I,O1,R3,S7,I9]as$s)for(${$s[$p=1]}+=$n=$a[ord($s)];$c=ord($s[++$p]);)$a[$c]-=$n;while($$i--?print$i:$i++<9);
すべて大文字の入力を想定しています。文字がスクランブルされる可能性があります。
でパイプとして実行する-nR
か、オンラインで試してください。
説明
数字の単語をループし、入力および他の文字のカウントを減らすプロセスでのユニークな文字の出現をカウントします。「その他のキャラクター」は、単語内の他のすべての文字を意味する場合があります。ただし、後で必要になるものだけを考慮して19バイトを節約しました。
変換 str_repeat
ループを結合ループにと、5バイト節約されました。
また、桁数に変数を使用すると、さらに8個節約できます。
壊す
$a=count_chars($argn); # count character occurences in input
foreach([W2O,U4FOR,X6SI,G8I,F5I,O1,R3,S7,I9]as$s) # loop through digit names
for(${$s[$p=1]}+= # 2. add to digits count
$n=$a[ord($s)]; # 1. get count of unique character
$c=ord($s[++$p]);) # 3. loop through other characters
$a[$c]-=$n; # reduce character count
while(
$$i--?print$i # print digit repeatedly
:$i++<9); # loop through digits