feat(everything): fix doh and increase min TLS to 1.3
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
import csv
|
||||
import sys
|
||||
from collections import defaultdict
|
||||
|
||||
COLUMNS = ["provider", "protocol", "dnssec_mode", "query_type", "keep_alive"]
|
||||
|
||||
|
||||
def get_uncovered_values(rows, selected_indices, col_indices, all_values):
|
||||
covered = defaultdict(set)
|
||||
for idx in selected_indices:
|
||||
for col, col_idx in col_indices.items():
|
||||
covered[col].add(rows[idx][col_idx])
|
||||
|
||||
uncovered = {}
|
||||
for col in COLUMNS:
|
||||
uncovered[col] = all_values[col] - covered[col]
|
||||
return uncovered
|
||||
|
||||
|
||||
def main(input_file, output_file):
|
||||
with open(input_file, newline="") as f:
|
||||
reader = csv.reader(f)
|
||||
header = next(reader)
|
||||
rows = list(reader)
|
||||
|
||||
col_indices = {col: header.index(col) for col in COLUMNS}
|
||||
|
||||
# Collect all unique values per column
|
||||
all_values = defaultdict(set)
|
||||
for row in rows:
|
||||
for col, idx in col_indices.items():
|
||||
all_values[col].add(row[idx])
|
||||
|
||||
# Greedy set cover
|
||||
selected = []
|
||||
uncovered = get_uncovered_values(rows, selected, col_indices, all_values)
|
||||
|
||||
while any(uncovered.values()):
|
||||
best_row = None
|
||||
best_score = 0
|
||||
|
||||
for i, row in enumerate(rows):
|
||||
if i in selected:
|
||||
continue
|
||||
score = sum(
|
||||
1 for col, idx in col_indices.items() if row[idx] in uncovered[col]
|
||||
)
|
||||
if score > best_score:
|
||||
best_score = score
|
||||
best_row = i
|
||||
|
||||
if best_row is None:
|
||||
break
|
||||
|
||||
selected.append(best_row)
|
||||
uncovered = get_uncovered_values(rows, selected, col_indices, all_values)
|
||||
|
||||
with open(output_file, "w", newline="") as f:
|
||||
writer = csv.writer(f)
|
||||
writer.writerow(header)
|
||||
for idx in selected:
|
||||
writer.writerow(rows[idx])
|
||||
|
||||
print(f"Selected {len(selected)} rows out of {len(rows)}")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
if len(sys.argv) != 3:
|
||||
print("Usage: python minimize_csv.py input.csv output.csv")
|
||||
sys.exit(1)
|
||||
main(sys.argv[1], sys.argv[2])
|
||||
Reference in New Issue
Block a user