Desafio
Agora que Papai Noel finalmente descobriu como entrar em seu cofre atual, ele percebe que de alguma forma os elfos chegaram lá antes dele e roubaram alguns de seus presentes! Eles ainda não descobriram como deixar o cofre, então o Papai Noel precisa tentar pegá-los todos. Papai Noel e os elfos têm energia infinita para percorrer, mas infelizmente os elfos têm uma infinidade de energia mais alta; portanto, se eles acabarem rodando em loops em todos os lugares, os elfos se libertarão.
Dado um gráfico de n
nós e e
arestas com uma caminhada existente entre dois nós e as posições dos elfos e do Papai Noel, determine quantos elfos o Papai Noel pode pegar antes que ele se canse.
A perseguição é baseada em turnos. A cada ciclo, os elfos primeiro se movem simultaneamente (eles podem se mover entre si e no mesmo nó) e, em seguida, o Papai Noel se move. Se o Papai Noel se mover para o mesmo nó que um elfo, ele o pegou. Cada elfo pode mover-se apenas de um nó para seu vizinho em uma etapa. O mesmo vale para o Papai Noel no começo, mas para cada elfo que ele pegou, o Papai Noel pode dar um passo extra. Portanto, se o Papai Noel pegou um elfo, ele pode passar de um nó para o vizinho do vizinho. Isso significa que ele poderia passar para um nó e depois voltar. No entanto, como o Papai Noel está correndo rápido demais durante esse período, ele não pegará nenhum elfo que passe nas etapas intermediárias (portanto, se ele estiver em A, A estiver conectado a B, B estiver conectado a C, haverá um elfo B, e Santa se move de A -> B -> C, o elfo ainda não foi pego). No entanto, o Papai Noel não precisa dar muitos passos ao mesmo tempo; ele se move até 1 + (número de elfos capturados) a cada turno.
Observe que todos os elfos devem se mover a cada turno e, se um elfo se mover para o nó do Papai Noel, eles serão pegos.
Todas as entidades (elfos, Papai Noel) estarão em nós distintos no começo.
Especificações e Regras
Teoricamente, seu programa deve funcionar com entradas de qualquer tamanho. A entrada será dada como um gráfico, as posições dos elfos e a posição do Papai Noel. Você pode tomar o gráfico em qualquer formato razoável (lista de nós + lista de arestas, lista de arestas, matriz de adjacência, notação de ciclo, etc.) e pode assumir as posições em qualquer formato razoável que funcione com o formato de entrada do gráfico (índice na lista de nós, etc.). A saída deve ser um número inteiro positivo único, indicando o número máximo de duendes que o Papai Noel pode pegar.
Casos de teste
Eles são fornecidos como listas de arestas e números de nós para posições.
Input -> Output
[(0, 1), (1, 2)], [0, 2], 1 -> 2 # Easy win for Santa, the elves get themselves caught :P
[(0, 1), (1, 2), (2, 3), (3, 0)], [0, 1], 2 -> 2 # The elf opposite of Santa cannot escape but the other one can always just run away each turn, until Santa catches the first elf. Then he can easily just catch the rest.
[(0, 1), (1, 2), (2, 3), (3, 0)], [1], 0 -> 0 # Santa will never catch up
[(0, 1), (1, 2), (2, 3), (3, 0), (1, 4), (4, 5), ..., (10, 11), (11, 3)], [2, 6], 0 -> 2 # The first elf moves to either 1 or 3 and then gets caught. Then, Santa can use his 2-step move to catch up to the second elf no matter what.
Eu acho que o Papai Noel pode pegar tanto há elfos ou todos os elfos, por isso, este desafio pode ser apenas "ele pode pegar um elfo" dica dica
Regras
- As brechas padrão se aplicam
- Esse é um desafio do código-golfe , portanto, a resposta mais curta em bytes vence
- Nenhuma resposta será aceita
Golfe feliz!
Nota: Eu me inspirei para esta série de desafios da Advent Of Code . Não tenho afiliação com este site
Você pode ver uma lista de todos os desafios da série consultando a seção 'Vinculado' do primeiro desafio aqui .
fonte
1
Prove algumas afirmações matemáticas.2
Poste uma resposta de geléia (/ ...) em menos de 10 bytes.Respostas:
Wolfram Language (Mathematica) , 129 bytes
Experimente online!
Abordagem semelhante à minha resposta a esta pergunta .
A função recebe 3 argumentos como entrada: lista de adjacências representada como uma associação ( ferramenta para gerar lista de adjacências a partir da lista de arestas ), posição dos elfos e posição de santa.
Observe que
Clear[f]
é necessário, porque os envios de funções devem ser reutilizáveis.O código abaixo é um código não destruído com explicação parcial. Mais explicações depois.
fonte