Next Favorite Alphabet

2 secs 1024 MB
Uniden

原案:Uniden

解説:RedSpica

まず「Brainfuckで解く」という制限を外して,普通の競技プログラミングの問題として考えてみましょう.するとこの問題は「となるに対してを出力せよ」となります.

そして,以下の命題が得られます.

ただし,は文字コードを返す関数です.この命題を利用して以下のようなコードが書くことができると思います.

実装例(Python)
c=input()
S=input()
i=0
while ord(c)-ord(S[i]):
    i+=1
print(S[i+1])

ではこれをBrainfuckで実装するとどのようになるでしょうか.Brainfuckでも先ほどのPythonのコードとほぼ同じように「を先頭から入力していく.今見ている(入力を受け取った)文字がと一致するならばループを終了し次に受け取った文字をそのまま入力する,一致しない場合は繰り返す」という流れになります.

実装上の注意として,を比較する際にを毎回どこかに保存しておくようにしてください(詳しくは実装を見てください).

実装例(Brainfuck)
>,                 //2番目のポインタにcを入力する
>,[-]              // 改行を読み取って廃棄
+
[
	,          //3番目のポインタにS_iを入力する
	<[<+>>-<-] //1番目のポインタにcをコピーしながら,3番目のポインタからord(c)を引く
	<[>+<-]    //2番目のポインタにcをコピーする
	>>         //ord(S_i)とord(c)の差が0かどうか判定する。 0の場合はループ終了
]
,.                 //答えとなる文字を入出力