gpt4 book ai didi

ruby - FizzBu​​zz Ruby 单线

转载 作者:数据小太阳 更新时间:2023-10-29 06:58:22 31 4
gpt4 key购买 nike

Rosettacode.org 在 Ruby 中有这个出色的单行 FizzBu​​zz 解决方案。

1.upto(100){|n|puts'FizzBuzz '[i=n**4%-15,i+13]||n}

问题是,我不明白。令我困惑的部分是“n 的 4 模 -15 次方”。有没有人有解释或引用解释?我想在其他问题中使用这种选择子串的方式。有关 FizzBu​​zz 的更多信息,请参阅 [ https://rosettacode.org/wiki/FizzBuzz ]

最佳答案

我不知道他们是如何发现提高到四次方的,但 -15 是因为 FizzBu​​zz 处理 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#[] 的开始参数插入那些使用字符串 'FizzBu​​zz ' 给我们:

'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 - FizzBu​​zz Ruby 单线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51126534/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com