Rosettacode.org在Ruby中提供了这个出色的单行FizzBuzz解决方案.
1.upto(100){|n|puts'FizzBuzz '[i=n**4%-15,i+13]||n}
Run Code Online (Sandbox Code Playgroud)
麻烦的是,我不明白.令我困惑的部分是"4模数-15的力量".有没有人有解释或参考解释?我想用这种方法在其他问题中选择子串.有关FizzBuzz的更多信息,请参阅[ https://rosettacode.org/wiki/FizzBuzz ]
这是我的嵌套地图示例,其中数据为文字。该程序按预期运行。
\n\n var x = scala.collection.mutable.Map(\n ("Early", Map(("a", 1), ("b", 2))), \n ("Late", Map(("x", 24), ("y", 25))))\n\nfor (ticker <- x.keys) {\n val trades = x(ticker)\n for (tradetime <- trades.keys) {\n val tradetotal = trades(tradetime)\n println(ticker + " | " + tradetime + " | " + tradetotal)\n }\n println(ticker + " | " + trades)\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n但是,我想消除文字并从 csv 文件读取上述值。这是 csv:
\n\nEarly,a,1 \nEarly,b,2\nLate,x,24\nLate,y,25\n
Run Code Online (Sandbox Code Playgroud)\n\n下面是读取 csv 并以类似于上面带有文字的程序的方式打印出值的代码。
\n\n val bufferedSource = io.Source.fromFile("mapt.csv")\n val builder = StringBuilder.newBuilder\n\n for (line <- bufferedSource.getLines) …
Run Code Online (Sandbox Code Playgroud) 我需要生成一些大整数。请参见下面的示例。
Input Result
40 165580141
80 37889062373143906
120 8670007398507948658051921
160 1983924214061919432247806074196061
200 453973694165307953197296969697410619233826
Run Code Online (Sandbox Code Playgroud)
这是我的Fortran代码:
program cycle
use iso_fortran_env
implicit none
character(200) :: str
integer :: n
integer(kind=int64) :: x1, result, x2, x3
do n = 40, 500, 40
x1 = n
result = 1
x2 = 0
x3 = 1
do
if (x1 > 1) then
x2 = result
result = result + x3
x3 = x2
x1 = x1 - 1
else
exit
end if
end do
write(str,'(i64)') result …
Run Code Online (Sandbox Code Playgroud) 下面的代码的第一部分将元组成功存储在Map的value部分中。第二部分是我尝试存储数组而不是元组的尝试。这是行不通的。怎么了?
object MyClass {
def main(args: Array[String]) {
val m1 = Map("fname" -> (1,2), "lname" -> (3,4))
for ((k,v) <- m1) printf("key: %s, value: %s, 0: %s\n", k, v, v._1)
var states = scala.collection.mutable.Map[String, new Array[Int](3)]()
val states += ("fname" -> (1,2,3))
val states += ("lname" -> (4,5,6))
for ((k,v) <- states) printf("key: %s, value: %s, 0: %s\n", k, v, v._1)
}
}
Run Code Online (Sandbox Code Playgroud)
这是我得到的错误。
一旦理解了完成这项工作的语法,我也想访问数组中的各个元素。
整数是一个数字,其数字是非递减顺序,例如1234.这是一种查找用Ruby编写的整齐数字的方法:
def tidy_number(n)
n.to_s.chars.sort.join.to_i == n
end
p tidy_number(12345678) # true
p tidy_number(12345878) # false
Run Code Online (Sandbox Code Playgroud)
我试着在Scala中编写相同的东西并得出以下内容:
object MyClass {
def tidy_number(n:Int) = n.toString.toList.sorted.mkString.toInt == n;
def main(args: Array[String]) {
println(tidy_number(12345678)) // true
println(tidy_number(12345878)) // false
}
}
Run Code Online (Sandbox Code Playgroud)
我能在Scala中完成它的唯一方法是将一个整数转换为一个字符串到一个列表,然后对列表进行排序并再次返回.我的问题:还有更好的方法吗?从某种意义上说,"更好"的转化次数更少.我主要是在寻找Scala的简洁部分,但如果有人在Ruby中指出更简洁的方式,我将不胜感激.
这是一个在 for 循环之前声明变量的工作程序。
package main
import "fmt"
type brackets struct {
ch string
pos int
}
type stack []brackets
func main() {
p := brackets{ch: "a"}
st := make(stack,0)
for i := 0; i < 3; i++ {
p = brackets{ch: "a", pos: 1}
st = append(st, p)
fmt.Println(p)
fmt.Println(st)
}
}
Run Code Online (Sandbox Code Playgroud)
我想声明相同的变量作为 for 循环的一部分。如何?这是一个错误的尝试。
package main
import "fmt"
type brackets struct {
ch string
pos int
}
type stack []brackets
func main() {
// p := brackets{ch: "a"}
// …
Run Code Online (Sandbox Code Playgroud)