Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
67
Task/Nonogram-solver/Prolog/nonogram-solver-1.pro
Normal file
67
Task/Nonogram-solver/Prolog/nonogram-solver-1.pro
Normal file
|
|
@ -0,0 +1,67 @@
|
|||
/*
|
||||
* Nonogram/paint-by-numbers solver in SWI-Prolog. Uses CLP(FD),
|
||||
* in particular the automaton/3 (finite-state/RE) constraint.
|
||||
* Copyright (c) 2011 Lars Buitinck.
|
||||
* Do with this code as you like, but don't remove the copyright notice.
|
||||
*/
|
||||
|
||||
:- use_module(library(clpfd)).
|
||||
|
||||
nono(RowSpec, ColSpec, Grid) :-
|
||||
rows(RowSpec, Grid),
|
||||
transpose(Grid, GridT),
|
||||
rows(ColSpec, GridT).
|
||||
|
||||
rows([], []).
|
||||
rows([C|Cs], [R|Rs]) :-
|
||||
row(C, R),
|
||||
rows(Cs, Rs).
|
||||
|
||||
row(Ks, Row) :-
|
||||
sum(Ks, #=, Ones),
|
||||
sum(Row, #=, Ones),
|
||||
arcs(Ks, Arcs, start, Final),
|
||||
append(Row, [0], RowZ),
|
||||
automaton(RowZ, [source(start), sink(Final)], [arc(start,0,start) | Arcs]).
|
||||
|
||||
% Make list of transition arcs for finite-state constraint.
|
||||
arcs([], [], Final, Final).
|
||||
arcs([K|Ks], Arcs, CurState, Final) :-
|
||||
gensym(state, NextState),
|
||||
( K == 0
|
||||
-> Arcs = [arc(CurState,0,CurState), arc(CurState,0,NextState) | Rest],
|
||||
arcs(Ks, Rest, NextState, Final)
|
||||
; Arcs = [arc(CurState,1,NextState) | Rest],
|
||||
K1 #= K-1,
|
||||
arcs([K1|Ks], Rest, NextState, Final)).
|
||||
|
||||
|
||||
make_grid(Grid, X, Y, Vars) :-
|
||||
length(Grid,X),
|
||||
make_rows(Grid, Y, Vars).
|
||||
|
||||
make_rows([], _, []).
|
||||
make_rows([R|Rs], Len, Vars) :-
|
||||
length(R, Len),
|
||||
make_rows(Rs, Len, Vars0),
|
||||
append(R, Vars0, Vars).
|
||||
|
||||
print([]).
|
||||
print([R|Rs]) :-
|
||||
print_row(R),
|
||||
print(Rs).
|
||||
|
||||
print_row([]) :- nl.
|
||||
print_row([X|R]) :-
|
||||
( X == 0
|
||||
-> write(' ')
|
||||
; write('x')),
|
||||
print_row(R).
|
||||
|
||||
nonogram(Rows, Cols) :-
|
||||
length(Rows, X),
|
||||
length(Cols, Y),
|
||||
make_grid(Grid, X, Y, Vars),
|
||||
nono(Rows, Cols, Grid),
|
||||
label(Vars),
|
||||
print(Grid).
|
||||
24
Task/Nonogram-solver/Prolog/nonogram-solver-2.pro
Normal file
24
Task/Nonogram-solver/Prolog/nonogram-solver-2.pro
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
nonogram :-
|
||||
open('C:/Users/Utilisateur/Documents/Prolog/Rosetta/nonogram/nonogram.txt',
|
||||
read, In, []),
|
||||
repeat,
|
||||
read_line_to_codes(In, Line_1),
|
||||
read_line_to_codes(In, Line_2),
|
||||
compute_values(Line_1, [], [], Lines),
|
||||
compute_values(Line_2, [], [], Columns),
|
||||
nonogram(Lines, Columns) , nl, nl,
|
||||
read_line_to_codes(In, end_of_file),
|
||||
close(In).
|
||||
|
||||
compute_values([], Current, Tmp, R) :-
|
||||
reverse(Current, R_Current),
|
||||
reverse([R_Current | Tmp], R).
|
||||
|
||||
compute_values([32 | T], Current, Tmp, R) :-
|
||||
!,
|
||||
reverse(Current, R_Current),
|
||||
compute_values(T, [], [R_Current | Tmp], R).
|
||||
|
||||
compute_values([X | T], Current, Tmp, R) :-
|
||||
V is X - 64,
|
||||
compute_values(T, [V | Current], Tmp, R).
|
||||
Loading…
Add table
Add a link
Reference in a new issue