みけCATのにっき(仮)
つれづれなるまゝに、日くらし、PCにむかひて、心に移りゆくよしなし事を、そこはかとなく書きつくれば、あやしうこそものぐるほしけれ。
(本当か!?)
出典

「C言語コード置換マシン」公開しました

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

「C言語コード置換マシン」公開しました

投稿記事 by みけCAT » 12年前

C言語コード置換マシンを公開しました。
これは、C言語やC++のコードと「置換する文字列のリスト」を書き込んで変換ボタンを押すと、
コードをトークンごとに分割し、多く出現しているトークンから順に「置換する文字列のリスト」の上から割り当て、
「置換する文字列のリスト」の文字列に置換してくというプログラムです。
このように置換するというアイデアは第11回日本情報オリンピック本選の時に思いつき、
「変換プログラムを後で日記に上げる」のようなことを言ったのですが、
それから約1年も経ってしまいました。見てくれるかな…?

では、サンプルを見てみましょう。
サンプルとして、例えば器物損壊!高橋君のソースコードを使用します。

CODE:

#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;
}
これを「C言語コード置換マシン」の「変換するコード」の欄に貼り付け、
「置換する文字列のリスト」は「声優」を読み込んでおきます。
変換結果は

CODE:

#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で紐付け、後半で置換したコードを出力しています。
みなさんも、試してみてはいかがでしょうか?

YuO
記事: 947
登録日時: 14年前

Re: 「C言語コード置換マシン」公開しました

投稿記事 by YuO » 12年前

元データ(の一つ?)はときメモの声優ですかね。1の声優さんの名前が出てくるのが懐かしい……。
懐かしいのは表に名前が出ない方が多いのもあるかとは思いますが……。
早乙女優美役のよしきくりんさん,Wikipediaにおいて役名付きはときメモしか挙がっていないですし。

それはともかく……いじめてみたら、正しくない出力が。
ISO/IEC 9899:1990/Amd.1:1995レベルでの標準Cの

CODE:

#include 
#include 
#include 

int main (void)
というコードに対して,

CODE:

#include 
#include 
#include 

#define Mizuhashi_Kaori (
#define Miki_Shinnichiro )
#define Nakamura_Yuichi ;
#define Kato_Emiri ,
#define Iguchi_Yuka ?
#define Fujita_Saki ""
#define Kikushi_Yumi "hello??/n"
#define Ogame_Asuka %
#define Sakaguchi_Daisuke 0
#define Masuda_Yuki 
#define Midorikawa_Hikaru L
#define Koyasu_Takehito LC_ALL
#define Morikubo_Shotaro fputws
#define Kosugi_Jurota int
#define Suwabe_Junnichi main
#define Tamura_Yukari return
#define Otani_Ikue setlocale
#define Noda_Junko stdout
#define Tachibana_Hikari void

Kosugi_Jurota
Suwabe_Junnichi
Mizuhashi_Kaori
Tachibana_Hikari
Miki_Shinnichiro
Masuda_Yuki
Ogame_Asuka
Otani_Ikue
Mizuhashi_Kaori
Koyasu_Takehito
Kato_Emiri
Fujita_Saki
Miki_Shinnichiro
Nakamura_Yuichi
Morikubo_Shotaro
Mizuhashi_Kaori
Midorikawa_Hikaru
Kikushi_Yumi
Kato_Emiri
Noda_Junko
Miki_Shinnichiro
Nakamura_Yuichi
Tamura_Yukari
Sakaguchi_Daisuke
Nakamura_Yuichi
Iguchi_Yuka
Iguchi_Yuka
Ishida_Akira
が出力されました。
はこれで一つのトークンですし、Lと"hello??/n"を分離すると,ワイド文字列でなくなります。
識別子のuniversal-character-nameとかも分解されるようです。
# マイナー所をせめたことは重々承知。VC++では/ZaでDigraph有効にして,さらに/Zc:trigraphsを追加してようやく動く。

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: 「C言語コード置換マシン」公開しました

投稿記事 by みけCAT » 12年前

撃墜ありがとうございます。
L"文字列"、L'字'、ダイグラフ、トリグラフ、universal-character-nameへの対応を試みました。
提示されたコードでは、

CODE:

#include 
#include 
#include 

#define Mizuhashi_Kaori (
#define Miki_Shinnichiro )
#define Nakamura_Yuichi ;
#define Kato_Emiri ,
#define Iguchi_Yuka ""
#define Fujita_Saki 0
#define Kikushi_Yumi 
#define Sakaguchi_Daisuke L"hello??/n"
#define Masuda_Yuki LC_ALL
#define Ishida_Akira fputws
#define Midorikawa_Hikaru int
#define Koyasu_Takehito main
#define Morikubo_Shotaro return
#define Kosugi_Jurota setlocale
#define Suwabe_Junnichi stdout
#define Tamura_Yukari void

Midorikawa_Hikaru
Koyasu_Takehito
Mizuhashi_Kaori
Tamura_Yukari
Miki_Shinnichiro
Kikushi_Yumi
Kosugi_Jurota
Mizuhashi_Kaori
Masuda_Yuki
Kato_Emiri
Iguchi_Yuka
Miki_Shinnichiro
Nakamura_Yuichi
Ishida_Akira
Mizuhashi_Kaori
Sakaguchi_Daisuke
Kato_Emiri
Suwabe_Junnichi
Miki_Shinnichiro
Nakamura_Yuichi
Morikubo_Shotaro
Fujita_Saki
Nakamura_Yuichi
Ogame_Asuka
という出力が得られました。