【问题标题】:Perl golf: Print the powers of a numberPerl Golf:打印数字的幂
【发布时间】:2010-09-17 15:02:35
【问题描述】:

什么是最短的 Perl 单行,它打印出硬编码的 2 位小数的前 9 次幂(例如,0.37),每行都在自己的行上?

输出类似于:

1
0.37
0.1369
[etc.]

官方 Perl 高尔夫规则:

  1. (键)击数最少的获胜
  2. 您的笔画计数包括命令行

【问题讨论】:

  • 不想玩就不用玩了
  • 让人们克服对 perl 作为只写语言的恐惧的好方法:-P
  • 貌似有两个28笔画,都需要Perl 5.10
  • @Tanktalus:你认为 perl 可怕吗?在 dc 中查看这个解决方案:dc -e'20k1p.37dsap7[rla*pr1-d0
  • 按 shift+4 是否算作额外的击键以生成“$”?您的措辞可能含糊不清。

标签: perl math code-golf


【解决方案1】:

使用 perl 5.10.0 及更高版本:

perl -E'say 0.37**$_ for 0..8'

对于较旧的 perls,您没有 say 和 -E,但这有效:

perl -le'print 0.37**$_ for 0..8'

更新:第一个解决方案由 30 次击键组成。删除第一个 0 得到 29。可以节省另一个空间,所以我的最终解决方案是 28 笔划:

perl -E'say.37**$_ for 0..8'

【讨论】:

  • 该死,这正是我要发布的内容(尽管 9 不应该是 8 吗?)
  • 是的,已更正。 (Leon,你也不是经常使用 perlmonks 吗?如果是,在哪个昵称下?)
  • 不,我不经常使用 perlmonks(虽然在那里有一个使用这个全名的帐户),为什么?
  • 你的答案类似于你可以在 perlmonks 上找到的答案,所以我是古玩 ;-)
  • 把空格和0剪掉,就可以剪2笔了。
【解决方案2】:
perl -le'map{print.37**$_}0..8'

31 个字符 - 我没有 5.10 来尝试使用“说”的明显改进,但这是 28:

perl -E'map{say.37**$_}0..8'

【讨论】:

    【解决方案3】:
    seq 9|perl -nE'say.37**$_'
    

    26 - 是的,那是作弊。 (是的,我正在做从 1 到 9 的幂。0 到 8 只是愚蠢的。)

    【讨论】:

    • seq 9|perl -pE'$_=.37**$_' 也是 26
    • seq 9|perl -pe's/./.37**$_/e' 没有那么短,但有点混淆,不需要新的 perl。
    【解决方案4】:

    在 Perl 6 中只是为了好玩:

    1. 28 个字符:

      perl6 -e'.say for .37»**»^9'
      
    2. 27 个字符:

      perl6 -e'say .37**$_ for^9'
      

    (至少基于当前的空白规则。)

    【讨论】:

      【解决方案5】:
      perl -e 'print .37**$_,"\n" for 0..9'
      

      如果将 -l 添加到选项中,则可以跳过“\n”部分

      【讨论】:

        【解决方案6】:
        print join("\n", map { 0.37**$_ } (0..9));
        

        【讨论】:

          【解决方案7】:
          print.37**$_.$/for 0..8
          

          如果您在提交之前将程序截断,则为 23 笔。 :-P

          【讨论】:

          • +9 用于 perl -e'..'。记住,“2 你的笔画数包括命令行”
          • 我认为这实际上是模棱两可的。比赛规则有时只允许程序,但添加任何命令行开关的长度和一个空格。
          【解决方案8】:
          perl -e "for(my $i = 1; $i < 10; $i++){ print((.37**$i). \"\n\"); }"
          

          只是一个快速输入。 :)

          固定到换行符!

          【讨论】:

          • 我想你忘记了换行 - 你可能需要这样的东西: perl -e "for(my $i = 0; $i
          • 伟大的思想都一样。刚刚修复它,但我认为工具包可能只有我!
          • perl -e 'print .37**$_ ."\n" foreach (1..10);' # 比 Abyss 所做的稍短的版本。
          • 如果你不想要 "\n",你可以使用 $/ 来代替。它保存输入记录分隔符,默认为“\n”,并且短两个字符。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-01-10
          • 1970-01-01
          • 1970-01-01
          • 2011-05-05
          • 2018-04-28
          • 2014-08-13
          相关资源
          最近更新 更多