File size: 3,517 Bytes
7a80f4b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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

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 = "\n".join([f"sum({params}) -> {expected_output}" for params, expected_output in [(1, 2), (2, 3), (3, 4)]])
        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), (2, 3), (3, 4)]
                })
            else:
                st.error("Please provide a solution.")

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

if __name__ == "__main__":
    main()