首页
学习
活动
专区
工具
TVP
发布

程序员可以利用一行代码做什么?

在编程的世界里,一行精妙的语句可能胜过 100 行赘述。

能删库跑路

这行指令就像是在你的所有文件上浇汽油然后一把火把他们全烧了。

sudo rm -rf /*

能让电脑死机

:(){ :|: & };:

能让你上演黑客帝国

sudo apt-get install hollywood cmatrix

能追心仪对象

这行代码能展示出一个心型:

print('\n'.join([''.join([('Love'[(x-y) % len('Love')] if ((x*0.05)**2+(y*0.1)**2-1)**3-(x*0.05)**2*(y*0.1)**3

能飞速创建一个服务器

python -m http.server

能解决一道算法题

比如 力扣 231. 2 的幂,input 是一个整形,要求判断这个数字是否是 2 的幂,并返回布尔值。

def isPowerOfTwo(self, n: int) -> bool: return n > 0 and n & n - 1 == 0

def isPowerOfTwo(self, n):return n > 0 and 2**int(math.log2(n)) == n

n 小于等于 0 时一定为否,n 大于 0 的前提下,第二种解法就是简单的通过数学运算比较,第一种解法则是基于二进制理论:如果一个数是 2 的幂,它的二进数最高位是 1,其它都为 0;对它减 1 后最高位为 0,其余都是 1,做与运算会得到 0。

当然,上面举的这些例子不过是现代程序员们的小把戏,早在上个世纪 60 年代,one-liner program 的概念在就已经在计算机领域的上古巨佬之间流传。在维基百科上,你可以搜索到相关词条。

那些古老到比你年纪还大,甚至你可能根本没听说过的语言,像 AWK 语言,J 语言的世界里,都出现过令人惊讶的单行程序,例如下面这个用 J 语言实现的快速排序:

quicksort=: (($:@(#[)) ({~ ?@#)) ^: (1

你可能需要求助你的爷爷,才知道怎么运行它。

到了上世纪 70 年代,随着家用电脑和 BASIC 的兴起,单行程序也变得更受追捧,当时的电脑杂志经常记录一些让人印象深刻的简短的或者单行的程序。

发黄的纸张上,杂志编辑以「魔法」来定义这些程序。

C 语言诞生后,随着一个诡异编程大赛:国家 C 语言混乱大赛(IOCCC)的兴起,更多的奇妙的单行程序诞生了。比如下面这个包含 1255 个字符的国际象棋程序(你可以把它当成单行程序):

B,i,y,u,b,I[411],*G=I,x=10,z=15,M=1e4;X(w,c,h,e,S,s)_ L>N){*G=O _ s>1)N=L;} n+=J||(g=I+p,m=p2||(p=O,q|A>2|o>z& !r&&++C*--A));}}}Z++O>98?O=20:e-O);P N+M*M&&N>-K+1924|d?N:0;}main()else v u,5);v u, 1);}}

这段神奇的代码由 IOCCC 的 5 届冠军得主经由两届比赛改进得来。在 2014 年,代码作者甚至专门出了一本书解释这段代码,并添加了注释。

当然,大赛也产生了一些看起来不那么变态的单行程序,比如下面这个:

main(int c,char**v)m(char*s,char*t)

你能看出来它在干嘛吗?

历史的车轮滚滚向前,代码的形状也产生了不可思议的变化,比如下面这个算 Pi 的代码:

以及下面这个模拟飞机飞行的代码:

对于技术实力过硬又充满想象力的程序员来说,一行代码可以做任何事。

来源:力扣

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20191023A0F3VU00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

相关快讯

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券