leo3065

Monotype puzzle solver

Sep 21st, 2019
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Prolog 1.93 KB | None | 0 0
  1. :- use_module(library(csv)).
  2.  
  3. row_process(Original,Processed) :-
  4.     Original=..[pokemon_raw,ID,S_is_legend,S_is_mega,Name,S_type1,S_type2|_],
  5.     (S_is_legend = 'True' -> Is_legend = 1; Is_legend = 0),
  6.     (S_is_mega = 'True' -> Is_mega = 1; Is_mega = 0),
  7.     string_lower(S_type1, S_type1_low),
  8.     string_lower(S_type2, S_type2_low),
  9.     atom_string(Type1,S_type1_low),
  10.     atom_string(Type2,S_type2_low),
  11.     Processed=..[pokemon,ID,Is_legend,Is_mega,Name,Type1,Type2].
  12.  
  13. :- File = 'D:\\pokemon data\\pokemon.csv',
  14.     csv_read_file(File, Rows,
  15.         [functor(pokemon_raw),
  16.         encoding(utf8),
  17.         skip_header(#)]),
  18.     maplist(row_process, Rows, Rows_new),
  19.     maplist(assert, Rows_new).
  20.  
  21. type_all_list([bug, dark, dragon, electric, fairy, fighting,
  22.                fire, flying, ghost, grass, ground, ice, normal,
  23.                poison, psychic, rock, steel, water]).
  24.  
  25. legendary(Name,Q) :- pokemon(_,Q,_,Name,_,_).
  26. legendary(Name) :- legendary(Name,1).
  27. not_legendary(Name) :- legendary(Name,0).
  28. mega(Name,Q) :- pokemon(_,_,Q,Name,_,_).
  29. mega(Name) :- mega(Name,1).
  30. not_mega(Name) :- mega(Name,0).
  31.  
  32. :- table types/4, types/3.
  33. types(Name,T1,T2,0) :- pokemon(_,_,_,Name,T1,T2).
  34. types(Name,T1,T2,1) :- types(Name,T2,T1,0).
  35. types(Name,T1,T2) :- types(Name,T1,T2,_).
  36.  
  37. :- table avalible_types/2, avalible_types/3.
  38. avalible_types(T1,T2,Filter) :-
  39.     types(M,T1,T2),
  40.     maplist(
  41.         {M}/[H]>>call(H,M),
  42.     Filter).
  43. avalible_types(T1,T2) :- types(_,T1,T2).
  44.  
  45. set_part([], [], []).
  46. set_part([X|ST], [X|S1T], S2) :- set_part(ST, S1T, S2).
  47. set_part([X|ST], S1, [X|S2T]) :- set_part(ST, S1, S2T).
  48.  
  49. matrix(Ts1,Ts2,TR,Filter) :-
  50.     type_all_list(Ts),
  51.     length(Ts1, 6), length(Ts2, 6),
  52.     set_part(Ts,Ts1,Tsr),
  53.     set_part(Tsr,Ts2,TR),
  54.     maplist(
  55.         {Ts2,Filter}/[T1]>>maplist(
  56.             {T1,Filter}/[T2]>>avalible_types(T1,T2,Filter),
  57.         Ts2),
  58.     Ts1).
  59. matrix(Ts1,Ts2,TR) :- matrix(Ts1,Ts2,TR,[]).
Add Comment
Please, Sign In to add comment