Помогите пожалуйста перевести на паскаль

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by marcos, 17 Dec 2009.

  1. marcos

    marcos New Member

    Joined:
    8 Nov 2009
    Messages:
    111
    Likes Received:
    1
    Reputations:
    -5
    Всем привет. Нашел решение к задаче Где waldorf? но оно вроде на яве
    помогите перевести. Заранее спасибо! Вот код
    Code:
    import java.io.BufferedReader; 
    import java.io.IOException; 
    import java.io.InputStreamReader; 
    import java.util.ArrayList; 
    import java.util.Iterator; 
    import java.util.Scanner; 
    
    
    public class Main { 
    
    private static int numLetrasPosibles = 28; 
    private static char[][] tabla; 
    private static int m = 0; 
    private static int n = 0; 
    private static String[] palabras; 
    private static ArrayList<Integer>[] posicionesPorLetra = new ArrayList[numLetrasPosibles]; 
    
    /** 
    * Método inicial. 
    * 
    * @param args 
    *            argumentos. 
    * @throws IOException 
    *             si falla. 
    */ 
    public static void main(String[] args) throws IOException { 
    
    // Scanner para la entrada. 
    Scanner in = new Scanner(new BufferedReader(new InputStreamReader( 
    System.in))); 
    int numCasos = leerNum(in); 
    
    // Para cada caso 
    for (int i = 0; i < numCasos; i++) { 
    // linea en blanco 
    in.nextLine().split(" "); 
    // leo my x. 
    int[] tamanyo = leer2Num(in); 
    m = tamanyo[0]; 
    n = tamanyo[1]; 
    // inicializar la tabla 
    tabla = new char[m][n]; 
    // leo la tabla. 
    leerTabla(); 
    // inicializar array 
    inicializarPoscionesPorLetra(); 
    // Inicializo las posiciones en que aparece cada caracter. 
    inicializarCuentas(); 
    
    // leer num palabras 
    int numPalabras = leerNum(in); 
    
    // inicializo array de palabras. 
    palabras = new String[numPalabras]; 
    
    // leer las palabras 
    for (int k = 0; k < numPalabras; k++) { 
    String palabraKesima = readLine(); 
    palabraKesima = palabraKesima.toLowerCase(); 
    palabras[k] = palabraKesima; 
    } 
    
    // buscar 
    // para cada palabra 
    
    for (int k = 0; k < numPalabras; k++) { 
    char[] palabra = palabras[k].toCharArray(); 
    // para cada posicion que está laprimera letra 
    Iterator<Integer> it = posicionesPorLetra[(int) palabra[0] - 97] 
    .iterator(); 
    // sobraría xk siempre está la palabra 
    // tener k buskar.. 
    while (it.hasNext()) { 
    int fila = ((Integer) (it.next())).intValue(); 
    int columna = ((Integer) (it.next())).intValue(); 
    int[] valido = null; 
    if (palabra.length > 1) { 
    valido = buscar(palabra, fila, columna); 
    }else{ 
    valido[0]=fila; 
    valido[1]=columna; 
    } 
    // si valido entonces salir 
    if (valido[0] != -1 && valido[1] != -1) { 
    valido[0]++; 
    valido[1]++; 
    System.out.println(valido[0] + " " + valido[1]); 
    break; 
    } 
    
    } 
    } 
    if (numCasos > 1) { 
    System.out.println(""); 
    } 
    
    } 
    
    } 
    
    private static int[] buscar(char[] palabra, int fila, int columna) { 
    int[] num = { -1, -1 }; 
    
    int i, j = 0; 
    i = fila; 
    j = columna; 
    boolean encontrado = true; 
    
    // buscar hacia la derecha 
    encontrado = true; 
    j = columna; 
    for (int k = 1; k < palabra.length; k++) { 
    // Para que no se salga buscando.. 
    if (j + 1 > n - 1) { 
    encontrado = false; 
    break; 
    } 
    if (palabra[k] != tabla[i][++j]) { 
    encontrado = false; 
    break; 
    } 
    } 
    if (true == encontrado) { 
    num[0] = fila; 
    num[1] = columna; 
    return num; 
    } 
    
    // buscar diagonal bajando hacia derecha 
    encontrado = true; 
    j = columna; 
    i = fila; 
    for (int k = 1; k < palabra.length; k++) { 
    // Para que no se salga buscando.. 
    if (i + 1 > m - 1 || j + 1 > n - 1) { 
    encontrado = false; 
    break; 
    } 
    if (palabra[k] != tabla[++i][++j]) { 
    encontrado = false; 
    break; 
    } 
    } 
    if (true == encontrado) { 
    num[0] = fila; 
    num[1] = columna; 
    return num; 
    } 
    
    // buscar hacia abajo 
    encontrado = true; 
    j = columna; 
    i = fila; 
    for (int k = 1; k < palabra.length; k++) { 
    // Para que no se salga buscando.. 
    if (i + 1 > m - 1) { 
    encontrado = false; 
    break; 
    } 
    if (palabra[k] != tabla[++i][j]) { 
    encontrado = false; 
    break; 
    } 
    } 
    if (true == encontrado) { 
    num[0] = fila; 
    num[1] = columna; 
    return num; 
    } 
    
    // buscar diagonal bajando hacia izq 
    encontrado = true; 
    j = columna; 
    i = fila; 
    for (int k = 1; k < palabra.length; k++) { 
    // Para que no se salga buscando.. 
    if (i + 1 > m - 1 || j - 1 < 0) { 
    encontrado = false; 
    break; 
    } 
    if (palabra[k] != tabla[++i][--j]) { 
    encontrado = false; 
    break; 
    } 
    } 
    if (true == encontrado) { 
    num[0] = fila; 
    num[1] = columna; 
    return num; 
    } 
    // buscar hacia la izq 
    encontrado = true; 
    i = fila; 
    j = columna; 
    for (int k = 1; k < palabra.length; k++) { 
    // Para que no se salga buscando.. 
    if (j - 1 < 0) { 
    encontrado = false; 
    break; 
    } 
    if (palabra[k] != tabla[i][--j]) { 
    encontrado = false; 
    break; 
    } 
    } 
    if (true == encontrado) { 
    num[0] = fila; 
    num[1] = columna; 
    return num; 
    } 
    // buscar diagonal subiendo hacia izq 
    encontrado = true; 
    j = columna; 
    i = fila; 
    for (int k = 1; k < palabra.length; k++) { 
    // Para que no se salga buscando.. 
    if (i - 1 < 0 || j - 1 < 0) { 
    encontrado = false; 
    break; 
    } 
    if (palabra[k] != tabla[--i][--j]) { 
    encontrado = false; 
    break; 
    } 
    } 
    if (true == encontrado) { 
    num[0] = fila; 
    num[1] = columna; 
    return num; 
    } 
    // buscar hacia arriba 
    encontrado = true; 
    j = columna; 
    i = fila; 
    for (int k = 1; k < palabra.length; k++) { 
    // Para que no se salga buscando.. 
    if (i - 1 < 0) { 
    encontrado = false; 
    break; 
    } 
    if (palabra[k] != tabla[--i][j]) { 
    encontrado = false; 
    break; 
    } 
    } 
    if (true == encontrado) { 
    num[0] = fila; 
    num[1] = columna; 
    return num; 
    } 
    // buscar diagonal subiendo hacia derecha 
    encontrado = true; 
    j = columna; 
    i = fila; 
    for (int k = 1; k < palabra.length; k++) { 
    // Para que no se salga buscando.. 
    if (i - 1 < 0 || j + 1 > n - 1) { 
    encontrado = false; 
    break; 
    } 
    if (palabra[k] != tabla[--i][++j]) { 
    encontrado = false; 
    break; 
    } 
    } 
    if (true == encontrado) { 
    num[0] = fila; 
    num[1] = columna; 
    return num; 
    } 
    
    return num; 
    
    } 
    
    private static String readLine() { 
    StringBuffer sb = new StringBuffer(""); 
    int b = 0; 
    while (b != '\n' && b >= 0) { 
    try { 
    b = System.in.read(); 
    } catch (IOException e) { 
    return null; 
    } 
    if (b != '\r' && b != '\n' && b >= 0) 
    sb.append((char) b); 
    } 
    if (sb.length() == 0 && b < 0) 
    return null; 
    return sb.toString().trim(); 
    } 
    
    /** 
    * Inicializa posicionesPorLetra. 
    * 
    * @param m 
    *            filas de la tabla. 
    * @param n 
    *            columnas de la tabla. 
    */ 
    private static void inicializarCuentas() { 
    
    for (int i = 0; i < m; i++) { 
    for (int j = 0; j < n; j++) { 
    
    posicionesPorLetra[(int) tabla[i][j] - 97].add(i); 
    posicionesPorLetra[(int) tabla[i][j] - 97].add(j); 
    } 
    } 
    
    } 
    
    /** 
    * Lee de fila en fila la tabla. 
    * 
    * @param m 
    *            filas. 
    */ 
    private static void leerTabla() { 
    
    // leer la matriz 
    for (int k = 0; k < m; k++) { 
    String filaKesima = readLine(); 
    filaKesima = filaKesima.toLowerCase(); 
    // guardarlo en un array... 
    tabla[k] = filaKesima.toCharArray(); 
    
    } 
    } 
    
    /** 
    * Inicializa el array de posicionesPorLetra. 
    */ 
    private static void inicializarPoscionesPorLetra() { 
    for (int k = 0; k < numLetrasPosibles; k++) { 
    posicionesPorLetra[k] = new ArrayList<Integer>(); 
    } 
    } 
    
    private static int leerNum(Scanner in) { 
    String[] numeros = in.nextLine().split(" "); 
    int index = 0; 
    int num = 0; 
    for (; index < numeros.length; index++) { 
    try { 
    num = Integer.parseInt(numeros[index]); 
    break; 
    } catch (final NumberFormatException e) { 
    // Si falla. 
    } 
    
    } 
    return num; 
    } 
    
    private static int[] leer2Num(Scanner in) { 
    int[] num = { 0, 0 }; 
    String[] numeros; 
    // leo myn 
    numeros = in.nextLine().split(" "); 
    int index = 0; 
    int m = 0; 
    for (; index < numeros.length; index++) { 
    try { 
    m = Integer.parseInt(numeros[index]); 
    break; 
    } catch (final NumberFormatException e) { 
    // Si falla. 
    } 
    
    } 
    index++; 
    int n = 0; 
    for (; index < numeros.length; index++) { 
    try { 
    n = Integer.parseInt(numeros[index]); 
    break; 
    } catch (final NumberFormatException e) { 
    // Si falla. 
    } 
    } 
    num[0] = m; 
    num[1] = n; 
    return num; 
    
    } 
    }