`
simohayha
  • 浏览: 1395617 次
  • 性别: Icon_minigender_1
  • 来自: 火星
社区版块
存档分类
最新评论

解决Colored Cubes问题

    博客分类:
  • ruby
阅读更多

Engineering Puzzle

You have four colored cubes. Each side of each cube is a single color,
and there are four colors: blue (B), red (R), green (G) and yellow (Y)
Describing the six faces as front, back, left, right, top, bottom, the
cube colors are:

Front  Back Left Right Top Bottom
1    R     B    G    Y     B    Y
2    R     G    G    Y     B    B
3    Y     B    R    G     Y    R
4    Y     G    B    R     R    R


The objective is to find ways to stack the four cubes as a vertical
column so that each side of the column is showing all four colors.


#cube对象,其中包含一个Color属性,此属性是一个Struct对象,依次为所有边的颜色
class Cube
  attr_accessor :color

  def initialize(color)
    @color=color
    @rotation      = 0
    @times_rotated = 0
  end

#这里我们可以设置一个三维坐标,每个盒子的24中摆放方式就是通过这个3为坐标的不同轴的旋转得到。
  def rotate
    @times_rotated = @times_rotated + 1
    
    
    #y轴的旋转
    tmp_top = @color.Top
    @color.Top=@color.Left
    @color.Left=@color.Bottom
    @color.Bottom=@color.Right
    @color.Right=tmp_top
#当为4的倍数时意味着已经回到开始的位置,因此需要变换坐标轴
    if @times_rotated % 4 == 0
      tmp_front = @color.Front
#当为2的倍数时意味着又一次要回到刚才已经变换过得位置,因此未免重复,需要再次变换坐标轴
      if @rotation % 2 == 0
        #x轴的旋转
        @color.Front=@color.Bottom
        @color.Bottom=@color.Back
        @color.Back=@color.Top
        @color.Top=tmp_front
      else
        #z轴的旋转
        @color.Front=@color.Right
        @color.Right=@color.Back
        @color.Back=@color.Left
        @color.Left=tmp_front
      end

      @rotation = @rotation + 1
    end
  end
  

#打印出cube
  def show(name = "")
    puts name
    
    puts  <<-EOF 
    Front :   #{@color[:Front]}  Back  :   #{@color[:Back]}  Left   :   #{@color[:Left]}  Right :   #{@color[:Right]} Top   :   #{@color[:Top]} Bottom:  #{@color[:Bottom]}
    EOF
    
  end
  
end

#将4个cube组合为一个cube_box对象
class Cube_Box
  def initialize(cube_a, cube_b, cube_c, cube_d)
    @cube_a = cube_a
    @cube_b = cube_b
    @cube_c = cube_c
    @cube_d = cube_d
  end
  
  
  #判断是否符合条件
  def valid?
    side_valid?(:Front)&&side_valid?(:Back)&&side_valid?(:Left)&&side_valid?(:Right)
  end
  
  def side_valid? side
    (@cube_a.color[side] != @cube_b.color[side]) && (@cube_a.color[side] != @cube_c.color[side]) &&(@cube_a.color[side] != @cube_d.color[side])&& (@cube_b.color[side] != @cube_c.color[side])&& (@cube_b.color[side]!= @cube_d.color[side])&& (@cube_c.color[side] != @cube_d.color[side])
  end
  
  #打印出结果
  def show_box
    p "********************************************************************"
    @cube_a.show("cube_a")
    @cube_b.show("cube_b")
    @cube_c.show("cube_c")
    @cube_d.show("cube_d")
    p "********************************************************************"
  end
end

#构造每个cube的color对象
Color=Struct.new("Color",:Front,:Back,:Left,:Right,:Top,:Bottom)
color_a=Color.new("r","b","g","y","b","y")
color_b=Color.new("r","g","g","y","b","b")
color_c=Color.new("y","b","r","g","y","r")
color_d=Color.new("y","g","b","r","r","r")

#通过color对象构造cube对象
cube_a=Cube.new(color_a)
cube_b=Cube.new(color_b)
cube_c=Cube.new(color_c)
cube_d=Cube.new(color_d)

#符合结果的组合的数目
result_numbers=0

#由于每个cube有p3,3 * 4=24种因此这边要进行24^4次循环,找到合适的后调用show_box打印出来。
24.times do
  24.times do
    24.times do
      24.times do
        cube_box_temp=Cube_Box.new(cube_a,cube_b,cube_c,cube_d)
        if cube_box_temp.valid?
          cube_box_temp.show_box
          result_numbers = result_numbers + 1
        end
        cube_d.rotate
      end
      cube_c.rotate
     end
    cube_b.rotate
  end
  cube_a.rotate
end

puts "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
puts "Number of found results: " + result_numbers.to_s

分享到:
评论
1 楼 wushaoen 2008-10-29  
这个rb文件编译有问题.

相关推荐

    web_tree_dynamic_colored_field.zip

    《Odoo中的Web Tree Dynamic Colored Field:列表...结合Odoo的灵活性和强大的功能集,这个模块为各种业务场景提供了更为直观和高效的解决方案。在实际应用中,合理利用这一功能,无疑能提升企业的运营效率和决策质量。

    MACD_Colored_v103 - MetaTrader 4脚本.zip

    **MACD Colored v103 - MetaTrader 4 脚本详解** MACD(Moving Average Convergence Divergence)即移动平均收敛发散,是金融市场上广泛使用的趋势跟踪和动量指标。它通过比较两个不同周期的指数移动平均线(EMA)...

    Internal-Colored.shader

    各种unity shader教程需要的脚本资源。使用时在本地Asset目录下建立一个Hidden目录,然后把shader脚本放进去就可以了

    PyPI 官网下载 | colored-1.3.3.tar.gz

    《PyPI官网下载 | colored-1.3.3.tar.gz:深入解析Python色彩库colored》 在Python编程中,为了提升终端输出的可读性和美观性,有时我们需要为文本添加颜色。PyPI(Python Package Index)是Python开发者的重要资源...

    Constrained Local Graph Clustering by Colored Random Walk.pdf

    本地图聚类是大规模图分析中的一个重要问题,尤其是在社交网络、生物信息学以及推荐系统等领域...论文通过创造性地结合随机游走和颜色标记,为解决图聚类问题提供了一个新的视角,展示了该方法在实际应用中的巨大潜力。

    POJ2513-Colored Sticks【TrieTree+MergeSet+EulerPath】

    解题报告会详细解释如何利用Trie树进行颜色序列的存储和查询,如何使用并查集处理颜色集合的合并,以及如何构造或利用欧拉路径来解决问题的关键部分。AC代码则展示了具体实现这些思路的C++程序。 在实际解题过程中...

    Create a fancy colored form.

    9. **调试与测试**:完成设计后,开发者需要进行调试和测试,确保所有功能正常工作,没有界面错误或颜色显示问题。这可能涉及到单元测试、集成测试和用户验收测试。 10. **版本控制**:为了追踪和管理代码变更,...

    (Colored ICP算法)ICCV2017_Colored Point Cloud Registration Revisit

    这个问题通常通过迭代最近点(Iterative Closest Point, ICP)算法的变种来解决。ICP算法的工作原理是在找到对应点后,优化一个最小化对应点之间距离的目标函数。然而,当面对平滑表面时,ICP算法可能会出现不稳定,...

    poj 2978 Colored stones.md

    poj 2978 Colored stones.md

    OmoaPowerPoint[Colored].pptx

    OmoaPowerPoint[Colored].pptx

    colored-lights:通过基于面积的着色对Minecraft中的彩色照明做出折衷的解决方案

    尽管此解决方案不是完美的解决方案,但确实存在明显的问题,但它可以在不影响性能的情况下达到总体效果。 此mod在1.17的21w14a快照上完全在客户端上工作,并且需要Fabric Loader和AP​​I。 您可以在此处查看运行中...

    Colored Trails-开源

    它提供了一个灵活的环境,可以定制不同的任务场景,模拟各种复杂的决策问题,从而研究在这些情境下人的认知过程、机器的学习策略以及两者之间的信息交换。 开源软件的特性使得"Colored Trails"能够吸引全球的贡献者...

    Python库 | colored_logs-0.2-py3-none-any.whl

    《Python库colored_logs的深度探索》 在Python开发中,日志记录是不可或缺的一部分,它帮助开发者跟踪程序运行状态,排查错误。今天我们要探讨的是一个名为`colored_logs`的Python库,它为我们的日志输出带来了色彩...

    bm3d_wiener_colored_noise.mexw32

    bm3d_wiener_colored_noise.mexw32

    Android代码-colored-time-selector

    Colored Time Range Selector A smart colored time range selector. Users can select just free time with a handy colorful range selector. Screen Shots Features Select a time range between 2 hours ...

    matlab-codes_rayleigh_NOISE_generates_correlated_ColorEd_

    学习这些代码可以帮助用户更好地理解和操作噪声在实际问题中的应用,如信号检测、滤波器设计、通信系统性能评估等。通过实际操作,用户可以掌握如何在MATLAB环境中生成和分析不同类型的噪声,这对科研和工程实践具有...

    simulate_dual-colored_ball(仿真模拟双色源码_含用到的自制工具).zip

    总的来说,这个项目提供了一个完整的从生成随机号码到比较结果,再到可能的可视化展示的解决方案,是学习Python编程和理解随机过程的好实例。通过分析和运行这些源码,我们可以了解到如何在Python中实现随机数生成、...

Global site tag (gtag.js) - Google Analytics