Skip to content

Instantly share code, notes, and snippets.

@fasterthanlime
Last active August 26, 2024 23:32
Show Gist options
  • Save fasterthanlime/bcbc16c936bd28e3a117a505ebac8b01 to your computer and use it in GitHub Desktop.
Save fasterthanlime/bcbc16c936bd28e3a117a505ebac8b01 to your computer and use it in GitHub Desktop.
fn marine_line() -> String {
use rand::{seq::SliceRandom, Rng};
let marine_life = ["🐳", "🐠", "🦈", "πŸ™", "🐑", "🐬", "🐟", "πŸ¦€", "πŸ‹"];
let water = [
"\x1B[38;2;0;100;200mβ‰ˆ\x1B[0m",
"\x1B[38;2;10;110;210mβ‰ˆ\x1B[0m",
"\x1B[38;2;20;120;220mβ‰ˆ\x1B[0m",
"\x1B[38;2;30;130;230mβ‰ˆ\x1B[0m",
"\x1B[38;2;40;140;240mβ‰ˆ\x1B[0m",
"\x1B[38;2;50;150;250mβ‰ˆ\x1B[0m",
"\x1B[38;2;60;160;255mβ‰ˆ\x1B[0m",
"\x1B[38;2;70;170;255mβ‰ˆ\x1B[0m",
"\x1B[38;2;80;180;255mβ‰ˆ\x1B[0m",
"\x1B[38;2;90;190;255mβ‰ˆ\x1B[0m",
"\x1B[38;2;100;200;255mβ‰ˆ\x1B[0m",
"\x1B[38;2;110;210;255mβ‰ˆ\x1B[0m",
"\x1B[38;2;120;220;255mβ‰ˆ\x1B[0m",
"\x1B[38;2;130;230;255mβ‰ˆ\x1B[0m",
"\x1B[38;2;140;240;255mβ‰ˆ\x1B[0m",
];
let mut buffer = String::new();
let mut last_generated = "";
for i in 0..80 {
let position = i as f32 / 80.0;
let middle_weight = 1.0 - (position - 0.5).abs() * 2.0;
let chance = 0.125 + middle_weight * 0.125; // Ranges from 0.125 to 0.25
let set = if rand::thread_rng().gen::<f32>() < (chance * 0.5) {
&marine_life[..]
} else {
&water[..]
};
let generated = *set.choose(&mut rand::thread_rng()).unwrap();
if generated == last_generated {
buffer.push_str(water.choose(&mut rand::thread_rng()).unwrap());
} else {
buffer.push_str(generated);
last_generated = generated;
}
}
buffer
}
@fasterthanlime
Copy link
Author

example:

log lines, instead of being wrapped in =, are wrapped in wavy lines of various shades of blue and randomly occurirng emojis of marine life.

@solarisfire
Copy link

solarisfire commented Aug 23, 2024

If anyone wants to use this in a bash script:

#!/bin/bash

marine_line() {
    marine_life=("🐳" "🐠" "🦈" "πŸ™" "🐑" "🐬" "🐟" "πŸ¦€" "πŸ‹")
    water=(
        "\e[38;2;0;100;200mβ‰ˆ\e[0m"
        "\e[38;2;10;110;210mβ‰ˆ\e[0m"
        "\e[38;2;20;120;220mβ‰ˆ\e[0m"
        "\e[38;2;30;130;230mβ‰ˆ\e[0m"
        "\e[38;2;40;140;240mβ‰ˆ\e[0m"
        "\e[38;2;50;150;250mβ‰ˆ\e[0m"
        "\e[38;2;60;160;255mβ‰ˆ\e[0m"
        "\e[38;2;70;170;255mβ‰ˆ\e[0m"
        "\e[38;2;80;180;255mβ‰ˆ\e[0m"
        "\e[38;2;90;190;255mβ‰ˆ\e[0m"
        "\e[38;2;100;200;255mβ‰ˆ\e[0m"
        "\e[38;2;110;210;255mβ‰ˆ\e[0m"
        "\e[38;2;120;220;255mβ‰ˆ\e[0m"
        "\e[38;2;130;230;255mβ‰ˆ\e[0m"
        "\e[38;2;140;240;255mβ‰ˆ\e[0m"
    )

    buffer=""
    last_generated=""

    for ((i=0; i<80; i++)); do
        position=$(echo "$i / 80" | bc -l)
        middle_weight=$(echo "1.0 - ( $position - 0.5 ) * ( $position - 0.5 ) * 4.0" | bc -l)
        chance=$(echo "0.125 + $middle_weight * 0.125" | bc -l)

        if (( $(echo "$(shuf -i 0-10000 -n 1) < $(echo "$chance * 5000" | bc)" | bc) )); then
            set=("${marine_life[@]}")
        else
            set=("${water[@]}")
        fi

        generated="${set[$RANDOM % ${#set[@]}]}"

        if [[ "$generated" == "$last_generated" ]]; then
            generated="${water[$RANDOM % ${#water[@]}]}"
        fi

        buffer+="$generated"
        last_generated="$generated"
    done

    echo -e "$buffer"
}

marine_line

@chickenmatt5
Copy link

Or in Python:

def marine_line() -> str:
    marine_life = ("🐳", "🐠", "🦈", "πŸ™", "🐑", "🐬", "🐟", "πŸ¦€", "πŸ‹")
    water = (
        "\x1b[38;2;0;100;200mβ‰ˆ\x1b[0m",
        "\x1b[38;2;10;110;210mβ‰ˆ\x1b[0m",
        "\x1b[38;2;20;120;220mβ‰ˆ\x1b[0m",
        "\x1b[38;2;30;130;230mβ‰ˆ\x1b[0m",
        "\x1b[38;2;40;140;240mβ‰ˆ\x1b[0m",
        "\x1b[38;2;50;150;250mβ‰ˆ\x1b[0m",
        "\x1b[38;2;60;160;255mβ‰ˆ\x1b[0m",
        "\x1b[38;2;70;170;255mβ‰ˆ\x1b[0m",
        "\x1b[38;2;80;180;255mβ‰ˆ\x1b[0m",
        "\x1b[38;2;90;190;255mβ‰ˆ\x1b[0m",
        "\x1b[38;2;100;200;255mβ‰ˆ\x1b[0m",
        "\x1b[38;2;110;210;255mβ‰ˆ\x1b[0m",
        "\x1b[38;2;120;220;255mβ‰ˆ\x1b[0m",
        "\x1b[38;2;130;230;255mβ‰ˆ\x1b[0m",
        "\x1b[38;2;140;240;255mβ‰ˆ\x1b[0m",
    )

    buffer = ""
    last_generated = ""
    for i in range(80):
        position = i / 80
        middle_weight = 1.0 - abs(position - 0.5) * 2.0
        chance = 0.125 + middle_weight * 0.125

        if random.random() < (chance * 0.5):
            set_ = marine_life
        else:
            set_ = water
        generated = random.choice(set_)

        if generated == last_generated:
            buffer += random.choice(water)
        else:
            buffer += generated
            last_generated = generated

    return buffer

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment