Inspirado por esta pergunta SO .
Desafio:
Entrada:
- Uma string
- Um caractere
Saída:
Crie uma arte ASCII de diamante em forma de quadrado nas quatro direções, com o primeiro caractere da seqüência no centro e indo para fora. Que fica dentro de um tapete quadrado de arte ASCII, com o personagem como preenchedor. Isso pode parecer bastante vago, então aqui está um exemplo:
Entrada: = , =
Saída:string
.
..........g..........
........g.n.g........
......g.n.i.n.g......
....g.n.i.r.i.n.g....
..g.n.i.r.t.r.i.n.g..
g.n.i.r.t.s.t.r.i.n.g
..g.n.i.r.t.r.i.n.g..
....g.n.i.r.i.n.g....
......g.n.i.n.g......
........g.n.g........
..........g..........
Regras do desafio:
- A string de entrada também pode ser uma lista de caracteres
- A saída também pode ser uma lista de linhas de sequência ou matriz de caracteres
- A string e o caractere de entrada têm a garantia de que não estão vazios
- A cadeia é garantida para não conter o caractere
- Tanto a string quanto o caractere só podem ser impressos em ASCII (intervalo unicode [32,126], espaço '' para e incluindo o til '~')
Regras gerais:
- Isso é código-golfe , então a resposta mais curta em bytes vence.
Não permita que idiomas com código de golfe o desencorajem a postar respostas com idiomas que não sejam codegolf. Tente encontrar uma resposta o mais curta possível para 'qualquer' linguagem de programação. - As regras padrão se aplicam à sua resposta com as regras de E / S padrão , para que você possa usar STDIN / STDOUT, funções / método com os parâmetros adequados e programas completos do tipo retorno. Sua chamada.
- As brechas padrão são proibidas.
- Se possível, adicione um link com um teste para o seu código (ou seja, TIO ).
- Além disso, é altamente recomendável adicionar uma explicação para sua resposta.
Casos de teste:
Entrada: = , =
Saída:c =11111
0
00000000100000000
00000010101000000
00001010101010000
00101010101010100
10101010101010101
00101010101010100
00001010101010000
00000010101000000
00000000100000000
Entrada: = , =
Saída:c12345ABCDEF
#
####################F####################
##################F#E#F##################
################F#E#D#E#F################
##############F#E#D#C#D#E#F##############
############F#E#D#C#B#C#D#E#F############
##########F#E#D#C#B#A#B#C#D#E#F##########
########F#E#D#C#B#A#5#A#B#C#D#E#F########
######F#E#D#C#B#A#5#4#5#A#B#C#D#E#F######
####F#E#D#C#B#A#5#4#3#4#5#A#B#C#D#E#F####
##F#E#D#C#B#A#5#4#3#2#3#4#5#A#B#C#D#E#F##
F#E#D#C#B#A#5#4#3#2#1#2#3#4#5#A#B#C#D#E#F
##F#E#D#C#B#A#5#4#3#2#3#4#5#A#B#C#D#E#F##
####F#E#D#C#B#A#5#4#3#4#5#A#B#C#D#E#F####
######F#E#D#C#B#A#5#4#5#A#B#C#D#E#F######
########F#E#D#C#B#A#5#A#B#C#D#E#F########
##########F#E#D#C#B#A#B#C#D#E#F##########
############F#E#D#C#B#C#D#E#F############
##############F#E#D#C#D#E#F##############
################F#E#D#E#F################
##################F#E#F##################
####################F####################
Entrada: = , =
Saída:c@+-|-o-|-O
:
::::::::::::::::::O::::::::::::::::::
::::::::::::::::O:-:O::::::::::::::::
::::::::::::::O:-:|:-:O::::::::::::::
::::::::::::O:-:|:-:|:-:O::::::::::::
::::::::::O:-:|:-:o:-:|:-:O::::::::::
::::::::O:-:|:-:o:-:o:-:|:-:O::::::::
::::::O:-:|:-:o:-:|:-:o:-:|:-:O::::::
::::O:-:|:-:o:-:|:-:|:-:o:-:|:-:O::::
::O:-:|:-:o:-:|:-:+:-:|:-:o:-:|:-:O::
O:-:|:-:o:-:|:-:+:@:+:-:|:-:o:-:|:-:O
::O:-:|:-:o:-:|:-:+:-:|:-:o:-:|:-:O::
::::O:-:|:-:o:-:|:-:|:-:o:-:|:-:O::::
::::::O:-:|:-:o:-:|:-:o:-:|:-:O::::::
::::::::O:-:|:-:o:-:o:-:|:-:O::::::::
::::::::::O:-:|:-:o:-:|:-:O::::::::::
::::::::::::O:-:|:-:|:-:O::::::::::::
::::::::::::::O:-:|:-:O::::::::::::::
::::::::::::::::O:-:O::::::::::::::::
::::::::::::::::::O::::::::::::::::::
Entrada: = , =
Saída:cAB
c
ccBcc
BcAcB
ccBcc
Entrada: = , =
Saída:c~
X
~
Entrada: = , =
Saída:c/\^/\
X
XXXXXXXX\XXXXXXXX
XXXXXX\X/X\XXXXXX
XXXX\X/X^X/X\XXXX
XX\X/X^X\X^X/X\XX
\X/X^X\X/X\X^X/X\
XX\X/X^X\X^X/X\XX
XXXX\X/X^X/X\XXXX
XXXXXX\X/X\XXXXXX
XXXXXXXX\XXXXXXXX
()()()
.Respostas:
Tela , 8 bytes
Experimente aqui!
7 bytes, mas reflete um monte de caracteres.
fonte
R ,
1189592 bytesExperimente online!
Graças a:
fonte
for
loops em R, pelo menos para jogar golfe.pmin
lógica com o rearranjo :-)J ,
5956 bytesExperimente online!
Solução muito longa para J ... (inteiramente minha culpa)
fonte
R , uma versão feia de 118 bytes
Permitindo que a entrada seja um vetor de caracteres únicos e produzindo uma matriz em vez de imprimir uma bela arte ASCII.
Experimente online!
R ,
161157 bytessalvou 4 bytes usando ifelse em vez de modificar condicionalmente
y
Experimente online!
ungolfed e comentou
hmmm, parece ser a resposta mais longa até agora!
fonte
Python 2 ,
97969084 bytesExperimente online!
fonte
05AB1E ,
1511 bytesExperimente online! ou como um conjunto de testes
Explicação
fonte
»
para o rodapé. :)J ,
35 3433 bytesExperimente online!
-&#
i:
1-|+/|
{: (<*-)
-&#
Os índices negativos começam em -1, como em python. A única coisa que resta é inserir as colunas de zeros.
1j1( #"1
}:@
,{~
Muito obrigado a Galen Ivanov pelo algoritmo.
fonte
K (ngn / k) , 38 bytes
Experimente online!
{
}
função com argumentosx
(a sequência s ) ey
(o caractere c )|x
marcha réx
y,'
anexary
a cada+
transpor,/
concat1_
soltar primeiro caractereNeste ponto, temos uma sequência de
x
ocorrências length ( )y
seguidas pelos caracteres dex
#x
Comprimento dex
(#x)'
janela deslizante de muitos caracteres consecutivos2{
}/
faça duas vezes+x,1_|x
juntex
-se ao invertidox
sem seu primeiro elemento e transponhay,''
anexary
a cada um,/'
concat cada1_'
solte um de cadafonte
Japonês , 15 bytes
Retorna uma matriz de linhas
Tente
fonte
Carvão , 15 bytes
Experimente online! Link é a versão detalhada do código. Originalmente enviado como um comentário na postagem da sandbox agora excluída . Explicação:
Defina o plano de fundo para a segunda entrada
c
.Mapeie a primeira entrada
s
para gerar todos os sufixos e imprimi-los implicitamente em linhas separadas.Reflita horizontalmente e verticalmente.
Adicione espaço extra horizontalmente.
fonte
Ruby ,
958475 bytesExperimente online!
Leva a string de entrada como uma matriz de caracteres. Retorna uma matriz de seqüências de caracteres.
fonte
Wolfram Language (Mathematica) , 121 bytes
Experimente online!
fonte
Japonês , 16 bytes
Nota: Vou jogar :)
Experimente online!
fonte
PowerShell , 120 bytes
Experimente online!
Alguns dias, ter intervalos de índice em vez de fatias realmente dói. Hoje é um daqueles dias. Devido aos intervalos conjugados que atrapalham ao lidar com elementos únicos (por exemplo, retornando 0..0 + 1..0), a caixa especial é usada para evitá-la completamente (ao custo de muitos bytes).
fonte
Japonês , 15 bytes
Tente
fonte
Gelatina , 11 bytes
Experimente online!
ŒṘ
Y
\n
fonte
PowerShell ,
8283 bytes+2 bytes graças Veskah: o erro de maiúsculas e minúsculas corrigido
-1 byte: a regra
Input-string may also be a list of characters
usadaExperimente online!
Menos golfe:
fonte
~
Pip ,
2420 bytesUse o
-l
sinalizador para obter uma saída legível por humanos. Experimente online!Explicação
Por exemplo, com entradas de
abcd
e.
:fonte
Anexo , 57 bytes
Experimente online! Saída é uma lista de linhas.
Explicação
fonte
Perl 6 , 79 bytes
Experimente online!
Codeblock anônimo que recebe entrada com curry (like
f(char)(string)
) e retorna uma lista de linhas. Eu acho que uma abordagem diferente seria mais curta.Explicação:
fonte
APL (Dyalog Classic) ,
3231 bytesExperimente online!
fonte
Perl 5 com
-lF
,-M5.010
, 71 bytesExperimente online!
fonte
C # (compilador interativo do Visual C #) , 249 bytes
Experimente online!
Isso deve ser improvável ...
fonte
JavaScript (Node.js) , 143 bytes
Experimente online!
Um pouco mais de reflexão levaria ao cálculo em termos de uma matriz unidimensional e menos bytes.
fonte
Kotlin , 250 bytes
Nota: O Kotlin tio atualmente falha ao retornar uma nova classe, portanto esse código obtém uma exceção de ponteiro nulo. Isso também ocorre para os códigos que eu publiquei anteriormente que funcionavam naquele momento. Suponho que ele acabará sendo corrigido, mas não foi possível encontrar um contato de suporte para reportar o problema. Também pode ser executado aqui .
Experimente online!
fonte
.joinToString("\n")
contagem de bytes (e fazer isso no rodapé fora da função).Gaia , 19 bytes
Experimente online!
Explicação a seguir.
fonte
JavaScript (Node.js) , 101 bytes
Experimente online!
fonte
Consulta TSQL, 191 bytes
No MS-SQL Server Management Studio, pressione Ctrl-T antes de executar esta consulta, isso mudará a saída para texto.
Este script está construindo a saída da esquerda para a direita em uma "string" longa, calculando o valor a ser colocado em cada posição. A saída é limitada a 4096 caracteres.
Golfe:
Ungolfed:
Eu tive que fazer algumas alterações para formatar a saída na versão online.
Experimente online
fonte
JDK (Java) ,
213199198 bytesExperimente online!
-14 bytes
Obrigado a @KevinCruijssen-1 byte
obrigado a @ceilingcatUngolfed
fonte
Wolfram Language (Mathematica) , 68 bytes
Experimente online!
Pega uma lista de caracteres (junto com o caractere de preenchimento) como entrada e gera uma matriz de caracteres.
Para pegar o índice da lista de caracteres, usamos
list[[index]]
, que é expandido internamente paraPart[list, index]
. Se o índice for válido, essa expressão será avaliada como o valor nesse índice. Caso contrário, se o índice não for um número inteiro ou estiver fora do intervalo, a expressão permanecerá sem avaliação.O padrão mais simples (mais curto) que corresponde,
Part[...]
mas não um caractere é_@__
, que corresponde a qualquer expressão com um ou mais argumentos.fonte