原案:Uniden
解説:RedSpica
まず「Brainfuckで解く」という制限を外して,普通の競技プログラミングの問題として考えてみましょう.するとこの問題は「となるに対してを出力せよ」となります.
そして,以下の命題が得られます.
ただし,は文字コードを返す関数です.この命題を利用して以下のようなコードが書くことができると思います.
c=input() S=input() i=0 while ord(c)-ord(S[i]): i+=1 print(S[i+1])
ではこれをBrainfuckで実装するとどのようになるでしょうか.Brainfuckでも先ほどのPythonのコードとほぼ同じように「を先頭から入力していく.今見ている(入力を受け取った)文字がと一致するならばループを終了し次に受け取った文字をそのまま入力する,一致しない場合は繰り返す」という流れになります.
実装上の注意として,とを比較する際にを毎回どこかに保存しておくようにしてください(詳しくは実装を見てください).
>, //2番目のポインタにcを入力する >,[-] // 改行を読み取って廃棄 + [ , //3番目のポインタにS_iを入力する <[<+>>-<-] //1番目のポインタにcをコピーしながら,3番目のポインタからord(c)を引く <[>+<-] //2番目のポインタにcをコピーする >> //ord(S_i)とord(c)の差が0かどうか判定する。 0の場合はループ終了 ] ,. //答えとなる文字を入出力