ํƒœ๊ทธ ๋ณด๊ด€๋ฌผ: quine

quine

๋ฐฉ์‚ฌ์„  ๊ฐ•ํ™” ํ€ธ ๋ฐฉ์‚ฌ์„  ๊ฒฝํ™” ํ€ด๋„ค ๋Š” ํ•˜๋‚˜์˜ ๋ฌธ์ž๋ฅผ

์•„์‹œ๋‹ค์‹œํ”ผ, ๋ฐฉ์‚ฌ์„  ๊ฒฝํ™” ํ€ด๋„ค ๋Š” ํ•˜๋‚˜์˜ ๋ฌธ์ž๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ์—ฌ์ „ํžˆ ์‚ฌ์ „ ์ˆ˜์ • ๋œ ์›๋ณธ์„ ์ธ์‡„ ํ•  ์ˆ˜์žˆ๋Š” ํ€ด๋‹ˆ์ž…๋‹ˆ๋‹ค. ๋ฌธ์ œ๋Š” ๋Œ€๋ถ€๋ถ„์ด ํ•˜๋‚˜์˜ ๋ฌธ์ž ๋งŒ ์ œ๊ฑฐ ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋ชจ๋“  ๊ฒƒ์ด ๋ฌด๋„ˆ์ง‘๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ด๊ฒƒ์ด ๋‚˜์˜ค๋Š” ๊ณณ์ž…๋‹ˆ๋‹ค. ๋‹น์‹ ์˜ ๋ชฉํ‘œ๋Š” ๊ฐ€๋Šฅํ•œ ํ•œ ๋งŽ์€ ์บ๋ฆญํ„ฐ๋ฅผ ์ œ๊ฑฐ ํ•  ์ˆ˜์žˆ๋Š” ๋ฐฉ์‚ฌ์„  ๊ฒฝํ™” ํ€ด๋‹ˆ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทœ์น™์„ ์ค€์ˆ˜ํ•˜๋Š” ๋ชจ๋“  ์–ธ์–ด๊ฐ€ ์ข‹์Šต๋‹ˆ๋‹ค.

๊ทœ์น™

  • ํ”„๋กœ๊ทธ๋žจ์€ 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์ž…๋‹ˆ๋‹ค. ๋” ๋งŽ์€ ๋‹จํ•ญ์„ ์ถ”๊ฐ€ +ํ•˜๋Š” ๊ฒƒ์€ ๊ทธ๊ฒƒ์„ ๋Š˜๋ฆฌ๋Š” ์œ ๋งํ•œ ๋ฐฉ๋ฒ•์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ ๋ž˜ํผ ๋‚ด๋ถ€๊ฐ€ ์†์ƒ ๋  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์•„์ง์— ๋”ฐ๋ผ ์ƒˆ ๋ฒ„์ „์˜ ํ”„๋กœ๊ทธ๋žจ์ด ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์ด ๋งค์šฐ ์–ด๋ ค์šธ ์ˆ˜ ์žˆ์Œ์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

๋žฉํผ๊ฐ€ ์ค‘์š”ํ•œ ์ด์œ ๋Š” evalPerl์—์„œ ๊ตฌ๋ฌธ ์˜ค๋ฅ˜๋ฅผ ์ปดํŒŒ์ผํ•˜๋ ค๊ณ  ํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์˜ˆ์™ธ์™€ ๊ฐ™์€ ์˜ˆ์™ธ๋ฅผ ํฌ์ฐฉํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ด ๋•Œ๋ฌธ์— 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,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}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 ํ•ด์ฃผ์‹ญ์‹œ์˜ค.


๋‹ต๋ณ€