O mundo é uma matriz de cinco por cinco células. Envolve por todos os lados. Pode ser visualizado como ...
XXXXX XXXXX XXOXX XXXXX XXXXX
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.
Entrada
Um único inteiro, N.
Saída
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 é:
2 3
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:
Dia 1 Dia 2 Dia 3 XXXXX XXXXXX XXXXXX XXXXXXX XXXXX XXXXXX XXXXXX XXXXXXX XXOXX -> XXXXOX -> XXXXXX -> XXXOXXX XXXXX XXXXXX XXOXXX XXXXXXX XXXXX XXXXXX XXXXXX XXXXXXX XXXXXX XXXXXX XXXXXXX XXXXXX XXXXXXX 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):
Input: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
Output: 4 2 2 3 3 2 6 4 2 2 2 5 2 2 2 6 7 5 7 0 6 4 6 0 5 3 5 10 4 9 9 6 3 8 3 6 2 7 2 6 2 5 2 4 2 4
Isso é código de golfe. A finalização mais curta vence.
Respostas:
Pitão,
157156153 bytesVocê pode experimentá-lo aqui.
Este foi um problema divertido para o golfe! Ainda estou me acostumando com Pyth, mas é realmente uma ótima linguagem.
fonte
,
- é para isso que serve.(G%+H/N2b)
,(GH)
,(tZH)
.Haskell, 394 bytes
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 :)
fonte
0<1
é mais curto queotherwise
e0/=mod x y
pode ser reduzido para0<mod x y
. Além disso,1==mod(d)2
éodd d
e0==mod(d)2
éeven d
.0<1
vez deotherwise
trabalhar?t
), poiselem d[1..div(d*d-d)2]
é verdade para todosd > 2
.otherwise
é apenas outro nome paraTrue
.C,
425396 bytesExistem partes que podem ser melhoradas, mas funciona para os casos de teste .
Explicação
fonte
Perl 5, 284 bytes
283 bytes, mais 1 para
-E
sinalizador em vez de-e
Mesmo código, mas com mais espaço em branco, mais parênteses e nomes de variáveis mais longos:
Estou confiante de que isso pode ser jogado ainda mais.
fonte
Javascript,
361359 bytesO código usa a atribuição de Reestruturação . É suportado apenas no Firefox e Safari no momento.
Explicação
fonte