Participate - alice-adventures/alice GitHub Wiki

Participate in Alice

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 by participating in the Problems offered by any of the supported Problem Sources. So as a Participant, you can:

Solve problem challenges

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, but there plans to support more.

If you already have solutions for some Project Euler problems, then you can easily adapt your solution in Alice with minimal effort by implementing a CLI interface.

Learn Ada by example

Explore and understand examples of code that are available in Alice. Improve the design and implementation shared by other Participants, or take inspiration from them to apply new language features and SOLID design concepts.

Enhance your solutions

Create awesome visualizations! There is a GUI interface that Problems can use to implement a solution. This interface offers a set of graphic tools that are not bound to any particular graphic library.

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

Ada programming language has built-in support for parallel programming. Participants can learn and practice parallel programming techniques by implementing and comparing solutions that use parallelism.

If you're learning Ada, it is a good practice to take a sequential solution and transform it into a parallel one.

If possible, you can explore the search space of a Problem using multiple tasks. Combine parallelism with graphical visualizations ... and enjoy the experience!

Explore algorithm behavior

Take any Problem, possibly already implemented, and add new parameters to slightly change its behavior. For example,

  • What happens when the search space is explored in the reverse sense?

  • What if more tasks are launched in parallel? (Amdahl? Gustafson?)

  • What if the initial conditions are different?

Refactor code

It is usual to find code that can be shared between different puzzles when solving problems from a Problem Source. For example, a prime number generator is a good tool to have around to solve Project Euler problems. Thus, you can share and export common functionality as new elements in the Euler Tools library.

You can also create your own library of parallel patterns. Or improve any existing solution by applying alternative design concepts to make it more readable, more efficient or whatever you prefer.