# 查找色号

13

（在维基百科上找到）

## 例子

``````3
1 2, 2 3, 1 3
``````

6个顶点的“环”（χ= 2）

``````6
1 2, 2 3, 3 4, 4 5, 5 6, 6 1
``````

5个顶点的“环”（χ= 3）

``````5
1 2, 2 3, 3 4, 4 5, 5 1
``````

``````6
1 2, 2 3, 3 4, 4 5, 5 6, 6 1, 1 3, 2 4, 3 5, 4 6, 5 1, 6 2
``````

``````7
1 2, 2 3, 3 4, 4 5, 5 6, 6 7, 7 1, 1 3, 2 4, 3 5, 4 6, 5 7, 6 1, 7 2
``````

``````10
1 2, 2 3, 3 4, 4 5, 5 1, 1 6, 2 7, 3 8, 4 9, 5 10, 6 8, 7 9, 8 10, 9 6, 10 7
``````

``````6
1 2, 1 3, 1 4, 1 5, 2 3, 2 4, 2 5, 3 4, 3 5, 4 5
``````

``````8
1 2, 1 3, 1 4, 1 5, 1 6, 1 7, 1 8, 2 3, 2 4, 2 5, 2 6, 2 7, 2 8, 3 4, 3 5, 3 6, 3 7, 3 8, 4 5, 4 6, 4 7, 4 8, 5 6, 5 7, 5 8, 6 7, 6 8, 7 8
``````

``````15
1 2, 1 3, 2 3, 2 4, 2 5, 3 5, 3 6, 4 5, 5 6, 4 7, 4 8, 5 8, 5 9, 6 9, 6 10, 7 8, 8 9, 9 10, 7 11, 7 12, 8 12, 8 13, 9 13, 9 14, 10 14, 10 15, 11 12, 12 13, 13 14, 14 15
``````

ThreeFx 2014年

@ThreeFx是的，十分钟是合理的。不是半天。我不想在限制上过于严格，因为那样的话，我需要再次在同一台（我的）计算机上测试所有内容。但是，假设它在一小时内在您的计算机上完成就可以了。
Martin Ender 2014年

4

# 蟒2.7 - 122 109 111 109 108 103

``````f=lambda n,e,m=1:any(all(t*m//m**a%m!=t*m//m**b%m for(a,b)in e)for t in range(m**n))and m or f(n,e,m+1)
``````

``````print f(5, [(1, 2), (2, 3), (3, 4), (4, 5), (5, 1)])
``````

xnor 2014年

xnor 2014年

2

# 爪哇- 241 218

``int k,j,c;int f(int n,int[]e){for(k=1;k<=n;k++)for(long p=0;p<x(n);p++){for(j=0,c=0;j<e.length;c=p%x(e[j])/x(e[j]-1)==p%x(e[j+1])/x(e[j+1]-1)?1:c,j+=2);if(c<1)return k;}return 0;}int x(int a){return(int)Math.pow(k,a);}``

``````int k,j,c;
int f(int n,int[]e){
for(k=1;k<=n;k++)
for(long p=0;p<x(n);p++){
for(j=0,c=0;
j<e.length;
c=p%x(e[j])/x(e[j]-1)==p%x(e[j+1])/x(e[j+1]-1)?1:c,
j+=2);
if(c<1)return k;
}
return 0;
}
int x(int a){return(int)Math.pow(k,a);}
``````

2

# Python 3-162

``````import itertools as I
def c(n,v):
for i in range(1,n+1):
for p in I.product(range(i),repeat=n):
if(0==len([x for x in v if(p[x[0]]==p[x[1]])])):return i
``````

``````print(c(8,[x for x in I.combinations(range(8), 2)]))
``````

1

``````p x=f(length x)(transpose x)1
f a[b,c]d|or\$map(\x->and\$g x(h b)(h c))(sequence\$replicate a[1..d])=d|0<1=f a b c(d+1)
g a=zipWith(\x y->a!!x/=a!!y)
h=map(flip(-)1)``````

``````p [[1, 2],[2, 3],[3, 1]]
``````

Martin Ender 2014年

@MartinBüttner好吧，我将其更改
ThreeFx 2014年

@ThreeFx `all id`与相同`and``any id`与相同，`or`并且`any id\$map f list`与just相同`any f list`。同样，您可以使用以下方法来做一些事情`g`：您可以将其重新定义为`g a=(and.).zipWith(\x y->a!!x/=a!!y)`，使其成为infix，更改输入顺序以替换`(\x->g x b c)``g b c`，甚至使其完全无点并内联。其中一些无法协同工作，因此请尝试所有方法并选择最佳的一种：)

1
@MartinBüttner我认为它是固定的，可以保证maaaaany字节的成本。：D
ThreeFx 2014年

1

Martin Ender 2014年