=Paper= {{Paper |id=Vol-2755/paper7 |storemode=property |title=Planets: A System for Autonomous Learning of Algorithmic Programming |pdfUrl=https://ceur-ws.org/Vol-2755/paper7.pdf |volume=Vol-2755 |authors=László Nikházy |dblpUrl=https://dblp.org/rec/conf/issep/Nikhazy20 }} ==Planets: A System for Autonomous Learning of Algorithmic Programming== https://ceur-ws.org/Vol-2755/paper7.pdf
 Planets: A System for Autonomous Learning of
           Algorithmic Programming ?

                                     László Nikházy

                      Eötvös Loránd University, Budapest, Hungary
                                    nikhazy@inf.elte.hu


         Abstract. This paper presents the design of a system where children
         can explore the world of algorithmic programming through solving prob-
         lems. Learning by doing certainly increases the engagement of pupils,
         furthermore, it is much easier to keep the learners’ attention when they
         are actively participating rather than just listening. The author teaches
         algorithms with a discovery learning method that incorporates presenting
         well-defined problems to students where the solution requires construct-
         ing the algorithm to be taught. To formulate the algorithms, students
         write programs that can be evaluated with black-box testing. This is very
         similar to programming competition tasks, and while there is a strong
         connection to them, the primary goal of the system is education, not
         assessment. Aiming to make this teaching approach available to a much
         larger audience, we propose a website that tries to fill the instructor’s
         role in the learning process. Gamification is a central principle through-
         out the design of the system. Therefore, it is built around a story that
         supports the methodology: the learner discovers the universe of program-
         ming and algorithms by traveling from planet to planet by a spaceship.
         Planets represent topics and every task is an adventure or a challenge
         posed by inhabitants of the planet. The article describes features of the
         designed web application, and the principles of selecting and organizing
         its content. In addition, the roadmap of topics that contain dependencies
         is outlined – this determines the order of exploring the planets, which is
         flexible to some extent. Finally, the author presents an example planet
         to show a complete piece of the system.

         Keywords: Problem-solving · Learning by discovery · Algorithmic pro-
         gramming · Novice programmers · Educational software · Teaching method-
         ology · Self-learning.


1      Introduction
1.1     Motivation
The success and effectiveness of discovery learning is a debated topic [1, 2]. Its
application in computer programming remains a challenge. However, the au-
 ?
     Supported by the project ”Integrated program for training new generation of re-
     searchers in the disciplinary fields of computer science”, No. EFOP-3.6.3-VEKOP-
     16-2017-00002. The project has been supported by the European Union and co-
     funded by the European Social Fund.



Copyright © 2020 for this paper by its authors. Use permitted under Creative Commons
License Attribution 4.0 International (CC BY 4.0).
2       L. Nikházy

thor is inspired by the work of Hungarian mathematician Lajos Pósa, which
has emerged to an amazing talent education program [3–5] carried on by the
community of his former students.
    My current research goal is to apply the Pósa method [4] in computer pro-
gramming education. I am focusing on teaching gifted children, because the for-
mer experiments of Pósa (unpublished) and the complex mathematics teaching
experiment of Tamás Varga [6] show that it is very hard to use discovery learning
in public education, while it is successful with young talents [3]. I have been giv-
ing individual and small group classes with promising results, and I am starting
computer science camps [7]. As a software engineer, I would like to see if it is
possible to extend this education’s scope by creating an online platform that fills
the instructor’s role in the discovery learning process. The name of the system
will be Planets. This paper presents the implementation of the didactic principles
that I follow [8] in an educational website, and also acts as the design document
of it. During the design process, the main research questions were: (1) What are
the key elements in the Pósa method aiding discovery through problem solving
that can be integrated to an automated self-learning environment? (2) How can
we use gamification into a website teaching algorithmic programming? (3) What
features can be built into the system to ease the lack of a teacher? (4) How can
we incorporate existing tasks of past programming contests?

1.2   Current learning materials in algorithmic programming
The term algorithmic programming is rather new, it is used when the primary
goal of programming is to solve problems of algorithmic nature. Such problems
are usually well-defined, there is a clear statement describing the expected output
for any given input. The solution requires using problem-solving techniques, data
structures and algorithms, and the program code is a way of expressing the
solution that allows testing it on a computer. The correctness and effectiveness
of the solution are most often verified by running it against a lot of test cases.
    The above description fits most of the programming competitions, and while
there is a strong connection, algorithmic programming is not the same as com-
petitive programming. Competitive programming is characterized by the compe-
tition, the domain of which can vary, for example it can be artificial intelligence,
or application design, and also algorithmic programming. However, algorithmic
programming is also used to improve problem-solving skills, or to teach algo-
rithms and data structures – implementing a learned concept promotes deep
understanding.
    The topics of algorithmic programming have four main categories: (1) problem-
solving techniques, (2) algorithms or algorithm templates, (3) data structures,
and (4) theoretical backgrounds. In the following, the term topic is used as a
general substitute for any element in them. For example, the greedy method, Di-
jkstra’s algorithm, the heap, or the greatest common divisor are all considered
a topic in the context of this article.
    There are a lot of excellent resources available online which promote learning
algorithmic programming on an advanced level, some of the most notable exam-
  Planets: A System for Autonomous Learning of Algorithmic Programming            3

ples are Halim’s book [9], the massive problem base of past Codeforces [10] and
CodeChef [11] contests, the HackerRank platform [12], the GeeksforGeeks [13],
CP-Algorithms [14], and the very new USACO Guide [15] websites. However, the
content of them is either not structured for learning, or the tasks are presented
after the explanation of the algorithm needed to solve them. HackerRank and
the USACO Guide are the most similar to our system, but they also lack the
motif of discovery learning. In our scenario, the topics involved in the solution
should remain unknown to the learner when facing a task.

1.3   Discovery learning in algorithmic programming
The above-mentioned Pósa method for mathematics education is a form of
guided discovery learning. According to Bibergall [16], guided discovery learn-
ing is characterized by convergent thinking, the educator devises a series of
statements or questions that guide the learner step by step, making a series of
discoveries that leads to a predetermined goal. In Pósa’s math camps, the learner
is guided through exercises that have strong interconnection under the surface.
Katona and Szűcs [5] describe this as a web of problem threads.
    Some alterations are necessary for the Pósa method to apply it in computer
programming, due to the differences from mathematics. There are a lot of stan-
dard algorithms and data structures which are almost ready-made methods that
need to be customized, combined, and applied in numerous different scenarios.
Our goal is to teach them through a series of problems, having the students dis-
cover them mostly on their own, if possible. However, direct explanation cannot
be avoided for every topic. For instance, it would be very hard to make students
discover the Fenwick tree data structure [17] or the Edmonds-Karp algorithm
[18] by solving problems. In such cases, there is even more emphasis on the
applications of the method in different problems.




Fig. 1. Process of discovery learning in mathematics (left) and programming (right)


    The cycle models in figure 1 demonstrate the discovery learning process in
Pósa’s mathematics camps and the author’s computer programming talent edu-
4        L. Nikházy

cation. The implementation of the solution, also called coding, is an important
phase in algorithmic programming, which is a completely extra step compared
to the mathematics problem-solving process. It allows automatic evaluation of
the solution, while in mathematics, it is the teacher’s responsibility to check the
solutions, since, in most cases, a proof is necessary for the answer. The com-
puterized evaluation also means that the verification step is much less flexible
than in mathematics, where the teacher can lead a discussion about the stu-
dents’ solutions. To reduce the negative effects, the instructor has an important
role in discussing the theoretical correctness of the solutions, giving feedback
about the students’ program codes, and helping to correct errors, especially
with novice programmers. It is extremely hard to substitute the teacher with
software features at this phase, our system tries easing this problem with simple
and meaningful error messages, static code analysis, careful test case design, and
pre-written useful advice.


2     System design

2.1     Requirements

It is important to define the requirements towards the system. Later on they are
referenced with their abbreviation. The website should

    • teach problem-solving strategies, algorithms and data structures (REQ TPC)
    • with minimal amount of direct explanations of the topics taught (REQ DL);
    • include the teaching of the elements of a programming language that are
      necessary to learn the above topics through solving problems (REQ PL);
    • keep the possibility to adapt it to multiple programming languages (REQ MPL);
    • be available in English and Hungarian, and can be translated to other lan-
      guages (REQ LANG);
    • use the principle of gamification (REQ GAM);
    • be targeted to 12-18 year old children, but might be appealing to adults as
      well (REQ AGE);
    • enable the users to track their progress and make them aware of the topics
      already learned (REQ AW).


2.2     Story: exploring the universe of algorithmic programming

The discovery learning approach (REQ DL) and gamification (REQ GAM) is
supported by the story of the system: the user explores the universe of program-
ming, algorithms and data structures by traveling from planet to planet by a
spaceship. Every visited planet has a civilization and the inhabitants pose chal-
lenges to the traveler. Under the surface, the planets represent different topics.
In general, every element of the system can be translated to fit the space theme,
for example: topic – planet, task – challenge or adventure, curriculum – map,
reward – progress points and space currency or badge.
  Planets: A System for Autonomous Learning of Algorithmic Programming            5

    The rewards have a central role in the learning mechanism. Solving a chal-
lenge can (1) allow the user to enter a planet where further challenges await; (2)
give way to a previously undiscovered planet; (3) award a badge to the user; (4)
grant them space currency; (5) increase their progress points. At each challenge
there are several hints available that help the students, and they do not affect
the rewards they get, except for certain badges. Space currency can be used for
further help, for instance revealing a test case or even the solution of a task. It
can be used also to unlock a planet without completing all the dependencies of
it (intended for advanced level students).
    During the gamified learning process, the user solves tasks that are connected
to each other in a non-linear structure. The solutions of the tasks rely on ex-
perience gained in previous tasks. The tasks are grouped together by topic for
visualizing the roadmap of the studies, but the learner is encouraged to take
on a task without knowing the topic it belongs to. The dependencies are built
into the system on the level of topics – completing a planet can unlock other
ones. However, the tasks within a topic also have a suggested order that is used
automatically, but the learner has options to skip them.

2.3   User interface
Welcome screen After login, the user is taken to the welcome screen. It has
four main items that lead to different pages.

 • Continue where you left off gives the user a challenge that comes next in
   their progress, or opens their last saved code if they left in the middle of
   solving a task. Opens the task view.
 • Teleportation challenge for bonus points gives the user a challenge from a
   planet that they already discovered without telling which planet they are
   at. This way, the domain of the task is unknown to the learner, which is
   the typical situation in the discovery learning method of Pósa (REQ DL).
   Opens the task view.
 • Explore map shows the user the system of visited and unlocked but not
   yet visited planets, so they can see their progress (REQ AW) and select
   challenges on a chosen planet. Opens the map view.
 • Achievements presents badges that the user already earned or can get in the
   future (REQ GAM). These are special rewards that help keeping motivation.
   Opens the achievements view.


Task view The task view is a simple development environment in the browser,
tailored to support the problem-solving scenario. There are some good existing
examples like [12, 20, 21]. At our university, a similar system is developed, called
ProgEnv. It is close to being fully functional and it needs only a little customiza-
tion to fit inside the Planets system. The screen design presented in figure 2 has
all the typical features of similar problem-solving sites: the task description and
sample tests are visible together with the code editor [19]; there are buttons to
6      L. Nikházy




                     Fig. 2. Schematic design of the four screens


save, run and submit the code; an output window shows the messages printed by
the program and the compiler. There are two significant improvements to sup-
port educational purposes. Firstly, many small example test cases are provided
with the task description, which can be plugged in easily to the execution of the
program. Secondly, there is a very important small feature that comes from the
teaching method of Pósa, the Hints button next to the task statement. With
this button, the user can reveal several hints that provide gradually increasing
amount of help in solving the problem. After submitting, a popup is shown in
the middle of the screen containing the results of each test case. If the solution
gets accepted (passes all test cases), the rewards are shown, along with two short
feedback questions and the sample solution. The sample solution is crucial, be-
cause it takes the role of the teacher’s explanation on how to solve the task most
elegantly. The users can compare it with their own solution and conclude what
they could do better. The two feedback questions are: (1) How difficult was the
challenge for you? (2) How did you enjoy the challenge? The answer to both
questions is a scale from 1 to 5 stars.

Map view The map view visualizes the known topics and the connections
between them. This makes the students aware of their knowledge and provides a
systematic overview of the topics learned and exercises solved. It is a frequently
visited reminder of past challenges. In Pósa’s talent education program, the
  Planets: A System for Autonomous Learning of Algorithmic Programming          7

same goal is achieved by a document called the camp summary, which lists all
the solved problems and discussed questions organized according to mathematics
areas and problem-solving methods.
    The planets are presented in a 2D layout which is designed to reflect the
structure of the curriculum. There are arrows between the planets which show
dependencies. Below each planet there is a progress bar indicating the amount
of completes challenges and at a suitable zoom level, the names of challenges
solved on that planet are shown. A planet can be in five basic states:

 • Explored : the user solved sufficient challenges to consider the topic of the
   planet known. Dependent planets are unlocked.
 • Discovered : the user entered the planet and started solving challenges, but
   it is not explored yet.
 • Unlocked : the user can enter the planet, but have not done so. The name of
   the planet is not visible.
 • Locked : the user cannot enter the planet yet, because at least one required
   planet is not explored yet. At least one dependency of it is unlocked (other-
   wise it is invisible).
 • Hidden: the planet is not shown yet to the user, because no dependency of
   it is unlocked. The benefit of this is to avoid overwhelming the learner with
   a big amount of unknown items.


2.4   Content

The main content of the system are the tasks, which are organized into topics.
If some topic needs direct explanation, it can be put inside a task statement.
To design the set of tasks, first the topics need to be identified and arranged to
a system with dependencies (partial ordering). This network of topics serves as
the curriculum, and a lot of work has been done regarding it [7].


Topics We analyzed many existing learning materials and topics at program-
ming contests to create the curriculum for our talent education program in [7].
There are more than 50 topics presented in that article, with interconnections
between them. We also collected some nice tasks for teaching each topic. They
will form the planets in this system with some adjustments and extensions. For
example, teaching elements of a programming language is not in the scope of
[7], but it will be part of the Planets system. Table 1 shows the list of planned
planets to achieve this goal together with some of the first topics in algorithmic
programming to provide further context. As mentioned above, our preference is
to teach only the most important toolset of programming required to implement
the given algorithms. Out of the listed 24 planets only 10 of them (1-7, 14, 16,
22) are meant to teach new language elements.


Tasks There should be 5–10 challenges on each planet. There are two special
challenges: the entry challenge and the completion challenge. The entry challenge
8        L. Nikházy



                        Table 1. The first 24 planets in the system

                                                                              Dependen-
#     Name             Description
                                                                              cies
      Output, Op- Print messages and results of simple calculations with
1
      erators      constants.
      Input, Vari- Read data from user input and perform calculations with
2                                                                             1
      ables        variables. Primitive data types.
3     If-then-else Conditional statement and boolean expressions.             2
4     For Loop     Repetition: for loop with an index variable.               3
                   Work with character strings, perform simple transforma-
5     Strings                                                                 4
                   tions on them.
6     While Loop Repetition with a boolean condition: while loop.             4
7     Arrays       Use 1D arrays to store multiple items of primitive data. 5
8     Sum          Calculate the sum of a series of numbers.                  7
9     Count        Count the elements of a series with a certain property. 8
10    Search       Search for element(s) with a given property in a sequence. 6, 7
      Minimum Se-
11                 Select the minimum/maximum in a sequence.                  9
      lection
      Programming Combinations of the above (Sum, Count, Search, Mini-
12                                                                            9, 10, 11
      Patterns     mum Selection), more difficult problems. Nested loops.
                   Count the occurrences of each element in a sequence us-
13    Histogram                                                               9, 11
                   ing an array of counters.
14    Functions    Write functions for repeatedly used code.                  4, 5
                   Calculate the number of divisors and sum of divisors of an
      Basic Number
15                 integer, search for primes, prime factorization, Euclidean 9, 10, 14
      Theory
                   algorithm for GCD.
                   Use 2D arrays to represent the data in a table/matrix,
16    2D Array     process them with combinations of simple programming 12
                   patterns.
                   Sort a sequence with simple algorithms, like bubble sort,
17    Sort         min. selection sort, counting sort, etc. Problems that re- 12
                   quire sorting.
                   Compute the intersection / union of two sets: ordered list
18    Merge                                                                   17
                   of data, using the linear merge algorithm.
      Greedy Algo- Solve problems using greedy decisions, recognize whether
19                                                                            17
      rithms       it leads to the optimum.
                   The prefix sum / cumulative sum of a sequence, as a data
20    Prefix Sum                                                              16
                   structure.
                   The two pointers principle for speeding up some opti-
21    Two Pointers                                                            13, 17
                   mization tasks.
22    Struct       Group data with the composite data type (struct).          16
                   Get familiar with the power of recursion in typical sce-
23    Recursion                                                               14
                   narios.
24    Merge Sort   Recursive sort algorithms: merge sort and quicksort.       18, 23
...   ...          ...
    Planets: A System for Autonomous Learning of Algorithmic Programming          9

should be designed to promote discovery of the planet’s topic. After solving sev-
eral challenges, the user arrives at the completion challenge, which is a complex
task designed to test whether the user can apply the learned methods, and later
we can rely on this knowledge. Solving the completion challenge unlocks depen-
dent planets. The completion challenge is not necessarily the most difficult on
a planet, there can be some more complicated extra tasks. There is a suggested
order of tasks on a planet coded into the system, which is suitable for beginners,
some tasks are marked optional, and more advanced students can skip them.
Former programming competition tasks inspire the majority of the tasks in the
system. These are aimed to test the algorithmic thinking and problem-solving
skills of the participants. There is a great amount of publicly available tasks
online, and our university has a big collection of former Hungarian competition
problems, which is extended with a lot of exercises used only for education [22].

Adapting competition tasks At competitions, the test cases need to be kept
secret. Revealing the test cases for educational purposes is beneficial in the au-
thor’s experience. Codeforces [10] shows the first few hundred bytes of every test
case in practice mode, in HackerRank [12] there is a possibility to unlock inputs
one by one. Looking at an example, where the program gives wrong answer, can
be very helpful in finding bugs or understanding why the solution is incorrect.
The size of the example is a key factor, it should be easily processable by the
human brain. So, for every task in the Planets system, a lot of small test cases
are generated, which are visible to the user at the time of the submission, and a
handful of them are shown already together with the task statement. The learner
gets a partial reward for a solution that is correct for all of them. A separate
test group are the big tests used to check the efficiency of the solution. They are
kept in secret by default, but can be unlocked by paying some space currency.
    An important element of Pósa’s pedagogy is giving hints to students who have
difficulties to find the path of the solution. He argues that solving a problem with
some help is much better than listening to the solution. It is not easy to give
good hints for every task, but they can be designed by the teacher in advance.
This is exactly what the Planets system contains, there are at least three pre-
written helping texts for each task. They come in a self-service fashion: the
learner can retrieve the increasingly significant hints one by one. If the system
detects that the user is struggling with the solution, the button for the hints will
be highlighted. Finally, the sample solution can be unlocked by paying sufficient
space currency. This is to make progress possible even if the student cannot find
a bug. The sample solution is automatically shown after a correct solution. This
means that the sample code should be understandable and well commented, it
acts like the explanations of the teacher.


3    An example planet
The planet is about the prefix sum data structure, also called as partial sum,
or cumulative sum. The basic idea is to calculate the prefix sums of a sequence,
10      L. Nikházy

Si = A1 +A2 +...+Ai for every i. Using these values, the sum of any range of the
sequence can be obtained with a single subtraction: AL + ... + AR = SR − SL−1 .
    The entry challenge (given as Example 1 below) is the basic task of calculating
range sums quickly, but with special attention drawn to the prefix sums. We list
the hints for this task as an example. Since the solution has one main idea,
all the hints are elaborating that with increasing details. The next challenge
on this planet (Example 2) is inspired by [23]. It is an easy application of the
prefix sum data structure. We include a problem on this planet (Example 3) that
has another solution with greedy strategy. Still, the solution with prefix sums
makes a very good practice and enhances understanding of the data structure.
The fourth challenge (Example 4) involves a nice idea that can be viewed as
an application of prefix sums. Given some intervals, we are interested in how
many intervals cover each point on the number line. If we substitute the start of
each interval with +1 and the end of it with -1 then the prefix sum of all these
numbers gives the answer at any point. The completion challenge of this planet
(Example 5) is a reinterpretation of [24]. This task is building on the solution of
Example 2 and 4.

Example 1. Welcome to our planet! We need your help! It has been N days
since the asteroid-rain started to fall on us (N ≤ 100 000). We recorded the
number of asteroids that we detected each day (Ai , i = 1..N, Ai ≤ 10 000). Our
mage, Sigissimus says that he can disrupt the force to stop the catastrophy,
but he needs to know instantly the answer to two types of questions: (1) How
many asteroids were detected in the first K days altogether? (2) How many
asteroids were detected in total between two given days (including the given
days)? Sigissimus asks a lot of questions (Q ≤ 100 000), please help us in giving
the answers!

 1. Hint: Fill an array with answers to all possible questions of the first type.
    Can you calculate the answers to the second type?
 2. Hint: If we have Si = A1 + A2 + ... + Ai for every i, then the sum of a range
    (AL + ... + AR ) can be obtained with one operation. Can you find out how?
 3. Hint: Let us calculate the so called prefix sums, Si = A1 + A2 + ... + Ai for
    every i. This can be done with one loop that sets every Si = Si−1 + Ai , with
    initially S0 = 0. The answer to the first type of question will be SK . The
    answer to a second type of question, the total asteroids between day L and
    R (inclusive) will be AL + AL+1 + ... + AR = SR − SL−1

Example 2. You are given a 0-1 sequence s1 , s2 , ..., sn (si = 0 or 1, n ≤ 100 000),
and q queries (q ≤ 100 000). Each query is described by a pair of integers l, r
(1 ≤ l < r ≤ n). The answer to the query l, r is the number of such integers i
(l ≤ i < r), that si = si+1 .

Example 3. Given a sequence of (positive or negative) integers A1 , A2 , ..., AN
(−1000 ≤ Ai ≤ 1000, N ≤ 100 000), can you tell which range of it has the
greatest sum? Output the L, R indexes for which the sum AL + AL+1 + ... + AR
is greater or equal to the sum of any other range of consecutive elements.
    Planets: A System for Autonomous Learning of Algorithmic Programming             11

Example 4. On our planet, the dates are simply given with one number, the
number of days from the very start. We have N (N ≤ 100 000) heroes and we
know the birth and death dates of them (1 ≤ Bi < Di ≤ 1 000 000). Can you
tell what was the maximal number of heroes living at the same time?
Example 5. There are N (N ≤ 100 000) cities on the road from Phyria to Sig-
maria. M (M ≤ 100 000) travel books recommend different journeys, each of
them consists of consecutive cities on the road. The journeys are given with
their start and end city (1 ≤ Si < Ei ≤ N ). A city is interesting if at least K
books recommend it. You are given Q (Q ≤ 100 000) queries, in each query you
have to tell how many interesting cities there are between two given cities.

4    Conclusion
This article presented a design of a website that teaches algorithmic program-
ming through solving problems, inspired by the Pósa method for teaching math-
ematics and taking certain elements of it. It demonstrates that in the field of
computer programming, it is possible to give young talents the opportunity of
learning by discovery in a fully automated, interactive, self-learning environ-
ment. The elements of the system are based on the action research of the author
regarding discovery learning in computer science talent education. The web of
problem threads [5] theoretical frame in the Pósa method can be integrated into
the system with careful problem selection and organization. The map-like visu-
alization of solved challenges and learned topics is an improvement to the camp
summaries used by Pósa. Both the curriculum and the progress of the student
is well observable, while it fits into the gamified theme of the system. The story
of exploring the universe of algorithms provides an opportunity for gamifica-
tion and attractive presentation, moreover, it creates a direct correspondence to
learning by discovery. The teacher’s scaffolding role is substituted by multiple
hints for each task, and careful test case generation, which can help to detect
errors. Well-written and commented sample solutions act as the explanations
of the teacher, and visualizing the connections with other topics and tasks pro-
vides the organization of acquired knowledge. Students can be motivated with
standard elements of gamified environments, like achievements, rewards, and
leaderboards.
    Implementation of the web application has started, we are committed to
making it available for everyone and publishing our findings in a follow-up paper.
This paper described the MVP (minimum viable product) version of the system.
There are many features that would be very important to include, we have a lot
of further plans outside the scope of this article.

References
1. Kirschner, P.A., Sweller, J. and Clark, R.E.: Why minimal guidance during instruc-
   tion does not work: An analysis of the failure of constructivist, discovery, problem-
   based, experiential, and inquiry-based teaching. Educational psychologist, 41(2),
   75–86 (2006) https://doi.org/10.1207/s15326985ep4102 1
12      L. Nikházy

2. Schmidt, H.G., Loyens, S.M., Van Gog, T. and Paas, F.: Problem-based
   learning is compatible with human cognitive architecture: Commentary on
   Kirschner, Sweller, and Clark (2006). Educational psychologist, 42(2), 91–97 (2007)
   https://doi.org/10.1080/00461520701263350
3. Győri, J., Juhász, P.: An extra-curricular gifted support programme in Hungary
   for exceptional students in mathematics. In: Taber, K., Sumida, M., McClure, L.
   (eds.) Teaching Gifted Learners in STEM Subjects, pp. 89–106. Routledge, London
   (2017). https://doi.org/10.4324/9781315697147-7
4. Juhász, P., Katona, D.: Pósa method: Talent Nurturing in Weekend Math Camps.
   In: Including the Highly Gifted and Creative Students – Current Ideas and Fu-
   ture Directions : Proceedings of the 11th International Conference on Mathematical
   Creativity and Giftedness. WTM, Münster, pp. 270-276. (2019)
5. Katona, D. and Szűcs, G.: Pósa-method & cubic geometry: A sample of a problem
   thread for discovery learning of mathematics. In: Karlovitz, T.J. (ed.) Differences
   in pedagogical theory and practice, pp. 17–34. (2017) https://doi.org/10.18427/iri-
   2017-0079
6. Halmos, M., Varga, T.: Change in mathematics education since the late 1950’s –
   ideas and realisation: Hungary. Educational Studies in Mathematics 9(2), 225–244
   (1978)
7. Nikházy, L.: A Problem-based Curriculum for Algorithmic Programming. Central-
   European Journal of New Technologies in Research, Education and Practice 2(1),
   76–96 (2020) https://doi.org/10.36427/CEJNTREP.2.1.399
8. Nikházy, L.: Algoritmusok tanı́tása problémaközpontú módszerrel. In: Bihari, Erika;
   Molnár, Dániel; Szikszai-Németh, Ketrin (eds.) Tavaszi Szél - Spring Wind 2019. I.
   kötet, pp. 557–570. DOSZ, Budapest, Hungary (2020)
9. Halim, S., Halim, F., Skiena, S.S., Revilla, M.A.: Competitive Programming 3. Lulu
   Independent Publish (2013)
10. Codeforces, https://codeforces.com/. Last accessed 22 Jul 2020
11. CodeChef, https://www.codechef.com/. Last accessed 22 Jul 2020
12. HackerRank, https://www.hackerrank.com/. Last accessed 22 Jul 2020
13. GeeksforGeeks, https://www.geeksforgeeks.org/. Last accessed 22 Jul 2020
14. CP-Algorithms, https://cp-algorithms.com/. Last accessed 22 Jul 2020
15. USACO Guide, pre-release version, https://usaco-guide.vercel.app/. Last accessed
   22 Jul 2020
16. Bibergall, J. A.: Learning by discovery: Its relation to science teaching. Educational
   Review. Vol. 18(3) 222-–231 (1966) https://doi.org/10.1080/0013191660180307
17. Fenwick, P. M.: A new data structure for cumulative frequency tables. Software:
   Practice and Experience. 24(3), 327—336 (1994)
18. Edmonds, J., Karp, R. M.: Theoretical improvements in algorithmic efficiency for
   network flow problems. Journal of the ACM. 19(2), 248—264 (1972)
19. Monaco Editor, https://microsoft.github.io/monaco-editor/. Last accessed 22 Jul
   2020
20. Repl.it https://repl.it/. Last accessed 22 Jul 2020
21. CodeInterview https://codeinterview.io/. Last accessed 22 Jul 2020
22. MESTER – online programming task archive (in Hungarian)
   http://mester.inf.elte.hu/. Last accessed 22 Jul 2020
23. Codeforces Problem 313B. Ilya and Queries.
   https://codeforces.com/problemset/problem/313/B. Last accessed 22 Jul 2020
24. Codeforces Problem 816B. Karen and Coffee.
   https://codeforces.com/problemset/problem/816/B. Last accessed 22 Jul 2020