これは、C言語やC++のコードと「置換する文字列のリスト」を書き込んで変換ボタンを押すと、
コードをトークンごとに分割し、多く出現しているトークンから順に「置換する文字列のリスト」の上から割り当て、
「置換する文字列のリスト」の文字列に置換してくというプログラムです。
このように置換するというアイデアは第11回日本情報オリンピック本選の時に思いつき、
「変換プログラムを後で日記に上げる」のようなことを言ったのですが、
それから約1年も経ってしまいました。見てくれるかな…?
では、サンプルを見てみましょう。
サンプルとして、例えば器物損壊!高橋君のソースコードを使用します。
#include
int visited[500][500]; /* used cost */
int queue[500*500*4][3];
int queue_start,queue_end;
int width,height;
char map[500][512];
void insert_queue(int x,int y,int cost) {
if(x=width || y>=height)return;
if(map[y][x]=='#')cost++;
if((visited[y][x]>=0 && visited[y][x]2)return;
visited[y][x]=cost;
queue[queue_end][0]=x;
queue[queue_end][1]=y;
queue[queue_end][2]=cost;
queue_end++;
}
int main(void) {
int i,j;
int sx=-1,sy=-1,gx=-1,gy=-1;
scanf("%d%d",&height,&width);
for(i=0;i=0?"YES":"NO");
return 0;
}
「置換する文字列のリスト」は「声優」を読み込んでおきます。
変換結果は
#include
#define Mizuhashi_Kaori ;
#define Miki_Shinnichiro [
#define Nakamura_Yuichi ]
#define Kato_Emiri ,
#define Iguchi_Yuka (
#define Fujita_Saki )
#define Kikushi_Yumi =
#define Ogame_Asuka 0
#define Sakaguchi_Daisuke x
#define Masuda_Yuki y
#define Ishida_Akira i
#define Midorikawa_Hikaru 1
#define Koyasu_Takehito cost
#define Morikubo_Shotaro int
#define Kosugi_Jurota =
#define Tsunoda_Narumi gx
#define Kumai_Motoko gy
#define Maeda_Chiaki map
#define Kawakami_Tomoko return
#define Yukana sx
#define Fukuen_Misato sy
#define Tateno_Kanako width
#define Takano_Naoko 2
#define Kanda_Akemi ==
#define Yamada_Miho for
#define Tori_Misa &
#define Kingetsu_Mami *
#define Ueda_Yuji +
#define Koshimizu_Ami scanf
#define Takita_Juri void
#define Makishima_Yuki "%d%d"
#define Suzumura_Kenichi "%s"
#define Goto_Saori "NO"
#define Hiyama_Nobuyuki "YES"
#define Minami_Omi &&
#define Kikuchi_Shiho '#'
#define Yoshiki_Kurin 'g'
#define Suzuki_Chihiro 's'
#define Igarashi_Rei 3
#define Tachibana_Shinnnosuke 4
#define Kannna_Nobutoshi 512
#define Imamura_Takahiro :
#define Tanaka_Hirofumi
#define Kannbara_Daichi ?
#define Naruse_Makoto char
#define Morikawa_Toshiyuki else
#define Taniyama_Kisyo main
#define Matsubara_Daisuke puts
#define Kobayashi_Yumiko while
Morikubo_Shotaro Yamaguchi_Kappei Miki_Shinnichiro
Hayami_Syo Nakamura_Yuichi Miki_Shinnichiro
Hayami_Syo Nakamura_Yuichi Mizuhashi_Kaori
Morikubo_Shotaro Otani_Ikue Miki_Shinnichiro
Hayami_Syo Kingetsu_Mami Hayami_Syo
Kingetsu_Mami Tachibana_Shinnnosuke Nakamura_Yuichi
Miki_Shinnichiro Igarashi_Rei Nakamura_Yuichi
Mizuhashi_Kaori Morikubo_Shotaro Tachibana_Hikari
Kato_Emiri Noda_Junko Mizuhashi_Kaori
Morikubo_Shotaro Tateno_Kanako Kato_Emiri
Morita_Masakazu Mizuhashi_Kaori Naruse_Makoto
Maeda_Chiaki Miki_Shinnichiro Hayami_Syo
Nakamura_Yuichi Miki_Shinnichiro Kannna_Nobutoshi
Nakamura_Yuichi Mizuhashi_Kaori Takita_Juri
Okiayu_Ryotaro Iguchi_Yuka Morikubo_Shotaro
Sakaguchi_Daisuke Kato_Emiri Morikubo_Shotaro
Masuda_Yuki Kato_Emiri Morikubo_Shotaro
Koyasu_Takehito Fujita_Saki Motoi_Emi
Orikasa_Ai Iguchi_Yuka Sakaguchi_Daisuke
Kosugi_Jurota Ogame_Asuka Sugita_Tomokazu
Masuda_Yuki Kosugi_Jurota Ogame_Asuka
Sugita_Tomokazu Sakaguchi_Daisuke Sekine_Akiko
Tateno_Kanako Sugita_Tomokazu Masuda_Yuki
Sekine_Akiko Morita_Masakazu Fujita_Saki
Kawakami_Tomoko Mizuhashi_Kaori Orikasa_Ai
Iguchi_Yuka Maeda_Chiaki Miki_Shinnichiro
Masuda_Yuki Nakamura_Yuichi Miki_Shinnichiro
Sakaguchi_Daisuke Nakamura_Yuichi Kanda_Akemi
Kikuchi_Shiho Fujita_Saki Koyasu_Takehito
Nojima_Kenji Mizuhashi_Kaori Orikasa_Ai
Iguchi_Yuka Iguchi_Yuka Yamaguchi_Kappei
Miki_Shinnichiro Masuda_Yuki Nakamura_Yuichi
Miki_Shinnichiro Sakaguchi_Daisuke Nakamura_Yuichi
Sekine_Akiko Ogame_Asuka Minami_Omi
Yamaguchi_Kappei Miki_Shinnichiro Masuda_Yuki
Nakamura_Yuichi Miki_Shinnichiro Sakaguchi_Daisuke
Nakamura_Yuichi Tanaka_Hirofumi Koyasu_Takehito
Fujita_Saki Sugita_Tomokazu Koyasu_Takehito
Nakai_Kazuya Takano_Naoko Fujita_Saki
Kawakami_Tomoko Mizuhashi_Kaori Yamaguchi_Kappei
Miki_Shinnichiro Masuda_Yuki Nakamura_Yuichi
Miki_Shinnichiro Sakaguchi_Daisuke Nakamura_Yuichi
Kikushi_Yumi Koyasu_Takehito Mizuhashi_Kaori
Otani_Ikue Miki_Shinnichiro Noda_Junko
Nakamura_Yuichi Miki_Shinnichiro Ogame_Asuka
Nakamura_Yuichi Kikushi_Yumi Sakaguchi_Daisuke
Mizuhashi_Kaori Otani_Ikue Miki_Shinnichiro
Noda_Junko Nakamura_Yuichi Miki_Shinnichiro
Midorikawa_Hikaru Nakamura_Yuichi Kikushi_Yumi
Masuda_Yuki Mizuhashi_Kaori Otani_Ikue
Miki_Shinnichiro Noda_Junko Nakamura_Yuichi
Miki_Shinnichiro Takano_Naoko Nakamura_Yuichi
Kikushi_Yumi Koyasu_Takehito Mizuhashi_Kaori
Noda_Junko Nojima_Kenji Mizuhashi_Kaori
Hosi_Soichiro Morikubo_Shotaro Taniyama_Kisyo
Iguchi_Yuka Takita_Juri Fujita_Saki
Motoi_Emi Morikubo_Shotaro Ishida_Akira
Kato_Emiri Suwabe_Junnichi Mizuhashi_Kaori
Morikubo_Shotaro Yukana Kikushi_Yumi
Tamura_Yukari Midorikawa_Hikaru Kato_Emiri
Fukuen_Misato Kikushi_Yumi Tamura_Yukari
Midorikawa_Hikaru Kato_Emiri Tsunoda_Narumi
Kikushi_Yumi Tamura_Yukari Midorikawa_Hikaru
Kato_Emiri Kumai_Motoko Kikushi_Yumi
Tamura_Yukari Midorikawa_Hikaru Mizuhashi_Kaori
Koshimizu_Ami Iguchi_Yuka Makishima_Yuki
Kato_Emiri Tori_Misa Morita_Masakazu
Kato_Emiri Tori_Misa Tateno_Kanako
Fujita_Saki Mizuhashi_Kaori Yamada_Miho
Iguchi_Yuka Ishida_Akira Kikushi_Yumi
Ogame_Asuka Mizuhashi_Kaori Ishida_Akira
Kosugi_Jurota Morita_Masakazu Mizuhashi_Kaori
Ishida_Akira Nojima_Kenji Fujita_Saki
Koshimizu_Ami Iguchi_Yuka Suzumura_Kenichi
Kato_Emiri Maeda_Chiaki Miki_Shinnichiro
Ishida_Akira Nakamura_Yuichi Fujita_Saki
Mizuhashi_Kaori Yamada_Miho Iguchi_Yuka
Ishida_Akira Kikushi_Yumi Ogame_Asuka
Mizuhashi_Kaori Ishida_Akira Kosugi_Jurota
Morita_Masakazu Mizuhashi_Kaori Ishida_Akira
Nojima_Kenji Fujita_Saki Motoi_Emi
Yamada_Miho Iguchi_Yuka Suwabe_Junnichi
Kikushi_Yumi Ogame_Asuka Mizuhashi_Kaori
Suwabe_Junnichi Kosugi_Jurota Tateno_Kanako
Mizuhashi_Kaori Suwabe_Junnichi Nojima_Kenji
Fujita_Saki Motoi_Emi Yamaguchi_Kappei
Miki_Shinnichiro Ishida_Akira Nakamura_Yuichi
Miki_Shinnichiro Suwabe_Junnichi Nakamura_Yuichi
Kikushi_Yumi Tamura_Yukari Midorikawa_Hikaru
Mizuhashi_Kaori Orikasa_Ai Iguchi_Yuka
Maeda_Chiaki Miki_Shinnichiro Ishida_Akira
Nakamura_Yuichi Miki_Shinnichiro Suwabe_Junnichi
Nakamura_Yuichi Kanda_Akemi Suzuki_Chihiro
Fujita_Saki Motoi_Emi Yukana
Kikushi_Yumi Suwabe_Junnichi Mizuhashi_Kaori
Fukuen_Misato Kikushi_Yumi Ishida_Akira
Mizuhashi_Kaori Hosi_Soichiro Morikawa_Toshiyuki
Orikasa_Ai Iguchi_Yuka Maeda_Chiaki
Miki_Shinnichiro Ishida_Akira Nakamura_Yuichi
Miki_Shinnichiro Suwabe_Junnichi Nakamura_Yuichi
Kanda_Akemi Yoshiki_Kurin Fujita_Saki
Motoi_Emi Tsunoda_Narumi Kikushi_Yumi
Suwabe_Junnichi Mizuhashi_Kaori Kumai_Motoko
Kikushi_Yumi Ishida_Akira Mizuhashi_Kaori
Hosi_Soichiro Hosi_Soichiro Hosi_Soichiro
Orikasa_Ai Iguchi_Yuka Yukana
Kosugi_Jurota Ogame_Asuka Sugita_Tomokazu
Fukuen_Misato Kosugi_Jurota Ogame_Asuka
Sugita_Tomokazu Tsunoda_Narumi Kosugi_Jurota
Ogame_Asuka Sugita_Tomokazu Kumai_Motoko
Kosugi_Jurota Ogame_Asuka Fujita_Saki
Kawakami_Tomoko Midorikawa_Hikaru Mizuhashi_Kaori
Tachibana_Hikari Kikushi_Yumi Noda_Junko
Kikushi_Yumi Ogame_Asuka Mizuhashi_Kaori
Okiayu_Ryotaro Iguchi_Yuka Yukana
Kato_Emiri Fukuen_Misato Kato_Emiri
Ogame_Asuka Fujita_Saki Mizuhashi_Kaori
Kobayashi_Yumiko Iguchi_Yuka Tachibana_Hikari
Kosugi_Jurota Noda_Junko Fujita_Saki
Motoi_Emi Morikubo_Shotaro Sakaguchi_Daisuke
Kato_Emiri Masuda_Yuki Kato_Emiri
Koyasu_Takehito Mizuhashi_Kaori Sakaguchi_Daisuke
Kikushi_Yumi Otani_Ikue Miki_Shinnichiro
Tachibana_Hikari Nakamura_Yuichi Miki_Shinnichiro
Ogame_Asuka Nakamura_Yuichi Mizuhashi_Kaori
Masuda_Yuki Kikushi_Yumi Otani_Ikue
Miki_Shinnichiro Tachibana_Hikari Nakamura_Yuichi
Miki_Shinnichiro Midorikawa_Hikaru Nakamura_Yuichi
Mizuhashi_Kaori Koyasu_Takehito Kikushi_Yumi
Otani_Ikue Miki_Shinnichiro Tachibana_Hikari
Nakamura_Yuichi Miki_Shinnichiro Takano_Naoko
Nakamura_Yuichi Mizuhashi_Kaori Tachibana_Hikari
Nojima_Kenji Mizuhashi_Kaori Okiayu_Ryotaro
Iguchi_Yuka Sakaguchi_Daisuke Tamura_Yukari
Midorikawa_Hikaru Kato_Emiri Masuda_Yuki
Kato_Emiri Koyasu_Takehito Fujita_Saki
Mizuhashi_Kaori Okiayu_Ryotaro Iguchi_Yuka
Sakaguchi_Daisuke Ueda_Yuji Midorikawa_Hikaru
Kato_Emiri Masuda_Yuki Kato_Emiri
Koyasu_Takehito Fujita_Saki Mizuhashi_Kaori
Okiayu_Ryotaro Iguchi_Yuka Sakaguchi_Daisuke
Kato_Emiri Masuda_Yuki Tamura_Yukari
Midorikawa_Hikaru Kato_Emiri Koyasu_Takehito
Fujita_Saki Mizuhashi_Kaori Okiayu_Ryotaro
Iguchi_Yuka Sakaguchi_Daisuke Kato_Emiri
Masuda_Yuki Ueda_Yuji Midorikawa_Hikaru
Kato_Emiri Koyasu_Takehito Fujita_Saki
Mizuhashi_Kaori Hosi_Soichiro Matsubara_Daisuke
Iguchi_Yuka Yamaguchi_Kappei Miki_Shinnichiro
Kumai_Motoko Nakamura_Yuichi Miki_Shinnichiro
Tsunoda_Narumi Nakamura_Yuichi Sekine_Akiko
Ogame_Asuka Kannbara_Daichi Hiyama_Nobuyuki
Imamura_Takahiro Goto_Saori Fujita_Saki
Mizuhashi_Kaori Kawakami_Tomoko Ogame_Asuka
Mizuhashi_Kaori Hosi_Soichiro
前半で置換した文字列ともとのトークンをdefineで紐付け、後半で置換したコードを出力しています。
みなさんも、試してみてはいかがでしょうか?