-
Notifications
You must be signed in to change notification settings - Fork 0
Home
Alice is an open source Ada programming language framework designed to help programmers implement and explore different solutions to problems from various sources, including Project Euler, Codingame and Advent of Code (currently, only support for Project Euler is present in Alice). With Alice, you can flex your coding muscles and work on problems that challenge your creativity, logic, and problem-solving skills.
At the heart of Alice is a commitment to coding excellence, and Ada is the perfect language to bring this vision to life. As a high-level programming language designed for safety, reliability, and efficiency, Ada provides a powerful and flexible toolset for programmers to create robust and scalable software solutions. With Ada, you can write clean, concise, and elegant code that is easy to read and maintain, helping to ensure that your programs are error-free and performant. So whether you're a seasoned Ada programmer or new to the language, Alice is the perfect platform to hone your skills and push your limits.
With Alice, you can collaborate in a variety of ways.
If you like Problems, Puzzles, programming Challenges and Ada, then Alice offers you a good place to share your knowledge, learn or improve you skills, or inspire others with your proposals.
You can focus your collaboration participating in the Problems offered by any of the supported Problem Sources. So as a Participant, you can:
-
Implement new solutions in Ada: there are +800 Problems in Project Euler, tons of Puzzles in Codingame and hundreds of challenges in Advent of Code (currently, only Project Euler is supported, more to come in the future).
-
Learn Ada by example: improve the design and implementation shared by other participants, or take inspiration from them to apply new language features and SOLID design concepts.
-
Create awesome visualizations: there is a GUI interface that Problems can use to implement a solution. Use it to visualize how the algorithm works, how the search space is explored, how the algorithm approaches the solution or to show whatever you can imagine!
-
Use parallelism: explore the search space of a Problem using multiple tasks, if possible. If you're learning Ada, its a good practice to take a sequential solution and transform it to a parallel one. Combine parallelism with graphical visualizations...and enjoy the experience!
-
Explore algorithm behavior: take any Problem, possibly already implemented, and add new parameters to compare its performance. For example, What happens when the search space is explored in the reverse sense?, What if more tasks are launched in parallel? (Amdahl? Gustafson?)
-
Refactor code: share and export common functionality as new elements in the Euler Tools library.
If you'd like to help Alice support more Proble Sources or enhance the existing implementations, then, as a Developer, you can:
-
Develop new GUI interfaces using your preferred graphic library: GTK, Gnoga, SDL or SFML, to mention some of them. Current state of Alice includes a Gnoga implementation that uses an HTML canvas to provide the GUI that Problems of Project Euler can use to create visualizations. And this only the starting point! There are many combinations of Problem Sources and GUI implementations, each of them with different requirements and possibilities.
-
Refactor and improve the Alice framework to inspire new concepts, refactor abstractions, apply SOLID principles, use advanced language features and flexible designs. Multiple iterations are usually required to achieve coding excellence, and Alice is not an exception.
-
Start the development and integration of other Problem Sources: starting from a simple CLI, adding specific features for the selected Problem Source, and finally adding a new GUI .
-
Integrate new Problem Sources: propose new challenges, learning sites or references. For example, How we could integrate Rosseta Code in Alice?
Alice is still in the early stages of development, and things are likely to change as we continue to refine and improve the framework. While Alice is still a work in progress, it is already starting to take shape as a robust and usable tool for exploring the challenges of the aforementioned Problem Sources. For example, to solve a Project Euler problem, there are two interfaces you can implement: CLI, a basic Command Line Interface; and GUI, a generic Graphical User Interface to create visual representations. Take a look at some of the provided examples.