<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>Measuring complexity of logical puzzles with metrics expressed in OCL *or* A case study on OCL diversity⋆</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Martin Gogolla</string-name>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Jesús Sánchez Cuadrado</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Universidad de Murcia</institution>
        </aff>
        <aff id="aff1">
          <label>1</label>
          <institution>University of Bremen</institution>
        </aff>
      </contrib-group>
      <pub-date>
        <year>2025</year>
      </pub-date>
      <abstract>
        <p>Logical puzzles can support teaching informatics and rational thinking. We have developed a metamodel-based approach supporting development, configuration, and automatic construction of puzzles with a syntax close to predicate logic and OCL and a semantics close to UML object models. (1) We extend this approach by introducing puzzle metrics expressed with OCL that consider puzzle complexity w.r.t. syntactic and semantic aspects. The aim of developing the metrics is to tune the logical puzzles for novice and expert players and learners. (2) Our UML and OCL model presents a new case study on the power and flexibility of OCL because OCL is here applied for various purposes and on diferent modeling levels.</p>
      </abstract>
      <kwd-group>
        <kwd>eol&gt;Logical puzzle</kwd>
        <kwd>Rational thinking</kwd>
        <kwd>Puzzle complexity</kwd>
        <kwd>Puzzle metrics</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>1. Introduction</title>
    </sec>
    <sec id="sec-2">
      <title>2. Puzzle metamodel</title>
      <p>In Fig. 1 our class model for representing logical puzzles is shown. Logical puzzles use clues and
properties about imagined things that are to be described. Among the possible things, there is often
one puzzle solution that is uniquely determined by the stated clues. A clue can ban things from being
the solution. In our approach, the class model possesses a syntax part, classes Clue and Property,
and a semantic part, the class Thing and the association between Clue and Thing with which a
Clue is connected to a set of banned Thing objects, and a Thing is connected to a set of banning
Clue objects. A central ingredient of the class model is the operation Thing::Valid(c:Clue) that
computes whether a Clue evaluates to true or to false in a Thing. The class model can be understood
best by discussing an object model that instantiates the classes. Figure 2 shows a puzzle with cards
representing clues and a solution in progress indicated with tokens.</p>
      <p>In our approach, clues take the form of an implication with a premise and a conclusion, both
being a comparison between a property and a value Prop[=|&lt;&gt;]Val: PremProp[=|&lt;&gt;]PremVal
=&gt; ConcProp[=|&lt;&gt;]ConcVal. Fig. 3 shows an example puzzle in which, roughly speaking, the two
Property types top and bottom can take the three values red, green and blue as represented by
the six Property objects. Two Clue objects are stated as implications: top&lt;&gt;blue =&gt; top=blue
and body&lt;&gt;blue =&gt; top=green. This puzzle is automatically generated and will appear later in
Fig. 4 in the first group of puzzles (with two clues) as Puz5. The nine Thing objects establish all puzzle
solution candidates. The unique puzzle solution is the yellow marked Thing that is the only one where
the attribute banned takes the value false. In the upper right, the (semantic) relationship between
clues and things is pictured: A clue can ban a set of things, and things can be banned by a set of clues.
The fact that T1 is the puzzle solution is reflected by the circumstance that T1 is not banned by any
clue. Other links are not shown in the object diagram, however links can be deduced from the derived
attributes toStr that are displayed in Clue and Thing objects.</p>
      <p>All details of the model can be found in the Appendix. In particular all OCL expressions used as
invariants, as operation definitions or as derivation rules for derived attributes or derived association
ends can be found there. It is a rather compact, small model represented on basically only two pages. As
central model features, we mention that (a) the operation Thing::valid(c:Clue) specifies whether
a clue holds in a thing, and (b) the existence of a unique puzzle solution is formulated declaratively by
the invariant oneThingWithCluesValidNotBanned.</p>
    </sec>
    <sec id="sec-3">
      <title>3. Metrics for Puzzles</title>
      <p>Our metrics are divided into OCL expressions referring to the syntax part (referring to class Clue) and
to the semantics part of the class model (referring to class Thing). The expressions about syntax count
the number of occurrences of particular patterns in the clues; the expressions about semantics count
clues, in which the things that are banned by the clue, possess particular properties. In more detail, we
have developed the following seven metrics, i.e., OCL expressions. In the following we will partly refer
to the metrics by their occurrence number in this list. E.g. metric 2 will refer to the expression about
the number of ground facts.</p>
      <sec id="sec-3-1">
        <title>1. Number of negations in clues</title>
        <p>Clue.allInstances-&gt;select(c|c.negatedP=true)-&gt;size+</p>
        <p>Clue.allInstances-&gt;select(c|c.negatedC=true)-&gt;size
2. Number of ground facts</p>
        <p>Clue.allInstances-&gt;</p>
        <p>select(c|c.prem=c.conc and c.negatedP=true and c.negatedC=false)-&gt;size
3. Number of clues with diferent areas in premise and conclusion</p>
        <p>Clue.allInstances-&gt;select(c|c.prem.name&lt;&gt;c.conc.name)-&gt;size
4. Number of clues banning nothing</p>
        <p>Clue.allInstances-&gt;select(c|c.bannedT-&gt;isEmpty)-&gt;size
5. Number of clues banning exactly one thing</p>
        <p>Clue.allInstances-&gt;select(c|c.bannedT-&gt;size=1)-&gt;size
6. Number of clues with equivalents</p>
        <p>Clue.allInstances-&gt;select(c1|Clue.allInstances-&gt;exists(c2|</p>
        <p>c1&lt;&gt;c2 and c1.bannedT=c2.bannedT))-&gt;size
7. Number of indispensable clues
let C=Clue.allInstances in C-&gt;select(c1|c1.bannedT-&gt;exists(t|C-&gt;forAll(c2|
c1&lt;&gt;c2 implies c2.bannedT-&gt;excludes(t))))-&gt;size</p>
        <p>The first three metrics concentrate on the syntactic form of the clues and on its components, e.g.
whether a clue contains a particular language feature. These metrics count: (1) the number of negations
in the clues, (2) the number of clues representing de facto ground facts (i.e., whether the clue has the
form not(A) implies A which is equivalent to not(not(A)) or A which again is equivalent to
A or A and thus to A) and (3) the number of clues where premise and conclusion consider diferent
property types. The last four metrics treat the semantics of clues and the connection between the clue
and the set of banned Thing objects: (4) the number of clues without efect in the sense that the clue
does not ban any possible Thing object, (5) the number of clues banning exactly one Thing object,
(6) the number of clues possessing among all clues an equivalent diferent clue (banning the same set of
Thing objects) and (7) the number of clues being indispensable in the sense that the clue bans a Thing
object that is not banned by another clue. Typical metrics for software rely on the syntactic form of
the underlying program text. In our approach we have explicitly modeled semantics through the class
Thing and an appropriate association with class Clue, and thus we can take into account the efect,
the semantics, that a clue has. We regard this as a unique feature of our approach that allows us to
make well-argued statements about the complexity of a clue and with this whether a clue is well-suited
for a novice or more suited for an expert.</p>
        <p>We have validated that the metrics can be meaningfully applied with the running example introduced
earlier. With the USE model validator we have generated 36 puzzles: 9 puzzles with 2 clues, 9 with 3
clues, 9 with 4 clues and 9 with 5 clues; the circumstance that we consider 9 puzzles comes from the
fact that we have generated in each group all possible solutions for top and body color on the basis of
3 diferent colors ( 3 * 3 = 9). The table in Fig. 4 shows in each row a puzzle and in the columns the
result of evaluating the metrics. Additionally, in the last column all metric values are summed up. As
expected, with growing number of clues the puzzle complexity increases.</p>
        <p>However, in each group with an equal number of clues, there are also diferences in the puzzle
complexity between the various considered metrics. Let us discuss some details of the table. For
example, in the 2-group (the puzzles with 2 clues) the metric 6 (Equivalents) must always evaluate to
0: if there are only 2 clues and the puzzle ofers only 2 properties ( top and body), there cannot be
equivalent clues; similar arguments could be stated for metrics 4 (Banning Nothing) and 5 (Banning</p>
        <p>One) since these metrics also evaluate to 0 in the 2-group. A further interesting point is that in the
5-group there is a wide range of use of negations (metric 1) ranging from clue sets with only 1 negation
to clue sets with 9 negations. As the puzzles are automatically generated, there are also random decision
taken by the USE model validator in the construction: E.g., in the 5-group, there are 2 puzzles with 2
equivalent clues, but there could also be 3 or 4 puzzles with that feature.</p>
        <p>The metrics can even help to tune the syntactic representation of the clues, say, for novices or experts.
If the metric on ground facts is non-zero, then there exists a clue in the form not(A) =&gt; A. For an
expert, one could present the clue in this form; for a novice, one has the option to present the clue
simply as A. In the running example, this would be, for example, a syntax representation like top&lt;&gt;red
=&gt; top=red vs. a syntax representation like top=red.</p>
        <p>The seven metrics that we have proposed are intended to demonstrate the options in our approach.
A lot of further metrics on puzzle complexity could be formulated. For example, one could look for clue
tuples in which the set of banned Thing objects of the first clue is strictly included in the set of banned
Thing objects of the second clue. Or, one could look for clues that only ban Thing objects that are not
banned by another clue.</p>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>4. Use of OCL for diferent purposes and levels</title>
      <p>OCL expressions are applied in our approach for diferent purposes and on diferent modeling
levels (Fig. 5).</p>
      <p>1. OCL expressions are part of the class model as class invariants (for syntax, semantics, and
eficiency), operation definitions and derivation rules for derived attributes and association ends.
2. Clues may be thought of as class invariants in an imagined UML model representing the puzzle.</p>
      <p>In the running example, one could think of the puzzle in terms of a class Car with attributes
top:String, body:String and the invariants clue1: top&lt;&gt;’blue’ implies top=’blue’
and clue2: body&lt;&gt;’blue’ implies top=’green’. Finding an object model for this
specification with fitting attribute values then corresponds to finding a solution for the logical
puzzle.
3. When applying the Model Validator, we use classifying terms for generating many diverse object
models each representing a puzzle solution. The classifying terms that we use are:
SolutionTopColor
let TC=Thing.allInstances-&gt;any(t | Clue.allInstances-&gt;</p>
      <p>forAll(c | t.valid(c))).property-&gt;any(p|p.name=’top’).value in
if TC=’red’ then 1 else if TC=’green’ then 2 else 3 endif endif
SolutionBodyColor
let BC=Thing.allInstances-&gt;any(t | Clue.allInstances-&gt;</p>
      <p>forAll(c | t.valid(c))).property-&gt;any(p|p.name=’body’).value in
if BC=’red’ then 1 else if BC=’green’ then 2 else 3 endif endif
These two classifying terms take care that each two generated object models difer in at least
one of the classifying terms. For a fixed number of clues, one obtains nine object models with
diferent (top,body) color values from the range red, green, blue.
4. A further application of OCL lies in the main focus of our proposal, namely the use of OCL for
formulating metrics that measure the puzzle complexity with regard to syntactic and semantic
aspects.</p>
      <p>OCL is applied in the original model in a declarative way. Furthermore, OCL is used in the sequential
construction process together with the Model Validator in a way that guarantees that particular object
models are found. And, in connection with the metrics, OCL is applied to optimize the user involvement
and interaction.</p>
    </sec>
    <sec id="sec-5">
      <title>5. Related work</title>
      <p>
        For a full discussion of related work see [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ]. We here only give a short list of references.
      </p>
      <p>
        Puzzles in education: The use of puzzles is a well-known approach to teaching of problem solving
skills and mathematical thinking [
        <xref ref-type="bibr" rid="ref7 ref8">7, 8</xref>
        ]. For this kind of puzzles both solvers [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ] and builder [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ] tools
have been proposed. Puzzles have been used to teach first-order logic. In [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ] a variant of teaching
ifrst-order logic is used in which the system also generates new instances of the game automatically.
      </p>
      <p>
        Solving puzzles: The topic of solving puzzles has traditionally been addressed by using solvers of
diferent types (e.g., SAT or SMT solvers). For instance, in [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ] several puzzles along with their encoding
in a logic formalism are discussed. LLMs were be used as an interface to interact with the puzzle [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ].
      </p>
      <p>
        Developing puzzles: Some DSLs have been proposed to specify puzzles and their gaming context.
For instance, EGGG [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ] is DSL which allows the user to encode games, and it generates an interface
to play with them. In [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ] a DSL is proposed to encode human strategies for solving logical puzzles
like Sudoku or Nonograms. Ortiz et al. [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ] propose a system to generate Nonograms puzzles based on
color images.
      </p>
      <p>Figure 5: Applications of OCL in our approch.</p>
      <p>
        The industry of logical puzzles: Although logical puzzles have a a tradition dating back many
centuries [
        <xref ref-type="bibr" rid="ref17">17</xref>
        ] and many well known logical puzzles have been created (e.g., the zebra puzzle also known
as Einstein’s riddle), there is still an active industry which produces new puzzles and publishes them
in magazines, books and dedicated websites. The website https://www.brainzilla.com/ ofers a large
number of puzzles of diferent kinds.
      </p>
    </sec>
    <sec id="sec-6">
      <title>6. Conclusion and Future Work</title>
      <p>This contribution has refactored and extended an existing approach for the construction of logical
puzzles. We have added various metrics for puzzles that allow to tune the puzzles, for example, for
software novices or experts. The contribution has also highlighted the various options for application
and use of OCL in the approach.</p>
      <p>Future work to be done includes extending the form of clues that can be specified and polishing the
existing implementation. On the side of the metrics, other options than the ones proposed here should
be studied. In the polished implementation, the metrics should be incorporated automatically so that
appropriate, diferent clues are presented, for example, to novices or experts.</p>
    </sec>
    <sec id="sec-7">
      <title>Acknowledgement References</title>
      <p>Excellent reviewer remarks have improved the paper, although due to page limitations and our idea for
paper structure we could not implement all. But we will respect the remarks in future work.</p>
      <p>A. Class model including operation definitions, derivations and
constraints (OCL elements only)
class Thing
attributes
banned:Boolean
toStr:Sequence(String) derive:
self.property-&gt;iterate(p;
r:Sequence(String)=Sequence{}|
r-&gt;including(p.name+’ ’+p.value))-&gt;sortedBy(e|e)
operations
value(propertyP:String):String=</p>
      <p>self.property-&gt;any(p|p.name=propertyP).value
valid(c:Clue):Boolean =
let pv:String=self.value(c.prem.name) in
let pc:String=c.prem.value in
let cv:String=self.value(c.conc.name) in
let cc:String=c.conc.value in
if c.negatedP=false and c.negatedC=false then (pv=pc implies cv=cc ) else
if c.negatedP=false and c.negatedC=true then (pv=pc implies cv&lt;&gt;cc) else
if c.negatedP=true and c.negatedC=false then (pv&lt;&gt;pc implies cv=cc ) else
if c.negatedP=true and c.negatedC=true then (pv&lt;&gt;pc implies cv&lt;&gt;cc) else
false endif endif endif endif
bannedBy(c:Clue):Boolean = not(self.valid(c))
cluesValid():Set(Thing) =</p>
      <p>Thing.allInstances-&gt;select(t |</p>
      <p>Clue.allInstances-&gt;forAll(c | t.valid(c)))
end
association ClueConc between</p>
      <p>Clue [0..*] role clueC</p>
      <p>Property [1..1] role conc derive = Property.allInstances-&gt;any(p | self.conc=p)
end
association ClueThing between</p>
      <p>Clue [0..*] role banningC
Thing [0..*] role bannedT derive =</p>
      <p>Thing.allInstances-&gt;select(t | t.bannedBy(self))
end
class Clue
attributes
prem:Property
negatedP:Boolean -- negated premise, e.g. *top&lt;&gt;blue* =&gt; bottom=red
conc:Property
negatedC:Boolean -- negated conclusion, e.g. bottom=red =&gt; *top&lt;&gt;blue*
toStr:String derive:
prem.name+if negatedP then ’&lt;&gt;’ else ’=’ endif+prem.value+’ =&gt; ’+
conc.name+if negatedC then ’&lt;&gt;’ else ’=’ endif+conc.value
end
constraints
-- Constraints restricting syntactic elements
context p1,p2:Property inv uniqueNameValue:</p>
      <p>p1&lt;&gt;p2 implies (p1.name&lt;&gt;p2.name or p1.value&lt;&gt;p2.value)
context t1,t2:Thing inv uniqueProperty:</p>
      <p>t1&lt;&gt;t2 implies t1.property&lt;&gt;t2.property
context t:Thing inv uniquePropertyName:</p>
      <p>t.property-&gt;forAll(p1,p2 | p1&lt;&gt;p2 implies p1.name&lt;&gt;p2.name)
context c1,c2:Clue inv uniqueClue: c1&lt;&gt;c2 implies
( c1.prem&lt;&gt;c2.prem or c1.conc&lt;&gt;c2.conc or</p>
      <p>c1.negatedP&lt;&gt;c2.negatedP or c1.negatedC&lt;&gt;c2.negatedC )
-- Constraints restricting semantic elements
context Thing inv thingsWithCluesValid_EQ_thingsNotBanned:</p>
      <p>cluesValid()=Thing.allInstances-&gt;select(t | t.banned=false)
context Thing inv oneThingWithCluesValidNotBanned:</p>
      <p>cluesValid()-&gt;select(t | t.banned=false)-&gt;size=1
-- Constraints for Model Validator efficiency
context t1,t2:Thing inv sameNumProperty:</p>
      <p>t1.property-&gt;size=t2.property-&gt;size
context p1,p2:Property inv sameNumThing:</p>
      <p>p1.thing-&gt;size=p2.thing-&gt;size</p>
    </sec>
    <sec id="sec-8">
      <title>Declaration on Generative AI</title>
      <sec id="sec-8-1">
        <title>The author(s) have not employed any Generative AI tools.</title>
      </sec>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>M.</given-names>
            <surname>Gogolla</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J. Sanchez</given-names>
            <surname>Quadrado</surname>
          </string-name>
          ,
          <article-title>Developing configurations and solutions for logical puzzles with UML and OCL, Software</article-title>
          and
          <string-name>
            <given-names>Systems</given-names>
            <surname>Modeling</surname>
          </string-name>
          (
          <year>2025</year>
          ). To appear. https://tinyurl.com/4djaks9e.
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>J.</given-names>
            <surname>Rumbaugh</surname>
          </string-name>
          , I. Jacobson, G. Booch,
          <source>The Unified Modeling Language Reference Manual, AddisonWesley, 2nd Edition</source>
          ,
          <year>2004</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>J.</given-names>
            <surname>Warmer</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Kleppe</surname>
          </string-name>
          ,
          <article-title>The Object Constraint Language: Getting Your Models Ready for MDA</article-title>
          ,
          <source>Addison-Wesley, 2nd Edition</source>
          ,
          <year>2004</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <given-names>J.</given-names>
            <surname>Cabot</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Gogolla</surname>
          </string-name>
          ,
          <article-title>Object Constraint Language (OCL): A definitive guide</article-title>
          , in: M.
          <string-name>
            <surname>Bernardo</surname>
            ,
            <given-names>V.</given-names>
          </string-name>
          <string-name>
            <surname>Cortellessa</surname>
            ,
            <given-names>A</given-names>
          </string-name>
          . Pierantonio (Eds.),
          <source>Proc. 12th Int</source>
          .
          <article-title>School Formal Methods for the Design of Computer, Communication</article-title>
          and
          <string-name>
            <given-names>Software</given-names>
            <surname>Systems</surname>
          </string-name>
          :
          <string-name>
            <surname>Model-Driven</surname>
            <given-names>Engineering</given-names>
          </string-name>
          , Springer, Berlin, LNCS 7320,
          <year>2012</year>
          , pp.
          <fpage>58</fpage>
          -
          <lpage>90</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>M.</given-names>
            <surname>Gogolla</surname>
          </string-name>
          ,
          <string-name>
            <given-names>F.</given-names>
            <surname>Büttner</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Richters</surname>
          </string-name>
          ,
          <article-title>USE: A UML-Based Specification Environment for Validating UML and OCL</article-title>
          ,
          <source>Journal on Science of Computer Programming</source>
          ,
          <source>Elsevier NL 69</source>
          (
          <year>2007</year>
          )
          <fpage>27</fpage>
          -
          <lpage>34</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>M.</given-names>
            <surname>Gogolla</surname>
          </string-name>
          ,
          <string-name>
            <given-names>F.</given-names>
            <surname>Hilken</surname>
          </string-name>
          ,
          <string-name>
            <given-names>K.</given-names>
            <surname>Doan</surname>
          </string-name>
          ,
          <article-title>Achieving model quality through model validation, verification and exploration</article-title>
          ,
          <source>Comput. Lang. Syst. Struct</source>
          .
          <volume>54</volume>
          (
          <year>2018</year>
          )
          <fpage>474</fpage>
          -
          <lpage>511</lpage>
          . URL: https://doi.org/10.1016/j.cl.
          <year>2017</year>
          .
          <volume>10</volume>
          .001. doi:
          <volume>10</volume>
          .1016/J.CL.
          <year>2017</year>
          .
          <volume>10</volume>
          .001.
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <given-names>E. F.</given-names>
            <surname>Meyer</surname>
          </string-name>
          , N. Falkner,
          <string-name>
            <given-names>R.</given-names>
            <surname>Sooriamurthi</surname>
          </string-name>
          ,
          <string-name>
            <given-names>Z.</given-names>
            <surname>Michalewicz</surname>
          </string-name>
          ,
          <article-title>Guide to teaching puzzle-based learning</article-title>
          , Springer,
          <year>2014</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <given-names>N.</given-names>
            <surname>Falkner</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Sooriamurthi</surname>
          </string-name>
          ,
          <string-name>
            <given-names>Z.</given-names>
            <surname>Michalewicz</surname>
          </string-name>
          ,
          <article-title>Teaching puzzle-based learning: development of basic concepts</article-title>
          ,
          <source>Teaching Mathematics and Computer Science</source>
          <volume>10</volume>
          (
          <year>2012</year>
          )
          <fpage>183</fpage>
          -
          <lpage>204</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <given-names>A. N.</given-names>
            <surname>Kumar</surname>
          </string-name>
          ,
          <article-title>Epplets: A tool for solving parsons puzzles</article-title>
          , in: T.
          <string-name>
            <surname>Barnes</surname>
            ,
            <given-names>D. D.</given-names>
          </string-name>
          <string-name>
            <surname>Garcia</surname>
            ,
            <given-names>E. K.</given-names>
          </string-name>
          <string-name>
            <surname>Hawthorne</surname>
            ,
            <given-names>M. A.</given-names>
          </string-name>
          <string-name>
            <surname>Pérez-Quiñones</surname>
          </string-name>
          (Eds.),
          <source>49th ACM Tech. Symp. CS Education, SIGCSE</source>
          <year>2018</year>
          , ACM,
          <year>2018</year>
          , pp.
          <fpage>527</fpage>
          -
          <lpage>532</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <given-names>E.</given-names>
            <surname>Deitrick</surname>
          </string-name>
          ,
          <article-title>Graphical parsons puzzle creator: Sharing the full power of 2d parsons problems through a graphical, open-source online tool</article-title>
          , in: M.
          <string-name>
            <surname>Sherrif</surname>
            ,
            <given-names>L. D.</given-names>
          </string-name>
          <string-name>
            <surname>Merkle</surname>
            ,
            <given-names>P. A.</given-names>
          </string-name>
          <string-name>
            <surname>Cutter</surname>
            ,
            <given-names>A. E.</given-names>
          </string-name>
          <string-name>
            <surname>Monge</surname>
          </string-name>
          , J. Sheard (Eds.),
          <source>SIGCSE'21: 52nd ACM Tech. Symp. CS Edu</source>
          .,
          <year>2021</year>
          , ACM,
          <year>2021</year>
          , p.
          <fpage>1379</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <string-name>
            <given-names>A.</given-names>
            <surname>Groza</surname>
          </string-name>
          ,
          <string-name>
            <surname>M. M. Baltatescu</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          <string-name>
            <surname>Pomarlan</surname>
          </string-name>
          ,
          <article-title>Minefol: A game for learning first order logic</article-title>
          ,
          <source>in: IEEE 16th Int. Conf. Intel. Comp. Communication and Processing (ICCP)</source>
          , IEEE,
          <year>2020</year>
          , pp.
          <fpage>153</fpage>
          -
          <lpage>160</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [12]
          <string-name>
            <given-names>A.</given-names>
            <surname>Groza</surname>
          </string-name>
          , Modelling Puzzles in First Order Logic, Springer Nature, Cham, Switzerland,
          <year>2021</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [13]
          <string-name>
            <given-names>A.</given-names>
            <surname>Groza</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Nitu</surname>
          </string-name>
          ,
          <article-title>Natural language understanding for logical games</article-title>
          ,
          <source>arXiv preprint arXiv:2110.00558</source>
          (
          <year>2021</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [14]
          <string-name>
            <given-names>J.</given-names>
            <surname>Orwant</surname>
          </string-name>
          ,
          <article-title>Eggg: Automated programming for game generation</article-title>
          ,
          <source>IBM Systems Journal</source>
          <volume>39</volume>
          (
          <year>2000</year>
          )
          <fpage>782</fpage>
          -
          <lpage>794</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          [15]
          <string-name>
            <given-names>E.</given-names>
            <surname>Butler</surname>
          </string-name>
          ,
          <string-name>
            <given-names>E.</given-names>
            <surname>Torlak</surname>
          </string-name>
          ,
          <string-name>
            <given-names>Z.</given-names>
            <surname>Popović</surname>
          </string-name>
          ,
          <article-title>Synthesizing interpretable strategies for solving puzzle games</article-title>
          ,
          <source>in: Proc. 12th Int. Conf. Foundations Digital Games</source>
          ,
          <year>2017</year>
          , pp.
          <fpage>1</fpage>
          -
          <lpage>10</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          [16]
          <string-name>
            <given-names>E. G.</given-names>
            <surname>Ortíz-García</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Salcedo-Sanz</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J. M.</given-names>
            <surname>Leiva-Murillo</surname>
          </string-name>
          , Á. M.
          <string-name>
            <surname>Pérez-Bellido</surname>
            ,
            <given-names>J. A.</given-names>
          </string-name>
          <string-name>
            <surname>Portilla-Figueras</surname>
          </string-name>
          ,
          <article-title>Automated generation and visualization of picture-logic puzzles</article-title>
          ,
          <source>Computers &amp; Graphics</source>
          <volume>31</volume>
          (
          <year>2007</year>
          )
          <fpage>750</fpage>
          -
          <lpage>760</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          [17]
          <string-name>
            <given-names>J.</given-names>
            <surname>Rosenhouse</surname>
          </string-name>
          ,
          <article-title>Games for Your Mind: The History and Future of Logic Puzzles</article-title>
          , Princeton University Press,
          <year>2022</year>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>