Tarefa:
Sua tarefa é criar um programa que, quando for fornecido um número de fios e um número de iterações de uma trança, dirá aonde cada fio vai. As regras são as seguintes:
- O número de fios será sempre ímpar e entre 3 e 6000 (inclusive)
- Quando você inicia, os fios são divididos em 2 (quase) cachos iguais, oe
left
oright
. Oleft
terá mais um fio quando você iniciar.
Para uma entrada de 7:
/ / / / \ \ \
1 2 3 4 5 6 7
- A cada iteração, o fio mais externo do lado com mais fios será colocado no centro, na direção oposta. O centro é definida como entre cadeias opostas de frente para:
////middle\\\
.
1 iteração da entrada 7 (a linha 1 foi movida para o centro):
/ / / \ \ \ \
2 3 4 1 5 6 7
Exemplo:
Entrada:
3 4
Computações:
1 2 3
\
2 1 3
/
2 3 1
\
3 2 1
/
3 1 2
Resultado:
3 1 2
Regras:
- Você não precisa exibir as barras para a direção do fio, apenas os números.
- Você só precisa exibir os números após a última iteração.
- Sua saída será identificações dos fios delimitadas por espaço
- A entrada estará no formato:
strands [space] iterations
- O número de fios será sempre ímpar e 3 <= x <= 6000
- Isso é código-golfe , então o código mais curto vence!
11 2
seria2345611178910
?123 -> 213 -> 231 -> 321 -> 312
.Respostas:
GolfScript, 33 caracteres
A entrada deve ser fornecida no stdin.
Exemplos (você pode testar online ):
fonte
Python: 179
240, 152 caracteresPrimeiro, o 179
Para
N
vertentes ei
iterações, esta resposta usaO(1)
espaço eO(N)
tempo. Simplesmente calculo a posição final de cada fio, nunca repetindo as posições intermediárias!grande edição: alterou esta resposta com a alteração de condições para álgebra booleana. Também escrevi uma longa explicação de como funciona. TL; DR: padrões de fórmula, divisão de módulos.
Agora o 152
Este é um python mais razoavelmente golfe. (editar: agradecimentos a Alex Thornton pela edição de 165 a 152)
fonte
l
ev
variáveis e mudando oinsert
a uma atribuição de fatia.Python 2 (109) / Python 3 (121)
Python 2
Python 3
O código deve ter sido subornado pelo Python 2 para mostrar suas vantagens de golfe em relação ao Python 3: intervalos sendo listas, divisão arredondada para int, impressão não iniciando uma nova linha. O estranho
0-i%2
é porque-i%2
avalia como(-i)%2
.Provavelmente existe uma abordagem mais eficiente do que a iteração, ou seja, computar cada resultado final diretamente. A operação de trança tem um período de 2 * s, por isso não pode ser tão complicado.
fonte
Ruby, 105
Apenas muita manipulação de cenários. Empurre, pop, reverter e mudar! Tentei não converter entradas em números inteiros, mas adicionei cerca de 20 caracteres.
l
er
(left
eright
) são as filas "encadeadas".right
é invertida, então começamos a puxar por fora.t
ef
(to
efrom
) começam comoright
eleft
, respectivamente, mas à medida que avançamos, continuamos trocando-os para que possamos sempre mudar o último "encadeamento" defrom
e pressioná-lo parato
(f,t=t<<f.shift,f
). Isso economiza muito espaço.Então nós apenas revertemos
right
no final.Changelog:
2,2 105 oh sim, o mapa pode levar um proc
2.1 108 E, na verdade, basta inverter as coisas como parte da manipulação.
2.0 116 não usa essa matriz temporária. Em vez disso, use duas variáveis de ponteiro que podemos manipular e continuar apontando novamente. Em seguida, apenas exiba o final
1.0 123 ideia inicial
fonte
Java, 270 caracteres
golfed:
sem golfe:
Executar online
fonte