View Single Post
Old 18-03-2010, 01:39   #15
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Cittā: Tra Verona e Mantova
Messaggi: 4553
Per la cronaca son rimasto sveglio fino adesso per scrivere 'sta cagata:

List<EXPR<?>> LIST = new LinkedList<EXPR<?>>();
LIST.add(IF(M00.EQUALS(1).AND(M01.EQUALS(1))).THEN(IF(M02.EQUALS(0)).THEN(M02.ASSIGN(2))));
LIST.add(IF(M01.EQUALS(1).AND(M02.EQUALS(1))).THEN(IF(M00.EQUALS(0)).THEN(M00.ASSIGN(2))));

//...'NA QUARANTINA A SEGUIRE...

for(EXPR<?> E : LIST) if(E.get() != null) break;

MXY sono dei Cell.



E' un DSL, definito in:

Codice:
class DSL {
    static IF IF(VALUE<BOOLEAN> condition) { return new IF(condition); }
    static CELL CELL(int[][] data, int i, int j) { return new CELL(data, i, j); }
    static EXPR<?> CHECK(CELL C0, CELL C1, int VALUE1, CELL CR, int VALUE2, int RESULT) {
        return IF(C0.EQUALS(VALUE1).AND(C1.EQUALS(VALUE1))).THEN(IF(CR.EQUALS(VALUE2)).THEN(CR.ASSIGN(RESULT)));
    }
}

interface VALUE<T> {

    T get();
}

interface VARIABLE<T> extends EXPR<T> {

    void set(T value);
}

class VOID<T> implements EXPR<T> {

    public T get() {
        return null;
    }
}

class IF implements EXPR<BOOLEAN> {
    private BOOLEAN condition;

    IF(VALUE<BOOLEAN> condition) {
        this.condition = condition.get();
    }

    public <T> EXPR<T> THEN(EXPR<T> e) {
        if(condition == BOOLEAN.TRUE) {
            return e;
        } else {
            return new VOID<T>();
        }
    }

    public BOOLEAN get() {
        return null;
    }
}

interface EXPR<T> extends VALUE<T> {
}

class BOOLEAN implements VALUE<BOOLEAN> {
    static BOOLEAN TRUE = new BOOLEAN();
    static BOOLEAN FALSE = new BOOLEAN();

    BOOLEAN AND(VALUE<BOOLEAN> that) {
        return this == TRUE && that.get() == TRUE ? TRUE : FALSE;
    }

    public BOOLEAN get() {
        return this;
    }
}

class CELL implements VARIABLE<Integer> {
    int[][] data;
    int i, j;
    CELL(int[][] data, int i, int j) {
        this.data = data;
        this.i = i;
        this.j = j;
    }

    BOOLEAN EQUALS(int value) {
        return data[i][j] == value ? BOOLEAN.TRUE : BOOLEAN.FALSE;
    }

    ASSIGN<Integer> ASSIGN(int value) {
        return new ASSIGN<Integer>(this, value);
    }

    public void set(Integer value) {
        data[i][j] = value;
    }

    public Integer get() {
        return data[i][j];
    }
}

class ASSIGN<T> implements EXPR<T> {
    private T value;
    private VARIABLE<T> variable;

    ASSIGN(VARIABLE<T> var, T value) {
        this.variable = var;
        this.value = value;
    }

    public T get() {
        variable.set(value);
        return value;
    }
}
Utilitā -52.000 ma mi sono divertito come una faina .
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis č offline   Rispondi citando il messaggio o parte di esso