fork download
  1. #!ruby
  2.  
  3. =begin
  4. お題
  5. 立方体の2色の塗り分けの全種類を展開図で示せ
  6.  
  7. MAP
  8. 0
  9. 1 2 3 4
  10. 5
  11.  
  12. 予想
  13. 全白,全黒 各1通り 「2色の塗り分け」だから一色のみは除外
  14. 白5黒1,白1黒5 各1通り
  15. 白4黒2 2通り 隣り合う,向かい合う
  16. 白2黒4 2通り 隣り合う,向かい合う
  17. 白3黒3 ? (2通りらしい)
  18. =end
  19.  
  20. DefMap = [
  21. 0b000001,
  22. 0b000010,
  23. 0b000100,
  24. 0b001000,
  25. 0b010000,
  26. 0b100000
  27. ]
  28.  
  29. def rotZ( zahyo )
  30. zahyo = [ zahyo[0], zahyo[2], zahyo[3], zahyo[4], zahyo[1], zahyo[5] ]
  31. end
  32.  
  33. def rotX( zahyo )
  34. zahyo = [ zahyo[2], zahyo[1], zahyo[5], zahyo[3], zahyo[0], zahyo[4] ]
  35. end
  36.  
  37. def rotY( zahyo )
  38. zahyo = [ zahyo[1], zahyo[5], zahyo[2], zahyo[0], zahyo[4], zahyo[3] ]
  39. end
  40.  
  41. def turn( cvmap, num )
  42. mBit = 1
  43. wrk = 0
  44. 6.times{|idx|
  45. wrk |= cvmap[idx] if (num & mBit) != 0
  46. mBit <<= 1
  47. }
  48. wrk
  49. end
  50.  
  51. def prMap( num )
  52. # cw = num.to_s(2).gsub(/0/,'').size
  53. # puts "#{cw}/#{6-cw}"
  54.  
  55. str = ("%06b" % num).reverse.tr('01',"□■")
  56. puts str[0]
  57. puts str[1..4]
  58. puts str[5]
  59. end
  60.  
  61. def uniPush( cvMapList, datas )
  62. return false if cvMapList.index( datas )
  63. cvMapList << datas
  64. true
  65. end
  66.  
  67. # 回転パターンの列挙(のはず)
  68. def cvMake( cvmap, cv )
  69. cv0 = rotX( cv.dup )
  70. cvMake( cvmap, cv0 ) if uniPush( cvmap, cv0 )
  71. cv0 = rotY( cv.dup )
  72. cvMake( cvmap, cv0 ) if uniPush( cvmap, cv0 )
  73. cv0 = rotZ( cv.dup )
  74. cvMake( cvmap, cv0 ) if uniPush( cvmap, cv0 )
  75. end
  76.  
  77. cvmap = []
  78. cvmap << DefMap.dup
  79. cvMake( cvmap, DefMap )
  80.  
  81. solMap = []
  82. 1.upto( 0b11111 ){|num| # 000000排除, 最上位bitは 0 固定 (二色に拘束)
  83. uni = true
  84. cvmap.each{|cv|
  85. next unless solMap.index( turn(cv,num) )
  86. uni = false
  87. break
  88. }
  89. solMap << num if uni
  90. }
  91.  
  92. solMap.sort_by!{|x| x.to_s(2).gsub(/0/,'').size } # '1'bit数でソート
  93. solMap.each{|num|
  94. prMap( num )
  95. puts
  96. # puts "%06b" % num
  97. }
  98. puts "\n#{solMap.size}通り"
  99.  
Success #stdin #stdout 0.02s 6124KB
stdin
Standard input is empty
stdout
■
□□□□
□

■
■□□□
□

□
■□■□
□

■
■■□□
□

■
■□■□
□

■
■■■□
□

□
■■■■
□

■
■■■■
□


8通り