swift Playground“收集,切换,重复”在10个基本命令或更少?

zkure5ic  于 2023-01-25  发布在  Swift
关注(0)|答案(7)|浏览(217)

iPad Playgrounds app,极早期挑战:你正在学习编程,你对变量、循环等一无所知。你唯一知道的关键字是func。游戏建议你第一次构建自己的函数。

基本上,您只需要使用屏幕上的内容:collectGem()moveForward()name()toggleSwitch()turnLeft()turnRight()。您不会意外跌倒(因此额外的移动是可以接受的),目标是收集4个宝石和切换4个开关。
我的第一个尝试是:

谜题解开了,却告诉我:

  • 但您使用了11个命令!尝试定义您自己的函数[...]您不需要使用那么多命令 *

不幸的是,我不知道如何只使用func关键字来使用更少的命令。有可能吗?(note that I already figured out that using loops is cheating
还有,有没有地方可以讨论Playground的谜题?

tag5nh1u

tag5nh1u1#

我不明白Playground的指令计数器。它没有抱怨指令计数:

func bounce() {
  moveForward()
  collectGem()
  moveForward()
  toggleSwitch()
  moveForward()
  moveForward()
}

func btl() {
  bounce()
  turnLeft()
}

func b() {
  btl()
  btl()
}

b()
b()

也许在Playground中,函数调用开销是负的。停止展开那些循环!

ar5n3qh5

ar5n3qh52#

11通电话就够了!

  • (但函数名和代码结构应具有某种风格)*

如果你接受 * 托马斯L Holaday * 的答案并重命名函数(例如,把bounce()改为clear()),解就不再有效了!b()函数的名称也是如此!
在修改了代码和函数名之后,我发现可以用11个调用来编写它,这和原来的几乎一样,并且通过了验证!

func bounce() {
  moveForward()
  collectGem()
  moveForward()
  toggleSwitch()
  moveForward()
  moveForward()
  turnLeft()
}

func b() {
  bounce()
  bounce()
}

b()
b()

Here is the screen of my solution
看起来这里的问题不在于解决方案(正确!),而在于验证程序检查函数命名和代码结构的方法不正确(必须存在b()函数的少量优化,以及“正确”的函数名)。

klr1opcd

klr1opcd3#

我想知道递归是否有效,你说过允许额外的移动,所以我假设当你完成所有的操作时,它会自动停止,因此,类似下面这样的东西可能有效(假设它允许你这样做):

func name() {
    moveForward()
    collectGem()
    moveForward()
    toggleSwitch()
    moveForward()
    moveForward()
    turnLeft()

    name() //recursive call
}

name()

这将删除两行代码!这将使您处于10:D以下

vuktfyat

vuktfyat4#

另一种方法仍然只降到11,但可能给予出前进的方向的线索:

func twomoves(){
    moveForward()
    collectGem()
    moveForward()
    toggleSwitch()
}

func grabngo(){
    twomoves()
    twomoves()
    turnLeft()
}

grabngo()
grabngo()
grabngo()
grabngo()

但既然Playground允许进入一个循环,为什么这是作弊呢?

ujv3wf0j

ujv3wf0j5#

因此,这将为您提供:
太神奇了!你用一个循环解决了这个难题。你已经成为了一个编码奇才!下一页

func gfs() { 
  moveForward()
  collectGem()
  moveForward()
  toggleSwitch()
  moveForward()
  moveForward()
  turnLeft()
}
for _ 1...4 {
  gfs()
}
rhfm7lfc

rhfm7lfc6#

我也有11行代码,我越来越生气,结果发现它不喜欢我给它指定的名字(有趣的是GrabNgo),我把它改成了“d”,然后运行了四次d(),它成功了。

lc8prwob

lc8prwob7#

这个回答让Playground很高兴:

func gemSwitch() {
  moveForward()
  collectGem()
  moveForward()
  toggleSwitch()
  moveForward()
}

func forwTurn() {
  moveForward()
  turnLeft()
}

gemSwitch()
turnLeft()
gemSwitch()
forwTurn()
gemSwitch()
turnLeft()
gemSwitch()

相关问题