Reverse words in a string
The task is to reverse the order of all tokens in a number of strings.
- Hey you, Bub! would be shown reversed as: Bub! you, Hey
- Tokens are any non-blank characters separated by blanks.
- You can consider the ten strings as ten lines, and tokens as words.
- Multiple (or superfluous blanks) can be compressed into one blank.
- Some strings have no words, so a blank string (line) should be shown.
- Display the strings in order (1st, 2nd, 3rd, ···), and one string per line.
- Keep the letter case (upper/lower) and all punctuation intact.
- This example hasn't any tabs or other non-visible characters.
(ten lines within the box) line ╔════════════════════════════════════════╗ 1 ║ ---------- Ice and Fire ------------ ║ 2 ║ ║ ◄─── a blank line here. 3 ║ fire, in end will world the say Some ║ 4 ║ ice. in say Some ║ 5 ║ desire of tasted I've what From ║ 6 ║ fire. favor who those with hold I ║ 7 ║ ║ ◄─── a blank line here. 8 ║ ... elided paragraph last ... ║ 9 ║ ║ ◄─── a blank line here. 10 ║ Frost Robert ----------------------- ║ ╚════════════════════════════════════════╝
Perl 6
<lang>say .words.reverse for q:to/END/.lines;
Ice and Fire ------------
fire, in end will world the say Some ice. in say Some desire of tasted I've what From fire. favor who those with hold I
... elided paragraph last ...
Frost Robert ----------------------- END </lang>
- Output:
------------ Fire and Ice ---------- Some say the world will end in fire, Some say in ice. From what I've tasted of desire I hold with those who favor fire. ... last paragraph elided ... ----------------------- Robert Frost
Python
<lang python>>>> text = \
Ice and Fire ------------
fire, in end will world the say Some ice. in say Some desire of tasted I've what From fire. favor who those with hold I
... elided paragraph last ...
Frost Robert ----------------------- >>> for line in text.split('\n'): print(' '.join(line.split()[::-1]))
Fire and Ice ----------
Some say the world will end in fire, Some say in ice. From what I've tasted of desire I hold with those who favor fire.
... last paragraph elided ...
Robert Frost
>>> </lang>
REXX
<lang rexx>/*REXX pgm reverses the order of tokens in a string, but not the letters*/ @. = @.1 = "---------- Ice and Fire ------------" @.2 = ' ' @.3 = "fire, in end will world the say Some" @.4 = "ice. in say Some" @.5 = "desire of tasted I've what From" @.6 = "fire. favor who those with hold I" @.7 = ' ' @.8 = "... elided paragraph last ..." @.9 = ' ' @.10 = "Frost Robert -----------------------"
do j=1 while @.j\==; $= /*process each "line"; nullify $.*/ do k=1 for words(@.j) /*process each word in the string*/ $=word(@.j,k) $ /*prepend the word to a new line.*/ end /*k*/ /* [↑] could do this another way*/ say $ /*display newly constructed line.*/ end /*j*/ /*stick a fork in it, we're done.*/</lang>
output when using the ten lines of input:
------------ Fire and Ice ---------- Some say the world will end in fire, Some say in ice. From what I've tasted of desire I hold with those who favor fire. ... last paragraph elided ... ----------------------- Robert Frost