treffen:problemsolving:008_set

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen gezeigt.

Link zu der Vergleichsansicht

Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung
Nächste Überarbeitung
Vorherige Überarbeitung
treffen:problemsolving:008_set [2021/12/17 13:08]
max
treffen:problemsolving:008_set [2022/01/22 14:38] (aktuell)
max
Zeile 2: Zeile 2:
  
  
-====== 008 Problem Solving: Set ======+====== 008: Set ======
  
 | Serie | [[treffen:problemsolving|treffen:problemsolving]] |  | Serie | [[treffen:problemsolving|treffen:problemsolving]] | 
Zeile 9: Zeile 9:
 | Download | {{ :treffen:problemsolving:008_problemsolving_set.pdf |Aufgabenbeschreibung [pdf]}} | | Download | {{ :treffen:problemsolving:008_problemsolving_set.pdf |Aufgabenbeschreibung [pdf]}} |
 | Schwierigkeit | {{:treffen:problemsolving:progress1.png?nolink&160 |}} |  | Schwierigkeit | {{:treffen:problemsolving:progress1.png?nolink&160 |}} | 
 +
 +
 +
 +===== Lösungen =====
 +{{:treffen:problemsolving:spoileralert.png?200|}}
 +
 +----
 +
 +==== nopx ====
 +Stupide Brute Force Loesung in Python 3.8 hier zusammengefasst. Ausfuehrlicher Code kann {{ :treffen:problemsolving:008_problemsolving_set_solution_max_v0.2.zip |hier}} runtergeladen werden.
 +
 +<code Python>
 +import sys
 +import numpy as np
 +import itertools
 +
 +
 +num_properties = 4
 +setsize = 3
 +
 +def solve_set(instr : str) -> list:
 +    assert(len(instr) % num_properties == 0)
 +    num_cards = len(instr) // num_properties
 +    cards = np.zeros( ( num_cards, num_properties), dtype=int)
 +    for i in range(0,len(instr),num_properties):
 +        for j in range(num_properties):
 +            cards[i//num_properties,j] = ord(instr[i+j])
 +    
 +    idxs_cards = list(range(len(cards)))
 +    solutions = []
 +    for perm in itertools.permutations(idxs_cards,setsize):
 +        for prop_id in range(num_properties):
 +            l = cards[perm,prop_id]
 +            unique = np.unique(l)
 +            if len(unique) != 1 and len(unique) < setsize:
 +                break
 +            else:
 +                if prop_id == num_properties-1:
 +                    solutions.append(perm)
 +
 +    return solutions, cards
 +
 +if __name__ == "__main__":
 +    instr = str(sys.argv[1])
 +        
 +    if len(instr) < num_properties:
 +        exit(1)
 +    
 +    solutions, cards = solve_set(instr)
 +    
 +    if len(solutions) > 0:
 +        exit(0)
 +    else:
 +        exit(1)
 +</code>
 +
 +
 +~~DISCUSSION~~
  • treffen/problemsolving/008_set.1639746515.txt.gz
  • Zuletzt geändert: 2021/12/17 13:08
  • von max