Heavy calculations almost done. Added script for automatization "fill_table_from_nb.py"
This commit is contained in:
parent
b1c782d88e
commit
3585c75b2a
39 changed files with 125384 additions and 88606 deletions
56
automation/decompress.py
Normal file
56
automation/decompress.py
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
import base64
|
||||
import zlib
|
||||
|
||||
|
||||
def decompress_wolfram_data(compressed_str: str) -> str:
|
||||
"""Декодирует и распаковывает строку CompressedData из Wolfram Mathematica."""
|
||||
# 1. Удаляем пробелы, переносы строк и префикс версии (например, "1:")
|
||||
cleaned_str = "".join(compressed_str.split())
|
||||
if ":" in cleaned_str:
|
||||
cleaned_str = cleaned_str.split(":", 1)[1]
|
||||
|
||||
# 2. Алфавиты: Wolfram использует отличный от стандартного Base64 набор символов
|
||||
# Стандартный: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
|
||||
wolfram_alphabet = (
|
||||
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/"
|
||||
)
|
||||
standard_alphabet = (
|
||||
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
|
||||
)
|
||||
|
||||
# Создаем таблицу перевода символов из Wolfram в стандартный Base64
|
||||
translation_table = str.maketrans(wolfram_alphabet, standard_alphabet)
|
||||
standard_b64_str = cleaned_str.translate(translation_table)
|
||||
|
||||
# 3. Добавляем паддинг '=', если длина строки не кратна 4
|
||||
padding_needed = len(standard_b64_str) % 4
|
||||
if padding_needed:
|
||||
standard_b64_str += "=" * (4 - padding_needed)
|
||||
|
||||
# 4. Декодируем из Base64 в байты
|
||||
binary_data = base64.b64decode(standard_b64_str)
|
||||
|
||||
# 5. Распаковываем с помощью zlib (алгоритм Deflate)
|
||||
decompressed_bytes = zlib.decompress(binary_data)
|
||||
|
||||
# Возвращаем результат в виде текстовой строки
|
||||
return decompressed_bytes.decode("utf-8", errors="ignore")
|
||||
|
||||
|
||||
# === ПРИМЕР ИСПОЛЬЗОВАНИЯ ===
|
||||
if __name__ == "__main__":
|
||||
# Пример сжатой строки из Mathematica (результат Compress["Hello World! This is Wolfram compression."])
|
||||
wolfram_data = """
|
||||
1:eJxVjDEOwjAMRaGSgYmJgYmBiaUrV65wAsbChMTgAtS9W9SptfS97+f79Wev
|
||||
bX6fLhXF6Kx0Y9WSpM/fXstxmsv9uE3p2SgUizWclE3Z6p38g2bE9Y6g8w2VgG6A
|
||||
"""
|
||||
wolfram_data = input("Enter wolfram compressed data string:\n")
|
||||
|
||||
try:
|
||||
result = decompress_wolfram_data(wolfram_data)
|
||||
print("Успешно распаковано!")
|
||||
print("-" * 30)
|
||||
print(result)
|
||||
print("-" * 30)
|
||||
except Exception as e:
|
||||
print(f"Ошибка при распаковке: {e}")
|
||||
Loading…
Add table
Add a link
Reference in a new issue