Seu trabalho é pegar uma entrada e um número de sequência e alinhar a sequência à direita, tornando a largura do texto o número. Quando uma linha for muito longa, quebre-a e coloque o restante na próxima linha, repetindo até que não seja necessário. Se uma linha for menor que a largura, preencha-a com espaços. Várias novas linhas podem ocorrer e devem ser tratadas como qualquer outro caractere único.
Por exemplo, a sequência
Programming
Puzzles
&
Code
Golf
e o número 5
produziria:
Progr
ammin
g
Puzzl
es
&
Code
Golf
Considerando que a mesma string e o número 10
produziriam:
Programmin
g
Puzzles
&
Code
Golf
A corda
a
b
e o número 5 produziria:
a
<-- note the 5 spaces
b
O menor código vence!
Programming Puzzles\n&\nCode Golf
?Respostas:
Pitão, 14 bytes
Demonstração
Usa o operador de bloco do Pyth.
fonte
Python 2, 84
Toma como entrada uma string com novas linhas e um número e imprime o resultado. Para cada linha da entrada, obtém e imprime
n
caracteres de cada vez, usando o built-inrjust
para preencher a esquerda com espaços antes da impressão.Corrigi o estojo da linha vazia com o hack
w=w or' '
. Provavelmente existe um método melhor, mas não vou pensar muito sobre isso.fonte
CJam, 21 bytes
Graças ao @ Sp3000 por jogar 1 byte e abrir mais 3.
Experimente on-line no intérprete CJam .
Como funciona
fonte
Pyth, 16
Experimente online aqui
Explicação
fonte
Perl, 39 bytes
36 bytes + 3 bytes para
-ni
. A largura da quebra é passada como argumento para-i
.Manipula linhas em branco corretamente preenchendo-as com espaços:
Como funciona
Esta solução usa o operador de substituição para fazer um loop pela entrada, economizando um byte no
for
loop equivalente . O verdadeiro truque, no entanto, está na regex no LHS da substituição:Com o modificador global, isso corresponderá a
$^I
caracteres por vez; quando houver menos de$^I
caracteres restantes na sequência, ela corresponderá a tudo até o fim. A alternância com^$
é necessária para manipular linhas em branco. Por exemplo:O RHS da substituição simplesmente usa
printf
para deixar o bloco correspondente com espaços à esquerda.fonte
$^I
!Javascript (ES6), 107
Eu gostaria que o JS tivesse uma função integrada no bloco. Ah bem.
Explicação:
fonte
Julia, 126 bytes
Ungolfed:
fonte
Bash,
62,61+, 59Menor se
N
puder ser definido pelo chamador, em vez de ter que lê-lo como a primeira linha de entrada.Isso falha ao manipular linhas vazias na entrada. Caso contrário, isso não sujeita os dados de entrada a divisão de nomes, expansão de nome de caminho ou os trata como mais do que apenas dados brutos.
read -n$N
salva um personagem, mas deixa oread
munge\
.O
[[ $r ]]&&
é necessário, porqueread -n4
não podemos olhar para ver se o próximo caractere é uma nova linha. Portanto, ele definer
como uma sequência de 4 caracteres e a próxima leitura produz uma sequência vazia de zero caractere. Filtrar essas novas linhas falsas sem filtrar novas linhas reais exigiria um estado de rastreamento: se a linha anterior era de tamanho máximo ou não. Seria necessário mais código ou uma abordagem totalmente diferente.[[ $r ]]
é menor do[ -n "$r" ]
que o necessário para evitar erros se a linha começar com-z foo
, ou for*
ou algo assim, se você usou[ $r ]
.A justificação ocorre com a sequência de formato padrão printf "% 4s".
Teste com
fonte
-r
na contagem de bytes. 2.f()(while ... done)
é um pouco menor.[[ $r ]]&&
, se N = 4, uma linha de entrada de comprimento 4 produzirá uma linha de saída em branco onde não havia uma antes. Porqueread
retorna uma string de 4 caracteres, em seguida, vê uma nova linha na próxima chamada e retorna imediatamente. Além disso, obrigado pela()
dica. Eu não sabia que você poderia definir fns dessa maneira.while
já é composto, você nem precisa dos parênteses:f()while ... done
Haskell, 108 bytes
Exemplo de uso:
Como funciona
fonte
GNU awk + bash, 70
Usar o bash para inserir a contagem no programa awk é prob. menor do que lê-lo com um
NR==1{N=$0}
bloco.Leia uma linha de cada vez. Divida em pedaços com no máximo 4 caracteres, usando FPAT. (corresponde aos campos, em vez dos separadores. Extensão GNU.) imprime cada campo separadamente. (ORS padrão = \ n).
A
/^$/
regra existe para imprimir linhas vazias, que possuem NF = 0 e, portanto, não são impressas no outro bloco. Portanto, diferentemente da minha solução pura, isso realmente funciona no caso geral.Semi-independente, mas minha ideia até agora para perl é de 112 caracteres apenas para o código perl:
Isso come uma das novas linhas e é muito longo.
$/=\1
lê um byte de cada vez. Anexamos a $ l. Provavelmente, uma linha de cada vez com uma abordagem de divisão de largura fixa seria mais curta.fonte
Utilitários Bash + GNU, 41
A sequência é inserida via STDIN, a largura é inserida pela linha de comando arg:
fonte
Python 2, 151 bytes
Esta é uma adaptação da resposta de @ xnor acima, pois a dele não lida adequadamente com novas linhas.
O
for
loop foi alterado de:para:
Exemplo
fonte
C #, 143 bytes
O Linq permite que você faça expressões bastante complicadas.
GroupBy
é útil aqui, mas é uma pena que eles não tenham conseguido criar sobrecargas de função usando o índice.Atribua o lambda a
Func<string, int, string>
para executá-loMenos golfe:
fonte
Groovy, 63 bytes
Retorna a string alinhada corretamente. Não sabia que havia uma função padLeft (e padRight, padCenter) até agora.
fonte
Javascript
174136fonte
Ceilão, 107
fonte
Matlab, 99 bytes
Obrigado ao @beaker por remover 6 bytes!
Usando e função anônima:
Defina a função e use-a
ans
para chamá-la:fonte
Burlesco, 28 bytes
Igual à versão abaixo, mas trata a linha 1 como o número e as outras linhas como a sequência.
Uso como em:
Versão antiga (16 bytes):
Exemplo:
fonte