Tarefa
Dada uma sequência não vazia de letras ASCII em minúsculas a
- z
, pegue seu primeiro caractere e:
- Coloque um quadrado de cópias do segundo caractere,
- Cerque isso com um diamante de cópias do terceiro personagem,
- Envolva isso com um quadrado de cópias do quarto personagem…
… Alternando entre bordas quadradas e diamantes até o final da corda. O espaço vazio entre as bordas deve ser representado por espaços ASCII ( ).
Para adicionar uma borda quadrada , desenhe um quadrado exatamente ao redor de toda a "matriz de trabalho" atual:
sssssssssss
t s t s
t t s t t s
t t s t t s
t aaa t s t aaa t s
t aca t => st aca ts
t aaa t s t aaa t s
t t s t t s
t t s t t s
t s t s
sssssssssss
Para adicionar uma borda de diamante , desenhe uma forma de diamante centralizada que toque o quadrado mais externo na diagonal , mas não ortogonalmente :
s
s s
s s
s s
s s
s s
s s
wwwwwwwwwww s wwwwwwwwwww s
w o w s w o w s
w o o w s w o o w s
w o o w s w o o w s
w o eee o w s w o eee o w s
wo eme ow => s wo eme ow s
w o eee o w s w o eee o w s
w o o w s w o o w s
w o o w s w o o w s
w o w s w o w s
wwwwwwwwwww s wwwwwwwwwww s
s s
s s
s s
s s
s s
s s
s
Seu programa deve gerar a matriz final.
- Cada linha pode conter qualquer quantidade de espaços à direita.
- Você pode gerar uma lista de cadeias representando linhas ou uma única cadeia separada por nova linha com uma nova linha à direita opcional.
- Linhas em branco à esquerda / à direita não são permitidas.
- As principais colunas de espaços também não são permitidas.
Isso é código-golfe . O código mais curto em bytes vence.
Casos de teste
Os exemplos acima são esperados saídas para cat
, cats
, meow
e meows
, em ordem de leitura. Alguns outros casos que valem a pena ser tratados:
Para a entrada
a
, seu programa deve gerar:a
Para a entrada
ab
, seu programa deve gerar:bbb bab bbb
Para a entrada
codegolf
, seu programa deve gerar:fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff f l f f l l f f l l f f l l f f l l f f l l f f l l f f l l f f l l f f l l f f l l f f l l f f l l f f l l f f l l f f l ooooooooooooooooooooooooooo l f f l o g o l f f l o g g o l f f l o g g o l f f l o g g o l f f l o g g o l f f l o g g o l f f l o g g o l f f l o g eeeeeeeeeee g o l f f l o g e d e g o l f f l o g e d d e g o l f f l o g e d d e g o l f f l o g e d ooo d e g o l f fl og ed oco de go lf f l o g e d ooo d e g o l f f l o g e d d e g o l f f l o g e d d e g o l f f l o g e d e g o l f f l o g eeeeeeeeeee g o l f f l o g g o l f f l o g g o l f f l o g g o l f f l o g g o l f f l o g g o l f f l o g g o l f f l o g o l f f l ooooooooooooooooooooooooooo l f f l l f f l l f f l l f f l l f f l l f f l l f f l l f f l l f f l l f f l l f f l l f f l l f f l l f f l l f f l f fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
Implementação de referência
Eu escrevi um código Julia que a saída do seu programa deve corresponder (pelo menos visualmente). Experimente online!
\r\n
) em vez de um (\n
)?prompt
econsole.log
. Além disso, você pode usar cordas modelo que poupa 2 bytes por chamada de função em cordas (comofill(' ')
se tornafill` `
)S-i-1
paraS+~i
ei%2||o--
parao-=~i&1
.a=Array(D*2+1).fill
.map((_,$,a)=>[...a])
economiza 10 bytes.Haskell,
138137136 bytesDefine uma função
f
que retorna o resultado como uma lista de linhas-1 byte graças a @Lynn
fonte
C ++ -
373366362359bytes-1 por @TuukkaX, -6 por @Kevin Cruijssen, -4 por importações, -3 por @Baum mit Augen
http://ideone.com/5y54mx
Nota: Esta solução usa o ponto ('.') Como caractere "espaço" para tornar os espaços vazios mais visíveis. Para usar um espaço, é preciso mudar
S(s,46)
paraS(s,32)
. A pontuação permanece a mesma.Ungolfed:
Experimente sem jogar online
Como usar:
Saída:
fonte
std::vector<S> V
possui um espaço em branco inútil.if(A(i)<=R(k)&&A(j)<=R(k)&&k%2?A(i)==R(k)||A(j)==R(k)
o&&
e||
pode ser&
e|
para -3 bytes; eint r=R(w.size()-1),...
pode se tornarint l=w.size(),r=R(l-1),...
efor(k=0;k<w.size();++k)
pode se tornarfor(k=0;k<l;++k)
para outros -3 bytes.using S=std::string;
para proteger dois bytes portypedef
.Mathematica, 167 bytes
A entrada deve ser uma lista de caracteres.
por exemplo
fonte
JavaScript (ES6), 252 bytes
Onde
\n
representa o caractere literal de nova linha.fonte
JavaScript (ES6), 204
229 238Uma função anônima retornando uma matriz de seqüências de caracteres
Menos golfe
Teste
fonte
Java -
429417 bytesO crédito vai para @Anedar, pois foi uma influência na estrutura desta resposta
Ungolfed:
fonte
JavaScript (ES6), 322 bytes
Não competitivo
Menos Golphed
Teste com
Ganhos fáceis deixando de fora a instrução de retorno
var L=
e de.join("\n")
retorno para -17 bytes, mas digite-os novamente para testar o código : DÉ uma resposta de duas passagens, avaliando a largura (
w
) necessária para plotar um gráfico quadrado ou diamante, antes de plotar pontosP
na segunda passagem usando rotação e translação.d
é a dimensão (altura ou largura) de um quadrado não rotacionado antes da translação ou rotação.Rotação e escala por √2 detalhes da resposta do Mathematica . Uso do modelo de string marcado da primeira resposta neste tópico . Obrigado a ambos pela aprendizagem. Votos para a pergunta e respostas.
fonte
PowerShell,
269245238 bytesSem instrução, explicado e com script de teste:
fonte