O desafio
Dada uma sequência, produza o texto na forma de um quadrado.
Você pode supor que o texto sempre caiba em um quadrado e que nunca será uma string vazia.
Você também pode assumir que nunca haverá novas linhas.
Exemplo
Input:
Hi, world
Output:
Hi,
wo
rld
Casos de teste
Input:
Hi, world! Hello
Output:
Hi,
worl
d! H
ello
Input:
Lorem ipsum dolor sit amt
Output:
Lorem
ipsu
m dol
or si
t amt
Input:
H
Output:
H
Regras
- Isso é código-golfe , então a resposta mais curta em bytes vence! O desempate é a resposta mais votada.
- As brechas padrão são proibidas.
Respostas:
Vim,
59, 57, 48 bytes / pressionamentos de teclaComo o V é compatível com versões anteriores, você pode experimentá-lo online!
Recebi aleatoriamente um voto positivo nesta resposta, por isso examinei-a novamente. Minhas habilidades de vim-golfe aumentaram bastante nos últimos sete meses, então vi que essa resposta era muito pouco praticada. Esse é muito melhor.
fonte
Brainfuck ,
116112 bytesExperimente online!
Seguro nos tipos de BF que não mascaram as células
256
, não suportam bytes nulos.Remova as setas iniciais à direita se o sabor suportar memória negativa por 4 bytes salvos.
Explicação
O programa está dividido em 3 etapas:
Estágio 1
Nesta fase, colocamos todos os caracteres na fita, mantendo a contagem do número de caracteres.
Esta é a fita para a entrada
abcdefghi
após esta fita:O
009
é a contagem.Para cada personagem, movemos o primeiro zero à esquerda
[<]
e, em seguida, adicionamos um à contagem<<+>>>
; depois, movemos para o zero mais à direita[>]
para nos preparar para o próximo caractere.Etapa 2
Esse estágio faz a raiz quadrada do comprimento armazenado na segunda célula.
Ele continua subtraindo
1, 3, 5, 7, ...
até o número chegar a zero, enquanto verifica o número de iterações.Funciona porque os números quadrados podem ser expressos como
1 + 3 + 5 + ...
.Etapa 3
Indique a raiz quadrada do comprimento encontrado acima como
n
.Esse estágio gera
n
caracteres de cada vez e, em seguida, gera uma nova linha, até que a fita seja limpa.fonte
Python 2, 55 bytes
fonte
05AB1E , 5 bytes
Experimente online!
fonte
»
estão as novas linhas agora.MATL , 6 bytes
Experimente online!
Explicação
fonte
Geléia,
87 bytesGuardou um byte graças a @ Dennis .
Experimente online.
Explicação
fonte
œs
es
faça a mesma coisa aqui.½
não funciona em vez deƽ
?s
eœs
eles lançam para int.JavaScript (ES7), 49 bytes
44 bytes apenas no Firefox Nightly 43-46 (
**
foi introduzido algum tempo entre o Firefox Nightly 42 e 43 eg
como um parâmetro separado foi removido algum tempo entre o Firefox Nightly 46 e 47):fonte
+
ems.length*+.5
*+
sintaxe antes. Alguém poderia explicar isso?**
.J, 9 bytes
Este é um gancho monádico sobre a sequência de entrada:
O dente certo é uma série de composições:
A esquerda é um verbo de modelagem, alternado para que funcione no formato de gancho.
Aqui estão alguns resultados intermediários:
Em palavras:
fonte
$~,~@
se assemelha a algum tipo de emoticon mas@
parece estranho para um ouvido, mas&
se encaixa melhor, ou$~,~&
$~2#%:@#
é 8. A parte esquerda de um garfo pode ser uma constante.C, 64 bytes
Ligue
f()
com a corda para o quadrado.Experimente em ideone .
fonte
int
argumentos implícitos em vez dechar*
?int*
pois isso seria errado ao adicionar.s+=write(puts(""),s,m));
vez des+=m)printf("%.*s\n",m,s);
Perl, 23 + 4 (
-pF
sinalizadores) = 27 bytes-2 bytes graças a @DomHastings
-1 bytes graças a @DomHastings
Experimente online!
Expanações : calcula a raiz quadrada (vamos chamá-la
S
de explicação) do tamanho da entrada (sempre será um número inteiro) (@F
é usado no contexto escalar, retornando assim seu tamanho) e, em seguida, adicione uma nova linha após cada bloco deS
personagens.fonte
$@
;;) Você pode salvar um byte usando emy///c
vez de comprimento e acho que também pode usar uma nova linha literal. Eu estava tentando fazer algo com a configuração$,
e a correspondência, mas acho que isso é muito mais curto!$@
! Obrigado peloy///c
, eu tendem a esquecer que ele existe.$=
vez de$@
, o que permite não usar o-l
sinalizador.-pF
zsh, 36 bytes
Recebe a entrada como argumento da linha de comando e gera para STDOUT.
fonte
05AB1E ,
86 bytesObrigado a @quartata por me informar sobre a função de raiz quadrada
Experimente online!
Explicação
fonte
«
é curto para entrar em novas linhas :).«
Python,
9475716563 bytesVersão antiga:
fonte
input()
por padrão para receber entrada entre aspas, a menos que queira remover especificamente essa opção.CJam , 8 bytes
Experimente online!
Explicação
fonte
Pitão, 8 bytes
Experimente online
Como funciona
fonte
Dyalog APL, 10 bytes
Explicação:
Testes:
fonte
Cheddar, 27 bytes (não concorrente)
Eu adicionei a
.chunk
função há algum tempo, mas a removi na transição para o novo formato stdlib e esqueci de adicioná-la novamente. Cheddar tem umsqrt
operador dedicado , mas**.5
é mais curtoExperimente online!
Explicação
fonte
Utilitários Bash + GNU, 25
Não é tão diferente da resposta de @ Doorknob , mas
dc
é uma maneira mais curta de obter a raiz quadrada.fonte
11, 11 caracteres / 14 bytes
Try it here (ES6 browsers only).
Gerado usando este código (executado no console do navegador do intérprete):
fonte
Brainfuck, 83 bytes
Experimente online!
Isso usa a mesma idéia que a resposta de Leaky Nun . Ele pediu ajuda para jogar no chat e sugeriu que eu adicionasse isso como uma nova resposta. (Na verdade, o que escrevi no chat foi uma solução de 84 bytes muito semelhante a isso.)
Para fins de comparação,
>
é necessário um extra no início para implementações que não permitem endereços de memória negativos.Como esperado, ele encontra o comprimento da entrada, pega a raiz quadrada e imprime as linhas de acordo. Aproveita os quadrados perfeitos sendo somas parciais de
1 + 3 + 5 ...
.fonte
Brain-Flak ,
11096 bytesExperimente online!
Segunda solução, 96 bytes
Experimente online!
Explicação
Aqui eu explico a primeira solução, ambas têm o mesmo comprimento, mas eu gosto da primeira porque é mais fria e emprega alguns truques legais.
A parte mais importante do código é uma função de raiz quadrada modificada que escrevi há algum tempo. A versão original era
E isso funciona, mas na verdade queremos duas cópias da raiz quadrada negativa. Por quê? Precisamos de duas cópias, porque estamos percorrendo a cadeia em dois níveis, um para fazer as linhas e outro para contar o número de linhas. Queremos que seja negativo, porque fazer loop com negativos é mais barato.
Para tornar isso negativo, movemos o cursor
[...]
para que fique assimPara fazer duas cópias, mudamos quando ocorrem pops
Agora que temos esse pedaço, podemos montá-lo com uma altura de pilha para obter o primeiro pedaço de código necessário.
Passamos para o offstack porque nossa função de raiz quadrada precisa de dois zeros livres para o cálculo e porque torna as coisas um pouco mais baratas no futuro em termos de troca de pilha.
Agora construímos o loop principal
Isso é bastante simples: repetimos n vezes cada vez que movemos n itens e o limitamos com uma nova linha (ASCII 10).
Depois que o loop estiver concluído, precisamos reverter a ordem de nossa saída, para que apenas aderamos a uma construção reversa padrão.
fonte
PHP, 51 bytes
fonte
Perl 6 , 38 bytes
Explicação:
fonte
Cheddar, 57 bytes
Como as variáveis estão quebradas, eu precisaria passar as variáveis pelo aplicativo lambda.
Além disso, verifica-se que, mesmo que as variáveis funcionassem, ainda seria mais curto usar o aplicativo lambda.
Uso
fonte
Pyke, 5 bytes
Experimente aqui!
fonte
Java 1.7, 110 bytes
Tente! (Ideona)
Tentei outra abordagem com uma função retornando o resultado como uma string, mas apenas ter que declarar a string e a declaração de retorno já é mais cara (contagem de bytes) do que a declaração de impressão.
Tenho que amar a verbosidade do Java ... :)
fonte
i=0
,i<k
es.substring(i*k,i++*k+k)
em vez dei=-1
,++i<k
,s.substring(i*k,i*k+k)
. Além disso, geralmente usamos apenas emJava 7
vez deJava 1.7
, mas é bom que você tenha adicionado, muitas pessoas esquecem de fazê-lo.R ,
5954 bytesExperimente online!
Imprime com uma nova linha à direita. Surpreendentemente curto, considerando o quanto R lida com seqüências de caracteres.
fonte
PowerShell, 56
5861bytesfonte
Ruby
-p
,403330 bytes-7 bytes de @Jordan.
Experimente online!
fonte
Convexo , 7 bytes
Experimente online!
Fato engraçado:
_,mQ/\*
também funciona no TIO devido a como ele funciona.Como eu esqueci de fazer uma operação com raiz quadrada de 1 caractere?
fonte