Post
Topic
Board Bitcoin Discussion
Re: Bitcoin puzzle transaction ~32 BTC prize to who solves it
by
denyAKA BLACKANGEL
on 29/04/2025, 20:00:05 UTC
Your code is very good but it is brute forcing and what I am doing is not, my code generates private keys from 1 to 160 bits in a few seconds, for the first ten addresses I already have the code in a second I generate real private keys for all 10 of the puzzle.Maybe you have some ideas on how to improvise my code.


Code:
from collections import defaultdict

SOLVED_KEYS = {
    1: 1, 2: 3, 3: 7, 4: 8, 5: 21, 10: 514
}

def calculate_pattern_score(keys):
    score = 0
    patterns = {
        'mersenne': lambda k: all(x == (2**i - 1) for i, x in enumerate(k, start=1)),
        'bitwise': lambda k: all(k[i] == (k[i-1] << 1) + 1 for i in range(1, len(k))),
        'prime': lambda k: sum(is_prime(x) for x in k)
    }
    
    for name, check in patterns.items():
        if name == 'mersenne' and check(keys):
            score += 5
        elif name == 'bitwise' and check(keys):
            score += 3
        elif name == 'prime':
            score += min(check(keys), 2)
    return score

def find_cycles(max_cycle=10):
    cycle_scores = defaultdict(int)
    puzzles = sorted(SOLVED_KEYS.items())
    
    for cycle in range(2, max_cycle+1):
        groups = defaultdict(list)
        for idx, (pn, key) in enumerate(puzzles):
            groups[idx//cycle].append((pn, key))
        
        total_score = sum(
            calculate_pattern_score([k for _, k in group])
            for group in groups.values()
        )
        cycle_scores[cycle] = total_score

    best_cycle = max(cycle_scores, key=cycle_scores.get)
    return best_cycle, cycle_scores

def analyze_groups(cycle_length):
    groups = defaultdict(list)
    puzzles = sorted(SOLVED_KEYS.items())
    for idx, (pn, key) in enumerate(puzzles):
        group_id = idx // cycle_length
        groups[group_id].append((pn, key))
    
    print(f"\nCycle length: {cycle_length}")
    for group_id, group in groups.items():
        pns = [pn for pn, _ in group]
        keys = [key for _, key in group]
        print(f"Group {group_id+1} (Puzzles {pns}): Keys {keys}")

# Compare groups for cycle lengths 2 and 3
analyze_groups(2)
analyze_groups(3)

def is_prime(n):
    if n < 2: return False
    for i in range(2, int(n**0.5)+1):
        if n % i == 0: return False
    return True

# Run analysis
best_cycle, scores = find_cycles()
print(f"Most likely cycle length: {best_cycle}")
print("Cycle scores:", dict(scores))


Code:
%runfile /home/blackangel/untitled21.py --wdir

Cycle length: 2
Group 1 (Puzzles [1, 2]): Keys [1, 3]
Group 2 (Puzzles [3, 4]): Keys [7, 8]
Group 3 (Puzzles [5, 10]): Keys [21, 514]

Cycle length: 3
Group 1 (Puzzles [1, 2, 3]): Keys [1, 3, 7]
Group 2 (Puzzles [4, 5, 10]): Keys [8, 21, 514]
Most likely cycle length: 2
Cycle scores: {2: 10, 3: 10, 4: 2, 5: 5, 6: 2, 7: 2, 8: 2, 9: 2, 10: 2}