Pegue uma grade bidimensional e desenhe um número de segmentos de linha para representar espelhos. Agora escolha um ponto para colocar um laser teórico e um ângulo para definir a direção que está apontando. A questão é: se você segue o caminho do feixe de laser por uma distância especificada, em que ponto de coordenada você está?
Exemplo:

Nesta imagem, Lé a localização do laser, té o ângulo que o (medido a partir do eixo X positivo), M1, M2, e M3são todos os espelhos segmento de linha, e Eé o ponto do percurso do feixe de laser, depois D = d1 + d2 + d3 + d4de unidades, a partir de L.
Objetivo
Escrever o programa mais curto (em bytes) que saídas Edada L, t, D, e uma lista de espelhos.
(Use http://mothereff.in/byte-counter para contar bytes.)
Formato de entrada
A entrada virá do stdin no formato:
Lx Ly t D M1x1 M1y1 M1x2 M1y2 M2x1 M2y1 M2x2 M2y2 ...
- Todos os valores serão pontos correspondentes esse regex flutuante:
[-+]?[0-9]*\.?[0-9]+. - Sempre há exatamente um espaço entre cada número.
- É necessário solicitar cotações em torno da entrada.
testá em graus, mas não necessariamente na[0, 360)faixa. (Se preferir, use radianos, apenas diga na sua resposta.)Dpode ser negativo, girando efetivamente o laser 180 graus.Dtambém pode ser 0.- Pode haver arbitrariamente muitos espelhos (incluindo nenhum).
- A ordem dos espelhos não deve importar.
- Você pode assumir que a entrada será apresentada em múltiplos de 4 números. por exemplo,
Lx Ly touLx Ly t D M1x1são inválidos e não serão testados. Nenhuma entrada também é inválida.
O layout acima pode ser inserido como:
1 1 430 17 4.8 6.3 6.2 5.3 1.5 4.8 3.5 6 6.3 1.8 7.1 3
(Observe que a imagem foi desenhada à mão livre e esses valores são apenas aproximações. Os valores de entrada de Martin Büttner de
1 1 430 17 4.8 5.3 6.2 4.3 1.5 4.8 3.5 6 6.3 1.8 7.1 3
dará mais colisões, embora não correspondam ao esboço.)
Formato de saída
A saída deve ir para stdout no formato:
Ex Ey
Estes também são carros alegóricos e podem estar na forma exponencial.
Notas
- Os espelhos podem se cruzar.
- Ambos os lados dos espelhos são reflexivos.
- O raio pode atingir o mesmo espelho várias vezes.
- O raio continua para sempre.
Casos indefinidos
Você pode assumir que os casos em que
- o laser começa em um segmento de linha de espelho
- o raio laser atinge o ponto final de um espelho
- o raio laser atinge a interseção entre dois espelhos
são indefinidos e não serão testados. Seu programa pode fazer qualquer coisa, se isso ocorrer, incluindo gerar um erro.
Bônus
Apenas por diversão, atribuirei 200 pontos de recompensa à mais votada, que gera uma representação gráfica do problema (você pode até escrever um script interativo). Esses envios de bônus não precisam ser disputados e podem ser tolerantes com a forma como a entrada e a saída são tratadas. Eles são distintos dos envios reais de golfe, mas ambos devem ser enviados na mesma resposta .
Nota: apenas enviar uma resposta de bônus é bom, você não será a resposta aceita. Para ser aceito, você deve seguir exatamente as especificações de entrada / saída (por exemplo, apenas a saída envolve Ex Ey, não imagens) e ser o menor.








