如何生成所有Tetrominos的列表?

Mar*_*ark 3 algorithm functional-programming tetris

如何生成所有Tetrominos的列表?或者,更一般地说,如何生成限制在多个细胞中的多联骨牌子集?

tem*_*def 5

有很多方法可以做到这一点.我发现一个很好用的选择是递归地考虑它并且更普遍.特别是:

  1. 单个矩形是1-omino.
  2. 对于任何n-omino,您可以通过将块放在n-omino的任何块附近来创建(n + 1)-omino.

这为您提供了一种列出所有可能的n-ominos的递归方式.但是,您需要小心,因为这将生成相同n-ominos的多个旋转和平移.您可以通过选择一些参考坐标系,然后平移n-omino来使其始终与该系统的轴齐平来解决此问题.一旦你有了这个工作,你可以通过围绕轴旋转产生的n-omino,然后将其转换回规范位置来生成所有旋转.