Ceny kapsuł, w których umieszczamy zakodowane DNA, znajdziesz na naszej stronie: https://fitoncydy.pl/genomika-dna
Wpisz swój tekst poniżej, zobaczysz przykładową cenę w dolarach amerykańskich. (obecnie 1$ to około 4zł)
Uwaga - do odczytywania potrzebujesz komputera i algorytmów. Ręcznie to praca na miesiące, jeśli masz zgromadzone odpowiednie informacje techniczne. Możemy zapisywać informacje prościej - bez zlib i kodowania Huffmana ale niestety wzrasta ilość zasad ACTG i cena. Zwykle wychodzi dwa, trzy razy drożej.
Na teraz (12.2025) darmowa, masowa sztuczna inteligencja jeszcze nie radzi sobie z odkodowywaniem takiego tekstu, bez treningu czy podpowiedzi, ale jest to raczej kwestia najbliższych lat. To nie szyfr. To jawna kompresja + proste kodowanie .
Możesz pobrać nasz prosty program DNA_koder_1.0.exe , którym zakodujesz i odkodujesz tekst: https://drive.google.com/file/d/1ocImRfnHJuJRYhr1wFG6z8s1DoF3BtJy/view?usp=sharing
Poniżej kod do zastosowania w Pythonie. To samo co jest w powyżej wspomnianym programie. Program uruchamia prosty interfejs, gdzie możesz kodować i odkodowywać tekst, tak jak na tej stronie. Aby program zadziałał potrzebujesz Pythona 3. Ma on w sobie użyte tutaj moduły zlib, tkinter, ttk, messagebox.
: :
--------------------
import tkinter as tk
from tkinter import ttk, messagebox
import zlib
# Mapowania bitów na zasady DNA i odwrotnie
BIT_TO_DNA = {
'00': 'A',
'01': 'C',
'10': 'G',
'11': 'T',
}
DNA_TO_BIT = {v: k for k, v in BIT_TO_DNA.items()}
def encode_dna(text: str) -> str:
"""Tekst (UTF-8) -> zlib -> bity -> ACTG."""
data = text.encode('utf-8')
compressed = zlib.compress(data) # standardowy strumień zlib
bits = ''.join(f'{b:08b}' for b in compressed)
dna = ''.join(BIT_TO_DNA[bits[i:i+2]] for i in range(0, len(bits), 2))
return dna
def decode_dna(dna: str) -> str:
"""ACTG -> bity -> zlib -> tekst (UTF-8)."""
dna = dna.upper()
bits = ''.join(DNA_TO_BIT[base] for base in dna if base in DNA_TO_BIT)
byte_array = bytearray()
for i in range(0, len(bits), 8):
byte_bits = bits[i:i+8]
if len(byte_bits) == 8:
byte_array.append(int(byte_bits, 2))
compressed = bytes(byte_array)
decompressed = zlib.decompress(compressed)
return decompressed.decode('utf-8')
def main():
root = tk.Tk()
root.title("Kodowanie tekstu w DNA")
root.geometry("800x600")
mode = tk.StringVar(value="encode") # "encode" albo "decode"
# Funkcje GUI
def update_labels(*args):
if mode.get() == "encode":
input_label.config(text="Tekst do zakodowania:")
output_label.config(text="Sekwencja DNA:")
action_button.config(text="Zakoduj")
cost_label_var.set("")
else:
input_label.config(text="Sekwencja DNA do odkodowania:")
output_label.config(text="Odkodowany tekst:")
action_button.config(text="Odkoduj")
cost_label_var.set("")
def on_action():
if mode.get() == "encode":
text = input_text.get("1.0", "end-1c")
if not text:
messagebox.showwarning("Brak danych", "Wpisz tekst do zakodowania.")
return
dna = encode_dna(text)
output_text.delete("1.0", "end")
output_text.insert("1.0", dna)
cost = len(dna) * 0.20
cost_label_var.set(
f"Szacunkowy koszt syntezy DNA: {cost:.2f} USD (przy 0.20 USD za bazę)"
)
else:
dna = input_text.get("1.0", "end-1c")
if not dna:
messagebox.showwarning("Brak danych", "Wpisz sekwencję DNA do odkodowania.")
return
try:
text = decode_dna(dna)
except Exception:
messagebox.showerror(
"Błąd dekodowania",
"Nie udało się zdekompresować danych.\n"
"Sprawdź, czy sekwencja DNA jest poprawna i pochodzi z tego kodera.",
)
return
output_text.delete("1.0", "end")
output_text.insert("1.0", text)
cost_label_var.set("")
# Wybór trybu
mode_frame = ttk.Frame(root)
mode_frame.pack(fill="x", pady=5)
ttk.Label(mode_frame, text="Wybierz tryb:").pack(side="left", padx=(0, 10))
ttk.Radiobutton(
mode_frame,
text="Koduj tekst → DNA",
variable=mode,
value="encode",
command=update_labels,
).pack(side="left")
ttk.Radiobutton(
mode_frame,
text="Dekoduj DNA → tekst",
variable=mode,
value="decode",
command=update_labels,
).pack(side="left")
# Pole wejściowe
input_label = ttk.Label(root, text="Tekst do zakodowania:")
input_label.pack(anchor="w", pady=(10, 0))
input_text = tk.Text(root, height=8, wrap="word")
input_text.pack(fill="both", expand=True)
# Przycisk akcji
action_button = ttk.Button(root, text="Zakoduj", command=on_action)
action_button.pack(pady=10)
# Pole wyjściowe
output_label = ttk.Label(root, text="Sekwencja DNA:")
output_label.pack(anchor="w", pady=(10, 0))
output_text = tk.Text(root, height=8, wrap="word")
output_text.pack(fill="both", expand=True)
# Informacja o koszcie
cost_label_var = tk.StringVar()
cost_label = ttk.Label(root, textvariable=cost_label_var)
cost_label.pack(anchor="w", pady=(5, 0))
update_labels()
root.mainloop()
if __name__ == "__main__":
main()