- note -

C言語

8/8

クロスクワイン - 1 : C, bat   - Last modified:2013/5/25

CrossQuine1.c

#include<stdio.h>
int main(void){printf("@echo off%csetlocal%cset e==%cset s= %cset c=,%cset m=;%cset x=!%cset p=%c%c%cset h=^^%cset r=^>%cset l=^<%cset z=)%cset q=%c%cset d=setlocal enabledelayedexpansion%cset `=#include!l!stdio.h!r! int!s!main(void){printf(!q!@echo!s!off!p!csetlocal!p!cset!s!e!e!!e!!p!cset!s!s!e!!s!!p!cset!s!c!e!!c!!p!cset!s!m!e!!m!!p!cset!s!x!e!!x!!p!cset!s!p!e!!p!c!p!c!p!cset!s!h!e!!h!!h!!p!cset!s!r!e!!h!!r!!p!cset!s!l!e!!h!!l!!p!cset!s!z!e!!z!!p!cset!s!q!e!!p!c!p!cset!s!d!e!!d!!p!cset!s!`!e!!`!!p!c!p!cd!p!c!p!cfor!s!!p!c!p!cI!s!in!s!(!x!`!x!)!s!do!s!echo!s!!p!c!p!cI!q!!c!10!c!10!c!10!c!10!c!10!c!10!c!10!c!37!c!37!c!10!c!10!c!10!c!10!c!10!c!34!c!10!c!10!c!10!c!37!c!37!c!10!c!37!c!37!c!37!c!37)!m!return!s!0!m!}%c%cd%c%cfor %c%cI in (!`!) do echo %c%cI",10,10,10,10,10,10,10,37,37,10,10,10,10,10,34,10,10,10,37,37,10,37,37,37,37);return 0;}

CrossQuine1.bat

@echo off
setlocal
set e==
set s= 
set c=,
set m=;
set x=!
set p=%%
set h=^^
set r=^>
set l=^<
set z=)
set q="
set d=setlocal enabledelayedexpansion
set `=#include!l!stdio.h!r! int!s!main(void){printf(!q!@echo!s!off!p!csetlocal!p!cset!s!e!e!!e!!p!cset!s!s!e!!s!!p!cset!s!c!e!!c!!p!cset!s!m!e!!m!!p!cset!s!x!e!!x!!p!cset!s!p!e!!p!c!p!c!p!cset!s!h!e!!h!!h!!p!cset!s!r!e!!h!!r!!p!cset!s!l!e!!h!!l!!p!cset!s!z!e!!z!!p!cset!s!q!e!!p!c!p!cset!s!d!e!!d!!p!cset!s!`!e!!`!!p!c!p!cd!p!c!p!cfor!s!!p!c!p!cI!s!in!s!(!x!`!x!)!s!do!s!echo!s!!p!c!p!cI!q!!c!10!c!10!c!10!c!10!c!10!c!10!c!10!c!37!c!37!c!10!c!10!c!10!c!10!c!10!c!34!c!10!c!10!c!10!c!37!c!37!c!10!c!37!c!37!c!37!c!37)!m!return!s!0!m!}
%d%
for %%I in (!`!) do echo %%I
Cとbatが相互にクワインします。
改行を入れることは諦めました。

おまけ

bat単体のクワインはこんな感じ。

Quine.bat

@set h=^^&@set a=^&&@set p=%%&@set `=cmd/v/c echo;@set h=!h!!h!!a!@set a=!h!!a!!a!@set p=!p!!p!!a!@set `=!`!!a!call !p!!p!`!p!!p!&call %%`%%