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
하거나 온라인으로 사용해보십시오 .
그것은에 자리 수를 저장하기 위해 4 바이트 이상을 절약 할 수 $a[$i]
대신 $a[$i+48]
사용의 ASCII 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