土下座しながら探索中

主に競技プログラミング

UVa 11956 : Brainfuck

UVa演習 2014/6/8 (日) 問5

問題リンク : http://uva.onlinejudge.org/external/119/11956.html

問題概要 :
ポインタと長さ100の配列があり、ポインタは最初配列の0を示し、配列の各要素には初期値として0が入っている
命令の列が与えられるので、その後の配列の各要素の値を16進数で出力せよ

解法:
その通りにやる
ただ、'.'は使わない(書いてある意味が分からない)

コード:

#include<bits/stdc++.h>

#define REP(i,s,n) for(int i=s;i<n;i++)
#define rep(i,n) REP(i,0,n)

using namespace std;

int mem[100];

int main(){
  int T,CNT=1;
  string opr;
  cin >> T;
  cin.ignore();
  while( T-- ){
    getline(cin,opr);
    rep(i,100) mem[i] = 0;
    int pointer = 0;
    rep(i,(int)opr.size()){
      if( opr[i] == '>' ) ( pointer += 1 ) %= 100;
      if( opr[i] == '<' ) ( pointer += 99) %= 100;
      if( opr[i] == '+' ) ( mem[pointer] += 1 ) %= 256;
      if( opr[i] == '-' ) ( mem[pointer] += 255 ) %= 256;
    }
    cout << "Case " << CNT++ << ":";
    rep(i,100) printf(" %02X",mem[i]);
    puts("");
  }
  return 0;
}