File size: 3,455 Bytes
7a80f4b
4052fa4
7a80f4b
 
 
 
 
 
4052fa4
7a80f4b
4052fa4
7a80f4b
 
 
 
 
 
 
 
 
4052fa4
7a80f4b
4052fa4
7a80f4b
4052fa4
 
7a80f4b
4052fa4
 
7a80f4b
 
 
 
 
4052fa4
 
 
 
 
7a80f4b
4052fa4
 
 
7a80f4b
 
 
 
 
4052fa4
7a80f4b
 
 
 
 
 
4052fa4
7a80f4b
 
 
4052fa4
7a80f4b
 
4052fa4
7a80f4b
925ca30
4052fa4
 
 
 
bb7a836
7a80f4b
 
925ca30
4052fa4
7a80f4b
925ca30
4052fa4
7a80f4b
 
4052fa4
7a80f4b
925ca30
7a80f4b
 
 
 
4052fa4
 
 
 
7a80f4b
 
 
 
 
 
 
4052fa4
 
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99

    
import streamlit as st
from streamlit_ace import st_ace
import pandas as pd

button_style = st.markdown('''
<style>
div.stButton > button:first-child {{
    background-color: #3A7EF1;
}}
</style>''', unsafe_allow_html=True)

left_co, cent_co,last_co = st.columns(3)
with cent_co:
    st.image("https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTzYyVPVc8EX7_N2QOh9D86t54SS7ucBDcOU_Tn52LwBi8BQTwcdeCVKcyjSKBGExjB4g&usqp=CAU")
st.markdown("<h5 style='color: #707379;  text-align: center;'>School of AI by 1001epochs</h5>", unsafe_allow_html=True)
st.markdown('')


def check_solution(code, func_params):
    try:
        exec(code)
        globals_dict = {}
        exec(code, globals_dict)
        function_to_test = globals_dict.get(func_params.get('function_name'))

        if not callable(function_to_test):
            raise ValueError(f"{{func_params.get('function_name')}} is not a callable function.")

        # Run the tests and populate the results table
        expected_result_list = []
        actual_result_list = []
        test_result = []
        for input_params, expected_output in func_params["test_cases"]:
            expected_result_list.append(expected_output)
            result = function_to_test(*input_params)
            actual_result_list.append(result)
            test_result.append("Passed" if expected_result_list == actual_result_list else "Failed")
        result_df = pd.DataFrame({
                "Expected": expected_result_list,
                "Run": actual_result_list,
                "Result": test_result
        }, index=None)
        st.markdown(result_df.style.hide(axis="index").to_html(), unsafe_allow_html=True)
        st.markdown("<br>", unsafe_allow_html=True)

        # Check if all tests passed
        if expected_result_list == actual_result_list:
            st.success("All tests passed!")
        else:
            st.error("Some tests failed.")
        return True

    except SyntaxError as e:
        st.error(f"Error: {{e}}")


def main():
    
    with st.form('app'):
        st.markdown("<h2 style='color: #707379;'>Coding Challenge - Code Practice</h2>", unsafe_allow_html=True)
    
        # Description of the challenge
        st.write("Create a function sum that meets the following criteria:")
        st.write('''Sum of two values''')
        
        # Display sample example for all test cases
        sample_examples = "Sample"
        st.code(sample_examples, language="python")
        show_solution_button = st.form_submit_button("Show Solution")
        if show_solution_button:
            solution = '''def sum(a,b):
    return a+b '''
            if solution:
                st.code('''def sum(a,b):
    return a+b ''', language="python")
            else:
                st.error('No Solution Provided!')
    
        # Code input area
        code = st_ace(value='''def sum(a,b):''', language="python", key="my_editor", theme='clouds', height=200)
        # Check solution button
        if st.form_submit_button("Check Solution"):
            if code:
                # Check the solution
                check_solution(code, {
                    "function_name": "sum",
                    "test_cases": [((1, 2), 3), ((1, 0), 1), ((-1, -2), -3)]
                })
            else:
                st.error("Please provide a solution.")

    st.markdown("Copyright© by 1001epochs. All rights reserved.")

if __name__ == "__main__":
    main()