File size: 3,056 Bytes
c5f142e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8770c71
c5f142e
 
 
 
 
 
 
 
 
 
c75c67c
14ee4f9
 
 
 
c5f142e
66f6715
c5f142e
c75c67c
b5c9769
14ee4f9
c75c67c
605e60a
b5c9769
c75c67c
c5f142e
c75c67c
517dd48
14ee4f9
 
 
 
517dd48
c5f142e
2a4abe5
649728a
 
66f6715
c5f142e
649728a
 
c5f142e
8770c71
 
66f6715
8770c71
 
173ebdd
8770c71
 
 
c0a104f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
import streamlit as st
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.colors import ListedColormap

# Function to modify the generated number according to the rules
def modify_number(number):
    modified_number = ''
    for digit in number:
        if digit not in '01':  # Change any digit that is not 0 or 1 to 1
            modified_number += '1'
        else:
            modified_number += digit
    return modified_number

# Function to create the grid based on the boolean string
def create_grid(boolean_string):
    if len(boolean_string) != 16:
        st.error("The generated string is not 16 digits long.")
        return None
    
    # Convert string to a list of integers
    grid = np.array([int(bit) for bit in boolean_string]).reshape(4, 4)
    
    # Create a colormap for the grid
    cmap = ListedColormap(['white', 'black'])
    
    # Plot the grid
    fig, ax = plt.subplots(figsize=(2, 2))  # Shrink the graph size
    ax.matshow(grid, cmap=cmap)
    
    # Add grid lines and remove ticks
    ax.set_xticks(np.arange(-0.5, 4, 1), minor=True)
    ax.set_yticks(np.arange(-0.5, 4, 1), minor=True)
    ax.grid(which='minor', color='gray', linestyle='-', linewidth=2)
    ax.tick_params(left=False, bottom=False, labelleft=False, labelbottom=False)
    
    return fig

# Function to interpolate between start and end values
def interpolate_value(start_value, end_value, position, max_position):
    difference = end_value - start_value
    interpolated_value = start_value + (difference * (position / max_position))
    return int(interpolated_value)

st.title("4x4 Boolean Grids with Interpolated Slider")

# Slider for selecting the position, starting at 0
max_slider_value = 10
position = st.slider("Select a position", 0, max_slider_value, 0)

# Define the start and distinct end values for each of the four numbers
start_value = 111111111111111
end_values = [0, 1111111100000000, 1111111111111111, 11111111]

# Interpolate each value based on the slider position
interpolated_values = [
    interpolate_value(start_value, end_values[0], position, max_slider_value),  # Number 1
    interpolate_value(start_value, end_values[1], position, max_slider_value),  # Number 2
    interpolate_value(start_value, end_values[2], position, max_slider_value),  # Number 3
    interpolate_value(start_value, end_values[3], position, max_slider_value)   # Number 4
]

# Display the interpolated numbers correctly
st.write(f"Interpolated Numbers:")
for i, value in enumerate(interpolated_values):
    st.write(f"Number {i+1}: {value}")

# Convert the interpolated numbers to boolean strings
boolean_strings = [modify_number(str(value).zfill(16)) for value in interpolated_values]

# Create grids for each number and display them in a row
cols = st.columns(4)
for i, boolean_string in enumerate(boolean_strings):
    with cols[i]:
        st.write(f"Grid for Number {i+1}:")
        st.write(modify_number(str(11).zfill(16)))
        fig = create_grid(boolean_string)
        if fig:
            st.pyplot(fig)