RLE Brainfuck
( BF-RLE に関連する)
Brainfuckの架空のRLE(ランレングス符号化)方言は、8つのコマンドのシンボルを受け入れます数字も受け入れます。数字は、コマンドの連続した繰り返しの数を表すために使用され、ソースコードのランレングス符号化を可能にする。
8>
is equal to
>>>>>>>>
.
長さは常にコマンドの左側にあります。
あなたの仕事は、入力文字列(RLE
Brainfuckフラグメント)を通常のBrainfuckプログラムに翻訳する最短のプログラム/関数を書くことです。
例えば:
入力:
10+[>+>3+>7+>10+4<-]3>2+.>+.7+2.3+.2<2+.>15+.>.3+.6-.8-.2<+.<.
Ouptut:
++++++++++[>+>+++>+++++++>++++++++++<<<<-]>>>++.>+.+++++++..+++.<<++.>+++++++++++++++.>.+++.------.--------.<<+.<.
各言語のバイト数で最短のコードが勝ちます。
ベストアンサー
Python
2, 62 61 bytes
lambda s:eval(re.sub('(d*)(.)',r'+1*1*1*"2"',s))
import re
The regex substitution expands 3<2+-
into the
string:
+1*3*1*"<"+1*2*1*"+"+1**1*"-"
それは eval
されます。 ( 1
が空の場合、 1 **
が得られます)最初の
1 = 1+
は、最初の数字、およびその他の
+
は文字列連結です。これはより明白な
lambda s:re.sub('(d+)(.)',lambda m:int(m.group(1))*m.group(2),s)
import re
14バイト。通常、 " 2"
は常に機能するとは限りませんが、ありがたいことに脳波コマンドではありません
xnor saved a byte, supplying the
1*1*1
trick. Previously I had 1L
in the
regex, and defined L=1
as a lambda argument, which is
also pretty cool: 3L
is a long int literal and
L
is a variable.