Questions tagged «sliding-puzzle»

滑动拼图是指将平板碎片四处移动以实现目标配置的组合拼图。例如15游戏或2048。

9
创建一个简单的2048游戏克隆
2048是一款非常有趣且令人上瘾的游戏,其目标是创建一个上面带有2048的图块。 这是游戏的简短说明: 按下箭头键将沿该方向滑动舞台上的所有块。例如,如果x代表一个块,那么在这种情况下您按下了向上箭头: ...x .x.. ..x. xx.. 然后董事会将成为 xxxx .x.. .... .... 此外,从处开始编号2。如果两个相同编号的块一起移动,它们将合并为下一个编号。例如,在此板上按“向上”: .2.. ..22 .2.. .... 将创建以下内容: .422 .... .... .... 然后,在按“向右”之后,它将变为..44,因此再次按向右将创建一个“ 8”块,依此类推。 每转一圈,都会在随机的正方形上创建一个新的“ 2”块。(实际上,它不一定总是 “ 2”,但为简单起见,让我们保持该水平。)如果没有可能的移动(即,棋盘已满,并且您无法合并任何东西),那么游戏将会失败,如果创建一个2048区块,您赢了! 您的挑战是重新制作这个打高尔夫球的游戏! 对于边缘情况,例如在此板上按“向右”: .... .222 .... .... 您必须合并最靠近按下箭头键边缘的图块。例如,这将变为..24,因为第二和第三个“ 2”最接近右边缘。 如果玩家按下无效的举动(例如板上的“向上” 2.2. / .... / .... / ....),则您必须忽略该举动。 可以通过任何方式接受移动,例如单击,箭头键ULRD等。 这些图块都必须具有相同的形状-“ 1024”图块的大小应与“ 2”图块的大小相同。 磁贴必须以某种方式分开。例如,|1024| 2|1024|1024|是行的有效示例(假设图块是正方形),而1024 ...

22
这是一个很好的2048板吗?
这是我的第一个问题,因此在评论中提出的任何建议将不胜感激!谢谢 ;) 介绍 2048游戏的一种非常普遍的策略是从不失败。这会将所有大数字放在顶部,将较低的数字放在底部。因此,如果正确应用此策略,则您的开发板将始终符合以下模式: 要检查的模式/您的任务 如果董事会可以这样描述,则您的提交应为完整程序或返回真实值的函数:在董事会的每一列中,第一个数字应为该列的最高值,第二个数字应为较小的值等于或等于第一个数字,以此类推。好的2048板定义为最高编号都位于顶部的板。这是code-golf,所以每种语言的最短Code(以字节为单位)获胜。 输入输出 可以以任何适当的方式获取输入,例如4个数组的数组,每个数组包含4个数字,或者16个数组。总的来说,它将始终是16个数字,代表4x4板 。输出应为真实值,输入应为“ 2048良好板”,否则为假值。 例子 真相: |-------------------| | 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难题所需的一系列动作。获胜者是能够以最少的总动作解决五个测试案例(如下)的程序。生成的解决方案并不一定是完美的解决方案,它只必须比竞争对手更好。对于每个单独的测试用例,在合理的机器上,程序的时间不应超过十秒钟。 您的程序必须能够解决所有可解决的难题,我只是将这五个测试用例用作评分。 您的程序将以2D数组的形式接收未解决的15拼图作为输入。可以根据使用的语言来格式化2D数组,如果该语言没有2D数组,则可以对其进行更改。第一个子数组的第一个元素将是左上角的数字,第一个子数组的最后一个元素将是右上角的数字。一种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 3: ...

7
解释> <>(鱼)
虽然&gt; &lt;&gt;不是流行的语言,但它可能对打高尔夫球很有用,并且已在本网站上使用。它受到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,一个小时后的最佳得分将起作用(请参阅下面的得分)。 设定: 转到2048并运行: a = new GameManager(4, KeyboardInputManager, HTMLActuator, LocalStorageManager); a 是控制游戏的对象。 规则: 设置完成后,您可以从控制台运行555字节的JavaScript,以控制游戏。您可以在此处找到游戏的源代码(包括注释)。 它只能做用户可能做的事情: a.move(n) 在四个方向中的任何一个上触发按键动作。 0:向上,1:向右,2:向下,3:向左 a.restart() 重新启动游戏。游戏中间允许重新启动。 有关游戏状态的信息可以在中找到a.grid.cells。该信息是只读的 允许挂钩任何功能,不允许以任何方式更改其行为(或更改任何其他数据) 每250ms只允许移动一次 例 只是一个非常简单的示例。不带注释并输入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磁贴。超越这一点是不可能的。 就像此clone一样,您可以轻松选择任务,因为它们可以选择生成瓦片的位置及其值。 您必须编写一个程序或函数,接受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 Bot Challenge的副本。我要强调,这个问题不同于那个问题,并且要求答案与那个问题的思考方式有所不同。2048 Bot Challenge要求用户创建一个机器人,该机器人将运行一个小时,其中最高的分数是用户的分数。此外,它的限制为555个字节。我的挑战很少频繁地运行代码,只有3次。您的得分是通过使用这三倍的平均得分,再除以您打高尔夫球的字符长度得出的。我的问题是鼓励参赛作品“更聪明”,而不是试图通过蛮力获得最高分。 -- 编辑:将get方法更改为getTile,以避免与JS关键字get发生冲突。此外,增加了高分部分。 最近,我创建了一个站点,该站点允许使用JavaScript控制流行的游戏2048。我的网站在这里链接: http://thatcoolidea.com/2048 怎么样: Ace编辑器位于面板上方。您将代码放入其中,该代码每250毫秒运行一次,或每秒运行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 ...

1
使用最少的字节来解决2048的确定性版本
编写一个程序,该程序将生成到游戏2048的确定性变式的获胜顺序。该顺序应为数字字符串0-3的形式,其中0:向上,1:向右,2:向下,3:剩下。例如,字符串“ 1132”表示右右左下。获胜的程序是到2048的最短源代码! 确定性2048的规则:游戏在4x4网格上进行游戏,该网格最初包含1个图块,位于左上角。每个移动都由命令“左”,“右”,“上”或“下”组成。左命令将网格上的所有图块向左滑动,然后像从左开始的图块一样进行合并和求和。同样,右命令将图块向右滑动,然后从右开始进行组合。 每个图块一次只能加入一个组合。 移动后,将在左侧的第一列中创建一个具有可用空间的新2磁贴,在该列的顶部中的第一个可用空间中将创建一个新的2磁贴。 例如,序列“右右左下”会导致状态 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艺术进行长除法。使用您选择的输入格式,输入由两个整数组成:分子和分母。 例子: 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 规则: 编程语言的除法运算符的用途是允许的。 也允许使用大整数支持。 为了保持一致: 如果商为零,则在跳水板的末端打印一个零。 如果余数为零,请不要打印。 不要在任何数字上打印前导零。 末尾多余的换行符和右边的尾随空格是允许的。 字符最少的解决方案获胜。 限制: 0 &lt;=分子&lt;= 10 72 - 1 1 &lt;=分母&lt;= 9999999 ...

2
我如何在生活中获得更多的Klotski?
我真的很喜欢滑动拼图,但是最近,我没有时间去做。因此,我需要一个程序来解决滑动砖块难题,特别是Klotski难题。 您的输入将采用以下格式: ####### #001gg# ##.222# .###### 其中#代表墙壁,.代表开放区域,g代表目标,相邻数字代表不同的方块。您可以假设: 不会超过10个街区 不会有两个号码相同的方块 所有街区将被围墙包围 网格是矩形 该0块是大到足以覆盖所有的目标方格。 有一个有效的解决方案 您需要返回一系列移动步骤,以放置0方块,使其覆盖所有目标方格。方块不能穿过墙壁或其他方块。对于上述难题,适当的顺序是 2L,1R,1R,1D,0R,0R,0R while代表将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拼图 / 滑动拼图(在法语中也称为taquin)的未还原图像版本。 细节: 给定一个输入,该输入包括: 一个图像, 的整数n, 的其它整数r, 您的程序,函数或任何其他适合的东西,都必须输出与输入相同的图像(即,相同的大小和格式),但是必须经过以下过程: 将图像分成n²矩形, 随机删除其中一个矩形, 从受点(2.)影响的线/列中移动任意数量的连续矩形,以便填充创建的孔,并在该线/列中生成另一个。0如果毛坯在角落或边缘,则此数字可以是。 重复(3.)r次。 说明: 如果您在第(3.)步中从行中移动了矩形,则必须在下一个重复中从列中移动矩形, 如果您在一行中从左到右移动矩形,则必须在下一行中将它们从右到左移动,这与列的上下到上下以及从下到上相同, 您可能会假设n会选择该选项,因此它将划分图片两边的长度。 最后一点: 动画.gif演示整个过程非常受欢迎。 我建议使用下面的图片(是1024x768),将n=16和r=100用作模型,您可以使用任何其他图片(只要它是相关的并且符合SE的规则)。 请注意,适用标准漏洞政策。 这是代码高尔夫球,因此较短的提交将获胜! 由于请求了一个示例,因此这里有一个“手工制作”的示例,其中包含n=4和r=1 步骤1和2 步骤3:逐行,向左2个矩形

5
解决旋转难题
在一些旧的诺基亚手机上,有一个名为“旋转”的十五个谜题的变体。在此变体中,您不必一次滑动一个图块,而是在一个方向上一次旋转了四个图块。 在这个游戏中,您将从这样的棋盘开始: 4 9 2 3 5 7 8 1 6 通过顺时针旋转左下块两次,并顺时针旋转左上块,您将得到以下信息: 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
解决8个难题
8拼图是15Puzzle(或滑动拼图)的较小变体。您有一个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;- goal ...

1
编写代码滑动拼图!
最可识别的滑动拼图是十五个拼图。它具有4 x 4网格,15个图块和一个空白网格空间。磁贴只能移动到空白区域,并且必须始终与网格对齐。 让我们定义一个广义的滑动拼图,它是一个二维的W宽度,高为H个高网格(W,H均为正整数),其中包含一些相同的未标记图块(在0到W × H之间),对齐到网格,排列为任何方式(不重叠),用空的网格空间填充其余区域。 例如,如果W和H为3,并且图块为T,并且空白处E为许多可能的侧板拼图布置之一,则 TTT TET EET 对于这些难题,有4种可能的举动:将所有事物推高,将所有事物推低,将所有事物推向左侧或将所有事物推向正确。沿某个方向“平移”会使所有图块尽可能沿该方向移动,直到它们碰到另一个图块或网格边界为止。有时推不会改变网格的布局, 如果将示例网格向右推,则结果为 TTT ETT EET 向左推的结果是 TTT TTE TEE 推倒结果是 EET TET TTT (请注意,最左边T的都已移动) 在这种情况下,推挤不会改变网格布局。 请注意,由于图块是无法区分的,因此这些难题没有“已解决”状态。还要注意,难题可能始于一旦做出推就不可能回到的布局(例如,在3 x 3网格中间的一个图块)。 挑战 仅使用可打印的ASCII编写两个矩形代码块,宽度均为M个字符,高度为N个字符(对于任何正整数M,N)。一个代码块将代表一个滑动拼图块,另一个代码块将代表一个空的网格空间。 将这两个代码块排列成W by H网格将创建一个代码表示的滑动拼图,该拼图可以保存为文本文件并作为常规程序运行。在运行时,此类程序应通过stdin提示用户输入1到4之间的数字;1表示向上,2表示向下,3表示左侧,4表示右侧。当用户键入他们的编号并按回车键时,程序将计算如何向该方向推其源代码图块,并将新的拼图布局保存到文件(新文件或同一文件)中,然后终止。 每次推后生成的新的滑动拼图代码文件都可以无限期地重复此过程。 例 假设我的图块代码块看起来像这样 // my // tile 我的空网格空间代码块看起来像这样 //empty //space (M = 7,N = 2,这当然不是实际代码) 这两个模块的任何有效的滑动拼图布置都应该以我使用的语言创建一个程序,该程序可以运行以使用户朝某个方向推。 示例网格的代码表示为: ...

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.