sls hat geschrieben: ↑Sonntag 2. Dezember 2018, 14:03Da meine Lösung für meine IDs passt, gehe ich mal davon aus dass die Buchstaben immer ein, zwei oder maximal drei mal in einer Box-ID vorkommen können.
"Davon ausgehen" ist *meistens* eine böse Falle...
Bei mir gab es in einer Sequenz einen Buchstaben 4fach und das hat mich Zeit gekostet.
Bin dann auf diese Lösung gekommen, ich erzeuge das dictionary von Hand, mit collections.Counter ist es verdammt eleganter
Code: Alles auswählen
sequences = [...]
twos, threes = 0, 0
for sequence in sequences:
count = {}
for letter in sequence:
try:
count[letter] += 1
except:
count[letter] = 1
most = set(count.values())
if 2 in most:
twos += 1
if 3 in most:
threes += 1
print(f'Checksum: {twos} * {threes} = {twos*threes}')
Hier mein Code für den zweiten Teil:
Code: Alles auswählen
from difflib import SequenceMatcher, ndiff
sequences = [...]
matcher = SequenceMatcher(None, '', '')
for row, first_sequence in enumerate(sequences):
matcher.set_seq2(first_sequence)
for column, second_sequence in enumerate(sequences):
if column > row:
matcher.set_seq1(second_sequence)
if int(matcher.ratio() * len(first_sequence)) == len(first_sequence) - 1:
matching = [letter[-1] for letter in ndiff(first_sequence, second_sequence) if letter[0] not in '+-']
print(''.join(matching))
Hatte einfach mal nach "python string find differences" gegoogelt und Beispiele gesehen, die difflib verwenden und mich da mal reingefuxt.
Am meisten Zeit hat mich die Nachbearbeitung gekostet um vernünftige Variablennamen zu verwenden, die die Gnade von __blackjack__ bekommen