Problem:
博士が愛した符号
博士 : ピーター君、ついにやったよ。
ピーター : どうしました、デビッド博士？またくだらない発明ですか？
博士 : この表だよ、この表。
文字
符号
（空白）
101
'
000000
,
000011
-
10010001
.
010001
?
000001
A
100101
B
10011010
文字
符号
C
0101
D
0001
E
110
F
01001
G
10011011
H
010000
I
0111
J
10011000
文字
符号
K
0110
L
00100
M
10011001
N
10011110
O
00101
P
111
Q
10011111
R
1000
文字
符号
S
00110
T
00111
U
10011100
V
10011101
W
000010
X
10010010
Y
10010011
Z
10010000
ピーター : なんですか? この表は。
博士 : いいから、言う通りにしてみなさい。まず、お前の名前を紙に書いてごらん。
ピーター : はい"PETER POTTER" っと。
博士 : そうしたら、１文字ずつ、この表の「符号」に置き換えるのだよ。
ピーター : えーと"P" を「111」にして"E" を「110」して…結構面倒ですね。
111 110 00111 110 1000 101 111 00101 00111 00111 110 1000
になりました。なんだか、バーコードみたいですね。
博士 : よろしい。そうしたら、置き換えた文字列を全部つなげて、５文字ごとに区切ってみなさい。
ピーター : はいはい、つなげて区切ると。
11111 00011 11101 00010 11110 01010 01110 01111 10100 0
こんな感じになりました。けど、最後の「0」だけのやつはどうしますか?
博士 : ０を付け加えて５文字にしておいてくれ。
ピーター : えーと最後が０が1個だけだから０をあと４つ加えてやればいいんですね。できました。
11111 00011 11101 00010 11110 01010 01110 01111 10100 00000
博士 : 次はこの表を使うのだ。
符号
文字
00000
A
00001
B
00010
C
00011
D
00100
E
00101
F
00110
G
00111
H
符号
文字
01000
I
01001
J
01010
K
01011
L
01100
M
01101
N
01110
O
01111
P
符号
文字
10000
Q
10001
R
10010
S
10011
T
10100
U
10101
V
10110
W
10111
X
符号
文字
11000
Y
11001
Z
11010
（空白）
11011
.
11100
,
11101
-
11110
'
11111
?
ピーター : これをどう使うんですか…そうか!今度は符号から文字に置き換えるのか!
博士 : そうそう。「11111」だったら「?」に、「00011」だったら「D」にとやってゆけばいいんだよ。
ピーター : これは単純ですね……えーと「?D-C'KOPUA」になりました。でも意味不明ですよ。
博士 : 文字数を数えてごらん。
ピーター : １０文字ですよ。あっ、「PETER POTTER」は１２文字だったのに２文字減っています。
博士 : そう、この表を使えば文字を減らすことができるのだよ。じゃあ今度はこの文章で同じことをやっ
       てごらん。
PETER PIPER PICKED A PECK OF PICKLED PEPPERS. A PECK OF PICKLED PEPPERS
PETER PIPER PICKED. IF PETER PIPER PICKED A PECK OF PICKLED PEPPERS, WHERE'S
THE PECK OF PICKLED PEPPERS PETER PIPER PICKED?
ピーター : ぎょぎょ、行が分かれていますが、どうするんですか?
博士 : 紙の都合で３行になってしまったが、改行文字のかわりに空白がある長い１行だと思っておくれ。
ピーター : はいはい。行と行の間にあるのは空白だと。しかし面倒だな……。
博士 : だったらプログラムにやらせればいいではないか。
ということで、ピーターの代わりに、読み込んだ文字列を符号に変換し出力するプログラムを作成してください。
入力
複数のデータセットが与えられます。各データセットに文字列１行（表に含まれる文字からなる）が与えられます。文字列に含まれる文字の数は 1 文字以上 100 文字以下です。
データセットの数は 200 を超えません。
出力
各データセットごとに、変換後の文字列を１行に出力してください。
Sample Input
PETER POTTER
Output for the Sample Input
?D-C'KOPUA

Submitted solutions:

code_snippet: #include<iostream>
#include<string>
using namespace std;
string c2s(char c){
  if(c==' ') return "101";
  if(c=='\'') return "000000";
  if(c==',') return "000011";
  if(c=='-') return "10010001";
  if(c=='.') return "010001";
  if(c=='?') return "000001";
  if(c=='A') return "100101";
  if(c=='B') return "10011010";
  if(c=='C') return "0101";
  if(c=='D') return "0001";
  if(c=='E') return "110";
  if(c=='F') return "01001";
  if(c=='G') return "10011011";
  if(c=='H') return "010000";
  if(c=='I') return "0111";
  if(c=='J') return "10011000";
  if(c=='K') return "0110";
  if(c=='L') return "00100";
  if(c=='M') return "10011001";
  if(c=='N') return "10011110";
  if(c=='O') return "00101";
  if(c=='P') return "111";
  if(c=='Q') return "10011111";
  if(c=='R') return "1000";
  if(c=='S') return "00110";
  if(c=='T') return "00111";
  if(c=='U') return "10011100";
  if(c=='V') return "10011101";
  if(c=='W') return "000010";
  if(c=='X') return "10010010";
  if(c=='Y') return "10010011";
  if(c=='Z') return "10010000"; 
}
char s2c(string x){
  if(x=="00000") return 'A';
  if(x=="00001") return 'B';
  if(x=="00010") return 'C';
  if(x=="00011") return 'D';
  if(x=="00100") return 'E';
  if(x=="00101") return 'F';
  if(x=="00110") return 'G';
  if(x=="00111") return 'H';
  if(x=="01000") return 'I';
  if(x=="01001") return 'J';
  if(x=="01010") return 'K';
  if(x=="01011") return 'L';
  if(x=="01100") return 'M';
  if(x=="01101") return 'N';
  if(x=="01110") return 'O';
  if(x=="01111") return 'P';
  if(x=="10000") return 'Q';
  if(x=="10001") return 'R';
  if(x=="10010") return 'S';
  if(x=="10011") return 'T';
  if(x=="10100") return 'U';
  if(x=="10101") return 'V';
  if(x=="10110") return 'W';
  if(x=="10111") return 'X';
  if(x=="11000") return 'Y';
  if(x=="11001") return 'Z';
  if(x=="11010") return ' ';
  if(x=="11011") return '.';
  if(x=="11100") return ',';
  if(x=="11101") return '-';
  if(x=="11110") return '\'';
  if(x=="11111") return '?';
}
int main(){
  string s;
  while(getline(cin,s)){
    int i;
    string m;
    for(i=0;i<s.size();i++) m+=c2s(s[i]);
    if(m.size()%5!=0){
      m+="0000";
    }
    string o;
    for(i=0;i+5<=m.size();i+=5){
      o+=s2c(m.substr(i,5));
    }
    cout << o << endl;
  }
  return 0;
}
accuracy: 1
time_ms: 10
memory_kb: 1196
final_rank: 1

code_snippet: #include <bits/stdc++.h>
using namespace std;

typedef long long ll;
#define rep(i,n) for(i=0;i<n;++i)
#define each(itr,c) for(__typeof(c.begin()) itr=c.begin(); itr!=c.end(); itr++)
#define mp make_pair
#define pb push_back
#define fi first
#define sc second

int main(int argc, char const *argv[]) {
  map<char,string> m;
  m[' '] ="101";
  m['\'']="000000";
  m[','] ="000011";
  m['-'] ="10010001";
  m['.'] ="010001";
  m['?'] ="000001";
  m['A'] ="100101";
  m['B'] ="10011010";
  m['C'] ="0101";
  m['D'] ="0001";
  m['E'] ="110";
  m['F'] ="01001";
  m['G'] ="10011011";
  m['H'] ="010000";
  m['I'] ="0111";
  m['J'] ="10011000";
  m['K'] ="0110";
  m['L'] ="00100";
  m['M'] ="10011001";
  m['N'] ="10011110";
  m['O'] ="00101";
  m['P'] ="111";
  m['Q'] ="10011111";
  m['R'] ="1000";
  m['S'] ="00110";
  m['T'] ="00111";
  m['U'] ="10011100";
  m['V'] ="10011101";
  m['W'] ="000010";
  m['X'] ="10010010";
  m['Y'] ="10010011";
  m['Z'] ="10010000";

  int i;
  string s;
  string al="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  while (getline(cin,s)){
    string ans="";

    string a="";
    rep(i,s.size()) a+=m[s[i]];

    int tmp=a.size()%5;
    if(tmp!=0){
      rep(i,5-tmp) a+="0";
    }

    //cout << a << endl;

    for(int j=0; j<a.size(); j+=5){
      //5???????????¨????????????
      string b=a.substr(j,5);
      if(b=="11010") ans+=" ";
      else if(b=="11011") ans+=".";
      else if(b=="11100") ans+=",";
      else if(b=="11101") ans+="-";
      else if(b=="11110") ans+="'";
      else if(b=="11111") ans+="?";
      else{
        int val=0;
        for(int k=0; k<5; ++k){
          val+=(b[k]-'0')*pow(2,4-k);
        }
        ans+=al[val];
      }

    }

    std::cout << ans << std::endl;
  }
  return 0;
}
accuracy: 1
time_ms: 10
memory_kb: 1240
final_rank: 3

code_snippet: #include<iostream>
#include<string>
using namespace std;

char A1[33] = " ',-.?ABCDEFGHIJKLMNOPQRSTUVWXYZ";
char B1[33] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ .,-'?";

string A2[32] = {
	"101",
	"000000",
	"000011",
	"10010001",
	"010001",
	"000001",
	"100101",
	"10011010",
	"0101",
	"0001",
	"110",
	"01001",
	"10011011",
	"010000",
	"0111",
	"10011000",
	"0110",
	"00100",
	"10011001",
	"10011110",
	"00101",
	"111",
	"10011111",
	"1000",
	"00110",
	"00111",
	"10011100",
	"10011101",
	"000010",
	"10010010",
	"10010011",
	"10010000"
};

string B2[32] = {
	"00000",
	"00001",
	"00010",
	"00011",
	"00100",
	"00101",
	"00110",
	"00111",
	"01000",
	"01001",
	"01010",
	"01011",
	"01100",
	"01101",
	"01110",
	"01111",
	"10000",
	"10001",
	"10010",
	"10011",
	"10100",
	"10101",
	"10110",
	"10111",
	"11000",
	"11001",
	"11010",
	"11011",
	"11100",
	"11101",
	"11110",
	"11111"
};

string U;
string V;

int main() {
	while (getline(cin, U)) {
		V = "";
		for (int i = 0; i < U.size(); i++) {
			for (int j = 0; j < 32; j++) {
				if (A1[j] == U[i]) {
					V += A2[j];
				}
			}
		}
		while (V.size() % 5 != 0) {
			V += '0';
		}
		U = "";
		for (int i = 0; i < V.size(); i += 5) {
			for (int j = 0; j < 32; j++) {
				if (B2[j] == V.substr(i, 5)) {
					U += B1[j];
				}
			}
		}
		cout << U << endl;
	}
	return 0;
}
accuracy: 1
time_ms: 20
memory_kb: 1196
final_rank: 3

code_snippet: //The Code A Doctor Loved
#include<bits/stdc++.h>
using namespace std;

string p(string s, string t){
  for(int i=0; i<t.length(); i++){
    if(s.length()%6==5)s+=' ';
    s+=t[i];
  }
  return s;
}

string into(string s){
  string t="";
  for(int i=0; i<s.length(); i++){
    if(s[i]==' ')t=p(t, "101");
    if(s[i]=='\'')t=p(t, "000000");
    if(s[i]==',')t=p(t,"000011");
    if(s[i]=='-')t=p(t,"10010001");
    if(s[i]=='.')t=p(t,"010001");
    if(s[i]=='?')t=p(t,"000001");
    if(s[i]=='A')t=p(t,"100101");
    if(s[i]=='B')t=p(t,"10011010");
    if(s[i]=='C')t=p(t,"0101");
    if(s[i]=='D')t=p(t,"0001");
    if(s[i]=='E')t=p(t,"110");
    if(s[i]=='F')t=p(t,"01001");
    if(s[i]=='G')t=p(t,"10011011");
    if(s[i]=='H')t=p(t,"010000");
    if(s[i]=='I')t=p(t,"0111");
    if(s[i]=='J')t=p(t,"10011000");
    if(s[i]=='K')t=p(t,"0110");
    if(s[i]=='L')t=p(t,"00100");
    if(s[i]=='M')t=p(t,"10011001");
    if(s[i]=='N')t=p(t,"10011110");
    if(s[i]=='O')t=p(t,"00101");
    if(s[i]=='P')t=p(t,"111");
    if(s[i]=='Q')t=p(t,"10011111");
    if(s[i]=='R')t=p(t,"1000");
    if(s[i]=='S')t=p(t,"00110");
    if(s[i]=='T')t=p(t,"00111");
    if(s[i]=='U')t=p(t,"10011100");
    if(s[i]=='V')t=p(t,"10011101");
    if(s[i]=='W')t=p(t,"000010");
    if(s[i]=='X')t=p(t,"10010010");
    if(s[i]=='Y')t=p(t,"10010011");
    if(s[i]=='Z')t=p(t,"10010000");
  }
  while(t.length()%6!=5)t+='0';
  stringstream ss(t);
  string ret="", tmp;
  while(getline(ss, tmp, ' ')){
    if(tmp=="00000")ret+='A';
    if(tmp=="00001")ret+='B';
    if(tmp=="00010")ret+='C';
    if(tmp=="00011")ret+='D';
    if(tmp=="00100")ret+='E';
    if(tmp=="00101")ret+='F';
    if(tmp=="00110")ret+='G';
    if(tmp=="00111")ret+='H';
    if(tmp=="01000")ret+='I';
    if(tmp=="01001")ret+='J';
    if(tmp=="01010")ret+='K';
    if(tmp=="01011")ret+='L';
    if(tmp=="01100")ret+='M';
    if(tmp=="01101")ret+='N';
    if(tmp=="01110")ret+='O';
    if(tmp=="01111")ret+='P';
    if(tmp=="10000")ret+='Q';
    if(tmp=="10001")ret+='R';
    if(tmp=="10010")ret+='S';
    if(tmp=="10011")ret+='T';
    if(tmp=="10100")ret+='U';
    if(tmp=="10101")ret+='V';
    if(tmp=="10110")ret+='W';
    if(tmp=="10111")ret+='X';
    if(tmp=="11000")ret+='Y';
    if(tmp=="11001")ret+='Z';
    if(tmp=="11010")ret+=' ';
    if(tmp=="11011")ret+='.';
    if(tmp=="11100")ret+=',';
    if(tmp=="11101")ret+='-';
    if(tmp=="11110")ret+='\'';
    if(tmp=="11111")ret+='?';
  }
  return ret;
}

int main(){
  string s;
  while(getline(cin, s)){
    cout<<into(s)<<endl;
  }
  return 0;
}
accuracy: 1
time_ms: 10
memory_kb: 1220
final_rank: 2