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

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

[复制链接]
gaosmile 发布时间:2020-6-11 20:42
今天 Hacker News 上有个热帖讨论一个 C 程序,一次调用输出的井字棋游戏。
; R% c- s3 x, X4 c8 Y* d
微信图片_20200611204238.png
, f5 [9 j% F/ f8 t5 J7 k) b
打开一看,原来是 2020 年 IOCCC 大赛的一个参赛作品:

  1. 5 Q0 H& z: O& D* Z5 `6 Q! {
  2. #include <stdio.h>
    8 W/ ]/ V6 u* O/ D% M6 @

  3. - A+ x4 ~, J$ S/ I8 {
  4. #define N(a)       "%"#a"$hhn"" Z/ X: e. r% T+ l5 b3 G5 i
  5. #define O(a,b)     "%10$"#a"d"N(b)
    / Q. M: q! i, J# _9 d1 P2 h. O$ Q
  6. #define U          "%10$.*37$d"0 O8 `: N( u5 ~5 T- U: V3 o
  7. #define G(a)       "%"#a"$s"
      L. Z# _5 F; c8 Z
  8. #define H(a,b)     G(a)G(b)5 B0 ?/ y! `" x# l
  9. #define T(a)       a a + Z; ?3 L6 P+ q( w' M$ V- V0 l
  10. #define s(a)       T(a)T(a); e# S" A9 v9 y; r/ d$ L- W
  11. #define A(a)       s(a)T(a)a8 M1 V; {- P  p4 o* ]
  12. #define n(a)       A(a)a
    . T8 C5 e# L# q) l* r- d/ N
  13. #define D(a)       n(a)A(a)
    6 V; h2 T0 ?) i  X
  14. #define C(a)       D(a)a5 c) {- S; a6 V3 O# ^0 A3 q
  15. #define R          C(C(N(12)G(12)))
    $ H! G# L3 m7 Z4 s( H" O
  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
    5 Y. e# w/ t  A: A5 U
  17. #define SS         O(78,55)R "\n\033[2J\n%26$s";
    ; Y, d+ E1 a0 }  R
  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)R% ~1 L6 k* I3 W! \# o
  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)
    # b& z  c$ i) k/ S  N7 @/ ^, l

  20. 9 o5 l0 g; a4 p% Y# w6 Q  f
  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(
    - y0 w$ c( M9 i# x5 X! W: E/ |
  22.             45)N(46)N    (47)N(48)N(    49)N( 50)N(     51)N(52)N(53    )O( 28,7 @# ~, {1 Q+ w7 F3 H/ C
  23.             54)O(5,        55) O(2,    56)O(3,57)O(      4,58 )O(13,    73)O(4,9 b/ f, L8 L$ M* i/ a
  24.             71 )N(   72)O   (20,59    )N(60)N(61)N(       62)N (63)N    (64)R R
    ( o/ Z; a2 E7 A  }& t8 W
  25.             E(1,2,   3,13   )E(4,    5,6,13)E(7,8,9        ,13)E(1,4    ,7,13)E1 K; N+ D- T( H1 C6 l! \  N
  26.             (2,5,8,        13)E(    3,6,9,13)E(1,5,         9,13)E(3    ,5,7,13
    3 J) H# T/ M5 i2 N
  27.             )E(14,15,    16,23)    E(17,18,19,23)E(          20, 21,    22,23)E# }& F$ L3 a! S4 _* I) i
  28.             (14,17,20,23)E(15,    18,21,23)E(16,19,    22     ,23)E(    14, 18,
    ) r; c# N, u8 W6 Z( p( ~. Y
  29.             22,23)E(16,18,20,    23)R U O(255 ,38)R    G (     38)O(    255,36)
    / D6 I. ?% c( f$ v( B' h
  30.             R H(13,23)O(255,    11)R H(11,36) O(254    ,36)     R G(    36 ) O(& k9 \1 w" r* |' _; n6 x
  31.             255,36)R S(1,14    )S(2,15)S(3, 16)S(4,    17 )S     (5,    18)S(6,
    & R6 V  C+ @& i9 r; _% e! ^
  32.             19)S(7,20)S(8,    21)S(9    ,22)H(13,23    )H(36,     67    )N(11)R3 l4 Q0 ~3 z* e' s9 _. c2 V! G
  33.             G(11)""O(255,    25 )R        s(C(G(11)    ))n (G(          11) )G(
    9 J, d- m8 w7 j8 U, w2 X
  34.             11)N(54)R C(    "aa")   s(A(   G(25)))T    (G(25))N         (69)R o- k+ i( U1 Z9 X! `3 W/ Q$ s
  35.             (14,1,26)o(    15, 2,   27)o   (16,3,28    )o( 17,4,        29)o(184 m4 ~& ?5 C: ?# `
  36.             ,5,30)o(19    ,6,31)o(        20,7,32)o    (21,8,33)o       (22 ,9,
    6 X: @. J4 |! L4 @. K; g$ x
  37.             34)n(C(U)    )N( 68)R H(    36,13)G(23)    N(11)R C(D(      G(11)))- }8 E. W$ \/ t* X& `4 e3 X
  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(, p3 P' S* Z0 _0 [
  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/ ?, B5 n1 m  O+ C2 x
  40. 7 }& R. k7 G$ l6 C
  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\9 a* z5 @, Q2 F  Y' a5 B( h
  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\
    2 |! S4 a1 h" h- c- j) u0 r3 W* K
  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+\
    . ~$ z: f* y' R- L
  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\+ C. j  V: Q4 k5 ^2 @" W8 ?& Q- ~
  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+\6 c- A( T+ s3 |  V$ u2 n
  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,\
    2 f" a3 T, G6 Z/ d9 y  b
  47.             d+128,d+129
    : D! {( N* o# C2 `6 l5 \
  48. 8 F  s: F. X! |1 L* B7 M
  49. char d[538] = {1,0,10,0,10};, m" o" }- F% ~. c
  50. 8 N) D; d6 i+ }* B
  51. int main() {, ?9 R$ T) O- R9 d, |1 u
  52.     while(*d) printf(fmt, arg);
    ; @: v6 t0 E) P0 Q7 p- g, [* m
  53. }
复制代码
0 |1 C( p2 A# E+ U5 m
截图:
2 v/ E; j% ^6 D/ j. F5 [
微信图片_20200611204241.jpg
微信图片_20200611204244.jpg

; F6 D  S3 A8 C& b1 y% z
是不是看着发晕?发晕就对了!
4 U7 o$ a0 s% j* O2 m

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

1 x- O# e: l) F  s& T
写这个程序的小哥 Carlini 已经在 GitHub 上解释了程序原理:
8 W% w0 U% P* Y# d1 X2 k: e
微信图片_20200611204249.png
; e  {" q! ]& \* b& F
链接:
http://github.com/carlini/printf-tac-toe

1 |/ ^; L9 }% A9 \' v. a
收藏 评论0 发布时间:2020-6-11 20:42

举报

0个回答

所属标签

相似技术帖

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版