## About

As we have been facing proofs more and more often in our math courses, we decided it would be fruitful to develop an algorithm that turn a proposition of any size into a truth table.

## Development

Using a framework of raw HTML (including CSS and JavaScript), we deployed the shunting yard algorithm to convert an input proposition into a string of tokens that could be processed into a truth table.

## Challenges

The collaborative coding environment we used did not highlight errors, so we had to grapple with constant bracketing issues. Also, being used to algebraic notation, it took some mental heavylifting to treat formulas in Reverse Polish Notation.

## Accomplishments

Just making a working product was a surprise. We were also proud of finding an efficient way to represent all possible combinations of truth assignments for a given set of variables simply by using the binary form of a loop counter.

## Takeaways

With this being our first real project in web development, we learned extensively about HTML, CSS, and JavaScript, with a cherry on top in the form of GitHub Pages. Our code editor's lack of error checking also improved our ability to independently recognize likely syntax errors.

## Looking Ahead

We will streamline our program and allow it to handle other topics in discrete math such as quantifiers.
## Inspiration

Our inspiration for this project came from the issue we had in classrooms where many students would ask the same questions in slightly different ways, causing the teacher to use up valuable time addressing these questions instead of more pertinent and different ones.
Also, we felt that the bag of words embedding used to vectorize sentences does not make use of the sentence characteristics optimally, so we decided to create our structure in order to represent a sentence more efficiently.

## Overview

Our application allows students to submit questions onto a website which then determines whether this question is either:

1. The same as another question that was previously asked
2. The same topic as another question that was previously asked
3. A different topic entirely

The application does this by using the model proposed by the paper "Bilateral Multi-Perspective Matching for Natural Language Sentences" by Zhiguo et. al, with a new word structure input which we call "sentence tree" instead of a bag-of-words that outputs a prediction of whether the new question asked falls into one of the above 3 categories.

## Methodology

We built this project by splitting the task into multiple subtasks which could be done in parallel. Two team members worked on the web app while the other two worked on the machine learning model in order to our expertise efficiently and optimally. In terms of the model aspect, we split the task into getting the paper's code work and implementing our own word representation which we then combined into a single model.

## Challenges

Majorly, modifying the approach presented in the paper to suit our needs was challenging. On the web development side, we could not integrate the model in the web app easily as envisioned since we had customized our model.

## Accomplishments

We are proud that we were able to get accuracy close to the ones provided by the paper and for developing our own representation of a sentence apart from the classical bag of words approach.
Furthermore, we are excited to have created a novel system that eases the pain of classroom instructors a great deal.

## Takeaways

We learned how to implement research papers and improve on the results from these papers. Not only that, we learned more about how to use Tensorflow to create NLP applications and the differences between Tensorflow 1 and 2.
Going further, we also learned how to use the Stanford CoreNLP toolkit. We also learned more about web app design and how to connect a machine learning backend in order to run scripts from user input.

## What's next for AskMe.AI

We plan on finetuning the model to improve its accuracy and to also allow for questions that are multi sentence. Not only that, we plan to streamline our approach so that the tree sentence structure could be seamlessly integrated with other NLP models to replace bag of words and to also fully integrate the website with the backend.
## Inspiration

We are part of a generation that has lost the art of handwriting. Because of the clarity and ease of typing, many people struggle with clear shorthand. Whether you're a second language learner or public education failed you, we wanted to come up with an intelligent system for efficiently improving your writing.

## What it does

We use an LLM to generate sample phrases, sentences, or character strings that target letters you're struggling with. You can input the writing as a photo or directly on the webpage. We then use OCR to parse, score, and give you feedback towards the ultimate goal of character mastery!

## How we built it

We used a simple front end utilizing flexbox layouts, the p5.js library for canvas writing, and simple javascript for logic and UI updates. On the backend, we hosted and developed an API with Flask, allowing us to receive responses from API calls to state-of-the-art OCR, and the newest Chat GPT model. We can also manage user scores with Pythonic logic-based sequence alignment algorithms.

## Challenges we ran into

We really struggled with our concept, tweaking it and revising it until the last minute! However, we believe this hard work really paid off in the elegance and clarity of our web app, UI, and overall concept.

..also sleep 🥲

## Accomplishments that we're proud of

We're really proud of our text recognition and matching. These intelligent systems were not easy to use or customize! We also think we found a creative use for the latest chat-GPT model to flex its utility in its phrase generation for targeted learning. Most importantly though, we are immensely proud of our teamwork, and how everyone contributed pieces to the idea and to the final project.

## What we learned

3 of us have never been to a hackathon before!
3 of us never used Flask before!
All of us have never worked together before!

From working with an entirely new team to utilizing specific frameworks, we learned A TON.... and also, just how much caffeine is too much (hint: NEVER).

## What's Next for Handwriting Teacher

Handwriting Teacher was originally meant to teach Russian cursive, a much more difficult writing system. (If you don't believe us, look at some pictures online) Taking a smart and simple pipeline like this and updating the backend intelligence allows our app to incorporate cursive, other languages, and stylistic aesthetics. Further, we would be thrilled to implement a user authentication system and a database, allowing people to save their work, gamify their learning a little more, and feel a more extended sense of progress.