Qualquer hexágono regular pode ser revestido com diamantes, por exemplo:
______
/_/_/\_\
/_/\_\/\_\
/\_\/_/\/_/\
\/_/\_\/_/\/
\_\/_/\_\/
\_\_\/_/
Consideraremos o tamanho acima de um ladrilho 1
(já que os lados dos diamantes são feitos de um /
ou de \
cada). O mesmo tamanho do tamanho 2
seria semelhante a:
____________
/ / /\ \
/___/___/ \___\
/ /\ \ /\ \
/___/ \___\/ \___\
/\ \ / /\ / /\
/ \___\/___/ \/___/ \
\ / /\ \ / /\ /
\/___/ \___\/___/ \/
\ \ / /\ \ /
\___\/___/ \___\/
\ \ \ / /
\___\___\/___/
Sua tarefa é receber uma peça de arte ASCII (de tamanho 1
) como entrada, juntamente com um número inteiro positivo N
(em decimal ou unário), especificando o tamanho da saída desejada. Em seguida, você deve produzir uma versão ampliada do mesmo lado a lado.
Observe que o hexágono pode ser de qualquer tamanho e tão pequeno quanto 1x1x1 (contendo três diamantes).
Nem a entrada nem a saída devem conter espaços à direita, nem mais espaços à esquerda do que o necessário para alinhar a forma do hexágono. Opcionalmente, entrada e saída podem conter uma nova linha final à direita (essa opção não precisa ser a mesma para entrada e saída).
Você pode escrever um programa ou função, recebendo entrada via STDIN (ou alternativa mais próxima), argumento da linha de comando ou argumento da função e emitindo o resultado via STDOUT (ou alternativa mais próxima), valor de retorno da função ou parâmetro da função (saída).
Isso é código de golfe, então a resposta mais curta (em bytes) em vitórias.
Exemplo de inclinações
Aqui estão algumas sugestões de sugestões que você pode usar para testar seu envio.
__
/_/\
\_\/
____
/_/\_\
/\_\/_/\
\/_/\_\/
\_\/_/
______
/_/_/\_\
/_/\_\/\_\
/\_\/_/\/_/\
\/_/\_\/_/\/
\_\/_/\_\/
\_\_\/_/
________
/_/\_\_\_\
/\_\/\_\_\_\
/\/_/\/_/_/\_\
/\/\_\/_/_/\/\_\
\/\/_/\_\_\/\/_/
\/\_\/_/\_\/_/
\/\_\_\/_/_/
\/_/_/_/_/
O seguinte fragmento contém as saídas para as entradas correspondentes N = 1
através N = 6
.
__
/_/\
\_\/
____
/ /\
/___/ \
\ \ /
\___\/
______
/ /\
/ / \
/_____/ \
\ \ /
\ \ /
\_____\/
________
/ /\
/ / \
/ / \
/_______/ \
\ \ /
\ \ /
\ \ /
\_______\/
__________
/ /\
/ / \
/ / \
/ / \
/_________/ \
\ \ /
\ \ /
\ \ /
\ \ /
\_________\/
____________
/ /\
/ / \
/ / \
/ / \
/ / \
/___________/ \
\ \ /
\ \ /
\ \ /
\ \ /
\ \ /
\___________\/
____
/_/\_\
/\_\/_/\
\/_/\_\/
\_\/_/
________
/ /\ \
/___/ \___\
/\ \ / /\
/ \___\/___/ \
\ / /\ \ /
\/___/ \___\/
\ \ / /
\___\/___/
____________
/ /\ \
/ / \ \
/_____/ \_____\
/\ \ / /\
/ \ \ / / \
/ \_____\/_____/ \
\ / /\ \ /
\ / / \ \ /
\/_____/ \_____\/
\ \ / /
\ \ / /
\_____\/_____/
________________
/ /\ \
/ / \ \
/ / \ \
/_______/ \_______\
/\ \ / /\
/ \ \ / / \
/ \ \ / / \
/ \_______\/_______/ \
\ / /\ \ /
\ / / \ \ /
\ / / \ \ /
\/_______/ \_______\/
\ \ / /
\ \ / /
\ \ / /
\_______\/_______/
____________________
/ /\ \
/ / \ \
/ / \ \
/ / \ \
/_________/ \_________\
/\ \ / /\
/ \ \ / / \
/ \ \ / / \
/ \ \ / / \
/ \_________\/_________/ \
\ / /\ \ /
\ / / \ \ /
\ / / \ \ /
\ / / \ \ /
\/_________/ \_________\/
\ \ / /
\ \ / /
\ \ / /
\ \ / /
\_________\/_________/
________________________
/ /\ \
/ / \ \
/ / \ \
/ / \ \
/ / \ \
/___________/ \___________\
/\ \ / /\
/ \ \ / / \
/ \ \ / / \
/ \ \ / / \
/ \ \ / / \
/ \___________\/___________/ \
\ / /\ \ /
\ / / \ \ /
\ / / \ \ /
\ / / \ \ /
\ / / \ \ /
\/___________/ \___________\/
\ \ / /
\ \ / /
\ \ / /
\ \ / /
\ \ / /
\___________\/___________/
______
/_/_/\_\
/_/\_\/\_\
/\_\/_/\/_/\
\/_/\_\/_/\/
\_\/_/\_\/
\_\_\/_/
____________
/ / /\ \
/___/___/ \___\
/ /\ \ /\ \
/___/ \___\/ \___\
/\ \ / /\ / /\
/ \___\/___/ \/___/ \
\ / /\ \ / /\ /
\/___/ \___\/___/ \/
\ \ / /\ \ /
\___\/___/ \___\/
\ \ \ / /
\___\___\/___/
__________________
/ / /\ \
/ / / \ \
/_____/_____/ \_____\
/ /\ \ /\ \
/ / \ \ / \ \
/_____/ \_____\/ \_____\
/\ \ / /\ / /\
/ \ \ / / \ / / \
/ \_____\/_____/ \/_____/ \
\ / /\ \ / /\ /
\ / / \ \ / / \ /
\/_____/ \_____\/_____/ \/
\ \ / /\ \ /
\ \ / / \ \ /
\_____\/_____/ \_____\/
\ \ \ / /
\ \ \ / /
\_____\_____\/_____/
________________________
/ / /\ \
/ / / \ \
/ / / \ \
/_______/_______/ \_______\
/ /\ \ /\ \
/ / \ \ / \ \
/ / \ \ / \ \
/_______/ \_______\/ \_______\
/\ \ / /\ / /\
/ \ \ / / \ / / \
/ \ \ / / \ / / \
/ \_______\/_______/ \/_______/ \
\ / /\ \ / /\ /
\ / / \ \ / / \ /
\ / / \ \ / / \ /
\/_______/ \_______\/_______/ \/
\ \ / /\ \ /
\ \ / / \ \ /
\ \ / / \ \ /
\_______\/_______/ \_______\/
\ \ \ / /
\ \ \ / /
\ \ \ / /
\_______\_______\/_______/
______________________________
/ / /\ \
/ / / \ \
/ / / \ \
/ / / \ \
/_________/_________/ \_________\
/ /\ \ /\ \
/ / \ \ / \ \
/ / \ \ / \ \
/ / \ \ / \ \
/_________/ \_________\/ \_________\
/\ \ / /\ / /\
/ \ \ / / \ / / \
/ \ \ / / \ / / \
/ \ \ / / \ / / \
/ \_________\/_________/ \/_________/ \
\ / /\ \ / /\ /
\ / / \ \ / / \ /
\ / / \ \ / / \ /
\ / / \ \ / / \ /
\/_________/ \_________\/_________/ \/
\ \ / /\ \ /
\ \ / / \ \ /
\ \ / / \ \ /
\ \ / / \ \ /
\_________\/_________/ \_________\/
\ \ \ / /
\ \ \ / /
\ \ \ / /
\ \ \ / /
\_________\_________\/_________/
____________________________________
/ / /\ \
/ / / \ \
/ / / \ \
/ / / \ \
/ / / \ \
/___________/___________/ \___________\
/ /\ \ /\ \
/ / \ \ / \ \
/ / \ \ / \ \
/ / \ \ / \ \
/ / \ \ / \ \
/___________/ \___________\/ \___________\
/\ \ / /\ / /\
/ \ \ / / \ / / \
/ \ \ / / \ / / \
/ \ \ / / \ / / \
/ \ \ / / \ / / \
/ \___________\/___________/ \/___________/ \
\ / /\ \ / /\ /
\ / / \ \ / / \ /
\ / / \ \ / / \ /
\ / / \ \ / / \ /
\ / / \ \ / / \ /
\/___________/ \___________\/___________/ \/
\ \ / /\ \ /
\ \ / / \ \ /
\ \ / / \ \ /
\ \ / / \ \ /
\ \ / / \ \ /
\___________\/___________/ \___________\/
\ \ \ / /
\ \ \ / /
\ \ \ / /
\ \ \ / /
\ \ \ / /
\___________\___________\/___________/
________
/_/\_\_\_\
/\_\/\_\_\_\
/\/_/\/_/_/\_\
/\/\_\/_/_/\/\_\
\/\/_/\_\_\/\/_/
\/\_\/_/\_\/_/
\/\_\_\/_/_/
\/_/_/_/_/
________________
/ /\ \ \ \
/___/ \___\___\___\
/\ \ /\ \ \ \
/ \___\/ \___\___\___\
/\ / /\ / / /\ \
/ \/___/ \/___/___/ \___\
/\ /\ \ / / /\ /\ \
/ \/ \___\/___/___/ \/ \___\
\ /\ / /\ \ \ /\ / /
\/ \/___/ \___\___\/ \/___/
\ /\ \ / /\ \ / /
\/ \___\/___/ \___\/___/
\ /\ \ \ / / /
\/ \___\___\/___/___/
\ / / / / /
\/___/___/___/___/
________________________
/ /\ \ \ \
/ / \ \ \ \
/_____/ \_____\_____\_____\
/\ \ /\ \ \ \
/ \ \ / \ \ \ \
/ \_____\/ \_____\_____\_____\
/\ / /\ / / /\ \
/ \ / / \ / / / \ \
/ \/_____/ \/_____/_____/ \_____\
/\ /\ \ / / /\ /\ \
/ \ / \ \ / / / \ / \ \
/ \/ \_____\/_____/_____/ \/ \_____\
\ /\ / /\ \ \ /\ / /
\ / \ / / \ \ \ / \ / /
\/ \/_____/ \_____\_____\/ \/_____/
\ /\ \ / /\ \ / /
\ / \ \ / / \ \ / /
\/ \_____\/_____/ \_____\/_____/
\ /\ \ \ / / /
\ / \ \ \ / / /
\/ \_____\_____\/_____/_____/
\ / / / / /
\ / / / / /
\/_____/_____/_____/_____/
________________________________
/ /\ \ \ \
/ / \ \ \ \
/ / \ \ \ \
/_______/ \_______\_______\_______\
/\ \ /\ \ \ \
/ \ \ / \ \ \ \
/ \ \ / \ \ \ \
/ \_______\/ \_______\_______\_______\
/\ / /\ / / /\ \
/ \ / / \ / / / \ \
/ \ / / \ / / / \ \
/ \/_______/ \/_______/_______/ \_______\
/\ /\ \ / / /\ /\ \
/ \ / \ \ / / / \ / \ \
/ \ / \ \ / / / \ / \ \
/ \/ \_______\/_______/_______/ \/ \_______\
\ /\ / /\ \ \ /\ / /
\ / \ / / \ \ \ / \ / /
\ / \ / / \ \ \ / \ / /
\/ \/_______/ \_______\_______\/ \/_______/
\ /\ \ / /\ \ / /
\ / \ \ / / \ \ / /
\ / \ \ / / \ \ / /
\/ \_______\/_______/ \_______\/_______/
\ /\ \ \ / / /
\ / \ \ \ / / /
\ / \ \ \ / / /
\/ \_______\_______\/_______/_______/
\ / / / / /
\ / / / / /
\ / / / / /
\/_______/_______/_______/_______/
________________________________________
/ /\ \ \ \
/ / \ \ \ \
/ / \ \ \ \
/ / \ \ \ \
/_________/ \_________\_________\_________\
/\ \ /\ \ \ \
/ \ \ / \ \ \ \
/ \ \ / \ \ \ \
/ \ \ / \ \ \ \
/ \_________\/ \_________\_________\_________\
/\ / /\ / / /\ \
/ \ / / \ / / / \ \
/ \ / / \ / / / \ \
/ \ / / \ / / / \ \
/ \/_________/ \/_________/_________/ \_________\
/\ /\ \ / / /\ /\ \
/ \ / \ \ / / / \ / \ \
/ \ / \ \ / / / \ / \ \
/ \ / \ \ / / / \ / \ \
/ \/ \_________\/_________/_________/ \/ \_________\
\ /\ / /\ \ \ /\ / /
\ / \ / / \ \ \ / \ / /
\ / \ / / \ \ \ / \ / /
\ / \ / / \ \ \ / \ / /
\/ \/_________/ \_________\_________\/ \/_________/
\ /\ \ / /\ \ / /
\ / \ \ / / \ \ / /
\ / \ \ / / \ \ / /
\ / \ \ / / \ \ / /
\/ \_________\/_________/ \_________\/_________/
\ /\ \ \ / / /
\ / \ \ \ / / /
\ / \ \ \ / / /
\ / \ \ \ / / /
\/ \_________\_________\/_________/_________/
\ / / / / /
\ / / / / /
\ / / / / /
\ / / / / /
\/_________/_________/_________/_________/
________________________________________________
/ /\ \ \ \
/ / \ \ \ \
/ / \ \ \ \
/ / \ \ \ \
/ / \ \ \ \
/___________/ \___________\___________\___________\
/\ \ /\ \ \ \
/ \ \ / \ \ \ \
/ \ \ / \ \ \ \
/ \ \ / \ \ \ \
/ \ \ / \ \ \ \
/ \___________\/ \___________\___________\___________\
/\ / /\ / / /\ \
/ \ / / \ / / / \ \
/ \ / / \ / / / \ \
/ \ / / \ / / / \ \
/ \ / / \ / / / \ \
/ \/___________/ \/___________/___________/ \___________\
/\ /\ \ / / /\ /\ \
/ \ / \ \ / / / \ / \ \
/ \ / \ \ / / / \ / \ \
/ \ / \ \ / / / \ / \ \
/ \ / \ \ / / / \ / \ \
/ \/ \___________\/___________/___________/ \/ \___________\
\ /\ / /\ \ \ /\ / /
\ / \ / / \ \ \ / \ / /
\ / \ / / \ \ \ / \ / /
\ / \ / / \ \ \ / \ / /
\ / \ / / \ \ \ / \ / /
\/ \/___________/ \___________\___________\/ \/___________/
\ /\ \ / /\ \ / /
\ / \ \ / / \ \ / /
\ / \ \ / / \ \ / /
\ / \ \ / / \ \ / /
\ / \ \ / / \ \ / /
\/ \___________\/___________/ \___________\/___________/
\ /\ \ \ / / /
\ / \ \ \ / / /
\ / \ \ \ / / /
\ / \ \ \ / / /
\ / \ \ \ / / /
\/ \___________\___________\/___________/___________/
\ / / / / /
\ / / / / /
\ / / / / /
\ / / / / /
\ / / / / /
\/___________/___________/___________/___________/
N-1
linhas vazias à esquerda. :(Respostas:
CJam,
85797672 bytesO tamanho deve estar na primeira linha. E o diamante segue.
Não jogou muito bem ... E metade dos personagens veio dos detalhes.
Explicações (da versão anterior)
fonte
Python 2, 164
Saída em casos de teste.
Então, o que está acontecendo aqui?
A idéia principal é que cada personagem no original exploda em um
n*n
bloco. Por exemplo, para n = 4,/
pode se tornarO caractere original aparece uma vez em cada linha e há preenchimento para ambos os lados. Aqui, está
à esquerda
e
_
à direita. Somente a linha inferior pode ser preenchida'_'
; o resto é sempre' '
.A principal dificuldade é que o preenchimento à direita pode depender do próximo símbolo. Especificamente,
'/ '
tem preenchimento diferente de'/_'
, portanto, precisamos de um olhar à frente. Além disso, para evitar espaços à direita, teríamos que observar que estamos no último símbolo e evitamos o preenchimento à direita.Superamos esses dois problemas apenas preenchendo a esquerda do personagem atual. Quando fazemos isso, também executamos o preenchimento à direita do caractere anterior usando o símbolo de preenchimento atual. Portanto, imprimimos o preenchimento à direita devido ao caractere anterior, o preenchimento à esquerda do caractere atual e o caractere atual. Também armazenamos a quantidade de "dívida" de preenchimento que o próximo caractere precisará pagar.
Agora vamos revisar o código.
A sequência de entrada é
s
e o fator de escala én
. Vamos linha por linha,n
linhas de impressão para cada linha de entradaW
, com as cópias indexadasj=n,n-1,...,2,1
. A primeira linha é copiada apenas uma vez, o que é possível ao inicializarj
em 1, mas alterando-a paran
cada loop.Nós iteramos pela linha de entrada, acumulando a linha para imprimir
O
. Primeiro, descobrimos o caractere de preenchimento apropriadoq
, que é um sublinhado se estivermos na linha inferior e se o caractere atual ou anterior é um sublinhado e, de outra forma, um espaço.Depois, decidimos a quantidade de preenchimento a colocar à esquerda (
e
). Para/
, éj-1
(diminuindo com o número decrescente de cópias de linha) e o complementarn-j
para\
. Tratamos outros personagens da mesma maneira. Por exemplo, embora_
pareça dar uma linha den
sublinhados, na verdade, ele fornece um único sublinhado, preenchido por sublinhados à esquerda e à direita. Isto parece ineficiente, mas nos permite trabalha com_
eno mesmo quadro
/
e\
A posição do sublinhado "central" não importa, por isso, fixo-lo ecom
\
; essa escolha também faz com que a linha superior funcione sem revestimento especial.Em seguida, adicionamos à string de saída. Descobrimos o símbolo do preenchimento
q
e o valor atual do preenchimentoe
, mas também precisamos lembrar a dívidad
do preenchimento do símbolo anterior. Então, adicionamosq*(e+d)
. Em seguida, adicionamos o símbolo atualc
, exceto que precisamos evitar sublinhados em uma linha que não seja inferior, que corrigimos convertendo sublinhados no símbolo de preenchimento.Por fim, registramos o valor da dívida de preenchimento, que é o complemento
n+~d
do valor atual de preenchimento à esquerda. Também registramos o símbolo atual emp
, para que depois possamos saber se o símbolo anterior era_
.fonte
JavaScript ( ES6 ) 274
281 289 338fonte
Python 2,
2172111951941906 bytes graças ao Sp3000.
Ligue
m
com o primeiro argumento sendo o diamante como uma corda, e o segundo argumento com o número de repetição.Isso se baseia em uma sequência de substituição de cadeia de três etapas:
/\
por/ \
, pelo número de espaços intermediários, passando de 2 para 2 * (n-1) sobre as linhas.\/
por\ /
, com o número de espaços intermediários, passando de 2 * (n-1) para 2 acima das linhas.Depois, há uma variedade de mudanças para acertar os espaços principais e acertar a primeira linha.
Observe que a linha final do programa deve ser uma guia, não quatro espaços. O Markdown não suporta guias.
fonte
(i+(n-i+~i)*(d[-1]>f)) --> [i,n+~i][d[-1]>f]
você usa apenas'_'
uma vez e perde um byte ao defini-lo.Python,
272238228243 bytesVersão atualizada, agora usa uma única string como entrada, em vez de uma sequência de strings. Também remove o espaço em branco à direita que estava presente na versão anterior. Infelizmente, essas alterações aumentam o tamanho.
Versão com espaço em branco e instruções divididas em unidades menores para facilitar a leitura:
A abordagem básica aqui é:
N
, gerando uma linha de saída em cada iteração do loop. Há um caso especial para a primeira linha, onde apenas a última linha de saída é gerada, para evitar a geração de linhas vazias no início da saída.N
caracteres, onde:N
espaços.N
espaços para as primeirasN -1
iterações de loop eN
sublinhados para a última iteração de loop.N - 1
espaços ou sublinhados.A parte mais complicada aqui é que o preenchimento de barras / barras invertidas usa espaços ou sublinhados, dependendo do próximo caractere de entrada (para barras) ou anterior (para barras invertidas). Isso não parecia se encaixar bem na estratégia de substituição de cordas.
O que fiz para resolver isso é que primeiro substituo certas combinações de dois caracteres por caracteres diferentes, para que eu possa tratá-las de maneira diferente durante a substituição real. Por exemplo,
/_
é substituído por(_
. Depois disso,(
é efetivamente uma "barra seguida de sublinhado", que pode ser substituída de acordo.Programa principal usado para testar a função:
fonte
n-1-k
én+~k
.rstrip()
mais 9 caracteres. Espero poder fazer melhor, e também encontrei uma maneira de cortar 5 caracteres.sys.stdin
não é um parâmetro de entrada permitido - você precisa manipular a própria string.sys.stdin
-int(sys.argv[1])
lo, mas não os conseguirá de graça, esperando que sejam passados como variáveis (se esse foi um jogo justo, você também pode esperar apelidos pararange
e substituir` e o que mais precisar para ser predefinido) .stdin
e uma lista de seqüências de caracteres são sequências de seqüências.Perl, 132
Entrada combinada STDIN e ARGV. Exemplo:
fonte
Ruby 236
237Teste on-line: http://ideone.com/e6XakQ
Este é o código antes de jogar golfe:
fonte