Skip to content

Instantly share code, notes, and snippets.

@kat0h
Last active March 12, 2021 08:01
Show Gist options
  • Save kat0h/70d39a6307736714fd2df4dc5dce4e94 to your computer and use it in GitHub Desktop.
Save kat0h/70d39a6307736714fd2df4dc5dce4e94 to your computer and use it in GitHub Desktop.
Vim Quine Shell Gei

まだ読む気になれるQuine

vim -es +'let src="norm ivim -es +^=nr2char(39)@let src=^=nr2char(34)@^=src@^=nr2char(34)@ | exe src->tr(^=nr2char(34)..nr2char(37)..nr2char(94)..nr2char(64)..nr2char(34)@, nr2char(27)..nr2char(18)..nr2char(10))^=nr2char(39)@ +^=nr2char(39)..nr2char(37)@p|q!^=nr2char(39)@" | exe src->tr("%^@", nr2char(27)..nr2char(18)..nr2char(10))' +'%p|q!'

ソースコードを変数sに代入し、インサートモード内で=を使うことで展開している。
"はasciiコードから入力している。

繰り返しを省いたQuine

vim -es +'let src="norm ivim -es +^=V39)@let src=[^=src@[|exe src->substitute([^=V86)@[,[V[,[g[)->tr([^=V37).V94).V64).V91)@[,V27).V18).V10).V34))^=V39)@ +^=V39).V37)@p|q!^=V39)@"|exe src->substitute("V","nr2char(","g")->tr("%^@[",nr2char(27).nr2char(18).nr2char(10).nr2char(34))' +'%p|q!'

Vnr2char(で展開した。

難読化したQuine

vim -es +'let s="norm ivim -es +7=]39);let s=[7=s;[|exe s->substitute([7=]93);[,[][,[g[)->tr([7=]55).]59).]91);[,]18).]10).]34))|p|q!7=]39);"|exe s->substitute("]","nr2char(","g")->tr("7;[",nr2char(18).nr2char(10).nr2char(34))|p|q!'

読みにくくなるように繰り返しでてくる文字を;[に置き換えた。また、7がコード内に使われていないことに気づいたので7をコード内に混ぜた。

Q: なんでex使わないの?
vimにこだわったから

Q: なんでQuine一つ作るのにこんなゴミカス作ったの?
技術がないから

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment