Você pode conhecer o matemático von Koch por seu famoso floco de neve. No entanto, ele tem problemas mais interessantes de ciência da computação nas mangas. De fato, vamos dar uma olhada nesta conjectura:
Dada uma árvore com n
nós (portanto n-1
arestas). Encontre uma maneira de enumerar os nós de 1
para n
e, consequentemente, as bordas de 1
para de n-1
maneira que, para cada borda, k
a diferença de seus números de nós seja igual a k
. A conjectura é que isso é sempre possível.
Aqui está um exemplo para deixar perfeitamente claro:
SUA TAREFA
Seu código terá como entrada uma árvore; você pode usar o formato desejado, mas para os casos de teste fornecerei a árvore por seus arcos e pela lista de seus nós.
Por exemplo, esta é a entrada para a árvore na imagem:
[a,b,c,d,e,f,g]
d -> a
a -> b
a -> g
b -> c
b -> e
e -> f
Seu código deve retornar a árvore com os nós e as bordas numerados. Você pode retornar uma saída mais gráfica, mas fornecerei esse tipo de saída para os casos de teste:
[a7,b3,c6,d1,e5,f4,g2]
d -> a 6
a -> b 4
a -> g 5
b -> c 3
b -> e 2
e -> f 1
CASOS DE TESTE
[a,b,c,d,e,f,g] [a7,b3,c6,d1,e5,f4,g2]
d -> a d -> a 6
a -> b a -> b 4
a -> g => a -> g 5
b -> c b -> c 3
b -> e b -> e 2
e -> f e -> f 1
[a,b,c,d] [a4,b1,c3,d2]
a -> b a -> b 3
b -> c => b -> c 2
b -> d b -> d 1
[a,b,c,d,e] [a2,b3,c1,d4,e5]
a -> b a -> b 1
b -> c b -> c 2
c -> d => c -> d 3
c -> e c -> e 4
Isso é código-golfe, essa é a resposta mais curta em bytes!
Nota: Isso é mais forte do que a conjectura de Ringel-Kotzig , que declara que todas as árvores têm uma rotulação elegante. Como na conjectura de Koch, não é possível pular números inteiros para a marcação, ao contrário da marcação graciosa na conjectura de Ringel-Kotzig. Rotulagem graciosa já foi solicitada aqui .
fonte
Respostas:
Gelatina , 30 bytes
Experimente online! (Use
GṄ³çG
como rodapé para tornar a saída mais bonita.)Entradas semelhantes ao exemplo, por exemplo,
abcdef
e[d,a],[a,b],[a,g],[b,c],[b,e],[e,f]
Mostra a lista, por exemplo,
a,b,c,d,e,f
em ordem.Nota: Meu programa produz valores diferentes dos casos de teste, pois há várias possibilidades válidas.
Explicação
Economize 1 byte, mostrando todas as soluções possíveis:
Experimente online! (Use
GṄ³çG⁷³G
como rodapé para tornar a saída mais bonita)Use o conversor para copiar e colar casos de teste em uma lista de entrada.
fonte
Ruby, 108 bytes
A função lamba aceita uma matriz de matrizes de 2 elementos contendo as arestas (onde cada aresta é expressa como um par de números correspondentes às notas relevantes).
Ungolfed in program program
Resultado
output é uma matriz de 2 elementos, contendo:
a nova numeração de nós
a numeração da aresta.
Por exemplo, a primeira aresta do primeiro exemplo
[4,1]
está entre os nós 6 e 1 sob a numeração do novo nó e, portanto, é a aresta 6-1 = 5.De fato, existem várias soluções para cada caso de teste. o
return
interrompe a função assim que a primeira é encontrada.fonte