Desafio
Dado um operador ASCII da lista abaixo e um número n, desenhe uma representação ASCII do operador usando esse operador como o caractere com os segmentos de linha do operador com comprimento n .
Entrada
Um caractere ASCII da lista = + - x /
e um número inteiro em n
que n >= 1
. (Estou usando em x
vez de *
e em /
vez de ÷
, mas você pode usar qualquer um deles, o que for mais fácil). Para +
e x
, você só precisa lidar com números ímpares para evitar problemas com o alinhamento.
Saída
Um desenho ASCII do operador composto pelo caractere com segmentos de comprimento n. As partes horizontais devem ter espaços entre os caracteres para compensar as diferenças de distância vertical / horizontal.
Regras
Isso é código-golfe , então o código mais curto em bytes vence. As brechas padrão são proibidas.
Exemplos
Entrada: + 3
+
+ + +
+
Entrada: = 4
= = = =
= = = =
Entrada: = 10
= = = = = = = = = =
= = = = = = = = = =
Entrada: - 2
- -
Entrada: / 10
/
/
/
/
/
/
/
/
/
/
Entrada: x 7
x x
x x
x x
x
x x
x x
x x
= 10
?Respostas:
Pip ,
625956 bytes55 bytes de código, +1 para
-S
sinalizador.Observe que esta solução funciona com entrada de
÷
para divisão e*
multiplicação, embora use esses caracteres para desenhar ASCII-art/
ex
, respectivamente. O OP esclareceu que está tudo bem. Experimente online!Quão?
Aqui está uma versão parcialmente espaçada e comentada . Observe que
a
eb
são os argumentos da linha de comando, ou seja, o operador e o tamanho, respectivamente. O-S
sinalizador controla como as listas são produzidas: ele se une às novas linhas primeiro, mas se une a qualquer lista aninhada nos espaços.E aqui estão as seções individuais:
Multiplicação
Para cada linha da figura, geramos uma sequência de espaços e substituímos dois deles pelo caractere de entrada. Para linha
i
, queremos substituir os espaços no índicei
eb-1-i
; mas observe que o último pode usar o índice negativo-1-i
. (É ainda mais curto porque a variávelv
é pré-inicializada para negati v e 1.)Adição
Usando a estratégia de minha resposta Desenhar um quadrado vazio , definimos uma função que envolve a
+
emb/2
cópias de seu argumento e retorna o resultado como uma lista de caracteres. (A divisão inteira//
não é necessária porque o operador de repetição de string éX
automaticamente truncado para inteiro.) Primeiro, chamamos essa função em um espaço, dando[" ";" ";"+";" ";" "]
; então, mapeamos a mesma função para esse resultado, fornecendo[" ";" ";"+";" ";" "]
na maioria das linhas, mas["+";"+";"+";"+";"+"]
na linha central. Essa lista aninhada é gerada, devido ao-S
sinalizador, com espaços entre todos os caracteres em uma linha e novas linhas entre as linhas.Divisão
Cada linha tem entre
b-1
e0
espaços, seguidos pelo caractere de entradaa
.Subtração
Faça uma linha separada por espaço do caractere de entrada. Salve uma cópia para mais tarde.
É igual a
O passo da subtração armazenava metade do que precisamos -
y
apenas o dobro.Os
x
valores fictícios estão lá para preencher a lista principal, para que a indexação modular forneça um índice exclusivo para cada caractere de entrada+-*÷=
.fonte
V ,
78, 72, 71, 68, 65, 63, 62, 61 bytesExperimente online!
Como sempre, a batalha de pescoço e pescoço com 05AB1E é realmente divertida!
Como ele contém caracteres não ASCII, eis um hexdump:
Isso cria espaços iniciais na saída para
=
e-
, mas isso parece ser permitido . Se isso não for permitido, fique à vontade para comentar e eu o reverterei.Explicação
O "comando global" (por exemplo
ç
) aplica um certo conjunto de comandos a todas as linhas que correspondem a um determinado regex. A sintaxe éEssa é a maneira mais fácil de simular uma instrução condicional / alternar. Na minha resposta original, eu simplesmente criei toda a arte ASCII no lado direito para cada caractere diferente que precisamos procurar. No entanto, muitas dessas saídas requerem comandos semelhantes. Então eu os combinei. O primeiro comando ('Ç') é na verdade o inverso do comando global; ele aplica o comando a todas as linhas que não correspondem ao regex. Portanto, o primeiro comando é:
O comando a seguir é para as entradas '=' e '-'. Esses dois são convenientemente fáceis e semelhantes. Após esse comando, não precisamos mais processar
-
.A partir daqui, apenas fazemos alguns comandos extras para cada entrada individual possível. Para
+
:O comando para iguais é muito direto. Nós apenas duplicamos com
Ä
. Para/
:O último é o mais complicado. É basicamente um porto dessa resposta .
fonte
ç
comando (bem como pesquisa e substituição,/
e?
) todos parte de simulação de linha de comando do vim, onde você tem que pressione Enter para realmente executar o comando05AB1E ,
8176747370696865646260595756 bytesAtualmente na guerra com a resposta V . Estou indo buscá-lo Dr. McMoylex: p.
Também em guerra com a resposta Pip . Eu estarei observando você, Sr. DLosc.
Código:
Ou de uma forma mais legível:
Usa a codificação CP-1252 . Experimente online!
fonte
Python 3,
304283278 bytesSimples o suficiente, apenas cria uma matriz de caracteres e aplica as diferentes operações com base em qual delas é. O
=
e-
tem espaços à direita, se isso não é tão ruim.EDIT: Obrigado a @Shebang e @Rod por suas sugestões, que acabaram salvando 21 bytes!
EDIT2: Obrigado ao @Artyer por salvar 5 bytes!
fonte
if'-'==t
linha de condição e substituindo a linha acima porif t in'=-':b=[[t+' ']*s]*(2*(t>'-'))
(acho).exec(['+ block','/ block','x block','= block','- block']['+/x=-'.find(t)])
para salvar ~ 18 bytes.split()
(nenhum argumento é dividido em espaço em branco). Na linha 6, você perdeu um espaço (b=[[x+' 'for
). Você pode fazer a última linhaprint(*map(''.join,b),sep='\n')
por 1 menos bytes.JavaScript (ES6),
238225215202196 bytesProvavelmente poderia ser jogado, mas é um começo.
fonte
Scala, 275 bytes
Uso:
Explicação:
O código testa o valor ascii do caractere para escolher a maneira correta de gerar a imagem. Os valores ascii dos operadores em questão são:
('+' -> 43), ('-' ->45), ('/' -> 47), ('=' -> 61), ('x' -> 120)
fonte
JavaScript (ES6), 156 bytes
Onde
\n
representa o caractere literal de nova linha.fonte
SyntaxError: invalid property id
o que está escrito atualmente, mas alterar as barras de proteção ao redor da barra para apóstrofos corrigiu isso. (Por que você tem backticks lá em vez de apóstrofos?)+
,-
e=
olhar diferente do que as chamadas de desafio para: "porções horizontais devem ter espaços entre os caracteres para compensar diferenças de distância vertical / horizontal."Dyalog APL ,
9186 bytesNecessidades
⎕IO←0
, que é padrão em muitos sistemas. Toma n como argumento à esquerda e um de + - × ÷ = como argumento à direita.Explicação
fonte
Mathematica, 191 bytes
Função anônima. Pega uma sequência e um número como entrada e retorna uma sequência como saída. Não é o mais curto de longe, mas ainda assim divertido de escrever.
fonte
C, 396 bytes
Ligue para:
fonte
SOML ,
104100 bytes (não concorrente)Isso é meio que competitivo, pois tenho certeza de que tudo o que usei aqui tem documentos no github antes desta data de publicação das perguntas, mas o analisador não tem suporte para algumas funções que usei para o idk.
fonte
PHP,
306292281282281275270 bytesOoh, isso é volumoso ... precisa de mais golfe.
Eu poderia salvar 4 bytes com quebras de linha físicas ou um byte colocando "\ n" em uma variável.
fonte
C #, 744 bytes
Acho que tem 1 milhão de caracteres, mas não me importo, estou tão feliz que resolvi isso ...
Golfe:
Ungolfed:
Teste:
Demais para colar e formatar aqui, criei um pastebin:
Pastebin
fonte
C, 331 bytes
O operador é passado como código ASCII
o
e a contagem de caracteresn
. Eu apenas adicionei espaços entre caracteres consecutivos horizontalmente no sinal de mais, já que este era o único onde a saída teria sido distorcida se eu não tivesse e na tarefa que apenas dizia "deveria". Eu uso dois loops aninhados em contagem regressiva (exceto para-
onde eu só preciso de uma linha).=
Três linhas, uma delas vazia, para a frente+
usandoprintf
por causa dos espaços-
direto/
faça o loop interno imprimir em zero e comece no balcão do loop externox
imprima o loop interno no balcão do loop externo e seu "inverso"n-i
. Ainda preciso ver por que estou aqui um por um.Exemplo de chamada:
fonte
Lua,
402344312 bytes312:
344:
402:
90 caracteres reduzidos e agora é doloroso olhar mesmo quando expandido. : |
fonte