最も少ないフリーセルソルバーを構築する


54

Freecellのゲームでは、エースからキングまでスーツに合わせて4つの基礎杭を構築し、交互に色を変えながら下向きに構築します。ただし、一度に作成できるカードは1つだけなので、シーケンス全体を移動するのに役立つ1つのカードを含むことができる4つの「フリーセル」が与えられます。アイデアは、あなたがゲームを解決するのを助けるために必要に応じて、自由なセルに個々のカードを織り込むことです。

あなたの仕事は、可能な限り少ない動きでこれらのゲームを解決するプログラムを構築することです。

プログラムは、入力として次の形式の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

そして、ゲームを解決するための動きのリストを返します。各移動は次の形式になります。

  • パイル番号(18)を表す数値、またはソースパイルを表すフリーセル(Ato D)。
  • 宛先のパイルまたはフリーセルを表す別の数字または文字、またはFそのスーツの基礎用。

出力は次のようになります。

18 28 3A 8B 8C 85 B5 35 4F etc.

カードを土台に入れると、取り外すことはできません。一度に1枚のカードのみが移動するため、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


1
32,768ゲームを生成するために使用した乱数ジェネレーターを取得する必要があります。:S
ジョーZ.

3
ジェネレータはこちら:rosettacode.org/wiki/Deal_cards_for_FreeCell
nutki

1
それは良い点です。たとえば、同じ色と番号の2枚のカード(7Cと7Sなど)が両方ともフリーセルにある場合をどう対処しますか?その後、「C」から黒の8に移動すると、これらの2枚のカードのいずれかになります。
ジョーZ.

2
提出によってすべての解決可能な取引を解決する必要があるという制限を削除することで、おそらくいくつかの回答を得ることができます。次に、解決した取引の数に基づいてスコアを付け、次に最小の移動でスコアを付けます。
mbomb007

1
カードに0インデックスを付けることはできますか?
-tuskiomi

回答:


22

C 64,643バイト、スコア:〜650万

次のStack Snippet(Mego提供)は、すべてのコードを単一のスタンドアロンCファイルとして出力します。

ここから元のソースをダウンロードしてください。GCCを使用makeしてから、readmeのガイドラインを使用して実行します。

私のフォーマットは悪いです(すべての異なるファイルは1つのコードブロックにあります)。これはもっとゴルフすることができます(12kバイトtho)。どんな助けも大好きです!

一部のコードは私のものではありません。著作権のないソースから使用しました。ただし、チャレンジの範囲内に収まるように入出力メソッドを修正しました(Cで恐ろしい(5時間)ので、長いタスクです)。また、多くのコードを書き直し、すべてをデバッグする必要がありました。ゴム製のアヒルを助けてくれて(そして私のメモリ管理エラーを指摘してくれた)お父さんと、セグメンテーション違反とCについての怒りの怒りを扱ったTNBのみんなに感謝します。


外部ダウンロードを必要とせずに、これを使用して回答の長さの制限を回避し、回答内にすべてのコードを含めることができます。
メゴ

@Mego私はうんを意味しますが、それはいくつかのファイルにあります
クリストファー

複数のCファイルを1つのファイルに結合するのは簡単です。
メゴ

以下は、単一のファイルに結合されたコードを示すスタックスニペットです。
メゴ

@megoで編集できますか?モバイルで
クリストファー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.