你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

一个 C 程序——一次调用输出的井字棋游戏

[复制链接]
gaosmile 发布时间:2020-6-11 20:42
今天 Hacker News 上有个热帖讨论一个 C 程序,一次调用输出的井字棋游戏。
& i7 ^6 K- _1 [  p/ r
微信图片_20200611204238.png
4 }5 f6 }% W+ n6 w4 j) {
打开一看,原来是 2020 年 IOCCC 大赛的一个参赛作品:
  1. ; |8 {! _: f7 F
  2. #include <stdio.h>! T: V8 C/ p  P' o& d- i1 G
  3. , Z2 w3 [5 W& h: u3 X  y
  4. #define N(a)       "%"#a"$hhn"+ q! [: S0 d- ~- h5 ]: T
  5. #define O(a,b)     "%10$"#a"d"N(b)9 M1 C$ G8 \6 x: _
  6. #define U          "%10$.*37$d"; `4 a# M" j, r$ E3 u! y
  7. #define G(a)       "%"#a"$s"
    # F  F8 O, _. B& r8 s
  8. #define H(a,b)     G(a)G(b)0 }5 i3 b4 @* Q; a
  9. #define T(a)       a a
    & I" s2 x+ @/ t* M7 e+ T3 s
  10. #define s(a)       T(a)T(a)
    . `; c0 @: E! T
  11. #define A(a)       s(a)T(a)a
    8 b3 @1 c# q6 |5 W& \6 h" ^/ F
  12. #define n(a)       A(a)a
    0 l9 w6 [" j* R
  13. #define D(a)       n(a)A(a)% ^# n' O$ b% [  m  Z+ J
  14. #define C(a)       D(a)a
    " \: c& i# d8 l% Z' P* i
  15. #define R          C(C(N(12)G(12)))# C& M: y6 Q- Z. @; q) J( n
  16. #define o(a,b,c)   C(H(a,a))D(G(a))C(H(b,b)G(b))n(G(b))O(32,c)R
    ! o+ \8 m+ J: n2 X: O2 B
  17. #define SS         O(78,55)R "\n\033[2J\n%26$s";9 h: X# U. S4 K- q" p
  18. #define E(a,b,c,d) H(a,b)G(c)O(253,11)R G(11)O(255,11)R H(11,d)N(d)O(253,35)R3 f3 F& Y. L' R# A- H
  19. #define S(a,b)     O(254,11)H(a,b)N(68)R G(68)O(255,68)N(12)H(12,68)G(67)N(67)8 s" q' W3 i! R0 {. ^' T7 P9 r" Q
  20. + a9 y; h) U& A5 N" ]4 `7 C9 x
  21. char* fmt = O(10,39)N(40)N(41)N(42)N(43)N(66)N(69)N(24)O(22,65)O(5,70)O(8,44)N(
    & l1 Z# c% [2 Y; J9 C3 e
  22.             45)N(46)N    (47)N(48)N(    49)N( 50)N(     51)N(52)N(53    )O( 28,
    / g; e! z( y9 A9 Q  X
  23.             54)O(5,        55) O(2,    56)O(3,57)O(      4,58 )O(13,    73)O(4,% r: J. H& [4 s) K/ Q
  24.             71 )N(   72)O   (20,59    )N(60)N(61)N(       62)N (63)N    (64)R R1 Z6 ]$ K2 g' d  y5 b5 M
  25.             E(1,2,   3,13   )E(4,    5,6,13)E(7,8,9        ,13)E(1,4    ,7,13)E' V) Z" V3 v; `) M6 `  M
  26.             (2,5,8,        13)E(    3,6,9,13)E(1,5,         9,13)E(3    ,5,7,13+ a8 O" r) I) H9 l% y
  27.             )E(14,15,    16,23)    E(17,18,19,23)E(          20, 21,    22,23)E5 h% J& R& M1 Y; }
  28.             (14,17,20,23)E(15,    18,21,23)E(16,19,    22     ,23)E(    14, 18,
    7 r$ f- O' z8 M) P% ]
  29.             22,23)E(16,18,20,    23)R U O(255 ,38)R    G (     38)O(    255,36)$ e7 J4 q1 Y1 h+ g& C
  30.             R H(13,23)O(255,    11)R H(11,36) O(254    ,36)     R G(    36 ) O(( ?8 @$ T, W) c& ?: b8 t$ ^
  31.             255,36)R S(1,14    )S(2,15)S(3, 16)S(4,    17 )S     (5,    18)S(6,
    - [9 P4 Y$ j' j6 t. y" Q
  32.             19)S(7,20)S(8,    21)S(9    ,22)H(13,23    )H(36,     67    )N(11)R
    8 \( Q, S+ H1 x# t/ e! |
  33.             G(11)""O(255,    25 )R        s(C(G(11)    ))n (G(          11) )G(
    ' I8 _3 }% f) W" A' Q3 R1 o
  34.             11)N(54)R C(    "aa")   s(A(   G(25)))T    (G(25))N         (69)R o
    & `6 a) Z* T+ _: j
  35.             (14,1,26)o(    15, 2,   27)o   (16,3,28    )o( 17,4,        29)o(18  \' L3 D1 J2 f6 H- E+ j* z9 d
  36.             ,5,30)o(19    ,6,31)o(        20,7,32)o    (21,8,33)o       (22 ,9,/ U  Z6 d, a9 H. R
  37.             34)n(C(U)    )N( 68)R H(    36,13)G(23)    N(11)R C(D(      G(11)))3 s+ \4 z* z# ?/ f/ u
  38.             D(G(11))G(68)N(68)R G(68)O(49,35)R H(13,23)G(67)N(11)R C(H(11,11)G(  z, E' L) D* v1 t+ _* S
  39.             11))A(G(11))C(H(36,36)G(36))s(G(36))O(32,58)R C(D(G(36)))A(G(36))SS% D8 j( y% ]9 z, Q

  40. & y- g% l) A! O& {5 J$ w
  41. #define arg d+6,d+8,d+10,d+12,d+14,d+16,d+18,d+20,d+22,0,d+46,d+52,d+48,d+24,d\% t# d6 _" i, }: P7 q' x' L$ Z3 k
  42.             +26,d+28,d+30,d+32,d+34,d+36,d+38,d+40,d+50,(scanf(d+126,d+4),d+(6\% W+ k6 I% \% A. z- s+ G4 ?: E
  43.             -2)+18*(1-d[2]%2)+d[4]*2),d,d+66,d+68,d+70, d+78,d+80,d+82,d+90,d+\' w& }- D/ A+ g3 l1 C
  44.             92,d+94,d+97,d+54,d[2],d+2,d+71,d+77,d+83,d+89,d+95,d+72,d+73,d+74\$ b) p1 f3 g, m) J& U7 v$ \
  45.             ,d+75,d+76,d+84,d+85,d+86,d+87,d+88,d+100,d+101,d+96,d+102,d+99,d+\
    + P1 d* Q+ j6 {/ e/ ~# c$ T
  46.             67,d+69,d+79,d+81,d+91,d+93,d+98,d+103,d+58,d+60,d+98,d+126,d+127,\4 j1 d5 S4 ~7 P3 i  M0 |
  47.             d+128,d+1290 W  y9 j$ c' f

  48. # k) X' Y9 E$ |. D% V/ F8 n
  49. char d[538] = {1,0,10,0,10};. r4 q( O- P4 Z1 w
  50. ! l% @- L2 @; t( H- \; k
  51. int main() {& l5 O& i' s) u' d2 R
  52.     while(*d) printf(fmt, arg);1 ?/ q5 M% m* _( I: b# _# x( k7 ~
  53. }
复制代码
1 |5 X  ?$ }: `' D3 \
截图:
' }" F8 v* N. I2 T1 c3 g
微信图片_20200611204241.jpg
微信图片_20200611204244.jpg

9 \5 C1 w. y: A( s" u3 m2 Q) [
是不是看着发晕?发晕就对了!; F/ M" B0 i& D! i! S  n+ w4 X( G6 u

. x; H4 l  m! q5 i+ `0 t
IOCCC  大赛全称:The International Obfuscated C Code Contest,国际 C 语言混乱代码大赛,目的是写出最有创意的最让人难以理解的 C 语言代码,并限制在 4 kb 以内。这项赛事也年头了,2020 年是第 27 次举办。

% U% S1 ~6 u9 x6 G1 O- D
写这个程序的小哥 Carlini 已经在 GitHub 上解释了程序原理:
) A9 d- e3 B4 E3 B8 g
微信图片_20200611204249.png

0 u0 X  O8 W4 i! P
链接:
http://github.com/carlini/printf-tac-toe
+ }5 f! q# y& L% B1 L
收藏 评论0 发布时间:2020-6-11 20:42

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版