Phrase reversals: Difference between revisions
Line 12: | Line 12: | ||
=={{header|AWK}}== |
=={{header|AWK}}== |
||
<lang awk> |
<lang awk># Usage: awk -f phrase_revers.awk |
||
function rev(s, del, n,i,a,r) { |
function rev(s, del, n,i,a,r) { |
||
n = split(s, a, del) |
n = split(s, a, del) |
||
Line 20: | Line 20: | ||
} |
} |
||
BEGIN { |
BEGIN { |
||
p0 = "Rosetta Code Phrase Reversal" |
p0 = "Rosetta Code Phrase Reversal" |
||
Line 28: | Line 28: | ||
wr = rev(p0, " ") |
wr = rev(p0, " ") |
||
printf( fmt, "word-order reversed", wr ) |
printf( fmt, "word-order reversed", wr ) |
||
printf( fmt, "each word |
printf( fmt, "each word reversed", rev(wr) ) |
||
}</lang> |
}</lang> |
||
{{Out}} |
{{Out}} |
||
Line 35: | Line 35: | ||
string reversed : lasreveR esarhP edoC attesoR |
string reversed : lasreveR esarhP edoC attesoR |
||
word-order reversed : Reversal Phrase Code Rosetta |
word-order reversed : Reversal Phrase Code Rosetta |
||
each word |
each word reversed : attesoR edoC esarhP lasreveR |
||
</pre> |
</pre> |
||
Revision as of 20:48, 13 November 2014
Given a string of space separated words containing the following phrase:
- "rosetta code phrase reversal"
- Reverse the string.
- Reverse each individual word in the string, maintaining original string order.
- Reverse the order of each word of the phrase, maintaining the order of characters in each word.
Show your output here.
- See also Reverse a string, Reverse words in a string
AWK
<lang awk># Usage: awk -f phrase_revers.awk function rev(s, del, n,i,a,r) {
n = split(s, a, del) r = a[1] for(i=2; i <= n; i++) {r = a[i] del r } return r
}
BEGIN {
p0 = "Rosetta Code Phrase Reversal"
fmt = "%-20s: %s\n" printf( fmt, "input", p0 ) printf( fmt, "string reversed", rev(p0, "") ) wr = rev(p0, " ") printf( fmt, "word-order reversed", wr ) printf( fmt, "each word reversed", rev(wr) )
}</lang>
- Output:
input : Rosetta Code Phrase Reversal string reversed : lasreveR esarhP edoC attesoR word-order reversed : Reversal Phrase Code Rosetta each word reversed : attesoR edoC esarhP lasreveR
D
Partially lazy. <lang d>void main() {
import std.stdio, std.range;
immutable phrase = "rosetta code phrase reversal"; phrase.retro.writeln; // Reversed string. phrase.splitter.map!retro.joiner(" ").writeln; // Words reversed. phrase.split.retro.joiner(" ").writeln; // Word order reversed.
}</lang>
- Output:
lasrever esarhp edoc attesor attesor edoc esarhp lasrever reversal phrase code rosetta
Java
<lang java5>import java.util.Arrays;
public class PhraseRev{ private static String reverse(String x){ return new StringBuilder(x).reverse().toString(); }
private static <T> T[] reverse(T[] x){ T[] rev = Arrays.copyOf(x, x.length); for(int i = x.length - 1; i >= 0; i--){ rev[x.length - 1 - i] = x[i]; } return rev; }
private static String join(String[] arr, String joinStr){ StringBuilder joined = new StringBuilder(); for(int i = 0; i < arr.length; i++){ joined.append(arr[i]); if(i < arr.length - 1) joined.append(joinStr); } return joined.toString(); }
public static void main(String[] args){ String str = "rosetta code phrase reversal";
System.out.println("Straight-up reversed: " + reverse(str)); String[] words = str.split(" "); for(int i = 0; i < words.length; i++){ words[i] = reverse(words[i]); } System.out.println("Reversed words: " + join(words, " ")); System.out.println("Reversed word order: " + join(reverse(str.split(" ")), " ")); } }</lang>
- Output:
Straight-up reversed: lasrever esarhp edoc attesor Reversed words: attesor edoc esarhp lasrever Reversed word order: reversal phrase code rosetta
Python
<lang python>>>> phrase = "rosetta code phrase reversal" >>> phrase[::-1] # Reversed. 'lasrever esarhp edoc attesor' >>> ' '.join(word[::-1] for word in phrase.split()) # Words reversed. 'attesor edoc esarhp lasrever' >>> ' '.join(word for word in phrase.split()[::-1]) # Word order reversed. 'reversal phrase code rosetta' >>> </lang>