Retos - 002: Invertir palabras

Nivel de dificultad aproximado (1 a 5): 3  

Dada una serie de palabras separadas por espacios, escribir la frase formada por las mismas palabras en orden inverso. Cada palabra estará formada exclusivamente por letras, y existirá exactamente un espacio entre cada pareja de palabras. La salida debe ser "Case #" seguido del número de caso, de un símbolo de "dos puntos", de un espacio en blanco y de la frase invertida.

(Asegúrate de que has leído las preguntas frecuentes antes de plantear tu solución)

El primer dato de entrada será la cantidad de valores que se van a analizar.

Ejemplo de entrada
3
this is a test
foobar
all your base

Salida correspondiente
Case #1: test a is this
Case #2: foobar
Case #3: base your all

Aportar una solución

Tu nombre (si quieres que aparezca):
Tu web/blog (si quieres que incluyamos un enlace a ella):
Tu e-mail (no se mostrará; si quieres que te avisemos cuando esté publicado):
¿Eres humano? ¿Cuánto es 3 menos dos?
Lenguaje
Fuente:

// Ejemplo de solución para el reto 002
// (Google Code Jam - Africa 2010 - Ronda de calificación, problema B)
// Por Nacho Cabanes (www.nachocabanes.com), 25-04-2012
 
// Recibe (de entrada estándar) frases
// Devuelve (escribe) las frases con sus palabras al revés
 
using System;
 
public class Reto002
{
 
    public static void ProcesarYVolcar(string linea, int contador)
    {
        // Descompongo en un array
        string[] palabras = linea.Split(new char[] {' '});
 
        // Y recorro el array al revés, mostrando datos
        Console.Write("Case #{0}: ", contador);        
        for (int  i = palabras.Length; i > 0; i--)
        {
            Console.Write( palabras[i-1] );
            if (i>1)  // Espacio separador, excepto tras la última
              Console.Write(" ");
        }
 
        Console.WriteLine();
    }
 
 
    public static void Main(string[] args)
    {
        int cantidad = Convert.ToInt32( Console.ReadLine() );
 
        for (int i = 1; i <= cantidad; i++)
        {
            string texto = Console.ReadLine();
            ProcesarYVolcar(texto, i);
        }
    }
}
 

' Ejemplo de solución para el reto 002
' (Google Code Jam - Africa 2010 - Ronda de calificación, problema B)
' Por mpollux_ork, 11-09-2012
 
Dim intEntradas As Integer
Dim astrPalabras() As String = Array.CreateInstance(GetType(String), 0)
Dim strEntrada As String
Dim strPalabra As String
Dim intContadorEntradas As Integer
Dim intContadorLetras As Integer
Dim intContadorPalabras As Integer
Dim chrLetra As String
Dim strSalida As String
 
intEntradas = Convert.ChangeType(Console.ReadLine(), GetType(Integer))
 
Dim astrEntradas(intEntradas - 1) As String
 
For intContadorEntradas = 0 To intEntradas - 1
    astrEntradas(intContadorEntradas) = Console.ReadLine()
Next intContadorEntradas
 
For intContadorEntradas = 0 To intEntradas - 1
    intContadorPalabras = 0
    strEntrada = astrEntradas(intContadorEntradas)
    strPalabra = \"\"
 
    For intContadorLetras = 0 To strEntrada.Length() - 1
        chrLetra = strEntrada.Substring(intContadorLetras, 1)
 
        If chrLetra <> \" \" Then
            strPalabra = strPalabra + chrLetra.Trim
        Else
            Array.Resize(astrPalabras, astrPalabras.Length + 1)
            astrPalabras(intContadorPalabras) = strPalabra
            strPalabra = \"\"
            intContadorPalabras = intContadorPalabras + 1
        End If
 
    Next intContadorLetras
 
    Array.Resize(astrPalabras, astrPalabras.Length + 1)
    astrPalabras(intContadorPalabras) = strPalabra
    Array.Reverse(astrPalabras)
 
    strSalida = \"Case #\" + (intContadorEntradas + 1).ToString() + \": \"
 
    For intContadorPalabras = 0 To astrPalabras.Length() - 1
        strSalida = strSalida + astrPalabras(intContadorPalabras) + \" \"
    Next intContadorPalabras
 
    Console.WriteLine(strSalida.Trim())
    Array.Resize(astrPalabras, 0)
 
Next intContadorEntradas