The square chest

Sophia pressed the button in front of her, slamming her fist against it. The door rumbled and appeared to do nothing.

“Oh man, that’s not very interesting at all.” Sofia complained.

Suddenly, the the door hissed and a jet of ice cold steam billowed out. The door began moving out the wall as if it were pushed from the inside. Sofia and the other two stepped back, watching their feet. The wall finally stopped moving and revealed itself to be a large chest of some sort.

“Oh man, could it be treasure?” Sofia studied the chest intently.

Nikola poked his head through the doorway where the chest had just exited. “Well, there’s nothing in there but darkness.” He turned to the chest which stood several feet taller than him and began studying it himself. He noticed some carvings on the side. “Hey, this looks like a manifest of some sort. Or a contents label. Look, there Ag, Na, Li, Mg... all raw materials we could use to fabricate the parts we need to fix the ship!”

“There’s a keypad on it though... It’s locked.” Sofia said with a frustrated sigh.

“No problem, we can solve it. Let’s take a look!”

On the chest keypad is a grid of numbered dots. The grid is comprised of a square shaped array of dots and contains lines that connect some pairs of adjacent dots. The answer to the code is the number of squares that are formed by these lines. For example, in the figure shown below, there are 3 squares: 2 small squares and 1 medium square.

The dots are marked by the numbers 1 through 16. The endpoints of the lines are represented by lists of two numbers.

Input: A list of lines as a list of list. Each list consists of the two integers.

Output: The quantity of squares formed as an integer.

原题链接: http://www.checkio.org/mission/the-square-chest/

题目大义: 计算正方形的个数

思路: 递归搜索; 实际上因为, 题目限定有16个点, 因此总的正方形个数为14个, 这个观察在处理图一中如[6,7,8,10,12,14,15,16]正方形, [7,8,10,11,12,14,15,16]非正方形时起到作用

 squares = [[1,2,5,6], [2,3,6,7], [3,4,7,8], [5,6,9,10], [6,7,10,11],[7,8,11,12],[9,10,13,14],[10,11,14,15],[11,12,15,16],
[1,2,3,5,7,9,10,11], [2,3,4,6,8,10,11,12], [5,6,7,9,11,13,14,15],[6,7,8,10,12,14,15,16],
[1,2,3,4,5,8,9,12,13,14,15,16]] def line_joint(node, lines_list, square_nodes, square_lines, lines_node):
lines_node.append(node) for each in lines_list:
if each not in square_lines and node in each:
square_lines.append(each) adjnode = 0
if each[0] == node:
adjnode = each[1]
else:
adjnode = each[0] if adjnode == square_lines[0][0]: #link to the first node
if len(square_lines) % 4 == 0: #may be a squre
sorted_lines_node = sorted(lines_node)
rep = False
for pre_square in square_nodes:
if pre_square == sorted_lines_node:
rep = True
break if rep == False:
square_nodes.append(sorted_lines_node)
else:
if adjnode not in lines_node: #not a cycle
line_joint(adjnode, lines_list, square_nodes, square_lines, lines_node) square_lines.pop() lines_node.pop() def checkio(lines_list):
"""Return the quantity of squares"""
square_lines = []
lines_node = []
square_nodes = [] for i in range(0, 17):
line_joint(i, lines_list, square_nodes, square_lines, lines_node) square_count = 0
for maybe_square in square_nodes:
for formal_square in squares:
if maybe_square == formal_square:
square_count += 1
break return square_count

代码思路, 首先递归枚举出, 环形及边数是4的倍数的闭合图形, 最后通过事先存储好的正方形数字, 去匹配闭合图形, 得到图中的正方形数

review nubatamax codes

 #anti-clock
#l1 = [(n, n + 4, n + 5, n + 1) for n in (1, 2, 3, 5, 6, 7, 9, 10, 11, 13, 14, 15)]
l1 = [(n, n + 4, n + 5, n + 1) for n in (1, 2, 3, 5, 6, 7, 9, 10, 11)]
l2 = [(n, n + 4, n + 8, n + 9, n + 10, n + 6, n + 2, n + 1) for n in (1, 2, 5, 6)]
l3 = [(1, 5, 9, 13, 14, 15, 16, 12, 8, 4, 3, 2)] #construct lines of squere
def seg_gen(path):
l = len(path)
for i in range(l):
yield sorted((path[i], path[(i + 1) % l])) #each time return a line of this squre def checkio(lines_list):
segments = [sorted(segment) for segment in lines_list] #segment is like this form [little, big]
count = 0
for square_list in (l1, l2, l3):
for square in square_list:
if all([seg in segments for seg in seg_gen(square)]): #if the square line all in given lines_list then that's a square
count += 1 return count

我将第二行代码中的产生l1列表(原代码), 写成了第三行的形式, 加入了不少注释; 该代码的思路是, 枚举所有可能出现的正方形, 如果该正方形的边全在给定的lines_list中, 则正方形数+1.

The square chest的更多相关文章

  1. [LeetCode] Matchsticks to Square 火柴棍组成正方形

    Remember the story of Little Match Girl? By now, you know exactly what matchsticks the little match ...

  2. [LeetCode] Valid Word Square 验证单词平方

    Given a sequence of words, check whether it forms a valid word square. A sequence of words forms a v ...

  3. [LeetCode] Valid Perfect Square 检验完全平方数

    Given a positive integer num, write a function which returns True if num is a perfect square else Fa ...

  4. [LeetCode] Maximal Square 最大正方形

    Given a 2D binary matrix filled with 0's and 1's, find the largest square containing all 1's and ret ...

  5. OPEN CASCADE Gauss Least Square

    OPEN CASCADE Gauss Least Square eryar@163.com Abstract. The least square can be used to solve a set ...

  6. OpenCascade Eigenvalues and Eigenvectors of Square Matrix

    OpenCascade Eigenvalues and Eigenvectors of Square Matrix eryar@163.com Abstract. OpenCascade use th ...

  7. Leetcode: Matchsticks to Square && Grammar: reverse an primative array

    Remember the story of Little Match Girl? By now, you know exactly what matchsticks the little match ...

  8. Leetcode: Valid Word Square

    Given a sequence of words, check whether it forms a valid word square. A sequence of words forms a v ...

  9. Modified Least Square Method and Ransan Method to Fit Circle from Data

    In OpenCv, it only provide the function fitEllipse to fit Ellipse, but doesn't provide function to f ...

随机推荐

  1. NOI 2013 书法家

    http://uoj.ac/problem/125 我真是日狗了...... 果然还是没有耐心读题,搞到读题读错了2个地方,结果调试了半天...... 言归正传. 动态规划. 这种题目很常见. 我们发 ...

  2. 【剑指offer】面试题42:翻转单词顺序 VS 左旋转字符串

    题目: 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果.对于一个给定的字符序列S,请你把其循环左移K位后的序列输出.例如,字符序列S=”abcX ...

  3. javaDay1 基础知识

    常用dos命令 •d: 回车  盘符切换 •dir(directory):列出当前目录下的文件以及文件夹 •md (make directory) : 创建目录 •rd (remove directo ...

  4. IEEE论文格式要求

    0.特别提示:本次会议要求各位作者根据审稿意见进行认真修改,然后经过大会主席的检查合格才允许上传IEEE eXpress,主要的目的是为了保证论文集的质量,不让论文格式出现五花八门的情况,确保会议后被 ...

  5. pyqt时间

    # -*- coding: utf-8 -*-__author__ = 'Administrator'from PyQt4 import QtCore, QtGui class Help(QtGui. ...

  6. wpf新增记录时用多线程的问题

    多线程虽然可以增加用户操作体验,但是有时候会出现意想不到的错误. 如果采用分布式,数据库在另外服务器上,当网络出现问题,或者数据库繁忙,那么新增数据就会等待,这时候用户如果以为没有操作,而多次点击新增 ...

  7. (转)iPhone 判断UITableView 滚动到底部

    UITableView is a subclass of UIScrollView, and UITableViewDelegate conforms to UIScrollViewDelegate. ...

  8. STM32F051 IAP源代码分享

    STM32F051 IAP源代码分享 假设不懂IAP的请自己主动脑补或者怒戳这里 http://www.openedv.com/posts/list/11494.htm 然后STM32F051的IAP ...

  9. Mybatis分页插件PageHelper正确的用法(网上有2篇不够科学的文章)

    今天下午在Mybatis项目中.实现分页.由于我是后加入项目中的,Leader用的是PageHelper这个组件.可是我在实际使用的过程中遇到了2个大问题. 1.p=2#comments" ...

  10. 设计模式之Application Programs and Toolkits

    Application Programs 应用程序 If you're building an application programsuch as a document editor or spre ...