gpt4 book ai didi

prolog - 约束规划,列表中数字的重复,序言

转载 作者:行者123 更新时间:2023-12-04 23:56:28 25 4
gpt4 key购买 nike

如何限制列表中数字的重复?

以下代码示例中合适的约束是什么?

limit(X) :-
length(X,10),
domain(X,1,4),
% WANTED CONSTRAINT: maximum repetition of each number is 5 times.
labeling([],X).

一些示例查询和预期答案:
?- limit([1,1,1,1,1,1,1,1,1]).
false.

?- limit([1,1,1,1,1,2,2,2,2,2]).
true.

最佳答案

这是有效的,L 是从 1 到 4 的每个数字的重复次数列表。

:- use_module(library(clpfd)).

limit(X) :-
length(L, 4),
L ins 0..5,
sum(L, #=, 10),
label(L),
maplist(make_list, [1,2,3,4], L, LX),
flatten([LX],X).


make_list(Val, Nb, L) :-
length(L, Nb),
L ins Val .. Val.

问题是数字是按值分组的。
代码可以推广为
limit(X, Min, Max, Len, Rep) :-
Nb is Max -Min + 1,
length(L, Nb),
L ins 0..Rep,
sum(L, #=, Len),
label(L),
numlist(Min, Max, Lst),
maplist(make_list, Lst, L, LX),
flatten([LX],X).

你试试: 限制(X, 1, 4, 10, 5)。

关于prolog - 约束规划,列表中数字的重复,序言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15721185/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com