# =========================================================
# DNA RGB CYBERPUNK
# TODAS AS CORES AO MESMO TEMPO
# =========================================================

import math
import time
import random

# =========================================================
# ANSI RGB
# =========================================================

RESET = "\033[0m"

CORES = [

    "\033[91m",  # vermelho
    "\033[92m",  # verde
    "\033[93m",  # amarelo
    "\033[94m",  # azul
    "\033[95m",  # roxo
    "\033[96m",  # cyan
    "\033[97m",  # branco

]

# =========================================================
# CONFIG
# =========================================================

WIDTH = 150
HEIGHT = 44

# =========================================================
# CLEAR
# =========================================================

def clear():
    print("\033[H\033[J", end="")

# =========================================================
# LOOP
# =========================================================

t = 0

while True:

    clear()

    for y in range(HEIGHT):

        linha = [" "] * WIDTH

        # =================================
        # DNA
        # =================================

        onda = math.sin(
            y * 0.25 + t
        )

        largura = 28

        x1 = int(

            WIDTH/2

            +

            onda * largura

        )

        x2 = int(

            WIDTH/2

            -

            onda * largura

        )

        # =================================
        # CORES
        # =================================

        cor1 = CORES[
            (y // 2) % len(CORES)
        ]

        cor2 = CORES[
            (y // 3 + 2) % len(CORES)
        ]

        cor3 = CORES[
            (y // 4 + 4) % len(CORES)
        ]

        # =================================
        # LADO ESQUERDO
        # =================================

        if 0 <= x1 < WIDTH:

            linha[x1] = (

                cor1 +

                "#" +

                RESET

            )

        # =================================
        # LADO DIREITO
        # =================================

        if 0 <= x2 < WIDTH:

            linha[x2] = (

                cor2 +

                "#" +

                RESET

            )

        # =================================
        # LINHAS DNA
        # =================================

        for x in range(

            min(x1,x2),

            max(x1,x2)

        ):

            if x % 2 == 0:

                linha[x] = (

                    cor3 +

                    "-" +

                    RESET

                )

        # =================================
        # PONTOS EXTRAS
        # =================================

        if random.random() > 0.95:

            brilho = random.randint(
                0,
                WIDTH-1
            )

            linha[brilho] = (

                random.choice(CORES)

                +

                "*"

                +

                RESET

            )

        print("".join(linha))

    # =====================================
    # VELOCIDADE
    # =====================================

    t += 0.10

    time.sleep(0.025)
