相关疑难解决方法(0)

Scala 2.8 breakOut

在Scala 2.8中,有一个对象scala.collection.package.scala:

def breakOut[From, T, To](implicit b : CanBuildFrom[Nothing, T, To]) =
    new CanBuildFrom[From, T, To] {
        def apply(from: From) = b.apply() ; def apply() = b.apply()
 }
Run Code Online (Sandbox Code Playgroud)

我被告知这会导致:

> import scala.collection.breakOut
> val map : Map[Int,String] = List("London", "Paris").map(x => (x.length, x))(breakOut)

map: Map[Int,String] = Map(6 -> London, 5 -> Paris)
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?为什么breakOut被称为我的论据List

scala scala-2.8 scala-collections

223
推荐指数
4
解决办法
3万
查看次数

Code Golf:河内的塔楼

规则

河内之塔是一个难题,如果你不熟悉它,它的工作原理如下:

游戏区域包括3个杆和x个盘,每个盘下一个比前一个更大.可以将这些磁盘放在杆上,这些规则如下:

  • 一次只能移动一个磁盘,并且必须在另一个磁带的顶部移动
  • 磁盘必须从杆的顶部取出
  • 磁盘可以某处移动,如果在目标棒的最上面的磁盘是更大的一个比要被移动

最后-游戏领域STARTS是这样的:

  • 一个带有x个磁盘的杆,按顺序分类,使最大的位于底部,最小的位于顶部
  • 一根空杆
  • 一根空杆

游戏的目标是将原始"堆叠"的磁盘移动到另一根杆上,即 - 将所有磁盘放在另一根杆上,因此(再次)最大的是在底部,最小的在顶部

履行

您的目标是使用您选择的编程语言编写程序,接受输入(如下所述)并输出解决位置所需的步骤.

一如既往,尽量让它尽可能短.

输入

输入示例:

4-3,7-6-5,2-1
Run Code Online (Sandbox Code Playgroud)

输入是一个字符串,由3个部分组成,以逗号分隔.这些部件是3根杆上每个杆上的磁盘列表.它们也是分开的,这次是连字符( - ),每个子部分都是一个数字,数字越大,磁盘越大.

所以 - 对于上面的输入,这将是一个直观的表示:

       .               .               .
       |          =====|=====          |
    ===|===      ======|======        =|=
   ====|====    =======|=======      ==|==

     ROD 1           ROD 2           ROD 3
Run Code Online (Sandbox Code Playgroud)

产量

正如您在上面的表示中所看到的那样 - 输入的最左侧部分是第一个杆,中间是第二个杆,最后一个是第3个杆.

程序的输出应如下所示:

12,23,31,12,23,13
Run Code Online (Sandbox Code Playgroud)

一个数字列表,用逗号分隔,用于定义应该取出磁盘的磁带,以及磁盘应放在的磁带上.只有3个杆,因此只有6种可能的组合(因为盘必须移动到另一个杆,而不是相同的杆):

12
13
21
23
31
32
Run Code Online (Sandbox Code Playgroud)

笔记

输入不必描述处于"原始"状态的字段 - 它可以是中间求解的.

您的程序无法生成空输出.如果输入IS处于原始状态,只需将磁盘放入不同的杆.

输入可以有一个空杆,如下所示:

2-1,3,
,,1
4-3,,2-1
Run Code Online (Sandbox Code Playgroud)

如果输入的格式不是这样,则程序可能会产生未定义的行为.因此,如果输入无效(例如较小的磁盘,丢失的磁盘,无法解决),它就可以. …

code-golf towers-of-hanoi

17
推荐指数
1
解决办法
1997
查看次数