Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWalther Neuper <wneuper@localhost.(none)>2010-05-14 16:38:06 (GMT)
committer Walther Neuper <wneuper@localhost.(none)>2010-05-14 16:38:06 (GMT)
commit5056b8766a92e54d5c812ea325d56315d238d065 (patch)
tree07579738f099655a879c70ee8a82aa0d959f2e95
parent196c93ade2a625b0008f4db476d38c409fff02f3 (diff)
exstore: PraxisVS partially
-rw-r--r--ReckonPrimer.activity/data/Collection.data710
-rw-r--r--ReckonPrimer.activity/exstore.py202
2 files changed, 657 insertions, 255 deletions
diff --git a/ReckonPrimer.activity/data/Collection.data b/ReckonPrimer.activity/data/Collection.data
index 29b71b7..4d296f9 100644
--- a/ReckonPrimer.activity/data/Collection.data
+++ b/ReckonPrimer.activity/data/Collection.data
@@ -11,223 +11,653 @@ p4
(dp5
g2
(lp6
-sS'_pic'
+(icollection
+Collection
p7
+(dp8
+g2
+(lp9
+(icollection
+Collection
+p10
+(dp11
+g2
+(lp12
+(itask
+Task
+p13
+(dp14
+S'_eval'
+p15
+(lp16
+sS'_sett'
+p17
+(dp18
+S'cut-max'
+p19
+I01
+sS':'
+p20
+I00
+sS'icon'
+p21
+NsS'title'
+p22
+S'2-er Reihe'
+p23
+sS'shuffle_all'
+p24
+I01
+sS'MAX'
+p25
+I50
+sS'*commute'
+p26
+I00
+sS'*'
+p27
+I01
+sS'descript'
+p28
+S'settings: series (2,4,8 is possible!) of *, "in" and : with remainder, series 11..19 (left bar),series 10..90 (right long bar), separate shuffling or operands.'
+p29
+sS'factors'
+p30
+(lp31
+I2
+asS'topic'
+p32
+S'times_div'
+p33
+sS'MIN'
+p34
+I10
+sS'in'
+p35
+I01
+sS'vadd'
+p36
+I0
+sS'shuffle_inner'
+p37
+I01
+sS'remainder'
+p38
+I00
+sS'vmult'
+p39
+I1
+sS'calclines'
+p40
+I1
+ssba(itask
+Task
+p41
+(dp42
+g15
+(lp43
+sg17
+(dp44
+g19
+I01
+sg20
+I00
+sg21
+Nsg22
+S'3-er Reihe'
+p45
+sg24
+I01
+sg25
+I50
+sg26
+I00
+sg27
+I01
+sg28
+g29
+sg30
+(lp46
+I3
+asg32
+g33
+sg34
+I10
+sg35
+I01
+sg36
+I0
+sg37
+I01
+sg38
+I00
+sg39
+I1
+sg40
+I1
+ssba(itask
+Task
+p47
+(dp48
+g15
+(lp49
+sg17
+(dp50
+g19
+I01
+sg20
+I00
+sg21
+Nsg22
+S'4-er Reihe'
+p51
+sg24
+I01
+sg25
+I50
+sg26
+I00
+sg27
+I01
+sg28
+g29
+sg30
+(lp52
+I4
+asg32
+g33
+sg34
+I10
+sg35
+I01
+sg36
+I0
+sg37
+I01
+sg38
+I00
+sg39
+I1
+sg40
+I1
+ssba(itask
+Task
+p53
+(dp54
+g15
+(lp55
+sg17
+(dp56
+g19
+I01
+sg20
+I00
+sg21
+Nsg22
+S'5-er Reihe'
+p57
+sg24
+I01
+sg25
+I50
+sg26
+I00
+sg27
+I01
+sg28
+g29
+sg30
+(lp58
+I5
+asg32
+g33
+sg34
+I10
+sg35
+I01
+sg36
+I0
+sg37
+I01
+sg38
+I00
+sg39
+I1
+sg40
+I1
+ssba(itask
+Task
+p59
+(dp60
+g15
+(lp61
+sg17
+(dp62
+g19
+I01
+sg20
+I00
+sg21
+Nsg22
+S'6-er Reihe'
+p63
+sg24
+I01
+sg25
+I50
+sg26
+I00
+sg27
+I01
+sg28
+g29
+sg30
+(lp64
+I6
+asg32
+g33
+sg34
+I10
+sg35
+I01
+sg36
+I0
+sg37
+I01
+sg38
+I00
+sg39
+I1
+sg40
+I1
+ssba(itask
+Task
+p65
+(dp66
+g15
+(lp67
+sg17
+(dp68
+g19
+I01
+sg20
+I00
+sg21
+Nsg22
+S'7-er Reihe'
+p69
+sg24
+I01
+sg25
+I50
+sg26
+I00
+sg27
+I01
+sg28
+g29
+sg30
+(lp70
+I7
+asg32
+g33
+sg34
+I10
+sg35
+I01
+sg36
+I0
+sg37
+I01
+sg38
+I00
+sg39
+I1
+sg40
+I1
+ssba(itask
+Task
+p71
+(dp72
+g15
+(lp73
+sg17
+(dp74
+g19
+I01
+sg20
+I00
+sg21
+Nsg22
+S'8-er Reihe'
+p75
+sg24
+I01
+sg25
+I50
+sg26
+I00
+sg27
+I01
+sg28
+g29
+sg30
+(lp76
+I8
+asg32
+g33
+sg34
+I10
+sg35
+I01
+sg36
+I0
+sg37
+I01
+sg38
+I00
+sg39
+I1
+sg40
+I1
+ssba(itask
+Task
+p77
+(dp78
+g15
+(lp79
+sg17
+(dp80
+g19
+I01
+sg20
+I00
+sg21
+Nsg22
+S'9-er Reihe'
+p81
+sg24
+I01
+sg25
+I50
+sg26
+I00
+sg27
+I01
+sg28
+g29
+sg30
+(lp82
+I9
+asg32
+g33
+sg34
+I10
+sg35
+I01
+sg36
+I0
+sg37
+I01
+sg38
+I00
+sg39
+I1
+sg40
+I1
+ssbasS'_pic'
+p83
NsS'_title'
-p8
-S'Praxis Volksschule'
-p9
+p84
+S"Einzelne Reihen . und 'in'"
+p85
sS'_description'
-p10
-S'Rechenuebungen fuer die 1. und 2.Klasse, festgelegt 16.Dez.09'
-p11
+p86
+S' '
+p87
+sba(icollection
+Collection
+p88
+(dp89
+g2
+(lp90
+sg83
+Nsg84
+S'Mehrere Reihen .'
+p91
+sg86
+S'Wir ueben zusammengehoerende Reihen.'
+p92
+sba(icollection
+Collection
+p93
+(dp94
+g2
+(lp95
+sg83
+Nsg84
+S'Alle Reihen gemischt'
+p96
+sg86
+g87
+sbasg83
+Nsg84
+S"Uebungen . und 'in' "
+p97
+sg86
+g87
+sba(icollection
+Collection
+p98
+(dp99
+g2
+(lp100
+sg83
+Nsg84
+S'Uebungen :'
+p101
+sg86
+g87
+sba(icollection
+Collection
+p102
+(dp103
+g2
+(lp104
+sg83
+Nsg84
+S'Uebungen + und - '
+p105
+sg86
+g87
+sbasg83
+Nsg84
+S'Praxis Volksschule'
+p106
+sg86
+S'Rechenuebungen fuer die 1. und 2.Klasse, festgelegt am 16.Dez.09 mit Nina Jaklitsch und Arndt Stoeckl .'
+p107
sba(icollection
Collection
-p12
-(dp13
+p108
+(dp109
g2
-(lp14
-sg7
-Nsg8
+(lp110
+sg83
+Nsg84
S'Schoenberger'
-p15
-sg10
+p111
+sg86
S'Most efficient introduction to the four basic arithmetic operations as taught by Igo Schoenberger in the last century in Upper Austria.'
-p16
+p112
sba(icollection
Collection
-p17
-(dp18
+p113
+(dp114
g2
-(lp19
+(lp115
(itask
Task
-p20
-(dp21
-S'_eval'
-p22
-(lp23
-sS'_sett'
-p24
-(dp25
+p116
+(dp117
+g15
+(lp118
+sg17
+(dp119
S'min'
-p26
+p120
I0
sS'=input'
-p27
-(lp28
+p121
+(lp122
I1
aI3
aI5
-asS'cut-max'
-p29
+asg19
I01
sS'_+_=_'
-p30
+p123
I01
-sS'title'
-p31
-S'template: + - within 10'
-p32
-sS'MAX'
-p33
+sg22
+S'Template: + - within 10'
+p124
+sg25
I100
sS'+'
-p34
+p125
I01
-sS'MIN'
-p35
+sg34
I20
-sS'descript'
-p36
+sg28
S'settings: range of result, input at 3 positions, swap around ='
-p37
+p126
sS'input='
-p38
-(lp39
+p127
+(lp128
I1
aI3
aI5
-asS'topic'
-p40
+asg32
S'addsub_simp'
-p41
-sS'calclines'
-p42
+p129
+sg40
I1
sS'-'
-p43
+p130
I01
sS'max'
-p44
+p131
I1
sS'_=_+_'
-p45
+p132
I00
sS'shuffle'
-p46
-I01
-sS'icon'
-p47
+p133
+I00
+sg21
Nssba(itask
Task
-p48
-(dp49
-g22
-(lp50
-sg24
-(dp51
-g26
+p134
+(dp135
+g15
+(lp136
+sg17
+(dp137
+g120
I2
-sg29
+sg19
I01
sS'newline'
-p52
+p138
I01
-sg31
-S'template: passing the 10 barrier with + -'
-p53
-sS'shuffle_all'
-p54
+sg22
+S'Template: + - passing the 10 barrier'
+p139
+sg24
I00
-sg33
+sg25
I150
-sg34
+sg125
I01
-sg35
+sg34
I10
-sg36
+sg28
S'settings: range of 1st operand, input left and right from =, input intermediate result, separate shuffling of operands.'
-p55
-sg40
+p140
+sg32
S'passten'
-p56
-sg42
+p141
+sg40
I1
-sg43
+sg130
I00
-sg44
+sg131
I2
sS'input'
-p57
-(lp58
+p142
+(lp143
I3
-asS'shuffle_inner'
-p59
+asg37
I00
-sg47
+sg21
Nssba(itask
Task
-p60
-(dp61
-g22
-(lp62
-sg24
-(dp63
-g26
-I2
-sg44
+p144
+(dp145
+g15
+(lp146
+sg17
+(dp147
+g30
+(lp148
I2
-sS'*'
-p64
+aI4
+asg37
I00
-sg31
-S'template: * ; in'
-p65
-sg54
+sg27
+I00
+sg22
+S'Template: * : "in" series'
+p149
+sg24
I00
-sg33
+sg25
I50
-sS'*commute'
-p66
+sg26
I00
-sg35
+sg34
I10
+sg28
+g29
sg36
-S'settings: series (2,4,8 is possible!) of *, "in" and : with remainder, series 11..19 (left bar), series 10..90 (right long bar), separate shuffling or operands.'
-p67
-sS'vadd'
-p68
I0
+sg32
+g33
sg40
-S'times_div'
-p69
-sS'factors'
-p70
-(lp71
-I2
-aI4
-asg59
-I00
-sg42
I1
-sS'in'
-p72
+sg35
I00
-sg29
+sg19
I01
-sS':'
-p73
+sg20
I01
-sS'remainder'
-p74
+sg38
I00
-sS'vmult'
-p75
+sg39
I1
-sg47
-Nssbasg7
-Nsg8
+sg21
+Nssbasg83
+Nsg84
S'Templates'
-p76
-sg10
+p150
+sg86
S'These are the (classes of) exercises all others are derived from. Thus, please, do not deletem them. For testing exercises disabling of @ is recommended.'
-p77
-sbasg7
-Nsg8
+p151
+sbasg83
+Nsg84
S'root = invisible node'
-p78
-sg10
+p152
+sg86
S'required by tree structure'
-p79
+p153
sb. \ No newline at end of file
diff --git a/ReckonPrimer.activity/exstore.py b/ReckonPrimer.activity/exstore.py
index 53d64ce..ad59c69 100644
--- a/ReckonPrimer.activity/exstore.py
+++ b/ReckonPrimer.activity/exstore.py
@@ -31,114 +31,65 @@ class ExStore:
self._display = display
self._coach = coach
self._active_exerc = None
- #self._sett = Settings()
- #Provisorium für die "3-Button-Version" vvvvvvvvvvvvvvvvvvvvvvvvv
- #self._data = [(self._sett.get_setting('addsub_simp'), []),
- # (self._sett.get_setting('passten'), []),
- # (self._sett.get_setting('times_div'), [])]
- #Provisorium für die "3-Button-Version" ^^^^^^^^^^^^^^^^^^^^^^^^^
#Provisorium für impl. "treeView-Kollektion" vvvvvvvvvvvvvvvvvvvv
-# _ex010 = Task({'topic' : 'addsub_simp',
-# 'title' : 'template exaddsimp',
-# 'descript': 'addition and subtraction without carry, \
-# i.e. without passing the 10 barrier. ',
-# 'icon' : None, # for quick reference of the exercise
-# 'calclines': 1, # no. of lines for calc to be input.
-# 'MAX' : 30, # maximum of calcs generated.
-# # Generate fills up by varying input.
-# 'MIN' : 20, # minimum of calcs generated UNUSED
-# 'min' : 0, # minimum in size of a number in a calc
-# 'max' : 1, # maximum in size of a number in a calc
-# # 0 <= min <= max <= 10
-# '+' : True, # make all additions min..max
-# '-' : True, # make all subtactions min..max
-# '_+_=_' : True, # = is _right_ from operator, e.g. 1+2=3
-# 'input=' : [1,3,5],# list of positions in calc: 1 | 3 | 5
-# # where input is possible;
-# # actual positions chosen by Generate.
-# '_=_+_' : False, # = is _left_ from operator, e.g. 3=1+2
-# '=input' : [1,3,5],# analogous to '_+_=_'
-# 'shuffle': True, # shuffle _all_ the calcs
-# 'cut-max': True # cut set of all calcs down to MAX
-# }, [])
-# _ex011 = Task({'topic' : 'passten',
-# 'title' : 'template expassten',
-# 'descript': 'addition and subtraction with carry, \
-# i.e. with passing the 10 barrier. ',
-# 'icon' : None, # for quick reference of the exercise
-# 'calclines' : 1, # or 2 iff 'newline' : True.
-# 'MAX' : 150, # maximum of calcs generated;
-# # TODO: Generate fills up by varying input.
-# 'MIN' : 10, # minimum of calcs generated 090416WN:UNUSED
-# '+' :True, # + crossing the ten barrier!!
-# '-' :False, # - goes below the ten barrier!!!
-# # (i.e. iteration on left arg. is "outer" loop)
-# 'min' : 2, # +: minimum in size of number in left argument
-# #'min' : 5, # +: minimum in size of number in left argument
-# # -: minimum in size of result
-# 'max' : 2, # +: maximum in size of number in left argument
-# # -: maximum in size of result
-# #'max' : 9, # +: maximum in size of number in left argument
-# 'input' :[3], # list of positions in calc 3 | 5
-# # where input is possible;
-# # actual positions chosen by Generate.
-# 'newline' : True, # display 2nd line for intermediate results
-# 'shuffle_all' : False, # shuffle all calcs
-# 'shuffle_inner': False, # shuffle only 1st (inner) iteration
-# 'cut-max' : True # cut set of all calcs down to MAX
-# }, [])
-# _ex012 = Task({'topic' : 'times_div', #for programmers only
-# 'title' : 'template extimesdiv',
-# 'descript': 'multiplication, division and "in" \
-# from 2 to 19 and 20 to 190. ',
-# 'icon' : None, # for quick reference of the exercise
-# 'calclines' : 1, # no. of lines for calc to be input.
-# 'MAX' : 50, # maximum of calcs generated;
-# # TODO: Generate fills up by varying input.
-# 'MIN' : 10, # minimum of calcs generated 090416WN:UNUSED
-# '*' : False, # eg. 7 . 2 =_
-# '*commute' : False, # commute the operands 2 . 7 = _
-# ':' : True, # 14 : 2 = _
-# 'in' : False, # 2 in 14 = _
-# 'remainder' : False, # : | in ... with remainder
-# 'vadd' : 0, # 0 or 10, for 1.11 ... 1.19
-# 'vmult' : 1, # 1 or 10, for 1.10 ... 1.90
-# 'min' : 2, # +: minimum number in right *operand
-# # -: minimum result
-# 'max' : 2, # +: maximum number in right *operand
-# # -: maximum result
-# 'factors' : [2,4], # Liste mit ausgewählten zahlen zur berechnung
-# 'shuffle_all' : False, # shuffle all calcs
-# 'shuffle_inner': False, # shuffle only 1st (inner) iteration
-# 'cut-max' : True # cut set of all calcs down to MAX
-# }, [])
-#
-# _coll00 = Collection("Add Sub: + & -",
-# "hier sind alle 1x1-Reihen mit 'in'",
-# None, [])
-#
-# _coll01 = Collection("Times Division: x & in",
-# "hier sind alle 1x1-Reihen mit 'in'",
-# None, [_ex010, _ex011, _ex012])
-#
-# _coll02 = Collection("Pass Ten: ->10",
-# "hier sind alle 1x1-Reihen mit 'in'",
-# None, [])
-#
-# _coll0 = Collection("Templates",
-# "Hier finden Sie alle verfügbaren Templates",
-# None, [_coll00, _coll01, _coll02])
-#
-# #constructor of collections root
-# self._root = \
-#Collection("root = invisible node",
-# "aber benötigt zum richtigen speichern/lesen",
-# None, [
-# _coll0, _coll0])
+####### _c1 ##################################################################
+####### _c1c1c1t #############################################################
+ _sett = {'topic' : 'times_div',
+ 'title' : '99-er Reihe',
+ 'descript' : 'settings: series (2,4,8 is possible!) of *, "in" and : with remainder, series 11..19 (left bar),series 10..90 (right long bar), separate shuffling or operands.',
+ 'icon' : None,
+ 'calclines' : 1,
+ 'MAX' : 50,
+
+ 'MIN' : 10,
+ '*' : True,
+ '*commute' : False,
+ ':' : False,
+ 'in' : False,
+ 'remainder' : False,
+ 'vadd' : 0,
+ 'vmult' : 1,
+ 'factors' : [99],
+ 'shuffle_all' : True,
+ 'shuffle_inner': True,
+ 'cut-max' : True
+ }
+ _sett['factors'] = [2]; _sett['title'] = '2-er Reihe'
+ _c1c1c1t2 = Task(copy.deepcopy(_sett), [])
+ _sett['factors'] = [3]; _sett['title'] = '3-er Reihe'
+ _c1c1c1t3 = Task(copy.deepcopy(_sett), [])
+ _sett['factors'] = [4]; _sett['title'] = '4-er Reihe'
+ _c1c1c1t4 = Task(copy.deepcopy(_sett), [])
+ _sett['factors'] = [5]; _sett['title'] = '5-er Reihe'
+ _c1c1c1t5 = Task(copy.deepcopy(_sett), [])
+ _sett['factors'] = [6]; _sett['title'] = '6-er Reihe'
+ _c1c1c1t6 = Task(copy.deepcopy(_sett), [])
+ _sett['factors'] = [7]; _sett['title'] = '7-er Reihe'
+ _c1c1c1t7 = Task(copy.deepcopy(_sett), [])
+ _sett['factors'] = [8]; _sett['title'] = '8-er Reihe'
+ _c1c1c1t8 = Task(copy.deepcopy(_sett), [])
+ _sett['factors'] = [9]; _sett['title'] = '9-er Reihe'
+ _c1c1c1t9 = Task(copy.deepcopy(_sett), [])
+####### _c1c1c2t #############################################################
+ _sett['factors'] = [2,4]; _sett['title'] = '2,4-er Reihe'
+ _c1c1c2t1 = Task(copy.deepcopy(_sett), [])
+ _sett['factors'] = [2,4,8]; _sett['title'] = '2,4,8-er Reihe'
+ _c1c1c2t2 = Task(copy.deepcopy(_sett), [])
+ #_sett['factors'] = [5,10]; _sett['title'] = '-er Reihe'
+ #_c1c1c2t2 = Task(copy.deepcopy(_sett), [])
+ _sett['factors'] = [3,6]; _sett['title'] = '3,6-er Reihe'
+ _c1c1c2t3 = Task(copy.deepcopy(_sett), [])
+ _sett['factors'] = [3,6,9]; _sett['title'] = '3,6,9-er Reihe'
+ _c1c1c2t4 = Task(copy.deepcopy(_sett), [])
+####### _c1c1c3t #############################################################
+
+
+####### _c2 ##################################################################
+####### _c3 ##################################################################
_c3t1 = Task({'topic' : 'addsub_simp',
- 'title' : 'template: + - within 10',
+ 'title' : 'Template: + - within 10',
'descript' : 'settings: range of result, input at 3 positions, swap around =',
'icon' : None, # for quick reference of the exercise
'calclines': 1, # no. of lines for calc to be input.
@@ -156,11 +107,11 @@ class ExStore:
# actual positions chosen by Generate.
'_=_+_' : False, # = is _left_ from operator, e.g. 3=1+2
'=input' : [1,3,5],# analogous to '_+_=_'
- 'shuffle' : True, # shuffle _all_ the calcs
+ 'shuffle' : False, # shuffle _all_ the calcs
'cut-max' : True # cut set of all calcs down to MAX
}, [])
_c3t2 = Task({'topic' : 'passten',
- 'title' : 'template: passing the 10 barrier with + -',
+ 'title' : 'Template: + - passing the 10 barrier',
'descript' : 'settings: range of 1st operand, input left and right from =, input intermediate result, separate shuffling of operands.',
'icon' : None, # for quick reference of the exercise
'calclines' : 1, # or 2 iff 'newline' : True.
@@ -180,7 +131,7 @@ class ExStore:
'cut-max' : True # cut set of all calcs down to MAX
}, [])
_c3t3 = Task({'topic' : 'times_div', #for programmers only
- 'title' : 'template: * ; in',
+ 'title' : 'Template: * : "in" series',
'descript' : 'settings: series (2,4,8 is possible!) of *, "in" and : with remainder, series 11..19 (left bar),series 10..90 (right long bar), separate shuffling or operands.',
'icon' : None, # for quick reference of the exercise
'calclines' : 1, # no. of lines for calc to be input.
@@ -194,10 +145,6 @@ class ExStore:
'remainder' : False, # : | in ... with remainder
'vadd' : 0, # 0 or 10, for 1.11 ... 1.19
'vmult' : 1, # 1 or 10, for 1.10 ... 1.90
- 'min' : 2, # +: minimum number in right *operand
- # -: minimum result
- 'max' : 2, # +: maximum number in right *operand
- # -: maximum result
'factors' : [2,4], # Liste mit ausgewählten zahlen zur berechnung
'shuffle_all' : False, # shuffle all calcs
'shuffle_inner': False, # shuffle only 1st (inner) iteration
@@ -206,16 +153,41 @@ class ExStore:
self._root = \
Collection("root = invisible node","required by tree structure", None,
- [Collection("Praxis Volksschule", #_c1
- "Rechenuebungen fuer die 1. und 2.Klasse, festgelegt 16.Dez.09",
+ [Collection("Praxis Volksschule", #_c1
+ "Rechenuebungen fuer die 1. und 2.Klasse, festgelegt am 16.Dez.09 mit Nina Jaklitsch und Arndt Stoeckl .",
None,
- []),
+ [Collection("Uebungen . und 'in' ", #_c1c1
+ " ", None,
+ [Collection("Einzelne Reihen . und 'in'", #_c1c1c1
+ " ", None,
+ [_c1c1c1t2, _c1c1c1t3, _c1c1c1t4, _c1c1c1t5,
+ _c1c1c1t6, _c1c1c1t7, _c1c1c1t8, _c1c1c1t9
+ ]),
+ Collection("Mehrere Reihen .",
+ "Wir ueben zusammengehoerende Reihen.", None,
+ [
+ ]),
+ Collection("Alle Reihen gemischt",
+ " ", None,
+ [
+ ])
+ ]),
+ Collection("Uebungen :", #_c1c2
+ " ", None,
+ [
+ ]),
+ Collection("Uebungen + und - ", #_c1c3
+ " ", None,
+ [
+ ])
+ ]),
Collection("Schoenberger", #_c2
"Most efficient introduction to the four basic arithmetic \
operations as taught by Igo Schoenberger in the last century \
in Upper Austria.",
None,
- []),
+ [
+ ]),
Collection("Templates", #_c3
"These are the (classes of) exercises all others are derived \
from. Thus, please, do not deletem them. \