Login Page - Create Account

Support Board


Date/Time: Sat, 23 Nov 2024 08:36:12 +0000



Post From: Challenging Spreadsheet operation

[2024-09-02 18:17:44]
owendonk - Posts: 54
Hello,

I'm trying to take a set of values and extract subsets that meet certain criteria.

Specifically, I want to input the values in the range K3:AU3, remove repeat values and values below 15000, and identify all subsets with a range < 30. If multiple subsets include the same number, only include the subset with the most numbers and the smallest range. Then I want to output the highest and lowest values of each subset to formula columns so I can autodraw a rectangle for each range.

Here is an example in python that mostly works. I may need to write it in ACSIL and make a custom study, but I don't know C++. Any help is greatly appreciated.

The output of this python is [19164.75, 19145.55]
[19593.975, 19600.969401041668, 19611.313802083336, 19590.625]
[18367.946, 18369.6645]
[19690.438802083336, 19695.675].

Ideally this would all be done in the spreadsheet with spreadsheet logic.


data = [17346, 18735.525, 19164.75, 19593.975, 20983.5, 14136.5, 16752.054, 17560, 18367.946, 20983.5, 17346, 18369.6645, 18685.875, 19002.0855, 20025.75, 19690.438802083336, 19759.219401041668, 19532.188802083336, 19442.719401041668, 19848.688802083336, 19373.938802083336, 19600.969401041668, 19611.313802083336, 19590.625, 19621.658203125, 63.27272920927062, 59.38859038604226, 19145.55, 19255.575, 19475.625, 19695.675, 19805.7]

# Remove values smaller than 10000
data = [x for x in data if x >= 10000]

# Remove duplicate values
unique_data = []
for x in data:
if x not in unique_data:
unique_data.append(x)
data = unique_data

# Identify subsets with range smaller than 30
subsets = []
used_numbers = set()

for i in range(len(data)):
if data in used_numbers:
continue
subset = [data]
for j in range(i + 1, len(data)):
if data[j] not in used_numbers and max(subset + [data[j]]) - min(subset + [data[j]]) <= 30:
subset.append(data[j])
if len(subset) > 1:
subsets.append(subset)
used_numbers.update(subset)

# Filter subsets to include only the one with the most numbers and smallest range if multiple subsets have the same numbers
unique_subsets = {}
for subset in subsets:
subset_key = tuple(sorted(subset))
if subset_key not in unique_subsets or (len(subset) > len(unique_subsets[subset_key]) or (len(subset) == len(unique_subsets[subset_key]) and (max(subset) - min(subset) < max(unique_subsets[subset_key]) - min(unique_subsets[subset_key])))):
unique_subsets[subset_key] = subset

# Output all unique subsets that meet the criteria
for subset in unique_subsets.values():
print(subset)

Date Time Of Last Edit: 2024-09-02 18:19:06