diff --git a/README.md b/README.md index 3c21d03..9545728 100644 --- a/README.md +++ b/README.md @@ -5,4 +5,5 @@ Dobrodošli na repozitoriju predmeta **Aproksimacijski in naključnostni algorit ## Vsebina po tednih 1. Uvod in osnovni modeli računanja -2. NP, prevedbe in NP-polnost \ No newline at end of file +2. NP, prevedbe in NP-polnost +3. Še prevedbe, vmesni problemi, diagonalizacija \ No newline at end of file diff --git a/p02/p02.pdf b/p02/p02.pdf index e0ab602..5d342f1 100644 Binary files a/p02/p02.pdf and b/p02/p02.pdf differ diff --git a/p02/sat/kraljice.limboole b/p02/sat/kraljice.limboole new file mode 100644 index 0000000..1eb9266 Binary files /dev/null and b/p02/sat/kraljice.limboole differ diff --git a/p02/sat/kraljice.py b/p02/sat/kraljice.py new file mode 100644 index 0000000..9c612ae --- /dev/null +++ b/p02/sat/kraljice.py @@ -0,0 +1,42 @@ + +import sys +def main(N): + lines = [] + # --- Row constraints: one queen per row --- + for r in range(N): + # At least one queen in row r + row_vars = [f"q_{r}_{c}" for c in range(N)] + lines.append(" | ".join(row_vars)) + + # At most one queen in row r (pairwise exclusion) + for c1 in range(N): + for c2 in range(c1 + 1, N): + lines.append(f"!q_{r}_{c1} | !q_{r}_{c2}") + + # --- Column constraints: one queen per column --- + for c in range(N): + col_vars = [f"q_{r}_{c}" for r in range(N)] + lines.append(" | ".join(col_vars)) + + # At most one queen in column c + for r1 in range(N): + for r2 in range(r1 + 1, N): + lines.append(f"!q_{r1}_{c} | !q_{r2}_{c}") + + # --- Diagonal constraints --- + for r1 in range(N): + for c1 in range(N): + for r2 in range(N): + for c2 in range(N): + if (r1, c1) < (r2, c2): # avoid duplicates + if abs(r1 - r2) == abs(c1 - c2): # same diagonal + lines.append(f"!q_{r1}_{c1} | !q_{r2}_{c2}") + + + # first add parentheses for clarity + lines = [f"({line})" for line in lines] + print("\n & ".join(lines)) + +if __name__ == "__main__": + N = int(sys.argv[1]) if len(sys.argv) > 1 else 8 + main(N) \ No newline at end of file diff --git a/p02/sat/urnik.limboole b/p02/sat/urnik.limboole new file mode 100644 index 0000000..8e94443 --- /dev/null +++ b/p02/sat/urnik.limboole @@ -0,0 +1,18 @@ +% A1: Vsaj en slot za vsak predmet +( (X1_A | X1_B | X1_F) & (X2_B | X2_C) & (X3_C | X3_D | X3_F) & (X4_B | X4_D | X4_F) ) + +% A2: Največ en slot za vsak predmet +& ( (!X1_A | !X1_B) & (!X1_A | !X1_F) & (!X1_B | !X1_F) + & (!X2_B | !X2_C) + & (!X3_C | !X3_D) & (!X3_C | !X3_F) & (!X3_D | !X3_F) + & (!X4_B | !X4_D) & (!X4_B | !X4_F) & (!X4_D | !X4_F) ) + +% B: Največ en predmet za vsak slot +& ( % Termin B (P1, P2, P4) + (!X1_B | !X2_B) & (!X1_B | !X4_B) & (!X2_B | !X4_B) + % Termin C (P2, P3) + & (!X2_C | !X3_C) + % Termin D (P3, P4) + & (!X3_D | !X4_D) + % Termin F (P1, P3, P4) + & (!X1_F | !X3_F) & (!X1_F | !X4_F) & (!X3_F | !X4_F) ) \ No newline at end of file diff --git a/p03/p03.pdf b/p03/p03.pdf new file mode 100644 index 0000000..f8ea7d4 Binary files /dev/null and b/p03/p03.pdf differ