Alinhando linhas!
Dado um caractere e uma sequência de linhas múltiplas, seu trabalho é preencher cada linha da sequência para que elas se alinhem entre o delimitador fornecido.
Exemplos
Entrada:
,
Programming, Puzzles
And, Code golf
Saída:
Programming, Puzzles
And, Code golf
Entrada
A entrada será uma cadeia de linhas múltiplas e um caractere (no qual você alinhará), você pode levá-los em qualquer ordem / formato que desejar. O personagem aparecerá exatamente uma vez por linha. Cada linha da entrada pode ter um comprimento diferente.
A entrada pode ser por meio de argumentos de função ou STDIN.
Saída
A saída deve ser a mesma string centralizada. Você tem uma nova linha à direita e nenhum espaço em branco à direita.
A saída deve ser preenchida com a quantidade mínima de espaços. Você não pode remover nenhum espaço em branco à esquerda na entrada (se existir).
A saída pode ser do retorno da função ou STDOUT.
fonte
Respostas:
Pitão, 18 bytes
fonte
APL (37)
APL simplesmente não é muito bom no processamento de strings (ou eu não sou bom em golfe, é claro).
Isso leva o caractere como argumento à esquerda e a cadeia de linhas múltiplas como argumento à direita. Supõe-se que a cadeia de linhas múltiplas termine com um avanço de linha (por exemplo, em
A\nB\nC\n
vez deA\nB\nC
.) Como eu posso usar "qualquer formato [I] desejo", e esse também é o formato convencional para arquivos de texto, acho que isso é razoável.Explicação:
S←⌽⍵
: inverta a string e armazene-aS
.R←S⊂⍨S=⊃S
: dividaS
em seu primeiro caractere e armazene a matriz de seqüências de caracteresR
.⍺⍳¨⌽¨R
: inverta cada sequênciaR
e encontre o índice de ⍺ (o caractere) em cada sequência.(⌈/-+)
: subtraia cada um dos índices do maior índice, fornecendo a quantidade de espaços necessários' '/⍨¨
: para cada um desses valores, gere esse número de espaçosR,¨
: adicione os espaços a cada sequênciaR
.∊
: juntar todas as cordas⌽
: inverta (para recuperar o pedido original)Exemplo:
fonte
CJam,
232220 bytesAgradecimentos a Dennis por salvar 2 bytes.
Isso lê as linhas dos argumentos da linha de comando e o caractere de STDIN.
O intérprete online não suporta argumentos de linha de comando, mas você pode testar uma versão equivalente aqui.
Explicação
fonte
Pip ,
222018 + 1 = 19 bytesToma seqüências de caracteres como argumentos de linha de comando e delimitador de STDIN ( ideia emprestada da resposta CJam de Martin ). Usa
-n
sinalizador para imprimir valores de saída em linhas separadas.E um exemplo de execução:
fonte
JavaScript ES 2015, 113 bytes
Não é tão curto quanto os idiomas de golfe publicados até agora. Aceita entrada como dois argumentos de função, por exemplo
f(',','Programming, Puzzles\nAnd, Code golf')
. O trecho de código abaixo é simples e inclui um método fácil de testar.fonte
Pitão,
2724 bytesAtualizado para o Pyth mais recente .
Demonstração ao vivo.
Versão de 27 bytes
Demonstração ao vivo.
fonte
jbm
no início da sua resposta, comece a pensar imediatamenteV
.b
Julia, 117 bytes
Ungolfed:
fonte
Python 3, 85 (IDLE 3.2.2, Windows)
Bem direto. Ele encontra a posição do caractere na string duas vezes: uma vez para encontrar o máximo (bem, uma vez por linha) e uma vez para encontrar o deslocamento. Eu tentei combinar isso, mas foi mais longo.
Python 3 é usado para descompactar a entrada. MY IDLE parece ter seqüências de linhas múltiplas como entrada.
fonte
c
obtém o delimitador es
uma lista vazia. Chamadas subsequentes parainput()
retornar as linhas restantes, uma a uma.Gelatina , 12 bytes
Experimente online!
Feito e golfed com coinheringaahing caird em J elly H Yper T chover (JHT) , a nossa prática sala de chat geléia.
Como funciona
O terceiro argumento da linha de comando (primeira entrada) deve ser a sequência de várias linhas e o caractere deve ser o quarto argumento da linha de comando (segunda entrada).
Não tenho certeza se a entrada de entrada como uma lista de linhas é permitida, portanto, isso exige uma seqüência de linhas múltiplas como entrada. Se fosse permitido:
10 bytes
Experimente online!
fonte
Matlab / Octave, 106 bytes
Função que usa três argumentos separados para caractere, sequência, sequência; e dá resultado em stdout:
Exemplo no Matlab:
Ou tente online com o intérprete Octave.
fonte
Julia, 80 bytes
Ungolfed:
fonte
JavaScript (ES6), 105
Usando seqüências de caracteres de modelo, as duas novas linhas são significativas e contadas.
Teste a execução do snippet em qualquer navegador compatível com EcmaScript 6 (que é o FireFox. O Chrome não suporta parâmetros padrão)
fonte
Python 2, 93 bytes
Chamado assim:
fonte
C # 4.0,
329320307 bytesVersão não destruída:
Aceita no máximo 9999 linhas ...
fonte
Dyalog APL ,
222016 bytes-4 graças a ngn.
O APL, na verdade, não é tão ruim no processamento de strings, se for permitido trabalhar com matrizes. Nesse desafio, podemos escolher o formato mais apropriado, que para APL significa um vetor de vetores de texto como argumento à esquerda e o delimitador como um argumento à direita escalar. Isso até lida com vários delimitadores por linha e alinha o primeiro de cada linha.
⊣,¨⍨
acrescente cada linha com' '⍴¨⍨
tantos espaços quanto⌈.⍳
o índice mais à direita do caractere entre as linhas-
menos⍳¨
o índice do caractere em cada linhaExperimente o APL online! (
↑
adicionado à saída de impressão verticalmente)Bônus? Funciona para qualquer número de seqüências de caracteres e delimitadores (alinha pela esquerda).
fonte
⊣,¨⍨' '⍴¨⍨⌈.⍳-⍳¨
C #, 191
Como uma função. Aproximadamente uma portabilidade da minha resposta JS.
fonte
Ruby, 74 bytes
e chame assim
fonte
R, 68 bytes
Função sem nome que recebe
3
entradas;c
qual é o caractere a alinhar,x
é a primeira ey
a segunda string.Em R, a função
regexpr
retorna a posição de um determinado padrão em uma sequência. A solução funciona aplicandoregexpr
em ambas as strings e repetindo espaços em branco que equivalem à diferença e, posteriormente, apenas imprima ambas as entradas separadas por uma nova linha.fonte
Python 2,
6766 bytesChamado com:
fonte
Moonscript, 138 bytes
Isso retorna uma função que recebe 2 argumentos. O primeiro é a string, o segundo é o caractere a ser alinhado. Esses argumentos são o argumento implícito @ e n.
Primeiro, anexo uma nova linha à string, para facilitar o processamento.
Agora, eu gero uma lista das posições de cada caractere de alinhamento usando
gmatch
. Em seguida, substituo a nova linha antes de cada linha pelo número correto de espaços e apare a nova linha que adicionei no início.fonte
Lua, 169 bytes
Não é tão curto quanto as outras respostas, mas esta é a minha primeira: D
fonte
Retina , 71 bytes
Experimente online! Nota: Isso deixa o caractere de alinhamento na saída; Ele pode ser excluído a um custo de 4 bytes. Se apenas duas cadeias precisarem ser alinhadas, então para 52 bytes:
Explicação:
Isso corresponde ao caractere de alinhamento.
Isso corresponde à primeira linha e também controla quantos caracteres havia antes do caractere de alinhamento. (O .NET mantém uma pilha de correspondências para cada variável, neste caso
$3
,.)Isso corresponde à segunda linha, tentando contabilizar o número de caracteres encontrado na primeira linha.
?<-3>
faz com que a correspondência apareça a pilha de cada caractere, até que ela esteja vazia; nesse ponto, a correspondência falhará e, em(.)*
seguida, corresponderá aos caracteres restantes antes do caractere de alinhamento. Neste ponto, temos as seguintes variáveis:$1
contém o caractere de alinhamento$2
contém a primeira linha$3
contém uma pilha cujo comprimento é o prefixo da primeira linha menos o prefixo da segunda linha$4
contém a segunda linha$5
contém uma pilha cujo comprimento é o prefixo da segunda linha menos o prefixo da primeira linha$#5$*
prefixa o número necessário de espaços para alinhar a primeira linha com a segunda e vice-versa para$#3$*
.Lógica semelhante se aplica à resposta principal, exceto aqui temos que encontrar duas linhas que não se alinham para que possamos alinhá-las (é aqui que elas
?(5)
entram) e depois repetir o alinhamento sobre todas as linhas até que todas estejam igualmente alinhadas .fonte
Lisp comum, 101 bytes
O primeiro parâmetro é o caractere, o segundo é uma lista de cadeias a serem alinhadas.
Experimente online!
fonte