C ãªãã ãã©ãçãããã¿æ¸ããã Python ã®ã³ã¼ãã gzip ã§å§ç¸®ã㦠Base64 ã§ã¨ã³ã³ã¼ããããã¤ãã復å ãã¦å®è¡ãããã¨ã§ AC ã§ãã pic.twitter.com/xsPaFGoi0u
— ãã³ã¡ããððð¦ (@rsk0315_h4x) June 8, 2024
ãåãè¾¼ã¿ããã«ããã£ã¦ãã¡ããã¨ããã³ã¼ããæ¸ãå¿ è¦ãããããããã¨ãã声ãèãããã®ã§ãã¡ããã¨ããã³ã¼ããæ¸ããã«ããæ¹æ³ã«è¨åãã¾ãã ã¨ãã£ã¿ã®æ©è½ã使ãããªããã¨ãéè¦ã§ãã
ã¨ãã£ã¿ã§ã®æä½
ã¬ãã« $K$ ã®ã«ã¼ããããå¾ã¦ããç¶æ ããã¬ãã« $K+1$ ã®ã«ã¼ããããå¾ãæä½ã®ä¸ä¾ãèãã¾ããããããããã®ããã$K=1$ ã¨ããã¨ãã®ããã¹ããæ·»ããªããæ¸ãã¾ãã
### #.# ###
(1) å ¨ä½ãç©å½¢é¸æ*1ãã¦ã³ãã¼ãã¦ããã
(2) å
¨ä½ãç©å½¢é¸æããå
¨ã¦ã®æåã .
ã§ç½®ãæããã
... ... ...
(3) (1) ã§ã³ãã¼ããå 容ãå é ã«è²¼ãã¤ããã
###... #.#... ###...
(4) ã«ã¼ã½ã«ãå é è¡ã®æ«å°¾ã«ç§»åããæ«å°¾ã«å度貼ãã¤ããã
###...### #.#...#.# ###...###
(5) å ¨ä½ã®å 容ãåãåãã
(6) (1) ã§ã³ãã¼ããå 容ã 3 åï¼æ¨ªæ¹åã«ç¹°ãè¿ãããã«ï¼è²¼ãã¤ããã
######### #.##.##.# #########
(7) æ«å°¾ã«ç§»åãã(5) ã§åãåã£ãå 容ãè²¼ãã¤ããã
######### #.##.##.# ######### ###...### #.#...#.# ###...###
(8) æ«å°¾ã«ç§»åãã(1) ã§ã³ãã¼ããå 容ã 3 åè²¼ãã¤ããã
######### #.##.##.# ######### ###...### #.#...#.# ###...### ######### #.##.##.# #########
(9) ä¿åããã
ã§ãã¾ããã
Vim ã®ç´¹ä»
ããã§ãåæä½ã¯ Vim*2ã®ã³ãã³ãã§å®ç¾ãããã¨ãã§ãã¾ãã
- (1)
<CTRL-V>G$"ay
- (2)
<CTRL-V>G$r.
- (3)
"aP
- (4)
$"ap
- (5)
"bdG
- (6)
3"aP
- (7)
Go<ESC>"bP
- (8)
G3"ap
- (9)
ZZ
<CTRL-V>
㨠<ESC>
ã¯ãããããcontrol ãæ¼ããªãã V
ãæ¼ãããesc ãæ¼ããã§ãã
ãã¨ãã°ãä¸è¨ã®ãããªå
容ï¼<CTRL-V>
㨠<ESC>
ã®ç®æã¯ããããã 0x16, 0x1B ã®æåã³ã¼ããæã¤æåãç´æ¥ãªãã¨ããã¦å
¥åããï¼ã c.vim
ã¨ããååã§ç¨æãã¦ããã¾ãã
<CTRL-V>G$"ay<CTRL-V>G$r."aP$"ap"bdG3"apGo<ESC>"bPG3"apZZ
ã¾ããc-out.txt
ã¨ããååã®ãã¡ã¤ã«ã«ä¸è¨ãæ¸ãè¾¼ãã§ããã¾ãï¼ã¬ãã« $K=0$ ã®ã«ã¼ãããï¼ã
#
ããã«å¯¾ãã¦ãä¸è¨ãå®è¡ãããã¨ã§ãã¬ãã« $K+1$ ã®ã«ã¼ããããå¾ããã¾ãã
% vim -N -i NONE -u NONE -s c.vim c-out.txt 2>/dev/null
è£è¶³
使ã£ãæ©è½ã®èª¬æã§ãã
<CTRL-V>
ï¼ç©å½¢é¸æã®éå§G
ï¼æçµè¡ã«ç§»å$
ï¼è¡æ«ã«ç§»å"ay
ï¼a
ã¨ããååã®ã¬ã¸ã¹ã¿ã«ã³ãã¼r.
ï¼.
ã«ç½®æ"aP
ï¼a
ã¨ããååã®ã¬ã¸ã¹ã¿ããï¼ã«ã¼ã½ã«ã®åã«ï¼è²¼ãã¤ã3
ãåç½®ãããã¨ã§ 3 åç¹°ãè¿ã
"ap
ï¼a
ã¨ããååã®ã¬ã¸ã¹ã¿ããï¼ã«ã¼ã½ã«ã®å¾ã«ï¼è²¼ãã¤ã"bdG
ï¼æçµè¡ã¾ã§ãåãåããå 容ã
b` ã¨ããååã®ã¬ã¸ã¹ã¿ã«å ¥ãão<ESC>
ï¼ã«ã¼ã½ã«ã®ä¸ã«è¡ã追å ãão
ã§æ¿å ¥ã¢ã¼ãã«ãªã£ãã®ã<ESC>
ã§è§£é¤ãã
ZZ
ï¼ä¿åãã
ï¼è£è¶³ãããï¼
æè¿ã¯ âVim-like ãªâ ãã¼ãã¤ã³ããæä¾ãã IDE ãããããã§ãããããããæ©è½ããµãã¼ããã¦ããã®ãã¯ç¥ãã¾ããã ãããããã³ã¡ãã㯠Emacs ãæ®æ®µä½¿ããã¦ãã¾ãããå®ã¯ Vim ã®ãã¨ã好ãã§ãã
åãè¾¼ã¿
ãã¦ãåãè¾¼ãã çµæã次ã®ãããªå
容ã®ãã¡ã¤ã« c.py
ãå¾ããã¾ãã
S = [ "#", """### #.# ###""", ..., # K = 2 ã®ã¨ãã®çã ..., # K = 3 ã®ã¨ãã®çã ..., # K = 4 ã®ã¨ãã®çã ..., # K = 5 ã®ã¨ãã®çã ..., # K = 6 ã®ã¨ãã®çã ] n = int(input()) print(S[n])
$K=6$ ã®ã¨ã㯠$3^{12} \approx 5.3\times 10^5$ æåã¨ãªããæåºã³ã¼ãé·å¶éã® 512 KiB ãä¸åã£ã¦ãã¾ãã¾ãã
試ãã«ãã¡ã¤ã«ã®å
容ã gzip -9
ã§å§ç¸®ãã¦ã¿ãã¨ãååå°ãããªããããªãã¨ããããã¾ã*3ã
% cat c.py | gzip -9 | wc -c 5897
ãããï¼æåºã³ã¼ãã«å ¥ããããããã«ï¼Base64 ã§ã¨ã³ã³ã¼ããã¾ãã4/3 åç¨åº¦ã«ãªã£ã¦ãã¾ãã¾ããå ¨ç¶åé¡ãªãã§ãããã
% cat c.py | gzip -9 | base64 | fold -w76 H4sIAAAAAAACA+3dUa4kRQ4F0P9YReu9H5BQ7YBV8IlYAD+t0YjZ/zTqAXrqUakqE5nhsI8VIwVY ... +/778a9///6PP/38+Zfvx38BHgVMXiMkCQA=
ãã¨ã¯è¨äºã®åé ã®ãã¤ã¼ãã®ããã«ç´æ¥ã·ã§ã«ããå®è¡ãã¦ãããã§ãããããããã®ãå«ã§ããã° Python 㧠exec
ãã¦ãããã§ãããã
# Zsh echo 'H4sIAAAAAAACA+3dUa4kRQ4F0P9YReu9H5BQ7YBV8IlYAD+t0YjZ/zTqAXrqUakqE5nhsI8VIwVY ... +/778a9///6PP/38+Zfvx38BHgVMXiMkCQA=' | base64 -d | gunzip > main.py python3 main.py
# Python from base64 import b64decode from gzip import decompress SRC = """ H4sIAAAAAAACA+3dUa4kRQ4F0P9YReu9H5BQ7YBV8IlYAD+t0YjZ/zTqAXrqUakqE5nhsI8VIwVY ... +/778a9///6PP/38+Zfvx38BHgVMXiMkCQA= """ exec(decompress(b64decode(SRC)))
ææ
ä¹ ã ã«ããããéã³ãããæ°ããã¾ãã ãã®æã®èãæ¹ãé¸æè¢ã«å ¥ãã¦ããã¨ãä½ããã®å±é¢ã§å½¹ã«ç«ã¤ãã¨ãããã®ã§ã¯ãªãã§ããããã
è£è¶³ï¼ã³ã³ãã¹ãä¸ã¯ï¼ããããæ£æ»æ³ã®ï¼å帰ã®ã³ã¼ãã Rust ã§æ¸ãã¾ããã
ããã
ãããã§ãã
*1:ç©å½¢ã¯ãããããã¨èªã¿ã¾ããå¤ãã®ã¨ãã£ã¿ã§ã§ããæä½ã ã¨æãã¾ãã
*2:Vim ã¨ããã®ã¯ã¨ãã£ã¿ã®ååã§ããããããã¨ãã£ã¿ãããã¾ãã
*3:åããããªãã¿ã¼ã³ã®ç¹°ãè¿ãã§ã§ããæååãªã®ã§ãç´å¾æã¯ããã¾ãã