タグ付けされた質問 「sliding-puzzle」

スライディングパズルは、目標の構成を達成するために平らな部分を動かしていく組み合わせパズルです。たとえば、15ゲームまたは2048です。

9
シンプルな2048ゲームクローンを作成する
2048は非常に楽しくて中毒性のあるゲームで、目標は2048のタイルを作成することです。 ゲームの簡単な説明は次のとおりです。 矢印キーを押すと、ステージ内のすべてのブロックがその方向にスライドします。たとえばx、ブロックを表す場合、この場合は上矢印を押しました。 ...x .x.. ..x. xx.. するとボードは xxxx .x.. .... .... さらに、ブロックには、から始まる番号が付けられ2ます。同じ番号のブロックのうち2つを一緒に移動すると、次の番号にマージされます。たとえば、このボードで「上」を押すと: .2.. ..22 .2.. .... これを作成します: .422 .... .... .... そして、「右」を押すとになり..44、したがって再び右を押すと「8」ブロックが作成されます。 ターンごとに、新しい「2」ブロックがランダムなオープンスクエアに作成されます。(実際には常に「2」ではありませんが、簡単にするためにそれを維持しましょう。)可能な動きが残っていない場合(つまり、ボードがいっぱいで何もマージできない場合)、ゲームは失われ、 2048ブロックが作成され、勝ちます! あなたの課題は、このゲームをゴルフで再現することです! このボードで「右」を押すなどのエッジケースの場合: .... .222 .... .... 押した矢印キーの端に最も近いタイルを結合する必要があります。たとえば..24、2番目と3番目の「2」が右端に最も近いため、これはになります。 プレーヤーが無効な動き(のようなボードで「上」など)を押した場合、2.2. / .... / .... / ....その動きを無視する必要があります。 移動は、クリック、矢印キーなど、あらゆる方法で受け入れることができますULRD。 タイルはすべて同じ形状である必要があります。「1024」タイルは「2」タイルと同じサイズでなければなりません。 タイルは何らかの方法で分離する必要があります。たとえば|1024| 2|1024|1024|、行の有効な例です(タイルが正方形であると仮定)、そうで1024 210241024はありません。 プレイヤーが2048タイルを作成する場合は「勝ちます」、有効な動きが残っていない場合は「失う」を出力する必要があります。 これはcode-golfなので、バイト単位の最短コードが勝ちます!

22
それは良い2048ボードですか?
これがここでの私の最初の質問ですので、コメントの提案は大歓迎です!ありがとう;) 前書き 以下のための1つの非常に一般的な戦略2048のゲームはありません下にスワイプ今までにありません。これにより、すべての大きな数字が上部に、下部の数字が下部に配置されます。したがって、この戦略を正しく適用すると、ボードは常に次のパターンに一致します。 チェックするパターン/あなたのタスク 提出は、完全なプログラムか、ボードが次のように記述できる場合に真実の値を返す関数のいずれかである必要があります。最初の数字以下など。適切な2048ボードは、一番上の数字が一番上にあるボードとして定義されます。これはcode-golfであるため、言語ごとの最短コード(バイト単位)が優先されます。 I / O 入力は、それぞれが4つの数字を含む4つの配列の配列、または16の数字の配列など、任意の適切な方法で取得できます。合計で、4x4ボードを表す合計16の数値に なります。出力は入力の真の値である必要があり、それ以外の場合は偽の値です。 例 真実: |-------------------| | 16 | | 64 | 8 | |-------------------| | 8 | | 32 | 8 | |-------------------| | 4 | | 32 | 2 | |-------------------| | 2 | | | | |-------------------| |-------------------| | 16 …

3
15パズルを解く(タイルスライドパズル)
15パズルは、4x4グリッド上で15個のタイルをスライドさせる有名なパズルです。ランダムな構成から始めて、目標はタイルを正しい順序に並べることです。解決された15パズルの例を次に示します。 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 パズルの各動きは、上/下/左/右の形式です。「下へ」の移動は、空のスポットの上にあるタイルを下にスライドさせることで構成されます。「右」の動きは、タイルを右にスライドさせて空の場所に入れることです。下と右に移動した後のボードの外観は次のとおりです。 01 02 03 04 05 06 07 08 09 10 11 13 14 15 12 このチャレンジの目標は、15パズルを解くために必要な一連の動きを出力できるプログラムを書くことです。勝者は、5つのテストケース(以下)を最小の合計移動で解決するプログラムです。生成されたソリューションは完全なソリューションである必要はなく、競合他社よりも優れている必要があります。個々のテストケースごとに、プログラムは適切なマシンで10秒以上かかることはありません。 あなたのプログラムは解決可能なパズルを解くことができなければなりません、私はこれらの5つのテストケースを採点として使用しています。 プログラムは、未解決の15パズルを2D配列の形式で入力として受け取ります。2D配列は、使用する言語に従ってフォーマットするか、言語に2D配列がない場合は変更できます。最初のサブ配列の最初の要素は左上の数字になり、最初のサブ配列の最後の要素は右上にある数字になります。A 0は空のスペースになります。 出力として、プログラムは移動のリストを実行する必要がある順序で印刷する必要があります。結果の使いやすさを高めるために、各ステップに番号を付ける必要があります。 編集:コメントに基づいて、出力をDown / Up / etcの形式または移動するピースの座標の形式にすることができます。これはコードゴルフではないので、最も重要な部分はパズルを解くことです。 他の一般的な規則には、外部ソースの使用などが含まれないものがあります。 テストケース1 ([5,1,7,3],[9,2,11,4],[13,6,15,8],[0,10,14,12]) 出力例: 1: Down 2: Down …

7
解釈> <>(魚)
&gt; &lt;&gt;は人気のある言語ではありませんが、ゴルフに適している可能性があり、このWebサイトで使用されています。Befungeに触発され、その指示にいくつかの類似点があります。 必要なコマンド: &gt; &lt; ^ v 指示ポインターの方向を変更します(右、左、上、下) / \ | _ # ミラー。ポインターは、すでに持っている方向に応じて方向を変えます。 x ランダムな方向。 + - * , % それぞれ、加算、減算、乗算、除算、モジュロ。AとBをスタックからポップし、B演算子Aをプッシュします。0で除算するとエラーが発生します。 0-9 a-f 対応する値をスタックにプッシュします。a = 10、...、f = 15 = スタックからAとBをポップし、B = Aの場合は1をプッシュし、そうでない場合は0をプッシュします。 ) より大きい。AとBをスタックからポップし、B &lt;A ( より小さい場合は1をプッシュします。AとBをスタックからポップし、B&gt; Aの場合は1をプッシュし ' " ます。文字列解析を有効にします。文字列解析は、閉じ引用符が見つかるまで、見つかったすべての文字をスタックにプッシュします。 ! 次の命令をスキップします。 ? スタックのトップがゼロの場合、またはスタックが空の場合、次の命令をスキップします。(注:これはスタックから何もポップしません!)スタック : の一番上の値を複製します。 ~ スタックから一番上の値を削除します。 …

5
2048ボットチャレンジ
私たちはされているクローニング、2048年の分析 2048が、なぜ我々はまだそれをプレイしていませんか?555バイトのJavaScriptスニペットを作成して2048を自動的に再生します。1時間後の最高スコアがカウントされます(以下のスコアリングを参照)。 セットアップ: 後藤2048と実行: a = new GameManager(4, KeyboardInputManager, HTMLActuator, LocalStorageManager); a ゲームを制御するオブジェクトです。 ルール: セットアップ後、コンソールから555バイトのjavascriptを実行してゲームを制御できます。ゲームのソースコードはここにあります(コメントを含む)。 ユーザーに可能なことだけを行う場合があります。 a.move(n) 4つの方向のいずれかでキーアクションをトリガーします。 0:上、1:右、2:下、3:左 a.restart() ゲームを再起動します。再起動は、ゲームの途中で許可されています。 ゲームの状態に関する情報はにありa.grid.cellsます。この情報は読み取り専用です いずれかの関数へのフックは許可されますが、その動作を変更することはできません(または他のデータを変更します) 移動は250msごとに1回のみ許可されます 例 開始するのは非常に簡単な例です。コメントなしで181バイトを入力します。 //bind into new tile function and change m(ove) variable when a tile was moved b = a.addRandomTile.bind(a); m = !1; a.addRandomTile = function() { …

4
実用的な数値を計算する
定義 正の整数nは、すべてのより小さい正の整数がの別個の約数の合計として表される場合に限り、実用的な数値(OEISシーケンスA005153)ですn。 たとえば18、実用的な数値です。除数は1、2、3、6、9、18であり、18より小さい他の正の整数は次のように形成できます。 4 = 1 + 3 5 = 2 + 3 7 = 1 + 6 8 = 2 + 6 10 = 1 + 9 11 = 2 + 9 12 = 3 + 9 = 1 + 2 + 9 = 1 + 2 + 3 …
18 code-golf  sequence  number-theory  code-golf  code-challenge  sorting  c  code-golf  restricted-source  code-golf  natural-language  code-golf  tree-traversal  file-system  popularity-contest  pi  polyglot  code-golf  game  sliding-puzzle  code-golf  game  minesweeper  code-challenge  ascii-art  code-challenge  popularity-contest  graphical-output  code-challenge  popularity-contest  hello-world  underhanded  obfuscation  code-golf  code-golf  function  code-golf  code-golf  code-golf  popularity-contest  rosetta-stone  code-golf  primes  code-golf  restricted-source  popularity-contest  number  sequence  code-golf  restricted-source  popularity-contest  graphical-output  code-golf  popularity-contest  code-golf  primes  code-golf  game  code-golf  math  popularity-contest  popularity-contest  code-generation  popularity-contest  code-bowling  code-golf  popularity-contest  underhanded  code-golf  metagolf 

1
2048の完璧なゲームをプレイする
あなたの仕事は、数学的に完璧な2048のゲームをシミュレートすることです。アイデアは、2048のゲームがどこまで進むことができるかの理論的な上限を見つけ、そこに到達する方法を見つけることです。 これがどのように見えるかを知るには、この2x2クローンで遊んで68ポイントを獲得してみてください。そうすると、2、4、8、および16タイルになります。そのポイントを超えて進むことは不可能です。 このクローンのように、タイルが生成される場所とその値を選択できるため、タスクが簡単になります。 入力として2048ボードを受け入れ、生成されたタイルを含むボードとタイルを折りたたんだ後のボードを出力するプログラムまたは関数を作成する必要があります。例えば: Input: ------- 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 8 Output: ------- 0 0 0 0 0 0 0 0 0 0 0 0 0 4 8 8 0 0 0 0 0 0 0 0 0 0 …

4
既存のフレームワークを使用して2048 AIをプログラムする
編集:最近、私の質問は2048ボットチャレンジの複製として提案されました。この質問はその質問とは異なり、回答をその質問とは異なる方法で考える必要があることを強調したいと思います。2048ボットチャレンジは、ユーザーにボットを作成するように要求し、ボットを1時間実行します。最高スコアはユーザーのスコアです。さらに、555バイトの制限がありました。私のチャレンジでは、コードの実行頻度ははるかに低く、3回だけです。スコアは、これらの3回の平均スコアを使用して、ゴルフコードの文字長で割ることによって計算されます。私の質問は、エントリが「スマート」であり、総当たりで最高のスコアを取得しようとしないことを奨励しています。 - 編集:getメソッドがgetTileに変更され、JSキーワードgetとの競合を回避しました。さらに、高得点セクションが追加されました。 最近、JavaScriptを使用して人気のあるゲーム2048を制御できるサイトを作成しました。私のサイトはここにリンクされています: http://thatcoolidea.com/2048 どうやって: Ace Editorはボードの上にあります。コードを配置します。コードは250ミリ秒ごとに1回、または1秒間に4回実行されます。これはサイクルと呼ばれます。 ボードを制御するには、次の方法を使用します。矢印キーは使用できません。 up(); //move up down(); //move down left(); //move left right(); //move right move(integer); //integer is a direction. 0:up,1:right,2:down,3:left getTile(y,x); //gets the value of the tile in position y,x on the board. See diagram 便宜上、次の変数が定義されています。 eother //boolean, alternates every cycle frozen //integer, …

1
最小バイトを使用して2048の確定的バージョンを解きます
ゲーム2048の決定論的なバリアントへの移動の勝利シーケンスを生成するプログラムを記述します。シーケンスは、0〜3の数字のストリングの形式で、0:上、1:右、2:下、3である必要があります。左。たとえば、文字列「1132」は、右下左下を意味します。受賞プログラムは、2048に達する最短のソースコードです! 決定論的2048のルール:ゲームは、左上隅に最初に1タイルを含む4x4グリッドでプレイされます。各移動は、コマンド「左」、「右」、「上」または「下」で構成されます。左のコマンドは、グリッド上のすべてのタイルを左にスライドし、左から始まるタイルのように結合して合計します。同様に、コマンドrightは、タイルを右にスライドし、右から開始して結合します。 各タイルは、移動ごとに1つの組み合わせにのみ参加できます。 移動後、左から1番目の列に使用可能なスペースがある新しい2タイルが作成され、その列の上部から最初に使用可能なスペースが作成されます。 たとえば、「right right left down」というシーケンスは状態につながります 2___ ____ ____ ____ 2__2 ____ ____ ____ 2__4 ____ ____ ____ 24__ 2___ ____ ____ 2___ ____ ____ 44__ 行_ 2 2 2に適用されるコマンド権は_ _ 2 4になります行2 2 2 2に適用されるコマンド権は_ _ 4 4になります http://jmfork.github.io/2048/に触発されたこの質問

4
ASCIIアートで長い分割を視覚化する
ASCIIアートで長い除算を視覚化するプログラムを作成します。入力は、選択した入力形式を使用して、分子と分母の2つの整数で構成されます。 例: 1234÷56: 22 ---- 56|1234 112 --- 114 112 --- 2 1002012÷12: 83501 ------- 12|1002012 96 --- 42 36 -- 60 60 -- 12 12 -- 0÷35 0 - 35|0 ルール: プログラミング言語の除算演算子の使用は許可されています。 大きな整数のサポートの使用も許可されています。 一貫性のために: 商がゼロの場合、ダイビングボードの最後にゼロを1つ出力します。 余りがゼロの場合、印刷しないでください。 数字に先行ゼロを印刷しないでください。 末尾の余分な改行と右側の末尾のスペースは許可されます。 最小の文字数のソリューションが勝ちです。 制限: 0 &lt;=分子&lt;= 10 72 - 1 1 &lt;=分母&lt;= 9999999 …

2
どうすれば人生でもっと多くのKlotskiを獲得できますか?
私はタイルパズルをスライドさせるのが大好きですが、最近は時間がありませんでした。したがって、スライディングタイルパズル、特にKlotskiパズルを修正するプログラムが必要です。 入力は次の形式になります。 ####### #001gg# ##.222# .###### ここで、#は壁、.オープンエリア、g目標、隣接する数字は異なるブロックを表します。あなたはそれを仮定することができます: 10ブロックを超えることはありません 同じ番号のブロックは2つありません すべてのブロックは壁で囲まれます グリッドは長方形です 0ブロックは、目標の正方形のすべてをカバーするために十分な大きさです。 有効な解決策があります 0すべてのゴールスクエアをカバーするようにブロックを配置する一連の動きを返す必要があります。ブロックは壁や他のブロックを通過できません。上記のパズルの場合、適切なシーケンスは 2L,1R,1R,1D,0R,0R,0R 2ブロックを左に1マス、1ブロックを右に2マス(ゴールの上)、次に1マス下に移動し、0ブロックを右に3マス移動することを表します。 実際には、上記の問題に対して機能するいくつかのシーケンスがあり、それらのいずれかを生成することは許容されます。ソリューションは最適でなければなりません。つまり、できるだけ少ないステップでパズルを解くシーケンスを作成する必要があります。 シーケンスは上記のように出力する必要がありますが、カンマ、改行、またはスペースで区切ることができます。末尾にコンマまたは空白があるかどうかは気にしません。妥当な時間で出力を生成する必要があります(以下のパズルでは最大120秒)。 パズル1: ..####.. ..#00#.. ###00### #......# #.1122.# ##3124## .#3344#. .##55##. ..#gg#.. ..####.. パズル2: ###### #1002# #1002# #3445# #3675# #8gg9# ###### パズル3: .####. ##1g## #22g3# #4255# #4.56# #.006# #7008# ###### パズル4: .####. ##00## #.00g# …

1
絵をスライドパズルにする
概要 このチャレンジの目標は、フランス語でタキンとも呼ばれる15パズル / スライディングパズルの元に戻すイメージバージョンを作成することです。 詳細: 以下で構成される入力が与えられた場合: 画像、 整数n、 他の整数r、 プログラム、関数、または適合するその他のものは、入力と同じイメージ(つまり、同じサイズと形式)を出力する必要がありますが、次のプロセスが行われました。 画像をn²長方形に分割し、 それらの長方形の1つをランダムに削除し、 ポイント(2.)の影響を受ける行/列からランダムな数の連続した長方形を移動して、作成された穴を埋め、この行/列に別の1つを生成します。この番号は0、ブランクがコーナーまたはエッジにある場合になります。 (3.)r回繰り返します。 明確化: 手順(3.)で行から長方形を移動した場合、次の繰り返しで列から長方形を移動する必要があります。 行ステップで長方形を左から右に移動した場合、次の行ステップで長方形を右から左に移動する必要があります。これは、列に関して上から下および下から上と同じです。 n画像の辺の長さを分割するように選択されると仮定できます。 最後のポイント: .gif全体のプロセスを示すアニメーションは大歓迎です。 私は(これは、次の画像を使用することを提案1024x768して、)n=16とr=100モデルとして、あなたは使用することができ、他の画像を(それはもちろん、SEの規則に関連するだと準拠限り)。 標準の抜け穴ポリシーが適用されることに注意してください。 これはコードゴルフなので、短い提出が勝ちます! 例がリクエストされたので、ここに「手で」作られたものn=4とr=1 ステップ1および2 ステップ3:行ごとに、左に2つの長方形

5
回転パズルを解く
一部の古いノキアの携帯電話では、回転と呼ばれる15のパズルのバリエーションがありました。このバリエーションでは、一度に1つのタイルをスライドさせるのではなく、一度に4つのタイルを一方向に回転させました。 このゲームでは、次のようなボードから始めます。 4 9 2 3 5 7 8 1 6 そして、左下のブロックを時計回りに2回、左上のブロックを時計回りに1回回転させると、次のようになります。 4 9 2 8 3 7 1 5 6 4 9 2 1 8 7 3 5 6 1 4 2 8 9 7 3 5 6 そして1タイルは、することになっての左上隅にあるであろう。最終的に、さらにいくつかの動きの後、あなたは次のようになります: 1 2 3 4 5 6 7 8 9 これが「元の」構成です。 …

1
コードSlidey Puzzleをコーディングしてください!
最も認識可能なスライディングパズルは15パズルです。4 x 4のグリッド、15のタイル、1つの空のグリッドスペースがあります。タイルは空のスペースにのみ移動でき、常にグリッドに沿っている必要があります。 レッツは、二次元のような一般スライディングパズル定義W、幅Hの高いグリッド(W、Hのいくつかの数含まれて正の整数の両方)同一のマークされていないタイル(0との間をW × Hそれらの)に配置されたグリッドにスナップ任意の方法(重複なし)、空のグリッドスペースが残りの領域を埋めます。 たとえば、WとHが3で、タイルがTあり、空のスペースがE多くのサイディングパズル配置の1つである場合、 TTT TET EET これらのパズルのために4つの可能な動きがあります。突き出すすべてのアップ、突き出すすべてのダウンは、突き出すすべてが左、または突き出すすべての権利。ある方向の「シェービング」により、すべてのタイルは、別のタイルまたはグリッド境界に到達するまで、可能な限りその方向に移動します。時々、突き出してもグリッドのレイアウトは変わらないことがありますが、 サンプルのグリッドが正しく押し込まれた場合、結果は TTT ETT EET 突き出した結果は TTT TTE TEE 結果を削った EET TET TTT (左端Tの両方が移動したことに注意してください) この場合、突き上げてもグリッドのレイアウトは変更されません。 タイルは区別できないため、これらのパズルには「解決済み」状態がないことに注意してください。また、パズルは、ひとたび押し出された後に戻ることが不可能なレイアウトで始まる場合があることに注意してください(3 x 3グリッドの中央にある1つのタイルなど)。 チャレンジ 印刷可能なASCIIのみを使用して、M文字幅とN文字高さ(正の整数M、Nの両方)の2つの長方形のコードブロックを書き込みます。1つのコードブロックはスライドパズルのタイルを表し、もう1つのコードブロックは空のグリッドスペースを表します。 これらの2つのコードブロックをW by Hグリッドに配置すると、コードで表されたスライドパズルが作成され、テキストファイルとして保存して通常のプログラムとして実行できます。これらの種類のプログラムを実行すると、stdinを介して1から4までの数字をユーザーに要求するはずです。1は上、2は下、左は3、右は4です。ユーザーが番号を入力してEnterキーを押すと、プログラムはソースコードタイルをその方向に押し出す方法を計算し、新しいパズルレイアウトをファイル(新しいファイルまたは同じファイル)に保存してから終了します。 このプロセスは、突き出すたびに生成される新しいスライドパズルコードファイルで無期限に繰り返すことができます。 例 タイルコードブ​​ロックが次のようになっているとします // my // tile 空のグリッドスペースコードブロックは次のようになります //empty //space (M = 7、N = 2、これはもちろん実際のコードではありません) これらの2つのブロックの有効なスライドパズルの配置は、ユーザーが何らかの方向に押し出すために実行できる、使用している言語でプログラムを作成する必要があります。 サンプルグリッドのコード表現は次のとおりです。 …

1
8パズルを解く
8パズルは、15Puzzle(またはSliding puzzle)の小さなバリエーションです。3x3ランダムな順序で配置された0〜8の数字(0は空白のタイルを示します)で埋められたグリッドがあります。あなたのタスクは、3x3グリッドを入力し、目標状態に到達するための最短の解決策(最小の移動)を表示することです。出力の最初の状態を含む各ボード状態を表示します。 最適なソリューションが複数ある場合がありますが、印刷する必要があります。 入力:(小さな例) 1 2 0 4 5 3 7 8 6 出力: 2 &lt;- denotes minimum number of moves required 1 2 0 4 5 3 7 8 6 1 2 3 4 5 0 7 8 6 1 2 3 4 5 6 7 8 0 &lt;- …

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