all possible patterns for N russian squares
2014-12-15 08:37
267 查看
Question:
A traditional russion square is made by 4 blocks, and has 7 different patterns.
Given N blocks, how many different patterns would be.
N = 1, P# = 1
N = 2, P# = 1
N = 3, P# = 3
N = 4, P# = 7.
Assume N = k, P# = Pk
then when N = k+1, P# = for each P in Pk, append one more block around P, remove dups.
A traditional russion square is made by 4 blocks, and has 7 different patterns.
Given N blocks, how many different patterns would be.
N = 1, P# = 1
N = 2, P# = 1
N = 3, P# = 3
N = 4, P# = 7.
Assume N = k, P# = Pk
then when N = k+1, P# = for each P in Pk, append one more block around P, remove dups.
class Pattern { List<Block> blocks; // Return true if this pattern can be translated to another patter p by rotate or moving. boolean isSame(Pattern p) { // TODO } } List<Pattern> allPatthens(n) { if (n == 1) { return Pattern.builder().build(); } List<Pattern> patternsForNMinusOne = numOfPattern(n - 1); List<Pattern> toReturn = new ArrayList<>(); for (Pattern p : patternsForNMinus1) { List<Pattern> patternsWithOneMoreBlock = patternsWithOneMoreBlock(p); for (Pattern newP : patternsWithOneMoreBlock) { if (!contains(toReturn, newP)) { toReturn.add(newP); } } } return toReturn; } boolean contains(List<Pattern> list, Pattern p) { for (Pattern pInList : list) { if (pInList.isSame(p)) return true; } return false; } // Given pattern p. // Return all unique valid patterns with one more block. List<Pattern> patternsWithOneMoreBlock(Pattern p) { List<Pattern> toReturn = new ArrayList<>(); for (Block b : p.blocks()) { List<Block> newBlocks = Arrays.as(b.left(), b.right(), b.up(), b.down()); for (Block newBlock : newBlocks) { if (!p.contains(newBlock)) { // A new pattern found Pattern newP = p.appendBlock(newBlock); if (!contains(toReturn, newP)) { toReturn.add(newP); } } } } return toReturn; } // Too complicated.
相关文章推荐
- geeksforgeeks Count all possible walks from a source to a destination with exactly k edges
- Crazy Test: How much time will be consume to exhaustive 16 bits numeral for all possible?
- Crazy Test: How much time will be consume to exhaustive 16 bits numeral for all possible?
- runAllManagedModulesForAllRequests 和 invalid url
- cocos2d: fullPathForFilename: No file found at Hero.png. Possible missing file.问题解决方法
- ABAP性能优化之使用 “for all entries”
- Enumerating All Modules For a Process
- A possible way for testing threading/server application
- For all entries使用中注意的问题(转)
- FOR ALL ENTRIES IN
- Is it possible to set font for entire Application?
- WaitAll for multiple handles on a STA thread is not supported. (原)
- Some tips for grammar 'For all Entries' in the ABAP
- All Latin Squares
- all packages are not available for download...
- CocosEditor-java加载图片出错cocos2d: fullPathForFilename: No file found at main.plist. Possible missing fi
- springMVC项目异步处理请求的错误Async support must be enabled on a servlet and for all filters involved in async
- Core Security Patterns : Best Practices and Strategies for J2EE(TM), Web Services, and Identity Mana
- ABAP “FOR ALL ENTRIES IN” 使用指南
- 对于不能join的表,使用for all entries in语句将该表与内表串联。