Dada a entrada de duas strings com seqüências de sublinhados representando as palavras correspondentes, imprima as frases com os "espaços em branco" preenchidos.
A melhor maneira de descrever esse desafio é pelo exemplo. Aqui está um exemplo de entrada:
programming _____________ and code golf
programming puzzles ______ code ____
E aqui está a saída correspondente:
programming ___puzzles___ and code golf
programming puzzles _and__ code golf
Para os fins deste desafio, uma "palavra" é definida como uma sequência de uma ou mais letras minúsculas e um "em branco" é definido como um ou mais sublinhados (a entrada sempre conterá apenas letras minúsculas, espaços e sublinhados) . Palavras e espaços em branco nas cadeias de entrada são separados por espaços únicos, e a soma do número de palavras e espaços em branco nas frases sempre será igual.
O objetivo do desafio é preencher todos os espaços em branco com as palavras corretas , que são as que ocupam o mesmo índice na outra sequência quando divididas por espaços.
A palavra deve estar centralizada em branco, conforme mostrado com a palavra "quebra-cabeças" no exemplo acima - um número igual de sublinhados permanece em ambos os lados.
Se a palavra não puder ser exatamente centralizada, o sublinhado extra poderá ficar à esquerda ou à direita (por exemplo, a palavra "e" no exemplo acima).
Sempre haverá sublinhados suficientes para a palavra caber, mas pode haver exatamente o tamanho da palavra (por exemplo, a palavra "golfe" no exemplo acima).
Nunca haverá um espaço em branco na mesma posição nas duas cadeias.
Entrada / saída pode ser uma das seguintes opções (entrada / saída não precisa necessariamente ser pelo mesmo método):
sequência única separada por qualquer caractere que não seja alfabético, espaço ou sublinhado (por exemplo, sequência separada por nova linha ou vírgula)
uma matriz / lista / etc. de duas cordas
dois argumentos de função / linha de comando (apenas entrada)
Como esse é o código-golfe , o código mais curto em bytes será vencedor.
O exemplo acima pode ser usado como um caso de teste. Aqui está um caso de teste maior (a segunda sequência na saída pode variar um pouco devido ao comportamento de centralização diferente):
lorem _____ dolor _____ amet _______________ adipiscing elit mauris dapibus tincidunt _____________________________ accumsan fringilla proin vulputate viverra lorem fermentum dictum
lorem ipsum ______ sit _______ consectetur _______________ elit mauris dapibus tincidunt metus accumsan fringilla proin vulputate viverra lorem ____________________________ dictum
lorem ipsum dolor _sit_ amet __consectetur__ adipiscing elit mauris dapibus tincidunt ____________metus____________ accumsan fringilla proin vulputate viverra lorem fermentum dictum
lorem ipsum dolor_ sit _amet__ consectetur __adipiscing___ elit mauris dapibus tincidunt metus accumsan fringilla proin vulputate viverra lorem _________fermentum__________ dictum
Respostas:
Pyth, 30
Recebe entradas e saídas como uma lista de duas strings. Usa uma abordagem bastante básica de divisão - zip - mapa duplo - centro - zip - junção.
Experimente aqui
Expandido:
Vou explicar mais uma vez que estou realmente satisfeito de não poder jogar mais isso, embora deva ficar bem claro, dada a onipresença da abordagem de divisão - zip - mapa duplo - centro - zip - junção e tudo.
fonte
Retina ,
1021009388 bytesA contagem de bytes assume a codificação ISO 8859-1.
As strings serão separadas por um avanço de linha. Se houver um número ímpar de sublinhados, o estranho será depois da palavra.
Experimente online!
Explicação
Eu acho que essa é a "abordagem duplicar-acrescentar-lookback-combinar-adicionar-centro", ou algo próximo ...
Começamos duplicando a entrada (separada por um
!
e um avanço de linha). O objetivo disso é que podemos processar as duas linhas buscando palavras da próxima linha (em vez de precisar tratar a segunda linha separadamente).Isso antecede a palavra correta a cada intervalo. Começamos contando a posição atual da palavra com o lookback
(?<=^(\w+ )*)
(a posição é armazenada como a profundidade do grupo1
). Em seguida, a cabeça de impressão a) garante que estamos no início de uma lacuna combinando e_
, em seguida, pula para a próxima linha com.*¶
, combina o número correto de palavras com(?<-1>\w+ )*
para chegar à posição correta e, em seguida, combina com a palavra encontrada lá(\w+)
em grupo2
.Esta etapa faz três coisas:
2
com([a-z])+
e, em seguida, combinar que muitos sublinhados (que nunca são escritos de volta).(_*)\3
e escrevendo de$3$1$3
volta.!\D+
e substituindo-a por nada.fonte
Python 2, 109
A função pega duas strings como argumentos e imprime a saída como nos exemplos. Ele usa uma abordagem chata,
str.center(width, fillchar)
fazendo a maior parte do trabalho.Experimente online .
fonte
z
, a menos que esteja faltando alguma coisa, você pode fazer a troca após a impressão e a impressão em linhaz
.Ruby,
111109 caracteresEntrada: matriz de 2 strings; output: array de 2 strings.
Exemplo de execução:
fonte
JavaScript,
194185 bytesPega duas strings como parâmetros e gera duas strings como array / list
Mostrar snippet de código
fonte
Mathematica 223
Deve haver uma maneira mais curta de fazer isso.
Execução de amostra
fonte
Gema,
208203 caracteresSó porque Gema tem a função perfeita para esta tarefa: .
@fill-center{background;value}
Entrada: 2 linhas separadas por nova linha (sem nova linha final); saída: 2 linhas separadas por nova linha (com espaços à direita - não parece ser proibido).
Exemplo de execução:
fonte
C, 197 bytes
Resultado
fonte
ES6, 122 bytes
Toma uma matriz de duas cadeias como um único parâmetro e retorna outra matriz de duas cadeias.
fonte