一个有点意思的题目——一行代码的九九乘法表

一行流挑战
使用任意编程语言输出“九九乘法表”,要求:
1,仅使用一行代码实现
2,代码文件尽可能小(字符数量尽可能少,此为评价标准)
3,直接打印输出(而非给出一个函数的返回值)
4,“九九乘法表”内容如下,行尾空格可忽略

1*1=1 1*2=2 1*3=3 1*4=4 1*5=5 1*6=6 1*7=7 1*8=8 1*9=9 2*2=4 2*3=6 2*4=8 2*5=10 2*6=12 2*7=14 2*8=16 2*9=18 3*3=9 3*4=12 3*5=15 3*6=18 3*7=21 3*8=24 3*9=27
4*4=16 4*5=20 4*6=24 4*7=28 4*8=32 4*9=36
5*5=25 5*6=30 5*7=35 5*8=40 5*9=45 6*6=36 6*7=42 6*8=48 6*9=54 7*7=49 7*8=56 7*9=63
8*8=64 8*9=72
9*9=81

由于要求代码文件尽可能小,因此打表是不现实的,采用语法糖包装的双重循环也许会比较好,例如,Python可以这样实现:

'\n'.join(' '.join(f"{i}*{j}={i*j}" for j in range(i, 10)) for i in range(1, 10))

说起来,这里面还涉及了一些语法问题。如果不多用一个join,e.g.

'

 '.join(f"{i} * {j}={i*j}" for j in range(i, 10)) for i in range(1, 10)

会出现报错。因为这是一个生成器表达式,它的值没有被任何方法所接收,因此需要多加一个join,才能正确地使用生成器表达式。

群里的dalao(也是提出这个问题的人)还提供了用js解决的思路:

s='';for(a=1;a<10;a++){for(b=a;b<10;b++)s+=${a}*${b}=${a*b};s+='\n'};console.log(s)

如果不能用分号,也可以写成如下的形式:

[1,2,3,4,5,6,7,8,9].reduce((a,e,i,r)=>a+r.slice(i).reduce((s,n)=>s+e+'*'+n+'='+e*n+(n==9?'\n':' '),''),'')

这道题也许不实用,但是好玩或许也是一种实用吧!

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇