python高级练习题:彩色格子点形成了有色三角形【难度:4级】:

<字体大小= 2面= “Arial字体”> 注意的Java用户: 由于输入的Java检查,输入和输出这个语言被格式化相当不同.参见说明书的脚注.的

点击
<字体大小= “2” 脸= “Arial字体”> 您有与它们对应的坐标下面的格子点和每一个与一个特定的颜色.的

点[X,Y]颜色
----------------------------
  A [3,4]蓝
  B [-7,-1]红
  C [7,-6]黄色
  d [2,5]黄色
  E [1,-5]红
  F [-1,4]红
  G [1,7]红
  H [3,5]红
  I [-3,-5]蓝
  f] [4,1]蓝

<字体大小="2"脸=“Arial字体”> 我们要计数具有三个顶点具有相同的颜色的三角形.下图显示的点的在平面与所需三角形分布.的

<字体大小= “2” 脸= “Arial字体”> ,我们将有用于上述格子点的场的输入是:

[[[3-,-4], "蓝色"],[[-7,-1], "红"],[[7,-6], "黄色"],[[2,5],"黄"],
 [[1,-5], "红"],[[-1,4], "红"],[[1,7], "红"],[[-3,5], "红色"] ,
 [[-3,-5], "蓝色"],[[4,1], "蓝"]]

<字体大小= “2” 脸= “Arial字体”> 我们看到从它以下结果:

三角形三角形的颜色数量
黄0 -------
蓝1 AIJ
红10 BEF,BEG,BEH,BFG,BFH,BGH,EFG,EFH,EHG,FGH

<字体大小= “2” 脸= “Arial字体”> 由于我们有在红5个不同点和的未对准的3个点的每个组合.的

<字体大小= “2” 脸= “Arial字体”> 我们需要的是可以使我们在下列顺序的信息的代码:

1)总给点意见
2)的颜色的总数
3)可能的三角形的总数
4)和5)的颜色(或颜色,按字母顺序排序)与三角形的最高量

<字体大小= “2” 脸= “Arial字体”> 在Python我们的功能会像:

[10,3,11,[ "红",10]])== count_col_triang([[[3-,-4], "蓝色"],[[-7,-1], "红"],[[ 7,-6], "黄色"],[[2,5], "黄色"],
                                              [[1,-5], "红"],[[-1,4], "红"],[[1,7], "红"],[[-3,5], "红色"] ,
                                              [[-3,-5], "蓝色"],[[4,1], "蓝"]])

<字体大小= “2” 脸= “Arial字体”> 在以下的情况下,我们具有被对准的一些点,我们有能够形成更小的三角形:

[10,3,7,[ "红",6]] == count_col_triang([[[3-,-4], "蓝色"],[[-7,-1], "红"],[[7 ,-6], "黄色"],[[2,5], "黄色"],
                                            [[1,-5], "红"],[[1,1], "红"],[[1,7], "红"],[[1,4], "红"],
                                            [[-3,-5], "蓝色"],[[4,1], "蓝"]])

<字体大小= “2” 脸= “Arial字体”> 只要看到与我们有这个与前面的情况的变化:

<字体大小="2"脸=“Arial字体”> 在特殊情况下的点的列表中不产生甚至单个三角形,输出将是这样的情况: </字体>

[9,3,0,[]] == count_col_triang([[[1,-2], "红"],[[7,-6], "黄色"],[[2,5],"黄"],[[1,-5], "红"],
                                  [[1,1], "红"],[[1,7], "红"],[[1,4], "红"],[[-3,-5], "蓝色"],
                                  [[4,1], "蓝"]])

<字体大小= “2” 脸= “Arial字体”> 这将是该情况下:

<字体大小="2"脸=“Arial字体”> 如果在结果中,我们有两个或更多的颜色与三角形的相同的最大数量,最后一个列表应该像(例如)

[35,6,35,[ "蓝", "红", "黄",23]]具有的颜色的名称# 字母顺序排序

<字体大小= “2” 脸= “Arial字体”> 对于三个algined点的条件A,B,C,你应该知道的是,下面的行列式应该是0.的</字体>

| XA YA 1 |
 |的xB YB 1 | = 0
 | XC YC 1 |

<字体大小= “2” 脸= “Arial字体”> 假设:

  • <字体大小= “2” 脸= “Arial字体”> 在具有其独特的点的列表,这样的点只能有一个颜色
  • <字体大小= “2” 脸= “Arial字体”> 所有的输入是有效的的

<字体大小= “2” 脸= “Arial字体”> 享受它!
点击

点击
<字体大小= “2” 脸= “Arial字体”> 的 <字体大小= 3> 对于Java的用户: 的搜索结果的两个不可变对象,ColouredPoint和TriangleResult,已经在预装的部分被设计为您服务.您将收到输入作为ColouredPoint对象列表,并会返回一个TriangleResult对象.对于最后一个,则可以注意到的,其不同于以上描述中一个位的构造的参数的机构.的

<字体大小= “2” 脸= “Arial字体”> 您可能会发现的这些对象的可用方法的签名下面:

类ColouredPoint {
       公共ColouredPoint(最终INT [] POS,最终串色)
       公共INT []为getPosition()
       公共字符串getColour()
       @覆盖公共布尔等于(对象除外)
       @覆盖公众诠释的hashCode()
       @覆盖公共字符串的ToString()// String表示格式化为 “[[X,Y],红色]”
     }

类TriangleResult {

公共TriangleResult()
       公共TriangleResult(最终诠释nGivenPoints,最终诠释nGivenColours,最终诠释nTriangles,最终列表<字符串>的颜色,最终诠释maxFromColour)
       @覆盖公共布尔等于(对象除外)
       @覆盖公众诠释的hashCode()
       格式化为 “[nGivenPoints,nGivenColours,nTriangles,[红,蓝],maxFromColour]” @覆盖公共字符串的ToString()// String表示
     }

编程目标:

def count_col_triang(input_):
    # your code here
    return [[]]

测试样例:

test.describe("Example and special Cases")
test.assert_equals(count_col_triang([[[3, -4],
'blue'], [[-7, -1], 'red'], 
[[7, -6], 'yellow'], [[2, 5], 'yellow'], 
[[1, -5], 'red'], [[-1, 4], 'red'], 
[[1, 7], 'red'], [[-3, 5], 'red'], 
[[-3, -5], 'blue'], [[4, 1], 'blue']]),
[10, 3, 11, ['red',10]])
test.assert_equals(count_col_triang([[[3, -4],
'blue'], [[-7, -1], 'red'], 
[[7, -6], 'yellow'], [[2, 5], 'yellow'], 
[[1, -5], 'red'], [[1, 1], 'red'], 
[[1, 7], 'red'], [[1, 4], 'red'], 
[[-3, -5], 'blue'], [[4, 1], 'blue']]),
[10, 3, 7, ['red', 6]])