Escreva um programa que insira as dimensões de uma pintura, a largura de fosco e a largura do quadro para um retrato emoldurado. O programa deve exibir um diagrama usando o símbolo X
para a pintura, +
o tapete e #
o enquadramento. Os símbolos devem ser separados por espaço. O espaço em branco à direita é bom, desde que a saída corresponda visualmente aos critérios. As entradas podem ser 0
.
ENTRADA: 3 2 1 2 (Largura, Altura, Largura Matte, Largura do Quadro)
SAÍDA:
Em forma de texto:
# # # # # # # # #
# # # # # # # # #
# # + + + + + # #
# # + X X X + # #
# # + X X X + # #
# # + + + + + # #
# # # # # # # # #
# # # # # # # # #
O código vencedor completa as condições no mínimo possível de bytes.
Respostas:
Python 2 , 98 bytes
Experimente online!
Imprime uma grade separada por espaço, seguindo rigorosamente as especificações. Estou divertido que
*=
é usado para convertera
eb
de números em seqüências de caracteres.O Python 3 pode salvar alguns bytes evitando
' '.join
, talvez mais, usando strings f e expressões de atribuição. Agradecimentos a Jo King por -2 bytes.Python 3 , 93 bytes
Experimente online!
fonte
JavaScript (ES6),
118 113107 bytesExperimente online!
Comentado
fonte
MATL , 24 bytes
A entrada é: Altura, Largura, Largura fosca, Largura do quadro.
Experimente online!
Explicação
fonte
Wolfram Language (Mathematica) , 142 bytes
Experimente online!
fonte
Carvão ,
484744 bytesExperimente online! Link é a versão detalhada do código. Nota: Espaço à direita. Edit: Agora usa o algoritmo do @ xnor. Explicação:
Insira a largura e a altura e converta-as em strings de
X
s.Faça um loop sobre os caracteres
+
e#
, convertendo-os em cadeias de comprimento fornecidas pelas duas entradas restantes. Em seguida, faça um loop sobre essas duas cordas.Prefixe e sufixe a pintura com as seqüências de caracteres para o acabamento e moldura.
Faça um loop sobre as seqüências de caracteres, utilizando o mínimo de caracteres horizontais e verticais e espaçamento duplo das linhas, imprimindo implicitamente cada linha em sua própria linha.
fonte
05AB1E (legado) / 05AB1E
--no-lazy
,3231 bytesRecebe a entrada na ordem
height, width, matte, frame
. Se a ordem de entrada especificada no desafio for rigorosa (ainda aguardando confirmação do OP), um líders
(swap) poderá ser adicionado por +1 byte.Necessário o
--no-lazy
sinalizador do compilador Elixir na nova versão do 05AB1E, pois o Elixir possui algum comportamento estranho devido a uma avaliação lenta de mapas / loops aninhados ( aqui o resultado sem esse sinalizador ).Experimente online na versão herdada do 05AB1E.
Experimente online na nova versão do 05AB1E com
--no-lazy
sinalizador adicionado .Explicação:
fonte
Geléia , 17 bytes
Experimente online!
Argumento 1:
[Frame width, Matte width]
Argumento 2:
[Width, Height]
fonte
Tela , 24 bytes
Experimente aqui!
Deve ser 5 bytes mais curto, mas não é porque o Canvas é com erros.
fonte
R , 119 bytes
Experimente online!
fonte
Python 3.8 (pré-lançamento) ,
116115113 bytesExperimente online!
A primeira tentativa de jogar golfe será melhorada em breve.
a
é largura,b
é altura,c
é largura fosca ed
é largura do quadro.-1 bytes usando o
:=
operador para definirh
comoe * d
-2 bytes graças a Jo King sugerindo que eu remova os parâmetros eef
EXPLICAÇÃO:
fonte
e
tarefa economiza dois bytes, af
tarefa não economiza nadae
ef
depois de descobrir og
atalhoJavascript, 158 bytes
Provavelmente pode ser aparado um pouco
fonte
Perl 6 , 98 bytes
Experimente online!
Esta é uma porta da resposta Python do xnor .
Perl 6 , 115 bytes
Experimente online!
Código-código anônimo, praticamente golfe, utilizando a atribuição de lista multidimensional do Perl 6. Por exemplo,
@a[1;2] = 'X';
atribuirá'X'
ao elemento com o índice 2 da lista com o índice 1 e@a[1,2,3;3,4,5]='X'xx 9;
substituirá todos os elementos por índices3,4,5
das listas por índices1,2,3
com'X'
.Explicação:
Primeiro, inicialize a lista como um
a+2*(c+d)
pelob+2*(c+d)
retângulo de#
s.Em seguida, atribuímos o retângulo interno de
+
sFinalmente, o retângulo mais interno de
X
s.fonte
Geléia ,
35312824 bytesExperimente online!
Recebe a entrada no quadro da ordem, fosco, largura, altura; vírgula separada. Produz a imagem de arte ASCII com moldura e fosco. Se a ordem de entrada for rigorosa, seria necessário adicionar mais bytes (conforme minha postagem original).
Dois tacos com base na resposta de @ EriktheOutgolfer; Eu percebi que os personagens estavam em ordem ASCII, mas não tinha pensado na melhor maneira de tirar proveito disso, e tinha esquecido
G
. A resposta dele ainda é melhor!fonte
43134
precisará de três caracteres de codificação, que incluindo um caractere inicial / final para indicar que ele está codificado também terão 5 bytes. E Jelly talvez tenha algum tipo de duplicata, já que o segundo número é 100 maior que o primeiro? Não tem certeza se as ações push 43134, duplicate, push 100, plus, pair são possíveis e mais curtas no Jelly?Perl 5, 115 bytes
TIO
fonte
PowerShell , 132 bytes
Experimente online!
fonte