Objetivo
O objetivo do programa é desenhar um retângulo de arte ASCII dobrado de tamanho repetidamente, alternando horizontal e verticalmente. Cada vez que o retângulo dobra de tamanho, a área extra é representada por um caractere diferente e as áreas anteriores permanecem inalteradas. As duas seções menores contêm um caractere cada e podem estar em qualquer canto.
O programa aceita um único número inteiro como entrada, definindo o número de seções que o retângulo completo contém.
Nenhum outro recurso ou entrada externa é permitido.
Entrada e saída de amostra
10
ABDDFFFFHHHHHHHHJJJJJJJJJJJJJJJJ
CCDDFFFFHHHHHHHHJJJJJJJJJJJJJJJJ
EEEEFFFFHHHHHHHHJJJJJJJJJJJJJJJJ
EEEEFFFFHHHHHHHHJJJJJJJJJJJJJJJJ
GGGGGGGGHHHHHHHHJJJJJJJJJJJJJJJJ
GGGGGGGGHHHHHHHHJJJJJJJJJJJJJJJJ
GGGGGGGGHHHHHHHHJJJJJJJJJJJJJJJJ
GGGGGGGGHHHHHHHHJJJJJJJJJJJJJJJJ
IIIIIIIIIIIIIIIIJJJJJJJJJJJJJJJJ
IIIIIIIIIIIIIIIIJJJJJJJJJJJJJJJJ
IIIIIIIIIIIIIIIIJJJJJJJJJJJJJJJJ
IIIIIIIIIIIIIIIIJJJJJJJJJJJJJJJJ
IIIIIIIIIIIIIIIIJJJJJJJJJJJJJJJJ
IIIIIIIIIIIIIIIIJJJJJJJJJJJJJJJJ
IIIIIIIIIIIIIIIIJJJJJJJJJJJJJJJJ
IIIIIIIIIIIIIIIIJJJJJJJJJJJJJJJJ
Critério de seleção
O código mais curto em uma semana ganha os pontos.
Respostas:
APL, 25 caracteres / bytes *
Vista expandida
Exemplos
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
*: APL pode ser escrito na sua própria (legado) de conjunto de caracteres de byte único que mapeia símbolos APL para os 128 valores de bytes superiores. Portanto, para fins de pontuação, um programa de N caracteres que usa apenas caracteres ASCII e símbolos APL pode ser considerado como N bytes.
fonte
GolfScript, 30 caracteres
Exemplo (executado on-line ):
fonte
Python 2.7 - 85
103Isso usa a
zip(*s)
sintaxe para transpor continuamente a lista. Muito obrigado a Daniel pela dica que fez 12 caracteres! Em seguida, raspou mais alguns usando números em vez de letras.Além disso, isso usa, em
1<<x
vez de a2**x
troca de bits, ter menor (?) Precedência. Observar:E alguma saída:
fonte
for i in s:print''.join(i)
.Ruby, 88
Lê N da entrada padrão.
Exemplo de uso para N = 8:
Resultado:
N = 10
Resultado:
fonte
J,
5743Exemplos:
fonte
MATLAB, 86 caracteres
Minha tentativa mais curta no MATLAB, marcada por @flawr (duas vezes!):
Exemplo de saída:
fonte
function M=f(n) M=''; if n M=cat(mod(n,2)+1,f(n-1),64+n*ones(2.^fix([n-1,n-2]/2))); end
fix
comfix(n/2-[.5,1])
PS: solução muito agradável comcat
, não sabia sobre esse uso, onde pode escolher a dimensão =)q [73 caracteres]
exemplo
fonte
Sclipting , 59 caracteres
(Esse programa poderia ser um pouco mais curto se eu tivesse instruções para o logaritmo da base 2, mas não o faço, então faço isso manualmente com um loop.)
Código anotado
n
é a entrada.Resultado
Para
n
= 6:Claro que você pode mudar
뀀
(@
) para qualquer outro caractere base, por exemplo, com글
(espaço) en
= 7:O número mais alto que não torna o programa mais longo é
믰
(= 255), o que nos dá (n
= 8 desta vez):Se aumentarmos o caractere do programa 1, por exemplo, use
냟및
(=\u4DFF
) en
= 9, obtemos:fonte
C #,
239185182180 bytesC # não tem nada nos idiomas menos detalhados.
Saída, caracteres escolhidos para a beleza:
fonte
for
loop, tornando 182.PERL, 122 caracteres
com espaço em branco adicionado:
Resultado:
fonte
PERL,
9481 caracteresEle constrói o fractal iterativamente letra por letra, adicionando novas linhas e colunas e linhas e colunas ... Utiliza operações simples de string para fazer isso. Observe que estou abusando da variável padrão em vez da letra um para permitir o açúcar da sintaxe (como omitir espaços -
$:x2
etc.)Com espaço em branco e comentários adicionados:
Alguma saída:
fonte
Sclipting , 45 caracteres
Esta solução funciona de maneira completamente diferente da outra solução Sclipting. É muito mais chato, mas é mais curto ...
Anotado
fonte
Delphi 348 || 449 com travessão
Sem recuo
Com recuo
fonte
CJam, 30 (23) bytes
O CJam é alguns meses mais novo que esse desafio, portanto não é elegível para a marca de seleção verde.
Teste aqui.
O OP esclareceu em um comentário que qualquer conjunto de caracteres imprimíveis exclusivos é permitido, por isso estou pegando os caracteres ASCII imprimíveis desde o início (com um espaço no canto,
!
próximo e assim por diante).Se a orientação pode mudar entre entradas pares e ímpares (o que eu não acho, mas é o que o envio do GolfScript faz), posso fazê-lo em 25 bytes:
A idéia é realmente simples: comece com uma grade contendo um espaço e, em seguida, N-1 transponha-a e dobre todas as linhas com o próximo caractere.
Para a versão longa, no final, também transponho N-1 novamente, a fim de garantir uma orientação consistente.
fonte