iPad Playgrounds app,非常早期的挑战:您正在学习编程,您对变量,循环等一无所知。您知道的唯一关键字是func
。游戏建议你第一次建立自己的功能。
基本上,您只会使用屏幕上的内容:collectGem()
,moveForward()
,name()
,toggleSwitch()
,{{1} },turnLeft()
。你不会意外跌落(所以额外的动作是可以接受的),目标是收集4颗宝石并切换4个开关。
我的第一次尝试是:
拼图已经解决,但告诉我:
但您使用了11个命令!尝试定义自己的功能[...]您不需要使用尽可能多的命令
不幸的是,我无法通过turnRight()
关键字找出如何使用较少的命令。可能吗? (note that I already figured out that using loops is cheating)
此外,是否有地方可以讨论Playgrounds的难题?
答案 0 :(得分:2)
我不了解Playground的指令计数器。它没有抱怨指令计数:
func bounce() {
moveForward()
collectGem()
moveForward()
toggleSwitch()
moveForward()
moveForward()
}
func btl() {
bounce()
turnLeft()
}
func b() {
btl()
btl()
}
b()
b()
也许在Playground中,函数调用开销是负面的。停止展开这些循环!
答案 1 :(得分:1)
我想知道递归是否有效。你说允许额外的动作,所以我假设当你完成所有事情时,它会自动停止。因此,像这样的东西可以工作(假设它允许你这样做):
func name() {
moveForward()
collectGem()
moveForward()
toggleSwitch()
moveForward()
moveForward()
turnLeft()
name() //recursive call
}
name()
删除两行代码!这让你十岁以下:D
答案 2 :(得分:1)
另一种方法仍然只能降至11,但可能会为前进的方向提供线索:
func twomoves(){
moveForward()
collectGem()
moveForward()
toggleSwitch()
}
func grabngo(){
twomoves()
twomoves()
turnLeft()
}
grabngo()
grabngo()
grabngo()
grabngo()
但是由于操场允许进入循环,为什么这是作弊?
答案 3 :(得分:1)
11个电话确实足够了!
(但代码的函数名称和结构应该是某种风格)
如果您要接受 Thomas L Holaday的答案并重命名这些功能(例如,而不是bounce()
,请将{{1} }},解决方案不再验证!与clear()
函数的名称相同!
在修改代码和函数名称之后,我发现可以用11次调用对它进行编码,这与原始函数几乎相同,并通过验证!
b()
Here is the screen of my solution
这里的问题似乎不是解决方案(这是正确的!)但是验证器检查函数命名和代码结构的方式不正确(用func bounce() {
moveForward()
collectGem()
moveForward()
toggleSwitch()
moveForward()
moveForward()
turnLeft()
}
func b() {
bounce()
bounce()
}
b()
b()
进行的小优化函数必须存在,以及"正确的函数名称。)
答案 4 :(得分:0)
所以这会给你:
惊人! 太可惜了!你用一个循环来解决这个难题。您已成为编码向导!下一页
func gfs() {
moveForward()
collectGem()
moveForward()
toggleSwitch()
moveForward()
moveForward()
turnLeft()
}
for _ 1...4 {
gfs()
}
答案 5 :(得分:0)
我也有11条线,并且越来越愤怒。事实证明它不喜欢我指定的名称(有趣的是GrabNgo)。 我把它改为“d”,然后运行我的d()四次,它就有效了。