O Viajante O
O mundo é uma matriz de cinco por cinco células. Envolve por todos os lados. Pode ser visualizado como ...
Você é um O. Você gosta de viajar pelo mundo e o faz de acordo com as seguintes regras (seja C o dia atual):
Nos dias nobres , você se sente nostálgico. Volte para onde você começou ontem.
Em dias ímpares , você sente saudades de casa. Mova um passo horizontal para mais perto de casa, se possível, e um passo vertical para mais perto de casa, se possível. Ignore a quebra do mundo com a finalidade de determinar a proximidade.
Em dias pares , você se sente aventureiro. Mova C / 2 passos para o sul.
Em dias quadrados , você se sente aventureiro. Mover para a parede leste.
Nos dias de Fibonacci , o mundo se expande para o sul em uma linha.
Em dias triangulares , o mundo se expande para o leste em uma coluna.
Se duas ou mais das regras acima se aplicarem ao mesmo tempo, aplique-as na ordem listada. Por exemplo, em um dia nobre ímpar, volte primeiro para onde você começou ontem e depois dê um passo mais perto de casa.
Você mora no centro do mundo (inicial), ou seja, posição (2,2), indexada a zero a partir do canto noroeste. Você começa sua jornada lá no primeiro dia.
Um único inteiro, N.
Suas coordenadas X e Y no nono dia, indexadas a zero no canto noroeste, separadas por um único espaço.
Caso de teste com explicação
Dada uma entrada de 3, a saída correta é:
Podemos trabalhar com isso um dia de cada vez. A partir do dia 1, precisamos aplicar os seguintes movimentos:
Ímpar, quadrado, Fibonacci e triangular
Prime, even e Fibonacci
Prime, ímpar, Fibonacci e triangular
Na forma visual:
XXXXX XXXXXX XXXXXX XXXXXXX
XXOXX -> XXXXOX -> XXXXXX -> XXXOXXX
XXXXX XXXXXX XXOXXX XXXXXXX
Casos de teste adicionais
Cortesia de Martin Büttner 's solução de referência (por favor note que você deve saída de apenas uma única coordenada, não todos eles):
Isso é código de golfe. A finalização mais curta vence.
Eu preciso fazer isso em O!
Pitão, 157 156 153 bytes
Você pode experimentá-lo aqui.
Este foi um problema divertido para o golfe! Ainda estou me acostumando com Pyth, mas é realmente uma ótima linguagem.
Bem-vindo ao Pyth! Um golfe que vejo imediatamente: se você quiser fazer uma lista / tupla de 2 elementos, use ,- é para isso que serve.
Há mais lugar para isso golfe thoughout o código - (G%+H/N2b), (GH), (tZH).
Definitivamente, pode ser otimizado e também depois de verificar rapidamente a exatidão parece que estou obtendo resultados diferentes dos publicados. Voltarei e verificarei mais detalhadamente meu código quando tiver mais tempo ^^
Belo problema por sinal!
EDIT: editei minha solução levando em consideração os preciosos conselhos dados pelo Zgarb . Agora funciona perfeitamente!
EDIT2: graças ao nimi , tornei o código ainda menor. Agora, também estou fazendo as verificações de pares e ímpares em uma função, em vez de duas, que diminuem a contagem de 446 para 414 bytes.
EDIT3: aprimorado ainda mais de 414 a 400 bytes. Obrigado nimi por mais 2 bytes, você está pegando fogo! :)
EDIT4: mais 4 bytes por nimi :)
Bem-vindo ao PPCG! Algumas dicas rápidas: 0<1é mais curto que otherwisee 0/=mod x ypode ser reduzido para 0<mod x y. Além disso, 1==mod(d)2é odd de 0==mod(d)2é even d.
— Zgarb 3/11
@ Zgarb truques agradáveis, eu sou realmente muito novo em toda essa coisa de código de golfe. Como funciona, em 0<1vez de otherwisetrabalhar?
Além disso, acho que sua definição de números triangulares está errada (suponho que esteja na função t), pois elem d[1..div(d*d-d)2]é verdade para todos d > 2.