% 色の定義
color(red).
color(green).
color(blue).
color(yellow).
% 隣接関係
adjacent(鶴見, 神奈川).
adjacent(神奈川, 西).
adjacent(西, 中).
adjacent(中, 南).
adjacent(南, 港南).
adjacent(港南, 磯子).
adjacent(磯子, 金沢).
adjacent(金沢, 栄).
adjacent(栄, 港南).
adjacent(中, 保土ケ谷).
adjacent(保土ケ谷, 西).
adjacent(保土ケ谷, 旭).
adjacent(旭, 瀬谷).
adjacent(瀬谷, 泉).
adjacent(泉, 戸塚).
adjacent(戸塚, 栄).
adjacent(都筑, 港北).
adjacent(都筑, 青葉).
adjacent(都筑, 緑).
adjacent(港北, 神奈川).
adjacent(緑, 青葉).
adjacent(港北, 鶴見).
adjacent(保土ケ谷, 緑).
% 色付け:すべての区に色を割り当てる
coloring([]).
coloring([区-色 | T]) :-
color(色),
forall(member(隣接区-隣接色, T),
((adjacent
(区
, 隣接区
); adjacent
(隣接区
, 区
)) -> 色 \
= 隣接色
; true)), coloring(T).
% 実行述語
run :-
coloring([
鶴見-_, 神奈川-_, 西-_, 中-_, 南-_, 港南-_,
磯子-_, 金沢-_, 栄-_, 保土ケ谷-_, 旭-_, 瀬谷-_,
泉-_, 戸塚-_, 都筑-_, 港北-_, 緑-_, 青葉-_
]),
% 実行
:- run.
JSDoibLjga7lrprnvqkKY29sb3IocmVkKS4KY29sb3IoZ3JlZW4pLgpjb2xvcihibHVlKS4KY29sb3IoeWVsbG93KS4KCiUg6Zqj5o6l6Zai5L+CCmFkamFjZW50KOm2tOimiywg56We5aWI5bedKS4KYWRqYWNlbnQo56We5aWI5bedLCDopb8pLgphZGphY2VudCjopb8sIOS4rSkuCmFkamFjZW50KOS4rSwg5Y2XKS4KYWRqYWNlbnQo5Y2XLCDmuK/ljZcpLgphZGphY2VudCjmuK/ljZcsIOejr+WtkCkuCmFkamFjZW50KOejr+WtkCwg6YeR5rKiKS4KYWRqYWNlbnQo6YeR5rKiLCDmoIQpLgphZGphY2VudCjmoIQsIOa4r+WNlykuCmFkamFjZW50KOS4rSwg5L+d5Zyf44Kx6LC3KS4KYWRqYWNlbnQo5L+d5Zyf44Kx6LC3LCDopb8pLgphZGphY2VudCjkv53lnJ/jgrHosLcsIOaXrSkuCmFkamFjZW50KOaXrSwg54Cs6LC3KS4KYWRqYWNlbnQo54Cs6LC3LCDms4kpLgphZGphY2VudCjms4ksIOaIuOWhmikuCmFkamFjZW50KOaIuOWhmiwg5qCEKS4KYWRqYWNlbnQo6YO9562RLCDmuK/ljJcpLgphZGphY2VudCjpg73nrZEsIOmdkuiRiSkuCmFkamFjZW50KOmDveetkSwg57eRKS4KYWRqYWNlbnQo5riv5YyXLCDnpZ7lpYjlt50pLgphZGphY2VudCjnt5EsIOmdkuiRiSkuCmFkamFjZW50KOa4r+WMlywg6ba06KaLKS4KYWRqYWNlbnQo5L+d5Zyf44Kx6LC3LCDnt5EpLgoKJSDoibLku5jjgZHvvJrjgZnjgbnjgabjga7ljLrjgavoibLjgpLlibLjgorlvZPjgabjgosKY29sb3JpbmcoW10pLgpjb2xvcmluZyhb5Yy6LeiJsiB8IFRdKSA6LQogICAgY29sb3Io6ImyKSwKICAgIGZvcmFsbChtZW1iZXIo6Zqj5o6l5Yy6Lemao+aOpeiJsiwgVCksCiAgICAgICAgICAgKChhZGphY2VudCjljLosIOmao+aOpeWMuik7IGFkamFjZW50KOmao+aOpeWMuiwg5Yy6KSkgLT4g6ImyIFw9IOmao+aOpeiJsiA7IHRydWUpKSwKICAgIGNvbG9yaW5nKFQpLgoKJSDlrp/ooYzov7Doqp4KcnVuIDotCiAgICBjb2xvcmluZyhbCiAgICAgICAg6ba06KaLLV8sIOelnuWliOW3nS1fLCDopb8tXywg5LitLV8sIOWNly1fLCDmuK/ljZctXywKICAgICAgICDno6/lrZAtXywg6YeR5rKiLV8sIOaghC1fLCDkv53lnJ/jgrHosLctXywg5petLV8sIOeArOiwty1fLAogICAgICAgIOaziS1fLCDmiLjloZotXywg6YO9562RLV8sIOa4r+WMly1fLCDnt5EtXywg6Z2S6JGJLV8KICAgIF0pLAogICAgd3JpdGUoJzToibLjgafloZfjgorliIbjgZHlj6/og70nKSwgbmwuCgolIOWun+ihjAo6LSBydW4uCg==