RosettaCodeData/Task/Combinations/Ring/combinations.ring

73 lines
2.0 KiB
Plaintext

# Project : Combinations
n = 5
k = 3
temp = []
comb = []
num = com(n, k)
while true
temp = []
for n = 1 to 3
tm = random(4) + 1
add(temp, tm)
next
bool1 = (temp[1] = temp[2]) and (temp[1] = temp[3]) and (temp[2] = temp[3])
bool2 = (temp[1] < temp[2]) and (temp[2] < temp[3])
if not bool1 and bool2
add(comb, temp)
ok
for p = 1 to len(comb) - 1
for q = p + 1 to len(comb)
if (comb[p][1] = comb[q][1]) and (comb[p][2] = comb[q][2]) and (comb[p][3] = comb[q][3])
del(comb, p)
ok
next
next
if len(comb) = num
exit
ok
end
comb = sortfirst(comb, 1)
see showarray(comb) + nl
func com(n, k)
res1 = 1
for n1 = n - k + 1 to n
res1 = res1 * n1
next
res2 = 1
for n2 = 1 to k
res2 = res2 * n2
next
res3 = res1/res2
return res3
func showarray(vect)
svect = ""
for nrs = 1 to len(vect)
svect = "[" + vect[nrs][1] + " " + vect[nrs][2] + " " + vect[nrs][3] + "]" + nl
see svect
next
Func sortfirst(alist, ind)
aList = sort(aList,ind)
for n = 1 to len(alist)-1
for m= n + 1 to len(aList)
if alist[n][1] = alist[m][1] and alist[m][2] < alist[n][2]
temp = alist[n]
alist[n] = alist[m]
alist[m] = temp
ok
next
next
for n = 1 to len(alist)-1
for m= n + 1 to len(aList)
if alist[n][1] = alist[m][1] and alist[n][2] = alist[m][2] and alist[m][3] < alist[n][3]
temp = alist[n]
alist[n] = alist[m]
alist[m] = temp
ok
next
next
return aList