Você recebe uma string. Produza a sequência com um espaço por palavras.
Desafio
A entrada será uma string (não null
ou vazia), cercada por aspas ( "
) enviadas via stdin
. Remova espaços à esquerda e à direita. Além disso, se houver mais de um espaço entre duas palavras (ou símbolos ou o que for), apare-o em apenas um espaço. Saída a string modificada com as aspas.
Regras
- A string não terá mais de 100 caracteres e conterá apenas caracteres ASCII no intervalo
(espaço) a
~
(til) (códigos de caracteres 0x20 a 0x7E, inclusive)"
, exceto , por exemplo, que a string não conterá aspas ("
) e outros caracteres fora do intervalo especificado acima. Consulte a tabela ASCII para referência. - Você deve receber informações da
stdin
(ou alternativa mais próxima). - A saída deve conter aspas (
"
). - Você pode escrever um programa completo ou uma função que recebe entrada (de
stdin
) e gera a sequência final
Casos de teste
"this is a string " --> "this is a string"
" blah blah blah " --> "blah blah blah"
"abcdefg" --> "abcdefg"
" " --> ""
"12 34 ~5 6 (7, 8) - 9 - " --> "12 34 ~5 6 (7, 8) - 9 -"
Pontuação
Isso é código de golfe, então a submissão mais curta (em bytes) vence.
must take input from stdin
, e depois você diz...or a function which takes input, and outputs the final string
. Isso significa que a função também deve receber informaçõesstdin
?" "aa" "
->""aa""
(são citações válidas dentro da cadeia de entrada?)Respostas:
CJam, 7 bytes
Código Explicação
O CJam reservou todas as letras maiúsculas como variáveis embutidas. Então,
S
tem o valor de um espaço aqui.Isso remove também os espaços à direita e à direita
Experimente online aqui
fonte
/// : 18 caracteres
Exemplo de execução:
(Usando o intérprete de faubiguy de sua resposta Perl para Interpretar /// (pronunciado 'barras') .)
fonte
Perl, 22
(20 bytes de código, mais 2 opções de linha de comando)
Precisa ser executado com o
-np
comutador para que$_
seja preenchido automaticamente via stdin e impresso em stdout. Vou assumir que isso adiciona 2 à contagem de bytes.fonte
sed -E 's/ +/ /g;s/" | "/"/g'
-p
implica-n
que você só precisa aplicar uma penalidade de +1 aqui (supondo que você não mude apenas para um idioma diferente, como sugerem os outros comentaristas).Ruby,
31292523 BytesCódigo Explicação:
p
gera string entre aspas duplas paraSTDOUT
( Há mais do que isso ...)$*
é uma matriz deSTDIN
entradas,$*[0]
pega a primeirastrip
remove os espaços inicial e finalsqueeze ' '
substitui> 1 caracteres de espaço por um único espaçoCasos de teste:
fonte
ARGV
por$*
salvar dois bytes.gsub /\s+/, ' '
pode ser substituído comsqueeze ' '
por mais 4 bytes$*
, eu não sabia disso. Mas não podemos substituirgsub /\s+/, ' '
por,squeeze
porque eles não são os mesmos .squeeze ' '
apenas espremerá espaços."yellow moon".squeeze "l" => "yelow moon"
p
como seu parâmetrosqueeze
e seu parâmetro são desnecessários.Pitão,
17151110 bytes(obrigado a Ypnypn e FryAmTheEggman )
Provavelmente poderia ser jogado mais.
Se a saída puder ser usada em
'
vez de"
, só preciso de 8 bytes:fonte
N
vez de\"
d
.d
tudo o que pode ser usado?p
para salvar alguns bytes na concatenação de cadeias, em vez de muitas+
es.pjd-cQdkNN
Bash,
3632 bytesComo uma função, um programa ou apenas em um pipe:
Explicação
O primeiro
xargs
retira as aspas.O segundo
xargs
apara o lado esquerdo e substitui vários espaços adjacentes no meio da cadeia por um espaço, pegando cada "palavra" e separando cada um com um espaço.A
xargs -i echo '"{}"'
apara o lado direito e rewraps a string resultante entre aspas duplas.fonte
x=xargs;$x|$x|$x -i echo '"{}"'
Haskell,
3125 byteswords
divide a string em uma lista de strings com espaços como delimitadores eunwords
une a lista de strings com um único espaço no meio. As aspas"
são retiradas e recolocadas pelas funções de Haskellread
eshow
(implicitamente via REPL) nas strings.A saída pela própria função é três bytes mais longa, ou seja, 28 bytes:
Edit: @Mauris apontou para a
readLn
função, que salvou alguns bytes.fonte
Parse error: naked expression at top level
quando testei os dois códigos aquimain=interact$show.unwords.words.read
. Há um REPL on-line na fachada do haskell.org (requer cookies ativados) onde você pode tentarfmap(unwords.words.read)getLine
.fmap(unwords.words)readLn
eprint.unwords.words=<<readLn
são um pouco mais curtos.readLn
.R, 45 bytes
A
readline()
função lê STDIN, eliminando automaticamente qualquer espaço em branco à esquerda e à direita. O excesso de espaço entre as palavras é removido usandogsub()
. Finalmente, aspas duplas são anexadas e anexadas e o resultado é impresso em STDOUT.Exemplos:
fonte
[1] "This is a string"
Python2, 37
Reduzido em 1 byte graças a @ygramul.
Versão original:
Casos de teste:
fonte
print" ".join(raw_input().split())
, mas teria um espaço à direita no interior da última aspa se houvesse espaços após a última palavra ...JavaScript (ES6), 49
52 58Edite 6 bytes mais curtos, graças ao @Optimizer
Editar 2 -3, graças a @nderscore
Entrada / saída via pop-up. Usando a sequência de modelo para cortar 1 byte na concatenação de sequência.
Execute o snippet para testar no Firefox.
fonte
alert(`"${eval(prompt()).match(/\S+/g).join(" ")}"`)
- 52alert(`"${prompt().match(/[^ "]+/g).join(" ")}"`)
05AB1E , 9 bytes
Experimente online!
fonte
Mathematica, 75 bytes
fonte
KDB (Q), 28 bytes
Explicação
Teste
fonte
Java 8, 43 bytes
Explicação:
Experimente aqui.
fonte
Oitava , 44 bytes
Experimente online!
fonte
Perl 5 , 17 bytes
16 bytes de código + 1 para
-p
Experimente online!
fonte
Jq 1.5 , 42 bytes
Sample Run
Experimente online
fonte
Tcl , 69 bytes
Experimente online!
Tcl , 79 bytes
Experimente online!
fonte
Japonês
-Q
,104 bytesTente
fonte
golfua, 42 bytes
Substituição simples da correspondência de padrões: encontre aspas duplas (
\"
) cercadas por 0 ou mais espaços (%s*
) e retorne a aspas simples e substitua todos os 1 ou mais espaços (%s+
) por um único espaço.Um equivalente Lua seria
fonte
Cobra - 68
Como uma função anônima:
fonte
Objetivo-C 215
Versão não compactada:
fonte
Bash, 14 bytes
fonte
PowerShell, 40 bytes
Bem direto e não muito impressionante.
Explicação
Pegue o parâmetro de entrada através da variável args (predefinida), substitua todos os espaços múltiplos por um, apare os espaços iniciais e finais usando o método trim () -, adicione aspas. O Powershell imprimirá seqüências de caracteres no console como comportamento padrão.
fonte
k4, 23 bytes
fonte
Zsh , 15 bytes
Experimente online!
A sequência de entrada contém aspas incorporadas. Remova o
Q
para 14 bytes se a cadeia de entrada não contém citações embutidas, como é feito em alguns dos outros respostas aqui.Sinalizadores de expansão de parâmetro:
Q
dequotes, depois sez
dividem em palavras como o shell. As palavras são então implicitamente unidas por espaços.fonte
Carriça , 56 bytes
Esperar. A substituição faz apenas uma vez ? Agora eu tenho que usar o combo split-join.
Experimente online!
Explicação
fonte
GolfScript , 8 bytes
Experimente online!
Explicação
A lógica é bastante simples:
fonte
Python2, 28 bytes
Explicação
Função anônima que recebe como entrada s.
Retorna uma lista das palavras (que são separadas por seqüências arbitrárias de caracteres de espaço em branco) da sequência s.
Junta a lista novamente a uma sequência, com cada palavra separada por um espaço ("").
fonte