Data commit

This commit is contained in:
Ingy döt Net 2023-07-01 11:58:00 -04:00
parent 7387c8f97b
commit cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions

View 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).

View 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).