Reverse words in a string: Difference between revisions
(+ D entry) |
(J) |
||
Line 93: | Line 93: | ||
}</lang> |
}</lang> |
||
The output is the same as the Python entry. |
The output is the same as the Python entry. |
||
=={{header|J}}== |
|||
Treated interactively: |
|||
<lang J> ([:;@|.[:<;.1 ' ',]);._2]0 :0 |
|||
---------- 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 ----------------------- |
|||
) |
|||
------------ 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> |
|||
=={{header|Perl 6}}== |
=={{header|Perl 6}}== |
Revision as of 07:33, 2 April 2014
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 ----------------------- ║ ╚════════════════════════════════════════╝
C
<lang c>#include <stdio.h>
- include <ctype.h>
void rev_print(char *s, int n) {
for (; *s && isspace(*s); s++); if (*s) { char *e; for (e = s; *e && !isspace(*e); e++); rev_print(e, 0); printf("%.*s%s", (int)(e - s), s, " " + n); } if (n) putchar('\n');
}
int main(void) {
char *s[] = { "---------- 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 -----------------------", 0 }; int i; for (i = 0; s[i]; i++) rev_print(s[i], 1);
return 0;
}</lang> Output is the same as everyone else's.
D
<lang d>void main() {
import std.stdio, std.string, std.range;
immutable 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 -----------------------";
writefln("%(%-(%s %)\n%)", text.splitLines.map!(r => r.split.retro));
}</lang> The output is the same as the Python entry.
J
Treated interactively:
<lang J> ([:;@|.[:<;.1 ' ',]);._2]0 :0
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 -----------------------
)
------------ 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>
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