Introdução
O mapa de Baker é um sistema dinâmico importante que exibe comportamento caótico. É uma função do quadrado da unidade para ela própria definida intuitivamente da seguinte forma.
- Corte o quadrado verticalmente ao meio, resultando em dois retângulos de tamanho
0.5×1
. - Empilhe a metade direita na parte superior esquerda, resultando em um retângulo de tamanho
0.5×2
- Comprima o retângulo novamente em um
1×1
quadrado.
Nesse desafio, você implementará uma versão discreta dessa transformação.
Entrada e saída
Sua entrada é uma matriz 2D de caracteres ASCII imprimíveis e espaço em branco 2m×2n
para alguns m, n > 0
. Sua saída é uma matriz semelhante obtida da seguinte forma, usando a 6×4
matriz
ABCDEF
GHIJKL
MNOPQR
STUVWX
como um exemplo. Primeiro, empilhe a metade direita da matriz na parte superior esquerda:
DEF
JKL
PQR
VWX
ABC
GHI
MNO
STU
Em seguida, divida as colunas em pares de caracteres e gire cada par independentemente 90 graus no sentido horário, "compactando" o retângulo alto de volta à forma original:
JDKELF
VPWQXR
GAHBIC
SMTNUO
Esta é a saída correta para a matriz acima.
Regras
Os formatos de entrada e saída são flexíveis. Você pode usar cadeias delimitadas por nova linha, listas de cadeias ou matrizes 2D de caracteres. No entanto, a entrada e a saída devem ter exatamente o mesmo formato: você deve poder repetir o envio várias vezes em qualquer entrada válida.
Você pode escrever um programa completo ou uma função. A contagem de bytes mais baixa vence e as brechas padrão não são permitidas.
Casos de teste
Input:
12
34
Output:
42
31
Input:
Hell
! o
d -
lroW
Output:
lol
o W-
!H e
ldr
Input:
ABCDEF
GHIJKL
MNOPQR
STUVWX
Output:
JDKELF
VPWQXR
GAHBIC
SMTNUO
Input:
*___ ___ o
o|__) |__) *
*| | o
o __ __ *
*| | _ o
o|__ |__| *
Output:
|_____) *o
|_ _ *o
||_ __| *o
o*|_____)
o* |_ _
o*||_ _
c2k
vez deck/lk2
.c2k
divide a string em duas partes iguais.Julia, 136 bytes
Uma implementação muito simples. Não é uma entrada particularmente competitiva, mas foi divertido!
Isso cria uma função lambda que aceita uma matriz bidimensional como entrada e retorna uma matriz bidimensional transformada.
Ungolfed + explicação:
Para chamá-lo, dê um nome à função, por exemplo
f=A->(...)
.Exemplo de saída:
E prova de que pode ser arbitrariamente encadeada:
As sugestões são bem-vindas, como sempre, e ficarei feliz em fornecer mais explicações.
fonte
CJam,
2524 bytesImplementação direta de especificações. Explicação:
Experimente online aqui
fonte
JavaScript (ES6), 104
141Editar Revisando as especificações, descobri que o número de linhas deve ser uniforme (eu já havia perdido isso antes). Portanto, não é muito complicado encontrar a posição de origem correta para cada caractere na saída em uma única etapa.
Teste no console Firefox / FireBug
Resultado
fonte
J,
4539 bytesJ tem uma função de mosaico (corte
;.
) que ajuda muito.fonte
Haskell,
128127 bytesUso:
f ["12", "34"]
->["42","31"]
Como funciona:
Edit: @Zgarb encontrou um byte para salvar.
fonte
g x=x
o caso de lista vazio.GNU sed -r, 179 bytes
A pontuação inclui +1 para o
-r
argumento sed.Demorei um pouco para descobrir como fazer isso
sed
, mas acho que tenho agora:Observe que todo o espaço em branco acima deve ter tabcaracteres únicos . Os comentários não estão incluídos na pontuação do golfe.
Observe também que isso faz uso extensivo de
:
caracteres marcador. Se o fluxo de entrada contiver:
, o comportamento indefinido será seguido. Isso pode ser atenuado, substituindo-se todos:
por algum caractere não imprimível (por exemplo, BEL), sem nenhum custo para a pontuação do golfe.Entrada e saída é uma lista de seqüências de caracteres separada por tabulação:
fonte
J,
3332 caracteresUm verbo monádico.
Explicação
Vamos começar definindo
Y
ser nossa entrada de amostra.A primeira parte (
-:@#@{. (}. ,. {.) |:
) se divideY
ao meio e acrescenta e termina:Na segunda parte (
_2 |.\"1
), dividimos isso em pares de dois e os revertemos:Finalmente (
0 2 ,.@|:
), transpomos a matriz conforme necessário e descartamos o eixo à direita:Toda a expressão com espaço em branco inserido:
E como um verbo explícito:
fonte