diff --git a/Conf/.task.yaml.swp b/Conf/.task.yaml.swp
index 1c46e5b3ff..e47b69c5f4 100644
Binary files a/Conf/.task.yaml.swp and b/Conf/.task.yaml.swp differ
diff --git a/Conf/task.yaml b/Conf/task.yaml
index 6f7b785603..1584fd26f4 100644
--- a/Conf/task.yaml
+++ b/Conf/task.yaml
@@ -1,10 +1,44 @@
100 doors:
24 game:
99 Bottles of Beer:
+A+B:
+Abstract type:
+Accumulator factory:
Ackermann function:
+Active Directory/Connect:
+Active Directory/Search for a user:
+Active object:
+Add a variable to a class instance at runtime:
+Address of a variable:
+Align columns:
Anagrams:
+Anagrams/Deranged anagrams:
+# Animate a pendulum:
+Animation:
+Anonymous recursion:
+Apply a callback to an array:
+Arbitrary-precision integers (included):
+Arena storage pool:
+Arithmetic evaluation:
+Arithmetic-geometric mean:
+Arithmetic/Complex:
+# Arithmetic/Integer:
+Arithmetic/Rational:
+Array concatenation:
Arrays:
Assertions:
+Associative array/Creation:
+Associative array/Iteration:
+Atomic updates:
+Average loop length:
+Averages/Arithmetic mean:
+Averages/Mean angle:
+Averages/Mean time of day:
+Averages/Median:
+# Averages/Mode:
+Averages/Pythagorean means:
+Averages/Root mean square:
+Averages/Simple moving average:
Balanced brackets:
Balanced ternary:
Best shuffle:
diff --git a/Lang/0815/A+B b/Lang/0815/A+B
new file mode 120000
index 0000000000..f38b996359
--- /dev/null
+++ b/Lang/0815/A+B
@@ -0,0 +1 @@
+../../Task/A+B/0815
\ No newline at end of file
diff --git a/Lang/6502-Assembly/Averages-Arithmetic-mean b/Lang/6502-Assembly/Averages-Arithmetic-mean
new file mode 120000
index 0000000000..e34f0812cd
--- /dev/null
+++ b/Lang/6502-Assembly/Averages-Arithmetic-mean
@@ -0,0 +1 @@
+../../Task/Averages-Arithmetic-mean/6502-Assembly
\ No newline at end of file
diff --git a/Lang/ABAP/A+B b/Lang/ABAP/A+B
new file mode 120000
index 0000000000..b9771e4c98
--- /dev/null
+++ b/Lang/ABAP/A+B
@@ -0,0 +1 @@
+../../Task/A+B/ABAP
\ No newline at end of file
diff --git a/Lang/ABAP/Abstract-type b/Lang/ABAP/Abstract-type
new file mode 120000
index 0000000000..13183a131f
--- /dev/null
+++ b/Lang/ABAP/Abstract-type
@@ -0,0 +1 @@
+../../Task/Abstract-type/ABAP
\ No newline at end of file
diff --git a/Lang/ABAP/Accumulator-factory b/Lang/ABAP/Accumulator-factory
new file mode 120000
index 0000000000..e077ef8972
--- /dev/null
+++ b/Lang/ABAP/Accumulator-factory
@@ -0,0 +1 @@
+../../Task/Accumulator-factory/ABAP
\ No newline at end of file
diff --git a/Lang/ABAP/Align-columns b/Lang/ABAP/Align-columns
new file mode 120000
index 0000000000..0fb48803c1
--- /dev/null
+++ b/Lang/ABAP/Align-columns
@@ -0,0 +1 @@
+../../Task/Align-columns/ABAP
\ No newline at end of file
diff --git a/Lang/ACL2/Apply-a-callback-to-an-array b/Lang/ACL2/Apply-a-callback-to-an-array
new file mode 120000
index 0000000000..431956f14a
--- /dev/null
+++ b/Lang/ACL2/Apply-a-callback-to-an-array
@@ -0,0 +1 @@
+../../Task/Apply-a-callback-to-an-array/ACL2
\ No newline at end of file
diff --git a/Lang/ACL2/Arbitrary-precision-integers-(included) b/Lang/ACL2/Arbitrary-precision-integers-(included)
new file mode 120000
index 0000000000..6d88a77c49
--- /dev/null
+++ b/Lang/ACL2/Arbitrary-precision-integers-(included)
@@ -0,0 +1 @@
+../../Task/Arbitrary-precision-integers-(included)/ACL2
\ No newline at end of file
diff --git a/Lang/ACL2/Array-concatenation b/Lang/ACL2/Array-concatenation
new file mode 120000
index 0000000000..2702f3d362
--- /dev/null
+++ b/Lang/ACL2/Array-concatenation
@@ -0,0 +1 @@
+../../Task/Array-concatenation/ACL2
\ No newline at end of file
diff --git a/Lang/ACL2/Averages-Arithmetic-mean b/Lang/ACL2/Averages-Arithmetic-mean
new file mode 120000
index 0000000000..4f5b671a9c
--- /dev/null
+++ b/Lang/ACL2/Averages-Arithmetic-mean
@@ -0,0 +1 @@
+../../Task/Averages-Arithmetic-mean/ACL2
\ No newline at end of file
diff --git a/Lang/ALGOL-68/A+B b/Lang/ALGOL-68/A+B
new file mode 120000
index 0000000000..5765d580e0
--- /dev/null
+++ b/Lang/ALGOL-68/A+B
@@ -0,0 +1 @@
+../../Task/A+B/ALGOL-68
\ No newline at end of file
diff --git a/Lang/ALGOL-68/Accumulator-factory b/Lang/ALGOL-68/Accumulator-factory
new file mode 120000
index 0000000000..bdb4432e3b
--- /dev/null
+++ b/Lang/ALGOL-68/Accumulator-factory
@@ -0,0 +1 @@
+../../Task/Accumulator-factory/ALGOL-68
\ No newline at end of file
diff --git a/Lang/ALGOL-68/Address-of-a-variable b/Lang/ALGOL-68/Address-of-a-variable
new file mode 120000
index 0000000000..805b2d2c6a
--- /dev/null
+++ b/Lang/ALGOL-68/Address-of-a-variable
@@ -0,0 +1 @@
+../../Task/Address-of-a-variable/ALGOL-68
\ No newline at end of file
diff --git a/Lang/ALGOL-68/Align-columns b/Lang/ALGOL-68/Align-columns
new file mode 120000
index 0000000000..4ad8e89cf4
--- /dev/null
+++ b/Lang/ALGOL-68/Align-columns
@@ -0,0 +1 @@
+../../Task/Align-columns/ALGOL-68
\ No newline at end of file
diff --git a/Lang/ALGOL-68/Apply-a-callback-to-an-array b/Lang/ALGOL-68/Apply-a-callback-to-an-array
new file mode 120000
index 0000000000..74b4e2171b
--- /dev/null
+++ b/Lang/ALGOL-68/Apply-a-callback-to-an-array
@@ -0,0 +1 @@
+../../Task/Apply-a-callback-to-an-array/ALGOL-68
\ No newline at end of file
diff --git a/Lang/ALGOL-68/Arithmetic-Complex b/Lang/ALGOL-68/Arithmetic-Complex
new file mode 120000
index 0000000000..85cf01a240
--- /dev/null
+++ b/Lang/ALGOL-68/Arithmetic-Complex
@@ -0,0 +1 @@
+../../Task/Arithmetic-Complex/ALGOL-68
\ No newline at end of file
diff --git a/Lang/ALGOL-68/Arithmetic-Rational b/Lang/ALGOL-68/Arithmetic-Rational
new file mode 120000
index 0000000000..0abbe747f3
--- /dev/null
+++ b/Lang/ALGOL-68/Arithmetic-Rational
@@ -0,0 +1 @@
+../../Task/Arithmetic-Rational/ALGOL-68
\ No newline at end of file
diff --git a/Lang/ALGOL-68/Arithmetic-evaluation b/Lang/ALGOL-68/Arithmetic-evaluation
new file mode 120000
index 0000000000..4b9c60d1b4
--- /dev/null
+++ b/Lang/ALGOL-68/Arithmetic-evaluation
@@ -0,0 +1 @@
+../../Task/Arithmetic-evaluation/ALGOL-68
\ No newline at end of file
diff --git a/Lang/ALGOL-68/Array-concatenation b/Lang/ALGOL-68/Array-concatenation
new file mode 120000
index 0000000000..2f058e02b5
--- /dev/null
+++ b/Lang/ALGOL-68/Array-concatenation
@@ -0,0 +1 @@
+../../Task/Array-concatenation/ALGOL-68
\ No newline at end of file
diff --git a/Lang/ALGOL-68/Associative-array-Creation b/Lang/ALGOL-68/Associative-array-Creation
new file mode 120000
index 0000000000..9bec4c1294
--- /dev/null
+++ b/Lang/ALGOL-68/Associative-array-Creation
@@ -0,0 +1 @@
+../../Task/Associative-array-Creation/ALGOL-68
\ No newline at end of file
diff --git a/Lang/ALGOL-68/Averages-Arithmetic-mean b/Lang/ALGOL-68/Averages-Arithmetic-mean
new file mode 120000
index 0000000000..48ce7b81af
--- /dev/null
+++ b/Lang/ALGOL-68/Averages-Arithmetic-mean
@@ -0,0 +1 @@
+../../Task/Averages-Arithmetic-mean/ALGOL-68
\ No newline at end of file
diff --git a/Lang/ALGOL-68/Averages-Pythagorean-means b/Lang/ALGOL-68/Averages-Pythagorean-means
new file mode 120000
index 0000000000..ba720f78e7
--- /dev/null
+++ b/Lang/ALGOL-68/Averages-Pythagorean-means
@@ -0,0 +1 @@
+../../Task/Averages-Pythagorean-means/ALGOL-68
\ No newline at end of file
diff --git a/Lang/ALGOL-68/Averages-Root-mean-square b/Lang/ALGOL-68/Averages-Root-mean-square
new file mode 120000
index 0000000000..cd7cc0fb12
--- /dev/null
+++ b/Lang/ALGOL-68/Averages-Root-mean-square
@@ -0,0 +1 @@
+../../Task/Averages-Root-mean-square/ALGOL-68
\ No newline at end of file
diff --git a/Lang/ALGOL-68/Averages-Simple-moving-average b/Lang/ALGOL-68/Averages-Simple-moving-average
new file mode 120000
index 0000000000..39fd39ac0f
--- /dev/null
+++ b/Lang/ALGOL-68/Averages-Simple-moving-average
@@ -0,0 +1 @@
+../../Task/Averages-Simple-moving-average/ALGOL-68
\ No newline at end of file
diff --git a/Lang/ANTLR/A+B b/Lang/ANTLR/A+B
new file mode 120000
index 0000000000..d8dee80ad6
--- /dev/null
+++ b/Lang/ANTLR/A+B
@@ -0,0 +1 @@
+../../Task/A+B/ANTLR
\ No newline at end of file
diff --git a/Lang/APL/Arithmetic-Complex b/Lang/APL/Arithmetic-Complex
new file mode 120000
index 0000000000..4221960f23
--- /dev/null
+++ b/Lang/APL/Arithmetic-Complex
@@ -0,0 +1 @@
+../../Task/Arithmetic-Complex/APL
\ No newline at end of file
diff --git a/Lang/APL/Array-concatenation b/Lang/APL/Array-concatenation
new file mode 120000
index 0000000000..051f271f82
--- /dev/null
+++ b/Lang/APL/Array-concatenation
@@ -0,0 +1 @@
+../../Task/Array-concatenation/APL
\ No newline at end of file
diff --git a/Lang/APL/Associative-array-Creation b/Lang/APL/Associative-array-Creation
new file mode 120000
index 0000000000..8d0833b2ea
--- /dev/null
+++ b/Lang/APL/Associative-array-Creation
@@ -0,0 +1 @@
+../../Task/Associative-array-Creation/APL
\ No newline at end of file
diff --git a/Lang/APL/Averages-Arithmetic-mean b/Lang/APL/Averages-Arithmetic-mean
new file mode 120000
index 0000000000..75ff376c96
--- /dev/null
+++ b/Lang/APL/Averages-Arithmetic-mean
@@ -0,0 +1 @@
+../../Task/Averages-Arithmetic-mean/APL
\ No newline at end of file
diff --git a/Lang/APL/Averages-Pythagorean-means b/Lang/APL/Averages-Pythagorean-means
new file mode 120000
index 0000000000..050c9d4805
--- /dev/null
+++ b/Lang/APL/Averages-Pythagorean-means
@@ -0,0 +1 @@
+../../Task/Averages-Pythagorean-means/APL
\ No newline at end of file
diff --git a/Lang/APL/Averages-Root-mean-square b/Lang/APL/Averages-Root-mean-square
new file mode 120000
index 0000000000..e163b71ef9
--- /dev/null
+++ b/Lang/APL/Averages-Root-mean-square
@@ -0,0 +1 @@
+../../Task/Averages-Root-mean-square/APL
\ No newline at end of file
diff --git a/Lang/AWK/A+B b/Lang/AWK/A+B
new file mode 120000
index 0000000000..9c92e79227
--- /dev/null
+++ b/Lang/AWK/A+B
@@ -0,0 +1 @@
+../../Task/A+B/AWK
\ No newline at end of file
diff --git a/Lang/AWK/Align-columns b/Lang/AWK/Align-columns
new file mode 120000
index 0000000000..81a3a045db
--- /dev/null
+++ b/Lang/AWK/Align-columns
@@ -0,0 +1 @@
+../../Task/Align-columns/AWK
\ No newline at end of file
diff --git a/Lang/AWK/Apply-a-callback-to-an-array b/Lang/AWK/Apply-a-callback-to-an-array
new file mode 120000
index 0000000000..9e6feb290b
--- /dev/null
+++ b/Lang/AWK/Apply-a-callback-to-an-array
@@ -0,0 +1 @@
+../../Task/Apply-a-callback-to-an-array/AWK
\ No newline at end of file
diff --git a/Lang/AWK/Associative-array-Creation b/Lang/AWK/Associative-array-Creation
new file mode 120000
index 0000000000..b2398418d2
--- /dev/null
+++ b/Lang/AWK/Associative-array-Creation
@@ -0,0 +1 @@
+../../Task/Associative-array-Creation/AWK
\ No newline at end of file
diff --git a/Lang/AWK/Associative-array-Iteration b/Lang/AWK/Associative-array-Iteration
new file mode 120000
index 0000000000..5331487a81
--- /dev/null
+++ b/Lang/AWK/Associative-array-Iteration
@@ -0,0 +1 @@
+../../Task/Associative-array-Iteration/AWK
\ No newline at end of file
diff --git a/Lang/AWK/Averages-Arithmetic-mean b/Lang/AWK/Averages-Arithmetic-mean
new file mode 120000
index 0000000000..8e6e9d3785
--- /dev/null
+++ b/Lang/AWK/Averages-Arithmetic-mean
@@ -0,0 +1 @@
+../../Task/Averages-Arithmetic-mean/AWK
\ No newline at end of file
diff --git a/Lang/AWK/Averages-Median b/Lang/AWK/Averages-Median
new file mode 120000
index 0000000000..b949778e98
--- /dev/null
+++ b/Lang/AWK/Averages-Median
@@ -0,0 +1 @@
+../../Task/Averages-Median/AWK
\ No newline at end of file
diff --git a/Lang/AWK/Averages-Pythagorean-means b/Lang/AWK/Averages-Pythagorean-means
new file mode 120000
index 0000000000..e88c6bdc4e
--- /dev/null
+++ b/Lang/AWK/Averages-Pythagorean-means
@@ -0,0 +1 @@
+../../Task/Averages-Pythagorean-means/AWK
\ No newline at end of file
diff --git a/Lang/AWK/Averages-Root-mean-square b/Lang/AWK/Averages-Root-mean-square
new file mode 120000
index 0000000000..779fb02521
--- /dev/null
+++ b/Lang/AWK/Averages-Root-mean-square
@@ -0,0 +1 @@
+../../Task/Averages-Root-mean-square/AWK
\ No newline at end of file
diff --git a/Lang/AWK/Averages-Simple-moving-average b/Lang/AWK/Averages-Simple-moving-average
new file mode 120000
index 0000000000..1444a44a26
--- /dev/null
+++ b/Lang/AWK/Averages-Simple-moving-average
@@ -0,0 +1 @@
+../../Task/Averages-Simple-moving-average/AWK
\ No newline at end of file
diff --git a/Lang/ActionScript/Abstract-type b/Lang/ActionScript/Abstract-type
new file mode 120000
index 0000000000..e609845b0a
--- /dev/null
+++ b/Lang/ActionScript/Abstract-type
@@ -0,0 +1 @@
+../../Task/Abstract-type/ActionScript
\ No newline at end of file
diff --git a/Lang/ActionScript/Accumulator-factory b/Lang/ActionScript/Accumulator-factory
new file mode 120000
index 0000000000..fb443f73d4
--- /dev/null
+++ b/Lang/ActionScript/Accumulator-factory
@@ -0,0 +1 @@
+../../Task/Accumulator-factory/ActionScript
\ No newline at end of file
diff --git a/Lang/ActionScript/Add-a-variable-to-a-class-instance-at-runtime b/Lang/ActionScript/Add-a-variable-to-a-class-instance-at-runtime
new file mode 120000
index 0000000000..47d24efb7c
--- /dev/null
+++ b/Lang/ActionScript/Add-a-variable-to-a-class-instance-at-runtime
@@ -0,0 +1 @@
+../../Task/Add-a-variable-to-a-class-instance-at-runtime/ActionScript
\ No newline at end of file
diff --git a/Lang/ActionScript/Animation b/Lang/ActionScript/Animation
new file mode 120000
index 0000000000..3ba1d230b4
--- /dev/null
+++ b/Lang/ActionScript/Animation
@@ -0,0 +1 @@
+../../Task/Animation/ActionScript
\ No newline at end of file
diff --git a/Lang/ActionScript/Apply-a-callback-to-an-array b/Lang/ActionScript/Apply-a-callback-to-an-array
new file mode 120000
index 0000000000..e0be1c6f2e
--- /dev/null
+++ b/Lang/ActionScript/Apply-a-callback-to-an-array
@@ -0,0 +1 @@
+../../Task/Apply-a-callback-to-an-array/ActionScript
\ No newline at end of file
diff --git a/Lang/ActionScript/Array-concatenation b/Lang/ActionScript/Array-concatenation
new file mode 120000
index 0000000000..162f5f6abd
--- /dev/null
+++ b/Lang/ActionScript/Array-concatenation
@@ -0,0 +1 @@
+../../Task/Array-concatenation/ActionScript
\ No newline at end of file
diff --git a/Lang/ActionScript/Associative-array-Creation b/Lang/ActionScript/Associative-array-Creation
new file mode 120000
index 0000000000..0a381b5532
--- /dev/null
+++ b/Lang/ActionScript/Associative-array-Creation
@@ -0,0 +1 @@
+../../Task/Associative-array-Creation/ActionScript
\ No newline at end of file
diff --git a/Lang/ActionScript/Averages-Arithmetic-mean b/Lang/ActionScript/Averages-Arithmetic-mean
new file mode 120000
index 0000000000..84157504c8
--- /dev/null
+++ b/Lang/ActionScript/Averages-Arithmetic-mean
@@ -0,0 +1 @@
+../../Task/Averages-Arithmetic-mean/ActionScript
\ No newline at end of file
diff --git a/Lang/ActionScript/Averages-Pythagorean-means b/Lang/ActionScript/Averages-Pythagorean-means
new file mode 120000
index 0000000000..41031ff03c
--- /dev/null
+++ b/Lang/ActionScript/Averages-Pythagorean-means
@@ -0,0 +1 @@
+../../Task/Averages-Pythagorean-means/ActionScript
\ No newline at end of file
diff --git a/Lang/Ada/A+B b/Lang/Ada/A+B
new file mode 120000
index 0000000000..cdcbbb4a76
--- /dev/null
+++ b/Lang/Ada/A+B
@@ -0,0 +1 @@
+../../Task/A+B/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Abstract-type b/Lang/Ada/Abstract-type
new file mode 120000
index 0000000000..b11f17c165
--- /dev/null
+++ b/Lang/Ada/Abstract-type
@@ -0,0 +1 @@
+../../Task/Abstract-type/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Accumulator-factory b/Lang/Ada/Accumulator-factory
new file mode 120000
index 0000000000..2c8f8993a5
--- /dev/null
+++ b/Lang/Ada/Accumulator-factory
@@ -0,0 +1 @@
+../../Task/Accumulator-factory/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Active-object b/Lang/Ada/Active-object
new file mode 120000
index 0000000000..01c3a5f7ac
--- /dev/null
+++ b/Lang/Ada/Active-object
@@ -0,0 +1 @@
+../../Task/Active-object/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Add-a-variable-to-a-class-instance-at-runtime b/Lang/Ada/Add-a-variable-to-a-class-instance-at-runtime
new file mode 120000
index 0000000000..c306690156
--- /dev/null
+++ b/Lang/Ada/Add-a-variable-to-a-class-instance-at-runtime
@@ -0,0 +1 @@
+../../Task/Add-a-variable-to-a-class-instance-at-runtime/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Address-of-a-variable b/Lang/Ada/Address-of-a-variable
new file mode 120000
index 0000000000..625c8babac
--- /dev/null
+++ b/Lang/Ada/Address-of-a-variable
@@ -0,0 +1 @@
+../../Task/Address-of-a-variable/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Align-columns b/Lang/Ada/Align-columns
new file mode 120000
index 0000000000..2df935f24e
--- /dev/null
+++ b/Lang/Ada/Align-columns
@@ -0,0 +1 @@
+../../Task/Align-columns/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Anagrams-Deranged-anagrams b/Lang/Ada/Anagrams-Deranged-anagrams
new file mode 120000
index 0000000000..64d5aae26c
--- /dev/null
+++ b/Lang/Ada/Anagrams-Deranged-anagrams
@@ -0,0 +1 @@
+../../Task/Anagrams-Deranged-anagrams/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Animation b/Lang/Ada/Animation
new file mode 120000
index 0000000000..bcf24516a3
--- /dev/null
+++ b/Lang/Ada/Animation
@@ -0,0 +1 @@
+../../Task/Animation/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Anonymous-recursion b/Lang/Ada/Anonymous-recursion
new file mode 120000
index 0000000000..0bde74aef8
--- /dev/null
+++ b/Lang/Ada/Anonymous-recursion
@@ -0,0 +1 @@
+../../Task/Anonymous-recursion/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Apply-a-callback-to-an-array b/Lang/Ada/Apply-a-callback-to-an-array
new file mode 120000
index 0000000000..0fc1583080
--- /dev/null
+++ b/Lang/Ada/Apply-a-callback-to-an-array
@@ -0,0 +1 @@
+../../Task/Apply-a-callback-to-an-array/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Arbitrary-precision-integers-(included) b/Lang/Ada/Arbitrary-precision-integers-(included)
new file mode 120000
index 0000000000..2edc64c8fa
--- /dev/null
+++ b/Lang/Ada/Arbitrary-precision-integers-(included)
@@ -0,0 +1 @@
+../../Task/Arbitrary-precision-integers-(included)/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Arena-storage-pool b/Lang/Ada/Arena-storage-pool
new file mode 120000
index 0000000000..29f429b811
--- /dev/null
+++ b/Lang/Ada/Arena-storage-pool
@@ -0,0 +1 @@
+../../Task/Arena-storage-pool/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Arithmetic-Complex b/Lang/Ada/Arithmetic-Complex
new file mode 120000
index 0000000000..371bb9be6e
--- /dev/null
+++ b/Lang/Ada/Arithmetic-Complex
@@ -0,0 +1 @@
+../../Task/Arithmetic-Complex/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Arithmetic-geometric-mean b/Lang/Ada/Arithmetic-geometric-mean
new file mode 120000
index 0000000000..d6e7d9beb5
--- /dev/null
+++ b/Lang/Ada/Arithmetic-geometric-mean
@@ -0,0 +1 @@
+../../Task/Arithmetic-geometric-mean/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Array-concatenation b/Lang/Ada/Array-concatenation
new file mode 120000
index 0000000000..667d693832
--- /dev/null
+++ b/Lang/Ada/Array-concatenation
@@ -0,0 +1 @@
+../../Task/Array-concatenation/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Associative-array-Creation b/Lang/Ada/Associative-array-Creation
new file mode 120000
index 0000000000..ddd7cbd8ee
--- /dev/null
+++ b/Lang/Ada/Associative-array-Creation
@@ -0,0 +1 @@
+../../Task/Associative-array-Creation/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Associative-array-Iteration b/Lang/Ada/Associative-array-Iteration
new file mode 120000
index 0000000000..9cc668a8f6
--- /dev/null
+++ b/Lang/Ada/Associative-array-Iteration
@@ -0,0 +1 @@
+../../Task/Associative-array-Iteration/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Atomic-updates b/Lang/Ada/Atomic-updates
new file mode 120000
index 0000000000..a187280b46
--- /dev/null
+++ b/Lang/Ada/Atomic-updates
@@ -0,0 +1 @@
+../../Task/Atomic-updates/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Average-loop-length b/Lang/Ada/Average-loop-length
new file mode 120000
index 0000000000..018a67faa7
--- /dev/null
+++ b/Lang/Ada/Average-loop-length
@@ -0,0 +1 @@
+../../Task/Average-loop-length/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Averages-Arithmetic-mean b/Lang/Ada/Averages-Arithmetic-mean
new file mode 120000
index 0000000000..e6b772e374
--- /dev/null
+++ b/Lang/Ada/Averages-Arithmetic-mean
@@ -0,0 +1 @@
+../../Task/Averages-Arithmetic-mean/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Averages-Mean-angle b/Lang/Ada/Averages-Mean-angle
new file mode 120000
index 0000000000..981e315ed5
--- /dev/null
+++ b/Lang/Ada/Averages-Mean-angle
@@ -0,0 +1 @@
+../../Task/Averages-Mean-angle/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Averages-Median b/Lang/Ada/Averages-Median
new file mode 120000
index 0000000000..25029e581f
--- /dev/null
+++ b/Lang/Ada/Averages-Median
@@ -0,0 +1 @@
+../../Task/Averages-Median/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Averages-Pythagorean-means b/Lang/Ada/Averages-Pythagorean-means
new file mode 120000
index 0000000000..0a29e389c9
--- /dev/null
+++ b/Lang/Ada/Averages-Pythagorean-means
@@ -0,0 +1 @@
+../../Task/Averages-Pythagorean-means/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Averages-Root-mean-square b/Lang/Ada/Averages-Root-mean-square
new file mode 120000
index 0000000000..c46e2ec09f
--- /dev/null
+++ b/Lang/Ada/Averages-Root-mean-square
@@ -0,0 +1 @@
+../../Task/Averages-Root-mean-square/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Averages-Simple-moving-average b/Lang/Ada/Averages-Simple-moving-average
new file mode 120000
index 0000000000..04b3d15ce2
--- /dev/null
+++ b/Lang/Ada/Averages-Simple-moving-average
@@ -0,0 +1 @@
+../../Task/Averages-Simple-moving-average/Ada
\ No newline at end of file
diff --git a/Lang/Agda/Abstract-type b/Lang/Agda/Abstract-type
new file mode 120000
index 0000000000..8e1f88cf3d
--- /dev/null
+++ b/Lang/Agda/Abstract-type
@@ -0,0 +1 @@
+../../Task/Abstract-type/Agda
\ No newline at end of file
diff --git a/Lang/Aikido/Abstract-type b/Lang/Aikido/Abstract-type
new file mode 120000
index 0000000000..a5fdaa604a
--- /dev/null
+++ b/Lang/Aikido/Abstract-type
@@ -0,0 +1 @@
+../../Task/Abstract-type/Aikido
\ No newline at end of file
diff --git a/Lang/Aikido/Accumulator-factory b/Lang/Aikido/Accumulator-factory
new file mode 120000
index 0000000000..ffff56a508
--- /dev/null
+++ b/Lang/Aikido/Accumulator-factory
@@ -0,0 +1 @@
+../../Task/Accumulator-factory/Aikido
\ No newline at end of file
diff --git a/Lang/Aikido/Associative-array-Creation b/Lang/Aikido/Associative-array-Creation
new file mode 120000
index 0000000000..6360524f26
--- /dev/null
+++ b/Lang/Aikido/Associative-array-Creation
@@ -0,0 +1 @@
+../../Task/Associative-array-Creation/Aikido
\ No newline at end of file
diff --git a/Lang/Aime/Apply-a-callback-to-an-array b/Lang/Aime/Apply-a-callback-to-an-array
new file mode 120000
index 0000000000..6afdcf646b
--- /dev/null
+++ b/Lang/Aime/Apply-a-callback-to-an-array
@@ -0,0 +1 @@
+../../Task/Apply-a-callback-to-an-array/Aime
\ No newline at end of file
diff --git a/Lang/Alore/Arbitrary-precision-integers-(included) b/Lang/Alore/Arbitrary-precision-integers-(included)
new file mode 120000
index 0000000000..b45566aca9
--- /dev/null
+++ b/Lang/Alore/Arbitrary-precision-integers-(included)
@@ -0,0 +1 @@
+../../Task/Arbitrary-precision-integers-(included)/Alore
\ No newline at end of file
diff --git a/Lang/AmigaE/Averages-Arithmetic-mean b/Lang/AmigaE/Averages-Arithmetic-mean
new file mode 120000
index 0000000000..f7e53cdf5c
--- /dev/null
+++ b/Lang/AmigaE/Averages-Arithmetic-mean
@@ -0,0 +1 @@
+../../Task/Averages-Arithmetic-mean/AmigaE
\ No newline at end of file
diff --git a/Lang/AppleScript/Averages-Median b/Lang/AppleScript/Averages-Median
new file mode 120000
index 0000000000..d63352232b
--- /dev/null
+++ b/Lang/AppleScript/Averages-Median
@@ -0,0 +1 @@
+../../Task/Averages-Median/AppleScript
\ No newline at end of file
diff --git a/Lang/Argile/A+B b/Lang/Argile/A+B
new file mode 120000
index 0000000000..ba39627c1b
--- /dev/null
+++ b/Lang/Argile/A+B
@@ -0,0 +1 @@
+../../Task/A+B/Argile
\ No newline at end of file
diff --git a/Lang/Argile/Abstract-type b/Lang/Argile/Abstract-type
new file mode 120000
index 0000000000..835ea31039
--- /dev/null
+++ b/Lang/Argile/Abstract-type
@@ -0,0 +1 @@
+../../Task/Abstract-type/Argile
\ No newline at end of file
diff --git a/Lang/Argile/Accumulator-factory b/Lang/Argile/Accumulator-factory
new file mode 120000
index 0000000000..3e23f0d4a7
--- /dev/null
+++ b/Lang/Argile/Accumulator-factory
@@ -0,0 +1 @@
+../../Task/Accumulator-factory/Argile
\ No newline at end of file
diff --git a/Lang/Argile/Address-of-a-variable b/Lang/Argile/Address-of-a-variable
new file mode 120000
index 0000000000..0ca42e507d
--- /dev/null
+++ b/Lang/Argile/Address-of-a-variable
@@ -0,0 +1 @@
+../../Task/Address-of-a-variable/Argile
\ No newline at end of file
diff --git a/Lang/AutoHotkey/A+B b/Lang/AutoHotkey/A+B
new file mode 120000
index 0000000000..34306562a1
--- /dev/null
+++ b/Lang/AutoHotkey/A+B
@@ -0,0 +1 @@
+../../Task/A+B/AutoHotkey
\ No newline at end of file
diff --git a/Lang/AutoHotkey/Abstract-type b/Lang/AutoHotkey/Abstract-type
new file mode 120000
index 0000000000..bf4c5e9139
--- /dev/null
+++ b/Lang/AutoHotkey/Abstract-type
@@ -0,0 +1 @@
+../../Task/Abstract-type/AutoHotkey
\ No newline at end of file
diff --git a/Lang/AutoHotkey/Active-Directory-Connect b/Lang/AutoHotkey/Active-Directory-Connect
new file mode 120000
index 0000000000..2906a045c7
--- /dev/null
+++ b/Lang/AutoHotkey/Active-Directory-Connect
@@ -0,0 +1 @@
+../../Task/Active-Directory-Connect/AutoHotkey
\ No newline at end of file
diff --git a/Lang/AutoHotkey/Add-a-variable-to-a-class-instance-at-runtime b/Lang/AutoHotkey/Add-a-variable-to-a-class-instance-at-runtime
new file mode 120000
index 0000000000..da19636063
--- /dev/null
+++ b/Lang/AutoHotkey/Add-a-variable-to-a-class-instance-at-runtime
@@ -0,0 +1 @@
+../../Task/Add-a-variable-to-a-class-instance-at-runtime/AutoHotkey
\ No newline at end of file
diff --git a/Lang/AutoHotkey/Address-of-a-variable b/Lang/AutoHotkey/Address-of-a-variable
new file mode 120000
index 0000000000..404123e5c6
--- /dev/null
+++ b/Lang/AutoHotkey/Address-of-a-variable
@@ -0,0 +1 @@
+../../Task/Address-of-a-variable/AutoHotkey
\ No newline at end of file
diff --git a/Lang/AutoHotkey/Align-columns b/Lang/AutoHotkey/Align-columns
new file mode 120000
index 0000000000..0a02232b4d
--- /dev/null
+++ b/Lang/AutoHotkey/Align-columns
@@ -0,0 +1 @@
+../../Task/Align-columns/AutoHotkey
\ No newline at end of file
diff --git a/Lang/AutoHotkey/Animation b/Lang/AutoHotkey/Animation
new file mode 120000
index 0000000000..1bdb219dcc
--- /dev/null
+++ b/Lang/AutoHotkey/Animation
@@ -0,0 +1 @@
+../../Task/Animation/AutoHotkey
\ No newline at end of file
diff --git a/Lang/AutoHotkey/Anonymous-recursion b/Lang/AutoHotkey/Anonymous-recursion
new file mode 120000
index 0000000000..c992ee0ed1
--- /dev/null
+++ b/Lang/AutoHotkey/Anonymous-recursion
@@ -0,0 +1 @@
+../../Task/Anonymous-recursion/AutoHotkey
\ No newline at end of file
diff --git a/Lang/AutoHotkey/Apply-a-callback-to-an-array b/Lang/AutoHotkey/Apply-a-callback-to-an-array
new file mode 120000
index 0000000000..6342659003
--- /dev/null
+++ b/Lang/AutoHotkey/Apply-a-callback-to-an-array
@@ -0,0 +1 @@
+../../Task/Apply-a-callback-to-an-array/AutoHotkey
\ No newline at end of file
diff --git a/Lang/AutoHotkey/Arithmetic-Complex b/Lang/AutoHotkey/Arithmetic-Complex
new file mode 120000
index 0000000000..5fbe29aa86
--- /dev/null
+++ b/Lang/AutoHotkey/Arithmetic-Complex
@@ -0,0 +1 @@
+../../Task/Arithmetic-Complex/AutoHotkey
\ No newline at end of file
diff --git a/Lang/AutoHotkey/Arithmetic-evaluation b/Lang/AutoHotkey/Arithmetic-evaluation
new file mode 120000
index 0000000000..eafa630655
--- /dev/null
+++ b/Lang/AutoHotkey/Arithmetic-evaluation
@@ -0,0 +1 @@
+../../Task/Arithmetic-evaluation/AutoHotkey
\ No newline at end of file
diff --git a/Lang/AutoHotkey/Arithmetic-geometric-mean b/Lang/AutoHotkey/Arithmetic-geometric-mean
new file mode 120000
index 0000000000..0a6f3749df
--- /dev/null
+++ b/Lang/AutoHotkey/Arithmetic-geometric-mean
@@ -0,0 +1 @@
+../../Task/Arithmetic-geometric-mean/AutoHotkey
\ No newline at end of file
diff --git a/Lang/AutoHotkey/Array-concatenation b/Lang/AutoHotkey/Array-concatenation
new file mode 120000
index 0000000000..96659ecb14
--- /dev/null
+++ b/Lang/AutoHotkey/Array-concatenation
@@ -0,0 +1 @@
+../../Task/Array-concatenation/AutoHotkey
\ No newline at end of file
diff --git a/Lang/AutoHotkey/Associative-array-Creation b/Lang/AutoHotkey/Associative-array-Creation
new file mode 120000
index 0000000000..902453f4a7
--- /dev/null
+++ b/Lang/AutoHotkey/Associative-array-Creation
@@ -0,0 +1 @@
+../../Task/Associative-array-Creation/AutoHotkey
\ No newline at end of file
diff --git a/Lang/AutoHotkey/Associative-array-Iteration b/Lang/AutoHotkey/Associative-array-Iteration
new file mode 120000
index 0000000000..bd261cf5b7
--- /dev/null
+++ b/Lang/AutoHotkey/Associative-array-Iteration
@@ -0,0 +1 @@
+../../Task/Associative-array-Iteration/AutoHotkey
\ No newline at end of file
diff --git a/Lang/AutoHotkey/Averages-Arithmetic-mean b/Lang/AutoHotkey/Averages-Arithmetic-mean
new file mode 120000
index 0000000000..b14364eecd
--- /dev/null
+++ b/Lang/AutoHotkey/Averages-Arithmetic-mean
@@ -0,0 +1 @@
+../../Task/Averages-Arithmetic-mean/AutoHotkey
\ No newline at end of file
diff --git a/Lang/AutoHotkey/Averages-Median b/Lang/AutoHotkey/Averages-Median
new file mode 120000
index 0000000000..36c7dde6d9
--- /dev/null
+++ b/Lang/AutoHotkey/Averages-Median
@@ -0,0 +1 @@
+../../Task/Averages-Median/AutoHotkey
\ No newline at end of file
diff --git a/Lang/AutoHotkey/Averages-Pythagorean-means b/Lang/AutoHotkey/Averages-Pythagorean-means
new file mode 120000
index 0000000000..67fe1a3d86
--- /dev/null
+++ b/Lang/AutoHotkey/Averages-Pythagorean-means
@@ -0,0 +1 @@
+../../Task/Averages-Pythagorean-means/AutoHotkey
\ No newline at end of file
diff --git a/Lang/AutoHotkey/Averages-Root-mean-square b/Lang/AutoHotkey/Averages-Root-mean-square
new file mode 120000
index 0000000000..6cbe5d5b52
--- /dev/null
+++ b/Lang/AutoHotkey/Averages-Root-mean-square
@@ -0,0 +1 @@
+../../Task/Averages-Root-mean-square/AutoHotkey
\ No newline at end of file
diff --git a/Lang/AutoHotkey/Averages-Simple-moving-average b/Lang/AutoHotkey/Averages-Simple-moving-average
new file mode 120000
index 0000000000..2f61f2e44e
--- /dev/null
+++ b/Lang/AutoHotkey/Averages-Simple-moving-average
@@ -0,0 +1 @@
+../../Task/Averages-Simple-moving-average/AutoHotkey
\ No newline at end of file
diff --git a/Lang/AutoIt/A+B b/Lang/AutoIt/A+B
new file mode 120000
index 0000000000..44236fda80
--- /dev/null
+++ b/Lang/AutoIt/A+B
@@ -0,0 +1 @@
+../../Task/A+B/AutoIt
\ No newline at end of file
diff --git a/Lang/AutoIt/Active-Directory-Connect b/Lang/AutoIt/Active-Directory-Connect
new file mode 120000
index 0000000000..f359ebee59
--- /dev/null
+++ b/Lang/AutoIt/Active-Directory-Connect
@@ -0,0 +1 @@
+../../Task/Active-Directory-Connect/AutoIt
\ No newline at end of file
diff --git a/Lang/AutoIt/Array-concatenation b/Lang/AutoIt/Array-concatenation
new file mode 120000
index 0000000000..46ffba5419
--- /dev/null
+++ b/Lang/AutoIt/Array-concatenation
@@ -0,0 +1 @@
+../../Task/Array-concatenation/AutoIt
\ No newline at end of file
diff --git a/Lang/Axiom/Anonymous-recursion b/Lang/Axiom/Anonymous-recursion
new file mode 120000
index 0000000000..2b40e55390
--- /dev/null
+++ b/Lang/Axiom/Anonymous-recursion
@@ -0,0 +1 @@
+../../Task/Anonymous-recursion/Axiom
\ No newline at end of file
diff --git a/Lang/BASIC/A+B b/Lang/BASIC/A+B
new file mode 120000
index 0000000000..411c8f5da4
--- /dev/null
+++ b/Lang/BASIC/A+B
@@ -0,0 +1 @@
+../../Task/A+B/BASIC
\ No newline at end of file
diff --git a/Lang/BASIC/Address-of-a-variable b/Lang/BASIC/Address-of-a-variable
new file mode 120000
index 0000000000..5514047823
--- /dev/null
+++ b/Lang/BASIC/Address-of-a-variable
@@ -0,0 +1 @@
+../../Task/Address-of-a-variable/BASIC
\ No newline at end of file
diff --git a/Lang/BASIC/Arithmetic-Complex b/Lang/BASIC/Arithmetic-Complex
new file mode 120000
index 0000000000..74a0b1041c
--- /dev/null
+++ b/Lang/BASIC/Arithmetic-Complex
@@ -0,0 +1 @@
+../../Task/Arithmetic-Complex/BASIC
\ No newline at end of file
diff --git a/Lang/BASIC/Averages-Arithmetic-mean b/Lang/BASIC/Averages-Arithmetic-mean
new file mode 120000
index 0000000000..83ec4efa0a
--- /dev/null
+++ b/Lang/BASIC/Averages-Arithmetic-mean
@@ -0,0 +1 @@
+../../Task/Averages-Arithmetic-mean/BASIC
\ No newline at end of file
diff --git a/Lang/BASIC/Averages-Median b/Lang/BASIC/Averages-Median
new file mode 120000
index 0000000000..0a9d99da14
--- /dev/null
+++ b/Lang/BASIC/Averages-Median
@@ -0,0 +1 @@
+../../Task/Averages-Median/BASIC
\ No newline at end of file
diff --git a/Lang/BASIC/Averages-Root-mean-square b/Lang/BASIC/Averages-Root-mean-square
new file mode 120000
index 0000000000..0c2a677902
--- /dev/null
+++ b/Lang/BASIC/Averages-Root-mean-square
@@ -0,0 +1 @@
+../../Task/Averages-Root-mean-square/BASIC
\ No newline at end of file
diff --git a/Lang/Babel/Array-concatenation b/Lang/Babel/Array-concatenation
new file mode 120000
index 0000000000..a5d8271da7
--- /dev/null
+++ b/Lang/Babel/Array-concatenation
@@ -0,0 +1 @@
+../../Task/Array-concatenation/Babel
\ No newline at end of file
diff --git a/Lang/Befunge/A+B b/Lang/Befunge/A+B
new file mode 120000
index 0000000000..efc3c0bc5d
--- /dev/null
+++ b/Lang/Befunge/A+B
@@ -0,0 +1 @@
+../../Task/A+B/Befunge
\ No newline at end of file
diff --git a/Lang/Befunge/Averages-Arithmetic-mean b/Lang/Befunge/Averages-Arithmetic-mean
new file mode 120000
index 0000000000..b597f7ac56
--- /dev/null
+++ b/Lang/Befunge/Averages-Arithmetic-mean
@@ -0,0 +1 @@
+../../Task/Averages-Arithmetic-mean/Befunge
\ No newline at end of file
diff --git a/Lang/C/A+B b/Lang/C/A+B
new file mode 120000
index 0000000000..2d2c133c4a
--- /dev/null
+++ b/Lang/C/A+B
@@ -0,0 +1 @@
+../../Task/A+B/C
\ No newline at end of file
diff --git a/Lang/C/Abstract-type b/Lang/C/Abstract-type
new file mode 120000
index 0000000000..d072f8c205
--- /dev/null
+++ b/Lang/C/Abstract-type
@@ -0,0 +1 @@
+../../Task/Abstract-type/C
\ No newline at end of file
diff --git a/Lang/C/Accumulator-factory b/Lang/C/Accumulator-factory
new file mode 120000
index 0000000000..20c554d881
--- /dev/null
+++ b/Lang/C/Accumulator-factory
@@ -0,0 +1 @@
+../../Task/Accumulator-factory/C
\ No newline at end of file
diff --git a/Lang/C/Active-Directory-Connect b/Lang/C/Active-Directory-Connect
new file mode 120000
index 0000000000..1f69357681
--- /dev/null
+++ b/Lang/C/Active-Directory-Connect
@@ -0,0 +1 @@
+../../Task/Active-Directory-Connect/C
\ No newline at end of file
diff --git a/Lang/C/Active-Directory-Search-for-a-user b/Lang/C/Active-Directory-Search-for-a-user
new file mode 120000
index 0000000000..7425b60b8c
--- /dev/null
+++ b/Lang/C/Active-Directory-Search-for-a-user
@@ -0,0 +1 @@
+../../Task/Active-Directory-Search-for-a-user/C
\ No newline at end of file
diff --git a/Lang/C/Active-object b/Lang/C/Active-object
new file mode 120000
index 0000000000..eacbf9b3f5
--- /dev/null
+++ b/Lang/C/Active-object
@@ -0,0 +1 @@
+../../Task/Active-object/C
\ No newline at end of file
diff --git a/Lang/C/Anagrams-Deranged-anagrams b/Lang/C/Anagrams-Deranged-anagrams
new file mode 120000
index 0000000000..cce75923ac
--- /dev/null
+++ b/Lang/C/Anagrams-Deranged-anagrams
@@ -0,0 +1 @@
+../../Task/Anagrams-Deranged-anagrams/C
\ No newline at end of file
diff --git a/Lang/C/Animation b/Lang/C/Animation
new file mode 120000
index 0000000000..53547d535d
--- /dev/null
+++ b/Lang/C/Animation
@@ -0,0 +1 @@
+../../Task/Animation/C
\ No newline at end of file
diff --git a/Lang/C/Anonymous-recursion b/Lang/C/Anonymous-recursion
new file mode 120000
index 0000000000..45e6607743
--- /dev/null
+++ b/Lang/C/Anonymous-recursion
@@ -0,0 +1 @@
+../../Task/Anonymous-recursion/C
\ No newline at end of file
diff --git a/Lang/C/Apply-a-callback-to-an-array b/Lang/C/Apply-a-callback-to-an-array
new file mode 120000
index 0000000000..10b0b8a58e
--- /dev/null
+++ b/Lang/C/Apply-a-callback-to-an-array
@@ -0,0 +1 @@
+../../Task/Apply-a-callback-to-an-array/C
\ No newline at end of file
diff --git a/Lang/C/Arbitrary-precision-integers-(included) b/Lang/C/Arbitrary-precision-integers-(included)
new file mode 120000
index 0000000000..ba9a232ceb
--- /dev/null
+++ b/Lang/C/Arbitrary-precision-integers-(included)
@@ -0,0 +1 @@
+../../Task/Arbitrary-precision-integers-(included)/C
\ No newline at end of file
diff --git a/Lang/C/Arena-storage-pool b/Lang/C/Arena-storage-pool
new file mode 120000
index 0000000000..b86d9bbaff
--- /dev/null
+++ b/Lang/C/Arena-storage-pool
@@ -0,0 +1 @@
+../../Task/Arena-storage-pool/C
\ No newline at end of file
diff --git a/Lang/C/Arithmetic-Complex b/Lang/C/Arithmetic-Complex
new file mode 120000
index 0000000000..2bc23504ae
--- /dev/null
+++ b/Lang/C/Arithmetic-Complex
@@ -0,0 +1 @@
+../../Task/Arithmetic-Complex/C
\ No newline at end of file
diff --git a/Lang/C/Arithmetic-Rational b/Lang/C/Arithmetic-Rational
new file mode 120000
index 0000000000..63a88334b5
--- /dev/null
+++ b/Lang/C/Arithmetic-Rational
@@ -0,0 +1 @@
+../../Task/Arithmetic-Rational/C
\ No newline at end of file
diff --git a/Lang/C/Arithmetic-geometric-mean b/Lang/C/Arithmetic-geometric-mean
new file mode 120000
index 0000000000..bd6f30952e
--- /dev/null
+++ b/Lang/C/Arithmetic-geometric-mean
@@ -0,0 +1 @@
+../../Task/Arithmetic-geometric-mean/C
\ No newline at end of file
diff --git a/Lang/C/Array-concatenation b/Lang/C/Array-concatenation
new file mode 120000
index 0000000000..088cf4a241
--- /dev/null
+++ b/Lang/C/Array-concatenation
@@ -0,0 +1 @@
+../../Task/Array-concatenation/C
\ No newline at end of file
diff --git a/Lang/C/Atomic-updates b/Lang/C/Atomic-updates
new file mode 120000
index 0000000000..d4f8bccc3d
--- /dev/null
+++ b/Lang/C/Atomic-updates
@@ -0,0 +1 @@
+../../Task/Atomic-updates/C
\ No newline at end of file
diff --git a/Lang/C/Average-loop-length b/Lang/C/Average-loop-length
new file mode 120000
index 0000000000..1872864a57
--- /dev/null
+++ b/Lang/C/Average-loop-length
@@ -0,0 +1 @@
+../../Task/Average-loop-length/C
\ No newline at end of file
diff --git a/Lang/C/Averages-Arithmetic-mean b/Lang/C/Averages-Arithmetic-mean
new file mode 120000
index 0000000000..e2e36923ca
--- /dev/null
+++ b/Lang/C/Averages-Arithmetic-mean
@@ -0,0 +1 @@
+../../Task/Averages-Arithmetic-mean/C
\ No newline at end of file
diff --git a/Lang/C/Averages-Mean-angle b/Lang/C/Averages-Mean-angle
new file mode 120000
index 0000000000..73da7e2a2b
--- /dev/null
+++ b/Lang/C/Averages-Mean-angle
@@ -0,0 +1 @@
+../../Task/Averages-Mean-angle/C
\ No newline at end of file
diff --git a/Lang/C/Averages-Mean-time-of-day b/Lang/C/Averages-Mean-time-of-day
new file mode 120000
index 0000000000..212546de46
--- /dev/null
+++ b/Lang/C/Averages-Mean-time-of-day
@@ -0,0 +1 @@
+../../Task/Averages-Mean-time-of-day/C
\ No newline at end of file
diff --git a/Lang/C/Averages-Median b/Lang/C/Averages-Median
new file mode 120000
index 0000000000..5035bf8ca9
--- /dev/null
+++ b/Lang/C/Averages-Median
@@ -0,0 +1 @@
+../../Task/Averages-Median/C
\ No newline at end of file
diff --git a/Lang/C/Averages-Pythagorean-means b/Lang/C/Averages-Pythagorean-means
new file mode 120000
index 0000000000..a8756389aa
--- /dev/null
+++ b/Lang/C/Averages-Pythagorean-means
@@ -0,0 +1 @@
+../../Task/Averages-Pythagorean-means/C
\ No newline at end of file
diff --git a/Lang/C/Averages-Root-mean-square b/Lang/C/Averages-Root-mean-square
new file mode 120000
index 0000000000..1625e4325b
--- /dev/null
+++ b/Lang/C/Averages-Root-mean-square
@@ -0,0 +1 @@
+../../Task/Averages-Root-mean-square/C
\ No newline at end of file
diff --git a/Lang/C/Averages-Simple-moving-average b/Lang/C/Averages-Simple-moving-average
new file mode 120000
index 0000000000..5680fea65d
--- /dev/null
+++ b/Lang/C/Averages-Simple-moving-average
@@ -0,0 +1 @@
+../../Task/Averages-Simple-moving-average/C
\ No newline at end of file
diff --git a/Lang/Clojure/A+B b/Lang/Clojure/A+B
new file mode 120000
index 0000000000..5ff18e4897
--- /dev/null
+++ b/Lang/Clojure/A+B
@@ -0,0 +1 @@
+../../Task/A+B/Clojure
\ No newline at end of file
diff --git a/Lang/Clojure/Abstract-type b/Lang/Clojure/Abstract-type
new file mode 120000
index 0000000000..163145930c
--- /dev/null
+++ b/Lang/Clojure/Abstract-type
@@ -0,0 +1 @@
+../../Task/Abstract-type/Clojure
\ No newline at end of file
diff --git a/Lang/Clojure/Accumulator-factory b/Lang/Clojure/Accumulator-factory
new file mode 120000
index 0000000000..6d242a6840
--- /dev/null
+++ b/Lang/Clojure/Accumulator-factory
@@ -0,0 +1 @@
+../../Task/Accumulator-factory/Clojure
\ No newline at end of file
diff --git a/Lang/Clojure/Active-object b/Lang/Clojure/Active-object
new file mode 120000
index 0000000000..30b02e1866
--- /dev/null
+++ b/Lang/Clojure/Active-object
@@ -0,0 +1 @@
+../../Task/Active-object/Clojure
\ No newline at end of file
diff --git a/Lang/Clojure/Align-columns b/Lang/Clojure/Align-columns
new file mode 120000
index 0000000000..fa093cf949
--- /dev/null
+++ b/Lang/Clojure/Align-columns
@@ -0,0 +1 @@
+../../Task/Align-columns/Clojure
\ No newline at end of file
diff --git a/Lang/Clojure/Anagrams-Deranged-anagrams b/Lang/Clojure/Anagrams-Deranged-anagrams
new file mode 120000
index 0000000000..b62366de97
--- /dev/null
+++ b/Lang/Clojure/Anagrams-Deranged-anagrams
@@ -0,0 +1 @@
+../../Task/Anagrams-Deranged-anagrams/Clojure
\ No newline at end of file
diff --git a/Lang/Clojure/Animation b/Lang/Clojure/Animation
new file mode 120000
index 0000000000..3dc3c61896
--- /dev/null
+++ b/Lang/Clojure/Animation
@@ -0,0 +1 @@
+../../Task/Animation/Clojure
\ No newline at end of file
diff --git a/Lang/Clojure/Anonymous-recursion b/Lang/Clojure/Anonymous-recursion
new file mode 120000
index 0000000000..155d5ed703
--- /dev/null
+++ b/Lang/Clojure/Anonymous-recursion
@@ -0,0 +1 @@
+../../Task/Anonymous-recursion/Clojure
\ No newline at end of file
diff --git a/Lang/Clojure/Apply-a-callback-to-an-array b/Lang/Clojure/Apply-a-callback-to-an-array
new file mode 120000
index 0000000000..765467661e
--- /dev/null
+++ b/Lang/Clojure/Apply-a-callback-to-an-array
@@ -0,0 +1 @@
+../../Task/Apply-a-callback-to-an-array/Clojure
\ No newline at end of file
diff --git a/Lang/Clojure/Arbitrary-precision-integers-(included) b/Lang/Clojure/Arbitrary-precision-integers-(included)
new file mode 120000
index 0000000000..ab98cf4e31
--- /dev/null
+++ b/Lang/Clojure/Arbitrary-precision-integers-(included)
@@ -0,0 +1 @@
+../../Task/Arbitrary-precision-integers-(included)/Clojure
\ No newline at end of file
diff --git a/Lang/Clojure/Arithmetic-Rational b/Lang/Clojure/Arithmetic-Rational
new file mode 120000
index 0000000000..3bcf7dc296
--- /dev/null
+++ b/Lang/Clojure/Arithmetic-Rational
@@ -0,0 +1 @@
+../../Task/Arithmetic-Rational/Clojure
\ No newline at end of file
diff --git a/Lang/Clojure/Arithmetic-evaluation b/Lang/Clojure/Arithmetic-evaluation
new file mode 120000
index 0000000000..ef6cbf0bfc
--- /dev/null
+++ b/Lang/Clojure/Arithmetic-evaluation
@@ -0,0 +1 @@
+../../Task/Arithmetic-evaluation/Clojure
\ No newline at end of file
diff --git a/Lang/Clojure/Array-concatenation b/Lang/Clojure/Array-concatenation
new file mode 120000
index 0000000000..3a02454b13
--- /dev/null
+++ b/Lang/Clojure/Array-concatenation
@@ -0,0 +1 @@
+../../Task/Array-concatenation/Clojure
\ No newline at end of file
diff --git a/Lang/Clojure/Associative-array-Creation b/Lang/Clojure/Associative-array-Creation
new file mode 120000
index 0000000000..7e32910515
--- /dev/null
+++ b/Lang/Clojure/Associative-array-Creation
@@ -0,0 +1 @@
+../../Task/Associative-array-Creation/Clojure
\ No newline at end of file
diff --git a/Lang/Clojure/Associative-array-Iteration b/Lang/Clojure/Associative-array-Iteration
new file mode 120000
index 0000000000..66a4a4e1c0
--- /dev/null
+++ b/Lang/Clojure/Associative-array-Iteration
@@ -0,0 +1 @@
+../../Task/Associative-array-Iteration/Clojure
\ No newline at end of file
diff --git a/Lang/Clojure/Atomic-updates b/Lang/Clojure/Atomic-updates
new file mode 120000
index 0000000000..25bb5c356d
--- /dev/null
+++ b/Lang/Clojure/Atomic-updates
@@ -0,0 +1 @@
+../../Task/Atomic-updates/Clojure
\ No newline at end of file
diff --git a/Lang/Clojure/Averages-Arithmetic-mean b/Lang/Clojure/Averages-Arithmetic-mean
new file mode 120000
index 0000000000..3731529069
--- /dev/null
+++ b/Lang/Clojure/Averages-Arithmetic-mean
@@ -0,0 +1 @@
+../../Task/Averages-Arithmetic-mean/Clojure
\ No newline at end of file
diff --git a/Lang/Clojure/Averages-Median b/Lang/Clojure/Averages-Median
new file mode 120000
index 0000000000..2a72e570dc
--- /dev/null
+++ b/Lang/Clojure/Averages-Median
@@ -0,0 +1 @@
+../../Task/Averages-Median/Clojure
\ No newline at end of file
diff --git a/Lang/Clojure/Averages-Pythagorean-means b/Lang/Clojure/Averages-Pythagorean-means
new file mode 120000
index 0000000000..e657f6cc89
--- /dev/null
+++ b/Lang/Clojure/Averages-Pythagorean-means
@@ -0,0 +1 @@
+../../Task/Averages-Pythagorean-means/Clojure
\ No newline at end of file
diff --git a/Lang/Clojure/Averages-Root-mean-square b/Lang/Clojure/Averages-Root-mean-square
new file mode 120000
index 0000000000..5f9efd9f42
--- /dev/null
+++ b/Lang/Clojure/Averages-Root-mean-square
@@ -0,0 +1 @@
+../../Task/Averages-Root-mean-square/Clojure
\ No newline at end of file
diff --git a/Lang/Clojure/Averages-Simple-moving-average b/Lang/Clojure/Averages-Simple-moving-average
new file mode 120000
index 0000000000..05b2073ffa
--- /dev/null
+++ b/Lang/Clojure/Averages-Simple-moving-average
@@ -0,0 +1 @@
+../../Task/Averages-Simple-moving-average/Clojure
\ No newline at end of file
diff --git a/Lang/CoffeeScript/A+B b/Lang/CoffeeScript/A+B
new file mode 120000
index 0000000000..bf9fdbd57c
--- /dev/null
+++ b/Lang/CoffeeScript/A+B
@@ -0,0 +1 @@
+../../Task/A+B/CoffeeScript
\ No newline at end of file
diff --git a/Lang/CoffeeScript/Accumulator-factory b/Lang/CoffeeScript/Accumulator-factory
new file mode 120000
index 0000000000..eea0f9c9cc
--- /dev/null
+++ b/Lang/CoffeeScript/Accumulator-factory
@@ -0,0 +1 @@
+../../Task/Accumulator-factory/CoffeeScript
\ No newline at end of file
diff --git a/Lang/CoffeeScript/Add-a-variable-to-a-class-instance-at-runtime b/Lang/CoffeeScript/Add-a-variable-to-a-class-instance-at-runtime
new file mode 120000
index 0000000000..ebc8a4ec8e
--- /dev/null
+++ b/Lang/CoffeeScript/Add-a-variable-to-a-class-instance-at-runtime
@@ -0,0 +1 @@
+../../Task/Add-a-variable-to-a-class-instance-at-runtime/CoffeeScript
\ No newline at end of file
diff --git a/Lang/CoffeeScript/Align-columns b/Lang/CoffeeScript/Align-columns
new file mode 120000
index 0000000000..6bdbf1396f
--- /dev/null
+++ b/Lang/CoffeeScript/Align-columns
@@ -0,0 +1 @@
+../../Task/Align-columns/CoffeeScript
\ No newline at end of file
diff --git a/Lang/CoffeeScript/Anagrams-Deranged-anagrams b/Lang/CoffeeScript/Anagrams-Deranged-anagrams
new file mode 120000
index 0000000000..7579790a7b
--- /dev/null
+++ b/Lang/CoffeeScript/Anagrams-Deranged-anagrams
@@ -0,0 +1 @@
+../../Task/Anagrams-Deranged-anagrams/CoffeeScript
\ No newline at end of file
diff --git a/Lang/CoffeeScript/Anonymous-recursion b/Lang/CoffeeScript/Anonymous-recursion
new file mode 120000
index 0000000000..759653e38e
--- /dev/null
+++ b/Lang/CoffeeScript/Anonymous-recursion
@@ -0,0 +1 @@
+../../Task/Anonymous-recursion/CoffeeScript
\ No newline at end of file
diff --git a/Lang/CoffeeScript/Apply-a-callback-to-an-array b/Lang/CoffeeScript/Apply-a-callback-to-an-array
new file mode 120000
index 0000000000..ff3ef1c6cf
--- /dev/null
+++ b/Lang/CoffeeScript/Apply-a-callback-to-an-array
@@ -0,0 +1 @@
+../../Task/Apply-a-callback-to-an-array/CoffeeScript
\ No newline at end of file
diff --git a/Lang/CoffeeScript/Arithmetic-Complex b/Lang/CoffeeScript/Arithmetic-Complex
new file mode 120000
index 0000000000..fd88d74769
--- /dev/null
+++ b/Lang/CoffeeScript/Arithmetic-Complex
@@ -0,0 +1 @@
+../../Task/Arithmetic-Complex/CoffeeScript
\ No newline at end of file
diff --git a/Lang/CoffeeScript/Array-concatenation b/Lang/CoffeeScript/Array-concatenation
new file mode 120000
index 0000000000..f2bef02cab
--- /dev/null
+++ b/Lang/CoffeeScript/Array-concatenation
@@ -0,0 +1 @@
+../../Task/Array-concatenation/CoffeeScript
\ No newline at end of file
diff --git a/Lang/CoffeeScript/Associative-array-Iteration b/Lang/CoffeeScript/Associative-array-Iteration
new file mode 120000
index 0000000000..ba2ccebae4
--- /dev/null
+++ b/Lang/CoffeeScript/Associative-array-Iteration
@@ -0,0 +1 @@
+../../Task/Associative-array-Iteration/CoffeeScript
\ No newline at end of file
diff --git a/Lang/CoffeeScript/Averages-Arithmetic-mean b/Lang/CoffeeScript/Averages-Arithmetic-mean
new file mode 120000
index 0000000000..0033b6079f
--- /dev/null
+++ b/Lang/CoffeeScript/Averages-Arithmetic-mean
@@ -0,0 +1 @@
+../../Task/Averages-Arithmetic-mean/CoffeeScript
\ No newline at end of file
diff --git a/Lang/CoffeeScript/Averages-Root-mean-square b/Lang/CoffeeScript/Averages-Root-mean-square
new file mode 120000
index 0000000000..f135f029dd
--- /dev/null
+++ b/Lang/CoffeeScript/Averages-Root-mean-square
@@ -0,0 +1 @@
+../../Task/Averages-Root-mean-square/CoffeeScript
\ No newline at end of file
diff --git a/Lang/CoffeeScript/Averages-Simple-moving-average b/Lang/CoffeeScript/Averages-Simple-moving-average
new file mode 120000
index 0000000000..4d5389053a
--- /dev/null
+++ b/Lang/CoffeeScript/Averages-Simple-moving-average
@@ -0,0 +1 @@
+../../Task/Averages-Simple-moving-average/CoffeeScript
\ No newline at end of file
diff --git a/Lang/Dylan/Anonymous-recursion b/Lang/Dylan/Anonymous-recursion
new file mode 120000
index 0000000000..f32a353a3a
--- /dev/null
+++ b/Lang/Dylan/Anonymous-recursion
@@ -0,0 +1 @@
+../../Task/Anonymous-recursion/Dylan
\ No newline at end of file
diff --git a/Lang/Eiffel/A+B b/Lang/Eiffel/A+B
new file mode 120000
index 0000000000..f6b4b82eee
--- /dev/null
+++ b/Lang/Eiffel/A+B
@@ -0,0 +1 @@
+../../Task/A+B/Eiffel
\ No newline at end of file
diff --git a/Lang/Eiffel/Abstract-type b/Lang/Eiffel/Abstract-type
new file mode 120000
index 0000000000..cba4435f4b
--- /dev/null
+++ b/Lang/Eiffel/Abstract-type
@@ -0,0 +1 @@
+../../Task/Abstract-type/Eiffel
\ No newline at end of file
diff --git a/Lang/Erlang/A+B b/Lang/Erlang/A+B
new file mode 120000
index 0000000000..c73fac22d5
--- /dev/null
+++ b/Lang/Erlang/A+B
@@ -0,0 +1 @@
+../../Task/A+B/Erlang
\ No newline at end of file
diff --git a/Lang/Erlang/Accumulator-factory b/Lang/Erlang/Accumulator-factory
new file mode 120000
index 0000000000..2ba2b26093
--- /dev/null
+++ b/Lang/Erlang/Accumulator-factory
@@ -0,0 +1 @@
+../../Task/Accumulator-factory/Erlang
\ No newline at end of file
diff --git a/Lang/Erlang/Align-columns b/Lang/Erlang/Align-columns
new file mode 120000
index 0000000000..19897518c2
--- /dev/null
+++ b/Lang/Erlang/Align-columns
@@ -0,0 +1 @@
+../../Task/Align-columns/Erlang
\ No newline at end of file
diff --git a/Lang/Erlang/Apply-a-callback-to-an-array b/Lang/Erlang/Apply-a-callback-to-an-array
new file mode 120000
index 0000000000..a0d77b7e57
--- /dev/null
+++ b/Lang/Erlang/Apply-a-callback-to-an-array
@@ -0,0 +1 @@
+../../Task/Apply-a-callback-to-an-array/Erlang
\ No newline at end of file
diff --git a/Lang/Erlang/Arbitrary-precision-integers-(included) b/Lang/Erlang/Arbitrary-precision-integers-(included)
new file mode 120000
index 0000000000..5f91c4abcd
--- /dev/null
+++ b/Lang/Erlang/Arbitrary-precision-integers-(included)
@@ -0,0 +1 @@
+../../Task/Arbitrary-precision-integers-(included)/Erlang
\ No newline at end of file
diff --git a/Lang/Erlang/Arithmetic-Complex b/Lang/Erlang/Arithmetic-Complex
new file mode 120000
index 0000000000..dbbd3f41be
--- /dev/null
+++ b/Lang/Erlang/Arithmetic-Complex
@@ -0,0 +1 @@
+../../Task/Arithmetic-Complex/Erlang
\ No newline at end of file
diff --git a/Lang/Erlang/Arithmetic-geometric-mean b/Lang/Erlang/Arithmetic-geometric-mean
new file mode 120000
index 0000000000..f18242fe7a
--- /dev/null
+++ b/Lang/Erlang/Arithmetic-geometric-mean
@@ -0,0 +1 @@
+../../Task/Arithmetic-geometric-mean/Erlang
\ No newline at end of file
diff --git a/Lang/Erlang/Array-concatenation b/Lang/Erlang/Array-concatenation
new file mode 120000
index 0000000000..2be2132216
--- /dev/null
+++ b/Lang/Erlang/Array-concatenation
@@ -0,0 +1 @@
+../../Task/Array-concatenation/Erlang
\ No newline at end of file
diff --git a/Lang/Erlang/Associative-array-Creation b/Lang/Erlang/Associative-array-Creation
new file mode 120000
index 0000000000..86a1834249
--- /dev/null
+++ b/Lang/Erlang/Associative-array-Creation
@@ -0,0 +1 @@
+../../Task/Associative-array-Creation/Erlang
\ No newline at end of file
diff --git a/Lang/Erlang/Associative-array-Iteration b/Lang/Erlang/Associative-array-Iteration
new file mode 120000
index 0000000000..4bf5828251
--- /dev/null
+++ b/Lang/Erlang/Associative-array-Iteration
@@ -0,0 +1 @@
+../../Task/Associative-array-Iteration/Erlang
\ No newline at end of file
diff --git a/Lang/Erlang/Averages-Arithmetic-mean b/Lang/Erlang/Averages-Arithmetic-mean
new file mode 120000
index 0000000000..e073b0d249
--- /dev/null
+++ b/Lang/Erlang/Averages-Arithmetic-mean
@@ -0,0 +1 @@
+../../Task/Averages-Arithmetic-mean/Erlang
\ No newline at end of file
diff --git a/Lang/Erlang/Averages-Median b/Lang/Erlang/Averages-Median
new file mode 120000
index 0000000000..f85fc2e793
--- /dev/null
+++ b/Lang/Erlang/Averages-Median
@@ -0,0 +1 @@
+../../Task/Averages-Median/Erlang
\ No newline at end of file
diff --git a/Lang/Erlang/Averages-Pythagorean-means b/Lang/Erlang/Averages-Pythagorean-means
new file mode 120000
index 0000000000..f6ce90fb1a
--- /dev/null
+++ b/Lang/Erlang/Averages-Pythagorean-means
@@ -0,0 +1 @@
+../../Task/Averages-Pythagorean-means/Erlang
\ No newline at end of file
diff --git a/Lang/Erlang/Averages-Root-mean-square b/Lang/Erlang/Averages-Root-mean-square
new file mode 120000
index 0000000000..9ec7e13fa9
--- /dev/null
+++ b/Lang/Erlang/Averages-Root-mean-square
@@ -0,0 +1 @@
+../../Task/Averages-Root-mean-square/Erlang
\ No newline at end of file
diff --git a/Lang/Erlang/Averages-Simple-moving-average b/Lang/Erlang/Averages-Simple-moving-average
new file mode 120000
index 0000000000..8086d5a3bb
--- /dev/null
+++ b/Lang/Erlang/Averages-Simple-moving-average
@@ -0,0 +1 @@
+../../Task/Averages-Simple-moving-average/Erlang
\ No newline at end of file
diff --git a/Lang/Forth/A+B b/Lang/Forth/A+B
new file mode 120000
index 0000000000..0ff2533087
--- /dev/null
+++ b/Lang/Forth/A+B
@@ -0,0 +1 @@
+../../Task/A+B/Forth
\ No newline at end of file
diff --git a/Lang/Forth/Abstract-type b/Lang/Forth/Abstract-type
new file mode 120000
index 0000000000..a2b2f3dde3
--- /dev/null
+++ b/Lang/Forth/Abstract-type
@@ -0,0 +1 @@
+../../Task/Abstract-type/Forth
\ No newline at end of file
diff --git a/Lang/Forth/Accumulator-factory b/Lang/Forth/Accumulator-factory
new file mode 120000
index 0000000000..d2f5989d2b
--- /dev/null
+++ b/Lang/Forth/Accumulator-factory
@@ -0,0 +1 @@
+../../Task/Accumulator-factory/Forth
\ No newline at end of file
diff --git a/Lang/Forth/Align-columns b/Lang/Forth/Align-columns
new file mode 120000
index 0000000000..f5864372a3
--- /dev/null
+++ b/Lang/Forth/Align-columns
@@ -0,0 +1 @@
+../../Task/Align-columns/Forth
\ No newline at end of file
diff --git a/Lang/Forth/Anonymous-recursion b/Lang/Forth/Anonymous-recursion
new file mode 120000
index 0000000000..cf9f1cc70c
--- /dev/null
+++ b/Lang/Forth/Anonymous-recursion
@@ -0,0 +1 @@
+../../Task/Anonymous-recursion/Forth
\ No newline at end of file
diff --git a/Lang/Forth/Apply-a-callback-to-an-array b/Lang/Forth/Apply-a-callback-to-an-array
new file mode 120000
index 0000000000..781379b05b
--- /dev/null
+++ b/Lang/Forth/Apply-a-callback-to-an-array
@@ -0,0 +1 @@
+../../Task/Apply-a-callback-to-an-array/Forth
\ No newline at end of file
diff --git a/Lang/Forth/Arithmetic-Complex b/Lang/Forth/Arithmetic-Complex
new file mode 120000
index 0000000000..b6789ff0d6
--- /dev/null
+++ b/Lang/Forth/Arithmetic-Complex
@@ -0,0 +1 @@
+../../Task/Arithmetic-Complex/Forth
\ No newline at end of file
diff --git a/Lang/Forth/Arithmetic-Rational b/Lang/Forth/Arithmetic-Rational
new file mode 120000
index 0000000000..f3b8f4aca6
--- /dev/null
+++ b/Lang/Forth/Arithmetic-Rational
@@ -0,0 +1 @@
+../../Task/Arithmetic-Rational/Forth
\ No newline at end of file
diff --git a/Lang/Forth/Array-concatenation b/Lang/Forth/Array-concatenation
new file mode 120000
index 0000000000..7d190bc82f
--- /dev/null
+++ b/Lang/Forth/Array-concatenation
@@ -0,0 +1 @@
+../../Task/Array-concatenation/Forth
\ No newline at end of file
diff --git a/Lang/Forth/Associative-array-Creation b/Lang/Forth/Associative-array-Creation
new file mode 120000
index 0000000000..b63d82e7d0
--- /dev/null
+++ b/Lang/Forth/Associative-array-Creation
@@ -0,0 +1 @@
+../../Task/Associative-array-Creation/Forth
\ No newline at end of file
diff --git a/Lang/Forth/Associative-array-Iteration b/Lang/Forth/Associative-array-Iteration
new file mode 120000
index 0000000000..6876b064ab
--- /dev/null
+++ b/Lang/Forth/Associative-array-Iteration
@@ -0,0 +1 @@
+../../Task/Associative-array-Iteration/Forth
\ No newline at end of file
diff --git a/Lang/Forth/Averages-Arithmetic-mean b/Lang/Forth/Averages-Arithmetic-mean
new file mode 120000
index 0000000000..f34d2d226e
--- /dev/null
+++ b/Lang/Forth/Averages-Arithmetic-mean
@@ -0,0 +1 @@
+../../Task/Averages-Arithmetic-mean/Forth
\ No newline at end of file
diff --git a/Lang/Forth/Averages-Median b/Lang/Forth/Averages-Median
new file mode 120000
index 0000000000..dc45a10dc6
--- /dev/null
+++ b/Lang/Forth/Averages-Median
@@ -0,0 +1 @@
+../../Task/Averages-Median/Forth
\ No newline at end of file
diff --git a/Lang/Forth/Averages-Pythagorean-means b/Lang/Forth/Averages-Pythagorean-means
new file mode 120000
index 0000000000..dfecd91a5a
--- /dev/null
+++ b/Lang/Forth/Averages-Pythagorean-means
@@ -0,0 +1 @@
+../../Task/Averages-Pythagorean-means/Forth
\ No newline at end of file
diff --git a/Lang/Forth/Averages-Root-mean-square b/Lang/Forth/Averages-Root-mean-square
new file mode 120000
index 0000000000..b3fcda203b
--- /dev/null
+++ b/Lang/Forth/Averages-Root-mean-square
@@ -0,0 +1 @@
+../../Task/Averages-Root-mean-square/Forth
\ No newline at end of file
diff --git a/Lang/Forth/Averages-Simple-moving-average b/Lang/Forth/Averages-Simple-moving-average
new file mode 120000
index 0000000000..3172ed2903
--- /dev/null
+++ b/Lang/Forth/Averages-Simple-moving-average
@@ -0,0 +1 @@
+../../Task/Averages-Simple-moving-average/Forth
\ No newline at end of file
diff --git a/Lang/Fortran/A+B b/Lang/Fortran/A+B
new file mode 120000
index 0000000000..6e842f8105
--- /dev/null
+++ b/Lang/Fortran/A+B
@@ -0,0 +1 @@
+../../Task/A+B/Fortran
\ No newline at end of file
diff --git a/Lang/Fortran/Address-of-a-variable b/Lang/Fortran/Address-of-a-variable
new file mode 120000
index 0000000000..cb0adc1aad
--- /dev/null
+++ b/Lang/Fortran/Address-of-a-variable
@@ -0,0 +1 @@
+../../Task/Address-of-a-variable/Fortran
\ No newline at end of file
diff --git a/Lang/Fortran/Anonymous-recursion b/Lang/Fortran/Anonymous-recursion
new file mode 120000
index 0000000000..d25f39185b
--- /dev/null
+++ b/Lang/Fortran/Anonymous-recursion
@@ -0,0 +1 @@
+../../Task/Anonymous-recursion/Fortran
\ No newline at end of file
diff --git a/Lang/Fortran/Apply-a-callback-to-an-array b/Lang/Fortran/Apply-a-callback-to-an-array
new file mode 120000
index 0000000000..048b58a73a
--- /dev/null
+++ b/Lang/Fortran/Apply-a-callback-to-an-array
@@ -0,0 +1 @@
+../../Task/Apply-a-callback-to-an-array/Fortran
\ No newline at end of file
diff --git a/Lang/Fortran/Arithmetic-Complex b/Lang/Fortran/Arithmetic-Complex
new file mode 120000
index 0000000000..3a4c914340
--- /dev/null
+++ b/Lang/Fortran/Arithmetic-Complex
@@ -0,0 +1 @@
+../../Task/Arithmetic-Complex/Fortran
\ No newline at end of file
diff --git a/Lang/Fortran/Arithmetic-Rational b/Lang/Fortran/Arithmetic-Rational
new file mode 120000
index 0000000000..7521cd6d85
--- /dev/null
+++ b/Lang/Fortran/Arithmetic-Rational
@@ -0,0 +1 @@
+../../Task/Arithmetic-Rational/Fortran
\ No newline at end of file
diff --git a/Lang/Fortran/Arithmetic-geometric-mean b/Lang/Fortran/Arithmetic-geometric-mean
new file mode 120000
index 0000000000..0c38a807b7
--- /dev/null
+++ b/Lang/Fortran/Arithmetic-geometric-mean
@@ -0,0 +1 @@
+../../Task/Arithmetic-geometric-mean/Fortran
\ No newline at end of file
diff --git a/Lang/Fortran/Array-concatenation b/Lang/Fortran/Array-concatenation
new file mode 120000
index 0000000000..807b2bb592
--- /dev/null
+++ b/Lang/Fortran/Array-concatenation
@@ -0,0 +1 @@
+../../Task/Array-concatenation/Fortran
\ No newline at end of file
diff --git a/Lang/Fortran/Averages-Arithmetic-mean b/Lang/Fortran/Averages-Arithmetic-mean
new file mode 120000
index 0000000000..7830e0f572
--- /dev/null
+++ b/Lang/Fortran/Averages-Arithmetic-mean
@@ -0,0 +1 @@
+../../Task/Averages-Arithmetic-mean/Fortran
\ No newline at end of file
diff --git a/Lang/Fortran/Averages-Median b/Lang/Fortran/Averages-Median
new file mode 120000
index 0000000000..be6afd15e4
--- /dev/null
+++ b/Lang/Fortran/Averages-Median
@@ -0,0 +1 @@
+../../Task/Averages-Median/Fortran
\ No newline at end of file
diff --git a/Lang/Fortran/Averages-Pythagorean-means b/Lang/Fortran/Averages-Pythagorean-means
new file mode 120000
index 0000000000..ceb24af9e4
--- /dev/null
+++ b/Lang/Fortran/Averages-Pythagorean-means
@@ -0,0 +1 @@
+../../Task/Averages-Pythagorean-means/Fortran
\ No newline at end of file
diff --git a/Lang/Fortran/Averages-Root-mean-square b/Lang/Fortran/Averages-Root-mean-square
new file mode 120000
index 0000000000..ef91f9d2eb
--- /dev/null
+++ b/Lang/Fortran/Averages-Root-mean-square
@@ -0,0 +1 @@
+../../Task/Averages-Root-mean-square/Fortran
\ No newline at end of file
diff --git a/Lang/Fortran/Averages-Simple-moving-average b/Lang/Fortran/Averages-Simple-moving-average
new file mode 120000
index 0000000000..5a6047db03
--- /dev/null
+++ b/Lang/Fortran/Averages-Simple-moving-average
@@ -0,0 +1 @@
+../../Task/Averages-Simple-moving-average/Fortran
\ No newline at end of file
diff --git a/Lang/Go/A+B b/Lang/Go/A+B
new file mode 120000
index 0000000000..f50cd5fa8b
--- /dev/null
+++ b/Lang/Go/A+B
@@ -0,0 +1 @@
+../../Task/A+B/Go
\ No newline at end of file
diff --git a/Lang/Go/Abstract-type b/Lang/Go/Abstract-type
new file mode 120000
index 0000000000..35dc807f53
--- /dev/null
+++ b/Lang/Go/Abstract-type
@@ -0,0 +1 @@
+../../Task/Abstract-type/Go
\ No newline at end of file
diff --git a/Lang/Go/Accumulator-factory b/Lang/Go/Accumulator-factory
new file mode 120000
index 0000000000..18796abff8
--- /dev/null
+++ b/Lang/Go/Accumulator-factory
@@ -0,0 +1 @@
+../../Task/Accumulator-factory/Go
\ No newline at end of file
diff --git a/Lang/Go/Active-object b/Lang/Go/Active-object
new file mode 120000
index 0000000000..f0637827c4
--- /dev/null
+++ b/Lang/Go/Active-object
@@ -0,0 +1 @@
+../../Task/Active-object/Go
\ No newline at end of file
diff --git a/Lang/Go/Address-of-a-variable b/Lang/Go/Address-of-a-variable
new file mode 120000
index 0000000000..9142b07731
--- /dev/null
+++ b/Lang/Go/Address-of-a-variable
@@ -0,0 +1 @@
+../../Task/Address-of-a-variable/Go
\ No newline at end of file
diff --git a/Lang/Go/Align-columns b/Lang/Go/Align-columns
new file mode 120000
index 0000000000..ec2c1837ad
--- /dev/null
+++ b/Lang/Go/Align-columns
@@ -0,0 +1 @@
+../../Task/Align-columns/Go
\ No newline at end of file
diff --git a/Lang/Go/Anagrams-Deranged-anagrams b/Lang/Go/Anagrams-Deranged-anagrams
new file mode 120000
index 0000000000..d4e014a083
--- /dev/null
+++ b/Lang/Go/Anagrams-Deranged-anagrams
@@ -0,0 +1 @@
+../../Task/Anagrams-Deranged-anagrams/Go
\ No newline at end of file
diff --git a/Lang/Go/Anonymous-recursion b/Lang/Go/Anonymous-recursion
new file mode 120000
index 0000000000..193d6971dc
--- /dev/null
+++ b/Lang/Go/Anonymous-recursion
@@ -0,0 +1 @@
+../../Task/Anonymous-recursion/Go
\ No newline at end of file
diff --git a/Lang/Go/Apply-a-callback-to-an-array b/Lang/Go/Apply-a-callback-to-an-array
new file mode 120000
index 0000000000..8e31365508
--- /dev/null
+++ b/Lang/Go/Apply-a-callback-to-an-array
@@ -0,0 +1 @@
+../../Task/Apply-a-callback-to-an-array/Go
\ No newline at end of file
diff --git a/Lang/Go/Arbitrary-precision-integers-(included) b/Lang/Go/Arbitrary-precision-integers-(included)
new file mode 120000
index 0000000000..a05728f01f
--- /dev/null
+++ b/Lang/Go/Arbitrary-precision-integers-(included)
@@ -0,0 +1 @@
+../../Task/Arbitrary-precision-integers-(included)/Go
\ No newline at end of file
diff --git a/Lang/Go/Arithmetic-Complex b/Lang/Go/Arithmetic-Complex
new file mode 120000
index 0000000000..2982f87714
--- /dev/null
+++ b/Lang/Go/Arithmetic-Complex
@@ -0,0 +1 @@
+../../Task/Arithmetic-Complex/Go
\ No newline at end of file
diff --git a/Lang/Go/Arithmetic-Rational b/Lang/Go/Arithmetic-Rational
new file mode 120000
index 0000000000..4bfc56a4ea
--- /dev/null
+++ b/Lang/Go/Arithmetic-Rational
@@ -0,0 +1 @@
+../../Task/Arithmetic-Rational/Go
\ No newline at end of file
diff --git a/Lang/Go/Arithmetic-geometric-mean b/Lang/Go/Arithmetic-geometric-mean
new file mode 120000
index 0000000000..e48a017c78
--- /dev/null
+++ b/Lang/Go/Arithmetic-geometric-mean
@@ -0,0 +1 @@
+../../Task/Arithmetic-geometric-mean/Go
\ No newline at end of file
diff --git a/Lang/Go/Array-concatenation b/Lang/Go/Array-concatenation
new file mode 120000
index 0000000000..5a00335cb4
--- /dev/null
+++ b/Lang/Go/Array-concatenation
@@ -0,0 +1 @@
+../../Task/Array-concatenation/Go
\ No newline at end of file
diff --git a/Lang/Go/Associative-array-Creation b/Lang/Go/Associative-array-Creation
new file mode 120000
index 0000000000..14142f25bd
--- /dev/null
+++ b/Lang/Go/Associative-array-Creation
@@ -0,0 +1 @@
+../../Task/Associative-array-Creation/Go
\ No newline at end of file
diff --git a/Lang/Go/Associative-array-Iteration b/Lang/Go/Associative-array-Iteration
new file mode 120000
index 0000000000..24fd7384e4
--- /dev/null
+++ b/Lang/Go/Associative-array-Iteration
@@ -0,0 +1 @@
+../../Task/Associative-array-Iteration/Go
\ No newline at end of file
diff --git a/Lang/Go/Atomic-updates b/Lang/Go/Atomic-updates
new file mode 120000
index 0000000000..ec3c23c76d
--- /dev/null
+++ b/Lang/Go/Atomic-updates
@@ -0,0 +1 @@
+../../Task/Atomic-updates/Go
\ No newline at end of file
diff --git a/Lang/Go/Averages-Arithmetic-mean b/Lang/Go/Averages-Arithmetic-mean
new file mode 120000
index 0000000000..9c1496cb50
--- /dev/null
+++ b/Lang/Go/Averages-Arithmetic-mean
@@ -0,0 +1 @@
+../../Task/Averages-Arithmetic-mean/Go
\ No newline at end of file
diff --git a/Lang/Go/Averages-Mean-angle b/Lang/Go/Averages-Mean-angle
new file mode 120000
index 0000000000..53f5034e2c
--- /dev/null
+++ b/Lang/Go/Averages-Mean-angle
@@ -0,0 +1 @@
+../../Task/Averages-Mean-angle/Go
\ No newline at end of file
diff --git a/Lang/Go/Averages-Mean-time-of-day b/Lang/Go/Averages-Mean-time-of-day
new file mode 120000
index 0000000000..0233cd4219
--- /dev/null
+++ b/Lang/Go/Averages-Mean-time-of-day
@@ -0,0 +1 @@
+../../Task/Averages-Mean-time-of-day/Go
\ No newline at end of file
diff --git a/Lang/Go/Averages-Median b/Lang/Go/Averages-Median
new file mode 120000
index 0000000000..db92d2843a
--- /dev/null
+++ b/Lang/Go/Averages-Median
@@ -0,0 +1 @@
+../../Task/Averages-Median/Go
\ No newline at end of file
diff --git a/Lang/Go/Averages-Pythagorean-means b/Lang/Go/Averages-Pythagorean-means
new file mode 120000
index 0000000000..136aa9c40d
--- /dev/null
+++ b/Lang/Go/Averages-Pythagorean-means
@@ -0,0 +1 @@
+../../Task/Averages-Pythagorean-means/Go
\ No newline at end of file
diff --git a/Lang/Go/Averages-Root-mean-square b/Lang/Go/Averages-Root-mean-square
new file mode 120000
index 0000000000..d89aad5e64
--- /dev/null
+++ b/Lang/Go/Averages-Root-mean-square
@@ -0,0 +1 @@
+../../Task/Averages-Root-mean-square/Go
\ No newline at end of file
diff --git a/Lang/Go/Averages-Simple-moving-average b/Lang/Go/Averages-Simple-moving-average
new file mode 120000
index 0000000000..1dcd6e9083
--- /dev/null
+++ b/Lang/Go/Averages-Simple-moving-average
@@ -0,0 +1 @@
+../../Task/Averages-Simple-moving-average/Go
\ No newline at end of file
diff --git a/Lang/Haskell/A+B b/Lang/Haskell/A+B
new file mode 120000
index 0000000000..4ef9ea0b30
--- /dev/null
+++ b/Lang/Haskell/A+B
@@ -0,0 +1 @@
+../../Task/A+B/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/Abstract-type b/Lang/Haskell/Abstract-type
new file mode 120000
index 0000000000..b004105026
--- /dev/null
+++ b/Lang/Haskell/Abstract-type
@@ -0,0 +1 @@
+../../Task/Abstract-type/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/Accumulator-factory b/Lang/Haskell/Accumulator-factory
new file mode 120000
index 0000000000..8bafd17c7a
--- /dev/null
+++ b/Lang/Haskell/Accumulator-factory
@@ -0,0 +1 @@
+../../Task/Accumulator-factory/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/Active-object b/Lang/Haskell/Active-object
new file mode 120000
index 0000000000..a5ceb4e035
--- /dev/null
+++ b/Lang/Haskell/Active-object
@@ -0,0 +1 @@
+../../Task/Active-object/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/Align-columns b/Lang/Haskell/Align-columns
new file mode 120000
index 0000000000..786130092e
--- /dev/null
+++ b/Lang/Haskell/Align-columns
@@ -0,0 +1 @@
+../../Task/Align-columns/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/Anagrams-Deranged-anagrams b/Lang/Haskell/Anagrams-Deranged-anagrams
new file mode 120000
index 0000000000..f16d2e850d
--- /dev/null
+++ b/Lang/Haskell/Anagrams-Deranged-anagrams
@@ -0,0 +1 @@
+../../Task/Anagrams-Deranged-anagrams/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/Animation b/Lang/Haskell/Animation
new file mode 120000
index 0000000000..86ff27774a
--- /dev/null
+++ b/Lang/Haskell/Animation
@@ -0,0 +1 @@
+../../Task/Animation/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/Anonymous-recursion b/Lang/Haskell/Anonymous-recursion
new file mode 120000
index 0000000000..2dee91d64f
--- /dev/null
+++ b/Lang/Haskell/Anonymous-recursion
@@ -0,0 +1 @@
+../../Task/Anonymous-recursion/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/Apply-a-callback-to-an-array b/Lang/Haskell/Apply-a-callback-to-an-array
new file mode 120000
index 0000000000..2fb7e5e070
--- /dev/null
+++ b/Lang/Haskell/Apply-a-callback-to-an-array
@@ -0,0 +1 @@
+../../Task/Apply-a-callback-to-an-array/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/Arbitrary-precision-integers-(included) b/Lang/Haskell/Arbitrary-precision-integers-(included)
new file mode 120000
index 0000000000..3b0b103363
--- /dev/null
+++ b/Lang/Haskell/Arbitrary-precision-integers-(included)
@@ -0,0 +1 @@
+../../Task/Arbitrary-precision-integers-(included)/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/Arithmetic-Complex b/Lang/Haskell/Arithmetic-Complex
new file mode 120000
index 0000000000..4320bb3437
--- /dev/null
+++ b/Lang/Haskell/Arithmetic-Complex
@@ -0,0 +1 @@
+../../Task/Arithmetic-Complex/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/Arithmetic-Rational b/Lang/Haskell/Arithmetic-Rational
new file mode 120000
index 0000000000..292b942337
--- /dev/null
+++ b/Lang/Haskell/Arithmetic-Rational
@@ -0,0 +1 @@
+../../Task/Arithmetic-Rational/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/Arithmetic-evaluation b/Lang/Haskell/Arithmetic-evaluation
new file mode 120000
index 0000000000..d20f20aad4
--- /dev/null
+++ b/Lang/Haskell/Arithmetic-evaluation
@@ -0,0 +1 @@
+../../Task/Arithmetic-evaluation/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/Arithmetic-geometric-mean b/Lang/Haskell/Arithmetic-geometric-mean
new file mode 120000
index 0000000000..2a3c52118e
--- /dev/null
+++ b/Lang/Haskell/Arithmetic-geometric-mean
@@ -0,0 +1 @@
+../../Task/Arithmetic-geometric-mean/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/Array-concatenation b/Lang/Haskell/Array-concatenation
new file mode 120000
index 0000000000..9217936871
--- /dev/null
+++ b/Lang/Haskell/Array-concatenation
@@ -0,0 +1 @@
+../../Task/Array-concatenation/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/Associative-array-Creation b/Lang/Haskell/Associative-array-Creation
new file mode 120000
index 0000000000..b69466f0e3
--- /dev/null
+++ b/Lang/Haskell/Associative-array-Creation
@@ -0,0 +1 @@
+../../Task/Associative-array-Creation/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/Associative-array-Iteration b/Lang/Haskell/Associative-array-Iteration
new file mode 120000
index 0000000000..623a77ccda
--- /dev/null
+++ b/Lang/Haskell/Associative-array-Iteration
@@ -0,0 +1 @@
+../../Task/Associative-array-Iteration/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/Atomic-updates b/Lang/Haskell/Atomic-updates
new file mode 120000
index 0000000000..670fcd5c8d
--- /dev/null
+++ b/Lang/Haskell/Atomic-updates
@@ -0,0 +1 @@
+../../Task/Atomic-updates/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/Averages-Arithmetic-mean b/Lang/Haskell/Averages-Arithmetic-mean
new file mode 120000
index 0000000000..879c35aafa
--- /dev/null
+++ b/Lang/Haskell/Averages-Arithmetic-mean
@@ -0,0 +1 @@
+../../Task/Averages-Arithmetic-mean/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/Averages-Mean-angle b/Lang/Haskell/Averages-Mean-angle
new file mode 120000
index 0000000000..4aa04517cb
--- /dev/null
+++ b/Lang/Haskell/Averages-Mean-angle
@@ -0,0 +1 @@
+../../Task/Averages-Mean-angle/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/Averages-Median b/Lang/Haskell/Averages-Median
new file mode 120000
index 0000000000..106da7089d
--- /dev/null
+++ b/Lang/Haskell/Averages-Median
@@ -0,0 +1 @@
+../../Task/Averages-Median/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/Averages-Pythagorean-means b/Lang/Haskell/Averages-Pythagorean-means
new file mode 120000
index 0000000000..a1176c7e55
--- /dev/null
+++ b/Lang/Haskell/Averages-Pythagorean-means
@@ -0,0 +1 @@
+../../Task/Averages-Pythagorean-means/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/Averages-Root-mean-square b/Lang/Haskell/Averages-Root-mean-square
new file mode 120000
index 0000000000..68f049caad
--- /dev/null
+++ b/Lang/Haskell/Averages-Root-mean-square
@@ -0,0 +1 @@
+../../Task/Averages-Root-mean-square/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/Averages-Simple-moving-average b/Lang/Haskell/Averages-Simple-moving-average
new file mode 120000
index 0000000000..4fc38a0a9a
--- /dev/null
+++ b/Lang/Haskell/Averages-Simple-moving-average
@@ -0,0 +1 @@
+../../Task/Averages-Simple-moving-average/Haskell
\ No newline at end of file
diff --git a/Lang/Java/A+B b/Lang/Java/A+B
new file mode 120000
index 0000000000..99be2f5987
--- /dev/null
+++ b/Lang/Java/A+B
@@ -0,0 +1 @@
+../../Task/A+B/Java
\ No newline at end of file
diff --git a/Lang/Java/Abstract-type b/Lang/Java/Abstract-type
new file mode 120000
index 0000000000..db0a530906
--- /dev/null
+++ b/Lang/Java/Abstract-type
@@ -0,0 +1 @@
+../../Task/Abstract-type/Java
\ No newline at end of file
diff --git a/Lang/Java/Accumulator-factory b/Lang/Java/Accumulator-factory
new file mode 120000
index 0000000000..445e1942ee
--- /dev/null
+++ b/Lang/Java/Accumulator-factory
@@ -0,0 +1 @@
+../../Task/Accumulator-factory/Java
\ No newline at end of file
diff --git a/Lang/Java/Active-Directory-Connect b/Lang/Java/Active-Directory-Connect
new file mode 120000
index 0000000000..fe92739773
--- /dev/null
+++ b/Lang/Java/Active-Directory-Connect
@@ -0,0 +1 @@
+../../Task/Active-Directory-Connect/Java
\ No newline at end of file
diff --git a/Lang/Java/Active-Directory-Search-for-a-user b/Lang/Java/Active-Directory-Search-for-a-user
new file mode 120000
index 0000000000..4c6e38900c
--- /dev/null
+++ b/Lang/Java/Active-Directory-Search-for-a-user
@@ -0,0 +1 @@
+../../Task/Active-Directory-Search-for-a-user/Java
\ No newline at end of file
diff --git a/Lang/Java/Anagrams-Deranged-anagrams b/Lang/Java/Anagrams-Deranged-anagrams
new file mode 120000
index 0000000000..5f191291a6
--- /dev/null
+++ b/Lang/Java/Anagrams-Deranged-anagrams
@@ -0,0 +1 @@
+../../Task/Anagrams-Deranged-anagrams/Java
\ No newline at end of file
diff --git a/Lang/Java/Animation b/Lang/Java/Animation
new file mode 120000
index 0000000000..209f91cc83
--- /dev/null
+++ b/Lang/Java/Animation
@@ -0,0 +1 @@
+../../Task/Animation/Java
\ No newline at end of file
diff --git a/Lang/Java/Anonymous-recursion b/Lang/Java/Anonymous-recursion
new file mode 120000
index 0000000000..c192f6db56
--- /dev/null
+++ b/Lang/Java/Anonymous-recursion
@@ -0,0 +1 @@
+../../Task/Anonymous-recursion/Java
\ No newline at end of file
diff --git a/Lang/Java/Apply-a-callback-to-an-array b/Lang/Java/Apply-a-callback-to-an-array
new file mode 120000
index 0000000000..4f53680b0d
--- /dev/null
+++ b/Lang/Java/Apply-a-callback-to-an-array
@@ -0,0 +1 @@
+../../Task/Apply-a-callback-to-an-array/Java
\ No newline at end of file
diff --git a/Lang/Java/Arbitrary-precision-integers-(included) b/Lang/Java/Arbitrary-precision-integers-(included)
new file mode 120000
index 0000000000..2f66d23776
--- /dev/null
+++ b/Lang/Java/Arbitrary-precision-integers-(included)
@@ -0,0 +1 @@
+../../Task/Arbitrary-precision-integers-(included)/Java
\ No newline at end of file
diff --git a/Lang/Java/Arithmetic-Complex b/Lang/Java/Arithmetic-Complex
new file mode 120000
index 0000000000..264c358291
--- /dev/null
+++ b/Lang/Java/Arithmetic-Complex
@@ -0,0 +1 @@
+../../Task/Arithmetic-Complex/Java
\ No newline at end of file
diff --git a/Lang/Java/Arithmetic-Rational b/Lang/Java/Arithmetic-Rational
new file mode 120000
index 0000000000..aaa48e8d9a
--- /dev/null
+++ b/Lang/Java/Arithmetic-Rational
@@ -0,0 +1 @@
+../../Task/Arithmetic-Rational/Java
\ No newline at end of file
diff --git a/Lang/Java/Arithmetic-evaluation b/Lang/Java/Arithmetic-evaluation
new file mode 120000
index 0000000000..38a0a7b93a
--- /dev/null
+++ b/Lang/Java/Arithmetic-evaluation
@@ -0,0 +1 @@
+../../Task/Arithmetic-evaluation/Java
\ No newline at end of file
diff --git a/Lang/Java/Arithmetic-geometric-mean b/Lang/Java/Arithmetic-geometric-mean
new file mode 120000
index 0000000000..d07b667d51
--- /dev/null
+++ b/Lang/Java/Arithmetic-geometric-mean
@@ -0,0 +1 @@
+../../Task/Arithmetic-geometric-mean/Java
\ No newline at end of file
diff --git a/Lang/Java/Array-concatenation b/Lang/Java/Array-concatenation
new file mode 120000
index 0000000000..35df6d22c0
--- /dev/null
+++ b/Lang/Java/Array-concatenation
@@ -0,0 +1 @@
+../../Task/Array-concatenation/Java
\ No newline at end of file
diff --git a/Lang/Java/Associative-array-Creation b/Lang/Java/Associative-array-Creation
new file mode 120000
index 0000000000..215346a0b0
--- /dev/null
+++ b/Lang/Java/Associative-array-Creation
@@ -0,0 +1 @@
+../../Task/Associative-array-Creation/Java
\ No newline at end of file
diff --git a/Lang/Java/Associative-array-Iteration b/Lang/Java/Associative-array-Iteration
new file mode 120000
index 0000000000..2a72ef9a59
--- /dev/null
+++ b/Lang/Java/Associative-array-Iteration
@@ -0,0 +1 @@
+../../Task/Associative-array-Iteration/Java
\ No newline at end of file
diff --git a/Lang/Java/Atomic-updates b/Lang/Java/Atomic-updates
new file mode 120000
index 0000000000..43aa9c2a26
--- /dev/null
+++ b/Lang/Java/Atomic-updates
@@ -0,0 +1 @@
+../../Task/Atomic-updates/Java
\ No newline at end of file
diff --git a/Lang/Java/Averages-Arithmetic-mean b/Lang/Java/Averages-Arithmetic-mean
new file mode 120000
index 0000000000..fea91ead72
--- /dev/null
+++ b/Lang/Java/Averages-Arithmetic-mean
@@ -0,0 +1 @@
+../../Task/Averages-Arithmetic-mean/Java
\ No newline at end of file
diff --git a/Lang/Java/Averages-Median b/Lang/Java/Averages-Median
new file mode 120000
index 0000000000..429143dc1d
--- /dev/null
+++ b/Lang/Java/Averages-Median
@@ -0,0 +1 @@
+../../Task/Averages-Median/Java
\ No newline at end of file
diff --git a/Lang/Java/Averages-Pythagorean-means b/Lang/Java/Averages-Pythagorean-means
new file mode 120000
index 0000000000..7c7872e383
--- /dev/null
+++ b/Lang/Java/Averages-Pythagorean-means
@@ -0,0 +1 @@
+../../Task/Averages-Pythagorean-means/Java
\ No newline at end of file
diff --git a/Lang/Java/Averages-Root-mean-square b/Lang/Java/Averages-Root-mean-square
new file mode 120000
index 0000000000..b06792dbd7
--- /dev/null
+++ b/Lang/Java/Averages-Root-mean-square
@@ -0,0 +1 @@
+../../Task/Averages-Root-mean-square/Java
\ No newline at end of file
diff --git a/Lang/Java/Averages-Simple-moving-average b/Lang/Java/Averages-Simple-moving-average
new file mode 120000
index 0000000000..c9818887b6
--- /dev/null
+++ b/Lang/Java/Averages-Simple-moving-average
@@ -0,0 +1 @@
+../../Task/Averages-Simple-moving-average/Java
\ No newline at end of file
diff --git a/Lang/JavaScript/A+B b/Lang/JavaScript/A+B
new file mode 120000
index 0000000000..34924358ef
--- /dev/null
+++ b/Lang/JavaScript/A+B
@@ -0,0 +1 @@
+../../Task/A+B/JavaScript
\ No newline at end of file
diff --git a/Lang/JavaScript/Accumulator-factory b/Lang/JavaScript/Accumulator-factory
new file mode 120000
index 0000000000..f27a648e2c
--- /dev/null
+++ b/Lang/JavaScript/Accumulator-factory
@@ -0,0 +1 @@
+../../Task/Accumulator-factory/JavaScript
\ No newline at end of file
diff --git a/Lang/JavaScript/Active-object b/Lang/JavaScript/Active-object
new file mode 120000
index 0000000000..fc0ebec758
--- /dev/null
+++ b/Lang/JavaScript/Active-object
@@ -0,0 +1 @@
+../../Task/Active-object/JavaScript
\ No newline at end of file
diff --git a/Lang/JavaScript/Add-a-variable-to-a-class-instance-at-runtime b/Lang/JavaScript/Add-a-variable-to-a-class-instance-at-runtime
new file mode 120000
index 0000000000..0365ad4369
--- /dev/null
+++ b/Lang/JavaScript/Add-a-variable-to-a-class-instance-at-runtime
@@ -0,0 +1 @@
+../../Task/Add-a-variable-to-a-class-instance-at-runtime/JavaScript
\ No newline at end of file
diff --git a/Lang/JavaScript/Align-columns b/Lang/JavaScript/Align-columns
new file mode 120000
index 0000000000..a79f249841
--- /dev/null
+++ b/Lang/JavaScript/Align-columns
@@ -0,0 +1 @@
+../../Task/Align-columns/JavaScript
\ No newline at end of file
diff --git a/Lang/JavaScript/Anagrams-Deranged-anagrams b/Lang/JavaScript/Anagrams-Deranged-anagrams
new file mode 120000
index 0000000000..896f10eb78
--- /dev/null
+++ b/Lang/JavaScript/Anagrams-Deranged-anagrams
@@ -0,0 +1 @@
+../../Task/Anagrams-Deranged-anagrams/JavaScript
\ No newline at end of file
diff --git a/Lang/JavaScript/Animation b/Lang/JavaScript/Animation
new file mode 120000
index 0000000000..c4e6d16e74
--- /dev/null
+++ b/Lang/JavaScript/Animation
@@ -0,0 +1 @@
+../../Task/Animation/JavaScript
\ No newline at end of file
diff --git a/Lang/JavaScript/Anonymous-recursion b/Lang/JavaScript/Anonymous-recursion
new file mode 120000
index 0000000000..4161a5ad0a
--- /dev/null
+++ b/Lang/JavaScript/Anonymous-recursion
@@ -0,0 +1 @@
+../../Task/Anonymous-recursion/JavaScript
\ No newline at end of file
diff --git a/Lang/JavaScript/Apply-a-callback-to-an-array b/Lang/JavaScript/Apply-a-callback-to-an-array
new file mode 120000
index 0000000000..b61b614b34
--- /dev/null
+++ b/Lang/JavaScript/Apply-a-callback-to-an-array
@@ -0,0 +1 @@
+../../Task/Apply-a-callback-to-an-array/JavaScript
\ No newline at end of file
diff --git a/Lang/JavaScript/Arithmetic-Complex b/Lang/JavaScript/Arithmetic-Complex
new file mode 120000
index 0000000000..b124932b19
--- /dev/null
+++ b/Lang/JavaScript/Arithmetic-Complex
@@ -0,0 +1 @@
+../../Task/Arithmetic-Complex/JavaScript
\ No newline at end of file
diff --git a/Lang/JavaScript/Arithmetic-evaluation b/Lang/JavaScript/Arithmetic-evaluation
new file mode 120000
index 0000000000..6a4263b5c2
--- /dev/null
+++ b/Lang/JavaScript/Arithmetic-evaluation
@@ -0,0 +1 @@
+../../Task/Arithmetic-evaluation/JavaScript
\ No newline at end of file
diff --git a/Lang/JavaScript/Array-concatenation b/Lang/JavaScript/Array-concatenation
new file mode 120000
index 0000000000..fd6829201d
--- /dev/null
+++ b/Lang/JavaScript/Array-concatenation
@@ -0,0 +1 @@
+../../Task/Array-concatenation/JavaScript
\ No newline at end of file
diff --git a/Lang/JavaScript/Associative-array-Creation b/Lang/JavaScript/Associative-array-Creation
new file mode 120000
index 0000000000..9a576fc8a4
--- /dev/null
+++ b/Lang/JavaScript/Associative-array-Creation
@@ -0,0 +1 @@
+../../Task/Associative-array-Creation/JavaScript
\ No newline at end of file
diff --git a/Lang/JavaScript/Associative-array-Iteration b/Lang/JavaScript/Associative-array-Iteration
new file mode 120000
index 0000000000..2362596f56
--- /dev/null
+++ b/Lang/JavaScript/Associative-array-Iteration
@@ -0,0 +1 @@
+../../Task/Associative-array-Iteration/JavaScript
\ No newline at end of file
diff --git a/Lang/JavaScript/Averages-Arithmetic-mean b/Lang/JavaScript/Averages-Arithmetic-mean
new file mode 120000
index 0000000000..b37f14259c
--- /dev/null
+++ b/Lang/JavaScript/Averages-Arithmetic-mean
@@ -0,0 +1 @@
+../../Task/Averages-Arithmetic-mean/JavaScript
\ No newline at end of file
diff --git a/Lang/JavaScript/Averages-Median b/Lang/JavaScript/Averages-Median
new file mode 120000
index 0000000000..4eaa3526dc
--- /dev/null
+++ b/Lang/JavaScript/Averages-Median
@@ -0,0 +1 @@
+../../Task/Averages-Median/JavaScript
\ No newline at end of file
diff --git a/Lang/JavaScript/Averages-Pythagorean-means b/Lang/JavaScript/Averages-Pythagorean-means
new file mode 120000
index 0000000000..e43bd4d627
--- /dev/null
+++ b/Lang/JavaScript/Averages-Pythagorean-means
@@ -0,0 +1 @@
+../../Task/Averages-Pythagorean-means/JavaScript
\ No newline at end of file
diff --git a/Lang/JavaScript/Averages-Root-mean-square b/Lang/JavaScript/Averages-Root-mean-square
new file mode 120000
index 0000000000..dd5b9073f8
--- /dev/null
+++ b/Lang/JavaScript/Averages-Root-mean-square
@@ -0,0 +1 @@
+../../Task/Averages-Root-mean-square/JavaScript
\ No newline at end of file
diff --git a/Lang/JavaScript/Averages-Simple-moving-average b/Lang/JavaScript/Averages-Simple-moving-average
new file mode 120000
index 0000000000..d978c0aec8
--- /dev/null
+++ b/Lang/JavaScript/Averages-Simple-moving-average
@@ -0,0 +1 @@
+../../Task/Averages-Simple-moving-average/JavaScript
\ No newline at end of file
diff --git a/Lang/Lua/A+B b/Lang/Lua/A+B
new file mode 120000
index 0000000000..eaa06bef4d
--- /dev/null
+++ b/Lang/Lua/A+B
@@ -0,0 +1 @@
+../../Task/A+B/Lua
\ No newline at end of file
diff --git a/Lang/Lua/Abstract-type b/Lang/Lua/Abstract-type
new file mode 120000
index 0000000000..ce9d4a4d8f
--- /dev/null
+++ b/Lang/Lua/Abstract-type
@@ -0,0 +1 @@
+../../Task/Abstract-type/Lua
\ No newline at end of file
diff --git a/Lang/Lua/Accumulator-factory b/Lang/Lua/Accumulator-factory
new file mode 120000
index 0000000000..3d005f7a22
--- /dev/null
+++ b/Lang/Lua/Accumulator-factory
@@ -0,0 +1 @@
+../../Task/Accumulator-factory/Lua
\ No newline at end of file
diff --git a/Lang/Lua/Add-a-variable-to-a-class-instance-at-runtime b/Lang/Lua/Add-a-variable-to-a-class-instance-at-runtime
new file mode 120000
index 0000000000..2c42c0800d
--- /dev/null
+++ b/Lang/Lua/Add-a-variable-to-a-class-instance-at-runtime
@@ -0,0 +1 @@
+../../Task/Add-a-variable-to-a-class-instance-at-runtime/Lua
\ No newline at end of file
diff --git a/Lang/Lua/Align-columns b/Lang/Lua/Align-columns
new file mode 120000
index 0000000000..7c394c2578
--- /dev/null
+++ b/Lang/Lua/Align-columns
@@ -0,0 +1 @@
+../../Task/Align-columns/Lua
\ No newline at end of file
diff --git a/Lang/Lua/Anonymous-recursion b/Lang/Lua/Anonymous-recursion
new file mode 120000
index 0000000000..1b8b60022e
--- /dev/null
+++ b/Lang/Lua/Anonymous-recursion
@@ -0,0 +1 @@
+../../Task/Anonymous-recursion/Lua
\ No newline at end of file
diff --git a/Lang/Lua/Apply-a-callback-to-an-array b/Lang/Lua/Apply-a-callback-to-an-array
new file mode 120000
index 0000000000..dae51c67d0
--- /dev/null
+++ b/Lang/Lua/Apply-a-callback-to-an-array
@@ -0,0 +1 @@
+../../Task/Apply-a-callback-to-an-array/Lua
\ No newline at end of file
diff --git a/Lang/Lua/Arithmetic-Complex b/Lang/Lua/Arithmetic-Complex
new file mode 120000
index 0000000000..6c3070e84a
--- /dev/null
+++ b/Lang/Lua/Arithmetic-Complex
@@ -0,0 +1 @@
+../../Task/Arithmetic-Complex/Lua
\ No newline at end of file
diff --git a/Lang/Lua/Arithmetic-Rational b/Lang/Lua/Arithmetic-Rational
new file mode 120000
index 0000000000..85f18f36ea
--- /dev/null
+++ b/Lang/Lua/Arithmetic-Rational
@@ -0,0 +1 @@
+../../Task/Arithmetic-Rational/Lua
\ No newline at end of file
diff --git a/Lang/Lua/Arithmetic-evaluation b/Lang/Lua/Arithmetic-evaluation
new file mode 120000
index 0000000000..a97adc6541
--- /dev/null
+++ b/Lang/Lua/Arithmetic-evaluation
@@ -0,0 +1 @@
+../../Task/Arithmetic-evaluation/Lua
\ No newline at end of file
diff --git a/Lang/Lua/Array-concatenation b/Lang/Lua/Array-concatenation
new file mode 120000
index 0000000000..d2959e470b
--- /dev/null
+++ b/Lang/Lua/Array-concatenation
@@ -0,0 +1 @@
+../../Task/Array-concatenation/Lua
\ No newline at end of file
diff --git a/Lang/Lua/Associative-array-Creation b/Lang/Lua/Associative-array-Creation
new file mode 120000
index 0000000000..ac45de77f4
--- /dev/null
+++ b/Lang/Lua/Associative-array-Creation
@@ -0,0 +1 @@
+../../Task/Associative-array-Creation/Lua
\ No newline at end of file
diff --git a/Lang/Lua/Associative-array-Iteration b/Lang/Lua/Associative-array-Iteration
new file mode 120000
index 0000000000..0fa63ae6c5
--- /dev/null
+++ b/Lang/Lua/Associative-array-Iteration
@@ -0,0 +1 @@
+../../Task/Associative-array-Iteration/Lua
\ No newline at end of file
diff --git a/Lang/Lua/Averages-Arithmetic-mean b/Lang/Lua/Averages-Arithmetic-mean
new file mode 120000
index 0000000000..4bf9710d62
--- /dev/null
+++ b/Lang/Lua/Averages-Arithmetic-mean
@@ -0,0 +1 @@
+../../Task/Averages-Arithmetic-mean/Lua
\ No newline at end of file
diff --git a/Lang/Lua/Averages-Median b/Lang/Lua/Averages-Median
new file mode 120000
index 0000000000..58f61b80ac
--- /dev/null
+++ b/Lang/Lua/Averages-Median
@@ -0,0 +1 @@
+../../Task/Averages-Median/Lua
\ No newline at end of file
diff --git a/Lang/Lua/Averages-Pythagorean-means b/Lang/Lua/Averages-Pythagorean-means
new file mode 120000
index 0000000000..245c082294
--- /dev/null
+++ b/Lang/Lua/Averages-Pythagorean-means
@@ -0,0 +1 @@
+../../Task/Averages-Pythagorean-means/Lua
\ No newline at end of file
diff --git a/Lang/Lua/Averages-Root-mean-square b/Lang/Lua/Averages-Root-mean-square
new file mode 120000
index 0000000000..8fd355f5af
--- /dev/null
+++ b/Lang/Lua/Averages-Root-mean-square
@@ -0,0 +1 @@
+../../Task/Averages-Root-mean-square/Lua
\ No newline at end of file
diff --git a/Lang/Lua/Averages-Simple-moving-average b/Lang/Lua/Averages-Simple-moving-average
new file mode 120000
index 0000000000..10f28f067b
--- /dev/null
+++ b/Lang/Lua/Averages-Simple-moving-average
@@ -0,0 +1 @@
+../../Task/Averages-Simple-moving-average/Lua
\ No newline at end of file
diff --git a/Lang/PHP/A+B b/Lang/PHP/A+B
new file mode 120000
index 0000000000..6eaa4f0a15
--- /dev/null
+++ b/Lang/PHP/A+B
@@ -0,0 +1 @@
+../../Task/A+B/PHP
\ No newline at end of file
diff --git a/Lang/PHP/Abstract-type b/Lang/PHP/Abstract-type
new file mode 120000
index 0000000000..dfc491bdc9
--- /dev/null
+++ b/Lang/PHP/Abstract-type
@@ -0,0 +1 @@
+../../Task/Abstract-type/PHP
\ No newline at end of file
diff --git a/Lang/PHP/Accumulator-factory b/Lang/PHP/Accumulator-factory
new file mode 120000
index 0000000000..752d37f12c
--- /dev/null
+++ b/Lang/PHP/Accumulator-factory
@@ -0,0 +1 @@
+../../Task/Accumulator-factory/PHP
\ No newline at end of file
diff --git a/Lang/PHP/Active-Directory-Connect b/Lang/PHP/Active-Directory-Connect
new file mode 120000
index 0000000000..2e1d86f1c8
--- /dev/null
+++ b/Lang/PHP/Active-Directory-Connect
@@ -0,0 +1 @@
+../../Task/Active-Directory-Connect/PHP
\ No newline at end of file
diff --git a/Lang/PHP/Active-Directory-Search-for-a-user b/Lang/PHP/Active-Directory-Search-for-a-user
new file mode 120000
index 0000000000..e2cc6cceb4
--- /dev/null
+++ b/Lang/PHP/Active-Directory-Search-for-a-user
@@ -0,0 +1 @@
+../../Task/Active-Directory-Search-for-a-user/PHP
\ No newline at end of file
diff --git a/Lang/PHP/Add-a-variable-to-a-class-instance-at-runtime b/Lang/PHP/Add-a-variable-to-a-class-instance-at-runtime
new file mode 120000
index 0000000000..b4d856d627
--- /dev/null
+++ b/Lang/PHP/Add-a-variable-to-a-class-instance-at-runtime
@@ -0,0 +1 @@
+../../Task/Add-a-variable-to-a-class-instance-at-runtime/PHP
\ No newline at end of file
diff --git a/Lang/PHP/Align-columns b/Lang/PHP/Align-columns
new file mode 120000
index 0000000000..6b0ba4f7c8
--- /dev/null
+++ b/Lang/PHP/Align-columns
@@ -0,0 +1 @@
+../../Task/Align-columns/PHP
\ No newline at end of file
diff --git a/Lang/PHP/Anagrams-Deranged-anagrams b/Lang/PHP/Anagrams-Deranged-anagrams
new file mode 120000
index 0000000000..6a83a1dd7f
--- /dev/null
+++ b/Lang/PHP/Anagrams-Deranged-anagrams
@@ -0,0 +1 @@
+../../Task/Anagrams-Deranged-anagrams/PHP
\ No newline at end of file
diff --git a/Lang/PHP/Anonymous-recursion b/Lang/PHP/Anonymous-recursion
new file mode 120000
index 0000000000..19f04e7fe9
--- /dev/null
+++ b/Lang/PHP/Anonymous-recursion
@@ -0,0 +1 @@
+../../Task/Anonymous-recursion/PHP
\ No newline at end of file
diff --git a/Lang/PHP/Apply-a-callback-to-an-array b/Lang/PHP/Apply-a-callback-to-an-array
new file mode 120000
index 0000000000..4b59cbd07d
--- /dev/null
+++ b/Lang/PHP/Apply-a-callback-to-an-array
@@ -0,0 +1 @@
+../../Task/Apply-a-callback-to-an-array/PHP
\ No newline at end of file
diff --git a/Lang/PHP/Arbitrary-precision-integers-(included) b/Lang/PHP/Arbitrary-precision-integers-(included)
new file mode 120000
index 0000000000..349602ec2b
--- /dev/null
+++ b/Lang/PHP/Arbitrary-precision-integers-(included)
@@ -0,0 +1 @@
+../../Task/Arbitrary-precision-integers-(included)/PHP
\ No newline at end of file
diff --git a/Lang/PHP/Arithmetic-geometric-mean b/Lang/PHP/Arithmetic-geometric-mean
new file mode 120000
index 0000000000..c8847d05b2
--- /dev/null
+++ b/Lang/PHP/Arithmetic-geometric-mean
@@ -0,0 +1 @@
+../../Task/Arithmetic-geometric-mean/PHP
\ No newline at end of file
diff --git a/Lang/PHP/Array-concatenation b/Lang/PHP/Array-concatenation
new file mode 120000
index 0000000000..570cd43d7c
--- /dev/null
+++ b/Lang/PHP/Array-concatenation
@@ -0,0 +1 @@
+../../Task/Array-concatenation/PHP
\ No newline at end of file
diff --git a/Lang/PHP/Associative-array-Creation b/Lang/PHP/Associative-array-Creation
new file mode 120000
index 0000000000..d16887b167
--- /dev/null
+++ b/Lang/PHP/Associative-array-Creation
@@ -0,0 +1 @@
+../../Task/Associative-array-Creation/PHP
\ No newline at end of file
diff --git a/Lang/PHP/Associative-array-Iteration b/Lang/PHP/Associative-array-Iteration
new file mode 120000
index 0000000000..1ab97c4256
--- /dev/null
+++ b/Lang/PHP/Associative-array-Iteration
@@ -0,0 +1 @@
+../../Task/Associative-array-Iteration/PHP
\ No newline at end of file
diff --git a/Lang/PHP/Averages-Arithmetic-mean b/Lang/PHP/Averages-Arithmetic-mean
new file mode 120000
index 0000000000..6ba06d783a
--- /dev/null
+++ b/Lang/PHP/Averages-Arithmetic-mean
@@ -0,0 +1 @@
+../../Task/Averages-Arithmetic-mean/PHP
\ No newline at end of file
diff --git a/Lang/PHP/Averages-Median b/Lang/PHP/Averages-Median
new file mode 120000
index 0000000000..a191eb4ac3
--- /dev/null
+++ b/Lang/PHP/Averages-Median
@@ -0,0 +1 @@
+../../Task/Averages-Median/PHP
\ No newline at end of file
diff --git a/Lang/Perl/A+B b/Lang/Perl/A+B
new file mode 120000
index 0000000000..8e3adcb6c3
--- /dev/null
+++ b/Lang/Perl/A+B
@@ -0,0 +1 @@
+../../Task/A+B/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Abstract-type b/Lang/Perl/Abstract-type
new file mode 120000
index 0000000000..ad54287e90
--- /dev/null
+++ b/Lang/Perl/Abstract-type
@@ -0,0 +1 @@
+../../Task/Abstract-type/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Accumulator-factory b/Lang/Perl/Accumulator-factory
new file mode 120000
index 0000000000..340179f3e0
--- /dev/null
+++ b/Lang/Perl/Accumulator-factory
@@ -0,0 +1 @@
+../../Task/Accumulator-factory/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Active-Directory-Connect b/Lang/Perl/Active-Directory-Connect
new file mode 120000
index 0000000000..6bbe3b8f94
--- /dev/null
+++ b/Lang/Perl/Active-Directory-Connect
@@ -0,0 +1 @@
+../../Task/Active-Directory-Connect/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Active-object b/Lang/Perl/Active-object
new file mode 120000
index 0000000000..57892b8abc
--- /dev/null
+++ b/Lang/Perl/Active-object
@@ -0,0 +1 @@
+../../Task/Active-object/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Add-a-variable-to-a-class-instance-at-runtime b/Lang/Perl/Add-a-variable-to-a-class-instance-at-runtime
new file mode 120000
index 0000000000..7d3854f1cb
--- /dev/null
+++ b/Lang/Perl/Add-a-variable-to-a-class-instance-at-runtime
@@ -0,0 +1 @@
+../../Task/Add-a-variable-to-a-class-instance-at-runtime/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Address-of-a-variable b/Lang/Perl/Address-of-a-variable
new file mode 120000
index 0000000000..f7b7788f06
--- /dev/null
+++ b/Lang/Perl/Address-of-a-variable
@@ -0,0 +1 @@
+../../Task/Address-of-a-variable/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Align-columns b/Lang/Perl/Align-columns
new file mode 120000
index 0000000000..ae7018b94a
--- /dev/null
+++ b/Lang/Perl/Align-columns
@@ -0,0 +1 @@
+../../Task/Align-columns/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Anagrams-Deranged-anagrams b/Lang/Perl/Anagrams-Deranged-anagrams
new file mode 120000
index 0000000000..1ad86d89a4
--- /dev/null
+++ b/Lang/Perl/Anagrams-Deranged-anagrams
@@ -0,0 +1 @@
+../../Task/Anagrams-Deranged-anagrams/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Animation b/Lang/Perl/Animation
new file mode 120000
index 0000000000..5b01dcb1dd
--- /dev/null
+++ b/Lang/Perl/Animation
@@ -0,0 +1 @@
+../../Task/Animation/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Anonymous-recursion b/Lang/Perl/Anonymous-recursion
new file mode 120000
index 0000000000..0156f940ed
--- /dev/null
+++ b/Lang/Perl/Anonymous-recursion
@@ -0,0 +1 @@
+../../Task/Anonymous-recursion/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Apply-a-callback-to-an-array b/Lang/Perl/Apply-a-callback-to-an-array
new file mode 120000
index 0000000000..61ed270cf7
--- /dev/null
+++ b/Lang/Perl/Apply-a-callback-to-an-array
@@ -0,0 +1 @@
+../../Task/Apply-a-callback-to-an-array/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Arbitrary-precision-integers-(included) b/Lang/Perl/Arbitrary-precision-integers-(included)
new file mode 120000
index 0000000000..02d6c446d0
--- /dev/null
+++ b/Lang/Perl/Arbitrary-precision-integers-(included)
@@ -0,0 +1 @@
+../../Task/Arbitrary-precision-integers-(included)/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Arithmetic-Complex b/Lang/Perl/Arithmetic-Complex
new file mode 120000
index 0000000000..e693c726e8
--- /dev/null
+++ b/Lang/Perl/Arithmetic-Complex
@@ -0,0 +1 @@
+../../Task/Arithmetic-Complex/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Arithmetic-Rational b/Lang/Perl/Arithmetic-Rational
new file mode 120000
index 0000000000..aa6df9def4
--- /dev/null
+++ b/Lang/Perl/Arithmetic-Rational
@@ -0,0 +1 @@
+../../Task/Arithmetic-Rational/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Arithmetic-evaluation b/Lang/Perl/Arithmetic-evaluation
new file mode 120000
index 0000000000..20a459fa52
--- /dev/null
+++ b/Lang/Perl/Arithmetic-evaluation
@@ -0,0 +1 @@
+../../Task/Arithmetic-evaluation/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Arithmetic-geometric-mean b/Lang/Perl/Arithmetic-geometric-mean
new file mode 120000
index 0000000000..62fd17da9e
--- /dev/null
+++ b/Lang/Perl/Arithmetic-geometric-mean
@@ -0,0 +1 @@
+../../Task/Arithmetic-geometric-mean/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Array-concatenation b/Lang/Perl/Array-concatenation
new file mode 120000
index 0000000000..85d05d15ed
--- /dev/null
+++ b/Lang/Perl/Array-concatenation
@@ -0,0 +1 @@
+../../Task/Array-concatenation/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Associative-array-Creation b/Lang/Perl/Associative-array-Creation
new file mode 120000
index 0000000000..f58726bb94
--- /dev/null
+++ b/Lang/Perl/Associative-array-Creation
@@ -0,0 +1 @@
+../../Task/Associative-array-Creation/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Associative-array-Iteration b/Lang/Perl/Associative-array-Iteration
new file mode 120000
index 0000000000..faea751760
--- /dev/null
+++ b/Lang/Perl/Associative-array-Iteration
@@ -0,0 +1 @@
+../../Task/Associative-array-Iteration/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Atomic-updates b/Lang/Perl/Atomic-updates
new file mode 120000
index 0000000000..d3fea6e5d4
--- /dev/null
+++ b/Lang/Perl/Atomic-updates
@@ -0,0 +1 @@
+../../Task/Atomic-updates/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Averages-Arithmetic-mean b/Lang/Perl/Averages-Arithmetic-mean
new file mode 120000
index 0000000000..5d84f5ead9
--- /dev/null
+++ b/Lang/Perl/Averages-Arithmetic-mean
@@ -0,0 +1 @@
+../../Task/Averages-Arithmetic-mean/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Averages-Median b/Lang/Perl/Averages-Median
new file mode 120000
index 0000000000..75a8f709b3
--- /dev/null
+++ b/Lang/Perl/Averages-Median
@@ -0,0 +1 @@
+../../Task/Averages-Median/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Averages-Pythagorean-means b/Lang/Perl/Averages-Pythagorean-means
new file mode 120000
index 0000000000..0c6cf5229f
--- /dev/null
+++ b/Lang/Perl/Averages-Pythagorean-means
@@ -0,0 +1 @@
+../../Task/Averages-Pythagorean-means/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Averages-Root-mean-square b/Lang/Perl/Averages-Root-mean-square
new file mode 120000
index 0000000000..ce578451be
--- /dev/null
+++ b/Lang/Perl/Averages-Root-mean-square
@@ -0,0 +1 @@
+../../Task/Averages-Root-mean-square/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Averages-Simple-moving-average b/Lang/Perl/Averages-Simple-moving-average
new file mode 120000
index 0000000000..832a406da9
--- /dev/null
+++ b/Lang/Perl/Averages-Simple-moving-average
@@ -0,0 +1 @@
+../../Task/Averages-Simple-moving-average/Perl
\ No newline at end of file
diff --git a/Lang/PicoLisp/A+B b/Lang/PicoLisp/A+B
new file mode 120000
index 0000000000..185b77a649
--- /dev/null
+++ b/Lang/PicoLisp/A+B
@@ -0,0 +1 @@
+../../Task/A+B/PicoLisp
\ No newline at end of file
diff --git a/Lang/PicoLisp/Abstract-type b/Lang/PicoLisp/Abstract-type
new file mode 120000
index 0000000000..6d67f53c9b
--- /dev/null
+++ b/Lang/PicoLisp/Abstract-type
@@ -0,0 +1 @@
+../../Task/Abstract-type/PicoLisp
\ No newline at end of file
diff --git a/Lang/PicoLisp/Accumulator-factory b/Lang/PicoLisp/Accumulator-factory
new file mode 120000
index 0000000000..dd215c559e
--- /dev/null
+++ b/Lang/PicoLisp/Accumulator-factory
@@ -0,0 +1 @@
+../../Task/Accumulator-factory/PicoLisp
\ No newline at end of file
diff --git a/Lang/PicoLisp/Active-Directory-Connect b/Lang/PicoLisp/Active-Directory-Connect
new file mode 120000
index 0000000000..8a3da3c91f
--- /dev/null
+++ b/Lang/PicoLisp/Active-Directory-Connect
@@ -0,0 +1 @@
+../../Task/Active-Directory-Connect/PicoLisp
\ No newline at end of file
diff --git a/Lang/PicoLisp/Active-Directory-Search-for-a-user b/Lang/PicoLisp/Active-Directory-Search-for-a-user
new file mode 120000
index 0000000000..b98ba00157
--- /dev/null
+++ b/Lang/PicoLisp/Active-Directory-Search-for-a-user
@@ -0,0 +1 @@
+../../Task/Active-Directory-Search-for-a-user/PicoLisp
\ No newline at end of file
diff --git a/Lang/PicoLisp/Active-object b/Lang/PicoLisp/Active-object
new file mode 120000
index 0000000000..096c26985b
--- /dev/null
+++ b/Lang/PicoLisp/Active-object
@@ -0,0 +1 @@
+../../Task/Active-object/PicoLisp
\ No newline at end of file
diff --git a/Lang/PicoLisp/Add-a-variable-to-a-class-instance-at-runtime b/Lang/PicoLisp/Add-a-variable-to-a-class-instance-at-runtime
new file mode 120000
index 0000000000..b9041d6a39
--- /dev/null
+++ b/Lang/PicoLisp/Add-a-variable-to-a-class-instance-at-runtime
@@ -0,0 +1 @@
+../../Task/Add-a-variable-to-a-class-instance-at-runtime/PicoLisp
\ No newline at end of file
diff --git a/Lang/PicoLisp/Address-of-a-variable b/Lang/PicoLisp/Address-of-a-variable
new file mode 120000
index 0000000000..e2615816be
--- /dev/null
+++ b/Lang/PicoLisp/Address-of-a-variable
@@ -0,0 +1 @@
+../../Task/Address-of-a-variable/PicoLisp
\ No newline at end of file
diff --git a/Lang/PicoLisp/Align-columns b/Lang/PicoLisp/Align-columns
new file mode 120000
index 0000000000..a4d37cdc26
--- /dev/null
+++ b/Lang/PicoLisp/Align-columns
@@ -0,0 +1 @@
+../../Task/Align-columns/PicoLisp
\ No newline at end of file
diff --git a/Lang/PicoLisp/Anagrams-Deranged-anagrams b/Lang/PicoLisp/Anagrams-Deranged-anagrams
new file mode 120000
index 0000000000..9be682afd4
--- /dev/null
+++ b/Lang/PicoLisp/Anagrams-Deranged-anagrams
@@ -0,0 +1 @@
+../../Task/Anagrams-Deranged-anagrams/PicoLisp
\ No newline at end of file
diff --git a/Lang/PicoLisp/Animation b/Lang/PicoLisp/Animation
new file mode 120000
index 0000000000..493f41ac67
--- /dev/null
+++ b/Lang/PicoLisp/Animation
@@ -0,0 +1 @@
+../../Task/Animation/PicoLisp
\ No newline at end of file
diff --git a/Lang/PicoLisp/Anonymous-recursion b/Lang/PicoLisp/Anonymous-recursion
new file mode 120000
index 0000000000..0904744147
--- /dev/null
+++ b/Lang/PicoLisp/Anonymous-recursion
@@ -0,0 +1 @@
+../../Task/Anonymous-recursion/PicoLisp
\ No newline at end of file
diff --git a/Lang/PicoLisp/Apply-a-callback-to-an-array b/Lang/PicoLisp/Apply-a-callback-to-an-array
new file mode 120000
index 0000000000..7fd233e2d9
--- /dev/null
+++ b/Lang/PicoLisp/Apply-a-callback-to-an-array
@@ -0,0 +1 @@
+../../Task/Apply-a-callback-to-an-array/PicoLisp
\ No newline at end of file
diff --git a/Lang/PicoLisp/Arbitrary-precision-integers-(included) b/Lang/PicoLisp/Arbitrary-precision-integers-(included)
new file mode 120000
index 0000000000..1c4a84fcba
--- /dev/null
+++ b/Lang/PicoLisp/Arbitrary-precision-integers-(included)
@@ -0,0 +1 @@
+../../Task/Arbitrary-precision-integers-(included)/PicoLisp
\ No newline at end of file
diff --git a/Lang/PicoLisp/Arithmetic-Complex b/Lang/PicoLisp/Arithmetic-Complex
new file mode 120000
index 0000000000..0eb57ac928
--- /dev/null
+++ b/Lang/PicoLisp/Arithmetic-Complex
@@ -0,0 +1 @@
+../../Task/Arithmetic-Complex/PicoLisp
\ No newline at end of file
diff --git a/Lang/PicoLisp/Arithmetic-Rational b/Lang/PicoLisp/Arithmetic-Rational
new file mode 120000
index 0000000000..8b8534ac52
--- /dev/null
+++ b/Lang/PicoLisp/Arithmetic-Rational
@@ -0,0 +1 @@
+../../Task/Arithmetic-Rational/PicoLisp
\ No newline at end of file
diff --git a/Lang/PicoLisp/Arithmetic-evaluation b/Lang/PicoLisp/Arithmetic-evaluation
new file mode 120000
index 0000000000..38d15bcb94
--- /dev/null
+++ b/Lang/PicoLisp/Arithmetic-evaluation
@@ -0,0 +1 @@
+../../Task/Arithmetic-evaluation/PicoLisp
\ No newline at end of file
diff --git a/Lang/PicoLisp/Arithmetic-geometric-mean b/Lang/PicoLisp/Arithmetic-geometric-mean
new file mode 120000
index 0000000000..042039bac6
--- /dev/null
+++ b/Lang/PicoLisp/Arithmetic-geometric-mean
@@ -0,0 +1 @@
+../../Task/Arithmetic-geometric-mean/PicoLisp
\ No newline at end of file
diff --git a/Lang/PicoLisp/Array-concatenation b/Lang/PicoLisp/Array-concatenation
new file mode 120000
index 0000000000..cc938a98a6
--- /dev/null
+++ b/Lang/PicoLisp/Array-concatenation
@@ -0,0 +1 @@
+../../Task/Array-concatenation/PicoLisp
\ No newline at end of file
diff --git a/Lang/PicoLisp/Associative-array-Creation b/Lang/PicoLisp/Associative-array-Creation
new file mode 120000
index 0000000000..132e09f624
--- /dev/null
+++ b/Lang/PicoLisp/Associative-array-Creation
@@ -0,0 +1 @@
+../../Task/Associative-array-Creation/PicoLisp
\ No newline at end of file
diff --git a/Lang/PicoLisp/Associative-array-Iteration b/Lang/PicoLisp/Associative-array-Iteration
new file mode 120000
index 0000000000..6fed599542
--- /dev/null
+++ b/Lang/PicoLisp/Associative-array-Iteration
@@ -0,0 +1 @@
+../../Task/Associative-array-Iteration/PicoLisp
\ No newline at end of file
diff --git a/Lang/PicoLisp/Atomic-updates b/Lang/PicoLisp/Atomic-updates
new file mode 120000
index 0000000000..ba15037ed0
--- /dev/null
+++ b/Lang/PicoLisp/Atomic-updates
@@ -0,0 +1 @@
+../../Task/Atomic-updates/PicoLisp
\ No newline at end of file
diff --git a/Lang/PicoLisp/Averages-Arithmetic-mean b/Lang/PicoLisp/Averages-Arithmetic-mean
new file mode 120000
index 0000000000..f82e95466b
--- /dev/null
+++ b/Lang/PicoLisp/Averages-Arithmetic-mean
@@ -0,0 +1 @@
+../../Task/Averages-Arithmetic-mean/PicoLisp
\ No newline at end of file
diff --git a/Lang/PicoLisp/Averages-Mean-angle b/Lang/PicoLisp/Averages-Mean-angle
new file mode 120000
index 0000000000..2e92d18eef
--- /dev/null
+++ b/Lang/PicoLisp/Averages-Mean-angle
@@ -0,0 +1 @@
+../../Task/Averages-Mean-angle/PicoLisp
\ No newline at end of file
diff --git a/Lang/PicoLisp/Averages-Mean-time-of-day b/Lang/PicoLisp/Averages-Mean-time-of-day
new file mode 120000
index 0000000000..9555b95333
--- /dev/null
+++ b/Lang/PicoLisp/Averages-Mean-time-of-day
@@ -0,0 +1 @@
+../../Task/Averages-Mean-time-of-day/PicoLisp
\ No newline at end of file
diff --git a/Lang/PicoLisp/Averages-Median b/Lang/PicoLisp/Averages-Median
new file mode 120000
index 0000000000..60008dd07f
--- /dev/null
+++ b/Lang/PicoLisp/Averages-Median
@@ -0,0 +1 @@
+../../Task/Averages-Median/PicoLisp
\ No newline at end of file
diff --git a/Lang/PicoLisp/Averages-Pythagorean-means b/Lang/PicoLisp/Averages-Pythagorean-means
new file mode 120000
index 0000000000..82c872d75e
--- /dev/null
+++ b/Lang/PicoLisp/Averages-Pythagorean-means
@@ -0,0 +1 @@
+../../Task/Averages-Pythagorean-means/PicoLisp
\ No newline at end of file
diff --git a/Lang/PicoLisp/Averages-Root-mean-square b/Lang/PicoLisp/Averages-Root-mean-square
new file mode 120000
index 0000000000..a9b7e4ae07
--- /dev/null
+++ b/Lang/PicoLisp/Averages-Root-mean-square
@@ -0,0 +1 @@
+../../Task/Averages-Root-mean-square/PicoLisp
\ No newline at end of file
diff --git a/Lang/PicoLisp/Averages-Simple-moving-average b/Lang/PicoLisp/Averages-Simple-moving-average
new file mode 120000
index 0000000000..53141280f4
--- /dev/null
+++ b/Lang/PicoLisp/Averages-Simple-moving-average
@@ -0,0 +1 @@
+../../Task/Averages-Simple-moving-average/PicoLisp
\ No newline at end of file
diff --git a/Lang/Prolog/A+B b/Lang/Prolog/A+B
new file mode 120000
index 0000000000..765df9edab
--- /dev/null
+++ b/Lang/Prolog/A+B
@@ -0,0 +1 @@
+../../Task/A+B/Prolog
\ No newline at end of file
diff --git a/Lang/Prolog/Accumulator-factory b/Lang/Prolog/Accumulator-factory
new file mode 120000
index 0000000000..d01cb08e8d
--- /dev/null
+++ b/Lang/Prolog/Accumulator-factory
@@ -0,0 +1 @@
+../../Task/Accumulator-factory/Prolog
\ No newline at end of file
diff --git a/Lang/Prolog/Align-columns b/Lang/Prolog/Align-columns
new file mode 120000
index 0000000000..28214abf30
--- /dev/null
+++ b/Lang/Prolog/Align-columns
@@ -0,0 +1 @@
+../../Task/Align-columns/Prolog
\ No newline at end of file
diff --git a/Lang/Prolog/Anagrams-Deranged-anagrams b/Lang/Prolog/Anagrams-Deranged-anagrams
new file mode 120000
index 0000000000..030e87147b
--- /dev/null
+++ b/Lang/Prolog/Anagrams-Deranged-anagrams
@@ -0,0 +1 @@
+../../Task/Anagrams-Deranged-anagrams/Prolog
\ No newline at end of file
diff --git a/Lang/Prolog/Animation b/Lang/Prolog/Animation
new file mode 120000
index 0000000000..dd2f032186
--- /dev/null
+++ b/Lang/Prolog/Animation
@@ -0,0 +1 @@
+../../Task/Animation/Prolog
\ No newline at end of file
diff --git a/Lang/Prolog/Anonymous-recursion b/Lang/Prolog/Anonymous-recursion
new file mode 120000
index 0000000000..284cf50b71
--- /dev/null
+++ b/Lang/Prolog/Anonymous-recursion
@@ -0,0 +1 @@
+../../Task/Anonymous-recursion/Prolog
\ No newline at end of file
diff --git a/Lang/Prolog/Apply-a-callback-to-an-array b/Lang/Prolog/Apply-a-callback-to-an-array
new file mode 120000
index 0000000000..9e92cb19a3
--- /dev/null
+++ b/Lang/Prolog/Apply-a-callback-to-an-array
@@ -0,0 +1 @@
+../../Task/Apply-a-callback-to-an-array/Prolog
\ No newline at end of file
diff --git a/Lang/Prolog/Arithmetic-evaluation b/Lang/Prolog/Arithmetic-evaluation
new file mode 120000
index 0000000000..610f08fa55
--- /dev/null
+++ b/Lang/Prolog/Arithmetic-evaluation
@@ -0,0 +1 @@
+../../Task/Arithmetic-evaluation/Prolog
\ No newline at end of file
diff --git a/Lang/Prolog/Array-concatenation b/Lang/Prolog/Array-concatenation
new file mode 120000
index 0000000000..63d48154b5
--- /dev/null
+++ b/Lang/Prolog/Array-concatenation
@@ -0,0 +1 @@
+../../Task/Array-concatenation/Prolog
\ No newline at end of file
diff --git a/Lang/Prolog/Associative-array-Creation b/Lang/Prolog/Associative-array-Creation
new file mode 120000
index 0000000000..8acad1a9a8
--- /dev/null
+++ b/Lang/Prolog/Associative-array-Creation
@@ -0,0 +1 @@
+../../Task/Associative-array-Creation/Prolog
\ No newline at end of file
diff --git a/Lang/Prolog/Averages-Median b/Lang/Prolog/Averages-Median
new file mode 120000
index 0000000000..f49baf75e4
--- /dev/null
+++ b/Lang/Prolog/Averages-Median
@@ -0,0 +1 @@
+../../Task/Averages-Median/Prolog
\ No newline at end of file
diff --git a/Lang/Python/A+B b/Lang/Python/A+B
new file mode 120000
index 0000000000..630f5910fc
--- /dev/null
+++ b/Lang/Python/A+B
@@ -0,0 +1 @@
+../../Task/A+B/Python
\ No newline at end of file
diff --git a/Lang/Python/Abstract-type b/Lang/Python/Abstract-type
new file mode 120000
index 0000000000..70ddc197b2
--- /dev/null
+++ b/Lang/Python/Abstract-type
@@ -0,0 +1 @@
+../../Task/Abstract-type/Python
\ No newline at end of file
diff --git a/Lang/Python/Accumulator-factory b/Lang/Python/Accumulator-factory
new file mode 120000
index 0000000000..62d639c796
--- /dev/null
+++ b/Lang/Python/Accumulator-factory
@@ -0,0 +1 @@
+../../Task/Accumulator-factory/Python
\ No newline at end of file
diff --git a/Lang/Python/Active-Directory-Connect b/Lang/Python/Active-Directory-Connect
new file mode 120000
index 0000000000..94ae6de417
--- /dev/null
+++ b/Lang/Python/Active-Directory-Connect
@@ -0,0 +1 @@
+../../Task/Active-Directory-Connect/Python
\ No newline at end of file
diff --git a/Lang/Python/Active-Directory-Search-for-a-user b/Lang/Python/Active-Directory-Search-for-a-user
new file mode 120000
index 0000000000..beb8395536
--- /dev/null
+++ b/Lang/Python/Active-Directory-Search-for-a-user
@@ -0,0 +1 @@
+../../Task/Active-Directory-Search-for-a-user/Python
\ No newline at end of file
diff --git a/Lang/Python/Active-object b/Lang/Python/Active-object
new file mode 120000
index 0000000000..00fe907adb
--- /dev/null
+++ b/Lang/Python/Active-object
@@ -0,0 +1 @@
+../../Task/Active-object/Python
\ No newline at end of file
diff --git a/Lang/Python/Add-a-variable-to-a-class-instance-at-runtime b/Lang/Python/Add-a-variable-to-a-class-instance-at-runtime
new file mode 120000
index 0000000000..ba10395cfa
--- /dev/null
+++ b/Lang/Python/Add-a-variable-to-a-class-instance-at-runtime
@@ -0,0 +1 @@
+../../Task/Add-a-variable-to-a-class-instance-at-runtime/Python
\ No newline at end of file
diff --git a/Lang/Python/Address-of-a-variable b/Lang/Python/Address-of-a-variable
new file mode 120000
index 0000000000..f417851f0d
--- /dev/null
+++ b/Lang/Python/Address-of-a-variable
@@ -0,0 +1 @@
+../../Task/Address-of-a-variable/Python
\ No newline at end of file
diff --git a/Lang/Python/Align-columns b/Lang/Python/Align-columns
new file mode 120000
index 0000000000..721fad00ca
--- /dev/null
+++ b/Lang/Python/Align-columns
@@ -0,0 +1 @@
+../../Task/Align-columns/Python
\ No newline at end of file
diff --git a/Lang/Python/Anagrams-Deranged-anagrams b/Lang/Python/Anagrams-Deranged-anagrams
new file mode 120000
index 0000000000..0456523ddc
--- /dev/null
+++ b/Lang/Python/Anagrams-Deranged-anagrams
@@ -0,0 +1 @@
+../../Task/Anagrams-Deranged-anagrams/Python
\ No newline at end of file
diff --git a/Lang/Python/Animation b/Lang/Python/Animation
new file mode 120000
index 0000000000..ac39f54c85
--- /dev/null
+++ b/Lang/Python/Animation
@@ -0,0 +1 @@
+../../Task/Animation/Python
\ No newline at end of file
diff --git a/Lang/Python/Anonymous-recursion b/Lang/Python/Anonymous-recursion
new file mode 120000
index 0000000000..7b0e9b35e9
--- /dev/null
+++ b/Lang/Python/Anonymous-recursion
@@ -0,0 +1 @@
+../../Task/Anonymous-recursion/Python
\ No newline at end of file
diff --git a/Lang/Python/Apply-a-callback-to-an-array b/Lang/Python/Apply-a-callback-to-an-array
new file mode 120000
index 0000000000..075fd1f329
--- /dev/null
+++ b/Lang/Python/Apply-a-callback-to-an-array
@@ -0,0 +1 @@
+../../Task/Apply-a-callback-to-an-array/Python
\ No newline at end of file
diff --git a/Lang/Python/Arbitrary-precision-integers-(included) b/Lang/Python/Arbitrary-precision-integers-(included)
new file mode 120000
index 0000000000..b7e3217bd5
--- /dev/null
+++ b/Lang/Python/Arbitrary-precision-integers-(included)
@@ -0,0 +1 @@
+../../Task/Arbitrary-precision-integers-(included)/Python
\ No newline at end of file
diff --git a/Lang/Python/Arithmetic-Complex b/Lang/Python/Arithmetic-Complex
new file mode 120000
index 0000000000..767be7077d
--- /dev/null
+++ b/Lang/Python/Arithmetic-Complex
@@ -0,0 +1 @@
+../../Task/Arithmetic-Complex/Python
\ No newline at end of file
diff --git a/Lang/Python/Arithmetic-Rational b/Lang/Python/Arithmetic-Rational
new file mode 120000
index 0000000000..da59e6b036
--- /dev/null
+++ b/Lang/Python/Arithmetic-Rational
@@ -0,0 +1 @@
+../../Task/Arithmetic-Rational/Python
\ No newline at end of file
diff --git a/Lang/Python/Arithmetic-evaluation b/Lang/Python/Arithmetic-evaluation
new file mode 120000
index 0000000000..cb93f47f21
--- /dev/null
+++ b/Lang/Python/Arithmetic-evaluation
@@ -0,0 +1 @@
+../../Task/Arithmetic-evaluation/Python
\ No newline at end of file
diff --git a/Lang/Python/Arithmetic-geometric-mean b/Lang/Python/Arithmetic-geometric-mean
new file mode 120000
index 0000000000..fed74594c5
--- /dev/null
+++ b/Lang/Python/Arithmetic-geometric-mean
@@ -0,0 +1 @@
+../../Task/Arithmetic-geometric-mean/Python
\ No newline at end of file
diff --git a/Lang/Python/Array-concatenation b/Lang/Python/Array-concatenation
new file mode 120000
index 0000000000..b8dac3c262
--- /dev/null
+++ b/Lang/Python/Array-concatenation
@@ -0,0 +1 @@
+../../Task/Array-concatenation/Python
\ No newline at end of file
diff --git a/Lang/Python/Associative-array-Creation b/Lang/Python/Associative-array-Creation
new file mode 120000
index 0000000000..aa7a5efc29
--- /dev/null
+++ b/Lang/Python/Associative-array-Creation
@@ -0,0 +1 @@
+../../Task/Associative-array-Creation/Python
\ No newline at end of file
diff --git a/Lang/Python/Associative-array-Iteration b/Lang/Python/Associative-array-Iteration
new file mode 120000
index 0000000000..816e0cef17
--- /dev/null
+++ b/Lang/Python/Associative-array-Iteration
@@ -0,0 +1 @@
+../../Task/Associative-array-Iteration/Python
\ No newline at end of file
diff --git a/Lang/Python/Atomic-updates b/Lang/Python/Atomic-updates
new file mode 120000
index 0000000000..f5e3b9ca2c
--- /dev/null
+++ b/Lang/Python/Atomic-updates
@@ -0,0 +1 @@
+../../Task/Atomic-updates/Python
\ No newline at end of file
diff --git a/Lang/Python/Average-loop-length b/Lang/Python/Average-loop-length
new file mode 120000
index 0000000000..91ba4c7072
--- /dev/null
+++ b/Lang/Python/Average-loop-length
@@ -0,0 +1 @@
+../../Task/Average-loop-length/Python
\ No newline at end of file
diff --git a/Lang/Python/Averages-Arithmetic-mean b/Lang/Python/Averages-Arithmetic-mean
new file mode 120000
index 0000000000..86c465c3ec
--- /dev/null
+++ b/Lang/Python/Averages-Arithmetic-mean
@@ -0,0 +1 @@
+../../Task/Averages-Arithmetic-mean/Python
\ No newline at end of file
diff --git a/Lang/Python/Averages-Mean-angle b/Lang/Python/Averages-Mean-angle
new file mode 120000
index 0000000000..0b846ad5d7
--- /dev/null
+++ b/Lang/Python/Averages-Mean-angle
@@ -0,0 +1 @@
+../../Task/Averages-Mean-angle/Python
\ No newline at end of file
diff --git a/Lang/Python/Averages-Mean-time-of-day b/Lang/Python/Averages-Mean-time-of-day
new file mode 120000
index 0000000000..1251d7dfd6
--- /dev/null
+++ b/Lang/Python/Averages-Mean-time-of-day
@@ -0,0 +1 @@
+../../Task/Averages-Mean-time-of-day/Python
\ No newline at end of file
diff --git a/Lang/Python/Averages-Median b/Lang/Python/Averages-Median
new file mode 120000
index 0000000000..31455e0828
--- /dev/null
+++ b/Lang/Python/Averages-Median
@@ -0,0 +1 @@
+../../Task/Averages-Median/Python
\ No newline at end of file
diff --git a/Lang/Python/Averages-Pythagorean-means b/Lang/Python/Averages-Pythagorean-means
new file mode 120000
index 0000000000..fcc47eb3cf
--- /dev/null
+++ b/Lang/Python/Averages-Pythagorean-means
@@ -0,0 +1 @@
+../../Task/Averages-Pythagorean-means/Python
\ No newline at end of file
diff --git a/Lang/Python/Averages-Root-mean-square b/Lang/Python/Averages-Root-mean-square
new file mode 120000
index 0000000000..1ca6802484
--- /dev/null
+++ b/Lang/Python/Averages-Root-mean-square
@@ -0,0 +1 @@
+../../Task/Averages-Root-mean-square/Python
\ No newline at end of file
diff --git a/Lang/Python/Averages-Simple-moving-average b/Lang/Python/Averages-Simple-moving-average
new file mode 120000
index 0000000000..392668752d
--- /dev/null
+++ b/Lang/Python/Averages-Simple-moving-average
@@ -0,0 +1 @@
+../../Task/Averages-Simple-moving-average/Python
\ No newline at end of file
diff --git a/Lang/R/A+B b/Lang/R/A+B
new file mode 120000
index 0000000000..e3ca776a80
--- /dev/null
+++ b/Lang/R/A+B
@@ -0,0 +1 @@
+../../Task/A+B/R
\ No newline at end of file
diff --git a/Lang/R/Accumulator-factory b/Lang/R/Accumulator-factory
new file mode 120000
index 0000000000..dba68a61e7
--- /dev/null
+++ b/Lang/R/Accumulator-factory
@@ -0,0 +1 @@
+../../Task/Accumulator-factory/R
\ No newline at end of file
diff --git a/Lang/R/Align-columns b/Lang/R/Align-columns
new file mode 120000
index 0000000000..b332e7bdd8
--- /dev/null
+++ b/Lang/R/Align-columns
@@ -0,0 +1 @@
+../../Task/Align-columns/R
\ No newline at end of file
diff --git a/Lang/R/Anagrams-Deranged-anagrams b/Lang/R/Anagrams-Deranged-anagrams
new file mode 120000
index 0000000000..438e1b14c7
--- /dev/null
+++ b/Lang/R/Anagrams-Deranged-anagrams
@@ -0,0 +1 @@
+../../Task/Anagrams-Deranged-anagrams/R
\ No newline at end of file
diff --git a/Lang/R/Animation b/Lang/R/Animation
new file mode 120000
index 0000000000..6d99c1dcef
--- /dev/null
+++ b/Lang/R/Animation
@@ -0,0 +1 @@
+../../Task/Animation/R
\ No newline at end of file
diff --git a/Lang/R/Anonymous-recursion b/Lang/R/Anonymous-recursion
new file mode 120000
index 0000000000..0b7bc400ca
--- /dev/null
+++ b/Lang/R/Anonymous-recursion
@@ -0,0 +1 @@
+../../Task/Anonymous-recursion/R
\ No newline at end of file
diff --git a/Lang/R/Apply-a-callback-to-an-array b/Lang/R/Apply-a-callback-to-an-array
new file mode 120000
index 0000000000..2b8c68230d
--- /dev/null
+++ b/Lang/R/Apply-a-callback-to-an-array
@@ -0,0 +1 @@
+../../Task/Apply-a-callback-to-an-array/R
\ No newline at end of file
diff --git a/Lang/R/Arbitrary-precision-integers-(included) b/Lang/R/Arbitrary-precision-integers-(included)
new file mode 120000
index 0000000000..e0676cbbd9
--- /dev/null
+++ b/Lang/R/Arbitrary-precision-integers-(included)
@@ -0,0 +1 @@
+../../Task/Arbitrary-precision-integers-(included)/R
\ No newline at end of file
diff --git a/Lang/R/Arithmetic-Complex b/Lang/R/Arithmetic-Complex
new file mode 120000
index 0000000000..fd7c89e18c
--- /dev/null
+++ b/Lang/R/Arithmetic-Complex
@@ -0,0 +1 @@
+../../Task/Arithmetic-Complex/R
\ No newline at end of file
diff --git a/Lang/R/Arithmetic-geometric-mean b/Lang/R/Arithmetic-geometric-mean
new file mode 120000
index 0000000000..07a953d8b1
--- /dev/null
+++ b/Lang/R/Arithmetic-geometric-mean
@@ -0,0 +1 @@
+../../Task/Arithmetic-geometric-mean/R
\ No newline at end of file
diff --git a/Lang/R/Array-concatenation b/Lang/R/Array-concatenation
new file mode 120000
index 0000000000..80ee1af530
--- /dev/null
+++ b/Lang/R/Array-concatenation
@@ -0,0 +1 @@
+../../Task/Array-concatenation/R
\ No newline at end of file
diff --git a/Lang/R/Associative-array-Creation b/Lang/R/Associative-array-Creation
new file mode 120000
index 0000000000..87c30c4fa3
--- /dev/null
+++ b/Lang/R/Associative-array-Creation
@@ -0,0 +1 @@
+../../Task/Associative-array-Creation/R
\ No newline at end of file
diff --git a/Lang/R/Associative-array-Iteration b/Lang/R/Associative-array-Iteration
new file mode 120000
index 0000000000..d8fe593ca1
--- /dev/null
+++ b/Lang/R/Associative-array-Iteration
@@ -0,0 +1 @@
+../../Task/Associative-array-Iteration/R
\ No newline at end of file
diff --git a/Lang/R/Averages-Arithmetic-mean b/Lang/R/Averages-Arithmetic-mean
new file mode 120000
index 0000000000..90336b20be
--- /dev/null
+++ b/Lang/R/Averages-Arithmetic-mean
@@ -0,0 +1 @@
+../../Task/Averages-Arithmetic-mean/R
\ No newline at end of file
diff --git a/Lang/R/Averages-Median b/Lang/R/Averages-Median
new file mode 120000
index 0000000000..87e56c9d61
--- /dev/null
+++ b/Lang/R/Averages-Median
@@ -0,0 +1 @@
+../../Task/Averages-Median/R
\ No newline at end of file
diff --git a/Lang/R/Averages-Pythagorean-means b/Lang/R/Averages-Pythagorean-means
new file mode 120000
index 0000000000..16ecb8aa92
--- /dev/null
+++ b/Lang/R/Averages-Pythagorean-means
@@ -0,0 +1 @@
+../../Task/Averages-Pythagorean-means/R
\ No newline at end of file
diff --git a/Lang/R/Averages-Root-mean-square b/Lang/R/Averages-Root-mean-square
new file mode 120000
index 0000000000..744f5de58e
--- /dev/null
+++ b/Lang/R/Averages-Root-mean-square
@@ -0,0 +1 @@
+../../Task/Averages-Root-mean-square/R
\ No newline at end of file
diff --git a/Lang/R/Averages-Simple-moving-average b/Lang/R/Averages-Simple-moving-average
new file mode 120000
index 0000000000..7d816252bc
--- /dev/null
+++ b/Lang/R/Averages-Simple-moving-average
@@ -0,0 +1 @@
+../../Task/Averages-Simple-moving-average/R
\ No newline at end of file
diff --git a/Lang/REXX/A+B b/Lang/REXX/A+B
new file mode 120000
index 0000000000..b569e4fba3
--- /dev/null
+++ b/Lang/REXX/A+B
@@ -0,0 +1 @@
+../../Task/A+B/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Accumulator-factory b/Lang/REXX/Accumulator-factory
new file mode 120000
index 0000000000..abdc586cf5
--- /dev/null
+++ b/Lang/REXX/Accumulator-factory
@@ -0,0 +1 @@
+../../Task/Accumulator-factory/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Active-Directory-Search-for-a-user b/Lang/REXX/Active-Directory-Search-for-a-user
new file mode 120000
index 0000000000..c076d1f6b8
--- /dev/null
+++ b/Lang/REXX/Active-Directory-Search-for-a-user
@@ -0,0 +1 @@
+../../Task/Active-Directory-Search-for-a-user/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Address-of-a-variable b/Lang/REXX/Address-of-a-variable
new file mode 120000
index 0000000000..868c01d0e1
--- /dev/null
+++ b/Lang/REXX/Address-of-a-variable
@@ -0,0 +1 @@
+../../Task/Address-of-a-variable/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Align-columns b/Lang/REXX/Align-columns
new file mode 120000
index 0000000000..a5b289d361
--- /dev/null
+++ b/Lang/REXX/Align-columns
@@ -0,0 +1 @@
+../../Task/Align-columns/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Anagrams-Deranged-anagrams b/Lang/REXX/Anagrams-Deranged-anagrams
new file mode 120000
index 0000000000..8401dbd4fc
--- /dev/null
+++ b/Lang/REXX/Anagrams-Deranged-anagrams
@@ -0,0 +1 @@
+../../Task/Anagrams-Deranged-anagrams/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Anonymous-recursion b/Lang/REXX/Anonymous-recursion
new file mode 120000
index 0000000000..b0a56a281a
--- /dev/null
+++ b/Lang/REXX/Anonymous-recursion
@@ -0,0 +1 @@
+../../Task/Anonymous-recursion/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Apply-a-callback-to-an-array b/Lang/REXX/Apply-a-callback-to-an-array
new file mode 120000
index 0000000000..f2e68fb811
--- /dev/null
+++ b/Lang/REXX/Apply-a-callback-to-an-array
@@ -0,0 +1 @@
+../../Task/Apply-a-callback-to-an-array/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Arbitrary-precision-integers-(included) b/Lang/REXX/Arbitrary-precision-integers-(included)
new file mode 120000
index 0000000000..dd68e3d6a6
--- /dev/null
+++ b/Lang/REXX/Arbitrary-precision-integers-(included)
@@ -0,0 +1 @@
+../../Task/Arbitrary-precision-integers-(included)/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Arena-storage-pool b/Lang/REXX/Arena-storage-pool
new file mode 120000
index 0000000000..044c877b63
--- /dev/null
+++ b/Lang/REXX/Arena-storage-pool
@@ -0,0 +1 @@
+../../Task/Arena-storage-pool/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Arithmetic-Complex b/Lang/REXX/Arithmetic-Complex
new file mode 120000
index 0000000000..bd12f82371
--- /dev/null
+++ b/Lang/REXX/Arithmetic-Complex
@@ -0,0 +1 @@
+../../Task/Arithmetic-Complex/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Arithmetic-Rational b/Lang/REXX/Arithmetic-Rational
new file mode 120000
index 0000000000..391d174ba8
--- /dev/null
+++ b/Lang/REXX/Arithmetic-Rational
@@ -0,0 +1 @@
+../../Task/Arithmetic-Rational/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Arithmetic-evaluation b/Lang/REXX/Arithmetic-evaluation
new file mode 120000
index 0000000000..9e3cb80e25
--- /dev/null
+++ b/Lang/REXX/Arithmetic-evaluation
@@ -0,0 +1 @@
+../../Task/Arithmetic-evaluation/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Arithmetic-geometric-mean b/Lang/REXX/Arithmetic-geometric-mean
new file mode 120000
index 0000000000..634b2ee85c
--- /dev/null
+++ b/Lang/REXX/Arithmetic-geometric-mean
@@ -0,0 +1 @@
+../../Task/Arithmetic-geometric-mean/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Array-concatenation b/Lang/REXX/Array-concatenation
new file mode 120000
index 0000000000..78e2b1f467
--- /dev/null
+++ b/Lang/REXX/Array-concatenation
@@ -0,0 +1 @@
+../../Task/Array-concatenation/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Associative-array-Creation b/Lang/REXX/Associative-array-Creation
new file mode 120000
index 0000000000..47c0adac48
--- /dev/null
+++ b/Lang/REXX/Associative-array-Creation
@@ -0,0 +1 @@
+../../Task/Associative-array-Creation/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Associative-array-Iteration b/Lang/REXX/Associative-array-Iteration
new file mode 120000
index 0000000000..a1361053ad
--- /dev/null
+++ b/Lang/REXX/Associative-array-Iteration
@@ -0,0 +1 @@
+../../Task/Associative-array-Iteration/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Average-loop-length b/Lang/REXX/Average-loop-length
new file mode 120000
index 0000000000..c832d384f4
--- /dev/null
+++ b/Lang/REXX/Average-loop-length
@@ -0,0 +1 @@
+../../Task/Average-loop-length/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Averages-Arithmetic-mean b/Lang/REXX/Averages-Arithmetic-mean
new file mode 120000
index 0000000000..7d2d859146
--- /dev/null
+++ b/Lang/REXX/Averages-Arithmetic-mean
@@ -0,0 +1 @@
+../../Task/Averages-Arithmetic-mean/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Averages-Mean-angle b/Lang/REXX/Averages-Mean-angle
new file mode 120000
index 0000000000..84345e85b9
--- /dev/null
+++ b/Lang/REXX/Averages-Mean-angle
@@ -0,0 +1 @@
+../../Task/Averages-Mean-angle/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Averages-Median b/Lang/REXX/Averages-Median
new file mode 120000
index 0000000000..dbd09b0056
--- /dev/null
+++ b/Lang/REXX/Averages-Median
@@ -0,0 +1 @@
+../../Task/Averages-Median/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Averages-Pythagorean-means b/Lang/REXX/Averages-Pythagorean-means
new file mode 120000
index 0000000000..426343e423
--- /dev/null
+++ b/Lang/REXX/Averages-Pythagorean-means
@@ -0,0 +1 @@
+../../Task/Averages-Pythagorean-means/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Averages-Root-mean-square b/Lang/REXX/Averages-Root-mean-square
new file mode 120000
index 0000000000..b773693e16
--- /dev/null
+++ b/Lang/REXX/Averages-Root-mean-square
@@ -0,0 +1 @@
+../../Task/Averages-Root-mean-square/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Averages-Simple-moving-average b/Lang/REXX/Averages-Simple-moving-average
new file mode 120000
index 0000000000..51c23d0f0d
--- /dev/null
+++ b/Lang/REXX/Averages-Simple-moving-average
@@ -0,0 +1 @@
+../../Task/Averages-Simple-moving-average/REXX
\ No newline at end of file
diff --git a/Lang/Racket/A+B b/Lang/Racket/A+B
new file mode 120000
index 0000000000..4650d843bf
--- /dev/null
+++ b/Lang/Racket/A+B
@@ -0,0 +1 @@
+../../Task/A+B/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Abstract-type b/Lang/Racket/Abstract-type
new file mode 120000
index 0000000000..e92c252d12
--- /dev/null
+++ b/Lang/Racket/Abstract-type
@@ -0,0 +1 @@
+../../Task/Abstract-type/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Accumulator-factory b/Lang/Racket/Accumulator-factory
new file mode 120000
index 0000000000..3bd54ae698
--- /dev/null
+++ b/Lang/Racket/Accumulator-factory
@@ -0,0 +1 @@
+../../Task/Accumulator-factory/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Active-object b/Lang/Racket/Active-object
new file mode 120000
index 0000000000..b49be0474f
--- /dev/null
+++ b/Lang/Racket/Active-object
@@ -0,0 +1 @@
+../../Task/Active-object/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Address-of-a-variable b/Lang/Racket/Address-of-a-variable
new file mode 120000
index 0000000000..88582de11c
--- /dev/null
+++ b/Lang/Racket/Address-of-a-variable
@@ -0,0 +1 @@
+../../Task/Address-of-a-variable/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Align-columns b/Lang/Racket/Align-columns
new file mode 120000
index 0000000000..654dbb642e
--- /dev/null
+++ b/Lang/Racket/Align-columns
@@ -0,0 +1 @@
+../../Task/Align-columns/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Animation b/Lang/Racket/Animation
new file mode 120000
index 0000000000..cc5069dcbf
--- /dev/null
+++ b/Lang/Racket/Animation
@@ -0,0 +1 @@
+../../Task/Animation/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Anonymous-recursion b/Lang/Racket/Anonymous-recursion
new file mode 120000
index 0000000000..e148b7945c
--- /dev/null
+++ b/Lang/Racket/Anonymous-recursion
@@ -0,0 +1 @@
+../../Task/Anonymous-recursion/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Apply-a-callback-to-an-array b/Lang/Racket/Apply-a-callback-to-an-array
new file mode 120000
index 0000000000..8bba44b669
--- /dev/null
+++ b/Lang/Racket/Apply-a-callback-to-an-array
@@ -0,0 +1 @@
+../../Task/Apply-a-callback-to-an-array/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Arbitrary-precision-integers-(included) b/Lang/Racket/Arbitrary-precision-integers-(included)
new file mode 120000
index 0000000000..345e5d6de9
--- /dev/null
+++ b/Lang/Racket/Arbitrary-precision-integers-(included)
@@ -0,0 +1 @@
+../../Task/Arbitrary-precision-integers-(included)/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Arithmetic-Complex b/Lang/Racket/Arithmetic-Complex
new file mode 120000
index 0000000000..fd0ed15adc
--- /dev/null
+++ b/Lang/Racket/Arithmetic-Complex
@@ -0,0 +1 @@
+../../Task/Arithmetic-Complex/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Arithmetic-geometric-mean b/Lang/Racket/Arithmetic-geometric-mean
new file mode 120000
index 0000000000..24eb6e4d14
--- /dev/null
+++ b/Lang/Racket/Arithmetic-geometric-mean
@@ -0,0 +1 @@
+../../Task/Arithmetic-geometric-mean/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Array-concatenation b/Lang/Racket/Array-concatenation
new file mode 120000
index 0000000000..45ec8782c5
--- /dev/null
+++ b/Lang/Racket/Array-concatenation
@@ -0,0 +1 @@
+../../Task/Array-concatenation/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Associative-array-Creation b/Lang/Racket/Associative-array-Creation
new file mode 120000
index 0000000000..9eb259a769
--- /dev/null
+++ b/Lang/Racket/Associative-array-Creation
@@ -0,0 +1 @@
+../../Task/Associative-array-Creation/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Associative-array-Iteration b/Lang/Racket/Associative-array-Iteration
new file mode 120000
index 0000000000..7573ce5e8d
--- /dev/null
+++ b/Lang/Racket/Associative-array-Iteration
@@ -0,0 +1 @@
+../../Task/Associative-array-Iteration/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Averages-Arithmetic-mean b/Lang/Racket/Averages-Arithmetic-mean
new file mode 120000
index 0000000000..61a64ad17e
--- /dev/null
+++ b/Lang/Racket/Averages-Arithmetic-mean
@@ -0,0 +1 @@
+../../Task/Averages-Arithmetic-mean/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Averages-Mean-angle b/Lang/Racket/Averages-Mean-angle
new file mode 120000
index 0000000000..8842733109
--- /dev/null
+++ b/Lang/Racket/Averages-Mean-angle
@@ -0,0 +1 @@
+../../Task/Averages-Mean-angle/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Averages-Median b/Lang/Racket/Averages-Median
new file mode 120000
index 0000000000..a3fe8188cf
--- /dev/null
+++ b/Lang/Racket/Averages-Median
@@ -0,0 +1 @@
+../../Task/Averages-Median/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Averages-Pythagorean-means b/Lang/Racket/Averages-Pythagorean-means
new file mode 120000
index 0000000000..c7fc622b05
--- /dev/null
+++ b/Lang/Racket/Averages-Pythagorean-means
@@ -0,0 +1 @@
+../../Task/Averages-Pythagorean-means/Racket
\ No newline at end of file
diff --git a/Lang/Ruby/A+B b/Lang/Ruby/A+B
new file mode 120000
index 0000000000..1d3c009edb
--- /dev/null
+++ b/Lang/Ruby/A+B
@@ -0,0 +1 @@
+../../Task/A+B/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Abstract-type b/Lang/Ruby/Abstract-type
new file mode 120000
index 0000000000..e0fad8c08d
--- /dev/null
+++ b/Lang/Ruby/Abstract-type
@@ -0,0 +1 @@
+../../Task/Abstract-type/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Accumulator-factory b/Lang/Ruby/Accumulator-factory
new file mode 120000
index 0000000000..ca22d9a047
--- /dev/null
+++ b/Lang/Ruby/Accumulator-factory
@@ -0,0 +1 @@
+../../Task/Accumulator-factory/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Active-Directory-Connect b/Lang/Ruby/Active-Directory-Connect
new file mode 120000
index 0000000000..fb2e06d88f
--- /dev/null
+++ b/Lang/Ruby/Active-Directory-Connect
@@ -0,0 +1 @@
+../../Task/Active-Directory-Connect/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Active-Directory-Search-for-a-user b/Lang/Ruby/Active-Directory-Search-for-a-user
new file mode 120000
index 0000000000..42dc662508
--- /dev/null
+++ b/Lang/Ruby/Active-Directory-Search-for-a-user
@@ -0,0 +1 @@
+../../Task/Active-Directory-Search-for-a-user/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Add-a-variable-to-a-class-instance-at-runtime b/Lang/Ruby/Add-a-variable-to-a-class-instance-at-runtime
new file mode 120000
index 0000000000..51f497219e
--- /dev/null
+++ b/Lang/Ruby/Add-a-variable-to-a-class-instance-at-runtime
@@ -0,0 +1 @@
+../../Task/Add-a-variable-to-a-class-instance-at-runtime/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Address-of-a-variable b/Lang/Ruby/Address-of-a-variable
new file mode 120000
index 0000000000..abd5fa293c
--- /dev/null
+++ b/Lang/Ruby/Address-of-a-variable
@@ -0,0 +1 @@
+../../Task/Address-of-a-variable/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Align-columns b/Lang/Ruby/Align-columns
new file mode 120000
index 0000000000..99e9fd5a76
--- /dev/null
+++ b/Lang/Ruby/Align-columns
@@ -0,0 +1 @@
+../../Task/Align-columns/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Anagrams-Deranged-anagrams b/Lang/Ruby/Anagrams-Deranged-anagrams
new file mode 120000
index 0000000000..750aaa8909
--- /dev/null
+++ b/Lang/Ruby/Anagrams-Deranged-anagrams
@@ -0,0 +1 @@
+../../Task/Anagrams-Deranged-anagrams/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Animation b/Lang/Ruby/Animation
new file mode 120000
index 0000000000..b870788de0
--- /dev/null
+++ b/Lang/Ruby/Animation
@@ -0,0 +1 @@
+../../Task/Animation/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Anonymous-recursion b/Lang/Ruby/Anonymous-recursion
new file mode 120000
index 0000000000..3434c55048
--- /dev/null
+++ b/Lang/Ruby/Anonymous-recursion
@@ -0,0 +1 @@
+../../Task/Anonymous-recursion/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Apply-a-callback-to-an-array b/Lang/Ruby/Apply-a-callback-to-an-array
new file mode 120000
index 0000000000..b8aa59bd54
--- /dev/null
+++ b/Lang/Ruby/Apply-a-callback-to-an-array
@@ -0,0 +1 @@
+../../Task/Apply-a-callback-to-an-array/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Arbitrary-precision-integers-(included) b/Lang/Ruby/Arbitrary-precision-integers-(included)
new file mode 120000
index 0000000000..e9718d891c
--- /dev/null
+++ b/Lang/Ruby/Arbitrary-precision-integers-(included)
@@ -0,0 +1 @@
+../../Task/Arbitrary-precision-integers-(included)/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Arithmetic-Complex b/Lang/Ruby/Arithmetic-Complex
new file mode 120000
index 0000000000..a2a6e8d38a
--- /dev/null
+++ b/Lang/Ruby/Arithmetic-Complex
@@ -0,0 +1 @@
+../../Task/Arithmetic-Complex/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Arithmetic-Rational b/Lang/Ruby/Arithmetic-Rational
new file mode 120000
index 0000000000..8d2c4749ac
--- /dev/null
+++ b/Lang/Ruby/Arithmetic-Rational
@@ -0,0 +1 @@
+../../Task/Arithmetic-Rational/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Arithmetic-evaluation b/Lang/Ruby/Arithmetic-evaluation
new file mode 120000
index 0000000000..20f4da1897
--- /dev/null
+++ b/Lang/Ruby/Arithmetic-evaluation
@@ -0,0 +1 @@
+../../Task/Arithmetic-evaluation/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Arithmetic-geometric-mean b/Lang/Ruby/Arithmetic-geometric-mean
new file mode 120000
index 0000000000..f2344e7f91
--- /dev/null
+++ b/Lang/Ruby/Arithmetic-geometric-mean
@@ -0,0 +1 @@
+../../Task/Arithmetic-geometric-mean/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Array-concatenation b/Lang/Ruby/Array-concatenation
new file mode 120000
index 0000000000..b3b6d2dda1
--- /dev/null
+++ b/Lang/Ruby/Array-concatenation
@@ -0,0 +1 @@
+../../Task/Array-concatenation/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Associative-array-Creation b/Lang/Ruby/Associative-array-Creation
new file mode 120000
index 0000000000..8f728c16ff
--- /dev/null
+++ b/Lang/Ruby/Associative-array-Creation
@@ -0,0 +1 @@
+../../Task/Associative-array-Creation/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Associative-array-Iteration b/Lang/Ruby/Associative-array-Iteration
new file mode 120000
index 0000000000..a526211aeb
--- /dev/null
+++ b/Lang/Ruby/Associative-array-Iteration
@@ -0,0 +1 @@
+../../Task/Associative-array-Iteration/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Atomic-updates b/Lang/Ruby/Atomic-updates
new file mode 120000
index 0000000000..2e269e0ac4
--- /dev/null
+++ b/Lang/Ruby/Atomic-updates
@@ -0,0 +1 @@
+../../Task/Atomic-updates/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Averages-Arithmetic-mean b/Lang/Ruby/Averages-Arithmetic-mean
new file mode 120000
index 0000000000..3894008cad
--- /dev/null
+++ b/Lang/Ruby/Averages-Arithmetic-mean
@@ -0,0 +1 @@
+../../Task/Averages-Arithmetic-mean/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Averages-Mean-angle b/Lang/Ruby/Averages-Mean-angle
new file mode 120000
index 0000000000..8dba807adc
--- /dev/null
+++ b/Lang/Ruby/Averages-Mean-angle
@@ -0,0 +1 @@
+../../Task/Averages-Mean-angle/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Averages-Median b/Lang/Ruby/Averages-Median
new file mode 120000
index 0000000000..1cc076ff55
--- /dev/null
+++ b/Lang/Ruby/Averages-Median
@@ -0,0 +1 @@
+../../Task/Averages-Median/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Averages-Pythagorean-means b/Lang/Ruby/Averages-Pythagorean-means
new file mode 120000
index 0000000000..533c9ecf24
--- /dev/null
+++ b/Lang/Ruby/Averages-Pythagorean-means
@@ -0,0 +1 @@
+../../Task/Averages-Pythagorean-means/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Averages-Root-mean-square b/Lang/Ruby/Averages-Root-mean-square
new file mode 120000
index 0000000000..df5b9a8bb4
--- /dev/null
+++ b/Lang/Ruby/Averages-Root-mean-square
@@ -0,0 +1 @@
+../../Task/Averages-Root-mean-square/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Averages-Simple-moving-average b/Lang/Ruby/Averages-Simple-moving-average
new file mode 120000
index 0000000000..9b4fc76e1f
--- /dev/null
+++ b/Lang/Ruby/Averages-Simple-moving-average
@@ -0,0 +1 @@
+../../Task/Averages-Simple-moving-average/Ruby
\ No newline at end of file
diff --git a/Lang/Sather/Apply-a-callback-to-an-array b/Lang/Sather/Apply-a-callback-to-an-array
new file mode 120000
index 0000000000..1bbbd602a9
--- /dev/null
+++ b/Lang/Sather/Apply-a-callback-to-an-array
@@ -0,0 +1 @@
+../../Task/Apply-a-callback-to-an-array/Sather
\ No newline at end of file
diff --git a/Lang/Sather/Arbitrary-precision-integers-(included) b/Lang/Sather/Arbitrary-precision-integers-(included)
new file mode 120000
index 0000000000..073407923a
--- /dev/null
+++ b/Lang/Sather/Arbitrary-precision-integers-(included)
@@ -0,0 +1 @@
+../../Task/Arbitrary-precision-integers-(included)/Sather
\ No newline at end of file
diff --git a/Lang/Sather/Associative-array-Creation b/Lang/Sather/Associative-array-Creation
new file mode 120000
index 0000000000..aefa403bb8
--- /dev/null
+++ b/Lang/Sather/Associative-array-Creation
@@ -0,0 +1 @@
+../../Task/Associative-array-Creation/Sather
\ No newline at end of file
diff --git a/Lang/Sather/Averages-Arithmetic-mean b/Lang/Sather/Averages-Arithmetic-mean
new file mode 120000
index 0000000000..912c645da9
--- /dev/null
+++ b/Lang/Sather/Averages-Arithmetic-mean
@@ -0,0 +1 @@
+../../Task/Averages-Arithmetic-mean/Sather
\ No newline at end of file
diff --git a/Lang/Sather/Averages-Root-mean-square b/Lang/Sather/Averages-Root-mean-square
new file mode 120000
index 0000000000..29383ade0d
--- /dev/null
+++ b/Lang/Sather/Averages-Root-mean-square
@@ -0,0 +1 @@
+../../Task/Averages-Root-mean-square/Sather
\ No newline at end of file
diff --git a/Lang/Scala/A+B b/Lang/Scala/A+B
new file mode 120000
index 0000000000..398bcfd173
--- /dev/null
+++ b/Lang/Scala/A+B
@@ -0,0 +1 @@
+../../Task/A+B/Scala
\ No newline at end of file
diff --git a/Lang/Scala/Abstract-type b/Lang/Scala/Abstract-type
new file mode 120000
index 0000000000..d684901038
--- /dev/null
+++ b/Lang/Scala/Abstract-type
@@ -0,0 +1 @@
+../../Task/Abstract-type/Scala
\ No newline at end of file
diff --git a/Lang/Scala/Accumulator-factory b/Lang/Scala/Accumulator-factory
new file mode 120000
index 0000000000..825820e0e1
--- /dev/null
+++ b/Lang/Scala/Accumulator-factory
@@ -0,0 +1 @@
+../../Task/Accumulator-factory/Scala
\ No newline at end of file
diff --git a/Lang/Scala/Active-object b/Lang/Scala/Active-object
new file mode 120000
index 0000000000..89183d80e0
--- /dev/null
+++ b/Lang/Scala/Active-object
@@ -0,0 +1 @@
+../../Task/Active-object/Scala
\ No newline at end of file
diff --git a/Lang/Scala/Add-a-variable-to-a-class-instance-at-runtime b/Lang/Scala/Add-a-variable-to-a-class-instance-at-runtime
new file mode 120000
index 0000000000..0bcff19202
--- /dev/null
+++ b/Lang/Scala/Add-a-variable-to-a-class-instance-at-runtime
@@ -0,0 +1 @@
+../../Task/Add-a-variable-to-a-class-instance-at-runtime/Scala
\ No newline at end of file
diff --git a/Lang/Scala/Align-columns b/Lang/Scala/Align-columns
new file mode 120000
index 0000000000..2757bd603c
--- /dev/null
+++ b/Lang/Scala/Align-columns
@@ -0,0 +1 @@
+../../Task/Align-columns/Scala
\ No newline at end of file
diff --git a/Lang/Scala/Anagrams-Deranged-anagrams b/Lang/Scala/Anagrams-Deranged-anagrams
new file mode 120000
index 0000000000..d9489fd618
--- /dev/null
+++ b/Lang/Scala/Anagrams-Deranged-anagrams
@@ -0,0 +1 @@
+../../Task/Anagrams-Deranged-anagrams/Scala
\ No newline at end of file
diff --git a/Lang/Scala/Animation b/Lang/Scala/Animation
new file mode 120000
index 0000000000..8c96cd66bc
--- /dev/null
+++ b/Lang/Scala/Animation
@@ -0,0 +1 @@
+../../Task/Animation/Scala
\ No newline at end of file
diff --git a/Lang/Scala/Anonymous-recursion b/Lang/Scala/Anonymous-recursion
new file mode 120000
index 0000000000..73fae28df6
--- /dev/null
+++ b/Lang/Scala/Anonymous-recursion
@@ -0,0 +1 @@
+../../Task/Anonymous-recursion/Scala
\ No newline at end of file
diff --git a/Lang/Scala/Apply-a-callback-to-an-array b/Lang/Scala/Apply-a-callback-to-an-array
new file mode 120000
index 0000000000..d1b036383d
--- /dev/null
+++ b/Lang/Scala/Apply-a-callback-to-an-array
@@ -0,0 +1 @@
+../../Task/Apply-a-callback-to-an-array/Scala
\ No newline at end of file
diff --git a/Lang/Scala/Arbitrary-precision-integers-(included) b/Lang/Scala/Arbitrary-precision-integers-(included)
new file mode 120000
index 0000000000..fba506188d
--- /dev/null
+++ b/Lang/Scala/Arbitrary-precision-integers-(included)
@@ -0,0 +1 @@
+../../Task/Arbitrary-precision-integers-(included)/Scala
\ No newline at end of file
diff --git a/Lang/Scala/Arithmetic-Complex b/Lang/Scala/Arithmetic-Complex
new file mode 120000
index 0000000000..f28d4f3fbc
--- /dev/null
+++ b/Lang/Scala/Arithmetic-Complex
@@ -0,0 +1 @@
+../../Task/Arithmetic-Complex/Scala
\ No newline at end of file
diff --git a/Lang/Scala/Arithmetic-Rational b/Lang/Scala/Arithmetic-Rational
new file mode 120000
index 0000000000..b2512ec845
--- /dev/null
+++ b/Lang/Scala/Arithmetic-Rational
@@ -0,0 +1 @@
+../../Task/Arithmetic-Rational/Scala
\ No newline at end of file
diff --git a/Lang/Scala/Arithmetic-evaluation b/Lang/Scala/Arithmetic-evaluation
new file mode 120000
index 0000000000..0726211d38
--- /dev/null
+++ b/Lang/Scala/Arithmetic-evaluation
@@ -0,0 +1 @@
+../../Task/Arithmetic-evaluation/Scala
\ No newline at end of file
diff --git a/Lang/Scala/Arithmetic-geometric-mean b/Lang/Scala/Arithmetic-geometric-mean
new file mode 120000
index 0000000000..7a5522759d
--- /dev/null
+++ b/Lang/Scala/Arithmetic-geometric-mean
@@ -0,0 +1 @@
+../../Task/Arithmetic-geometric-mean/Scala
\ No newline at end of file
diff --git a/Lang/Scala/Array-concatenation b/Lang/Scala/Array-concatenation
new file mode 120000
index 0000000000..f040df9360
--- /dev/null
+++ b/Lang/Scala/Array-concatenation
@@ -0,0 +1 @@
+../../Task/Array-concatenation/Scala
\ No newline at end of file
diff --git a/Lang/Scala/Associative-array-Creation b/Lang/Scala/Associative-array-Creation
new file mode 120000
index 0000000000..6a5b07b603
--- /dev/null
+++ b/Lang/Scala/Associative-array-Creation
@@ -0,0 +1 @@
+../../Task/Associative-array-Creation/Scala
\ No newline at end of file
diff --git a/Lang/Scala/Associative-array-Iteration b/Lang/Scala/Associative-array-Iteration
new file mode 120000
index 0000000000..31ed6b621f
--- /dev/null
+++ b/Lang/Scala/Associative-array-Iteration
@@ -0,0 +1 @@
+../../Task/Associative-array-Iteration/Scala
\ No newline at end of file
diff --git a/Lang/Scala/Atomic-updates b/Lang/Scala/Atomic-updates
new file mode 120000
index 0000000000..5b86281f85
--- /dev/null
+++ b/Lang/Scala/Atomic-updates
@@ -0,0 +1 @@
+../../Task/Atomic-updates/Scala
\ No newline at end of file
diff --git a/Lang/Scala/Averages-Arithmetic-mean b/Lang/Scala/Averages-Arithmetic-mean
new file mode 120000
index 0000000000..26f0a280e6
--- /dev/null
+++ b/Lang/Scala/Averages-Arithmetic-mean
@@ -0,0 +1 @@
+../../Task/Averages-Arithmetic-mean/Scala
\ No newline at end of file
diff --git a/Lang/Scala/Averages-Median b/Lang/Scala/Averages-Median
new file mode 120000
index 0000000000..04385b404c
--- /dev/null
+++ b/Lang/Scala/Averages-Median
@@ -0,0 +1 @@
+../../Task/Averages-Median/Scala
\ No newline at end of file
diff --git a/Lang/Scala/Averages-Pythagorean-means b/Lang/Scala/Averages-Pythagorean-means
new file mode 120000
index 0000000000..c4d2459c35
--- /dev/null
+++ b/Lang/Scala/Averages-Pythagorean-means
@@ -0,0 +1 @@
+../../Task/Averages-Pythagorean-means/Scala
\ No newline at end of file
diff --git a/Lang/Scala/Averages-Root-mean-square b/Lang/Scala/Averages-Root-mean-square
new file mode 120000
index 0000000000..8008c8e244
--- /dev/null
+++ b/Lang/Scala/Averages-Root-mean-square
@@ -0,0 +1 @@
+../../Task/Averages-Root-mean-square/Scala
\ No newline at end of file
diff --git a/Lang/Scala/Averages-Simple-moving-average b/Lang/Scala/Averages-Simple-moving-average
new file mode 120000
index 0000000000..30cdd8b516
--- /dev/null
+++ b/Lang/Scala/Averages-Simple-moving-average
@@ -0,0 +1 @@
+../../Task/Averages-Simple-moving-average/Scala
\ No newline at end of file
diff --git a/Lang/Scheme/A+B b/Lang/Scheme/A+B
new file mode 120000
index 0000000000..ed88571cdf
--- /dev/null
+++ b/Lang/Scheme/A+B
@@ -0,0 +1 @@
+../../Task/A+B/Scheme
\ No newline at end of file
diff --git a/Lang/Scheme/Accumulator-factory b/Lang/Scheme/Accumulator-factory
new file mode 120000
index 0000000000..83c00cafe1
--- /dev/null
+++ b/Lang/Scheme/Accumulator-factory
@@ -0,0 +1 @@
+../../Task/Accumulator-factory/Scheme
\ No newline at end of file
diff --git a/Lang/Scheme/Anonymous-recursion b/Lang/Scheme/Anonymous-recursion
new file mode 120000
index 0000000000..13a0d5dc18
--- /dev/null
+++ b/Lang/Scheme/Anonymous-recursion
@@ -0,0 +1 @@
+../../Task/Anonymous-recursion/Scheme
\ No newline at end of file
diff --git a/Lang/Scheme/Apply-a-callback-to-an-array b/Lang/Scheme/Apply-a-callback-to-an-array
new file mode 120000
index 0000000000..57e50c101b
--- /dev/null
+++ b/Lang/Scheme/Apply-a-callback-to-an-array
@@ -0,0 +1 @@
+../../Task/Apply-a-callback-to-an-array/Scheme
\ No newline at end of file
diff --git a/Lang/Scheme/Arbitrary-precision-integers-(included) b/Lang/Scheme/Arbitrary-precision-integers-(included)
new file mode 120000
index 0000000000..853ed76c0e
--- /dev/null
+++ b/Lang/Scheme/Arbitrary-precision-integers-(included)
@@ -0,0 +1 @@
+../../Task/Arbitrary-precision-integers-(included)/Scheme
\ No newline at end of file
diff --git a/Lang/Scheme/Arithmetic-Complex b/Lang/Scheme/Arithmetic-Complex
new file mode 120000
index 0000000000..a6aad1b3ed
--- /dev/null
+++ b/Lang/Scheme/Arithmetic-Complex
@@ -0,0 +1 @@
+../../Task/Arithmetic-Complex/Scheme
\ No newline at end of file
diff --git a/Lang/Scheme/Arithmetic-Rational b/Lang/Scheme/Arithmetic-Rational
new file mode 120000
index 0000000000..f2c275057d
--- /dev/null
+++ b/Lang/Scheme/Arithmetic-Rational
@@ -0,0 +1 @@
+../../Task/Arithmetic-Rational/Scheme
\ No newline at end of file
diff --git a/Lang/Scheme/Array-concatenation b/Lang/Scheme/Array-concatenation
new file mode 120000
index 0000000000..2ced2718d4
--- /dev/null
+++ b/Lang/Scheme/Array-concatenation
@@ -0,0 +1 @@
+../../Task/Array-concatenation/Scheme
\ No newline at end of file
diff --git a/Lang/Scheme/Associative-array-Creation b/Lang/Scheme/Associative-array-Creation
new file mode 120000
index 0000000000..1c3e9d0e40
--- /dev/null
+++ b/Lang/Scheme/Associative-array-Creation
@@ -0,0 +1 @@
+../../Task/Associative-array-Creation/Scheme
\ No newline at end of file
diff --git a/Lang/Scheme/Averages-Arithmetic-mean b/Lang/Scheme/Averages-Arithmetic-mean
new file mode 120000
index 0000000000..6b22243387
--- /dev/null
+++ b/Lang/Scheme/Averages-Arithmetic-mean
@@ -0,0 +1 @@
+../../Task/Averages-Arithmetic-mean/Scheme
\ No newline at end of file
diff --git a/Lang/Scheme/Averages-Median b/Lang/Scheme/Averages-Median
new file mode 120000
index 0000000000..a28dff785a
--- /dev/null
+++ b/Lang/Scheme/Averages-Median
@@ -0,0 +1 @@
+../../Task/Averages-Median/Scheme
\ No newline at end of file
diff --git a/Lang/Scheme/Averages-Pythagorean-means b/Lang/Scheme/Averages-Pythagorean-means
new file mode 120000
index 0000000000..abf215cf65
--- /dev/null
+++ b/Lang/Scheme/Averages-Pythagorean-means
@@ -0,0 +1 @@
+../../Task/Averages-Pythagorean-means/Scheme
\ No newline at end of file
diff --git a/Lang/Scheme/Averages-Root-mean-square b/Lang/Scheme/Averages-Root-mean-square
new file mode 120000
index 0000000000..5c956d2afe
--- /dev/null
+++ b/Lang/Scheme/Averages-Root-mean-square
@@ -0,0 +1 @@
+../../Task/Averages-Root-mean-square/Scheme
\ No newline at end of file
diff --git a/Lang/Scheme/Averages-Simple-moving-average b/Lang/Scheme/Averages-Simple-moving-average
new file mode 120000
index 0000000000..5d86a1ff1b
--- /dev/null
+++ b/Lang/Scheme/Averages-Simple-moving-average
@@ -0,0 +1 @@
+../../Task/Averages-Simple-moving-average/Scheme
\ No newline at end of file
diff --git a/Lang/Smalltalk/A+B b/Lang/Smalltalk/A+B
new file mode 120000
index 0000000000..47e82325b1
--- /dev/null
+++ b/Lang/Smalltalk/A+B
@@ -0,0 +1 @@
+../../Task/A+B/Smalltalk
\ No newline at end of file
diff --git a/Lang/Smalltalk/Accumulator-factory b/Lang/Smalltalk/Accumulator-factory
new file mode 120000
index 0000000000..56c1754ca2
--- /dev/null
+++ b/Lang/Smalltalk/Accumulator-factory
@@ -0,0 +1 @@
+../../Task/Accumulator-factory/Smalltalk
\ No newline at end of file
diff --git a/Lang/Smalltalk/Add-a-variable-to-a-class-instance-at-runtime b/Lang/Smalltalk/Add-a-variable-to-a-class-instance-at-runtime
new file mode 120000
index 0000000000..7b94f11c4d
--- /dev/null
+++ b/Lang/Smalltalk/Add-a-variable-to-a-class-instance-at-runtime
@@ -0,0 +1 @@
+../../Task/Add-a-variable-to-a-class-instance-at-runtime/Smalltalk
\ No newline at end of file
diff --git a/Lang/Smalltalk/Address-of-a-variable b/Lang/Smalltalk/Address-of-a-variable
new file mode 120000
index 0000000000..12a2b5cbb6
--- /dev/null
+++ b/Lang/Smalltalk/Address-of-a-variable
@@ -0,0 +1 @@
+../../Task/Address-of-a-variable/Smalltalk
\ No newline at end of file
diff --git a/Lang/Smalltalk/Apply-a-callback-to-an-array b/Lang/Smalltalk/Apply-a-callback-to-an-array
new file mode 120000
index 0000000000..5e7c4baef8
--- /dev/null
+++ b/Lang/Smalltalk/Apply-a-callback-to-an-array
@@ -0,0 +1 @@
+../../Task/Apply-a-callback-to-an-array/Smalltalk
\ No newline at end of file
diff --git a/Lang/Smalltalk/Arbitrary-precision-integers-(included) b/Lang/Smalltalk/Arbitrary-precision-integers-(included)
new file mode 120000
index 0000000000..78954d80d6
--- /dev/null
+++ b/Lang/Smalltalk/Arbitrary-precision-integers-(included)
@@ -0,0 +1 @@
+../../Task/Arbitrary-precision-integers-(included)/Smalltalk
\ No newline at end of file
diff --git a/Lang/Smalltalk/Arithmetic-Complex b/Lang/Smalltalk/Arithmetic-Complex
new file mode 120000
index 0000000000..a4ca0f9ce5
--- /dev/null
+++ b/Lang/Smalltalk/Arithmetic-Complex
@@ -0,0 +1 @@
+../../Task/Arithmetic-Complex/Smalltalk
\ No newline at end of file
diff --git a/Lang/Smalltalk/Arithmetic-Rational b/Lang/Smalltalk/Arithmetic-Rational
new file mode 120000
index 0000000000..9981405406
--- /dev/null
+++ b/Lang/Smalltalk/Arithmetic-Rational
@@ -0,0 +1 @@
+../../Task/Arithmetic-Rational/Smalltalk
\ No newline at end of file
diff --git a/Lang/Smalltalk/Array-concatenation b/Lang/Smalltalk/Array-concatenation
new file mode 120000
index 0000000000..f81ae51b92
--- /dev/null
+++ b/Lang/Smalltalk/Array-concatenation
@@ -0,0 +1 @@
+../../Task/Array-concatenation/Smalltalk
\ No newline at end of file
diff --git a/Lang/Smalltalk/Associative-array-Creation b/Lang/Smalltalk/Associative-array-Creation
new file mode 120000
index 0000000000..9b286ecfc1
--- /dev/null
+++ b/Lang/Smalltalk/Associative-array-Creation
@@ -0,0 +1 @@
+../../Task/Associative-array-Creation/Smalltalk
\ No newline at end of file
diff --git a/Lang/Smalltalk/Associative-array-Iteration b/Lang/Smalltalk/Associative-array-Iteration
new file mode 120000
index 0000000000..bba3c89ebc
--- /dev/null
+++ b/Lang/Smalltalk/Associative-array-Iteration
@@ -0,0 +1 @@
+../../Task/Associative-array-Iteration/Smalltalk
\ No newline at end of file
diff --git a/Lang/Smalltalk/Averages-Arithmetic-mean b/Lang/Smalltalk/Averages-Arithmetic-mean
new file mode 120000
index 0000000000..6a800b911c
--- /dev/null
+++ b/Lang/Smalltalk/Averages-Arithmetic-mean
@@ -0,0 +1 @@
+../../Task/Averages-Arithmetic-mean/Smalltalk
\ No newline at end of file
diff --git a/Lang/Smalltalk/Averages-Median b/Lang/Smalltalk/Averages-Median
new file mode 120000
index 0000000000..036e082c82
--- /dev/null
+++ b/Lang/Smalltalk/Averages-Median
@@ -0,0 +1 @@
+../../Task/Averages-Median/Smalltalk
\ No newline at end of file
diff --git a/Lang/Smalltalk/Averages-Pythagorean-means b/Lang/Smalltalk/Averages-Pythagorean-means
new file mode 120000
index 0000000000..51eb2d5cec
--- /dev/null
+++ b/Lang/Smalltalk/Averages-Pythagorean-means
@@ -0,0 +1 @@
+../../Task/Averages-Pythagorean-means/Smalltalk
\ No newline at end of file
diff --git a/Lang/Smalltalk/Averages-Root-mean-square b/Lang/Smalltalk/Averages-Root-mean-square
new file mode 120000
index 0000000000..6f7c1915f8
--- /dev/null
+++ b/Lang/Smalltalk/Averages-Root-mean-square
@@ -0,0 +1 @@
+../../Task/Averages-Root-mean-square/Smalltalk
\ No newline at end of file
diff --git a/Lang/Smalltalk/Averages-Simple-moving-average b/Lang/Smalltalk/Averages-Simple-moving-average
new file mode 120000
index 0000000000..5f4f0cd7e8
--- /dev/null
+++ b/Lang/Smalltalk/Averages-Simple-moving-average
@@ -0,0 +1 @@
+../../Task/Averages-Simple-moving-average/Smalltalk
\ No newline at end of file
diff --git a/Lang/Tcl/A+B b/Lang/Tcl/A+B
new file mode 120000
index 0000000000..d7f7dcf82d
--- /dev/null
+++ b/Lang/Tcl/A+B
@@ -0,0 +1 @@
+../../Task/A+B/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Abstract-type b/Lang/Tcl/Abstract-type
new file mode 120000
index 0000000000..ebf89bdc39
--- /dev/null
+++ b/Lang/Tcl/Abstract-type
@@ -0,0 +1 @@
+../../Task/Abstract-type/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Accumulator-factory b/Lang/Tcl/Accumulator-factory
new file mode 120000
index 0000000000..bc38e56a4b
--- /dev/null
+++ b/Lang/Tcl/Accumulator-factory
@@ -0,0 +1 @@
+../../Task/Accumulator-factory/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Active-Directory-Connect b/Lang/Tcl/Active-Directory-Connect
new file mode 120000
index 0000000000..45fda5c6c9
--- /dev/null
+++ b/Lang/Tcl/Active-Directory-Connect
@@ -0,0 +1 @@
+../../Task/Active-Directory-Connect/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Active-Directory-Search-for-a-user b/Lang/Tcl/Active-Directory-Search-for-a-user
new file mode 120000
index 0000000000..d4b3744cf2
--- /dev/null
+++ b/Lang/Tcl/Active-Directory-Search-for-a-user
@@ -0,0 +1 @@
+../../Task/Active-Directory-Search-for-a-user/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Active-object b/Lang/Tcl/Active-object
new file mode 120000
index 0000000000..2f1d9eb444
--- /dev/null
+++ b/Lang/Tcl/Active-object
@@ -0,0 +1 @@
+../../Task/Active-object/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Add-a-variable-to-a-class-instance-at-runtime b/Lang/Tcl/Add-a-variable-to-a-class-instance-at-runtime
new file mode 120000
index 0000000000..5797227331
--- /dev/null
+++ b/Lang/Tcl/Add-a-variable-to-a-class-instance-at-runtime
@@ -0,0 +1 @@
+../../Task/Add-a-variable-to-a-class-instance-at-runtime/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Address-of-a-variable b/Lang/Tcl/Address-of-a-variable
new file mode 120000
index 0000000000..d9ca151930
--- /dev/null
+++ b/Lang/Tcl/Address-of-a-variable
@@ -0,0 +1 @@
+../../Task/Address-of-a-variable/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Align-columns b/Lang/Tcl/Align-columns
new file mode 120000
index 0000000000..45c16545c4
--- /dev/null
+++ b/Lang/Tcl/Align-columns
@@ -0,0 +1 @@
+../../Task/Align-columns/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Anagrams-Deranged-anagrams b/Lang/Tcl/Anagrams-Deranged-anagrams
new file mode 120000
index 0000000000..e2e39592e7
--- /dev/null
+++ b/Lang/Tcl/Anagrams-Deranged-anagrams
@@ -0,0 +1 @@
+../../Task/Anagrams-Deranged-anagrams/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Animation b/Lang/Tcl/Animation
new file mode 120000
index 0000000000..eb3901df09
--- /dev/null
+++ b/Lang/Tcl/Animation
@@ -0,0 +1 @@
+../../Task/Animation/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Anonymous-recursion b/Lang/Tcl/Anonymous-recursion
new file mode 120000
index 0000000000..48358be646
--- /dev/null
+++ b/Lang/Tcl/Anonymous-recursion
@@ -0,0 +1 @@
+../../Task/Anonymous-recursion/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Apply-a-callback-to-an-array b/Lang/Tcl/Apply-a-callback-to-an-array
new file mode 120000
index 0000000000..632c3e9d15
--- /dev/null
+++ b/Lang/Tcl/Apply-a-callback-to-an-array
@@ -0,0 +1 @@
+../../Task/Apply-a-callback-to-an-array/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Arbitrary-precision-integers-(included) b/Lang/Tcl/Arbitrary-precision-integers-(included)
new file mode 120000
index 0000000000..5c3b5394f3
--- /dev/null
+++ b/Lang/Tcl/Arbitrary-precision-integers-(included)
@@ -0,0 +1 @@
+../../Task/Arbitrary-precision-integers-(included)/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Arena-storage-pool b/Lang/Tcl/Arena-storage-pool
new file mode 120000
index 0000000000..b3909c2d19
--- /dev/null
+++ b/Lang/Tcl/Arena-storage-pool
@@ -0,0 +1 @@
+../../Task/Arena-storage-pool/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Arithmetic-Complex b/Lang/Tcl/Arithmetic-Complex
new file mode 120000
index 0000000000..b8c8494818
--- /dev/null
+++ b/Lang/Tcl/Arithmetic-Complex
@@ -0,0 +1 @@
+../../Task/Arithmetic-Complex/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Arithmetic-evaluation b/Lang/Tcl/Arithmetic-evaluation
new file mode 120000
index 0000000000..aff9963f40
--- /dev/null
+++ b/Lang/Tcl/Arithmetic-evaluation
@@ -0,0 +1 @@
+../../Task/Arithmetic-evaluation/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Arithmetic-geometric-mean b/Lang/Tcl/Arithmetic-geometric-mean
new file mode 120000
index 0000000000..12e90692c2
--- /dev/null
+++ b/Lang/Tcl/Arithmetic-geometric-mean
@@ -0,0 +1 @@
+../../Task/Arithmetic-geometric-mean/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Array-concatenation b/Lang/Tcl/Array-concatenation
new file mode 120000
index 0000000000..59e41d7837
--- /dev/null
+++ b/Lang/Tcl/Array-concatenation
@@ -0,0 +1 @@
+../../Task/Array-concatenation/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Associative-array-Creation b/Lang/Tcl/Associative-array-Creation
new file mode 120000
index 0000000000..8687031234
--- /dev/null
+++ b/Lang/Tcl/Associative-array-Creation
@@ -0,0 +1 @@
+../../Task/Associative-array-Creation/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Associative-array-Iteration b/Lang/Tcl/Associative-array-Iteration
new file mode 120000
index 0000000000..80ae4c0123
--- /dev/null
+++ b/Lang/Tcl/Associative-array-Iteration
@@ -0,0 +1 @@
+../../Task/Associative-array-Iteration/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Atomic-updates b/Lang/Tcl/Atomic-updates
new file mode 120000
index 0000000000..f8cd30ea74
--- /dev/null
+++ b/Lang/Tcl/Atomic-updates
@@ -0,0 +1 @@
+../../Task/Atomic-updates/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Average-loop-length b/Lang/Tcl/Average-loop-length
new file mode 120000
index 0000000000..16e686c5da
--- /dev/null
+++ b/Lang/Tcl/Average-loop-length
@@ -0,0 +1 @@
+../../Task/Average-loop-length/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Averages-Arithmetic-mean b/Lang/Tcl/Averages-Arithmetic-mean
new file mode 120000
index 0000000000..955443d90f
--- /dev/null
+++ b/Lang/Tcl/Averages-Arithmetic-mean
@@ -0,0 +1 @@
+../../Task/Averages-Arithmetic-mean/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Averages-Mean-angle b/Lang/Tcl/Averages-Mean-angle
new file mode 120000
index 0000000000..b964d6fa91
--- /dev/null
+++ b/Lang/Tcl/Averages-Mean-angle
@@ -0,0 +1 @@
+../../Task/Averages-Mean-angle/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Averages-Mean-time-of-day b/Lang/Tcl/Averages-Mean-time-of-day
new file mode 120000
index 0000000000..18112ae0e8
--- /dev/null
+++ b/Lang/Tcl/Averages-Mean-time-of-day
@@ -0,0 +1 @@
+../../Task/Averages-Mean-time-of-day/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Averages-Median b/Lang/Tcl/Averages-Median
new file mode 120000
index 0000000000..729b4325ef
--- /dev/null
+++ b/Lang/Tcl/Averages-Median
@@ -0,0 +1 @@
+../../Task/Averages-Median/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Averages-Pythagorean-means b/Lang/Tcl/Averages-Pythagorean-means
new file mode 120000
index 0000000000..0a7b08cdd0
--- /dev/null
+++ b/Lang/Tcl/Averages-Pythagorean-means
@@ -0,0 +1 @@
+../../Task/Averages-Pythagorean-means/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Averages-Root-mean-square b/Lang/Tcl/Averages-Root-mean-square
new file mode 120000
index 0000000000..878a537989
--- /dev/null
+++ b/Lang/Tcl/Averages-Root-mean-square
@@ -0,0 +1 @@
+../../Task/Averages-Root-mean-square/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Averages-Simple-moving-average b/Lang/Tcl/Averages-Simple-moving-average
new file mode 120000
index 0000000000..4f926ca7f8
--- /dev/null
+++ b/Lang/Tcl/Averages-Simple-moving-average
@@ -0,0 +1 @@
+../../Task/Averages-Simple-moving-average/Tcl
\ No newline at end of file
diff --git a/Meta/00Tasks.yaml b/Meta/00Tasks.yaml
index 3cc58f06fc..c432ca2484 100644
--- a/Meta/00Tasks.yaml
+++ b/Meta/00Tasks.yaml
@@ -11,14 +11,94 @@
name: 99 Bottles of Beer
path: 99-Bottles-of-Beer
url: 99_Bottles_of_Beer
+A+B:
+ name: A+B
+ path: A+B
+ url: A+B
+Abstract type:
+ name: Abstract type
+ path: Abstract-type
+ url: Abstract_type
+Accumulator factory:
+ name: Accumulator factory
+ path: Accumulator-factory
+ url: Accumulator_factory
Ackermann function:
name: Ackermann function
path: Ackermann-function
url: Ackermann_function
+Active Directory/Connect:
+ name: Active Directory/Connect
+ path: Active-Directory-Connect
+ url: Active_Directory/Connect
+Active Directory/Search for a user:
+ name: Active Directory/Search for a user
+ path: Active-Directory-Search-for-a-user
+ url: Active_Directory/Search_for_a_user
+Active object:
+ name: Active object
+ path: Active-object
+ url: Active_object
+Add a variable to a class instance at runtime:
+ name: Add a variable to a class instance at runtime
+ path: Add-a-variable-to-a-class-instance-at-runtime
+ url: Add_a_variable_to_a_class_instance_at_runtime
+Address of a variable:
+ name: Address of a variable
+ path: Address-of-a-variable
+ url: Address_of_a_variable
+Align columns:
+ name: Align columns
+ path: Align-columns
+ url: Align_columns
Anagrams:
name: Anagrams
path: Anagrams
url: Anagrams
+Anagrams/Deranged anagrams:
+ name: Anagrams/Deranged anagrams
+ path: Anagrams-Deranged-anagrams
+ url: Anagrams/Deranged_anagrams
+Animation:
+ name: Animation
+ path: Animation
+ url: Animation
+Anonymous recursion:
+ name: Anonymous recursion
+ path: Anonymous-recursion
+ url: Anonymous_recursion
+Apply a callback to an array:
+ name: Apply a callback to an array
+ path: Apply-a-callback-to-an-array
+ url: Apply_a_callback_to_an_array
+Arbitrary-precision integers (included):
+ name: Arbitrary-precision integers (included)
+ path: Arbitrary-precision-integers-(included)
+ url: Arbitrary-precision_integers_(included)
+Arena storage pool:
+ name: Arena storage pool
+ path: Arena-storage-pool
+ url: Arena_storage_pool
+Arithmetic evaluation:
+ name: Arithmetic evaluation
+ path: Arithmetic-evaluation
+ url: Arithmetic_evaluation
+Arithmetic-geometric mean:
+ name: Arithmetic-geometric mean
+ path: Arithmetic-geometric-mean
+ url: Arithmetic-geometric_mean
+Arithmetic/Complex:
+ name: Arithmetic/Complex
+ path: Arithmetic-Complex
+ url: Arithmetic/Complex
+Arithmetic/Rational:
+ name: Arithmetic/Rational
+ path: Arithmetic-Rational
+ url: Arithmetic/Rational
+Array concatenation:
+ name: Array concatenation
+ path: Array-concatenation
+ url: Array_concatenation
Arrays:
name: Arrays
path: Arrays
@@ -27,6 +107,50 @@ Assertions:
name: Assertions
path: Assertions
url: Assertions
+Associative array/Creation:
+ name: Associative array/Creation
+ path: Associative-array-Creation
+ url: Associative_array/Creation
+Associative array/Iteration:
+ name: Associative array/Iteration
+ path: Associative-array-Iteration
+ url: Associative_array/Iteration
+Atomic updates:
+ name: Atomic updates
+ path: Atomic-updates
+ url: Atomic_updates
+Average loop length:
+ name: Average loop length
+ path: Average-loop-length
+ url: Average_loop_length
+Averages/Arithmetic mean:
+ name: Averages/Arithmetic mean
+ path: Averages-Arithmetic-mean
+ url: Averages/Arithmetic_mean
+Averages/Mean angle:
+ name: Averages/Mean angle
+ path: Averages-Mean-angle
+ url: Averages/Mean_angle
+Averages/Mean time of day:
+ name: Averages/Mean time of day
+ path: Averages-Mean-time-of-day
+ url: Averages/Mean_time_of_day
+Averages/Median:
+ name: Averages/Median
+ path: Averages-Median
+ url: Averages/Median
+Averages/Pythagorean means:
+ name: Averages/Pythagorean means
+ path: Averages-Pythagorean-means
+ url: Averages/Pythagorean_means
+Averages/Root mean square:
+ name: Averages/Root mean square
+ path: Averages-Root-mean-square
+ url: Averages/Root_mean_square
+Averages/Simple moving average:
+ name: Averages/Simple moving average
+ path: Averages-Simple-moving-average
+ url: Averages/Simple_moving_average
Balanced brackets:
name: Balanced brackets
path: Balanced-brackets
diff --git a/Task/A+B/0815/a+b.0815 b/Task/A+B/0815/a+b.0815
new file mode 100644
index 0000000000..895c17864e
--- /dev/null
+++ b/Task/A+B/0815/a+b.0815
@@ -0,0 +1 @@
+|x|+%
diff --git a/Task/A+B/0DESCRIPTION b/Task/A+B/0DESCRIPTION
new file mode 100644
index 0000000000..704ca6dc95
--- /dev/null
+++ b/Task/A+B/0DESCRIPTION
@@ -0,0 +1,23 @@
+'''A+B''' - in programming contests, classic problem, which is given so contestants can gain familiarity with online judging system being used.
+
+'''Problem statement'''
+Given 2 integer numbers, A and B. One needs to find their sum.
+
+:'''Input data'''
+:Two integer numbers are written in the input stream, separated by space.
+:
+
+:'''Output data'''
+:The required output is one integer: the sum of A and B.
+
+:'''Example:'''
+::{|class="standard"
+ ! Input
+ ! Output
+ |-
+ |2 2
+ |4
+ |-
+ |3 2
+ |5
+ |}
diff --git a/Task/A+B/ABAP/a+b.abap b/Task/A+B/ABAP/a+b.abap
new file mode 100644
index 0000000000..0cb470aac6
--- /dev/null
+++ b/Task/A+B/ABAP/a+b.abap
@@ -0,0 +1,15 @@
+report z_sum_a_b.
+data: lv_output type i.
+selection-screen begin of block input.
+ parameters:
+ p_first type i,
+ p_second type i.
+selection-screen end of block input.
+
+at selection-screen output.
+ %_p_first_%_app_%-text = 'First Number: '.
+ %_p_second_%_app_%-text = 'Second Number: '.
+
+start-of-selection.
+ lv_output = p_first + p_second.
+ write : / lv_output.
diff --git a/Task/A+B/ALGOL-68/a+b-1.alg b/Task/A+B/ALGOL-68/a+b-1.alg
new file mode 100644
index 0000000000..87836c1801
--- /dev/null
+++ b/Task/A+B/ALGOL-68/a+b-1.alg
@@ -0,0 +1 @@
+print((read int + read int))
diff --git a/Task/A+B/ALGOL-68/a+b-2.alg b/Task/A+B/ALGOL-68/a+b-2.alg
new file mode 100644
index 0000000000..0b027a7a1d
--- /dev/null
+++ b/Task/A+B/ALGOL-68/a+b-2.alg
@@ -0,0 +1,3 @@
+open(stand in, "input.txt", stand in channel);
+open(stand out, "output.txt", stand out channel);
+print((read int + read int))
diff --git a/Task/A+B/ANTLR/a+b.antlr b/Task/A+B/ANTLR/a+b.antlr
new file mode 100644
index 0000000000..aaebb7623e
--- /dev/null
+++ b/Task/A+B/ANTLR/a+b.antlr
@@ -0,0 +1,14 @@
+grammar aplusb ;
+
+options {
+ language = Java;
+}
+
+aplusb : (WS* e1=Num WS+ e2=Num NEWLINE {System.out.println($e1.text + " + " + $e2.text + " = " + (Integer.parseInt($e1.text) + Integer.parseInt($e2.text)));})+
+ ;
+Num : '-'?('0'..'9')+
+ ;
+WS : (' ' | '\t')
+ ;
+NEWLINE : WS* '\r'? '\n'
+ ;
diff --git a/Task/A+B/AWK/a+b.awk b/Task/A+B/AWK/a+b.awk
new file mode 100644
index 0000000000..f00ab8d02f
--- /dev/null
+++ b/Task/A+B/AWK/a+b.awk
@@ -0,0 +1 @@
+{print $1 + $2}
diff --git a/Task/A+B/Ada/a+b-1.ada b/Task/A+B/Ada/a+b-1.ada
new file mode 100644
index 0000000000..e3b3a1d3b7
--- /dev/null
+++ b/Task/A+B/Ada/a+b-1.ada
@@ -0,0 +1,10 @@
+-- Standard I/O Streams
+
+with Ada.Integer_Text_Io;
+procedure APlusB is
+ A, B : Integer;
+begin
+ Ada.Integer_Text_Io.Get (Item => A);
+ Ada.Integer_Text_Io.Get (Item => B);
+ Ada.Integer_Text_Io.Put (A+B);
+end APlusB;
diff --git a/Task/A+B/Ada/a+b-2.ada b/Task/A+B/Ada/a+b-2.ada
new file mode 100644
index 0000000000..b38ce0b316
--- /dev/null
+++ b/Task/A+B/Ada/a+b-2.ada
@@ -0,0 +1,12 @@
+with Ada.Text_IO;
+
+procedure A_Plus_B is
+ type Small_Integers is range -2_000 .. +2_000;
+ subtype Input_Values is Small_Integers range -1_000 .. +1_000;
+ package IO is new Ada.Text_IO.Integer_IO (Num => Small_Integers);
+ A, B : Input_Values;
+begin
+ IO.Get (A);
+ IO.Get (B);
+ IO.Put (A + B, Width => 4, Base => 10);
+end A_Plus_B;
diff --git a/Task/A+B/Argile/a+b-1.argile b/Task/A+B/Argile/a+b-1.argile
new file mode 100644
index 0000000000..846c763d8c
--- /dev/null
+++ b/Task/A+B/Argile/a+b-1.argile
@@ -0,0 +1,4 @@
+(: Standard input-output streams :)
+use std, array
+Cfunc scanf "%d%d" (&val int a) (&val int b)
+printf "%d\n" (a + b)
diff --git a/Task/A+B/Argile/a+b-2.argile b/Task/A+B/Argile/a+b-2.argile
new file mode 100644
index 0000000000..32fb59abea
--- /dev/null
+++ b/Task/A+B/Argile/a+b-2.argile
@@ -0,0 +1,10 @@
+(: Input file : input.txt :)
+(: Output file: output.txt :)
+use std, array
+let in = fopen "input.txt" "r"
+let out = fopen "output.txt" "w"
+let int x, y.
+Cfunc fscanf in "%d%d" (&x) (&y) (:fscanf not yet defined in std.arg:)
+fprintf out "%d\n" (x+y)
+fclose in
+fclose out
diff --git a/Task/A+B/AutoHotkey/a+b.ahk b/Task/A+B/AutoHotkey/a+b.ahk
new file mode 100644
index 0000000000..c0a57b6ed2
--- /dev/null
+++ b/Task/A+B/AutoHotkey/a+b.ahk
@@ -0,0 +1,3 @@
+InputBox, input , A+B, Two integer numbers`, separated by space.
+StringSplit, output, input, %A_Space%
+msgbox, % output1 . "+" . output2 "=" output1+output2
diff --git a/Task/A+B/AutoIt/a+b.autoit b/Task/A+B/AutoIt/a+b.autoit
new file mode 100644
index 0000000000..120e568c0a
--- /dev/null
+++ b/Task/A+B/AutoIt/a+b.autoit
@@ -0,0 +1,7 @@
+;AutoIt Version: 3.2.10.0
+$num = "45 54"
+consolewrite ("Sum of " & $num & " is: " & sum($num))
+Func sum($numbers)
+ $numm = StringSplit($numbers," ")
+ Return $numm[1]+$numm[$numm[0]]
+EndFunc
diff --git a/Task/A+B/BASIC/a+b.bas b/Task/A+B/BASIC/a+b.bas
new file mode 100644
index 0000000000..78fb4b4926
--- /dev/null
+++ b/Task/A+B/BASIC/a+b.bas
@@ -0,0 +1,16 @@
+DEFINT A-Z
+
+tryagain:
+backhere = CSRLIN
+INPUT "", i$
+i$ = LTRIM$(RTRIM$(i$))
+where = INSTR(i$, " ")
+IF where THEN
+ a = VAL(LEFT$(i$, where - 1))
+ b = VAL(MID$(i$, where + 1))
+ c = a + b
+ LOCATE backhere, LEN(i$) + 1
+ PRINT c
+ELSE
+ GOTO tryagain
+END IF
diff --git a/Task/A+B/Befunge/a+b.bf b/Task/A+B/Befunge/a+b.bf
new file mode 100644
index 0000000000..4db44e3076
--- /dev/null
+++ b/Task/A+B/Befunge/a+b.bf
@@ -0,0 +1 @@
+&&+.@
diff --git a/Task/A+B/C/a+b-1.c b/Task/A+B/C/a+b-1.c
new file mode 100644
index 0000000000..b5e0778b0f
--- /dev/null
+++ b/Task/A+B/C/a+b-1.c
@@ -0,0 +1,9 @@
+// Standard input-output streams
+#include
+int main()
+{
+ int a, b;
+ scanf("%d%d", &a, &b);
+ printf("%d\n", a + b);
+ return 0;
+}
diff --git a/Task/A+B/C/a+b-2.c b/Task/A+B/C/a+b-2.c
new file mode 100644
index 0000000000..d64c0c6a86
--- /dev/null
+++ b/Task/A+B/C/a+b-2.c
@@ -0,0 +1,12 @@
+// Input file: input.txt
+// Output file: output.txt
+#include
+int main()
+{
+ freopen("input.txt", "rt", stdin);
+ freopen("output.txt", "wt", stdout);
+ int a, b;
+ scanf("%d%d", &a, &b);
+ printf("%d\n", a + b);
+ return 0;
+}
diff --git a/Task/A+B/Clojure/a+b-1.clj b/Task/A+B/Clojure/a+b-1.clj
new file mode 100644
index 0000000000..eef9a283fa
--- /dev/null
+++ b/Task/A+B/Clojure/a+b-1.clj
@@ -0,0 +1,4 @@
+(println (+ (Integer/parseInt (read-line)) (Integer/parseInt (read-line))))
+3
+4
+=>7
diff --git a/Task/A+B/Clojure/a+b-2.clj b/Task/A+B/Clojure/a+b-2.clj
new file mode 100644
index 0000000000..4506d67da3
--- /dev/null
+++ b/Task/A+B/Clojure/a+b-2.clj
@@ -0,0 +1,3 @@
+(eval (read-string (str "(+ " (read-line) " )") ))
+3 3
+6
diff --git a/Task/A+B/CoffeeScript/a+b.coffee b/Task/A+B/CoffeeScript/a+b.coffee
new file mode 100644
index 0000000000..6a5ab62a7c
--- /dev/null
+++ b/Task/A+B/CoffeeScript/a+b.coffee
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
diff --git a/Task/A+B/Eiffel/a+b.e b/Task/A+B/Eiffel/a+b.e
new file mode 100644
index 0000000000..ea642b3080
--- /dev/null
+++ b/Task/A+B/Eiffel/a+b.e
@@ -0,0 +1,13 @@
+class
+ APPLICATION
+inherit
+ ARGUMENTS
+create
+ make
+feature {NONE} -- Initialization
+ make
+ -- Run application.
+ do
+ print(argument(1).to_integer + argument(2).to_integer)
+ end
+end
diff --git a/Task/A+B/Erlang/a+b.erl b/Task/A+B/Erlang/a+b.erl
new file mode 100644
index 0000000000..7e68611ca7
--- /dev/null
+++ b/Task/A+B/Erlang/a+b.erl
@@ -0,0 +1,10 @@
+-module(aplusb).
+-export([start/0]).
+
+start() ->
+ case io:fread("","~d~d") of
+ eof -> ok;
+ {ok, [A,B]} ->
+ io:format("~w~n",[A+B]),
+ start()
+ end.
diff --git a/Task/A+B/Forth/a+b.fth b/Task/A+B/Forth/a+b.fth
new file mode 100644
index 0000000000..eb4fd11822
--- /dev/null
+++ b/Task/A+B/Forth/a+b.fth
@@ -0,0 +1 @@
+pad dup 80 accept evaluate + .
diff --git a/Task/A+B/Fortran/a+b.f b/Task/A+B/Fortran/a+b.f
new file mode 100644
index 0000000000..d4cf0c2c61
--- /dev/null
+++ b/Task/A+B/Fortran/a+b.f
@@ -0,0 +1,10 @@
+program a_plus_b
+
+ implicit none
+ integer :: a
+ integer :: b
+
+ read (*, *) a, b
+ write (*, '(i0)') a + b
+
+end program a_plus_b
diff --git a/Task/A+B/Go/a+b.go b/Task/A+B/Go/a+b.go
new file mode 100644
index 0000000000..64511a0712
--- /dev/null
+++ b/Task/A+B/Go/a+b.go
@@ -0,0 +1,9 @@
+package main
+
+import "fmt"
+
+func main() {
+ var a, b int
+ fmt.Scanf("%d %d", &a, &b)
+ fmt.Printf("%d\n", a+b)
+}
diff --git a/Task/A+B/Haskell/a+b.hs b/Task/A+B/Haskell/a+b.hs
new file mode 100644
index 0000000000..e6a8348f58
--- /dev/null
+++ b/Task/A+B/Haskell/a+b.hs
@@ -0,0 +1 @@
+main = getLine >>= print . sum . map read . words
diff --git a/Task/A+B/Java/a+b-1.java b/Task/A+B/Java/a+b-1.java
new file mode 100644
index 0000000000..61762511c2
--- /dev/null
+++ b/Task/A+B/Java/a+b-1.java
@@ -0,0 +1,8 @@
+import java.util.*;
+
+public class Sum2 {
+ public static void main(String[] args) {
+ Scanner in = new Scanner(System.in); // Standard input
+ System.out.println(in.nextInt() + in.nextInt()); // Standard output
+ }
+}
diff --git a/Task/A+B/Java/a+b-2.java b/Task/A+B/Java/a+b-2.java
new file mode 100644
index 0000000000..c59ec4a2ae
--- /dev/null
+++ b/Task/A+B/Java/a+b-2.java
@@ -0,0 +1,27 @@
+import java.io.*;
+import java.util.*;
+
+public class SumDif {
+ StreamTokenizer in;
+ PrintWriter out;
+
+ public static void main(String[] args) throws IOException {
+ new SumDif().run();
+ }
+
+ private int nextInt() throws IOException {
+ in.nextToken();
+ return (int)in.nval;
+ }
+
+ public void run() throws IOException {
+ in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in))); // Standard input
+ out = new PrintWriter(new OutputStreamWriter(System.out)); // Standard output
+ solve();
+ out.flush();
+ }
+
+ private void solve() throws IOException {
+ out.println(nextInt() + nextInt());
+ }
+}
diff --git a/Task/A+B/Java/a+b-3.java b/Task/A+B/Java/a+b-3.java
new file mode 100644
index 0000000000..546ca2d56f
--- /dev/null
+++ b/Task/A+B/Java/a+b-3.java
@@ -0,0 +1,19 @@
+import java.io.*;
+
+public class AplusB {
+ public static void main(String[] args) {
+ try {
+ StreamTokenizer in = new StreamTokenizer(new FileReader("input.txt"));
+ in.nextToken();
+ int a = (int) in.nval;
+ in.nextToken();
+ int b = (int) in.nval;
+ FileWriter outFile = new FileWriter("output.txt");
+ outFile.write(Integer.toString(a + b));
+ outFile.close();
+ }
+ catch (IOException e) {
+ System.out.println("IO error");
+ }
+ }
+}
diff --git a/Task/A+B/JavaScript/a+b-1.js b/Task/A+B/JavaScript/a+b-1.js
new file mode 100644
index 0000000000..3bd360326a
--- /dev/null
+++ b/Task/A+B/JavaScript/a+b-1.js
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
diff --git a/Task/A+B/JavaScript/a+b-2.js b/Task/A+B/JavaScript/a+b-2.js
new file mode 100644
index 0000000000..5003b51b91
--- /dev/null
+++ b/Task/A+B/JavaScript/a+b-2.js
@@ -0,0 +1,10 @@
+process.openStdin().on (
+ 'data',
+ function (line) {
+ var xs = String(line).match(/^\s*(\d+)\s+(\d+)\s*/)
+ console.log (
+ xs ? Number(xs[1]) + Number(xs[2]) : 'usage: '
+ )
+ process.exit()
+ }
+)
diff --git a/Task/A+B/Lua/a+b.lua b/Task/A+B/Lua/a+b.lua
new file mode 100644
index 0000000000..af37534f27
--- /dev/null
+++ b/Task/A+B/Lua/a+b.lua
@@ -0,0 +1,2 @@
+a,b = io.read("*number", "*number")
+print(a+b)
diff --git a/Task/A+B/PHP/a+b-1.php b/Task/A+B/PHP/a+b-1.php
new file mode 100644
index 0000000000..4548649db4
--- /dev/null
+++ b/Task/A+B/PHP/a+b-1.php
@@ -0,0 +1,2 @@
+fscanf(STDIN, "%d %d\n", $a, $b); //Reads 2 numbers from STDIN
+echo ($a + $b) . "\n";
diff --git a/Task/A+B/PHP/a+b-2.php b/Task/A+B/PHP/a+b-2.php
new file mode 100644
index 0000000000..9c2f580986
--- /dev/null
+++ b/Task/A+B/PHP/a+b-2.php
@@ -0,0 +1,7 @@
+$in = fopen("input.dat", "r");
+fscanf($in, "%d %d\n", $a, $b); //Reads 2 numbers from file $in
+fclose($in);
+
+$out = fopen("output.dat", "w");
+fwrite($out, ($a + $b) . "\n");
+fclose($out);
diff --git a/Task/A+B/Perl/a+b.pl b/Task/A+B/Perl/a+b.pl
new file mode 100644
index 0000000000..86f4e16943
--- /dev/null
+++ b/Task/A+B/Perl/a+b.pl
@@ -0,0 +1,2 @@
+my ($a,$b) = split(/\D+/,);
+print "$a $b " . ($a + $b) . "\n";
diff --git a/Task/A+B/PicoLisp/a+b.l b/Task/A+B/PicoLisp/a+b.l
new file mode 100644
index 0000000000..93b5054f2a
--- /dev/null
+++ b/Task/A+B/PicoLisp/a+b.l
@@ -0,0 +1,3 @@
+(+ (read) (read))
+3 4
+-> 7
diff --git a/Task/A+B/Prolog/a+b-1.pro b/Task/A+B/Prolog/a+b-1.pro
new file mode 100644
index 0000000000..a0612f82fd
--- /dev/null
+++ b/Task/A+B/Prolog/a+b-1.pro
@@ -0,0 +1,7 @@
+plus :-
+ read_line_to_codes(user_input,X),
+ atom_codes(A, X),
+ atomic_list_concat(L, ' ', A),
+ maplist(atom_number, L, LN),
+ sumlist(LN, N),
+ write(N).
diff --git a/Task/A+B/Prolog/a+b-2.pro b/Task/A+B/Prolog/a+b-2.pro
new file mode 100644
index 0000000000..6f0acf7706
--- /dev/null
+++ b/Task/A+B/Prolog/a+b-2.pro
@@ -0,0 +1,4 @@
+?- plus.
+|: 4 5
+9
+true.
diff --git a/Task/A+B/Python/a+b-1.py b/Task/A+B/Python/a+b-1.py
new file mode 100644
index 0000000000..db1a94e67a
--- /dev/null
+++ b/Task/A+B/Python/a+b-1.py
@@ -0,0 +1,4 @@
+try: raw_input
+except: raw_input = input
+
+print(sum(int(x) for x in raw_input().split()))
diff --git a/Task/A+B/Python/a+b-2.py b/Task/A+B/Python/a+b-2.py
new file mode 100644
index 0000000000..b30c99664a
--- /dev/null
+++ b/Task/A+B/Python/a+b-2.py
@@ -0,0 +1,4 @@
+a = int(raw_input("Enter integer 1: "))
+b = int(raw_input("Enter integer 2: "))
+
+print a + b
diff --git a/Task/A+B/R/a+b.r b/Task/A+B/R/a+b.r
new file mode 100644
index 0000000000..cfe661c41d
--- /dev/null
+++ b/Task/A+B/R/a+b.r
@@ -0,0 +1 @@
+sum(scan("", numeric(0), 2))
diff --git a/Task/A+B/REXX/a+b-1.rexx b/Task/A+B/REXX/a+b-1.rexx
new file mode 100644
index 0000000000..dbc7c1e614
--- /dev/null
+++ b/Task/A+B/REXX/a+b-1.rexx
@@ -0,0 +1,2 @@
+parse pull a b
+say a+b
diff --git a/Task/A+B/REXX/a+b-2.rexx b/Task/A+B/REXX/a+b-2.rexx
new file mode 100644
index 0000000000..5c6592790f
--- /dev/null
+++ b/Task/A+B/REXX/a+b-2.rexx
@@ -0,0 +1,2 @@
+parse pull a b
+say (a+b)/1 /*dividing by 1 normalizes the REXX number.*/
diff --git a/Task/A+B/REXX/a+b-3.rexx b/Task/A+B/REXX/a+b-3.rexx
new file mode 100644
index 0000000000..2104c6391a
--- /dev/null
+++ b/Task/A+B/REXX/a+b-3.rexx
@@ -0,0 +1,4 @@
+numeric digits 300
+parse pull a b
+z=(a+b)/1
+say z
diff --git a/Task/A+B/REXX/a+b-4.rexx b/Task/A+B/REXX/a+b-4.rexx
new file mode 100644
index 0000000000..99c303ec95
--- /dev/null
+++ b/Task/A+B/REXX/a+b-4.rexx
@@ -0,0 +1,9 @@
+numeric digits 1000 /*just in case the user gets ka-razy. */
+say 'enter some numbers to be summed:'
+parse pull y
+many=words(y)
+sum=0
+ do j=1 for many
+ sum=sum+word(y,j)
+ end
+say 'sum of' many "numbers = " sum/1
diff --git a/Task/A+B/Racket/a+b-1.rkt b/Task/A+B/Racket/a+b-1.rkt
new file mode 100644
index 0000000000..7ecae0ec3e
--- /dev/null
+++ b/Task/A+B/Racket/a+b-1.rkt
@@ -0,0 +1,2 @@
+#lang racket
+(+ (read) (read))
diff --git a/Task/A+B/Racket/a+b-2.rkt b/Task/A+B/Racket/a+b-2.rkt
new file mode 100644
index 0000000000..884f42bf7d
--- /dev/null
+++ b/Task/A+B/Racket/a+b-2.rkt
@@ -0,0 +1,6 @@
+#lang racket
+(define a (read))
+(unless (number? a) (error 'a+b "number" a))
+(define b (read))
+(unless (number? b) (error 'a+b "number" b))
+(displayln (+ a b))
diff --git a/Task/A+B/Ruby/a+b-1.rb b/Task/A+B/Ruby/a+b-1.rb
new file mode 100644
index 0000000000..019307f1ca
--- /dev/null
+++ b/Task/A+B/Ruby/a+b-1.rb
@@ -0,0 +1 @@
+puts gets.split.map{|x| x.to_i}.inject{|sum, x| sum + x}
diff --git a/Task/A+B/Ruby/a+b-2.rb b/Task/A+B/Ruby/a+b-2.rb
new file mode 100644
index 0000000000..afdd82e3f8
--- /dev/null
+++ b/Task/A+B/Ruby/a+b-2.rb
@@ -0,0 +1 @@
+puts gets.split.map(&:to_i).inject(&:+)
diff --git a/Task/A+B/Scala/a+b.scala b/Task/A+B/Scala/a+b.scala
new file mode 100644
index 0000000000..b089a95983
--- /dev/null
+++ b/Task/A+B/Scala/a+b.scala
@@ -0,0 +1 @@
+println(readLine() split " " take 2 map (_.toInt) sum)
diff --git a/Task/A+B/Scheme/a+b.ss b/Task/A+B/Scheme/a+b.ss
new file mode 100644
index 0000000000..3c80727a5a
--- /dev/null
+++ b/Task/A+B/Scheme/a+b.ss
@@ -0,0 +1,3 @@
+(let* ((x (read))
+ (y (read)))
+ (write (+ x y)))
diff --git a/Task/A+B/Smalltalk/a+b-1.st b/Task/A+B/Smalltalk/a+b-1.st
new file mode 100644
index 0000000000..aee4762526
--- /dev/null
+++ b/Task/A+B/Smalltalk/a+b-1.st
@@ -0,0 +1,30 @@
+'From Squeak3.7 of ''4 September 2004'' [latest update: #5989] on 8 August 2011 at 3:50:55 pm'!
+Object subclass: #ABTask
+ instanceVariableNames: ''
+ classVariableNames: ''
+ poolDictionaries: ''
+ category: 'rosettacode'!
+
+"-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "!
+
+ABTask class
+ instanceVariableNames: ''!
+
+!ABTask class methodsFor: 'demo'!
+parseInteger: inputStream
+ ^ Integer readFrom: inputStream skipSeparators! !
+
+!ABTask class methodsFor: 'demo'!
+sum: inputStream
+ ^ (self parseInteger: inputStream)
+ + (self parseInteger: inputStream)! !
+
+!ABTask class methodsFor: 'demo'!
+test2Plus2
+ ^ self
+ sum: (ReadStream on: '2 2')! !
+
+!ABTask class methodsFor: 'demo'!
+test3Plus2
+ ^ self
+ sum: (ReadStream on: '3 2')! !
diff --git a/Task/A+B/Smalltalk/a+b-2.st b/Task/A+B/Smalltalk/a+b-2.st
new file mode 100644
index 0000000000..05cb728013
--- /dev/null
+++ b/Task/A+B/Smalltalk/a+b-2.st
@@ -0,0 +1,19 @@
+|task|
+task := [:inStream :outStream |
+ |processLine|
+
+ processLine :=
+ [
+ |a b|
+ a := Integer readFrom: inStream.
+ b := Integer readFrom: inStream.
+ "is validation part of the task?"
+ self assert:( a between:-1000 and: 1000).
+ self assert:( b between:-1000 and: 1000).
+ outStream print (a+b); cr.
+ ].
+
+ [ inStream atEnd ] whileFalse:processLine.
+].
+
+task value: ( 'dataIn.txt' asFilename readStream) value:Transcript.
diff --git a/Task/A+B/Smalltalk/a+b-3.st b/Task/A+B/Smalltalk/a+b-3.st
new file mode 100644
index 0000000000..1468a1acc7
--- /dev/null
+++ b/Task/A+B/Smalltalk/a+b-3.st
@@ -0,0 +1 @@
+task value: Stdin value: Stdout.
diff --git a/Task/A+B/Tcl/a+b-1.tcl b/Task/A+B/Tcl/a+b-1.tcl
new file mode 100644
index 0000000000..a960179132
--- /dev/null
+++ b/Task/A+B/Tcl/a+b-1.tcl
@@ -0,0 +1,2 @@
+scan [gets stdin] "%d %d" x y
+puts [expr {$x + $y}]
diff --git a/Task/A+B/Tcl/a+b-2.tcl b/Task/A+B/Tcl/a+b-2.tcl
new file mode 100644
index 0000000000..895125c5ea
--- /dev/null
+++ b/Task/A+B/Tcl/a+b-2.tcl
@@ -0,0 +1 @@
+puts [tcl::mathop::+ {*}[gets stdin]]
diff --git a/Task/A+B/Tcl/a+b-3.tcl b/Task/A+B/Tcl/a+b-3.tcl
new file mode 100644
index 0000000000..34f1ec01b2
--- /dev/null
+++ b/Task/A+B/Tcl/a+b-3.tcl
@@ -0,0 +1,6 @@
+set in [open "input.txt"]
+set out [open "output.txt" w]
+scan [gets $in] "%d %d" x y
+puts $out [expr {$x + $y}]
+close $in
+close $out
diff --git a/Task/Abstract-type/0DESCRIPTION b/Task/Abstract-type/0DESCRIPTION
new file mode 100644
index 0000000000..4c49cc7690
--- /dev/null
+++ b/Task/Abstract-type/0DESCRIPTION
@@ -0,0 +1,11 @@
+'''Abstract type''' is a type without instances or without definition.
+
+For example in [[object-oriented programming]] using some languages, abstract types can be partial implementations of other types, which are to be derived there-from. An abstract type may provide implementation of some operations and/or components. Abstract types without any implementation are called '''interfaces'''. In the languages that do not support multiple [[inheritance]] ([[Ada]], [[Java]]), classes can, nonetheless, inherit from multiple interfaces. The languages with multiple inheritance (like [[C++]]) usually make no distinction between partially implementable abstract types and interfaces. Because the abstract type's implementation is incomplete, [[object-oriented programming | OO]] languages normally prevent instantiation from them (instantiation must derived from one of their descendant classes).
+
+The term '''abstract datatype''' also may denote a type, with an implementation provided by the programmer rather than directly by the language (a '''built-in''' or an inferred type). Here the word ''abstract'' means that the implementation is abstracted away, irrelevant for the user of the type. Such implementation can and should be hidden if the language supports separation of implementation and specification. This hides complexity while allowing the implementation to change without repercussions on the usage. The corresponding software design practice is said to follow the [[wp:Information_hiding|information hiding principle]].
+
+It is important not to confuse this ''abstractness'' (of implementation) with one of the '''abstract type'''. The latter is abstract in the sense that the set of its values is empty. In the sense of implementation abstracted away, all user-defined types are abstract.
+
+In some languages, like for example in Objective Caml which is strongly statically typed, it is also possible to have '''abstract types''' that are not OO related and are not an abstractness too. These are ''pure abstract types'' without any definition even in the implementation and can be used for example for the type algebra, or for some consistence of the type inference. For example in this area, an abstract type can be used as a phantom type to augment another type as its parameter.
+
+'''Task''': show how an abstract type can be declared in the language. If the language makes a distinction between interfaces and partially implemented types illustrate both.
diff --git a/Task/Abstract-type/1META.yaml b/Task/Abstract-type/1META.yaml
new file mode 100644
index 0000000000..cafc296b64
--- /dev/null
+++ b/Task/Abstract-type/1META.yaml
@@ -0,0 +1,5 @@
+---
+category:
+- Object oriented
+- Type System
+note: Basic language learning
diff --git a/Task/Abstract-type/ABAP/abstract-type-1.abap b/Task/Abstract-type/ABAP/abstract-type-1.abap
new file mode 100644
index 0000000000..26f99d1d07
--- /dev/null
+++ b/Task/Abstract-type/ABAP/abstract-type-1.abap
@@ -0,0 +1,13 @@
+class abs definition abstract.
+ public section.
+ methods method1 abstract importing iv_value type f exporting ev_ret type i.
+ protected section.
+ methods method2 abstract importing iv_name type string exporting ev_ret type i.
+ methods add importing iv_a type i iv_b type i exporting ev_ret type i.
+endclass.
+
+class abs implementation.
+ method add.
+ ev_ret = iv_a + iv_b.
+ endmethod.
+endclass.
diff --git a/Task/Abstract-type/ABAP/abstract-type-2.abap b/Task/Abstract-type/ABAP/abstract-type-2.abap
new file mode 100644
index 0000000000..517da60fb2
--- /dev/null
+++ b/Task/Abstract-type/ABAP/abstract-type-2.abap
@@ -0,0 +1,5 @@
+interface inter.
+ methods: method1 importing iv_value type f exporting ev_ret type i,
+ method2 importing iv_name type string exporting ev_ret type i,
+ add importing iv_a type i iv_b type i exporting ev_ret type i.
+endinterface.
diff --git a/Task/Abstract-type/ActionScript/abstract-type.as b/Task/Abstract-type/ActionScript/abstract-type.as
new file mode 100644
index 0000000000..f8125aa8ec
--- /dev/null
+++ b/Task/Abstract-type/ActionScript/abstract-type.as
@@ -0,0 +1,8 @@
+package
+{
+ public interface IInterface
+ {
+ function method1():void;
+ function method2(arg1:Array, arg2:Boolean):uint;
+ }
+}
diff --git a/Task/Abstract-type/Ada/abstract-type-1.ada b/Task/Abstract-type/Ada/abstract-type-1.ada
new file mode 100644
index 0000000000..ec6e7dfe56
--- /dev/null
+++ b/Task/Abstract-type/Ada/abstract-type-1.ada
@@ -0,0 +1,3 @@
+type Queue is limited interface;
+procedure Enqueue (Lounge : in out Queue; Item : in out Element) is abstract;
+procedure Dequeue (Lounge : in out Queue; Item : in out Element) is abstract;
diff --git a/Task/Abstract-type/Ada/abstract-type-2.ada b/Task/Abstract-type/Ada/abstract-type-2.ada
new file mode 100644
index 0000000000..09512a4fd8
--- /dev/null
+++ b/Task/Abstract-type/Ada/abstract-type-2.ada
@@ -0,0 +1,2 @@
+type Scheduler is task interface;
+procedure Plan (Manager : in out Scheduler; Activity : in out Job) is abstract;
diff --git a/Task/Abstract-type/Ada/abstract-type-3.ada b/Task/Abstract-type/Ada/abstract-type-3.ada
new file mode 100644
index 0000000000..712648f9b7
--- /dev/null
+++ b/Task/Abstract-type/Ada/abstract-type-3.ada
@@ -0,0 +1,10 @@
+with Ada.Finalization;
+...
+type Node is abstract new Ada.Finalization.Limited_Controlled and Queue with record
+ Previous : not null access Node'Class := Node'Unchecked_Access;
+ Next : not null access Node'Class := Node'Unchecked_Access;
+end record;
+overriding procedure Finalize (X : in out Node); -- Removes the node from its list if any
+overriding procedure Dequeue (Lounge : in out Node; Item : in out Element);
+overriding procedure Enqueue (Lounge : in out Node; Item : in out Element);
+procedure Process (X : in out Node) is abstract; -- To be implemented
diff --git a/Task/Abstract-type/Agda/abstract-type.agda b/Task/Abstract-type/Agda/abstract-type.agda
new file mode 100644
index 0000000000..f4870b2f17
--- /dev/null
+++ b/Task/Abstract-type/Agda/abstract-type.agda
@@ -0,0 +1,53 @@
+module AbstractInterfaceExample where
+
+open import Function
+open import Data.Bool
+open import Data.String
+
+-- * One-parameter interface for the type `a' with only one method.
+
+record VoiceInterface (a : Set) : Set where
+ constructor voice-interface
+ field say-method-of : a β String
+
+open VoiceInterface
+
+-- * An overloaded method.
+
+say : {a : Set} β β¦ _ : VoiceInterface a β¦ β a β String
+say β¦ instance β¦ = say-method-of instance
+
+-- * Some data types.
+
+data Cat : Set where
+ cat : Bool β Cat
+
+crazy! = true
+plain-cat = false
+
+-- | This cat is crazy?
+crazy? : Cat β Bool
+crazy? (cat x) = x
+
+-- | A 'plain' dog.
+data Dog : Set where
+ dog : Dog
+
+-- * Implementation of the interface (and method).
+
+instance-for-cat : VoiceInterface Cat
+instance-for-cat = voice-interface case where
+ case : Cat β String
+ case x with crazy? x
+ ... | true = "meeeoooowwwww!!!"
+ ... | false = "meow!"
+
+instance-for-dog : VoiceInterface Dog
+instance-for-dog = voice-interface $ const "woof!"
+
+-- * and then:
+--
+-- say dog => "woof!"
+-- say (cat crazy!) => "meeeoooowwwww!!!"
+-- say (cat plain-cat) => "meow!"
+--
diff --git a/Task/Abstract-type/Aikido/abstract-type-1.aikido b/Task/Abstract-type/Aikido/abstract-type-1.aikido
new file mode 100644
index 0000000000..c5bf13c2d5
--- /dev/null
+++ b/Task/Abstract-type/Aikido/abstract-type-1.aikido
@@ -0,0 +1,5 @@
+class Abs {
+ public function method1...
+ public function method2...
+
+}
diff --git a/Task/Abstract-type/Aikido/abstract-type-2.aikido b/Task/Abstract-type/Aikido/abstract-type-2.aikido
new file mode 100644
index 0000000000..4ce398b259
--- /dev/null
+++ b/Task/Abstract-type/Aikido/abstract-type-2.aikido
@@ -0,0 +1,5 @@
+interface Inter {
+ function isFatal : integer
+ function operate (para : integer = 0)
+ operator -> (stream, isout)
+}
diff --git a/Task/Abstract-type/Argile/abstract-type.argile b/Task/Abstract-type/Argile/abstract-type.argile
new file mode 100644
index 0000000000..0ddb713920
--- /dev/null
+++ b/Task/Abstract-type/Argile/abstract-type.argile
@@ -0,0 +1,38 @@
+use std
+
+(: abstract class :)
+
+class Abs
+ text name
+ AbsIface iface
+
+class AbsIface
+ function(Abs)(int)->int method
+
+let Abs_Iface = Cdata AbsIface@ {.method = nil}
+
+.: new Abs :. -> Abs {let a = new(Abs); a.iface = Abs_Iface; a}
+
+=: .method := -> int
+ (self.iface.method is nil) ? 0 , (call self.iface.method with self i)
+
+(: implementation :)
+
+class Sub <- Abs { int value }
+
+let Sub_Iface = Cdata AbsIface@ {.method = (code of (nil the Sub).method 0)}
+
+.: new Sub () :. -> Sub
+ let s = new (Sub)
+ s.iface = Sub_Iface
+ s.value = value
+ s
+
+.: .method :. -> int {this.value + i}
+
+(: example use :)
+
+.:foobar:. {print a.method 12 ; del a}
+foobar (new Sub 34) (: prints 46 :)
+foobar (new Sub) (: prints 11 :)
+foobar (new Abs) (: prints 0 :)
diff --git a/Task/Abstract-type/AutoHotkey/abstract-type.ahk b/Task/Abstract-type/AutoHotkey/abstract-type.ahk
new file mode 100644
index 0000000000..a5de431e4d
--- /dev/null
+++ b/Task/Abstract-type/AutoHotkey/abstract-type.ahk
@@ -0,0 +1,28 @@
+color(r, g, b){
+ static color
+ If !color
+ color := Object("base", Object("R", r, "G", g, "B", b
+ ,"GetRGB", "Color_GetRGB"))
+ return Object("base", Color)
+}
+Color_GetRGB(clr) {
+ return "not implemented"
+}
+
+waterColor(r, g, b){
+ static waterColor
+ If !waterColor
+ waterColor := Object("base", color(r, g, b),"GetRGB", "WaterColor_GetRGB")
+ return Object("base", WaterColor)
+}
+
+WaterColor_GetRGB(clr){
+return clr.R << 16 | clr.G << 8 | clr.B
+}
+
+test:
+blue := color(0, 0, 255)
+msgbox % blue.GetRGB() ; displays "not implemented"
+blue := waterColor(0, 0, 255)
+msgbox % blue.GetRGB() ; displays 255
+return
diff --git a/Task/Abstract-type/C/abstract-type-1.c b/Task/Abstract-type/C/abstract-type-1.c
new file mode 100644
index 0000000000..2e0aeed10e
--- /dev/null
+++ b/Task/Abstract-type/C/abstract-type-1.c
@@ -0,0 +1,33 @@
+#ifndef INTERFACE_ABS
+#define INTERFACE_ABS
+
+typedef struct sAbstractCls *AbsCls;
+
+typedef struct sAbstractMethods {
+ int (*method1)(AbsCls c, int a);
+ const char *(*method2)(AbsCls c, int b);
+ void (*method3)(AbsCls c, double d);
+} *AbstractMethods, sAbsMethods;
+
+struct sAbstractCls {
+ AbstractMethods klass;
+ void *instData;
+};
+
+#define ABSTRACT_METHODS( cName, m1, m2, m3 ) \
+ static sAbsMethods cName ## _Iface = { &m1, &m2, &m3 }; \
+ AbsCls cName ## _Instance( void *clInst) { \
+ AbsCls ac = malloc(sizeof(struct sAbstractCls)); \
+ if (ac) { \
+ ac->klass = &cName ## _Iface; \
+ ac->instData = clInst; \
+ }\
+ return ac; }
+
+#define Abs_Method1( c, a) (c)->klass->method1(c, a)
+#define Abs_Method2( c, b) (c)->klass->method2(c, b)
+#define Abs_Method3( c, d) (c)->klass->method3(c, d)
+#define Abs_Free(c) \
+ do { if (c) { free((c)->instData); free(c); } } while(0);
+
+#endif
diff --git a/Task/Abstract-type/C/abstract-type-2.c b/Task/Abstract-type/C/abstract-type-2.c
new file mode 100644
index 0000000000..4354d95cec
--- /dev/null
+++ b/Task/Abstract-type/C/abstract-type-2.c
@@ -0,0 +1,9 @@
+#ifndef SILLY_H
+#define SILLY_H
+#include intefaceAbs.h
+
+typedef struct sillyStruct *Silly;
+extern Silly NewSilly( double, const char *);
+extern AbsCls Silly_Instance(void *);
+
+#endif
diff --git a/Task/Abstract-type/C/abstract-type-3.c b/Task/Abstract-type/C/abstract-type-3.c
new file mode 100644
index 0000000000..d53c69665d
--- /dev/null
+++ b/Task/Abstract-type/C/abstract-type-3.c
@@ -0,0 +1,42 @@
+#include "silly.h"
+#include
+#include
+#include
+
+struct sillyStruct {
+ double v1;
+ char str[32];
+};
+
+Silly NewSilly(double vInit, const char *strInit)
+{
+ Silly sily = malloc(sizeof( struct sillyStruct ));
+ sily->v1 = vInit;
+ sily->str[0] = '\0';
+ strncat(sily->str, strInit, 31);
+ return sily;
+}
+
+static
+int MyMethod1( AbsCls c, int a)
+{
+ Silly s = (Silly)(c->instData);
+ return a+strlen(s->str);
+}
+
+static
+const char *MyMethod2(AbsCls c, int b)
+{
+ Silly s = (Silly)(c->instData);
+ sprintf(s->str, "%d", b);
+ return s->str;
+}
+
+static
+void MyMethod3(AbsCls c, double d)
+{
+ Silly s = (Silly)(c->instData);
+ printf("InMyMethod3, %f\n",s->v1 * d);
+}
+
+ABSTRACT_METHODS( Silly, MyMethod1, MyMethod2, MyMethod3)
diff --git a/Task/Abstract-type/C/abstract-type-4.c b/Task/Abstract-type/C/abstract-type-4.c
new file mode 100644
index 0000000000..4862b9b2e1
--- /dev/null
+++ b/Task/Abstract-type/C/abstract-type-4.c
@@ -0,0 +1,13 @@
+#include
+#include "silly.h"
+
+int main()
+{
+ AbsCls abster = Silly_Instance(NewSilly( 10.1, "Green Tomato"));
+
+ printf("AbsMethod1: %d\n", Abs_Method1(abster, 5));
+ printf("AbsMethod2: %s\n", Abs_Method2(abster, 4));
+ Abs_Method3(abster, 21.55);
+ Abs_Free(abster);
+ return 0;
+}
diff --git a/Task/Abstract-type/Clojure/abstract-type.clj b/Task/Abstract-type/Clojure/abstract-type.clj
new file mode 100644
index 0000000000..a442b2bd0d
--- /dev/null
+++ b/Task/Abstract-type/Clojure/abstract-type.clj
@@ -0,0 +1 @@
+(defprotocol Foo (foo [this]))
diff --git a/Task/Abstract-type/Eiffel/abstract-type.e b/Task/Abstract-type/Eiffel/abstract-type.e
new file mode 100644
index 0000000000..4bf6e811d3
--- /dev/null
+++ b/Task/Abstract-type/Eiffel/abstract-type.e
@@ -0,0 +1,17 @@
+deferred class
+ AN_ABSTRACT_CLASS
+
+feature
+
+ a_deferred_feature
+ -- a feature whose implementation is left to a descendent
+ deferred
+ end
+
+ an_effective_feature: STRING
+ -- deferred (abstract) classes may still include effective features
+ do
+ Result := "I am implemented!"
+ end
+
+end
diff --git a/Task/Abstract-type/Forth/abstract-type.fth b/Task/Abstract-type/Forth/abstract-type.fth
new file mode 100644
index 0000000000..79ea6a5b75
--- /dev/null
+++ b/Task/Abstract-type/Forth/abstract-type.fth
@@ -0,0 +1,25 @@
+include 4pp/lib/foos.4pp
+
+:: X()
+ class
+ method: method1
+ method: method2
+ end-class {
+ :method { ." Method 1 in X" cr } ; defines method1
+ }
+;
+
+:: Y()
+ extends X()
+ end-extends {
+ :method { ." Method 2 in Y" cr } ; defines method2
+ }
+;
+
+: Main
+ static Y() y
+ y => method1
+ y => method2
+;
+
+Main
diff --git a/Task/Abstract-type/Go/abstract-type.go b/Task/Abstract-type/Go/abstract-type.go
new file mode 100644
index 0000000000..7c4600d45d
--- /dev/null
+++ b/Task/Abstract-type/Go/abstract-type.go
@@ -0,0 +1,5 @@
+interface {
+ Method1(value float64) int
+ SetName(name string)
+ GetName() string
+}
diff --git a/Task/Abstract-type/Haskell/abstract-type-1.hs b/Task/Abstract-type/Haskell/abstract-type-1.hs
new file mode 100644
index 0000000000..d223408e49
--- /dev/null
+++ b/Task/Abstract-type/Haskell/abstract-type-1.hs
@@ -0,0 +1,3 @@
+class Eq a where
+ (==) :: a -> a -> Bool
+ (/=) :: a -> a -> Bool
diff --git a/Task/Abstract-type/Haskell/abstract-type-2.hs b/Task/Abstract-type/Haskell/abstract-type-2.hs
new file mode 100644
index 0000000000..db53784ccf
--- /dev/null
+++ b/Task/Abstract-type/Haskell/abstract-type-2.hs
@@ -0,0 +1,5 @@
+class Eq a where
+ (==) :: a -> a -> Bool
+ (/=) :: a -> a -> Bool
+ x /= y = not (x == y)
+ x == y = not (x /= y)
diff --git a/Task/Abstract-type/Haskell/abstract-type-3.hs b/Task/Abstract-type/Haskell/abstract-type-3.hs
new file mode 100644
index 0000000000..ceb41e0cb5
--- /dev/null
+++ b/Task/Abstract-type/Haskell/abstract-type-3.hs
@@ -0,0 +1,2 @@
+func :: (Eq a) => a -> Bool
+func x = x == x
diff --git a/Task/Abstract-type/Haskell/abstract-type-4.hs b/Task/Abstract-type/Haskell/abstract-type-4.hs
new file mode 100644
index 0000000000..b08f0b6a5d
--- /dev/null
+++ b/Task/Abstract-type/Haskell/abstract-type-4.hs
@@ -0,0 +1 @@
+data Foo = Foo {x :: Integer, str :: String}
diff --git a/Task/Abstract-type/Haskell/abstract-type-5.hs b/Task/Abstract-type/Haskell/abstract-type-5.hs
new file mode 100644
index 0000000000..dfc96a1159
--- /dev/null
+++ b/Task/Abstract-type/Haskell/abstract-type-5.hs
@@ -0,0 +1,3 @@
+instance Eq Foo where
+ (Foo x1 str1) == (Foo x2 str2) =
+ (x1 == x2) && (str1 == str2)
diff --git a/Task/Abstract-type/Haskell/abstract-type-6.hs b/Task/Abstract-type/Haskell/abstract-type-6.hs
new file mode 100644
index 0000000000..7745ff6089
--- /dev/null
+++ b/Task/Abstract-type/Haskell/abstract-type-6.hs
@@ -0,0 +1,3 @@
+class abstraction()
+ abstract method compare(l,r) # generates runerr(700, "method compare()")
+end
diff --git a/Task/Abstract-type/Java/abstract-type-1.java b/Task/Abstract-type/Java/abstract-type-1.java
new file mode 100644
index 0000000000..5d5c054699
--- /dev/null
+++ b/Task/Abstract-type/Java/abstract-type-1.java
@@ -0,0 +1,7 @@
+public abstract class Abs {
+ abstract public int method1(double value);
+ abstract protected int method2(String name);
+ int add(int a, int b){
+ return a+b;
+ }
+}
diff --git a/Task/Abstract-type/Java/abstract-type-2.java b/Task/Abstract-type/Java/abstract-type-2.java
new file mode 100644
index 0000000000..15776316d9
--- /dev/null
+++ b/Task/Abstract-type/Java/abstract-type-2.java
@@ -0,0 +1,5 @@
+public interface Inter {
+ int method1(double value);
+ int method2(String name);
+ int add(int a, int b);
+}
diff --git a/Task/Abstract-type/Lua/abstract-type-1.lua b/Task/Abstract-type/Lua/abstract-type-1.lua
new file mode 100644
index 0000000000..af65e9ea7b
--- /dev/null
+++ b/Task/Abstract-type/Lua/abstract-type-1.lua
@@ -0,0 +1,34 @@
+BaseClass = {}
+
+function class ( baseClass )
+ local new_class = {}
+ local class_mt = { __index = new_class }
+
+ function new_class:new()
+ local newinst = {}
+ setmetatable( newinst, class_mt )
+ return newinst
+ end
+
+ if not baseClass then baseClass = BaseClass end
+ setmetatable( new_class, { __index = baseClass } )
+
+ return new_class
+end
+
+function abstractClass ( self )
+ local new_class = {}
+ local class_mt = { __index = new_class }
+
+ function new_class:new()
+ error("Abstract classes cannot be instantiated")
+ end
+
+ if not baseClass then baseClass = BaseClass end
+ setmetatable( new_class, { __index = baseClass } )
+
+ return new_class
+end
+
+BaseClass.class = class
+BaseClass.abstractClass = abstractClass
diff --git a/Task/Abstract-type/Lua/abstract-type-2.lua b/Task/Abstract-type/Lua/abstract-type-2.lua
new file mode 100644
index 0000000000..c83b074c4d
--- /dev/null
+++ b/Task/Abstract-type/Lua/abstract-type-2.lua
@@ -0,0 +1,8 @@
+A = class() -- New class A inherits BaseClass by default
+AA = A:class() -- New class AA inherits from existing class A
+B = abstractClass() -- New abstract class B
+BB = B:class() -- BB is not abstract
+A:new() -- Okay: New class instance
+AA:new() -- Okay: New class instance
+B:new() -- Error: B is abstract
+BB:new() -- Okay: BB is not abstract
diff --git a/Task/Abstract-type/PHP/abstract-type-1.php b/Task/Abstract-type/PHP/abstract-type-1.php
new file mode 100644
index 0000000000..b24537c14c
--- /dev/null
+++ b/Task/Abstract-type/PHP/abstract-type-1.php
@@ -0,0 +1,7 @@
+abstract class Abs {
+ abstract public function method1($value);
+ abstract protected function method2($name);
+ function add($a, $b){
+ return a + b;
+ }
+}
diff --git a/Task/Abstract-type/PHP/abstract-type-2.php b/Task/Abstract-type/PHP/abstract-type-2.php
new file mode 100644
index 0000000000..f61b1b95c6
--- /dev/null
+++ b/Task/Abstract-type/PHP/abstract-type-2.php
@@ -0,0 +1,5 @@
+interface Inter {
+ public function method1($value);
+ public function method2($name);
+ public function add($a, $b);
+}
diff --git a/Task/Abstract-type/Perl/abstract-type-1.pl b/Task/Abstract-type/Perl/abstract-type-1.pl
new file mode 100644
index 0000000000..e7436bd08e
--- /dev/null
+++ b/Task/Abstract-type/Perl/abstract-type-1.pl
@@ -0,0 +1,14 @@
+package AbstractFoo;
+
+use strict;
+
+sub frob { die "abstract" }
+sub baz { die "abstract" }
+
+sub frob_the_baz {
+ my $self = shift;
+ $self->frob($self->baz());
+}
+
+
+1;
diff --git a/Task/Abstract-type/Perl/abstract-type-2.pl b/Task/Abstract-type/Perl/abstract-type-2.pl
new file mode 100644
index 0000000000..f1f4464d9c
--- /dev/null
+++ b/Task/Abstract-type/Perl/abstract-type-2.pl
@@ -0,0 +1,13 @@
+package AbstractFoo;
+
+use strict;
+
+sub frob { ... }
+sub baz { ... }
+
+sub frob_the_baz {
+ my $self = shift;
+ $self->frob($self->baz());
+}
+
+1;
diff --git a/Task/Abstract-type/Perl/abstract-type-3.pl b/Task/Abstract-type/Perl/abstract-type-3.pl
new file mode 100644
index 0000000000..aa042518de
--- /dev/null
+++ b/Task/Abstract-type/Perl/abstract-type-3.pl
@@ -0,0 +1,12 @@
+package AbstractFoo;
+
+use Moose::Role;
+
+requires qw/frob baz/;
+
+sub frob_the_baz {
+ my $self = shift;
+ $self->frob($self->baz());
+}
+
+1;
diff --git a/Task/Abstract-type/Perl/abstract-type-4.pl b/Task/Abstract-type/Perl/abstract-type-4.pl
new file mode 100644
index 0000000000..d09c8eac61
--- /dev/null
+++ b/Task/Abstract-type/Perl/abstract-type-4.pl
@@ -0,0 +1,12 @@
+package AbstractFoo;
+
+use Role::Tiny;
+
+requires qw/frob baz/;
+
+sub frob_the_baz {
+ my $self = shift;
+ $self->frob($self->baz());
+}
+
+1;
diff --git a/Task/Abstract-type/PicoLisp/abstract-type.l b/Task/Abstract-type/PicoLisp/abstract-type.l
new file mode 100644
index 0000000000..58964e0648
--- /dev/null
+++ b/Task/Abstract-type/PicoLisp/abstract-type.l
@@ -0,0 +1,11 @@
+# In PicoLisp there is no formal difference between abstract and concrete classes.
+# There is just a naming convention where abstract classes start with a
+# lower-case character after the '+' (the naming convention for classes).
+# This tells the programmer that this class has not enough methods
+# defined to survive on its own.
+
+(class +abstractClass)
+
+(dm someMethod> ()
+ (foo)
+ (bar) )
diff --git a/Task/Abstract-type/Python/abstract-type-1.py b/Task/Abstract-type/Python/abstract-type-1.py
new file mode 100644
index 0000000000..97bcd27dd4
--- /dev/null
+++ b/Task/Abstract-type/Python/abstract-type-1.py
@@ -0,0 +1,13 @@
+class BaseQueue(object):
+ """Abstract/Virtual Class
+ """
+ def __init__(self):
+ self.contents = list()
+ raise NotImplementedError
+ def Enqueue(self, item):
+ raise NotImplementedError
+ def Dequeue(self):
+ raise NotImplementedError
+ def Print_Contents(self):
+ for i in self.contents:
+ print i,
diff --git a/Task/Abstract-type/Python/abstract-type-2.py b/Task/Abstract-type/Python/abstract-type-2.py
new file mode 100644
index 0000000000..d7e1b0f7eb
--- /dev/null
+++ b/Task/Abstract-type/Python/abstract-type-2.py
@@ -0,0 +1,21 @@
+from abc import ABCMeta, abstractmethod
+
+class BaseQueue():
+ """Abstract Class
+ """
+ __metaclass__ = ABCMeta
+
+ def __init__(self):
+ self.contents = list()
+
+ @abstractmethod
+ def Enqueue(self, item):
+ pass
+
+ @abstractmethod
+ def Dequeue(self):
+ pass
+
+ def Print_Contents(self):
+ for i in self.contents:
+ print i,
diff --git a/Task/Abstract-type/Racket/abstract-type.rkt b/Task/Abstract-type/Racket/abstract-type.rkt
new file mode 100644
index 0000000000..5d0974a097
--- /dev/null
+++ b/Task/Abstract-type/Racket/abstract-type.rkt
@@ -0,0 +1,13 @@
+#lang racket
+
+(define animal-interface (interface () say))
+
+(define cat% (class* object% (animal-interface) (super-new))) ;; error
+
+(define cat% (class* object% (animal-interface)
+ (super-new)
+ (define/public (say)
+ (display "meeeeew!"))))
+
+(define tom (new cat%))
+(send tom say)
diff --git a/Task/Abstract-type/Ruby/abstract-type.rb b/Task/Abstract-type/Ruby/abstract-type.rb
new file mode 100644
index 0000000000..b2c5cd0f41
--- /dev/null
+++ b/Task/Abstract-type/Ruby/abstract-type.rb
@@ -0,0 +1,17 @@
+require 'abstraction'
+
+class AbstractQueue
+ abstract
+ def enqueue(object)
+ raise NotImplementedError
+ end
+ def dequeue
+ raise NotImplementedError
+ end
+end
+
+class ConcreteQueue < AbstractQueue
+ def enqueue(object)
+ puts "enqueue #{object.inspect}"
+ end
+end
diff --git a/Task/Abstract-type/Scala/abstract-type.scala b/Task/Abstract-type/Scala/abstract-type.scala
new file mode 100644
index 0000000000..2475f9ec40
--- /dev/null
+++ b/Task/Abstract-type/Scala/abstract-type.scala
@@ -0,0 +1,10 @@
+abstract class X {
+ type A
+ var B: A
+ val C: A
+ def D(a: A): A
+}
+
+trait Y {
+ val x: X
+}
diff --git a/Task/Abstract-type/Tcl/abstract-type.tcl b/Task/Abstract-type/Tcl/abstract-type.tcl
new file mode 100644
index 0000000000..cf8ef987d5
--- /dev/null
+++ b/Task/Abstract-type/Tcl/abstract-type.tcl
@@ -0,0 +1,9 @@
+oo::class create AbstractQueue {
+ method enqueue item {
+ error "not implemented"
+ }
+ method dequeue {} {
+ error "not implemented"
+ }
+ self unexport create new
+}
diff --git a/Task/Accumulator-factory/0DESCRIPTION b/Task/Accumulator-factory/0DESCRIPTION
new file mode 100644
index 0000000000..109491ef80
--- /dev/null
+++ b/Task/Accumulator-factory/0DESCRIPTION
@@ -0,0 +1,20 @@
+A problem posed by [[wp:Paul Graham|Paul Graham]] is that of creating a function that takes a single (numeric) argument and which returns another function that is an accumulator. The returned accumulator function in turn also takes a single numeric argument, and returns the sum of all the numeric values passed in so far to that accumulator (including the initial value passed when the accumulator was created).
+
+The detailed rules are at http://paulgraham.com/accgensub.html and are reproduced here for simplicity (with additions in ''small italic text'').
+:Before you submit an example, make sure the function
+
+:# Takes a number n and returns a function (lets call it g), that takes a number i, and returns n incremented by the accumulation of i from every call of function g(i). Although these exact function and parameter names need not be used
+:# Works for any numeric type-- i.e. can take both ints and floats and returns functions that can take both ints and floats. (It is not enough simply to convert all input to floats. An accumulator that has only seen integers must return integers.) ''(i.e., if the language doesn't allow for numeric polymorphism, you have to use overloading or something like that)''
+:# Generates functions that return the sum of every number ever passed to them, not just the most recent. ''(This requires a piece of state to hold the accumulated value, which in turn means that pure functional languages can't be used for this task.)''
+:# Returns a real function, meaning something that you can use wherever you could use a function you had defined in the ordinary way in the text of your program. ''(Follow your language's conventions here.)''
+:# Doesn't store the accumulated value or the returned functions in a way that could cause them to be inadvertently modified by other code. ''(No global variables or other such things.)''
+: E.g. if after the example, you added the following code (in a made-up language) ''where the factory function is called foo'':
+:: x = foo(1);
+x(5);
+foo(3);
+print x(2.3);
+: It should print 8.3. ''(There is no need to print the form of the accumulator function returned by foo(3); it's not part of the task at all.)''
+The purpose of this task is to create a function that implements the described rules. It need not handle any special error cases not described above. The simplest way to implement the task as described is typically to use a [[Closures|closure]], providing the language supports them.
+
+Where it is not possible to hold exactly to the constraints above, describe the deviations.
+{{Omit from|MUMPS|Creating a function implies that there is routine somewhere that has the function stored, and that function could be modified}}
diff --git a/Task/Accumulator-factory/1META.yaml b/Task/Accumulator-factory/1META.yaml
new file mode 100644
index 0000000000..f16d1f37aa
--- /dev/null
+++ b/Task/Accumulator-factory/1META.yaml
@@ -0,0 +1,3 @@
+---
+requires:
+- Mutable State
diff --git a/Task/Accumulator-factory/ABAP/accumulator-factory-1.abap b/Task/Accumulator-factory/ABAP/accumulator-factory-1.abap
new file mode 100644
index 0000000000..198add3937
--- /dev/null
+++ b/Task/Accumulator-factory/ABAP/accumulator-factory-1.abap
@@ -0,0 +1,27 @@
+report z_accumulator
+class acc definition.
+ public section.
+ methods:
+ call importing iv_i type any default 0 exporting ev_r type any,
+ constructor importing iv_d type f.
+ private section.
+ data a_sum type f.
+endclass.
+
+class acc implementation.
+ method call.
+ add iv_i to a_sum.
+ ev_r = a_sum.
+ endmethod.
+
+start-of-selection.
+
+data: cl_acc type ref to acc,
+ lv_ret2 type f,
+ lv_ret1 type i.
+
+create object cl_acc exporting iv_d = 1.
+cl_acc->call( exporting iv_i = 5 ).
+cl_acc->call( exporting iv_i = '2.3' importing ev_r = lv_ret2 ).
+cl_acc->call( exporting iv_i = 2 importing ev_r = lv_ret1 ).
+write : / lv_ret2 decimals 2 exponent 0 left-justified, / lv_ret1 left-justified.
diff --git a/Task/Accumulator-factory/ABAP/accumulator-factory-2.abap b/Task/Accumulator-factory/ABAP/accumulator-factory-2.abap
new file mode 100644
index 0000000000..496ed90db6
--- /dev/null
+++ b/Task/Accumulator-factory/ABAP/accumulator-factory-2.abap
@@ -0,0 +1,24 @@
+data: lv_source type string,
+ cl_processor type ref to cl_java_script,
+ lv_ret type string.
+
+cl_processor = cl_java_script=>create( ).
+concatenate
+'function acc(sum) { '
+' return function(n) { '
+' return sum += n;'
+' }; '
+' }; '
+' var x = acc(1); '
+' x(5);'
+' var ret = acc(3).toString();'
+' ret = ret + x(2.3);'
+ into lv_source.
+lv_ret = cl_processor->evaluate( lv_source ).
+
+if cl_processor->last_condition_code <> cl_java_script=>cc_ok.
+ write cl_processor->last_error_message.
+else.
+ write lv_ret.
+ write / 'Done'.
+endif.
diff --git a/Task/Accumulator-factory/ALGOL-68/accumulator-factory.alg b/Task/Accumulator-factory/ALGOL-68/accumulator-factory.alg
new file mode 100644
index 0000000000..daef37452b
--- /dev/null
+++ b/Task/Accumulator-factory/ALGOL-68/accumulator-factory.alg
@@ -0,0 +1,33 @@
+MODE NUMBER = UNION(INT,REAL,COMPL);
+
+PROC plus = (NUMBER in a, in b)NUMBER: (
+ CASE in a IN
+ (INT a): CASE in b IN (INT b): a+b, (REAL b): a+b, (COMPL b): a+b ESAC,
+ (REAL a): CASE in b IN (INT b): a+b, (REAL b): a+b, (COMPL b): a+b ESAC,
+ (COMPL a): CASE in b IN (INT b): a+b, (REAL b): a+b, (COMPL b): a+b ESAC
+ ESAC
+);
+
+main: (
+
+# now override the + and +:= OPerators #
+ OP + = (NUMBER a, b)NUMBER: plus(a,b);
+
+ OP +:= = (REF NUMBER lhs, NUMBER rhs)NUMBER:
+ lhs := lhs + rhs;
+
+ PROC accumulator = (REF NUMBER sum)PROC(NUMBER)NUMBER:
+ (NUMBER n)NUMBER:
+ sum +:= n;
+
+ PROC (NUMBER)NUMBER x = accumulator(LOC NUMBER := 1);
+ x(5);
+ print(("x:",x(2.3), new line));
+
+ PROC (NUMBER)NUMBER y = accumulator(LOC NUMBER := 100);
+ y(500);
+ print(("y:",y(230), new line));
+
+ print(("x:",x(0), new line))
+
+)
diff --git a/Task/Accumulator-factory/ActionScript/accumulator-factory.as b/Task/Accumulator-factory/ActionScript/accumulator-factory.as
new file mode 100644
index 0000000000..4624975e8b
--- /dev/null
+++ b/Task/Accumulator-factory/ActionScript/accumulator-factory.as
@@ -0,0 +1,14 @@
+//Throw an error if a non-number argument is used. (typeof evaluates to
+// "number" for both integers and reals)
+function checkType(obj:Object):void {
+ if(typeof obj != "number")
+ throw new ArgumentError("Expected integer or float argument. Recieved " + typeof obj);
+}
+function accumulator(sum:Object):Function {
+ checkType(sum);
+ return function(n:Object):Object {checkType(n); return sum += n};
+}
+var acc:Function=accumulator(2);
+trace(acc(10));
+trace(acc(4));
+trace(acc("123")); //This causes an ArgumentError to be thrown.
diff --git a/Task/Accumulator-factory/Ada/accumulator-factory-1.ada b/Task/Accumulator-factory/Ada/accumulator-factory-1.ada
new file mode 100644
index 0000000000..7a2d4fde69
--- /dev/null
+++ b/Task/Accumulator-factory/Ada/accumulator-factory-1.ada
@@ -0,0 +1,11 @@
+with Accumulator;
+with Ada.Text_IO; use Ada.Text_IO;
+
+procedure Example is
+ package A is new Accumulator;
+ package B is new Accumulator;
+begin
+ Put_Line (Integer'Image (A.The_Function (5)));
+ Put_Line (Integer'Image (B.The_Function (3)));
+ Put_Line (Float'Image (A.The_Function (2.3)));
+end;
diff --git a/Task/Accumulator-factory/Ada/accumulator-factory-2.ada b/Task/Accumulator-factory/Ada/accumulator-factory-2.ada
new file mode 100644
index 0000000000..90f6fbbec0
--- /dev/null
+++ b/Task/Accumulator-factory/Ada/accumulator-factory-2.ada
@@ -0,0 +1,11 @@
+generic package Accumulator is
+
+-- This Ada generic package represents an accumulator factory.
+-- The required function is provided as The_Function.
+-- The first call to The_Function sets the initial value.
+-- (Marius Amado-Alves)
+
+ function The_Function (X : Integer) return Integer;
+ function The_Function (X : Integer) return Float;
+ function The_Function (X : Float) return Float;
+end;
diff --git a/Task/Accumulator-factory/Ada/accumulator-factory-3.ada b/Task/Accumulator-factory/Ada/accumulator-factory-3.ada
new file mode 100644
index 0000000000..4d3ccb7a5f
--- /dev/null
+++ b/Task/Accumulator-factory/Ada/accumulator-factory-3.ada
@@ -0,0 +1,64 @@
+package body Accumulator is
+
+-- The accumulator lives through three states. It is in Virgin_State
+-- before any use of The_Function. It changes to Integer_State or
+-- Float_State, according to the input type used. The accumulation is
+-- memorized in variable I or F, according to the state. Float_State,
+-- once reached, is never left. A Float output on an Integer_State is
+-- simply a conversion, sans effect on state. (Marius Amado-Alves)
+
+ type State_T is (Virgin_State, Integer_State, Float_State);
+ State : State_T := Virgin_State;
+ I : Integer;
+ F : Float;
+
+ function The_Function (X : Float) return Float is
+ begin
+ case State is
+ when Virgin_State =>
+ State := Float_State;
+ F := X;
+ return F;
+ when Integer_State =>
+ State := Float_State;
+ F := Float (I) + X;
+ return F;
+ when Float_State =>
+ F := F + X;
+ return F;
+ end case;
+ end;
+
+ function The_Function (X : Integer) return Float is
+ begin
+ case State is
+ when Virgin_State =>
+ State := Integer_State;
+ I := X;
+ return Float (I);
+ when Integer_State =>
+ I := I + X;
+ return Float (I);
+ when Float_State =>
+ F := F + Float (X);
+ return F;
+ end case;
+ end;
+
+ function The_Function (X : Integer) return Integer is
+ begin
+ case State is
+ when Virgin_State =>
+ State := Integer_State;
+ I := X;
+ return I;
+ when Integer_State =>
+ I := I + X;
+ return I;
+ when Float_State =>
+ F := F + Float (X);
+ return Integer (F);
+ end case;
+ end;
+
+end;
diff --git a/Task/Accumulator-factory/Aikido/accumulator-factory.aikido b/Task/Accumulator-factory/Aikido/accumulator-factory.aikido
new file mode 100644
index 0000000000..2d2000a2fc
--- /dev/null
+++ b/Task/Accumulator-factory/Aikido/accumulator-factory.aikido
@@ -0,0 +1,8 @@
+function accumulator (sum:real) {
+ return function(n:real) { return sum += n }
+}
+
+var x = accumulator(1)
+x(5)
+println (accumulator)
+println (x(2.3))
diff --git a/Task/Accumulator-factory/Argile/accumulator-factory.argile b/Task/Accumulator-factory/Argile/accumulator-factory.argile
new file mode 100644
index 0000000000..9927a19767
--- /dev/null
+++ b/Task/Accumulator-factory/Argile/accumulator-factory.argile
@@ -0,0 +1,53 @@
+use std, array
+
+let A = accumulator 42
+print(A 0)
+print(A 1)
+print(A 10)
+print(A 100)
+
+let B = accumulator 4.2
+print(B 0)
+print(B 1)
+print(B 10.0)
+print(B 100.4)
+
+~A ; ~B
+(: use dbg; check mem leak :)
+
+(: accumulator call :)
+=: := -> (a.t)
+ call ((a.func) as function(any)(a.t)->(a.t)) with (a.data) ((Cgen x) as a.t)
+
+(: accumulator constructors :)
+.: accumulator :. -> int accumulator
+ (val (int accumulator) A).init(x)
+ (A as Accumulator).func = ( .::. ->int {accu += x; accu} )
+ A
+
+.: accumulator :. -> real accumulator
+ (val (real accumulator) A).init(x)
+ (A as Accumulator).func = ( .::. ->real{accu += x; accu} )
+ A
+
+=: .init :=
+ a = new (Accumulator)
+ a.data = (new array of 1 a.t)
+ *(a.data as (a.t*)) = Cgen x
+
+(: accumulator destructor :)
+.: del Accumulator :.
+ free a.data
+ free a
+=: ~ := {del Accumulator a}
+
+(: accumulator type :)
+class Accumulator
+ function func
+ any data
+
+=: [] accumulator := -> type
+ Accumulator.prefix
+ Accumulator.suffix
+
+autocast accumulator<->Accumulator
diff --git a/Task/Accumulator-factory/C/accumulator-factory.c b/Task/Accumulator-factory/C/accumulator-factory.c
new file mode 100644
index 0000000000..1abf86c3d6
--- /dev/null
+++ b/Task/Accumulator-factory/C/accumulator-factory.c
@@ -0,0 +1,18 @@
+#include
+//~ Take a number n and return a function that takes a number i
+#define ACCUMULATOR(name,n) __typeof__(n) name (__typeof__(n) i) { \
+ static __typeof__(n) _n=n; LOGIC; }
+//~ have it return n incremented by the accumulation of i
+#define LOGIC return _n+=i
+ACCUMULATOR(x,1.0)
+ACCUMULATOR(y,3)
+ACCUMULATOR(z,'a')
+#undef LOGIC
+int main (void) {
+ printf ("%f\n", x(5)); /* 6.000000 */
+ printf ("%f\n", x(2.3)); /* 8.300000 */
+ printf ("%i\n", y(5.0)); /* 8 */
+ printf ("%i\n", y(3.3)); /* 11 */
+ printf ("%c\n", z(5)); /* f */
+ return 0;
+}
diff --git a/Task/Accumulator-factory/Clojure/accumulator-factory-1.clj b/Task/Accumulator-factory/Clojure/accumulator-factory-1.clj
new file mode 100644
index 0000000000..6a7a7241e9
--- /dev/null
+++ b/Task/Accumulator-factory/Clojure/accumulator-factory-1.clj
@@ -0,0 +1,3 @@
+(defn accum [n]
+ (let [acc (atom n)]
+ (fn [m] (swap! acc + m))))
diff --git a/Task/Accumulator-factory/Clojure/accumulator-factory-2.clj b/Task/Accumulator-factory/Clojure/accumulator-factory-2.clj
new file mode 100644
index 0000000000..ff5bf59a1d
--- /dev/null
+++ b/Task/Accumulator-factory/Clojure/accumulator-factory-2.clj
@@ -0,0 +1,3 @@
+(defn accum [n]
+ (let [acc (ref n)]
+ #(dosync (alter acc + %))))
diff --git a/Task/Accumulator-factory/CoffeeScript/accumulator-factory.coffee b/Task/Accumulator-factory/CoffeeScript/accumulator-factory.coffee
new file mode 100644
index 0000000000..fae7f40e8a
--- /dev/null
+++ b/Task/Accumulator-factory/CoffeeScript/accumulator-factory.coffee
@@ -0,0 +1,6 @@
+accumulator = (sum) ->
+ (n) -> sum += n
+
+f = accumulator(1)
+console.log f(5)
+console.log f(2.3)
diff --git a/Task/Accumulator-factory/Erlang/accumulator-factory.erl b/Task/Accumulator-factory/Erlang/accumulator-factory.erl
new file mode 100644
index 0000000000..cdef2af8c9
--- /dev/null
+++ b/Task/Accumulator-factory/Erlang/accumulator-factory.erl
@@ -0,0 +1,17 @@
+-module(acc_factory).
+-export([loop/1,new/1]).
+
+loop(N)->
+ receive
+ {P,I}->
+ S =N+I, P!S, loop(S)
+ end.
+
+new(N)->
+ P=spawn(acc_factory,loop,[N]),
+ fun(I)->
+ P!{self(),I},
+ receive
+ V-> V
+ end
+ end.
diff --git a/Task/Accumulator-factory/Forth/accumulator-factory.fth b/Task/Accumulator-factory/Forth/accumulator-factory.fth
new file mode 100644
index 0000000000..f12f138625
--- /dev/null
+++ b/Task/Accumulator-factory/Forth/accumulator-factory.fth
@@ -0,0 +1,9 @@
+: accumulator
+ create ( n -- ) ,
+ does> ( n -- acc+n ) tuck +! @ ;
+
+0 accumulator foo
+
+1 foo . \ 1
+2 foo . \ 3
+3 foo . \ 6
diff --git a/Task/Accumulator-factory/Go/accumulator-factory.go b/Task/Accumulator-factory/Go/accumulator-factory.go
new file mode 100644
index 0000000000..509b52a99e
--- /dev/null
+++ b/Task/Accumulator-factory/Go/accumulator-factory.go
@@ -0,0 +1,34 @@
+package main
+
+import "fmt"
+
+func accumulator(sum interface{}) func(interface{}) interface{} {
+ return func(nv interface{}) interface{} {
+ switch s := sum.(type) {
+ case int:
+ switch n := nv.(type) {
+ case int:
+ sum = s + n
+ case float64:
+ sum = float64(s) + n
+ }
+ case float64:
+ switch n := nv.(type) {
+ case int:
+ sum = s + float64(n)
+ case float64:
+ sum = s + n
+ }
+ default:
+ sum = nv
+ }
+ return sum
+ }
+}
+
+func main() {
+ x := accumulator(1)
+ x(5)
+ accumulator(3)
+ fmt.Println(x(2.3))
+}
diff --git a/Task/Accumulator-factory/Haskell/accumulator-factory.hs b/Task/Accumulator-factory/Haskell/accumulator-factory.hs
new file mode 100644
index 0000000000..9ef056766a
--- /dev/null
+++ b/Task/Accumulator-factory/Haskell/accumulator-factory.hs
@@ -0,0 +1,17 @@
+import Control.Monad.ST
+import Data.STRef
+
+accumulator :: (Num a) => a -> ST s (a -> ST s a)
+accumulator sum0 = do
+ sum <- newSTRef sum0
+ return $ \n -> do
+ modifySTRef sum (+ n)
+ readSTRef sum
+
+main :: IO ()
+main = print foo
+ where foo = runST $ do
+ x <- accumulator 1
+ x 5
+ accumulator 3
+ x 2.3
diff --git a/Task/Accumulator-factory/Java/accumulator-factory-1.java b/Task/Accumulator-factory/Java/accumulator-factory-1.java
new file mode 100644
index 0000000000..408e9f5b40
--- /dev/null
+++ b/Task/Accumulator-factory/Java/accumulator-factory-1.java
@@ -0,0 +1,16 @@
+public class Accumulator {
+ private double sum;
+ public Accumulator(double sum0) {
+ sum = sum0;
+ }
+ public double call(double n) {
+ return sum += n;
+ }
+
+ public static void main(String[] args) {
+ Accumulator x = new Accumulator(1);
+ x.call(5);
+ System.out.println(new Accumulator(3));
+ System.out.println(x.call(2.3));
+ }
+}
diff --git a/Task/Accumulator-factory/Java/accumulator-factory-2.java b/Task/Accumulator-factory/Java/accumulator-factory-2.java
new file mode 100644
index 0000000000..5831d32b7d
--- /dev/null
+++ b/Task/Accumulator-factory/Java/accumulator-factory-2.java
@@ -0,0 +1,19 @@
+import com.google.common.base.Function;
+
+public class AccumulatorFactory {
+ private static Function accumulator(final Double elem) {
+ return new Function() {
+ Double sum = elem;
+ @Override public Double apply(Double val) {
+ return sum += val;
+ }
+ };
+ }
+
+ public static void main(String[] args) {
+ Function x = accumulator(1d);
+ x.apply(5d);
+ System.out.println(accumulator(3d));
+ System.out.println(x.apply(2.3));
+ }
+}
diff --git a/Task/Accumulator-factory/Java/accumulator-factory-3.java b/Task/Accumulator-factory/Java/accumulator-factory-3.java
new file mode 100644
index 0000000000..99c7f67e49
--- /dev/null
+++ b/Task/Accumulator-factory/Java/accumulator-factory-3.java
@@ -0,0 +1,30 @@
+public class Accumulator {
+ private Long sumA; // non-null if we're working in the integer domain
+ private double sumB;
+ public Accumulator(Number sum0) {
+ if (sum0 instanceof Double) {
+ sumB = sum0.doubleValue();
+ } else {
+ sumA = sum0.longValue();
+ }
+ }
+ public Number call(Number n) {
+ if (sumA != null) {
+ if (n instanceof Double) {
+ sumB = n.doubleValue() + sumA;
+ sumA = null;
+ return sumB;
+ }
+ return sumA += n.longValue();
+ }
+ return sumB += n.doubleValue();
+ }
+
+ public static void main(String[] args) {
+ Accumulator x = new Accumulator(1);
+ x.call(5);
+ Accumulator y = new Accumulator(3);
+ System.out.println(y+" has value "+y.call(0));
+ System.out.println(x.call(2.3));
+ }
+}
diff --git a/Task/Accumulator-factory/JavaScript/accumulator-factory-1.js b/Task/Accumulator-factory/JavaScript/accumulator-factory-1.js
new file mode 100644
index 0000000000..cda963ad42
--- /dev/null
+++ b/Task/Accumulator-factory/JavaScript/accumulator-factory-1.js
@@ -0,0 +1,9 @@
+function accumulator(sum) {
+ return function(n) {
+ return sum += n;
+ }
+}
+var x = accumulator(1);
+x(5);
+document.write(accumulator(3).toString() + ' ');
+document.write(x(2.3));
diff --git a/Task/Accumulator-factory/JavaScript/accumulator-factory-2.js b/Task/Accumulator-factory/JavaScript/accumulator-factory-2.js
new file mode 100644
index 0000000000..59ab2114e3
--- /dev/null
+++ b/Task/Accumulator-factory/JavaScript/accumulator-factory-2.js
@@ -0,0 +1,5 @@
+function accumulator(sum) function(n) sum += n;
+var x = accumulator(1);
+x(5);
+console.log(accumulator(3).toSource());
+console.log(x(2.3));
diff --git a/Task/Accumulator-factory/Lua/accumulator-factory-1.lua b/Task/Accumulator-factory/Lua/accumulator-factory-1.lua
new file mode 100644
index 0000000000..8091e4f8b9
--- /dev/null
+++ b/Task/Accumulator-factory/Lua/accumulator-factory-1.lua
@@ -0,0 +1,7 @@
+function acc(init)
+ init = init or 0
+ return function(delta)
+ init = init + (delta or 0)
+ return init
+ end
+end
diff --git a/Task/Accumulator-factory/Lua/accumulator-factory-2.lua b/Task/Accumulator-factory/Lua/accumulator-factory-2.lua
new file mode 100644
index 0000000000..212c48890b
--- /dev/null
+++ b/Task/Accumulator-factory/Lua/accumulator-factory-2.lua
@@ -0,0 +1,13 @@
+do
+ local accSum = 0; -- accumulator factory 'upvalue'
+ function acc(v) -- the accumulator factory
+ accSum = accSum + (v or 0) -- increment factory sum
+
+ local closuredSum = accSum; -- new 'upvalue' at each factory call
+ return function (w) -- the produced accumulator function
+ closuredSum = closuredSum + (w or 0) -- increment product 'upvalue'
+ return closuredSum -- return 'upvalue'
+ end, accSum -- end of product closure
+
+ end--acc
+end--end of factory closure
diff --git a/Task/Accumulator-factory/Lua/accumulator-factory-3.lua b/Task/Accumulator-factory/Lua/accumulator-factory-3.lua
new file mode 100644
index 0000000000..c4336f9b8f
--- /dev/null
+++ b/Task/Accumulator-factory/Lua/accumulator-factory-3.lua
@@ -0,0 +1,6 @@
+x = acc(1) -- x stores the product with initial value = 1
+x(5) -- add 5 to x's sum
+acc(3) -- add 3 to factory's sum
+print (x(2.3)) --> 8.3 -- add 2.3 to x's sum then print the result
+y = acc() -- create new function with factory's sum as initial value
+print (y()) --> 4 -- print the accumulated value inside the product y
diff --git a/Task/Accumulator-factory/PHP/accumulator-factory-1.php b/Task/Accumulator-factory/PHP/accumulator-factory-1.php
new file mode 100644
index 0000000000..05343146ee
--- /dev/null
+++ b/Task/Accumulator-factory/PHP/accumulator-factory-1.php
@@ -0,0 +1,8 @@
+
diff --git a/Task/Accumulator-factory/PHP/accumulator-factory-2.php b/Task/Accumulator-factory/PHP/accumulator-factory-2.php
new file mode 100644
index 0000000000..ca8e5e5d74
--- /dev/null
+++ b/Task/Accumulator-factory/PHP/accumulator-factory-2.php
@@ -0,0 +1,8 @@
+
diff --git a/Task/Accumulator-factory/Perl/accumulator-factory.pl b/Task/Accumulator-factory/Perl/accumulator-factory.pl
new file mode 100644
index 0000000000..b217520dc2
--- /dev/null
+++ b/Task/Accumulator-factory/Perl/accumulator-factory.pl
@@ -0,0 +1,9 @@
+sub accumulator {
+ my $sum = shift;
+ sub { $sum += shift }
+}
+
+my $x = accumulator(1);
+$x->(5);
+print accumulator(3), "\n";
+print $x->(2.3), "\n";
diff --git a/Task/Accumulator-factory/PicoLisp/accumulator-factory.l b/Task/Accumulator-factory/PicoLisp/accumulator-factory.l
new file mode 100644
index 0000000000..a9f697d57b
--- /dev/null
+++ b/Task/Accumulator-factory/PicoLisp/accumulator-factory.l
@@ -0,0 +1,8 @@
+(de accumulator (Sum)
+ (curry (Sum) (N)
+ (inc 'Sum N) ) )
+
+(def 'a (accumulator 7))
+(a 1) # Output: -> 8
+(a 2) # Output: -> 10
+(a -5) # Output: -> 5
diff --git a/Task/Accumulator-factory/Prolog/accumulator-factory.pro b/Task/Accumulator-factory/Prolog/accumulator-factory.pro
new file mode 100644
index 0000000000..1b8c1791ac
--- /dev/null
+++ b/Task/Accumulator-factory/Prolog/accumulator-factory.pro
@@ -0,0 +1,15 @@
+:- use_module(library(lambda)).
+
+define_g(N, G) :-
+ put_attr(V, user, N),
+ G = V +\X^Y^(get_attr(V, user, N1),
+ Y is X + N1,
+ put_attr(V, user, Y)).
+
+accumulator :-
+ define_g(1, G),
+ format('Code of g : ~w~n', [G]),
+ call(G, 5, S),
+ writeln(S),
+ call(G, 2.3, R1),
+ writeln(R1).
diff --git a/Task/Accumulator-factory/Python/accumulator-factory-1.py b/Task/Accumulator-factory/Python/accumulator-factory-1.py
new file mode 100644
index 0000000000..e615e3756b
--- /dev/null
+++ b/Task/Accumulator-factory/Python/accumulator-factory-1.py
@@ -0,0 +1,26 @@
+>>> def accumulator(sum):
+ def f(n):
+ f.sum += n
+ return f.sum
+ f.sum = sum
+ return f
+
+>>> x = accumulator(1)
+>>> x(5)
+6
+>>> x(2.3)
+8.3000000000000007
+>>> x = accumulator(1)
+>>> x(5)
+6
+>>> x(2.3)
+8.3000000000000007
+>>> x2 = accumulator(3)
+>>> x2(5)
+8
+>>> x2(3.3)
+11.300000000000001
+>>> x(0)
+8.3000000000000007
+>>> x2(0)
+11.300000000000001
diff --git a/Task/Accumulator-factory/Python/accumulator-factory-2.py b/Task/Accumulator-factory/Python/accumulator-factory-2.py
new file mode 100644
index 0000000000..1fbcb6bc2c
--- /dev/null
+++ b/Task/Accumulator-factory/Python/accumulator-factory-2.py
@@ -0,0 +1,11 @@
+def accumulator(sum):
+ def f(n):
+ nonlocal sum
+ sum += n
+ return sum
+ return f
+
+x = accumulator(1)
+x(5)
+print(accumulator(3))
+print(x(2.3))
diff --git a/Task/Accumulator-factory/Python/accumulator-factory-3.py b/Task/Accumulator-factory/Python/accumulator-factory-3.py
new file mode 100644
index 0000000000..3ea2a2e7a3
--- /dev/null
+++ b/Task/Accumulator-factory/Python/accumulator-factory-3.py
@@ -0,0 +1,9 @@
+def accumulator(sum):
+ while True:
+ sum += yield sum
+
+x = accumulator(1)
+x.send(None)
+x.send(5)
+print(accumulator(3))
+print(x.send(2.3))
diff --git a/Task/Accumulator-factory/R/accumulator-factory.r b/Task/Accumulator-factory/R/accumulator-factory.r
new file mode 100644
index 0000000000..e8ef5411d1
--- /dev/null
+++ b/Task/Accumulator-factory/R/accumulator-factory.r
@@ -0,0 +1,7 @@
+accumulatorFactory <- function(init) {
+ currentSum <- init
+ function(add) {
+ currentSum <<- currentSum + add
+ currentSum
+ }
+}
diff --git a/Task/Accumulator-factory/REXX/accumulator-factory.rexx b/Task/Accumulator-factory/REXX/accumulator-factory.rexx
new file mode 100644
index 0000000000..4256c1ca7a
--- /dev/null
+++ b/Task/Accumulator-factory/REXX/accumulator-factory.rexx
@@ -0,0 +1,13 @@
+/*REXX pgm: acculation factory copied/modeled after the ooRexx program. */
+x=.accumulator(new(1)) /*set accumulater with init val 1*/
+x=call(5)
+x=call(2.3)
+say " X value is now" x /*displays current value of X. */
+say "Accumulator value is now" sum /*displays current value of accum*/
+exit /*stick a fork in it, we're done.*/
+/*ββββββββββββββββββββββββββββββββββsubroutinesβββββββββββββββββββββββββ*/
+.accumulator: procedure expose sum
+ if symbol('SUM')=='LIT' then sum=0; sum=sum+arg(1)
+ return sum
+call: procedure expose sum; sum=sum+arg(1); return sum /*adds arg1βββΊsum*/
+new: procedure; return arg(1) /*long way 'round of using one. */
diff --git a/Task/Accumulator-factory/Racket/accumulator-factory.rkt b/Task/Accumulator-factory/Racket/accumulator-factory.rkt
new file mode 100644
index 0000000000..9786773767
--- /dev/null
+++ b/Task/Accumulator-factory/Racket/accumulator-factory.rkt
@@ -0,0 +1,6 @@
+#lang racket
+
+(define (accumulator n)
+ (lambda (i)
+ (set! n (+ n i))
+ n))
diff --git a/Task/Accumulator-factory/Ruby/accumulator-factory.rb b/Task/Accumulator-factory/Ruby/accumulator-factory.rb
new file mode 100644
index 0000000000..c72af7eaa6
--- /dev/null
+++ b/Task/Accumulator-factory/Ruby/accumulator-factory.rb
@@ -0,0 +1,30 @@
+def accumulator(sum)
+ lambda {|n| sum += n}
+end
+
+# mixing Integer and Float
+x = accumulator(1)
+x.call(5)
+p accumulator(3) # add some output to show what it returns
+puts x.call(2.3) # prints 8.3
+
+# mixing Rational and Complex
+require 'rational'
+require 'complex'
+y = accumulator(Rational(2, 3))
+y.call(Rational(1, 2))
+puts y.call(4)
+puts y.call(Complex(0, 1))
+puts y.call(Complex.polar(6, 5 * Math::PI / 4))
+puts x.call(0) # again prints 8.3
+
+# using other things that have a + method
+t = accumulator(Time.utc(1999, 8, 7, 6, 5))
+puts t.call(4) # prints 1999-08-07 06:05:04 UTC
+
+require 'matrix'
+m = accumulator(Matrix[[1, 2], [3, 4]])
+puts m.call(Matrix[[5, 6], [7, 8]])
+puts t.call(-12 * 60 * 60) # subtracts 12 hours
+puts y.call(1e200)
+puts x.call(0) # again prints 8.3
diff --git a/Task/Accumulator-factory/Scala/accumulator-factory.scala b/Task/Accumulator-factory/Scala/accumulator-factory.scala
new file mode 100644
index 0000000000..a0607545ee
--- /dev/null
+++ b/Task/Accumulator-factory/Scala/accumulator-factory.scala
@@ -0,0 +1,8 @@
+def AccumulatorFactory[N](n: N)(implicit num: Numeric[N]) = {
+ import num._
+ var acc = n
+ (inc: N) => {
+ acc = acc + inc
+ acc
+ }
+}
diff --git a/Task/Accumulator-factory/Scheme/accumulator-factory.ss b/Task/Accumulator-factory/Scheme/accumulator-factory.ss
new file mode 100644
index 0000000000..e35ab6a49a
--- /dev/null
+++ b/Task/Accumulator-factory/Scheme/accumulator-factory.ss
@@ -0,0 +1,15 @@
+(define (accumulator sum)
+ (lambda (n)
+ (set! sum (+ sum n))
+ sum))
+
+;; or:
+
+(define ((accumulator sum) n)
+ (set! sum (+ sum n))
+ sum)
+
+(define x (accumulator 1))
+(x 5)
+(display (accumulator 3)) (newline)
+(display (x 2.3)) (newline)
diff --git a/Task/Accumulator-factory/Smalltalk/accumulator-factory-1.st b/Task/Accumulator-factory/Smalltalk/accumulator-factory-1.st
new file mode 100644
index 0000000000..411a63e1fb
--- /dev/null
+++ b/Task/Accumulator-factory/Smalltalk/accumulator-factory-1.st
@@ -0,0 +1,19 @@
+Object subclass: AccumulatorFactory [
+ AccumulatorFactory class >> new: aNumber [
+ |r sum|
+ sum := aNumber.
+ r := [ :a |
+ sum := sum + a.
+ sum
+ ].
+ ^r
+ ]
+]
+
+|x y|
+x := AccumulatorFactory new: 1.
+x value: 5.
+y := AccumulatorFactory new: 3.
+(x value: 2.3) displayNl.
+"x inspect."
+"de-comment the previous line to show that x is a block closure"
diff --git a/Task/Accumulator-factory/Smalltalk/accumulator-factory-2.st b/Task/Accumulator-factory/Smalltalk/accumulator-factory-2.st
new file mode 100644
index 0000000000..793ecac770
--- /dev/null
+++ b/Task/Accumulator-factory/Smalltalk/accumulator-factory-2.st
@@ -0,0 +1,15 @@
+|factory a|
+
+factory := [:initial |
+ [
+ |sum|
+
+ sum := initial.
+ [:addend | sum := sum + addend].
+ ] value.
+].
+
+a := factory value:1.
+a value:5.
+factory value:3.
+(a value:2.3) printCR "-> 8.3 "
diff --git a/Task/Accumulator-factory/Tcl/accumulator-factory-1.tcl b/Task/Accumulator-factory/Tcl/accumulator-factory-1.tcl
new file mode 100644
index 0000000000..7df4b1ef38
--- /dev/null
+++ b/Task/Accumulator-factory/Tcl/accumulator-factory-1.tcl
@@ -0,0 +1,28 @@
+package require Tcl 8.6
+
+# make the creation of coroutines without procedures simpler
+proc coro {name arguments body args} {
+ coroutine $name apply [list $arguments $body] {*}$args
+}
+# Wrap the feeding of values in and out of a generator
+proc coloop {var body} {
+ set val [info coroutine]
+ upvar 1 $var v
+ while 1 {
+ set v [yield $val]
+ if {$v eq "stop"} break
+ set val [uplevel 1 $body]
+ }
+}
+
+# The outer coroutine is the accumulator factory
+# The inner coroutine is the particular accumulator
+coro accumulator {} {
+ coloop n {
+ coro accumulator.[incr counter] n {
+ coloop i {
+ set n [expr {$n + $i}]
+ }
+ } $n
+ }
+}
diff --git a/Task/Accumulator-factory/Tcl/accumulator-factory-2.tcl b/Task/Accumulator-factory/Tcl/accumulator-factory-2.tcl
new file mode 100644
index 0000000000..dd540c84cb
--- /dev/null
+++ b/Task/Accumulator-factory/Tcl/accumulator-factory-2.tcl
@@ -0,0 +1,8 @@
+% set x [accumulator 1]
+::accumulator.1
+% $x 5
+6
+% accumulator 3
+::accumulator.2
+% puts ">>[$x 2.3]<<"
+>>8.3<<
diff --git a/Task/Active-Directory-Connect/0DESCRIPTION b/Task/Active-Directory-Connect/0DESCRIPTION
new file mode 100644
index 0000000000..6a8a406640
--- /dev/null
+++ b/Task/Active-Directory-Connect/0DESCRIPTION
@@ -0,0 +1 @@
+The task is to establish a connection to an Active Directory or Lightweight Directory Access Protocol server.
diff --git a/Task/Active-Directory-Connect/1META.yaml b/Task/Active-Directory-Connect/1META.yaml
new file mode 100644
index 0000000000..f6d82c59ad
--- /dev/null
+++ b/Task/Active-Directory-Connect/1META.yaml
@@ -0,0 +1,2 @@
+---
+note: Programming environment operations
diff --git a/Task/Active-Directory-Connect/AutoHotkey/active-directory-connect.ahk b/Task/Active-Directory-Connect/AutoHotkey/active-directory-connect.ahk
new file mode 100644
index 0000000000..a866cf0f96
--- /dev/null
+++ b/Task/Active-Directory-Connect/AutoHotkey/active-directory-connect.ahk
@@ -0,0 +1,4 @@
+objConn := CreateObject("ADODB.Connection")
+objCmd := CreateObject("ADODB.Command")
+objConn.Provider := "ADsDSOObject"
+objConn.Open()
diff --git a/Task/Active-Directory-Connect/AutoIt/active-directory-connect.autoit b/Task/Active-Directory-Connect/AutoIt/active-directory-connect.autoit
new file mode 100644
index 0000000000..21c0bf11dc
--- /dev/null
+++ b/Task/Active-Directory-Connect/AutoIt/active-directory-connect.autoit
@@ -0,0 +1,2 @@
+ #include
+_AD_Open()
diff --git a/Task/Active-Directory-Connect/C/active-directory-connect.c b/Task/Active-Directory-Connect/C/active-directory-connect.c
new file mode 100644
index 0000000000..1cc29b4f38
--- /dev/null
+++ b/Task/Active-Directory-Connect/C/active-directory-connect.c
@@ -0,0 +1,8 @@
+#include
+...
+char *name, *password;
+...
+LDAP *ld = ldap_init("ldap.somewhere.com", 389);
+ldap_simple_bind_s(ld, name, password);
+... after done with it...
+ldap_unbind(ld);
diff --git a/Task/Active-Directory-Connect/Java/active-directory-connect.java b/Task/Active-Directory-Connect/Java/active-directory-connect.java
new file mode 100644
index 0000000000..64f3b0bea7
--- /dev/null
+++ b/Task/Active-Directory-Connect/Java/active-directory-connect.java
@@ -0,0 +1,59 @@
+import java.io.IOException;
+
+import org.apache.directory.ldap.client.api.LdapConnection;
+import org.apache.directory.ldap.client.api.LdapNetworkConnection;
+import org.apache.directory.shared.ldap.model.cursor.EntryCursor;
+import org.apache.directory.shared.ldap.model.entry.Entry;
+import org.apache.directory.shared.ldap.model.exception.LdapException;
+import org.apache.directory.shared.ldap.model.message.SearchScope;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class RDirectoryLDAP {
+
+ static final Logger log_;
+ private static final String ldapHostName;
+ private static final int ldapPort;
+ private static LdapConnection connection;
+
+ static {
+ log_ = LoggerFactory.getLogger(RDirectoryLDAP.class);
+ connection = null;
+ ldapHostName = "localhost";
+ ldapPort = 10389;
+ }
+
+ public static void main(String[] args) {
+ try {
+ if (log_.isInfoEnabled()) { log_.info("LDAP Connection to " + ldapHostName + " on port " + ldapPort); }
+ connection = new LdapNetworkConnection(ldapHostName, ldapPort);
+
+ try {
+ if (log_.isTraceEnabled()) { log_.trace("LDAP bind"); }
+ connection.bind();
+
+ if (log_.isTraceEnabled()) { log_.trace("LDAP unbind"); }
+ connection.unBind();
+ }
+ catch (LdapException lex) {
+ log_.error("LDAP Error", lex);
+ }
+ catch (IOException ex) {
+ log_.error("I/O Error", ex);
+ }
+ }
+ finally {
+ if (log_.isTraceEnabled()) { log_.trace("LDAP close connection"); }
+ try {
+ if (connection != null) {
+ connection.close();
+ }
+ }
+ catch (IOException ex) {
+ log_.error("I/O Error on connection.close()", ex);
+ }
+ }
+
+ return;
+ }
+}
diff --git a/Task/Active-Directory-Connect/PHP/active-directory-connect.php b/Task/Active-Directory-Connect/PHP/active-directory-connect.php
new file mode 100644
index 0000000000..262c507a8e
--- /dev/null
+++ b/Task/Active-Directory-Connect/PHP/active-directory-connect.php
@@ -0,0 +1,3 @@
+new('ldap://ldap.example.com') or die $@;
+my $mesg = $ldap->bind( $bind_dn, password => $bind_pass );
diff --git a/Task/Active-Directory-Connect/PicoLisp/active-directory-connect.l b/Task/Active-Directory-Connect/PicoLisp/active-directory-connect.l
new file mode 100644
index 0000000000..d54ff16611
--- /dev/null
+++ b/Task/Active-Directory-Connect/PicoLisp/active-directory-connect.l
@@ -0,0 +1,4 @@
+(unless (=0 (setq Ldap (native "libldap.so" "ldap_open" 'N "example.com" 389)))
+ (quit "Can't open LDAP") )
+
+(native "libldap.so" "ldap_simple_bind_s" 'I Ldap "user" "password")
diff --git a/Task/Active-Directory-Connect/Python/active-directory-connect.py b/Task/Active-Directory-Connect/Python/active-directory-connect.py
new file mode 100644
index 0000000000..e9dd90d322
--- /dev/null
+++ b/Task/Active-Directory-Connect/Python/active-directory-connect.py
@@ -0,0 +1,10 @@
+import ldap
+
+l = ldap.initialize("ldap://ldap.example.com")
+try:
+ l.protocol_version = ldap.VERSION3
+ l.set_option(ldap.OPT_REFERRALS, 0)
+
+ bind = l.simple_bind_s("me@example.com", "password")
+finally:
+ l.unbind()
diff --git a/Task/Active-Directory-Connect/Ruby/active-directory-connect.rb b/Task/Active-Directory-Connect/Ruby/active-directory-connect.rb
new file mode 100644
index 0000000000..cc95a72e16
--- /dev/null
+++ b/Task/Active-Directory-Connect/Ruby/active-directory-connect.rb
@@ -0,0 +1,4 @@
+require 'rubygems'
+require 'net/ldap'
+ldap = Net::LDAP.new(:host => 'ldap.example.com', :base => 'o=companyname')
+ldap.authenticate('bind_dn', 'bind_pass')
diff --git a/Task/Active-Directory-Connect/Tcl/active-directory-connect.tcl b/Task/Active-Directory-Connect/Tcl/active-directory-connect.tcl
new file mode 100644
index 0000000000..fb00383228
--- /dev/null
+++ b/Task/Active-Directory-Connect/Tcl/active-directory-connect.tcl
@@ -0,0 +1,3 @@
+package require ldap
+set conn [ldap::connect $host $port]
+ldap::bind $conn $user $password
diff --git a/Task/Active-Directory-Search-for-a-user/0DESCRIPTION b/Task/Active-Directory-Search-for-a-user/0DESCRIPTION
new file mode 100644
index 0000000000..54cd357d39
--- /dev/null
+++ b/Task/Active-Directory-Search-for-a-user/0DESCRIPTION
@@ -0,0 +1 @@
+Make sure you [[Connect to Active Directory]]
diff --git a/Task/Active-Directory-Search-for-a-user/1META.yaml b/Task/Active-Directory-Search-for-a-user/1META.yaml
new file mode 100644
index 0000000000..f6d82c59ad
--- /dev/null
+++ b/Task/Active-Directory-Search-for-a-user/1META.yaml
@@ -0,0 +1,2 @@
+---
+note: Programming environment operations
diff --git a/Task/Active-Directory-Search-for-a-user/C/active-directory-search-for-a-user.c b/Task/Active-Directory-Search-for-a-user/C/active-directory-search-for-a-user.c
new file mode 100644
index 0000000000..6734a6c57a
--- /dev/null
+++ b/Task/Active-Directory-Search-for-a-user/C/active-directory-search-for-a-user.c
@@ -0,0 +1,21 @@
+#include
+
+char *name, *password;
+...
+
+LDAP *ld = ldap_init("ldap.somewhere.com", 389);
+ldap_simple_bind_s(ld, name, password);
+
+LDAPMessage **result;
+ldap_search_s(ld, "dc=somewhere,dc=com", LDAP_SCOPE_SUBTREE,
+ /* search for all persons whose names start with joe or shmoe */
+ "(&(objectclass=person)(|(cn=joe*)(cn=shmoe*)))",
+ NULL, /* return all attributes */
+ 0, /* want both types and values of attrs */
+ result); /* ldap will allocate room for return messages */
+
+/* arduously do stuff here to result, with ldap_first_message(),
+ ldap_parse_result(), etc. */
+
+ldap_msgfree(*result); /* free messages */
+ldap_unbind(ld); /* disconnect */
diff --git a/Task/Active-Directory-Search-for-a-user/Java/active-directory-search-for-a-user.java b/Task/Active-Directory-Search-for-a-user/Java/active-directory-search-for-a-user.java
new file mode 100644
index 0000000000..42097890fe
--- /dev/null
+++ b/Task/Active-Directory-Search-for-a-user/Java/active-directory-search-for-a-user.java
@@ -0,0 +1,153 @@
+import java.io.IOException;
+import java.util.Arrays;
+
+import org.apache.directory.ldap.client.api.LdapConnection;
+import org.apache.directory.ldap.client.api.LdapNetworkConnection;
+import org.apache.directory.shared.ldap.model.cursor.EntryCursor;
+import org.apache.directory.shared.ldap.model.entry.Entry;
+import org.apache.directory.shared.ldap.model.exception.LdapException;
+import org.apache.directory.shared.ldap.model.message.SearchScope;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public class RDirectorySearchLDAP {
+
+ protected static final Logger log_;
+ private static LdapConnection connection;
+ private static final String ldapHostName;
+ private static final int ldapPort;
+ private static final String ldapDnStr;
+ private static final String ldapCreds;
+
+ static {
+
+ log_ = LoggerFactory.getLogger(RDirectorySearchLDAP.class);
+
+ ldapHostName = "localhost";
+ ldapPort = 11389;
+ ldapDnStr="uid=admin,ou=system";
+ ldapCreds="********";
+ }
+
+ public static void main(String[] args) {
+
+ boolean connected = false;
+
+ try {
+ connected = setUp();
+ if (connected) {
+ search("*mil*");
+ }
+ }
+ finally {
+ if (connected) {
+ tearDown();
+ }
+ }
+
+ return;
+ }
+
+ private static boolean search(String uid) {
+
+ boolean state;
+ EntryCursor cursor;
+ Entry ev;
+ String baseDn;
+ String filter;
+ SearchScope scope;
+ String attributes[];
+ int ksearch = 0;
+
+ state = true;
+
+ baseDn = "ou=users,o=mojo";
+ filter = "(&(objectClass=person)(&(uid=" + uid + ")))";
+ scope = SearchScope.SUBTREE;
+ attributes = new java.lang.String[] { "dn", "cn", "sn", "uid" };
+
+ try {
+ if (log_.isTraceEnabled()) { log_.trace("LDAP search"); }
+ if (log_.isInfoEnabled()) {
+ log_.info("Begin search");
+ log_.info(" search base distinguished name: " + baseDn);
+ log_.info(" search filter: " + filter);
+ log_.info(" search attributes: " + (Arrays.asList(attributes).toString()));
+ }
+ cursor = connection.search(baseDn, filter, scope, attributes);
+ while (cursor.next()) {
+ ksearch++;
+ ev = cursor.get();
+ if (log_.isInfoEnabled()) { log_.info("Search cursor entry count: " + ksearch); }
+ if (log_.isInfoEnabled()) { log_.info(ev.toString()); }
+ }
+ }
+ catch (LdapException lex) {
+ state = false;
+ log_.error("LDAP Error in cursor loop: Iteration " + ksearch, lex);
+ }
+ catch (Exception ex) {
+ state = false;
+ log_.error("I/O Error in cursor loop: Iteration " + ksearch, ex);
+ }
+
+ return state;
+ }
+
+ private static boolean search() {
+
+ return search("*");
+ }
+
+ private static boolean setUp() {
+
+ boolean state = false;
+
+ try {
+ if (log_.isInfoEnabled()) { log_.info("LDAP Connection to " + ldapHostName + " on port " + ldapPort); }
+ connection = new LdapNetworkConnection(ldapHostName, ldapPort);
+
+ if (log_.isTraceEnabled()) { log_.trace("LDAP bind"); }
+ connection.bind(ldapDnStr, ldapCreds);
+
+ state = true;
+ }
+ catch (LdapException lex) {
+ state = false;
+ log_.error("LDAP Error", lex);
+ }
+ catch (IOException iox) {
+ state = false;
+ log_.error("I/O Error", iox);
+ }
+
+ return state;
+ }
+
+ private static boolean tearDown() {
+
+ boolean state = false;
+
+ try {
+ if (log_.isTraceEnabled()) { log_.trace("LDAP unbind"); }
+ connection.unBind();
+ state = true;
+ }
+ catch (LdapException lex) {
+ state = false;
+ log_.error("LDAP Error", lex);
+ }
+ finally {
+ try {
+ connection.close();
+ }
+ catch (IOException iox) {
+ state = false;
+ log_.error("I/O Error on connection.close()", iox);
+ }
+ }
+
+ return state;
+ }
+}
diff --git a/Task/Active-Directory-Search-for-a-user/PHP/active-directory-search-for-a-user.php b/Task/Active-Directory-Search-for-a-user/PHP/active-directory-search-for-a-user.php
new file mode 100644
index 0000000000..639cf7ca89
--- /dev/null
+++ b/Task/Active-Directory-Search-for-a-user/PHP/active-directory-search-for-a-user.php
@@ -0,0 +1,16 @@
+ 'hostname', :base => 'base')
+ldap.authenticate('bind_dn', 'bind_pass')
+
+filter = Net::LDAP::Filter.pres('objectclass')
+filter &= Net::LDAP::Filter.eq('sn','Jackman')
+# or
+filter = Net::LDAP::Filter.construct('(&(objectclass=*)(sn=Jackman))')
+
+results = ldap.search(:filter => filter) # returns an array of Net::LDAP::Entry objects
+
+puts results[0][:sn] # ==> "Jackman"
diff --git a/Task/Active-Directory-Search-for-a-user/Tcl/active-directory-search-for-a-user-1.tcl b/Task/Active-Directory-Search-for-a-user/Tcl/active-directory-search-for-a-user-1.tcl
new file mode 100644
index 0000000000..ed8e7aa8d2
--- /dev/null
+++ b/Task/Active-Directory-Search-for-a-user/Tcl/active-directory-search-for-a-user-1.tcl
@@ -0,0 +1,4 @@
+set Username "TestUser"
+set Filter "((&objectClass=*)(sAMAccountName=$Username))"
+set Base "dc=skycityauckland,dc=sceg,dc=com"
+set Attrs distinguishedName
diff --git a/Task/Active-Directory-Search-for-a-user/Tcl/active-directory-search-for-a-user-2.tcl b/Task/Active-Directory-Search-for-a-user/Tcl/active-directory-search-for-a-user-2.tcl
new file mode 100644
index 0000000000..a4b6ccdf9a
--- /dev/null
+++ b/Task/Active-Directory-Search-for-a-user/Tcl/active-directory-search-for-a-user-2.tcl
@@ -0,0 +1 @@
+set result [ldap::search $conn $Base $Filter $Attrs -scope subtree]
diff --git a/Task/Active-Directory-Search-for-a-user/Tcl/active-directory-search-for-a-user-3.tcl b/Task/Active-Directory-Search-for-a-user/Tcl/active-directory-search-for-a-user-3.tcl
new file mode 100644
index 0000000000..a96a01e803
--- /dev/null
+++ b/Task/Active-Directory-Search-for-a-user/Tcl/active-directory-search-for-a-user-3.tcl
@@ -0,0 +1,3 @@
+if {[llength $result] == 1} {
+ puts [dict get [lindex $result 0 1] distinguishedName]
+}
diff --git a/Task/Active-Directory-Search-for-a-user/Tcl/active-directory-search-for-a-user-4.tcl b/Task/Active-Directory-Search-for-a-user/Tcl/active-directory-search-for-a-user-4.tcl
new file mode 100644
index 0000000000..5773eb436c
--- /dev/null
+++ b/Task/Active-Directory-Search-for-a-user/Tcl/active-directory-search-for-a-user-4.tcl
@@ -0,0 +1,4 @@
+foreach pair $result {
+ lassign $pair cn attributes
+ puts [dict get $attributes distinguishedName]
+}
diff --git a/Task/Active-Directory-Search-for-a-user/Tcl/active-directory-search-for-a-user-5.tcl b/Task/Active-Directory-Search-for-a-user/Tcl/active-directory-search-for-a-user-5.tcl
new file mode 100644
index 0000000000..45c466b9de
--- /dev/null
+++ b/Task/Active-Directory-Search-for-a-user/Tcl/active-directory-search-for-a-user-5.tcl
@@ -0,0 +1,5 @@
+package require ldapx
+set conn [ldapx::connect $BindDN $Password]
+$conn traverse $Base $Filter $Attrs e {
+ puts [$e get distinguishedName]
+}
diff --git a/Task/Active-object/0DESCRIPTION b/Task/Active-object/0DESCRIPTION
new file mode 100644
index 0000000000..e791de2798
--- /dev/null
+++ b/Task/Active-object/0DESCRIPTION
@@ -0,0 +1,17 @@
+In [[object-oriented programming]] an object is active when its state depends on clock. Usually an active object encapsulates a [[task]] that updates the object's state. To the outer world the object looks like a normal object with methods that can be called from outside. Implementation of such methods must have a certain synchronization mechanism with the encapsulated task in order to prevent object's state corruption.
+
+A typical instance of an active object is an animation widget. The widget state changes with the time, while as an object it has all properties of a normal widget.
+
+'''The task'''
+
+Implement an active integrator object. The object has an input and output. The input can be set using the method ''Input''. The input is a function of time. The output can be queried using the method ''Output''. The object integrates its input over the time and the result becomes the object's output. So if the input is ''K''(''t'') and the output is ''S'', the object state ''S'' is changed to ''S'' + (''K''(''t''1) + ''K''(''t''0)) * (''t''1 - ''t''0) / 2, i.e. it integrates ''K'' using the trapeze method. Initially ''K'' is constant 0 and ''S'' is 0.
+
+In order to test the object:
+# set its input to sin (2Ο ''f t''), where the frequency ''f''=0.5Hz. The phase is irrelevant.
+# wait 2s
+# set the input to constant 0
+# wait 0.5s
+
+Verify that now the object's output is approximately 0 (the sine has the period of 2s). The accuracy of the result will depend on the [[OS]] scheduler time slicing and the accuracy of the clock.
+
+{{omit from|VBScript}}
diff --git a/Task/Active-object/1META.yaml b/Task/Active-object/1META.yaml
new file mode 100644
index 0000000000..60fc34b137
--- /dev/null
+++ b/Task/Active-object/1META.yaml
@@ -0,0 +1,8 @@
+---
+category:
+- Object oriented
+note: Concurrency
+requires:
+- Concurrency
+- Objects
+- Mutable State
diff --git a/Task/Active-object/Ada/active-object.ada b/Task/Active-object/Ada/active-object.ada
new file mode 100644
index 0000000000..c8410cb4d4
--- /dev/null
+++ b/Task/Active-object/Ada/active-object.ada
@@ -0,0 +1,65 @@
+with Ada.Calendar; use Ada.Calendar;
+with Ada.Numerics; use Ada.Numerics;
+with Ada.Numerics.Elementary_Functions; use Ada.Numerics.Elementary_Functions;
+with Ada.Text_IO; use Ada.Text_IO;
+
+procedure Test_Integrator is
+ type Func is access function (T : Time) return Float;
+
+ function Zero (T : Time) return Float is
+ begin
+ return 0.0;
+ end Zero;
+
+ Epoch : constant Time := Clock;
+
+ function Sine (T : Time) return Float is
+ begin
+ return Sin (Pi * Float (T - Epoch));
+ end Sine;
+
+ task type Integrator is
+ entry Input (Value : Func);
+ entry Output (Value : out Float);
+ entry Shut_Down;
+ end Integrator;
+
+ task body Integrator is
+ K : Func := Zero'Access;
+ S : Float := 0.0;
+ F0 : Float := 0.0;
+ F1 : Float;
+ T0 : Time := Clock;
+ T1 : Time;
+ begin
+ loop
+ select
+ accept Input (Value : Func) do
+ K := Value;
+ end Input;
+ or accept Output (Value : out Float) do
+ Value := S;
+ end Output;
+ or accept Shut_Down;
+ exit;
+ else
+ T1 := Clock;
+ F1 := K (T1);
+ S := S + 0.5 * (F1 + F0) * Float (T1 - T0);
+ T0 := T1;
+ F0 := F1;
+ end select;
+ end loop;
+ end Integrator;
+
+ I : Integrator;
+ S : Float;
+begin
+ I.Input (Sine'Access);
+ delay 2.0;
+ I.Input (Zero'Access);
+ delay 0.5;
+ I.Output (S);
+ Put_Line ("Integrated" & Float'Image (S) & "s");
+ I.Shut_Down;
+end Test_Integrator;
diff --git a/Task/Active-object/C/active-object.c b/Task/Active-object/C/active-object.c
new file mode 100644
index 0000000000..8954540096
--- /dev/null
+++ b/Task/Active-object/C/active-object.c
@@ -0,0 +1,70 @@
+#include
+#include
+#include
+#include
+#include
+#include
+
+/* no need to lock the object: at worst the readout would be 1 tick off,
+ which is no worse than integrator's inate inaccuracy */
+typedef struct {
+ double (*func)(double);
+ struct timeval start;
+ double v, last_v, last_t;
+ pthread_t id;
+} integ_t, *integ;
+
+void update(integ x)
+{
+ struct timeval tv;
+ double t, v, (*f)(double);
+
+ f = x->func;
+ gettimeofday(&tv, 0);
+ t = ((tv.tv_sec - x->start.tv_sec) * 1000000
+ + tv.tv_usec - x->start.tv_usec) * 1e-6;
+ v = f ? f(t) : 0;
+ x->v += (x->last_v + v) * (t - x->last_t) / 2;
+ x->last_t = t;
+}
+
+void* tick(void *a)
+{
+ integ x = a;
+ while (1) {
+ usleep(100000); /* update every .1 sec */
+ update(x);
+ }
+}
+
+void set_input(integ x, double (*func)(double))
+{
+ update(x);
+ x->func = func;
+ x->last_t = 0;
+ x->last_v = func ? func(0) : 0;
+}
+
+integ new_integ(double (*func)(double))
+{
+ integ x = malloc(sizeof(integ_t));
+ x->v = x->last_v = 0;
+ x->func = 0;
+ gettimeofday(&x->start, 0);
+ set_input(x, func);
+ pthread_create(&x->id, 0, tick, x);
+ return x;
+}
+
+double sine(double t) { return sin(4 * atan2(1, 1) * t); }
+
+int main()
+{
+ integ x = new_integ(sine);
+ sleep(2);
+ set_input(x, 0);
+ usleep(500000);
+ printf("%g\n", x->v);
+
+ return 0;
+}
diff --git a/Task/Active-object/Clojure/active-object.clj b/Task/Active-object/Clojure/active-object.clj
new file mode 100644
index 0000000000..acbd88bc54
--- /dev/null
+++ b/Task/Active-object/Clojure/active-object.clj
@@ -0,0 +1,36 @@
+(ns active-object
+ (:import (java.util Timer TimerTask)))
+
+(defn input [integrator k]
+ (send integrator assoc :k k))
+
+(defn output [integrator]
+ (:s @integrator))
+
+(defn tick [integrator t1]
+ (send integrator
+ (fn [{:keys [k s t0] :as m}]
+ (assoc m :s (+ s (/ (* (+ (k t1) (k t0)) (- t1 t0)) 2.0)) :t0 t1))))
+
+(defn start-timer [integrator interval]
+ (let [timer (Timer. true)
+ start (System/currentTimeMillis)]
+ (.scheduleAtFixedRate timer
+ (proxy [TimerTask] []
+ (run [] (tick integrator (double (/ (- (System/currentTimeMillis) start) 1000)))))
+ (long 0)
+ (long interval))
+ #(.cancel timer)))
+
+(defn test-integrator []
+ (let [integrator (agent {:k (constantly 0.0) :s 0.0 :t0 0.0})
+ stop-timer (start-timer integrator 10)]
+ (input integrator #(Math/sin (* 2.0 Math/PI 0.5 %)))
+ (Thread/sleep 2000)
+ (input integrator (constantly 0.0))
+ (Thread/sleep 500)
+ (println (output integrator))
+ (stop-timer)))
+
+user> (test-integrator)
+1.414065859052494E-5
diff --git a/Task/Active-object/Go/active-object.go b/Task/Active-object/Go/active-object.go
new file mode 100644
index 0000000000..3673973aa6
--- /dev/null
+++ b/Task/Active-object/Go/active-object.go
@@ -0,0 +1,80 @@
+package main
+
+import (
+ "fmt"
+ "math"
+ "time"
+)
+
+// type for input function, k.
+// input is duration since an arbitrary start time t0.
+type tFunc func(time.Duration) float64
+
+// active integrator object. state variables are not here, but in
+// function aif, started as a goroutine in the constructor.
+type aio struct {
+ iCh chan tFunc // channel for setting input function
+ oCh chan chan float64 // channel for requesting output
+}
+
+// constructor
+func newAio() *aio {
+ var a aio
+ a.iCh = make(chan tFunc)
+ a.oCh = make(chan chan float64)
+ go aif(&a)
+ return &a
+}
+
+// input method required by task description. in practice, this method is
+// unnecessary; you would just put that single channel send statement in
+// your code wherever you wanted to set the input function.
+func (a aio) input(f tFunc) {
+ a.iCh <- f
+}
+
+// output method required by task description. in practice, this method too
+// would not likely be best. instead any client interested in the value would
+// likely make a return channel sCh once, and then reuse it as needed.
+func (a aio) output() float64 {
+ sCh := make(chan float64)
+ a.oCh <- sCh
+ return <-sCh
+}
+
+// integration function that returns constant 0
+func zeroFunc(time.Duration) float64 { return 0 }
+
+// goroutine serializes access to integrated function k and state variable s
+func aif(a *aio) {
+ var k tFunc = zeroFunc // integration function
+ s := 0. // "object state" initialized to 0
+ t0 := time.Now() // initial time
+ k0 := k(0) // initial sample value
+ t1 := t0 // t1, k1 used for trapezoid formula
+ k1 := k0
+
+ tk := time.Tick(10 * time.Millisecond) // 10 ms -> 100 Hz
+ for {
+ select {
+ case t2 := <-tk: // timer tick event
+ k2 := k(t2.Sub(t0)) // new sample value
+ s += (k1 + k2) * .5 * t2.Sub(t1).Seconds() // trapezoid formula
+ t1, k1 = t2, k2 // save time and value
+ case k = <-a.iCh: // input method event: function change
+ case sCh := <-a.oCh: // output method event: sample object state
+ sCh <- s
+ }
+ }
+}
+
+func main() {
+ a := newAio() // create object
+ a.input(func(t time.Duration) float64 { // 1. set input to sin function
+ return math.Sin(t.Seconds() * math.Pi)
+ })
+ time.Sleep(2 * time.Second) // 2. sleep 2 sec
+ a.input(zeroFunc) // 3. set input to zero function
+ time.Sleep(time.Second / 2) // 4. sleep .5 sec
+ fmt.Println(a.output()) // output should be near zero
+}
diff --git a/Task/Active-object/Haskell/active-object.hs b/Task/Active-object/Haskell/active-object.hs
new file mode 100644
index 0000000000..88cea31612
--- /dev/null
+++ b/Task/Active-object/Haskell/active-object.hs
@@ -0,0 +1,77 @@
+module Integrator (
+ newIntegrator, input, output, stop,
+ Time, timeInterval
+) where
+import Control.Concurrent (forkIO, threadDelay)
+import Control.Concurrent.MVar (MVar, newMVar, modifyMVar_, modifyMVar, readMVar)
+import Control.Exception (evaluate)
+import Data.Time (UTCTime)
+import Data.Time.Clock (getCurrentTime, diffUTCTime)
+
+-- RC task
+main = do let f = 0.5 {- Hz -}
+ t0 <- getCurrentTime
+ i <- newIntegrator
+ input i (\t -> sin(2*pi * f * timeInterval t0 t)) -- task step 1
+ threadDelay 2000000 {- Β΅s -} -- task step 2
+ input i (const 0) -- task step 3
+ threadDelay 500000 {- Β΅s -} -- task step 4
+ result <- output i
+ stop i
+ print result
+
+---- Implementation ------------------------------------------------------
+
+-- Utilities for working with the time type
+type Time = UTCTime
+type Func a = Time -> a
+timeInterval t0 t1 = realToFrac $ diffUTCTime t1 t0
+
+-- Type signatures of the module's interface
+newIntegrator :: Fractional a => IO (Integrator a) -- Create an integrator
+input :: Integrator a -> Func a -> IO () -- Set the input function
+output :: Integrator a -> IO a -- Get the current value
+stop :: Integrator a -> IO () -- Stop integration, don't waste CPU
+
+-- Data structures
+data Integrator a = Integrator (MVar (IntState a)) -- MVar is a thread-safe mutable cell
+ deriving Eq
+data IntState a = IntState { func :: Func a, -- The current function
+ run :: Bool, -- Whether to keep going
+ value :: a, -- The current accumulated value
+ time :: Time } -- The time of the previous update
+
+newIntegrator = do
+ now <- getCurrentTime
+ state <- newMVar $ IntState { func = const 0,
+ run = True,
+ value = 0,
+ time = now }
+ thread <- forkIO (intThread state) -- The state variable is shared between the thread
+ return (Integrator state) -- and the client interface object.
+
+input (Integrator stv) f = modifyMVar_ stv (\st -> return st { func = f })
+output (Integrator stv) = fmap value $ readMVar stv
+stop (Integrator stv) = modifyMVar_ stv (\st -> return st { run = False })
+ -- modifyMVar_ takes an MVar and replaces its contents according to the provided function.
+ -- a { b = c } is record-update syntax: "the record a, except with field b changed to c"
+
+-- Integration thread
+intThread :: Fractional a => MVar (IntState a) -> IO ()
+intThread stv = whileM $ modifyMVar stv updateAndCheckRun
+ -- modifyMVar is like modifyMVar_ but the function returns a tuple of the new value
+ -- and an arbitrary extra value, which in this case ends up telling whileM whether
+ -- to keep looping.
+ where updateAndCheckRun st = do
+ now <- getCurrentTime
+ let value' = integrate (func st) (value st) (time st) now
+ evaluate value' -- avoid undesired laziness
+ return (st { value = value', time = now }, -- updated state
+ run st) -- whether to continue
+
+integrate :: Fractional a => Func a -> a -> Time -> Time -> a
+integrate f value t0 t1 = value + (f t0 + f t1)/2 * dt
+ where dt = timeInterval t0 t1
+
+-- Execute 'action' until it returns false.
+whileM action = do b <- action; if b then whileM action else return ()
diff --git a/Task/Active-object/JavaScript/active-object-1.js b/Task/Active-object/JavaScript/active-object-1.js
new file mode 100644
index 0000000000..a29a35c28d
--- /dev/null
+++ b/Task/Active-object/JavaScript/active-object-1.js
@@ -0,0 +1,26 @@
+function Integrator(sampleIntervalMS) {
+ var inputF = function () { return 0.0 };
+ var sum = 0.0;
+
+ var t1 = new Date().getTime();
+ var input1 = inputF(t1 / 1000);
+
+ function update() {
+ var t2 = new Date().getTime();
+ var input2 = inputF(t2 / 1000);
+ var dt = (t2 - t1) / 1000;
+
+ sum += (input1 + input2) * dt / 2;
+
+ t1 = t2;
+ input1 = input2;
+ }
+
+ var updater = setInterval(update, sampleIntervalMS);
+
+ return ({
+ input: function (newF) { inputF = newF },
+ output: function () { return sum },
+ shutdown: function () { clearInterval(updater) },
+ });
+}
diff --git a/Task/Active-object/JavaScript/active-object-2.js b/Task/Active-object/JavaScript/active-object-2.js
new file mode 100644
index 0000000000..a0cade9633
--- /dev/null
+++ b/Task/Active-object/JavaScript/active-object-2.js
@@ -0,0 +1,20 @@
+
Test running...-
+
+
diff --git a/Task/Active-object/Perl/active-object.pl b/Task/Active-object/Perl/active-object.pl
new file mode 100644
index 0000000000..6b03d0d505
--- /dev/null
+++ b/Task/Active-object/Perl/active-object.pl
@@ -0,0 +1,69 @@
+#!/usr/bin/perl
+
+use strict;
+use 5.10.0;
+
+package Integrator;
+use threads;
+use threads::shared;
+
+sub new {
+ my $cls = shift;
+ my $obj = bless { t => 0,
+ sum => 0,
+ ref $cls ? %$cls : (),
+ stop => 0,
+ tid => 0,
+ func => shift,
+ }, ref $cls || $cls;
+
+ share($obj->{sum});
+ share($obj->{stop});
+
+ $obj->{tid} = async {
+ my $upd = 0.1; # update every 0.1 second
+ while (!$obj->{stop}) {
+ {
+ my $f = $obj->{func};
+ my $t = $obj->{t};
+
+ $obj->{sum} += ($f->($t) + $f->($t + $upd))* $upd/ 2;
+ $obj->{t} += $upd;
+ }
+ select(undef, undef, undef, $upd);
+ }
+ # say "stopping $obj";
+ };
+ $obj
+}
+
+sub output { shift->{sum} }
+
+sub delete {
+ my $obj = shift;
+ $obj->{stop} = 1;
+ $obj->{tid}->join;
+}
+
+sub setinput {
+ # This is surprisingly difficult because of the perl sharing model.
+ # Func refs can't be shared, thus can't be replaced by another thread.
+ # Have to create a whole new object... there must be a better way.
+ my $obj = shift;
+ $obj->delete;
+ $obj->new(shift);
+}
+
+package main;
+
+my $x = Integrator->new(sub { sin(atan2(1, 1) * 8 * .5 * shift) });
+
+sleep(2);
+say "sin after 2 seconds: ", $x->output;
+
+$x = $x->setinput(sub {0});
+
+select(undef, undef, undef, .5);
+say "0 after .5 seconds: ", $x->output;
+
+$x->delete;
diff --git a/Task/Active-object/PicoLisp/active-object.l b/Task/Active-object/PicoLisp/active-object.l
new file mode 100644
index 0000000000..01cbb262c1
--- /dev/null
+++ b/Task/Active-object/PicoLisp/active-object.l
@@ -0,0 +1,44 @@
+(load "@lib/math.l")
+
+(class +Active)
+# inp val sum usec
+
+(dm T ()
+ (unless (assoc -100 *Run) # Install timer task
+ (task -100 100 # Update objects every 0.1 sec
+ (mapc 'update> *Actives) ) )
+ (=: inp '((U) 0)) # Set zero input function
+ (=: val 0) # Initialize last value
+ (=: sum 0) # Initialize sum
+ (=: usec (usec)) # and time
+ (push '*Actives This) ) # Install in notification list
+
+(dm input> (Fun)
+ (=: inp Fun) )
+
+(dm update> ()
+ (let (U (usec) V ((: inp) U)) # Get current time, calculate value
+ (inc (:: sum)
+ (*/
+ (+ V (: val)) # (K(t[1]) + K(t[0])) *
+ (- U (: usec)) # (t[1] - t[0]) /
+ 2.0 ) ) # 2.0
+ (=: val V)
+ (=: usec U) ) )
+
+(dm output> ()
+ (format (: sum) *Scl) ) # Get result
+
+(dm stop> ()
+ (unless (del This '*Actives) # Removing the last active object?
+ (task -100) ) ) # Yes: Uninstall timer task
+
+(de integrate () # Test it
+ (let Obj (new '(+Active)) # Create an active object
+ (input> Obj # Set input function
+ '((U) (sin (*/ pi U 1.0))) ) # to sin(Ο * t)
+ (wait 2000) # Wait 2 sec
+ (input> Obj '((U) 0)) # Reset input function
+ (wait 500) # Wait 0.5 sec
+ (prinl "Output: " (output> Obj)) # Print return value
+ (stop> Obj) ) ) # Stop active object
diff --git a/Task/Active-object/Python/active-object.py b/Task/Active-object/Python/active-object.py
new file mode 100644
index 0000000000..ee2751e0a6
--- /dev/null
+++ b/Task/Active-object/Python/active-object.py
@@ -0,0 +1,38 @@
+from time import time, sleep
+from threading import Thread
+
+class Integrator(Thread):
+ 'continuously integrate a function `K`, at each `interval` seconds'
+ def __init__(self, K=lambda t:0, interval=1e-4):
+ Thread.__init__(self)
+ self.interval = interval
+ self.K = K
+ self.S = 0.0
+ self.__run = True
+ self.start()
+
+ def run(self):
+ "entry point for the thread"
+ interval = self.interval
+ start = time()
+ t0, k0 = 0, self.K(0)
+ while self.__run:
+ sleep(interval)
+ t1 = time() - start
+ k1 = self.K(t1)
+ self.S += (k1 + k0)*(t1 - t0)/2.0
+ t0, k0 = t1, k1
+
+ def join(self):
+ self.__run = False
+ Thread.join(self)
+
+if __name__ == "__main__":
+ from math import sin, pi
+
+ ai = Integrator(lambda t: sin(pi*t))
+ sleep(2)
+ print ai.S
+ ai.K = lambda t: 0
+ sleep(0.5)
+ print ai.S
diff --git a/Task/Active-object/Racket/active-object.rkt b/Task/Active-object/Racket/active-object.rkt
new file mode 100644
index 0000000000..00450fa1de
--- /dev/null
+++ b/Task/Active-object/Racket/active-object.rkt
@@ -0,0 +1,30 @@
+#lang racket
+
+(require (only-in racket/gui sleep/yield timer%))
+
+(define active%
+ (class object%
+ (super-new)
+ (init-field k) ; input function
+ (field [s 0]) ; state
+ (define t_0 0)
+
+ (define/public (input new-k) (set! k new-k))
+ (define/public (output) s)
+
+ (define (callback)
+ (define t_1 (/ (- (current-inexact-milliseconds) start) 1000))
+ (set! s (+ s (* (+ (k t_0) (k t_1))
+ (/ (- t_1 t_0) 2))))
+ (set! t_0 t_1))
+
+ (define start (current-inexact-milliseconds))
+ (new timer%
+ [interval 1000]
+ [notify-callback callback])))
+
+(define active (new active% [k (Ξ» (t) (sin (* 2 pi 0.5 t)))]))
+(sleep/yield 2)
+(send active input (Ξ» _ 0))
+(sleep/yield 0.5)
+(displayln (send active output))
diff --git a/Task/Active-object/Scala/active-object.scala b/Task/Active-object/Scala/active-object.scala
new file mode 100644
index 0000000000..eaa1874f28
--- /dev/null
+++ b/Task/Active-object/Scala/active-object.scala
@@ -0,0 +1,48 @@
+object ActiveObject {
+
+ class Integrator {
+
+ import java.util._
+ import scala.actors.Actor._
+
+ case class Pulse(t: Double)
+ case class Input(k: Double => Double)
+ case object Output
+ case object Bye
+
+ val timer = new Timer(true)
+ var k: Double => Double = (_ => 0.0)
+ var s: Double = 0.0
+ var t0: Double = 0.0
+
+ val handler = actor {
+ loop {
+ react {
+ case Pulse(t1) => s += (k(t1) + k(t0)) * (t1 - t0) / 2.0; t0 = t1
+ case Input(k) => this.k = k
+ case Output => reply(s)
+ case Bye => timer.cancel; exit
+ }
+ }
+ }
+
+ timer.scheduleAtFixedRate(new TimerTask {
+ val start = System.currentTimeMillis
+ def run { handler ! Pulse((System.currentTimeMillis - start) / 1000.0) }
+ }, 0, 10) // send Pulse every 10 ms
+
+ def input(k: Double => Double) = handler ! Input(k)
+ def output = handler !? Output
+ def bye = handler ! Bye
+ }
+
+ def main(args: Array[String]) {
+ val integrator = new Integrator
+ integrator.input(t => Math.sin(2.0 * Math.Pi * 0.5 * t))
+ Thread.sleep(2000)
+ integrator.input(_ => 0.0)
+ Thread.sleep(500)
+ println(integrator.output)
+ integrator.bye
+ }
+}
diff --git a/Task/Active-object/Tcl/active-object.tcl b/Task/Active-object/Tcl/active-object.tcl
new file mode 100644
index 0000000000..f814fb3c2e
--- /dev/null
+++ b/Task/Active-object/Tcl/active-object.tcl
@@ -0,0 +1,50 @@
+package require Tcl 8.6
+oo::class create integrator {
+ variable e sum delay tBase t0 k0 aid
+ constructor {{interval 1}} {
+ set delay $interval
+ set tBase [clock microseconds]
+ set t0 0
+ set e { 0.0 }
+ set k0 0.0
+ set sum 0.0
+ set aid [after $delay [namespace code {my Step}]]
+ }
+ destructor {
+ after cancel $aid
+ }
+ method input expression {
+ set e $expression
+ }
+ method output {} {
+ return $sum
+ }
+ method Eval t {
+ expr $e
+ }
+ method Step {} {
+ set aid [after $delay [namespace code {my Step}]]
+ set t [expr {([clock microseconds] - $tBase) / 1e6}]
+ set k1 [my Eval $t]
+ set sum [expr {$sum + ($k1 + $k0) * ($t - $t0) / 2.}]
+ set t0 $t
+ set k0 $k1
+ }
+}
+
+set pi 3.14159265
+proc pause {time} {
+ yield [after [expr {int($time * 1000)}] [info coroutine]]
+}
+proc task {script} {
+ coroutine task_ apply [list {} "$script;set ::done ok"]
+ vwait done
+}
+task {
+ integrator create i
+ i input {sin(2*$::pi * 0.5 * $t)}
+ pause 2
+ i input { 0.0 }
+ pause 0.5
+ puts [format %.15f [i output]]
+}
diff --git a/Task/Add-a-variable-to-a-class-instance-at-runtime/0DESCRIPTION b/Task/Add-a-variable-to-a-class-instance-at-runtime/0DESCRIPTION
new file mode 100644
index 0000000000..9bf8e67c64
--- /dev/null
+++ b/Task/Add-a-variable-to-a-class-instance-at-runtime/0DESCRIPTION
@@ -0,0 +1,3 @@
+Demonstrate how to dynamically add variables to an object (a class instance) at runtime.
+
+This is useful when the methods/variables of an instance are based on a data file that isn't available until runtime. Hal Fulton gives an example of creating an OO CSV parser at [http://www.devsource.com/article2/0,1759,1928562,00.asp An Exercise in Metaprogramming with Ruby]. This is referred to as "monkeypatching" by Pythonistas and some others.
diff --git a/Task/Add-a-variable-to-a-class-instance-at-runtime/1META.yaml b/Task/Add-a-variable-to-a-class-instance-at-runtime/1META.yaml
new file mode 100644
index 0000000000..43afe9a8b6
--- /dev/null
+++ b/Task/Add-a-variable-to-a-class-instance-at-runtime/1META.yaml
@@ -0,0 +1,2 @@
+---
+note: Object oriented
diff --git a/Task/Add-a-variable-to-a-class-instance-at-runtime/ActionScript/add-a-variable-to-a-class-instance-at-runtime-1.as b/Task/Add-a-variable-to-a-class-instance-at-runtime/ActionScript/add-a-variable-to-a-class-instance-at-runtime-1.as
new file mode 100644
index 0000000000..4c279da8ad
--- /dev/null
+++ b/Task/Add-a-variable-to-a-class-instance-at-runtime/ActionScript/add-a-variable-to-a-class-instance-at-runtime-1.as
@@ -0,0 +1,2 @@
+var object:Object = new Object();
+object.foo = "bar";
diff --git a/Task/Add-a-variable-to-a-class-instance-at-runtime/ActionScript/add-a-variable-to-a-class-instance-at-runtime-2.as b/Task/Add-a-variable-to-a-class-instance-at-runtime/ActionScript/add-a-variable-to-a-class-instance-at-runtime-2.as
new file mode 100644
index 0000000000..90a6423df7
--- /dev/null
+++ b/Task/Add-a-variable-to-a-class-instance-at-runtime/ActionScript/add-a-variable-to-a-class-instance-at-runtime-2.as
@@ -0,0 +1,7 @@
+package
+{
+ public dynamic class Foo
+ {
+ // ...
+ }
+}
diff --git a/Task/Add-a-variable-to-a-class-instance-at-runtime/ActionScript/add-a-variable-to-a-class-instance-at-runtime-3.as b/Task/Add-a-variable-to-a-class-instance-at-runtime/ActionScript/add-a-variable-to-a-class-instance-at-runtime-3.as
new file mode 100644
index 0000000000..2a5ac21065
--- /dev/null
+++ b/Task/Add-a-variable-to-a-class-instance-at-runtime/ActionScript/add-a-variable-to-a-class-instance-at-runtime-3.as
@@ -0,0 +1,2 @@
+var foo:Foo = new Foo();
+foo.bar = "zap";
diff --git a/Task/Add-a-variable-to-a-class-instance-at-runtime/Ada/add-a-variable-to-a-class-instance-at-runtime.ada b/Task/Add-a-variable-to-a-class-instance-at-runtime/Ada/add-a-variable-to-a-class-instance-at-runtime.ada
new file mode 100644
index 0000000000..599852f288
--- /dev/null
+++ b/Task/Add-a-variable-to-a-class-instance-at-runtime/Ada/add-a-variable-to-a-class-instance-at-runtime.ada
@@ -0,0 +1,40 @@
+with Ada.Text_IO; use Ada.Text_IO;
+
+procedure Dynamic is
+ package Abstract_Class is
+ type Class is limited interface;
+ function Boo (X : Class) return String is abstract;
+ end Abstract_Class;
+ use Abstract_Class;
+
+ package Base_Class is
+ type Base is new Class with null record;
+ overriding function Boo (X : Base) return String;
+ end Base_Class;
+
+ package body Base_Class is
+ function Boo (X : Base) return String is
+ begin
+ return "I am Class";
+ end Boo;
+ end Base_Class;
+ use Base_Class;
+
+ E : aliased Base; -- An instance of Base
+
+begin
+ -- Gone run-time
+ declare
+ type Monkey_Patch (Root : access Base) is new Class with record
+ Foo : Integer := 1;
+ end record;
+ overriding function Boo (X : Monkey_Patch) return String;
+ function Boo (X : Monkey_Patch) return String is
+ begin -- Delegation to the base
+ return X.Root.Boo;
+ end Boo;
+ EE : Monkey_Patch (E'Access); -- Extend E
+ begin
+ Put_Line (EE.Boo & " with" & Integer'Image (EE.Foo));
+ end;
+end Dynamic;
diff --git a/Task/Add-a-variable-to-a-class-instance-at-runtime/AutoHotkey/add-a-variable-to-a-class-instance-at-runtime.ahk b/Task/Add-a-variable-to-a-class-instance-at-runtime/AutoHotkey/add-a-variable-to-a-class-instance-at-runtime.ahk
new file mode 100644
index 0000000000..9bf090e3f9
--- /dev/null
+++ b/Task/Add-a-variable-to-a-class-instance-at-runtime/AutoHotkey/add-a-variable-to-a-class-instance-at-runtime.ahk
@@ -0,0 +1,2 @@
+e := {}
+e.foo := 1
diff --git a/Task/Add-a-variable-to-a-class-instance-at-runtime/CoffeeScript/add-a-variable-to-a-class-instance-at-runtime.coffee b/Task/Add-a-variable-to-a-class-instance-at-runtime/CoffeeScript/add-a-variable-to-a-class-instance-at-runtime.coffee
new file mode 100644
index 0000000000..83ff4ce928
--- /dev/null
+++ b/Task/Add-a-variable-to-a-class-instance-at-runtime/CoffeeScript/add-a-variable-to-a-class-instance-at-runtime.coffee
@@ -0,0 +1,18 @@
+# CoffeeScript is dynamic, just like the Javascript it compiles to.
+# You can dynamically add attributes to objects.
+
+# First create an object very simply.
+e = {}
+e.foo = "bar"
+e.yo = -> "baz"
+console.log e.foo, e.yo()
+
+# CS also has class syntax to instantiate objects, the details of which
+# aren't shown here. The mechanism to add members is the same, though.
+class Empty
+ # empty class
+
+e = new Empty()
+e.foo = "bar"
+e.yo = -> "baz"
+console.log e.foo, e.yo()
diff --git a/Task/Add-a-variable-to-a-class-instance-at-runtime/JavaScript/add-a-variable-to-a-class-instance-at-runtime.js b/Task/Add-a-variable-to-a-class-instance-at-runtime/JavaScript/add-a-variable-to-a-class-instance-at-runtime.js
new file mode 100644
index 0000000000..f429476f97
--- /dev/null
+++ b/Task/Add-a-variable-to-a-class-instance-at-runtime/JavaScript/add-a-variable-to-a-class-instance-at-runtime.js
@@ -0,0 +1,3 @@
+e = {} // generic object
+e.foo = 1
+e["bar"] = 2 // name specified at runtime
diff --git a/Task/Add-a-variable-to-a-class-instance-at-runtime/Lua/add-a-variable-to-a-class-instance-at-runtime.lua b/Task/Add-a-variable-to-a-class-instance-at-runtime/Lua/add-a-variable-to-a-class-instance-at-runtime.lua
new file mode 100644
index 0000000000..cc2e3d1377
--- /dev/null
+++ b/Task/Add-a-variable-to-a-class-instance-at-runtime/Lua/add-a-variable-to-a-class-instance-at-runtime.lua
@@ -0,0 +1,2 @@
+empty = {}
+empty.foo = 1
diff --git a/Task/Add-a-variable-to-a-class-instance-at-runtime/PHP/add-a-variable-to-a-class-instance-at-runtime.php b/Task/Add-a-variable-to-a-class-instance-at-runtime/PHP/add-a-variable-to-a-class-instance-at-runtime.php
new file mode 100644
index 0000000000..e43488e051
--- /dev/null
+++ b/Task/Add-a-variable-to-a-class-instance-at-runtime/PHP/add-a-variable-to-a-class-instance-at-runtime.php
@@ -0,0 +1,9 @@
+class E {};
+
+$e=new E();
+
+$e->foo=1;
+
+$e->{"foo"} = 1; // using a runtime name
+$x = "foo";
+$e->$x = 1; // using a runtime name in a variable
diff --git a/Task/Add-a-variable-to-a-class-instance-at-runtime/Perl/add-a-variable-to-a-class-instance-at-runtime.pl b/Task/Add-a-variable-to-a-class-instance-at-runtime/Perl/add-a-variable-to-a-class-instance-at-runtime.pl
new file mode 100644
index 0000000000..52934bd910
--- /dev/null
+++ b/Task/Add-a-variable-to-a-class-instance-at-runtime/Perl/add-a-variable-to-a-class-instance-at-runtime.pl
@@ -0,0 +1,12 @@
+package Empty;
+
+# Constructor. Object is hash.
+sub new { return bless {}, shift; }
+
+package main;
+
+# Object.
+my $o = Empty->new;
+
+# Set runtime variable (key => value).
+$o->{'foo'} = 1;
diff --git a/Task/Add-a-variable-to-a-class-instance-at-runtime/PicoLisp/add-a-variable-to-a-class-instance-at-runtime.l b/Task/Add-a-variable-to-a-class-instance-at-runtime/PicoLisp/add-a-variable-to-a-class-instance-at-runtime.l
new file mode 100644
index 0000000000..d8673185f9
--- /dev/null
+++ b/Task/Add-a-variable-to-a-class-instance-at-runtime/PicoLisp/add-a-variable-to-a-class-instance-at-runtime.l
@@ -0,0 +1,8 @@
+: (setq MyObject (new '(+MyClass))) # Create some object
+-> $385605941
+: (put MyObject 'newvar '(some value)) # Set variable
+-> (some value)
+: (show MyObject) # Show the object
+$385605941 (+MyClass)
+ newvar (some value)
+-> $385605941
diff --git a/Task/Add-a-variable-to-a-class-instance-at-runtime/Python/add-a-variable-to-a-class-instance-at-runtime-1.py b/Task/Add-a-variable-to-a-class-instance-at-runtime/Python/add-a-variable-to-a-class-instance-at-runtime-1.py
new file mode 100644
index 0000000000..6ab867d8ee
--- /dev/null
+++ b/Task/Add-a-variable-to-a-class-instance-at-runtime/Python/add-a-variable-to-a-class-instance-at-runtime-1.py
@@ -0,0 +1,3 @@
+class empty(object):
+ pass
+e = empty()
diff --git a/Task/Add-a-variable-to-a-class-instance-at-runtime/Python/add-a-variable-to-a-class-instance-at-runtime-2.py b/Task/Add-a-variable-to-a-class-instance-at-runtime/Python/add-a-variable-to-a-class-instance-at-runtime-2.py
new file mode 100644
index 0000000000..10c6825167
--- /dev/null
+++ b/Task/Add-a-variable-to-a-class-instance-at-runtime/Python/add-a-variable-to-a-class-instance-at-runtime-2.py
@@ -0,0 +1 @@
+ e.foo = 1
diff --git a/Task/Add-a-variable-to-a-class-instance-at-runtime/Python/add-a-variable-to-a-class-instance-at-runtime-3.py b/Task/Add-a-variable-to-a-class-instance-at-runtime/Python/add-a-variable-to-a-class-instance-at-runtime-3.py
new file mode 100644
index 0000000000..6871c2afd3
--- /dev/null
+++ b/Task/Add-a-variable-to-a-class-instance-at-runtime/Python/add-a-variable-to-a-class-instance-at-runtime-3.py
@@ -0,0 +1 @@
+ setattr(e, name, value)
diff --git a/Task/Add-a-variable-to-a-class-instance-at-runtime/Python/add-a-variable-to-a-class-instance-at-runtime-4.py b/Task/Add-a-variable-to-a-class-instance-at-runtime/Python/add-a-variable-to-a-class-instance-at-runtime-4.py
new file mode 100644
index 0000000000..5e219703e5
--- /dev/null
+++ b/Task/Add-a-variable-to-a-class-instance-at-runtime/Python/add-a-variable-to-a-class-instance-at-runtime-4.py
@@ -0,0 +1,13 @@
+class empty(object):
+ def __init__(this):
+ this.foo = "whatever"
+
+def patch_empty(obj):
+ def fn(self=obj):
+ print self.foo
+ obj.print_output = fn
+
+e = empty()
+patch_empty(e)
+e.print_output()
+# >>> whatever
diff --git a/Task/Add-a-variable-to-a-class-instance-at-runtime/Ruby/add-a-variable-to-a-class-instance-at-runtime.rb b/Task/Add-a-variable-to-a-class-instance-at-runtime/Ruby/add-a-variable-to-a-class-instance-at-runtime.rb
new file mode 100644
index 0000000000..e2f9dd38f7
--- /dev/null
+++ b/Task/Add-a-variable-to-a-class-instance-at-runtime/Ruby/add-a-variable-to-a-class-instance-at-runtime.rb
@@ -0,0 +1,12 @@
+class Empty
+end
+
+e = Empty.new
+class << e
+ attr_accessor :foo
+end
+e.foo = 1
+puts e.foo # output: "1"
+
+f = Empty.new
+f.foo = 1 # raises NoMethodError
diff --git a/Task/Add-a-variable-to-a-class-instance-at-runtime/Scala/add-a-variable-to-a-class-instance-at-runtime-1.scala b/Task/Add-a-variable-to-a-class-instance-at-runtime/Scala/add-a-variable-to-a-class-instance-at-runtime-1.scala
new file mode 100644
index 0000000000..2d07a31c3a
--- /dev/null
+++ b/Task/Add-a-variable-to-a-class-instance-at-runtime/Scala/add-a-variable-to-a-class-instance-at-runtime-1.scala
@@ -0,0 +1,12 @@
+import language.dynamics
+import scala.collection.mutable.HashMap
+
+class A extends Dynamic {
+ private val map = new HashMap[String, Any]
+ def selectDynamic(name: String): Any = {
+ return map(name)
+ }
+ def updateDynamic(name:String)(value: Any) = {
+ map(name) = value
+ }
+}
diff --git a/Task/Add-a-variable-to-a-class-instance-at-runtime/Scala/add-a-variable-to-a-class-instance-at-runtime-2.scala b/Task/Add-a-variable-to-a-class-instance-at-runtime/Scala/add-a-variable-to-a-class-instance-at-runtime-2.scala
new file mode 100644
index 0000000000..53a6361d01
--- /dev/null
+++ b/Task/Add-a-variable-to-a-class-instance-at-runtime/Scala/add-a-variable-to-a-class-instance-at-runtime-2.scala
@@ -0,0 +1,8 @@
+scala> val a = new A
+a: A = A@7b20f29d
+
+scala> a.foo = 42
+a.foo: Any = 42
+
+scala> a.foo
+res10: Any = 42
diff --git a/Task/Add-a-variable-to-a-class-instance-at-runtime/Smalltalk/add-a-variable-to-a-class-instance-at-runtime-1.st b/Task/Add-a-variable-to-a-class-instance-at-runtime/Smalltalk/add-a-variable-to-a-class-instance-at-runtime-1.st
new file mode 100644
index 0000000000..fb58a9dc93
--- /dev/null
+++ b/Task/Add-a-variable-to-a-class-instance-at-runtime/Smalltalk/add-a-variable-to-a-class-instance-at-runtime-1.st
@@ -0,0 +1,16 @@
+|addSlot p|
+
+addSlot :=
+ [:obj :slotName |
+ |anonCls newObj|
+ anonCls := obj class
+ subclass:(obj class name,'+') asSymbol
+ instanceVariableNames:slotName
+ classVariableNames:''
+ poolDictionaries:'' category:nil
+ inEnvironment:nil.
+ anonCls compile:('%1 ^ %1' bindWith:slotName).
+ anonCls compile:('%1:v %1 := v' bindWith:slotName).
+ newObj := anonCls cloneFrom:obj.
+ obj become:newObj.
+ ].
diff --git a/Task/Add-a-variable-to-a-class-instance-at-runtime/Smalltalk/add-a-variable-to-a-class-instance-at-runtime-2.st b/Task/Add-a-variable-to-a-class-instance-at-runtime/Smalltalk/add-a-variable-to-a-class-instance-at-runtime-2.st
new file mode 100644
index 0000000000..c4ae729fee
--- /dev/null
+++ b/Task/Add-a-variable-to-a-class-instance-at-runtime/Smalltalk/add-a-variable-to-a-class-instance-at-runtime-2.st
@@ -0,0 +1,6 @@
+p := Point x:10 y:20.
+addSlot value:p value:'z'.
+p z:30.
+p z.
+p z:40.
+p inspect
diff --git a/Task/Add-a-variable-to-a-class-instance-at-runtime/Smalltalk/add-a-variable-to-a-class-instance-at-runtime-3.st b/Task/Add-a-variable-to-a-class-instance-at-runtime/Smalltalk/add-a-variable-to-a-class-instance-at-runtime-3.st
new file mode 100644
index 0000000000..d59befdfca
--- /dev/null
+++ b/Task/Add-a-variable-to-a-class-instance-at-runtime/Smalltalk/add-a-variable-to-a-class-instance-at-runtime-3.st
@@ -0,0 +1,15 @@
+!Object methodsFor:'adding slots'!
+
+addSlot: slotName
+ |anonCls newObj|
+
+ anonCls := self class
+ subclass:(self class name,'+') asSymbol
+ instanceVariableNames:slotName
+ classVariableNames:''
+ poolDictionaries:'' category:nil
+ inEnvironment:nil.
+ anonCls compile:('%1 ^ %1' bindWith:slotName).
+ anonCls compile:('%1:v %1 := v' bindWith:slotName).
+ newObj := anonCls cloneFrom:self.
+ self become:newObj.
diff --git a/Task/Add-a-variable-to-a-class-instance-at-runtime/Smalltalk/add-a-variable-to-a-class-instance-at-runtime-4.st b/Task/Add-a-variable-to-a-class-instance-at-runtime/Smalltalk/add-a-variable-to-a-class-instance-at-runtime-4.st
new file mode 100644
index 0000000000..84c4e007db
--- /dev/null
+++ b/Task/Add-a-variable-to-a-class-instance-at-runtime/Smalltalk/add-a-variable-to-a-class-instance-at-runtime-4.st
@@ -0,0 +1,6 @@
+p := Point x:10 y:20.
+p addSlot:'z'.
+p z:30.
+p z.
+p z:40.
+p inspect
diff --git a/Task/Add-a-variable-to-a-class-instance-at-runtime/Smalltalk/add-a-variable-to-a-class-instance-at-runtime-5.st b/Task/Add-a-variable-to-a-class-instance-at-runtime/Smalltalk/add-a-variable-to-a-class-instance-at-runtime-5.st
new file mode 100644
index 0000000000..8204a0d2ab
--- /dev/null
+++ b/Task/Add-a-variable-to-a-class-instance-at-runtime/Smalltalk/add-a-variable-to-a-class-instance-at-runtime-5.st
@@ -0,0 +1,58 @@
+Object subclass: #Monkey
+ instanceVariableNames: 'aVar'
+ classVariableNames: ''
+ poolDictionaries: ''
+ category: nil !
+
+!Monkey class methodsFor: 'new instance'!
+new
+ | o |
+ o := super new.
+ o init.
+ ^o
+!!
+
+!Monkey methodsFor: 'init instance'!
+init
+ aVar := 0
+!
+initWith: value
+ aVar := value
+!!
+
+!Monkey methodsFor: 'set/get the inst var(s)'!
+setVar: var
+ aVar := var
+!
+getVar
+ ^aVar
+!!
+
+
+"Create a new instance"
+Smalltalk at: #aMonkey put: (Monkey new) !
+
+"set the 'original' instance var to 12"
+aMonkey setVar: 12 .
+
+"let's see what's inside"
+aMonkey inspect .
+
+"add a new instance var"
+Monkey addInstVarName: 'x'.
+
+"let's see what's inside now"
+aMonkey inspect .
+
+"let us create a new method for x"
+!Monkey methodsFor: 'about x'!
+setX: val
+ x := val
+!
+x
+ ^x
+!!
+
+aMonkey setX: 10 .
+aMonkey inspect .
+(aMonkey x) printNl .
diff --git a/Task/Add-a-variable-to-a-class-instance-at-runtime/Tcl/add-a-variable-to-a-class-instance-at-runtime-1.tcl b/Task/Add-a-variable-to-a-class-instance-at-runtime/Tcl/add-a-variable-to-a-class-instance-at-runtime-1.tcl
new file mode 100644
index 0000000000..843efe50a8
--- /dev/null
+++ b/Task/Add-a-variable-to-a-class-instance-at-runtime/Tcl/add-a-variable-to-a-class-instance-at-runtime-1.tcl
@@ -0,0 +1,27 @@
+% package require TclOO
+% oo::class create summation {
+ constructor {} {
+ variable v 0
+ }
+ method add x {
+ variable v
+ incr v $x
+ }
+ method value {{var v}} {
+ variable $var
+ return [set $var]
+ }
+ destructor {
+ variable v
+ puts "Ended with value $v"
+ }
+}
+::summation
+% set s [summation new]
+% # Do the monkey patch!
+% set [info object namespace $s]::time now
+now
+% # Prove it's really part of the object...
+% $s value time
+now
+%
diff --git a/Task/Add-a-variable-to-a-class-instance-at-runtime/Tcl/add-a-variable-to-a-class-instance-at-runtime-2.tcl b/Task/Add-a-variable-to-a-class-instance-at-runtime/Tcl/add-a-variable-to-a-class-instance-at-runtime-2.tcl
new file mode 100644
index 0000000000..95c41b9630
--- /dev/null
+++ b/Task/Add-a-variable-to-a-class-instance-at-runtime/Tcl/add-a-variable-to-a-class-instance-at-runtime-2.tcl
@@ -0,0 +1,28 @@
+% oo::class create summation {
+ constructor {} {
+ variable v 0
+ }
+ method add x {
+ variable v
+ incr v $x
+ }
+ method value {{var v}} {
+ variable $var
+ return [set $var]
+ }
+ destructor {
+ variable v
+ puts "Ended with value $v"
+ }
+}
+::summation
+% set s [summation new]
+% set s2 [summation new]
+% oo::objdefine $s export varname
+% # Do the monkey patch...
+% set [$s varname time] "now"
+% $s value time
+now
+% # Show that it is only in one object...
+% $s2 value time
+can't read "time": no such variable
diff --git a/Task/Address-of-a-variable/0DESCRIPTION b/Task/Address-of-a-variable/0DESCRIPTION
new file mode 100644
index 0000000000..4007bb7aca
--- /dev/null
+++ b/Task/Address-of-a-variable/0DESCRIPTION
@@ -0,0 +1 @@
+{{basic data operation}}Demonstrate how to get the address of a variable and how to set the address of a variable.
diff --git a/Task/Address-of-a-variable/1META.yaml b/Task/Address-of-a-variable/1META.yaml
new file mode 100644
index 0000000000..a16ddc894f
--- /dev/null
+++ b/Task/Address-of-a-variable/1META.yaml
@@ -0,0 +1,2 @@
+---
+note: Basic Data Operations
diff --git a/Task/Address-of-a-variable/ALGOL-68/address-of-a-variable-1.alg b/Task/Address-of-a-variable/ALGOL-68/address-of-a-variable-1.alg
new file mode 100644
index 0000000000..85b91ae111
--- /dev/null
+++ b/Task/Address-of-a-variable/ALGOL-68/address-of-a-variable-1.alg
@@ -0,0 +1,4 @@
+[4]INT test := (222,444,666,888);
+REF INT reference := test[3];
+REF INT(reference) := reference + 111;
+print(("test value is now: ",test))
diff --git a/Task/Address-of-a-variable/ALGOL-68/address-of-a-variable-2.alg b/Task/Address-of-a-variable/ALGOL-68/address-of-a-variable-2.alg
new file mode 100644
index 0000000000..6d185623ed
--- /dev/null
+++ b/Task/Address-of-a-variable/ALGOL-68/address-of-a-variable-2.alg
@@ -0,0 +1 @@
+PROC establish = (REF FILE file, STRING idf, CHANNEL chan, INT p, l, c) INT: ~
diff --git a/Task/Address-of-a-variable/Ada/address-of-a-variable-1.ada b/Task/Address-of-a-variable/Ada/address-of-a-variable-1.ada
new file mode 100644
index 0000000000..b4b3d87235
--- /dev/null
+++ b/Task/Address-of-a-variable/Ada/address-of-a-variable-1.ada
@@ -0,0 +1,3 @@
+The_Address : System.Address;
+I : Integer;
+The_Address := I'Address;
diff --git a/Task/Address-of-a-variable/Ada/address-of-a-variable-2.ada b/Task/Address-of-a-variable/Ada/address-of-a-variable-2.ada
new file mode 100644
index 0000000000..665d4b3960
--- /dev/null
+++ b/Task/Address-of-a-variable/Ada/address-of-a-variable-2.ada
@@ -0,0 +1,2 @@
+I : Integer;
+for I'Address use 16#A100#;
diff --git a/Task/Address-of-a-variable/Ada/address-of-a-variable-3.ada b/Task/Address-of-a-variable/Ada/address-of-a-variable-3.ada
new file mode 100644
index 0000000000..f903d446b9
--- /dev/null
+++ b/Task/Address-of-a-variable/Ada/address-of-a-variable-3.ada
@@ -0,0 +1,3 @@
+I : Integer;
+J : Integer;
+for I'Address use J'Address;
diff --git a/Task/Address-of-a-variable/Argile/address-of-a-variable-1.argile b/Task/Address-of-a-variable/Argile/address-of-a-variable-1.argile
new file mode 100644
index 0000000000..1a44d6de19
--- /dev/null
+++ b/Task/Address-of-a-variable/Argile/address-of-a-variable-1.argile
@@ -0,0 +1,6 @@
+use std, array (: array.arg also defines pointer operators :)
+let var = 42
+let ptr = &var (: value of ptr is address of var :)
+print var (: prints 42 :)
+(*ptr)++ (: increments value pointed by ptr :)
+print var (: prints 43 :)
diff --git a/Task/Address-of-a-variable/Argile/address-of-a-variable-2.argile b/Task/Address-of-a-variable/Argile/address-of-a-variable-2.argile
new file mode 100644
index 0000000000..3fad6e8cca
--- /dev/null
+++ b/Task/Address-of-a-variable/Argile/address-of-a-variable-2.argile
@@ -0,0 +1,3 @@
+use std, array
+=:mac:= -> int& { * (0x400000 as int*) }
+printf "%x\n" mac (: may crash depending on operating system :)
diff --git a/Task/Address-of-a-variable/AutoHotkey/address-of-a-variable.ahk b/Task/Address-of-a-variable/AutoHotkey/address-of-a-variable.ahk
new file mode 100644
index 0000000000..996566e1a5
--- /dev/null
+++ b/Task/Address-of-a-variable/AutoHotkey/address-of-a-variable.ahk
@@ -0,0 +1 @@
+msgbox % &var
diff --git a/Task/Address-of-a-variable/BASIC/address-of-a-variable.bas b/Task/Address-of-a-variable/BASIC/address-of-a-variable.bas
new file mode 100644
index 0000000000..1f273c7c69
--- /dev/null
+++ b/Task/Address-of-a-variable/BASIC/address-of-a-variable.bas
@@ -0,0 +1,8 @@
+'get a variable's address:
+DIM x AS INTEGER, y AS LONG
+y = VARPTR(x)
+
+'can't set the address, but can access a given memory location... 1 byte at a time
+DIM z AS INTEGER
+z = PEEK(y)
+z = z + (PEEK(y) * 256)
diff --git a/Task/Address-of-a-variable/Fortran/address-of-a-variable.f b/Task/Address-of-a-variable/Fortran/address-of-a-variable.f
new file mode 100644
index 0000000000..9c79642fd3
--- /dev/null
+++ b/Task/Address-of-a-variable/Fortran/address-of-a-variable.f
@@ -0,0 +1,10 @@
+program test_loc
+
+ implicit none
+ integer :: i
+ real :: r
+
+ i = loc (r)
+ write (*, '(i0)') i
+
+end program test_loc
diff --git a/Task/Address-of-a-variable/Go/address-of-a-variable-1.go b/Task/Address-of-a-variable/Go/address-of-a-variable-1.go
new file mode 100644
index 0000000000..37c46c441b
--- /dev/null
+++ b/Task/Address-of-a-variable/Go/address-of-a-variable-1.go
@@ -0,0 +1,16 @@
+package main
+
+import (
+ "fmt"
+ "unsafe"
+)
+
+func main() {
+ myVar := 3.14
+ myPointer := &myVar
+ fmt.Println(myPointer)
+ fmt.Printf("%p\n", myPointer)
+
+ addr := int64(uintptr(unsafe.Pointer(myPointer)))
+ fmt.Printf("0x%x\n", addr)
+}
diff --git a/Task/Address-of-a-variable/Go/address-of-a-variable-2.go b/Task/Address-of-a-variable/Go/address-of-a-variable-2.go
new file mode 100644
index 0000000000..efc75365e1
--- /dev/null
+++ b/Task/Address-of-a-variable/Go/address-of-a-variable-2.go
@@ -0,0 +1,29 @@
+== Get ==
+
+There are at least three ways to get the address of a variable in IWBASIC. The first is to use the address of operator:
+
+DEF X:INT
+PRINT &X
+'This will print in the console window (after OPENCONSOLE is issued.)
+'To Print in an open window the appropriate Window variable is specified, e.g., PRINT Win,&X.
+
+The second is to use a pointer:
+
+DEF X:INT
+DEF pPointer:POINTER
+pPointer=X
+
+The third is to use the Windows API function Lstrcpy. That is done in the same way as the Creative Basic example;
+however, the function would be declared as follows: DECLARE IMPORT,Lstrcpy(P1:POINTER,P2:POINTER),INT.
+
+== Set ==
+
+It appears to the author that the closest one can come to being able to assign an address to a variable is to set
+which bytes will be used to store a variable in a block of reserved memory:
+
+DEF pMem as POINTER
+pMem = NEW(CHAR,1000) : 'Get 1000 bytes to play with
+#pMem = "Copy a string into memory"
+pMem += 100
+#pMem = 34234: 'Use bytes 100-103 to store a UINT
+DELETE pMem
diff --git a/Task/Address-of-a-variable/Go/address-of-a-variable-3.go b/Task/Address-of-a-variable/Go/address-of-a-variable-3.go
new file mode 100644
index 0000000000..e99f68a6d1
--- /dev/null
+++ b/Task/Address-of-a-variable/Go/address-of-a-variable-3.go
@@ -0,0 +1,3 @@
+ var =: 52 NB. Any variable (including data, functions, operators etc)
+ var_addr =: 15!:6<'var' NB. Get address
+ new_var =: 15!:7 var_addr NB. Set address
diff --git a/Task/Address-of-a-variable/Perl/address-of-a-variable-1.pl b/Task/Address-of-a-variable/Perl/address-of-a-variable-1.pl
new file mode 100644
index 0000000000..8ae7e23582
--- /dev/null
+++ b/Task/Address-of-a-variable/Perl/address-of-a-variable-1.pl
@@ -0,0 +1,2 @@
+use Scalar::Util qw(refaddr);
+print refaddr(\my $v), "\n"; # 135691508
diff --git a/Task/Address-of-a-variable/Perl/address-of-a-variable-2.pl b/Task/Address-of-a-variable/Perl/address-of-a-variable-2.pl
new file mode 100644
index 0000000000..85557b3156
--- /dev/null
+++ b/Task/Address-of-a-variable/Perl/address-of-a-variable-2.pl
@@ -0,0 +1,4 @@
+my $a = 12;
+my $b = \$a; # get reference
+$$b = $$b + 30; # access referenced value
+print $a; # prints 42
diff --git a/Task/Address-of-a-variable/Perl/address-of-a-variable-3.pl b/Task/Address-of-a-variable/Perl/address-of-a-variable-3.pl
new file mode 100644
index 0000000000..ca3818d25a
--- /dev/null
+++ b/Task/Address-of-a-variable/Perl/address-of-a-variable-3.pl
@@ -0,0 +1,6 @@
+my $a = 12;
+our $b; # you can overlay only global variables (this line is only for strictness)
+*b = \$a;
+print $b; # prints 12
+$b++;
+print $a; # prints 13
diff --git a/Task/Address-of-a-variable/PicoLisp/address-of-a-variable.l b/Task/Address-of-a-variable/PicoLisp/address-of-a-variable.l
new file mode 100644
index 0000000000..0e600c2c0e
--- /dev/null
+++ b/Task/Address-of-a-variable/PicoLisp/address-of-a-variable.l
@@ -0,0 +1,14 @@
+: (setq X 7)
+-> 7
+
+: (adr 'X)
+-> -2985527269106
+
+: (val (adr -2985527269106))
+-> 7
+
+: (set (adr -2985527269106) '(a b c))
+-> (a b c)
+
+: X
+-> (a b c)
diff --git a/Task/Address-of-a-variable/Python/address-of-a-variable.py b/Task/Address-of-a-variable/Python/address-of-a-variable.py
new file mode 100644
index 0000000000..2ad5c38568
--- /dev/null
+++ b/Task/Address-of-a-variable/Python/address-of-a-variable.py
@@ -0,0 +1,2 @@
+foo = object() # Create (instantiate) an empty object
+address = id(foo)
diff --git a/Task/Address-of-a-variable/REXX/address-of-a-variable.rexx b/Task/Address-of-a-variable/REXX/address-of-a-variable.rexx
new file mode 100644
index 0000000000..334ae4d6db
--- /dev/null
+++ b/Task/Address-of-a-variable/REXX/address-of-a-variable.rexx
@@ -0,0 +1 @@
+zzz=storage(xxx)
diff --git a/Task/Address-of-a-variable/Racket/address-of-a-variable-1.rkt b/Task/Address-of-a-variable/Racket/address-of-a-variable-1.rkt
new file mode 100644
index 0000000000..3971668594
--- /dev/null
+++ b/Task/Address-of-a-variable/Racket/address-of-a-variable-1.rkt
@@ -0,0 +1,6 @@
+#lang racket
+
+(require ffi/unsafe)
+
+(define (madness v) ; i'm so sorry
+ (cast v _racket _gcpointer))
diff --git a/Task/Address-of-a-variable/Racket/address-of-a-variable-2.rkt b/Task/Address-of-a-variable/Racket/address-of-a-variable-2.rkt
new file mode 100644
index 0000000000..26ebfad6bb
--- /dev/null
+++ b/Task/Address-of-a-variable/Racket/address-of-a-variable-2.rkt
@@ -0,0 +1,6 @@
+(ptr-ref (madness +) _short)
+(ptr-ref (madness (/ 4 3)) _short)
+(ptr-ref (madness 3.2) _short)
+(ptr-ref (madness (sqrt -2)) _short)
+(ptr-ref (madness #\a) _short)
+(ptr-ref (madness 'foo) _short)
diff --git a/Task/Address-of-a-variable/Ruby/address-of-a-variable.rb b/Task/Address-of-a-variable/Ruby/address-of-a-variable.rb
new file mode 100644
index 0000000000..9d7cd315f4
--- /dev/null
+++ b/Task/Address-of-a-variable/Ruby/address-of-a-variable.rb
@@ -0,0 +1,3 @@
+>foo = Object.new # => #
+>id = foo.object_id # => 2238812160
+>"%x" % (id << 1) # => "10ae32000"
diff --git a/Task/Address-of-a-variable/Smalltalk/address-of-a-variable-1.st b/Task/Address-of-a-variable/Smalltalk/address-of-a-variable-1.st
new file mode 100644
index 0000000000..76b8284a99
--- /dev/null
+++ b/Task/Address-of-a-variable/Smalltalk/address-of-a-variable-1.st
@@ -0,0 +1,5 @@
+|p|
+p := Point x:10 y:20.
+ObjectMemory addressOf:p.
+ObjectMemory collectGarbage.
+ObjectMemory addressOf:p
diff --git a/Task/Address-of-a-variable/Smalltalk/address-of-a-variable-2.st b/Task/Address-of-a-variable/Smalltalk/address-of-a-variable-2.st
new file mode 100644
index 0000000000..46e30d5bbe
--- /dev/null
+++ b/Task/Address-of-a-variable/Smalltalk/address-of-a-variable-2.st
@@ -0,0 +1,4 @@
+|ptr|
+ptr := ExternalBytes new:10.
+ptr address.
+ptr byteAt:1 put: 16rFF.
diff --git a/Task/Address-of-a-variable/Tcl/address-of-a-variable-1.tcl b/Task/Address-of-a-variable/Tcl/address-of-a-variable-1.tcl
new file mode 100644
index 0000000000..aaa94a560d
--- /dev/null
+++ b/Task/Address-of-a-variable/Tcl/address-of-a-variable-1.tcl
@@ -0,0 +1,21 @@
+package require critcl
+# This code assumes an ILP32 architecture, like classic x86 or VAX.
+critcl::cproc peek {int addr} int {
+ union {
+ int i;
+ int *a;
+ } u;
+
+ u.i = addr;
+ return *u.a;
+}
+critcl::cproc poke {int addr int value} void {
+ union {
+ int i;
+ int *a;
+ } u;
+
+ u.i = addr;
+ *u.a = value;
+}
+package provide poker 1.0
diff --git a/Task/Address-of-a-variable/Tcl/address-of-a-variable-2.tcl b/Task/Address-of-a-variable/Tcl/address-of-a-variable-2.tcl
new file mode 100644
index 0000000000..1679e8cbc4
--- /dev/null
+++ b/Task/Address-of-a-variable/Tcl/address-of-a-variable-2.tcl
@@ -0,0 +1,7 @@
+package require poker
+
+# Increment a memory location; this will probably crash if you try for real.
+# We don't define how to get a good address, but it's not usually a problem
+# for embedded programming...
+set where 0x12340
+poke $where [expr {[peek $where] + 1}]
diff --git a/Task/Align-columns/0DESCRIPTION b/Task/Align-columns/0DESCRIPTION
new file mode 100644
index 0000000000..9fb3f5a107
--- /dev/null
+++ b/Task/Align-columns/0DESCRIPTION
@@ -0,0 +1,22 @@
+Given a text file of many lines, where fields within a line
+are delineated by a single 'dollar' character, write a program
+that aligns each column of fields by ensuring that words in each
+column are separated by at least one space.
+Further, allow for each word in a column to be either left
+justified, right justified, or center justified within its column.
+
+ Use the following text to test your programs:
+