Inversión de palabras

30

Sona está en su casa con su hija de 10 años. Ella necesita ir a la escuela para traer a otro niño de la escuela, ya que la escuela termina a las 2 pm. Hace calor afuera, por lo que quiere dejar a su hijo menor en casa.

Le dio un montón de hilos a su hijo para mantenerla ocupada mientras ella no está. Ella le pidió que invirtiera las palabras en la cadena. Hay muchas cadenas, por lo que debe ayudar a su hija a resolver esta gran tarea.

Entonces, dada una cadena que contiene palabras separadas por un solo espacio, invierta las palabras en la cadena. Puede suponer que no hay espacios iniciales o finales.

La cadena solo contendrá [a-zA-z ] , por lo que no necesita manejar la puntuación.

Se le dará una cadena como entrada, y debe generar una cadena.

Ejemplos de casos de prueba:

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

Tanteo

Este es el . La respuesta más corta en bytes gana.

Cyoce
fuente
1
Relacionado.
Martin Ender
1
¿Podemos tomar la entrada como una lista de palabras? (es decir ['man', 'bites', 'dog'])
Rɪᴋᴇʀ
3
¿Puede la salida tener espacios en blanco al final?
Trauma digital

Respuestas:

11

Retina , 7 bytes

O$^`\w+

Pruébalo en línea!

Haga coincidir todas las palabras ( \w+), ordénelas con una cadena vacía de clave de clasificación ( O$), lo que significa que no se ordenarán en absoluto, y luego invierta su orden ( ^).

Martin Ender
fuente
Nunca usé Retina, pero ¿por qué necesitas el 0$? ¿No puedes simplemente revertirlo?
caird coinheringaahing
@RandomUser sort mode ( O) es actualmente el único modo que tiene esta opción inversa.
Martin Ender
7

JavaScript (ES6), 31 bytes

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

Intentalo

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>

Lanudo
fuente
1
Son respuestas como esta, que es esencialmente la misma que mi respuesta de C # que me hace odiar a C # por jugar al golf. Toda la pelusa adicional en mi respuesta casi duplica el recuento de bytes ... +1
TheLethalCoder
Nota al margen: en C #, si no le pasa nada, Splitse divide en espacios en blanco de forma predeterminada, ¿puede hacer lo mismo aquí?
TheLethalCoder
1
Desafortunadamente no, @TheLethalCoder, si no proporciona una cadena / expresión regular spliten JS, se dividirá en cada carácter individual o creará una matriz con un solo elemento que contiene la cadena original, dependiendo de la sintaxis utilizada.
Shaggy
7

Bash + utilidades comunes de Linux, 21

printf "$1 "|tac -s\ 

Deja un espacio final en la cadena de salida; no estoy seguro de si eso está bien o no.

Trauma digital
fuente
2
¡Felicidades por 50k! Te toca hoy :-)
Luis Mendo
@LuisMendo ¡Gracias!
Trauma digital
6

R, 19 bytes

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

lee la cadena de stdin. Por defecto,scan lee tokens separados por espacios / líneas nuevas, por lo que lee las palabras como un vector. revinvierte e catimprime los elementos con espacios.

Pruébalo en línea!

Giuseppe
fuente
6

Brachylog , 6 bytes

ṇ₁↔~ṇ₁

Pruébalo en línea!

Explicación

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

Tenga en cuenta que tanto "dividir en espacios" como "unir espacios wth" usan el mismo incorporado, es decir ṇ₁, solo se usan en diferentes "direcciones".

Fatalizar
fuente
4

C #, 58 bytes

using System.Linq;s=>string.Join(" ",s.Split().Reverse());
TheLethalCoder
fuente
3

brainfuck , 74 bytes

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

Pruébalo en línea!

Este código crea el número -32 en dos lugares diferentes, pero eso parece ser menos bytes que intentar mantener un solo -32.

Explicación

,[                        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
]
Nitrodon
fuente
3

C, 54 48 bytes

Usando argumentos como entrada, 48 bytes

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

Probar en línea

> ./a.out man bites dog

Usando punteros, 84 bytes

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

Utilizar

main(){ f("man bites dog"); }
Khaled.K
fuente
3

Japt , 11 10 7 4 bytes

Mi primer intento en Japt.

¸w ¸

Pruébalo en línea


Explicación

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

Por favor, comparte tus consejos de Japt aquí .

Lanudo
fuente
2
Gracias por usar Japt :-) Puede usarlo ¸en lugar de qS , lo que debería ahorrarle tres bytes aquí. (Consulte la sección "Accesos directos Unicode" de los documentos del intérprete)
ETHproductions
¡Agradable! puede guardar un byte si usa la -Sbandera .
Oliver
Cuento 2 bytes, @obarakon. A menos que la bandera se incluya en el conteo de bytes, en cuyo caso serían 4 byes, ¿no?
Shaggy
@ Shaggy Cada bandera cuenta como un byte. Entonces -Ssería +1 en su recuento total de bytes.
Oliver
Ah, ya veo. ¿Es eso una cosa PPCG o una cosa Japt?
Shaggy
2

Python 2 , 34 bytes

lambda s:' '.join(s.split()[::-1])

Pruébalo en línea!

totalmente humano
fuente
Fuera de golf. > _> Bueno ... el otro solo funciona en Python 3 ...
totalmente humano
2

05AB1E , 4 bytes

#Rðý

Nota: Solo funcionará para 2 o más palabras. +1 byte si esto no está bien.

Pruébalo en línea!

Okx
fuente
Veo Unicode, ¿son realmente 4 bytes?
Val dice Reinstate Monica
Sí, 05AB1E usa una página de códigos
kalsowerus
#R¸»solución alternativa de 4 bytes: P.
Magic Octopus Urn
2

Marca GNU , 62 bytes

$(if $1,$(call $0,$(wordlist 2,$(words $1),$1)) $(word 1,$1),)
eush77
fuente
2

Cubix , 48 bytes

Casi me di por vencido con este, pero finalmente llegué allí.

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

Pruébalo en línea!

Esto se asigna a un cubo con una longitud lateral de tres de la siguiente manera

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

Los pasos generales son:

  • Obtenga toda la entrada Ay reviertaB pila
  • Mueve el negativo qhacia abajo, agrega un contador 0a la pila. un poco de saltar por aquí.
  • Buscar espacio / bucle final, también coloca la pila en el orden de impresión correcto.
    • Incremente el contador )y obtenga el artículo del contador de la pilat
    • ¿Es un espacio o EOI? S-?
    • Repita si no
  • Imprimir bucle de palabras
    • Contador de decremento (
    • Salir del bucle si el contador !U es 0
    • Intercambiar s contador con el personaje en la pila
    • Imprime el opersonaje y sácalo de la pila;
    • Repita el ciclo
  • Obtenga la longitud de la pila #y disminuya(
  • Verifique ?si 0 y salga@ si es 0
  • De lo contrario, imprima un espacio de Solimpieza ;;y vuelva al primer bucle.

Me he saltado varios pasos superfluos, pero puedes verlo paso a paso

MickyT
fuente
2

Mathematica, 35 bytes

StringRiffle@Reverse@StringSplit@#&

Pruébalo en línea!

J42161217
fuente
StringSplit[#]se divide automáticamente en espacios en blanco, por lo que no necesita especificar el " ".
No es un árbol
2
¡correcto! -5 bytes!
J42161217
Ooh, y creo que puedes guardar otro byte usando la composición de funciones: StringRiffle@*Reverse@*StringSplit(llámalo como StringRiffle@*Reverse@*StringSplit@"hello world")
No es un árbol
2

Röda , 27 25 bytes

2 bytes guardados gracias a @fergusq

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

Pruébalo en línea!

Esta función toma la entrada del flujo de entrada.

Explicación (obsoleta)

{[[(_/" ")()|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 */
Kritixi Lithos
fuente
splitusa el espacio como separador predeterminado, por lo que split()es más corto que (_/" ")().
fergusq
1

Ohm , 4 bytes

z]Qù

Pruébalo en línea!

Explicación

z     Split the input on spaces.
 ]    Dump it onto the stack.
  Q   Reverse the stack.
   ù  Join the stack with spaces. Implicit output.
Gato de negocios
fuente
1

CJam , 7 bytes

qS/W%S*

Pruébalo en línea!

Explicación

q        e# Read input
 S/      e# Split on spaces
   W%    e# Reverse
     S*  e# Join with spaces
Gato de negocios
fuente
1

J , 6 bytes

|.&.;:

Pruébalo en línea! Esto es reverse ( |.) bajo ( &.) palabras ( ;:). Es decir, dividir la oración en palabras, revertirla y unirla nuevamente.

Conor O'Brien
fuente
1

Gema, 29 personajes

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

Ejecución de muestra:

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

Java 8, 62 bytes

s->{String r="";for(String x:s.split(" "))r=x+" "+r;return r;}

Pruébalo aquí.

Java 7, 77 bytes

String c(String s){String r="";for(String x:s.split(" "))r=x+" "+r;return r;}

Pruébalo aquí.

Kevin Cruijssen
fuente
1

Perl 6 , 14 bytes

{~[R,] .words}

Intentalo

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 $_
}
Brad Gilbert b2gills
fuente
1

Java 8, 53 57 bytes

API Lambda + Stream

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

Siguiendo la sugerencia de Selim, simplemente eliminamos 4 bytes

usuario902383
fuente
1
Ahorre 4 bytes utilizando en Stream.oflugar de Arrays.stream: -)
Selim
1

Pyth, 3 bytes

_cw

Mi primera respuesta Pyth, ¡un byte más corto que la respuesta de @ notjagan!

Explicado:

 cw # Split the input by space (same as Python's string.split())
_   # Reverses the array
    # Pyth prints implicitly.
OldBunny2800
fuente