在Freecell游戏中,您需要负责从王牌到国王建造四个基础桩,并在这些布置中以不同的颜色向下建造。但是,一次只能构建一张卡,因此会为您提供四个“自由单元”,每个单元可以包含一张卡来帮助您移动整个序列。想法是,您可以根据需要在空闲单元中编织单个卡片,以帮助解决游戏。
您的任务是建立一个程序,以尽可能少的动作解决这些游戏。
您的程序将采用以下格式输入52张卡片作为输入:
2S 9H 10C 6H 4H 7S 2D QD KD QC 10S AC ...
它将按以下顺序在初始布局中处理:
01 02 03 04 05 06 07 08
09 10 11 12 13 14 15 16
17 18 19 20 21 22 23 24
25 26 27 28 29 30 31 32
33 34 35 36 37 38 39 40
41 42 43 44 45 46 47 48
49 50 51 52
并返回解决游戏的动作列表。每一步将采用以下格式:
- 一个表示桩号的数字(
1
至8
),或一个空单元格(A
至D
),表示源桩号。 - 另一个数字或字母,代表目标堆或空闲单元,或
F
表示该诉讼的基础。
输出将如下所示:
18 28 3A 8B 8C 85 B5 35 4F etc.
一旦将卡放入基础中,就无法将其删除。由于一次只移动一张卡,因此移动3张卡序列需要5步,而5张卡序列需要9步。
如果游戏无法解决,则您的程序应说明这一点。但是,您的程序必须能够解决任何可解决的游戏。
您的程序将根据原始Microsoft FreeCell程序中的32,768条交易进行判断。为了有效,您的程序必须成功解决除交易#11,982之外的所有交易,这是无法解决的。您的分数将是解决这32,767笔交易所需要采取的行动总数,其中较短的代码会成为平局。
具有以上规范要求的格式的所有文件的文件可在此处下载(5.00 MB文件):https : //github.com/joezeng/pcg-se-files/raw/master/freecell_decks