Reversão de palavras


30

Sona está em sua casa com sua filha de 10 anos. Ela precisa ir à escola para trazer outra criança da escola, pois a escola termina às 14h. Está quente lá fora, então ela quer deixar seu filho mais novo em casa.

Ela deu um monte de cordas ao filho para mantê-lo ocupado enquanto ela estava fora. Ela pediu a ela para reverter as palavras na corda. Existem muitas seqüências de caracteres, então você precisa ajudar a filha a resolver essa tarefa enorme.

Portanto, dada uma sequência que contém palavras separadas por espaço único, inverta as palavras na sequência. Você pode assumir que não há espaços à esquerda ou à direita.

A cadeia conterá apenas [a-zA-z ], portanto, você não precisa manipular a pontuação.

Você receberá uma string como entrada e deverá produzir uma string.

Casos de teste de amostra:

Input:
Man bites dog 

Output: 
dog bites Man


Input:
The quick brown fox jumps over the lazy dog

Output:
dog lazy the over jumps fox brown quick The


Input:
Hello world

Output:
world Hello

Pontuação

Isso é . A resposta mais curta em bytes vence.



1
Podemos considerar a entrada como uma lista de palavras? (ie ['man', 'bites', 'dog'])
Rɪᴋᴇʀ 17/05/19

3
A saída pode ter espaços em branco à direita?
Digital Trauma

Respostas:


11

Retina , 7 bytes

O$^`\w+

Experimente online!

Combine todas as palavras ( \w+) e classifique-as com a chave de classificação vazia ( O$), o que significa que elas não serão classificadas e inverta a ordem ( ^).


Nunca usei Retina, mas por que você precisa 0$? Você não pode simplesmente reverter isso?
caird coinheringaahing

O modo de classificação @RandomUser ( O) atualmente é o único modo que tem essa opção reversa.
Martin Ender



7

JavaScript (ES6), 31 bytes

s=>s.split` `.reverse().join` `

Tente

f=
s=>s.split` `.reverse().join` `
o.innerText=f(i.value="Man bites dog")
oninput=_=>o.innerText=f(i.value)
<input id=i><pre id=o>


1
São respostas como essa, que são essencialmente as mesmas da minha resposta em C # que me fazem odiar C # por jogar golfe. Todo o fluff extra na minha resposta quase dobra a contagem de bytes ... +1
TheLethalCoder 17/17/17

Nota lateral: No C #, se você não passar nada para Splitele, divide-se no espaço em branco por padrão, pode fazer o mesmo aqui?
TheLethalCoder

1
Infelizmente, @TheLethalCoder, se você não fornecer uma string / regex splitem JS, ele será dividido em cada caractere individual ou criará uma matriz com um único elemento contendo a string original, dependendo da sintaxe usada.
Shaggy

7

Bash + utilitários comuns do Linux, 21

printf "$1 "|tac -s\ 

Deixa um espaço à direita na sequência de saída - não tenho certeza se está tudo bem ou não.


2
Parabéns por 50k !! Sua vez hoje :-)
Luis Mendo

@LuisMendo Thanks!
Digital Trauma

6

R, 19 bytes

cat(rev(scan(,'')))

lê a string de stdin. Por padrão, scanlê tokens separados por espaços / novas linhas, e lê as palavras como um vetor. revinverte e catimprime os elementos com espaços.

Experimente online!


6

Braquilog , 6 bytes

ṇ₁↔~ṇ₁

Experimente online!

Explicação

ṇ₁        Split on spaces
  ↔       Reverse
   ~ṇ₁    Join with spaces

Observe que "dividir em espaços" e "unir-se a espaços" usam o mesmo recurso interno, ou seja ṇ₁, são usados ​​apenas em "direções" diferentes.




3

brainfuck , 74 bytes

,[>++++[<-------->-],]<[>++++[->--------<]+>[[<]>[+>]<]<-[<]>[.>]<[[-]<]<]

Experimente online!

Esse código cria o número -32 em dois lugares diferentes, mas isso parece ser menos bytes do que tentar manter um único -32.

Explicação

,[                        input first character
  >++++[<-------->-]      subtract 32 from current character (so space becomes zero)
,]                        repeat for all characters in input
<                         go to last character of last word
[                         while there are more words to display:
 >++++[->--------<]       create -32 two cells right of last letter
 +>                       increment trailing space cell (1 right of last letter) so the next loop works
 [[<]>[+>]<]              add 32 to all cells in word and trailing space cell
 <-                       subtract the previously added 1 from the trailing space
 [<]>                     move pointer to beginning of word
 [.>]<                    output word (with trailing space)
 [[-]<]                   erase word
 <                        move to last character of previous word
]

3

C, 54 48 bytes

Usando argumentos como entrada, 48 bytes

main(c,v)char**v;{while(--c)printf("%s ",v[c]);}

Experimente on-line

> ./a.out man bites dog

Usando ponteiros, 84 bytes

f(char*s){char*t=s;while(*t)t++;while(t-s){while(*t>32)t--;*t=0;printf("%s ",t+1);}}

Usar

main(){ f("man bites dog"); }

3

Japonês , 11 10 7 4 bytes

Minha primeira tentativa no Japt.

¸w ¸

Experimente online


Explicação

    :Implicit input of string U
¸   :Split on <space>
w   :Reverse
¸   :Join with <space>

Compartilhe suas dicas de Japt aqui .


2
Obrigado por usar o Japt :-) Você pode usar ¸no lugar de qS , o que deve economizar três bytes aqui. (Consulte a seção "Atalhos Unicode" dos documentos do intérprete)
ETHproductions

Agradável! você pode salvar um byte se usar o -Ssinalizador .
Oliver

Eu conto 2 bytes, @obarakon. A menos que o sinalizador seja incluído na contagem de bytes, nesse caso, seriam 4 bytes, não?
Shaggy

@Shaggy Cada sinalizador conta como um byte. Assim, -Sseria +1 na sua contagem total de bytes.
Oliver

Ah entendo. Isso é coisa do PPCG ou do Japt?
Shaggy






2

Cubix , 48 bytes

Quase desisti deste, mas finalmente cheguei lá.

oU_;SW;@?ABu>):tS-?;\0$q^s.$;;<$|1osU!(;;...<#(1

Experimente online!

Ele é mapeado para um cubo com um comprimento lateral de três da seguinte maneira

      o U _
      ; S W
      ; @ ?
A B u > ) : t S - ? ; \
0 $ q ^ s . $ ; ; < $ |
1 o s U ! ( ; ; . . . <
      # ( 1
      . . .
      . . .

As etapas gerais são:

  • Obtenha toda a entrada Ae Bpilha reversa
  • Mova o negativo qpara o fundo, adicione um contador 0à pilha. um pouco de pular por aqui.
  • Encontrar espaço / loop final, também coloca a pilha na ordem correta de impressão.
    • Incrementar contador )e buscar o item de contador da pilhat
    • É um espaço ou EOI S-?
    • Repita se não
  • Imprimir palavra loop
    • Contador de diminuição (
    • Laço de saída se o contador !Ufor 0
    • Trocar scontador com caracteres na pilha
    • Imprima o ocaractere e solte-o da pilha;
    • Repetir loop
  • Obter o comprimento da pilha #e diminuir(
  • Verifique ?se 0 e saia @se for 0
  • Caso contrário, imprima uma Solimpeza de espaço ;;e volte ao primeiro loop.

Eu pulei várias etapas supérfluas, mas você pode vê-la passo a passo


2

Mathematica, 35 bytes

StringRiffle@Reverse@StringSplit@#&

Experimente online!


StringSplit[#]divide automaticamente em espaço em branco, para que você não precise especificar o " ".
Não é uma árvore

2
corrigir! -5 bytes!
J42161217 #

Ooh, e acho que você pode salvar outro byte usando a composição da função: StringRiffle@*Reverse@*StringSplit(chame como StringRiffle@*Reverse@*StringSplit@"hello world")
Not a tree

2

Röda , 27 25 bytes

2 bytes salvos graças a @fergusq

{[[split()|reverse]&" "]}

Experimente online!

Esta função recebe entrada do fluxo de entrada.

Explicação (desatualizada)

{[[(_/" ")()|reverse]&" "]}           /* Anonymous function */
   (_/" ")                            /* Pull a value from the stream and split it on spaces */
          ()                          /* Push all the values in the resulting array to the stream */
            |reverse                  /* And reverse it */
  [                 ]                 /* Wrap the result into an array*/
                     &" "             /* Concatenate each of the strings in the array with a space */
 [                       ]            /* And push this result to the output stream */

splitusa espaço como o separador padrão, então split()é menor que (_/" ")().
Fergusq 19/05





1

Gema, 29 caracteres

<W><s>=@set{o;$1 ${o;}}
\Z=$o

Exemplo de execução:

bash-4.4$ gema '<W><s>=@set{o;$1 ${o;}};\Z=$o' <<< 'Man bites dog'
dog bites Man 


1

Perl 6 , 14 bytes

{~[R,] .words}

Tente

Expandido:

{              # lambda with implicit param $_

  ~            # stringify following (joins a list using spaces)

   [R,]        # reduce the following using the Reverse meta operator

        .words # call the words method on $_
}

1

Java 8, 53 57 bytes

API do Lambda + Stream

s->Stream.of(s.split(" ")).reduce("",(a,b)->b+" "+a)

Seguindo a sugestão do Selim, deixamos cair 4 bytes


1
Salve 4 bytes usando em Stream.ofvez de Arrays.stream: -)
Selim


1

Pitão, 3 bytes

_cw

Minha primeira resposta Pyth, um byte menor que a resposta de @ notjagan!

Explicado:

 cw # Split the input by space (same as Python's string.split())
_   # Reverses the array
    # Pyth prints implicitly.
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.