- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
Rosettacode.org 在 Ruby 中有这个出色的单行 FizzBuzz 解决方案。
1.upto(100){|n|puts'FizzBuzz '[i=n**4%-15,i+13]||n}
问题是,我不明白。令我困惑的部分是“n 的 4 模 -15 次方”。有没有人有解释或引用解释?我想在其他问题中使用这种选择子串的方式。有关 FizzBuzz 的更多信息,请参阅 [ https://rosettacode.org/wiki/FizzBuzz ]
最佳答案
我不知道他们是如何发现提高到四次方的,但 -15 是因为 FizzBuzz 处理 3 的倍数或 5 的倍数或 3 和 5 的倍数(即 15 的倍数).. .然后否定它最终会很好地处理负指数。我们可以看到它适用于 Modular Exponentiation . Memory-efficient method 部分说:
c mod m = (a ⋅ b) mod m
c mod m = [(a mod m) ⋅ (b mod m)] mod m
在我们的例子中,c 是我们的 n,所以我们有
c ** 4 % m
使用 law of exponents ,我们知道 (c ** e1) * (c ** e2) = c ** (e1 + e2)
,所以 c ** 4 = (c ** 2) * (c ** 2)
,所以我们现在有一个a
和一个b
,它们都是c ** 2
。因此:
(c ** 4) % m = ((c ** 2) * (c ** 2)) % m
= (((c ** 2) % m) * ((c ** 2) % m)) % m
= (((c ** 2) % m) ** 2) % m
再次按照相同的步骤:
(c ** 2) % m = (c * c) % m
= ((c % m) * (c % m)) % m
= ((c % m) ** 2) % m
最后:
(c ** 4) % m = ((((c % m) ** 2) % m) ** 2) % m
当 m = -15
时,c % m
的唯一值是 (-14..0)
我们可以构建一个简单的表看。由于我们只对模的结果进行运算,因此我们只需要能够证明这 15 个数字有效:
c%m **2 %m **2 %m
-14 => 196 => -14 => 196 => -14
-13 => 169 => -11 => 121 => -14
-12 => 144 => -06 => 36 => -09
-11 => 121 => -14 => 196 => -14
-10 => 100 => -05 => 25 => -05
-09 => 81 => -09 => 81 => -09
-08 => 64 => -11 => 121 => -14
-07 => 49 => -11 => 121 => -14
-06 => 36 => -09 => 81 => -09
-05 => 25 => -05 => 25 => -05
-04 => 16 => -14 => 196 => -14
-03 => 9 => -06 => 36 => -09
-02 => 4 => -11 => 121 => -14
-01 => 1 => -14 => 196 => -14
00 => 0 => 00 => 0 => 00
现在,看看我们的表,所有 3 的倍数的值都是 -09
,所有 5 的倍数的值都是 -05
,而那些是3 和 5 的倍数设置为 00
;其他一切都是 -14
(如果我们使用 15 而不是 -15,我们将分别有 6、10、0 和 1,并且需要查找以将其转换为字符串索引).为 String#[]
的开始参数插入那些使用字符串 'FizzBuzz '
给我们:
'FizzBuzz '[-9] # => 'F'
'FizzBuzz '[-5] # => 'B'
'FizzBuzz '[0] # => 'F'
'FizzBuzz '[-14]# => nil
然后将这些数字加 13 得到长度:
'FizzBuzz '[-9, 4] # => "Fizz"
'FizzBuzz '[-5, 8] # => "Buzz "
'FizzBuzz '[0, 13] # => "FizzBuzz "
'FizzBuzz '[-14, -1] # => nil
关于ruby - FizzBuzz Ruby 单线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51126534/
此代码似乎在启用优化的广泛使用的编译器上中断,尽管它在 Visual Studio 中运行良好。 struct foo { foo(int a) { s[0] = '0'+a%10;s[1]
我想要一个图表,其中有一个单线箭头,如下所示: 1 2 3 4 5 或者像这样(其中/假设是一个箭头:)): \/ -----------------
我正在为 Java 编写自定义规则。有两个 Tree.KIND 实例(STRING_LITERAL 和 ASSIGNMENT)需要捕获。有一个特定的行,字符串文字和赋值的逻辑都会引发问题。但 Sona
Rosettacode.org 在 Ruby 中有这个出色的单行 FizzBuzz 解决方案。 1.upto(100){|n|puts'FizzBuzz '[i=n**4%-15,i+13]||n
很多时候我使用了这个命令,它在当前目录打开了一个临时的 HTTP 服务器: python3 -m http.server 现在我需要接收文件,有没有打开ftp服务器的一行命令? 我只是在寻找一个命令行
相关主题 std::unique_ptr, deleters and the Win32 API 要将 Win32 句柄用作 RAII,我可以使用以下行 std::unique_ptr::type,
我认为必须有一个单行 Guava 解决方案来将一个不可变列表转换为另一个不可变列表,但我找不到它。假设我们有以下对象: ImmutableList input = ImmutableList.of("
我有以下 Highcharts ( http://www.highcharts.com ) 散点图。请注意,轴从 -10 开始,到 10 停止,中间为 0。我希望每条 0 线的宽度或颜色都与其他线不同
我有一个项目需要将一个视频文件与另一个音频文件合并。预期的输出是一个视频文件,其中包含来自实际视频的音频和合并后的音频文件。输出视频文件的长度将与实际视频文件的大小相同。 是否有单行 FFMPEG 命
我在 python3 类中有 2 个列表: self.keys = ["a","b","c","d"] self.values = [1,2,3,4] len(self.keys) == len(se
我有一个不同长度的数组列表,我想将它们组合成一个最大维度的矩阵,并在末尾填充零。例如(伪代码): combine( [1,2,3], [4,5]) [[1,2,3],[4,5,0]] 这是我目前的解决
例如,给定 i=5 和 n=8,我想生成 [0;0;0;0;1;0; 0;0]。具体来说,我想生成向量 v 以便: v = zeros(n,1); v(i) = 1; 有没有一种(合理的)方法可以在一
我是一名优秀的程序员,十分优秀!