% 色の定義
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(隣接区, 区)) ->
coloring(T).
% 実行部
( coloring([
鶴見-_, 神奈川-_, 西-_, 中-_, 南-_, 港南-_,
磯子-_, 金沢-_, 栄-_, 保土ケ谷-_, 旭-_, 瀬谷-_,
泉-_, 戸塚-_, 都筑-_, 港北-_, 緑-_, 青葉-_
]) ->
format('4色で塗り分け可能~n')
; format('塗り分け不可~n')
)
).
JSDoibLjga7lrprnvqkKY29sb3IocmVkKS4KY29sb3IoZ3JlZW4pLgpjb2xvcihibHVlKS4KY29sb3IoeWVsbG93KS4KCiUg6Zqj5o6l6Zai5L+C77yI5b+F6KaB44Gq5YiG44Gu44G/6KiY6L+w77yJCmFkamFjZW50KOm2tOimiywg56We5aWI5bedKS4KYWRqYWNlbnQo56We5aWI5bedLCDopb8pLgphZGphY2VudCjopb8sIOS4rSkuCmFkamFjZW50KOS4rSwg5Y2XKS4KYWRqYWNlbnQo5Y2XLCDmuK/ljZcpLgphZGphY2VudCjmuK/ljZcsIOejr+WtkCkuCmFkamFjZW50KOejr+WtkCwg6YeR5rKiKS4KYWRqYWNlbnQo6YeR5rKiLCDmoIQpLgphZGphY2VudCjmoIQsIOa4r+WNlykuCmFkamFjZW50KOS4rSwg5L+d5Zyf44Kx6LC3KS4KYWRqYWNlbnQo5L+d5Zyf44Kx6LC3LCDopb8pLgphZGphY2VudCjkv53lnJ/jgrHosLcsIOaXrSkuCmFkamFjZW50KOaXrSwg54Cs6LC3KS4KYWRqYWNlbnQo54Cs6LC3LCDms4kpLgphZGphY2VudCjms4ksIOaIuOWhmikuCmFkamFjZW50KOaIuOWhmiwg5qCEKS4KYWRqYWNlbnQo6YO9562RLCDmuK/ljJcpLgphZGphY2VudCjpg73nrZEsIOmdkuiRiSkuCmFkamFjZW50KOmDveetkSwg57eRKS4KYWRqYWNlbnQo5riv5YyXLCDnpZ7lpYjlt50pLgphZGphY2VudCjnt5EsIOmdkuiRiSkuCmFkamFjZW50KOa4r+WMlywg6ba06KaLKS4KYWRqYWNlbnQo5L+d5Zyf44Kx6LC3LCDnt5EpLgoKJSDoibLku5jjgZHvvJrjgZnjgbnjgabjga7ljLrjgavoibLjgpLlibLjgorlvZPjgabjgosKY29sb3JpbmcoW10pLgpjb2xvcmluZyhb5Yy6LeiJsiB8IFRdKSA6LQogICAgY29sb3Io6ImyKSwKICAgICUg6Zqj5o6l5Yy644Go44GZ44Gn44Gr5rG65a6a44GX44Gf6Imy44GM55Ww44Gq44KL44GT44Go44KS56K66KqNCiAgICBmb3JhbGwobWVtYmVyKOmao+aOpeWMui3pmqPmjqXoibIsIFQpLAogICAgICAgICAgIChhZGphY2VudCjljLosIOmao+aOpeWMuikgOyBhZGphY2VudCjpmqPmjqXljLosIOWMuikpIC0+CiAgICAgICAgICAg6ImyIFw9IOmao+aOpeiJsiA7IHRydWUpLAogICAgY29sb3JpbmcoVCkuCgolIOWun+ihjOmDqAo6LSBpbml0aWFsaXphdGlvbigKICAgICggY29sb3JpbmcoWwogICAgICAgIOm2tOimiy1fLCDnpZ7lpYjlt50tXywg6KW/LV8sIOS4rS1fLCDljZctXywg5riv5Y2XLV8sCiAgICAgICAg56Ov5a2QLV8sIOmHkeayoi1fLCDmoIQtXywg5L+d5Zyf44Kx6LC3LV8sIOaXrS1fLCDngKzosLctXywKICAgICAgICDms4ktXywg5oi45aGaLV8sIOmDveetkS1fLCDmuK/ljJctXywg57eRLV8sIOmdkuiRiS1fCiAgICAgIF0pIC0+CiAgICAgICAgZm9ybWF0KCc06Imy44Gn5aGX44KK5YiG44GR5Y+v6IO9fm4nKQogICAgOyAgIGZvcm1hdCgn5aGX44KK5YiG44GR5LiN5Y+vfm4nKQogICAgKQopLgo=