Generala.java 2.91 KB
Newer Older
roshka committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123
package generala;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.io.File;
public class Generala
{
 // ESTA ES LA FUNCIÓN QUE HAY QUE IMPLEMENTAR
 // TAMBIÉN PUEDEN AGREGAR OTRAS FUNCIONES y/o CLASES
 // QUE NECESITEN PARA RESOLVER EL EJERCICIO DE LA
 // MANERA MÁS ORDENADA POSIBLE
class Analizador {
    private char[] _texto;
    private int _posicion;
private char actual() {
    return ver(0);
}
private void continuar() {
    _posicion++;
    }
private char siguiente() {
    return ver(+1);
    }
private char ver(int posRelativa) {
    return (_posicion + posRelativa) < _texto.length
    ? _texto[_posicion + posRelativa]
    : '\0';
}
public String analizar(String texto) {
    _texto = texto.toCharArray();
    _posicion = 0;
// poker, full o generala
    if (actual() == siguiente()) {
        char valor = actual();
        int nroRepeticiones = 0;
            while (actual() == valor) {
                nroRepeticiones++;
                continuar();
            }
    if (nroRepeticiones == 5)
        return "GENERALA";
    if (nroRepeticiones == 4)
        return "POKER";
// full 3-2
    if (nroRepeticiones == 3) {
        valor = actual();
        nroRepeticiones = 0;
        while (actual() == valor) {
            nroRepeticiones++;
            continuar();
        }
        return nroRepeticiones == 2 ? "FULL" : "NADA";
    }
// full 2-3
    if (nroRepeticiones == 2) {
        valor = actual();
        nroRepeticiones = 0;
        while (actual() == valor) {
            nroRepeticiones++;
            continuar();
        }
            return nroRepeticiones == 3 ? "FULL" : "NADA";
    }
    }
// escalera
    while (_posicion < 4) {
        int nroActual = actual() - '0';
        int nroSiguiente = siguiente() - '0';
        if (Math.abs(nroSiguiente - nroActual) != 1 && nroSiguiente != 1)
            return "NADA";
            continuar();
    }
    return "ESCALERA";
}
}
String jugada(String dados)
{
if (dados.equals("11111")) {
return "GENERALA";
}
return "NADA";
}
// Ustedes pueden ignorar esto
String[] jugadas(String[] losdados)
{
    String[] ret = new String[losdados.length];
    int i = 0;
    for (String dados : losdados)
    {
        ret[i] = this.jugada(dados);
        i++;
    }
    return ret;
}
// Ustedes pueden ignorar esto
static String[] processBatch(String fileName)
throws Exception
{
Scanner sc = new Scanner(new File(fileName));
List<String> lines = new ArrayList<String>();
while (sc.hasNextLine()) {
lines.add(sc.nextLine());
}
return lines.toArray(new String[0]);
}
public static void main(String[] args)
throws Exception
{
Generala g = new Generala();
/* IGNORAR PORQUE ESTO NO SE VA A EJECUTAR PARA USTEDES */
if (args.length > 0) {
String[] jugadas = processBatch(args[0]);
String resultados[] = g.jugadas(jugadas);
for(String res : resultados) {
System.out.println(res);
}
return;
}
// ESTO SI SE EJECUTA PARA USTEDES
System.out.println(g.jugada("11111"));
}
}