Odwracanie słów

30

Sona jest w domu z 10-letnią córką. Musi iść do szkoły, aby przyprowadzić kolejne dziecko ze szkoły, ponieważ szkoła kończy się o godzinie 14.00. Na zewnątrz jest gorąco, więc chce zostawić swoje młodsze dziecko w domu.

Podała swojemu dziecku wiązankę sznurków, aby zajęły się nią, gdy jej nie będzie. Poprosiła ją, aby odwróciła słowa w ciągu. Jest wiele łańcuchów, więc musisz pomóc jej córce w rozwiązaniu tego wielkiego zadania.

Tak więc, biorąc pod uwagę ciąg zawierający słowa oddzielone pojedynczą spacją, odwróć słowa w ciągu. Możesz założyć, że nie ma spacji wiodących ani końcowych.

Ciąg będzie zawierał tylko [a-zA-z ], więc nie musisz obsługiwać interpunkcji.

Otrzymasz ciąg jako dane wejściowe i powinieneś wygenerować ciąg.

Przykładowe przypadki testowe:

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

Punktacja

To jest . Najkrótsza odpowiedź w bajtach wygrywa.

Cyoce
źródło
1
Związane z.
Martin Ender
1
Czy możemy przyjąć dane wejściowe jako listę słów? (tj. ['man', 'bites', 'dog'])
Rɪᴋᴇʀ
3
Czy wydruk może zawierać końcowe białe znaki?
Cyfrowa trauma

Odpowiedzi:

11

Siatkówka , 7 bajtów

O$^`\w+

Wypróbuj online!

Dopasuj wszystkie słowa ( \w+) posortuj je za pomocą klucza sort pustego łańcucha ( O$), co oznacza, że ​​nie zostaną w ogóle posortowane, a następnie odwrócą swoją kolejność ( ^).

Martin Ender
źródło
Nigdy nie korzystałem z Retiny, ale dlaczego jej potrzebujesz 0$? Nie możesz tego po prostu odwrócić?
caird coinheringaahing
Tryb sortowania @RandomUser ( O) jest obecnie jedynym trybem, który ma tę opcję odwrotną.
Martin Ender
7

JavaScript (ES6), 31 bajtów

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

Spróbuj

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>

Kudłaty
źródło
1
To takie odpowiedzi, które są zasadniczo takie same, jak moja odpowiedź w języku C #, co sprawia, że ​​nienawidzę języka C # do gry w golfa. Cały dodatkowy puch w mojej odpowiedzi prawie podwaja liczbę bajtów ... +1
TheLethalCoder
Uwaga dodatkowa: jeśli w C # nic nie przekazujesz Split, domyślnie dzieli się na białe znaki, czy możesz zrobić to samo tutaj?
TheLethalCoder
1
Niestety nie @TheLethalCoder, jeśli nie podasz ciągu / wyrażenia regularnego splitw JS, albo podzieli się na każdy pojedynczy znak, albo utworzy tablicę z pojedynczym elementem zawierającym oryginalny ciąg, w zależności od użytej składni.
Shaggy
7

Bash + typowe narzędzia Linux, 21

printf "$1 "|tac -s\ 

Pozostawia końcowe miejsce w ciągu wyjściowym - nie jestem pewien, czy to jest w porządku, czy nie.

Cyfrowa trauma
źródło
2
Gratulacje za 50k !! Twoja kolej dzisiaj :-)
Luis Mendo
@LuisMendo Thanks!
Cyfrowa trauma
6

R, 19 bajtów

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

czyta ciąg ze standardowego wejścia. Domyślnie scanodczytuje tokeny oddzielone spacjami / znakami nowej linii, więc odczytuje słowa jako wektor. revodwraca i catdrukuje elementy ze spacjami.

Wypróbuj online!

Giuseppe
źródło
6

Brachylog , 6 bajtów

ṇ₁↔~ṇ₁

Wypróbuj online!

Wyjaśnienie

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

Zauważ, że zarówno „dzielenie na spacje”, jak i „łączenie ze spacjami” używają tego samego wbudowanego, to znaczy ṇ₁, po prostu używanego w różnych „kierunkach”.

Fatalizować
źródło
4

C #, 58 bajtów

using System.Linq;s=>string.Join(" ",s.Split().Reverse());
TheLethalCoder
źródło
3

pieprzenie mózgu , 74 bajty

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

Wypróbuj online!

Ten kod tworzy liczbę -32 w dwóch różnych miejscach, ale wydaje się, że jest to mniej bajtów niż próba utrzymania pojedynczego -32.

Wyjaśnienie

,[                        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
źródło
3

C, 54 48 bajtów

Wykorzystanie argumentów jako danych wejściowych, 48 bajtów

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

Wypróbuj online

> ./a.out man bites dog

Używając wskaźników, 84 bajtów

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

Posługiwać się

main(){ f("man bites dog"); }
Khaled.K
źródło
3

Japt , 11 10 7 4 bajtów

Moja pierwsza próba dla Japt.

¸w ¸

Wypróbuj online


Wyjaśnienie

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

Podziel się swoimi wskazówkami Japt tutaj .

Kudłaty
źródło
2
Dziękujemy za skorzystanie z Japt :-) Możesz użyć ¸zamiast qS , co powinno zaoszczędzić ci tutaj trzy bajty. (Zobacz sekcję „Skróty Unicode” w dokumentacji tłumacza)
ETHproductions
Miły! możesz zapisać bajt, jeśli używasz -Sflagi .
Oliver
Liczę 2 bajty, @obarakon. Jeśli flaga nie jest uwzględniona w liczbie bajtów, w takim przypadku byłyby to 4 bajty, nie?
Kudłaty
@Shaggy Każda flaga liczy się jako jeden bajt. Więc -Sbyłoby +1 do całkowitej liczby bajtów.
Oliver
O, rozumiem. Czy to rzecz PPCG czy Japt?
Kudłaty
2

Python 2 , 34 bajty

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

Wypróbuj online!

całkowicie ludzki
źródło
Nie gra w golfa. > _> Cóż ... ten drugi działa tylko w Pythonie 3 ...
całkowicie ludzki
2

05AB1E , 4 bajty

#Rðý

Uwaga: Działa tylko dla 2 lub więcej słów. +1 bajt, jeśli to nie jest OK.

Wypróbuj online!

Okx
źródło
Widzę Unicode, czy to naprawdę 4 bajty?
val mówi Przywróć Monikę
Tak, 05AB1E używa niestandardowej strony kodowej
kalsowerus
#R¸»alternatywne rozwiązanie 4-bajtowe: P.
Magic Octopus Urn
2

PHP, 47 bajtów

<?=join(" ",array_reverse(explode(" ",$argn)));

Wypróbuj online!

Jörg Hülsermann
źródło
2

Marka GNU , 62 bajty

$(if $1,$(call $0,$(wordlist 2,$(words $1),$1)) $(word 1,$1),)
eush77
źródło
2

Cubix , 48 bajtów

Prawie się poddałem, ale w końcu dotarłem.

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

Wypróbuj online!

Mapuje to na sześcian o długości boku wynoszącej trzy w następujący sposób

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

Ogólne kroki to:

  • Zbierz wszystkie wejściowe Ai odwrotne Bstosy
  • Przenieś negatyw qna dół, dodaj licznik 0do stosu. trochę skakać tutaj.
  • Znajdź pętlę spacji / końca, a także ustawia stos we właściwej kolejności drukowania.
    • Przyrost licznika )i pobranie elementu licznika ze stosut
    • Czy to spacja czy EOI S-?
    • Powtórz, jeśli nie
  • Wydrukuj pętlę słów
    • Licznik malejący (
    • Wyjdź z pętli, jeśli licznik !Uma wartość 0
    • Zamień slicznik z postacią na stosie
    • Wydrukuj opostać i wyrzuć ją ze stosu;
    • Powtórz pętlę
  • Uzyskaj długość stosu #i zmniejszenie(
  • Sprawdź, ?czy 0 i wyjdź, @jeśli jest to 0
  • W przeciwnym razie wydrukuj miejsce do Soczyszczenia ;;i wróć do pierwszej pętli.

Pominąłem wiele zbędnych kroków, ale widać to krok po kroku

MickyT
źródło
2

Mathematica, 35 bajtów

StringRiffle@Reverse@StringSplit@#&

Wypróbuj online!

J42161217
źródło
StringSplit[#]automatycznie dzieli się na białe znaki, więc nie trzeba określać " ".
Nie ma drzewa
2
poprawny! -5 bajtów!
J42161217
Ooh, i myślę, że możesz zapisać kolejny bajt, używając kompozycji funkcji: StringRiffle@*Reverse@*StringSplit(nazwij to jak StringRiffle@*Reverse@*StringSplit@"hello world")
To nie drzewo
2

Röda , 27 25 bajtów

2 bajty zapisane dzięki @fergusq

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

Wypróbuj online!

Ta funkcja pobiera dane ze strumienia wejściowego.

Wyjaśnienie (nieaktualne)

{[[(_/" ")()|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
źródło
splitużywa spacji jako domyślnego separatora, więc split()jest krótszy niż (_/" ")().
fergusq
1

Ohm , 4 bajty

z]Qù

Wypróbuj online!

Wyjaśnienie

z     Split the input on spaces.
 ]    Dump it onto the stack.
  Q   Reverse the stack.
   ù  Join the stack with spaces. Implicit output.
Business Cat
źródło
1

CJam , 7 bajtów

qS/W%S*

Wypróbuj online!

Wyjaśnienie

q        e# Read input
 S/      e# Split on spaces
   W%    e# Reverse
     S*  e# Join with spaces
Business Cat
źródło
1

J , 6 bajtów

|.&.;:

Wypróbuj online! Jest to reverse ( |.) under ( &.) words ( ;:). To znaczy podziel zdanie na słowa, odwróć je i ponownie dołącz do zdania.

Conor O'Brien
źródło
1

Gema, 29 znaków

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

Przykładowy przebieg:

bash-4.4$ gema '<W><s>=@set{o;$1 ${o;}};\Z=$o' <<< 'Man bites dog'
dog bites Man 
człowiek w pracy
źródło
1

Java 8, 62 bajty

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

Wypróbuj tutaj.

Java 7, 77 bajtów

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

Wypróbuj tutaj.

Kevin Cruijssen
źródło
1

Perl 6 , 14 bajtów

{~[R,] .words}

Spróbuj

Rozszerzony:

{              # 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
źródło
1

Java 8, 53 57 bajtów

Interfejs API Lambda + Stream

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

Zgodnie z sugestią Selima, właśnie upuściliśmy 4 bajty

użytkownik902383
źródło
1
Zaoszczędź 4 bajty, używając Stream.ofzamiast Arrays.stream: -)
Selim
1

Pyth, 3 bajty

_cw

Moja pierwsza odpowiedź w Pythonie, jeden bajt krótszy niż odpowiedź @ notjagan!

Wyjaśnił:

 cw # Split the input by space (same as Python's string.split())
_   # Reverses the array
    # Pyth prints implicitly.
OldBunny2800
źródło