O desafio
Sua tarefa é criar um programa que aceite qualquer entrada de sequência de caracteres e produza a entrada em um formato quadrado. Cadeias vazias devem retornar uma cadeia vazia.
Exemplos
Dada a entrada:
golf
Seu programa deve gerar:
golf
o l
l o
flog
Entrada:
123
Saída:
123
2 2
321
Entrada:
a
Saída:
a
Entrada:
Hello, world!
Saída (observe o espaço entre, ew - a diferença não é apenas uma nova linha):
Hello, world!
e d
l l
l r
o o
, w
w ,
o o
r l
l l
d e
!dlrow ,olleH
Pontuação
Isso é código-golfe , então a resposta mais curta em cada idioma vence.
code-golf
string
code-golf
number
sequence
combinatorics
code-golf
tips
javascript
code-golf
kolmogorov-complexity
fibonacci
restricted-time
code-golf
ascii-art
code-golf
string
text-processing
code-golf
sequence
set-partitions
code-golf
kolmogorov-complexity
natural-language
code-golf
string
code-golf
math
code-challenge
restricted-source
code-golf
code-golf
number
base-conversion
cops-and-robbers
encryption
code-challenge
quine
optimized-output
king-of-the-hill
python
SpookyGengar
fonte
fonte
Respostas:
Carvão ,
75 bytesExperimente online! Link é a versão detalhada do código. Editar: salvou 2 bytes graças a @CarlosAlejo. Explicação:
(Várias direções para o comando Reflect são executadas consecutivamente e não simultaneamente.)
fonte
θ‖B↙↘
. Experimente online!ReflectOverlap
vez deReflectButterfly
evitar virar caracteres. :-)MATL ,
201611 bytesExperimente no MATL online!
EDIT: O código funciona na versão 20.2.1, que antecede o desafio. O link usa essa versão. (No 20.2.2, o código seria mais curto, mas pós-datado o desafio).
Explicação
fonte
Geléia ,
29 2217 bytesCarvão
irámarcar + d esta pontuação ...Um link monádico recebendo e retornando uma lista de caracteres; ou um programa completo imprimindo o resultado.
Experimente online!
Quão?
fonte
'Hello'
"Spooky""123"
, etc. (Python é usado para interpretar a entrada).C, 109 bytes
Experimente online!
Truques dignos de nota:
Em vez de desperdiçar bytes
strlen
, simplesmente pegamos o comprimento da string enquanto imprimimos simultaneamente a primeira linha:Isso funciona porque
printf
retorna o número de bytes gravados.Para as linhas do meio, precisamos fazer um loop sobre a string, mas excluir o primeiro e o último caractere. Isso é alcançado com a condição
(que é mais curto que
(++s)[1]
), que pula o primeiro caractere devido à++
condição dele e pula o último, parando quando o personagem que está além do caractere atual está'\0'
(em vez de parar em'\0'
).No corpo do primeiro loop,
imprimimos o caractere atual e, em seguida, o caractere "espelhado" apropriado (acompanhando
j
, que entra nos negativos, resultando na situação ímpar de indexar em uma string com um número negativo) preenchido com um comprimento dei
espaços (ondei
está convenientementestrlen(s) - 1
).A impressão invertida na última linha é bastante direta; o único truque é o
*s*~i--
, que é a maneira mais curta de obteri+2
iterações do corpo do loop (que não dependei
; tudo o quei
é usado é contar). O funk*s*
parte garante que o laço não é executado se*s
é'\0'
, que acontece no comprimento-1 de entrada.fonte
Oitava, 40 bytes
Experimente online!
É a minha resposta, mas postada após a resposta @Luis MATL
fonte
Haskell ,
8478 bytesExperimente online! Uso:
f "test"
. Retorna uma lista de linhas.Edit: -6 bytes graças a dianne!
fonte
reverse
;r=reverse;f s@(_:x)|_:y<-r x=s:[a:(y>>" ")++[b]|(a,b)<-zip x y]++[r s];f s=[s]
tem 78 bytes.Python 2 ,
89818886 bytesExperimente online!
fonte
R , 113 bytes
Experimente online!
fonte
05AB1E ,
17161519 bytesExperimente online!
Explicação
Exemplo com
input = golf
A correção para entrada de uma letra era bastante cara.
Sinto que uma abordagem diferente pode ser melhor agora.
fonte
Python 2 ,
9988 bytes-4 bytes graças ao musicman523.
Experimente online!
Retorna uma lista de strings.
fonte
s
es[::-1]
para ojoin
Mathematica, 128 bytes
fonte
C, 96 bytes
Versão bônus (122 bytes):
fonte
Swift 3 ,
215199 bytesExperimente online
fonte
Python 3, 88 bytes
fonte
l+1 and
possa ser reescritol+1and
para salvar um byte.0or
, onde python falha ao analisar porque0o
é um prefixo octal.JavaScript (ES8),
108112 bytesMenos golphed
Agradecemos a Justin Mariner por economizar muitos bytes, que se acostumaram a adicionar a verificação de zero ou único caractere necessária para cumprir o desafio. Você entende que :-(
fonte
`+s[i+1].padEnd(s.length-1)+v,s)+`
e usandor.join``
.String.prototype.padStart
e etiquetou os literais dos modelos. Eu precisava que a ajuda para manter a adição da verificação do comprimento a um mínimo :-)(n=s.length-1)?(r=<...>+r.join``:s
e usandopadEnd(n)
. Se o comprimento for1
,length-1
é0
(falso).padEnd
é ES2017.PHP , 118 bytes
Experimente online!
fonte
APL , 58 bytes
Com
⎕IO←0
.Experimente online!
Quão?
c←≢⍵
- comprimento da cordar←⍳
- alcanceo←∘.⌈⍨
- produto exterior com um mínimoo⌊⌽⊖
- minimizar com ele próprio girado 180 o×
- multiplique comx←∘....⍨r
- produto externo da gama com((c-1)=⍺⌈⍵)∨0=⍺⌊⍵
- o quadro da matrizx+
- adicione o quadro(' ',⍵)[...]
- obtém pelo índice da string concatenada para o espaçofonte
⍉⊖⍉⊖
ser⌽⊖
?JavaScript (ES2017), 87 bytes
Versão ES6: 93 bytes
Menos golfe
fonte
padEnd
é ES2017.l+~i
, evitando subtrair 1 duas vezes, em vez de subtrair 2 uma vez.l-~-i
s=>[...s].reverse(l=s.length).map((c,i,z)=>i?l+~i?s[i]+' '.repeat(l-2)+c:z.join``:s).join`\n`
mass=>[...s].reverse(l=s.length-2).map((c,i,z)=>i?i+~l?s[i]+' '.repeat(l)+c:z.join``:s).join`\n`
também funciona.Java, 191 bytes
fonte
(s)
pode ser justos
. Os loops com linhas únicas no interior podem ter seus chavetas removidas. Você pode retornar em vez de imprimir, se você economizar algum bytes. Você usaint i
nos dois loops, não sei dizer se eles estão em escopos diferentes, mas vale a pena apontar. Inicializar como variáveis juntas normalmente salva bytes.for(int i=0;i<l;i++){o.print(s.charAt(l-1-i));}
->for(int i=0;i<l;){o.print(s.charAt(l-1-i++));}
. Você não precisa do ponto e vírgula à direita.C # (.NET Core) ,
179161 bytes-18 bytes graças a TheLethalCoder
Experimente online!
Não tenho certeza sobre as regras, se isso for necessário para contagem de bytes ou não:Alguém por favor me corrija sobre isso.Ungolfed:
fonte
using
na contagem de bytes. Como você está usando o LinqToCharArray()
pode ser justoToArray()
, você realmente precisa dele antesReverse()
? Como você está usando,String
você precisa qualificá-lo totalmente ou incluir o uso, no entanto, isso pode ser facilmente corrigido alterando-o tambémstring
. Oif
pode ser mais curto como um ternários+=l>1?if code:"";
. Você pode remover oi++
do loop e incrementá-lo apósd[i++]
.i
com ol
likeint l=s.Length-1,i=1;
. E acho que pode ser isso!Retina , 106 bytes
Experimente online! Explicação:
Se houver pelo menos dois caracteres, duplique a entrada.
Inverta a duplicata.
Transforme as cordas em triângulos. O triângulo superior começa com a entrada e remove o primeiro caractere de cada vez, enquanto o triângulo inferior começa com a primeira letra da entrada invertida e adiciona um caractere a cada vez.
Junte os triângulos, sobrepostos, para que o último caractere forme a
/
diagonal.Mude todos os caracteres para espaços, se eles estiverem a pelo menos um caractere do final de cada lado.
Exclua as linhas em branco restantes.
fonte
Python 3, 85 bytes
Usando a entrada para a linha superior :)
fonte
Lua , 104 bytes
Experimente online!
fonte
p
uma vez ...Python 3, 106 bytes
Uma versão funcional ...
fonte
Python 2 , 100 bytes
Experimente online!
fonte
Mathematica,
13891 bytesVocê pode experimentá-lo online colando o seguinte na Wolfram Cloud Sandbox e clicando em "avaliar célula" ou pressionando Shift + Enter ou Numpad Enter:
fonte