阅读更多

2顶
0踩

编程语言

转载新闻 如何用最有创造力的方式输出42

2014-03-07 17:52 by 资深记者 学良3 评论(9) 有10818人浏览

这篇文章来自CodeGolf.StackExchange上的《Most creative way to display 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,但是因为地球上的电脑被搞坏了,导致主人翁答错了。至于后来有人说6x9=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  

 

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

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

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

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

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

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

var ________ = 0.023809523809523808, ____ = 1, ___ = 0, __ = 0, _ = 1;

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

 

Shell 

 

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 简明教程》。 

#!/bin/bash
 
#Vertical Version
echo $((2#100))
echo $((2#10))
 
#Horizontal Version
echo $((2#000100))$((2#00010))
解释:2#100 的意思就是说,#左边的数说明是“2 进制”,右边的数是二进制数“100”,如 16#ff 就是 16 进制的 ff,也就是十进制的 255。 
echo "obase=13;6*9"|bc|figlet
上面的命令输出形式是:  

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

 

Python 

 

Windows 下,给你画个图:

 

import win32api, win32con, win32gui
from time import time, sleep
import os
 
w = { 1:[(358, 263), (358, 262), (358, 261), (359, 261), (359, 262), (359, 264), (359, 266), (359, 270), (359, 282),
     (358, 289), (357, 308), (356, 319), (355, 341), (355, 351), (355, 360), (355, 378), (355, 388), (354, 397),
     (354, 406), (354, 422), (354, 428), (354, 436), (354, 438), (354, 439), (354, 440), (355, 440), (356, 439),
     (357, 439), (358, 438), (360, 438), (362, 437), (369, 437), (372, 437), (381, 437), (386, 437), (391, 437),
     (397, 436), (411, 436), (419, 435), (434, 435), (442, 435), (449, 434), (456, 434), (468, 434), (473, 435),
     (480, 436), (483, 436), (485, 436), (487, 437), (488, 437), (488, 438), (488, 439), (487, 440), (486, 440),
     (485, 440), (484, 440), (483, 439), (483, 437), (481, 431), (481, 427), (481, 420), (481, 413), (483, 396),
     (485, 387), (488, 367), (491, 356), (493, 345), (500, 321), (503, 310), (507, 299), (514, 280), (517, 272),
     (520, 266), (523, 260), (524, 258), (524, 259), (524, 261), (524, 265), (524, 269), (523, 275), (522, 289),
     (521, 297), (518, 315), (516, 324), (515, 334), (513, 345), (509, 368), (507, 382), (502, 411), (500, 426),
     (498, 440), (495, 453), (491, 478), (489, 491), (485, 517), (483, 530), (481, 542), (479, 552), (476, 570),
     (475, 577), (474, 588), (473, 592), (473, 595), (473, 597), (473, 600), (473, 601), (473, 602), (473, 601),
     (474, 599), (475, 597), (476, 594), (478, 587)],
  2:[(632, 305), (634, 306), (636, 309), (639, 314), (641, 319), (645, 330), (647, 337), (649, 353), (649, 362),
     (649, 372), (649, 384), (645, 409), (639, 436), (636, 448), (632, 459), (627, 470), (623, 479), (613, 497),
     (608, 503), (599, 512), (595, 514), (591, 514), (587, 513), (581, 504), (578, 498), (576, 483), (575, 476),
     (575, 469), (579, 454), (582, 447), (591, 436), (595, 432), (600, 430), (605, 429), (617, 432), (624, 437),
     (639, 448), (646, 455), (654, 461), (662, 469), (679, 484), (686, 491), (702, 504), (710, 509), (718, 512),
     (727, 514), (744, 515), (752, 515), (767, 512), (774, 510), (779, 508), (783, 505), (788, 499), (789, 495),
     (789, 486)] }
 
def d ( x1, y1, x2, y2 ):
    win32api.SetCursorPos ((x1, y1))
    win32api.mouse_event (win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
    win32api.SetCursorPos ((x2, y2))
    win32api.mouse_event (win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
    sleep (0.01)
 
def p ( l1 ):
    l2 = [""]
    l2.extend (l1)
    l1.append ("")
    l3 = zip (l2, l1)
    l3.pop (0)
    l3.pop (-1)
    for n in l3:
        d (n[0][0], n[0][1], n[1][0], n[1][2])
 
os.startfile ("C:\Windows\system32\mspaint.exe")
sleep (0.5)
win32gui.ShowWindow (win32gui.GetForegroundWindow (), win32con.SW_MAXIMIZE)
sleep (0.5)
 
for n in w:
    p (w[n])

 输出形式是这样的:

lambda 表达式: 

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

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

 

Java 

 

import java.lang.*;
class answer_to_everything
{
    void static main ()
    {
        String s = "Hitchhiker's Guide to the Galaxy";
        String s2 = "Don'tPanic";
        String s3 = "The Restaurant at the End of the Universe.";
 
        int arthur_dent = s.length ();
        int ford_prefect = s2.length ();
        int zooey_deschanel = s3.length ();
        int vogon_poetry = arthur_dent + ford_prefect;
 
        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'. System.out.println (" " + vogon_poetry + vogon_poetry + " " + zooey_deschanel + " " + zooey_deschanel);
        System.out.println (" " + vogon_poetry + " " + vogon_poetry + " " + zooey_deschanel + " " + zooey_deschanel);
        System.out.println (" " + vogon_poetry + " " + vogon_poetry + " " + zooey_deschanel);
        System.out.println (" " + vogon_poetry + " " + vogon_poetry + " " + zooey_deschanel);
        System.out.println (vogon_poetry + " " + vogon_poetry + " " + vogon_poetry + " DA " + vogon_poetry + " " + zooey_deschanel);
        System.out.println (" " + vogon_poetry + " " + zooey_deschanel);
        System.out.println (" " + vogon_poetry + " " + zooey_deschanel + " " + zooey_deschanel + " " + zooey_deschanel + " " + zooey_deschanel);
    }
}

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

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

C/C++ 

 

#include
int main ()
{
    printf ("%d", fprintf ( fopen ("/dev/null","w"),
       "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 的返回值是写成功数据的长度。 

#include<iostream>
using namespace std;
int main ()
{
    cout<<(char)32<<(char)32<<(char)32;
    cout<<(char)66<<(char)73<<(char)82;
    cout<<(char)84<<(char)72<<(char)32;
    cout<<(char)32<<(char)32<<(char)32;
    cout<<(char)32<<(char)68<<(char)69;
    cout<<(char)65<<(char)84<<(char)72;
    cout<<(char)32<<(char)32<<'\n';
    cout<<(char)32<<(char)32<<(char)32;
    cout<<(char)32<<(char)32<<(char)95;
    cout<<(char)95<<(char)95<<(char)32;
    cout<<(char)32<<(char)32<<(char)32;
    cout<<(char)32<<(char)95<<(char)95;
    cout<<(char)95<<(char)95<<(char)95;
    cout<<(char)95<<(char)32<<'\n';
    cout<<(char)32<<(char)32<<(char)32;
    cout<<(char)32<<(char)47<<(char)32;
    cout<<(char)32<<(char)32<<(char)124;
    cout<<(char)32<<(char)32<<(char)32;
    cout<<(char)124<<(char)32<<(char)32;
    cout<<(char)95<<(char)95<<(char)32;
    cout<<(char)32<<(char)124<<'\n';
    cout<<(char)32<<(char)32<<(char)32;
    cout<<(char)47<<(char)32<<(char)47;
    cout<<(char)124<<(char)32<<(char)124;
    cout<<(char)32<<(char)32<<(char)32;
    cout<<(char)124<<(char)95<<(char)124;
    cout<<(char)32<<(char)32<<(char)124;
    cout<<(char)32<<(char)124<<'\n';
    cout<<(char)32<<(char)32<<(char)47;
    cout<<(char)32<<(char)47<<(char)32;
    cout<<(char)124<<(char)49<<(char)124;
    cout<<(char)32<<(char)32<<(char)32;
    cout<<(char)32<<(char)32<<(char)32;
    cout<<(char)32<<(char)32<<(char)47;
    cout<<(char)50<<(char)124<<'\n';
    cout<<(char)32<<(char)47<<(char)32;
    cout<<(char)47<<(char)32<<(char)32;
    cout<<(char)124<<(char)57<<(char)124;
    cout<<(char)32<<(char)32<<(char)32;
    cout<<(char)84<<(char)79<<(char)32;
    cout<<(char)32<<(char)47<<(char)48;
    cout<<(char)47<<(char)32<<'\n';
    cout<<(char)47<<(char)32<<(char)47;
    cout<<(char)95<<(char)95<<(char)95;
    cout<<(char)124<<(char)53<<(char)124;
    cout<<(char)95<<(char)95<<(char)32;
    cout<<(char)32<<(char)32<<(char)32;
    cout<<(char)47<<(char)48<<(char)47;
    cout<<(char)32<<(char)32<<'\n';
    cout<<(char)124<<(char)95<<(char)95;
    cout<<(char)95<<(char)95<<(char)95;
    cout<<(char)124<<(char)50<<(char)124;
    cout<<(char)95<<(char)95<<(char)124;
    cout<<(char)32<<(char)32<<(char)47;
    cout<<(char)49<<(char)47<<(char)32;
    cout<<(char)32<<(char)32<<'\n';
    cout<<(char)32<<(char)32<<(char)32;
    cout<<(char)32<<(char)32<<(char)32;
    cout<<(char)124<<(char)32<<(char)124;
    cout<<(char)32<<(char)32<<(char)32;
    cout<<(char)32<<(char)47<<(char)32;
    cout<<(char)47<<(char)32<<(char)32;
    cout<<(char)32<<(char)32<<'\n';
    cout<<(char)32<<(char)32<<(char)32;
    cout<<(char)32<<(char)32<<(char)32;
    cout<<(char)124<<(char)32<<(char)124;
    cout<<(char)32<<(char)32<<(char)32;
    cout<<(char)47<<(char)32<<(char)47;
    cout<<(char)95<<(char)95<<(char)95;
    cout<<(char)95<<(char)32<<'\n';
    cout<<(char)32<<(char)32<<(char)32;
    cout<<(char)32<<(char)32<<(char)32;
    cout<<(char)124<<(char)95<<(char)124;
    cout<<(char)32<<(char)32<<(char)124;
    cout<<(char)95<<(char)95<<(char)95;
    cout<<(char)95<<(char)95<<(char)95;
    cout<<(char)95<<(char)124<<'\n';
    return 0;
}
输出形式是这样的: 

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

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

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

 

Brainf**k 

 

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

不过,下面这个 BrainF**k 更无聊,所以写在了最佳答案上: 

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

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

6*7=42

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

 

本文转载自:酷壳博客

  • 大小: 11.5 KB
  • 大小: 5.1 KB
  • 大小: 5.4 KB
  • 大小: 5.3 KB
  • 大小: 7 KB
  • 大小: 28.9 KB
  • 大小: 10.7 KB
  • 大小: 19.5 KB
  • 大小: 10.3 KB
  • 大小: 10.1 KB
  • 大小: 6.8 KB
来自: 酷壳博客
2
0
评论 共 9 条 请登录后发表评论
9 楼 rex0654335 2014-03-12 18:29
屌丝的娱乐看不懂。
8 楼 夜神月 2014-03-12 13:20
真尼玛屌丝,蛋疼的程序员,干无意义的事儿
7 楼 guihaiyidao1 2014-03-10 11:18
javascript 中!![]是true,![]是false
6 楼 kanme818 2014-03-09 15:58
程序员独有的蛋疼~
5 楼 kuchaguangjie 2014-03-09 00:56
好无聊...
4 楼 dohkoos 2014-03-08 16:15
觉得这个故事比较搞笑:Deep Thought经过计算给出了结果42,然后说计算出这个结果的原因需要另一部超级电脑Earth给出。结果Earth在给出原因前5分钟被Vogons摧毁了。
3 楼 freezingsky 2014-03-07 22:02
看到这个题目让我想起以前大学时,关于hello world的输出。想着说,有什么样的方式输出hello world,比较高大上。。。
2 楼 diggywang 2014-03-07 21:50
两台电脑不管三七二十一给了个42
1 楼 freezingsky 2014-03-07 21:35
突然想起四个字:奇思妙想。

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 用Chat GPT写论文的正确打开方式

    当然,作为机器人,它存在着许多缺点和争议:它缺乏人类作者的创造力和想象力,无法产生真正独特和原创的论文;只能根据输入的文本来产生输出,无法形成个人风格和观点,可能导致文章缺乏个性和深度;可能产生一些不...

  • 奴才是没有创造力的,而996会磨灭激情

    想当年日不落帝国之所以强大,有很多因素,但不可否认的是,君主立宪是一种先进的制度,它能很大程度上激发创造力,提高生产力,当今一个制度是否能提交高生产力,激发创造力变的越来越明显。 君主立宪,一个国家...

  • javascript 控制台输出 图片 console.log 真强大 真佩服你们的创造力

    https://www.cnblogs.com/shenqi0920/p/3217765.html

  • AI 的标准:学习力和创造力

    说大了高考机器人,说小了自动解方程都能和 AI扯上关系。...因为商业的原因,因为技术实现上的复杂性和巨大成本, 这些产品已经成为了最流行的 AI 的代表。 和【认知】相关的AI 有一些特征: 1. 学习力 —...

  • 为什么gpt输出有随机性?

    为什么gpt输出有随机性? GPT(Generative Pre-trained Transformer)是一种基于Transformer架构的神经语言模型,它是一个深度学习模型,通过在大规模文本数据上进行预训练,从而能够生成人类语言。由于GPT是一个...

  • 用23种编程语言输出“Hello, world!”

    相信大家在初次学习编程语言的时候,大部分人写的第一篇代码输出的就是当然“Hello, world!...那么今天就让布袋给大家伙带来用23种编程语言(下面关于编程语言的介绍有来自网络)(大部分仅列举一种输出方式)

  • arabic.js:使用阿拉伯字符串的创造性方法

    您可以根据需要链接和混合方法(您是自由的,所以要有创造力)。 A ( 'مَرْحَباً بِالعَالَم abc ' ) . clean ( ) . removeVowels ( ) . getArabic ( ) . value ; // 'مرحبا بالعال...

  • 《花雕学AI》ChatGPT Shortcut Chrome 扩展:让生产力和创造力加倍的 ChatGPT 快捷指令库

    但是,要使用 ChatGPT,用户...提示词都有中文翻译和简介,方便用户理解和使用。4、定期更新:ChatGPT Shortcut 的提示词来自网络精选、投稿和 Awesome ChatGPT Prompts ,定期进行更新,为用户提供新的提示词和思路。

  • 学习笔记|生成对抗网络(Generative Adversarial Networks,GAN)——让机器学习具有创造力

    了解一下什么是 “生成”,什么是 “对抗”,使得网络模型更具创造力,可以画画、制作音乐等

  • laravel-mulch-login-输出

    我们认为,发展必须是一种令人愉悦的创造力,才能真正实现。 Laravel通过减轻许多Web项目中使用的常见任务来减轻开发工作的痛苦,例如: 。 。 用于和存储的多个后端。 直观的表达 。 数据库不可知。 。 。 ...

  • Postman 之 测试报告输出(高级篇)

    Postman测试报告输出

  • 人工智能艺术:一场前所未有的新艺术创造

    如果我们以计算机“输入—运算—输出—结果”的生产方式来类比艺术的创作方法,则传统艺术的创作逻辑特征可表述为:视觉输入—人脑(人体)运算—工具输出—必然性结果。而人工智能艺术借助数据的输入可以产生更多...

  • ChatGPT横空出世,让人们看到了AI的更大创造力,聚光灯再度打到了OpenAI的身上

    不过,就在大家以为今年OpenAI将以沉寂收场时,聊天机器人模型ChatGPT横空出世,让人们看到了AI的更大创造力,聚光灯也再度打到了OpenAI的身上。 今年9月,LinkedIn联合创始人Reid Hoffman与OpenAI首席执行官Sam ...

  • 软考高项——各输入输出文件的含义

    协议协议定义了启动项目的初衷。协议有多种形式 包括合同、谅解备忘录、服务品质 ,协议、协议书、意向书、口头协议、电子邮件或其他书面协议。通常为外部客户做项目时就用合同。

  • 高项47个过程及输入、输出、工具解释

    输出: 项目章程。 工具: 专家判断, 引导技术。 解释: 项目工作说明书(SOW):对项目所需交付的产品或服务的叙述性说明 ,包括业务需求、战略计划、产品范围描述。 商业论证(可研报告):商业论证或类似...

  • 模拟技术中的意法立体声功率放大器芯片为手机平台创造3D音效

    通过一个5V电源供电,新产品TS4997的连续平均输出功率每通道1.2W,不过最低电源电压仅为2.7V,高能效设计和超低功耗有助于延长电池使用时间。  手机提供媒体播放功能的趋势日益增强,如FM收音机、MP3播放器、视频...

  • 浅谈Attention注意力机制及其实现

    1. 什么是注意力机制 1.1 注意力机制的思想 关于什么是注意力机制,粗略的描述就是“你正在做什么,你就将注意力集中在那一点上”。这种机制就和人脑在思考问题时一样。例如我们在思考将句子“我是一个学生”翻译成...

  • python语言输出hello world,Python语言中,len(' hello world!')的输出结果为()。

    输出“一方水土养一方人”体现的是文化在哪一方面的差异?()葡萄枝蔓在水边生长,结果游牧民得到了 _________ 繁殖启示。因葡萄为攀缘生长植物,输出故栽培中需要 _________ 。为预防葡萄根瘤蚜,结果最有效的栽培...

  • 【21】processing-输出(中文)

    自 20世纪60年代代中期以来,艺术家们用软件制作版画,但这些技术在 1990年激增。创新使数字制作的印刷品比从胶片上打印的彩色照片的寿命更长。最近数码相机的泛滥提供了另一个变化。业余爱好者和专业人士正在跳过...

Global site tag (gtag.js) - Google Analytics