csharp进阶练习题:求解长方体索玛【难度:2级】:

A 索马立方是一个组件,益智和在1933年通过海恩发明,包括七个块,通过切割一个小的(通常是木制)立方体成创建大小相等的较小的27米的立方体,然后胶合三到其中四个在一起以形成7 polycubes.然后,这些片可以被组合成一个立方体(见下例)或成各种其它形状.

目标

有240个解决方案,以形成索马立方.这个习题的目标是找到其中之一.但是,为了使事情更有趣一点,我们将推广任务.取而代之的是索玛立方体的,我们将与长方体(所以不一定立方体),这是分割成w Xh X’D’同等大小的立方体工作.然后,这些立方体粘在一起成N件.这些作品通常有不同的形状,但也可能是一些具有相同的形状.

对于复杂性和运行的缘故,片的转动应* 不* 以这种习题考虑.在您的解决方案的所有作品预计将有相同的方向,因为他们提供的.

你的任务是组装件放回等于该origial长方体的形状.显然不可能有条任何空间重叠.必须有在长方体,并没有从它伸出没有"洞".

如果存在多个解决方案,任何人都可以返回.

输入

你将与​​片的地图/字典接收尺寸W,H,期望的长方体作为输入的D,一起,与片作为键,并且其形状为值的名称.名字的目的是确定在解决方案中的碎片.形状都是布尔型的三维排列,它代表一个笛卡尔网格.每个布尔值定义素是否包含立方体.例如,从原有的立方体(灰色上图中)的三脚架形件可以被定义如下:

布尔[,,] pieceP = {
    {{,},{,}},
    {{,},{,}}
};

件将被修整,即它们的数组矩阵具有最小可能的尺寸.

如果考虑到所有提供作品,TRUE;值的数字的总和永远是’W H 目标长方体的D’,因为每一个真正代表小方块该长方体组成之一.

输出

你的函数的输出应与尺寸w,h和’D’串的三维数组矩阵.它代表了组装长方体.每个字符串应是件占据该体素的名称.饮片一定要保留其原来的形状和 - 如上所述 - 也是他们的方位.

如果没有解,null应当返还.

实施例

在这个例子中,我们使用2号和两片的立方体.

VAR =件新词典<字符串,布尔[,,]>(){
  { "P",新布尔[,,] {{{,},{,}},
                        {{,},{,}}}},
  { "Q",新布尔[,,] {{{,},{,}},
                        {{,},{,}}}},
};
VAR溶液=解答(2,2,2,);

在这种情况下,唯一有效的解决办法如下:

[,,]预期= {{{ "P", "Q"},{ "Q", "Q"}},
                        {{ "P", "P"},{ "P", "Q"}}};

编程目标:

using System;
using System.Collections.Generic;
using System.Linq;
public class SomaCuboidSolver
{
    public static string[, ,] Solve(int w, int h, int d, Dictionary, bool[, ,]> pieces)
    {
        return null;
    }
}


测试样例:

using System;
using System.Collections.Generic;
using NUnit.Framework;
[TestFixture]
public class SomaCuboidTest
{
    [Test]
    public void Simple2x2()
            { "P", new bool[, ,] { { {true,  false}, {false, false} },
                                   { {true,  true }, {true,  false} } } },
            { "Q", new bool[, ,] { { {false, true }, {true,  true } },
                                   { {false, false}, {false, true } } } },
        };
        string[, ,] expected = { { {"P", "Q"}, {"Q", "Q"} },
                                 { {"P", "P"}, {"P", "Q"} } };


最佳答案(多种解法):

点击查看答案

更多关联题目:

csharp进阶练习题:Burrows-Wheeler变换编码I.【难度:2级】–景越C# 经典编程题库,不同难度C# 练习题,适合自学C# 的新手进阶训练
csharp进阶练习题:获取Excel列标题!【难度:2级】–景越C# 经典编程题库,不同难度C# 练习题,适合自学C# 的新手进阶训练
csharp高级练习题:Codewars风格排名系统【难度:4级】–景越C# 经典编程题库,不同难度C# 练习题,适合自学C# 的新手进阶训练

免责申明

本博客所有编程题目及答案均收集自互联网,主要用于供网友学习参考,如有侵犯你的权益请联系管理员及时删除,谢谢
题目收集至https://www.codewars/
https://www.codewars/kata/solving-a-soma-cuboid

更多推荐

csharp进阶练习题:求解长方体索玛【难度:2级】--景越C#经典编程题库,不同难度C#练习题,适合自学C#的新手进阶训练