fle*_*her 18 language-agnostic code-golf rosetta-stone
我最近指出一名学生正在做一篇关于将乘法表转储到控制台的文章.它使用嵌套的for循环并乘以每个的步长值.
这看起来像.NET 2.0方法.我想知道,使用Linq和扩展方法,例如,要获得相同结果需要多少行代码.
stackoverflow社区是否能够应对挑战?
挑战:在控制台应用程序中,编写代码以生成如下示例的表:
01 02 03 04 05 06 07 08 09 02 04 06 08 10 12 14 16 18 03 06 09 12 15 18 21 24 27 04 08 12 16 20 24 28 32 36 05 10 15 20 25 30 35 40 45 06 12 18 24 30 36 42 48 54 07 14 21 28 35 42 49 56 63 08 16 24 32 40 48 56 64 72 09 18 27 36 45 54 63 72 81
当这变成了与语言无关的代码 - 高尔夫之战时,我将与社区决定哪个是接受答案的最佳解决方案.
有很多关于表格的规格和格式的讨论,我故意添加了00格式,但是双重换行最初只是因为我不知道如何在创建帖子时格式化文本!
MPe*_*ier 41
*/~1+i.9
Run Code Online (Sandbox Code Playgroud)
得到:
1 2 3 4 5 6 7 8 9 2 4 6 8 10 12 14 16 18 3 6 9 12 15 18 21 24 27 4 8 12 16 20 24 28 32 36 5 10 15 20 25 30 35 40 45 6 12 18 24 30 36 42 48 54 7 14 21 28 35 42 49 56 63 8 16 24 32 40 48 56 64 72 9 18 27 36 45 54 63 72 81
@earl找到的解决方案:
'r(0)q( )3.'8!:2*/~1+i.9
Run Code Online (Sandbox Code Playgroud)
得到:
01 02 03 04 05 06 07 08 09 02 04 06 08 10 12 14 16 18 03 06 09 12 15 18 21 24 27 04 08 12 16 20 24 28 32 36 05 10 15 20 25 30 35 40 45 06 12 18 24 30 36 42 48 54 07 14 21 28 35 42 49 56 63 08 16 24 32 40 48 56 64 72 09 18 27 36 45 54 63 72 81
gno*_*ice 16
a=1:9;a'*a
Run Code Online (Sandbox Code Playgroud)
a=1:9;disp(num2str(a'*a,'%.2d '))
Run Code Online (Sandbox Code Playgroud)
Nab*_*abb 15
>---------[++++++++++>---------[+<[-<+>>+++++++++[->+>>---------[>-<++++++++++<]<[>]>>+<<<<]>[-<+>]<---------<]<[->+<]>>>>++++[-<++++>]<[->++>+++>+++<<<]>>>[.[-]<]<]++++++++++.[-<->]<+]
Run Code Online (Sandbox Code Playgroud)
Tho*_*mas 14
01 02 03 04 05 06 07 08 09
02 04 06 08 10 12 14 16 18
03 06 09 12 15 18 21 24 27
04 08 12 16 20 24 28 32 36
05 10 15 20 25 30 35 40 45
06 12 18 24 30 36 42 48 54
07 14 21 28 35 42 49 56 63
08 16 24 32 40 48 56 64 72
09 18 27 36 45 54 63 72 81
Run Code Online (Sandbox Code Playgroud)
假设需要一个尾随换行符; 否则,251个字符.
*运行*
r=range(1,10)
for y in r:print"%02d "*9%tuple(y*x for x in r)
Run Code Online (Sandbox Code Playgroud)
C#
这只有2行.它使用lambdas而不是扩展方法
var nums = new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
nums.ForEach(n => { nums.ForEach(n2 => Console.Write((n * n2).ToString("00 "))); Console.WriteLine(); });
Run Code Online (Sandbox Code Playgroud)
当然,它可以在一条长不可读的线上完成
new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8, 9 }.ForEach(n => { new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8, 9 }.ForEach(n2 => Console.Write((n * n2).ToString("00 "))); Console.WriteLine(); });
Run Code Online (Sandbox Code Playgroud)
所有这一切都假设您考虑使用labmda一行?
该解决方案不打印前导零按规范.
print"(9(i3.2))",((i*j,i=1,9),j=1,9);end
Run Code Online (Sandbox Code Playgroud)
让我们认真对待rosetta-stoning,并将Kdb +的K4与规范的J解决方案(*/~1+i.9)进行比较:
a*/:\:a:1+!9
1 2 3 4 5 6 7 8 9
2 4 6 8 10 12 14 16 18
3 6 9 12 15 18 21 24 27
4 8 12 16 20 24 28 32 36
5 10 15 20 25 30 35 40 45
6 12 18 24 30 36 42 48 54
7 14 21 28 35 42 49 56 63
8 16 24 32 40 48 56 64 72
9 18 27 36 45 54 63 72 81
Run Code Online (Sandbox Code Playgroud)
J的"table"运算符(/)等于K"每个左右每个"(/:\:)成语.我们~在K中没有J非常方便的"反身"运算符(),所以我们必须传递a左右两个参数.
小智 5
Oracle SQL,103个字符:
select n, n*2, n*3, n*4, n*5, n*6, n*7, n*8, n*9 from (select rownum n from dual CONNECT BY LEVEL < 10)
Run Code Online (Sandbox Code Playgroud)
C# - 117,113,99,96,95 89个字符
根据NickLarsen的想法更新
for(int x=0,y;++x<10;)
for(y=x;y<x*10;y+=x)
Console.Write(y.ToString(y<x*9?"00 ":"00 \n"));
Run Code Online (Sandbox Code Playgroud)
99,85,82 81个字符
......如果你不关心前导零并且允许标签对齐.
for(int x=0,y;++x<10;)
{
var w="";
for(y=1;++y<10;)
w+=x*y+" ";
Console.WriteLine(w);
}
Run Code Online (Sandbox Code Playgroud)