Jones quer fazer uma viagem de ida e volta em sua bicicleta. Ele quer visitar várias cidades em ordem arbitrária, mas sua rota não deve se cruzar, já que ele odeia estar no mesmo lugar duas vezes em suas férias. Como ele realmente gosta de andar de bicicleta, o comprimento de sua rota é completamente irrelevante, mas ele não gosta de andar pela paisagem sem um alvo. A rota que ele gosta é da cidade em linha reta para outra, sem nenhum desvio.
Como Jones é um jogador de código apaixonado, ele quer que você encontre um programa que planeje uma viagem de ida e volta para ele, considerando um conjunto de cidades. A entrada tem o formulário A (B|C)
. A
é o nome de uma cidade B
e C
são suas coordenadas. Você pode assumir que as coordenadas são positivas e menores que 1000. Os conjuntos de dados para as cidades são separados por linhas. Aqui está um exemplo de como uma entrada de exemplo pode parecer:
SomeTown (1 | 10) ACidade (3 | 4) Onde quer que (7 | 7) Casa (5 | 1)
Jones não é pedante, ele só quer ter um programa útil. Assim, você pode decidir por si mesmo como será a saída, desde que atenda a esses critérios:
- A saída é um mapa das cidades, com a rota traçada entre elas. Se algo estiver correto, a rota não deve se sobrepor e deve terminar onde começou
- As coordenadas são como na programação usual: (1 | 1) está no canto noroeste. Adicione uma espécie de régua à borda do mapa para facilitar a leitura
- Os nomes das cidades devem ser anotados no mapa, mas fique à vontade para usar as abreviações explicadas em outro lugar no mapa
- O mapa pode ser uma arte ASCII ou uma imagem
- Mantenha a saída legível
Uma saída pode ser assim:
1234567 1 D 2 * * 3 * * 4 B * 5 * * 6 * * 7 * C 8 * ** 9 * * 10A ** A: SomeTown B: ACity C: Onde quer que D: Início
O programa com a menor contagem de caracteres vence. Não conto os parâmetros para o compilador / intérprete, se eles forem necessários para a compilação, mas não abuse dessa regra. Aplicam-se as regras usuais de golfe com código.
Aqui está outro caso de teste. Sua saída não precisa coincidir com a minha, nem você precisa escolher o mesmo caminho que eu. A saída é desenhada à mão e mostra uma saída possível. Entrada:
casa (5 | 7) supermercado (13 | 12) parque (15 | 5) nova praça (9 | 16) casa de um amigo (20 | 11) castelo velho (14 | 21) ribeirinha (1 | 20) praia (10 | 1) cinema (21 | 18) floresta (23 | 7) pequena ilha (21 | 1) museu do código-golfe (6 | 25) aeroporto (18 | 25) loja de chá (24 | 14) restaurante (24 | 22) ótima ponte (3 | 12) Edifício SO (25 | 9)
E este é um exemplo de saída:
1111111111222222 1234567890123456789012345 1 H * * K 2 * * * * 3 * * * * 4 * * ** * 5 * C * 6 * * 7 AJ 8 * * 9 * Q 10 * * 11 * *** E * 12 PB *** * * 13 * * * * 14 * * * N 15 * * * * 16 * D * * 17 * * * * 18 * * eu * 19 * * * * 20G * * * 21 * F * * 22 * ** * O 23 * ** * ** 24 * ** * * 25 L ** M ** Um lar B: supermercado C: parque D: nova praça E: casa do amigo F: castelo velho G: ribeirinha H: praia I: cinema J: floresta K: pequena ilha L: museu do código-golfe M: aeroporto N: loja de chá O: restaurante P: ótima ponte Q: SO edifício
Eu não sou um falante nativo de inglês. Fique à vontade para corrigir meu idioma e gramática, se necessário.
Haskell, 633 caracteres
Bastante demorado para o código-golfe, mas produz um mapa SVG adorável:
Ou, se o seu navegador não puder lidar com SVG, um PNG dessa imagem:
viewBox
; também alguns truques de golfe aqui e ali.fonte
Python,
516476 bytes(Nota: não incluí as duas primeiras linhas na contagem de bytes, considero-as "parâmetros do interpretador". Mas cobri-me pelo comprimento utf-8 do programa em bytes.)
No seu segundo exemplo, produzo:
Sim, glifos Unicode!
fonte
Python, 1074 bytes
Ok, gastamos muitos bytes (e tempo) obtendo caminhos razoáveis para o trabalho.
Faz bons caminhos, no entanto:
e
fonte