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.



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


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>


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.


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!


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.




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
]

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

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 .


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

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


2

Mathematica, 35 Bytes

StringRiffle@Reverse@StringSplit@#&

Probieren Sie es online!


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

splitVerwendet Leerzeichen als Standardtrennzeichen, split()ist also kürzer als (_/" ")().
Fergusq





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 


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

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


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.
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.