游乐场"收集,切换,重复"在10个基本命令或更少?

时间:2017-01-18 14:32:19

标签: swift ipad

iPad Playgrounds app,非常早期的挑战:您正在学习编程,您对变量,循环等一无所知。您知道的唯一关键字是func。游戏建议你第一次建立自己的功能。

challenge start

基本上,您只会使用屏幕上的内容:collectGem()moveForward()name()toggleSwitch(),{{1} },turnLeft()。你不会意外跌落(所以额外的动作是可以接受的),目标是收集4颗宝石并切换4个开关。

我的第一次尝试是:

challenge end

拼图已经解决,但告诉我:

  

但您使用了11个命令!尝试定义自己的功能[...]您不需要使用尽可能多的命令

不幸的是,我无法通过turnRight()关键字找出如何使用较少的命令。可能吗? (note that I already figured out that using loops is cheating

此外,是否有地方可以讨论Playgrounds的难题?

6 个答案:

答案 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()四次,它就有效了。