์์๋ค์ํผ, ๋ฐฉ์ฌ์ ๊ฒฝํ ํด๋ค ๋ ํ๋์ ๋ฌธ์๋ฅผ ์ ๊ฑฐํ๊ณ ์ฌ์ ํ ์ฌ์ ์์ ๋ ์๋ณธ์ ์ธ์ ํ ์์๋ ํด๋์ ๋๋ค. ๋ฌธ์ ๋ ๋๋ถ๋ถ์ด ํ๋์ ๋ฌธ์ ๋ง ์ ๊ฑฐ ํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ๋ชจ๋ ๊ฒ์ด ๋ฌด๋์ง๋๋ค. ์ด๊ฒ์ ์ด๊ฒ์ด ๋์ค๋ ๊ณณ์ ๋๋ค. ๋น์ ์ ๋ชฉํ๋ ๊ฐ๋ฅํ ํ ๋ง์ ์บ๋ฆญํฐ๋ฅผ ์ ๊ฑฐ ํ ์์๋ ๋ฐฉ์ฌ์ ๊ฒฝํ ํด๋๋ฅผ ๋ง๋๋ ๊ฒ์ ๋๋ค. ๊ท์น์ ์ค์ํ๋ ๋ชจ๋ ์ธ์ด๊ฐ ์ข์ต๋๋ค.
๊ท์น
- ํ๋ก๊ทธ๋จ์ 1 ์ ์ด์์ด์ด์ผํฉ๋๋ค
- ์ฌ์ฉ๋๋ ์ธ์ด๋ ์์ ํด์ผํฉ๋๋ค (๋ฐ๋ผ์ HQ9 +์ ๊ฐ์ ์ธ์ด๋ ์๊ฒฉ์ด ์์)
- ์ผ๋ฐ ํด์ธ์ ์ ์ฉ๋๋ ๋ค๋ฅธ ๋ชจ๋ ๊ท์น๋ ์ฌ๊ธฐ์ ์ ์ฉ๋ฉ๋๋ค.
- ๊ฐ์ฅ๊ณผ ํด๊ฒฐ์ฑ
์
program_length^(2/n)
์๋ ์ด๋ค ์ ํํ ์ธํธn
์ฌ์ ํ ์๋ ์์ค ์ฝ๋์ ์น๋ฆฌ๋ฅผ ์ธ์ํ๋ ๋์ ๋ฌธ์๋ฅผ ์ ๊ฑฐ ํ ์ ์์ต๋๋ค.
๋ต๋ณ
Perl, 1116 1124 ๋ฐ์ดํธ, n = 3, ์ ์ = 1124 ^ (2/3) ๋๋ ์ฝ 108.1
์ ๋ฐ์ดํธ : ์ด์ ์ด๊ฒ์ด ๋ฌด์ฐจ๋ณ ๋์ ์ ํตํด n = 3์์ ์๋ํ๋ค๋ ๊ฒ์ ํ์ธํ์ต๋๋ค (2 ์ผ์ด ๊ฑธ๋ ธ์ต๋๋ค). ์ด ๋ณต์กํ ํ๋ก๊ทธ๋จ์ ์ฌ์ฉํ๋ฉด ์์ผ๋ก ๋ฐฉ์ฌ์ ์ ํญ์ ํ์ธํ๊ธฐ๊ฐ ์ด๋ ต์ต๋๋ค (์ด์ ๋ฒ์ ์์๋ ์ค์๊ฐ ๋ฐ์ํ์ฌ ๋ฐ์ดํธ ์๊ฐ ์ฆ๊ฐํ์ต๋๋ค). ์ต์ข ์ ๋ฐ์ดํธ
๋ณด์ด์ง ์๋ ๊ณณ์์ stderr๋ฅผ ๋ฆฌ๋๋ ์ ํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ด ํ๋ก๊ทธ๋จ์ ๋ฌธ์๋ฅผ ์ญ์ ํ์ง ์์๋ ์์ฌ์ค๋ฌ์ด ๊ตฌ๋ฌธ์ ๋ํ ๊ฒฝ๊ณ ๋ฅผ ์์ฑ ํฉ๋๋ค.
ํ๋ก๊ทธ๋จ์ด ๋จ์ถ ๋ ์ ์์ต๋๋ค. ์ด ์์ ์ ์๋นํ ๊ณ ํต์ค๋ฝ๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฅํ ๋ฏธ์ธ ์ต์ ํ๋ฅผ ๋์น๊ธฐ ์ฝ์ต๋๋ค. ๋๋ ํ๋ก๊ทธ๋จ ์ ์ ๋ง ์ด๋ ค์ด ๋ถ๋ถ ์ด๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฅํ ๋ง์ ์ญ์ ๊ฐ๋ฅํ ๋ฌธ์๋ฅผ ์ต๋ํ ๋ง์ด ๋ชฉํ๋ก ์ผ๊ณ ์์๊ณ , ์ฝ๋ ๊ณจํ ํ์ด ๋ธ๋ ์ดํฌ๋ ๋ชฉํ๋กํ๊ธฐ ์ข์ ๊ฒ์ด์ง๋ง ๋ด๊ฐ ๋ฃ์ง ์์ ๊ฒ์ผ๋ก ์ทจ๊ธํ์ต๋๋ค. ์ฐ๋ฐ์ ์ผ๋ก ๋ฐฉ์ฌ์ ์ ํญ์ ๊นจ๋จ๋ฆฌ๊ธฐ๊ฐ ๋งค์ฐ ์ฝ๋ค๋ ๊ทผ๊ฑฐ๋ก ์ต์ ํ์ ๋ํ ์ฐ์ค์ด ๋ ธ๋ ฅ.
ํ๋ก๊ทธ๋จ
์ฐธ๊ณ : _
์ ๋ค ๊ฐ์ง ๋ฐ์ ์ง์ ์ ๋ฆฌํฐ๋ด ์ ์ด ๋ฌธ์ (ASCII 31)๊ฐ -+
์์ต๋๋ค. StackOverflow์ ๋ณต์ฌํ์ฌ ๋ถ์ฌ ๋ฃ์ ๊ฒ์ผ๋ก ์๊ฐํ์ง ์์ผ๋ฏ๋ก ํ๋ก๊ทธ๋จ์ ์คํํ๊ธฐ ์ ์ ๋ค์ ์ถ๊ฐํด์ผํฉ๋๋ค.
eval+<eval+<eval+<eval+(q(FoPqOlengthFoBBPP181XXVVVVJJJKKKNdoWchopJFtPDevalMODx4KNFrPIPA-MN-TUV-ZPINFsPIFoPqOI.Fo.IQNevalFoINevalIFsPZyI.Fr.IT-UPINsayDFtJqJFsKPZyPT-UFWrYrKD.DEEEEQDx6NsayDNDforB1..4YforB1..4NexitQNevalFo)=~y=A-Z=-+;-AZz-~=r)####>####>####>####>####>####>
;
;
;
;
eval+<eval+<eval+<eval+(q(FoPqOlengthFoBBPP181XXVVVVJJJKKKNdoWchopJFtPDevalMODx4KNFrPIPA-MN-TUV-ZPINFsPIFoPqOI.Fo.IQNevalFoINevalIFsPZyI.Fr.IT-UPINsayDFtJqJFsKPZyPT-UFWrYrKD.DEEEEQDx6NsayDNDforB1..4YforB1..4NexitQNevalFo)=~y=A-Z=-+;-AZz-~=r)####>####>####>####>####>####>
;
;
;
;
eval+<eval+<eval+<eval+(q(FoPqOlengthFoBBPP181XXVVVVJJJKKKNdoWchopJFtPDevalMODx4KNFrPIPA-MN-TUV-ZPINFsPIFoPqOI.Fo.IQNevalFoINevalIFsPZyI.Fr.IT-UPINsayDFtJqJFsKPZyPT-UFWrYrKD.DEEEEQDx6NsayDNDforB1..4YforB1..4NexitQNevalFo)=~y=A-Z=-+;-AZz-~=r)####>####>####>####>####>####>
;
;
;
;
eval+<eval+<eval+<eval+(q(FoPqOlengthFoBBPP181XXVVVVJJJKKKNdoWchopJFtPDevalMODx4KNFrPIPA-MN-TUV-ZPINFsPIFoPqOI.Fo.IQNevalFoINevalIFsPZyI.Fr.IT-UPINsayDFtJqJFsKPZyPT-UFWrYrKD.DEEEEQDx6NsayDNDforB1..4YforB1..4NexitQNevalFo)=~y=A-Z=-+;-AZz-~=r)####>####>####>####>####>####>
;
;
;
;
์ค๋ช
์ด ํ๋ก๊ทธ๋จ์ ์๋ก ๋ถ๋ช ํ ์ฐ๊ฒฐ๋ 4 ๊ฐ์ ๋์ผํ ์์ ํ๋ก๊ทธ๋จ์ผ๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค. ๊ธฐ๋ณธ ์์ด๋์ด๋ ํ๋ก๊ทธ๋จ์ ๊ฐ ์ฌ๋ณธ์ด ์คํํ๊ธฐ์ ๋๋ฌด ์ฌํ๊ฒ ์์๋์๋์ง ์ฌ๋ถ๋ฅผ ํ์ธํ๋ค๋ ๊ฒ์ ๋๋ค. ๋ง์ผ ๊ทธ๋ ๋ค๋ฉด, ๊ฒฝ๊ณ ๋ฅผ ๋ฟ๋ฆด ์์๋ ๊ฒ ์ธ์๋ ์๋ฌด ๊ฒ๋ํ์ง ์๊ณ ๋ค์ ์ฌ๋ณธ์ ์คํ์ํต๋๋ค; ์ญ์ ๋์ง ์์๊ฑฐ๋ ์ญ์ ๋ ๋ฌธ์๊ฐ ํ๋ก๊ทธ๋จ ์๋์ ์๋ฌด๋ฐ ์ํฅ์ ๋ฏธ์น์ง ์๋ ๋ฌธ์ ์ธ ๊ฒฝ์ฐ, ํ๋ก๊ทธ๋จ์ ์ ์ฒด ์์ค ์ฝ๋๋ฅผ ์ธ์ํ๋ ๊ธฐ๋ฐํ ์์ ์ ์ํํฉ๋๋ค. ๊ฐ ๋ถ๋ถ์ ์ ์ฒด ์์ค ์ฝ๋์ ์ธ์ฝ๋ฉ์ด ํฌํจ๋์ด ์์)์ ์ข ๋ฃ ํ ๋ค์ ์ข ๋ฃํฉ๋๋ค (๋ค๋ฅธ ์์๋์ง ์์ ๋ณต์ฌ๋ณธ์ด ์์ค ์ฝ๋๋ฅผ ๋ค์ ์ธ์ํ์ง ๋ชปํ๋๋กํ์ฌ ๋๋ฌด ๋ง์ ํ ์คํธ๋ฅผ ์ธ์ํ์ฌ quine์ ๋ง์น ์ ์์).
๊ฐ ๋ถ๋ถ์ ๊ธฐ๋ฅ์ ์ผ๋ก ๋ ๋ฆฝ์ ์ธ ๋ ๋ถ๋ถ์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ์ธ๋ถ ๋ํผ ๋ฐ ์ผ๋ถ ๋ด๋ถ ์ฝ๋ ๋ฐ๋ผ์ ๋ณ๋๋ก ๊ณ ๋ คํ ์ ์์ต๋๋ค.
์ธ๋ถ ํฌ์ฅ์ง
์ธ๋ถ ๋ํผ๋ ๊ธฐ๋ณธ์ ์ผ๋ก eval<+eval<+eval< ... >####>####...>###
(๋ฐ๋์ ์ธ๋ฏธ์ฝ๋ก ๊ณผ ์ค ๋ฐ๊ฟ์ด ๋ง์ ๋ชฉ์ ์ ๊ฐ์ง๊ณ ์์ด์ผํฉ๋๋ค. ์ธ๋ฏธ์ฝ๋ก ๋๋ ๊ทธ ์ด์ ์ค ๋ฐ๊ฟ์ ๊ด๊ณ์์ด ํ๋ก๊ทธ๋จ์ ์ผ๋ถ๊ฐ ๋ถ๋ฆฌ๋์ด ์ ์ง๋๋๋กํ๋ ๊ฒ์
๋๋ค) ). ์ด๊ฒ์ ๋งค์ฐ ๋จ์ ํด ๋ณด์ด์ง๋ง ์ฌ๋ฌ ๊ฐ์ง๋ฉด์์ ๋ฏธ๋ฌํ๊ณ ์ด ๊ณผ์ ์ ๋ํด Perl์ ์ ํํ ์ด์ ์
๋๋ค.
๋จผ์ ๋ํผ๊ฐ ํ๋ก๊ทธ๋จ์ ์์๋์ง ์์ ๋ณต์ฌ๋ณธ์์ ์ด๋ป๊ฒ ์๋ํ๋์ง ๋ด
์๋ค. eval
๋ด์ฅ ํจ์๋ก ๊ตฌ๋ฌธ ๋ถ์ํ์ฌ ํ๋์ ์ธ์๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๋
ผ์์ด ์์๋๊ธฐ ๋๋ฌธ์ +
์ฌ๊ธฐ์ ๋จํญ +
์ด ์์ต๋๋ค (์ง๊ธ๊น์ง Perl ๊ณจํผ์๊ฒ ๋งค์ฐ ์น์ ํ ๊ฒ์
๋๋ค. ๋๋๊ฒ๋ ์ข
์ข
์ ์ฉํฉ๋๋ค). ์ฐ๋ฆฌ๋ ์ฌ์ ํ ์ธ์๋ฅผ ๊ธฐ๋ํ๊ณ ์์ต๋๋ค (์ฐ๋ฆฌ๋ ๋จํญ ์ฐ์ฐ์๋ฅผ ๋ณด์์ต๋๋ค). <
๋ค์์ ์ค๋ ๊ฒ์ <>
์ฐ์ฐ์ ์ ์์์ผ๋ก ํด์๋ฉ๋๋ค (์ ๋์ฌ ๋๋ ์ ๋์ฌ ์ธ์๋ฅผ ์ทจํ์ง ์์ผ๋ฏ๋ก ํผ์ฐ์ฐ์ ์์น์์ ์ฌ์ฉํ ์ ์์ต๋๋ค).
<>
์๋นํ ์ด์ํ ์ฐ์ฐ์์
๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ํ์ผ ํธ๋ค์ ์ฝ๊ณ ํ์ผ ํธ๋ค ์ด๋ฆ์ ๊บพ์ ๊ดํธ ์์ ๋ฃ ์ต๋๋ค. ๋๋ ํํ์์ด ํ์ผ ํธ๋ค ์ด๋ฆ์ผ๋ก ์ ํจํ์ง ์์ ๊ฒฝ์ฐ ํํ์์ด ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค (๊ธฐ๋ณธ์ ์ผ๋ก UNIX ์์ด ์ฌ์ฉ์๊ฐ ์
๋ ฅ ํ ํ
์คํธ๋ฅผ ์ผ๋ จ์ ๋ช
๋ น ํ ์ธ์๋ก ๋ณํํ๋ ๋ฐ ์ฌ์ฉํ๋ ๊ฒ๊ณผ ๋์ผํ ํ๋ก์ธ์ค, ์ค์ ๋ก๋ ์ด์ ๋ฒ์ ์ Perl์ด ์ฌ์ฉ๋จ) ์ด๊ฒ์ ๋ํ ์์ด์ง๋ง ์์ฆ Perl์ ๋ด๋ถ์ ์ผ๋ก globbing์ ์ฒ๋ฆฌํฉ๋๋ค. ๋ฐ๋ผ์ ์๋ ๋ ์ฉ๋๋์ ํ์ ๋ฐ๋ผ ์์ผ๋ฉฐ <*.c>
์ผ๋ฐ์ ์ผ๋ก์ ๊ฐ์ ๋ชฉ๋ก์ ๋ฐํํฉ๋๋ค ("foo.c", "bar.c")
. ์ค์นผ๋ผ ์ปจํ
์คํธ์์ (์ :eval
), ์ฒ์ ์คํ๋ ๋ ์ฐพ์ ์ฒซ ๋ฒ์งธ ํญ๋ชฉ ๋ง ๋ฐํํ๊ณ (์ฒซ ๋ฒ์งธ ์ธ์์ ๋์ผ) ์ ๋ ๋ฐ์ํ์ง ์๋ ๊ฐ์์ ๋ฏธ๋ ์คํ์ ๋ํด์๋ ๋ค๋ฅธ ํญ๋ชฉ์ ๋ฐํํฉ๋๋ค.
์ด์ ์์ ์ข
์ข
๋ช
๋ น ํ ์ธ์๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค. -r
์ธ์๊ฐ์๋ ๊ฒ๊ณผ ๊ฐ์ ๊ฒ์ ์ฃผ๋ฉด ํด๋น ์ด๋ฆ์ ํ์ผ์ด ์๋์ง ์ฌ๋ถ์ ๊ด๊ณ์์ด ํ๋ก๊ทธ๋จ์ ๊ทธ๋๋ก ์ ๋ฌ๋ฉ๋๋ค. ํ์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ๋์ํ๋ฏ๋ก, ์๊ณผ ํ์ ํน์ํ ๋ฌธ์๊ฐ์๋ <
๊ฒ๊ณผ ์ผ์นํ๋ ๊ฒ ์ฌ์ด์ ๋ฌธ์๊ฐ์๋ ํ >
, ์ด๊ฒ์ ๋ฌธ์ ๊ทธ๋๋ก ๋ฆฌํฐ๋ด์ฒ๋ผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ฐ์ดํ์ ๊ฐ์ ์ฐ์ฐ์์ ๋ํ Perl์ ํ์๋ ์ดํด๊ฐ ์๋๋์ด์ ๊ฐ์ ์ํฉ์์๋ ๋๊ดํธ๋ฅผ ์ผ์น์ํค๋ ๊ฐ๋ฐ์ ์ธ ๊ฒฝํฅ์ด ์์ผ๋ฏ๋ก <>
์์ ํ๊ฒ ์ค์ฒฉ ํ ์ ์์ต๋๋ค (์ด ํ๋ก๊ทธ๋จ์ด ๊ฐ๋ฅํ ๋ฐ๊ฒฌ). ์ด๋ฌํ ์ค์ฒฉ ๋ ๋ชจ๋ ์ ๊ฐ์ฅ ํฐ ๋จ์ ์ <>
์ ๋ด์ฉ์ ํ์ถ์ด๋ค<>
๊ฑฐ์ ๋ถ๊ฐ๋ฅํ๋ค. ๊ฐ๊ฐ์ 2 ๊ฐ์ <>
์ด์ค์ผ์ดํ ์ฒ๋ฆฌ ๊ฐ์๋ ๊ฒ์ฒ๋ผ ๋ณด์ด ๋ฏ๋ก 3 ๊ฐ์ ๋ด๋ถ์์ ๋ฌด์ธ๊ฐ๋ฅผ ํผํ๋ ค๋ฉด 63 ๊ฐ์ ๋ฐฑ ์ฌ๋์๊ฐ ์ ํ๋์ด์ผํฉ๋๋ค. ๋๋์ด ๋ฌธ์ ์์ ์ฝ๋ ํฌ๊ธฐ๊ฐ ๋จ์ง ์ด์ฐจ์ ์ธ ๊ณ ๋ ค ์ฌํญ์ด๋ผ๊ณ ์๊ฐํ์ง๋ง, ๋ด ์ ์์ ์ด๋ฐ ์ข
๋ฅ์ ํ๋ํฐ๋ฅผ ์ง๋ถ ํ ๊ฐ์น๋ ๊ฑฐ์ ์์์ผ๋ฏ๋ก, ๋ฌธ์ ์ ๋ฌธ์๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๋๋จธ์ง ํ๋ก๊ทธ๋จ์ ์์ฑํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค.
๋ํผ์ ์ผ๋ถ๊ฐ ์ญ์ ๋๋ฉด ์ด๋ป๊ฒ๋ฉ๋๊น?
- ๋จ์ด์ ์ญ์ ๋
eval
๊ทธ๊ฒ์ด๋ก ์ ํํ๋ ์์ธ bareword๋ ์ด๋ค ์๋ฏธ๋ก, ๋ฌธ์์ด์. Perl์ ์ด๊ฒ์ ์ข์ํ์ง ์์ง๋ง ์ธ์ฉ ๋ถํธ๋ก ๋ฌถ์ธ ๊ฒ์ฒ๋ผ ์ฒ๋ฆฌํฉ๋๋ค. ๋ฐ๋ผ์ ๋ค์๊ณผ ๊ฐ์ดeal<+eval<+...
ํด์๋ฉ๋๋ค"eal" < +eval<+...
. ๊ธฐ๋ณธ์ ์ผ๋ก ๋ง์ด ์ค์ฒฉ ๋ ์๋ฐ (์ด์จ๋ ์ฌ์ฉํ์ง ์๋)์ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ธ ์์ ์ ์๋ก ๋ณํํ๊ณ ๋ฌด์๋ฏธํ ๋น๊ต๋ฅผ ์ํํ๊ธฐ ๋๋ฌธ์ ํ๋ก๊ทธ๋จ ์๋์๋ ์ํฅ์ ๋ฏธ์น์ง ์์ต๋๋ค. (์ด๋ฌํ ์ข ๋ฅ์ ์ํฉ์ ์ ์์ ์ธ ์ํฉ์์ ์ ์ฉํ ๊ฒ์ ์๋๊ธฐ ๋๋ฌธ์ ๊ฒฝ๊ณ ์คํธ์ด ๋ง์ด ๋ฐ์ํฉ๋๋ค. ์ฐ๋ฆฌ๋์ด๋ฅผ ์ฌ์ฉํ์ฌ ์ญ์ ๋ฅผ ํก์ํฉ๋๋ค.) ์ด๋ ๊ฒํ๋ฉด ํ์ํ ์ฌ๋ ๊บพ์ ๊ดํธ ์๊ฐ ๋ณ๊ฒฝ๋ฉ๋๋ค (์ด๊ธฐ ๊ดํธ ๋๋ฌธ์) ์ด์ ๋ ๋น๊ต ์ฐ์ฐ์๋ก ํด์๋๊ณ ์์ง๋ง ๋ง์ง๋ง์ ์ฃผ์ ์ฒด์ธ์ ๋ฌธ์์ด์ด ์ค์ฒฉ ๋ ํ์์ ๊ด๊ณ์์ด ์์ ํ๊ฒ ์ข ๋ฃ๋๋๋กํฉ๋๋ค. (์ฌ๊ธฐ์#
์๊ฒฉํ ํ์ํ ๊ฒ๋ณด๋ค ๋ ๋ง์ ํ์๊ฐ ์์ต๋๋ค. ํ๋ก๊ทธ๋จ์ ์์ถํ๊ธฐ ์ํด ์์ฑํ๋ ๊ฒ์ฒ๋ผ ์์ฑํ์ต๋๋ค. - A๋ ๊ฒฝ์ฐ
<
์ญ์ ๋ฉ๋๋ค, ์ฝ๋๋ ์ด์ ๊ตฌ๋ฌธ ๋ถ์ํฉ๋๋คeval(eval<...>)
. ๋ณด์กฐ, ์ธ๋ถ๋eval
์ฐ๋ฆฌ๋ ๊ทธ๋ค์ด ์ ํ ์ ์์ ์ผ๋ก ๋์ ์ค๋ฉด (ํ๋ก๊ทธ๋จ ๋ฑ ์ค์ ํจ๊ณผ๊ฐ ์๋ฌด๊ฒ๋ ๋ฐํํ์ง ํ๊ฐํ๊ณ ์๋ ํ๋ก๊ทธ๋จ์, ๊ทธ๊ฒ์ ์ผ๋ฐ์ ์ผ๋ก NULL ๋ฌธ์์ด ๋๋ bareword๋ ๋๋ฌธ์, ์๋ฌด๋ฐ ํจ๊ณผ๊ฐ ์์ต๋๋ค, ๋ ์ผ๋ฐ์ ์ผ๋ก ๊ทธ๋ค์์ ํตํด ๋ฐํ ์์ธeval
๋ null ๋ฌธ์์ด์ ๋ฐํํ๊ฑฐ๋exit
์ ํ ๋ฐํํ์ง ์๋๋ก ์ฌ์ฉ ํฉ๋๋ค). - a
+
๊ฐ ์ญ์ ๋๋ฉด ์ธ์ ํ ์ฝ๋๊ฐ ์์๋์ง ์์ ๊ฒฝ์ฐ ์ฆ์ ์ํฅ์ ๋ฏธ์น์ง ์์ต๋๋ค. ๋จํญ+
์ ํ๋ก๊ทธ๋จ์ ์ํฅ์ ๋ฏธ์น์ง ์์ต๋๋ค. (์๋ณธ+
์ด ์กด์ฌ ํ๋ ์ด์ ๋ ์์์ ๋ณต๊ตฌํ๋ ๋ฐ ๋์ ์ด๋๋ฏ๋ก ๊ด๊ณ ์ฐ์ฐ์๊ฐ ์๋<
๋จํญ์ผ๋ก ํด์ ๋๋ ์ํฉ์ ์๊ฐ ์ฆ๊ฐํ๋ฏ๋ก<>
์ ํจํ์ง ์์ ํ๋ก๊ทธ๋จ์ ์์ฑํ๋ ค๋ฉด ์ญ์ ๊ฐ ๋ ํ์ํฉ๋๋ค.)
๋ฉํผ ๊ฐ ์ถฉ๋ถํ ์ญ์ ๋๋ฉด ์์ ๋ ์ ์์ง๋ง ๊ตฌ๋ฌธ ๋ถ์๋์ง ์๋ ํญ๋ชฉ์ ์์ฑํ๋ ค๋ฉด ์ผ๋ จ์ ์ญ์ ๋ฅผ ์ํํด์ผํฉ๋๋ค. ๋ค ๋ฒ์ ์ญ์ ๋ก ๋ค์์ ์ํ ํ ์ ์์ต๋๋ค.
eal<evl<eval+<...
Perl์์ ๊ด๊ณ ์ฐ์ฐ์ <
๋ ๋น ์ฐ๊ด ์ ์ด๋ฏ๋ก ๊ตฌ๋ฌธ ์ค๋ฅ (์ ๋์ผํ ๊ตฌ๋ฌธ ์ค๋ฅ 1<2<3
)๊ฐ ๋ฐ์ํฉ๋๋ค. ๋ฐ๋ผ์ ์์ฑ๋ ํ๋ก๊ทธ๋จ์ ํ๋๋ n = 3์
๋๋ค. ๋ ๋ง์ ๋จํญ์ ์ถ๊ฐ +
ํ๋ ๊ฒ์ ๊ทธ๊ฒ์ ๋๋ฆฌ๋ ์ ๋งํ ๋ฐฉ๋ฒ์ฒ๋ผ ๋ณด์ด์ง๋ง ๋ํผ ๋ด๋ถ๊ฐ ์์ ๋ ๊ฐ๋ฅ์ฑ์ด ๋์์ง์ ๋ฐ๋ผ ์ ๋ฒ์ ์ ํ๋ก๊ทธ๋จ์ด ์๋ํ๋ ๊ฒ์ด ๋งค์ฐ ์ด๋ ค์ธ ์ ์์์ ํ์ธํฉ๋๋ค.
๋ฉํผ๊ฐ ์ค์ํ ์ด์ ๋ eval
Perl์์ ๊ตฌ๋ฌธ ์ค๋ฅ๋ฅผ ์ปดํ์ผํ๋ ค๊ณ ํ ๋ ๋ฐ์ํ๋ ์์ธ์ ๊ฐ์ ์์ธ๋ฅผ ํฌ์ฐฉํ๊ธฐ ๋๋ฌธ์
๋๋ค. ์ด ๋๋ฌธ์ eval
๋ฌธ์์ด ๋ฆฌํฐ๋ด์ด๋ฉฐ, ๋ฌธ์์ด์ ์ปดํ์ผ์ ๋ฐํ์์ ๋ฐ์ํ๊ณ , ๋ฌธ์ ๊ทธ๋๋ก ์ปดํ์ผํ์ง ์์ ๊ฒฝ์ฐ, ๊ฒฐ๊ณผ ์์ธ๊ฐ ์กํ. ์ด๋ก ์ธํด eval
๋ ๋ฌธ์์ด์ด ๋ฆฌํด๋๊ณ ์ค๋ฅ ํ์๊ธฐ๊ฐ ์ค์ $@
๋์ง๋ง, ์ฐ๋ฆฌ๋ ๊ฒฐ์ฝ ์ด๋ ๊ฒ๋ ํ์ธํ์ง ์์ต๋๋ค (๋ฐํ ๋ ๋ ๋ฒ์ ์ ํ๋ก๊ทธ๋จ์์ ๋ฆฌํด ๋ ๋ ๋ฌธ์์ด์ ์คํํ๋ ๊ฒฝ์ฐ๋ ์ ์ธ). ๊ฒฐ์ ์ ์ผ๋ก ์ด๊ฒ์ ๋ด๋ถ ์ฝ๋์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ฉด๋ํผ๋ ๊ตฌ๋ฌธ ์ค๋ฅ๋ฅผ ์ผ์ผํจ ๋ค์ ๋ํผ๋ ์ฝ๋๊ฐ ์๋ฌด๊ฒ๋ํ์ง ์๊ฒํฉ๋๋ค (๊ทธ๋ฆฌ๊ณ ํ๋ก๊ทธ๋จ์ ์์๋์ง ์์ ์์ฒด ์ฌ๋ณธ์ ์ฐพ๊ธฐ ์ํด ๊ณ์ ์คํ๋ฉ๋๋ค). ๋ฐ๋ผ์ ๋ด๋ถ ์ฝ๋๋ ๋ํผ๋งํผ ๋ฐฉ์ฌ์ ์ ๊ฐํ์ง ์์๋๋ฉ๋๋ค. ์ฐ๋ฆฌ๊ฐ ๊ฑฑ์ ํ๋ ๊ฒ์ ์์๋๋ฉด ํ๋ก๊ทธ๋จ์ ์์๋์ง ์์ ๋ฒ์ ๊ณผ ๋์ผํ๊ฒ ์๋ํ๊ฑฐ๋ ๊ทธ๋ ์ง ์์ผ๋ฉด ์ถฉ๋ ( eval
์์ธ๋ฅผ ํฌ์ฐฉํ๊ณ ๊ณ์ํ ์ ์์)ํ๊ฑฐ๋ ์๋ฌด๊ฒ๋ ์ธ์ํ์ง ์๊ณ ์ ์์ ์ผ๋ก ์ข
๋ฃ๋๋ค๋ ๊ฒ์
๋๋ค.
ํฌ์ฅ์ง ๋ด๋ถ
๋ํผ ๋ด๋ถ์ ์ฝ๋๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ต๋๋ค (๋ค์ ๋งํด์ _
์คํ ๊ตํ์ด ๋ฐ๋ก ์์ ํ์๋์ง ์๋ Control ์ด ์์ต๋๋ค -+
).
eval+(q(...)=~y=A-Z=-+;-AZz-~=r)
(์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ ์์๋์ด ์ฝ๋๋ ๊ธ๋ก๋ธ ์์ ๋ฌธ์๋ก ์์ ํ ์์ฑ๋ ๊ฒ์
๋๋ค, ๊ทธ ๋ชฉ์ ์ ์์ญ๊ณผ ๋ฌธ์์ด ๋ฆฌํฐ๋ด ํ๊ฐ๋ฅผ ํตํด ๊ฐ๋ฅ ์ค์ ํ๋ก๊ทธ๋จ์ ์์ฑํ ์ ์๋๋ก ๋ฌธ์ฅ ๋ถํธ์ ์๋ก์ด ๋ฌธ์๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์
๋๋ค '
๋๋ "
์ฐ๋ฆฌ์ ์ธ์ฉ ๋ฑ ๋งํฌ๋ํ์ง๋ง q(
โฆ )
๋ํ) ํ์ ๋ฌธ์์ด์ ํ์ฑ ํ ์์๋ ์ ํจํ ๋ฐฉ๋ฒ์
๋๋ค. (์ธ์ ํ ์์๋ ๋ฌธ์์ ์ด์ ๋ ํ๋ก๊ทธ๋จ์์ ๋ฌธ์ ๊ณต๊ฐ ๋ฌธ์์์ด ๋ฌธ์๋ฅผ ๊ณต๋ฐฑ ๋ฌธ์๋ก ์์ญํด์ผํ๊ธฐ ๋๋ฌธ์
๋๋ค. ๋ฐ๋ผ์ ASCII 31์์ ์์ํ์ฌ ๋ฒ์๋ฅผ ํ์ฑํ๊ณ ํด๋น ๋ฒ์์ ๋ ๋ฒ์งธ ์์๋ก ๊ณต๋ฐฑ์ ์ก์ต๋๋ค.) ์์ญ์ ํตํด ์ผ๋ถ ์บ๋ฆญํฐ๋ฅผ ์ ์ํ๋ ๊ฒฝ์ฐ ๋ถ๋ช
ํ ์์ญ์ํ๊ธฐ ์ํด ์บ๋ฆญํฐ๋ฅผ ํฌ์ํด์ผํฉ๋๋ค .๋๋ฌธ์๋ ๊ทธ๋ค์ง ์ ์ฉํ์ง ์์ผ๋ฉฐ ๋ฌธ์ฅ ๋ถํธ์ ์ก์ธ์ค ํ ์์๋ ๊ฒ๋ณด๋ค ๋๋ฌธ์๋ฅผ ์ฐ๋ ๊ฒ์ด ํจ์ฌ ์ฝ์ต๋๋ค.
glob์ ๊ฒฐ๊ณผ๋ก ์ฌ์ฉํ ์์๋ ๋ฌธ์ฅ ๋ถํธ ์ํ๋ฒณ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค (์ ์ค์ ์ธ์ฝ๋ฉ์, ์๋ ์ค์ ์ธ์ฝ๋ฉํ๋ ๋ฌธ์๋ฅผ ๋ํ๋ ๋๋ค).
BCDEFGHIJKLMNOPQRSTUVWXYZ ! "# $ % & '() * +; <=>? @ AZz {|} ~
๊ฐ์ฅ ์ฃผ๋ชฉํ ๋งํ ์ ์ ๊ธ๋ก ์์ ํ์ง ์์ง๋ง ๊ณต๋ฐฑ ๋ฌธ์์ ํจ๊ป Perl ํ๋ก๊ทธ๋จ์ ์์ฑํ๋ ๋ฐ ์ ์ฉํ ๋ฌธ์ฅ ๋ถํธ๊ฐ ๋ง์ด ์์ต๋๋ค. ๋ํ ๋ฌธ์ ๊ทธ๋๋ก์ ๋ฌธ์๋ฅผ ๋๋ฌธ์๋ก ๋ ๋, ์ ์ฅ A
ํ๊ณ Z
(์ธ์ฝ๋ฉ๋์ง ์์ฒด์ ๋ง์๋ฅผ T
ํ๊ณ U
์๊ธฐ ๋๋ฌธ์, A
์์๋ฟ๋ง ์๋๋ผ ๋ฎ์ ๋ฒ์์ ๋์ ์ผ๋ก ํ์ํ๋ค) ์ด๋ ๊ฒํ๋ฉด ์๋ก์ด ์ธ์ฝ๋ฉ ๋ ๋ฌธ์ ์งํฉ์ ์ฌ์ฉํ์ฌ ์์ญ ๋ช
๋ น์ ์์ฑํ ์ ์์ต๋๋ค (๋๋ฌธ์๋ ๊ทธ๋ค์ง ์ ์ฉํ์ง ์์ง๋ง ๋๋ฌธ์ ๋ณ๊ฒฝ์ ์ง์ ํ๋ ๋ฐ ์ ์ฉํฉ๋๋ค). ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ ์ ์์๋ ๊ฐ์ฅ ๋์ ๋๋ ๋ฌธ์๋ [
, \
๋ฐ ]
์ด์ง๋ง ํ์ํ์ง ์์ต๋๋ค (์ถ๋ ฅ์ ์ค ๋ฐ๊ฟ์ด ํ์ํ ๋ ์์ ์ ์ค ๋ฐ๊ฟ์ ์ฌ์ฉํ์ฌ ์์ฑํ์ต๋๋ค.say
์ฐ์ง ๋ง๊ณ \n
; chr 10
๋ํ ์๋ํ์ง๋ง ๋ ์ฅํฉํฉ๋๋ค).
ํ์์ ๊ฐ์ด ๋ํผ ๋ด๋ถ๊ฐ ๋ฌธ์์ด ๋ฆฌํฐ๋ด ์ธ๋ถ์์ ์์๋๋ฉด ์ด๋ป๊ฒ ๋ ์ง ๊ฑฑ์ ํด์ผํฉ๋๋ค. ์์ eval
๋๋ฉด ์คํ๋๋ ๊ฒ์ด ๋ฐฉ์ง๋ฉ๋๋ค. ์ฐ๋ฆฐ ๊ด์ฐฎ์ ๋ฐ์ดํ๊ฐ ์์๋๋ฉด ๋ฌธ์์ด ๋ด๋ถ๊ฐ ์ ํจํ Perl์ด ์๋๊ธฐ ๋๋ฌธ์ ๋ํผ๊ฐ ๊ทธ๊ฒ์ ๋ถ์ก์ ๊ฒ์
๋๋ค. ๋ฐ๋ผ์ ๋ฌธ์์ด์์ ๋ง์ ๋นผ๊ธฐ๋ฅผ ์ฌ์ฉํ๋ฉด ์ ํจํ Perl์ ๋ง๋ค ์ ์๋ค๊ณ ํด๋ ์๋ฌด๊ฒ๋ํ์ง ์์ต๋๋ค. ํ์ฉ๋๋ ๊ฒฐ๊ณผ์
๋๋ค). ์ด ๊ตฌ๋ฌธ ์ค๋ฅ๊ฐ ์๋ ๊ฒฝ์ฐ ์ผ๋ฐ์ ์ผ๋ก ์์ธ์ด ํ๊ฐ๋๋ ๋ฌธ์์ด์ ๋๋์ง ๊ฒ, ์์ญ์ ์์ ์ด ๊ตฌ๋ฌธ ์ค๋ฅ๊ฐ ๋ ; ๋๋ ์ด๊ฒ์ด ๊นจ์ง๋ ๊ฒฝ์ฐ๊ฐ 100 % ํ์คํ์ง ์๋ค. ๊ทธ๋ฌ๋ ๋๋ ๊ทธ๊ฒ์ ํ์คํ๊ฒํ๊ธฐ ์ํด ๋ฌด์ฐจ๋ณ ๊ฐ์ ํ๊ณ ์๋ค.
์ธ์ฝ๋ฉ ๋ ํ๋ก๊ทธ๋จ
๋ฌธ์์ด ๋ฆฌํฐ๋ด ๋ด๋ถ๋ฅผ ์ดํด๋ณด๊ณ ๋ด๊ฐ ์ฌ์ฉํ ์ธ์ฝ๋ฉ์ ๋๋๋ฆฌ๊ณ ๊ณต๋ฐฑ์ ์ถ๊ฐํ์ฌ ๋ ์ฝ๊ธฐ ์ฝ๊ฒ ๋ง๋ค๋ฉด ๋ค์ -+
๊ณผ ๊ฐ์ด A
๋ฉ๋๋ค.
$o=q<
length$o ==181 || zzzz((()));
do {
chop ($t = "eval+<"x4);
$r = '=-+;-AZz-~=';
$s = '$o=q<' . $o . '>;eval$o';
eval '$s=~y' . $r . 'A-Z=';
say "$t(q($s)=~y=A-Z${r}r)" . "####>"x6;
say ";" for 1..4
} for 1..4;
exit>;
eval $o
Quies์ ์ต์ํ ์ฌ๋๋ค์์ด ์ผ๋ฐ์ ์ธ ๊ตฌ์กฐ๋ฅผ ์ธ์ ํ ๊ฒ์
๋๋ค. ๊ฐ์ฅ ์ค์ํ ๋ถ๋ถ์ ์ฒ์์ $ o๊ฐ ์์๋์ง ์์ ์์ ํ์ธํฉ๋๋ค. ๋ฌธ์๊ฐ ์ญ์ ๋ ๊ฒฝ์ฐ, ๊ธธ์ด๊ฐ ์ผ์นํ์ง ์์ต๋๋ค 181
์ฐ๋ฆฌ๊ฐ ์คํํ ์ ์๋๋ก, zzzz((()))
์ด ๋๋ฌธ์ ํ์ ์ถ์ข
์ ๋ถํ ๊ดํธ์ ๊ตฌ๋ฌธ ์ค๋ฅ๊ฐ ์๋ ๊ฒฝ์ฐ, ์ด๋ ๋น์ ์ด ๋๋ฌธ์ ์์, ๋ชจ๋ ์ธ ๊ฐ์ ๋ฌธ์๋ฅผ ์ญ์ ํ๋๋ผ๋ ๋ฐํ์ ์ค๋ฅ ๊ฒ, zzzz
, zzz
, zz
, ๊ทธ๋ฆฌ๊ณ z
ํจ์์ด๋ฉฐ,์ด ์ญ์ ๊ฐ ์๋ ๋ค๋ฅธ ํจ์๋ก ๋ถ์ ๋ฐฉ์ง ํ ์์๋ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค (((
์ obvous ๊ตฌ๋ฌธ ์ค๋ฅ์ ์์ธ์. ์ํ ์์ฒด๋ ์์์ ์ํฅ์๋ฐ์ง ์์ต๋๋ค. ๊ฐ ||
์์ ๋ ์ |
์์ง๋ง์ด ๋ฐ์ํฉ๋๋ค zzzz((()))
๋ฌด์กฐ๊ฑด ์คํํ๋ ์ ํ๋ฅผ; ๋ณ์ ๋๋ ์์๋ฅผ ์์ ์ํค๋ฉด ๋ค์ ์ค ํ๋๋ฅผ ๋น๊ตํ๊ธฐ ๋๋ฌธ์ ๋ถ์ผ์น๊ฐ ๋ฐ์ํฉ๋๋ค 0
.180
, 179
, 178
์ ์ซ์์ ์ด๋ค ๋ถ๋ถ ์งํฉ์ ํ๋ฑ 181
; 1 =
์ ์ ๊ฑฐ ํ๋ฉด ๊ตฌ๋ฌธ ๋ถ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ณ 2 =
๋ ํ์ฐ์ ์ผ๋ก LHS๊ฐ ์ ์ 0 ๋๋ ๋ ๋ฌธ์์ด๋ก ํ๊ฐ๋๊ฒํ๋ฉฐ, ๋ ๋ค ๊ฑฐ์ง์
๋๋ค.
์ ๋ฐ์ดํธ :์ด ๊ฒ์ฌ๋ ์ด์ ๋ฒ์ ์ ํ๋ก๊ทธ๋จ์์ ์ฝ๊ฐ ์๋ชป๋์์ผ๋ฏ๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ํธ์งํด์ผํ์ต๋๋ค. ์ด์ ๋ฒ์ ์ ๋์ฝ๋ฉ ํ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
length$o==179||zzzz((()))
์ด๋ฅผ ์ํด ์ฒ์ ์ธ ๋ฌธ์ฅ ๋ถํธ๋ฅผ ์ญ์ ํ๋ ๊ฒ์ด ๊ฐ๋ฅํ์ต๋๋ค.
lengtho179||zzz((()))
lengtho179
๊ฐ๊ฒฐํ ๋ง์ ์ง์คํ๊ธฐ ๋๋ฌธ์ ์ ๊ฒ์ ์ด๊ธฐ๋ ๊ฒ์
๋๋ค. B
๊ณต๋ฐฑ ๋ฌธ์๋ฅผ ์ธ์ฝ๋ฉํ๋ ๋ ๊ฐ์ ๋ฌธ์ ๋ฅผ ์ถ๊ฐ ํ์ฌ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค . ์ต์ ๋ฒ์ ์ quine์ ๋ค์์ ์ํํฉ๋๋ค.
length$o ==181||zzzz((()))
์ด์ ๊ตฌ๋ฌธ ์ค๋ฅ์์ด =
๋ถํธ์ ๋ถํธ ๋ฅผ ์จ๊ธธ ์ ์์ต๋๋ค $
. (๋์ ๊ธธ์ด๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋ ๊ฐ์ ๊ณต๊ฐ์ด ์๋ ํ๋๋ฅผ ์ถ๊ฐํ๋ค 180
๋ฌธ์ ๊ทธ๋๋ก ๋ ๊ฒ 0
์ ์ ๋น๊ต ์ฑ๊ณตํ bareword๋, ์ ๋ก.์ด ์ํฉ์์ ์
์ฉ ๋ ์์๋ ์์ค๋ก ๋ฌธ์๋ฅผ) ์ต์ข
์
๋ฐ์ดํธ
๊ธธ์ด ๊ฒ์ฌ๊ฐ ํต๊ณผ๋๋ฉด ์ต์ํ ๋ฌธ์ ์ญ์ ์ธก๋ฉด์์ ์ฌ๋ณธ์ด ์์๋์ง ์์ ์์ ์ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ์ฌ๋ณธ์ด ๊ฐ๋จํฉ๋๋ค (์์๋ ๋์ฝ๋ฉ ํ
์ด๋ธ๋ก ์ธํ ๊ตฌ๋์ ๋์ฒด๋์ด ๊ฒ์ฌ์์ ํฌ์ฐฉ๋์ง ์์ต๋๋ค) ๊ทธ๋ฌ๋ ๋๋ ํด๋
ํ
์ด๋ธ ์์๋ง 3 ๋ฒ์ ์ญ์ ๊ฐ ํด์ธ์ ๊นจ๋จ๋ฆฌ์ง ์๋๋ค๋ ๊ฒ์ ๋ฌด์ฐจ๋ณ ๊ฐ์ ๋ฅผ ํตํด ์ด๋ฏธ ํ์ธํ์ต๋๋ค . ์๋ง๋ ๋๋ถ๋ถ ๊ตฌ๋ฌธ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค. ์ฐ๋ฆฌ๋ $o
์ด๋ฏธ ๋ณ์๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฏ๋ก ์ธ๋ถ ๋ํผ๋ฅผ ํ๋ ์ฝ๋ฉํ๋ฉด๋ฉ๋๋ค (์ฝ๊ฐ์ ์์ถ ์ ๋; ์ง๋ฌธ ์ ์ฝ๋ ๊ณจํ ๋ถ๋ถ์ ์์ ํ ์๋ตํ์ง๋ ์์์ต๋๋ค ). ํ ๊ฐ์ง ์๋ น์ ๋๋ถ๋ถ์ ์ธ์ฝ๋ฉ ํ
์ด๋ธ์$r
; ๋ด๋ถ ๋ํผ์ ์ธ์ฝ๋ฉ ํ
์ด๋ธ ์น์
์ ์์ฑํ๊ธฐ ์ํด ๋ฌธ์ ๊ทธ๋๋ก ์ธ์ํ๊ฑฐ๋ ๊ทธ ์ฃผ์์ ์ฝ๋๋ฅผ ์ฐ๊ฒฐ eval
ํ๊ณ ๋์ฝ๋ฉ ํ๋ก์ธ์ค๋ฅผ ์ญ์ผ๋ก ์คํํ๊ธฐ ์ํด ( $ o ์ ์ธ์ฝ๋ฉ ๋ ๋ฒ์ ์ด ๋ฌด์์ธ์ง ํ์
ํ ์ ์์ต๋๋ค ) ์ด ์์ ์์ ๋์ฝ๋ฉ ๋ ๋ฒ์ ๋ง ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ง์ง๋ง์ผ๋ก, ์ฐ๋ฆฌ๊ฐ ์์ ํ ์ฌ๋ณธ์ด์ด์ ์ ์ฒด ์๋ณธ ํ๋ก๊ทธ๋จ์ ์ถ๋ ฅ ํ ์ ์๋ค๋ฉด exit
๋ค๋ฅธ ์ฌ๋ณธ๋ ํ๋ก๊ทธ๋จ์ ์ธ์ํ๋ ค๊ณ ์๋ํ๋ ๊ฒ์ ๋ง๊ธฐ ์ํด ํธ์ถ ํฉ๋๋ค.
ํ์ธ ์คํฌ๋ฆฝํธ
์์ฃผ ์์์ง๋ ์์ง๋ง ๋๊ตฐ๊ฐ๊ฐ ๋ฌผ์ ๊ธฐ ๋๋ฌธ์ ๊ฒ์ํ์ต๋๋ค. ๋๋ ๋ค์ํ ์ค์ ์ผ๋ก ์ฌ๋ฌ ๋ฒ ์คํํ์ต๋๋ค (์ผ๋ฐ์ ์ผ๋ก ๋ณ๊ฒฝ $min
ํ๊ณ $max
๊ด์ฌ์๋ ๋ค์ํ ์์ญ์ ํ์ธํ๊ธฐ ์ํด). ์์ ์๋ํ ๋ ํ๋ก์ธ์ค๊ฐ ์๋ ์์ต๋๋ค. ๋ค๋ฅธ ๊ณณ์ CPU๋ก๋๋ก ์ธํด ์คํ์ด ์ค์ง๋๋ ๊ฒฝํฅ์ด ์์ต๋๋ค. ์ด ์ผ์ด ๋ฐ์ํ์ ๋, ๋๋ $min
๊ทธ ์ฒซ ๋ฒ์งธ ๊ฐ์ผ๋ก $x
์์ ํ ๋ณ๊ฒฝ ๋์ง ์์๊ณ ์คํฌ๋ฆฝํธ๋ฅผ ๊ณ์ ์คํํ์ต๋๋ค (๊ทธ๋์ ๋ฒ์์ ๋ชจ๋ ํ๋ก๊ทธ๋จ์ด ๊ฒฐ๊ตญ ํ์ธ๋์๋์ง ํ์ธํ์ญ์์ค). ๋ค๋ฅธ ์ฌ๋ณธ์์ ์ญ์ ํ๋ฉด ๋ ์ด์ ํ ์ ์๋ค๋ ๊ฒ์ด ๋ช
๋ฐฑํ๊ธฐ ๋๋ฌธ์ ํ๋ก๊ทธ๋จ์ ์ฒซ ๋ฒ์งธ ์ฌ๋ณธ์์๋ง ์ญ์ ๋ฅผ ํ์ธํ์ต๋๋ค.
use 5.010;
use IPC::Run qw/run/;
undef $/;
my $program = <>;
my $min = 1;
my $max = (length $program) / 4 - 3;
for my $x ($min .. $max) {
for my $y ($x .. $max) {
for my $z ($y .. $max) {
print "$x, $y, $z\n";
my $p = $program;
substr $p, $x, 1, "";
substr $p, $y, 1, "";
substr $p, $z, 1, "";
alarm 4;
run [$^X, '-M5.010'], '<', \$p, '>', \my $out, '2>', \my $err;
if ($out ne $program) {
print "Failed deleting at $x, $y, $z\n";
print "Output: {{{\n$out}}}\n";
exit;
}
}
}
}
say "All OK!";
๋ต๋ณ
Befunge-98 , 884, n = 14, ์ ์ โ 2.636
f00f00f00f00f00f00f00f00f00f00f00f00f00f00f0xxxxxxxxxxxxxxx"""""""""""""""fffffffffffffff'''''''''''''''000000000000000\\\\\\\\\\\\\\\'''''''''''''''000000000000000\\\\\\\\\\\\\\\'''''''''''''''fffffffffffffff\\\\\\\\\\\\\\\111111111111111---------------:::::::::::::::!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!000000000000000aaaaaaaaaaaaaaa---------------bbbbbbbbbbbbbbb---------------***************jjjjjjjjjjjjjjj$$$$$$$$$$$$$$$'''''''''''''''+++++++++++++++kkkkkkkkkkkkkkk,,,,,,,,,,,,,,,333333333333333kkkkkkkkkkkkkkk$$$$$$$$$$$$$$$000000000000000{{{{{{{{{{{{{{{'''''''''''''''888888888888888uuuuuuuuuuuuuuu'''''''''''''''!!!!!!!!!!!!!!!111111111111111+++++++++++++++'''''''''''''''xxxxxxxxxxxxxxx###############;;;;;;;;;;;;;;;:::::::::::::::!!!!!!!!!!!!!!!kkkkkkkkkkkkkkk@@@@@@@@@@@@@@@dddddddddddddddkkkkkkkkkkkkkkk:::::::::::::::eeeeeeeeeeeeeeekkkkkkkkkkkkkkk,,,,,,,,,,,,,,,;;;;;;;;;;;;;;;
์จ๋ผ์ธ์ผ๋ก ์ฌ์ฉํด๋ณด์ญ์์ค!
์ ํํ 14์๋ฅผ ์ ๊ฑฐ ํ ๋๋ฟ๋ง ์๋๋ผ ์ต๋ 14์๋ฅผ ์ ๊ฑฐํด๋ ์๋ํ์ง ์์ต๋๋ค .
n = 14
๋งค์ฐ ์์์ ์ธ ์ ํ์ฒ๋ผ ๋ณด์ผ ์๋ ์์ง๋ง ์ค์ ๋ก ์ฌ์ฉํ ๊ธฐ์ ์ ์ค์ ๋ก 1์์ 14๊น์ง์ ๋ฐฉ์ฌ์ ๊ฒฝํ ๋ช
๋ น์๋ง ์ฌ์ฉํ ์ ์์ง๋ง ๊ทธ ์ด์์ผ๋ก ์ฝ๊ฒ ์ฌ์ฉํ ์๋ ์์ต๋๋ค (๊ฐ๋ฅํ์ง๋ง ๋ฐฉ๋ฒ์ ์์ต๋๋ค). order-1 quine์ 73 ๋ฐ์ดํธ์ ๋ถ๊ณผํฉ๋๋ค (๋ ํฌ๊ฒ ์ ์ฉ๋์ง ์๋ ์ผ๋ถ ๊ณจํ ํธ๋ฆญ์ ์ฌ์ฉํ๋๋ผ๋ n
).
200 20 xx""''รร..aa22**..33kk$$00{{''!!uu''!!11++''xx##;;::!!kk@@::,,,,;;
์ค๋ช
๋ด๊ฐ ์์
๋ ์ด ๋ต๋ณ ๋์ ๋ช
๋ น ํฌ์ธํฐ์ ๋ธํ๋ฅผ ์ค์ ํ ์ ์๋ค๋ ๋ฐ๊ฒฌ (2,0)
๋ค์ ์ฝ๋์ ๋ฐฉ์ฌ์ โ ๊ฒฝํ ์กฐ๊ฑด :
20020xx
์ด๊ฒ์ด ์๋ํ๋ ์ด์ ๋ ํด๋น ๋ต๋ณ์ ์ฐธ์กฐํ์ญ์์ค. ๋๋ ์ด๊ฒ์ ์์ผ๋ก ์ฝ๊ฐ๋ง ๋ค์ผ๋ฉด์ ์ด๊ฒ์ ๋ฐ๊ฒฌํ์ง๋ง, ์ด๊ฒ์ ์ฌ๋ฌ ๋ฌธ์๋ฅผ ์ ๊ฑฐ ํ ๋ ๊ฒฌ๊ณ ํ ํจํด์ด ์๋์ง์ ๋ํ ์๋ฌธ์ ์ ๊ธฐํ๋ค. ๊ทธ๋์ ๋๋ ์งง์ Mathematica ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ์ฌ ๋ฌด์ฐจ๋ณ ๋์ ์ผ๋ก ๊ฒ์ํ์ต๋๋ค.
n = 14;
m = 4;
Print @ FromDigits @ {
m + 1, 0,
## & @@ ((m + 1) IntegerDigits[#, 2, n - 4]),
m + 1, 0
} & /@ Select[
Range[0, 2^(n - 4) - 1],
AllTrue[
Subsets[{
m + 1, 0,
## & @@ ((m + 1) IntegerDigits[#, 2, n - 4]),
m + 1, 0
},
{n - m, n - 1}
] //. {a___, _, m + 1} | {a___, 0, _} :> {a},
MatchQ@{___, m + 1, 0}
] &
];
์ด๊ฒ์ ๋งค์ฐ ๋น ๋ฅด๊ฒ ํจํด์ ๋๋ฌ๋๋ค. ์ต๋์ ์ ๊ฑฐ๋ฅผ ์ํด ์๋ํ๋ ํด๋น ์กฐ๊ฐ ์ป์ผ๋ ค๋ฉด n
๋ฌธ์๋ฅผ, ๋น์ ์ด ์ฌ์ฉํ ์์๋ (m0x){n}m0
๊ณณ m
์
๋๋ค n+1
๋ฐ x
์ค ํ๋์
๋๋ค m
๋๋ 0
. ๋ฐ๋ผ์ ๋ค์ ๋ ๋ฌธ์๋ ์ต๋ 2์๋ฅผ ์ ๊ฑฐํ๋ ๋ฐ ํจ๊ณผ์ ์
๋๋ค.
30030030
30030330
30330030
30330330
๋๋ ์ด๊ฒ์ ์ฆ๋ช
ํ ์ ์๋ค๊ณ ํ์ ํ์ง๋ง, ๋จ์ํ n
์ต๋๊น์ง ํ์ธ ํ์ต๋๋ค 7
. ๋ฌผ๋ก ์ด๊ฒ์ n+1
ํ๋์ ์ซ์๋ก ๋ํ๋ผ ์ ์๋ ํ๋ง ์๋ํ๋ฉฐ Befunge 98์์ ๊ฐ์ฅ ํฐ ์ซ์ f
๋ 15๋ฅผ ๋ํ๋
๋๋ค. ์ด๊ฒ์ด ๋์ ์ ๊ทผ ๋ฐฉ์์ด๋ก ์ ํ๋๋ ์ด์ n = 14
์
๋๋ค. ๋๊ตฐ๊ฐ ๋ธํ๋ฅผ ๋ ํฌ๊ฒ ์ค์ ํ๋ ๋ฐฉ๋ฒ์ ์ฐพ์ผ๋ฉด n+1
์ด ๋ฐฉ์ฌ์ ๊ฒฝํ ํด๋์ ์์๋ฅผ ๋ฌดํ์ ๋๋ฆด ์ ์์ต๋๋ค.
์ค์ ์ฝ๋๋ฅผ ๋ณด์. ๊ธฐ๋ณธ์ ์ผ๋ก ๋ ๋ถ๋ถ์ด ์์ต๋๋ค. ๋จผ์ (15,0)
๋ฐฉ๊ธ ์ธ๊ธ ํ๋๋ก ๋ธํ๋ฅผ ์ค์ ํ์ต๋๋ค .
f00f00f00f00f00f00f00f00f00f00f00f00f00f00f0xxxxxxxxxxxxxxx
๋๋จธ์ง ์ฝ๋๋ ๊ฐ ๋ช ๋ น์ 15 ๋ฒ ๋ฐ๋ณตํ์ฌ ์์ค๋ฅผ ์ธ์ํฉ๋๋ค. ๋ฐ๋ณต์ ์ ๊ฑฐํ๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
"f'0\'0\'f\1-:!!0a-b-*j$'+k,3k$0{'8u'!1+'x#;:!k@dk:ek,;
๋ "
,์ด ๋ฌธ์์ด ๋ชจ๋๋ฅผ ์์ ์ฃผ์์ ํฌ์ฅ ํ ํ ๋ค์ ์คํ๊ณผ ๋ ๋ฌธ์์ด ๋ชจ๋์ (์์ ์ ์ ์ธํ) ๋ชจ๋ ๋ฌธ์๋ฅผ ๋ฐ์ด : ํ์ค 2D quining ๊ธฐ์ ์ด๋ค. ์ ๊ฑธ์ณ ์๊ธฐ ๋๋ฌธ์, ์ด๊ฒ์ ์ฐ๋ฆฌ๊ฐ ํ๋ฐ๊ธฐ์ ๋ชจ๋ ์ฝ๋ ํฌ์ธํธ๋ฅผ ์ป์ ์ ์์ต๋๋ค,ํ์ง๋ง ์ฐ๋ฆฌ์๊ฒ ์ ๋ฐ์์ ์ ์ฉ ์๋ฌด๊ฒ๋ ์ป์ ์คํจ f00f00...f0
๋นํธ, ๊ทธ๊ฒ์ ๋จ์ง๊ฐ ๋ ์์๋ ๋ ๋ฌธ์ (๊ธฐ๋ก ํ ๊ฒ์ด๋ค f
๋๋ 0
๋ฌธ์๊ฐ ์ญ์ ๋ฉ๋๋ค์ ๋ฐ๋ผ ). ๊ทธ๋ฌ๋์ด ๋ถ๋ถ์ 15 ๋ฒ ๋ฐ๋ณต๋๋ ๋ฌธ์๋ก ๊ตฌ์ฑ๋์ง ์์ผ๋ฏ๋ก ์ด์จ๋ ๋ณ๋๋ก ์ธ์ํด์ผํฉ๋๋ค.
๋ณด๋ค ํธ๋ฆฌํ๊ฒ ์์ ๋์ง ์์ quine์์ ์์์๋ ๋ฌธ์์ด์ ๊ธธ์ด "
๋ -1 (mod 15)
์
๋๋ค. ์ด๋ ๊ฒํ๋ฉด ์ ๊ฑฐํ๋ ๋ฌธ์ ์ (์ต๋ 14 ๊ฐ)์ ๊ด๊ณ์์ด ๊ธฐ๋ก ๋ ๋ฌธ์ ์ ๋ ํญ์ 3 (1 x
๊ณผ 2 f
๋ฐ 1 0
)์ด๋ฉ๋๋ค. ์ด๊ฒ์ ์ค์ ๋ก ์ต๋ 14์ ๋ชจ๋ ๋ฐฉ์ฌ์ ์ฃผ๋ฌธ์ ํด๋น๋ฉ๋๋ค.
์ด์ f00f00...f0
๋ถํ ์ ์ธ์ํ์ฌ ์์ํฉ๋๋ค .
f'0\'0\'f\1-:!!0a-b-*j$'+k,
f Push 15, a loop counter.
'0\'0\'f\ Put "00f" underneath the loop counter.
1- Decrement the loop counter.
:!! Copy it, and turn it into a 1 if it's positive.
0a-b- Push -21.
* Multiply by 0 if the loop counter is zero, or by 1 otherwise.
j Jump that many steps. If the value was 0, this is a no-op and
the loop ends. Otherwise, this brings us back after the f.
$ Pop the loop counter (which is now 0).
'+k, Print the top of the stack 43 times, which gives us all of
the "f00f00...f0" and leaves one "0" on top of the stack.
๋ค์์ 3k$
๋จ์ํ ํ๋ก๊ทธ๋จ ์์ ๋ถ๋ถ์์ 0
ํธ์ ํ ์ธ ๋ฌธ์๋ฟ๋ง ์๋๋ผ์ด๋ฅผ ๋ฒ๋ฆฝ๋๋ค "
. ์ด์ ์คํ์๋ ์ญ์ ๋ ๋ฌธ์์ ๋ฐ๋ผ "
์๋ณธ ๋ค์ ์ผ๋ถ ์ฐ๋ ๊ธฐ์ ๋ค์์๋ ๋ฌธ์ ๋ง ํฌํจ f00f00...f0
๋ฉ๋๋ค.
์ด์ ๋จ์ ๋ฌธ์๋ฅผ ํฌํจํ์ฌ ์คํ์ ์๋จ์ ๋ค์ง๊ณ ๊ฐ๊ฐ์ 15 ๋ฒ ์ธ์ํด์ผํฉ๋๋ค.
0{ Start a new, empty stack. This pushes two zeros onto the original stack.
'8u Move the top 56 values from the original stack to the new one, which
is the 54 characters after the " as well as those two zeros. This is
implemented as pop-push loop, so it reverses the order of those elements.
'!1+ Push a " by incrementing a !.
'x Push an x. Now we've got all the characters that are repeated 15 times.
#; Enter a loop. This is a standard technique for Befunge-98: the ; is
a bit like a comment character, that ignores everything until the next
;, but we jump over the first one with #, so that from now on only
the code inside will be executed (over and over).
:! Copy the top of the stack, and compute logical NOT (1 if 0, 0 otherwise).
k@ Terminate the program that many times (i.e. when the top of the
stack is zero).
dk: Make 14 copies of the top of the stack.
ek, Print 15 characters from the top of the stack.
;
๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฒ ๋ค์ผ. ๐
๋ต๋ณ
์๋ฐ ์คํฌ๋ฆฝํธ (ES6), 927 ๋ฐ์ดํธ, n = 1, ์ ์ = 859329
์ฐธ๊ณ : ์ด๊ฒ์ ์คํํ๊ธฐ ์ํด ๋ธ๋ผ์ฐ์ ์ฝ์๊ณผ ๊ฐ์ REPL์ ์ฌ์ฉํ์ง ๋ง์ญ์์ค.
์ด๊ฒ์ ์ฝ๋ ๊ธธ์ด๊ฐ ์ค์ํ๊ธฐ ์ ์ ์์ฑ๋์์ผ๋ฏ๋ก ์์ง ๊ณจํ๋ฅผ ์น์ง ์์์ต๋๋ค.
์ด๊ฒ์ ๋งค์ฐ ์ด๋ ค์ ์ผ๋ฉฐ ์ฒ ์ ํ ์ค๋ช ์ด ํ์ํฉ๋๋ค. ์ด ๋์ ์ ์กฐ๊ธ ๋ ํ๊ตฌ ํ ํ์ ๋์ค์ ์ธ ๊ฒ์ ๋๋ค!
etTimeout=stTimeout=seTimeout=setimeout=setTmeout=setTieout=setTimout=setTimeut=setTimeot=setTimeou=unescape=>42;
setTimeout
`c="function f(){x=String.fromCharCode(96);n=String.fromCharCode(10);q=String.fromCharCode(34);y='etTimeout=stTimeout=seTimeout=setimeout=setTmeout=setTieout=setTimout=setTimeut=setTimeot=setTimeou=unescape=>42;'+n;z='setTimeout'+n+x+'c='+q+f+';f();_=1'+q+';if(window._);else if(c.length>339)eval(c)//'+x+'///'+x+n+n;console.log(y+z+z)};f();_=1";if(window._);else if(c.length>339)eval(c)//`///`
setTimeout
`c="function f(){x=String.fromCharCode(96);n=String.fromCharCode(10);q=String.fromCharCode(34);y='etTimeout=stTimeout=seTimeout=setimeout=setTmeout=setTieout=setTimout=setTimeut=setTimeot=setTimeou=unescape=>42;'+n;z='setTimeout'+n+x+'c='+q+f+';f();_=1'+q+';if(window._);else if(c.length>339)eval(c)//'+x+'///'+x+n+n;console.log(y+z+z)};f();_=1";if(window._);else if(c.length>339)eval(c)//`///`
์ฐธ๊ณ : ํํ ์ค ๋ฐ๊ฟ์ด ์์ต๋๋ค
๊ธฐ๋ณธ์ ์ผ๋ก ์ฒซ ๋ฒ์งธ ์ค์ setTimeout
์ฌ๋ฐ๋ฅธ โ์๋ชป๋ ์ฒ ์โ์ ์ด๋ฆ ์ ์ ํจํ ํจ์ ๋ก ๋ฐ๊พธ๋๋ก ์ ์คํ๊ฒ ๊ตฌ์ฑ๋์ด ์์ผ๋ฏ๋ก ๋ฌธ์ ์ค ํ๋์์ ๋ฌธ์๋ฅผ ์ ๊ฑฐ setTimeout
ํ๋ฉด ์ฝ๋๊ฐ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง ์๊ณ ๋นํ ๋ฒ์ ์ด ์คํ๋ ์ ์์ต๋๋ค. ๋ํ ์ฒซ ๋ฒ์งธ ์ค์์ ํ ๋ฌธ์๋ฅผ ์ ๊ฑฐํด๋ ์ค๋ฅ๊ฐ์๊ณ ๋๋จธ์ง ์ฝ๋๋ ์ํฅ์๋ฐ์ง ์๋๋ก ์คํ๋ ์ ์์ต๋๋ค.
๋ ๋ฒ์งธ์ ์ธ ๋ฒ์งธ ๋ธ๋ก์ ์ ํํ ๊ฐ์ต๋๋ค. ํ๋๊ฐ ์๋ฃ๋๋ฉด ๋ค๋ฅธ ํ๋๋ _
quine์ ๋ณต์ ํ์ง ์๋๋ก ๋ณ์๋ฅผ ์ค์ ํฉ๋๋ค . ์ด๋ฌํ ๋ธ๋ก ์ค ํ๋๊ฐ ์ค๋ฅ๋ฅผ ๋ฐ์์ํค๋ ๊ฒฝ์ฐ ๋ค๋ฅธ ๋ธ๋ก์ด๋ฅผ ์ฌ์ฉํ์ฌ ๋น๋๊ธฐ ์ ์ผ๋ก ํธ์ถ ๋์๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ๋ธ๋ก์ ์ํฅ์ ๋ฏธ์น์ง ์์ต๋๋ค setTimeout
. ์๋ฌ๋ _
์ค์ ๋์ง ์์ผ๋ฏ๋ก ๋ค๋ฅธ ๋ธ๋ก์ ์ฑ๊ณต์ ์ผ๋ก ์ข
๋ฃ๋ฉ๋๋ค. ๊ธฐ๋ณธ ์ฝ๋๋ ๋ฌธ์์ด๋ก๋์ด ์์ผ๋ฉฐ, ์ ๊ฑฐ๋์ง ์์๋์ง ํ์ธํ๊ธฐ ์ํด ๊ฐ ๋ธ๋ก์ ๊ธธ์ด๋ฅผ ํ์ธํฉ๋๋ค.
ํ ํ๋ฆฟ ๋ฌธ์์ด์ ๋์ ์ฃผ์์ด์๋ ๋ค์ ์ค์ ํ ํ๋ฆฟ ๋ฌธ์์ด์ ํ ํ๋ฆฟ ๋ฌธ์์ด์ ๊ตฌ์ฑํ๋ ๋ฐฑํฑ ์ค ํ๋๊ฐ ์ ๊ฑฐ๋๋ฉด ์ฝ๋์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง ์๋๋ก ๋ณดํธํฉ๋๋ค. ์ข ๋ฃ ๋ฐฑํฑ์ด ์ ๊ฑฐ๋๋ฉด ์ฃผ์์์ ๋ฐฑํฑ์ผ๋ก ํ ํ๋ฆฟ ๋ฌธ์์ด์ด ๋๋ฉ๋๋ค. ์์ ๋ฐฑํฑ์ด ์ ๊ฑฐ๋๋ฉด setTimeout์ด ํ ๋น๋์ง ์์ ํจ์ (no-op)๋ก ํ๊ฐ๋๊ณ ์ฝ๋๋ setTimeout์์ด ์ ์์ ์ผ๋ก ์คํ๋ฉ๋๋ค. ๋ค๋ฅธ ์ฃผ์์ผ๋ก ๋ ๋ฐฑํฑ์ด ๋ฌดํจํ๋ฉ๋๋ค.
๊ทธ๊ฒ ๋ญ์ผ? ์๋ํด๋ณด๊ณ ์ถ์ต๋๊น? ๋ ๋งํ์ง ๋ง!
์ ์ฒด ํ์ด์ง ๋ชจ๋๋ฅผ ๊ถ์ฅํฉ๋๋ค.
์ ๋ ฅ ์์๋ฅผ ๋ฌด์ํ์ญ์์ค.์ด ์ค ๋ํซ์ ์ ๋ ฅ์๋ฐ์ง ์์ต๋๋ค.
์ฝ๋์์ ํ ๋ฌธ์๋ฅผ ์ ๊ฑฐํ์ญ์์ค!
๋ฏฟ์ง ์์ต๋๊น? ์ ์์ ์ธ ์ฝ๋๋ ์ฌ์ ํ ์๋ํ์ง๋ง (Quineํ์ง๋ ์์ต๋๋ค โฆ) ๋ค์๊ณผ ๊ฐ์ด ํด๋ณด์ญ์์ค console.log(5)
!
์ฐธ๊ณ : REPL ๊ธฐ๋ฅ์ ๋นํ์ฑํํ๋ ค๋ฉด ์ค ๋ํซ์ ์ฝ๊ฐ ์์ ํด์ผ ํ๋ฏ๋ก์ด ๋ต๋ณ์ ๋ํด์๋ง ์ฌ๋ฌ ์ถ๋ ฅ ๊ธฐ๋ฅ์ ์ ๊ฑฐํ์ต๋๋ค.
etTimeout=stTimeout=seTimeout=setimeout=setTmeout=setTieout=setTimout=setTimeut=setTimeot=setTimeou=unescape=>42;
setTimeout
`c="function f(){x=String.fromCharCode(96);n=String.fromCharCode(10);q=String.fromCharCode(34);y='etTimeout=stTimeout=seTimeout=setimeout=setTmeout=setTieout=setTimout=setTimeut=setTimeot=setTimeou=unescape=>42;'+n;z='setTimeout'+n+x+'c='+q+f+';f();_=1'+q+';if(window._);else if(c.length>339)eval(c)//'+x+'///'+x+n+n;console.log(y+z+z)};f();_=1";if(window._);else if(c.length>339)eval(c)//`///`
setTimeout
`c="function f(){x=String.fromCharCode(96);n=String.fromCharCode(10);q=String.fromCharCode(34);y='etTimeout=stTimeout=seTimeout=setimeout=setTmeout=setTieout=setTimout=setTimeut=setTimeot=setTimeou=unescape=>42;'+n;z='setTimeout'+n+x+'c='+q+f+';f();_=1'+q+';if(window._);else if(c.length>339)eval(c)//'+x+'///'+x+n+n;console.log(y+z+z)};f();_=1";if(window._);else if(c.length>339)eval(c)//`///`
<!-- Try the test suite below! --><strong id="bytecount" style="display:inline; font-size:32px; font-family:Helvetica"></strong><strong id="bytediff" style="display:inline; margin-left:10px; font-size:32px; font-family:Helvetica; color:lightgray"></strong><br><br><pre style="margin:0">Code:</pre><textarea id="textbox" style="margin-top:5px; margin-bottom:5px"></textarea><br><pre style="margin:0">Input:</pre><textarea id="inputbox" style="margin-top:5px; margin-bottom:5px"></textarea><br><button id="testbtn">Test!</button><button id="resetbtn">Reset</button><br><p><strong id="origheader" style="font-family:Helvetica; display:none">Original Code Output:</strong><p><div id="origoutput" style="margin-left:15px"></div><p><strong id="newheader" style="font-family:Helvetica; display:none">New Code Output:</strong><p><div id="newoutput" style="margin-left:15px"></div><script type="text/javascript" id="golfsnippet">var bytecount=document.getElementById("bytecount");var bytediff=document.getElementById("bytediff");var textbox=document.getElementById("textbox");var inputbox=document.getElementById("inputbox");var testbtn=document.getElementById("testbtn");var resetbtn=document.getElementById("resetbtn");var origheader=document.getElementById("origheader");var newheader=document.getElementById("newheader");var origoutput=document.getElementById("origoutput");var newoutput=document.getElementById("newoutput");textbox.style.width=inputbox.style.width=window.innerWidth-50+"px";var _originalCode=null;function getOriginalCode(){if(_originalCode!=null)return _originalCode;var allScripts=document.getElementsByTagName("script");for(var i=0;i<allScripts.length;i++){var script=allScripts[i];if(script.id!="golfsnippet"){originalCode=script.textContent.trim();return originalCode}}}function getNewCode(){return textbox.value.trim()}function getInput(){try{var inputText=inputbox.value.trim();var input=eval("["+inputText+"]");return input}catch(e){return null}}function setTextbox(s){textbox.value=s;onTextboxChange()}function setOutput(output,s){output.innerHTML=s}function addOutput(output,data){output.innerHTML='<pre style="background-color:'+(data.type=="err"?"lightcoral":"lightgray")+'">'+escape(data.content)+"</pre>"}function getByteCount(s){return(new Blob([s],{encoding:"UTF-8",type:"text/plain;charset=UTF-8"})).size}function onTextboxChange(){var newLength=getByteCount(getNewCode());var oldLength=getByteCount(getOriginalCode());bytecount.innerHTML=newLength+" bytes";var diff=newLength-oldLength;if(diff>0){bytediff.innerHTML="(+"+diff+")";bytediff.style.color="lightcoral"}else if(diff<0){bytediff.innerHTML="("+diff+")";bytediff.style.color="lightgreen"}else{bytediff.innerHTML="("+diff+")";bytediff.style.color="lightgray"}}function onTestBtn(evt){origheader.style.display="inline";newheader.style.display="inline";setOutput(newoutput,"");setOutput(origoutput,"");var input=getInput();if(input===null){addOutput(origoutput,{type:"err",content:"Input is malformed. Using no input."});addOutput(newoutput,{type:"err",content:"Input is malformed. Using no input."});input=[]}doInterpret(getNewCode(),input,function(data){addOutput(newoutput,data)});doInterpret(getOriginalCode(),input,function(data){addOutput(origoutput,data)});evt.stopPropagation();return false}function onResetBtn(evt){setTextbox(getOriginalCode());origheader.style.display="none";newheader.style.display="none";setOutput(origoutput,"");setOutput(newoutput,"")}function escape(s){return s.toString().replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")}window.alert=function(){};window.prompt=function(){};function doInterpret(code,input,cb){var workerCode=interpret.toString()+";function stdout(s){ self.postMessage( {'type': 'out', 'content': s} ); }"+" function stderr(s){ self.postMessage( {'type': 'err', 'content': s} ); }"+" function kill(){ self.close(); }"+" self.addEventListener('message', function(msg){ interpret(msg.data.code, msg.data.input); });";var interpreter=new Worker(URL.createObjectURL(new Blob([workerCode])));interpreter.addEventListener("message",function(msg){cb(msg.data)});interpreter.postMessage({"code":code,"input":input});setTimeout(function(){interpreter.terminate()},1E4)}setTimeout(function(){getOriginalCode();textbox.addEventListener("input",onTextboxChange);testbtn.addEventListener("click",onTestBtn);resetbtn.addEventListener("click",onResetBtn);setTextbox(getOriginalCode())},100);function interpret(code,input){_=undefined;window={};alert=function(s){stdout(s)};window.alert=alert;console.log=alert;prompt=function(s){if(input.length<1)stderr("not enough input");else{var nextInput=input[0];input=input.slice(1);return nextInput.toString()}};window.prompt=prompt;(function(){try{_=undefined;eval(code);if(typeof evalResult=="disabled_function_evaluation"){var callResult=evalResult.apply(this,input);if(typeof callResult!="undefined")stdout(callResult)}}catch(e){stderr(e.message)}})()};</script>
๋ ๋์ ์ค๋ช ์ด ๊ณง ๋์ต๋๋ค. ๊ทธ๋์ ๋๊ธ / ์ง๋ฌธ / ๋นํ์ด์๋ ์ฑํ @jrich์์ ์ ๋ฅผ ping ํด์ฃผ์ญ์์ค.