Umkehrung von Wörtern

30

Sona ist mit ihrer 10-jährigen Tochter in ihrem Haus. Sie muss zur Schule gehen, um ein weiteres Kind von der Schule zurückzubringen, da die Schule um 14 Uhr beendet ist. Draußen ist es heiß, deshalb möchte sie ihr jüngeres Kind zu Hause lassen.

Sie gab ihrem Kind ein paar Fäden, um es zu beschäftigen, während es weg ist. Sie bat sie, die Wörter in der Schnur umzukehren. Es gibt viele Fäden, also musst du ihrer Tochter bei der Lösung dieser riesigen Aufgabe helfen.

Wenn Sie also eine Zeichenfolge mit durch ein Leerzeichen getrennten Wörtern haben, kehren Sie die Wörter in der Zeichenfolge um. Sie können davon ausgehen, dass keine führenden oder nachfolgenden Leerzeichen vorhanden sind.

Die Zeichenfolge enthält nur [a-zA-z ]Interpunktionszeichen, sodass Sie nicht mit Interpunktionszeichen umgehen müssen.

Sie erhalten eine Zeichenfolge als Eingabe, und Sie sollten eine Zeichenfolge ausgeben.

Beispiel Testfälle:

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

Wertung

Das ist . Kürzeste Antwort in Bytes gewinnt.

Cyoce
quelle
1
Verbunden.
Martin Ender
1
Können wir die Eingabe als eine Liste von Wörtern nehmen? (ie ['man', 'bites', 'dog'])
Rɪᴋᴇʀ
3
Kann die Ausgabe ein nachgestelltes Leerzeichen enthalten?
Digitales Trauma

Antworten:

11

Retina , 7 Bytes

O$^`\w+

Probieren Sie es online!

Ordnen Sie alle Wörter zu ( \w+), sortieren Sie sie mit der leeren Zeichenfolge des Sortierschlüssels ( O$), was bedeutet, dass sie überhaupt nicht sortiert werden, und kehren Sie dann ihre Reihenfolge um ( ^).

Martin Ender
quelle
Ich habe noch nie Retina verwendet, aber warum brauchst du die 0$? Kannst du es nicht einfach umkehren?
Caird Coinheringaahing
Der @ RandomUser-Sortiermodus ( O) ist derzeit der einzige Modus mit dieser umgekehrten Option.
Martin Ender
7

JavaScript (ES6), 31 Byte

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

Versuch es

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>

Zottelig
quelle
1
Es sind Antworten wie diese, die im Wesentlichen mit meiner C # -Antwort übereinstimmen, die mich C # zum Golfen hassen lässt. Alle zusätzlichen Flusen in meiner Antwort verdoppeln fast die
Byteanzahl
Randnotiz: Wenn Sie in C # Splitstandardmäßig nichts an Whitespace übergeben, können Sie dies auch hier tun?
TheLethalCoder
1
Leider nicht, @TheLethalCoder. Wenn Sie splitin JS keine Zeichenfolge / Regex angeben, wird diese entweder für jedes einzelne Zeichen aufgeteilt oder ein Array mit einem einzelnen Element erstellt, das die ursprüngliche Zeichenfolge enthält. Dies hängt von der verwendeten Syntax ab.
Shaggy
7

Bash + gängige Linux-Dienstprogramme, 21

printf "$1 "|tac -s\ 

Lässt ein Leerzeichen in der Ausgabezeichenfolge - nicht sicher, ob das in Ordnung ist oder nicht.

Digitales Trauma
quelle
2
Herzlichen Glückwunsch zu 50k !! Du bist heute an der Reihe :-)
Luis Mendo
@ LuisMendo Danke!
Digitales Trauma
6

R, 19 Bytes

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

liest den String von stdin. scanLiest standardmäßig Token, die durch Leerzeichen / Zeilenumbrüche getrennt sind, sodass die Wörter als Vektor eingelesen werden. revkehrt um und catdruckt die Elemente mit Leerzeichen.

Probieren Sie es online!

Giuseppe
quelle
6

Brachylog , 6 Bytes

ṇ₁↔~ṇ₁

Probieren Sie es online!

Erläuterung

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

Beachten Sie, dass sowohl "Auf Leerzeichen aufteilen" als auch "Mit Leerzeichen verbinden" dieselbe integrierte Funktion verwenden, dh ṇ₁nur in verschiedenen "Richtungen" verwendet werden.

Tödlich
quelle
4

C #, 58 Bytes

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

Brainfuck , 74 Bytes

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

Probieren Sie es online!

Dieser Code erstellt die Zahl -32 an zwei verschiedenen Stellen, aber das scheint weniger Bytes zu sein als der Versuch, eine einzelne -32 zu verwalten.

Erläuterung

,[                        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
quelle
3

C 54 48 Bytes

Verwenden von Argumenten als Eingabe, 48 Byte

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

Versuchen Sie es online

> ./a.out man bites dog

Mit Zeigern, 84 Bytes

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

Verwenden

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

Japt , 11 10 7 4 Bytes

Mein erster Versuch bei Japt.

¸w ¸

Probieren Sie es online aus


Erläuterung

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

Bitte teilen Sie Ihre Japt-Tipps hier .

Zottelig
quelle
2
Danke, dass du Japt benutzt :-) Du kannst ¸anstelle von verwenden qS , was dir hier drei Bytes ersparen soll. (Siehe Abschnitt "Unicode-Verknüpfungen" in den Interpreter-Dokumenten.)
ETHproductions
Nett! Sie können ein Byte speichern, wenn Sie das -SFlag verwenden .
Oliver
Ich zähle 2 Bytes, @obarakon. Wenn das Flag nicht in der Byteanzahl enthalten ist, in welchem ​​Fall wären das 4 Bytes, nein?
Shaggy
@Shaggy Jedes Flag zählt als ein Byte. Also -Swäre +1 auf Ihre Gesamtbytezahl.
Oliver
Ah ich sehe. Ist das eine PPCG-Sache oder eine Japt-Sache?
Shaggy
2

Python 2 , 34 Bytes

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

Probieren Sie es online!

total menschlich
quelle
Ausgegolft. > _> Nun ... der andere funktioniert nur in Python 3 ...
total menschlich
2

05AB1E , 4 Bytes

#Rðý

Hinweis: Funktioniert nur für 2 oder mehr Wörter. +1 Byte, wenn dies nicht in Ordnung ist.

Probieren Sie es online!

Okx
quelle
Ich sehe Unicode, sind es wirklich 4 Bytes?
Val sagt Reinstate Monica
Ja, 05AB1E verwendet eine benutzerdefinierte Codepage
kalsowerus
#R¸»Alternative 4-Byte-Lösung: P.
Magic Octopus Urn
2

PHP, 47 Bytes

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

Probieren Sie es online!

Jörg Hülsermann
quelle
2

GNU Make , 62 Bytes

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

Cubix , 48 Bytes

Fast aufgegeben, aber endlich da.

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

Probieren Sie es online!

Dies wird wie folgt auf einen Würfel mit einer Seitenlänge von drei abgebildet

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

Die allgemeinen Schritte sind:

  • Holen Sie sich alle Eingaben Aund Reverse- BStack
  • Bewegen Sie das Negativ qnach unten und fügen Sie 0dem Stapel eine Marke hinzu. ein bisschen hier herumspringen.
  • Leerzeichen / Endschleife suchen, versetzt den Stapel auch in die richtige Druckreihenfolge.
    • Inkrementiere den Zähler )und hole das Gegenstück vom Stapelt
    • Ist es ein Leerzeichen oder ein EOI? S-?
    • Wiederholen, wenn nicht
  • Wortschleife drucken
    • Zähler dekrementieren (
    • Schleife verlassen, wenn Zähler !U0 ist
    • Tauschen Sie den sZähler mit dem Zeichen auf dem Stapel
    • oZeichen drucken und vom Stapel nehmen;
    • Wiederholen Sie die Schleife
  • Holen Sie sich die Länge des Stapels #und dekrementieren(
  • Überprüfen Sie, ?ob 0 und beenden Sie, @wenn es 0 ist
  • Drucken sonst einen Raum Soaufzuräumen ;;und gehen Sie zu der ersten Schleife zurück.

Ich habe einige überflüssige Schritte übersprungen, aber Sie können es Schritt für Schritt sehen

MickyT
quelle
2

Mathematica, 35 Bytes

StringRiffle@Reverse@StringSplit@#&

Probieren Sie es online!

J42161217
quelle
StringSplit[#]Teilt sich automatisch in Leerzeichen auf, sodass Sie das nicht angeben müssen " ".
Kein Baum
2
richtig! -5 Bytes!
J42161217
Oh, und ich denke, Sie können ein weiteres Byte mit der Funktionskomposition speichern: StringRiffle@*Reverse@*StringSplit(Nennen Sie es wie StringRiffle@*Reverse@*StringSplit@"hello world")
Kein Baum
2

Röda , 27 25 Bytes

2 Bytes gespart dank @fergusq

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

Probieren Sie es online!

Diese Funktion nimmt Eingaben vom Eingabestream entgegen.

Erklärung (veraltet)

{[[(_/" ")()|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
quelle
splitVerwendet Leerzeichen als Standardtrennzeichen, split()ist also kürzer als (_/" ")().
Fergusq
1

Ohm , 4 Bytes

z]Qù

Probieren Sie es online!

Erläuterung

z     Split the input on spaces.
 ]    Dump it onto the stack.
  Q   Reverse the stack.
   ù  Join the stack with spaces. Implicit output.
Geschäfts-Katze
quelle
1

CJam , 7 Bytes

qS/W%S*

Probieren Sie es online!

Erläuterung

q        e# Read input
 S/      e# Split on spaces
   W%    e# Reverse
     S*  e# Join with spaces
Geschäfts-Katze
quelle
1

J , 6 Bytes

|.&.;:

Probieren Sie es online! Dies ist reverse ( |.) unter ( &.) words ( ;:). Das heißt, teilen Sie den Satz in Wörter auf, kehren Sie ihn um und fügen Sie den Satz erneut hinzu.

Conor O'Brien
quelle
1

Gema, 29 Zeichen

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

Probelauf:

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

Perl 6 , 14 Bytes

{~[R,] .words}

Versuch es

Erweitert:

{              # 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
quelle
1

Java 8, 53 57 Bytes

Lambda + Stream API

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

Nach dem Vorschlag von Selim haben wir gerade 4 Bytes verloren

user902383
quelle
1
Sparen Sie 4 Bytes mit Stream.of anstelle von Arrays.stream: -)
Selim
1

Pyth, 3 Bytes

_cw

Meine erste Pyth-Antwort, ein Byte kürzer als @ notjagans Antwort!

Erklärt:

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