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.



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ść ( ^).


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>


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.


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!


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”.




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
]

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"); }

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 .


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

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


2

Mathematica, 35 bajtów

StringRiffle@Reverse@StringSplit@#&

Wypróbuj online!


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 */

splitużywa spacji jako domyślnego separatora, więc split()jest krótszy niż (_/" ")().
fergusq





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 


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 $_
}

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


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.
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.