Ayuda con problema [Resuelto]

Iniciado por Afsoon, 12 Noviembre 2011, 18:32 PM

0 Miembros y 1 Visitante están viendo este tema.

Afsoon

Hola buenas, estoy dando la cabeza con un problema de una pagina web en Java y no lo consigo, tengo todo menos la parte de calcular. Aqui os pongo el problema (No todo el enunciado porque hay una parte que no sirve).

Citar
Tanto el nombre del grupo y el nombre del cometa son convertidos en un número de la siguiente manera: el número final es simplemente el producto de todas las letras en el nombre, donde "A" es 1 y "Z" es 26. Por ejemplo, el grupo "USACO" sería 21 * 19 * 1 * 3 * 15 = 17955. Si el número del grupo módulo 47 es el mismo que el número del cometa módulo 47, entonces tú necesitas decirle al grupo ¡Alístense¡ (Recuerda que "a mod b" es el residuo después de dividir a por b; 34 mod 10 es 4.)

Escribe un programa el cual lea el nombre de un cometa y el nombre de un grupo y encuentre si de acuerdo al método antes descrito el grupo debe ir en el OVNI detrás de ese cometa y en ese caso imprima "GO", y si no "STAY". Los nombres de los grupos y de los cometas serán cadenas de letras mayúsculas sin espacios ni caracteres de puntuación, hasta de 6 caracteres de longitud.

Ejemplos:

Entrada    Salida
COMETQ
HVNGAT      GO
------------------------
ABSTAR
USACO      STAY


Y este es el código que tengo hecho

Código (java) [Seleccionar]

public class ride {
private int valorGrupo;
private int valorNave;
private int mod;
private String grupo;
private String nave;
private BufferedReader in;
private PrintWriter out;
private StringTokenizer st;

public ride() throws Exception{
try
{
in = new BufferedReader(new InputStreamReader(this.getClass().getResourceAsStream(this.getClass().getSimpleName()+".in")));
out = new PrintWriter(new FileWriter(this.getClass().getSimpleName()+".out"));

String datos = in.readLine().trim();
st = new StringTokenizer(datos);
nave = st.nextToken();

while((datos = in.readLine()) != null){
st = new StringTokenizer(datos);
grupo = st.nextToken();

}

if(grupo.length() > 6 || grupo.length() == 0 || nave.length() > 6 || nave.length() == 0)
System.exit(0);


valorGrupo = 1;
valorNave = 1;

for(int i = 0; i < grupo.length(); i++){
valorGrupo *= Character.getNumericValue(grupo.charAt(i));
}

for(int i = 0; i < nave.length(); i++){
valorNave *= Character.getNumericValue(nave.charAt(i));
}

mod = 47;


}catch (Exception e) {
throw new Exception(e);
}finally
{
if(in != null)
in.close();
if(out != null)
out.close();
}
}


public static void main(String[] args) {
try
{
new ride();
System.exit(0);
}catch(Exception e){
e.printStackTrace();
System.exit(-1);
}
}
}


Las clases in y out seria para los archivos en donde se encuentra los datos (in) y out (la escritura de si es GO o Stay). Llevo tiempo dando el coco pero no consigo sacar la maldita operacion, o es que lo comprendo mal o no lo se.

ghastlyX

Te dejo mi solución que pasa los juegos de prueba en USACO:
Código (java) [Seleccionar]
import java.io.PrintWriter;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.StringTokenizer;

public class ride implements Runnable {
    PrintWriter writer;
    BufferedReader reader;
    StringTokenizer tokenizer;
   
    private void solve() throws IOException {
        String s = nextToken(), r = nextToken();
        int a = 1, b = 1;
        for (int i = 0; i < s.length(); ++i) a = (a*(Character.getNumericValue(s.charAt(i)) - 9))%47;
        for (int i = 0; i < r.length(); ++i) b = (b*(Character.getNumericValue(r.charAt(i)) - 9))%47;
       
        if (a == b) writer.println("GO");
        else writer.println("STAY");
    }
   
    public static void main(String[] args) {
        new ride().run();
    }
   
    public void run() {
        try {
            reader = new BufferedReader(new FileReader("ride.in"));
            writer = new PrintWriter(new FileWriter("ride.out"));
            tokenizer = null;
            solve();
            reader.close();
            writer.close();
        }
        catch (IOException e) {
        }
    }
   
    String nextToken() throws IOException {
        if (tokenizer == null || !tokenizer.hasMoreTokens())
            tokenizer = new StringTokenizer(reader.readLine());
        return tokenizer.nextToken();
    }
}

Afsoon

#2
Cita de: ghastlyX en 13 Noviembre 2011, 17:13 PM
Te dejo mi solución que pasa los juegos de prueba en USACO:
Código (java) [Seleccionar]
import java.io.PrintWriter;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.StringTokenizer;

public class ride implements Runnable {
   PrintWriter writer;
   BufferedReader reader;
   StringTokenizer tokenizer;
   
   private void solve() throws IOException {
       String s = nextToken(), r = nextToken();
       int a = 1, b = 1;
       for (int i = 0; i < s.length(); ++i) a = (a*(Character.getNumericValue(s.charAt(i)) - 9))%47;
       for (int i = 0; i < r.length(); ++i) b = (b*(Character.getNumericValue(r.charAt(i)) - 9))%47;
       
       if (a == b) writer.println("GO");
       else writer.println("STAY");
   }
   
   public static void main(String[] args) {
       new ride().run();
   }
   
   public void run() {
       try {
           reader = new BufferedReader(new FileReader("ride.in"));
           writer = new PrintWriter(new FileWriter("ride.out"));
           tokenizer = null;
           solve();
           reader.close();
           writer.close();
       }
       catch (IOException e) {
       }
   }
   
   String nextToken() throws IOException {
       if (tokenizer == null || !tokenizer.hasMoreTokens())
           tokenizer = new StringTokenizer(reader.readLine());
       return tokenizer.nextToken();
   }
}


Ya esta, ya he visto mi fallo se me olvido que no empieza desde 1 sino desde 10 ¬¬.