#!/usr/bin/env python3
"""
Focus on the D/L/I pattern - maybe it's a code
D = 0/Down/Dot?
L = 1/Left/Line?
I = Space/Separator?
"""

message = "8>,>LL>,e}TozKDMQEMELHOEKDLLDDDDDLLDDDIDDDDLDLDDDDDIDLLDID,>8888\\\\88888888888888888888888888888888888888888888>"

# Extract only D, L, I
dli_only = ''.join([c for c in message if c in 'DLI'])
print("D/L/I sequence only:")
print(dli_only)
print()

# Try D=0, L=1 as binary
binary_str = dli_only.replace('I', ' ').replace('D', '0').replace('L', '1')
print("As binary (I=space, D=0, L=1):")
print(binary_str)
print()

# Split by I (treat as separator)
groups = dli_only.split('I')
print(f"Groups split by 'I': {groups}")
print()

# Try converting each group as binary
print("Each group as binary->decimal->ASCII:")
for i, group in enumerate(groups):
    if group:
        binary = group.replace('D', '0').replace('L', '1')
        try:
            decimal = int(binary, 2)
            char = chr(decimal) if 32 <= decimal <= 126 else f"[{decimal}]"
            print(f"  Group {i}: {group:20s} -> {binary:20s} -> {decimal:4d} -> '{char}'")
        except:
            print(f"  Group {i}: {group} -> (error)")

# Try D=dash, L=line/dash, I=space for Morse-like
print("\n" + "=" * 80)
print("TRYING AS MORSE CODE VARIANT:")
print("=" * 80)

# Standard Morse: . = dit, - = dah
# Maybe D = dit (.), L = dah (_)
morse_map = {
    '.-': 'A', '-...': 'B', '-.-.': 'C', '-..': 'D', '.': 'E',
    '..-.': 'F', '--.': 'G', '....': 'H', '..': 'I', '.---': 'J',
    '-.-': 'K', '.-..': 'L', '--': 'M', '-.': 'N', '---': 'O',
    '.--.': 'P', '--.-': 'Q', '.-.': 'R', '...': 'S', '-': 'T',
    '..-': 'U', '...-': 'V', '.--': 'W', '-..-': 'X', '-.--': 'Y',
    '--..': 'Z',
    '-----': '0', '.----': '1', '..---': '2', '...--': '3', '....-': '4',
    '.....': '5', '-....': '6', '--...': '7', '---..': '8', '----.': '9',
    '{': '{', '}': '}'
}

# Try D=., L=-
morse_attempt = dli_only.replace('D', '.').replace('L', '-').replace('I', ' ')
print(f"D=., L=-, I=space:")
print(morse_attempt)

decoded = ""
for word in morse_attempt.split('  '):  # Double space between words
    for letter in word.split(' '):  # Single space between letters
        if letter in morse_map:
            decoded += morse_map[letter]
        elif letter:
            decoded += f"[{letter}]"
    decoded += " "

print(f"Decoded: {decoded}")

# Try L=., D=- (opposite)
morse_attempt2 = dli_only.replace('L', '.').replace('D', '-').replace('I', ' ')
print(f"\nL=., D=-, I=space:")
print(morse_attempt2)

decoded2 = ""
for word in morse_attempt2.split('  '):
    for letter in word.split(' '):
        if letter in morse_map:
            decoded2 += morse_map[letter]
        elif letter:
            decoded2 += f"[{letter}]"
    decoded2 += " "

print(f"Decoded: {decoded2}")

# Maybe the whole message including other chars is key
print("\n" + "=" * 80)
print("TRYING TO EXTRACT FLAG FROM DIFFERENT ANGLES:")
print("=" * 80)

# What if every capital letter matters in order?
capitals = ''.join([c for c in message if c.isupper()])
print(f"Capital letters only: {capitals}")

# What if we need to reverse?
capitals_rev = capitals[::-1]
print(f"Capitals reversed: {capitals_rev}")

#  What if { and } are in there somewhere hidden?
brace_idx = message.find('}')
print(f"\nLooking for braces... Found }} at index {brace_idx}")

# Maybe read backwards from }?
if '}' in message:
    idx = message.find('}')
    before_brace = message[:idx]
    after_brace = message[idx:]
    print(f"Before }}: {before_brace}")
    print(f"After }}: {after_brace}")
    
    # Extract letters from before }
    before_letters = ''.join([c for c in before_brace if c.isalpha()])
    print(f"Letters before }}: {before_letters}")
    print(f"Reversed: {before_letters[::-1]}")
