anarchy golf - Morse decode公開あるいは etianmsurwdkgohvf,l.pjbxcyzq
問題を作った時には、モールス符号の短点と長点を 2 進数 x に見立てて (先頭に 1 を加えないといけませんが)、文字列 " etianmsurwdkgohvf l pjbxcyzq" の x 番目の文字にアクセスすると短くなるだろうから、後はコンマとピリオドをどう上手く工夫して表示させるかかな、と思っていました。
実際に解いてみたら、コンマとピリオドは後ろ 4 点だけにするとぴったり上の文字列の隙間に入ってしまい (" etianmsurwdkgohvf,l.pjbxcyzq") 驚きました。
字 | モールス符号 | 二進数化 | 頭に 1 をつけたもの |
---|---|---|---|
e | . | 0 | 10 |
t | - | 1 | 11 |
i | .. | 00 | 100 |
a | .- | 01 | 101 |
n | -. | 10 | 110 |
m | -- | 11 | 111 |
s | ... | 000 | 1000 |
u | ..- | 001 | 1001 |
r | .-. | 010 | 1010 |
w | .-- | 011 | 1011 |
d | -.. | 100 | 1100 |
l | -.- | 101 | 1101 |
g | --. | 110 | 1110 |
o | --- | 111 | 1111 |
h | .... | 0000 | 10000 |
v | ...- | 0001 | 10001 |
f | ..-. | 0010 | 10010 |
, | --..-- | 110011 | 1110011 |
l | .-.. | 0100 | 10100 |
. | .-.-.- | 010101 | 1010101 |
p | .--. | 0110 | 10110 |
j | .--- | 0111 | 10111 |
b | -... | 1000 | 11000 |
x | -..- | 1001 | 11001 |
c | -.-. | 1010 | 11010 |
y | -.-- | 1011 | 11011 |
z | --.. | 1100 | 11100 |
q | --.- | 1101 | 11101 |
Ruby ではモールス符号に何かよく分からない文字を加えてハッシュを計算して適当な数の剰余をとるという方法が短かったようですが、よくこんなマジックナンバー見つけるな、と思うのであります。
AWK や Groovy では短点と長点を 5 と 2 に置き換えて、云々とした方が短いようです。
追記:訂正。Groovy は Timeout を避けるためだそうです。murky-satyr さんご教示ありがとうございます。