Boa tarde golfistas,
Nosso desafio de hoje é inspirado nos quadrinhos 356 e 370 do XKCD . Vamos escrever um programa para calcular a resistência de um grupo de resistores. Um aviso de que isso é quase difícil o suficiente para justificar ser um desafio de código, no entanto, acho que existe uma certa arte em escrever programas um pouco mais complexos em um formato de golfe. A menor quantidade de caracteres vence.
O cálculo da resistência se baseia nas duas fórmulas a seguir:
- Se os resistores estiverem em série, a resistência é a soma da resistência de cada resistor
- Se os resistores estão em paralelo, a resistência é o inverso da soma do inverso da resistência de cada resistor
Então - por exemplo:
Seu desafio é, na menor quantidade de caracteres possível, calcular a resistência de um grupo de até 64 resistores. Peço desculpas pela complexidade, principalmente pelas regras de entrada. Tentei defini-los de tal maneira que todos os idiomas sejam utilizáveis.
Cada resistor será conectado a 2 ou mais outros resistores.
A entrada é garantida como válida, com apenas uma entrada e um ponto de saída, que conectará
A rede será paralela em série para evitar a necessidade de mais matemática do que o que é apresentado
A entrada será via arquivo, argumento ou stdin, dependendo do que for apropriado para o seu idioma.
A entrada consistirá em uma série de instruções separadas com nova linha ou barra, consistindo em um número inteiro da resistência do resistor e espaços que separam os IDs dos resistores aos quais um lado do resistor está conectado.
O ID do primeiro resistor será 1, incrementando em um para cada resistor sucessivo
O início sempre terá um ID 0
O resistor final sempre terá uma resistência de 0 ohms e apenas as conexões definidas em sua linha
Por exemplo:
Pode ser representado como
3 0
6 1
1 0
5 0
0 2 3 4
- A saída pode ser para stdout ou arquivo. Pode ser representado de uma das seguintes maneiras:
- Um número com no mínimo 2 casas decimais, seguido por uma nova linha
- Uma fração que consiste em um número inteiro (o numerador), uma barra e outro número (o denominador), seguido por uma nova linha. A fração não precisa estar na sua forma mais baixa - 4/4 ou 10/8 são, por exemplo, aceitáveis. A fração deve ser precisa dentro de 1/100. Não há bônus por ser perfeitamente preciso - isso é uma muleta para permitir que idiomas sem operações de ponto fixo ou flutuante possam competir.
Espero que isso cubra todos os pontos. Boa sorte!
1 2/1 0/0 1
válido?
/
não é uma barra invertida. Você quis dizer `\` ou uma barra?