编程艺术:如何用最有创造力的方式输出42

开发 后端 前端
这里,需要介绍一下为什么要输出42。这时因为42是我们人生,世界乃至整个宇宙的终级答案。这要从《银河系漫游指南》(英文名:The Hitchhiker’s Guide to the Galaxy)说起。这本书是著名英国科幻小说作家Douglas Adams所著5本银河系漫游指南系列科幻喜剧系列小说中的第一本,改编自他本人为英国广播公司第四电台(BBC Radio 4)所写的广播剧剧本。该书1979年10月12日首次由麦克米伦出版公司(Pan Books)出版,次周成为英国图书销量榜冠军,前3个月内销售超过25万本。

酷壳似乎好长时间没有像《编程真难啊》或是《老手是这样教新手编程的》或是像《如何写出无法维护的代码》这样“严肃正经”的文章了,所以,赶在大家还没有向我扔臭鸡蛋前奉献一篇。这篇文章来自CodeGolf.StackExchange上的《Most creative way to display 42》—— 请以最有创造力的方式输出42。于是出现了下面的这些答案(注:精彩的总是留在最后面)

人生和宇宙终级问题的答案:42

这里,需要介绍一下为什么要输出42。这时因为42是我们人生,世界乃至整个宇宙的终级答案。这要从《银河系漫游指南》(英文名:The Hitchhiker’s Guide to the Galaxy)说起。这本书是著名英国科幻小说作家Douglas  Adams所著5本银河系漫游指南系列科幻喜剧系列小说中的第一本,改编自他本人为英国广播公司第四电台(BBC Radio 4)所写的广播剧剧本。该书1979年10月12日首次由麦克米伦出版公司(Pan Books)出版,次周成为英国图书销量榜冠军,前3个月内销售超过25万本。截至2005年,这本小说已被翻译成超过30种语言在全世界发行,并且被改编为电视剧、电影、舞台剧等多种艺术形式的作品。

 

这本小说中小说中充满尖锐的讽刺和隐喻,被西方科幻爱好者奉为“科幻圣经”。其中有两个关键词,一个是Don’t Panic,一个是42影响力很大,而其中关于42的故事简介是这样的:

百万年前,老鼠其实是一种超智慧生物,它们建造了一部超级电脑深思Deep Thought,它们问超级电脑,生命、宇宙以及任何事情的终极答案(Answer to Life, the Universe, and Everything)什么,经过了750万年的计算,深思告诉老鼠的后人答案是42,深思解释它只能计算出答案是什么,但答案的原因必须由另一部更高智能的电脑才能解释,而该部电脑就是地球。经过了800万年,就在结果要出来的五分钟前,地球却因为挡在预定兴建的星际间高速公路的路线,被Vogons给毁灭,电脑没有给出最后的结果。

 

故事里面还说了这个42是6 乘于 9得来。当然,6乘9应该是54,但是因为地球上的电脑被搞坏了,导致主人翁答错了。至于后来有人说6 x 9 = 42是基于13进制,原作者说,完全没有这回事,他就是瞎搞的。

网上有很多人在猜测42的含义,比如douban的这篇文章,但是原作者出来说这他就是随机想了一个,完全没有任何意义。

对于42来说,数字42和短语,“生命,宇宙以及一切的答案”(Answer to Life, the Universe, and Everything) 已达到在互联网上邪教的地位。在各种技术宅,极客,科学圈有着非同凡响的地位。

另外,在美剧《Lost》里那个经典的数字序列: 4, 8, 15, 16, 23,42。经Lost的导演确认,最后那个42也是源自《银河系漫游指南》

好了,言归正传,下面让我们来看一下如何输出42的。

Ruby

puts (6 * 9).to_s(13)[/h4]

解释:6 x 9 = 42的表达式(基于13进制)

Javascript

  1. String.prototype.answer = function() {     alert(this.charCodeAt(+!"The End of the Universe")); }; '*'.answer(); 

解释:+!”The End of the Universe”的值是0,’*'的ASCII码是42

 

  1. console.log("Douglas Adams".length + "born on".length +     [1,1,0,3,1,9,5,2].reduce(  
  2.          function(previousValue, currentValue, index, array){  
  3.              return previousValue + currentValue;  
  4.          }  
  5.      ) );  
  6.     /* [1,1,0,3,1,9,5,2] => March 11, 1952 */ 

解释:Douglas Adams 是一位英国广播剧作家、和音乐家,尤其以《银河系漫游指南》系列作品出名。这部作品以广播剧起家,后来发展成包括五本书的“三部曲”,拍成电视连续剧。亚当斯逝世后还拍成电影。 除《银河系漫游指南》系列外亚当斯还参加了科幻电视连续剧《神秘博士》的拍摄工作,他写了其中的一些剧本。也的生日是 1952 年 3 月 11 日。

  1. alert((!![]+ -~[])*(!![]+ -~[])+""+(!![]+ -~[])) 

解释:[]是个空,![]就是true,~[]是-1, 于是,表达式就这样出来了。变态!

  1. var ________ = 0.023809523809523808, ____ = 1, ___ = 0, __ = 0, _ = 1;  
  2.    
  3.        __ -           ___  
  4.      /_  |0        //     \\  
  5.     /_/   0     //          \\  
  6.    /_/_  |0                //  
  7.   /_/_   |0              //  
  8.  /_/____ |_           //  
  9. /________|0        //  
  10.          |0     //______________ 

解释:这个其实是代码混乱的技巧之一,用下划线当变量。你可以参考《如何加密/混乱C源代码》和《6个变态的C语言Hello World程序

Shell

  1. echo "what is the universe"|tr "a-z " 0-7-0-729|sed 's/9.//g;s/-/+/'|bc 

解释:其中,bc是一个计算器。tr是一个字符转换的命令,比如:echo "good" | tr "good" "test"输出 tsst。也就是说,g-t, o-e, o-s, d-t的映射,o被映了两次,所以,第二次会覆盖第一次。对于上面的tr "a-z " 0-7-0-7-729的意思是:abcdefg分别对应01234567,h对应-,ijklmno对应01234567,p对于2,剩下的包括空格都是9。如果你对tr和sed和bc不熟悉的话,可以man一下,关于sed你可以看一下我的《sed简明教程

  1. #!/bin/bash  
  2.    
  3. #Vertical Version  
  4. echo $((2#100))  
  5. echo $((2#10))  
  6.    
  7. #Horizontal Version  
  8. echo $((2#000100))$((2#00010)) 

解释:2#100的意思就是说,#左边的数说明是“2进制”,右边的数是二进制数“100”,如16#ff就是16进制的ff,也就是十进制的255

  1. echo "obase=13;6*9"|bc|figlet 

上面的命令输出:

  1.  _  _  ____  
  2. | || ||___ \  
  3. | || |_ __) |  
  4. |__   _/ __/  
  5.    |_||_____| 

解释:为了使用figlet命令,你还要去安装一个figlet(http://www.figlet.org/)这是一个让你画ASCII图的命令。

Python

Windows下,给你画个图:

  1. import win32api, win32con, win32gui  
  2. from time import time, sleep  
  3. import os  
  4.    
  5. w = { 1:[(358263), (358262), (358261), (359261), (359262), (359264), (359266), (359270), (359282),  
  6.      (358289), (357308), (356319), (355341), (355351), (355360), (355378), (355388), (354397),  
  7.      (354406), (354422), (354428), (354436), (354438), (354439), (354440), (355440), (356439),  
  8.      (357439), (358438), (360438), (362437), (369437), (372437), (381437), (386437), (391437),  
  9.      (397436), (411436), (419435), (434435), (442435), (449434), (456434), (468434), (473435),  
  10.      (480436), (483436), (485436), (487437), (488437), (488438), (488439), (487440), (486440),  
  11.      (485440), (484440), (483439), (483437), (481431), (481427), (481420), (481413), (483396),  
  12.      (485387), (488367), (491356), (493345), (500321), (503310), (507299), (514280), (517272),  
  13.      (520266), (523260), (524258), (524259), (524261), (524265), (524269), (523275), (522289),  
  14.      (521297), (518315), (516324), (515334), (513345), (509368), (507382), (502411), (500426),  
  15.      (498440), (495453), (491478), (489491), (485517), (483530), (481542), (479552), (476570),  
  16.      (475577), (474588), (473592), (473595), (473597), (473600), (473601), (473602), (473601),  
  17.      (474599), (475597), (476594), (478587)],  
  18.   2:[(632305), (634306), (636309), (639314), (641319), (645330), (647337), (649353), (649362),  
  19.      (649372), (649384), (645409), (639436), (636448), (632459), (627470), (623479), (613497),  
  20.      (608503), (599512), (595514), (591514), (587513), (581504), (578498), (576483), (575476),  
  21.      (575469), (579454), (582447), (591436), (595432), (600430), (605429), (617432), (624437),  
  22.      (639448), (646455), (654461), (662469), (679484), (686491), (702504), (710509), (718512),  
  23.      (727514), (744515), (752515), (767512), (774510), (779508), (783505), (788499), (789495),  
  24.      (789486)] }  
  25.    
  26. def d( x1, y1, x2, y2 ):  
  27.     win32api.SetCursorPos((x1, y1))  
  28.     win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0000)  
  29.     win32api.SetCursorPos((x2, y2))  
  30.     win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0000)  
  31.     sleep(0.01)  
  32.    
  33. def p( l1 ):  
  34.     l2 = [""]  
  35.     l2.extend(l1)  
  36.     l1.append("")  
  37.     l3 = zip(l2, l1)  
  38.     l3.pop(0)  
  39.     l3.pop(-1)  
  40.     for n in l3:  
  41.         d(n[0][0], n[0][1], n[1][0], n[1][2])  
  42.    
  43. os.startfile("C:\Windows\system32\mspaint.exe")  
  44. sleep(0.5)  
  45. win32gui.ShowWindow(win32gui.GetForegroundWindow(), win32con.SW_MAXIMIZE)  
  46. sleep(0.5)  
  47.    
  48. for n in w:  
  49.     p(w[n]) 

输出:

lambda表达式

  1. >>> p = lambda x: x%2!=0 and True<>> sum(p(i) for i in range(0,6)) 

解释:对python的lambda表达式或函数式编程不是很清楚的同学可以看一下《函数式编程

#p#

Java

  1. import java.lang.*;  
  2. class answer_to_everything   
  3. {  
  4.     void static main()   
  5.     {  
  6.         String s = "Hitchhiker's Guide to the Galaxy";  
  7.         String s2 = "Don'tPanic";  
  8.         String s3 = "The Restaurant at the End of the Universe.";  
  9.    
  10.         int arthur_dent = s.length();  
  11.         int ford_prefect = s2.length();  
  12.         int zooey_deschanel = s3.length();  
  13.         int vogon_poetry = arthur_dent + ford_prefect;  
  14.    
  15.         System.out.println("         " + vogon_poetry + "       " + zooey_deschanel + " " + zooey_deschanel); //in case you're confused, I'm using Zooey to print the big '2', and Vogons to print the big '4'.  
  16.         System.out.println("       " + vogon_poetry + vogon_poetry + "     " + zooey_deschanel + "     " + zooey_deschanel);  
  17.         System.out.println("     " + vogon_poetry + "  " + vogon_poetry + "    " + zooey_deschanel + "       " + zooey_deschanel);  
  18.         System.out.println("   " + vogon_poetry + "    " + vogon_poetry + "            " + zooey_deschanel);  
  19.         System.out.println(" " + vogon_poetry + "      " + vogon_poetry + "          " + zooey_deschanel);  
  20.         System.out.println(vogon_poetry + " " + vogon_poetry + " " + vogon_poetry + " DA " + vogon_poetry + "     " + zooey_deschanel);  
  21.         System.out.println("         " + vogon_poetry + "     " + zooey_deschanel);  
  22.         System.out.println("         " + vogon_poetry + "    " + zooey_deschanel + " " + zooey_deschanel + " " + zooey_deschanel + " " + zooey_deschanel);  
  23.     }  

上面这段看上去平淡无奇,但其亮点是那三个string,这段代码输出:

  1.         42       42 42  
  2.       4242     42     42  
  3.     42  42    42       42  
  4.   42    42            42  
  5. 42      42          42  
  6. 2 42 42 DA 42     42  
  7.         42     42  
  8.         42    42 42 42 42 

别忘了Java也可以混乱代码:

  1. public        class         FourtyTwo{ public 
  2. static         void         main(String[]args)  
  3. {  new        javax                    .swing.  
  4. JFrame        () {{                    setSize  
  5. (42 /(        42/42                    +42/42)  
  6. *42/ (        42/42                    +42/42)  
  7. ,42/(4242+42/42)*         42/(42/42+42/42));  
  8. }public void paint(         java.awt .Graphics  
  9.   g){g.drawPolygon(         new int[]{42,42,42 
  10.               + 42+         42,42+  
  11.               42+42         ,42+42 
  12.               +42 +         42,42+  
  13.               42+42         +42,42 
  14.               + 42+         42,42+42+42,42+42,  
  15.               42+42         },new int[]{42,42+  
  16.               42+42         +42,42+42+42+42,42 
  17.    
  18. +42+42+42+42+42,                  42+42+  
  19. 42+42+42+42,42,42,               42+42+42 
  20. ,42 +        42+42              ,42}, (42/  
  21. 42+42        /42)*              (42/  42 +  
  22. 42/42        + 42/             42 +    42 /  
  23. 42+42        /42))            ;g.drawPolygon  
  24. new        int[]           {42+42+42+42+42,  
  25. 42+42        +42 +           42+42      , 42+  
  26. 42+42        + 42+          42+42        + 42,  
  27. 42+42        +42 +          42+42        +42 +  
  28. 42,42+42+42+42+42,         42+42          + 42+  
  29. 42+42,4242+42+           42+42          +42 +  
  30.    
  31. 42+42,42+42+42+42+42+42+42+42,42+42+42+42+42+42,  
  32. 42+42+42+42+42+42,42+42+42+42+42+42+42+42,42+42+  
  33. 42+42+42+42+42+42},new int[]{42,42 +42,42+42,42+  
  34. 42+42,42+42+42,42+42+42+42+42+42,42+42+42+42+42+  
  35. 42,42+42+42+42+42,42+42+42+42+42,42+42+42+42,42+  
  36. 42+42+42,42},(42/42+42/42+42/42)*((42/42+42/42)*  
  37. (42/42+4242)));};}.setVisible(42*42*42!=42);}} 

C/C++

  1. #include  
  2. int main()  
  3. {  
  4.     printf("%d", fprintf( fopen("/dev/null","w"),  
  5.        "so-popularity-contest\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b") );  

解释:\b是backspace,fprintf的返回值是写成功数据的长度。

  1. #include<iostream>  
  2. using namespace std;  
  3. int main()  
  4. {  
  5.     cout<<(char)32<<(char)32<<(char)32;  
  6.     cout<<(char)66<<(char)73<<(char)82;  
  7.     cout<<(char)84<<(char)72<<(char)32;  
  8.     cout<<(char)32<<(char)32<<(char)32;  
  9.     cout<<(char)32<<(char)68<<(char)69;  
  10.     cout<<(char)65<<(char)84<<(char)72;  
  11.     cout<<(char)32<<(char)32<<'\n';  
  12.     cout<<(char)32<<(char)32<<(char)32;  
  13.     cout<<(char)32<<(char)32<<(char)95;  
  14.     cout<<(char)95<<(char)95<<(char)32;  
  15.     cout<<(char)32<<(char)32<<(char)32;  
  16.     cout<<(char)32<<(char)95<<(char)95;  
  17.     cout<<(char)95<<(char)95<<(char)95;  
  18.     cout<<(char)95<<(char)32<<'\n';  
  19.     cout<<(char)32<<(char)32<<(char)32;  
  20.     cout<<(char)32<<(char)47<<(char)32;  
  21.     cout<<(char)32<<(char)32<<(char)124;  
  22.     cout<<(char)32<<(char)32<<(char)32;  
  23.     cout<<(char)124<<(char)32<<(char)32;  
  24.     cout<<(char)95<<(char)95<<(char)32;  
  25.     cout<<(char)32<<(char)124<<'\n';  
  26.     cout<<(char)32<<(char)32<<(char)32;  
  27.     cout<<(char)47<<(char)32<<(char)47;  
  28.     cout<<(char)124<<(char)32<<(char)124;  
  29.     cout<<(char)32<<(char)32<<(char)32;  
  30.     cout<<(char)124<<(char)95<<(char)124;  
  31.     cout<<(char)32<<(char)32<<(char)124;  
  32.     cout<<(char)32<<(char)124<<'\n';  
  33.     cout<<(char)32<<(char)32<<(char)47;  
  34.     cout<<(char)32<<(char)47<<(char)32;  
  35.     cout<<(char)124<<(char)49<<(char)124;  
  36.     cout<<(char)32<<(char)32<<(char)32;  
  37.     cout<<(char)32<<(char)32<<(char)32;  
  38.     cout<<(char)32<<(char)32<<(char)47;  
  39.     cout<<(char)50<<(char)124<<'\n';  
  40.     cout<<(char)32<<(char)47<<(char)32;  
  41.     cout<<(char)47<<(char)32<<(char)32;  
  42.     cout<<(char)124<<(char)57<<(char)124;  
  43.     cout<<(char)32<<(char)32<<(char)32;  
  44.     cout<<(char)84<<(char)79<<(char)32;  
  45.     cout<<(char)32<<(char)47<<(char)48;  
  46.     cout<<(char)47<<(char)32<<'\n';  
  47.     cout<<(char)47<<(char)32<<(char)47;  
  48.     cout<<(char)95<<(char)95<<(char)95;  
  49.     cout<<(char)124<<(char)53<<(char)124;  
  50.     cout<<(char)95<<(char)95<<(char)32;  
  51.     cout<<(char)32<<(char)32<<(char)32;  
  52.     cout<<(char)47<<(char)48<<(char)47;  
  53.     cout<<(char)32<<(char)32<<'\n';  
  54.     cout<<(char)124<<(char)95<<(char)95;  
  55.     cout<<(char)95<<(char)95<<(char)95;  
  56.     cout<<(char)124<<(char)50<<(char)124;  
  57.     cout<<(char)95<<(char)95<<(char)124;  
  58.     cout<<(char)32<<(char)32<<(char)47;  
  59.     cout<<(char)49<<(char)47<<(char)32;  
  60.     cout<<(char)32<<(char)32<<'\n';  
  61.     cout<<(char)32<<(char)32<<(char)32;  
  62.     cout<<(char)32<<(char)32<<(char)32;  
  63.     cout<<(char)124<<(char)32<<(char)124;  
  64.     cout<<(char)32<<(char)32<<(char)32;  
  65.     cout<<(char)32<<(char)47<<(char)32;  
  66.     cout<<(char)47<<(char)32<<(char)32;  
  67.     cout<<(char)32<<(char)32<<'\n';  
  68.     cout<<(char)32<<(char)32<<(char)32;  
  69.     cout<<(char)32<<(char)32<<(char)32;  
  70.     cout<<(char)124<<(char)32<<(char)124;  
  71.     cout<<(char)32<<(char)32<<(char)32;  
  72.     cout<<(char)47<<(char)32<<(char)47;  
  73.     cout<<(char)95<<(char)95<<(char)95;  
  74.     cout<<(char)95<<(char)32<<'\n';  
  75.     cout<<(char)32<<(char)32<<(char)32;  
  76.     cout<<(char)32<<(char)32<<(char)32;  
  77.     cout<<(char)124<<(char)95<<(char)124;  
  78.     cout<<(char)32<<(char)32<<(char)124;  
  79.     cout<<(char)95<<(char)95<<(char)95;  
  80.     cout<<(char)95<<(char)95<<(char)95;  
  81.     cout<<(char)95<<(char)124<<'\n';  
  82.     return 0;  

输出:

  1. #include <stdio.h>  
  2.    
  3. #define six  1+5  
  4. #define nine 8+1  
  5.    
  6. int main()  
  7. {  
  8.     printf("what do you get when you multiply six by nine?\n");  
  9.     printf("%i x %i = %i\n", six, nine, six*nine);  

解释:6 x 9 = 42 ???,如果你知道宏只是做简单的字符串替换的话,你就知道six*nine被替换成了1+5*8+1这个表达式了。呵呵。

  1.        main(c     ,z,_){c==01?  
  2.       main(c+     1,0,c^c):c==2  
  3.      ?z=_["#"     "#$#%&#%#x'%%" 
  4.     "()&(%%x"             "$%$(" 
  5.    "(&(""*%x"             "'%%(" 
  6.   "(&(" "+%x"             "'#%(" 
  7.  "(&("  "%#x"             ],z ?z  
  8. =='x'?main(4,_     ,c*5):main(c  
  9. +1,z,0),main(c    ,z,_+1):00:c  
  10. ==3?(_+-2)==3?    main(_-1,_,  
  11.         32):(     main(  
  12.         c+1,c     ,((2+  
  13.         c)*(z     -35)+  
  14.         _)[""     "six" 
  15.         "*ni"     "ne= {   }   " 
  16.         "  ;"     "      _   ( " 
  17.         ") ["     " 3 ]do {;"]==  
  18.         32?32     :043),main(c,z  
  19.         ,_+1)     ):putchar(_);} 

解释:参看原文的这个答案里的How-To一节。

#p#

Brainfuck

代码混乱自然少不了brainfuck语言:(更多的奇葩的编程语言请参考《那些BT雷人的编程语言》)

  1.    
  2.          +++++          +++[>+>++> 
  3.         +++>++        ++>+++++>+++++  
  4.        +>+++++       ++>+        ++++  
  5.       +++ >+++       ++++        ++>+  
  6.      +++  ++++                   ++>+  
  7.     +++   ++++                  +++> 
  8.    +++    ++++                 ++++  
  9.   +>+     ++++               ++++  
  10.  +++      +>++             ++++  
  11. ++++++++>+++++++++       ++++  
  12. ++>+++++++++++++++     +<<< 
  13.           <<<<        <<<< 
  14.           <<<<       <-]> 
  15.           >>>>       >>----.++++<<<<< 
  16.           <<>>       >>>>++.--<<<<<<. 

不过,下面这个BrainFuck更无聊,所以顶在了最佳答案上:

  1.          +++++[>++[>+>+        ++>++++>++++>++++>++++++  
  2.         >++++++>+++++++        ++>+++++++++<<<<<<<<<-]>> 
  3.        >+>+>+> >>>+[<]<        -]>>       >++>-->>+>>++>+  
  4.       >--<<<<  <<<.....         .>            ....<...... 
  5.      ...>...   <<.>....                       >.>>>>>.<. 
  6.      <<<<..     ..<....                      >..>>>>>.< 
  7.     .<<<<.      >>>.<<.                     >>>>>.<.< 
  8.     <<<<<       <.>...>                    >>>.>>>.  
  9.    <<<.<        <<<..>>                  .>>>>>.< 
  10.   <.<<<         <<...>>                 >>>.<<< 
  11.  <..<.          ...>...               <<.>..>.  
  12.  >>.<.<<...>>...<<...>>...<         <....>>..  
  13. .<<<.>.>>..>.<<.......<....        .....>...  
  14.                <<.>...            .....>...  
  15.                <......           .>>>.<<.. 
  16.                <<.>...          .....>...<......>.>>.<.<<< 
  17.                .>......        ..>>...<<....>>.....>.<..>

执行上面的代码,你会得到下面的输出:

  1.      ++++         +++  
  2.    +[>++++    ++[>+<-][  
  3.   <]<  -]>   >++    +++  
  4.  +.-   ---   ---    ---  
  5. --.+++++++         +++  
  6.        +++       .++  
  7.        +++      +.-  
  8.        ---    -----.--. 

再执行上面的代码,会输出:

  1. 6*7=42 

如果6*9=42就完美了,就差一步啊……

(全文完)

 

原文链接:http://coolshell.cn/articles/11170.html

责任编辑:林师授 来源: 酷 壳
相关推荐

2013-11-08 09:33:04

创造力创业

2014-01-02 13:09:41

创造力编程

2024-01-05 07:36:54

人工智能创造力模型

2013-12-10 13:41:23

创造力设计

2021-01-21 21:14:53

人工智能AIOpenAI

2020-12-02 10:34:05

程序员开源技术

2019-10-29 14:01:59

CIOIT创造力商业

2013-06-24 13:56:37

创造力创意开发

2018-02-06 14:56:43

人工智能软件开发机器人

2023-08-10 11:49:24

AI项目模型

2021-02-01 11:13:54

人工智能创造力AI

2023-11-13 14:50:53

CSS开发

2020-12-14 09:33:32

互联网数据技术

2023-06-25 17:01:10

2019-05-21 19:26:36

童心制物编程儿童

2023-06-25 09:38:04

GPT-4研究

2012-07-31 13:05:02

互联课堂戴尔

2022-10-19 11:40:42

首席信息官技术领导者

2020-02-20 17:23:33

远程办公

2009-02-02 14:25:45

软件 芮祥麟 SAP
点赞
收藏

51CTO技术栈公众号