diff --git a/Conf/task.yaml b/Conf/task.yaml
index 9c9e8a247b..bc4274e403 100644
--- a/Conf/task.yaml
+++ b/Conf/task.yaml
@@ -1,10 +1,13 @@
100 doors:
24 game:
24 game/Solve:
+9 billion names of God the integer:
99 Bottles of Beer:
A+B:
+ABC Problem:
Abstract type:
+Abundant, deficient and perfect number classifications:
Accumulator factory:
Ackermann function:
Active Directory/Connect:
@@ -12,17 +15,24 @@ Active Directory/Search for a user:
Active object:
Add a variable to a class instance at runtime:
Address of a variable:
+AKS test for primes:
Align columns:
+Aliquot sequence classifications:
+Almost prime:
+Amb:
+Amicable pairs:
Anagrams:
Anagrams/Deranged anagrams:
Animate a pendulum:
Animation:
Anonymous recursion:
+Append a record to the end of a text file:
Apply a callback to an array:
Arbitrary-precision integers (included):
Arena storage pool:
Arithmetic evaluation:
Arithmetic-geometric mean:
+Arithmetic-geometric mean/Calculate Pi:
Arithmetic/Complex:
Arithmetic/Integer:
Arithmetic/Rational:
@@ -44,13 +54,16 @@ Averages/Simple moving average:
Balanced brackets:
Balanced ternary:
+Benford's law: #'
+Bernoulli numbers:
Best shuffle:
Binary digits:
Binary search:
Binary strings:
Bitcoin/address validation:
+Bitcoin/public point to address:
Bitmap:
-Bitmap/Bresenham's line algorithm: #'
+Bitmap/Bresenham's line algorithm: #'
Bitmap/Bézier curves/Cubic:
Bitmap/Bézier curves/Quadratic:
Bitmap/Flood fill:
@@ -71,7 +84,7 @@ Bulls and cows/Player:
Caesar cipher:
Calendar:
-Calendar - for "real" programmers:
+Calendar - for "REAL" programmers:
Call a foreign-language function:
Call a function:
Call a function in a shared library:
@@ -79,17 +92,22 @@ Call an object method:
Canny edge detector:
Carmichael 3 strong pseudoprimes:
Case-sensitivity of identifiers:
+Casting out nines:
Catalan numbers:
+Catalan numbers/Pascal's triangle: #'
+Catamorphism:
Catmull–Clark subdivision surface:
Character codes:
-Character matching:
Chat server:
Check Machin-like formulas:
Check that file exists:
Checkpoint synchronization:
+Chinese remainder theorem:
Cholesky decomposition:
+Circles of given radius through two points:
Classes:
Closest-pair problem:
+Closures/Value capture:
Collections:
Color of a screen pixel:
Color quantization:
@@ -97,21 +115,25 @@ Colour bars/Display:
Colour pinstripe/Display:
Colour pinstripe/Printer:
Combinations:
+Combinations and permutations:
Combinations with repetitions:
+Comma quibbling:
Command-line arguments:
Comments:
-Compare sorting algorithms' performance: #'
+Compare sorting algorithms' performance: #'
Compile-time calculation:
Compound data type:
Concurrent computing:
Conditional structures:
+Conjugate transpose:
Constrained genericity:
Constrained random points on a circle:
Continued fraction:
Continued fraction/Arithmetic/Construct from rational number:
Continued fraction/Arithmetic/G(matrix NG, Contined Fraction N):
Continued fraction/Arithmetic/G(matrix NG, Contined Fraction N1, Contined Fraction N2):
-Conway's Game of Life: #'
+Convert decimal number to rational:
+Conway's Game of Life: #'
Copy a string:
Count in factors:
Count in octal:
@@ -123,7 +145,9 @@ Create a file on magnetic tape:
Create a two-dimensional array at runtime:
Create an HTML table:
Create an object at a given address:
+CSV data manipulation:
CSV to HTML translation:
+Currying:
Cut a rectangle:
Date format:
@@ -141,7 +165,8 @@ Detect division by zero:
Determine if a string is numeric:
Determine if only one instance is running:
Digital root:
-Dinesman's multiple-dwelling problem: #'
+Digital root/Multiplicative digital root:
+Dinesman's multiple-dwelling problem: #'
Dining philosophers:
Discordian date:
Distributed programming:
@@ -153,6 +178,7 @@ Doubly-linked list/Element definition:
Doubly-linked list/Element insertion:
Doubly-linked list/Traversal:
Dragon curve:
+Draw a clock:
Draw a cuboid:
Draw a sphere:
Dutch national flag problem:
@@ -184,6 +210,7 @@ Execute HQ9+:
Execute SNUSP:
Exponentiation operator:
Extend your language:
+Extensible prime generator:
Extreme floating point values:
Factorial:
@@ -192,13 +219,16 @@ Factors of an integer:
Fast Fourier transform:
Fibonacci n-step number sequences:
Fibonacci sequence:
-File IO:
+Fibonacci word:
+Fibonacci word/fractal:
+File input/output:
File modification time:
File size:
Filter:
Find common directory path:
Find largest left truncatable prime in a given base:
Find limit of recursion:
+Find the last Sunday of each month:
Find the missing permutation:
First class environments:
First-class functions:
@@ -206,8 +236,9 @@ First-class functions/Use numbers analogously:
Five weekends:
FizzBuzz:
Flatten a list:
+Flipping bits game:
Flow-control structures:
-Floyd's triangle: #'
+Floyd's triangle: #'
Forest fire:
Fork:
Formal power series:
@@ -215,6 +246,7 @@ Formatted numeric output:
Forward difference:
Four bit adder:
Fractal tree:
+Fractran:
Function composition:
Function definition:
Function frequency:
@@ -222,6 +254,9 @@ Function prototype:
Galton box animation:
Gamma function:
+Gaussian elimination:
+Generate Chess960 starting position:
+Generate lower case ASCII alphabet:
Generator/Exponential:
Generic swap:
Globally replace text in several files:
@@ -245,14 +280,18 @@ Handle a signal:
Happy numbers:
Harshad or Niven series:
Hash from two arrays:
+Hash join:
Haversine formula:
Hello world/Graphical:
Hello world/Line printer:
+Hello world/Newbie:
Hello world/Newline omission:
Hello world/Standard error:
Hello world/Text:
Hello world/Web server:
Here document:
+Heronian triangles:
+Hickerson series of almost integers:
Higher-order functions:
History variables:
Hofstadter Figure-Figure sequences:
@@ -261,7 +300,7 @@ Hofstadter-Conway $10,000 sequence:
Holidays related to Easter:
Honeycombs:
Horizontal sundial calculations:
-Horner's rule for polynomial evaluation: #'
+Horner's rule for polynomial evaluation: #'
Host introspection:
Hostname:
Hough transform:
@@ -272,6 +311,7 @@ HTTPS/Client-authenticated:
Huffman coding:
I before E except after C:
+IBAN:
Identity matrix:
Image convolution:
Image noise:
@@ -282,18 +322,21 @@ Inheritance/Multiple:
Inheritance/Single:
Input loop:
Integer comparison:
+Integer overflow:
Integer sequence:
Interactive programming:
Introspection:
Inverted index:
Inverted syntax:
+Iterated digits squaring:
-Jensen's Device: #'
+Jensen's Device: #'
Josephus problem:
Joystick position:
JSON:
Jump anywhere:
+K-d tree:
K-means++ clustering:
Kaprekar numbers:
Keyboard input/Flush the keyboard buffer:
@@ -304,16 +347,17 @@ Knapsack problem/0-1:
Knapsack problem/Bounded:
Knapsack problem/Continuous:
Knapsack problem/Unbounded:
-Knight's tour: #'
+Knight's tour: #'
Knuth shuffle:
-Knuth's algorithm S: #'
+Knuth's algorithm S: #'
-Langton's ant: #'
+Langton's ant: #'
Largest int from concatenated ints:
Last Friday of each month:
Last letter-first letter:
Leap year:
Least common multiple:
+Left factorials:
Letter frequency:
Levenshtein distance:
Linear congruential generator:
@@ -324,6 +368,7 @@ Literals/String:
Logical operations:
Long multiplication:
Longest common subsequence:
+Longest increasing subsequence:
Longest string challenge:
Look-and-say sequence:
Loop over multiple arrays simultaneously:
@@ -340,11 +385,15 @@ Loops/Nested:
Loops/While:
LU decomposition:
Lucas-Lehmer test:
+Ludic numbers:
Luhn test of credit card numbers:
LZW compression:
+Machine code:
Mad Libs:
+Magic squares of odd order:
Main step of GOST 28147-89:
+Make directory path:
Man or boy test:
Mandelbrot set:
Map range:
@@ -352,6 +401,7 @@ Matrix arithmetic:
Matrix multiplication:
Matrix transposition:
Matrix-exponentiation operator:
+Maximum triangle path sum:
Maze generation:
Maze solving:
MD4:
@@ -373,18 +423,22 @@ Monte Carlo methods:
Monty Hall problem:
Morse code:
Mouse position:
+Move-to-front algorithm:
Multifactorial:
Multiple distinct objects:
Multiple regression:
Multiplication tables:
Multiplicative order:
Multisplit:
-# Mutex:
+Munching squares:
Mutual recursion:
+N'th: #'
N-queens problem:
Named parameters:
Narcissist:
+Narcissistic decimal number:
+Natural sorting:
Nautical bell:
Non-continuous subsequences:
Non-decimal radices/Convert:
@@ -399,34 +453,47 @@ Numerical integration:
Numerical integration/Gauss-Legendre Quadrature:
Object serialization:
+Odd word problem:
+Old lady swallowed a fly:
OLE Automation:
One of n lines in a file:
One-dimensional cellular automata:
OpenGL:
Operator precedence:
Optional parameters:
+Order disjoint list items:
Order two numerical lists:
Ordered Partitions:
Ordered words:
Palindrome detection:
Pangram checker:
+Paraffins:
Parallel calculations:
Parametric polymorphism:
Parametrized SQL statement:
+Parse an IP Address:
Parsing/RPN calculator algorithm:
Parsing/RPN to infix conversion:
Parsing/Shunting-yard algorithm:
Partial function application:
-Pascal's triangle: #'
-Pascal's triangle/Puzzle: #'
+Pascal's triangle: #'
+Pascal's triangle/Puzzle: #'
Pattern matching:
+Penney's game: #'
Percentage difference between images:
+Percolation/Bond percolation:
+Percolation/Mean cluster density:
+Percolation/Mean run density:
+Percolation/Site percolation:
Perfect numbers:
Permutation test:
Permutations:
Permutations by swapping:
Permutations/Derangements:
+Permutations/Rank of a permutation:
+Pernicious numbers:
+Phrase reversals:
Pi:
Pick random element:
Pig the dice game:
@@ -457,6 +524,7 @@ QR decomposition:
Quaternion type:
Queue/Definition:
Queue/Usage:
+Quickselect algorithm:
Quine:
Random number generator (device):
@@ -464,6 +532,7 @@ Random number generator (included):
Random numbers:
Range expansion:
Range extraction:
+Ranking methods:
Rate counter:
Ray-casting algorithm:
RCRPG:
@@ -479,11 +548,13 @@ Remove duplicate elements:
Remove lines from a file:
Rename a file:
Rendezvous:
+Rep-string:
Repeat a string:
Resistor mesh:
Respond to an unknown method call:
Return multiple values:
Reverse a string:
+Reverse words in a string:
RIPEMD-160:
Rock-paper-scissors:
Roman numerals/Decode:
@@ -491,12 +562,18 @@ Roman numerals/Encode:
Roots of a function:
Roots of a quadratic function:
Roots of unity:
-Rosetta Code/Count examples:
-Rosetta Code/Find unimplemented tasks:
-Rosetta Code/Fix code tags:
-Rosetta Code/Rank languages by popularity:
+
+# XXX - These break the parser currently:
+# Rosetta Code/Count examples:
+# Rosetta Code/Find bare lang tags:
+# Rosetta Code/Find unimplemented tasks:
+# Rosetta Code/Fix code tags:
+# Rosetta Code/Rank languages by popularity:
+
Rot-13:
+RSA code:
Run-length encoding:
+Runge-Kutta method:
Runtime evaluation:
Runtime evaluation/In an environment:
@@ -510,10 +587,12 @@ Secure temporary file:
SEDOLs:
Self-describing numbers:
Self-referential sequence:
+Semiprime:
Semordnilap:
Send an unknown method call:
Send email:
Sequence of non-squares:
+Sequence of primes by Trial Division:
Set:
Set consolidation:
Set of real numbers:
@@ -541,6 +620,10 @@ SOAP:
Sockets:
Sokoban:
Solve a Hidato puzzle:
+Solve a Holy Knight's tour: #'
+Solve a Hopido puzzle:
+Solve a Numbrix puzzle:
+Solve the no connection puzzle:
Sort an array of composite structures:
Sort an integer array:
Sort disjoint sublist:
@@ -566,6 +649,7 @@ Sorting algorithms/Sleep sort:
Sorting algorithms/Stooge sort:
Sorting algorithms/Strand sort:
Soundex:
+Sparkline in unicode:
Special characters:
Special variables:
Speech synthesis:
@@ -577,12 +661,18 @@ Stack traces:
Stair-climbing puzzle:
Standard deviation:
Start from a main routine:
+State name puzzle:
+Statistics/Basic:
Stem-and-leaf plot:
+Stern-Brocot sequence:
+String append:
String case:
String comparison:
String concatenation:
String interpolation (included):
String length:
+String matching:
+String prepend:
Strip a set of characters from a string:
Strip block comments:
Strip comments from a string:
@@ -594,6 +684,7 @@ Subtractive generator:
Sudoku:
Sum and product of an array:
Sum digits of an integer:
+Sum multiples of 3 and 5:
Sum of a series:
Sum of squares:
Sutherland-Hodgman polygon clipping:
@@ -621,7 +712,10 @@ Test a function:
Text processing/1:
Text processing/2:
Text processing/Max licenses in use:
-Thiele's interpolation formula: #'
+Textonyms:
+The ISAAC Cipher:
+The Twelve Days of Christmas:
+Thiele's interpolation formula: #'
Tic-tac-toe:
Time a function:
Tokenize a string:
@@ -629,6 +723,7 @@ Top rank per group:
Topic variable:
Topological sort:
Topswops:
+Total circles area:
Towers of Hanoi:
Trabb Pardo–Knuth algorithm:
Tree traversal:
@@ -637,11 +732,13 @@ Truncatable primes:
Truncate a file:
Twelve statements:
+Ulam spiral (for primes):
Unbias a random generator:
Undefined values:
Unicode strings:
Unicode variable names:
Universal Turing machine:
+Unix/ls:
Update a configuration file:
URL decoding:
URL encoding:
@@ -663,6 +760,7 @@ Video display modes:
Vigenère cipher:
Vigenère cipher/Cryptanalysis:
Visualize a tree:
+Vogel's approximation method: #'
Voronoi diagram:
Walk a directory/Non-recursively:
@@ -673,11 +771,12 @@ Window creation/X11:
Window management:
Wireworld:
Word wrap:
+World Cup group stage:
Write float arrays to a text file:
Write language name in 3D ASCII:
Write to Windows event log:
-Xiaolin Wu's line algorithm: #'
+Xiaolin Wu's line algorithm: #'
XML/DOM serialization:
XML/Input:
XML/Output:
@@ -690,4 +789,6 @@ Yin and yang:
Zebra puzzle:
Zeckendorf arithmetic:
Zeckendorf number representation:
+Zero to the zero power:
+Zhang-Suen thinning algorithm:
Zig-zag matrix:
diff --git a/Lang/360-Assembly/Catalan-numbers-Pascals-triangle b/Lang/360-Assembly/Catalan-numbers-Pascals-triangle
new file mode 120000
index 0000000000..2cd0d7b486
--- /dev/null
+++ b/Lang/360-Assembly/Catalan-numbers-Pascals-triangle
@@ -0,0 +1 @@
+../../Task/Catalan-numbers-Pascals-triangle/360-Assembly
\ No newline at end of file
diff --git a/Lang/ACL2/File-input-output b/Lang/ACL2/File-input-output
new file mode 120000
index 0000000000..6a1b076658
--- /dev/null
+++ b/Lang/ACL2/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/ACL2
\ No newline at end of file
diff --git a/Lang/ALGOL-68/Amb b/Lang/ALGOL-68/Amb
new file mode 120000
index 0000000000..f42068465c
--- /dev/null
+++ b/Lang/ALGOL-68/Amb
@@ -0,0 +1 @@
+../../Task/Amb/ALGOL-68
\ No newline at end of file
diff --git a/Lang/ALGOL-68/Calendar---for-REAL-programmers b/Lang/ALGOL-68/Calendar---for-REAL-programmers
new file mode 120000
index 0000000000..9daf77d4e8
--- /dev/null
+++ b/Lang/ALGOL-68/Calendar---for-REAL-programmers
@@ -0,0 +1 @@
+../../Task/Calendar---for-REAL-programmers/ALGOL-68
\ No newline at end of file
diff --git a/Lang/ALGOL-68/Closures-Value-capture b/Lang/ALGOL-68/Closures-Value-capture
new file mode 120000
index 0000000000..456d216da2
--- /dev/null
+++ b/Lang/ALGOL-68/Closures-Value-capture
@@ -0,0 +1 @@
+../../Task/Closures-Value-capture/ALGOL-68
\ No newline at end of file
diff --git a/Lang/ALGOL-68/Combinations-and-permutations b/Lang/ALGOL-68/Combinations-and-permutations
new file mode 120000
index 0000000000..1c03f9655f
--- /dev/null
+++ b/Lang/ALGOL-68/Combinations-and-permutations
@@ -0,0 +1 @@
+../../Task/Combinations-and-permutations/ALGOL-68
\ No newline at end of file
diff --git a/Lang/ALGOL-68/Currying b/Lang/ALGOL-68/Currying
new file mode 120000
index 0000000000..87493ab3d7
--- /dev/null
+++ b/Lang/ALGOL-68/Currying
@@ -0,0 +1 @@
+../../Task/Currying/ALGOL-68
\ No newline at end of file
diff --git a/Lang/ALGOL-68/Digital-root-Multiplicative-digital-root b/Lang/ALGOL-68/Digital-root-Multiplicative-digital-root
new file mode 120000
index 0000000000..cff31a9114
--- /dev/null
+++ b/Lang/ALGOL-68/Digital-root-Multiplicative-digital-root
@@ -0,0 +1 @@
+../../Task/Digital-root-Multiplicative-digital-root/ALGOL-68
\ No newline at end of file
diff --git a/Lang/ALGOL-68/Fibonacci-word b/Lang/ALGOL-68/Fibonacci-word
new file mode 120000
index 0000000000..820586c2d7
--- /dev/null
+++ b/Lang/ALGOL-68/Fibonacci-word
@@ -0,0 +1 @@
+../../Task/Fibonacci-word/ALGOL-68
\ No newline at end of file
diff --git a/Lang/ALGOL-68/File-input-output b/Lang/ALGOL-68/File-input-output
new file mode 120000
index 0000000000..db7aeb57c2
--- /dev/null
+++ b/Lang/ALGOL-68/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/ALGOL-68
\ No newline at end of file
diff --git a/Lang/ALGOL-68/Gaussian-elimination b/Lang/ALGOL-68/Gaussian-elimination
new file mode 120000
index 0000000000..9c8cce235b
--- /dev/null
+++ b/Lang/ALGOL-68/Gaussian-elimination
@@ -0,0 +1 @@
+../../Task/Gaussian-elimination/ALGOL-68
\ No newline at end of file
diff --git a/Lang/ALGOL-68/Generate-lower-case-ASCII-alphabet b/Lang/ALGOL-68/Generate-lower-case-ASCII-alphabet
new file mode 120000
index 0000000000..3323f0d03d
--- /dev/null
+++ b/Lang/ALGOL-68/Generate-lower-case-ASCII-alphabet
@@ -0,0 +1 @@
+../../Task/Generate-lower-case-ASCII-alphabet/ALGOL-68
\ No newline at end of file
diff --git a/Lang/ALGOL-68/Hello-world-Newbie b/Lang/ALGOL-68/Hello-world-Newbie
new file mode 120000
index 0000000000..d8de503baa
--- /dev/null
+++ b/Lang/ALGOL-68/Hello-world-Newbie
@@ -0,0 +1 @@
+../../Task/Hello-world-Newbie/ALGOL-68
\ No newline at end of file
diff --git a/Lang/ALGOL-68/Maximum-triangle-path-sum b/Lang/ALGOL-68/Maximum-triangle-path-sum
new file mode 120000
index 0000000000..6953b4dd4a
--- /dev/null
+++ b/Lang/ALGOL-68/Maximum-triangle-path-sum
@@ -0,0 +1 @@
+../../Task/Maximum-triangle-path-sum/ALGOL-68
\ No newline at end of file
diff --git a/Lang/ALGOL-68/Move-to-front-algorithm b/Lang/ALGOL-68/Move-to-front-algorithm
new file mode 120000
index 0000000000..4f4103fefd
--- /dev/null
+++ b/Lang/ALGOL-68/Move-to-front-algorithm
@@ -0,0 +1 @@
+../../Task/Move-to-front-algorithm/ALGOL-68
\ No newline at end of file
diff --git a/Lang/ALGOL-68/Nth b/Lang/ALGOL-68/Nth
new file mode 120000
index 0000000000..516ddb941a
--- /dev/null
+++ b/Lang/ALGOL-68/Nth
@@ -0,0 +1 @@
+../../Task/Nth/ALGOL-68
\ No newline at end of file
diff --git a/Lang/ALGOL-68/Odd-word-problem b/Lang/ALGOL-68/Odd-word-problem
new file mode 120000
index 0000000000..c051c2d824
--- /dev/null
+++ b/Lang/ALGOL-68/Odd-word-problem
@@ -0,0 +1 @@
+../../Task/Odd-word-problem/ALGOL-68
\ No newline at end of file
diff --git a/Lang/ALGOL-68/Old-lady-swallowed-a-fly b/Lang/ALGOL-68/Old-lady-swallowed-a-fly
new file mode 120000
index 0000000000..550ca495a4
--- /dev/null
+++ b/Lang/ALGOL-68/Old-lady-swallowed-a-fly
@@ -0,0 +1 @@
+../../Task/Old-lady-swallowed-a-fly/ALGOL-68
\ No newline at end of file
diff --git a/Lang/ALGOL-68/Rep-string b/Lang/ALGOL-68/Rep-string
new file mode 120000
index 0000000000..a05d0303e5
--- /dev/null
+++ b/Lang/ALGOL-68/Rep-string
@@ -0,0 +1 @@
+../../Task/Rep-string/ALGOL-68
\ No newline at end of file
diff --git a/Lang/ALGOL-68/String-append b/Lang/ALGOL-68/String-append
new file mode 120000
index 0000000000..6e1bba96af
--- /dev/null
+++ b/Lang/ALGOL-68/String-append
@@ -0,0 +1 @@
+../../Task/String-append/ALGOL-68
\ No newline at end of file
diff --git a/Lang/ALGOL-68/String-matching b/Lang/ALGOL-68/String-matching
new file mode 120000
index 0000000000..d604d888a6
--- /dev/null
+++ b/Lang/ALGOL-68/String-matching
@@ -0,0 +1 @@
+../../Task/String-matching/ALGOL-68
\ No newline at end of file
diff --git a/Lang/ALGOL-68/String-prepend b/Lang/ALGOL-68/String-prepend
new file mode 120000
index 0000000000..be5d160e4b
--- /dev/null
+++ b/Lang/ALGOL-68/String-prepend
@@ -0,0 +1 @@
+../../Task/String-prepend/ALGOL-68
\ No newline at end of file
diff --git a/Lang/ALGOL-68/Zero-to-the-zero-power b/Lang/ALGOL-68/Zero-to-the-zero-power
new file mode 120000
index 0000000000..fddff9906b
--- /dev/null
+++ b/Lang/ALGOL-68/Zero-to-the-zero-power
@@ -0,0 +1 @@
+../../Task/Zero-to-the-zero-power/ALGOL-68
\ No newline at end of file
diff --git a/Lang/ATS/Generate-lower-case-ASCII-alphabet b/Lang/ATS/Generate-lower-case-ASCII-alphabet
new file mode 120000
index 0000000000..79af58ba63
--- /dev/null
+++ b/Lang/ATS/Generate-lower-case-ASCII-alphabet
@@ -0,0 +1 @@
+../../Task/Generate-lower-case-ASCII-alphabet/ATS
\ No newline at end of file
diff --git a/Lang/ATS/Sequence-of-primes-by-Trial-Division b/Lang/ATS/Sequence-of-primes-by-Trial-Division
new file mode 120000
index 0000000000..62530f1780
--- /dev/null
+++ b/Lang/ATS/Sequence-of-primes-by-Trial-Division
@@ -0,0 +1 @@
+../../Task/Sequence-of-primes-by-Trial-Division/ATS
\ No newline at end of file
diff --git a/Lang/AWK/Benfords-law b/Lang/AWK/Benfords-law
new file mode 120000
index 0000000000..dd63450d19
--- /dev/null
+++ b/Lang/AWK/Benfords-law
@@ -0,0 +1 @@
+../../Task/Benfords-law/AWK
\ No newline at end of file
diff --git a/Lang/AWK/CSV-data-manipulation b/Lang/AWK/CSV-data-manipulation
new file mode 120000
index 0000000000..e59dd79eb0
--- /dev/null
+++ b/Lang/AWK/CSV-data-manipulation
@@ -0,0 +1 @@
+../../Task/CSV-data-manipulation/AWK
\ No newline at end of file
diff --git a/Lang/AWK/Comma-quibbling b/Lang/AWK/Comma-quibbling
new file mode 120000
index 0000000000..f8915ee4e6
--- /dev/null
+++ b/Lang/AWK/Comma-quibbling
@@ -0,0 +1 @@
+../../Task/Comma-quibbling/AWK
\ No newline at end of file
diff --git a/Lang/AWK/Digital-root-Multiplicative-digital-root b/Lang/AWK/Digital-root-Multiplicative-digital-root
new file mode 120000
index 0000000000..ff824c025c
--- /dev/null
+++ b/Lang/AWK/Digital-root-Multiplicative-digital-root
@@ -0,0 +1 @@
+../../Task/Digital-root-Multiplicative-digital-root/AWK
\ No newline at end of file
diff --git a/Lang/AWK/Draw-a-clock b/Lang/AWK/Draw-a-clock
new file mode 120000
index 0000000000..e08ce88a21
--- /dev/null
+++ b/Lang/AWK/Draw-a-clock
@@ -0,0 +1 @@
+../../Task/Draw-a-clock/AWK
\ No newline at end of file
diff --git a/Lang/AWK/File-input-output b/Lang/AWK/File-input-output
new file mode 120000
index 0000000000..1a65bc3d82
--- /dev/null
+++ b/Lang/AWK/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/AWK
\ No newline at end of file
diff --git a/Lang/AWK/Generate-lower-case-ASCII-alphabet b/Lang/AWK/Generate-lower-case-ASCII-alphabet
new file mode 120000
index 0000000000..d6ecba6946
--- /dev/null
+++ b/Lang/AWK/Generate-lower-case-ASCII-alphabet
@@ -0,0 +1 @@
+../../Task/Generate-lower-case-ASCII-alphabet/AWK
\ No newline at end of file
diff --git a/Lang/AWK/Hello-world-Newbie b/Lang/AWK/Hello-world-Newbie
new file mode 120000
index 0000000000..cb3f87b3e8
--- /dev/null
+++ b/Lang/AWK/Hello-world-Newbie
@@ -0,0 +1 @@
+../../Task/Hello-world-Newbie/AWK
\ No newline at end of file
diff --git a/Lang/AWK/Magic-squares-of-odd-order b/Lang/AWK/Magic-squares-of-odd-order
new file mode 120000
index 0000000000..93da3782f4
--- /dev/null
+++ b/Lang/AWK/Magic-squares-of-odd-order
@@ -0,0 +1 @@
+../../Task/Magic-squares-of-odd-order/AWK
\ No newline at end of file
diff --git a/Lang/AWK/Narcissistic-decimal-number b/Lang/AWK/Narcissistic-decimal-number
new file mode 120000
index 0000000000..2b1560e1a0
--- /dev/null
+++ b/Lang/AWK/Narcissistic-decimal-number
@@ -0,0 +1 @@
+../../Task/Narcissistic-decimal-number/AWK
\ No newline at end of file
diff --git a/Lang/AWK/Nth b/Lang/AWK/Nth
new file mode 120000
index 0000000000..39d025ff0b
--- /dev/null
+++ b/Lang/AWK/Nth
@@ -0,0 +1 @@
+../../Task/Nth/AWK
\ No newline at end of file
diff --git a/Lang/AWK/Old-lady-swallowed-a-fly b/Lang/AWK/Old-lady-swallowed-a-fly
new file mode 120000
index 0000000000..24bde13baa
--- /dev/null
+++ b/Lang/AWK/Old-lady-swallowed-a-fly
@@ -0,0 +1 @@
+../../Task/Old-lady-swallowed-a-fly/AWK
\ No newline at end of file
diff --git a/Lang/AWK/Phrase-reversals b/Lang/AWK/Phrase-reversals
new file mode 120000
index 0000000000..bdc503555e
--- /dev/null
+++ b/Lang/AWK/Phrase-reversals
@@ -0,0 +1 @@
+../../Task/Phrase-reversals/AWK
\ No newline at end of file
diff --git a/Lang/AWK/Ranking-methods b/Lang/AWK/Ranking-methods
new file mode 120000
index 0000000000..432245b72b
--- /dev/null
+++ b/Lang/AWK/Ranking-methods
@@ -0,0 +1 @@
+../../Task/Ranking-methods/AWK
\ No newline at end of file
diff --git a/Lang/AWK/Reverse-words-in-a-string b/Lang/AWK/Reverse-words-in-a-string
new file mode 120000
index 0000000000..c7d7c94183
--- /dev/null
+++ b/Lang/AWK/Reverse-words-in-a-string
@@ -0,0 +1 @@
+../../Task/Reverse-words-in-a-string/AWK
\ No newline at end of file
diff --git a/Lang/AWK/Runge-Kutta-method b/Lang/AWK/Runge-Kutta-method
new file mode 120000
index 0000000000..3a2e752d35
--- /dev/null
+++ b/Lang/AWK/Runge-Kutta-method
@@ -0,0 +1 @@
+../../Task/Runge-Kutta-method/AWK
\ No newline at end of file
diff --git a/Lang/AWK/String-append b/Lang/AWK/String-append
new file mode 120000
index 0000000000..28f85045fe
--- /dev/null
+++ b/Lang/AWK/String-append
@@ -0,0 +1 @@
+../../Task/String-append/AWK
\ No newline at end of file
diff --git a/Lang/AWK/String-matching b/Lang/AWK/String-matching
new file mode 120000
index 0000000000..bea8484d18
--- /dev/null
+++ b/Lang/AWK/String-matching
@@ -0,0 +1 @@
+../../Task/String-matching/AWK
\ No newline at end of file
diff --git a/Lang/AWK/String-prepend b/Lang/AWK/String-prepend
new file mode 120000
index 0000000000..ec5fcd55a5
--- /dev/null
+++ b/Lang/AWK/String-prepend
@@ -0,0 +1 @@
+../../Task/String-prepend/AWK
\ No newline at end of file
diff --git a/Lang/AWK/Sum-multiples-of-3-and-5 b/Lang/AWK/Sum-multiples-of-3-and-5
new file mode 120000
index 0000000000..652f6b3592
--- /dev/null
+++ b/Lang/AWK/Sum-multiples-of-3-and-5
@@ -0,0 +1 @@
+../../Task/Sum-multiples-of-3-and-5/AWK
\ No newline at end of file
diff --git a/Lang/AWK/The-Twelve-Days-of-Christmas b/Lang/AWK/The-Twelve-Days-of-Christmas
new file mode 120000
index 0000000000..29a8a8da38
--- /dev/null
+++ b/Lang/AWK/The-Twelve-Days-of-Christmas
@@ -0,0 +1 @@
+../../Task/The-Twelve-Days-of-Christmas/AWK
\ No newline at end of file
diff --git a/Lang/AWK/Unix-ls b/Lang/AWK/Unix-ls
new file mode 120000
index 0000000000..eaafa8c063
--- /dev/null
+++ b/Lang/AWK/Unix-ls
@@ -0,0 +1 @@
+../../Task/Unix-ls/AWK
\ No newline at end of file
diff --git a/Lang/AWK/Zero-to-the-zero-power b/Lang/AWK/Zero-to-the-zero-power
new file mode 120000
index 0000000000..4e5f1211f8
--- /dev/null
+++ b/Lang/AWK/Zero-to-the-zero-power
@@ -0,0 +1 @@
+../../Task/Zero-to-the-zero-power/AWK
\ No newline at end of file
diff --git a/Lang/ActionScript/Draw-a-clock b/Lang/ActionScript/Draw-a-clock
new file mode 120000
index 0000000000..4c52da613a
--- /dev/null
+++ b/Lang/ActionScript/Draw-a-clock
@@ -0,0 +1 @@
+../../Task/Draw-a-clock/ActionScript
\ No newline at end of file
diff --git a/Lang/ActionScript/The-Twelve-Days-of-Christmas b/Lang/ActionScript/The-Twelve-Days-of-Christmas
new file mode 120000
index 0000000000..20eb01a6ca
--- /dev/null
+++ b/Lang/ActionScript/The-Twelve-Days-of-Christmas
@@ -0,0 +1 @@
+../../Task/The-Twelve-Days-of-Christmas/ActionScript
\ No newline at end of file
diff --git a/Lang/Ada/ABC-Problem b/Lang/Ada/ABC-Problem
new file mode 120000
index 0000000000..618a565150
--- /dev/null
+++ b/Lang/Ada/ABC-Problem
@@ -0,0 +1 @@
+../../Task/ABC-Problem/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Almost-prime b/Lang/Ada/Almost-prime
new file mode 120000
index 0000000000..221a475d3d
--- /dev/null
+++ b/Lang/Ada/Almost-prime
@@ -0,0 +1 @@
+../../Task/Almost-prime/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Amb b/Lang/Ada/Amb
new file mode 120000
index 0000000000..69344b3e23
--- /dev/null
+++ b/Lang/Ada/Amb
@@ -0,0 +1 @@
+../../Task/Amb/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Benfords-law b/Lang/Ada/Benfords-law
new file mode 120000
index 0000000000..b00c1dc883
--- /dev/null
+++ b/Lang/Ada/Benfords-law
@@ -0,0 +1 @@
+../../Task/Benfords-law/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Calendar---for-REAL-programmers b/Lang/Ada/Calendar---for-REAL-programmers
new file mode 120000
index 0000000000..7ff6ba0bea
--- /dev/null
+++ b/Lang/Ada/Calendar---for-REAL-programmers
@@ -0,0 +1 @@
+../../Task/Calendar---for-REAL-programmers/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Catalan-numbers-Pascals-triangle b/Lang/Ada/Catalan-numbers-Pascals-triangle
new file mode 120000
index 0000000000..fc5525ddff
--- /dev/null
+++ b/Lang/Ada/Catalan-numbers-Pascals-triangle
@@ -0,0 +1 @@
+../../Task/Catalan-numbers-Pascals-triangle/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Catamorphism b/Lang/Ada/Catamorphism
new file mode 120000
index 0000000000..1d150f5487
--- /dev/null
+++ b/Lang/Ada/Catamorphism
@@ -0,0 +1 @@
+../../Task/Catamorphism/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Chinese-remainder-theorem b/Lang/Ada/Chinese-remainder-theorem
new file mode 120000
index 0000000000..8b27d8d3d7
--- /dev/null
+++ b/Lang/Ada/Chinese-remainder-theorem
@@ -0,0 +1 @@
+../../Task/Chinese-remainder-theorem/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Closures-Value-capture b/Lang/Ada/Closures-Value-capture
new file mode 120000
index 0000000000..f15d201b0d
--- /dev/null
+++ b/Lang/Ada/Closures-Value-capture
@@ -0,0 +1 @@
+../../Task/Closures-Value-capture/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Comma-quibbling b/Lang/Ada/Comma-quibbling
new file mode 120000
index 0000000000..ce7e90d883
--- /dev/null
+++ b/Lang/Ada/Comma-quibbling
@@ -0,0 +1 @@
+../../Task/Comma-quibbling/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Conjugate-transpose b/Lang/Ada/Conjugate-transpose
new file mode 120000
index 0000000000..ec88d5dfa5
--- /dev/null
+++ b/Lang/Ada/Conjugate-transpose
@@ -0,0 +1 @@
+../../Task/Conjugate-transpose/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Convert-decimal-number-to-rational b/Lang/Ada/Convert-decimal-number-to-rational
new file mode 120000
index 0000000000..706fb935d3
--- /dev/null
+++ b/Lang/Ada/Convert-decimal-number-to-rational
@@ -0,0 +1 @@
+../../Task/Convert-decimal-number-to-rational/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Digital-root-Multiplicative-digital-root b/Lang/Ada/Digital-root-Multiplicative-digital-root
new file mode 120000
index 0000000000..fed81e6601
--- /dev/null
+++ b/Lang/Ada/Digital-root-Multiplicative-digital-root
@@ -0,0 +1 @@
+../../Task/Digital-root-Multiplicative-digital-root/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Extensible-prime-generator b/Lang/Ada/Extensible-prime-generator
new file mode 120000
index 0000000000..d041b1107e
--- /dev/null
+++ b/Lang/Ada/Extensible-prime-generator
@@ -0,0 +1 @@
+../../Task/Extensible-prime-generator/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Fibonacci-word b/Lang/Ada/Fibonacci-word
new file mode 120000
index 0000000000..dcd89c3e11
--- /dev/null
+++ b/Lang/Ada/Fibonacci-word
@@ -0,0 +1 @@
+../../Task/Fibonacci-word/Ada
\ No newline at end of file
diff --git a/Lang/Ada/File-input-output b/Lang/Ada/File-input-output
new file mode 120000
index 0000000000..bf0c52f09c
--- /dev/null
+++ b/Lang/Ada/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Flipping-bits-game b/Lang/Ada/Flipping-bits-game
new file mode 120000
index 0000000000..c094926424
--- /dev/null
+++ b/Lang/Ada/Flipping-bits-game
@@ -0,0 +1 @@
+../../Task/Flipping-bits-game/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Fractran b/Lang/Ada/Fractran
new file mode 120000
index 0000000000..d37b2edd60
--- /dev/null
+++ b/Lang/Ada/Fractran
@@ -0,0 +1 @@
+../../Task/Fractran/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Generate-lower-case-ASCII-alphabet b/Lang/Ada/Generate-lower-case-ASCII-alphabet
new file mode 120000
index 0000000000..04ae7aa39b
--- /dev/null
+++ b/Lang/Ada/Generate-lower-case-ASCII-alphabet
@@ -0,0 +1 @@
+../../Task/Generate-lower-case-ASCII-alphabet/Ada
\ No newline at end of file
diff --git a/Lang/Ada/IBAN b/Lang/Ada/IBAN
new file mode 120000
index 0000000000..ab95454b62
--- /dev/null
+++ b/Lang/Ada/IBAN
@@ -0,0 +1 @@
+../../Task/IBAN/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Integer-overflow b/Lang/Ada/Integer-overflow
new file mode 120000
index 0000000000..ac7d5ff059
--- /dev/null
+++ b/Lang/Ada/Integer-overflow
@@ -0,0 +1 @@
+../../Task/Integer-overflow/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Magic-squares-of-odd-order b/Lang/Ada/Magic-squares-of-odd-order
new file mode 120000
index 0000000000..302125176c
--- /dev/null
+++ b/Lang/Ada/Magic-squares-of-odd-order
@@ -0,0 +1 @@
+../../Task/Magic-squares-of-odd-order/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Maximum-triangle-path-sum b/Lang/Ada/Maximum-triangle-path-sum
new file mode 120000
index 0000000000..83101e82b9
--- /dev/null
+++ b/Lang/Ada/Maximum-triangle-path-sum
@@ -0,0 +1 @@
+../../Task/Maximum-triangle-path-sum/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Move-to-front-algorithm b/Lang/Ada/Move-to-front-algorithm
new file mode 120000
index 0000000000..3c572b1c14
--- /dev/null
+++ b/Lang/Ada/Move-to-front-algorithm
@@ -0,0 +1 @@
+../../Task/Move-to-front-algorithm/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Munching-squares b/Lang/Ada/Munching-squares
new file mode 120000
index 0000000000..02be934d36
--- /dev/null
+++ b/Lang/Ada/Munching-squares
@@ -0,0 +1 @@
+../../Task/Munching-squares/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Narcissistic-decimal-number b/Lang/Ada/Narcissistic-decimal-number
new file mode 120000
index 0000000000..2b27e24b74
--- /dev/null
+++ b/Lang/Ada/Narcissistic-decimal-number
@@ -0,0 +1 @@
+../../Task/Narcissistic-decimal-number/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Nth b/Lang/Ada/Nth
new file mode 120000
index 0000000000..c2a9c95301
--- /dev/null
+++ b/Lang/Ada/Nth
@@ -0,0 +1 @@
+../../Task/Nth/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Odd-word-problem b/Lang/Ada/Odd-word-problem
new file mode 120000
index 0000000000..62eefb4656
--- /dev/null
+++ b/Lang/Ada/Odd-word-problem
@@ -0,0 +1 @@
+../../Task/Odd-word-problem/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Old-lady-swallowed-a-fly b/Lang/Ada/Old-lady-swallowed-a-fly
new file mode 120000
index 0000000000..a39e20779f
--- /dev/null
+++ b/Lang/Ada/Old-lady-swallowed-a-fly
@@ -0,0 +1 @@
+../../Task/Old-lady-swallowed-a-fly/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Pernicious-numbers b/Lang/Ada/Pernicious-numbers
new file mode 120000
index 0000000000..815360969f
--- /dev/null
+++ b/Lang/Ada/Pernicious-numbers
@@ -0,0 +1 @@
+../../Task/Pernicious-numbers/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Phrase-reversals b/Lang/Ada/Phrase-reversals
new file mode 120000
index 0000000000..289b7e6380
--- /dev/null
+++ b/Lang/Ada/Phrase-reversals
@@ -0,0 +1 @@
+../../Task/Phrase-reversals/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Rep-string b/Lang/Ada/Rep-string
new file mode 120000
index 0000000000..370a940d54
--- /dev/null
+++ b/Lang/Ada/Rep-string
@@ -0,0 +1 @@
+../../Task/Rep-string/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Reverse-words-in-a-string b/Lang/Ada/Reverse-words-in-a-string
new file mode 120000
index 0000000000..deaf334ced
--- /dev/null
+++ b/Lang/Ada/Reverse-words-in-a-string
@@ -0,0 +1 @@
+../../Task/Reverse-words-in-a-string/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Runge-Kutta-method b/Lang/Ada/Runge-Kutta-method
new file mode 120000
index 0000000000..6ee8130973
--- /dev/null
+++ b/Lang/Ada/Runge-Kutta-method
@@ -0,0 +1 @@
+../../Task/Runge-Kutta-method/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Semiprime b/Lang/Ada/Semiprime
new file mode 120000
index 0000000000..8e42c8763f
--- /dev/null
+++ b/Lang/Ada/Semiprime
@@ -0,0 +1 @@
+../../Task/Semiprime/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Sequence-of-primes-by-Trial-Division b/Lang/Ada/Sequence-of-primes-by-Trial-Division
new file mode 120000
index 0000000000..5a2a2ba5c4
--- /dev/null
+++ b/Lang/Ada/Sequence-of-primes-by-Trial-Division
@@ -0,0 +1 @@
+../../Task/Sequence-of-primes-by-Trial-Division/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Solve-a-Holy-Knights-tour b/Lang/Ada/Solve-a-Holy-Knights-tour
new file mode 120000
index 0000000000..983ebf3d1d
--- /dev/null
+++ b/Lang/Ada/Solve-a-Holy-Knights-tour
@@ -0,0 +1 @@
+../../Task/Solve-a-Holy-Knights-tour/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Solve-the-no-connection-puzzle b/Lang/Ada/Solve-the-no-connection-puzzle
new file mode 120000
index 0000000000..ebfa9fe26d
--- /dev/null
+++ b/Lang/Ada/Solve-the-no-connection-puzzle
@@ -0,0 +1 @@
+../../Task/Solve-the-no-connection-puzzle/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Statistics-Basic b/Lang/Ada/Statistics-Basic
new file mode 120000
index 0000000000..ae0b0d2c60
--- /dev/null
+++ b/Lang/Ada/Statistics-Basic
@@ -0,0 +1 @@
+../../Task/Statistics-Basic/Ada
\ No newline at end of file
diff --git a/Lang/Ada/String-matching b/Lang/Ada/String-matching
new file mode 120000
index 0000000000..390aad9fb6
--- /dev/null
+++ b/Lang/Ada/String-matching
@@ -0,0 +1 @@
+../../Task/String-matching/Ada
\ No newline at end of file
diff --git a/Lang/Ada/The-Twelve-Days-of-Christmas b/Lang/Ada/The-Twelve-Days-of-Christmas
new file mode 120000
index 0000000000..5ad9283788
--- /dev/null
+++ b/Lang/Ada/The-Twelve-Days-of-Christmas
@@ -0,0 +1 @@
+../../Task/The-Twelve-Days-of-Christmas/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Ulam-spiral--for-primes- b/Lang/Ada/Ulam-spiral--for-primes-
new file mode 120000
index 0000000000..e925579c05
--- /dev/null
+++ b/Lang/Ada/Ulam-spiral--for-primes-
@@ -0,0 +1 @@
+../../Task/Ulam-spiral--for-primes-/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Unix-ls b/Lang/Ada/Unix-ls
new file mode 120000
index 0000000000..07b19b446a
--- /dev/null
+++ b/Lang/Ada/Unix-ls
@@ -0,0 +1 @@
+../../Task/Unix-ls/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Zero-to-the-zero-power b/Lang/Ada/Zero-to-the-zero-power
new file mode 120000
index 0000000000..dfeb3816cf
--- /dev/null
+++ b/Lang/Ada/Zero-to-the-zero-power
@@ -0,0 +1 @@
+../../Task/Zero-to-the-zero-power/Ada
\ No newline at end of file
diff --git a/Lang/Aime/Benfords-law b/Lang/Aime/Benfords-law
new file mode 120000
index 0000000000..d8ae3ba4c8
--- /dev/null
+++ b/Lang/Aime/Benfords-law
@@ -0,0 +1 @@
+../../Task/Benfords-law/Aime
\ No newline at end of file
diff --git a/Lang/Aime/File-input-output b/Lang/Aime/File-input-output
new file mode 120000
index 0000000000..f7292c4c91
--- /dev/null
+++ b/Lang/Aime/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/Aime
\ No newline at end of file
diff --git a/Lang/Aime/Reverse-words-in-a-string b/Lang/Aime/Reverse-words-in-a-string
new file mode 120000
index 0000000000..14dd7aebd7
--- /dev/null
+++ b/Lang/Aime/Reverse-words-in-a-string
@@ -0,0 +1 @@
+../../Task/Reverse-words-in-a-string/Aime
\ No newline at end of file
diff --git a/Lang/Aime/String-matching b/Lang/Aime/String-matching
new file mode 120000
index 0000000000..687ca57010
--- /dev/null
+++ b/Lang/Aime/String-matching
@@ -0,0 +1 @@
+../../Task/String-matching/Aime
\ No newline at end of file
diff --git a/Lang/AppleScript/File-input-output b/Lang/AppleScript/File-input-output
new file mode 120000
index 0000000000..57d9ecd16e
--- /dev/null
+++ b/Lang/AppleScript/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/AppleScript
\ No newline at end of file
diff --git a/Lang/Applesoft-BASIC/Generate-lower-case-ASCII-alphabet b/Lang/Applesoft-BASIC/Generate-lower-case-ASCII-alphabet
new file mode 120000
index 0000000000..07fb99bcc3
--- /dev/null
+++ b/Lang/Applesoft-BASIC/Generate-lower-case-ASCII-alphabet
@@ -0,0 +1 @@
+../../Task/Generate-lower-case-ASCII-alphabet/Applesoft-BASIC
\ No newline at end of file
diff --git a/Lang/Applesoft-BASIC/Nth b/Lang/Applesoft-BASIC/Nth
new file mode 120000
index 0000000000..241adc7d21
--- /dev/null
+++ b/Lang/Applesoft-BASIC/Nth
@@ -0,0 +1 @@
+../../Task/Nth/Applesoft-BASIC
\ No newline at end of file
diff --git a/Lang/Applesoft-BASIC/Reverse-words-in-a-string b/Lang/Applesoft-BASIC/Reverse-words-in-a-string
new file mode 120000
index 0000000000..2641c17abb
--- /dev/null
+++ b/Lang/Applesoft-BASIC/Reverse-words-in-a-string
@@ -0,0 +1 @@
+../../Task/Reverse-words-in-a-string/Applesoft-BASIC
\ No newline at end of file
diff --git a/Lang/AutoHotkey/9-billion-names-of-God-the-integer b/Lang/AutoHotkey/9-billion-names-of-God-the-integer
new file mode 120000
index 0000000000..fb9c06b127
--- /dev/null
+++ b/Lang/AutoHotkey/9-billion-names-of-God-the-integer
@@ -0,0 +1 @@
+../../Task/9-billion-names-of-God-the-integer/AutoHotkey
\ No newline at end of file
diff --git a/Lang/AutoHotkey/ABC-Problem b/Lang/AutoHotkey/ABC-Problem
new file mode 120000
index 0000000000..2214268f2b
--- /dev/null
+++ b/Lang/AutoHotkey/ABC-Problem
@@ -0,0 +1 @@
+../../Task/ABC-Problem/AutoHotkey
\ No newline at end of file
diff --git a/Lang/AutoHotkey/AKS-test-for-primes b/Lang/AutoHotkey/AKS-test-for-primes
new file mode 120000
index 0000000000..b56ca21e15
--- /dev/null
+++ b/Lang/AutoHotkey/AKS-test-for-primes
@@ -0,0 +1 @@
+../../Task/AKS-test-for-primes/AutoHotkey
\ No newline at end of file
diff --git a/Lang/AutoHotkey/Abundant,-deficient-and-perfect-number-classifications b/Lang/AutoHotkey/Abundant,-deficient-and-perfect-number-classifications
new file mode 120000
index 0000000000..d5fa490c12
--- /dev/null
+++ b/Lang/AutoHotkey/Abundant,-deficient-and-perfect-number-classifications
@@ -0,0 +1 @@
+../../Task/Abundant,-deficient-and-perfect-number-classifications/AutoHotkey
\ No newline at end of file
diff --git a/Lang/AutoHotkey/Almost-prime b/Lang/AutoHotkey/Almost-prime
new file mode 120000
index 0000000000..780c4632db
--- /dev/null
+++ b/Lang/AutoHotkey/Almost-prime
@@ -0,0 +1 @@
+../../Task/Almost-prime/AutoHotkey
\ No newline at end of file
diff --git a/Lang/AutoHotkey/Amb b/Lang/AutoHotkey/Amb
new file mode 120000
index 0000000000..c4c84e6da3
--- /dev/null
+++ b/Lang/AutoHotkey/Amb
@@ -0,0 +1 @@
+../../Task/Amb/AutoHotkey
\ No newline at end of file
diff --git a/Lang/AutoHotkey/Amicable-pairs b/Lang/AutoHotkey/Amicable-pairs
new file mode 120000
index 0000000000..18e5eebfa5
--- /dev/null
+++ b/Lang/AutoHotkey/Amicable-pairs
@@ -0,0 +1 @@
+../../Task/Amicable-pairs/AutoHotkey
\ No newline at end of file
diff --git a/Lang/AutoHotkey/Benfords-law b/Lang/AutoHotkey/Benfords-law
new file mode 120000
index 0000000000..329ef3b698
--- /dev/null
+++ b/Lang/AutoHotkey/Benfords-law
@@ -0,0 +1 @@
+../../Task/Benfords-law/AutoHotkey
\ No newline at end of file
diff --git a/Lang/AutoHotkey/CSV-data-manipulation b/Lang/AutoHotkey/CSV-data-manipulation
new file mode 120000
index 0000000000..a218f28bc3
--- /dev/null
+++ b/Lang/AutoHotkey/CSV-data-manipulation
@@ -0,0 +1 @@
+../../Task/CSV-data-manipulation/AutoHotkey
\ No newline at end of file
diff --git a/Lang/AutoHotkey/Calendar---for-REAL-programmers b/Lang/AutoHotkey/Calendar---for-REAL-programmers
new file mode 120000
index 0000000000..1158cc2653
--- /dev/null
+++ b/Lang/AutoHotkey/Calendar---for-REAL-programmers
@@ -0,0 +1 @@
+../../Task/Calendar---for-REAL-programmers/AutoHotkey
\ No newline at end of file
diff --git a/Lang/AutoHotkey/Catalan-numbers-Pascals-triangle b/Lang/AutoHotkey/Catalan-numbers-Pascals-triangle
new file mode 120000
index 0000000000..f3ecfae064
--- /dev/null
+++ b/Lang/AutoHotkey/Catalan-numbers-Pascals-triangle
@@ -0,0 +1 @@
+../../Task/Catalan-numbers-Pascals-triangle/AutoHotkey
\ No newline at end of file
diff --git a/Lang/AutoHotkey/Circles-of-given-radius-through-two-points b/Lang/AutoHotkey/Circles-of-given-radius-through-two-points
new file mode 120000
index 0000000000..e81012edb1
--- /dev/null
+++ b/Lang/AutoHotkey/Circles-of-given-radius-through-two-points
@@ -0,0 +1 @@
+../../Task/Circles-of-given-radius-through-two-points/AutoHotkey
\ No newline at end of file
diff --git a/Lang/AutoHotkey/Comma-quibbling b/Lang/AutoHotkey/Comma-quibbling
new file mode 120000
index 0000000000..df24c28740
--- /dev/null
+++ b/Lang/AutoHotkey/Comma-quibbling
@@ -0,0 +1 @@
+../../Task/Comma-quibbling/AutoHotkey
\ No newline at end of file
diff --git a/Lang/AutoHotkey/Convert-decimal-number-to-rational b/Lang/AutoHotkey/Convert-decimal-number-to-rational
new file mode 120000
index 0000000000..69c1b99e84
--- /dev/null
+++ b/Lang/AutoHotkey/Convert-decimal-number-to-rational
@@ -0,0 +1 @@
+../../Task/Convert-decimal-number-to-rational/AutoHotkey
\ No newline at end of file
diff --git a/Lang/AutoHotkey/Draw-a-clock b/Lang/AutoHotkey/Draw-a-clock
new file mode 120000
index 0000000000..2fcd180125
--- /dev/null
+++ b/Lang/AutoHotkey/Draw-a-clock
@@ -0,0 +1 @@
+../../Task/Draw-a-clock/AutoHotkey
\ No newline at end of file
diff --git a/Lang/AutoHotkey/Extensible-prime-generator b/Lang/AutoHotkey/Extensible-prime-generator
new file mode 120000
index 0000000000..d43a1dc8c6
--- /dev/null
+++ b/Lang/AutoHotkey/Extensible-prime-generator
@@ -0,0 +1 @@
+../../Task/Extensible-prime-generator/AutoHotkey
\ No newline at end of file
diff --git a/Lang/AutoHotkey/Fibonacci-word b/Lang/AutoHotkey/Fibonacci-word
new file mode 120000
index 0000000000..4efc4dea27
--- /dev/null
+++ b/Lang/AutoHotkey/Fibonacci-word
@@ -0,0 +1 @@
+../../Task/Fibonacci-word/AutoHotkey
\ No newline at end of file
diff --git a/Lang/AutoHotkey/Fibonacci-word-fractal b/Lang/AutoHotkey/Fibonacci-word-fractal
new file mode 120000
index 0000000000..5d6234f5b4
--- /dev/null
+++ b/Lang/AutoHotkey/Fibonacci-word-fractal
@@ -0,0 +1 @@
+../../Task/Fibonacci-word-fractal/AutoHotkey
\ No newline at end of file
diff --git a/Lang/AutoHotkey/File-input-output b/Lang/AutoHotkey/File-input-output
new file mode 120000
index 0000000000..02089c6301
--- /dev/null
+++ b/Lang/AutoHotkey/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/AutoHotkey
\ No newline at end of file
diff --git a/Lang/AutoHotkey/Find-the-last-Sunday-of-each-month b/Lang/AutoHotkey/Find-the-last-Sunday-of-each-month
new file mode 120000
index 0000000000..dd20ddb868
--- /dev/null
+++ b/Lang/AutoHotkey/Find-the-last-Sunday-of-each-month
@@ -0,0 +1 @@
+../../Task/Find-the-last-Sunday-of-each-month/AutoHotkey
\ No newline at end of file
diff --git a/Lang/AutoHotkey/Flipping-bits-game b/Lang/AutoHotkey/Flipping-bits-game
new file mode 120000
index 0000000000..d12aa3b5b0
--- /dev/null
+++ b/Lang/AutoHotkey/Flipping-bits-game
@@ -0,0 +1 @@
+../../Task/Flipping-bits-game/AutoHotkey
\ No newline at end of file
diff --git a/Lang/AutoHotkey/Fractran b/Lang/AutoHotkey/Fractran
new file mode 120000
index 0000000000..f561542b7a
--- /dev/null
+++ b/Lang/AutoHotkey/Fractran
@@ -0,0 +1 @@
+../../Task/Fractran/AutoHotkey
\ No newline at end of file
diff --git a/Lang/AutoHotkey/Generate-Chess960-starting-position b/Lang/AutoHotkey/Generate-Chess960-starting-position
new file mode 120000
index 0000000000..bfff0c26dc
--- /dev/null
+++ b/Lang/AutoHotkey/Generate-Chess960-starting-position
@@ -0,0 +1 @@
+../../Task/Generate-Chess960-starting-position/AutoHotkey
\ No newline at end of file
diff --git a/Lang/AutoHotkey/Generate-lower-case-ASCII-alphabet b/Lang/AutoHotkey/Generate-lower-case-ASCII-alphabet
new file mode 120000
index 0000000000..656a28acb3
--- /dev/null
+++ b/Lang/AutoHotkey/Generate-lower-case-ASCII-alphabet
@@ -0,0 +1 @@
+../../Task/Generate-lower-case-ASCII-alphabet/AutoHotkey
\ No newline at end of file
diff --git a/Lang/AutoHotkey/Hello-world-Newbie b/Lang/AutoHotkey/Hello-world-Newbie
new file mode 120000
index 0000000000..142896b0f3
--- /dev/null
+++ b/Lang/AutoHotkey/Hello-world-Newbie
@@ -0,0 +1 @@
+../../Task/Hello-world-Newbie/AutoHotkey
\ No newline at end of file
diff --git a/Lang/AutoHotkey/IBAN b/Lang/AutoHotkey/IBAN
new file mode 120000
index 0000000000..78674522e4
--- /dev/null
+++ b/Lang/AutoHotkey/IBAN
@@ -0,0 +1 @@
+../../Task/IBAN/AutoHotkey
\ No newline at end of file
diff --git a/Lang/AutoHotkey/Integer-overflow b/Lang/AutoHotkey/Integer-overflow
new file mode 120000
index 0000000000..f8bf3cf288
--- /dev/null
+++ b/Lang/AutoHotkey/Integer-overflow
@@ -0,0 +1 @@
+../../Task/Integer-overflow/AutoHotkey
\ No newline at end of file
diff --git a/Lang/AutoHotkey/Longest-increasing-subsequence b/Lang/AutoHotkey/Longest-increasing-subsequence
new file mode 120000
index 0000000000..e4f77089ad
--- /dev/null
+++ b/Lang/AutoHotkey/Longest-increasing-subsequence
@@ -0,0 +1 @@
+../../Task/Longest-increasing-subsequence/AutoHotkey
\ No newline at end of file
diff --git a/Lang/AutoHotkey/Ludic-numbers b/Lang/AutoHotkey/Ludic-numbers
new file mode 120000
index 0000000000..399c5fbb4a
--- /dev/null
+++ b/Lang/AutoHotkey/Ludic-numbers
@@ -0,0 +1 @@
+../../Task/Ludic-numbers/AutoHotkey
\ No newline at end of file
diff --git a/Lang/AutoHotkey/Machine-code b/Lang/AutoHotkey/Machine-code
new file mode 120000
index 0000000000..df463efb1c
--- /dev/null
+++ b/Lang/AutoHotkey/Machine-code
@@ -0,0 +1 @@
+../../Task/Machine-code/AutoHotkey
\ No newline at end of file
diff --git a/Lang/AutoHotkey/Magic-squares-of-odd-order b/Lang/AutoHotkey/Magic-squares-of-odd-order
new file mode 120000
index 0000000000..b014f0a401
--- /dev/null
+++ b/Lang/AutoHotkey/Magic-squares-of-odd-order
@@ -0,0 +1 @@
+../../Task/Magic-squares-of-odd-order/AutoHotkey
\ No newline at end of file
diff --git a/Lang/AutoHotkey/Narcissistic-decimal-number b/Lang/AutoHotkey/Narcissistic-decimal-number
new file mode 120000
index 0000000000..29b2ae7cbf
--- /dev/null
+++ b/Lang/AutoHotkey/Narcissistic-decimal-number
@@ -0,0 +1 @@
+../../Task/Narcissistic-decimal-number/AutoHotkey
\ No newline at end of file
diff --git a/Lang/AutoHotkey/Nth b/Lang/AutoHotkey/Nth
new file mode 120000
index 0000000000..14414e0ffc
--- /dev/null
+++ b/Lang/AutoHotkey/Nth
@@ -0,0 +1 @@
+../../Task/Nth/AutoHotkey
\ No newline at end of file
diff --git a/Lang/AutoHotkey/Old-lady-swallowed-a-fly b/Lang/AutoHotkey/Old-lady-swallowed-a-fly
new file mode 120000
index 0000000000..17a9143732
--- /dev/null
+++ b/Lang/AutoHotkey/Old-lady-swallowed-a-fly
@@ -0,0 +1 @@
+../../Task/Old-lady-swallowed-a-fly/AutoHotkey
\ No newline at end of file
diff --git a/Lang/AutoHotkey/Order-disjoint-list-items b/Lang/AutoHotkey/Order-disjoint-list-items
new file mode 120000
index 0000000000..37abd6cfff
--- /dev/null
+++ b/Lang/AutoHotkey/Order-disjoint-list-items
@@ -0,0 +1 @@
+../../Task/Order-disjoint-list-items/AutoHotkey
\ No newline at end of file
diff --git a/Lang/AutoHotkey/Pernicious-numbers b/Lang/AutoHotkey/Pernicious-numbers
new file mode 120000
index 0000000000..4e0ae12882
--- /dev/null
+++ b/Lang/AutoHotkey/Pernicious-numbers
@@ -0,0 +1 @@
+../../Task/Pernicious-numbers/AutoHotkey
\ No newline at end of file
diff --git a/Lang/AutoHotkey/Phrase-reversals b/Lang/AutoHotkey/Phrase-reversals
new file mode 120000
index 0000000000..75f13b0bd8
--- /dev/null
+++ b/Lang/AutoHotkey/Phrase-reversals
@@ -0,0 +1 @@
+../../Task/Phrase-reversals/AutoHotkey
\ No newline at end of file
diff --git a/Lang/AutoHotkey/Quickselect-algorithm b/Lang/AutoHotkey/Quickselect-algorithm
new file mode 120000
index 0000000000..d553dfd7c3
--- /dev/null
+++ b/Lang/AutoHotkey/Quickselect-algorithm
@@ -0,0 +1 @@
+../../Task/Quickselect-algorithm/AutoHotkey
\ No newline at end of file
diff --git a/Lang/AutoHotkey/Rep-string b/Lang/AutoHotkey/Rep-string
new file mode 120000
index 0000000000..e13f9cbecc
--- /dev/null
+++ b/Lang/AutoHotkey/Rep-string
@@ -0,0 +1 @@
+../../Task/Rep-string/AutoHotkey
\ No newline at end of file
diff --git a/Lang/AutoHotkey/Reverse-words-in-a-string b/Lang/AutoHotkey/Reverse-words-in-a-string
new file mode 120000
index 0000000000..684283a9a1
--- /dev/null
+++ b/Lang/AutoHotkey/Reverse-words-in-a-string
@@ -0,0 +1 @@
+../../Task/Reverse-words-in-a-string/AutoHotkey
\ No newline at end of file
diff --git a/Lang/AutoHotkey/Rosetta-Code-Find-bare-lang-tags b/Lang/AutoHotkey/Rosetta-Code-Find-bare-lang-tags
new file mode 120000
index 0000000000..7617e8307d
--- /dev/null
+++ b/Lang/AutoHotkey/Rosetta-Code-Find-bare-lang-tags
@@ -0,0 +1 @@
+../../Task/Rosetta-Code-Find-bare-lang-tags/AutoHotkey
\ No newline at end of file
diff --git a/Lang/AutoHotkey/Semiprime b/Lang/AutoHotkey/Semiprime
new file mode 120000
index 0000000000..3d6bc09d1b
--- /dev/null
+++ b/Lang/AutoHotkey/Semiprime
@@ -0,0 +1 @@
+../../Task/Semiprime/AutoHotkey
\ No newline at end of file
diff --git a/Lang/AutoHotkey/Sparkline-in-unicode b/Lang/AutoHotkey/Sparkline-in-unicode
new file mode 120000
index 0000000000..cfa4c3392e
--- /dev/null
+++ b/Lang/AutoHotkey/Sparkline-in-unicode
@@ -0,0 +1 @@
+../../Task/Sparkline-in-unicode/AutoHotkey
\ No newline at end of file
diff --git a/Lang/AutoHotkey/String-append b/Lang/AutoHotkey/String-append
new file mode 120000
index 0000000000..f8c7cacc83
--- /dev/null
+++ b/Lang/AutoHotkey/String-append
@@ -0,0 +1 @@
+../../Task/String-append/AutoHotkey
\ No newline at end of file
diff --git a/Lang/AutoHotkey/String-matching b/Lang/AutoHotkey/String-matching
new file mode 120000
index 0000000000..9ac0489f48
--- /dev/null
+++ b/Lang/AutoHotkey/String-matching
@@ -0,0 +1 @@
+../../Task/String-matching/AutoHotkey
\ No newline at end of file
diff --git a/Lang/AutoHotkey/String-prepend b/Lang/AutoHotkey/String-prepend
new file mode 120000
index 0000000000..b230c92e13
--- /dev/null
+++ b/Lang/AutoHotkey/String-prepend
@@ -0,0 +1 @@
+../../Task/String-prepend/AutoHotkey
\ No newline at end of file
diff --git a/Lang/AutoHotkey/Sum-multiples-of-3-and-5 b/Lang/AutoHotkey/Sum-multiples-of-3-and-5
new file mode 120000
index 0000000000..a0ab49c8b3
--- /dev/null
+++ b/Lang/AutoHotkey/Sum-multiples-of-3-and-5
@@ -0,0 +1 @@
+../../Task/Sum-multiples-of-3-and-5/AutoHotkey
\ No newline at end of file
diff --git a/Lang/AutoHotkey/The-Twelve-Days-of-Christmas b/Lang/AutoHotkey/The-Twelve-Days-of-Christmas
new file mode 120000
index 0000000000..24b21edd51
--- /dev/null
+++ b/Lang/AutoHotkey/The-Twelve-Days-of-Christmas
@@ -0,0 +1 @@
+../../Task/The-Twelve-Days-of-Christmas/AutoHotkey
\ No newline at end of file
diff --git a/Lang/AutoHotkey/Zero-to-the-zero-power b/Lang/AutoHotkey/Zero-to-the-zero-power
new file mode 120000
index 0000000000..05b636b347
--- /dev/null
+++ b/Lang/AutoHotkey/Zero-to-the-zero-power
@@ -0,0 +1 @@
+../../Task/Zero-to-the-zero-power/AutoHotkey
\ No newline at end of file
diff --git a/Lang/AutoHotkey/Zhang-Suen-thinning-algorithm b/Lang/AutoHotkey/Zhang-Suen-thinning-algorithm
new file mode 120000
index 0000000000..bf9ab60f1d
--- /dev/null
+++ b/Lang/AutoHotkey/Zhang-Suen-thinning-algorithm
@@ -0,0 +1 @@
+../../Task/Zhang-Suen-thinning-algorithm/AutoHotkey
\ No newline at end of file
diff --git a/Lang/AutoIt/String-matching b/Lang/AutoIt/String-matching
new file mode 120000
index 0000000000..31f39c11d3
--- /dev/null
+++ b/Lang/AutoIt/String-matching
@@ -0,0 +1 @@
+../../Task/String-matching/AutoIt
\ No newline at end of file
diff --git a/Lang/Axiom/Closures-Value-capture b/Lang/Axiom/Closures-Value-capture
new file mode 120000
index 0000000000..d625f11eb5
--- /dev/null
+++ b/Lang/Axiom/Closures-Value-capture
@@ -0,0 +1 @@
+../../Task/Closures-Value-capture/Axiom
\ No newline at end of file
diff --git a/Lang/BASIC/Circles-of-given-radius-through-two-points b/Lang/BASIC/Circles-of-given-radius-through-two-points
new file mode 120000
index 0000000000..74b568825e
--- /dev/null
+++ b/Lang/BASIC/Circles-of-given-radius-through-two-points
@@ -0,0 +1 @@
+../../Task/Circles-of-given-radius-through-two-points/BASIC
\ No newline at end of file
diff --git a/Lang/BASIC/File-input-output b/Lang/BASIC/File-input-output
new file mode 120000
index 0000000000..88cc5c1a8d
--- /dev/null
+++ b/Lang/BASIC/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/BASIC
\ No newline at end of file
diff --git a/Lang/BASIC/Runge-Kutta-method b/Lang/BASIC/Runge-Kutta-method
new file mode 120000
index 0000000000..7b27a16010
--- /dev/null
+++ b/Lang/BASIC/Runge-Kutta-method
@@ -0,0 +1 @@
+../../Task/Runge-Kutta-method/BASIC
\ No newline at end of file
diff --git a/Lang/BASIC/String-append b/Lang/BASIC/String-append
new file mode 120000
index 0000000000..f1e07a21b9
--- /dev/null
+++ b/Lang/BASIC/String-append
@@ -0,0 +1 @@
+../../Task/String-append/BASIC
\ No newline at end of file
diff --git a/Lang/BASIC/String-matching b/Lang/BASIC/String-matching
new file mode 120000
index 0000000000..364ed61428
--- /dev/null
+++ b/Lang/BASIC/String-matching
@@ -0,0 +1 @@
+../../Task/String-matching/BASIC
\ No newline at end of file
diff --git a/Lang/BASIC/String-prepend b/Lang/BASIC/String-prepend
new file mode 120000
index 0000000000..7601eb5216
--- /dev/null
+++ b/Lang/BASIC/String-prepend
@@ -0,0 +1 @@
+../../Task/String-prepend/BASIC
\ No newline at end of file
diff --git a/Lang/BBC-BASIC/ABC-Problem b/Lang/BBC-BASIC/ABC-Problem
new file mode 120000
index 0000000000..233eed606b
--- /dev/null
+++ b/Lang/BBC-BASIC/ABC-Problem
@@ -0,0 +1 @@
+../../Task/ABC-Problem/BBC-BASIC
\ No newline at end of file
diff --git a/Lang/BBC-BASIC/Calendar---for-REAL-programmers b/Lang/BBC-BASIC/Calendar---for-REAL-programmers
new file mode 120000
index 0000000000..8862e004c1
--- /dev/null
+++ b/Lang/BBC-BASIC/Calendar---for-REAL-programmers
@@ -0,0 +1 @@
+../../Task/Calendar---for-REAL-programmers/BBC-BASIC
\ No newline at end of file
diff --git a/Lang/BBC-BASIC/File-input-output b/Lang/BBC-BASIC/File-input-output
new file mode 120000
index 0000000000..23e89931ad
--- /dev/null
+++ b/Lang/BBC-BASIC/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/BBC-BASIC
\ No newline at end of file
diff --git a/Lang/BBC-BASIC/Find-the-last-Sunday-of-each-month b/Lang/BBC-BASIC/Find-the-last-Sunday-of-each-month
new file mode 120000
index 0000000000..f445c096f0
--- /dev/null
+++ b/Lang/BBC-BASIC/Find-the-last-Sunday-of-each-month
@@ -0,0 +1 @@
+../../Task/Find-the-last-Sunday-of-each-month/BBC-BASIC
\ No newline at end of file
diff --git a/Lang/BBC-BASIC/Generate-lower-case-ASCII-alphabet b/Lang/BBC-BASIC/Generate-lower-case-ASCII-alphabet
new file mode 120000
index 0000000000..19bbed8353
--- /dev/null
+++ b/Lang/BBC-BASIC/Generate-lower-case-ASCII-alphabet
@@ -0,0 +1 @@
+../../Task/Generate-lower-case-ASCII-alphabet/BBC-BASIC
\ No newline at end of file
diff --git a/Lang/BBC-BASIC/IBAN b/Lang/BBC-BASIC/IBAN
new file mode 120000
index 0000000000..52a4a62cd7
--- /dev/null
+++ b/Lang/BBC-BASIC/IBAN
@@ -0,0 +1 @@
+../../Task/IBAN/BBC-BASIC
\ No newline at end of file
diff --git a/Lang/BBC-BASIC/Machine-code b/Lang/BBC-BASIC/Machine-code
new file mode 120000
index 0000000000..bf3436f0a4
--- /dev/null
+++ b/Lang/BBC-BASIC/Machine-code
@@ -0,0 +1 @@
+../../Task/Machine-code/BBC-BASIC
\ No newline at end of file
diff --git a/Lang/BBC-BASIC/Nth b/Lang/BBC-BASIC/Nth
new file mode 120000
index 0000000000..0b0ab858c8
--- /dev/null
+++ b/Lang/BBC-BASIC/Nth
@@ -0,0 +1 @@
+../../Task/Nth/BBC-BASIC
\ No newline at end of file
diff --git a/Lang/BBC-BASIC/Reverse-words-in-a-string b/Lang/BBC-BASIC/Reverse-words-in-a-string
new file mode 120000
index 0000000000..2d91cb46b6
--- /dev/null
+++ b/Lang/BBC-BASIC/Reverse-words-in-a-string
@@ -0,0 +1 @@
+../../Task/Reverse-words-in-a-string/BBC-BASIC
\ No newline at end of file
diff --git a/Lang/BBC-BASIC/String-matching b/Lang/BBC-BASIC/String-matching
new file mode 120000
index 0000000000..6a5b2550f2
--- /dev/null
+++ b/Lang/BBC-BASIC/String-matching
@@ -0,0 +1 @@
+../../Task/String-matching/BBC-BASIC
\ No newline at end of file
diff --git a/Lang/Babel/Closures-Value-capture b/Lang/Babel/Closures-Value-capture
new file mode 120000
index 0000000000..ed6bc23bfe
--- /dev/null
+++ b/Lang/Babel/Closures-Value-capture
@@ -0,0 +1 @@
+../../Task/Closures-Value-capture/Babel
\ No newline at end of file
diff --git a/Lang/Babel/File-input-output b/Lang/Babel/File-input-output
new file mode 120000
index 0000000000..d0cd5bf227
--- /dev/null
+++ b/Lang/Babel/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/Babel
\ No newline at end of file
diff --git a/Lang/Babel/Nth b/Lang/Babel/Nth
new file mode 120000
index 0000000000..580b9e31d8
--- /dev/null
+++ b/Lang/Babel/Nth
@@ -0,0 +1 @@
+../../Task/Nth/Babel
\ No newline at end of file
diff --git a/Lang/Babel/Old-lady-swallowed-a-fly b/Lang/Babel/Old-lady-swallowed-a-fly
new file mode 120000
index 0000000000..7630f31062
--- /dev/null
+++ b/Lang/Babel/Old-lady-swallowed-a-fly
@@ -0,0 +1 @@
+../../Task/Old-lady-swallowed-a-fly/Babel
\ No newline at end of file
diff --git a/Lang/Batch-File/ABC-Problem b/Lang/Batch-File/ABC-Problem
new file mode 120000
index 0000000000..51e7233298
--- /dev/null
+++ b/Lang/Batch-File/ABC-Problem
@@ -0,0 +1 @@
+../../Task/ABC-Problem/Batch-File
\ No newline at end of file
diff --git a/Lang/Batch-File/Catalan-numbers-Pascals-triangle b/Lang/Batch-File/Catalan-numbers-Pascals-triangle
new file mode 120000
index 0000000000..bea743141b
--- /dev/null
+++ b/Lang/Batch-File/Catalan-numbers-Pascals-triangle
@@ -0,0 +1 @@
+../../Task/Catalan-numbers-Pascals-triangle/Batch-File
\ No newline at end of file
diff --git a/Lang/Batch-File/File-input-output b/Lang/Batch-File/File-input-output
new file mode 120000
index 0000000000..c95b17b313
--- /dev/null
+++ b/Lang/Batch-File/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/Batch-File
\ No newline at end of file
diff --git a/Lang/Befunge/File-input-output b/Lang/Befunge/File-input-output
new file mode 120000
index 0000000000..5fb27c8b14
--- /dev/null
+++ b/Lang/Befunge/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/Befunge
\ No newline at end of file
diff --git a/Lang/Bracmat/ABC-Problem b/Lang/Bracmat/ABC-Problem
new file mode 120000
index 0000000000..51a5310324
--- /dev/null
+++ b/Lang/Bracmat/ABC-Problem
@@ -0,0 +1 @@
+../../Task/ABC-Problem/Bracmat
\ No newline at end of file
diff --git a/Lang/Bracmat/AKS-test-for-primes b/Lang/Bracmat/AKS-test-for-primes
new file mode 120000
index 0000000000..7cfad10773
--- /dev/null
+++ b/Lang/Bracmat/AKS-test-for-primes
@@ -0,0 +1 @@
+../../Task/AKS-test-for-primes/Bracmat
\ No newline at end of file
diff --git a/Lang/Bracmat/Amb b/Lang/Bracmat/Amb
new file mode 120000
index 0000000000..ae8706e8ff
--- /dev/null
+++ b/Lang/Bracmat/Amb
@@ -0,0 +1 @@
+../../Task/Amb/Bracmat
\ No newline at end of file
diff --git a/Lang/Bracmat/Catamorphism b/Lang/Bracmat/Catamorphism
new file mode 120000
index 0000000000..d65e448502
--- /dev/null
+++ b/Lang/Bracmat/Catamorphism
@@ -0,0 +1 @@
+../../Task/Catamorphism/Bracmat
\ No newline at end of file
diff --git a/Lang/Bracmat/Chinese-remainder-theorem b/Lang/Bracmat/Chinese-remainder-theorem
new file mode 120000
index 0000000000..bf7b677f05
--- /dev/null
+++ b/Lang/Bracmat/Chinese-remainder-theorem
@@ -0,0 +1 @@
+../../Task/Chinese-remainder-theorem/Bracmat
\ No newline at end of file
diff --git a/Lang/Bracmat/Closures-Value-capture b/Lang/Bracmat/Closures-Value-capture
new file mode 120000
index 0000000000..47f5797153
--- /dev/null
+++ b/Lang/Bracmat/Closures-Value-capture
@@ -0,0 +1 @@
+../../Task/Closures-Value-capture/Bracmat
\ No newline at end of file
diff --git a/Lang/Bracmat/Combinations-and-permutations b/Lang/Bracmat/Combinations-and-permutations
new file mode 120000
index 0000000000..280c89cd0a
--- /dev/null
+++ b/Lang/Bracmat/Combinations-and-permutations
@@ -0,0 +1 @@
+../../Task/Combinations-and-permutations/Bracmat
\ No newline at end of file
diff --git a/Lang/Bracmat/Convert-decimal-number-to-rational b/Lang/Bracmat/Convert-decimal-number-to-rational
new file mode 120000
index 0000000000..a4c5c67914
--- /dev/null
+++ b/Lang/Bracmat/Convert-decimal-number-to-rational
@@ -0,0 +1 @@
+../../Task/Convert-decimal-number-to-rational/Bracmat
\ No newline at end of file
diff --git a/Lang/Bracmat/Digital-root-Multiplicative-digital-root b/Lang/Bracmat/Digital-root-Multiplicative-digital-root
new file mode 120000
index 0000000000..e060e22fb6
--- /dev/null
+++ b/Lang/Bracmat/Digital-root-Multiplicative-digital-root
@@ -0,0 +1 @@
+../../Task/Digital-root-Multiplicative-digital-root/Bracmat
\ No newline at end of file
diff --git a/Lang/Bracmat/File-input-output b/Lang/Bracmat/File-input-output
new file mode 120000
index 0000000000..45715d1712
--- /dev/null
+++ b/Lang/Bracmat/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/Bracmat
\ No newline at end of file
diff --git a/Lang/Bracmat/Fractran b/Lang/Bracmat/Fractran
new file mode 120000
index 0000000000..fea02a9ec0
--- /dev/null
+++ b/Lang/Bracmat/Fractran
@@ -0,0 +1 @@
+../../Task/Fractran/Bracmat
\ No newline at end of file
diff --git a/Lang/Bracmat/Generate-lower-case-ASCII-alphabet b/Lang/Bracmat/Generate-lower-case-ASCII-alphabet
new file mode 120000
index 0000000000..0f9bcfb380
--- /dev/null
+++ b/Lang/Bracmat/Generate-lower-case-ASCII-alphabet
@@ -0,0 +1 @@
+../../Task/Generate-lower-case-ASCII-alphabet/Bracmat
\ No newline at end of file
diff --git a/Lang/Bracmat/Hash-join b/Lang/Bracmat/Hash-join
new file mode 120000
index 0000000000..6f813fc5e3
--- /dev/null
+++ b/Lang/Bracmat/Hash-join
@@ -0,0 +1 @@
+../../Task/Hash-join/Bracmat
\ No newline at end of file
diff --git a/Lang/Bracmat/Hickerson-series-of-almost-integers b/Lang/Bracmat/Hickerson-series-of-almost-integers
new file mode 120000
index 0000000000..eff7811324
--- /dev/null
+++ b/Lang/Bracmat/Hickerson-series-of-almost-integers
@@ -0,0 +1 @@
+../../Task/Hickerson-series-of-almost-integers/Bracmat
\ No newline at end of file
diff --git a/Lang/Bracmat/IBAN b/Lang/Bracmat/IBAN
new file mode 120000
index 0000000000..53a8115df6
--- /dev/null
+++ b/Lang/Bracmat/IBAN
@@ -0,0 +1 @@
+../../Task/IBAN/Bracmat
\ No newline at end of file
diff --git a/Lang/Bracmat/Left-factorials b/Lang/Bracmat/Left-factorials
new file mode 120000
index 0000000000..c20420ccbd
--- /dev/null
+++ b/Lang/Bracmat/Left-factorials
@@ -0,0 +1 @@
+../../Task/Left-factorials/Bracmat
\ No newline at end of file
diff --git a/Lang/Bracmat/Maximum-triangle-path-sum b/Lang/Bracmat/Maximum-triangle-path-sum
new file mode 120000
index 0000000000..2d6859f94e
--- /dev/null
+++ b/Lang/Bracmat/Maximum-triangle-path-sum
@@ -0,0 +1 @@
+../../Task/Maximum-triangle-path-sum/Bracmat
\ No newline at end of file
diff --git a/Lang/Bracmat/Odd-word-problem b/Lang/Bracmat/Odd-word-problem
new file mode 120000
index 0000000000..d9518b3fb5
--- /dev/null
+++ b/Lang/Bracmat/Odd-word-problem
@@ -0,0 +1 @@
+../../Task/Odd-word-problem/Bracmat
\ No newline at end of file
diff --git a/Lang/Bracmat/Order-disjoint-list-items b/Lang/Bracmat/Order-disjoint-list-items
new file mode 120000
index 0000000000..3de9822771
--- /dev/null
+++ b/Lang/Bracmat/Order-disjoint-list-items
@@ -0,0 +1 @@
+../../Task/Order-disjoint-list-items/Bracmat
\ No newline at end of file
diff --git a/Lang/Bracmat/Phrase-reversals b/Lang/Bracmat/Phrase-reversals
new file mode 120000
index 0000000000..d87520817b
--- /dev/null
+++ b/Lang/Bracmat/Phrase-reversals
@@ -0,0 +1 @@
+../../Task/Phrase-reversals/Bracmat
\ No newline at end of file
diff --git a/Lang/Bracmat/Rep-string b/Lang/Bracmat/Rep-string
new file mode 120000
index 0000000000..ce0401cbf7
--- /dev/null
+++ b/Lang/Bracmat/Rep-string
@@ -0,0 +1 @@
+../../Task/Rep-string/Bracmat
\ No newline at end of file
diff --git a/Lang/Bracmat/Reverse-words-in-a-string b/Lang/Bracmat/Reverse-words-in-a-string
new file mode 120000
index 0000000000..b24b7d5399
--- /dev/null
+++ b/Lang/Bracmat/Reverse-words-in-a-string
@@ -0,0 +1 @@
+../../Task/Reverse-words-in-a-string/Bracmat
\ No newline at end of file
diff --git a/Lang/Bracmat/Solve-a-Holy-Knights-tour b/Lang/Bracmat/Solve-a-Holy-Knights-tour
new file mode 120000
index 0000000000..92d501866b
--- /dev/null
+++ b/Lang/Bracmat/Solve-a-Holy-Knights-tour
@@ -0,0 +1 @@
+../../Task/Solve-a-Holy-Knights-tour/Bracmat
\ No newline at end of file
diff --git a/Lang/Bracmat/State-name-puzzle b/Lang/Bracmat/State-name-puzzle
new file mode 120000
index 0000000000..7bdcb94afe
--- /dev/null
+++ b/Lang/Bracmat/State-name-puzzle
@@ -0,0 +1 @@
+../../Task/State-name-puzzle/Bracmat
\ No newline at end of file
diff --git a/Lang/Bracmat/String-matching b/Lang/Bracmat/String-matching
new file mode 120000
index 0000000000..e824bcf93e
--- /dev/null
+++ b/Lang/Bracmat/String-matching
@@ -0,0 +1 @@
+../../Task/String-matching/Bracmat
\ No newline at end of file
diff --git a/Lang/Bracmat/String-prepend b/Lang/Bracmat/String-prepend
new file mode 120000
index 0000000000..27318b9437
--- /dev/null
+++ b/Lang/Bracmat/String-prepend
@@ -0,0 +1 @@
+../../Task/String-prepend/Bracmat
\ No newline at end of file
diff --git a/Lang/Bracmat/The-Twelve-Days-of-Christmas b/Lang/Bracmat/The-Twelve-Days-of-Christmas
new file mode 120000
index 0000000000..56c7e5e1cb
--- /dev/null
+++ b/Lang/Bracmat/The-Twelve-Days-of-Christmas
@@ -0,0 +1 @@
+../../Task/The-Twelve-Days-of-Christmas/Bracmat
\ No newline at end of file
diff --git a/Lang/Bracmat/Zero-to-the-zero-power b/Lang/Bracmat/Zero-to-the-zero-power
new file mode 120000
index 0000000000..b3670c2c19
--- /dev/null
+++ b/Lang/Bracmat/Zero-to-the-zero-power
@@ -0,0 +1 @@
+../../Task/Zero-to-the-zero-power/Bracmat
\ No newline at end of file
diff --git a/Lang/Burlesque/Munching-squares b/Lang/Burlesque/Munching-squares
new file mode 120000
index 0000000000..2b22b74e5c
--- /dev/null
+++ b/Lang/Burlesque/Munching-squares
@@ -0,0 +1 @@
+../../Task/Munching-squares/Burlesque
\ No newline at end of file
diff --git a/Lang/C++/9-billion-names-of-God-the-integer b/Lang/C++/9-billion-names-of-God-the-integer
new file mode 120000
index 0000000000..2467ffbdc8
--- /dev/null
+++ b/Lang/C++/9-billion-names-of-God-the-integer
@@ -0,0 +1 @@
+../../Task/9-billion-names-of-God-the-integer/C++
\ No newline at end of file
diff --git a/Lang/C++/ABC-Problem b/Lang/C++/ABC-Problem
new file mode 120000
index 0000000000..017d40427d
--- /dev/null
+++ b/Lang/C++/ABC-Problem
@@ -0,0 +1 @@
+../../Task/ABC-Problem/C++
\ No newline at end of file
diff --git a/Lang/C++/Arithmetic-geometric-mean-Calculate-Pi b/Lang/C++/Arithmetic-geometric-mean-Calculate-Pi
new file mode 120000
index 0000000000..caacb05a88
--- /dev/null
+++ b/Lang/C++/Arithmetic-geometric-mean-Calculate-Pi
@@ -0,0 +1 @@
+../../Task/Arithmetic-geometric-mean-Calculate-Pi/C++
\ No newline at end of file
diff --git a/Lang/C++/Benfords-law b/Lang/C++/Benfords-law
new file mode 120000
index 0000000000..299cd7ec40
--- /dev/null
+++ b/Lang/C++/Benfords-law
@@ -0,0 +1 @@
+../../Task/Benfords-law/C++
\ No newline at end of file
diff --git a/Lang/C++/CSV-data-manipulation b/Lang/C++/CSV-data-manipulation
new file mode 120000
index 0000000000..5ee00c56ab
--- /dev/null
+++ b/Lang/C++/CSV-data-manipulation
@@ -0,0 +1 @@
+../../Task/CSV-data-manipulation/C++
\ No newline at end of file
diff --git a/Lang/C++/Casting-out-nines b/Lang/C++/Casting-out-nines
new file mode 120000
index 0000000000..b2e023a1b5
--- /dev/null
+++ b/Lang/C++/Casting-out-nines
@@ -0,0 +1 @@
+../../Task/Casting-out-nines/C++
\ No newline at end of file
diff --git a/Lang/C++/Catalan-numbers-Pascals-triangle b/Lang/C++/Catalan-numbers-Pascals-triangle
new file mode 120000
index 0000000000..8d7b7d3d04
--- /dev/null
+++ b/Lang/C++/Catalan-numbers-Pascals-triangle
@@ -0,0 +1 @@
+../../Task/Catalan-numbers-Pascals-triangle/C++
\ No newline at end of file
diff --git a/Lang/C++/Catamorphism b/Lang/C++/Catamorphism
new file mode 120000
index 0000000000..078dacdd57
--- /dev/null
+++ b/Lang/C++/Catamorphism
@@ -0,0 +1 @@
+../../Task/Catamorphism/C++
\ No newline at end of file
diff --git a/Lang/C++/Closures-Value-capture b/Lang/C++/Closures-Value-capture
new file mode 120000
index 0000000000..9798b5b79b
--- /dev/null
+++ b/Lang/C++/Closures-Value-capture
@@ -0,0 +1 @@
+../../Task/Closures-Value-capture/C++
\ No newline at end of file
diff --git a/Lang/C++/Comma-quibbling b/Lang/C++/Comma-quibbling
new file mode 120000
index 0000000000..09b0bb2376
--- /dev/null
+++ b/Lang/C++/Comma-quibbling
@@ -0,0 +1 @@
+../../Task/Comma-quibbling/C++
\ No newline at end of file
diff --git a/Lang/C++/Digital-root-Multiplicative-digital-root b/Lang/C++/Digital-root-Multiplicative-digital-root
new file mode 120000
index 0000000000..6a38b4d6b5
--- /dev/null
+++ b/Lang/C++/Digital-root-Multiplicative-digital-root
@@ -0,0 +1 @@
+../../Task/Digital-root-Multiplicative-digital-root/C++
\ No newline at end of file
diff --git a/Lang/C++/Draw-a-clock b/Lang/C++/Draw-a-clock
new file mode 120000
index 0000000000..fb8f95f376
--- /dev/null
+++ b/Lang/C++/Draw-a-clock
@@ -0,0 +1 @@
+../../Task/Draw-a-clock/C++
\ No newline at end of file
diff --git a/Lang/C++/Fibonacci-word b/Lang/C++/Fibonacci-word
new file mode 120000
index 0000000000..b961ee2974
--- /dev/null
+++ b/Lang/C++/Fibonacci-word
@@ -0,0 +1 @@
+../../Task/Fibonacci-word/C++
\ No newline at end of file
diff --git a/Lang/C++/Fibonacci-word-fractal b/Lang/C++/Fibonacci-word-fractal
new file mode 120000
index 0000000000..8be7264c18
--- /dev/null
+++ b/Lang/C++/Fibonacci-word-fractal
@@ -0,0 +1 @@
+../../Task/Fibonacci-word-fractal/C++
\ No newline at end of file
diff --git a/Lang/C++/File-input-output b/Lang/C++/File-input-output
new file mode 120000
index 0000000000..9d317b0253
--- /dev/null
+++ b/Lang/C++/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/C++
\ No newline at end of file
diff --git a/Lang/C++/Find-the-last-Sunday-of-each-month b/Lang/C++/Find-the-last-Sunday-of-each-month
new file mode 120000
index 0000000000..06f15e89b0
--- /dev/null
+++ b/Lang/C++/Find-the-last-Sunday-of-each-month
@@ -0,0 +1 @@
+../../Task/Find-the-last-Sunday-of-each-month/C++
\ No newline at end of file
diff --git a/Lang/C++/Flipping-bits-game b/Lang/C++/Flipping-bits-game
new file mode 120000
index 0000000000..5e8ed11bca
--- /dev/null
+++ b/Lang/C++/Flipping-bits-game
@@ -0,0 +1 @@
+../../Task/Flipping-bits-game/C++
\ No newline at end of file
diff --git a/Lang/C++/Fractran b/Lang/C++/Fractran
new file mode 120000
index 0000000000..9f767a92a8
--- /dev/null
+++ b/Lang/C++/Fractran
@@ -0,0 +1 @@
+../../Task/Fractran/C++
\ No newline at end of file
diff --git a/Lang/C++/Generate-Chess960-starting-position b/Lang/C++/Generate-Chess960-starting-position
new file mode 120000
index 0000000000..67634e478a
--- /dev/null
+++ b/Lang/C++/Generate-Chess960-starting-position
@@ -0,0 +1 @@
+../../Task/Generate-Chess960-starting-position/C++
\ No newline at end of file
diff --git a/Lang/C++/Generate-lower-case-ASCII-alphabet b/Lang/C++/Generate-lower-case-ASCII-alphabet
new file mode 120000
index 0000000000..7814ae2002
--- /dev/null
+++ b/Lang/C++/Generate-lower-case-ASCII-alphabet
@@ -0,0 +1 @@
+../../Task/Generate-lower-case-ASCII-alphabet/C++
\ No newline at end of file
diff --git a/Lang/C++/Hickerson-series-of-almost-integers b/Lang/C++/Hickerson-series-of-almost-integers
new file mode 120000
index 0000000000..eb68eb9da7
--- /dev/null
+++ b/Lang/C++/Hickerson-series-of-almost-integers
@@ -0,0 +1 @@
+../../Task/Hickerson-series-of-almost-integers/C++
\ No newline at end of file
diff --git a/Lang/C++/IBAN b/Lang/C++/IBAN
new file mode 120000
index 0000000000..1b12552486
--- /dev/null
+++ b/Lang/C++/IBAN
@@ -0,0 +1 @@
+../../Task/IBAN/C++
\ No newline at end of file
diff --git a/Lang/C++/Iterated-digits-squaring b/Lang/C++/Iterated-digits-squaring
new file mode 120000
index 0000000000..c1c12b1a5c
--- /dev/null
+++ b/Lang/C++/Iterated-digits-squaring
@@ -0,0 +1 @@
+../../Task/Iterated-digits-squaring/C++
\ No newline at end of file
diff --git a/Lang/C++/Longest-increasing-subsequence b/Lang/C++/Longest-increasing-subsequence
new file mode 120000
index 0000000000..ee010f9bf1
--- /dev/null
+++ b/Lang/C++/Longest-increasing-subsequence
@@ -0,0 +1 @@
+../../Task/Longest-increasing-subsequence/C++
\ No newline at end of file
diff --git a/Lang/C++/Ludic-numbers b/Lang/C++/Ludic-numbers
new file mode 120000
index 0000000000..ffa444c11f
--- /dev/null
+++ b/Lang/C++/Ludic-numbers
@@ -0,0 +1 @@
+../../Task/Ludic-numbers/C++
\ No newline at end of file
diff --git a/Lang/C++/Magic-squares-of-odd-order b/Lang/C++/Magic-squares-of-odd-order
new file mode 120000
index 0000000000..b7c54d1042
--- /dev/null
+++ b/Lang/C++/Magic-squares-of-odd-order
@@ -0,0 +1 @@
+../../Task/Magic-squares-of-odd-order/C++
\ No newline at end of file
diff --git a/Lang/C++/Maximum-triangle-path-sum b/Lang/C++/Maximum-triangle-path-sum
new file mode 120000
index 0000000000..60d78740d8
--- /dev/null
+++ b/Lang/C++/Maximum-triangle-path-sum
@@ -0,0 +1 @@
+../../Task/Maximum-triangle-path-sum/C++
\ No newline at end of file
diff --git a/Lang/C++/Move-to-front-algorithm b/Lang/C++/Move-to-front-algorithm
new file mode 120000
index 0000000000..7854b52031
--- /dev/null
+++ b/Lang/C++/Move-to-front-algorithm
@@ -0,0 +1 @@
+../../Task/Move-to-front-algorithm/C++
\ No newline at end of file
diff --git a/Lang/C++/Munching-squares b/Lang/C++/Munching-squares
new file mode 120000
index 0000000000..eecf344cd9
--- /dev/null
+++ b/Lang/C++/Munching-squares
@@ -0,0 +1 @@
+../../Task/Munching-squares/C++
\ No newline at end of file
diff --git a/Lang/C++/Narcissistic-decimal-number b/Lang/C++/Narcissistic-decimal-number
new file mode 120000
index 0000000000..f736f0dbd4
--- /dev/null
+++ b/Lang/C++/Narcissistic-decimal-number
@@ -0,0 +1 @@
+../../Task/Narcissistic-decimal-number/C++
\ No newline at end of file
diff --git a/Lang/C++/Odd-word-problem b/Lang/C++/Odd-word-problem
new file mode 120000
index 0000000000..7172dac925
--- /dev/null
+++ b/Lang/C++/Odd-word-problem
@@ -0,0 +1 @@
+../../Task/Odd-word-problem/C++
\ No newline at end of file
diff --git a/Lang/C++/Penneys-game b/Lang/C++/Penneys-game
new file mode 120000
index 0000000000..7acc8744ca
--- /dev/null
+++ b/Lang/C++/Penneys-game
@@ -0,0 +1 @@
+../../Task/Penneys-game/C++
\ No newline at end of file
diff --git a/Lang/C++/Percolation-Mean-run-density b/Lang/C++/Percolation-Mean-run-density
new file mode 120000
index 0000000000..8d8db2ecb7
--- /dev/null
+++ b/Lang/C++/Percolation-Mean-run-density
@@ -0,0 +1 @@
+../../Task/Percolation-Mean-run-density/C++
\ No newline at end of file
diff --git a/Lang/C++/Pernicious-numbers b/Lang/C++/Pernicious-numbers
new file mode 120000
index 0000000000..b8b2e7ecdf
--- /dev/null
+++ b/Lang/C++/Pernicious-numbers
@@ -0,0 +1 @@
+../../Task/Pernicious-numbers/C++
\ No newline at end of file
diff --git a/Lang/C++/Phrase-reversals b/Lang/C++/Phrase-reversals
new file mode 120000
index 0000000000..b8fb2a3d01
--- /dev/null
+++ b/Lang/C++/Phrase-reversals
@@ -0,0 +1 @@
+../../Task/Phrase-reversals/C++
\ No newline at end of file
diff --git a/Lang/C++/Quickselect-algorithm b/Lang/C++/Quickselect-algorithm
new file mode 120000
index 0000000000..8cad248221
--- /dev/null
+++ b/Lang/C++/Quickselect-algorithm
@@ -0,0 +1 @@
+../../Task/Quickselect-algorithm/C++
\ No newline at end of file
diff --git a/Lang/C++/Rep-string b/Lang/C++/Rep-string
new file mode 120000
index 0000000000..7f5c6352e9
--- /dev/null
+++ b/Lang/C++/Rep-string
@@ -0,0 +1 @@
+../../Task/Rep-string/C++
\ No newline at end of file
diff --git a/Lang/C++/Reverse-words-in-a-string b/Lang/C++/Reverse-words-in-a-string
new file mode 120000
index 0000000000..7d76932271
--- /dev/null
+++ b/Lang/C++/Reverse-words-in-a-string
@@ -0,0 +1 @@
+../../Task/Reverse-words-in-a-string/C++
\ No newline at end of file
diff --git a/Lang/C++/Semiprime b/Lang/C++/Semiprime
new file mode 120000
index 0000000000..d725311471
--- /dev/null
+++ b/Lang/C++/Semiprime
@@ -0,0 +1 @@
+../../Task/Semiprime/C++
\ No newline at end of file
diff --git a/Lang/C++/Solve-a-Holy-Knights-tour b/Lang/C++/Solve-a-Holy-Knights-tour
new file mode 120000
index 0000000000..d1d8f48bf4
--- /dev/null
+++ b/Lang/C++/Solve-a-Holy-Knights-tour
@@ -0,0 +1 @@
+../../Task/Solve-a-Holy-Knights-tour/C++
\ No newline at end of file
diff --git a/Lang/C++/Solve-a-Hopido-puzzle b/Lang/C++/Solve-a-Hopido-puzzle
new file mode 120000
index 0000000000..91f3c5d4c1
--- /dev/null
+++ b/Lang/C++/Solve-a-Hopido-puzzle
@@ -0,0 +1 @@
+../../Task/Solve-a-Hopido-puzzle/C++
\ No newline at end of file
diff --git a/Lang/C++/Solve-a-Numbrix-puzzle b/Lang/C++/Solve-a-Numbrix-puzzle
new file mode 120000
index 0000000000..fef94afa89
--- /dev/null
+++ b/Lang/C++/Solve-a-Numbrix-puzzle
@@ -0,0 +1 @@
+../../Task/Solve-a-Numbrix-puzzle/C++
\ No newline at end of file
diff --git a/Lang/C++/Sparkline-in-unicode b/Lang/C++/Sparkline-in-unicode
new file mode 120000
index 0000000000..18739b0225
--- /dev/null
+++ b/Lang/C++/Sparkline-in-unicode
@@ -0,0 +1 @@
+../../Task/Sparkline-in-unicode/C++
\ No newline at end of file
diff --git a/Lang/C++/String-append b/Lang/C++/String-append
new file mode 120000
index 0000000000..8095b1a214
--- /dev/null
+++ b/Lang/C++/String-append
@@ -0,0 +1 @@
+../../Task/String-append/C++
\ No newline at end of file
diff --git a/Lang/C++/String-matching b/Lang/C++/String-matching
new file mode 120000
index 0000000000..7c4d92bdac
--- /dev/null
+++ b/Lang/C++/String-matching
@@ -0,0 +1 @@
+../../Task/String-matching/C++
\ No newline at end of file
diff --git a/Lang/C++/String-prepend b/Lang/C++/String-prepend
new file mode 120000
index 0000000000..021f2ab069
--- /dev/null
+++ b/Lang/C++/String-prepend
@@ -0,0 +1 @@
+../../Task/String-prepend/C++
\ No newline at end of file
diff --git a/Lang/C++/Sum-multiples-of-3-and-5 b/Lang/C++/Sum-multiples-of-3-and-5
new file mode 120000
index 0000000000..6b117e665b
--- /dev/null
+++ b/Lang/C++/Sum-multiples-of-3-and-5
@@ -0,0 +1 @@
+../../Task/Sum-multiples-of-3-and-5/C++
\ No newline at end of file
diff --git a/Lang/C++/The-Twelve-Days-of-Christmas b/Lang/C++/The-Twelve-Days-of-Christmas
new file mode 120000
index 0000000000..b3fcc978bf
--- /dev/null
+++ b/Lang/C++/The-Twelve-Days-of-Christmas
@@ -0,0 +1 @@
+../../Task/The-Twelve-Days-of-Christmas/C++
\ No newline at end of file
diff --git a/Lang/C++/Zero-to-the-zero-power b/Lang/C++/Zero-to-the-zero-power
new file mode 120000
index 0000000000..06ccf77736
--- /dev/null
+++ b/Lang/C++/Zero-to-the-zero-power
@@ -0,0 +1 @@
+../../Task/Zero-to-the-zero-power/C++
\ No newline at end of file
diff --git a/Lang/C-sharp/ABC-Problem b/Lang/C-sharp/ABC-Problem
new file mode 120000
index 0000000000..c073dc3e3a
--- /dev/null
+++ b/Lang/C-sharp/ABC-Problem
@@ -0,0 +1 @@
+../../Task/ABC-Problem/C-sharp
\ No newline at end of file
diff --git a/Lang/C-sharp/Almost-prime b/Lang/C-sharp/Almost-prime
new file mode 120000
index 0000000000..786e24d952
--- /dev/null
+++ b/Lang/C-sharp/Almost-prime
@@ -0,0 +1 @@
+../../Task/Almost-prime/C-sharp
\ No newline at end of file
diff --git a/Lang/C-sharp/Amb b/Lang/C-sharp/Amb
new file mode 120000
index 0000000000..00596741c8
--- /dev/null
+++ b/Lang/C-sharp/Amb
@@ -0,0 +1 @@
+../../Task/Amb/C-sharp
\ No newline at end of file
diff --git a/Lang/C-sharp/CSV-data-manipulation b/Lang/C-sharp/CSV-data-manipulation
new file mode 120000
index 0000000000..14a7ba0272
--- /dev/null
+++ b/Lang/C-sharp/CSV-data-manipulation
@@ -0,0 +1 @@
+../../Task/CSV-data-manipulation/C-sharp
\ No newline at end of file
diff --git a/Lang/C-sharp/Catamorphism b/Lang/C-sharp/Catamorphism
new file mode 120000
index 0000000000..3c49f6b24b
--- /dev/null
+++ b/Lang/C-sharp/Catamorphism
@@ -0,0 +1 @@
+../../Task/Catamorphism/C-sharp
\ No newline at end of file
diff --git a/Lang/C-sharp/Currying b/Lang/C-sharp/Currying
new file mode 120000
index 0000000000..1878e43f29
--- /dev/null
+++ b/Lang/C-sharp/Currying
@@ -0,0 +1 @@
+../../Task/Currying/C-sharp
\ No newline at end of file
diff --git a/Lang/C-sharp/Generate-lower-case-ASCII-alphabet b/Lang/C-sharp/Generate-lower-case-ASCII-alphabet
new file mode 120000
index 0000000000..79815d9f6b
--- /dev/null
+++ b/Lang/C-sharp/Generate-lower-case-ASCII-alphabet
@@ -0,0 +1 @@
+../../Task/Generate-lower-case-ASCII-alphabet/C-sharp
\ No newline at end of file
diff --git a/Lang/C-sharp/Hash-join b/Lang/C-sharp/Hash-join
new file mode 120000
index 0000000000..b5048f6675
--- /dev/null
+++ b/Lang/C-sharp/Hash-join
@@ -0,0 +1 @@
+../../Task/Hash-join/C-sharp
\ No newline at end of file
diff --git a/Lang/C-sharp/IBAN b/Lang/C-sharp/IBAN
new file mode 120000
index 0000000000..165bfdefab
--- /dev/null
+++ b/Lang/C-sharp/IBAN
@@ -0,0 +1 @@
+../../Task/IBAN/C-sharp
\ No newline at end of file
diff --git a/Lang/C-sharp/Munching-squares b/Lang/C-sharp/Munching-squares
new file mode 120000
index 0000000000..e63924f158
--- /dev/null
+++ b/Lang/C-sharp/Munching-squares
@@ -0,0 +1 @@
+../../Task/Munching-squares/C-sharp
\ No newline at end of file
diff --git a/Lang/C-sharp/String-prepend b/Lang/C-sharp/String-prepend
new file mode 120000
index 0000000000..0bf2459a4a
--- /dev/null
+++ b/Lang/C-sharp/String-prepend
@@ -0,0 +1 @@
+../../Task/String-prepend/C-sharp
\ No newline at end of file
diff --git a/Lang/C-sharp/The-ISAAC-Cipher b/Lang/C-sharp/The-ISAAC-Cipher
new file mode 120000
index 0000000000..1c1e4e9587
--- /dev/null
+++ b/Lang/C-sharp/The-ISAAC-Cipher
@@ -0,0 +1 @@
+../../Task/The-ISAAC-Cipher/C-sharp
\ No newline at end of file
diff --git a/Lang/C/9-billion-names-of-God-the-integer b/Lang/C/9-billion-names-of-God-the-integer
new file mode 120000
index 0000000000..738edf38a6
--- /dev/null
+++ b/Lang/C/9-billion-names-of-God-the-integer
@@ -0,0 +1 @@
+../../Task/9-billion-names-of-God-the-integer/C
\ No newline at end of file
diff --git a/Lang/C/ABC-Problem b/Lang/C/ABC-Problem
new file mode 120000
index 0000000000..b085d03516
--- /dev/null
+++ b/Lang/C/ABC-Problem
@@ -0,0 +1 @@
+../../Task/ABC-Problem/C
\ No newline at end of file
diff --git a/Lang/C/AKS-test-for-primes b/Lang/C/AKS-test-for-primes
new file mode 120000
index 0000000000..8ed84c3054
--- /dev/null
+++ b/Lang/C/AKS-test-for-primes
@@ -0,0 +1 @@
+../../Task/AKS-test-for-primes/C
\ No newline at end of file
diff --git a/Lang/C/Abundant,-deficient-and-perfect-number-classifications b/Lang/C/Abundant,-deficient-and-perfect-number-classifications
new file mode 120000
index 0000000000..b71e4143d0
--- /dev/null
+++ b/Lang/C/Abundant,-deficient-and-perfect-number-classifications
@@ -0,0 +1 @@
+../../Task/Abundant,-deficient-and-perfect-number-classifications/C
\ No newline at end of file
diff --git a/Lang/C/Almost-prime b/Lang/C/Almost-prime
new file mode 120000
index 0000000000..14cda43503
--- /dev/null
+++ b/Lang/C/Almost-prime
@@ -0,0 +1 @@
+../../Task/Almost-prime/C
\ No newline at end of file
diff --git a/Lang/C/Amb b/Lang/C/Amb
new file mode 120000
index 0000000000..cea1af76e5
--- /dev/null
+++ b/Lang/C/Amb
@@ -0,0 +1 @@
+../../Task/Amb/C
\ No newline at end of file
diff --git a/Lang/C/Amicable-pairs b/Lang/C/Amicable-pairs
new file mode 120000
index 0000000000..1692525888
--- /dev/null
+++ b/Lang/C/Amicable-pairs
@@ -0,0 +1 @@
+../../Task/Amicable-pairs/C
\ No newline at end of file
diff --git a/Lang/C/Append-a-record-to-the-end-of-a-text-file b/Lang/C/Append-a-record-to-the-end-of-a-text-file
new file mode 120000
index 0000000000..9caa9544d5
--- /dev/null
+++ b/Lang/C/Append-a-record-to-the-end-of-a-text-file
@@ -0,0 +1 @@
+../../Task/Append-a-record-to-the-end-of-a-text-file/C
\ No newline at end of file
diff --git a/Lang/C/Arithmetic-geometric-mean-Calculate-Pi b/Lang/C/Arithmetic-geometric-mean-Calculate-Pi
new file mode 120000
index 0000000000..484313b5cb
--- /dev/null
+++ b/Lang/C/Arithmetic-geometric-mean-Calculate-Pi
@@ -0,0 +1 @@
+../../Task/Arithmetic-geometric-mean-Calculate-Pi/C
\ No newline at end of file
diff --git a/Lang/C/Benfords-law b/Lang/C/Benfords-law
new file mode 120000
index 0000000000..f7cc9a8540
--- /dev/null
+++ b/Lang/C/Benfords-law
@@ -0,0 +1 @@
+../../Task/Benfords-law/C
\ No newline at end of file
diff --git a/Lang/C/Bernoulli-numbers b/Lang/C/Bernoulli-numbers
new file mode 120000
index 0000000000..75a1a05738
--- /dev/null
+++ b/Lang/C/Bernoulli-numbers
@@ -0,0 +1 @@
+../../Task/Bernoulli-numbers/C
\ No newline at end of file
diff --git a/Lang/C/Bitcoin-public-point-to-address b/Lang/C/Bitcoin-public-point-to-address
new file mode 120000
index 0000000000..c57a95efdd
--- /dev/null
+++ b/Lang/C/Bitcoin-public-point-to-address
@@ -0,0 +1 @@
+../../Task/Bitcoin-public-point-to-address/C
\ No newline at end of file
diff --git a/Lang/C/Catamorphism b/Lang/C/Catamorphism
new file mode 120000
index 0000000000..47e47f0bc4
--- /dev/null
+++ b/Lang/C/Catamorphism
@@ -0,0 +1 @@
+../../Task/Catamorphism/C
\ No newline at end of file
diff --git a/Lang/C/Chinese-remainder-theorem b/Lang/C/Chinese-remainder-theorem
new file mode 120000
index 0000000000..5be65a6b03
--- /dev/null
+++ b/Lang/C/Chinese-remainder-theorem
@@ -0,0 +1 @@
+../../Task/Chinese-remainder-theorem/C
\ No newline at end of file
diff --git a/Lang/C/Circles-of-given-radius-through-two-points b/Lang/C/Circles-of-given-radius-through-two-points
new file mode 120000
index 0000000000..7c1fe77f82
--- /dev/null
+++ b/Lang/C/Circles-of-given-radius-through-two-points
@@ -0,0 +1 @@
+../../Task/Circles-of-given-radius-through-two-points/C
\ No newline at end of file
diff --git a/Lang/C/Closures-Value-capture b/Lang/C/Closures-Value-capture
new file mode 120000
index 0000000000..b65029c443
--- /dev/null
+++ b/Lang/C/Closures-Value-capture
@@ -0,0 +1 @@
+../../Task/Closures-Value-capture/C
\ No newline at end of file
diff --git a/Lang/C/Combinations-and-permutations b/Lang/C/Combinations-and-permutations
new file mode 120000
index 0000000000..39450ab0ef
--- /dev/null
+++ b/Lang/C/Combinations-and-permutations
@@ -0,0 +1 @@
+../../Task/Combinations-and-permutations/C
\ No newline at end of file
diff --git a/Lang/C/Comma-quibbling b/Lang/C/Comma-quibbling
new file mode 120000
index 0000000000..20af14abe8
--- /dev/null
+++ b/Lang/C/Comma-quibbling
@@ -0,0 +1 @@
+../../Task/Comma-quibbling/C
\ No newline at end of file
diff --git a/Lang/C/Conjugate-transpose b/Lang/C/Conjugate-transpose
new file mode 120000
index 0000000000..7b242426e0
--- /dev/null
+++ b/Lang/C/Conjugate-transpose
@@ -0,0 +1 @@
+../../Task/Conjugate-transpose/C
\ No newline at end of file
diff --git a/Lang/C/Convert-decimal-number-to-rational b/Lang/C/Convert-decimal-number-to-rational
new file mode 120000
index 0000000000..f943894ebf
--- /dev/null
+++ b/Lang/C/Convert-decimal-number-to-rational
@@ -0,0 +1 @@
+../../Task/Convert-decimal-number-to-rational/C
\ No newline at end of file
diff --git a/Lang/C/Digital-root-Multiplicative-digital-root b/Lang/C/Digital-root-Multiplicative-digital-root
new file mode 120000
index 0000000000..f5d01a66d9
--- /dev/null
+++ b/Lang/C/Digital-root-Multiplicative-digital-root
@@ -0,0 +1 @@
+../../Task/Digital-root-Multiplicative-digital-root/C
\ No newline at end of file
diff --git a/Lang/C/Draw-a-clock b/Lang/C/Draw-a-clock
new file mode 120000
index 0000000000..299cae1dad
--- /dev/null
+++ b/Lang/C/Draw-a-clock
@@ -0,0 +1 @@
+../../Task/Draw-a-clock/C
\ No newline at end of file
diff --git a/Lang/C/Extensible-prime-generator b/Lang/C/Extensible-prime-generator
new file mode 120000
index 0000000000..246d14960b
--- /dev/null
+++ b/Lang/C/Extensible-prime-generator
@@ -0,0 +1 @@
+../../Task/Extensible-prime-generator/C
\ No newline at end of file
diff --git a/Lang/C/Fibonacci-word b/Lang/C/Fibonacci-word
new file mode 120000
index 0000000000..724a901b66
--- /dev/null
+++ b/Lang/C/Fibonacci-word
@@ -0,0 +1 @@
+../../Task/Fibonacci-word/C
\ No newline at end of file
diff --git a/Lang/C/File-input-output b/Lang/C/File-input-output
new file mode 120000
index 0000000000..fac94c51d8
--- /dev/null
+++ b/Lang/C/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/C
\ No newline at end of file
diff --git a/Lang/C/Flipping-bits-game b/Lang/C/Flipping-bits-game
new file mode 120000
index 0000000000..c6f566e9f0
--- /dev/null
+++ b/Lang/C/Flipping-bits-game
@@ -0,0 +1 @@
+../../Task/Flipping-bits-game/C
\ No newline at end of file
diff --git a/Lang/C/Fractran b/Lang/C/Fractran
new file mode 120000
index 0000000000..b74bf80115
--- /dev/null
+++ b/Lang/C/Fractran
@@ -0,0 +1 @@
+../../Task/Fractran/C
\ No newline at end of file
diff --git a/Lang/C/Gaussian-elimination b/Lang/C/Gaussian-elimination
new file mode 120000
index 0000000000..2c3448b3d7
--- /dev/null
+++ b/Lang/C/Gaussian-elimination
@@ -0,0 +1 @@
+../../Task/Gaussian-elimination/C
\ No newline at end of file
diff --git a/Lang/C/Generate-lower-case-ASCII-alphabet b/Lang/C/Generate-lower-case-ASCII-alphabet
new file mode 120000
index 0000000000..b776471d04
--- /dev/null
+++ b/Lang/C/Generate-lower-case-ASCII-alphabet
@@ -0,0 +1 @@
+../../Task/Generate-lower-case-ASCII-alphabet/C
\ No newline at end of file
diff --git a/Lang/C/Hickerson-series-of-almost-integers b/Lang/C/Hickerson-series-of-almost-integers
new file mode 120000
index 0000000000..014107e679
--- /dev/null
+++ b/Lang/C/Hickerson-series-of-almost-integers
@@ -0,0 +1 @@
+../../Task/Hickerson-series-of-almost-integers/C
\ No newline at end of file
diff --git a/Lang/C/IBAN b/Lang/C/IBAN
new file mode 120000
index 0000000000..0e4821ae74
--- /dev/null
+++ b/Lang/C/IBAN
@@ -0,0 +1 @@
+../../Task/IBAN/C
\ No newline at end of file
diff --git a/Lang/C/Integer-overflow b/Lang/C/Integer-overflow
new file mode 120000
index 0000000000..f04aa188ee
--- /dev/null
+++ b/Lang/C/Integer-overflow
@@ -0,0 +1 @@
+../../Task/Integer-overflow/C
\ No newline at end of file
diff --git a/Lang/C/Iterated-digits-squaring b/Lang/C/Iterated-digits-squaring
new file mode 120000
index 0000000000..b33eecabef
--- /dev/null
+++ b/Lang/C/Iterated-digits-squaring
@@ -0,0 +1 @@
+../../Task/Iterated-digits-squaring/C
\ No newline at end of file
diff --git a/Lang/C/K-d-tree b/Lang/C/K-d-tree
new file mode 120000
index 0000000000..fc3772c129
--- /dev/null
+++ b/Lang/C/K-d-tree
@@ -0,0 +1 @@
+../../Task/K-d-tree/C
\ No newline at end of file
diff --git a/Lang/C/Left-factorials b/Lang/C/Left-factorials
new file mode 120000
index 0000000000..cb00422381
--- /dev/null
+++ b/Lang/C/Left-factorials
@@ -0,0 +1 @@
+../../Task/Left-factorials/C
\ No newline at end of file
diff --git a/Lang/C/Longest-increasing-subsequence b/Lang/C/Longest-increasing-subsequence
new file mode 120000
index 0000000000..e77223f626
--- /dev/null
+++ b/Lang/C/Longest-increasing-subsequence
@@ -0,0 +1 @@
+../../Task/Longest-increasing-subsequence/C
\ No newline at end of file
diff --git a/Lang/C/Ludic-numbers b/Lang/C/Ludic-numbers
new file mode 120000
index 0000000000..150acc3b99
--- /dev/null
+++ b/Lang/C/Ludic-numbers
@@ -0,0 +1 @@
+../../Task/Ludic-numbers/C
\ No newline at end of file
diff --git a/Lang/C/Machine-code b/Lang/C/Machine-code
new file mode 120000
index 0000000000..7ddfca9839
--- /dev/null
+++ b/Lang/C/Machine-code
@@ -0,0 +1 @@
+../../Task/Machine-code/C
\ No newline at end of file
diff --git a/Lang/C/Magic-squares-of-odd-order b/Lang/C/Magic-squares-of-odd-order
new file mode 120000
index 0000000000..727f46d1c7
--- /dev/null
+++ b/Lang/C/Magic-squares-of-odd-order
@@ -0,0 +1 @@
+../../Task/Magic-squares-of-odd-order/C
\ No newline at end of file
diff --git a/Lang/C/Maximum-triangle-path-sum b/Lang/C/Maximum-triangle-path-sum
new file mode 120000
index 0000000000..0e06ac46d8
--- /dev/null
+++ b/Lang/C/Maximum-triangle-path-sum
@@ -0,0 +1 @@
+../../Task/Maximum-triangle-path-sum/C
\ No newline at end of file
diff --git a/Lang/C/Move-to-front-algorithm b/Lang/C/Move-to-front-algorithm
new file mode 120000
index 0000000000..f44f0d61e4
--- /dev/null
+++ b/Lang/C/Move-to-front-algorithm
@@ -0,0 +1 @@
+../../Task/Move-to-front-algorithm/C
\ No newline at end of file
diff --git a/Lang/C/Munching-squares b/Lang/C/Munching-squares
new file mode 120000
index 0000000000..a9432d7190
--- /dev/null
+++ b/Lang/C/Munching-squares
@@ -0,0 +1 @@
+../../Task/Munching-squares/C
\ No newline at end of file
diff --git a/Lang/C/Narcissistic-decimal-number b/Lang/C/Narcissistic-decimal-number
new file mode 120000
index 0000000000..5da0f3b38c
--- /dev/null
+++ b/Lang/C/Narcissistic-decimal-number
@@ -0,0 +1 @@
+../../Task/Narcissistic-decimal-number/C
\ No newline at end of file
diff --git a/Lang/C/Natural-sorting b/Lang/C/Natural-sorting
new file mode 120000
index 0000000000..7544473952
--- /dev/null
+++ b/Lang/C/Natural-sorting
@@ -0,0 +1 @@
+../../Task/Natural-sorting/C
\ No newline at end of file
diff --git a/Lang/C/Nth b/Lang/C/Nth
new file mode 120000
index 0000000000..a85ae760e6
--- /dev/null
+++ b/Lang/C/Nth
@@ -0,0 +1 @@
+../../Task/Nth/C
\ No newline at end of file
diff --git a/Lang/C/Odd-word-problem b/Lang/C/Odd-word-problem
new file mode 120000
index 0000000000..c8bc19ffc8
--- /dev/null
+++ b/Lang/C/Odd-word-problem
@@ -0,0 +1 @@
+../../Task/Odd-word-problem/C
\ No newline at end of file
diff --git a/Lang/C/Old-lady-swallowed-a-fly b/Lang/C/Old-lady-swallowed-a-fly
new file mode 120000
index 0000000000..4786402edc
--- /dev/null
+++ b/Lang/C/Old-lady-swallowed-a-fly
@@ -0,0 +1 @@
+../../Task/Old-lady-swallowed-a-fly/C
\ No newline at end of file
diff --git a/Lang/C/Paraffins b/Lang/C/Paraffins
new file mode 120000
index 0000000000..c64af40ea6
--- /dev/null
+++ b/Lang/C/Paraffins
@@ -0,0 +1 @@
+../../Task/Paraffins/C
\ No newline at end of file
diff --git a/Lang/C/Parse-an-IP-Address b/Lang/C/Parse-an-IP-Address
new file mode 120000
index 0000000000..4223e48ee5
--- /dev/null
+++ b/Lang/C/Parse-an-IP-Address
@@ -0,0 +1 @@
+../../Task/Parse-an-IP-Address/C
\ No newline at end of file
diff --git a/Lang/C/Penneys-game b/Lang/C/Penneys-game
new file mode 120000
index 0000000000..945ac4e35e
--- /dev/null
+++ b/Lang/C/Penneys-game
@@ -0,0 +1 @@
+../../Task/Penneys-game/C
\ No newline at end of file
diff --git a/Lang/C/Percolation-Bond-percolation b/Lang/C/Percolation-Bond-percolation
new file mode 120000
index 0000000000..c7b0247fec
--- /dev/null
+++ b/Lang/C/Percolation-Bond-percolation
@@ -0,0 +1 @@
+../../Task/Percolation-Bond-percolation/C
\ No newline at end of file
diff --git a/Lang/C/Percolation-Mean-cluster-density b/Lang/C/Percolation-Mean-cluster-density
new file mode 120000
index 0000000000..c63538b332
--- /dev/null
+++ b/Lang/C/Percolation-Mean-cluster-density
@@ -0,0 +1 @@
+../../Task/Percolation-Mean-cluster-density/C
\ No newline at end of file
diff --git a/Lang/C/Percolation-Mean-run-density b/Lang/C/Percolation-Mean-run-density
new file mode 120000
index 0000000000..7f3da5c7bb
--- /dev/null
+++ b/Lang/C/Percolation-Mean-run-density
@@ -0,0 +1 @@
+../../Task/Percolation-Mean-run-density/C
\ No newline at end of file
diff --git a/Lang/C/Percolation-Site-percolation b/Lang/C/Percolation-Site-percolation
new file mode 120000
index 0000000000..e9cb8f0340
--- /dev/null
+++ b/Lang/C/Percolation-Site-percolation
@@ -0,0 +1 @@
+../../Task/Percolation-Site-percolation/C
\ No newline at end of file
diff --git a/Lang/C/Permutations-Rank-of-a-permutation b/Lang/C/Permutations-Rank-of-a-permutation
new file mode 120000
index 0000000000..bf624de1d1
--- /dev/null
+++ b/Lang/C/Permutations-Rank-of-a-permutation
@@ -0,0 +1 @@
+../../Task/Permutations-Rank-of-a-permutation/C
\ No newline at end of file
diff --git a/Lang/C/Pernicious-numbers b/Lang/C/Pernicious-numbers
new file mode 120000
index 0000000000..9face3994d
--- /dev/null
+++ b/Lang/C/Pernicious-numbers
@@ -0,0 +1 @@
+../../Task/Pernicious-numbers/C
\ No newline at end of file
diff --git a/Lang/C/Phrase-reversals b/Lang/C/Phrase-reversals
new file mode 120000
index 0000000000..19b162f92a
--- /dev/null
+++ b/Lang/C/Phrase-reversals
@@ -0,0 +1 @@
+../../Task/Phrase-reversals/C
\ No newline at end of file
diff --git a/Lang/C/Quickselect-algorithm b/Lang/C/Quickselect-algorithm
new file mode 120000
index 0000000000..8537bfc36a
--- /dev/null
+++ b/Lang/C/Quickselect-algorithm
@@ -0,0 +1 @@
+../../Task/Quickselect-algorithm/C
\ No newline at end of file
diff --git a/Lang/C/Rep-string b/Lang/C/Rep-string
new file mode 120000
index 0000000000..84cb693941
--- /dev/null
+++ b/Lang/C/Rep-string
@@ -0,0 +1 @@
+../../Task/Rep-string/C
\ No newline at end of file
diff --git a/Lang/C/Reverse-words-in-a-string b/Lang/C/Reverse-words-in-a-string
new file mode 120000
index 0000000000..61bc3ce7ee
--- /dev/null
+++ b/Lang/C/Reverse-words-in-a-string
@@ -0,0 +1 @@
+../../Task/Reverse-words-in-a-string/C
\ No newline at end of file
diff --git a/Lang/C/Rosetta-Code-Find-bare-lang-tags b/Lang/C/Rosetta-Code-Find-bare-lang-tags
new file mode 120000
index 0000000000..e0bc95da7b
--- /dev/null
+++ b/Lang/C/Rosetta-Code-Find-bare-lang-tags
@@ -0,0 +1 @@
+../../Task/Rosetta-Code-Find-bare-lang-tags/C
\ No newline at end of file
diff --git a/Lang/C/Runge-Kutta-method b/Lang/C/Runge-Kutta-method
new file mode 120000
index 0000000000..f2fcb1a937
--- /dev/null
+++ b/Lang/C/Runge-Kutta-method
@@ -0,0 +1 @@
+../../Task/Runge-Kutta-method/C
\ No newline at end of file
diff --git a/Lang/C/Semiprime b/Lang/C/Semiprime
new file mode 120000
index 0000000000..e7166161d0
--- /dev/null
+++ b/Lang/C/Semiprime
@@ -0,0 +1 @@
+../../Task/Semiprime/C
\ No newline at end of file
diff --git a/Lang/C/State-name-puzzle b/Lang/C/State-name-puzzle
new file mode 120000
index 0000000000..e64c664ee1
--- /dev/null
+++ b/Lang/C/State-name-puzzle
@@ -0,0 +1 @@
+../../Task/State-name-puzzle/C
\ No newline at end of file
diff --git a/Lang/C/Statistics-Basic b/Lang/C/Statistics-Basic
new file mode 120000
index 0000000000..d8ead05acd
--- /dev/null
+++ b/Lang/C/Statistics-Basic
@@ -0,0 +1 @@
+../../Task/Statistics-Basic/C
\ No newline at end of file
diff --git a/Lang/C/Stern-Brocot-sequence b/Lang/C/Stern-Brocot-sequence
new file mode 120000
index 0000000000..a47f9a4c5d
--- /dev/null
+++ b/Lang/C/Stern-Brocot-sequence
@@ -0,0 +1 @@
+../../Task/Stern-Brocot-sequence/C
\ No newline at end of file
diff --git a/Lang/C/String-append b/Lang/C/String-append
new file mode 120000
index 0000000000..9b73797433
--- /dev/null
+++ b/Lang/C/String-append
@@ -0,0 +1 @@
+../../Task/String-append/C
\ No newline at end of file
diff --git a/Lang/C/String-matching b/Lang/C/String-matching
new file mode 120000
index 0000000000..fd0270e7b7
--- /dev/null
+++ b/Lang/C/String-matching
@@ -0,0 +1 @@
+../../Task/String-matching/C
\ No newline at end of file
diff --git a/Lang/C/String-prepend b/Lang/C/String-prepend
new file mode 120000
index 0000000000..de0d586b6e
--- /dev/null
+++ b/Lang/C/String-prepend
@@ -0,0 +1 @@
+../../Task/String-prepend/C
\ No newline at end of file
diff --git a/Lang/C/Sum-multiples-of-3-and-5 b/Lang/C/Sum-multiples-of-3-and-5
new file mode 120000
index 0000000000..dffdbff8a6
--- /dev/null
+++ b/Lang/C/Sum-multiples-of-3-and-5
@@ -0,0 +1 @@
+../../Task/Sum-multiples-of-3-and-5/C
\ No newline at end of file
diff --git a/Lang/C/The-ISAAC-Cipher b/Lang/C/The-ISAAC-Cipher
new file mode 120000
index 0000000000..0d181e8777
--- /dev/null
+++ b/Lang/C/The-ISAAC-Cipher
@@ -0,0 +1 @@
+../../Task/The-ISAAC-Cipher/C
\ No newline at end of file
diff --git a/Lang/C/The-Twelve-Days-of-Christmas b/Lang/C/The-Twelve-Days-of-Christmas
new file mode 120000
index 0000000000..fee4d66c5a
--- /dev/null
+++ b/Lang/C/The-Twelve-Days-of-Christmas
@@ -0,0 +1 @@
+../../Task/The-Twelve-Days-of-Christmas/C
\ No newline at end of file
diff --git a/Lang/C/Total-circles-area b/Lang/C/Total-circles-area
new file mode 120000
index 0000000000..fa02f5bd82
--- /dev/null
+++ b/Lang/C/Total-circles-area
@@ -0,0 +1 @@
+../../Task/Total-circles-area/C
\ No newline at end of file
diff --git a/Lang/C/Ulam-spiral--for-primes- b/Lang/C/Ulam-spiral--for-primes-
new file mode 120000
index 0000000000..e32f1e23b8
--- /dev/null
+++ b/Lang/C/Ulam-spiral--for-primes-
@@ -0,0 +1 @@
+../../Task/Ulam-spiral--for-primes-/C
\ No newline at end of file
diff --git a/Lang/C/Unix-ls b/Lang/C/Unix-ls
new file mode 120000
index 0000000000..81aa214ede
--- /dev/null
+++ b/Lang/C/Unix-ls
@@ -0,0 +1 @@
+../../Task/Unix-ls/C
\ No newline at end of file
diff --git a/Lang/C/Zero-to-the-zero-power b/Lang/C/Zero-to-the-zero-power
new file mode 120000
index 0000000000..e13ecdf6c3
--- /dev/null
+++ b/Lang/C/Zero-to-the-zero-power
@@ -0,0 +1 @@
+../../Task/Zero-to-the-zero-power/C
\ No newline at end of file
diff --git a/Lang/COBOL/Comma-quibbling b/Lang/COBOL/Comma-quibbling
new file mode 120000
index 0000000000..71ea96f472
--- /dev/null
+++ b/Lang/COBOL/Comma-quibbling
@@ -0,0 +1 @@
+../../Task/Comma-quibbling/COBOL
\ No newline at end of file
diff --git a/Lang/COBOL/File-input-output b/Lang/COBOL/File-input-output
new file mode 120000
index 0000000000..943a9a917e
--- /dev/null
+++ b/Lang/COBOL/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/COBOL
\ No newline at end of file
diff --git a/Lang/COBOL/Hello-world-Newbie b/Lang/COBOL/Hello-world-Newbie
new file mode 120000
index 0000000000..0d2ec06a7a
--- /dev/null
+++ b/Lang/COBOL/Hello-world-Newbie
@@ -0,0 +1 @@
+../../Task/Hello-world-Newbie/COBOL
\ No newline at end of file
diff --git a/Lang/COBOL/Hickerson-series-of-almost-integers b/Lang/COBOL/Hickerson-series-of-almost-integers
new file mode 120000
index 0000000000..a336d6d21d
--- /dev/null
+++ b/Lang/COBOL/Hickerson-series-of-almost-integers
@@ -0,0 +1 @@
+../../Task/Hickerson-series-of-almost-integers/COBOL
\ No newline at end of file
diff --git a/Lang/COBOL/IBAN b/Lang/COBOL/IBAN
new file mode 120000
index 0000000000..0692dbeedf
--- /dev/null
+++ b/Lang/COBOL/IBAN
@@ -0,0 +1 @@
+../../Task/IBAN/COBOL
\ No newline at end of file
diff --git a/Lang/COBOL/Quickselect-algorithm b/Lang/COBOL/Quickselect-algorithm
new file mode 120000
index 0000000000..228f991314
--- /dev/null
+++ b/Lang/COBOL/Quickselect-algorithm
@@ -0,0 +1 @@
+../../Task/Quickselect-algorithm/COBOL
\ No newline at end of file
diff --git a/Lang/COBOL/String-prepend b/Lang/COBOL/String-prepend
new file mode 120000
index 0000000000..6f5995c9f0
--- /dev/null
+++ b/Lang/COBOL/String-prepend
@@ -0,0 +1 @@
+../../Task/String-prepend/COBOL
\ No newline at end of file
diff --git a/Lang/COBOL/Sum-multiples-of-3-and-5 b/Lang/COBOL/Sum-multiples-of-3-and-5
new file mode 120000
index 0000000000..b959929db1
--- /dev/null
+++ b/Lang/COBOL/Sum-multiples-of-3-and-5
@@ -0,0 +1 @@
+../../Task/Sum-multiples-of-3-and-5/COBOL
\ No newline at end of file
diff --git a/Lang/COBOL/The-Twelve-Days-of-Christmas b/Lang/COBOL/The-Twelve-Days-of-Christmas
new file mode 120000
index 0000000000..3662be5f3e
--- /dev/null
+++ b/Lang/COBOL/The-Twelve-Days-of-Christmas
@@ -0,0 +1 @@
+../../Task/The-Twelve-Days-of-Christmas/COBOL
\ No newline at end of file
diff --git a/Lang/Cache-ObjectScript/IBAN b/Lang/Cache-ObjectScript/IBAN
new file mode 120000
index 0000000000..86ea2b63f6
--- /dev/null
+++ b/Lang/Cache-ObjectScript/IBAN
@@ -0,0 +1 @@
+../../Task/IBAN/Cache-ObjectScript
\ No newline at end of file
diff --git a/Lang/Clean/File-input-output b/Lang/Clean/File-input-output
new file mode 120000
index 0000000000..21d2cb4370
--- /dev/null
+++ b/Lang/Clean/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/Clean
\ No newline at end of file
diff --git a/Lang/Clojure/ABC-Problem b/Lang/Clojure/ABC-Problem
new file mode 120000
index 0000000000..8b3d5c086b
--- /dev/null
+++ b/Lang/Clojure/ABC-Problem
@@ -0,0 +1 @@
+../../Task/ABC-Problem/Clojure
\ No newline at end of file
diff --git a/Lang/Clojure/AKS-test-for-primes b/Lang/Clojure/AKS-test-for-primes
new file mode 120000
index 0000000000..5c2026efc1
--- /dev/null
+++ b/Lang/Clojure/AKS-test-for-primes
@@ -0,0 +1 @@
+../../Task/AKS-test-for-primes/Clojure
\ No newline at end of file
diff --git a/Lang/Clojure/Amb b/Lang/Clojure/Amb
new file mode 120000
index 0000000000..c159dca623
--- /dev/null
+++ b/Lang/Clojure/Amb
@@ -0,0 +1 @@
+../../Task/Amb/Clojure
\ No newline at end of file
diff --git a/Lang/Clojure/CSV-data-manipulation b/Lang/Clojure/CSV-data-manipulation
new file mode 120000
index 0000000000..2b75ea9b07
--- /dev/null
+++ b/Lang/Clojure/CSV-data-manipulation
@@ -0,0 +1 @@
+../../Task/CSV-data-manipulation/Clojure
\ No newline at end of file
diff --git a/Lang/Clojure/Catamorphism b/Lang/Clojure/Catamorphism
new file mode 120000
index 0000000000..309b700f51
--- /dev/null
+++ b/Lang/Clojure/Catamorphism
@@ -0,0 +1 @@
+../../Task/Catamorphism/Clojure
\ No newline at end of file
diff --git a/Lang/Clojure/Comma-quibbling b/Lang/Clojure/Comma-quibbling
new file mode 120000
index 0000000000..aec5efba2b
--- /dev/null
+++ b/Lang/Clojure/Comma-quibbling
@@ -0,0 +1 @@
+../../Task/Comma-quibbling/Clojure
\ No newline at end of file
diff --git a/Lang/Clojure/Fibonacci-word b/Lang/Clojure/Fibonacci-word
new file mode 120000
index 0000000000..91ec300cb3
--- /dev/null
+++ b/Lang/Clojure/Fibonacci-word
@@ -0,0 +1 @@
+../../Task/Fibonacci-word/Clojure
\ No newline at end of file
diff --git a/Lang/Clojure/File-input-output b/Lang/Clojure/File-input-output
new file mode 120000
index 0000000000..2abdf2f207
--- /dev/null
+++ b/Lang/Clojure/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/Clojure
\ No newline at end of file
diff --git a/Lang/Clojure/Find-the-last-Sunday-of-each-month b/Lang/Clojure/Find-the-last-Sunday-of-each-month
new file mode 120000
index 0000000000..c8678082b4
--- /dev/null
+++ b/Lang/Clojure/Find-the-last-Sunday-of-each-month
@@ -0,0 +1 @@
+../../Task/Find-the-last-Sunday-of-each-month/Clojure
\ No newline at end of file
diff --git a/Lang/Clojure/Generate-lower-case-ASCII-alphabet b/Lang/Clojure/Generate-lower-case-ASCII-alphabet
new file mode 120000
index 0000000000..81bcd65dce
--- /dev/null
+++ b/Lang/Clojure/Generate-lower-case-ASCII-alphabet
@@ -0,0 +1 @@
+../../Task/Generate-lower-case-ASCII-alphabet/Clojure
\ No newline at end of file
diff --git a/Lang/Clojure/Hash-join b/Lang/Clojure/Hash-join
new file mode 120000
index 0000000000..9751447898
--- /dev/null
+++ b/Lang/Clojure/Hash-join
@@ -0,0 +1 @@
+../../Task/Hash-join/Clojure
\ No newline at end of file
diff --git a/Lang/Clojure/Hello-world-Newbie b/Lang/Clojure/Hello-world-Newbie
new file mode 120000
index 0000000000..2dca9a3077
--- /dev/null
+++ b/Lang/Clojure/Hello-world-Newbie
@@ -0,0 +1 @@
+../../Task/Hello-world-Newbie/Clojure
\ No newline at end of file
diff --git a/Lang/Clojure/Hickerson-series-of-almost-integers b/Lang/Clojure/Hickerson-series-of-almost-integers
new file mode 120000
index 0000000000..273239974b
--- /dev/null
+++ b/Lang/Clojure/Hickerson-series-of-almost-integers
@@ -0,0 +1 @@
+../../Task/Hickerson-series-of-almost-integers/Clojure
\ No newline at end of file
diff --git a/Lang/Clojure/IBAN b/Lang/Clojure/IBAN
new file mode 120000
index 0000000000..e9760937bd
--- /dev/null
+++ b/Lang/Clojure/IBAN
@@ -0,0 +1 @@
+../../Task/IBAN/Clojure
\ No newline at end of file
diff --git a/Lang/Clojure/Integer-overflow b/Lang/Clojure/Integer-overflow
new file mode 120000
index 0000000000..bb4519ae4e
--- /dev/null
+++ b/Lang/Clojure/Integer-overflow
@@ -0,0 +1 @@
+../../Task/Integer-overflow/Clojure
\ No newline at end of file
diff --git a/Lang/Clojure/Longest-increasing-subsequence b/Lang/Clojure/Longest-increasing-subsequence
new file mode 120000
index 0000000000..11e642d5ce
--- /dev/null
+++ b/Lang/Clojure/Longest-increasing-subsequence
@@ -0,0 +1 @@
+../../Task/Longest-increasing-subsequence/Clojure
\ No newline at end of file
diff --git a/Lang/Clojure/Ludic-numbers b/Lang/Clojure/Ludic-numbers
new file mode 120000
index 0000000000..da0ead2439
--- /dev/null
+++ b/Lang/Clojure/Ludic-numbers
@@ -0,0 +1 @@
+../../Task/Ludic-numbers/Clojure
\ No newline at end of file
diff --git a/Lang/Clojure/Make-directory-path b/Lang/Clojure/Make-directory-path
new file mode 120000
index 0000000000..f2e8f9233d
--- /dev/null
+++ b/Lang/Clojure/Make-directory-path
@@ -0,0 +1 @@
+../../Task/Make-directory-path/Clojure
\ No newline at end of file
diff --git a/Lang/Clojure/Nth b/Lang/Clojure/Nth
new file mode 120000
index 0000000000..22632912c6
--- /dev/null
+++ b/Lang/Clojure/Nth
@@ -0,0 +1 @@
+../../Task/Nth/Clojure
\ No newline at end of file
diff --git a/Lang/Clojure/Odd-word-problem b/Lang/Clojure/Odd-word-problem
new file mode 120000
index 0000000000..ac88ba5f7c
--- /dev/null
+++ b/Lang/Clojure/Odd-word-problem
@@ -0,0 +1 @@
+../../Task/Odd-word-problem/Clojure
\ No newline at end of file
diff --git a/Lang/Clojure/Reverse-words-in-a-string b/Lang/Clojure/Reverse-words-in-a-string
new file mode 120000
index 0000000000..4dd7ad1cfd
--- /dev/null
+++ b/Lang/Clojure/Reverse-words-in-a-string
@@ -0,0 +1 @@
+../../Task/Reverse-words-in-a-string/Clojure
\ No newline at end of file
diff --git a/Lang/Clojure/Stern-Brocot-sequence b/Lang/Clojure/Stern-Brocot-sequence
new file mode 120000
index 0000000000..15cf379504
--- /dev/null
+++ b/Lang/Clojure/Stern-Brocot-sequence
@@ -0,0 +1 @@
+../../Task/Stern-Brocot-sequence/Clojure
\ No newline at end of file
diff --git a/Lang/Clojure/String-append b/Lang/Clojure/String-append
new file mode 120000
index 0000000000..d4249298fd
--- /dev/null
+++ b/Lang/Clojure/String-append
@@ -0,0 +1 @@
+../../Task/String-append/Clojure
\ No newline at end of file
diff --git a/Lang/Clojure/String-matching b/Lang/Clojure/String-matching
new file mode 120000
index 0000000000..2a22f9aa6c
--- /dev/null
+++ b/Lang/Clojure/String-matching
@@ -0,0 +1 @@
+../../Task/String-matching/Clojure
\ No newline at end of file
diff --git a/Lang/Clojure/String-prepend b/Lang/Clojure/String-prepend
new file mode 120000
index 0000000000..1a8f195e37
--- /dev/null
+++ b/Lang/Clojure/String-prepend
@@ -0,0 +1 @@
+../../Task/String-prepend/Clojure
\ No newline at end of file
diff --git a/Lang/Clojure/Sum-multiples-of-3-and-5 b/Lang/Clojure/Sum-multiples-of-3-and-5
new file mode 120000
index 0000000000..41655e0d3a
--- /dev/null
+++ b/Lang/Clojure/Sum-multiples-of-3-and-5
@@ -0,0 +1 @@
+../../Task/Sum-multiples-of-3-and-5/Clojure
\ No newline at end of file
diff --git a/Lang/Clojure/The-Twelve-Days-of-Christmas b/Lang/Clojure/The-Twelve-Days-of-Christmas
new file mode 120000
index 0000000000..436b3a33c9
--- /dev/null
+++ b/Lang/Clojure/The-Twelve-Days-of-Christmas
@@ -0,0 +1 @@
+../../Task/The-Twelve-Days-of-Christmas/Clojure
\ No newline at end of file
diff --git a/Lang/Clojure/Unix-ls b/Lang/Clojure/Unix-ls
new file mode 120000
index 0000000000..d7fd28353d
--- /dev/null
+++ b/Lang/Clojure/Unix-ls
@@ -0,0 +1 @@
+../../Task/Unix-ls/Clojure
\ No newline at end of file
diff --git a/Lang/CoffeeScript/ABC-Problem b/Lang/CoffeeScript/ABC-Problem
new file mode 120000
index 0000000000..02106bee9d
--- /dev/null
+++ b/Lang/CoffeeScript/ABC-Problem
@@ -0,0 +1 @@
+../../Task/ABC-Problem/CoffeeScript
\ No newline at end of file
diff --git a/Lang/CoffeeScript/AKS-test-for-primes b/Lang/CoffeeScript/AKS-test-for-primes
new file mode 120000
index 0000000000..4a31748ede
--- /dev/null
+++ b/Lang/CoffeeScript/AKS-test-for-primes
@@ -0,0 +1 @@
+../../Task/AKS-test-for-primes/CoffeeScript
\ No newline at end of file
diff --git a/Lang/CoffeeScript/Benfords-law b/Lang/CoffeeScript/Benfords-law
new file mode 120000
index 0000000000..3e774dc075
--- /dev/null
+++ b/Lang/CoffeeScript/Benfords-law
@@ -0,0 +1 @@
+../../Task/Benfords-law/CoffeeScript
\ No newline at end of file
diff --git a/Lang/CoffeeScript/Closures-Value-capture b/Lang/CoffeeScript/Closures-Value-capture
new file mode 120000
index 0000000000..50d43c1d3f
--- /dev/null
+++ b/Lang/CoffeeScript/Closures-Value-capture
@@ -0,0 +1 @@
+../../Task/Closures-Value-capture/CoffeeScript
\ No newline at end of file
diff --git a/Lang/CoffeeScript/Comma-quibbling b/Lang/CoffeeScript/Comma-quibbling
new file mode 120000
index 0000000000..d38b89d7b3
--- /dev/null
+++ b/Lang/CoffeeScript/Comma-quibbling
@@ -0,0 +1 @@
+../../Task/Comma-quibbling/CoffeeScript
\ No newline at end of file
diff --git a/Lang/CoffeeScript/Odd-word-problem b/Lang/CoffeeScript/Odd-word-problem
new file mode 120000
index 0000000000..08f6d764cf
--- /dev/null
+++ b/Lang/CoffeeScript/Odd-word-problem
@@ -0,0 +1 @@
+../../Task/Odd-word-problem/CoffeeScript
\ No newline at end of file
diff --git a/Lang/CoffeeScript/Statistics-Basic b/Lang/CoffeeScript/Statistics-Basic
new file mode 120000
index 0000000000..f50b0bf330
--- /dev/null
+++ b/Lang/CoffeeScript/Statistics-Basic
@@ -0,0 +1 @@
+../../Task/Statistics-Basic/CoffeeScript
\ No newline at end of file
diff --git a/Lang/CoffeeScript/String-matching b/Lang/CoffeeScript/String-matching
new file mode 120000
index 0000000000..cb18c022d5
--- /dev/null
+++ b/Lang/CoffeeScript/String-matching
@@ -0,0 +1 @@
+../../Task/String-matching/CoffeeScript
\ No newline at end of file
diff --git a/Lang/ColdFusion/File-input-output b/Lang/ColdFusion/File-input-output
new file mode 120000
index 0000000000..a9015534b0
--- /dev/null
+++ b/Lang/ColdFusion/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/ColdFusion
\ No newline at end of file
diff --git a/Lang/Common-Lisp/9-billion-names-of-God-the-integer b/Lang/Common-Lisp/9-billion-names-of-God-the-integer
new file mode 120000
index 0000000000..b07768de38
--- /dev/null
+++ b/Lang/Common-Lisp/9-billion-names-of-God-the-integer
@@ -0,0 +1 @@
+../../Task/9-billion-names-of-God-the-integer/Common-Lisp
\ No newline at end of file
diff --git a/Lang/Common-Lisp/ABC-Problem b/Lang/Common-Lisp/ABC-Problem
new file mode 120000
index 0000000000..1724857c12
--- /dev/null
+++ b/Lang/Common-Lisp/ABC-Problem
@@ -0,0 +1 @@
+../../Task/ABC-Problem/Common-Lisp
\ No newline at end of file
diff --git a/Lang/Common-Lisp/AKS-test-for-primes b/Lang/Common-Lisp/AKS-test-for-primes
new file mode 120000
index 0000000000..605534b17a
--- /dev/null
+++ b/Lang/Common-Lisp/AKS-test-for-primes
@@ -0,0 +1 @@
+../../Task/AKS-test-for-primes/Common-Lisp
\ No newline at end of file
diff --git a/Lang/Common-Lisp/Almost-prime b/Lang/Common-Lisp/Almost-prime
new file mode 120000
index 0000000000..8f05ddb60b
--- /dev/null
+++ b/Lang/Common-Lisp/Almost-prime
@@ -0,0 +1 @@
+../../Task/Almost-prime/Common-Lisp
\ No newline at end of file
diff --git a/Lang/Common-Lisp/Amb b/Lang/Common-Lisp/Amb
new file mode 120000
index 0000000000..1c503cd1f4
--- /dev/null
+++ b/Lang/Common-Lisp/Amb
@@ -0,0 +1 @@
+../../Task/Amb/Common-Lisp
\ No newline at end of file
diff --git a/Lang/Common-Lisp/Benfords-law b/Lang/Common-Lisp/Benfords-law
new file mode 120000
index 0000000000..621344e960
--- /dev/null
+++ b/Lang/Common-Lisp/Benfords-law
@@ -0,0 +1 @@
+../../Task/Benfords-law/Common-Lisp
\ No newline at end of file
diff --git a/Lang/Common-Lisp/Bernoulli-numbers b/Lang/Common-Lisp/Bernoulli-numbers
new file mode 120000
index 0000000000..9cb84b9767
--- /dev/null
+++ b/Lang/Common-Lisp/Bernoulli-numbers
@@ -0,0 +1 @@
+../../Task/Bernoulli-numbers/Common-Lisp
\ No newline at end of file
diff --git a/Lang/Common-Lisp/CSV-data-manipulation b/Lang/Common-Lisp/CSV-data-manipulation
new file mode 120000
index 0000000000..4695fc224d
--- /dev/null
+++ b/Lang/Common-Lisp/CSV-data-manipulation
@@ -0,0 +1 @@
+../../Task/CSV-data-manipulation/Common-Lisp
\ No newline at end of file
diff --git a/Lang/Common-Lisp/Casting-out-nines b/Lang/Common-Lisp/Casting-out-nines
new file mode 120000
index 0000000000..f338a94326
--- /dev/null
+++ b/Lang/Common-Lisp/Casting-out-nines
@@ -0,0 +1 @@
+../../Task/Casting-out-nines/Common-Lisp
\ No newline at end of file
diff --git a/Lang/Common-Lisp/Catamorphism b/Lang/Common-Lisp/Catamorphism
new file mode 120000
index 0000000000..43b68535a3
--- /dev/null
+++ b/Lang/Common-Lisp/Catamorphism
@@ -0,0 +1 @@
+../../Task/Catamorphism/Common-Lisp
\ No newline at end of file
diff --git a/Lang/Common-Lisp/Chinese-remainder-theorem b/Lang/Common-Lisp/Chinese-remainder-theorem
new file mode 120000
index 0000000000..0ad124e1c2
--- /dev/null
+++ b/Lang/Common-Lisp/Chinese-remainder-theorem
@@ -0,0 +1 @@
+../../Task/Chinese-remainder-theorem/Common-Lisp
\ No newline at end of file
diff --git a/Lang/Common-Lisp/Closures-Value-capture b/Lang/Common-Lisp/Closures-Value-capture
new file mode 120000
index 0000000000..3becd0b4ad
--- /dev/null
+++ b/Lang/Common-Lisp/Closures-Value-capture
@@ -0,0 +1 @@
+../../Task/Closures-Value-capture/Common-Lisp
\ No newline at end of file
diff --git a/Lang/Common-Lisp/Comma-quibbling b/Lang/Common-Lisp/Comma-quibbling
new file mode 120000
index 0000000000..916b4462a2
--- /dev/null
+++ b/Lang/Common-Lisp/Comma-quibbling
@@ -0,0 +1 @@
+../../Task/Comma-quibbling/Common-Lisp
\ No newline at end of file
diff --git a/Lang/Common-Lisp/Currying b/Lang/Common-Lisp/Currying
new file mode 120000
index 0000000000..286ea864b6
--- /dev/null
+++ b/Lang/Common-Lisp/Currying
@@ -0,0 +1 @@
+../../Task/Currying/Common-Lisp
\ No newline at end of file
diff --git a/Lang/Common-Lisp/Digital-root-Multiplicative-digital-root b/Lang/Common-Lisp/Digital-root-Multiplicative-digital-root
new file mode 120000
index 0000000000..b00a7061ef
--- /dev/null
+++ b/Lang/Common-Lisp/Digital-root-Multiplicative-digital-root
@@ -0,0 +1 @@
+../../Task/Digital-root-Multiplicative-digital-root/Common-Lisp
\ No newline at end of file
diff --git a/Lang/Common-Lisp/File-input-output b/Lang/Common-Lisp/File-input-output
new file mode 120000
index 0000000000..ca8005464d
--- /dev/null
+++ b/Lang/Common-Lisp/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/Common-Lisp
\ No newline at end of file
diff --git a/Lang/Common-Lisp/Fractran b/Lang/Common-Lisp/Fractran
new file mode 120000
index 0000000000..3342a4c852
--- /dev/null
+++ b/Lang/Common-Lisp/Fractran
@@ -0,0 +1 @@
+../../Task/Fractran/Common-Lisp
\ No newline at end of file
diff --git a/Lang/Common-Lisp/Generate-lower-case-ASCII-alphabet b/Lang/Common-Lisp/Generate-lower-case-ASCII-alphabet
new file mode 120000
index 0000000000..2f35fd2be5
--- /dev/null
+++ b/Lang/Common-Lisp/Generate-lower-case-ASCII-alphabet
@@ -0,0 +1 @@
+../../Task/Generate-lower-case-ASCII-alphabet/Common-Lisp
\ No newline at end of file
diff --git a/Lang/Common-Lisp/Hash-join b/Lang/Common-Lisp/Hash-join
new file mode 120000
index 0000000000..ce7e920ed8
--- /dev/null
+++ b/Lang/Common-Lisp/Hash-join
@@ -0,0 +1 @@
+../../Task/Hash-join/Common-Lisp
\ No newline at end of file
diff --git a/Lang/Common-Lisp/IBAN b/Lang/Common-Lisp/IBAN
new file mode 120000
index 0000000000..c69e3a3e8f
--- /dev/null
+++ b/Lang/Common-Lisp/IBAN
@@ -0,0 +1 @@
+../../Task/IBAN/Common-Lisp
\ No newline at end of file
diff --git a/Lang/Common-Lisp/Longest-increasing-subsequence b/Lang/Common-Lisp/Longest-increasing-subsequence
new file mode 120000
index 0000000000..e9723c1815
--- /dev/null
+++ b/Lang/Common-Lisp/Longest-increasing-subsequence
@@ -0,0 +1 @@
+../../Task/Longest-increasing-subsequence/Common-Lisp
\ No newline at end of file
diff --git a/Lang/Common-Lisp/Machine-code b/Lang/Common-Lisp/Machine-code
new file mode 120000
index 0000000000..4c3c816632
--- /dev/null
+++ b/Lang/Common-Lisp/Machine-code
@@ -0,0 +1 @@
+../../Task/Machine-code/Common-Lisp
\ No newline at end of file
diff --git a/Lang/Common-Lisp/Magic-squares-of-odd-order b/Lang/Common-Lisp/Magic-squares-of-odd-order
new file mode 120000
index 0000000000..982636b03a
--- /dev/null
+++ b/Lang/Common-Lisp/Magic-squares-of-odd-order
@@ -0,0 +1 @@
+../../Task/Magic-squares-of-odd-order/Common-Lisp
\ No newline at end of file
diff --git a/Lang/Common-Lisp/Maximum-triangle-path-sum b/Lang/Common-Lisp/Maximum-triangle-path-sum
new file mode 120000
index 0000000000..72210126d6
--- /dev/null
+++ b/Lang/Common-Lisp/Maximum-triangle-path-sum
@@ -0,0 +1 @@
+../../Task/Maximum-triangle-path-sum/Common-Lisp
\ No newline at end of file
diff --git a/Lang/Common-Lisp/Move-to-front-algorithm b/Lang/Common-Lisp/Move-to-front-algorithm
new file mode 120000
index 0000000000..32e22545a7
--- /dev/null
+++ b/Lang/Common-Lisp/Move-to-front-algorithm
@@ -0,0 +1 @@
+../../Task/Move-to-front-algorithm/Common-Lisp
\ No newline at end of file
diff --git a/Lang/Common-Lisp/Narcissistic-decimal-number b/Lang/Common-Lisp/Narcissistic-decimal-number
new file mode 120000
index 0000000000..b47feb173b
--- /dev/null
+++ b/Lang/Common-Lisp/Narcissistic-decimal-number
@@ -0,0 +1 @@
+../../Task/Narcissistic-decimal-number/Common-Lisp
\ No newline at end of file
diff --git a/Lang/Common-Lisp/Nth b/Lang/Common-Lisp/Nth
new file mode 120000
index 0000000000..769a5d85b6
--- /dev/null
+++ b/Lang/Common-Lisp/Nth
@@ -0,0 +1 @@
+../../Task/Nth/Common-Lisp
\ No newline at end of file
diff --git a/Lang/Common-Lisp/Odd-word-problem b/Lang/Common-Lisp/Odd-word-problem
new file mode 120000
index 0000000000..8a874c8cce
--- /dev/null
+++ b/Lang/Common-Lisp/Odd-word-problem
@@ -0,0 +1 @@
+../../Task/Odd-word-problem/Common-Lisp
\ No newline at end of file
diff --git a/Lang/Common-Lisp/Pernicious-numbers b/Lang/Common-Lisp/Pernicious-numbers
new file mode 120000
index 0000000000..eefa41cdb9
--- /dev/null
+++ b/Lang/Common-Lisp/Pernicious-numbers
@@ -0,0 +1 @@
+../../Task/Pernicious-numbers/Common-Lisp
\ No newline at end of file
diff --git a/Lang/Common-Lisp/RSA-code b/Lang/Common-Lisp/RSA-code
new file mode 120000
index 0000000000..2d8077b2f7
--- /dev/null
+++ b/Lang/Common-Lisp/RSA-code
@@ -0,0 +1 @@
+../../Task/RSA-code/Common-Lisp
\ No newline at end of file
diff --git a/Lang/Common-Lisp/Reverse-words-in-a-string b/Lang/Common-Lisp/Reverse-words-in-a-string
new file mode 120000
index 0000000000..bb2b455639
--- /dev/null
+++ b/Lang/Common-Lisp/Reverse-words-in-a-string
@@ -0,0 +1 @@
+../../Task/Reverse-words-in-a-string/Common-Lisp
\ No newline at end of file
diff --git a/Lang/Common-Lisp/Semiprime b/Lang/Common-Lisp/Semiprime
new file mode 120000
index 0000000000..07dbef9d4d
--- /dev/null
+++ b/Lang/Common-Lisp/Semiprime
@@ -0,0 +1 @@
+../../Task/Semiprime/Common-Lisp
\ No newline at end of file
diff --git a/Lang/Common-Lisp/String-append b/Lang/Common-Lisp/String-append
new file mode 120000
index 0000000000..a6f646b9c2
--- /dev/null
+++ b/Lang/Common-Lisp/String-append
@@ -0,0 +1 @@
+../../Task/String-append/Common-Lisp
\ No newline at end of file
diff --git a/Lang/Common-Lisp/String-matching b/Lang/Common-Lisp/String-matching
new file mode 120000
index 0000000000..1ff51c4e63
--- /dev/null
+++ b/Lang/Common-Lisp/String-matching
@@ -0,0 +1 @@
+../../Task/String-matching/Common-Lisp
\ No newline at end of file
diff --git a/Lang/Common-Lisp/String-prepend b/Lang/Common-Lisp/String-prepend
new file mode 120000
index 0000000000..d973b94bdd
--- /dev/null
+++ b/Lang/Common-Lisp/String-prepend
@@ -0,0 +1 @@
+../../Task/String-prepend/Common-Lisp
\ No newline at end of file
diff --git a/Lang/Common-Lisp/Sum-multiples-of-3-and-5 b/Lang/Common-Lisp/Sum-multiples-of-3-and-5
new file mode 120000
index 0000000000..92e11c6d9e
--- /dev/null
+++ b/Lang/Common-Lisp/Sum-multiples-of-3-and-5
@@ -0,0 +1 @@
+../../Task/Sum-multiples-of-3-and-5/Common-Lisp
\ No newline at end of file
diff --git a/Lang/Component-Pascal/String-matching b/Lang/Component-Pascal/String-matching
new file mode 120000
index 0000000000..c14798f06f
--- /dev/null
+++ b/Lang/Component-Pascal/String-matching
@@ -0,0 +1 @@
+../../Task/String-matching/Component-Pascal
\ No newline at end of file
diff --git a/Lang/Component-Pascal/Sum-multiples-of-3-and-5 b/Lang/Component-Pascal/Sum-multiples-of-3-and-5
new file mode 120000
index 0000000000..e5fe012275
--- /dev/null
+++ b/Lang/Component-Pascal/Sum-multiples-of-3-and-5
@@ -0,0 +1 @@
+../../Task/Sum-multiples-of-3-and-5/Component-Pascal
\ No newline at end of file
diff --git a/Lang/D/9-billion-names-of-God-the-integer b/Lang/D/9-billion-names-of-God-the-integer
new file mode 120000
index 0000000000..1eefd05c98
--- /dev/null
+++ b/Lang/D/9-billion-names-of-God-the-integer
@@ -0,0 +1 @@
+../../Task/9-billion-names-of-God-the-integer/D
\ No newline at end of file
diff --git a/Lang/D/ABC-Problem b/Lang/D/ABC-Problem
new file mode 120000
index 0000000000..7ed32356bd
--- /dev/null
+++ b/Lang/D/ABC-Problem
@@ -0,0 +1 @@
+../../Task/ABC-Problem/D
\ No newline at end of file
diff --git a/Lang/D/AKS-test-for-primes b/Lang/D/AKS-test-for-primes
new file mode 120000
index 0000000000..37918836f8
--- /dev/null
+++ b/Lang/D/AKS-test-for-primes
@@ -0,0 +1 @@
+../../Task/AKS-test-for-primes/D
\ No newline at end of file
diff --git a/Lang/D/Abundant,-deficient-and-perfect-number-classifications b/Lang/D/Abundant,-deficient-and-perfect-number-classifications
new file mode 120000
index 0000000000..f73782ef9d
--- /dev/null
+++ b/Lang/D/Abundant,-deficient-and-perfect-number-classifications
@@ -0,0 +1 @@
+../../Task/Abundant,-deficient-and-perfect-number-classifications/D
\ No newline at end of file
diff --git a/Lang/D/Aliquot-sequence-classifications b/Lang/D/Aliquot-sequence-classifications
new file mode 120000
index 0000000000..181ccff518
--- /dev/null
+++ b/Lang/D/Aliquot-sequence-classifications
@@ -0,0 +1 @@
+../../Task/Aliquot-sequence-classifications/D
\ No newline at end of file
diff --git a/Lang/D/Almost-prime b/Lang/D/Almost-prime
new file mode 120000
index 0000000000..577d8ac8c7
--- /dev/null
+++ b/Lang/D/Almost-prime
@@ -0,0 +1 @@
+../../Task/Almost-prime/D
\ No newline at end of file
diff --git a/Lang/D/Amb b/Lang/D/Amb
new file mode 120000
index 0000000000..ab35b0424e
--- /dev/null
+++ b/Lang/D/Amb
@@ -0,0 +1 @@
+../../Task/Amb/D
\ No newline at end of file
diff --git a/Lang/D/Amicable-pairs b/Lang/D/Amicable-pairs
new file mode 120000
index 0000000000..96082c090d
--- /dev/null
+++ b/Lang/D/Amicable-pairs
@@ -0,0 +1 @@
+../../Task/Amicable-pairs/D
\ No newline at end of file
diff --git a/Lang/D/Benfords-law b/Lang/D/Benfords-law
new file mode 120000
index 0000000000..d5c7560b7b
--- /dev/null
+++ b/Lang/D/Benfords-law
@@ -0,0 +1 @@
+../../Task/Benfords-law/D
\ No newline at end of file
diff --git a/Lang/D/Bernoulli-numbers b/Lang/D/Bernoulli-numbers
new file mode 120000
index 0000000000..384c621c0c
--- /dev/null
+++ b/Lang/D/Bernoulli-numbers
@@ -0,0 +1 @@
+../../Task/Bernoulli-numbers/D
\ No newline at end of file
diff --git a/Lang/D/Bitcoin-public-point-to-address b/Lang/D/Bitcoin-public-point-to-address
new file mode 120000
index 0000000000..81a4ae4d4c
--- /dev/null
+++ b/Lang/D/Bitcoin-public-point-to-address
@@ -0,0 +1 @@
+../../Task/Bitcoin-public-point-to-address/D
\ No newline at end of file
diff --git a/Lang/D/CSV-data-manipulation b/Lang/D/CSV-data-manipulation
new file mode 120000
index 0000000000..df74dee649
--- /dev/null
+++ b/Lang/D/CSV-data-manipulation
@@ -0,0 +1 @@
+../../Task/CSV-data-manipulation/D
\ No newline at end of file
diff --git a/Lang/D/Calendar---for-REAL-programmers b/Lang/D/Calendar---for-REAL-programmers
new file mode 120000
index 0000000000..ce8404ef14
--- /dev/null
+++ b/Lang/D/Calendar---for-REAL-programmers
@@ -0,0 +1 @@
+../../Task/Calendar---for-REAL-programmers/D
\ No newline at end of file
diff --git a/Lang/D/Casting-out-nines b/Lang/D/Casting-out-nines
new file mode 120000
index 0000000000..7a13f6b17a
--- /dev/null
+++ b/Lang/D/Casting-out-nines
@@ -0,0 +1 @@
+../../Task/Casting-out-nines/D
\ No newline at end of file
diff --git a/Lang/D/Catalan-numbers-Pascals-triangle b/Lang/D/Catalan-numbers-Pascals-triangle
new file mode 120000
index 0000000000..1e13e60dc9
--- /dev/null
+++ b/Lang/D/Catalan-numbers-Pascals-triangle
@@ -0,0 +1 @@
+../../Task/Catalan-numbers-Pascals-triangle/D
\ No newline at end of file
diff --git a/Lang/D/Catamorphism b/Lang/D/Catamorphism
new file mode 120000
index 0000000000..107c6c1a86
--- /dev/null
+++ b/Lang/D/Catamorphism
@@ -0,0 +1 @@
+../../Task/Catamorphism/D
\ No newline at end of file
diff --git a/Lang/D/Chinese-remainder-theorem b/Lang/D/Chinese-remainder-theorem
new file mode 120000
index 0000000000..66a84e8e2e
--- /dev/null
+++ b/Lang/D/Chinese-remainder-theorem
@@ -0,0 +1 @@
+../../Task/Chinese-remainder-theorem/D
\ No newline at end of file
diff --git a/Lang/D/Circles-of-given-radius-through-two-points b/Lang/D/Circles-of-given-radius-through-two-points
new file mode 120000
index 0000000000..3676afbec6
--- /dev/null
+++ b/Lang/D/Circles-of-given-radius-through-two-points
@@ -0,0 +1 @@
+../../Task/Circles-of-given-radius-through-two-points/D
\ No newline at end of file
diff --git a/Lang/D/Closures-Value-capture b/Lang/D/Closures-Value-capture
new file mode 120000
index 0000000000..35a32caf08
--- /dev/null
+++ b/Lang/D/Closures-Value-capture
@@ -0,0 +1 @@
+../../Task/Closures-Value-capture/D
\ No newline at end of file
diff --git a/Lang/D/Combinations-and-permutations b/Lang/D/Combinations-and-permutations
new file mode 120000
index 0000000000..6c2439051e
--- /dev/null
+++ b/Lang/D/Combinations-and-permutations
@@ -0,0 +1 @@
+../../Task/Combinations-and-permutations/D
\ No newline at end of file
diff --git a/Lang/D/Comma-quibbling b/Lang/D/Comma-quibbling
new file mode 120000
index 0000000000..794b4349e0
--- /dev/null
+++ b/Lang/D/Comma-quibbling
@@ -0,0 +1 @@
+../../Task/Comma-quibbling/D
\ No newline at end of file
diff --git a/Lang/D/Conjugate-transpose b/Lang/D/Conjugate-transpose
new file mode 120000
index 0000000000..a42441a64a
--- /dev/null
+++ b/Lang/D/Conjugate-transpose
@@ -0,0 +1 @@
+../../Task/Conjugate-transpose/D
\ No newline at end of file
diff --git a/Lang/D/Convert-decimal-number-to-rational b/Lang/D/Convert-decimal-number-to-rational
new file mode 120000
index 0000000000..e2e769f0ec
--- /dev/null
+++ b/Lang/D/Convert-decimal-number-to-rational
@@ -0,0 +1 @@
+../../Task/Convert-decimal-number-to-rational/D
\ No newline at end of file
diff --git a/Lang/D/Currying b/Lang/D/Currying
new file mode 120000
index 0000000000..ad8df76b72
--- /dev/null
+++ b/Lang/D/Currying
@@ -0,0 +1 @@
+../../Task/Currying/D
\ No newline at end of file
diff --git a/Lang/D/Digital-root-Multiplicative-digital-root b/Lang/D/Digital-root-Multiplicative-digital-root
new file mode 120000
index 0000000000..2437b7abef
--- /dev/null
+++ b/Lang/D/Digital-root-Multiplicative-digital-root
@@ -0,0 +1 @@
+../../Task/Digital-root-Multiplicative-digital-root/D
\ No newline at end of file
diff --git a/Lang/D/Extensible-prime-generator b/Lang/D/Extensible-prime-generator
new file mode 120000
index 0000000000..10d2352cce
--- /dev/null
+++ b/Lang/D/Extensible-prime-generator
@@ -0,0 +1 @@
+../../Task/Extensible-prime-generator/D
\ No newline at end of file
diff --git a/Lang/D/Fibonacci-word b/Lang/D/Fibonacci-word
new file mode 120000
index 0000000000..076d29a63f
--- /dev/null
+++ b/Lang/D/Fibonacci-word
@@ -0,0 +1 @@
+../../Task/Fibonacci-word/D
\ No newline at end of file
diff --git a/Lang/D/Fibonacci-word-fractal b/Lang/D/Fibonacci-word-fractal
new file mode 120000
index 0000000000..f8cf77d0f6
--- /dev/null
+++ b/Lang/D/Fibonacci-word-fractal
@@ -0,0 +1 @@
+../../Task/Fibonacci-word-fractal/D
\ No newline at end of file
diff --git a/Lang/D/File-input-output b/Lang/D/File-input-output
new file mode 120000
index 0000000000..0c6237b89b
--- /dev/null
+++ b/Lang/D/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/D
\ No newline at end of file
diff --git a/Lang/D/Find-the-last-Sunday-of-each-month b/Lang/D/Find-the-last-Sunday-of-each-month
new file mode 120000
index 0000000000..ba36aca845
--- /dev/null
+++ b/Lang/D/Find-the-last-Sunday-of-each-month
@@ -0,0 +1 @@
+../../Task/Find-the-last-Sunday-of-each-month/D
\ No newline at end of file
diff --git a/Lang/D/Flipping-bits-game b/Lang/D/Flipping-bits-game
new file mode 120000
index 0000000000..4bd85468d3
--- /dev/null
+++ b/Lang/D/Flipping-bits-game
@@ -0,0 +1 @@
+../../Task/Flipping-bits-game/D
\ No newline at end of file
diff --git a/Lang/D/Fractran b/Lang/D/Fractran
new file mode 120000
index 0000000000..97d633be71
--- /dev/null
+++ b/Lang/D/Fractran
@@ -0,0 +1 @@
+../../Task/Fractran/D
\ No newline at end of file
diff --git a/Lang/D/Gaussian-elimination b/Lang/D/Gaussian-elimination
new file mode 120000
index 0000000000..9751546a3b
--- /dev/null
+++ b/Lang/D/Gaussian-elimination
@@ -0,0 +1 @@
+../../Task/Gaussian-elimination/D
\ No newline at end of file
diff --git a/Lang/D/Generate-Chess960-starting-position b/Lang/D/Generate-Chess960-starting-position
new file mode 120000
index 0000000000..8e34cba9e3
--- /dev/null
+++ b/Lang/D/Generate-Chess960-starting-position
@@ -0,0 +1 @@
+../../Task/Generate-Chess960-starting-position/D
\ No newline at end of file
diff --git a/Lang/D/Generate-lower-case-ASCII-alphabet b/Lang/D/Generate-lower-case-ASCII-alphabet
new file mode 120000
index 0000000000..d7c5fe9808
--- /dev/null
+++ b/Lang/D/Generate-lower-case-ASCII-alphabet
@@ -0,0 +1 @@
+../../Task/Generate-lower-case-ASCII-alphabet/D
\ No newline at end of file
diff --git a/Lang/D/Hash-join b/Lang/D/Hash-join
new file mode 120000
index 0000000000..cab729d5f2
--- /dev/null
+++ b/Lang/D/Hash-join
@@ -0,0 +1 @@
+../../Task/Hash-join/D
\ No newline at end of file
diff --git a/Lang/D/Hello-world-Newbie b/Lang/D/Hello-world-Newbie
new file mode 120000
index 0000000000..bb84052e6a
--- /dev/null
+++ b/Lang/D/Hello-world-Newbie
@@ -0,0 +1 @@
+../../Task/Hello-world-Newbie/D
\ No newline at end of file
diff --git a/Lang/D/Heronian-triangles b/Lang/D/Heronian-triangles
new file mode 120000
index 0000000000..2b0976326c
--- /dev/null
+++ b/Lang/D/Heronian-triangles
@@ -0,0 +1 @@
+../../Task/Heronian-triangles/D
\ No newline at end of file
diff --git a/Lang/D/Hickerson-series-of-almost-integers b/Lang/D/Hickerson-series-of-almost-integers
new file mode 120000
index 0000000000..c42872a6a9
--- /dev/null
+++ b/Lang/D/Hickerson-series-of-almost-integers
@@ -0,0 +1 @@
+../../Task/Hickerson-series-of-almost-integers/D
\ No newline at end of file
diff --git a/Lang/D/IBAN b/Lang/D/IBAN
new file mode 120000
index 0000000000..b043863505
--- /dev/null
+++ b/Lang/D/IBAN
@@ -0,0 +1 @@
+../../Task/IBAN/D
\ No newline at end of file
diff --git a/Lang/D/Integer-overflow b/Lang/D/Integer-overflow
new file mode 120000
index 0000000000..055c493755
--- /dev/null
+++ b/Lang/D/Integer-overflow
@@ -0,0 +1 @@
+../../Task/Integer-overflow/D
\ No newline at end of file
diff --git a/Lang/D/Iterated-digits-squaring b/Lang/D/Iterated-digits-squaring
new file mode 120000
index 0000000000..0bed83e462
--- /dev/null
+++ b/Lang/D/Iterated-digits-squaring
@@ -0,0 +1 @@
+../../Task/Iterated-digits-squaring/D
\ No newline at end of file
diff --git a/Lang/D/K-d-tree b/Lang/D/K-d-tree
new file mode 120000
index 0000000000..5e35282454
--- /dev/null
+++ b/Lang/D/K-d-tree
@@ -0,0 +1 @@
+../../Task/K-d-tree/D
\ No newline at end of file
diff --git a/Lang/D/Left-factorials b/Lang/D/Left-factorials
new file mode 120000
index 0000000000..f03f0e32fa
--- /dev/null
+++ b/Lang/D/Left-factorials
@@ -0,0 +1 @@
+../../Task/Left-factorials/D
\ No newline at end of file
diff --git a/Lang/D/Longest-increasing-subsequence b/Lang/D/Longest-increasing-subsequence
new file mode 120000
index 0000000000..4a5dc99a88
--- /dev/null
+++ b/Lang/D/Longest-increasing-subsequence
@@ -0,0 +1 @@
+../../Task/Longest-increasing-subsequence/D
\ No newline at end of file
diff --git a/Lang/D/Ludic-numbers b/Lang/D/Ludic-numbers
new file mode 120000
index 0000000000..9e835c184e
--- /dev/null
+++ b/Lang/D/Ludic-numbers
@@ -0,0 +1 @@
+../../Task/Ludic-numbers/D
\ No newline at end of file
diff --git a/Lang/D/Machine-code b/Lang/D/Machine-code
new file mode 120000
index 0000000000..3fc46ca634
--- /dev/null
+++ b/Lang/D/Machine-code
@@ -0,0 +1 @@
+../../Task/Machine-code/D
\ No newline at end of file
diff --git a/Lang/D/Magic-squares-of-odd-order b/Lang/D/Magic-squares-of-odd-order
new file mode 120000
index 0000000000..6a63554a40
--- /dev/null
+++ b/Lang/D/Magic-squares-of-odd-order
@@ -0,0 +1 @@
+../../Task/Magic-squares-of-odd-order/D
\ No newline at end of file
diff --git a/Lang/D/Maximum-triangle-path-sum b/Lang/D/Maximum-triangle-path-sum
new file mode 120000
index 0000000000..f2bdc7305b
--- /dev/null
+++ b/Lang/D/Maximum-triangle-path-sum
@@ -0,0 +1 @@
+../../Task/Maximum-triangle-path-sum/D
\ No newline at end of file
diff --git a/Lang/D/Move-to-front-algorithm b/Lang/D/Move-to-front-algorithm
new file mode 120000
index 0000000000..a31ecf0e72
--- /dev/null
+++ b/Lang/D/Move-to-front-algorithm
@@ -0,0 +1 @@
+../../Task/Move-to-front-algorithm/D
\ No newline at end of file
diff --git a/Lang/D/Munching-squares b/Lang/D/Munching-squares
new file mode 120000
index 0000000000..b5a7fb5141
--- /dev/null
+++ b/Lang/D/Munching-squares
@@ -0,0 +1 @@
+../../Task/Munching-squares/D
\ No newline at end of file
diff --git a/Lang/D/Narcissistic-decimal-number b/Lang/D/Narcissistic-decimal-number
new file mode 120000
index 0000000000..fcd7b1b465
--- /dev/null
+++ b/Lang/D/Narcissistic-decimal-number
@@ -0,0 +1 @@
+../../Task/Narcissistic-decimal-number/D
\ No newline at end of file
diff --git a/Lang/D/Natural-sorting b/Lang/D/Natural-sorting
new file mode 120000
index 0000000000..e02279d6a1
--- /dev/null
+++ b/Lang/D/Natural-sorting
@@ -0,0 +1 @@
+../../Task/Natural-sorting/D
\ No newline at end of file
diff --git a/Lang/D/Nth b/Lang/D/Nth
new file mode 120000
index 0000000000..fb460b8553
--- /dev/null
+++ b/Lang/D/Nth
@@ -0,0 +1 @@
+../../Task/Nth/D
\ No newline at end of file
diff --git a/Lang/D/Odd-word-problem b/Lang/D/Odd-word-problem
new file mode 120000
index 0000000000..ed7bc90fbe
--- /dev/null
+++ b/Lang/D/Odd-word-problem
@@ -0,0 +1 @@
+../../Task/Odd-word-problem/D
\ No newline at end of file
diff --git a/Lang/D/Old-lady-swallowed-a-fly b/Lang/D/Old-lady-swallowed-a-fly
new file mode 120000
index 0000000000..55ae2ede92
--- /dev/null
+++ b/Lang/D/Old-lady-swallowed-a-fly
@@ -0,0 +1 @@
+../../Task/Old-lady-swallowed-a-fly/D
\ No newline at end of file
diff --git a/Lang/D/Order-disjoint-list-items b/Lang/D/Order-disjoint-list-items
new file mode 120000
index 0000000000..c0d76b707b
--- /dev/null
+++ b/Lang/D/Order-disjoint-list-items
@@ -0,0 +1 @@
+../../Task/Order-disjoint-list-items/D
\ No newline at end of file
diff --git a/Lang/D/Paraffins b/Lang/D/Paraffins
new file mode 120000
index 0000000000..8d199f5710
--- /dev/null
+++ b/Lang/D/Paraffins
@@ -0,0 +1 @@
+../../Task/Paraffins/D
\ No newline at end of file
diff --git a/Lang/D/Penneys-game b/Lang/D/Penneys-game
new file mode 120000
index 0000000000..8382742f91
--- /dev/null
+++ b/Lang/D/Penneys-game
@@ -0,0 +1 @@
+../../Task/Penneys-game/D
\ No newline at end of file
diff --git a/Lang/D/Percolation-Bond-percolation b/Lang/D/Percolation-Bond-percolation
new file mode 120000
index 0000000000..e6a1091c90
--- /dev/null
+++ b/Lang/D/Percolation-Bond-percolation
@@ -0,0 +1 @@
+../../Task/Percolation-Bond-percolation/D
\ No newline at end of file
diff --git a/Lang/D/Percolation-Mean-cluster-density b/Lang/D/Percolation-Mean-cluster-density
new file mode 120000
index 0000000000..2049e933f3
--- /dev/null
+++ b/Lang/D/Percolation-Mean-cluster-density
@@ -0,0 +1 @@
+../../Task/Percolation-Mean-cluster-density/D
\ No newline at end of file
diff --git a/Lang/D/Percolation-Mean-run-density b/Lang/D/Percolation-Mean-run-density
new file mode 120000
index 0000000000..ecafbdbd0a
--- /dev/null
+++ b/Lang/D/Percolation-Mean-run-density
@@ -0,0 +1 @@
+../../Task/Percolation-Mean-run-density/D
\ No newline at end of file
diff --git a/Lang/D/Percolation-Site-percolation b/Lang/D/Percolation-Site-percolation
new file mode 120000
index 0000000000..981ee0378a
--- /dev/null
+++ b/Lang/D/Percolation-Site-percolation
@@ -0,0 +1 @@
+../../Task/Percolation-Site-percolation/D
\ No newline at end of file
diff --git a/Lang/D/Permutations-Rank-of-a-permutation b/Lang/D/Permutations-Rank-of-a-permutation
new file mode 120000
index 0000000000..1496e01d87
--- /dev/null
+++ b/Lang/D/Permutations-Rank-of-a-permutation
@@ -0,0 +1 @@
+../../Task/Permutations-Rank-of-a-permutation/D
\ No newline at end of file
diff --git a/Lang/D/Pernicious-numbers b/Lang/D/Pernicious-numbers
new file mode 120000
index 0000000000..b244ea525d
--- /dev/null
+++ b/Lang/D/Pernicious-numbers
@@ -0,0 +1 @@
+../../Task/Pernicious-numbers/D
\ No newline at end of file
diff --git a/Lang/D/Phrase-reversals b/Lang/D/Phrase-reversals
new file mode 120000
index 0000000000..dd7ee84b02
--- /dev/null
+++ b/Lang/D/Phrase-reversals
@@ -0,0 +1 @@
+../../Task/Phrase-reversals/D
\ No newline at end of file
diff --git a/Lang/D/Quickselect-algorithm b/Lang/D/Quickselect-algorithm
new file mode 120000
index 0000000000..92b3b1ff83
--- /dev/null
+++ b/Lang/D/Quickselect-algorithm
@@ -0,0 +1 @@
+../../Task/Quickselect-algorithm/D
\ No newline at end of file
diff --git a/Lang/D/RSA-code b/Lang/D/RSA-code
new file mode 120000
index 0000000000..e401b73209
--- /dev/null
+++ b/Lang/D/RSA-code
@@ -0,0 +1 @@
+../../Task/RSA-code/D
\ No newline at end of file
diff --git a/Lang/D/Rep-string b/Lang/D/Rep-string
new file mode 120000
index 0000000000..83b5547319
--- /dev/null
+++ b/Lang/D/Rep-string
@@ -0,0 +1 @@
+../../Task/Rep-string/D
\ No newline at end of file
diff --git a/Lang/D/Reverse-words-in-a-string b/Lang/D/Reverse-words-in-a-string
new file mode 120000
index 0000000000..359e7227bf
--- /dev/null
+++ b/Lang/D/Reverse-words-in-a-string
@@ -0,0 +1 @@
+../../Task/Reverse-words-in-a-string/D
\ No newline at end of file
diff --git a/Lang/D/Runge-Kutta-method b/Lang/D/Runge-Kutta-method
new file mode 120000
index 0000000000..690e6e3f17
--- /dev/null
+++ b/Lang/D/Runge-Kutta-method
@@ -0,0 +1 @@
+../../Task/Runge-Kutta-method/D
\ No newline at end of file
diff --git a/Lang/D/Semiprime b/Lang/D/Semiprime
new file mode 120000
index 0000000000..6aac10b5e5
--- /dev/null
+++ b/Lang/D/Semiprime
@@ -0,0 +1 @@
+../../Task/Semiprime/D
\ No newline at end of file
diff --git a/Lang/D/Sequence-of-primes-by-Trial-Division b/Lang/D/Sequence-of-primes-by-Trial-Division
new file mode 120000
index 0000000000..85dabd19f5
--- /dev/null
+++ b/Lang/D/Sequence-of-primes-by-Trial-Division
@@ -0,0 +1 @@
+../../Task/Sequence-of-primes-by-Trial-Division/D
\ No newline at end of file
diff --git a/Lang/D/Solve-a-Holy-Knights-tour b/Lang/D/Solve-a-Holy-Knights-tour
new file mode 120000
index 0000000000..4bb9116dec
--- /dev/null
+++ b/Lang/D/Solve-a-Holy-Knights-tour
@@ -0,0 +1 @@
+../../Task/Solve-a-Holy-Knights-tour/D
\ No newline at end of file
diff --git a/Lang/D/Solve-a-Hopido-puzzle b/Lang/D/Solve-a-Hopido-puzzle
new file mode 120000
index 0000000000..da7ea028ab
--- /dev/null
+++ b/Lang/D/Solve-a-Hopido-puzzle
@@ -0,0 +1 @@
+../../Task/Solve-a-Hopido-puzzle/D
\ No newline at end of file
diff --git a/Lang/D/Solve-a-Numbrix-puzzle b/Lang/D/Solve-a-Numbrix-puzzle
new file mode 120000
index 0000000000..f4ab63037c
--- /dev/null
+++ b/Lang/D/Solve-a-Numbrix-puzzle
@@ -0,0 +1 @@
+../../Task/Solve-a-Numbrix-puzzle/D
\ No newline at end of file
diff --git a/Lang/D/Solve-the-no-connection-puzzle b/Lang/D/Solve-the-no-connection-puzzle
new file mode 120000
index 0000000000..d52e668496
--- /dev/null
+++ b/Lang/D/Solve-the-no-connection-puzzle
@@ -0,0 +1 @@
+../../Task/Solve-the-no-connection-puzzle/D
\ No newline at end of file
diff --git a/Lang/D/Sparkline-in-unicode b/Lang/D/Sparkline-in-unicode
new file mode 120000
index 0000000000..889eafb723
--- /dev/null
+++ b/Lang/D/Sparkline-in-unicode
@@ -0,0 +1 @@
+../../Task/Sparkline-in-unicode/D
\ No newline at end of file
diff --git a/Lang/D/State-name-puzzle b/Lang/D/State-name-puzzle
new file mode 120000
index 0000000000..c47ddcfb5a
--- /dev/null
+++ b/Lang/D/State-name-puzzle
@@ -0,0 +1 @@
+../../Task/State-name-puzzle/D
\ No newline at end of file
diff --git a/Lang/D/Statistics-Basic b/Lang/D/Statistics-Basic
new file mode 120000
index 0000000000..e3908039aa
--- /dev/null
+++ b/Lang/D/Statistics-Basic
@@ -0,0 +1 @@
+../../Task/Statistics-Basic/D
\ No newline at end of file
diff --git a/Lang/D/Stern-Brocot-sequence b/Lang/D/Stern-Brocot-sequence
new file mode 120000
index 0000000000..1b3a5e1ec9
--- /dev/null
+++ b/Lang/D/Stern-Brocot-sequence
@@ -0,0 +1 @@
+../../Task/Stern-Brocot-sequence/D
\ No newline at end of file
diff --git a/Lang/D/String-append b/Lang/D/String-append
new file mode 120000
index 0000000000..b5887faab7
--- /dev/null
+++ b/Lang/D/String-append
@@ -0,0 +1 @@
+../../Task/String-append/D
\ No newline at end of file
diff --git a/Lang/D/String-matching b/Lang/D/String-matching
new file mode 120000
index 0000000000..752859736a
--- /dev/null
+++ b/Lang/D/String-matching
@@ -0,0 +1 @@
+../../Task/String-matching/D
\ No newline at end of file
diff --git a/Lang/D/String-prepend b/Lang/D/String-prepend
new file mode 120000
index 0000000000..5f149627e7
--- /dev/null
+++ b/Lang/D/String-prepend
@@ -0,0 +1 @@
+../../Task/String-prepend/D
\ No newline at end of file
diff --git a/Lang/D/Sum-multiples-of-3-and-5 b/Lang/D/Sum-multiples-of-3-and-5
new file mode 120000
index 0000000000..a08348de6d
--- /dev/null
+++ b/Lang/D/Sum-multiples-of-3-and-5
@@ -0,0 +1 @@
+../../Task/Sum-multiples-of-3-and-5/D
\ No newline at end of file
diff --git a/Lang/D/The-ISAAC-Cipher b/Lang/D/The-ISAAC-Cipher
new file mode 120000
index 0000000000..b8042642de
--- /dev/null
+++ b/Lang/D/The-ISAAC-Cipher
@@ -0,0 +1 @@
+../../Task/The-ISAAC-Cipher/D
\ No newline at end of file
diff --git a/Lang/D/The-Twelve-Days-of-Christmas b/Lang/D/The-Twelve-Days-of-Christmas
new file mode 120000
index 0000000000..409957da26
--- /dev/null
+++ b/Lang/D/The-Twelve-Days-of-Christmas
@@ -0,0 +1 @@
+../../Task/The-Twelve-Days-of-Christmas/D
\ No newline at end of file
diff --git a/Lang/D/Total-circles-area b/Lang/D/Total-circles-area
new file mode 120000
index 0000000000..30aaf31490
--- /dev/null
+++ b/Lang/D/Total-circles-area
@@ -0,0 +1 @@
+../../Task/Total-circles-area/D
\ No newline at end of file
diff --git a/Lang/D/Ulam-spiral--for-primes- b/Lang/D/Ulam-spiral--for-primes-
new file mode 120000
index 0000000000..edb38271b6
--- /dev/null
+++ b/Lang/D/Ulam-spiral--for-primes-
@@ -0,0 +1 @@
+../../Task/Ulam-spiral--for-primes-/D
\ No newline at end of file
diff --git a/Lang/D/Unix-ls b/Lang/D/Unix-ls
new file mode 120000
index 0000000000..d866d79535
--- /dev/null
+++ b/Lang/D/Unix-ls
@@ -0,0 +1 @@
+../../Task/Unix-ls/D
\ No newline at end of file
diff --git a/Lang/D/Vogels-approximation-method b/Lang/D/Vogels-approximation-method
new file mode 120000
index 0000000000..a5a274e598
--- /dev/null
+++ b/Lang/D/Vogels-approximation-method
@@ -0,0 +1 @@
+../../Task/Vogels-approximation-method/D
\ No newline at end of file
diff --git a/Lang/D/World-Cup-group-stage b/Lang/D/World-Cup-group-stage
new file mode 120000
index 0000000000..8ecdfbe671
--- /dev/null
+++ b/Lang/D/World-Cup-group-stage
@@ -0,0 +1 @@
+../../Task/World-Cup-group-stage/D
\ No newline at end of file
diff --git a/Lang/D/Zero-to-the-zero-power b/Lang/D/Zero-to-the-zero-power
new file mode 120000
index 0000000000..a8509a72b1
--- /dev/null
+++ b/Lang/D/Zero-to-the-zero-power
@@ -0,0 +1 @@
+../../Task/Zero-to-the-zero-power/D
\ No newline at end of file
diff --git a/Lang/D/Zhang-Suen-thinning-algorithm b/Lang/D/Zhang-Suen-thinning-algorithm
new file mode 120000
index 0000000000..aeb869241c
--- /dev/null
+++ b/Lang/D/Zhang-Suen-thinning-algorithm
@@ -0,0 +1 @@
+../../Task/Zhang-Suen-thinning-algorithm/D
\ No newline at end of file
diff --git a/Lang/Dart/Runge-Kutta-method b/Lang/Dart/Runge-Kutta-method
new file mode 120000
index 0000000000..1601ddcfd3
--- /dev/null
+++ b/Lang/Dart/Runge-Kutta-method
@@ -0,0 +1 @@
+../../Task/Runge-Kutta-method/Dart
\ No newline at end of file
diff --git a/Lang/Dart/Statistics-Basic b/Lang/Dart/Statistics-Basic
new file mode 120000
index 0000000000..9af73ebc81
--- /dev/null
+++ b/Lang/Dart/Statistics-Basic
@@ -0,0 +1 @@
+../../Task/Statistics-Basic/Dart
\ No newline at end of file
diff --git a/Lang/Deja-Vu/Catamorphism b/Lang/Deja-Vu/Catamorphism
new file mode 120000
index 0000000000..0a664c6e22
--- /dev/null
+++ b/Lang/Deja-Vu/Catamorphism
@@ -0,0 +1 @@
+../../Task/Catamorphism/Deja-Vu
\ No newline at end of file
diff --git a/Lang/Deja-Vu/Comma-quibbling b/Lang/Deja-Vu/Comma-quibbling
new file mode 120000
index 0000000000..cc853c2631
--- /dev/null
+++ b/Lang/Deja-Vu/Comma-quibbling
@@ -0,0 +1 @@
+../../Task/Comma-quibbling/Deja-Vu
\ No newline at end of file
diff --git a/Lang/Deja-Vu/Hash-join b/Lang/Deja-Vu/Hash-join
new file mode 120000
index 0000000000..44294a2d73
--- /dev/null
+++ b/Lang/Deja-Vu/Hash-join
@@ -0,0 +1 @@
+../../Task/Hash-join/Deja-Vu
\ No newline at end of file
diff --git a/Lang/Deja-Vu/Longest-increasing-subsequence b/Lang/Deja-Vu/Longest-increasing-subsequence
new file mode 120000
index 0000000000..97e27bf03b
--- /dev/null
+++ b/Lang/Deja-Vu/Longest-increasing-subsequence
@@ -0,0 +1 @@
+../../Task/Longest-increasing-subsequence/Deja-Vu
\ No newline at end of file
diff --git a/Lang/Deja-Vu/String-prepend b/Lang/Deja-Vu/String-prepend
new file mode 120000
index 0000000000..b51b6fb6e0
--- /dev/null
+++ b/Lang/Deja-Vu/String-prepend
@@ -0,0 +1 @@
+../../Task/String-prepend/Deja-Vu
\ No newline at end of file
diff --git a/Lang/Deja-Vu/Sum-multiples-of-3-and-5 b/Lang/Deja-Vu/Sum-multiples-of-3-and-5
new file mode 120000
index 0000000000..c55f45044b
--- /dev/null
+++ b/Lang/Deja-Vu/Sum-multiples-of-3-and-5
@@ -0,0 +1 @@
+../../Task/Sum-multiples-of-3-and-5/Deja-Vu
\ No newline at end of file
diff --git a/Lang/Delphi/ABC-Problem b/Lang/Delphi/ABC-Problem
new file mode 120000
index 0000000000..d0567899ed
--- /dev/null
+++ b/Lang/Delphi/ABC-Problem
@@ -0,0 +1 @@
+../../Task/ABC-Problem/Delphi
\ No newline at end of file
diff --git a/Lang/Delphi/Closures-Value-capture b/Lang/Delphi/Closures-Value-capture
new file mode 120000
index 0000000000..488335ba32
--- /dev/null
+++ b/Lang/Delphi/Closures-Value-capture
@@ -0,0 +1 @@
+../../Task/Closures-Value-capture/Delphi
\ No newline at end of file
diff --git a/Lang/Delphi/File-input-output b/Lang/Delphi/File-input-output
new file mode 120000
index 0000000000..355f8c3738
--- /dev/null
+++ b/Lang/Delphi/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/Delphi
\ No newline at end of file
diff --git a/Lang/Delphi/Generate-lower-case-ASCII-alphabet b/Lang/Delphi/Generate-lower-case-ASCII-alphabet
new file mode 120000
index 0000000000..b14f1a9128
--- /dev/null
+++ b/Lang/Delphi/Generate-lower-case-ASCII-alphabet
@@ -0,0 +1 @@
+../../Task/Generate-lower-case-ASCII-alphabet/Delphi
\ No newline at end of file
diff --git a/Lang/Delphi/String-matching b/Lang/Delphi/String-matching
new file mode 120000
index 0000000000..f3cbd84bd6
--- /dev/null
+++ b/Lang/Delphi/String-matching
@@ -0,0 +1 @@
+../../Task/String-matching/Delphi
\ No newline at end of file
diff --git a/Lang/Delphi/Sum-multiples-of-3-and-5 b/Lang/Delphi/Sum-multiples-of-3-and-5
new file mode 120000
index 0000000000..f3c83a9e0a
--- /dev/null
+++ b/Lang/Delphi/Sum-multiples-of-3-and-5
@@ -0,0 +1 @@
+../../Task/Sum-multiples-of-3-and-5/Delphi
\ No newline at end of file
diff --git a/Lang/Delphi/The-ISAAC-Cipher b/Lang/Delphi/The-ISAAC-Cipher
new file mode 120000
index 0000000000..c4a675db91
--- /dev/null
+++ b/Lang/Delphi/The-ISAAC-Cipher
@@ -0,0 +1 @@
+../../Task/The-ISAAC-Cipher/Delphi
\ No newline at end of file
diff --git a/Lang/E/Amb b/Lang/E/Amb
new file mode 120000
index 0000000000..c7ff8bef1d
--- /dev/null
+++ b/Lang/E/Amb
@@ -0,0 +1 @@
+../../Task/Amb/E
\ No newline at end of file
diff --git a/Lang/E/File-input-output b/Lang/E/File-input-output
new file mode 120000
index 0000000000..aa5a919185
--- /dev/null
+++ b/Lang/E/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/E
\ No newline at end of file
diff --git a/Lang/E/String-matching b/Lang/E/String-matching
new file mode 120000
index 0000000000..c9ff746ee6
--- /dev/null
+++ b/Lang/E/String-matching
@@ -0,0 +1 @@
+../../Task/String-matching/E
\ No newline at end of file
diff --git a/Lang/Eiffel/File-input-output b/Lang/Eiffel/File-input-output
new file mode 120000
index 0000000000..81297fc377
--- /dev/null
+++ b/Lang/Eiffel/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/Eiffel
\ No newline at end of file
diff --git a/Lang/Eiffel/Ludic-numbers b/Lang/Eiffel/Ludic-numbers
new file mode 120000
index 0000000000..aefd6e97c0
--- /dev/null
+++ b/Lang/Eiffel/Ludic-numbers
@@ -0,0 +1 @@
+../../Task/Ludic-numbers/Eiffel
\ No newline at end of file
diff --git a/Lang/Eiffel/Sum-multiples-of-3-and-5 b/Lang/Eiffel/Sum-multiples-of-3-and-5
new file mode 120000
index 0000000000..456b420565
--- /dev/null
+++ b/Lang/Eiffel/Sum-multiples-of-3-and-5
@@ -0,0 +1 @@
+../../Task/Sum-multiples-of-3-and-5/Eiffel
\ No newline at end of file
diff --git a/Lang/Ela/Amb b/Lang/Ela/Amb
new file mode 120000
index 0000000000..a638d37f1c
--- /dev/null
+++ b/Lang/Ela/Amb
@@ -0,0 +1 @@
+../../Task/Amb/Ela
\ No newline at end of file
diff --git a/Lang/Elena/Amb b/Lang/Elena/Amb
new file mode 120000
index 0000000000..b8a20a821e
--- /dev/null
+++ b/Lang/Elena/Amb
@@ -0,0 +1 @@
+../../Task/Amb/Elena
\ No newline at end of file
diff --git a/Lang/Elena/Calendar---for-REAL-programmers b/Lang/Elena/Calendar---for-REAL-programmers
new file mode 120000
index 0000000000..297243a77f
--- /dev/null
+++ b/Lang/Elena/Calendar---for-REAL-programmers
@@ -0,0 +1 @@
+../../Task/Calendar---for-REAL-programmers/Elena
\ No newline at end of file
diff --git a/Lang/Elena/String-matching b/Lang/Elena/String-matching
new file mode 120000
index 0000000000..ad2671beb2
--- /dev/null
+++ b/Lang/Elena/String-matching
@@ -0,0 +1 @@
+../../Task/String-matching/Elena
\ No newline at end of file
diff --git a/Lang/Elixir/Reverse-words-in-a-string b/Lang/Elixir/Reverse-words-in-a-string
new file mode 120000
index 0000000000..09dc631a3d
--- /dev/null
+++ b/Lang/Elixir/Reverse-words-in-a-string
@@ -0,0 +1 @@
+../../Task/Reverse-words-in-a-string/Elixir
\ No newline at end of file
diff --git a/Lang/Elixir/Sparkline-in-unicode b/Lang/Elixir/Sparkline-in-unicode
new file mode 120000
index 0000000000..6f333f4607
--- /dev/null
+++ b/Lang/Elixir/Sparkline-in-unicode
@@ -0,0 +1 @@
+../../Task/Sparkline-in-unicode/Elixir
\ No newline at end of file
diff --git a/Lang/Elixir/String-matching b/Lang/Elixir/String-matching
new file mode 120000
index 0000000000..d08323d893
--- /dev/null
+++ b/Lang/Elixir/String-matching
@@ -0,0 +1 @@
+../../Task/String-matching/Elixir
\ No newline at end of file
diff --git a/Lang/Emacs-Lisp/Closures-Value-capture b/Lang/Emacs-Lisp/Closures-Value-capture
new file mode 120000
index 0000000000..ed20163935
--- /dev/null
+++ b/Lang/Emacs-Lisp/Closures-Value-capture
@@ -0,0 +1 @@
+../../Task/Closures-Value-capture/Emacs-Lisp
\ No newline at end of file
diff --git a/Lang/Erlang/9-billion-names-of-God-the-integer b/Lang/Erlang/9-billion-names-of-God-the-integer
new file mode 120000
index 0000000000..60b34d5011
--- /dev/null
+++ b/Lang/Erlang/9-billion-names-of-God-the-integer
@@ -0,0 +1 @@
+../../Task/9-billion-names-of-God-the-integer/Erlang
\ No newline at end of file
diff --git a/Lang/Erlang/ABC-Problem b/Lang/Erlang/ABC-Problem
new file mode 120000
index 0000000000..71aa4b0059
--- /dev/null
+++ b/Lang/Erlang/ABC-Problem
@@ -0,0 +1 @@
+../../Task/ABC-Problem/Erlang
\ No newline at end of file
diff --git a/Lang/Erlang/AKS-test-for-primes b/Lang/Erlang/AKS-test-for-primes
new file mode 120000
index 0000000000..78653a66e6
--- /dev/null
+++ b/Lang/Erlang/AKS-test-for-primes
@@ -0,0 +1 @@
+../../Task/AKS-test-for-primes/Erlang
\ No newline at end of file
diff --git a/Lang/Erlang/Benfords-law b/Lang/Erlang/Benfords-law
new file mode 120000
index 0000000000..edd05b8d64
--- /dev/null
+++ b/Lang/Erlang/Benfords-law
@@ -0,0 +1 @@
+../../Task/Benfords-law/Erlang
\ No newline at end of file
diff --git a/Lang/Erlang/CSV-data-manipulation b/Lang/Erlang/CSV-data-manipulation
new file mode 120000
index 0000000000..0b36bcd81d
--- /dev/null
+++ b/Lang/Erlang/CSV-data-manipulation
@@ -0,0 +1 @@
+../../Task/CSV-data-manipulation/Erlang
\ No newline at end of file
diff --git a/Lang/Erlang/Chinese-remainder-theorem b/Lang/Erlang/Chinese-remainder-theorem
new file mode 120000
index 0000000000..a676df2ea7
--- /dev/null
+++ b/Lang/Erlang/Chinese-remainder-theorem
@@ -0,0 +1 @@
+../../Task/Chinese-remainder-theorem/Erlang
\ No newline at end of file
diff --git a/Lang/Erlang/Closures-Value-capture b/Lang/Erlang/Closures-Value-capture
new file mode 120000
index 0000000000..41a0452680
--- /dev/null
+++ b/Lang/Erlang/Closures-Value-capture
@@ -0,0 +1 @@
+../../Task/Closures-Value-capture/Erlang
\ No newline at end of file
diff --git a/Lang/Erlang/Comma-quibbling b/Lang/Erlang/Comma-quibbling
new file mode 120000
index 0000000000..a4bc841352
--- /dev/null
+++ b/Lang/Erlang/Comma-quibbling
@@ -0,0 +1 @@
+../../Task/Comma-quibbling/Erlang
\ No newline at end of file
diff --git a/Lang/Erlang/Currying b/Lang/Erlang/Currying
new file mode 120000
index 0000000000..77fc0039c7
--- /dev/null
+++ b/Lang/Erlang/Currying
@@ -0,0 +1 @@
+../../Task/Currying/Erlang
\ No newline at end of file
diff --git a/Lang/Erlang/File-input-output b/Lang/Erlang/File-input-output
new file mode 120000
index 0000000000..cfcb068240
--- /dev/null
+++ b/Lang/Erlang/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/Erlang
\ No newline at end of file
diff --git a/Lang/Erlang/Find-the-last-Sunday-of-each-month b/Lang/Erlang/Find-the-last-Sunday-of-each-month
new file mode 120000
index 0000000000..c4d6802beb
--- /dev/null
+++ b/Lang/Erlang/Find-the-last-Sunday-of-each-month
@@ -0,0 +1 @@
+../../Task/Find-the-last-Sunday-of-each-month/Erlang
\ No newline at end of file
diff --git a/Lang/Erlang/Hash-join b/Lang/Erlang/Hash-join
new file mode 120000
index 0000000000..641289b7a8
--- /dev/null
+++ b/Lang/Erlang/Hash-join
@@ -0,0 +1 @@
+../../Task/Hash-join/Erlang
\ No newline at end of file
diff --git a/Lang/Erlang/Hello-world-Newbie b/Lang/Erlang/Hello-world-Newbie
new file mode 120000
index 0000000000..2c889eedbd
--- /dev/null
+++ b/Lang/Erlang/Hello-world-Newbie
@@ -0,0 +1 @@
+../../Task/Hello-world-Newbie/Erlang
\ No newline at end of file
diff --git a/Lang/Erlang/Odd-word-problem b/Lang/Erlang/Odd-word-problem
new file mode 120000
index 0000000000..27a087c45a
--- /dev/null
+++ b/Lang/Erlang/Odd-word-problem
@@ -0,0 +1 @@
+../../Task/Odd-word-problem/Erlang
\ No newline at end of file
diff --git a/Lang/Erlang/String-matching b/Lang/Erlang/String-matching
new file mode 120000
index 0000000000..20d26cb70b
--- /dev/null
+++ b/Lang/Erlang/String-matching
@@ -0,0 +1 @@
+../../Task/String-matching/Erlang
\ No newline at end of file
diff --git a/Lang/Erlang/Sum-multiples-of-3-and-5 b/Lang/Erlang/Sum-multiples-of-3-and-5
new file mode 120000
index 0000000000..a496efa2a8
--- /dev/null
+++ b/Lang/Erlang/Sum-multiples-of-3-and-5
@@ -0,0 +1 @@
+../../Task/Sum-multiples-of-3-and-5/Erlang
\ No newline at end of file
diff --git a/Lang/Erlang/World-Cup-group-stage b/Lang/Erlang/World-Cup-group-stage
new file mode 120000
index 0000000000..812575ac40
--- /dev/null
+++ b/Lang/Erlang/World-Cup-group-stage
@@ -0,0 +1 @@
+../../Task/World-Cup-group-stage/Erlang
\ No newline at end of file
diff --git a/Lang/Euphoria/ABC-Problem b/Lang/Euphoria/ABC-Problem
new file mode 120000
index 0000000000..8b616a5b84
--- /dev/null
+++ b/Lang/Euphoria/ABC-Problem
@@ -0,0 +1 @@
+../../Task/ABC-Problem/Euphoria
\ No newline at end of file
diff --git a/Lang/Euphoria/File-input-output b/Lang/Euphoria/File-input-output
new file mode 120000
index 0000000000..e6a241792e
--- /dev/null
+++ b/Lang/Euphoria/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/Euphoria
\ No newline at end of file
diff --git a/Lang/Euphoria/String-append b/Lang/Euphoria/String-append
new file mode 120000
index 0000000000..28dcd7bc84
--- /dev/null
+++ b/Lang/Euphoria/String-append
@@ -0,0 +1 @@
+../../Task/String-append/Euphoria
\ No newline at end of file
diff --git a/Lang/Euphoria/String-matching b/Lang/Euphoria/String-matching
new file mode 120000
index 0000000000..b45aca4de4
--- /dev/null
+++ b/Lang/Euphoria/String-matching
@@ -0,0 +1 @@
+../../Task/String-matching/Euphoria
\ No newline at end of file
diff --git a/Lang/F-Sharp/Runge-Kutta-method b/Lang/F-Sharp/Runge-Kutta-method
new file mode 120000
index 0000000000..700f9da07d
--- /dev/null
+++ b/Lang/F-Sharp/Runge-Kutta-method
@@ -0,0 +1 @@
+../../Task/Runge-Kutta-method/F-Sharp
\ No newline at end of file
diff --git a/Lang/FALSE/Odd-word-problem b/Lang/FALSE/Odd-word-problem
new file mode 120000
index 0000000000..c6d850545b
--- /dev/null
+++ b/Lang/FALSE/Odd-word-problem
@@ -0,0 +1 @@
+../../Task/Odd-word-problem/FALSE
\ No newline at end of file
diff --git a/Lang/FALSE/Sparkline-in-unicode b/Lang/FALSE/Sparkline-in-unicode
new file mode 120000
index 0000000000..a210fa9987
--- /dev/null
+++ b/Lang/FALSE/Sparkline-in-unicode
@@ -0,0 +1 @@
+../../Task/Sparkline-in-unicode/FALSE
\ No newline at end of file
diff --git a/Lang/FBSL/ABC-Problem b/Lang/FBSL/ABC-Problem
new file mode 120000
index 0000000000..c7b642afde
--- /dev/null
+++ b/Lang/FBSL/ABC-Problem
@@ -0,0 +1 @@
+../../Task/ABC-Problem/FBSL
\ No newline at end of file
diff --git a/Lang/FBSL/Find-the-last-Sunday-of-each-month b/Lang/FBSL/Find-the-last-Sunday-of-each-month
new file mode 120000
index 0000000000..b02ec9e11a
--- /dev/null
+++ b/Lang/FBSL/Find-the-last-Sunday-of-each-month
@@ -0,0 +1 @@
+../../Task/Find-the-last-Sunday-of-each-month/FBSL
\ No newline at end of file
diff --git a/Lang/FBSL/String-matching b/Lang/FBSL/String-matching
new file mode 120000
index 0000000000..d7c29bba77
--- /dev/null
+++ b/Lang/FBSL/String-matching
@@ -0,0 +1 @@
+../../Task/String-matching/FBSL
\ No newline at end of file
diff --git a/Lang/FBSL/Sum-multiples-of-3-and-5 b/Lang/FBSL/Sum-multiples-of-3-and-5
new file mode 120000
index 0000000000..5296225bad
--- /dev/null
+++ b/Lang/FBSL/Sum-multiples-of-3-and-5
@@ -0,0 +1 @@
+../../Task/Sum-multiples-of-3-and-5/FBSL
\ No newline at end of file
diff --git a/Lang/Factor/Amb b/Lang/Factor/Amb
new file mode 120000
index 0000000000..424ee95675
--- /dev/null
+++ b/Lang/Factor/Amb
@@ -0,0 +1 @@
+../../Task/Amb/Factor
\ No newline at end of file
diff --git a/Lang/Factor/Closures-Value-capture b/Lang/Factor/Closures-Value-capture
new file mode 120000
index 0000000000..b25670cb38
--- /dev/null
+++ b/Lang/Factor/Closures-Value-capture
@@ -0,0 +1 @@
+../../Task/Closures-Value-capture/Factor
\ No newline at end of file
diff --git a/Lang/Factor/Conjugate-transpose b/Lang/Factor/Conjugate-transpose
new file mode 120000
index 0000000000..4489280ab6
--- /dev/null
+++ b/Lang/Factor/Conjugate-transpose
@@ -0,0 +1 @@
+../../Task/Conjugate-transpose/Factor
\ No newline at end of file
diff --git a/Lang/Factor/File-input-output b/Lang/Factor/File-input-output
new file mode 120000
index 0000000000..75833a01f0
--- /dev/null
+++ b/Lang/Factor/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/Factor
\ No newline at end of file
diff --git a/Lang/Factor/Generate-lower-case-ASCII-alphabet b/Lang/Factor/Generate-lower-case-ASCII-alphabet
new file mode 120000
index 0000000000..b125f0364f
--- /dev/null
+++ b/Lang/Factor/Generate-lower-case-ASCII-alphabet
@@ -0,0 +1 @@
+../../Task/Generate-lower-case-ASCII-alphabet/Factor
\ No newline at end of file
diff --git a/Lang/Factor/Odd-word-problem b/Lang/Factor/Odd-word-problem
new file mode 120000
index 0000000000..7b284d8a7f
--- /dev/null
+++ b/Lang/Factor/Odd-word-problem
@@ -0,0 +1 @@
+../../Task/Odd-word-problem/Factor
\ No newline at end of file
diff --git a/Lang/Factor/Old-lady-swallowed-a-fly b/Lang/Factor/Old-lady-swallowed-a-fly
new file mode 120000
index 0000000000..5a1ca27647
--- /dev/null
+++ b/Lang/Factor/Old-lady-swallowed-a-fly
@@ -0,0 +1 @@
+../../Task/Old-lady-swallowed-a-fly/Factor
\ No newline at end of file
diff --git a/Lang/Factor/String-prepend b/Lang/Factor/String-prepend
new file mode 120000
index 0000000000..6b5f657fa5
--- /dev/null
+++ b/Lang/Factor/String-prepend
@@ -0,0 +1 @@
+../../Task/String-prepend/Factor
\ No newline at end of file
diff --git a/Lang/Factor/Zero-to-the-zero-power b/Lang/Factor/Zero-to-the-zero-power
new file mode 120000
index 0000000000..795503d315
--- /dev/null
+++ b/Lang/Factor/Zero-to-the-zero-power
@@ -0,0 +1 @@
+../../Task/Zero-to-the-zero-power/Factor
\ No newline at end of file
diff --git a/Lang/Fantom/Closures-Value-capture b/Lang/Fantom/Closures-Value-capture
new file mode 120000
index 0000000000..278a848d89
--- /dev/null
+++ b/Lang/Fantom/Closures-Value-capture
@@ -0,0 +1 @@
+../../Task/Closures-Value-capture/Fantom
\ No newline at end of file
diff --git a/Lang/Fantom/String-matching b/Lang/Fantom/String-matching
new file mode 120000
index 0000000000..65e631852d
--- /dev/null
+++ b/Lang/Fantom/String-matching
@@ -0,0 +1 @@
+../../Task/String-matching/Fantom
\ No newline at end of file
diff --git a/Lang/Forth/Benfords-law b/Lang/Forth/Benfords-law
new file mode 120000
index 0000000000..604610fde0
--- /dev/null
+++ b/Lang/Forth/Benfords-law
@@ -0,0 +1 @@
+../../Task/Benfords-law/Forth
\ No newline at end of file
diff --git a/Lang/Forth/CSV-data-manipulation b/Lang/Forth/CSV-data-manipulation
new file mode 120000
index 0000000000..7ffac648ae
--- /dev/null
+++ b/Lang/Forth/CSV-data-manipulation
@@ -0,0 +1 @@
+../../Task/CSV-data-manipulation/Forth
\ No newline at end of file
diff --git a/Lang/Forth/Chinese-remainder-theorem b/Lang/Forth/Chinese-remainder-theorem
new file mode 120000
index 0000000000..1bc0fe2b98
--- /dev/null
+++ b/Lang/Forth/Chinese-remainder-theorem
@@ -0,0 +1 @@
+../../Task/Chinese-remainder-theorem/Forth
\ No newline at end of file
diff --git a/Lang/Forth/Currying b/Lang/Forth/Currying
new file mode 120000
index 0000000000..d6292c8d4a
--- /dev/null
+++ b/Lang/Forth/Currying
@@ -0,0 +1 @@
+../../Task/Currying/Forth
\ No newline at end of file
diff --git a/Lang/Forth/File-input-output b/Lang/Forth/File-input-output
new file mode 120000
index 0000000000..624167a8a6
--- /dev/null
+++ b/Lang/Forth/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/Forth
\ No newline at end of file
diff --git a/Lang/Forth/Nth b/Lang/Forth/Nth
new file mode 120000
index 0000000000..86a67605e4
--- /dev/null
+++ b/Lang/Forth/Nth
@@ -0,0 +1 @@
+../../Task/Nth/Forth
\ No newline at end of file
diff --git a/Lang/Forth/Odd-word-problem b/Lang/Forth/Odd-word-problem
new file mode 120000
index 0000000000..1281fb7277
--- /dev/null
+++ b/Lang/Forth/Odd-word-problem
@@ -0,0 +1 @@
+../../Task/Odd-word-problem/Forth
\ No newline at end of file
diff --git a/Lang/Forth/Old-lady-swallowed-a-fly b/Lang/Forth/Old-lady-swallowed-a-fly
new file mode 120000
index 0000000000..4c3e06db33
--- /dev/null
+++ b/Lang/Forth/Old-lady-swallowed-a-fly
@@ -0,0 +1 @@
+../../Task/Old-lady-swallowed-a-fly/Forth
\ No newline at end of file
diff --git a/Lang/Forth/Semiprime b/Lang/Forth/Semiprime
new file mode 120000
index 0000000000..3b3566ff84
--- /dev/null
+++ b/Lang/Forth/Semiprime
@@ -0,0 +1 @@
+../../Task/Semiprime/Forth
\ No newline at end of file
diff --git a/Lang/Forth/String-matching b/Lang/Forth/String-matching
new file mode 120000
index 0000000000..8660c31ce5
--- /dev/null
+++ b/Lang/Forth/String-matching
@@ -0,0 +1 @@
+../../Task/String-matching/Forth
\ No newline at end of file
diff --git a/Lang/Forth/Sum-multiples-of-3-and-5 b/Lang/Forth/Sum-multiples-of-3-and-5
new file mode 120000
index 0000000000..ade94de8ba
--- /dev/null
+++ b/Lang/Forth/Sum-multiples-of-3-and-5
@@ -0,0 +1 @@
+../../Task/Sum-multiples-of-3-and-5/Forth
\ No newline at end of file
diff --git a/Lang/Forth/Unix-ls b/Lang/Forth/Unix-ls
new file mode 120000
index 0000000000..4f3089980e
--- /dev/null
+++ b/Lang/Forth/Unix-ls
@@ -0,0 +1 @@
+../../Task/Unix-ls/Forth
\ No newline at end of file
diff --git a/Lang/Forth/Zero-to-the-zero-power b/Lang/Forth/Zero-to-the-zero-power
new file mode 120000
index 0000000000..e65b502334
--- /dev/null
+++ b/Lang/Forth/Zero-to-the-zero-power
@@ -0,0 +1 @@
+../../Task/Zero-to-the-zero-power/Forth
\ No newline at end of file
diff --git a/Lang/Fortran/ABC-Problem b/Lang/Fortran/ABC-Problem
new file mode 120000
index 0000000000..95659ac1d7
--- /dev/null
+++ b/Lang/Fortran/ABC-Problem
@@ -0,0 +1 @@
+../../Task/ABC-Problem/Fortran
\ No newline at end of file
diff --git a/Lang/Fortran/Benfords-law b/Lang/Fortran/Benfords-law
new file mode 120000
index 0000000000..d233da455e
--- /dev/null
+++ b/Lang/Fortran/Benfords-law
@@ -0,0 +1 @@
+../../Task/Benfords-law/Fortran
\ No newline at end of file
diff --git a/Lang/Fortran/Circles-of-given-radius-through-two-points b/Lang/Fortran/Circles-of-given-radius-through-two-points
new file mode 120000
index 0000000000..f1552ffa7b
--- /dev/null
+++ b/Lang/Fortran/Circles-of-given-radius-through-two-points
@@ -0,0 +1 @@
+../../Task/Circles-of-given-radius-through-two-points/Fortran
\ No newline at end of file
diff --git a/Lang/Fortran/Conjugate-transpose b/Lang/Fortran/Conjugate-transpose
new file mode 120000
index 0000000000..56066fc848
--- /dev/null
+++ b/Lang/Fortran/Conjugate-transpose
@@ -0,0 +1 @@
+../../Task/Conjugate-transpose/Fortran
\ No newline at end of file
diff --git a/Lang/Fortran/Digital-root-Multiplicative-digital-root b/Lang/Fortran/Digital-root-Multiplicative-digital-root
new file mode 120000
index 0000000000..89b0c31b5a
--- /dev/null
+++ b/Lang/Fortran/Digital-root-Multiplicative-digital-root
@@ -0,0 +1 @@
+../../Task/Digital-root-Multiplicative-digital-root/Fortran
\ No newline at end of file
diff --git a/Lang/Fortran/Draw-a-clock b/Lang/Fortran/Draw-a-clock
new file mode 120000
index 0000000000..5c45d70453
--- /dev/null
+++ b/Lang/Fortran/Draw-a-clock
@@ -0,0 +1 @@
+../../Task/Draw-a-clock/Fortran
\ No newline at end of file
diff --git a/Lang/Fortran/File-input-output b/Lang/Fortran/File-input-output
new file mode 120000
index 0000000000..e66ce3c66c
--- /dev/null
+++ b/Lang/Fortran/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/Fortran
\ No newline at end of file
diff --git a/Lang/Fortran/Flipping-bits-game b/Lang/Fortran/Flipping-bits-game
new file mode 120000
index 0000000000..9f5b16df63
--- /dev/null
+++ b/Lang/Fortran/Flipping-bits-game
@@ -0,0 +1 @@
+../../Task/Flipping-bits-game/Fortran
\ No newline at end of file
diff --git a/Lang/Fortran/Gaussian-elimination b/Lang/Fortran/Gaussian-elimination
new file mode 120000
index 0000000000..e7928cde6c
--- /dev/null
+++ b/Lang/Fortran/Gaussian-elimination
@@ -0,0 +1 @@
+../../Task/Gaussian-elimination/Fortran
\ No newline at end of file
diff --git a/Lang/Fortran/Generate-lower-case-ASCII-alphabet b/Lang/Fortran/Generate-lower-case-ASCII-alphabet
new file mode 120000
index 0000000000..deb8beee2d
--- /dev/null
+++ b/Lang/Fortran/Generate-lower-case-ASCII-alphabet
@@ -0,0 +1 @@
+../../Task/Generate-lower-case-ASCII-alphabet/Fortran
\ No newline at end of file
diff --git a/Lang/Fortran/Hickerson-series-of-almost-integers b/Lang/Fortran/Hickerson-series-of-almost-integers
new file mode 120000
index 0000000000..41d6ed1769
--- /dev/null
+++ b/Lang/Fortran/Hickerson-series-of-almost-integers
@@ -0,0 +1 @@
+../../Task/Hickerson-series-of-almost-integers/Fortran
\ No newline at end of file
diff --git a/Lang/Fortran/Nth b/Lang/Fortran/Nth
new file mode 120000
index 0000000000..edc9c53081
--- /dev/null
+++ b/Lang/Fortran/Nth
@@ -0,0 +1 @@
+../../Task/Nth/Fortran
\ No newline at end of file
diff --git a/Lang/Fortran/Percolation-Mean-run-density b/Lang/Fortran/Percolation-Mean-run-density
new file mode 120000
index 0000000000..574c639137
--- /dev/null
+++ b/Lang/Fortran/Percolation-Mean-run-density
@@ -0,0 +1 @@
+../../Task/Percolation-Mean-run-density/Fortran
\ No newline at end of file
diff --git a/Lang/Fortran/Percolation-Site-percolation b/Lang/Fortran/Percolation-Site-percolation
new file mode 120000
index 0000000000..b148284b98
--- /dev/null
+++ b/Lang/Fortran/Percolation-Site-percolation
@@ -0,0 +1 @@
+../../Task/Percolation-Site-percolation/Fortran
\ No newline at end of file
diff --git a/Lang/Fortran/Runge-Kutta-method b/Lang/Fortran/Runge-Kutta-method
new file mode 120000
index 0000000000..32c1e19b33
--- /dev/null
+++ b/Lang/Fortran/Runge-Kutta-method
@@ -0,0 +1 @@
+../../Task/Runge-Kutta-method/Fortran
\ No newline at end of file
diff --git a/Lang/Fortran/Statistics-Basic b/Lang/Fortran/Statistics-Basic
new file mode 120000
index 0000000000..2054c88b60
--- /dev/null
+++ b/Lang/Fortran/Statistics-Basic
@@ -0,0 +1 @@
+../../Task/Statistics-Basic/Fortran
\ No newline at end of file
diff --git a/Lang/Fortran/Zero-to-the-zero-power b/Lang/Fortran/Zero-to-the-zero-power
new file mode 120000
index 0000000000..04bffb464b
--- /dev/null
+++ b/Lang/Fortran/Zero-to-the-zero-power
@@ -0,0 +1 @@
+../../Task/Zero-to-the-zero-power/Fortran
\ No newline at end of file
diff --git a/Lang/Frege/Old-lady-swallowed-a-fly b/Lang/Frege/Old-lady-swallowed-a-fly
new file mode 120000
index 0000000000..86718def3c
--- /dev/null
+++ b/Lang/Frege/Old-lady-swallowed-a-fly
@@ -0,0 +1 @@
+../../Task/Old-lady-swallowed-a-fly/Frege
\ No newline at end of file
diff --git a/Lang/Frink/9-billion-names-of-God-the-integer b/Lang/Frink/9-billion-names-of-God-the-integer
new file mode 120000
index 0000000000..95d41908b2
--- /dev/null
+++ b/Lang/Frink/9-billion-names-of-God-the-integer
@@ -0,0 +1 @@
+../../Task/9-billion-names-of-God-the-integer/Frink
\ No newline at end of file
diff --git a/Lang/Frink/File-input-output b/Lang/Frink/File-input-output
new file mode 120000
index 0000000000..f52bbfaaac
--- /dev/null
+++ b/Lang/Frink/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/Frink
\ No newline at end of file
diff --git a/Lang/GAP/File-input-output b/Lang/GAP/File-input-output
new file mode 120000
index 0000000000..929c223f18
--- /dev/null
+++ b/Lang/GAP/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/GAP
\ No newline at end of file
diff --git a/Lang/GML/File-input-output b/Lang/GML/File-input-output
new file mode 120000
index 0000000000..7c1e86c9c9
--- /dev/null
+++ b/Lang/GML/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/GML
\ No newline at end of file
diff --git a/Lang/GML/String-matching b/Lang/GML/String-matching
new file mode 120000
index 0000000000..7f4235f481
--- /dev/null
+++ b/Lang/GML/String-matching
@@ -0,0 +1 @@
+../../Task/String-matching/GML
\ No newline at end of file
diff --git a/Lang/GUISS/Calendar---for-REAL-programmers b/Lang/GUISS/Calendar---for-REAL-programmers
new file mode 120000
index 0000000000..ac423977fc
--- /dev/null
+++ b/Lang/GUISS/Calendar---for-REAL-programmers
@@ -0,0 +1 @@
+../../Task/Calendar---for-REAL-programmers/GUISS
\ No newline at end of file
diff --git a/Lang/GUISS/Draw-a-clock b/Lang/GUISS/Draw-a-clock
new file mode 120000
index 0000000000..c308af377f
--- /dev/null
+++ b/Lang/GUISS/Draw-a-clock
@@ -0,0 +1 @@
+../../Task/Draw-a-clock/GUISS
\ No newline at end of file
diff --git a/Lang/GUISS/File-input-output b/Lang/GUISS/File-input-output
new file mode 120000
index 0000000000..56e6aab700
--- /dev/null
+++ b/Lang/GUISS/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/GUISS
\ No newline at end of file
diff --git a/Lang/Gnuplot/Munching-squares b/Lang/Gnuplot/Munching-squares
new file mode 120000
index 0000000000..afa477d667
--- /dev/null
+++ b/Lang/Gnuplot/Munching-squares
@@ -0,0 +1 @@
+../../Task/Munching-squares/Gnuplot
\ No newline at end of file
diff --git a/Lang/Go/ABC-Problem b/Lang/Go/ABC-Problem
new file mode 120000
index 0000000000..73c4cad955
--- /dev/null
+++ b/Lang/Go/ABC-Problem
@@ -0,0 +1 @@
+../../Task/ABC-Problem/Go
\ No newline at end of file
diff --git a/Lang/Go/AKS-test-for-primes b/Lang/Go/AKS-test-for-primes
new file mode 120000
index 0000000000..549f8c04c5
--- /dev/null
+++ b/Lang/Go/AKS-test-for-primes
@@ -0,0 +1 @@
+../../Task/AKS-test-for-primes/Go
\ No newline at end of file
diff --git a/Lang/Go/Almost-prime b/Lang/Go/Almost-prime
new file mode 120000
index 0000000000..1631082788
--- /dev/null
+++ b/Lang/Go/Almost-prime
@@ -0,0 +1 @@
+../../Task/Almost-prime/Go
\ No newline at end of file
diff --git a/Lang/Go/Amb b/Lang/Go/Amb
new file mode 120000
index 0000000000..c4fc56d05e
--- /dev/null
+++ b/Lang/Go/Amb
@@ -0,0 +1 @@
+../../Task/Amb/Go
\ No newline at end of file
diff --git a/Lang/Go/Append-a-record-to-the-end-of-a-text-file b/Lang/Go/Append-a-record-to-the-end-of-a-text-file
new file mode 120000
index 0000000000..35d3058e72
--- /dev/null
+++ b/Lang/Go/Append-a-record-to-the-end-of-a-text-file
@@ -0,0 +1 @@
+../../Task/Append-a-record-to-the-end-of-a-text-file/Go
\ No newline at end of file
diff --git a/Lang/Go/Benfords-law b/Lang/Go/Benfords-law
new file mode 120000
index 0000000000..a13db99e0b
--- /dev/null
+++ b/Lang/Go/Benfords-law
@@ -0,0 +1 @@
+../../Task/Benfords-law/Go
\ No newline at end of file
diff --git a/Lang/Go/Bernoulli-numbers b/Lang/Go/Bernoulli-numbers
new file mode 120000
index 0000000000..43db0cb429
--- /dev/null
+++ b/Lang/Go/Bernoulli-numbers
@@ -0,0 +1 @@
+../../Task/Bernoulli-numbers/Go
\ No newline at end of file
diff --git a/Lang/Go/Bitcoin-public-point-to-address b/Lang/Go/Bitcoin-public-point-to-address
new file mode 120000
index 0000000000..38057e555b
--- /dev/null
+++ b/Lang/Go/Bitcoin-public-point-to-address
@@ -0,0 +1 @@
+../../Task/Bitcoin-public-point-to-address/Go
\ No newline at end of file
diff --git a/Lang/Go/CSV-data-manipulation b/Lang/Go/CSV-data-manipulation
new file mode 120000
index 0000000000..b74399a22c
--- /dev/null
+++ b/Lang/Go/CSV-data-manipulation
@@ -0,0 +1 @@
+../../Task/CSV-data-manipulation/Go
\ No newline at end of file
diff --git a/Lang/Go/Casting-out-nines b/Lang/Go/Casting-out-nines
new file mode 120000
index 0000000000..acf491a607
--- /dev/null
+++ b/Lang/Go/Casting-out-nines
@@ -0,0 +1 @@
+../../Task/Casting-out-nines/Go
\ No newline at end of file
diff --git a/Lang/Go/Catamorphism b/Lang/Go/Catamorphism
new file mode 120000
index 0000000000..d308a11282
--- /dev/null
+++ b/Lang/Go/Catamorphism
@@ -0,0 +1 @@
+../../Task/Catamorphism/Go
\ No newline at end of file
diff --git a/Lang/Go/Chinese-remainder-theorem b/Lang/Go/Chinese-remainder-theorem
new file mode 120000
index 0000000000..f3037a71a9
--- /dev/null
+++ b/Lang/Go/Chinese-remainder-theorem
@@ -0,0 +1 @@
+../../Task/Chinese-remainder-theorem/Go
\ No newline at end of file
diff --git a/Lang/Go/Circles-of-given-radius-through-two-points b/Lang/Go/Circles-of-given-radius-through-two-points
new file mode 120000
index 0000000000..967316ccd7
--- /dev/null
+++ b/Lang/Go/Circles-of-given-radius-through-two-points
@@ -0,0 +1 @@
+../../Task/Circles-of-given-radius-through-two-points/Go
\ No newline at end of file
diff --git a/Lang/Go/Closures-Value-capture b/Lang/Go/Closures-Value-capture
new file mode 120000
index 0000000000..aae9620899
--- /dev/null
+++ b/Lang/Go/Closures-Value-capture
@@ -0,0 +1 @@
+../../Task/Closures-Value-capture/Go
\ No newline at end of file
diff --git a/Lang/Go/Comma-quibbling b/Lang/Go/Comma-quibbling
new file mode 120000
index 0000000000..05538f0be1
--- /dev/null
+++ b/Lang/Go/Comma-quibbling
@@ -0,0 +1 @@
+../../Task/Comma-quibbling/Go
\ No newline at end of file
diff --git a/Lang/Go/Conjugate-transpose b/Lang/Go/Conjugate-transpose
new file mode 120000
index 0000000000..a7fed33408
--- /dev/null
+++ b/Lang/Go/Conjugate-transpose
@@ -0,0 +1 @@
+../../Task/Conjugate-transpose/Go
\ No newline at end of file
diff --git a/Lang/Go/Convert-decimal-number-to-rational b/Lang/Go/Convert-decimal-number-to-rational
new file mode 120000
index 0000000000..4b4a2c232d
--- /dev/null
+++ b/Lang/Go/Convert-decimal-number-to-rational
@@ -0,0 +1 @@
+../../Task/Convert-decimal-number-to-rational/Go
\ No newline at end of file
diff --git a/Lang/Go/Currying b/Lang/Go/Currying
new file mode 120000
index 0000000000..9ed1d19dbd
--- /dev/null
+++ b/Lang/Go/Currying
@@ -0,0 +1 @@
+../../Task/Currying/Go
\ No newline at end of file
diff --git a/Lang/Go/Digital-root-Multiplicative-digital-root b/Lang/Go/Digital-root-Multiplicative-digital-root
new file mode 120000
index 0000000000..188420354f
--- /dev/null
+++ b/Lang/Go/Digital-root-Multiplicative-digital-root
@@ -0,0 +1 @@
+../../Task/Digital-root-Multiplicative-digital-root/Go
\ No newline at end of file
diff --git a/Lang/Go/Draw-a-clock b/Lang/Go/Draw-a-clock
new file mode 120000
index 0000000000..18443c1f5e
--- /dev/null
+++ b/Lang/Go/Draw-a-clock
@@ -0,0 +1 @@
+../../Task/Draw-a-clock/Go
\ No newline at end of file
diff --git a/Lang/Go/Extensible-prime-generator b/Lang/Go/Extensible-prime-generator
new file mode 120000
index 0000000000..c4fdcc58a1
--- /dev/null
+++ b/Lang/Go/Extensible-prime-generator
@@ -0,0 +1 @@
+../../Task/Extensible-prime-generator/Go
\ No newline at end of file
diff --git a/Lang/Go/Fibonacci-word b/Lang/Go/Fibonacci-word
new file mode 120000
index 0000000000..e673d2577e
--- /dev/null
+++ b/Lang/Go/Fibonacci-word
@@ -0,0 +1 @@
+../../Task/Fibonacci-word/Go
\ No newline at end of file
diff --git a/Lang/Go/File-input-output b/Lang/Go/File-input-output
new file mode 120000
index 0000000000..f61c276cd7
--- /dev/null
+++ b/Lang/Go/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/Go
\ No newline at end of file
diff --git a/Lang/Go/Find-the-last-Sunday-of-each-month b/Lang/Go/Find-the-last-Sunday-of-each-month
new file mode 120000
index 0000000000..7725ca1aa8
--- /dev/null
+++ b/Lang/Go/Find-the-last-Sunday-of-each-month
@@ -0,0 +1 @@
+../../Task/Find-the-last-Sunday-of-each-month/Go
\ No newline at end of file
diff --git a/Lang/Go/Flipping-bits-game b/Lang/Go/Flipping-bits-game
new file mode 120000
index 0000000000..4cf25e44e7
--- /dev/null
+++ b/Lang/Go/Flipping-bits-game
@@ -0,0 +1 @@
+../../Task/Flipping-bits-game/Go
\ No newline at end of file
diff --git a/Lang/Go/Fractran b/Lang/Go/Fractran
new file mode 120000
index 0000000000..de656d70ad
--- /dev/null
+++ b/Lang/Go/Fractran
@@ -0,0 +1 @@
+../../Task/Fractran/Go
\ No newline at end of file
diff --git a/Lang/Go/Gaussian-elimination b/Lang/Go/Gaussian-elimination
new file mode 120000
index 0000000000..9752dc8a97
--- /dev/null
+++ b/Lang/Go/Gaussian-elimination
@@ -0,0 +1 @@
+../../Task/Gaussian-elimination/Go
\ No newline at end of file
diff --git a/Lang/Go/Generate-Chess960-starting-position b/Lang/Go/Generate-Chess960-starting-position
new file mode 120000
index 0000000000..94d04be832
--- /dev/null
+++ b/Lang/Go/Generate-Chess960-starting-position
@@ -0,0 +1 @@
+../../Task/Generate-Chess960-starting-position/Go
\ No newline at end of file
diff --git a/Lang/Go/Generate-lower-case-ASCII-alphabet b/Lang/Go/Generate-lower-case-ASCII-alphabet
new file mode 120000
index 0000000000..7d84031434
--- /dev/null
+++ b/Lang/Go/Generate-lower-case-ASCII-alphabet
@@ -0,0 +1 @@
+../../Task/Generate-lower-case-ASCII-alphabet/Go
\ No newline at end of file
diff --git a/Lang/Go/Hash-join b/Lang/Go/Hash-join
new file mode 120000
index 0000000000..6d91ff30a5
--- /dev/null
+++ b/Lang/Go/Hash-join
@@ -0,0 +1 @@
+../../Task/Hash-join/Go
\ No newline at end of file
diff --git a/Lang/Go/Hickerson-series-of-almost-integers b/Lang/Go/Hickerson-series-of-almost-integers
new file mode 120000
index 0000000000..510a950da3
--- /dev/null
+++ b/Lang/Go/Hickerson-series-of-almost-integers
@@ -0,0 +1 @@
+../../Task/Hickerson-series-of-almost-integers/Go
\ No newline at end of file
diff --git a/Lang/Go/IBAN b/Lang/Go/IBAN
new file mode 120000
index 0000000000..3801c2867b
--- /dev/null
+++ b/Lang/Go/IBAN
@@ -0,0 +1 @@
+../../Task/IBAN/Go
\ No newline at end of file
diff --git a/Lang/Go/Integer-overflow b/Lang/Go/Integer-overflow
new file mode 120000
index 0000000000..16ba237c92
--- /dev/null
+++ b/Lang/Go/Integer-overflow
@@ -0,0 +1 @@
+../../Task/Integer-overflow/Go
\ No newline at end of file
diff --git a/Lang/Go/Iterated-digits-squaring b/Lang/Go/Iterated-digits-squaring
new file mode 120000
index 0000000000..836fcc6eb8
--- /dev/null
+++ b/Lang/Go/Iterated-digits-squaring
@@ -0,0 +1 @@
+../../Task/Iterated-digits-squaring/Go
\ No newline at end of file
diff --git a/Lang/Go/K-d-tree b/Lang/Go/K-d-tree
new file mode 120000
index 0000000000..424be83984
--- /dev/null
+++ b/Lang/Go/K-d-tree
@@ -0,0 +1 @@
+../../Task/K-d-tree/Go
\ No newline at end of file
diff --git a/Lang/Go/Left-factorials b/Lang/Go/Left-factorials
new file mode 120000
index 0000000000..8c90ec21f1
--- /dev/null
+++ b/Lang/Go/Left-factorials
@@ -0,0 +1 @@
+../../Task/Left-factorials/Go
\ No newline at end of file
diff --git a/Lang/Go/Longest-increasing-subsequence b/Lang/Go/Longest-increasing-subsequence
new file mode 120000
index 0000000000..d09199dc75
--- /dev/null
+++ b/Lang/Go/Longest-increasing-subsequence
@@ -0,0 +1 @@
+../../Task/Longest-increasing-subsequence/Go
\ No newline at end of file
diff --git a/Lang/Go/Ludic-numbers b/Lang/Go/Ludic-numbers
new file mode 120000
index 0000000000..1c8abf5c07
--- /dev/null
+++ b/Lang/Go/Ludic-numbers
@@ -0,0 +1 @@
+../../Task/Ludic-numbers/Go
\ No newline at end of file
diff --git a/Lang/Go/Magic-squares-of-odd-order b/Lang/Go/Magic-squares-of-odd-order
new file mode 120000
index 0000000000..37091a7c96
--- /dev/null
+++ b/Lang/Go/Magic-squares-of-odd-order
@@ -0,0 +1 @@
+../../Task/Magic-squares-of-odd-order/Go
\ No newline at end of file
diff --git a/Lang/Go/Make-directory-path b/Lang/Go/Make-directory-path
new file mode 120000
index 0000000000..8b2619e1dd
--- /dev/null
+++ b/Lang/Go/Make-directory-path
@@ -0,0 +1 @@
+../../Task/Make-directory-path/Go
\ No newline at end of file
diff --git a/Lang/Go/Maximum-triangle-path-sum b/Lang/Go/Maximum-triangle-path-sum
new file mode 120000
index 0000000000..38183f9773
--- /dev/null
+++ b/Lang/Go/Maximum-triangle-path-sum
@@ -0,0 +1 @@
+../../Task/Maximum-triangle-path-sum/Go
\ No newline at end of file
diff --git a/Lang/Go/Move-to-front-algorithm b/Lang/Go/Move-to-front-algorithm
new file mode 120000
index 0000000000..f5d553b4f2
--- /dev/null
+++ b/Lang/Go/Move-to-front-algorithm
@@ -0,0 +1 @@
+../../Task/Move-to-front-algorithm/Go
\ No newline at end of file
diff --git a/Lang/Go/Munching-squares b/Lang/Go/Munching-squares
new file mode 120000
index 0000000000..d4d4409da7
--- /dev/null
+++ b/Lang/Go/Munching-squares
@@ -0,0 +1 @@
+../../Task/Munching-squares/Go
\ No newline at end of file
diff --git a/Lang/Go/Narcissistic-decimal-number b/Lang/Go/Narcissistic-decimal-number
new file mode 120000
index 0000000000..1fbe448d2a
--- /dev/null
+++ b/Lang/Go/Narcissistic-decimal-number
@@ -0,0 +1 @@
+../../Task/Narcissistic-decimal-number/Go
\ No newline at end of file
diff --git a/Lang/Go/Natural-sorting b/Lang/Go/Natural-sorting
new file mode 120000
index 0000000000..97e3ac5aaf
--- /dev/null
+++ b/Lang/Go/Natural-sorting
@@ -0,0 +1 @@
+../../Task/Natural-sorting/Go
\ No newline at end of file
diff --git a/Lang/Go/Nth b/Lang/Go/Nth
new file mode 120000
index 0000000000..e9fb44c3f0
--- /dev/null
+++ b/Lang/Go/Nth
@@ -0,0 +1 @@
+../../Task/Nth/Go
\ No newline at end of file
diff --git a/Lang/Go/Odd-word-problem b/Lang/Go/Odd-word-problem
new file mode 120000
index 0000000000..6c15202a6b
--- /dev/null
+++ b/Lang/Go/Odd-word-problem
@@ -0,0 +1 @@
+../../Task/Odd-word-problem/Go
\ No newline at end of file
diff --git a/Lang/Go/Order-disjoint-list-items b/Lang/Go/Order-disjoint-list-items
new file mode 120000
index 0000000000..ec33a70ec7
--- /dev/null
+++ b/Lang/Go/Order-disjoint-list-items
@@ -0,0 +1 @@
+../../Task/Order-disjoint-list-items/Go
\ No newline at end of file
diff --git a/Lang/Go/Paraffins b/Lang/Go/Paraffins
new file mode 120000
index 0000000000..a5e7d10b98
--- /dev/null
+++ b/Lang/Go/Paraffins
@@ -0,0 +1 @@
+../../Task/Paraffins/Go
\ No newline at end of file
diff --git a/Lang/Go/Parse-an-IP-Address b/Lang/Go/Parse-an-IP-Address
new file mode 120000
index 0000000000..176ebb593e
--- /dev/null
+++ b/Lang/Go/Parse-an-IP-Address
@@ -0,0 +1 @@
+../../Task/Parse-an-IP-Address/Go
\ No newline at end of file
diff --git a/Lang/Go/Percolation-Bond-percolation b/Lang/Go/Percolation-Bond-percolation
new file mode 120000
index 0000000000..f85800608f
--- /dev/null
+++ b/Lang/Go/Percolation-Bond-percolation
@@ -0,0 +1 @@
+../../Task/Percolation-Bond-percolation/Go
\ No newline at end of file
diff --git a/Lang/Go/Percolation-Site-percolation b/Lang/Go/Percolation-Site-percolation
new file mode 120000
index 0000000000..f989c8ac48
--- /dev/null
+++ b/Lang/Go/Percolation-Site-percolation
@@ -0,0 +1 @@
+../../Task/Percolation-Site-percolation/Go
\ No newline at end of file
diff --git a/Lang/Go/Permutations-Rank-of-a-permutation b/Lang/Go/Permutations-Rank-of-a-permutation
new file mode 120000
index 0000000000..d62b470629
--- /dev/null
+++ b/Lang/Go/Permutations-Rank-of-a-permutation
@@ -0,0 +1 @@
+../../Task/Permutations-Rank-of-a-permutation/Go
\ No newline at end of file
diff --git a/Lang/Go/Pernicious-numbers b/Lang/Go/Pernicious-numbers
new file mode 120000
index 0000000000..9bdbfd1f42
--- /dev/null
+++ b/Lang/Go/Pernicious-numbers
@@ -0,0 +1 @@
+../../Task/Pernicious-numbers/Go
\ No newline at end of file
diff --git a/Lang/Go/Phrase-reversals b/Lang/Go/Phrase-reversals
new file mode 120000
index 0000000000..1d7767f86f
--- /dev/null
+++ b/Lang/Go/Phrase-reversals
@@ -0,0 +1 @@
+../../Task/Phrase-reversals/Go
\ No newline at end of file
diff --git a/Lang/Go/Quickselect-algorithm b/Lang/Go/Quickselect-algorithm
new file mode 120000
index 0000000000..8ea67e90a1
--- /dev/null
+++ b/Lang/Go/Quickselect-algorithm
@@ -0,0 +1 @@
+../../Task/Quickselect-algorithm/Go
\ No newline at end of file
diff --git a/Lang/Go/RSA-code b/Lang/Go/RSA-code
new file mode 120000
index 0000000000..0636f97c6a
--- /dev/null
+++ b/Lang/Go/RSA-code
@@ -0,0 +1 @@
+../../Task/RSA-code/Go
\ No newline at end of file
diff --git a/Lang/Go/Ranking-methods b/Lang/Go/Ranking-methods
new file mode 120000
index 0000000000..6580f6f715
--- /dev/null
+++ b/Lang/Go/Ranking-methods
@@ -0,0 +1 @@
+../../Task/Ranking-methods/Go
\ No newline at end of file
diff --git a/Lang/Go/Rep-string b/Lang/Go/Rep-string
new file mode 120000
index 0000000000..ff5c570049
--- /dev/null
+++ b/Lang/Go/Rep-string
@@ -0,0 +1 @@
+../../Task/Rep-string/Go
\ No newline at end of file
diff --git a/Lang/Go/Reverse-words-in-a-string b/Lang/Go/Reverse-words-in-a-string
new file mode 120000
index 0000000000..9b375bbd5a
--- /dev/null
+++ b/Lang/Go/Reverse-words-in-a-string
@@ -0,0 +1 @@
+../../Task/Reverse-words-in-a-string/Go
\ No newline at end of file
diff --git a/Lang/Go/Runge-Kutta-method b/Lang/Go/Runge-Kutta-method
new file mode 120000
index 0000000000..bfd8ab8395
--- /dev/null
+++ b/Lang/Go/Runge-Kutta-method
@@ -0,0 +1 @@
+../../Task/Runge-Kutta-method/Go
\ No newline at end of file
diff --git a/Lang/Go/Semiprime b/Lang/Go/Semiprime
new file mode 120000
index 0000000000..fa9ec48945
--- /dev/null
+++ b/Lang/Go/Semiprime
@@ -0,0 +1 @@
+../../Task/Semiprime/Go
\ No newline at end of file
diff --git a/Lang/Go/Sequence-of-primes-by-Trial-Division b/Lang/Go/Sequence-of-primes-by-Trial-Division
new file mode 120000
index 0000000000..75d7bbc1b4
--- /dev/null
+++ b/Lang/Go/Sequence-of-primes-by-Trial-Division
@@ -0,0 +1 @@
+../../Task/Sequence-of-primes-by-Trial-Division/Go
\ No newline at end of file
diff --git a/Lang/Go/Solve-the-no-connection-puzzle b/Lang/Go/Solve-the-no-connection-puzzle
new file mode 120000
index 0000000000..1b0d1a9f97
--- /dev/null
+++ b/Lang/Go/Solve-the-no-connection-puzzle
@@ -0,0 +1 @@
+../../Task/Solve-the-no-connection-puzzle/Go
\ No newline at end of file
diff --git a/Lang/Go/Sparkline-in-unicode b/Lang/Go/Sparkline-in-unicode
new file mode 120000
index 0000000000..ad83fb27f6
--- /dev/null
+++ b/Lang/Go/Sparkline-in-unicode
@@ -0,0 +1 @@
+../../Task/Sparkline-in-unicode/Go
\ No newline at end of file
diff --git a/Lang/Go/State-name-puzzle b/Lang/Go/State-name-puzzle
new file mode 120000
index 0000000000..37295f34b2
--- /dev/null
+++ b/Lang/Go/State-name-puzzle
@@ -0,0 +1 @@
+../../Task/State-name-puzzle/Go
\ No newline at end of file
diff --git a/Lang/Go/Statistics-Basic b/Lang/Go/Statistics-Basic
new file mode 120000
index 0000000000..d4374e52e2
--- /dev/null
+++ b/Lang/Go/Statistics-Basic
@@ -0,0 +1 @@
+../../Task/Statistics-Basic/Go
\ No newline at end of file
diff --git a/Lang/Go/Stern-Brocot-sequence b/Lang/Go/Stern-Brocot-sequence
new file mode 120000
index 0000000000..fd78c888dc
--- /dev/null
+++ b/Lang/Go/Stern-Brocot-sequence
@@ -0,0 +1 @@
+../../Task/Stern-Brocot-sequence/Go
\ No newline at end of file
diff --git a/Lang/Go/String-append b/Lang/Go/String-append
new file mode 120000
index 0000000000..8b8320f036
--- /dev/null
+++ b/Lang/Go/String-append
@@ -0,0 +1 @@
+../../Task/String-append/Go
\ No newline at end of file
diff --git a/Lang/Go/String-matching b/Lang/Go/String-matching
new file mode 120000
index 0000000000..972eee2708
--- /dev/null
+++ b/Lang/Go/String-matching
@@ -0,0 +1 @@
+../../Task/String-matching/Go
\ No newline at end of file
diff --git a/Lang/Go/String-prepend b/Lang/Go/String-prepend
new file mode 120000
index 0000000000..03c7a697b5
--- /dev/null
+++ b/Lang/Go/String-prepend
@@ -0,0 +1 @@
+../../Task/String-prepend/Go
\ No newline at end of file
diff --git a/Lang/Go/Sum-multiples-of-3-and-5 b/Lang/Go/Sum-multiples-of-3-and-5
new file mode 120000
index 0000000000..1d94982fec
--- /dev/null
+++ b/Lang/Go/Sum-multiples-of-3-and-5
@@ -0,0 +1 @@
+../../Task/Sum-multiples-of-3-and-5/Go
\ No newline at end of file
diff --git a/Lang/Go/Textonyms b/Lang/Go/Textonyms
new file mode 120000
index 0000000000..b7947b7c9b
--- /dev/null
+++ b/Lang/Go/Textonyms
@@ -0,0 +1 @@
+../../Task/Textonyms/Go
\ No newline at end of file
diff --git a/Lang/Go/The-ISAAC-Cipher b/Lang/Go/The-ISAAC-Cipher
new file mode 120000
index 0000000000..fdba2e9ec2
--- /dev/null
+++ b/Lang/Go/The-ISAAC-Cipher
@@ -0,0 +1 @@
+../../Task/The-ISAAC-Cipher/Go
\ No newline at end of file
diff --git a/Lang/Go/The-Twelve-Days-of-Christmas b/Lang/Go/The-Twelve-Days-of-Christmas
new file mode 120000
index 0000000000..30c96895ba
--- /dev/null
+++ b/Lang/Go/The-Twelve-Days-of-Christmas
@@ -0,0 +1 @@
+../../Task/The-Twelve-Days-of-Christmas/Go
\ No newline at end of file
diff --git a/Lang/Go/Total-circles-area b/Lang/Go/Total-circles-area
new file mode 120000
index 0000000000..74647e668b
--- /dev/null
+++ b/Lang/Go/Total-circles-area
@@ -0,0 +1 @@
+../../Task/Total-circles-area/Go
\ No newline at end of file
diff --git a/Lang/Go/Unix-ls b/Lang/Go/Unix-ls
new file mode 120000
index 0000000000..d8b771b31b
--- /dev/null
+++ b/Lang/Go/Unix-ls
@@ -0,0 +1 @@
+../../Task/Unix-ls/Go
\ No newline at end of file
diff --git a/Lang/Go/Zero-to-the-zero-power b/Lang/Go/Zero-to-the-zero-power
new file mode 120000
index 0000000000..5b1245ebd5
--- /dev/null
+++ b/Lang/Go/Zero-to-the-zero-power
@@ -0,0 +1 @@
+../../Task/Zero-to-the-zero-power/Go
\ No newline at end of file
diff --git a/Lang/Go/Zhang-Suen-thinning-algorithm b/Lang/Go/Zhang-Suen-thinning-algorithm
new file mode 120000
index 0000000000..42dde2687b
--- /dev/null
+++ b/Lang/Go/Zhang-Suen-thinning-algorithm
@@ -0,0 +1 @@
+../../Task/Zhang-Suen-thinning-algorithm/Go
\ No newline at end of file
diff --git a/Lang/Groovy/ABC-Problem b/Lang/Groovy/ABC-Problem
new file mode 120000
index 0000000000..9f28b2a954
--- /dev/null
+++ b/Lang/Groovy/ABC-Problem
@@ -0,0 +1 @@
+../../Task/ABC-Problem/Groovy
\ No newline at end of file
diff --git a/Lang/Groovy/Append-a-record-to-the-end-of-a-text-file b/Lang/Groovy/Append-a-record-to-the-end-of-a-text-file
new file mode 120000
index 0000000000..14ef3448fa
--- /dev/null
+++ b/Lang/Groovy/Append-a-record-to-the-end-of-a-text-file
@@ -0,0 +1 @@
+../../Task/Append-a-record-to-the-end-of-a-text-file/Groovy
\ No newline at end of file
diff --git a/Lang/Groovy/CSV-data-manipulation b/Lang/Groovy/CSV-data-manipulation
new file mode 120000
index 0000000000..6b65c628e6
--- /dev/null
+++ b/Lang/Groovy/CSV-data-manipulation
@@ -0,0 +1 @@
+../../Task/CSV-data-manipulation/Groovy
\ No newline at end of file
diff --git a/Lang/Groovy/Closures-Value-capture b/Lang/Groovy/Closures-Value-capture
new file mode 120000
index 0000000000..db38c0a572
--- /dev/null
+++ b/Lang/Groovy/Closures-Value-capture
@@ -0,0 +1 @@
+../../Task/Closures-Value-capture/Groovy
\ No newline at end of file
diff --git a/Lang/Groovy/Comma-quibbling b/Lang/Groovy/Comma-quibbling
new file mode 120000
index 0000000000..606470c1d7
--- /dev/null
+++ b/Lang/Groovy/Comma-quibbling
@@ -0,0 +1 @@
+../../Task/Comma-quibbling/Groovy
\ No newline at end of file
diff --git a/Lang/Groovy/Currying b/Lang/Groovy/Currying
new file mode 120000
index 0000000000..8cf92a749e
--- /dev/null
+++ b/Lang/Groovy/Currying
@@ -0,0 +1 @@
+../../Task/Currying/Groovy
\ No newline at end of file
diff --git a/Lang/Groovy/File-input-output b/Lang/Groovy/File-input-output
new file mode 120000
index 0000000000..f118310eb3
--- /dev/null
+++ b/Lang/Groovy/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/Groovy
\ No newline at end of file
diff --git a/Lang/Groovy/Find-the-last-Sunday-of-each-month b/Lang/Groovy/Find-the-last-Sunday-of-each-month
new file mode 120000
index 0000000000..aee907af87
--- /dev/null
+++ b/Lang/Groovy/Find-the-last-Sunday-of-each-month
@@ -0,0 +1 @@
+../../Task/Find-the-last-Sunday-of-each-month/Groovy
\ No newline at end of file
diff --git a/Lang/Groovy/Generate-lower-case-ASCII-alphabet b/Lang/Groovy/Generate-lower-case-ASCII-alphabet
new file mode 120000
index 0000000000..165e4aad7c
--- /dev/null
+++ b/Lang/Groovy/Generate-lower-case-ASCII-alphabet
@@ -0,0 +1 @@
+../../Task/Generate-lower-case-ASCII-alphabet/Groovy
\ No newline at end of file
diff --git a/Lang/Groovy/Hash-join b/Lang/Groovy/Hash-join
new file mode 120000
index 0000000000..06e676db72
--- /dev/null
+++ b/Lang/Groovy/Hash-join
@@ -0,0 +1 @@
+../../Task/Hash-join/Groovy
\ No newline at end of file
diff --git a/Lang/Groovy/IBAN b/Lang/Groovy/IBAN
new file mode 120000
index 0000000000..46d22eba49
--- /dev/null
+++ b/Lang/Groovy/IBAN
@@ -0,0 +1 @@
+../../Task/IBAN/Groovy
\ No newline at end of file
diff --git a/Lang/Groovy/Phrase-reversals b/Lang/Groovy/Phrase-reversals
new file mode 120000
index 0000000000..d44ac4ccf7
--- /dev/null
+++ b/Lang/Groovy/Phrase-reversals
@@ -0,0 +1 @@
+../../Task/Phrase-reversals/Groovy
\ No newline at end of file
diff --git a/Lang/Groovy/Reverse-words-in-a-string b/Lang/Groovy/Reverse-words-in-a-string
new file mode 120000
index 0000000000..33f7135289
--- /dev/null
+++ b/Lang/Groovy/Reverse-words-in-a-string
@@ -0,0 +1 @@
+../../Task/Reverse-words-in-a-string/Groovy
\ No newline at end of file
diff --git a/Lang/Groovy/Sparkline-in-unicode b/Lang/Groovy/Sparkline-in-unicode
new file mode 120000
index 0000000000..0fee9284ce
--- /dev/null
+++ b/Lang/Groovy/Sparkline-in-unicode
@@ -0,0 +1 @@
+../../Task/Sparkline-in-unicode/Groovy
\ No newline at end of file
diff --git a/Lang/Groovy/String-matching b/Lang/Groovy/String-matching
new file mode 120000
index 0000000000..7d39c56151
--- /dev/null
+++ b/Lang/Groovy/String-matching
@@ -0,0 +1 @@
+../../Task/String-matching/Groovy
\ No newline at end of file
diff --git a/Lang/Groovy/Sum-multiples-of-3-and-5 b/Lang/Groovy/Sum-multiples-of-3-and-5
new file mode 120000
index 0000000000..8bad6987e1
--- /dev/null
+++ b/Lang/Groovy/Sum-multiples-of-3-and-5
@@ -0,0 +1 @@
+../../Task/Sum-multiples-of-3-and-5/Groovy
\ No newline at end of file
diff --git a/Lang/Groovy/The-Twelve-Days-of-Christmas b/Lang/Groovy/The-Twelve-Days-of-Christmas
new file mode 120000
index 0000000000..541b1849dc
--- /dev/null
+++ b/Lang/Groovy/The-Twelve-Days-of-Christmas
@@ -0,0 +1 @@
+../../Task/The-Twelve-Days-of-Christmas/Groovy
\ No newline at end of file
diff --git a/Lang/Groovy/Zero-to-the-zero-power b/Lang/Groovy/Zero-to-the-zero-power
new file mode 120000
index 0000000000..8a174896bc
--- /dev/null
+++ b/Lang/Groovy/Zero-to-the-zero-power
@@ -0,0 +1 @@
+../../Task/Zero-to-the-zero-power/Groovy
\ No newline at end of file
diff --git a/Lang/Groovy/Zhang-Suen-thinning-algorithm b/Lang/Groovy/Zhang-Suen-thinning-algorithm
new file mode 120000
index 0000000000..c0076ba5e0
--- /dev/null
+++ b/Lang/Groovy/Zhang-Suen-thinning-algorithm
@@ -0,0 +1 @@
+../../Task/Zhang-Suen-thinning-algorithm/Groovy
\ No newline at end of file
diff --git a/Lang/Haskell/9-billion-names-of-God-the-integer b/Lang/Haskell/9-billion-names-of-God-the-integer
new file mode 120000
index 0000000000..6092490a58
--- /dev/null
+++ b/Lang/Haskell/9-billion-names-of-God-the-integer
@@ -0,0 +1 @@
+../../Task/9-billion-names-of-God-the-integer/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/ABC-Problem b/Lang/Haskell/ABC-Problem
new file mode 120000
index 0000000000..ee6a433e2a
--- /dev/null
+++ b/Lang/Haskell/ABC-Problem
@@ -0,0 +1 @@
+../../Task/ABC-Problem/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/AKS-test-for-primes b/Lang/Haskell/AKS-test-for-primes
new file mode 120000
index 0000000000..aac1609f63
--- /dev/null
+++ b/Lang/Haskell/AKS-test-for-primes
@@ -0,0 +1 @@
+../../Task/AKS-test-for-primes/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/Abundant,-deficient-and-perfect-number-classifications b/Lang/Haskell/Abundant,-deficient-and-perfect-number-classifications
new file mode 120000
index 0000000000..8e08fc03da
--- /dev/null
+++ b/Lang/Haskell/Abundant,-deficient-and-perfect-number-classifications
@@ -0,0 +1 @@
+../../Task/Abundant,-deficient-and-perfect-number-classifications/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/Aliquot-sequence-classifications b/Lang/Haskell/Aliquot-sequence-classifications
new file mode 120000
index 0000000000..a548a674d8
--- /dev/null
+++ b/Lang/Haskell/Aliquot-sequence-classifications
@@ -0,0 +1 @@
+../../Task/Aliquot-sequence-classifications/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/Almost-prime b/Lang/Haskell/Almost-prime
new file mode 120000
index 0000000000..6f43c3ecb5
--- /dev/null
+++ b/Lang/Haskell/Almost-prime
@@ -0,0 +1 @@
+../../Task/Almost-prime/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/Amb b/Lang/Haskell/Amb
new file mode 120000
index 0000000000..6eb7bd4eba
--- /dev/null
+++ b/Lang/Haskell/Amb
@@ -0,0 +1 @@
+../../Task/Amb/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/Amicable-pairs b/Lang/Haskell/Amicable-pairs
new file mode 120000
index 0000000000..dafa82d669
--- /dev/null
+++ b/Lang/Haskell/Amicable-pairs
@@ -0,0 +1 @@
+../../Task/Amicable-pairs/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/Append-a-record-to-the-end-of-a-text-file b/Lang/Haskell/Append-a-record-to-the-end-of-a-text-file
new file mode 120000
index 0000000000..9b0ce0ebfd
--- /dev/null
+++ b/Lang/Haskell/Append-a-record-to-the-end-of-a-text-file
@@ -0,0 +1 @@
+../../Task/Append-a-record-to-the-end-of-a-text-file/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/Arithmetic-geometric-mean-Calculate-Pi b/Lang/Haskell/Arithmetic-geometric-mean-Calculate-Pi
new file mode 120000
index 0000000000..bb43e32793
--- /dev/null
+++ b/Lang/Haskell/Arithmetic-geometric-mean-Calculate-Pi
@@ -0,0 +1 @@
+../../Task/Arithmetic-geometric-mean-Calculate-Pi/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/Benfords-law b/Lang/Haskell/Benfords-law
new file mode 120000
index 0000000000..a4679f702d
--- /dev/null
+++ b/Lang/Haskell/Benfords-law
@@ -0,0 +1 @@
+../../Task/Benfords-law/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/Bernoulli-numbers b/Lang/Haskell/Bernoulli-numbers
new file mode 120000
index 0000000000..729bd74bd8
--- /dev/null
+++ b/Lang/Haskell/Bernoulli-numbers
@@ -0,0 +1 @@
+../../Task/Bernoulli-numbers/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/CSV-data-manipulation b/Lang/Haskell/CSV-data-manipulation
new file mode 120000
index 0000000000..c1e748a1c9
--- /dev/null
+++ b/Lang/Haskell/CSV-data-manipulation
@@ -0,0 +1 @@
+../../Task/CSV-data-manipulation/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/Catamorphism b/Lang/Haskell/Catamorphism
new file mode 120000
index 0000000000..65dc9bcab2
--- /dev/null
+++ b/Lang/Haskell/Catamorphism
@@ -0,0 +1 @@
+../../Task/Catamorphism/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/Chinese-remainder-theorem b/Lang/Haskell/Chinese-remainder-theorem
new file mode 120000
index 0000000000..d78667b66f
--- /dev/null
+++ b/Lang/Haskell/Chinese-remainder-theorem
@@ -0,0 +1 @@
+../../Task/Chinese-remainder-theorem/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/Circles-of-given-radius-through-two-points b/Lang/Haskell/Circles-of-given-radius-through-two-points
new file mode 120000
index 0000000000..012e404718
--- /dev/null
+++ b/Lang/Haskell/Circles-of-given-radius-through-two-points
@@ -0,0 +1 @@
+../../Task/Circles-of-given-radius-through-two-points/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/Closures-Value-capture b/Lang/Haskell/Closures-Value-capture
new file mode 120000
index 0000000000..4b08187bd8
--- /dev/null
+++ b/Lang/Haskell/Closures-Value-capture
@@ -0,0 +1 @@
+../../Task/Closures-Value-capture/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/Comma-quibbling b/Lang/Haskell/Comma-quibbling
new file mode 120000
index 0000000000..c8440bb602
--- /dev/null
+++ b/Lang/Haskell/Comma-quibbling
@@ -0,0 +1 @@
+../../Task/Comma-quibbling/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/Convert-decimal-number-to-rational b/Lang/Haskell/Convert-decimal-number-to-rational
new file mode 120000
index 0000000000..d422c4821e
--- /dev/null
+++ b/Lang/Haskell/Convert-decimal-number-to-rational
@@ -0,0 +1 @@
+../../Task/Convert-decimal-number-to-rational/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/Currying b/Lang/Haskell/Currying
new file mode 120000
index 0000000000..3c45a63adb
--- /dev/null
+++ b/Lang/Haskell/Currying
@@ -0,0 +1 @@
+../../Task/Currying/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/Digital-root-Multiplicative-digital-root b/Lang/Haskell/Digital-root-Multiplicative-digital-root
new file mode 120000
index 0000000000..ec002b69c8
--- /dev/null
+++ b/Lang/Haskell/Digital-root-Multiplicative-digital-root
@@ -0,0 +1 @@
+../../Task/Digital-root-Multiplicative-digital-root/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/Draw-a-clock b/Lang/Haskell/Draw-a-clock
new file mode 120000
index 0000000000..c91a27d1e2
--- /dev/null
+++ b/Lang/Haskell/Draw-a-clock
@@ -0,0 +1 @@
+../../Task/Draw-a-clock/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/Extensible-prime-generator b/Lang/Haskell/Extensible-prime-generator
new file mode 120000
index 0000000000..a3b61ad14e
--- /dev/null
+++ b/Lang/Haskell/Extensible-prime-generator
@@ -0,0 +1 @@
+../../Task/Extensible-prime-generator/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/Fibonacci-word b/Lang/Haskell/Fibonacci-word
new file mode 120000
index 0000000000..cef0c52deb
--- /dev/null
+++ b/Lang/Haskell/Fibonacci-word
@@ -0,0 +1 @@
+../../Task/Fibonacci-word/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/File-input-output b/Lang/Haskell/File-input-output
new file mode 120000
index 0000000000..9e472d51d2
--- /dev/null
+++ b/Lang/Haskell/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/Flipping-bits-game b/Lang/Haskell/Flipping-bits-game
new file mode 120000
index 0000000000..23e16398cc
--- /dev/null
+++ b/Lang/Haskell/Flipping-bits-game
@@ -0,0 +1 @@
+../../Task/Flipping-bits-game/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/Fractran b/Lang/Haskell/Fractran
new file mode 120000
index 0000000000..c65bab74a3
--- /dev/null
+++ b/Lang/Haskell/Fractran
@@ -0,0 +1 @@
+../../Task/Fractran/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/Generate-Chess960-starting-position b/Lang/Haskell/Generate-Chess960-starting-position
new file mode 120000
index 0000000000..114614fdb4
--- /dev/null
+++ b/Lang/Haskell/Generate-Chess960-starting-position
@@ -0,0 +1 @@
+../../Task/Generate-Chess960-starting-position/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/Generate-lower-case-ASCII-alphabet b/Lang/Haskell/Generate-lower-case-ASCII-alphabet
new file mode 120000
index 0000000000..ecfba8d533
--- /dev/null
+++ b/Lang/Haskell/Generate-lower-case-ASCII-alphabet
@@ -0,0 +1 @@
+../../Task/Generate-lower-case-ASCII-alphabet/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/Hash-join b/Lang/Haskell/Hash-join
new file mode 120000
index 0000000000..d760e9725c
--- /dev/null
+++ b/Lang/Haskell/Hash-join
@@ -0,0 +1 @@
+../../Task/Hash-join/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/Hello-world-Newbie b/Lang/Haskell/Hello-world-Newbie
new file mode 120000
index 0000000000..88abda2273
--- /dev/null
+++ b/Lang/Haskell/Hello-world-Newbie
@@ -0,0 +1 @@
+../../Task/Hello-world-Newbie/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/Heronian-triangles b/Lang/Haskell/Heronian-triangles
new file mode 120000
index 0000000000..2e7f015be1
--- /dev/null
+++ b/Lang/Haskell/Heronian-triangles
@@ -0,0 +1 @@
+../../Task/Heronian-triangles/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/IBAN b/Lang/Haskell/IBAN
new file mode 120000
index 0000000000..5579cce5ad
--- /dev/null
+++ b/Lang/Haskell/IBAN
@@ -0,0 +1 @@
+../../Task/IBAN/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/Integer-overflow b/Lang/Haskell/Integer-overflow
new file mode 120000
index 0000000000..f88423a885
--- /dev/null
+++ b/Lang/Haskell/Integer-overflow
@@ -0,0 +1 @@
+../../Task/Integer-overflow/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/Iterated-digits-squaring b/Lang/Haskell/Iterated-digits-squaring
new file mode 120000
index 0000000000..aa1c315b2e
--- /dev/null
+++ b/Lang/Haskell/Iterated-digits-squaring
@@ -0,0 +1 @@
+../../Task/Iterated-digits-squaring/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/K-d-tree b/Lang/Haskell/K-d-tree
new file mode 120000
index 0000000000..11e51a2458
--- /dev/null
+++ b/Lang/Haskell/K-d-tree
@@ -0,0 +1 @@
+../../Task/K-d-tree/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/Left-factorials b/Lang/Haskell/Left-factorials
new file mode 120000
index 0000000000..7530883f2a
--- /dev/null
+++ b/Lang/Haskell/Left-factorials
@@ -0,0 +1 @@
+../../Task/Left-factorials/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/Longest-increasing-subsequence b/Lang/Haskell/Longest-increasing-subsequence
new file mode 120000
index 0000000000..3dc0509755
--- /dev/null
+++ b/Lang/Haskell/Longest-increasing-subsequence
@@ -0,0 +1 @@
+../../Task/Longest-increasing-subsequence/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/Ludic-numbers b/Lang/Haskell/Ludic-numbers
new file mode 120000
index 0000000000..5eb46db5a0
--- /dev/null
+++ b/Lang/Haskell/Ludic-numbers
@@ -0,0 +1 @@
+../../Task/Ludic-numbers/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/Magic-squares-of-odd-order b/Lang/Haskell/Magic-squares-of-odd-order
new file mode 120000
index 0000000000..b60090c3c9
--- /dev/null
+++ b/Lang/Haskell/Magic-squares-of-odd-order
@@ -0,0 +1 @@
+../../Task/Magic-squares-of-odd-order/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/Maximum-triangle-path-sum b/Lang/Haskell/Maximum-triangle-path-sum
new file mode 120000
index 0000000000..110b58305c
--- /dev/null
+++ b/Lang/Haskell/Maximum-triangle-path-sum
@@ -0,0 +1 @@
+../../Task/Maximum-triangle-path-sum/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/Move-to-front-algorithm b/Lang/Haskell/Move-to-front-algorithm
new file mode 120000
index 0000000000..baa93c12de
--- /dev/null
+++ b/Lang/Haskell/Move-to-front-algorithm
@@ -0,0 +1 @@
+../../Task/Move-to-front-algorithm/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/Munching-squares b/Lang/Haskell/Munching-squares
new file mode 120000
index 0000000000..0e144d9a81
--- /dev/null
+++ b/Lang/Haskell/Munching-squares
@@ -0,0 +1 @@
+../../Task/Munching-squares/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/Narcissistic-decimal-number b/Lang/Haskell/Narcissistic-decimal-number
new file mode 120000
index 0000000000..f6ca561a49
--- /dev/null
+++ b/Lang/Haskell/Narcissistic-decimal-number
@@ -0,0 +1 @@
+../../Task/Narcissistic-decimal-number/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/Nth b/Lang/Haskell/Nth
new file mode 120000
index 0000000000..d8868ee602
--- /dev/null
+++ b/Lang/Haskell/Nth
@@ -0,0 +1 @@
+../../Task/Nth/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/Odd-word-problem b/Lang/Haskell/Odd-word-problem
new file mode 120000
index 0000000000..32ad010935
--- /dev/null
+++ b/Lang/Haskell/Odd-word-problem
@@ -0,0 +1 @@
+../../Task/Odd-word-problem/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/Old-lady-swallowed-a-fly b/Lang/Haskell/Old-lady-swallowed-a-fly
new file mode 120000
index 0000000000..c7aee3c0ff
--- /dev/null
+++ b/Lang/Haskell/Old-lady-swallowed-a-fly
@@ -0,0 +1 @@
+../../Task/Old-lady-swallowed-a-fly/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/Paraffins b/Lang/Haskell/Paraffins
new file mode 120000
index 0000000000..bd1ebc66d0
--- /dev/null
+++ b/Lang/Haskell/Paraffins
@@ -0,0 +1 @@
+../../Task/Paraffins/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/Penneys-game b/Lang/Haskell/Penneys-game
new file mode 120000
index 0000000000..81b6b10c7f
--- /dev/null
+++ b/Lang/Haskell/Penneys-game
@@ -0,0 +1 @@
+../../Task/Penneys-game/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/Percolation-Mean-run-density b/Lang/Haskell/Percolation-Mean-run-density
new file mode 120000
index 0000000000..9f5595b9ac
--- /dev/null
+++ b/Lang/Haskell/Percolation-Mean-run-density
@@ -0,0 +1 @@
+../../Task/Percolation-Mean-run-density/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/Permutations-Rank-of-a-permutation b/Lang/Haskell/Permutations-Rank-of-a-permutation
new file mode 120000
index 0000000000..1df0db0d36
--- /dev/null
+++ b/Lang/Haskell/Permutations-Rank-of-a-permutation
@@ -0,0 +1 @@
+../../Task/Permutations-Rank-of-a-permutation/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/Pernicious-numbers b/Lang/Haskell/Pernicious-numbers
new file mode 120000
index 0000000000..a33046bc18
--- /dev/null
+++ b/Lang/Haskell/Pernicious-numbers
@@ -0,0 +1 @@
+../../Task/Pernicious-numbers/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/Phrase-reversals b/Lang/Haskell/Phrase-reversals
new file mode 120000
index 0000000000..49c5ecbbb7
--- /dev/null
+++ b/Lang/Haskell/Phrase-reversals
@@ -0,0 +1 @@
+../../Task/Phrase-reversals/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/Quickselect-algorithm b/Lang/Haskell/Quickselect-algorithm
new file mode 120000
index 0000000000..c292258cda
--- /dev/null
+++ b/Lang/Haskell/Quickselect-algorithm
@@ -0,0 +1 @@
+../../Task/Quickselect-algorithm/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/Ranking-methods b/Lang/Haskell/Ranking-methods
new file mode 120000
index 0000000000..04c872bf01
--- /dev/null
+++ b/Lang/Haskell/Ranking-methods
@@ -0,0 +1 @@
+../../Task/Ranking-methods/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/Rep-string b/Lang/Haskell/Rep-string
new file mode 120000
index 0000000000..5a478fb081
--- /dev/null
+++ b/Lang/Haskell/Rep-string
@@ -0,0 +1 @@
+../../Task/Rep-string/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/Reverse-words-in-a-string b/Lang/Haskell/Reverse-words-in-a-string
new file mode 120000
index 0000000000..b398f63a19
--- /dev/null
+++ b/Lang/Haskell/Reverse-words-in-a-string
@@ -0,0 +1 @@
+../../Task/Reverse-words-in-a-string/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/Runge-Kutta-method b/Lang/Haskell/Runge-Kutta-method
new file mode 120000
index 0000000000..96e0981b75
--- /dev/null
+++ b/Lang/Haskell/Runge-Kutta-method
@@ -0,0 +1 @@
+../../Task/Runge-Kutta-method/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/Semiprime b/Lang/Haskell/Semiprime
new file mode 120000
index 0000000000..acfdcd4bff
--- /dev/null
+++ b/Lang/Haskell/Semiprime
@@ -0,0 +1 @@
+../../Task/Semiprime/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/Sequence-of-primes-by-Trial-Division b/Lang/Haskell/Sequence-of-primes-by-Trial-Division
new file mode 120000
index 0000000000..d15794c551
--- /dev/null
+++ b/Lang/Haskell/Sequence-of-primes-by-Trial-Division
@@ -0,0 +1 @@
+../../Task/Sequence-of-primes-by-Trial-Division/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/Solve-a-Holy-Knights-tour b/Lang/Haskell/Solve-a-Holy-Knights-tour
new file mode 120000
index 0000000000..1f7febcdba
--- /dev/null
+++ b/Lang/Haskell/Solve-a-Holy-Knights-tour
@@ -0,0 +1 @@
+../../Task/Solve-a-Holy-Knights-tour/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/Sparkline-in-unicode b/Lang/Haskell/Sparkline-in-unicode
new file mode 120000
index 0000000000..81aebd5eeb
--- /dev/null
+++ b/Lang/Haskell/Sparkline-in-unicode
@@ -0,0 +1 @@
+../../Task/Sparkline-in-unicode/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/Stern-Brocot-sequence b/Lang/Haskell/Stern-Brocot-sequence
new file mode 120000
index 0000000000..b345656767
--- /dev/null
+++ b/Lang/Haskell/Stern-Brocot-sequence
@@ -0,0 +1 @@
+../../Task/Stern-Brocot-sequence/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/String-append b/Lang/Haskell/String-append
new file mode 120000
index 0000000000..e2cd241cc9
--- /dev/null
+++ b/Lang/Haskell/String-append
@@ -0,0 +1 @@
+../../Task/String-append/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/String-matching b/Lang/Haskell/String-matching
new file mode 120000
index 0000000000..c551180abd
--- /dev/null
+++ b/Lang/Haskell/String-matching
@@ -0,0 +1 @@
+../../Task/String-matching/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/String-prepend b/Lang/Haskell/String-prepend
new file mode 120000
index 0000000000..c5836ecd50
--- /dev/null
+++ b/Lang/Haskell/String-prepend
@@ -0,0 +1 @@
+../../Task/String-prepend/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/Sum-multiples-of-3-and-5 b/Lang/Haskell/Sum-multiples-of-3-and-5
new file mode 120000
index 0000000000..1e80ed1af3
--- /dev/null
+++ b/Lang/Haskell/Sum-multiples-of-3-and-5
@@ -0,0 +1 @@
+../../Task/Sum-multiples-of-3-and-5/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/The-ISAAC-Cipher b/Lang/Haskell/The-ISAAC-Cipher
new file mode 120000
index 0000000000..32bf316a4b
--- /dev/null
+++ b/Lang/Haskell/The-ISAAC-Cipher
@@ -0,0 +1 @@
+../../Task/The-ISAAC-Cipher/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/Total-circles-area b/Lang/Haskell/Total-circles-area
new file mode 120000
index 0000000000..9df1636ef3
--- /dev/null
+++ b/Lang/Haskell/Total-circles-area
@@ -0,0 +1 @@
+../../Task/Total-circles-area/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/Unix-ls b/Lang/Haskell/Unix-ls
new file mode 120000
index 0000000000..89dbd1ef0a
--- /dev/null
+++ b/Lang/Haskell/Unix-ls
@@ -0,0 +1 @@
+../../Task/Unix-ls/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/Zero-to-the-zero-power b/Lang/Haskell/Zero-to-the-zero-power
new file mode 120000
index 0000000000..f53f6d8b90
--- /dev/null
+++ b/Lang/Haskell/Zero-to-the-zero-power
@@ -0,0 +1 @@
+../../Task/Zero-to-the-zero-power/Haskell
\ No newline at end of file
diff --git a/Lang/Haskell/Zhang-Suen-thinning-algorithm b/Lang/Haskell/Zhang-Suen-thinning-algorithm
new file mode 120000
index 0000000000..d490998a9e
--- /dev/null
+++ b/Lang/Haskell/Zhang-Suen-thinning-algorithm
@@ -0,0 +1 @@
+../../Task/Zhang-Suen-thinning-algorithm/Haskell
\ No newline at end of file
diff --git a/Lang/Haxe/Amb b/Lang/Haxe/Amb
new file mode 120000
index 0000000000..0b26ae446e
--- /dev/null
+++ b/Lang/Haxe/Amb
@@ -0,0 +1 @@
+../../Task/Amb/Haxe
\ No newline at end of file
diff --git a/Lang/Haxe/The-ISAAC-Cipher b/Lang/Haxe/The-ISAAC-Cipher
new file mode 120000
index 0000000000..8b320ebc6f
--- /dev/null
+++ b/Lang/Haxe/The-ISAAC-Cipher
@@ -0,0 +1 @@
+../../Task/The-ISAAC-Cipher/Haxe
\ No newline at end of file
diff --git a/Lang/HicEst/File-input-output b/Lang/HicEst/File-input-output
new file mode 120000
index 0000000000..6d24b9522e
--- /dev/null
+++ b/Lang/HicEst/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/HicEst
\ No newline at end of file
diff --git a/Lang/IDL/File-input-output b/Lang/IDL/File-input-output
new file mode 120000
index 0000000000..1d959e4c2f
--- /dev/null
+++ b/Lang/IDL/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/IDL
\ No newline at end of file
diff --git a/Lang/Icon/ABC-Problem b/Lang/Icon/ABC-Problem
new file mode 120000
index 0000000000..427b195d91
--- /dev/null
+++ b/Lang/Icon/ABC-Problem
@@ -0,0 +1 @@
+../../Task/ABC-Problem/Icon
\ No newline at end of file
diff --git a/Lang/Icon/Almost-prime b/Lang/Icon/Almost-prime
new file mode 120000
index 0000000000..0d05d6b3c3
--- /dev/null
+++ b/Lang/Icon/Almost-prime
@@ -0,0 +1 @@
+../../Task/Almost-prime/Icon
\ No newline at end of file
diff --git a/Lang/Icon/Amb b/Lang/Icon/Amb
new file mode 120000
index 0000000000..390f1a1a25
--- /dev/null
+++ b/Lang/Icon/Amb
@@ -0,0 +1 @@
+../../Task/Amb/Icon
\ No newline at end of file
diff --git a/Lang/Icon/Append-a-record-to-the-end-of-a-text-file b/Lang/Icon/Append-a-record-to-the-end-of-a-text-file
new file mode 120000
index 0000000000..6594626bc3
--- /dev/null
+++ b/Lang/Icon/Append-a-record-to-the-end-of-a-text-file
@@ -0,0 +1 @@
+../../Task/Append-a-record-to-the-end-of-a-text-file/Icon
\ No newline at end of file
diff --git a/Lang/Icon/Benfords-law b/Lang/Icon/Benfords-law
new file mode 120000
index 0000000000..9148df1a23
--- /dev/null
+++ b/Lang/Icon/Benfords-law
@@ -0,0 +1 @@
+../../Task/Benfords-law/Icon
\ No newline at end of file
diff --git a/Lang/Icon/Bernoulli-numbers b/Lang/Icon/Bernoulli-numbers
new file mode 120000
index 0000000000..790fe99e33
--- /dev/null
+++ b/Lang/Icon/Bernoulli-numbers
@@ -0,0 +1 @@
+../../Task/Bernoulli-numbers/Icon
\ No newline at end of file
diff --git a/Lang/Icon/CSV-data-manipulation b/Lang/Icon/CSV-data-manipulation
new file mode 120000
index 0000000000..da290460e5
--- /dev/null
+++ b/Lang/Icon/CSV-data-manipulation
@@ -0,0 +1 @@
+../../Task/CSV-data-manipulation/Icon
\ No newline at end of file
diff --git a/Lang/Icon/Calendar---for-REAL-programmers b/Lang/Icon/Calendar---for-REAL-programmers
new file mode 120000
index 0000000000..1dcbeda0a7
--- /dev/null
+++ b/Lang/Icon/Calendar---for-REAL-programmers
@@ -0,0 +1 @@
+../../Task/Calendar---for-REAL-programmers/Icon
\ No newline at end of file
diff --git a/Lang/Icon/Catalan-numbers-Pascals-triangle b/Lang/Icon/Catalan-numbers-Pascals-triangle
new file mode 120000
index 0000000000..dd2583e70c
--- /dev/null
+++ b/Lang/Icon/Catalan-numbers-Pascals-triangle
@@ -0,0 +1 @@
+../../Task/Catalan-numbers-Pascals-triangle/Icon
\ No newline at end of file
diff --git a/Lang/Icon/Catamorphism b/Lang/Icon/Catamorphism
new file mode 120000
index 0000000000..3f3f93ffe1
--- /dev/null
+++ b/Lang/Icon/Catamorphism
@@ -0,0 +1 @@
+../../Task/Catamorphism/Icon
\ No newline at end of file
diff --git a/Lang/Icon/Chinese-remainder-theorem b/Lang/Icon/Chinese-remainder-theorem
new file mode 120000
index 0000000000..8c63077264
--- /dev/null
+++ b/Lang/Icon/Chinese-remainder-theorem
@@ -0,0 +1 @@
+../../Task/Chinese-remainder-theorem/Icon
\ No newline at end of file
diff --git a/Lang/Icon/Circles-of-given-radius-through-two-points b/Lang/Icon/Circles-of-given-radius-through-two-points
new file mode 120000
index 0000000000..f9fad1bf7f
--- /dev/null
+++ b/Lang/Icon/Circles-of-given-radius-through-two-points
@@ -0,0 +1 @@
+../../Task/Circles-of-given-radius-through-two-points/Icon
\ No newline at end of file
diff --git a/Lang/Icon/Closures-Value-capture b/Lang/Icon/Closures-Value-capture
new file mode 120000
index 0000000000..53978a1a40
--- /dev/null
+++ b/Lang/Icon/Closures-Value-capture
@@ -0,0 +1 @@
+../../Task/Closures-Value-capture/Icon
\ No newline at end of file
diff --git a/Lang/Icon/Combinations-and-permutations b/Lang/Icon/Combinations-and-permutations
new file mode 120000
index 0000000000..e4f4b4364a
--- /dev/null
+++ b/Lang/Icon/Combinations-and-permutations
@@ -0,0 +1 @@
+../../Task/Combinations-and-permutations/Icon
\ No newline at end of file
diff --git a/Lang/Icon/Comma-quibbling b/Lang/Icon/Comma-quibbling
new file mode 120000
index 0000000000..16431b3c91
--- /dev/null
+++ b/Lang/Icon/Comma-quibbling
@@ -0,0 +1 @@
+../../Task/Comma-quibbling/Icon
\ No newline at end of file
diff --git a/Lang/Icon/Digital-root-Multiplicative-digital-root b/Lang/Icon/Digital-root-Multiplicative-digital-root
new file mode 120000
index 0000000000..83f04c7032
--- /dev/null
+++ b/Lang/Icon/Digital-root-Multiplicative-digital-root
@@ -0,0 +1 @@
+../../Task/Digital-root-Multiplicative-digital-root/Icon
\ No newline at end of file
diff --git a/Lang/Icon/Fibonacci-word b/Lang/Icon/Fibonacci-word
new file mode 120000
index 0000000000..f20e85b38b
--- /dev/null
+++ b/Lang/Icon/Fibonacci-word
@@ -0,0 +1 @@
+../../Task/Fibonacci-word/Icon
\ No newline at end of file
diff --git a/Lang/Icon/Fibonacci-word-fractal b/Lang/Icon/Fibonacci-word-fractal
new file mode 120000
index 0000000000..b428c2caee
--- /dev/null
+++ b/Lang/Icon/Fibonacci-word-fractal
@@ -0,0 +1 @@
+../../Task/Fibonacci-word-fractal/Icon
\ No newline at end of file
diff --git a/Lang/Icon/File-input-output b/Lang/Icon/File-input-output
new file mode 120000
index 0000000000..c076ab8ce6
--- /dev/null
+++ b/Lang/Icon/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/Icon
\ No newline at end of file
diff --git a/Lang/Icon/Find-the-last-Sunday-of-each-month b/Lang/Icon/Find-the-last-Sunday-of-each-month
new file mode 120000
index 0000000000..075fae448b
--- /dev/null
+++ b/Lang/Icon/Find-the-last-Sunday-of-each-month
@@ -0,0 +1 @@
+../../Task/Find-the-last-Sunday-of-each-month/Icon
\ No newline at end of file
diff --git a/Lang/Icon/Fractran b/Lang/Icon/Fractran
new file mode 120000
index 0000000000..6d49132383
--- /dev/null
+++ b/Lang/Icon/Fractran
@@ -0,0 +1 @@
+../../Task/Fractran/Icon
\ No newline at end of file
diff --git a/Lang/Icon/Generate-lower-case-ASCII-alphabet b/Lang/Icon/Generate-lower-case-ASCII-alphabet
new file mode 120000
index 0000000000..b64e18917d
--- /dev/null
+++ b/Lang/Icon/Generate-lower-case-ASCII-alphabet
@@ -0,0 +1 @@
+../../Task/Generate-lower-case-ASCII-alphabet/Icon
\ No newline at end of file
diff --git a/Lang/Icon/Left-factorials b/Lang/Icon/Left-factorials
new file mode 120000
index 0000000000..7c4e0d4299
--- /dev/null
+++ b/Lang/Icon/Left-factorials
@@ -0,0 +1 @@
+../../Task/Left-factorials/Icon
\ No newline at end of file
diff --git a/Lang/Icon/Longest-increasing-subsequence b/Lang/Icon/Longest-increasing-subsequence
new file mode 120000
index 0000000000..5b40cb9455
--- /dev/null
+++ b/Lang/Icon/Longest-increasing-subsequence
@@ -0,0 +1 @@
+../../Task/Longest-increasing-subsequence/Icon
\ No newline at end of file
diff --git a/Lang/Icon/Ludic-numbers b/Lang/Icon/Ludic-numbers
new file mode 120000
index 0000000000..97ad63237f
--- /dev/null
+++ b/Lang/Icon/Ludic-numbers
@@ -0,0 +1 @@
+../../Task/Ludic-numbers/Icon
\ No newline at end of file
diff --git a/Lang/Icon/Move-to-front-algorithm b/Lang/Icon/Move-to-front-algorithm
new file mode 120000
index 0000000000..ae075ba53c
--- /dev/null
+++ b/Lang/Icon/Move-to-front-algorithm
@@ -0,0 +1 @@
+../../Task/Move-to-front-algorithm/Icon
\ No newline at end of file
diff --git a/Lang/Icon/Munching-squares b/Lang/Icon/Munching-squares
new file mode 120000
index 0000000000..9b514ef441
--- /dev/null
+++ b/Lang/Icon/Munching-squares
@@ -0,0 +1 @@
+../../Task/Munching-squares/Icon
\ No newline at end of file
diff --git a/Lang/Icon/Narcissistic-decimal-number b/Lang/Icon/Narcissistic-decimal-number
new file mode 120000
index 0000000000..0559306c42
--- /dev/null
+++ b/Lang/Icon/Narcissistic-decimal-number
@@ -0,0 +1 @@
+../../Task/Narcissistic-decimal-number/Icon
\ No newline at end of file
diff --git a/Lang/Icon/Nth b/Lang/Icon/Nth
new file mode 120000
index 0000000000..8f6f46ca3e
--- /dev/null
+++ b/Lang/Icon/Nth
@@ -0,0 +1 @@
+../../Task/Nth/Icon
\ No newline at end of file
diff --git a/Lang/Icon/Odd-word-problem b/Lang/Icon/Odd-word-problem
new file mode 120000
index 0000000000..a2a8f3b3bf
--- /dev/null
+++ b/Lang/Icon/Odd-word-problem
@@ -0,0 +1 @@
+../../Task/Odd-word-problem/Icon
\ No newline at end of file
diff --git a/Lang/Icon/Old-lady-swallowed-a-fly b/Lang/Icon/Old-lady-swallowed-a-fly
new file mode 120000
index 0000000000..222a310275
--- /dev/null
+++ b/Lang/Icon/Old-lady-swallowed-a-fly
@@ -0,0 +1 @@
+../../Task/Old-lady-swallowed-a-fly/Icon
\ No newline at end of file
diff --git a/Lang/Icon/Order-disjoint-list-items b/Lang/Icon/Order-disjoint-list-items
new file mode 120000
index 0000000000..a5fcfe3807
--- /dev/null
+++ b/Lang/Icon/Order-disjoint-list-items
@@ -0,0 +1 @@
+../../Task/Order-disjoint-list-items/Icon
\ No newline at end of file
diff --git a/Lang/Icon/Parse-an-IP-Address b/Lang/Icon/Parse-an-IP-Address
new file mode 120000
index 0000000000..13465acbf9
--- /dev/null
+++ b/Lang/Icon/Parse-an-IP-Address
@@ -0,0 +1 @@
+../../Task/Parse-an-IP-Address/Icon
\ No newline at end of file
diff --git a/Lang/Icon/Percolation-Mean-run-density b/Lang/Icon/Percolation-Mean-run-density
new file mode 120000
index 0000000000..75f0a34fc2
--- /dev/null
+++ b/Lang/Icon/Percolation-Mean-run-density
@@ -0,0 +1 @@
+../../Task/Percolation-Mean-run-density/Icon
\ No newline at end of file
diff --git a/Lang/Icon/Pernicious-numbers b/Lang/Icon/Pernicious-numbers
new file mode 120000
index 0000000000..47f0baa3d2
--- /dev/null
+++ b/Lang/Icon/Pernicious-numbers
@@ -0,0 +1 @@
+../../Task/Pernicious-numbers/Icon
\ No newline at end of file
diff --git a/Lang/Icon/Quickselect-algorithm b/Lang/Icon/Quickselect-algorithm
new file mode 120000
index 0000000000..0616d9b90a
--- /dev/null
+++ b/Lang/Icon/Quickselect-algorithm
@@ -0,0 +1 @@
+../../Task/Quickselect-algorithm/Icon
\ No newline at end of file
diff --git a/Lang/Icon/RSA-code b/Lang/Icon/RSA-code
new file mode 120000
index 0000000000..46477e19ee
--- /dev/null
+++ b/Lang/Icon/RSA-code
@@ -0,0 +1 @@
+../../Task/RSA-code/Icon
\ No newline at end of file
diff --git a/Lang/Icon/Rep-string b/Lang/Icon/Rep-string
new file mode 120000
index 0000000000..9440acf6d3
--- /dev/null
+++ b/Lang/Icon/Rep-string
@@ -0,0 +1 @@
+../../Task/Rep-string/Icon
\ No newline at end of file
diff --git a/Lang/Icon/Reverse-words-in-a-string b/Lang/Icon/Reverse-words-in-a-string
new file mode 120000
index 0000000000..f29ccf75d7
--- /dev/null
+++ b/Lang/Icon/Reverse-words-in-a-string
@@ -0,0 +1 @@
+../../Task/Reverse-words-in-a-string/Icon
\ No newline at end of file
diff --git a/Lang/Icon/Semiprime b/Lang/Icon/Semiprime
new file mode 120000
index 0000000000..52b4c00a0c
--- /dev/null
+++ b/Lang/Icon/Semiprime
@@ -0,0 +1 @@
+../../Task/Semiprime/Icon
\ No newline at end of file
diff --git a/Lang/Icon/State-name-puzzle b/Lang/Icon/State-name-puzzle
new file mode 120000
index 0000000000..5b8f5905de
--- /dev/null
+++ b/Lang/Icon/State-name-puzzle
@@ -0,0 +1 @@
+../../Task/State-name-puzzle/Icon
\ No newline at end of file
diff --git a/Lang/Icon/Statistics-Basic b/Lang/Icon/Statistics-Basic
new file mode 120000
index 0000000000..7719a870ac
--- /dev/null
+++ b/Lang/Icon/Statistics-Basic
@@ -0,0 +1 @@
+../../Task/Statistics-Basic/Icon
\ No newline at end of file
diff --git a/Lang/Icon/String-append b/Lang/Icon/String-append
new file mode 120000
index 0000000000..b523b2c310
--- /dev/null
+++ b/Lang/Icon/String-append
@@ -0,0 +1 @@
+../../Task/String-append/Icon
\ No newline at end of file
diff --git a/Lang/Icon/String-prepend b/Lang/Icon/String-prepend
new file mode 120000
index 0000000000..f383ce6096
--- /dev/null
+++ b/Lang/Icon/String-prepend
@@ -0,0 +1 @@
+../../Task/String-prepend/Icon
\ No newline at end of file
diff --git a/Lang/Icon/Sum-multiples-of-3-and-5 b/Lang/Icon/Sum-multiples-of-3-and-5
new file mode 120000
index 0000000000..371dad824c
--- /dev/null
+++ b/Lang/Icon/Sum-multiples-of-3-and-5
@@ -0,0 +1 @@
+../../Task/Sum-multiples-of-3-and-5/Icon
\ No newline at end of file
diff --git a/Lang/Icon/The-Twelve-Days-of-Christmas b/Lang/Icon/The-Twelve-Days-of-Christmas
new file mode 120000
index 0000000000..8bbc2576ef
--- /dev/null
+++ b/Lang/Icon/The-Twelve-Days-of-Christmas
@@ -0,0 +1 @@
+../../Task/The-Twelve-Days-of-Christmas/Icon
\ No newline at end of file
diff --git a/Lang/Icon/Zero-to-the-zero-power b/Lang/Icon/Zero-to-the-zero-power
new file mode 120000
index 0000000000..a789d93a0f
--- /dev/null
+++ b/Lang/Icon/Zero-to-the-zero-power
@@ -0,0 +1 @@
+../../Task/Zero-to-the-zero-power/Icon
\ No newline at end of file
diff --git a/Lang/Io/Currying b/Lang/Io/Currying
new file mode 120000
index 0000000000..4505f834e3
--- /dev/null
+++ b/Lang/Io/Currying
@@ -0,0 +1 @@
+../../Task/Currying/Io
\ No newline at end of file
diff --git a/Lang/Io/File-input-output b/Lang/Io/File-input-output
new file mode 120000
index 0000000000..b64e5cfb83
--- /dev/null
+++ b/Lang/Io/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/Io
\ No newline at end of file
diff --git a/Lang/J/9-billion-names-of-God-the-integer b/Lang/J/9-billion-names-of-God-the-integer
new file mode 120000
index 0000000000..3bd5697ff7
--- /dev/null
+++ b/Lang/J/9-billion-names-of-God-the-integer
@@ -0,0 +1 @@
+../../Task/9-billion-names-of-God-the-integer/J
\ No newline at end of file
diff --git a/Lang/J/ABC-Problem b/Lang/J/ABC-Problem
new file mode 120000
index 0000000000..066df3fb21
--- /dev/null
+++ b/Lang/J/ABC-Problem
@@ -0,0 +1 @@
+../../Task/ABC-Problem/J
\ No newline at end of file
diff --git a/Lang/J/AKS-test-for-primes b/Lang/J/AKS-test-for-primes
new file mode 120000
index 0000000000..31072f4fed
--- /dev/null
+++ b/Lang/J/AKS-test-for-primes
@@ -0,0 +1 @@
+../../Task/AKS-test-for-primes/J
\ No newline at end of file
diff --git a/Lang/J/Abundant,-deficient-and-perfect-number-classifications b/Lang/J/Abundant,-deficient-and-perfect-number-classifications
new file mode 120000
index 0000000000..624c7d4aa0
--- /dev/null
+++ b/Lang/J/Abundant,-deficient-and-perfect-number-classifications
@@ -0,0 +1 @@
+../../Task/Abundant,-deficient-and-perfect-number-classifications/J
\ No newline at end of file
diff --git a/Lang/J/Aliquot-sequence-classifications b/Lang/J/Aliquot-sequence-classifications
new file mode 120000
index 0000000000..7b4da0ecbe
--- /dev/null
+++ b/Lang/J/Aliquot-sequence-classifications
@@ -0,0 +1 @@
+../../Task/Aliquot-sequence-classifications/J
\ No newline at end of file
diff --git a/Lang/J/Almost-prime b/Lang/J/Almost-prime
new file mode 120000
index 0000000000..569d4fb7aa
--- /dev/null
+++ b/Lang/J/Almost-prime
@@ -0,0 +1 @@
+../../Task/Almost-prime/J
\ No newline at end of file
diff --git a/Lang/J/Amb b/Lang/J/Amb
new file mode 120000
index 0000000000..694fb9ed30
--- /dev/null
+++ b/Lang/J/Amb
@@ -0,0 +1 @@
+../../Task/Amb/J
\ No newline at end of file
diff --git a/Lang/J/Amicable-pairs b/Lang/J/Amicable-pairs
new file mode 120000
index 0000000000..d515672834
--- /dev/null
+++ b/Lang/J/Amicable-pairs
@@ -0,0 +1 @@
+../../Task/Amicable-pairs/J
\ No newline at end of file
diff --git a/Lang/J/Append-a-record-to-the-end-of-a-text-file b/Lang/J/Append-a-record-to-the-end-of-a-text-file
new file mode 120000
index 0000000000..7e42242961
--- /dev/null
+++ b/Lang/J/Append-a-record-to-the-end-of-a-text-file
@@ -0,0 +1 @@
+../../Task/Append-a-record-to-the-end-of-a-text-file/J
\ No newline at end of file
diff --git a/Lang/J/Arithmetic-geometric-mean-Calculate-Pi b/Lang/J/Arithmetic-geometric-mean-Calculate-Pi
new file mode 120000
index 0000000000..7ea33655a4
--- /dev/null
+++ b/Lang/J/Arithmetic-geometric-mean-Calculate-Pi
@@ -0,0 +1 @@
+../../Task/Arithmetic-geometric-mean-Calculate-Pi/J
\ No newline at end of file
diff --git a/Lang/J/Benfords-law b/Lang/J/Benfords-law
new file mode 120000
index 0000000000..b54b85f22e
--- /dev/null
+++ b/Lang/J/Benfords-law
@@ -0,0 +1 @@
+../../Task/Benfords-law/J
\ No newline at end of file
diff --git a/Lang/J/Bernoulli-numbers b/Lang/J/Bernoulli-numbers
new file mode 120000
index 0000000000..4c43470691
--- /dev/null
+++ b/Lang/J/Bernoulli-numbers
@@ -0,0 +1 @@
+../../Task/Bernoulli-numbers/J
\ No newline at end of file
diff --git a/Lang/J/CSV-data-manipulation b/Lang/J/CSV-data-manipulation
new file mode 120000
index 0000000000..b2f893a1da
--- /dev/null
+++ b/Lang/J/CSV-data-manipulation
@@ -0,0 +1 @@
+../../Task/CSV-data-manipulation/J
\ No newline at end of file
diff --git a/Lang/J/Calendar---for-REAL-programmers b/Lang/J/Calendar---for-REAL-programmers
new file mode 120000
index 0000000000..08ddbac2a2
--- /dev/null
+++ b/Lang/J/Calendar---for-REAL-programmers
@@ -0,0 +1 @@
+../../Task/Calendar---for-REAL-programmers/J
\ No newline at end of file
diff --git a/Lang/J/Casting-out-nines b/Lang/J/Casting-out-nines
new file mode 120000
index 0000000000..2ef590267b
--- /dev/null
+++ b/Lang/J/Casting-out-nines
@@ -0,0 +1 @@
+../../Task/Casting-out-nines/J
\ No newline at end of file
diff --git a/Lang/J/Catalan-numbers-Pascals-triangle b/Lang/J/Catalan-numbers-Pascals-triangle
new file mode 120000
index 0000000000..67904f885d
--- /dev/null
+++ b/Lang/J/Catalan-numbers-Pascals-triangle
@@ -0,0 +1 @@
+../../Task/Catalan-numbers-Pascals-triangle/J
\ No newline at end of file
diff --git a/Lang/J/Catamorphism b/Lang/J/Catamorphism
new file mode 120000
index 0000000000..2eba577c91
--- /dev/null
+++ b/Lang/J/Catamorphism
@@ -0,0 +1 @@
+../../Task/Catamorphism/J
\ No newline at end of file
diff --git a/Lang/J/Chinese-remainder-theorem b/Lang/J/Chinese-remainder-theorem
new file mode 120000
index 0000000000..bd51b076b1
--- /dev/null
+++ b/Lang/J/Chinese-remainder-theorem
@@ -0,0 +1 @@
+../../Task/Chinese-remainder-theorem/J
\ No newline at end of file
diff --git a/Lang/J/Circles-of-given-radius-through-two-points b/Lang/J/Circles-of-given-radius-through-two-points
new file mode 120000
index 0000000000..05e01e3abd
--- /dev/null
+++ b/Lang/J/Circles-of-given-radius-through-two-points
@@ -0,0 +1 @@
+../../Task/Circles-of-given-radius-through-two-points/J
\ No newline at end of file
diff --git a/Lang/J/Closures-Value-capture b/Lang/J/Closures-Value-capture
new file mode 120000
index 0000000000..ccc37d9d7f
--- /dev/null
+++ b/Lang/J/Closures-Value-capture
@@ -0,0 +1 @@
+../../Task/Closures-Value-capture/J
\ No newline at end of file
diff --git a/Lang/J/Combinations-and-permutations b/Lang/J/Combinations-and-permutations
new file mode 120000
index 0000000000..d1f02c5c30
--- /dev/null
+++ b/Lang/J/Combinations-and-permutations
@@ -0,0 +1 @@
+../../Task/Combinations-and-permutations/J
\ No newline at end of file
diff --git a/Lang/J/Comma-quibbling b/Lang/J/Comma-quibbling
new file mode 120000
index 0000000000..e1b258516d
--- /dev/null
+++ b/Lang/J/Comma-quibbling
@@ -0,0 +1 @@
+../../Task/Comma-quibbling/J
\ No newline at end of file
diff --git a/Lang/J/Conjugate-transpose b/Lang/J/Conjugate-transpose
new file mode 120000
index 0000000000..5683e6c89a
--- /dev/null
+++ b/Lang/J/Conjugate-transpose
@@ -0,0 +1 @@
+../../Task/Conjugate-transpose/J
\ No newline at end of file
diff --git a/Lang/J/Convert-decimal-number-to-rational b/Lang/J/Convert-decimal-number-to-rational
new file mode 120000
index 0000000000..ae6e7b55df
--- /dev/null
+++ b/Lang/J/Convert-decimal-number-to-rational
@@ -0,0 +1 @@
+../../Task/Convert-decimal-number-to-rational/J
\ No newline at end of file
diff --git a/Lang/J/Currying b/Lang/J/Currying
new file mode 120000
index 0000000000..d2ae47cd2b
--- /dev/null
+++ b/Lang/J/Currying
@@ -0,0 +1 @@
+../../Task/Currying/J
\ No newline at end of file
diff --git a/Lang/J/Digital-root-Multiplicative-digital-root b/Lang/J/Digital-root-Multiplicative-digital-root
new file mode 120000
index 0000000000..3e2057a0b5
--- /dev/null
+++ b/Lang/J/Digital-root-Multiplicative-digital-root
@@ -0,0 +1 @@
+../../Task/Digital-root-Multiplicative-digital-root/J
\ No newline at end of file
diff --git a/Lang/J/Draw-a-clock b/Lang/J/Draw-a-clock
new file mode 120000
index 0000000000..4d9652b237
--- /dev/null
+++ b/Lang/J/Draw-a-clock
@@ -0,0 +1 @@
+../../Task/Draw-a-clock/J
\ No newline at end of file
diff --git a/Lang/J/Extensible-prime-generator b/Lang/J/Extensible-prime-generator
new file mode 120000
index 0000000000..ceb47f3f3d
--- /dev/null
+++ b/Lang/J/Extensible-prime-generator
@@ -0,0 +1 @@
+../../Task/Extensible-prime-generator/J
\ No newline at end of file
diff --git a/Lang/J/Fibonacci-word b/Lang/J/Fibonacci-word
new file mode 120000
index 0000000000..b8d0a923cd
--- /dev/null
+++ b/Lang/J/Fibonacci-word
@@ -0,0 +1 @@
+../../Task/Fibonacci-word/J
\ No newline at end of file
diff --git a/Lang/J/Fibonacci-word-fractal b/Lang/J/Fibonacci-word-fractal
new file mode 120000
index 0000000000..32bca68082
--- /dev/null
+++ b/Lang/J/Fibonacci-word-fractal
@@ -0,0 +1 @@
+../../Task/Fibonacci-word-fractal/J
\ No newline at end of file
diff --git a/Lang/J/File-input-output b/Lang/J/File-input-output
new file mode 120000
index 0000000000..c74bf9e3f7
--- /dev/null
+++ b/Lang/J/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/J
\ No newline at end of file
diff --git a/Lang/J/Find-the-last-Sunday-of-each-month b/Lang/J/Find-the-last-Sunday-of-each-month
new file mode 120000
index 0000000000..32c8218b24
--- /dev/null
+++ b/Lang/J/Find-the-last-Sunday-of-each-month
@@ -0,0 +1 @@
+../../Task/Find-the-last-Sunday-of-each-month/J
\ No newline at end of file
diff --git a/Lang/J/Flipping-bits-game b/Lang/J/Flipping-bits-game
new file mode 120000
index 0000000000..833c0f2785
--- /dev/null
+++ b/Lang/J/Flipping-bits-game
@@ -0,0 +1 @@
+../../Task/Flipping-bits-game/J
\ No newline at end of file
diff --git a/Lang/J/Fractran b/Lang/J/Fractran
new file mode 120000
index 0000000000..ebf667bb5d
--- /dev/null
+++ b/Lang/J/Fractran
@@ -0,0 +1 @@
+../../Task/Fractran/J
\ No newline at end of file
diff --git a/Lang/J/Gaussian-elimination b/Lang/J/Gaussian-elimination
new file mode 120000
index 0000000000..f18cf1a77c
--- /dev/null
+++ b/Lang/J/Gaussian-elimination
@@ -0,0 +1 @@
+../../Task/Gaussian-elimination/J
\ No newline at end of file
diff --git a/Lang/J/Generate-Chess960-starting-position b/Lang/J/Generate-Chess960-starting-position
new file mode 120000
index 0000000000..59d1691ca7
--- /dev/null
+++ b/Lang/J/Generate-Chess960-starting-position
@@ -0,0 +1 @@
+../../Task/Generate-Chess960-starting-position/J
\ No newline at end of file
diff --git a/Lang/J/Generate-lower-case-ASCII-alphabet b/Lang/J/Generate-lower-case-ASCII-alphabet
new file mode 120000
index 0000000000..b2644532ec
--- /dev/null
+++ b/Lang/J/Generate-lower-case-ASCII-alphabet
@@ -0,0 +1 @@
+../../Task/Generate-lower-case-ASCII-alphabet/J
\ No newline at end of file
diff --git a/Lang/J/Hash-join b/Lang/J/Hash-join
new file mode 120000
index 0000000000..8335657638
--- /dev/null
+++ b/Lang/J/Hash-join
@@ -0,0 +1 @@
+../../Task/Hash-join/J
\ No newline at end of file
diff --git a/Lang/J/Hello-world-Newbie b/Lang/J/Hello-world-Newbie
new file mode 120000
index 0000000000..7c9bbb755e
--- /dev/null
+++ b/Lang/J/Hello-world-Newbie
@@ -0,0 +1 @@
+../../Task/Hello-world-Newbie/J
\ No newline at end of file
diff --git a/Lang/J/Heronian-triangles b/Lang/J/Heronian-triangles
new file mode 120000
index 0000000000..27ba92c448
--- /dev/null
+++ b/Lang/J/Heronian-triangles
@@ -0,0 +1 @@
+../../Task/Heronian-triangles/J
\ No newline at end of file
diff --git a/Lang/J/Hickerson-series-of-almost-integers b/Lang/J/Hickerson-series-of-almost-integers
new file mode 120000
index 0000000000..e2431ed8c3
--- /dev/null
+++ b/Lang/J/Hickerson-series-of-almost-integers
@@ -0,0 +1 @@
+../../Task/Hickerson-series-of-almost-integers/J
\ No newline at end of file
diff --git a/Lang/J/IBAN b/Lang/J/IBAN
new file mode 120000
index 0000000000..df3ddf81d2
--- /dev/null
+++ b/Lang/J/IBAN
@@ -0,0 +1 @@
+../../Task/IBAN/J
\ No newline at end of file
diff --git a/Lang/J/Integer-overflow b/Lang/J/Integer-overflow
new file mode 120000
index 0000000000..1d760c2eaa
--- /dev/null
+++ b/Lang/J/Integer-overflow
@@ -0,0 +1 @@
+../../Task/Integer-overflow/J
\ No newline at end of file
diff --git a/Lang/J/Iterated-digits-squaring b/Lang/J/Iterated-digits-squaring
new file mode 120000
index 0000000000..7123a654e3
--- /dev/null
+++ b/Lang/J/Iterated-digits-squaring
@@ -0,0 +1 @@
+../../Task/Iterated-digits-squaring/J
\ No newline at end of file
diff --git a/Lang/J/K-d-tree b/Lang/J/K-d-tree
new file mode 120000
index 0000000000..9311ea887f
--- /dev/null
+++ b/Lang/J/K-d-tree
@@ -0,0 +1 @@
+../../Task/K-d-tree/J
\ No newline at end of file
diff --git a/Lang/J/Left-factorials b/Lang/J/Left-factorials
new file mode 120000
index 0000000000..d010643697
--- /dev/null
+++ b/Lang/J/Left-factorials
@@ -0,0 +1 @@
+../../Task/Left-factorials/J
\ No newline at end of file
diff --git a/Lang/J/Longest-increasing-subsequence b/Lang/J/Longest-increasing-subsequence
new file mode 120000
index 0000000000..1fc0402b03
--- /dev/null
+++ b/Lang/J/Longest-increasing-subsequence
@@ -0,0 +1 @@
+../../Task/Longest-increasing-subsequence/J
\ No newline at end of file
diff --git a/Lang/J/Ludic-numbers b/Lang/J/Ludic-numbers
new file mode 120000
index 0000000000..ffc3f065fc
--- /dev/null
+++ b/Lang/J/Ludic-numbers
@@ -0,0 +1 @@
+../../Task/Ludic-numbers/J
\ No newline at end of file
diff --git a/Lang/J/Magic-squares-of-odd-order b/Lang/J/Magic-squares-of-odd-order
new file mode 120000
index 0000000000..995c444cfb
--- /dev/null
+++ b/Lang/J/Magic-squares-of-odd-order
@@ -0,0 +1 @@
+../../Task/Magic-squares-of-odd-order/J
\ No newline at end of file
diff --git a/Lang/J/Maximum-triangle-path-sum b/Lang/J/Maximum-triangle-path-sum
new file mode 120000
index 0000000000..e1b03efff0
--- /dev/null
+++ b/Lang/J/Maximum-triangle-path-sum
@@ -0,0 +1 @@
+../../Task/Maximum-triangle-path-sum/J
\ No newline at end of file
diff --git a/Lang/J/Move-to-front-algorithm b/Lang/J/Move-to-front-algorithm
new file mode 120000
index 0000000000..284d508264
--- /dev/null
+++ b/Lang/J/Move-to-front-algorithm
@@ -0,0 +1 @@
+../../Task/Move-to-front-algorithm/J
\ No newline at end of file
diff --git a/Lang/J/Munching-squares b/Lang/J/Munching-squares
new file mode 120000
index 0000000000..b7437b28e1
--- /dev/null
+++ b/Lang/J/Munching-squares
@@ -0,0 +1 @@
+../../Task/Munching-squares/J
\ No newline at end of file
diff --git a/Lang/J/Narcissistic-decimal-number b/Lang/J/Narcissistic-decimal-number
new file mode 120000
index 0000000000..c5686b5c30
--- /dev/null
+++ b/Lang/J/Narcissistic-decimal-number
@@ -0,0 +1 @@
+../../Task/Narcissistic-decimal-number/J
\ No newline at end of file
diff --git a/Lang/J/Natural-sorting b/Lang/J/Natural-sorting
new file mode 120000
index 0000000000..4f1f68573c
--- /dev/null
+++ b/Lang/J/Natural-sorting
@@ -0,0 +1 @@
+../../Task/Natural-sorting/J
\ No newline at end of file
diff --git a/Lang/J/Nth b/Lang/J/Nth
new file mode 120000
index 0000000000..c77a90cbbe
--- /dev/null
+++ b/Lang/J/Nth
@@ -0,0 +1 @@
+../../Task/Nth/J
\ No newline at end of file
diff --git a/Lang/J/Odd-word-problem b/Lang/J/Odd-word-problem
new file mode 120000
index 0000000000..b818f10aa4
--- /dev/null
+++ b/Lang/J/Odd-word-problem
@@ -0,0 +1 @@
+../../Task/Odd-word-problem/J
\ No newline at end of file
diff --git a/Lang/J/Old-lady-swallowed-a-fly b/Lang/J/Old-lady-swallowed-a-fly
new file mode 120000
index 0000000000..2dc6c8ddfd
--- /dev/null
+++ b/Lang/J/Old-lady-swallowed-a-fly
@@ -0,0 +1 @@
+../../Task/Old-lady-swallowed-a-fly/J
\ No newline at end of file
diff --git a/Lang/J/Order-disjoint-list-items b/Lang/J/Order-disjoint-list-items
new file mode 120000
index 0000000000..87378833d0
--- /dev/null
+++ b/Lang/J/Order-disjoint-list-items
@@ -0,0 +1 @@
+../../Task/Order-disjoint-list-items/J
\ No newline at end of file
diff --git a/Lang/J/Paraffins b/Lang/J/Paraffins
new file mode 120000
index 0000000000..56287a8421
--- /dev/null
+++ b/Lang/J/Paraffins
@@ -0,0 +1 @@
+../../Task/Paraffins/J
\ No newline at end of file
diff --git a/Lang/J/Parse-an-IP-Address b/Lang/J/Parse-an-IP-Address
new file mode 120000
index 0000000000..40220362f7
--- /dev/null
+++ b/Lang/J/Parse-an-IP-Address
@@ -0,0 +1 @@
+../../Task/Parse-an-IP-Address/J
\ No newline at end of file
diff --git a/Lang/J/Penneys-game b/Lang/J/Penneys-game
new file mode 120000
index 0000000000..3055f7ef44
--- /dev/null
+++ b/Lang/J/Penneys-game
@@ -0,0 +1 @@
+../../Task/Penneys-game/J
\ No newline at end of file
diff --git a/Lang/J/Percolation-Mean-cluster-density b/Lang/J/Percolation-Mean-cluster-density
new file mode 120000
index 0000000000..0b1d8015a0
--- /dev/null
+++ b/Lang/J/Percolation-Mean-cluster-density
@@ -0,0 +1 @@
+../../Task/Percolation-Mean-cluster-density/J
\ No newline at end of file
diff --git a/Lang/J/Percolation-Mean-run-density b/Lang/J/Percolation-Mean-run-density
new file mode 120000
index 0000000000..f38669ad9d
--- /dev/null
+++ b/Lang/J/Percolation-Mean-run-density
@@ -0,0 +1 @@
+../../Task/Percolation-Mean-run-density/J
\ No newline at end of file
diff --git a/Lang/J/Percolation-Site-percolation b/Lang/J/Percolation-Site-percolation
new file mode 120000
index 0000000000..e62e3873b6
--- /dev/null
+++ b/Lang/J/Percolation-Site-percolation
@@ -0,0 +1 @@
+../../Task/Percolation-Site-percolation/J
\ No newline at end of file
diff --git a/Lang/J/Permutations-Rank-of-a-permutation b/Lang/J/Permutations-Rank-of-a-permutation
new file mode 120000
index 0000000000..ba6e54490d
--- /dev/null
+++ b/Lang/J/Permutations-Rank-of-a-permutation
@@ -0,0 +1 @@
+../../Task/Permutations-Rank-of-a-permutation/J
\ No newline at end of file
diff --git a/Lang/J/Pernicious-numbers b/Lang/J/Pernicious-numbers
new file mode 120000
index 0000000000..647565af2e
--- /dev/null
+++ b/Lang/J/Pernicious-numbers
@@ -0,0 +1 @@
+../../Task/Pernicious-numbers/J
\ No newline at end of file
diff --git a/Lang/J/Phrase-reversals b/Lang/J/Phrase-reversals
new file mode 120000
index 0000000000..2d964d1f6c
--- /dev/null
+++ b/Lang/J/Phrase-reversals
@@ -0,0 +1 @@
+../../Task/Phrase-reversals/J
\ No newline at end of file
diff --git a/Lang/J/Quickselect-algorithm b/Lang/J/Quickselect-algorithm
new file mode 120000
index 0000000000..63233fe362
--- /dev/null
+++ b/Lang/J/Quickselect-algorithm
@@ -0,0 +1 @@
+../../Task/Quickselect-algorithm/J
\ No newline at end of file
diff --git a/Lang/J/RSA-code b/Lang/J/RSA-code
new file mode 120000
index 0000000000..984ea5270d
--- /dev/null
+++ b/Lang/J/RSA-code
@@ -0,0 +1 @@
+../../Task/RSA-code/J
\ No newline at end of file
diff --git a/Lang/J/Ranking-methods b/Lang/J/Ranking-methods
new file mode 120000
index 0000000000..831a516905
--- /dev/null
+++ b/Lang/J/Ranking-methods
@@ -0,0 +1 @@
+../../Task/Ranking-methods/J
\ No newline at end of file
diff --git a/Lang/J/Rep-string b/Lang/J/Rep-string
new file mode 120000
index 0000000000..588f9e4378
--- /dev/null
+++ b/Lang/J/Rep-string
@@ -0,0 +1 @@
+../../Task/Rep-string/J
\ No newline at end of file
diff --git a/Lang/J/Reverse-words-in-a-string b/Lang/J/Reverse-words-in-a-string
new file mode 120000
index 0000000000..0dd30d1204
--- /dev/null
+++ b/Lang/J/Reverse-words-in-a-string
@@ -0,0 +1 @@
+../../Task/Reverse-words-in-a-string/J
\ No newline at end of file
diff --git a/Lang/J/Runge-Kutta-method b/Lang/J/Runge-Kutta-method
new file mode 120000
index 0000000000..cdb0e6a889
--- /dev/null
+++ b/Lang/J/Runge-Kutta-method
@@ -0,0 +1 @@
+../../Task/Runge-Kutta-method/J
\ No newline at end of file
diff --git a/Lang/J/Semiprime b/Lang/J/Semiprime
new file mode 120000
index 0000000000..478fb1046b
--- /dev/null
+++ b/Lang/J/Semiprime
@@ -0,0 +1 @@
+../../Task/Semiprime/J
\ No newline at end of file
diff --git a/Lang/J/Sequence-of-primes-by-Trial-Division b/Lang/J/Sequence-of-primes-by-Trial-Division
new file mode 120000
index 0000000000..dcdb21460a
--- /dev/null
+++ b/Lang/J/Sequence-of-primes-by-Trial-Division
@@ -0,0 +1 @@
+../../Task/Sequence-of-primes-by-Trial-Division/J
\ No newline at end of file
diff --git a/Lang/J/Solve-a-Holy-Knights-tour b/Lang/J/Solve-a-Holy-Knights-tour
new file mode 120000
index 0000000000..af555a4d23
--- /dev/null
+++ b/Lang/J/Solve-a-Holy-Knights-tour
@@ -0,0 +1 @@
+../../Task/Solve-a-Holy-Knights-tour/J
\ No newline at end of file
diff --git a/Lang/J/Solve-the-no-connection-puzzle b/Lang/J/Solve-the-no-connection-puzzle
new file mode 120000
index 0000000000..d6eb73ece2
--- /dev/null
+++ b/Lang/J/Solve-the-no-connection-puzzle
@@ -0,0 +1 @@
+../../Task/Solve-the-no-connection-puzzle/J
\ No newline at end of file
diff --git a/Lang/J/Sparkline-in-unicode b/Lang/J/Sparkline-in-unicode
new file mode 120000
index 0000000000..c8f060efb1
--- /dev/null
+++ b/Lang/J/Sparkline-in-unicode
@@ -0,0 +1 @@
+../../Task/Sparkline-in-unicode/J
\ No newline at end of file
diff --git a/Lang/J/State-name-puzzle b/Lang/J/State-name-puzzle
new file mode 120000
index 0000000000..69e97c1b69
--- /dev/null
+++ b/Lang/J/State-name-puzzle
@@ -0,0 +1 @@
+../../Task/State-name-puzzle/J
\ No newline at end of file
diff --git a/Lang/J/Statistics-Basic b/Lang/J/Statistics-Basic
new file mode 120000
index 0000000000..56eeaa6068
--- /dev/null
+++ b/Lang/J/Statistics-Basic
@@ -0,0 +1 @@
+../../Task/Statistics-Basic/J
\ No newline at end of file
diff --git a/Lang/J/Stern-Brocot-sequence b/Lang/J/Stern-Brocot-sequence
new file mode 120000
index 0000000000..e609bc388a
--- /dev/null
+++ b/Lang/J/Stern-Brocot-sequence
@@ -0,0 +1 @@
+../../Task/Stern-Brocot-sequence/J
\ No newline at end of file
diff --git a/Lang/J/String-append b/Lang/J/String-append
new file mode 120000
index 0000000000..049fcea2f0
--- /dev/null
+++ b/Lang/J/String-append
@@ -0,0 +1 @@
+../../Task/String-append/J
\ No newline at end of file
diff --git a/Lang/J/String-matching b/Lang/J/String-matching
new file mode 120000
index 0000000000..017c2ac0bd
--- /dev/null
+++ b/Lang/J/String-matching
@@ -0,0 +1 @@
+../../Task/String-matching/J
\ No newline at end of file
diff --git a/Lang/J/String-prepend b/Lang/J/String-prepend
new file mode 120000
index 0000000000..d70b0344de
--- /dev/null
+++ b/Lang/J/String-prepend
@@ -0,0 +1 @@
+../../Task/String-prepend/J
\ No newline at end of file
diff --git a/Lang/J/Sum-multiples-of-3-and-5 b/Lang/J/Sum-multiples-of-3-and-5
new file mode 120000
index 0000000000..4eb3738203
--- /dev/null
+++ b/Lang/J/Sum-multiples-of-3-and-5
@@ -0,0 +1 @@
+../../Task/Sum-multiples-of-3-and-5/J
\ No newline at end of file
diff --git a/Lang/J/Textonyms b/Lang/J/Textonyms
new file mode 120000
index 0000000000..5073340b4e
--- /dev/null
+++ b/Lang/J/Textonyms
@@ -0,0 +1 @@
+../../Task/Textonyms/J
\ No newline at end of file
diff --git a/Lang/J/The-Twelve-Days-of-Christmas b/Lang/J/The-Twelve-Days-of-Christmas
new file mode 120000
index 0000000000..7be5a30796
--- /dev/null
+++ b/Lang/J/The-Twelve-Days-of-Christmas
@@ -0,0 +1 @@
+../../Task/The-Twelve-Days-of-Christmas/J
\ No newline at end of file
diff --git a/Lang/J/Total-circles-area b/Lang/J/Total-circles-area
new file mode 120000
index 0000000000..39ece4b6a0
--- /dev/null
+++ b/Lang/J/Total-circles-area
@@ -0,0 +1 @@
+../../Task/Total-circles-area/J
\ No newline at end of file
diff --git a/Lang/J/Ulam-spiral--for-primes- b/Lang/J/Ulam-spiral--for-primes-
new file mode 120000
index 0000000000..37f383d2a8
--- /dev/null
+++ b/Lang/J/Ulam-spiral--for-primes-
@@ -0,0 +1 @@
+../../Task/Ulam-spiral--for-primes-/J
\ No newline at end of file
diff --git a/Lang/J/Unix-ls b/Lang/J/Unix-ls
new file mode 120000
index 0000000000..4734b7924b
--- /dev/null
+++ b/Lang/J/Unix-ls
@@ -0,0 +1 @@
+../../Task/Unix-ls/J
\ No newline at end of file
diff --git a/Lang/J/World-Cup-group-stage b/Lang/J/World-Cup-group-stage
new file mode 120000
index 0000000000..3a6eb21509
--- /dev/null
+++ b/Lang/J/World-Cup-group-stage
@@ -0,0 +1 @@
+../../Task/World-Cup-group-stage/J
\ No newline at end of file
diff --git a/Lang/J/Zero-to-the-zero-power b/Lang/J/Zero-to-the-zero-power
new file mode 120000
index 0000000000..e8cdbf5982
--- /dev/null
+++ b/Lang/J/Zero-to-the-zero-power
@@ -0,0 +1 @@
+../../Task/Zero-to-the-zero-power/J
\ No newline at end of file
diff --git a/Lang/J/Zhang-Suen-thinning-algorithm b/Lang/J/Zhang-Suen-thinning-algorithm
new file mode 120000
index 0000000000..2322f9fc25
--- /dev/null
+++ b/Lang/J/Zhang-Suen-thinning-algorithm
@@ -0,0 +1 @@
+../../Task/Zhang-Suen-thinning-algorithm/J
\ No newline at end of file
diff --git a/Lang/Java/ABC-Problem b/Lang/Java/ABC-Problem
new file mode 120000
index 0000000000..0f38f01e33
--- /dev/null
+++ b/Lang/Java/ABC-Problem
@@ -0,0 +1 @@
+../../Task/ABC-Problem/Java
\ No newline at end of file
diff --git a/Lang/Java/Append-a-record-to-the-end-of-a-text-file b/Lang/Java/Append-a-record-to-the-end-of-a-text-file
new file mode 120000
index 0000000000..6ef51378f2
--- /dev/null
+++ b/Lang/Java/Append-a-record-to-the-end-of-a-text-file
@@ -0,0 +1 @@
+../../Task/Append-a-record-to-the-end-of-a-text-file/Java
\ No newline at end of file
diff --git a/Lang/Java/Benfords-law b/Lang/Java/Benfords-law
new file mode 120000
index 0000000000..503c2e839a
--- /dev/null
+++ b/Lang/Java/Benfords-law
@@ -0,0 +1 @@
+../../Task/Benfords-law/Java
\ No newline at end of file
diff --git a/Lang/Java/CSV-data-manipulation b/Lang/Java/CSV-data-manipulation
new file mode 120000
index 0000000000..8cdc504be8
--- /dev/null
+++ b/Lang/Java/CSV-data-manipulation
@@ -0,0 +1 @@
+../../Task/CSV-data-manipulation/Java
\ No newline at end of file
diff --git a/Lang/Java/Catamorphism b/Lang/Java/Catamorphism
new file mode 120000
index 0000000000..869534ef88
--- /dev/null
+++ b/Lang/Java/Catamorphism
@@ -0,0 +1 @@
+../../Task/Catamorphism/Java
\ No newline at end of file
diff --git a/Lang/Java/Closures-Value-capture b/Lang/Java/Closures-Value-capture
new file mode 120000
index 0000000000..1c328799bb
--- /dev/null
+++ b/Lang/Java/Closures-Value-capture
@@ -0,0 +1 @@
+../../Task/Closures-Value-capture/Java
\ No newline at end of file
diff --git a/Lang/Java/Comma-quibbling b/Lang/Java/Comma-quibbling
new file mode 120000
index 0000000000..66becaf21e
--- /dev/null
+++ b/Lang/Java/Comma-quibbling
@@ -0,0 +1 @@
+../../Task/Comma-quibbling/Java
\ No newline at end of file
diff --git a/Lang/Java/Currying b/Lang/Java/Currying
new file mode 120000
index 0000000000..997de98810
--- /dev/null
+++ b/Lang/Java/Currying
@@ -0,0 +1 @@
+../../Task/Currying/Java
\ No newline at end of file
diff --git a/Lang/Java/Digital-root-Multiplicative-digital-root b/Lang/Java/Digital-root-Multiplicative-digital-root
new file mode 120000
index 0000000000..87f2d2011a
--- /dev/null
+++ b/Lang/Java/Digital-root-Multiplicative-digital-root
@@ -0,0 +1 @@
+../../Task/Digital-root-Multiplicative-digital-root/Java
\ No newline at end of file
diff --git a/Lang/Java/Draw-a-clock b/Lang/Java/Draw-a-clock
new file mode 120000
index 0000000000..8717fe405f
--- /dev/null
+++ b/Lang/Java/Draw-a-clock
@@ -0,0 +1 @@
+../../Task/Draw-a-clock/Java
\ No newline at end of file
diff --git a/Lang/Java/Fibonacci-word b/Lang/Java/Fibonacci-word
new file mode 120000
index 0000000000..a83d14eb26
--- /dev/null
+++ b/Lang/Java/Fibonacci-word
@@ -0,0 +1 @@
+../../Task/Fibonacci-word/Java
\ No newline at end of file
diff --git a/Lang/Java/File-input-output b/Lang/Java/File-input-output
new file mode 120000
index 0000000000..51242e9ec1
--- /dev/null
+++ b/Lang/Java/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/Java
\ No newline at end of file
diff --git a/Lang/Java/Find-the-last-Sunday-of-each-month b/Lang/Java/Find-the-last-Sunday-of-each-month
new file mode 120000
index 0000000000..00becc2969
--- /dev/null
+++ b/Lang/Java/Find-the-last-Sunday-of-each-month
@@ -0,0 +1 @@
+../../Task/Find-the-last-Sunday-of-each-month/Java
\ No newline at end of file
diff --git a/Lang/Java/Fractran b/Lang/Java/Fractran
new file mode 120000
index 0000000000..09b253c49f
--- /dev/null
+++ b/Lang/Java/Fractran
@@ -0,0 +1 @@
+../../Task/Fractran/Java
\ No newline at end of file
diff --git a/Lang/Java/Generate-Chess960-starting-position b/Lang/Java/Generate-Chess960-starting-position
new file mode 120000
index 0000000000..4c1b83bee7
--- /dev/null
+++ b/Lang/Java/Generate-Chess960-starting-position
@@ -0,0 +1 @@
+../../Task/Generate-Chess960-starting-position/Java
\ No newline at end of file
diff --git a/Lang/Java/Generate-lower-case-ASCII-alphabet b/Lang/Java/Generate-lower-case-ASCII-alphabet
new file mode 120000
index 0000000000..f710ed9bb0
--- /dev/null
+++ b/Lang/Java/Generate-lower-case-ASCII-alphabet
@@ -0,0 +1 @@
+../../Task/Generate-lower-case-ASCII-alphabet/Java
\ No newline at end of file
diff --git a/Lang/Java/Heronian-triangles b/Lang/Java/Heronian-triangles
new file mode 120000
index 0000000000..2bceb9ef0b
--- /dev/null
+++ b/Lang/Java/Heronian-triangles
@@ -0,0 +1 @@
+../../Task/Heronian-triangles/Java
\ No newline at end of file
diff --git a/Lang/Java/IBAN b/Lang/Java/IBAN
new file mode 120000
index 0000000000..092054cc1f
--- /dev/null
+++ b/Lang/Java/IBAN
@@ -0,0 +1 @@
+../../Task/IBAN/Java
\ No newline at end of file
diff --git a/Lang/Java/Integer-overflow b/Lang/Java/Integer-overflow
new file mode 120000
index 0000000000..6d6c2378bf
--- /dev/null
+++ b/Lang/Java/Integer-overflow
@@ -0,0 +1 @@
+../../Task/Integer-overflow/Java
\ No newline at end of file
diff --git a/Lang/Java/Iterated-digits-squaring b/Lang/Java/Iterated-digits-squaring
new file mode 120000
index 0000000000..cb9ace82a8
--- /dev/null
+++ b/Lang/Java/Iterated-digits-squaring
@@ -0,0 +1 @@
+../../Task/Iterated-digits-squaring/Java
\ No newline at end of file
diff --git a/Lang/Java/Left-factorials b/Lang/Java/Left-factorials
new file mode 120000
index 0000000000..a1f4daaafd
--- /dev/null
+++ b/Lang/Java/Left-factorials
@@ -0,0 +1 @@
+../../Task/Left-factorials/Java
\ No newline at end of file
diff --git a/Lang/Java/Longest-increasing-subsequence b/Lang/Java/Longest-increasing-subsequence
new file mode 120000
index 0000000000..f01d8b99be
--- /dev/null
+++ b/Lang/Java/Longest-increasing-subsequence
@@ -0,0 +1 @@
+../../Task/Longest-increasing-subsequence/Java
\ No newline at end of file
diff --git a/Lang/Java/Ludic-numbers b/Lang/Java/Ludic-numbers
new file mode 120000
index 0000000000..09890d09b3
--- /dev/null
+++ b/Lang/Java/Ludic-numbers
@@ -0,0 +1 @@
+../../Task/Ludic-numbers/Java
\ No newline at end of file
diff --git a/Lang/Java/Magic-squares-of-odd-order b/Lang/Java/Magic-squares-of-odd-order
new file mode 120000
index 0000000000..5ab81fc3c3
--- /dev/null
+++ b/Lang/Java/Magic-squares-of-odd-order
@@ -0,0 +1 @@
+../../Task/Magic-squares-of-odd-order/Java
\ No newline at end of file
diff --git a/Lang/Java/Make-directory-path b/Lang/Java/Make-directory-path
new file mode 120000
index 0000000000..c05086159c
--- /dev/null
+++ b/Lang/Java/Make-directory-path
@@ -0,0 +1 @@
+../../Task/Make-directory-path/Java
\ No newline at end of file
diff --git a/Lang/Java/Maximum-triangle-path-sum b/Lang/Java/Maximum-triangle-path-sum
new file mode 120000
index 0000000000..5b3dc25b72
--- /dev/null
+++ b/Lang/Java/Maximum-triangle-path-sum
@@ -0,0 +1 @@
+../../Task/Maximum-triangle-path-sum/Java
\ No newline at end of file
diff --git a/Lang/Java/Move-to-front-algorithm b/Lang/Java/Move-to-front-algorithm
new file mode 120000
index 0000000000..c8ff8bda77
--- /dev/null
+++ b/Lang/Java/Move-to-front-algorithm
@@ -0,0 +1 @@
+../../Task/Move-to-front-algorithm/Java
\ No newline at end of file
diff --git a/Lang/Java/Munching-squares b/Lang/Java/Munching-squares
new file mode 120000
index 0000000000..e88ff0bdc2
--- /dev/null
+++ b/Lang/Java/Munching-squares
@@ -0,0 +1 @@
+../../Task/Munching-squares/Java
\ No newline at end of file
diff --git a/Lang/Java/Narcissistic-decimal-number b/Lang/Java/Narcissistic-decimal-number
new file mode 120000
index 0000000000..99680f5838
--- /dev/null
+++ b/Lang/Java/Narcissistic-decimal-number
@@ -0,0 +1 @@
+../../Task/Narcissistic-decimal-number/Java
\ No newline at end of file
diff --git a/Lang/Java/Nth b/Lang/Java/Nth
new file mode 120000
index 0000000000..c5c563193d
--- /dev/null
+++ b/Lang/Java/Nth
@@ -0,0 +1 @@
+../../Task/Nth/Java
\ No newline at end of file
diff --git a/Lang/Java/Odd-word-problem b/Lang/Java/Odd-word-problem
new file mode 120000
index 0000000000..fadc5bcf1b
--- /dev/null
+++ b/Lang/Java/Odd-word-problem
@@ -0,0 +1 @@
+../../Task/Odd-word-problem/Java
\ No newline at end of file
diff --git a/Lang/Java/Old-lady-swallowed-a-fly b/Lang/Java/Old-lady-swallowed-a-fly
new file mode 120000
index 0000000000..93fdc4dbeb
--- /dev/null
+++ b/Lang/Java/Old-lady-swallowed-a-fly
@@ -0,0 +1 @@
+../../Task/Old-lady-swallowed-a-fly/Java
\ No newline at end of file
diff --git a/Lang/Java/Order-disjoint-list-items b/Lang/Java/Order-disjoint-list-items
new file mode 120000
index 0000000000..850b070381
--- /dev/null
+++ b/Lang/Java/Order-disjoint-list-items
@@ -0,0 +1 @@
+../../Task/Order-disjoint-list-items/Java
\ No newline at end of file
diff --git a/Lang/Java/Parse-an-IP-Address b/Lang/Java/Parse-an-IP-Address
new file mode 120000
index 0000000000..5534ddad96
--- /dev/null
+++ b/Lang/Java/Parse-an-IP-Address
@@ -0,0 +1 @@
+../../Task/Parse-an-IP-Address/Java
\ No newline at end of file
diff --git a/Lang/Java/Penneys-game b/Lang/Java/Penneys-game
new file mode 120000
index 0000000000..b88d31c705
--- /dev/null
+++ b/Lang/Java/Penneys-game
@@ -0,0 +1 @@
+../../Task/Penneys-game/Java
\ No newline at end of file
diff --git a/Lang/Java/Permutations-Rank-of-a-permutation b/Lang/Java/Permutations-Rank-of-a-permutation
new file mode 120000
index 0000000000..62ff10d0a3
--- /dev/null
+++ b/Lang/Java/Permutations-Rank-of-a-permutation
@@ -0,0 +1 @@
+../../Task/Permutations-Rank-of-a-permutation/Java
\ No newline at end of file
diff --git a/Lang/Java/Pernicious-numbers b/Lang/Java/Pernicious-numbers
new file mode 120000
index 0000000000..ddf5e13b4b
--- /dev/null
+++ b/Lang/Java/Pernicious-numbers
@@ -0,0 +1 @@
+../../Task/Pernicious-numbers/Java
\ No newline at end of file
diff --git a/Lang/Java/Phrase-reversals b/Lang/Java/Phrase-reversals
new file mode 120000
index 0000000000..6be6cc96e6
--- /dev/null
+++ b/Lang/Java/Phrase-reversals
@@ -0,0 +1 @@
+../../Task/Phrase-reversals/Java
\ No newline at end of file
diff --git a/Lang/Java/Quickselect-algorithm b/Lang/Java/Quickselect-algorithm
new file mode 120000
index 0000000000..d1651b89d2
--- /dev/null
+++ b/Lang/Java/Quickselect-algorithm
@@ -0,0 +1 @@
+../../Task/Quickselect-algorithm/Java
\ No newline at end of file
diff --git a/Lang/Java/Ranking-methods b/Lang/Java/Ranking-methods
new file mode 120000
index 0000000000..997cd57482
--- /dev/null
+++ b/Lang/Java/Ranking-methods
@@ -0,0 +1 @@
+../../Task/Ranking-methods/Java
\ No newline at end of file
diff --git a/Lang/Java/Rep-string b/Lang/Java/Rep-string
new file mode 120000
index 0000000000..4d0d14dd33
--- /dev/null
+++ b/Lang/Java/Rep-string
@@ -0,0 +1 @@
+../../Task/Rep-string/Java
\ No newline at end of file
diff --git a/Lang/Java/Reverse-words-in-a-string b/Lang/Java/Reverse-words-in-a-string
new file mode 120000
index 0000000000..85f3d0ddcd
--- /dev/null
+++ b/Lang/Java/Reverse-words-in-a-string
@@ -0,0 +1 @@
+../../Task/Reverse-words-in-a-string/Java
\ No newline at end of file
diff --git a/Lang/Java/Semiprime b/Lang/Java/Semiprime
new file mode 120000
index 0000000000..5af34453e0
--- /dev/null
+++ b/Lang/Java/Semiprime
@@ -0,0 +1 @@
+../../Task/Semiprime/Java
\ No newline at end of file
diff --git a/Lang/Java/Sparkline-in-unicode b/Lang/Java/Sparkline-in-unicode
new file mode 120000
index 0000000000..fb704756af
--- /dev/null
+++ b/Lang/Java/Sparkline-in-unicode
@@ -0,0 +1 @@
+../../Task/Sparkline-in-unicode/Java
\ No newline at end of file
diff --git a/Lang/Java/State-name-puzzle b/Lang/Java/State-name-puzzle
new file mode 120000
index 0000000000..074ea3c7a0
--- /dev/null
+++ b/Lang/Java/State-name-puzzle
@@ -0,0 +1 @@
+../../Task/State-name-puzzle/Java
\ No newline at end of file
diff --git a/Lang/Java/Stern-Brocot-sequence b/Lang/Java/Stern-Brocot-sequence
new file mode 120000
index 0000000000..4efcf3fcfd
--- /dev/null
+++ b/Lang/Java/Stern-Brocot-sequence
@@ -0,0 +1 @@
+../../Task/Stern-Brocot-sequence/Java
\ No newline at end of file
diff --git a/Lang/Java/String-append b/Lang/Java/String-append
new file mode 120000
index 0000000000..977c1973c7
--- /dev/null
+++ b/Lang/Java/String-append
@@ -0,0 +1 @@
+../../Task/String-append/Java
\ No newline at end of file
diff --git a/Lang/Java/String-matching b/Lang/Java/String-matching
new file mode 120000
index 0000000000..a853a60049
--- /dev/null
+++ b/Lang/Java/String-matching
@@ -0,0 +1 @@
+../../Task/String-matching/Java
\ No newline at end of file
diff --git a/Lang/Java/String-prepend b/Lang/Java/String-prepend
new file mode 120000
index 0000000000..bd244c9c51
--- /dev/null
+++ b/Lang/Java/String-prepend
@@ -0,0 +1 @@
+../../Task/String-prepend/Java
\ No newline at end of file
diff --git a/Lang/Java/Sum-multiples-of-3-and-5 b/Lang/Java/Sum-multiples-of-3-and-5
new file mode 120000
index 0000000000..27541ceacc
--- /dev/null
+++ b/Lang/Java/Sum-multiples-of-3-and-5
@@ -0,0 +1 @@
+../../Task/Sum-multiples-of-3-and-5/Java
\ No newline at end of file
diff --git a/Lang/Java/The-ISAAC-Cipher b/Lang/Java/The-ISAAC-Cipher
new file mode 120000
index 0000000000..b8fba1d087
--- /dev/null
+++ b/Lang/Java/The-ISAAC-Cipher
@@ -0,0 +1 @@
+../../Task/The-ISAAC-Cipher/Java
\ No newline at end of file
diff --git a/Lang/Java/The-Twelve-Days-of-Christmas b/Lang/Java/The-Twelve-Days-of-Christmas
new file mode 120000
index 0000000000..27c1a52847
--- /dev/null
+++ b/Lang/Java/The-Twelve-Days-of-Christmas
@@ -0,0 +1 @@
+../../Task/The-Twelve-Days-of-Christmas/Java
\ No newline at end of file
diff --git a/Lang/Java/Ulam-spiral--for-primes- b/Lang/Java/Ulam-spiral--for-primes-
new file mode 120000
index 0000000000..695f6f4b64
--- /dev/null
+++ b/Lang/Java/Ulam-spiral--for-primes-
@@ -0,0 +1 @@
+../../Task/Ulam-spiral--for-primes-/Java
\ No newline at end of file
diff --git a/Lang/Java/Vogels-approximation-method b/Lang/Java/Vogels-approximation-method
new file mode 120000
index 0000000000..28470d8f01
--- /dev/null
+++ b/Lang/Java/Vogels-approximation-method
@@ -0,0 +1 @@
+../../Task/Vogels-approximation-method/Java
\ No newline at end of file
diff --git a/Lang/Java/World-Cup-group-stage b/Lang/Java/World-Cup-group-stage
new file mode 120000
index 0000000000..d7d9576773
--- /dev/null
+++ b/Lang/Java/World-Cup-group-stage
@@ -0,0 +1 @@
+../../Task/World-Cup-group-stage/Java
\ No newline at end of file
diff --git a/Lang/Java/Zero-to-the-zero-power b/Lang/Java/Zero-to-the-zero-power
new file mode 120000
index 0000000000..9e23ed0b8c
--- /dev/null
+++ b/Lang/Java/Zero-to-the-zero-power
@@ -0,0 +1 @@
+../../Task/Zero-to-the-zero-power/Java
\ No newline at end of file
diff --git a/Lang/Java/Zhang-Suen-thinning-algorithm b/Lang/Java/Zhang-Suen-thinning-algorithm
new file mode 120000
index 0000000000..b9305ce629
--- /dev/null
+++ b/Lang/Java/Zhang-Suen-thinning-algorithm
@@ -0,0 +1 @@
+../../Task/Zhang-Suen-thinning-algorithm/Java
\ No newline at end of file
diff --git a/Lang/JavaScript/9-billion-names-of-God-the-integer b/Lang/JavaScript/9-billion-names-of-God-the-integer
new file mode 120000
index 0000000000..49112dfb19
--- /dev/null
+++ b/Lang/JavaScript/9-billion-names-of-God-the-integer
@@ -0,0 +1 @@
+../../Task/9-billion-names-of-God-the-integer/JavaScript
\ No newline at end of file
diff --git a/Lang/JavaScript/ABC-Problem b/Lang/JavaScript/ABC-Problem
new file mode 120000
index 0000000000..911953e53b
--- /dev/null
+++ b/Lang/JavaScript/ABC-Problem
@@ -0,0 +1 @@
+../../Task/ABC-Problem/JavaScript
\ No newline at end of file
diff --git a/Lang/JavaScript/AKS-test-for-primes b/Lang/JavaScript/AKS-test-for-primes
new file mode 120000
index 0000000000..5b28db7567
--- /dev/null
+++ b/Lang/JavaScript/AKS-test-for-primes
@@ -0,0 +1 @@
+../../Task/AKS-test-for-primes/JavaScript
\ No newline at end of file
diff --git a/Lang/JavaScript/Amb b/Lang/JavaScript/Amb
new file mode 120000
index 0000000000..468b13d07f
--- /dev/null
+++ b/Lang/JavaScript/Amb
@@ -0,0 +1 @@
+../../Task/Amb/JavaScript
\ No newline at end of file
diff --git a/Lang/JavaScript/Catamorphism b/Lang/JavaScript/Catamorphism
new file mode 120000
index 0000000000..15b23471f3
--- /dev/null
+++ b/Lang/JavaScript/Catamorphism
@@ -0,0 +1 @@
+../../Task/Catamorphism/JavaScript
\ No newline at end of file
diff --git a/Lang/JavaScript/Closures-Value-capture b/Lang/JavaScript/Closures-Value-capture
new file mode 120000
index 0000000000..f6c654d079
--- /dev/null
+++ b/Lang/JavaScript/Closures-Value-capture
@@ -0,0 +1 @@
+../../Task/Closures-Value-capture/JavaScript
\ No newline at end of file
diff --git a/Lang/JavaScript/Comma-quibbling b/Lang/JavaScript/Comma-quibbling
new file mode 120000
index 0000000000..f5e0ba5c6a
--- /dev/null
+++ b/Lang/JavaScript/Comma-quibbling
@@ -0,0 +1 @@
+../../Task/Comma-quibbling/JavaScript
\ No newline at end of file
diff --git a/Lang/JavaScript/Currying b/Lang/JavaScript/Currying
new file mode 120000
index 0000000000..bba78289df
--- /dev/null
+++ b/Lang/JavaScript/Currying
@@ -0,0 +1 @@
+../../Task/Currying/JavaScript
\ No newline at end of file
diff --git a/Lang/JavaScript/Draw-a-clock b/Lang/JavaScript/Draw-a-clock
new file mode 120000
index 0000000000..c0cd3b8672
--- /dev/null
+++ b/Lang/JavaScript/Draw-a-clock
@@ -0,0 +1 @@
+../../Task/Draw-a-clock/JavaScript
\ No newline at end of file
diff --git a/Lang/JavaScript/File-input-output b/Lang/JavaScript/File-input-output
new file mode 120000
index 0000000000..da29042f90
--- /dev/null
+++ b/Lang/JavaScript/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/JavaScript
\ No newline at end of file
diff --git a/Lang/JavaScript/Fractran b/Lang/JavaScript/Fractran
new file mode 120000
index 0000000000..9acc8dc0cc
--- /dev/null
+++ b/Lang/JavaScript/Fractran
@@ -0,0 +1 @@
+../../Task/Fractran/JavaScript
\ No newline at end of file
diff --git a/Lang/JavaScript/Generate-lower-case-ASCII-alphabet b/Lang/JavaScript/Generate-lower-case-ASCII-alphabet
new file mode 120000
index 0000000000..f821dfe998
--- /dev/null
+++ b/Lang/JavaScript/Generate-lower-case-ASCII-alphabet
@@ -0,0 +1 @@
+../../Task/Generate-lower-case-ASCII-alphabet/JavaScript
\ No newline at end of file
diff --git a/Lang/JavaScript/Heronian-triangles b/Lang/JavaScript/Heronian-triangles
new file mode 120000
index 0000000000..027e1cade4
--- /dev/null
+++ b/Lang/JavaScript/Heronian-triangles
@@ -0,0 +1 @@
+../../Task/Heronian-triangles/JavaScript
\ No newline at end of file
diff --git a/Lang/JavaScript/Longest-increasing-subsequence b/Lang/JavaScript/Longest-increasing-subsequence
new file mode 120000
index 0000000000..5fc525f084
--- /dev/null
+++ b/Lang/JavaScript/Longest-increasing-subsequence
@@ -0,0 +1 @@
+../../Task/Longest-increasing-subsequence/JavaScript
\ No newline at end of file
diff --git a/Lang/JavaScript/Make-directory-path b/Lang/JavaScript/Make-directory-path
new file mode 120000
index 0000000000..7f207a3e0c
--- /dev/null
+++ b/Lang/JavaScript/Make-directory-path
@@ -0,0 +1 @@
+../../Task/Make-directory-path/JavaScript
\ No newline at end of file
diff --git a/Lang/JavaScript/Move-to-front-algorithm b/Lang/JavaScript/Move-to-front-algorithm
new file mode 120000
index 0000000000..7f6f54991a
--- /dev/null
+++ b/Lang/JavaScript/Move-to-front-algorithm
@@ -0,0 +1 @@
+../../Task/Move-to-front-algorithm/JavaScript
\ No newline at end of file
diff --git a/Lang/JavaScript/Runge-Kutta-method b/Lang/JavaScript/Runge-Kutta-method
new file mode 120000
index 0000000000..0d597b7a71
--- /dev/null
+++ b/Lang/JavaScript/Runge-Kutta-method
@@ -0,0 +1 @@
+../../Task/Runge-Kutta-method/JavaScript
\ No newline at end of file
diff --git a/Lang/JavaScript/String-append b/Lang/JavaScript/String-append
new file mode 120000
index 0000000000..99ceade32f
--- /dev/null
+++ b/Lang/JavaScript/String-append
@@ -0,0 +1 @@
+../../Task/String-append/JavaScript
\ No newline at end of file
diff --git a/Lang/JavaScript/String-matching b/Lang/JavaScript/String-matching
new file mode 120000
index 0000000000..455c6debf2
--- /dev/null
+++ b/Lang/JavaScript/String-matching
@@ -0,0 +1 @@
+../../Task/String-matching/JavaScript
\ No newline at end of file
diff --git a/Lang/JavaScript/The-Twelve-Days-of-Christmas b/Lang/JavaScript/The-Twelve-Days-of-Christmas
new file mode 120000
index 0000000000..605d992a91
--- /dev/null
+++ b/Lang/JavaScript/The-Twelve-Days-of-Christmas
@@ -0,0 +1 @@
+../../Task/The-Twelve-Days-of-Christmas/JavaScript
\ No newline at end of file
diff --git a/Lang/JavaScript/Zero-to-the-zero-power b/Lang/JavaScript/Zero-to-the-zero-power
new file mode 120000
index 0000000000..1ba361b9ad
--- /dev/null
+++ b/Lang/JavaScript/Zero-to-the-zero-power
@@ -0,0 +1 @@
+../../Task/Zero-to-the-zero-power/JavaScript
\ No newline at end of file
diff --git a/Lang/Julia/ABC-Problem b/Lang/Julia/ABC-Problem
new file mode 120000
index 0000000000..ad18242335
--- /dev/null
+++ b/Lang/Julia/ABC-Problem
@@ -0,0 +1 @@
+../../Task/ABC-Problem/Julia
\ No newline at end of file
diff --git a/Lang/Julia/Almost-prime b/Lang/Julia/Almost-prime
new file mode 120000
index 0000000000..367f6b481d
--- /dev/null
+++ b/Lang/Julia/Almost-prime
@@ -0,0 +1 @@
+../../Task/Almost-prime/Julia
\ No newline at end of file
diff --git a/Lang/Julia/Benfords-law b/Lang/Julia/Benfords-law
new file mode 120000
index 0000000000..802ae943f2
--- /dev/null
+++ b/Lang/Julia/Benfords-law
@@ -0,0 +1 @@
+../../Task/Benfords-law/Julia
\ No newline at end of file
diff --git a/Lang/Julia/Casting-out-nines b/Lang/Julia/Casting-out-nines
new file mode 120000
index 0000000000..b1039017dc
--- /dev/null
+++ b/Lang/Julia/Casting-out-nines
@@ -0,0 +1 @@
+../../Task/Casting-out-nines/Julia
\ No newline at end of file
diff --git a/Lang/Julia/Closures-Value-capture b/Lang/Julia/Closures-Value-capture
new file mode 120000
index 0000000000..e1a0dd3276
--- /dev/null
+++ b/Lang/Julia/Closures-Value-capture
@@ -0,0 +1 @@
+../../Task/Closures-Value-capture/Julia
\ No newline at end of file
diff --git a/Lang/Julia/Comma-quibbling b/Lang/Julia/Comma-quibbling
new file mode 120000
index 0000000000..775d273a38
--- /dev/null
+++ b/Lang/Julia/Comma-quibbling
@@ -0,0 +1 @@
+../../Task/Comma-quibbling/Julia
\ No newline at end of file
diff --git a/Lang/Julia/Conjugate-transpose b/Lang/Julia/Conjugate-transpose
new file mode 120000
index 0000000000..a10795a052
--- /dev/null
+++ b/Lang/Julia/Conjugate-transpose
@@ -0,0 +1 @@
+../../Task/Conjugate-transpose/Julia
\ No newline at end of file
diff --git a/Lang/Julia/Convert-decimal-number-to-rational b/Lang/Julia/Convert-decimal-number-to-rational
new file mode 120000
index 0000000000..3f465bb1f9
--- /dev/null
+++ b/Lang/Julia/Convert-decimal-number-to-rational
@@ -0,0 +1 @@
+../../Task/Convert-decimal-number-to-rational/Julia
\ No newline at end of file
diff --git a/Lang/Julia/File-input-output b/Lang/Julia/File-input-output
new file mode 120000
index 0000000000..7340c55bb0
--- /dev/null
+++ b/Lang/Julia/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/Julia
\ No newline at end of file
diff --git a/Lang/Julia/Gaussian-elimination b/Lang/Julia/Gaussian-elimination
new file mode 120000
index 0000000000..6f00b6d183
--- /dev/null
+++ b/Lang/Julia/Gaussian-elimination
@@ -0,0 +1 @@
+../../Task/Gaussian-elimination/Julia
\ No newline at end of file
diff --git a/Lang/Julia/Generate-lower-case-ASCII-alphabet b/Lang/Julia/Generate-lower-case-ASCII-alphabet
new file mode 120000
index 0000000000..3a72021875
--- /dev/null
+++ b/Lang/Julia/Generate-lower-case-ASCII-alphabet
@@ -0,0 +1 @@
+../../Task/Generate-lower-case-ASCII-alphabet/Julia
\ No newline at end of file
diff --git a/Lang/Julia/Iterated-digits-squaring b/Lang/Julia/Iterated-digits-squaring
new file mode 120000
index 0000000000..eb7a0b58fd
--- /dev/null
+++ b/Lang/Julia/Iterated-digits-squaring
@@ -0,0 +1 @@
+../../Task/Iterated-digits-squaring/Julia
\ No newline at end of file
diff --git a/Lang/Julia/Left-factorials b/Lang/Julia/Left-factorials
new file mode 120000
index 0000000000..6af24c2b36
--- /dev/null
+++ b/Lang/Julia/Left-factorials
@@ -0,0 +1 @@
+../../Task/Left-factorials/Julia
\ No newline at end of file
diff --git a/Lang/Julia/Reverse-words-in-a-string b/Lang/Julia/Reverse-words-in-a-string
new file mode 120000
index 0000000000..0744f788e2
--- /dev/null
+++ b/Lang/Julia/Reverse-words-in-a-string
@@ -0,0 +1 @@
+../../Task/Reverse-words-in-a-string/Julia
\ No newline at end of file
diff --git a/Lang/Julia/Runge-Kutta-method b/Lang/Julia/Runge-Kutta-method
new file mode 120000
index 0000000000..eefbcbd459
--- /dev/null
+++ b/Lang/Julia/Runge-Kutta-method
@@ -0,0 +1 @@
+../../Task/Runge-Kutta-method/Julia
\ No newline at end of file
diff --git a/Lang/Julia/Semiprime b/Lang/Julia/Semiprime
new file mode 120000
index 0000000000..c2dc69dc10
--- /dev/null
+++ b/Lang/Julia/Semiprime
@@ -0,0 +1 @@
+../../Task/Semiprime/Julia
\ No newline at end of file
diff --git a/Lang/Julia/String-append b/Lang/Julia/String-append
new file mode 120000
index 0000000000..8481dd9eb0
--- /dev/null
+++ b/Lang/Julia/String-append
@@ -0,0 +1 @@
+../../Task/String-append/Julia
\ No newline at end of file
diff --git a/Lang/Julia/String-matching b/Lang/Julia/String-matching
new file mode 120000
index 0000000000..59e82fde16
--- /dev/null
+++ b/Lang/Julia/String-matching
@@ -0,0 +1 @@
+../../Task/String-matching/Julia
\ No newline at end of file
diff --git a/Lang/Julia/String-prepend b/Lang/Julia/String-prepend
new file mode 120000
index 0000000000..355c64561d
--- /dev/null
+++ b/Lang/Julia/String-prepend
@@ -0,0 +1 @@
+../../Task/String-prepend/Julia
\ No newline at end of file
diff --git a/Lang/Julia/Sum-multiples-of-3-and-5 b/Lang/Julia/Sum-multiples-of-3-and-5
new file mode 120000
index 0000000000..55c17bfc00
--- /dev/null
+++ b/Lang/Julia/Sum-multiples-of-3-and-5
@@ -0,0 +1 @@
+../../Task/Sum-multiples-of-3-and-5/Julia
\ No newline at end of file
diff --git a/Lang/Julia/Total-circles-area b/Lang/Julia/Total-circles-area
new file mode 120000
index 0000000000..98b9e92b33
--- /dev/null
+++ b/Lang/Julia/Total-circles-area
@@ -0,0 +1 @@
+../../Task/Total-circles-area/Julia
\ No newline at end of file
diff --git a/Lang/K/File-input-output b/Lang/K/File-input-output
new file mode 120000
index 0000000000..cdb9ccbb30
--- /dev/null
+++ b/Lang/K/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/K
\ No newline at end of file
diff --git a/Lang/K/String-matching b/Lang/K/String-matching
new file mode 120000
index 0000000000..c42411e5f2
--- /dev/null
+++ b/Lang/K/String-matching
@@ -0,0 +1 @@
+../../Task/String-matching/K
\ No newline at end of file
diff --git a/Lang/LOLCODE/Catamorphism b/Lang/LOLCODE/Catamorphism
new file mode 120000
index 0000000000..d34d5e1678
--- /dev/null
+++ b/Lang/LOLCODE/Catamorphism
@@ -0,0 +1 @@
+../../Task/Catamorphism/LOLCODE
\ No newline at end of file
diff --git a/Lang/LOLCODE/The-Twelve-Days-of-Christmas b/Lang/LOLCODE/The-Twelve-Days-of-Christmas
new file mode 120000
index 0000000000..47b1587171
--- /dev/null
+++ b/Lang/LOLCODE/The-Twelve-Days-of-Christmas
@@ -0,0 +1 @@
+../../Task/The-Twelve-Days-of-Christmas/LOLCODE
\ No newline at end of file
diff --git a/Lang/Lang5/File-input-output b/Lang/Lang5/File-input-output
new file mode 120000
index 0000000000..78e4360ca3
--- /dev/null
+++ b/Lang/Lang5/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/Lang5
\ No newline at end of file
diff --git a/Lang/Lang5/String-matching b/Lang/Lang5/String-matching
new file mode 120000
index 0000000000..3b022ef28e
--- /dev/null
+++ b/Lang/Lang5/String-matching
@@ -0,0 +1 @@
+../../Task/String-matching/Lang5
\ No newline at end of file
diff --git a/Lang/Liberty-BASIC/Benfords-law b/Lang/Liberty-BASIC/Benfords-law
new file mode 120000
index 0000000000..c7b89d3064
--- /dev/null
+++ b/Lang/Liberty-BASIC/Benfords-law
@@ -0,0 +1 @@
+../../Task/Benfords-law/Liberty-BASIC
\ No newline at end of file
diff --git a/Lang/Liberty-BASIC/Convert-decimal-number-to-rational b/Lang/Liberty-BASIC/Convert-decimal-number-to-rational
new file mode 120000
index 0000000000..e8f4be6fa5
--- /dev/null
+++ b/Lang/Liberty-BASIC/Convert-decimal-number-to-rational
@@ -0,0 +1 @@
+../../Task/Convert-decimal-number-to-rational/Liberty-BASIC
\ No newline at end of file
diff --git a/Lang/Liberty-BASIC/Draw-a-clock b/Lang/Liberty-BASIC/Draw-a-clock
new file mode 120000
index 0000000000..faf542e3e1
--- /dev/null
+++ b/Lang/Liberty-BASIC/Draw-a-clock
@@ -0,0 +1 @@
+../../Task/Draw-a-clock/Liberty-BASIC
\ No newline at end of file
diff --git a/Lang/Liberty-BASIC/File-input-output b/Lang/Liberty-BASIC/File-input-output
new file mode 120000
index 0000000000..1b6f9d1fc1
--- /dev/null
+++ b/Lang/Liberty-BASIC/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/Liberty-BASIC
\ No newline at end of file
diff --git a/Lang/Liberty-BASIC/Munching-squares b/Lang/Liberty-BASIC/Munching-squares
new file mode 120000
index 0000000000..71696dd5f5
--- /dev/null
+++ b/Lang/Liberty-BASIC/Munching-squares
@@ -0,0 +1 @@
+../../Task/Munching-squares/Liberty-BASIC
\ No newline at end of file
diff --git a/Lang/Liberty-BASIC/Statistics-Basic b/Lang/Liberty-BASIC/Statistics-Basic
new file mode 120000
index 0000000000..47366e28bc
--- /dev/null
+++ b/Lang/Liberty-BASIC/Statistics-Basic
@@ -0,0 +1 @@
+../../Task/Statistics-Basic/Liberty-BASIC
\ No newline at end of file
diff --git a/Lang/Liberty-BASIC/String-matching b/Lang/Liberty-BASIC/String-matching
new file mode 120000
index 0000000000..9bf62a50e3
--- /dev/null
+++ b/Lang/Liberty-BASIC/String-matching
@@ -0,0 +1 @@
+../../Task/String-matching/Liberty-BASIC
\ No newline at end of file
diff --git a/Lang/Limbo/Sum-multiples-of-3-and-5 b/Lang/Limbo/Sum-multiples-of-3-and-5
new file mode 120000
index 0000000000..2153c4650f
--- /dev/null
+++ b/Lang/Limbo/Sum-multiples-of-3-and-5
@@ -0,0 +1 @@
+../../Task/Sum-multiples-of-3-and-5/Limbo
\ No newline at end of file
diff --git a/Lang/Lisaac/File-input-output b/Lang/Lisaac/File-input-output
new file mode 120000
index 0000000000..ae6b8e449e
--- /dev/null
+++ b/Lang/Lisaac/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/Lisaac
\ No newline at end of file
diff --git a/Lang/Locomotive-Basic/Draw-a-clock b/Lang/Locomotive-Basic/Draw-a-clock
new file mode 120000
index 0000000000..1362e3c041
--- /dev/null
+++ b/Lang/Locomotive-Basic/Draw-a-clock
@@ -0,0 +1 @@
+../../Task/Draw-a-clock/Locomotive-Basic
\ No newline at end of file
diff --git a/Lang/Locomotive-Basic/Hello-world-Newbie b/Lang/Locomotive-Basic/Hello-world-Newbie
new file mode 120000
index 0000000000..04f92e8eab
--- /dev/null
+++ b/Lang/Locomotive-Basic/Hello-world-Newbie
@@ -0,0 +1 @@
+../../Task/Hello-world-Newbie/Locomotive-Basic
\ No newline at end of file
diff --git a/Lang/Logo/ABC-Problem b/Lang/Logo/ABC-Problem
new file mode 120000
index 0000000000..451bbb55c4
--- /dev/null
+++ b/Lang/Logo/ABC-Problem
@@ -0,0 +1 @@
+../../Task/ABC-Problem/Logo
\ No newline at end of file
diff --git a/Lang/Logo/Comma-quibbling b/Lang/Logo/Comma-quibbling
new file mode 120000
index 0000000000..1cacf9aac6
--- /dev/null
+++ b/Lang/Logo/Comma-quibbling
@@ -0,0 +1 @@
+../../Task/Comma-quibbling/Logo
\ No newline at end of file
diff --git a/Lang/Logo/Fibonacci-word-fractal b/Lang/Logo/Fibonacci-word-fractal
new file mode 120000
index 0000000000..83ca23b35e
--- /dev/null
+++ b/Lang/Logo/Fibonacci-word-fractal
@@ -0,0 +1 @@
+../../Task/Fibonacci-word-fractal/Logo
\ No newline at end of file
diff --git a/Lang/Logo/File-input-output b/Lang/Logo/File-input-output
new file mode 120000
index 0000000000..26228ff370
--- /dev/null
+++ b/Lang/Logo/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/Logo
\ No newline at end of file
diff --git a/Lang/Logo/Generate-lower-case-ASCII-alphabet b/Lang/Logo/Generate-lower-case-ASCII-alphabet
new file mode 120000
index 0000000000..b6c6d52c51
--- /dev/null
+++ b/Lang/Logo/Generate-lower-case-ASCII-alphabet
@@ -0,0 +1 @@
+../../Task/Generate-lower-case-ASCII-alphabet/Logo
\ No newline at end of file
diff --git a/Lang/Logo/String-matching b/Lang/Logo/String-matching
new file mode 120000
index 0000000000..03a01a0abf
--- /dev/null
+++ b/Lang/Logo/String-matching
@@ -0,0 +1 @@
+../../Task/String-matching/Logo
\ No newline at end of file
diff --git a/Lang/Logo/The-Twelve-Days-of-Christmas b/Lang/Logo/The-Twelve-Days-of-Christmas
new file mode 120000
index 0000000000..6d0f432ea4
--- /dev/null
+++ b/Lang/Logo/The-Twelve-Days-of-Christmas
@@ -0,0 +1 @@
+../../Task/The-Twelve-Days-of-Christmas/Logo
\ No newline at end of file
diff --git a/Lang/Logtalk/Catamorphism b/Lang/Logtalk/Catamorphism
new file mode 120000
index 0000000000..4564450adc
--- /dev/null
+++ b/Lang/Logtalk/Catamorphism
@@ -0,0 +1 @@
+../../Task/Catamorphism/Logtalk
\ No newline at end of file
diff --git a/Lang/Logtalk/Closures-Value-capture b/Lang/Logtalk/Closures-Value-capture
new file mode 120000
index 0000000000..4929765112
--- /dev/null
+++ b/Lang/Logtalk/Closures-Value-capture
@@ -0,0 +1 @@
+../../Task/Closures-Value-capture/Logtalk
\ No newline at end of file
diff --git a/Lang/Lua/Amb b/Lang/Lua/Amb
new file mode 120000
index 0000000000..88d825375d
--- /dev/null
+++ b/Lang/Lua/Amb
@@ -0,0 +1 @@
+../../Task/Amb/Lua
\ No newline at end of file
diff --git a/Lang/Lua/Benfords-law b/Lang/Lua/Benfords-law
new file mode 120000
index 0000000000..f02de17c2d
--- /dev/null
+++ b/Lang/Lua/Benfords-law
@@ -0,0 +1 @@
+../../Task/Benfords-law/Lua
\ No newline at end of file
diff --git a/Lang/Lua/CSV-data-manipulation b/Lang/Lua/CSV-data-manipulation
new file mode 120000
index 0000000000..d3b21f0f92
--- /dev/null
+++ b/Lang/Lua/CSV-data-manipulation
@@ -0,0 +1 @@
+../../Task/CSV-data-manipulation/Lua
\ No newline at end of file
diff --git a/Lang/Lua/Closures-Value-capture b/Lang/Lua/Closures-Value-capture
new file mode 120000
index 0000000000..405855d202
--- /dev/null
+++ b/Lang/Lua/Closures-Value-capture
@@ -0,0 +1 @@
+../../Task/Closures-Value-capture/Lua
\ No newline at end of file
diff --git a/Lang/Lua/File-input-output b/Lang/Lua/File-input-output
new file mode 120000
index 0000000000..f26f35c1d4
--- /dev/null
+++ b/Lang/Lua/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/Lua
\ No newline at end of file
diff --git a/Lang/Lua/Iterated-digits-squaring b/Lang/Lua/Iterated-digits-squaring
new file mode 120000
index 0000000000..7780456a84
--- /dev/null
+++ b/Lang/Lua/Iterated-digits-squaring
@@ -0,0 +1 @@
+../../Task/Iterated-digits-squaring/Lua
\ No newline at end of file
diff --git a/Lang/Lua/Longest-increasing-subsequence b/Lang/Lua/Longest-increasing-subsequence
new file mode 120000
index 0000000000..04b3823c68
--- /dev/null
+++ b/Lang/Lua/Longest-increasing-subsequence
@@ -0,0 +1 @@
+../../Task/Longest-increasing-subsequence/Lua
\ No newline at end of file
diff --git a/Lang/Lua/Reverse-words-in-a-string b/Lang/Lua/Reverse-words-in-a-string
new file mode 120000
index 0000000000..98525df98b
--- /dev/null
+++ b/Lang/Lua/Reverse-words-in-a-string
@@ -0,0 +1 @@
+../../Task/Reverse-words-in-a-string/Lua
\ No newline at end of file
diff --git a/Lang/Lua/String-matching b/Lang/Lua/String-matching
new file mode 120000
index 0000000000..2fe0857a6c
--- /dev/null
+++ b/Lang/Lua/String-matching
@@ -0,0 +1 @@
+../../Task/String-matching/Lua
\ No newline at end of file
diff --git a/Lang/Lua/String-prepend b/Lang/Lua/String-prepend
new file mode 120000
index 0000000000..a099d53eaa
--- /dev/null
+++ b/Lang/Lua/String-prepend
@@ -0,0 +1 @@
+../../Task/String-prepend/Lua
\ No newline at end of file
diff --git a/Lang/Lua/The-Twelve-Days-of-Christmas b/Lang/Lua/The-Twelve-Days-of-Christmas
new file mode 120000
index 0000000000..e35a218802
--- /dev/null
+++ b/Lang/Lua/The-Twelve-Days-of-Christmas
@@ -0,0 +1 @@
+../../Task/The-Twelve-Days-of-Christmas/Lua
\ No newline at end of file
diff --git a/Lang/MATLAB/ABC-Problem b/Lang/MATLAB/ABC-Problem
new file mode 120000
index 0000000000..95e424918d
--- /dev/null
+++ b/Lang/MATLAB/ABC-Problem
@@ -0,0 +1 @@
+../../Task/ABC-Problem/MATLAB
\ No newline at end of file
diff --git a/Lang/MATLAB/Append-a-record-to-the-end-of-a-text-file b/Lang/MATLAB/Append-a-record-to-the-end-of-a-text-file
new file mode 120000
index 0000000000..b13bc7dc69
--- /dev/null
+++ b/Lang/MATLAB/Append-a-record-to-the-end-of-a-text-file
@@ -0,0 +1 @@
+../../Task/Append-a-record-to-the-end-of-a-text-file/MATLAB
\ No newline at end of file
diff --git a/Lang/MATLAB/CSV-data-manipulation b/Lang/MATLAB/CSV-data-manipulation
new file mode 120000
index 0000000000..c04f12bed9
--- /dev/null
+++ b/Lang/MATLAB/CSV-data-manipulation
@@ -0,0 +1 @@
+../../Task/CSV-data-manipulation/MATLAB
\ No newline at end of file
diff --git a/Lang/MATLAB/Catalan-numbers-Pascals-triangle b/Lang/MATLAB/Catalan-numbers-Pascals-triangle
new file mode 120000
index 0000000000..ab540af8d0
--- /dev/null
+++ b/Lang/MATLAB/Catalan-numbers-Pascals-triangle
@@ -0,0 +1 @@
+../../Task/Catalan-numbers-Pascals-triangle/MATLAB
\ No newline at end of file
diff --git a/Lang/MATLAB/Convert-decimal-number-to-rational b/Lang/MATLAB/Convert-decimal-number-to-rational
new file mode 120000
index 0000000000..4cee297a5a
--- /dev/null
+++ b/Lang/MATLAB/Convert-decimal-number-to-rational
@@ -0,0 +1 @@
+../../Task/Convert-decimal-number-to-rational/MATLAB
\ No newline at end of file
diff --git a/Lang/MATLAB/Draw-a-clock b/Lang/MATLAB/Draw-a-clock
new file mode 120000
index 0000000000..d1184918b6
--- /dev/null
+++ b/Lang/MATLAB/Draw-a-clock
@@ -0,0 +1 @@
+../../Task/Draw-a-clock/MATLAB
\ No newline at end of file
diff --git a/Lang/MATLAB/Flipping-bits-game b/Lang/MATLAB/Flipping-bits-game
new file mode 120000
index 0000000000..d30463ee63
--- /dev/null
+++ b/Lang/MATLAB/Flipping-bits-game
@@ -0,0 +1 @@
+../../Task/Flipping-bits-game/MATLAB
\ No newline at end of file
diff --git a/Lang/MATLAB/Gaussian-elimination b/Lang/MATLAB/Gaussian-elimination
new file mode 120000
index 0000000000..52dea23f01
--- /dev/null
+++ b/Lang/MATLAB/Gaussian-elimination
@@ -0,0 +1 @@
+../../Task/Gaussian-elimination/MATLAB
\ No newline at end of file
diff --git a/Lang/MATLAB/IBAN b/Lang/MATLAB/IBAN
new file mode 120000
index 0000000000..d79b299e31
--- /dev/null
+++ b/Lang/MATLAB/IBAN
@@ -0,0 +1 @@
+../../Task/IBAN/MATLAB
\ No newline at end of file
diff --git a/Lang/MATLAB/Move-to-front-algorithm b/Lang/MATLAB/Move-to-front-algorithm
new file mode 120000
index 0000000000..a16b6312e3
--- /dev/null
+++ b/Lang/MATLAB/Move-to-front-algorithm
@@ -0,0 +1 @@
+../../Task/Move-to-front-algorithm/MATLAB
\ No newline at end of file
diff --git a/Lang/MATLAB/Munching-squares b/Lang/MATLAB/Munching-squares
new file mode 120000
index 0000000000..c5d9bc48d3
--- /dev/null
+++ b/Lang/MATLAB/Munching-squares
@@ -0,0 +1 @@
+../../Task/Munching-squares/MATLAB
\ No newline at end of file
diff --git a/Lang/MATLAB/Narcissistic-decimal-number b/Lang/MATLAB/Narcissistic-decimal-number
new file mode 120000
index 0000000000..84d0c7c16e
--- /dev/null
+++ b/Lang/MATLAB/Narcissistic-decimal-number
@@ -0,0 +1 @@
+../../Task/Narcissistic-decimal-number/MATLAB
\ No newline at end of file
diff --git a/Lang/MATLAB/Nth b/Lang/MATLAB/Nth
new file mode 120000
index 0000000000..c4d29462d3
--- /dev/null
+++ b/Lang/MATLAB/Nth
@@ -0,0 +1 @@
+../../Task/Nth/MATLAB
\ No newline at end of file
diff --git a/Lang/MATLAB/Reverse-words-in-a-string b/Lang/MATLAB/Reverse-words-in-a-string
new file mode 120000
index 0000000000..3591b1aa34
--- /dev/null
+++ b/Lang/MATLAB/Reverse-words-in-a-string
@@ -0,0 +1 @@
+../../Task/Reverse-words-in-a-string/MATLAB
\ No newline at end of file
diff --git a/Lang/MATLAB/Runge-Kutta-method b/Lang/MATLAB/Runge-Kutta-method
new file mode 120000
index 0000000000..8cf6271e96
--- /dev/null
+++ b/Lang/MATLAB/Runge-Kutta-method
@@ -0,0 +1 @@
+../../Task/Runge-Kutta-method/MATLAB
\ No newline at end of file
diff --git a/Lang/MATLAB/Statistics-Basic b/Lang/MATLAB/Statistics-Basic
new file mode 120000
index 0000000000..904edc10de
--- /dev/null
+++ b/Lang/MATLAB/Statistics-Basic
@@ -0,0 +1 @@
+../../Task/Statistics-Basic/MATLAB
\ No newline at end of file
diff --git a/Lang/MATLAB/String-matching b/Lang/MATLAB/String-matching
new file mode 120000
index 0000000000..225ee64759
--- /dev/null
+++ b/Lang/MATLAB/String-matching
@@ -0,0 +1 @@
+../../Task/String-matching/MATLAB
\ No newline at end of file
diff --git a/Lang/MATLAB/Sum-multiples-of-3-and-5 b/Lang/MATLAB/Sum-multiples-of-3-and-5
new file mode 120000
index 0000000000..3e7a1f58da
--- /dev/null
+++ b/Lang/MATLAB/Sum-multiples-of-3-and-5
@@ -0,0 +1 @@
+../../Task/Sum-multiples-of-3-and-5/MATLAB
\ No newline at end of file
diff --git a/Lang/MATLAB/Total-circles-area b/Lang/MATLAB/Total-circles-area
new file mode 120000
index 0000000000..5f4d4d2f2e
--- /dev/null
+++ b/Lang/MATLAB/Total-circles-area
@@ -0,0 +1 @@
+../../Task/Total-circles-area/MATLAB
\ No newline at end of file
diff --git a/Lang/MAXScript/ABC-Problem b/Lang/MAXScript/ABC-Problem
new file mode 120000
index 0000000000..901baea91a
--- /dev/null
+++ b/Lang/MAXScript/ABC-Problem
@@ -0,0 +1 @@
+../../Task/ABC-Problem/MAXScript
\ No newline at end of file
diff --git a/Lang/MAXScript/Comma-quibbling b/Lang/MAXScript/Comma-quibbling
new file mode 120000
index 0000000000..8e4a5fd50e
--- /dev/null
+++ b/Lang/MAXScript/Comma-quibbling
@@ -0,0 +1 @@
+../../Task/Comma-quibbling/MAXScript
\ No newline at end of file
diff --git a/Lang/MAXScript/File-input-output b/Lang/MAXScript/File-input-output
new file mode 120000
index 0000000000..f087ab6065
--- /dev/null
+++ b/Lang/MAXScript/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/MAXScript
\ No newline at end of file
diff --git a/Lang/Maple/AKS-test-for-primes b/Lang/Maple/AKS-test-for-primes
new file mode 120000
index 0000000000..03b9d4f3e4
--- /dev/null
+++ b/Lang/Maple/AKS-test-for-primes
@@ -0,0 +1 @@
+../../Task/AKS-test-for-primes/Maple
\ No newline at end of file
diff --git a/Lang/Maple/Bernoulli-numbers b/Lang/Maple/Bernoulli-numbers
new file mode 120000
index 0000000000..a7901d3c35
--- /dev/null
+++ b/Lang/Maple/Bernoulli-numbers
@@ -0,0 +1 @@
+../../Task/Bernoulli-numbers/Maple
\ No newline at end of file
diff --git a/Lang/Maple/CSV-data-manipulation b/Lang/Maple/CSV-data-manipulation
new file mode 120000
index 0000000000..8e28d6b7b1
--- /dev/null
+++ b/Lang/Maple/CSV-data-manipulation
@@ -0,0 +1 @@
+../../Task/CSV-data-manipulation/Maple
\ No newline at end of file
diff --git a/Lang/Maple/Catamorphism b/Lang/Maple/Catamorphism
new file mode 120000
index 0000000000..a7c8aa3906
--- /dev/null
+++ b/Lang/Maple/Catamorphism
@@ -0,0 +1 @@
+../../Task/Catamorphism/Maple
\ No newline at end of file
diff --git a/Lang/Maple/Chinese-remainder-theorem b/Lang/Maple/Chinese-remainder-theorem
new file mode 120000
index 0000000000..20af2d8bd4
--- /dev/null
+++ b/Lang/Maple/Chinese-remainder-theorem
@@ -0,0 +1 @@
+../../Task/Chinese-remainder-theorem/Maple
\ No newline at end of file
diff --git a/Lang/Maple/Closures-Value-capture b/Lang/Maple/Closures-Value-capture
new file mode 120000
index 0000000000..fa63615065
--- /dev/null
+++ b/Lang/Maple/Closures-Value-capture
@@ -0,0 +1 @@
+../../Task/Closures-Value-capture/Maple
\ No newline at end of file
diff --git a/Lang/Maple/Comma-quibbling b/Lang/Maple/Comma-quibbling
new file mode 120000
index 0000000000..820e1a1c81
--- /dev/null
+++ b/Lang/Maple/Comma-quibbling
@@ -0,0 +1 @@
+../../Task/Comma-quibbling/Maple
\ No newline at end of file
diff --git a/Lang/Maple/Conjugate-transpose b/Lang/Maple/Conjugate-transpose
new file mode 120000
index 0000000000..8812e09532
--- /dev/null
+++ b/Lang/Maple/Conjugate-transpose
@@ -0,0 +1 @@
+../../Task/Conjugate-transpose/Maple
\ No newline at end of file
diff --git a/Lang/Maple/Convert-decimal-number-to-rational b/Lang/Maple/Convert-decimal-number-to-rational
new file mode 120000
index 0000000000..edfb829e3d
--- /dev/null
+++ b/Lang/Maple/Convert-decimal-number-to-rational
@@ -0,0 +1 @@
+../../Task/Convert-decimal-number-to-rational/Maple
\ No newline at end of file
diff --git a/Lang/Maple/Rep-string b/Lang/Maple/Rep-string
new file mode 120000
index 0000000000..da8aeaa341
--- /dev/null
+++ b/Lang/Maple/Rep-string
@@ -0,0 +1 @@
+../../Task/Rep-string/Maple
\ No newline at end of file
diff --git a/Lang/Maple/String-matching b/Lang/Maple/String-matching
new file mode 120000
index 0000000000..0a2bd2e159
--- /dev/null
+++ b/Lang/Maple/String-matching
@@ -0,0 +1 @@
+../../Task/String-matching/Maple
\ No newline at end of file
diff --git a/Lang/Maple/Sum-multiples-of-3-and-5 b/Lang/Maple/Sum-multiples-of-3-and-5
new file mode 120000
index 0000000000..3177aae93e
--- /dev/null
+++ b/Lang/Maple/Sum-multiples-of-3-and-5
@@ -0,0 +1 @@
+../../Task/Sum-multiples-of-3-and-5/Maple
\ No newline at end of file
diff --git a/Lang/Maple/Zero-to-the-zero-power b/Lang/Maple/Zero-to-the-zero-power
new file mode 120000
index 0000000000..39af8fd572
--- /dev/null
+++ b/Lang/Maple/Zero-to-the-zero-power
@@ -0,0 +1 @@
+../../Task/Zero-to-the-zero-power/Maple
\ No newline at end of file
diff --git a/Lang/Mathematica/9-billion-names-of-God-the-integer b/Lang/Mathematica/9-billion-names-of-God-the-integer
new file mode 120000
index 0000000000..064a2840e5
--- /dev/null
+++ b/Lang/Mathematica/9-billion-names-of-God-the-integer
@@ -0,0 +1 @@
+../../Task/9-billion-names-of-God-the-integer/Mathematica
\ No newline at end of file
diff --git a/Lang/Mathematica/ABC-Problem b/Lang/Mathematica/ABC-Problem
new file mode 120000
index 0000000000..71890e718f
--- /dev/null
+++ b/Lang/Mathematica/ABC-Problem
@@ -0,0 +1 @@
+../../Task/ABC-Problem/Mathematica
\ No newline at end of file
diff --git a/Lang/Mathematica/AKS-test-for-primes b/Lang/Mathematica/AKS-test-for-primes
new file mode 120000
index 0000000000..0f947890b7
--- /dev/null
+++ b/Lang/Mathematica/AKS-test-for-primes
@@ -0,0 +1 @@
+../../Task/AKS-test-for-primes/Mathematica
\ No newline at end of file
diff --git a/Lang/Mathematica/Abundant,-deficient-and-perfect-number-classifications b/Lang/Mathematica/Abundant,-deficient-and-perfect-number-classifications
new file mode 120000
index 0000000000..294be92d9d
--- /dev/null
+++ b/Lang/Mathematica/Abundant,-deficient-and-perfect-number-classifications
@@ -0,0 +1 @@
+../../Task/Abundant,-deficient-and-perfect-number-classifications/Mathematica
\ No newline at end of file
diff --git a/Lang/Mathematica/Almost-prime b/Lang/Mathematica/Almost-prime
new file mode 120000
index 0000000000..3151c6a9b7
--- /dev/null
+++ b/Lang/Mathematica/Almost-prime
@@ -0,0 +1 @@
+../../Task/Almost-prime/Mathematica
\ No newline at end of file
diff --git a/Lang/Mathematica/Amb b/Lang/Mathematica/Amb
new file mode 120000
index 0000000000..0da1d49a91
--- /dev/null
+++ b/Lang/Mathematica/Amb
@@ -0,0 +1 @@
+../../Task/Amb/Mathematica
\ No newline at end of file
diff --git a/Lang/Mathematica/Amicable-pairs b/Lang/Mathematica/Amicable-pairs
new file mode 120000
index 0000000000..7078edf427
--- /dev/null
+++ b/Lang/Mathematica/Amicable-pairs
@@ -0,0 +1 @@
+../../Task/Amicable-pairs/Mathematica
\ No newline at end of file
diff --git a/Lang/Mathematica/Arithmetic-geometric-mean-Calculate-Pi b/Lang/Mathematica/Arithmetic-geometric-mean-Calculate-Pi
new file mode 120000
index 0000000000..b6e827db4f
--- /dev/null
+++ b/Lang/Mathematica/Arithmetic-geometric-mean-Calculate-Pi
@@ -0,0 +1 @@
+../../Task/Arithmetic-geometric-mean-Calculate-Pi/Mathematica
\ No newline at end of file
diff --git a/Lang/Mathematica/Benfords-law b/Lang/Mathematica/Benfords-law
new file mode 120000
index 0000000000..623ee1d326
--- /dev/null
+++ b/Lang/Mathematica/Benfords-law
@@ -0,0 +1 @@
+../../Task/Benfords-law/Mathematica
\ No newline at end of file
diff --git a/Lang/Mathematica/Bernoulli-numbers b/Lang/Mathematica/Bernoulli-numbers
new file mode 120000
index 0000000000..8c62892e24
--- /dev/null
+++ b/Lang/Mathematica/Bernoulli-numbers
@@ -0,0 +1 @@
+../../Task/Bernoulli-numbers/Mathematica
\ No newline at end of file
diff --git a/Lang/Mathematica/CSV-data-manipulation b/Lang/Mathematica/CSV-data-manipulation
new file mode 120000
index 0000000000..afc1102fed
--- /dev/null
+++ b/Lang/Mathematica/CSV-data-manipulation
@@ -0,0 +1 @@
+../../Task/CSV-data-manipulation/Mathematica
\ No newline at end of file
diff --git a/Lang/Mathematica/Catalan-numbers-Pascals-triangle b/Lang/Mathematica/Catalan-numbers-Pascals-triangle
new file mode 120000
index 0000000000..4c1cc5b34e
--- /dev/null
+++ b/Lang/Mathematica/Catalan-numbers-Pascals-triangle
@@ -0,0 +1 @@
+../../Task/Catalan-numbers-Pascals-triangle/Mathematica
\ No newline at end of file
diff --git a/Lang/Mathematica/Catamorphism b/Lang/Mathematica/Catamorphism
new file mode 120000
index 0000000000..f629f66120
--- /dev/null
+++ b/Lang/Mathematica/Catamorphism
@@ -0,0 +1 @@
+../../Task/Catamorphism/Mathematica
\ No newline at end of file
diff --git a/Lang/Mathematica/Chinese-remainder-theorem b/Lang/Mathematica/Chinese-remainder-theorem
new file mode 120000
index 0000000000..9fc21603f2
--- /dev/null
+++ b/Lang/Mathematica/Chinese-remainder-theorem
@@ -0,0 +1 @@
+../../Task/Chinese-remainder-theorem/Mathematica
\ No newline at end of file
diff --git a/Lang/Mathematica/Closures-Value-capture b/Lang/Mathematica/Closures-Value-capture
new file mode 120000
index 0000000000..c59191890c
--- /dev/null
+++ b/Lang/Mathematica/Closures-Value-capture
@@ -0,0 +1 @@
+../../Task/Closures-Value-capture/Mathematica
\ No newline at end of file
diff --git a/Lang/Mathematica/Combinations-and-permutations b/Lang/Mathematica/Combinations-and-permutations
new file mode 120000
index 0000000000..8982a6d483
--- /dev/null
+++ b/Lang/Mathematica/Combinations-and-permutations
@@ -0,0 +1 @@
+../../Task/Combinations-and-permutations/Mathematica
\ No newline at end of file
diff --git a/Lang/Mathematica/Comma-quibbling b/Lang/Mathematica/Comma-quibbling
new file mode 120000
index 0000000000..d8ead722ed
--- /dev/null
+++ b/Lang/Mathematica/Comma-quibbling
@@ -0,0 +1 @@
+../../Task/Comma-quibbling/Mathematica
\ No newline at end of file
diff --git a/Lang/Mathematica/Conjugate-transpose b/Lang/Mathematica/Conjugate-transpose
new file mode 120000
index 0000000000..b54ed5881b
--- /dev/null
+++ b/Lang/Mathematica/Conjugate-transpose
@@ -0,0 +1 @@
+../../Task/Conjugate-transpose/Mathematica
\ No newline at end of file
diff --git a/Lang/Mathematica/Convert-decimal-number-to-rational b/Lang/Mathematica/Convert-decimal-number-to-rational
new file mode 120000
index 0000000000..586ab4b0ec
--- /dev/null
+++ b/Lang/Mathematica/Convert-decimal-number-to-rational
@@ -0,0 +1 @@
+../../Task/Convert-decimal-number-to-rational/Mathematica
\ No newline at end of file
diff --git a/Lang/Mathematica/Digital-root-Multiplicative-digital-root b/Lang/Mathematica/Digital-root-Multiplicative-digital-root
new file mode 120000
index 0000000000..419e5eb837
--- /dev/null
+++ b/Lang/Mathematica/Digital-root-Multiplicative-digital-root
@@ -0,0 +1 @@
+../../Task/Digital-root-Multiplicative-digital-root/Mathematica
\ No newline at end of file
diff --git a/Lang/Mathematica/Draw-a-clock b/Lang/Mathematica/Draw-a-clock
new file mode 120000
index 0000000000..662c86b8d2
--- /dev/null
+++ b/Lang/Mathematica/Draw-a-clock
@@ -0,0 +1 @@
+../../Task/Draw-a-clock/Mathematica
\ No newline at end of file
diff --git a/Lang/Mathematica/Extensible-prime-generator b/Lang/Mathematica/Extensible-prime-generator
new file mode 120000
index 0000000000..2959c7464c
--- /dev/null
+++ b/Lang/Mathematica/Extensible-prime-generator
@@ -0,0 +1 @@
+../../Task/Extensible-prime-generator/Mathematica
\ No newline at end of file
diff --git a/Lang/Mathematica/Fibonacci-word b/Lang/Mathematica/Fibonacci-word
new file mode 120000
index 0000000000..ba7becfb31
--- /dev/null
+++ b/Lang/Mathematica/Fibonacci-word
@@ -0,0 +1 @@
+../../Task/Fibonacci-word/Mathematica
\ No newline at end of file
diff --git a/Lang/Mathematica/Fibonacci-word-fractal b/Lang/Mathematica/Fibonacci-word-fractal
new file mode 120000
index 0000000000..4f048850c4
--- /dev/null
+++ b/Lang/Mathematica/Fibonacci-word-fractal
@@ -0,0 +1 @@
+../../Task/Fibonacci-word-fractal/Mathematica
\ No newline at end of file
diff --git a/Lang/Mathematica/File-input-output b/Lang/Mathematica/File-input-output
new file mode 120000
index 0000000000..3d1bc63efa
--- /dev/null
+++ b/Lang/Mathematica/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/Mathematica
\ No newline at end of file
diff --git a/Lang/Mathematica/Find-the-last-Sunday-of-each-month b/Lang/Mathematica/Find-the-last-Sunday-of-each-month
new file mode 120000
index 0000000000..cfe0c7f6ac
--- /dev/null
+++ b/Lang/Mathematica/Find-the-last-Sunday-of-each-month
@@ -0,0 +1 @@
+../../Task/Find-the-last-Sunday-of-each-month/Mathematica
\ No newline at end of file
diff --git a/Lang/Mathematica/Fractran b/Lang/Mathematica/Fractran
new file mode 120000
index 0000000000..c123b6f531
--- /dev/null
+++ b/Lang/Mathematica/Fractran
@@ -0,0 +1 @@
+../../Task/Fractran/Mathematica
\ No newline at end of file
diff --git a/Lang/Mathematica/Gaussian-elimination b/Lang/Mathematica/Gaussian-elimination
new file mode 120000
index 0000000000..fd96cc7840
--- /dev/null
+++ b/Lang/Mathematica/Gaussian-elimination
@@ -0,0 +1 @@
+../../Task/Gaussian-elimination/Mathematica
\ No newline at end of file
diff --git a/Lang/Mathematica/Generate-lower-case-ASCII-alphabet b/Lang/Mathematica/Generate-lower-case-ASCII-alphabet
new file mode 120000
index 0000000000..d4f31b565b
--- /dev/null
+++ b/Lang/Mathematica/Generate-lower-case-ASCII-alphabet
@@ -0,0 +1 @@
+../../Task/Generate-lower-case-ASCII-alphabet/Mathematica
\ No newline at end of file
diff --git a/Lang/Mathematica/Hash-join b/Lang/Mathematica/Hash-join
new file mode 120000
index 0000000000..d04a8dd562
--- /dev/null
+++ b/Lang/Mathematica/Hash-join
@@ -0,0 +1 @@
+../../Task/Hash-join/Mathematica
\ No newline at end of file
diff --git a/Lang/Mathematica/Hickerson-series-of-almost-integers b/Lang/Mathematica/Hickerson-series-of-almost-integers
new file mode 120000
index 0000000000..9f6028ddca
--- /dev/null
+++ b/Lang/Mathematica/Hickerson-series-of-almost-integers
@@ -0,0 +1 @@
+../../Task/Hickerson-series-of-almost-integers/Mathematica
\ No newline at end of file
diff --git a/Lang/Mathematica/IBAN b/Lang/Mathematica/IBAN
new file mode 120000
index 0000000000..c22efea29b
--- /dev/null
+++ b/Lang/Mathematica/IBAN
@@ -0,0 +1 @@
+../../Task/IBAN/Mathematica
\ No newline at end of file
diff --git a/Lang/Mathematica/Iterated-digits-squaring b/Lang/Mathematica/Iterated-digits-squaring
new file mode 120000
index 0000000000..df0c581cb1
--- /dev/null
+++ b/Lang/Mathematica/Iterated-digits-squaring
@@ -0,0 +1 @@
+../../Task/Iterated-digits-squaring/Mathematica
\ No newline at end of file
diff --git a/Lang/Mathematica/Left-factorials b/Lang/Mathematica/Left-factorials
new file mode 120000
index 0000000000..c0e86fa5ff
--- /dev/null
+++ b/Lang/Mathematica/Left-factorials
@@ -0,0 +1 @@
+../../Task/Left-factorials/Mathematica
\ No newline at end of file
diff --git a/Lang/Mathematica/Longest-increasing-subsequence b/Lang/Mathematica/Longest-increasing-subsequence
new file mode 120000
index 0000000000..79dbfc410d
--- /dev/null
+++ b/Lang/Mathematica/Longest-increasing-subsequence
@@ -0,0 +1 @@
+../../Task/Longest-increasing-subsequence/Mathematica
\ No newline at end of file
diff --git a/Lang/Mathematica/Ludic-numbers b/Lang/Mathematica/Ludic-numbers
new file mode 120000
index 0000000000..6c06a5f749
--- /dev/null
+++ b/Lang/Mathematica/Ludic-numbers
@@ -0,0 +1 @@
+../../Task/Ludic-numbers/Mathematica
\ No newline at end of file
diff --git a/Lang/Mathematica/Magic-squares-of-odd-order b/Lang/Mathematica/Magic-squares-of-odd-order
new file mode 120000
index 0000000000..ca36c92094
--- /dev/null
+++ b/Lang/Mathematica/Magic-squares-of-odd-order
@@ -0,0 +1 @@
+../../Task/Magic-squares-of-odd-order/Mathematica
\ No newline at end of file
diff --git a/Lang/Mathematica/Make-directory-path b/Lang/Mathematica/Make-directory-path
new file mode 120000
index 0000000000..39760a0515
--- /dev/null
+++ b/Lang/Mathematica/Make-directory-path
@@ -0,0 +1 @@
+../../Task/Make-directory-path/Mathematica
\ No newline at end of file
diff --git a/Lang/Mathematica/Maximum-triangle-path-sum b/Lang/Mathematica/Maximum-triangle-path-sum
new file mode 120000
index 0000000000..071ce666a1
--- /dev/null
+++ b/Lang/Mathematica/Maximum-triangle-path-sum
@@ -0,0 +1 @@
+../../Task/Maximum-triangle-path-sum/Mathematica
\ No newline at end of file
diff --git a/Lang/Mathematica/Move-to-front-algorithm b/Lang/Mathematica/Move-to-front-algorithm
new file mode 120000
index 0000000000..362cc3d4a9
--- /dev/null
+++ b/Lang/Mathematica/Move-to-front-algorithm
@@ -0,0 +1 @@
+../../Task/Move-to-front-algorithm/Mathematica
\ No newline at end of file
diff --git a/Lang/Mathematica/Munching-squares b/Lang/Mathematica/Munching-squares
new file mode 120000
index 0000000000..25b3164de9
--- /dev/null
+++ b/Lang/Mathematica/Munching-squares
@@ -0,0 +1 @@
+../../Task/Munching-squares/Mathematica
\ No newline at end of file
diff --git a/Lang/Mathematica/Nth b/Lang/Mathematica/Nth
new file mode 120000
index 0000000000..49eeb660e6
--- /dev/null
+++ b/Lang/Mathematica/Nth
@@ -0,0 +1 @@
+../../Task/Nth/Mathematica
\ No newline at end of file
diff --git a/Lang/Mathematica/Paraffins b/Lang/Mathematica/Paraffins
new file mode 120000
index 0000000000..90a280c56f
--- /dev/null
+++ b/Lang/Mathematica/Paraffins
@@ -0,0 +1 @@
+../../Task/Paraffins/Mathematica
\ No newline at end of file
diff --git a/Lang/Mathematica/Permutations-Rank-of-a-permutation b/Lang/Mathematica/Permutations-Rank-of-a-permutation
new file mode 120000
index 0000000000..5fac2fd5e5
--- /dev/null
+++ b/Lang/Mathematica/Permutations-Rank-of-a-permutation
@@ -0,0 +1 @@
+../../Task/Permutations-Rank-of-a-permutation/Mathematica
\ No newline at end of file
diff --git a/Lang/Mathematica/Pernicious-numbers b/Lang/Mathematica/Pernicious-numbers
new file mode 120000
index 0000000000..b31bfda78d
--- /dev/null
+++ b/Lang/Mathematica/Pernicious-numbers
@@ -0,0 +1 @@
+../../Task/Pernicious-numbers/Mathematica
\ No newline at end of file
diff --git a/Lang/Mathematica/Phrase-reversals b/Lang/Mathematica/Phrase-reversals
new file mode 120000
index 0000000000..32b590ccc8
--- /dev/null
+++ b/Lang/Mathematica/Phrase-reversals
@@ -0,0 +1 @@
+../../Task/Phrase-reversals/Mathematica
\ No newline at end of file
diff --git a/Lang/Mathematica/Rep-string b/Lang/Mathematica/Rep-string
new file mode 120000
index 0000000000..af35600729
--- /dev/null
+++ b/Lang/Mathematica/Rep-string
@@ -0,0 +1 @@
+../../Task/Rep-string/Mathematica
\ No newline at end of file
diff --git a/Lang/Mathematica/Reverse-words-in-a-string b/Lang/Mathematica/Reverse-words-in-a-string
new file mode 120000
index 0000000000..fe66c5a215
--- /dev/null
+++ b/Lang/Mathematica/Reverse-words-in-a-string
@@ -0,0 +1 @@
+../../Task/Reverse-words-in-a-string/Mathematica
\ No newline at end of file
diff --git a/Lang/Mathematica/Runge-Kutta-method b/Lang/Mathematica/Runge-Kutta-method
new file mode 120000
index 0000000000..7765a175bf
--- /dev/null
+++ b/Lang/Mathematica/Runge-Kutta-method
@@ -0,0 +1 @@
+../../Task/Runge-Kutta-method/Mathematica
\ No newline at end of file
diff --git a/Lang/Mathematica/Semiprime b/Lang/Mathematica/Semiprime
new file mode 120000
index 0000000000..bd7ffab660
--- /dev/null
+++ b/Lang/Mathematica/Semiprime
@@ -0,0 +1 @@
+../../Task/Semiprime/Mathematica
\ No newline at end of file
diff --git a/Lang/Mathematica/Sparkline-in-unicode b/Lang/Mathematica/Sparkline-in-unicode
new file mode 120000
index 0000000000..3f115a3f31
--- /dev/null
+++ b/Lang/Mathematica/Sparkline-in-unicode
@@ -0,0 +1 @@
+../../Task/Sparkline-in-unicode/Mathematica
\ No newline at end of file
diff --git a/Lang/Mathematica/State-name-puzzle b/Lang/Mathematica/State-name-puzzle
new file mode 120000
index 0000000000..98c3563f9a
--- /dev/null
+++ b/Lang/Mathematica/State-name-puzzle
@@ -0,0 +1 @@
+../../Task/State-name-puzzle/Mathematica
\ No newline at end of file
diff --git a/Lang/Mathematica/Statistics-Basic b/Lang/Mathematica/Statistics-Basic
new file mode 120000
index 0000000000..5f3970f041
--- /dev/null
+++ b/Lang/Mathematica/Statistics-Basic
@@ -0,0 +1 @@
+../../Task/Statistics-Basic/Mathematica
\ No newline at end of file
diff --git a/Lang/Mathematica/String-append b/Lang/Mathematica/String-append
new file mode 120000
index 0000000000..34496abf47
--- /dev/null
+++ b/Lang/Mathematica/String-append
@@ -0,0 +1 @@
+../../Task/String-append/Mathematica
\ No newline at end of file
diff --git a/Lang/Mathematica/String-matching b/Lang/Mathematica/String-matching
new file mode 120000
index 0000000000..a59d47f610
--- /dev/null
+++ b/Lang/Mathematica/String-matching
@@ -0,0 +1 @@
+../../Task/String-matching/Mathematica
\ No newline at end of file
diff --git a/Lang/Mathematica/String-prepend b/Lang/Mathematica/String-prepend
new file mode 120000
index 0000000000..a17abfd3d6
--- /dev/null
+++ b/Lang/Mathematica/String-prepend
@@ -0,0 +1 @@
+../../Task/String-prepend/Mathematica
\ No newline at end of file
diff --git a/Lang/Mathematica/Sum-multiples-of-3-and-5 b/Lang/Mathematica/Sum-multiples-of-3-and-5
new file mode 120000
index 0000000000..c277018fa7
--- /dev/null
+++ b/Lang/Mathematica/Sum-multiples-of-3-and-5
@@ -0,0 +1 @@
+../../Task/Sum-multiples-of-3-and-5/Mathematica
\ No newline at end of file
diff --git a/Lang/Mathematica/The-Twelve-Days-of-Christmas b/Lang/Mathematica/The-Twelve-Days-of-Christmas
new file mode 120000
index 0000000000..5c6cc2bbc2
--- /dev/null
+++ b/Lang/Mathematica/The-Twelve-Days-of-Christmas
@@ -0,0 +1 @@
+../../Task/The-Twelve-Days-of-Christmas/Mathematica
\ No newline at end of file
diff --git a/Lang/Mathematica/Total-circles-area b/Lang/Mathematica/Total-circles-area
new file mode 120000
index 0000000000..d19f6f0351
--- /dev/null
+++ b/Lang/Mathematica/Total-circles-area
@@ -0,0 +1 @@
+../../Task/Total-circles-area/Mathematica
\ No newline at end of file
diff --git a/Lang/Mathematica/Unix-ls b/Lang/Mathematica/Unix-ls
new file mode 120000
index 0000000000..9896f7c289
--- /dev/null
+++ b/Lang/Mathematica/Unix-ls
@@ -0,0 +1 @@
+../../Task/Unix-ls/Mathematica
\ No newline at end of file
diff --git a/Lang/Mathematica/Zero-to-the-zero-power b/Lang/Mathematica/Zero-to-the-zero-power
new file mode 120000
index 0000000000..75d3a15443
--- /dev/null
+++ b/Lang/Mathematica/Zero-to-the-zero-power
@@ -0,0 +1 @@
+../../Task/Zero-to-the-zero-power/Mathematica
\ No newline at end of file
diff --git a/Lang/Mathematica/Zhang-Suen-thinning-algorithm b/Lang/Mathematica/Zhang-Suen-thinning-algorithm
new file mode 120000
index 0000000000..b4e306b1bc
--- /dev/null
+++ b/Lang/Mathematica/Zhang-Suen-thinning-algorithm
@@ -0,0 +1 @@
+../../Task/Zhang-Suen-thinning-algorithm/Mathematica
\ No newline at end of file
diff --git a/Lang/Maxima/Catamorphism b/Lang/Maxima/Catamorphism
new file mode 120000
index 0000000000..56c506399f
--- /dev/null
+++ b/Lang/Maxima/Catamorphism
@@ -0,0 +1 @@
+../../Task/Catamorphism/Maxima
\ No newline at end of file
diff --git a/Lang/Maxima/Circles-of-given-radius-through-two-points b/Lang/Maxima/Circles-of-given-radius-through-two-points
new file mode 120000
index 0000000000..28efaa2188
--- /dev/null
+++ b/Lang/Maxima/Circles-of-given-radius-through-two-points
@@ -0,0 +1 @@
+../../Task/Circles-of-given-radius-through-two-points/Maxima
\ No newline at end of file
diff --git a/Lang/Maxima/Magic-squares-of-odd-order b/Lang/Maxima/Magic-squares-of-odd-order
new file mode 120000
index 0000000000..29286345ce
--- /dev/null
+++ b/Lang/Maxima/Magic-squares-of-odd-order
@@ -0,0 +1 @@
+../../Task/Magic-squares-of-odd-order/Maxima
\ No newline at end of file
diff --git a/Lang/Maxima/Runge-Kutta-method b/Lang/Maxima/Runge-Kutta-method
new file mode 120000
index 0000000000..cf7692dba1
--- /dev/null
+++ b/Lang/Maxima/Runge-Kutta-method
@@ -0,0 +1 @@
+../../Task/Runge-Kutta-method/Maxima
\ No newline at end of file
diff --git a/Lang/Maxima/Sum-multiples-of-3-and-5 b/Lang/Maxima/Sum-multiples-of-3-and-5
new file mode 120000
index 0000000000..2f01c1a8f3
--- /dev/null
+++ b/Lang/Maxima/Sum-multiples-of-3-and-5
@@ -0,0 +1 @@
+../../Task/Sum-multiples-of-3-and-5/Maxima
\ No newline at end of file
diff --git a/Lang/Mercury/Amb b/Lang/Mercury/Amb
new file mode 120000
index 0000000000..b675232a0b
--- /dev/null
+++ b/Lang/Mercury/Amb
@@ -0,0 +1 @@
+../../Task/Amb/Mercury
\ No newline at end of file
diff --git a/Lang/Mercury/File-input-output b/Lang/Mercury/File-input-output
new file mode 120000
index 0000000000..67f3ab76c6
--- /dev/null
+++ b/Lang/Mercury/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/Mercury
\ No newline at end of file
diff --git a/Lang/Mercury/Generate-lower-case-ASCII-alphabet b/Lang/Mercury/Generate-lower-case-ASCII-alphabet
new file mode 120000
index 0000000000..978ccdfa07
--- /dev/null
+++ b/Lang/Mercury/Generate-lower-case-ASCII-alphabet
@@ -0,0 +1 @@
+../../Task/Generate-lower-case-ASCII-alphabet/Mercury
\ No newline at end of file
diff --git a/Lang/Mercury/String-prepend b/Lang/Mercury/String-prepend
new file mode 120000
index 0000000000..35f646fd44
--- /dev/null
+++ b/Lang/Mercury/String-prepend
@@ -0,0 +1 @@
+../../Task/String-prepend/Mercury
\ No newline at end of file
diff --git a/Lang/Modula-3/File-input-output b/Lang/Modula-3/File-input-output
new file mode 120000
index 0000000000..99dd9c210f
--- /dev/null
+++ b/Lang/Modula-3/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/Modula-3
\ No newline at end of file
diff --git a/Lang/Nemerle/Catamorphism b/Lang/Nemerle/Catamorphism
new file mode 120000
index 0000000000..149d2e11fc
--- /dev/null
+++ b/Lang/Nemerle/Catamorphism
@@ -0,0 +1 @@
+../../Task/Catamorphism/Nemerle
\ No newline at end of file
diff --git a/Lang/Nemerle/Closures-Value-capture b/Lang/Nemerle/Closures-Value-capture
new file mode 120000
index 0000000000..95ad73dbe4
--- /dev/null
+++ b/Lang/Nemerle/Closures-Value-capture
@@ -0,0 +1 @@
+../../Task/Closures-Value-capture/Nemerle
\ No newline at end of file
diff --git a/Lang/Nemerle/Currying b/Lang/Nemerle/Currying
new file mode 120000
index 0000000000..446a1930b4
--- /dev/null
+++ b/Lang/Nemerle/Currying
@@ -0,0 +1 @@
+../../Task/Currying/Nemerle
\ No newline at end of file
diff --git a/Lang/NetRexx/Amb b/Lang/NetRexx/Amb
new file mode 120000
index 0000000000..dfd3faea2e
--- /dev/null
+++ b/Lang/NetRexx/Amb
@@ -0,0 +1 @@
+../../Task/Amb/NetRexx
\ No newline at end of file
diff --git a/Lang/NetRexx/Benfords-law b/Lang/NetRexx/Benfords-law
new file mode 120000
index 0000000000..a3a90fde31
--- /dev/null
+++ b/Lang/NetRexx/Benfords-law
@@ -0,0 +1 @@
+../../Task/Benfords-law/NetRexx
\ No newline at end of file
diff --git a/Lang/NetRexx/CSV-data-manipulation b/Lang/NetRexx/CSV-data-manipulation
new file mode 120000
index 0000000000..43dd03d7c6
--- /dev/null
+++ b/Lang/NetRexx/CSV-data-manipulation
@@ -0,0 +1 @@
+../../Task/CSV-data-manipulation/NetRexx
\ No newline at end of file
diff --git a/Lang/NetRexx/Comma-quibbling b/Lang/NetRexx/Comma-quibbling
new file mode 120000
index 0000000000..0c65dfb3e5
--- /dev/null
+++ b/Lang/NetRexx/Comma-quibbling
@@ -0,0 +1 @@
+../../Task/Comma-quibbling/NetRexx
\ No newline at end of file
diff --git a/Lang/NetRexx/Convert-decimal-number-to-rational b/Lang/NetRexx/Convert-decimal-number-to-rational
new file mode 120000
index 0000000000..9dc22078a3
--- /dev/null
+++ b/Lang/NetRexx/Convert-decimal-number-to-rational
@@ -0,0 +1 @@
+../../Task/Convert-decimal-number-to-rational/NetRexx
\ No newline at end of file
diff --git a/Lang/NetRexx/Draw-a-clock b/Lang/NetRexx/Draw-a-clock
new file mode 120000
index 0000000000..6e5d8a539d
--- /dev/null
+++ b/Lang/NetRexx/Draw-a-clock
@@ -0,0 +1 @@
+../../Task/Draw-a-clock/NetRexx
\ No newline at end of file
diff --git a/Lang/NetRexx/File-input-output b/Lang/NetRexx/File-input-output
new file mode 120000
index 0000000000..30baa19804
--- /dev/null
+++ b/Lang/NetRexx/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/NetRexx
\ No newline at end of file
diff --git a/Lang/NetRexx/Quickselect-algorithm b/Lang/NetRexx/Quickselect-algorithm
new file mode 120000
index 0000000000..0a5a997709
--- /dev/null
+++ b/Lang/NetRexx/Quickselect-algorithm
@@ -0,0 +1 @@
+../../Task/Quickselect-algorithm/NetRexx
\ No newline at end of file
diff --git a/Lang/NetRexx/Rep-string b/Lang/NetRexx/Rep-string
new file mode 120000
index 0000000000..0b77b7c415
--- /dev/null
+++ b/Lang/NetRexx/Rep-string
@@ -0,0 +1 @@
+../../Task/Rep-string/NetRexx
\ No newline at end of file
diff --git a/Lang/NetRexx/Sparkline-in-unicode b/Lang/NetRexx/Sparkline-in-unicode
new file mode 120000
index 0000000000..b39724a28d
--- /dev/null
+++ b/Lang/NetRexx/Sparkline-in-unicode
@@ -0,0 +1 @@
+../../Task/Sparkline-in-unicode/NetRexx
\ No newline at end of file
diff --git a/Lang/NetRexx/String-append b/Lang/NetRexx/String-append
new file mode 120000
index 0000000000..65ecd1d816
--- /dev/null
+++ b/Lang/NetRexx/String-append
@@ -0,0 +1 @@
+../../Task/String-append/NetRexx
\ No newline at end of file
diff --git a/Lang/NetRexx/String-matching b/Lang/NetRexx/String-matching
new file mode 120000
index 0000000000..dc0f21e471
--- /dev/null
+++ b/Lang/NetRexx/String-matching
@@ -0,0 +1 @@
+../../Task/String-matching/NetRexx
\ No newline at end of file
diff --git a/Lang/NetRexx/String-prepend b/Lang/NetRexx/String-prepend
new file mode 120000
index 0000000000..bd3e42a239
--- /dev/null
+++ b/Lang/NetRexx/String-prepend
@@ -0,0 +1 @@
+../../Task/String-prepend/NetRexx
\ No newline at end of file
diff --git a/Lang/NetRexx/Sum-multiples-of-3-and-5 b/Lang/NetRexx/Sum-multiples-of-3-and-5
new file mode 120000
index 0000000000..b838b17361
--- /dev/null
+++ b/Lang/NetRexx/Sum-multiples-of-3-and-5
@@ -0,0 +1 @@
+../../Task/Sum-multiples-of-3-and-5/NetRexx
\ No newline at end of file
diff --git a/Lang/NetRexx/Zero-to-the-zero-power b/Lang/NetRexx/Zero-to-the-zero-power
new file mode 120000
index 0000000000..2a58d5df8e
--- /dev/null
+++ b/Lang/NetRexx/Zero-to-the-zero-power
@@ -0,0 +1 @@
+../../Task/Zero-to-the-zero-power/NetRexx
\ No newline at end of file
diff --git a/Lang/NewLISP/String-append b/Lang/NewLISP/String-append
new file mode 120000
index 0000000000..7b99a2fdfe
--- /dev/null
+++ b/Lang/NewLISP/String-append
@@ -0,0 +1 @@
+../../Task/String-append/NewLISP
\ No newline at end of file
diff --git a/Lang/NewLISP/String-matching b/Lang/NewLISP/String-matching
new file mode 120000
index 0000000000..d04e1f8519
--- /dev/null
+++ b/Lang/NewLISP/String-matching
@@ -0,0 +1 @@
+../../Task/String-matching/NewLISP
\ No newline at end of file
diff --git a/Lang/NewLISP/String-prepend b/Lang/NewLISP/String-prepend
new file mode 120000
index 0000000000..057b486adc
--- /dev/null
+++ b/Lang/NewLISP/String-prepend
@@ -0,0 +1 @@
+../../Task/String-prepend/NewLISP
\ No newline at end of file
diff --git a/Lang/OCaml/9-billion-names-of-God-the-integer b/Lang/OCaml/9-billion-names-of-God-the-integer
new file mode 120000
index 0000000000..be25c5525c
--- /dev/null
+++ b/Lang/OCaml/9-billion-names-of-God-the-integer
@@ -0,0 +1 @@
+../../Task/9-billion-names-of-God-the-integer/OCaml
\ No newline at end of file
diff --git a/Lang/OCaml/ABC-Problem b/Lang/OCaml/ABC-Problem
new file mode 120000
index 0000000000..4c10f2deed
--- /dev/null
+++ b/Lang/OCaml/ABC-Problem
@@ -0,0 +1 @@
+../../Task/ABC-Problem/OCaml
\ No newline at end of file
diff --git a/Lang/OCaml/Amb b/Lang/OCaml/Amb
new file mode 120000
index 0000000000..3592b8ebb7
--- /dev/null
+++ b/Lang/OCaml/Amb
@@ -0,0 +1 @@
+../../Task/Amb/OCaml
\ No newline at end of file
diff --git a/Lang/OCaml/Catamorphism b/Lang/OCaml/Catamorphism
new file mode 120000
index 0000000000..9f3725f63f
--- /dev/null
+++ b/Lang/OCaml/Catamorphism
@@ -0,0 +1 @@
+../../Task/Catamorphism/OCaml
\ No newline at end of file
diff --git a/Lang/OCaml/Chinese-remainder-theorem b/Lang/OCaml/Chinese-remainder-theorem
new file mode 120000
index 0000000000..62bc14ae6d
--- /dev/null
+++ b/Lang/OCaml/Chinese-remainder-theorem
@@ -0,0 +1 @@
+../../Task/Chinese-remainder-theorem/OCaml
\ No newline at end of file
diff --git a/Lang/OCaml/Closures-Value-capture b/Lang/OCaml/Closures-Value-capture
new file mode 120000
index 0000000000..7201a67a0b
--- /dev/null
+++ b/Lang/OCaml/Closures-Value-capture
@@ -0,0 +1 @@
+../../Task/Closures-Value-capture/OCaml
\ No newline at end of file
diff --git a/Lang/OCaml/Currying b/Lang/OCaml/Currying
new file mode 120000
index 0000000000..297f234743
--- /dev/null
+++ b/Lang/OCaml/Currying
@@ -0,0 +1 @@
+../../Task/Currying/OCaml
\ No newline at end of file
diff --git a/Lang/OCaml/Draw-a-clock b/Lang/OCaml/Draw-a-clock
new file mode 120000
index 0000000000..50b5f3954b
--- /dev/null
+++ b/Lang/OCaml/Draw-a-clock
@@ -0,0 +1 @@
+../../Task/Draw-a-clock/OCaml
\ No newline at end of file
diff --git a/Lang/OCaml/File-input-output b/Lang/OCaml/File-input-output
new file mode 120000
index 0000000000..74253df9e9
--- /dev/null
+++ b/Lang/OCaml/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/OCaml
\ No newline at end of file
diff --git a/Lang/OCaml/Find-the-last-Sunday-of-each-month b/Lang/OCaml/Find-the-last-Sunday-of-each-month
new file mode 120000
index 0000000000..104831ae57
--- /dev/null
+++ b/Lang/OCaml/Find-the-last-Sunday-of-each-month
@@ -0,0 +1 @@
+../../Task/Find-the-last-Sunday-of-each-month/OCaml
\ No newline at end of file
diff --git a/Lang/OCaml/Gaussian-elimination b/Lang/OCaml/Gaussian-elimination
new file mode 120000
index 0000000000..3dd1c9ca2a
--- /dev/null
+++ b/Lang/OCaml/Gaussian-elimination
@@ -0,0 +1 @@
+../../Task/Gaussian-elimination/OCaml
\ No newline at end of file
diff --git a/Lang/OCaml/Hash-join b/Lang/OCaml/Hash-join
new file mode 120000
index 0000000000..230c0f0a67
--- /dev/null
+++ b/Lang/OCaml/Hash-join
@@ -0,0 +1 @@
+../../Task/Hash-join/OCaml
\ No newline at end of file
diff --git a/Lang/OCaml/Hello-world-Newbie b/Lang/OCaml/Hello-world-Newbie
new file mode 120000
index 0000000000..2d49e72b49
--- /dev/null
+++ b/Lang/OCaml/Hello-world-Newbie
@@ -0,0 +1 @@
+../../Task/Hello-world-Newbie/OCaml
\ No newline at end of file
diff --git a/Lang/OCaml/Longest-increasing-subsequence b/Lang/OCaml/Longest-increasing-subsequence
new file mode 120000
index 0000000000..949f45aebb
--- /dev/null
+++ b/Lang/OCaml/Longest-increasing-subsequence
@@ -0,0 +1 @@
+../../Task/Longest-increasing-subsequence/OCaml
\ No newline at end of file
diff --git a/Lang/OCaml/Munching-squares b/Lang/OCaml/Munching-squares
new file mode 120000
index 0000000000..1e083007e3
--- /dev/null
+++ b/Lang/OCaml/Munching-squares
@@ -0,0 +1 @@
+../../Task/Munching-squares/OCaml
\ No newline at end of file
diff --git a/Lang/OCaml/Odd-word-problem b/Lang/OCaml/Odd-word-problem
new file mode 120000
index 0000000000..90b226c2fc
--- /dev/null
+++ b/Lang/OCaml/Odd-word-problem
@@ -0,0 +1 @@
+../../Task/Odd-word-problem/OCaml
\ No newline at end of file
diff --git a/Lang/OCaml/Old-lady-swallowed-a-fly b/Lang/OCaml/Old-lady-swallowed-a-fly
new file mode 120000
index 0000000000..5e6ce7181f
--- /dev/null
+++ b/Lang/OCaml/Old-lady-swallowed-a-fly
@@ -0,0 +1 @@
+../../Task/Old-lady-swallowed-a-fly/OCaml
\ No newline at end of file
diff --git a/Lang/OCaml/Quickselect-algorithm b/Lang/OCaml/Quickselect-algorithm
new file mode 120000
index 0000000000..551b9f88d5
--- /dev/null
+++ b/Lang/OCaml/Quickselect-algorithm
@@ -0,0 +1 @@
+../../Task/Quickselect-algorithm/OCaml
\ No newline at end of file
diff --git a/Lang/OCaml/Reverse-words-in-a-string b/Lang/OCaml/Reverse-words-in-a-string
new file mode 120000
index 0000000000..3096fa4457
--- /dev/null
+++ b/Lang/OCaml/Reverse-words-in-a-string
@@ -0,0 +1 @@
+../../Task/Reverse-words-in-a-string/OCaml
\ No newline at end of file
diff --git a/Lang/OCaml/Runge-Kutta-method b/Lang/OCaml/Runge-Kutta-method
new file mode 120000
index 0000000000..fd481581d9
--- /dev/null
+++ b/Lang/OCaml/Runge-Kutta-method
@@ -0,0 +1 @@
+../../Task/Runge-Kutta-method/OCaml
\ No newline at end of file
diff --git a/Lang/OCaml/String-append b/Lang/OCaml/String-append
new file mode 120000
index 0000000000..5af7f6308d
--- /dev/null
+++ b/Lang/OCaml/String-append
@@ -0,0 +1 @@
+../../Task/String-append/OCaml
\ No newline at end of file
diff --git a/Lang/OCaml/String-matching b/Lang/OCaml/String-matching
new file mode 120000
index 0000000000..dcc04f1157
--- /dev/null
+++ b/Lang/OCaml/String-matching
@@ -0,0 +1 @@
+../../Task/String-matching/OCaml
\ No newline at end of file
diff --git a/Lang/OCaml/Unix-ls b/Lang/OCaml/Unix-ls
new file mode 120000
index 0000000000..60674b2e28
--- /dev/null
+++ b/Lang/OCaml/Unix-ls
@@ -0,0 +1 @@
+../../Task/Unix-ls/OCaml
\ No newline at end of file
diff --git a/Lang/Oberon-2/ABC-Problem b/Lang/Oberon-2/ABC-Problem
new file mode 120000
index 0000000000..487a963377
--- /dev/null
+++ b/Lang/Oberon-2/ABC-Problem
@@ -0,0 +1 @@
+../../Task/ABC-Problem/Oberon-2
\ No newline at end of file
diff --git a/Lang/Oberon-2/Catamorphism b/Lang/Oberon-2/Catamorphism
new file mode 120000
index 0000000000..8935956c59
--- /dev/null
+++ b/Lang/Oberon-2/Catamorphism
@@ -0,0 +1 @@
+../../Task/Catamorphism/Oberon-2
\ No newline at end of file
diff --git a/Lang/Oberon-2/Hash-join b/Lang/Oberon-2/Hash-join
new file mode 120000
index 0000000000..9ee64b77ad
--- /dev/null
+++ b/Lang/Oberon-2/Hash-join
@@ -0,0 +1 @@
+../../Task/Hash-join/Oberon-2
\ No newline at end of file
diff --git a/Lang/Oberon-2/IBAN b/Lang/Oberon-2/IBAN
new file mode 120000
index 0000000000..19e3713959
--- /dev/null
+++ b/Lang/Oberon-2/IBAN
@@ -0,0 +1 @@
+../../Task/IBAN/Oberon-2
\ No newline at end of file
diff --git a/Lang/Oberon-2/Iterated-digits-squaring b/Lang/Oberon-2/Iterated-digits-squaring
new file mode 120000
index 0000000000..898342e155
--- /dev/null
+++ b/Lang/Oberon-2/Iterated-digits-squaring
@@ -0,0 +1 @@
+../../Task/Iterated-digits-squaring/Oberon-2
\ No newline at end of file
diff --git a/Lang/Objeck/Almost-prime b/Lang/Objeck/Almost-prime
new file mode 120000
index 0000000000..ef83636576
--- /dev/null
+++ b/Lang/Objeck/Almost-prime
@@ -0,0 +1 @@
+../../Task/Almost-prime/Objeck
\ No newline at end of file
diff --git a/Lang/Objeck/Casting-out-nines b/Lang/Objeck/Casting-out-nines
new file mode 120000
index 0000000000..5b986db8c1
--- /dev/null
+++ b/Lang/Objeck/Casting-out-nines
@@ -0,0 +1 @@
+../../Task/Casting-out-nines/Objeck
\ No newline at end of file
diff --git a/Lang/Objeck/File-input-output b/Lang/Objeck/File-input-output
new file mode 120000
index 0000000000..e27e517a0c
--- /dev/null
+++ b/Lang/Objeck/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/Objeck
\ No newline at end of file
diff --git a/Lang/Objeck/Generate-Chess960-starting-position b/Lang/Objeck/Generate-Chess960-starting-position
new file mode 120000
index 0000000000..c41de87ee9
--- /dev/null
+++ b/Lang/Objeck/Generate-Chess960-starting-position
@@ -0,0 +1 @@
+../../Task/Generate-Chess960-starting-position/Objeck
\ No newline at end of file
diff --git a/Lang/Objeck/Reverse-words-in-a-string b/Lang/Objeck/Reverse-words-in-a-string
new file mode 120000
index 0000000000..5ee8036699
--- /dev/null
+++ b/Lang/Objeck/Reverse-words-in-a-string
@@ -0,0 +1 @@
+../../Task/Reverse-words-in-a-string/Objeck
\ No newline at end of file
diff --git a/Lang/Objeck/Semiprime b/Lang/Objeck/Semiprime
new file mode 120000
index 0000000000..54db18ece4
--- /dev/null
+++ b/Lang/Objeck/Semiprime
@@ -0,0 +1 @@
+../../Task/Semiprime/Objeck
\ No newline at end of file
diff --git a/Lang/Objeck/String-append b/Lang/Objeck/String-append
new file mode 120000
index 0000000000..dc7d7ba78f
--- /dev/null
+++ b/Lang/Objeck/String-append
@@ -0,0 +1 @@
+../../Task/String-append/Objeck
\ No newline at end of file
diff --git a/Lang/Objeck/String-matching b/Lang/Objeck/String-matching
new file mode 120000
index 0000000000..aa8c5f776b
--- /dev/null
+++ b/Lang/Objeck/String-matching
@@ -0,0 +1 @@
+../../Task/String-matching/Objeck
\ No newline at end of file
diff --git a/Lang/Objeck/The-Twelve-Days-of-Christmas b/Lang/Objeck/The-Twelve-Days-of-Christmas
new file mode 120000
index 0000000000..ee425b2876
--- /dev/null
+++ b/Lang/Objeck/The-Twelve-Days-of-Christmas
@@ -0,0 +1 @@
+../../Task/The-Twelve-Days-of-Christmas/Objeck
\ No newline at end of file
diff --git a/Lang/Object-Pascal/File-input-output b/Lang/Object-Pascal/File-input-output
new file mode 120000
index 0000000000..ff749958c8
--- /dev/null
+++ b/Lang/Object-Pascal/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/Object-Pascal
\ No newline at end of file
diff --git a/Lang/Objective-C/Closures-Value-capture b/Lang/Objective-C/Closures-Value-capture
new file mode 120000
index 0000000000..c0220afd39
--- /dev/null
+++ b/Lang/Objective-C/Closures-Value-capture
@@ -0,0 +1 @@
+../../Task/Closures-Value-capture/Objective-C
\ No newline at end of file
diff --git a/Lang/Objective-C/File-input-output b/Lang/Objective-C/File-input-output
new file mode 120000
index 0000000000..405200e393
--- /dev/null
+++ b/Lang/Objective-C/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/Objective-C
\ No newline at end of file
diff --git a/Lang/Objective-C/Longest-increasing-subsequence b/Lang/Objective-C/Longest-increasing-subsequence
new file mode 120000
index 0000000000..e16b672177
--- /dev/null
+++ b/Lang/Objective-C/Longest-increasing-subsequence
@@ -0,0 +1 @@
+../../Task/Longest-increasing-subsequence/Objective-C
\ No newline at end of file
diff --git a/Lang/Objective-C/String-matching b/Lang/Objective-C/String-matching
new file mode 120000
index 0000000000..3d6270ec95
--- /dev/null
+++ b/Lang/Objective-C/String-matching
@@ -0,0 +1 @@
+../../Task/String-matching/Objective-C
\ No newline at end of file
diff --git a/Lang/Octave/File-input-output b/Lang/Octave/File-input-output
new file mode 120000
index 0000000000..dbcb780b98
--- /dev/null
+++ b/Lang/Octave/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/Octave
\ No newline at end of file
diff --git a/Lang/Octave/Munching-squares b/Lang/Octave/Munching-squares
new file mode 120000
index 0000000000..0b0c6a9c34
--- /dev/null
+++ b/Lang/Octave/Munching-squares
@@ -0,0 +1 @@
+../../Task/Munching-squares/Octave
\ No newline at end of file
diff --git a/Lang/Octave/Runge-Kutta-method b/Lang/Octave/Runge-Kutta-method
new file mode 120000
index 0000000000..0825b7a6af
--- /dev/null
+++ b/Lang/Octave/Runge-Kutta-method
@@ -0,0 +1 @@
+../../Task/Runge-Kutta-method/Octave
\ No newline at end of file
diff --git a/Lang/OpenEdge-Progress/Amb b/Lang/OpenEdge-Progress/Amb
new file mode 120000
index 0000000000..9070c0d2bf
--- /dev/null
+++ b/Lang/OpenEdge-Progress/Amb
@@ -0,0 +1 @@
+../../Task/Amb/OpenEdge-Progress
\ No newline at end of file
diff --git a/Lang/OpenEdge-Progress/File-input-output b/Lang/OpenEdge-Progress/File-input-output
new file mode 120000
index 0000000000..ed8b34d81d
--- /dev/null
+++ b/Lang/OpenEdge-Progress/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/OpenEdge-Progress
\ No newline at end of file
diff --git a/Lang/OxygenBasic/String-matching b/Lang/OxygenBasic/String-matching
new file mode 120000
index 0000000000..77a88ef8aa
--- /dev/null
+++ b/Lang/OxygenBasic/String-matching
@@ -0,0 +1 @@
+../../Task/String-matching/OxygenBasic
\ No newline at end of file
diff --git a/Lang/Oz/Amb b/Lang/Oz/Amb
new file mode 120000
index 0000000000..ff7b0de3df
--- /dev/null
+++ b/Lang/Oz/Amb
@@ -0,0 +1 @@
+../../Task/Amb/Oz
\ No newline at end of file
diff --git a/Lang/Oz/File-input-output b/Lang/Oz/File-input-output
new file mode 120000
index 0000000000..deff7ab902
--- /dev/null
+++ b/Lang/Oz/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/Oz
\ No newline at end of file
diff --git a/Lang/PARI-GP/AKS-test-for-primes b/Lang/PARI-GP/AKS-test-for-primes
new file mode 120000
index 0000000000..94689c8b08
--- /dev/null
+++ b/Lang/PARI-GP/AKS-test-for-primes
@@ -0,0 +1 @@
+../../Task/AKS-test-for-primes/PARI-GP
\ No newline at end of file
diff --git a/Lang/PARI-GP/Almost-prime b/Lang/PARI-GP/Almost-prime
new file mode 120000
index 0000000000..e1ccbd19e1
--- /dev/null
+++ b/Lang/PARI-GP/Almost-prime
@@ -0,0 +1 @@
+../../Task/Almost-prime/PARI-GP
\ No newline at end of file
diff --git a/Lang/PARI-GP/Amb b/Lang/PARI-GP/Amb
new file mode 120000
index 0000000000..e12273f564
--- /dev/null
+++ b/Lang/PARI-GP/Amb
@@ -0,0 +1 @@
+../../Task/Amb/PARI-GP
\ No newline at end of file
diff --git a/Lang/PARI-GP/Amicable-pairs b/Lang/PARI-GP/Amicable-pairs
new file mode 120000
index 0000000000..181fcf6220
--- /dev/null
+++ b/Lang/PARI-GP/Amicable-pairs
@@ -0,0 +1 @@
+../../Task/Amicable-pairs/PARI-GP
\ No newline at end of file
diff --git a/Lang/PARI-GP/Arithmetic-geometric-mean-Calculate-Pi b/Lang/PARI-GP/Arithmetic-geometric-mean-Calculate-Pi
new file mode 120000
index 0000000000..008fda87df
--- /dev/null
+++ b/Lang/PARI-GP/Arithmetic-geometric-mean-Calculate-Pi
@@ -0,0 +1 @@
+../../Task/Arithmetic-geometric-mean-Calculate-Pi/PARI-GP
\ No newline at end of file
diff --git a/Lang/PARI-GP/Benfords-law b/Lang/PARI-GP/Benfords-law
new file mode 120000
index 0000000000..7caec199eb
--- /dev/null
+++ b/Lang/PARI-GP/Benfords-law
@@ -0,0 +1 @@
+../../Task/Benfords-law/PARI-GP
\ No newline at end of file
diff --git a/Lang/PARI-GP/Bernoulli-numbers b/Lang/PARI-GP/Bernoulli-numbers
new file mode 120000
index 0000000000..025ea5e68d
--- /dev/null
+++ b/Lang/PARI-GP/Bernoulli-numbers
@@ -0,0 +1 @@
+../../Task/Bernoulli-numbers/PARI-GP
\ No newline at end of file
diff --git a/Lang/PARI-GP/Casting-out-nines b/Lang/PARI-GP/Casting-out-nines
new file mode 120000
index 0000000000..de8872c5f6
--- /dev/null
+++ b/Lang/PARI-GP/Casting-out-nines
@@ -0,0 +1 @@
+../../Task/Casting-out-nines/PARI-GP
\ No newline at end of file
diff --git a/Lang/PARI-GP/Catalan-numbers-Pascals-triangle b/Lang/PARI-GP/Catalan-numbers-Pascals-triangle
new file mode 120000
index 0000000000..a2390c9d95
--- /dev/null
+++ b/Lang/PARI-GP/Catalan-numbers-Pascals-triangle
@@ -0,0 +1 @@
+../../Task/Catalan-numbers-Pascals-triangle/PARI-GP
\ No newline at end of file
diff --git a/Lang/PARI-GP/Catamorphism b/Lang/PARI-GP/Catamorphism
new file mode 120000
index 0000000000..ae4bcde447
--- /dev/null
+++ b/Lang/PARI-GP/Catamorphism
@@ -0,0 +1 @@
+../../Task/Catamorphism/PARI-GP
\ No newline at end of file
diff --git a/Lang/PARI-GP/Chinese-remainder-theorem b/Lang/PARI-GP/Chinese-remainder-theorem
new file mode 120000
index 0000000000..af0671c7ba
--- /dev/null
+++ b/Lang/PARI-GP/Chinese-remainder-theorem
@@ -0,0 +1 @@
+../../Task/Chinese-remainder-theorem/PARI-GP
\ No newline at end of file
diff --git a/Lang/PARI-GP/Circles-of-given-radius-through-two-points b/Lang/PARI-GP/Circles-of-given-radius-through-two-points
new file mode 120000
index 0000000000..5ede4f3d83
--- /dev/null
+++ b/Lang/PARI-GP/Circles-of-given-radius-through-two-points
@@ -0,0 +1 @@
+../../Task/Circles-of-given-radius-through-two-points/PARI-GP
\ No newline at end of file
diff --git a/Lang/PARI-GP/Closures-Value-capture b/Lang/PARI-GP/Closures-Value-capture
new file mode 120000
index 0000000000..bc89edd361
--- /dev/null
+++ b/Lang/PARI-GP/Closures-Value-capture
@@ -0,0 +1 @@
+../../Task/Closures-Value-capture/PARI-GP
\ No newline at end of file
diff --git a/Lang/PARI-GP/Comma-quibbling b/Lang/PARI-GP/Comma-quibbling
new file mode 120000
index 0000000000..fbd06e9857
--- /dev/null
+++ b/Lang/PARI-GP/Comma-quibbling
@@ -0,0 +1 @@
+../../Task/Comma-quibbling/PARI-GP
\ No newline at end of file
diff --git a/Lang/PARI-GP/Conjugate-transpose b/Lang/PARI-GP/Conjugate-transpose
new file mode 120000
index 0000000000..0f1181015f
--- /dev/null
+++ b/Lang/PARI-GP/Conjugate-transpose
@@ -0,0 +1 @@
+../../Task/Conjugate-transpose/PARI-GP
\ No newline at end of file
diff --git a/Lang/PARI-GP/Convert-decimal-number-to-rational b/Lang/PARI-GP/Convert-decimal-number-to-rational
new file mode 120000
index 0000000000..613f3eec51
--- /dev/null
+++ b/Lang/PARI-GP/Convert-decimal-number-to-rational
@@ -0,0 +1 @@
+../../Task/Convert-decimal-number-to-rational/PARI-GP
\ No newline at end of file
diff --git a/Lang/PARI-GP/Currying b/Lang/PARI-GP/Currying
new file mode 120000
index 0000000000..9c63ecb021
--- /dev/null
+++ b/Lang/PARI-GP/Currying
@@ -0,0 +1 @@
+../../Task/Currying/PARI-GP
\ No newline at end of file
diff --git a/Lang/PARI-GP/Fibonacci-word b/Lang/PARI-GP/Fibonacci-word
new file mode 120000
index 0000000000..56d08e3da6
--- /dev/null
+++ b/Lang/PARI-GP/Fibonacci-word
@@ -0,0 +1 @@
+../../Task/Fibonacci-word/PARI-GP
\ No newline at end of file
diff --git a/Lang/PARI-GP/File-input-output b/Lang/PARI-GP/File-input-output
new file mode 120000
index 0000000000..83fb80715f
--- /dev/null
+++ b/Lang/PARI-GP/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/PARI-GP
\ No newline at end of file
diff --git a/Lang/PARI-GP/Gaussian-elimination b/Lang/PARI-GP/Gaussian-elimination
new file mode 120000
index 0000000000..cf75b804d4
--- /dev/null
+++ b/Lang/PARI-GP/Gaussian-elimination
@@ -0,0 +1 @@
+../../Task/Gaussian-elimination/PARI-GP
\ No newline at end of file
diff --git a/Lang/PARI-GP/Hello-world-Newbie b/Lang/PARI-GP/Hello-world-Newbie
new file mode 120000
index 0000000000..586689b802
--- /dev/null
+++ b/Lang/PARI-GP/Hello-world-Newbie
@@ -0,0 +1 @@
+../../Task/Hello-world-Newbie/PARI-GP
\ No newline at end of file
diff --git a/Lang/PARI-GP/Hickerson-series-of-almost-integers b/Lang/PARI-GP/Hickerson-series-of-almost-integers
new file mode 120000
index 0000000000..62a07508d9
--- /dev/null
+++ b/Lang/PARI-GP/Hickerson-series-of-almost-integers
@@ -0,0 +1 @@
+../../Task/Hickerson-series-of-almost-integers/PARI-GP
\ No newline at end of file
diff --git a/Lang/PARI-GP/Left-factorials b/Lang/PARI-GP/Left-factorials
new file mode 120000
index 0000000000..08f615a123
--- /dev/null
+++ b/Lang/PARI-GP/Left-factorials
@@ -0,0 +1 @@
+../../Task/Left-factorials/PARI-GP
\ No newline at end of file
diff --git a/Lang/PARI-GP/Machine-code b/Lang/PARI-GP/Machine-code
new file mode 120000
index 0000000000..e1f19f1487
--- /dev/null
+++ b/Lang/PARI-GP/Machine-code
@@ -0,0 +1 @@
+../../Task/Machine-code/PARI-GP
\ No newline at end of file
diff --git a/Lang/PARI-GP/Maximum-triangle-path-sum b/Lang/PARI-GP/Maximum-triangle-path-sum
new file mode 120000
index 0000000000..e474ab13e1
--- /dev/null
+++ b/Lang/PARI-GP/Maximum-triangle-path-sum
@@ -0,0 +1 @@
+../../Task/Maximum-triangle-path-sum/PARI-GP
\ No newline at end of file
diff --git a/Lang/PARI-GP/Nth b/Lang/PARI-GP/Nth
new file mode 120000
index 0000000000..d90628e0fa
--- /dev/null
+++ b/Lang/PARI-GP/Nth
@@ -0,0 +1 @@
+../../Task/Nth/PARI-GP
\ No newline at end of file
diff --git a/Lang/PARI-GP/Permutations-Rank-of-a-permutation b/Lang/PARI-GP/Permutations-Rank-of-a-permutation
new file mode 120000
index 0000000000..b6e8428c34
--- /dev/null
+++ b/Lang/PARI-GP/Permutations-Rank-of-a-permutation
@@ -0,0 +1 @@
+../../Task/Permutations-Rank-of-a-permutation/PARI-GP
\ No newline at end of file
diff --git a/Lang/PARI-GP/Pernicious-numbers b/Lang/PARI-GP/Pernicious-numbers
new file mode 120000
index 0000000000..fda86aaed1
--- /dev/null
+++ b/Lang/PARI-GP/Pernicious-numbers
@@ -0,0 +1 @@
+../../Task/Pernicious-numbers/PARI-GP
\ No newline at end of file
diff --git a/Lang/PARI-GP/Quickselect-algorithm b/Lang/PARI-GP/Quickselect-algorithm
new file mode 120000
index 0000000000..aa6abb363d
--- /dev/null
+++ b/Lang/PARI-GP/Quickselect-algorithm
@@ -0,0 +1 @@
+../../Task/Quickselect-algorithm/PARI-GP
\ No newline at end of file
diff --git a/Lang/PARI-GP/Rep-string b/Lang/PARI-GP/Rep-string
new file mode 120000
index 0000000000..fa8cbc6a68
--- /dev/null
+++ b/Lang/PARI-GP/Rep-string
@@ -0,0 +1 @@
+../../Task/Rep-string/PARI-GP
\ No newline at end of file
diff --git a/Lang/PARI-GP/Runge-Kutta-method b/Lang/PARI-GP/Runge-Kutta-method
new file mode 120000
index 0000000000..af60a0794a
--- /dev/null
+++ b/Lang/PARI-GP/Runge-Kutta-method
@@ -0,0 +1 @@
+../../Task/Runge-Kutta-method/PARI-GP
\ No newline at end of file
diff --git a/Lang/PARI-GP/Semiprime b/Lang/PARI-GP/Semiprime
new file mode 120000
index 0000000000..564a4f1d2e
--- /dev/null
+++ b/Lang/PARI-GP/Semiprime
@@ -0,0 +1 @@
+../../Task/Semiprime/PARI-GP
\ No newline at end of file
diff --git a/Lang/PARI-GP/Statistics-Basic b/Lang/PARI-GP/Statistics-Basic
new file mode 120000
index 0000000000..3f656ecd12
--- /dev/null
+++ b/Lang/PARI-GP/Statistics-Basic
@@ -0,0 +1 @@
+../../Task/Statistics-Basic/PARI-GP
\ No newline at end of file
diff --git a/Lang/PARI-GP/String-append b/Lang/PARI-GP/String-append
new file mode 120000
index 0000000000..d9199250f3
--- /dev/null
+++ b/Lang/PARI-GP/String-append
@@ -0,0 +1 @@
+../../Task/String-append/PARI-GP
\ No newline at end of file
diff --git a/Lang/PARI-GP/String-matching b/Lang/PARI-GP/String-matching
new file mode 120000
index 0000000000..33057c3f14
--- /dev/null
+++ b/Lang/PARI-GP/String-matching
@@ -0,0 +1 @@
+../../Task/String-matching/PARI-GP
\ No newline at end of file
diff --git a/Lang/PARI-GP/String-prepend b/Lang/PARI-GP/String-prepend
new file mode 120000
index 0000000000..5b9f77a644
--- /dev/null
+++ b/Lang/PARI-GP/String-prepend
@@ -0,0 +1 @@
+../../Task/String-prepend/PARI-GP
\ No newline at end of file
diff --git a/Lang/PARI-GP/Sum-multiples-of-3-and-5 b/Lang/PARI-GP/Sum-multiples-of-3-and-5
new file mode 120000
index 0000000000..33ef70f247
--- /dev/null
+++ b/Lang/PARI-GP/Sum-multiples-of-3-and-5
@@ -0,0 +1 @@
+../../Task/Sum-multiples-of-3-and-5/PARI-GP
\ No newline at end of file
diff --git a/Lang/PARI-GP/Unix-ls b/Lang/PARI-GP/Unix-ls
new file mode 120000
index 0000000000..d92d52cdb5
--- /dev/null
+++ b/Lang/PARI-GP/Unix-ls
@@ -0,0 +1 @@
+../../Task/Unix-ls/PARI-GP
\ No newline at end of file
diff --git a/Lang/PARI-GP/Zero-to-the-zero-power b/Lang/PARI-GP/Zero-to-the-zero-power
new file mode 120000
index 0000000000..c9fb19adc5
--- /dev/null
+++ b/Lang/PARI-GP/Zero-to-the-zero-power
@@ -0,0 +1 @@
+../../Task/Zero-to-the-zero-power/PARI-GP
\ No newline at end of file
diff --git a/Lang/PHP/ABC-Problem b/Lang/PHP/ABC-Problem
new file mode 120000
index 0000000000..df4af63a91
--- /dev/null
+++ b/Lang/PHP/ABC-Problem
@@ -0,0 +1 @@
+../../Task/ABC-Problem/PHP
\ No newline at end of file
diff --git a/Lang/PHP/CSV-data-manipulation b/Lang/PHP/CSV-data-manipulation
new file mode 120000
index 0000000000..06ec3d0de2
--- /dev/null
+++ b/Lang/PHP/CSV-data-manipulation
@@ -0,0 +1 @@
+../../Task/CSV-data-manipulation/PHP
\ No newline at end of file
diff --git a/Lang/PHP/Calendar---for-REAL-programmers b/Lang/PHP/Calendar---for-REAL-programmers
new file mode 120000
index 0000000000..b006582cb8
--- /dev/null
+++ b/Lang/PHP/Calendar---for-REAL-programmers
@@ -0,0 +1 @@
+../../Task/Calendar---for-REAL-programmers/PHP
\ No newline at end of file
diff --git a/Lang/PHP/Closures-Value-capture b/Lang/PHP/Closures-Value-capture
new file mode 120000
index 0000000000..3f713a283f
--- /dev/null
+++ b/Lang/PHP/Closures-Value-capture
@@ -0,0 +1 @@
+../../Task/Closures-Value-capture/PHP
\ No newline at end of file
diff --git a/Lang/PHP/Comma-quibbling b/Lang/PHP/Comma-quibbling
new file mode 120000
index 0000000000..385c5fb32b
--- /dev/null
+++ b/Lang/PHP/Comma-quibbling
@@ -0,0 +1 @@
+../../Task/Comma-quibbling/PHP
\ No newline at end of file
diff --git a/Lang/PHP/File-input-output b/Lang/PHP/File-input-output
new file mode 120000
index 0000000000..559e0ba563
--- /dev/null
+++ b/Lang/PHP/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/PHP
\ No newline at end of file
diff --git a/Lang/PHP/Gaussian-elimination b/Lang/PHP/Gaussian-elimination
new file mode 120000
index 0000000000..2b077ed50e
--- /dev/null
+++ b/Lang/PHP/Gaussian-elimination
@@ -0,0 +1 @@
+../../Task/Gaussian-elimination/PHP
\ No newline at end of file
diff --git a/Lang/PHP/Generate-lower-case-ASCII-alphabet b/Lang/PHP/Generate-lower-case-ASCII-alphabet
new file mode 120000
index 0000000000..043a46b1ec
--- /dev/null
+++ b/Lang/PHP/Generate-lower-case-ASCII-alphabet
@@ -0,0 +1 @@
+../../Task/Generate-lower-case-ASCII-alphabet/PHP
\ No newline at end of file
diff --git a/Lang/PHP/Hash-join b/Lang/PHP/Hash-join
new file mode 120000
index 0000000000..11f37f8502
--- /dev/null
+++ b/Lang/PHP/Hash-join
@@ -0,0 +1 @@
+../../Task/Hash-join/PHP
\ No newline at end of file
diff --git a/Lang/PHP/Longest-increasing-subsequence b/Lang/PHP/Longest-increasing-subsequence
new file mode 120000
index 0000000000..8f9d56b88b
--- /dev/null
+++ b/Lang/PHP/Longest-increasing-subsequence
@@ -0,0 +1 @@
+../../Task/Longest-increasing-subsequence/PHP
\ No newline at end of file
diff --git a/Lang/PHP/Munching-squares b/Lang/PHP/Munching-squares
new file mode 120000
index 0000000000..9dd55fe4b7
--- /dev/null
+++ b/Lang/PHP/Munching-squares
@@ -0,0 +1 @@
+../../Task/Munching-squares/PHP
\ No newline at end of file
diff --git a/Lang/PHP/Nth b/Lang/PHP/Nth
new file mode 120000
index 0000000000..c93e405229
--- /dev/null
+++ b/Lang/PHP/Nth
@@ -0,0 +1 @@
+../../Task/Nth/PHP
\ No newline at end of file
diff --git a/Lang/PHP/Odd-word-problem b/Lang/PHP/Odd-word-problem
new file mode 120000
index 0000000000..a697571a41
--- /dev/null
+++ b/Lang/PHP/Odd-word-problem
@@ -0,0 +1 @@
+../../Task/Odd-word-problem/PHP
\ No newline at end of file
diff --git a/Lang/PHP/Old-lady-swallowed-a-fly b/Lang/PHP/Old-lady-swallowed-a-fly
new file mode 120000
index 0000000000..e2220ede7e
--- /dev/null
+++ b/Lang/PHP/Old-lady-swallowed-a-fly
@@ -0,0 +1 @@
+../../Task/Old-lady-swallowed-a-fly/PHP
\ No newline at end of file
diff --git a/Lang/PHP/Phrase-reversals b/Lang/PHP/Phrase-reversals
new file mode 120000
index 0000000000..bc341c85d4
--- /dev/null
+++ b/Lang/PHP/Phrase-reversals
@@ -0,0 +1 @@
+../../Task/Phrase-reversals/PHP
\ No newline at end of file
diff --git a/Lang/PHP/String-matching b/Lang/PHP/String-matching
new file mode 120000
index 0000000000..c938ad1eef
--- /dev/null
+++ b/Lang/PHP/String-matching
@@ -0,0 +1 @@
+../../Task/String-matching/PHP
\ No newline at end of file
diff --git a/Lang/PHP/The-Twelve-Days-of-Christmas b/Lang/PHP/The-Twelve-Days-of-Christmas
new file mode 120000
index 0000000000..9933325423
--- /dev/null
+++ b/Lang/PHP/The-Twelve-Days-of-Christmas
@@ -0,0 +1 @@
+../../Task/The-Twelve-Days-of-Christmas/PHP
\ No newline at end of file
diff --git a/Lang/PHP/Zero-to-the-zero-power b/Lang/PHP/Zero-to-the-zero-power
new file mode 120000
index 0000000000..97e2b172a9
--- /dev/null
+++ b/Lang/PHP/Zero-to-the-zero-power
@@ -0,0 +1 @@
+../../Task/Zero-to-the-zero-power/PHP
\ No newline at end of file
diff --git a/Lang/PL-I/ABC-Problem b/Lang/PL-I/ABC-Problem
new file mode 120000
index 0000000000..b1ebeeae01
--- /dev/null
+++ b/Lang/PL-I/ABC-Problem
@@ -0,0 +1 @@
+../../Task/ABC-Problem/PL-I
\ No newline at end of file
diff --git a/Lang/PL-I/Abundant,-deficient-and-perfect-number-classifications b/Lang/PL-I/Abundant,-deficient-and-perfect-number-classifications
new file mode 120000
index 0000000000..49e2e05cff
--- /dev/null
+++ b/Lang/PL-I/Abundant,-deficient-and-perfect-number-classifications
@@ -0,0 +1 @@
+../../Task/Abundant,-deficient-and-perfect-number-classifications/PL-I
\ No newline at end of file
diff --git a/Lang/PL-I/Amb b/Lang/PL-I/Amb
new file mode 120000
index 0000000000..6fcbcc2f05
--- /dev/null
+++ b/Lang/PL-I/Amb
@@ -0,0 +1 @@
+../../Task/Amb/PL-I
\ No newline at end of file
diff --git a/Lang/PL-I/Amicable-pairs b/Lang/PL-I/Amicable-pairs
new file mode 120000
index 0000000000..4878d58c66
--- /dev/null
+++ b/Lang/PL-I/Amicable-pairs
@@ -0,0 +1 @@
+../../Task/Amicable-pairs/PL-I
\ No newline at end of file
diff --git a/Lang/PL-I/Benfords-law b/Lang/PL-I/Benfords-law
new file mode 120000
index 0000000000..488889958e
--- /dev/null
+++ b/Lang/PL-I/Benfords-law
@@ -0,0 +1 @@
+../../Task/Benfords-law/PL-I
\ No newline at end of file
diff --git a/Lang/PL-I/Bernoulli-numbers b/Lang/PL-I/Bernoulli-numbers
new file mode 120000
index 0000000000..c4b5985e29
--- /dev/null
+++ b/Lang/PL-I/Bernoulli-numbers
@@ -0,0 +1 @@
+../../Task/Bernoulli-numbers/PL-I
\ No newline at end of file
diff --git a/Lang/PL-I/CSV-data-manipulation b/Lang/PL-I/CSV-data-manipulation
new file mode 120000
index 0000000000..8a92f95b98
--- /dev/null
+++ b/Lang/PL-I/CSV-data-manipulation
@@ -0,0 +1 @@
+../../Task/CSV-data-manipulation/PL-I
\ No newline at end of file
diff --git a/Lang/PL-I/Calendar---for-REAL-programmers b/Lang/PL-I/Calendar---for-REAL-programmers
new file mode 120000
index 0000000000..b8e65a756b
--- /dev/null
+++ b/Lang/PL-I/Calendar---for-REAL-programmers
@@ -0,0 +1 @@
+../../Task/Calendar---for-REAL-programmers/PL-I
\ No newline at end of file
diff --git a/Lang/PL-I/Circles-of-given-radius-through-two-points b/Lang/PL-I/Circles-of-given-radius-through-two-points
new file mode 120000
index 0000000000..469ca17064
--- /dev/null
+++ b/Lang/PL-I/Circles-of-given-radius-through-two-points
@@ -0,0 +1 @@
+../../Task/Circles-of-given-radius-through-two-points/PL-I
\ No newline at end of file
diff --git a/Lang/PL-I/Comma-quibbling b/Lang/PL-I/Comma-quibbling
new file mode 120000
index 0000000000..527348de9a
--- /dev/null
+++ b/Lang/PL-I/Comma-quibbling
@@ -0,0 +1 @@
+../../Task/Comma-quibbling/PL-I
\ No newline at end of file
diff --git a/Lang/PL-I/Conjugate-transpose b/Lang/PL-I/Conjugate-transpose
new file mode 120000
index 0000000000..ea944b0cc2
--- /dev/null
+++ b/Lang/PL-I/Conjugate-transpose
@@ -0,0 +1 @@
+../../Task/Conjugate-transpose/PL-I
\ No newline at end of file
diff --git a/Lang/PL-I/Convert-decimal-number-to-rational b/Lang/PL-I/Convert-decimal-number-to-rational
new file mode 120000
index 0000000000..4b42450899
--- /dev/null
+++ b/Lang/PL-I/Convert-decimal-number-to-rational
@@ -0,0 +1 @@
+../../Task/Convert-decimal-number-to-rational/PL-I
\ No newline at end of file
diff --git a/Lang/PL-I/Digital-root-Multiplicative-digital-root b/Lang/PL-I/Digital-root-Multiplicative-digital-root
new file mode 120000
index 0000000000..3476510c01
--- /dev/null
+++ b/Lang/PL-I/Digital-root-Multiplicative-digital-root
@@ -0,0 +1 @@
+../../Task/Digital-root-Multiplicative-digital-root/PL-I
\ No newline at end of file
diff --git a/Lang/PL-I/Fibonacci-word b/Lang/PL-I/Fibonacci-word
new file mode 120000
index 0000000000..90655a4c89
--- /dev/null
+++ b/Lang/PL-I/Fibonacci-word
@@ -0,0 +1 @@
+../../Task/Fibonacci-word/PL-I
\ No newline at end of file
diff --git a/Lang/PL-I/File-input-output b/Lang/PL-I/File-input-output
new file mode 120000
index 0000000000..9d95cf2d54
--- /dev/null
+++ b/Lang/PL-I/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/PL-I
\ No newline at end of file
diff --git a/Lang/PL-I/Flipping-bits-game b/Lang/PL-I/Flipping-bits-game
new file mode 120000
index 0000000000..fbeae2d2ca
--- /dev/null
+++ b/Lang/PL-I/Flipping-bits-game
@@ -0,0 +1 @@
+../../Task/Flipping-bits-game/PL-I
\ No newline at end of file
diff --git a/Lang/PL-I/Gaussian-elimination b/Lang/PL-I/Gaussian-elimination
new file mode 120000
index 0000000000..32e458e878
--- /dev/null
+++ b/Lang/PL-I/Gaussian-elimination
@@ -0,0 +1 @@
+../../Task/Gaussian-elimination/PL-I
\ No newline at end of file
diff --git a/Lang/PL-I/Generate-lower-case-ASCII-alphabet b/Lang/PL-I/Generate-lower-case-ASCII-alphabet
new file mode 120000
index 0000000000..6b10005a18
--- /dev/null
+++ b/Lang/PL-I/Generate-lower-case-ASCII-alphabet
@@ -0,0 +1 @@
+../../Task/Generate-lower-case-ASCII-alphabet/PL-I
\ No newline at end of file
diff --git a/Lang/PL-I/Hickerson-series-of-almost-integers b/Lang/PL-I/Hickerson-series-of-almost-integers
new file mode 120000
index 0000000000..fd9299b8c0
--- /dev/null
+++ b/Lang/PL-I/Hickerson-series-of-almost-integers
@@ -0,0 +1 @@
+../../Task/Hickerson-series-of-almost-integers/PL-I
\ No newline at end of file
diff --git a/Lang/PL-I/Left-factorials b/Lang/PL-I/Left-factorials
new file mode 120000
index 0000000000..408a8ddc9c
--- /dev/null
+++ b/Lang/PL-I/Left-factorials
@@ -0,0 +1 @@
+../../Task/Left-factorials/PL-I
\ No newline at end of file
diff --git a/Lang/PL-I/Ludic-numbers b/Lang/PL-I/Ludic-numbers
new file mode 120000
index 0000000000..2716f3233c
--- /dev/null
+++ b/Lang/PL-I/Ludic-numbers
@@ -0,0 +1 @@
+../../Task/Ludic-numbers/PL-I
\ No newline at end of file
diff --git a/Lang/PL-I/Magic-squares-of-odd-order b/Lang/PL-I/Magic-squares-of-odd-order
new file mode 120000
index 0000000000..ecc979f65b
--- /dev/null
+++ b/Lang/PL-I/Magic-squares-of-odd-order
@@ -0,0 +1 @@
+../../Task/Magic-squares-of-odd-order/PL-I
\ No newline at end of file
diff --git a/Lang/PL-I/Move-to-front-algorithm b/Lang/PL-I/Move-to-front-algorithm
new file mode 120000
index 0000000000..b1aa0d0ae4
--- /dev/null
+++ b/Lang/PL-I/Move-to-front-algorithm
@@ -0,0 +1 @@
+../../Task/Move-to-front-algorithm/PL-I
\ No newline at end of file
diff --git a/Lang/PL-I/Munching-squares b/Lang/PL-I/Munching-squares
new file mode 120000
index 0000000000..ad12976dc3
--- /dev/null
+++ b/Lang/PL-I/Munching-squares
@@ -0,0 +1 @@
+../../Task/Munching-squares/PL-I
\ No newline at end of file
diff --git a/Lang/PL-I/Nth b/Lang/PL-I/Nth
new file mode 120000
index 0000000000..c03d2050ee
--- /dev/null
+++ b/Lang/PL-I/Nth
@@ -0,0 +1 @@
+../../Task/Nth/PL-I
\ No newline at end of file
diff --git a/Lang/PL-I/Odd-word-problem b/Lang/PL-I/Odd-word-problem
new file mode 120000
index 0000000000..9e8156a683
--- /dev/null
+++ b/Lang/PL-I/Odd-word-problem
@@ -0,0 +1 @@
+../../Task/Odd-word-problem/PL-I
\ No newline at end of file
diff --git a/Lang/PL-I/Quickselect-algorithm b/Lang/PL-I/Quickselect-algorithm
new file mode 120000
index 0000000000..bce3231855
--- /dev/null
+++ b/Lang/PL-I/Quickselect-algorithm
@@ -0,0 +1 @@
+../../Task/Quickselect-algorithm/PL-I
\ No newline at end of file
diff --git a/Lang/PL-I/Rep-string b/Lang/PL-I/Rep-string
new file mode 120000
index 0000000000..cecd481c91
--- /dev/null
+++ b/Lang/PL-I/Rep-string
@@ -0,0 +1 @@
+../../Task/Rep-string/PL-I
\ No newline at end of file
diff --git a/Lang/PL-I/Reverse-words-in-a-string b/Lang/PL-I/Reverse-words-in-a-string
new file mode 120000
index 0000000000..911f72fb99
--- /dev/null
+++ b/Lang/PL-I/Reverse-words-in-a-string
@@ -0,0 +1 @@
+../../Task/Reverse-words-in-a-string/PL-I
\ No newline at end of file
diff --git a/Lang/PL-I/Runge-Kutta-method b/Lang/PL-I/Runge-Kutta-method
new file mode 120000
index 0000000000..6a97095dab
--- /dev/null
+++ b/Lang/PL-I/Runge-Kutta-method
@@ -0,0 +1 @@
+../../Task/Runge-Kutta-method/PL-I
\ No newline at end of file
diff --git a/Lang/PL-I/Semiprime b/Lang/PL-I/Semiprime
new file mode 120000
index 0000000000..b9ce76e901
--- /dev/null
+++ b/Lang/PL-I/Semiprime
@@ -0,0 +1 @@
+../../Task/Semiprime/PL-I
\ No newline at end of file
diff --git a/Lang/PL-I/Statistics-Basic b/Lang/PL-I/Statistics-Basic
new file mode 120000
index 0000000000..0dfde08474
--- /dev/null
+++ b/Lang/PL-I/Statistics-Basic
@@ -0,0 +1 @@
+../../Task/Statistics-Basic/PL-I
\ No newline at end of file
diff --git a/Lang/PL-I/String-append b/Lang/PL-I/String-append
new file mode 120000
index 0000000000..66440adbdd
--- /dev/null
+++ b/Lang/PL-I/String-append
@@ -0,0 +1 @@
+../../Task/String-append/PL-I
\ No newline at end of file
diff --git a/Lang/PL-I/String-matching b/Lang/PL-I/String-matching
new file mode 120000
index 0000000000..3e035c128e
--- /dev/null
+++ b/Lang/PL-I/String-matching
@@ -0,0 +1 @@
+../../Task/String-matching/PL-I
\ No newline at end of file
diff --git a/Lang/PL-I/String-prepend b/Lang/PL-I/String-prepend
new file mode 120000
index 0000000000..68753f5def
--- /dev/null
+++ b/Lang/PL-I/String-prepend
@@ -0,0 +1 @@
+../../Task/String-prepend/PL-I
\ No newline at end of file
diff --git a/Lang/PL-I/Sum-multiples-of-3-and-5 b/Lang/PL-I/Sum-multiples-of-3-and-5
new file mode 120000
index 0000000000..620becf916
--- /dev/null
+++ b/Lang/PL-I/Sum-multiples-of-3-and-5
@@ -0,0 +1 @@
+../../Task/Sum-multiples-of-3-and-5/PL-I
\ No newline at end of file
diff --git a/Lang/PL-I/Zero-to-the-zero-power b/Lang/PL-I/Zero-to-the-zero-power
new file mode 120000
index 0000000000..edd5dcc285
--- /dev/null
+++ b/Lang/PL-I/Zero-to-the-zero-power
@@ -0,0 +1 @@
+../../Task/Zero-to-the-zero-power/PL-I
\ No newline at end of file
diff --git a/Lang/PL-I/Zhang-Suen-thinning-algorithm b/Lang/PL-I/Zhang-Suen-thinning-algorithm
new file mode 120000
index 0000000000..453e819f9d
--- /dev/null
+++ b/Lang/PL-I/Zhang-Suen-thinning-algorithm
@@ -0,0 +1 @@
+../../Task/Zhang-Suen-thinning-algorithm/PL-I
\ No newline at end of file
diff --git a/Lang/PL-pgSQL/Benfords-law b/Lang/PL-pgSQL/Benfords-law
new file mode 120000
index 0000000000..8b358dc012
--- /dev/null
+++ b/Lang/PL-pgSQL/Benfords-law
@@ -0,0 +1 @@
+../../Task/Benfords-law/PL-pgSQL
\ No newline at end of file
diff --git a/Lang/Pascal/AKS-test-for-primes b/Lang/Pascal/AKS-test-for-primes
new file mode 120000
index 0000000000..46dfd6f69f
--- /dev/null
+++ b/Lang/Pascal/AKS-test-for-primes
@@ -0,0 +1 @@
+../../Task/AKS-test-for-primes/Pascal
\ No newline at end of file
diff --git a/Lang/Pascal/Abundant,-deficient-and-perfect-number-classifications b/Lang/Pascal/Abundant,-deficient-and-perfect-number-classifications
new file mode 120000
index 0000000000..1c39623193
--- /dev/null
+++ b/Lang/Pascal/Abundant,-deficient-and-perfect-number-classifications
@@ -0,0 +1 @@
+../../Task/Abundant,-deficient-and-perfect-number-classifications/Pascal
\ No newline at end of file
diff --git a/Lang/Pascal/Almost-prime b/Lang/Pascal/Almost-prime
new file mode 120000
index 0000000000..335df9213f
--- /dev/null
+++ b/Lang/Pascal/Almost-prime
@@ -0,0 +1 @@
+../../Task/Almost-prime/Pascal
\ No newline at end of file
diff --git a/Lang/Pascal/Amicable-pairs b/Lang/Pascal/Amicable-pairs
new file mode 120000
index 0000000000..2327835868
--- /dev/null
+++ b/Lang/Pascal/Amicable-pairs
@@ -0,0 +1 @@
+../../Task/Amicable-pairs/Pascal
\ No newline at end of file
diff --git a/Lang/Pascal/Catalan-numbers-Pascals-triangle b/Lang/Pascal/Catalan-numbers-Pascals-triangle
new file mode 120000
index 0000000000..227c925309
--- /dev/null
+++ b/Lang/Pascal/Catalan-numbers-Pascals-triangle
@@ -0,0 +1 @@
+../../Task/Catalan-numbers-Pascals-triangle/Pascal
\ No newline at end of file
diff --git a/Lang/Pascal/Catamorphism b/Lang/Pascal/Catamorphism
new file mode 120000
index 0000000000..9733b3bd23
--- /dev/null
+++ b/Lang/Pascal/Catamorphism
@@ -0,0 +1 @@
+../../Task/Catamorphism/Pascal
\ No newline at end of file
diff --git a/Lang/Pascal/Extensible-prime-generator b/Lang/Pascal/Extensible-prime-generator
new file mode 120000
index 0000000000..ed11539b96
--- /dev/null
+++ b/Lang/Pascal/Extensible-prime-generator
@@ -0,0 +1 @@
+../../Task/Extensible-prime-generator/Pascal
\ No newline at end of file
diff --git a/Lang/Pascal/Fibonacci-word b/Lang/Pascal/Fibonacci-word
new file mode 120000
index 0000000000..9b38efff15
--- /dev/null
+++ b/Lang/Pascal/Fibonacci-word
@@ -0,0 +1 @@
+../../Task/Fibonacci-word/Pascal
\ No newline at end of file
diff --git a/Lang/Pascal/Iterated-digits-squaring b/Lang/Pascal/Iterated-digits-squaring
new file mode 120000
index 0000000000..d682587f7b
--- /dev/null
+++ b/Lang/Pascal/Iterated-digits-squaring
@@ -0,0 +1 @@
+../../Task/Iterated-digits-squaring/Pascal
\ No newline at end of file
diff --git a/Lang/Pascal/Machine-code b/Lang/Pascal/Machine-code
new file mode 120000
index 0000000000..cfa9f5777e
--- /dev/null
+++ b/Lang/Pascal/Machine-code
@@ -0,0 +1 @@
+../../Task/Machine-code/Pascal
\ No newline at end of file
diff --git a/Lang/Pascal/Maximum-triangle-path-sum b/Lang/Pascal/Maximum-triangle-path-sum
new file mode 120000
index 0000000000..046175babd
--- /dev/null
+++ b/Lang/Pascal/Maximum-triangle-path-sum
@@ -0,0 +1 @@
+../../Task/Maximum-triangle-path-sum/Pascal
\ No newline at end of file
diff --git a/Lang/Pascal/Narcissistic-decimal-number b/Lang/Pascal/Narcissistic-decimal-number
new file mode 120000
index 0000000000..328576767c
--- /dev/null
+++ b/Lang/Pascal/Narcissistic-decimal-number
@@ -0,0 +1 @@
+../../Task/Narcissistic-decimal-number/Pascal
\ No newline at end of file
diff --git a/Lang/Pascal/Paraffins b/Lang/Pascal/Paraffins
new file mode 120000
index 0000000000..5352a21fd0
--- /dev/null
+++ b/Lang/Pascal/Paraffins
@@ -0,0 +1 @@
+../../Task/Paraffins/Pascal
\ No newline at end of file
diff --git a/Lang/Pascal/Pernicious-numbers b/Lang/Pascal/Pernicious-numbers
new file mode 120000
index 0000000000..ac531c89fe
--- /dev/null
+++ b/Lang/Pascal/Pernicious-numbers
@@ -0,0 +1 @@
+../../Task/Pernicious-numbers/Pascal
\ No newline at end of file
diff --git a/Lang/Pascal/Runge-Kutta-method b/Lang/Pascal/Runge-Kutta-method
new file mode 120000
index 0000000000..dde7302ce6
--- /dev/null
+++ b/Lang/Pascal/Runge-Kutta-method
@@ -0,0 +1 @@
+../../Task/Runge-Kutta-method/Pascal
\ No newline at end of file
diff --git a/Lang/Pascal/Semiprime b/Lang/Pascal/Semiprime
new file mode 120000
index 0000000000..07386a3af1
--- /dev/null
+++ b/Lang/Pascal/Semiprime
@@ -0,0 +1 @@
+../../Task/Semiprime/Pascal
\ No newline at end of file
diff --git a/Lang/Pascal/String-append b/Lang/Pascal/String-append
new file mode 120000
index 0000000000..31a65ab6bd
--- /dev/null
+++ b/Lang/Pascal/String-append
@@ -0,0 +1 @@
+../../Task/String-append/Pascal
\ No newline at end of file
diff --git a/Lang/Pascal/String-prepend b/Lang/Pascal/String-prepend
new file mode 120000
index 0000000000..6eee77decd
--- /dev/null
+++ b/Lang/Pascal/String-prepend
@@ -0,0 +1 @@
+../../Task/String-prepend/Pascal
\ No newline at end of file
diff --git a/Lang/Pascal/Sum-multiples-of-3-and-5 b/Lang/Pascal/Sum-multiples-of-3-and-5
new file mode 120000
index 0000000000..e3ef27b1d3
--- /dev/null
+++ b/Lang/Pascal/Sum-multiples-of-3-and-5
@@ -0,0 +1 @@
+../../Task/Sum-multiples-of-3-and-5/Pascal
\ No newline at end of file
diff --git a/Lang/Pascal/The-ISAAC-Cipher b/Lang/Pascal/The-ISAAC-Cipher
new file mode 120000
index 0000000000..0851f3f231
--- /dev/null
+++ b/Lang/Pascal/The-ISAAC-Cipher
@@ -0,0 +1 @@
+../../Task/The-ISAAC-Cipher/Pascal
\ No newline at end of file
diff --git a/Lang/Perl-6/9-billion-names-of-God-the-integer b/Lang/Perl-6/9-billion-names-of-God-the-integer
new file mode 120000
index 0000000000..2bec27dcc3
--- /dev/null
+++ b/Lang/Perl-6/9-billion-names-of-God-the-integer
@@ -0,0 +1 @@
+../../Task/9-billion-names-of-God-the-integer/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/ABC-Problem b/Lang/Perl-6/ABC-Problem
new file mode 120000
index 0000000000..ae839c1142
--- /dev/null
+++ b/Lang/Perl-6/ABC-Problem
@@ -0,0 +1 @@
+../../Task/ABC-Problem/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/AKS-test-for-primes b/Lang/Perl-6/AKS-test-for-primes
new file mode 120000
index 0000000000..912ac1fc1b
--- /dev/null
+++ b/Lang/Perl-6/AKS-test-for-primes
@@ -0,0 +1 @@
+../../Task/AKS-test-for-primes/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/Abundant,-deficient-and-perfect-number-classifications b/Lang/Perl-6/Abundant,-deficient-and-perfect-number-classifications
new file mode 120000
index 0000000000..367edc4636
--- /dev/null
+++ b/Lang/Perl-6/Abundant,-deficient-and-perfect-number-classifications
@@ -0,0 +1 @@
+../../Task/Abundant,-deficient-and-perfect-number-classifications/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/Aliquot-sequence-classifications b/Lang/Perl-6/Aliquot-sequence-classifications
new file mode 120000
index 0000000000..ca12c5f4bb
--- /dev/null
+++ b/Lang/Perl-6/Aliquot-sequence-classifications
@@ -0,0 +1 @@
+../../Task/Aliquot-sequence-classifications/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/Almost-prime b/Lang/Perl-6/Almost-prime
new file mode 120000
index 0000000000..56d2103db4
--- /dev/null
+++ b/Lang/Perl-6/Almost-prime
@@ -0,0 +1 @@
+../../Task/Almost-prime/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/Amb b/Lang/Perl-6/Amb
new file mode 120000
index 0000000000..35952d67ef
--- /dev/null
+++ b/Lang/Perl-6/Amb
@@ -0,0 +1 @@
+../../Task/Amb/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/Amicable-pairs b/Lang/Perl-6/Amicable-pairs
new file mode 120000
index 0000000000..a4ca4d0f7a
--- /dev/null
+++ b/Lang/Perl-6/Amicable-pairs
@@ -0,0 +1 @@
+../../Task/Amicable-pairs/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/Arithmetic-geometric-mean-Calculate-Pi b/Lang/Perl-6/Arithmetic-geometric-mean-Calculate-Pi
new file mode 120000
index 0000000000..6bacdecfde
--- /dev/null
+++ b/Lang/Perl-6/Arithmetic-geometric-mean-Calculate-Pi
@@ -0,0 +1 @@
+../../Task/Arithmetic-geometric-mean-Calculate-Pi/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/Benfords-law b/Lang/Perl-6/Benfords-law
new file mode 120000
index 0000000000..b184228af5
--- /dev/null
+++ b/Lang/Perl-6/Benfords-law
@@ -0,0 +1 @@
+../../Task/Benfords-law/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/Bernoulli-numbers b/Lang/Perl-6/Bernoulli-numbers
new file mode 120000
index 0000000000..95f207256f
--- /dev/null
+++ b/Lang/Perl-6/Bernoulli-numbers
@@ -0,0 +1 @@
+../../Task/Bernoulli-numbers/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/Bitcoin-public-point-to-address b/Lang/Perl-6/Bitcoin-public-point-to-address
new file mode 120000
index 0000000000..9b7799b4c2
--- /dev/null
+++ b/Lang/Perl-6/Bitcoin-public-point-to-address
@@ -0,0 +1 @@
+../../Task/Bitcoin-public-point-to-address/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/CSV-data-manipulation b/Lang/Perl-6/CSV-data-manipulation
new file mode 120000
index 0000000000..ac4febeb9a
--- /dev/null
+++ b/Lang/Perl-6/CSV-data-manipulation
@@ -0,0 +1 @@
+../../Task/CSV-data-manipulation/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/Calendar---for-REAL-programmers b/Lang/Perl-6/Calendar---for-REAL-programmers
new file mode 120000
index 0000000000..d038320b31
--- /dev/null
+++ b/Lang/Perl-6/Calendar---for-REAL-programmers
@@ -0,0 +1 @@
+../../Task/Calendar---for-REAL-programmers/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/Casting-out-nines b/Lang/Perl-6/Casting-out-nines
new file mode 120000
index 0000000000..4bb0677dab
--- /dev/null
+++ b/Lang/Perl-6/Casting-out-nines
@@ -0,0 +1 @@
+../../Task/Casting-out-nines/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/Catalan-numbers-Pascals-triangle b/Lang/Perl-6/Catalan-numbers-Pascals-triangle
new file mode 120000
index 0000000000..79e1e9624e
--- /dev/null
+++ b/Lang/Perl-6/Catalan-numbers-Pascals-triangle
@@ -0,0 +1 @@
+../../Task/Catalan-numbers-Pascals-triangle/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/Catamorphism b/Lang/Perl-6/Catamorphism
new file mode 120000
index 0000000000..2aefbacd94
--- /dev/null
+++ b/Lang/Perl-6/Catamorphism
@@ -0,0 +1 @@
+../../Task/Catamorphism/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/Chinese-remainder-theorem b/Lang/Perl-6/Chinese-remainder-theorem
new file mode 120000
index 0000000000..e31cd3de9b
--- /dev/null
+++ b/Lang/Perl-6/Chinese-remainder-theorem
@@ -0,0 +1 @@
+../../Task/Chinese-remainder-theorem/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/Circles-of-given-radius-through-two-points b/Lang/Perl-6/Circles-of-given-radius-through-two-points
new file mode 120000
index 0000000000..7d8e6439a0
--- /dev/null
+++ b/Lang/Perl-6/Circles-of-given-radius-through-two-points
@@ -0,0 +1 @@
+../../Task/Circles-of-given-radius-through-two-points/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/Closures-Value-capture b/Lang/Perl-6/Closures-Value-capture
new file mode 120000
index 0000000000..e5a562b6fd
--- /dev/null
+++ b/Lang/Perl-6/Closures-Value-capture
@@ -0,0 +1 @@
+../../Task/Closures-Value-capture/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/Combinations-and-permutations b/Lang/Perl-6/Combinations-and-permutations
new file mode 120000
index 0000000000..56c0dcc7ea
--- /dev/null
+++ b/Lang/Perl-6/Combinations-and-permutations
@@ -0,0 +1 @@
+../../Task/Combinations-and-permutations/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/Comma-quibbling b/Lang/Perl-6/Comma-quibbling
new file mode 120000
index 0000000000..aca325f38d
--- /dev/null
+++ b/Lang/Perl-6/Comma-quibbling
@@ -0,0 +1 @@
+../../Task/Comma-quibbling/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/Convert-decimal-number-to-rational b/Lang/Perl-6/Convert-decimal-number-to-rational
new file mode 120000
index 0000000000..2566783144
--- /dev/null
+++ b/Lang/Perl-6/Convert-decimal-number-to-rational
@@ -0,0 +1 @@
+../../Task/Convert-decimal-number-to-rational/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/Currying b/Lang/Perl-6/Currying
new file mode 120000
index 0000000000..12708e4a1c
--- /dev/null
+++ b/Lang/Perl-6/Currying
@@ -0,0 +1 @@
+../../Task/Currying/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/Digital-root-Multiplicative-digital-root b/Lang/Perl-6/Digital-root-Multiplicative-digital-root
new file mode 120000
index 0000000000..3c87926078
--- /dev/null
+++ b/Lang/Perl-6/Digital-root-Multiplicative-digital-root
@@ -0,0 +1 @@
+../../Task/Digital-root-Multiplicative-digital-root/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/Draw-a-clock b/Lang/Perl-6/Draw-a-clock
new file mode 120000
index 0000000000..55703037d2
--- /dev/null
+++ b/Lang/Perl-6/Draw-a-clock
@@ -0,0 +1 @@
+../../Task/Draw-a-clock/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/Extensible-prime-generator b/Lang/Perl-6/Extensible-prime-generator
new file mode 120000
index 0000000000..86b7796b1c
--- /dev/null
+++ b/Lang/Perl-6/Extensible-prime-generator
@@ -0,0 +1 @@
+../../Task/Extensible-prime-generator/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/Fibonacci-word b/Lang/Perl-6/Fibonacci-word
new file mode 120000
index 0000000000..324fb8c92a
--- /dev/null
+++ b/Lang/Perl-6/Fibonacci-word
@@ -0,0 +1 @@
+../../Task/Fibonacci-word/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/Fibonacci-word-fractal b/Lang/Perl-6/Fibonacci-word-fractal
new file mode 120000
index 0000000000..272e2c9f7e
--- /dev/null
+++ b/Lang/Perl-6/Fibonacci-word-fractal
@@ -0,0 +1 @@
+../../Task/Fibonacci-word-fractal/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/File-input-output b/Lang/Perl-6/File-input-output
new file mode 120000
index 0000000000..7ef7e6447c
--- /dev/null
+++ b/Lang/Perl-6/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/Find-the-last-Sunday-of-each-month b/Lang/Perl-6/Find-the-last-Sunday-of-each-month
new file mode 120000
index 0000000000..80fae31a1e
--- /dev/null
+++ b/Lang/Perl-6/Find-the-last-Sunday-of-each-month
@@ -0,0 +1 @@
+../../Task/Find-the-last-Sunday-of-each-month/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/Flipping-bits-game b/Lang/Perl-6/Flipping-bits-game
new file mode 120000
index 0000000000..be62bc9d21
--- /dev/null
+++ b/Lang/Perl-6/Flipping-bits-game
@@ -0,0 +1 @@
+../../Task/Flipping-bits-game/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/Fractran b/Lang/Perl-6/Fractran
new file mode 120000
index 0000000000..111f0d4bff
--- /dev/null
+++ b/Lang/Perl-6/Fractran
@@ -0,0 +1 @@
+../../Task/Fractran/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/Gaussian-elimination b/Lang/Perl-6/Gaussian-elimination
new file mode 120000
index 0000000000..b542c464ef
--- /dev/null
+++ b/Lang/Perl-6/Gaussian-elimination
@@ -0,0 +1 @@
+../../Task/Gaussian-elimination/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/Generate-Chess960-starting-position b/Lang/Perl-6/Generate-Chess960-starting-position
new file mode 120000
index 0000000000..a24e5fb752
--- /dev/null
+++ b/Lang/Perl-6/Generate-Chess960-starting-position
@@ -0,0 +1 @@
+../../Task/Generate-Chess960-starting-position/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/Generate-lower-case-ASCII-alphabet b/Lang/Perl-6/Generate-lower-case-ASCII-alphabet
new file mode 120000
index 0000000000..d5b2d23d48
--- /dev/null
+++ b/Lang/Perl-6/Generate-lower-case-ASCII-alphabet
@@ -0,0 +1 @@
+../../Task/Generate-lower-case-ASCII-alphabet/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/Hash-join b/Lang/Perl-6/Hash-join
new file mode 120000
index 0000000000..365ab75d18
--- /dev/null
+++ b/Lang/Perl-6/Hash-join
@@ -0,0 +1 @@
+../../Task/Hash-join/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/Heronian-triangles b/Lang/Perl-6/Heronian-triangles
new file mode 120000
index 0000000000..646f3998c9
--- /dev/null
+++ b/Lang/Perl-6/Heronian-triangles
@@ -0,0 +1 @@
+../../Task/Heronian-triangles/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/Hickerson-series-of-almost-integers b/Lang/Perl-6/Hickerson-series-of-almost-integers
new file mode 120000
index 0000000000..6f57276ae9
--- /dev/null
+++ b/Lang/Perl-6/Hickerson-series-of-almost-integers
@@ -0,0 +1 @@
+../../Task/Hickerson-series-of-almost-integers/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/IBAN b/Lang/Perl-6/IBAN
new file mode 120000
index 0000000000..0ab2e964eb
--- /dev/null
+++ b/Lang/Perl-6/IBAN
@@ -0,0 +1 @@
+../../Task/IBAN/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/Iterated-digits-squaring b/Lang/Perl-6/Iterated-digits-squaring
new file mode 120000
index 0000000000..bc6689cd05
--- /dev/null
+++ b/Lang/Perl-6/Iterated-digits-squaring
@@ -0,0 +1 @@
+../../Task/Iterated-digits-squaring/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/K-d-tree b/Lang/Perl-6/K-d-tree
new file mode 120000
index 0000000000..98bc27da97
--- /dev/null
+++ b/Lang/Perl-6/K-d-tree
@@ -0,0 +1 @@
+../../Task/K-d-tree/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/Left-factorials b/Lang/Perl-6/Left-factorials
new file mode 120000
index 0000000000..fc43891fe8
--- /dev/null
+++ b/Lang/Perl-6/Left-factorials
@@ -0,0 +1 @@
+../../Task/Left-factorials/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/Longest-increasing-subsequence b/Lang/Perl-6/Longest-increasing-subsequence
new file mode 120000
index 0000000000..e29dfe6427
--- /dev/null
+++ b/Lang/Perl-6/Longest-increasing-subsequence
@@ -0,0 +1 @@
+../../Task/Longest-increasing-subsequence/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/Ludic-numbers b/Lang/Perl-6/Ludic-numbers
new file mode 120000
index 0000000000..778eefcd89
--- /dev/null
+++ b/Lang/Perl-6/Ludic-numbers
@@ -0,0 +1 @@
+../../Task/Ludic-numbers/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/Magic-squares-of-odd-order b/Lang/Perl-6/Magic-squares-of-odd-order
new file mode 120000
index 0000000000..2bd7fc43b6
--- /dev/null
+++ b/Lang/Perl-6/Magic-squares-of-odd-order
@@ -0,0 +1 @@
+../../Task/Magic-squares-of-odd-order/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/Make-directory-path b/Lang/Perl-6/Make-directory-path
new file mode 120000
index 0000000000..aa09c67633
--- /dev/null
+++ b/Lang/Perl-6/Make-directory-path
@@ -0,0 +1 @@
+../../Task/Make-directory-path/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/Maximum-triangle-path-sum b/Lang/Perl-6/Maximum-triangle-path-sum
new file mode 120000
index 0000000000..2b055e7eaf
--- /dev/null
+++ b/Lang/Perl-6/Maximum-triangle-path-sum
@@ -0,0 +1 @@
+../../Task/Maximum-triangle-path-sum/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/Move-to-front-algorithm b/Lang/Perl-6/Move-to-front-algorithm
new file mode 120000
index 0000000000..1431137eac
--- /dev/null
+++ b/Lang/Perl-6/Move-to-front-algorithm
@@ -0,0 +1 @@
+../../Task/Move-to-front-algorithm/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/Munching-squares b/Lang/Perl-6/Munching-squares
new file mode 120000
index 0000000000..015b85297d
--- /dev/null
+++ b/Lang/Perl-6/Munching-squares
@@ -0,0 +1 @@
+../../Task/Munching-squares/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/Narcissistic-decimal-number b/Lang/Perl-6/Narcissistic-decimal-number
new file mode 120000
index 0000000000..a7e9886854
--- /dev/null
+++ b/Lang/Perl-6/Narcissistic-decimal-number
@@ -0,0 +1 @@
+../../Task/Narcissistic-decimal-number/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/Natural-sorting b/Lang/Perl-6/Natural-sorting
new file mode 120000
index 0000000000..28b5af65f4
--- /dev/null
+++ b/Lang/Perl-6/Natural-sorting
@@ -0,0 +1 @@
+../../Task/Natural-sorting/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/Nth b/Lang/Perl-6/Nth
new file mode 120000
index 0000000000..4be9c8c2bd
--- /dev/null
+++ b/Lang/Perl-6/Nth
@@ -0,0 +1 @@
+../../Task/Nth/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/Odd-word-problem b/Lang/Perl-6/Odd-word-problem
new file mode 120000
index 0000000000..854642d46c
--- /dev/null
+++ b/Lang/Perl-6/Odd-word-problem
@@ -0,0 +1 @@
+../../Task/Odd-word-problem/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/Old-lady-swallowed-a-fly b/Lang/Perl-6/Old-lady-swallowed-a-fly
new file mode 120000
index 0000000000..f09e15227d
--- /dev/null
+++ b/Lang/Perl-6/Old-lady-swallowed-a-fly
@@ -0,0 +1 @@
+../../Task/Old-lady-swallowed-a-fly/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/Order-disjoint-list-items b/Lang/Perl-6/Order-disjoint-list-items
new file mode 120000
index 0000000000..3eb1c2adb4
--- /dev/null
+++ b/Lang/Perl-6/Order-disjoint-list-items
@@ -0,0 +1 @@
+../../Task/Order-disjoint-list-items/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/Paraffins b/Lang/Perl-6/Paraffins
new file mode 120000
index 0000000000..838990120c
--- /dev/null
+++ b/Lang/Perl-6/Paraffins
@@ -0,0 +1 @@
+../../Task/Paraffins/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/Parse-an-IP-Address b/Lang/Perl-6/Parse-an-IP-Address
new file mode 120000
index 0000000000..1aba94fc5c
--- /dev/null
+++ b/Lang/Perl-6/Parse-an-IP-Address
@@ -0,0 +1 @@
+../../Task/Parse-an-IP-Address/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/Penneys-game b/Lang/Perl-6/Penneys-game
new file mode 120000
index 0000000000..ff6a11ef4d
--- /dev/null
+++ b/Lang/Perl-6/Penneys-game
@@ -0,0 +1 @@
+../../Task/Penneys-game/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/Percolation-Mean-run-density b/Lang/Perl-6/Percolation-Mean-run-density
new file mode 120000
index 0000000000..fe7718a11f
--- /dev/null
+++ b/Lang/Perl-6/Percolation-Mean-run-density
@@ -0,0 +1 @@
+../../Task/Percolation-Mean-run-density/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/Pernicious-numbers b/Lang/Perl-6/Pernicious-numbers
new file mode 120000
index 0000000000..bd11ec50e0
--- /dev/null
+++ b/Lang/Perl-6/Pernicious-numbers
@@ -0,0 +1 @@
+../../Task/Pernicious-numbers/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/Phrase-reversals b/Lang/Perl-6/Phrase-reversals
new file mode 120000
index 0000000000..4cc1935f51
--- /dev/null
+++ b/Lang/Perl-6/Phrase-reversals
@@ -0,0 +1 @@
+../../Task/Phrase-reversals/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/Quickselect-algorithm b/Lang/Perl-6/Quickselect-algorithm
new file mode 120000
index 0000000000..12d8e50624
--- /dev/null
+++ b/Lang/Perl-6/Quickselect-algorithm
@@ -0,0 +1 @@
+../../Task/Quickselect-algorithm/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/RSA-code b/Lang/Perl-6/RSA-code
new file mode 120000
index 0000000000..5b50450113
--- /dev/null
+++ b/Lang/Perl-6/RSA-code
@@ -0,0 +1 @@
+../../Task/RSA-code/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/Ranking-methods b/Lang/Perl-6/Ranking-methods
new file mode 120000
index 0000000000..66c2e7bef9
--- /dev/null
+++ b/Lang/Perl-6/Ranking-methods
@@ -0,0 +1 @@
+../../Task/Ranking-methods/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/Rep-string b/Lang/Perl-6/Rep-string
new file mode 120000
index 0000000000..817ad287cf
--- /dev/null
+++ b/Lang/Perl-6/Rep-string
@@ -0,0 +1 @@
+../../Task/Rep-string/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/Reverse-words-in-a-string b/Lang/Perl-6/Reverse-words-in-a-string
new file mode 120000
index 0000000000..25f215d723
--- /dev/null
+++ b/Lang/Perl-6/Reverse-words-in-a-string
@@ -0,0 +1 @@
+../../Task/Reverse-words-in-a-string/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/Runge-Kutta-method b/Lang/Perl-6/Runge-Kutta-method
new file mode 120000
index 0000000000..16ed2d2a89
--- /dev/null
+++ b/Lang/Perl-6/Runge-Kutta-method
@@ -0,0 +1 @@
+../../Task/Runge-Kutta-method/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/Semiprime b/Lang/Perl-6/Semiprime
new file mode 120000
index 0000000000..3a5a2b9e64
--- /dev/null
+++ b/Lang/Perl-6/Semiprime
@@ -0,0 +1 @@
+../../Task/Semiprime/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/Sequence-of-primes-by-Trial-Division b/Lang/Perl-6/Sequence-of-primes-by-Trial-Division
new file mode 120000
index 0000000000..f62deab1e0
--- /dev/null
+++ b/Lang/Perl-6/Sequence-of-primes-by-Trial-Division
@@ -0,0 +1 @@
+../../Task/Sequence-of-primes-by-Trial-Division/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/Solve-a-Holy-Knights-tour b/Lang/Perl-6/Solve-a-Holy-Knights-tour
new file mode 120000
index 0000000000..b0cc1c6333
--- /dev/null
+++ b/Lang/Perl-6/Solve-a-Holy-Knights-tour
@@ -0,0 +1 @@
+../../Task/Solve-a-Holy-Knights-tour/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/Solve-a-Hopido-puzzle b/Lang/Perl-6/Solve-a-Hopido-puzzle
new file mode 120000
index 0000000000..53edfc2369
--- /dev/null
+++ b/Lang/Perl-6/Solve-a-Hopido-puzzle
@@ -0,0 +1 @@
+../../Task/Solve-a-Hopido-puzzle/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/Solve-a-Numbrix-puzzle b/Lang/Perl-6/Solve-a-Numbrix-puzzle
new file mode 120000
index 0000000000..667e1fc1cf
--- /dev/null
+++ b/Lang/Perl-6/Solve-a-Numbrix-puzzle
@@ -0,0 +1 @@
+../../Task/Solve-a-Numbrix-puzzle/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/Solve-the-no-connection-puzzle b/Lang/Perl-6/Solve-the-no-connection-puzzle
new file mode 120000
index 0000000000..e4c50482e0
--- /dev/null
+++ b/Lang/Perl-6/Solve-the-no-connection-puzzle
@@ -0,0 +1 @@
+../../Task/Solve-the-no-connection-puzzle/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/Sparkline-in-unicode b/Lang/Perl-6/Sparkline-in-unicode
new file mode 120000
index 0000000000..94502fdad9
--- /dev/null
+++ b/Lang/Perl-6/Sparkline-in-unicode
@@ -0,0 +1 @@
+../../Task/Sparkline-in-unicode/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/State-name-puzzle b/Lang/Perl-6/State-name-puzzle
new file mode 120000
index 0000000000..adc76eafa5
--- /dev/null
+++ b/Lang/Perl-6/State-name-puzzle
@@ -0,0 +1 @@
+../../Task/State-name-puzzle/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/Statistics-Basic b/Lang/Perl-6/Statistics-Basic
new file mode 120000
index 0000000000..337345cdbf
--- /dev/null
+++ b/Lang/Perl-6/Statistics-Basic
@@ -0,0 +1 @@
+../../Task/Statistics-Basic/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/Stern-Brocot-sequence b/Lang/Perl-6/Stern-Brocot-sequence
new file mode 120000
index 0000000000..a804d5fc2c
--- /dev/null
+++ b/Lang/Perl-6/Stern-Brocot-sequence
@@ -0,0 +1 @@
+../../Task/Stern-Brocot-sequence/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/String-append b/Lang/Perl-6/String-append
new file mode 120000
index 0000000000..b71035fc37
--- /dev/null
+++ b/Lang/Perl-6/String-append
@@ -0,0 +1 @@
+../../Task/String-append/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/String-matching b/Lang/Perl-6/String-matching
new file mode 120000
index 0000000000..96a4e33a3b
--- /dev/null
+++ b/Lang/Perl-6/String-matching
@@ -0,0 +1 @@
+../../Task/String-matching/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/String-prepend b/Lang/Perl-6/String-prepend
new file mode 120000
index 0000000000..b8dc4aabf3
--- /dev/null
+++ b/Lang/Perl-6/String-prepend
@@ -0,0 +1 @@
+../../Task/String-prepend/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/Sum-multiples-of-3-and-5 b/Lang/Perl-6/Sum-multiples-of-3-and-5
new file mode 120000
index 0000000000..da92aa4914
--- /dev/null
+++ b/Lang/Perl-6/Sum-multiples-of-3-and-5
@@ -0,0 +1 @@
+../../Task/Sum-multiples-of-3-and-5/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/Textonyms b/Lang/Perl-6/Textonyms
new file mode 120000
index 0000000000..85515b1e42
--- /dev/null
+++ b/Lang/Perl-6/Textonyms
@@ -0,0 +1 @@
+../../Task/Textonyms/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/The-Twelve-Days-of-Christmas b/Lang/Perl-6/The-Twelve-Days-of-Christmas
new file mode 120000
index 0000000000..d9defa3d63
--- /dev/null
+++ b/Lang/Perl-6/The-Twelve-Days-of-Christmas
@@ -0,0 +1 @@
+../../Task/The-Twelve-Days-of-Christmas/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/Total-circles-area b/Lang/Perl-6/Total-circles-area
new file mode 120000
index 0000000000..d73cadfd31
--- /dev/null
+++ b/Lang/Perl-6/Total-circles-area
@@ -0,0 +1 @@
+../../Task/Total-circles-area/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/Ulam-spiral--for-primes- b/Lang/Perl-6/Ulam-spiral--for-primes-
new file mode 120000
index 0000000000..756d3b82c8
--- /dev/null
+++ b/Lang/Perl-6/Ulam-spiral--for-primes-
@@ -0,0 +1 @@
+../../Task/Ulam-spiral--for-primes-/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/Unix-ls b/Lang/Perl-6/Unix-ls
new file mode 120000
index 0000000000..c2ccc9b04c
--- /dev/null
+++ b/Lang/Perl-6/Unix-ls
@@ -0,0 +1 @@
+../../Task/Unix-ls/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/World-Cup-group-stage b/Lang/Perl-6/World-Cup-group-stage
new file mode 120000
index 0000000000..594b24066c
--- /dev/null
+++ b/Lang/Perl-6/World-Cup-group-stage
@@ -0,0 +1 @@
+../../Task/World-Cup-group-stage/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/Zero-to-the-zero-power b/Lang/Perl-6/Zero-to-the-zero-power
new file mode 120000
index 0000000000..3f521e072a
--- /dev/null
+++ b/Lang/Perl-6/Zero-to-the-zero-power
@@ -0,0 +1 @@
+../../Task/Zero-to-the-zero-power/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl-6/Zhang-Suen-thinning-algorithm b/Lang/Perl-6/Zhang-Suen-thinning-algorithm
new file mode 120000
index 0000000000..deeb2953e0
--- /dev/null
+++ b/Lang/Perl-6/Zhang-Suen-thinning-algorithm
@@ -0,0 +1 @@
+../../Task/Zhang-Suen-thinning-algorithm/Perl-6
\ No newline at end of file
diff --git a/Lang/Perl/9-billion-names-of-God-the-integer b/Lang/Perl/9-billion-names-of-God-the-integer
new file mode 120000
index 0000000000..5a22a0264b
--- /dev/null
+++ b/Lang/Perl/9-billion-names-of-God-the-integer
@@ -0,0 +1 @@
+../../Task/9-billion-names-of-God-the-integer/Perl
\ No newline at end of file
diff --git a/Lang/Perl/ABC-Problem b/Lang/Perl/ABC-Problem
new file mode 120000
index 0000000000..0fc28f9afe
--- /dev/null
+++ b/Lang/Perl/ABC-Problem
@@ -0,0 +1 @@
+../../Task/ABC-Problem/Perl
\ No newline at end of file
diff --git a/Lang/Perl/AKS-test-for-primes b/Lang/Perl/AKS-test-for-primes
new file mode 120000
index 0000000000..9022f2cbe8
--- /dev/null
+++ b/Lang/Perl/AKS-test-for-primes
@@ -0,0 +1 @@
+../../Task/AKS-test-for-primes/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Abundant,-deficient-and-perfect-number-classifications b/Lang/Perl/Abundant,-deficient-and-perfect-number-classifications
new file mode 120000
index 0000000000..887112ccb3
--- /dev/null
+++ b/Lang/Perl/Abundant,-deficient-and-perfect-number-classifications
@@ -0,0 +1 @@
+../../Task/Abundant,-deficient-and-perfect-number-classifications/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Aliquot-sequence-classifications b/Lang/Perl/Aliquot-sequence-classifications
new file mode 120000
index 0000000000..70b99a32f8
--- /dev/null
+++ b/Lang/Perl/Aliquot-sequence-classifications
@@ -0,0 +1 @@
+../../Task/Aliquot-sequence-classifications/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Almost-prime b/Lang/Perl/Almost-prime
new file mode 120000
index 0000000000..27aadf20c2
--- /dev/null
+++ b/Lang/Perl/Almost-prime
@@ -0,0 +1 @@
+../../Task/Almost-prime/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Amb b/Lang/Perl/Amb
new file mode 120000
index 0000000000..211550d044
--- /dev/null
+++ b/Lang/Perl/Amb
@@ -0,0 +1 @@
+../../Task/Amb/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Amicable-pairs b/Lang/Perl/Amicable-pairs
new file mode 120000
index 0000000000..5173e7ea2f
--- /dev/null
+++ b/Lang/Perl/Amicable-pairs
@@ -0,0 +1 @@
+../../Task/Amicable-pairs/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Append-a-record-to-the-end-of-a-text-file b/Lang/Perl/Append-a-record-to-the-end-of-a-text-file
new file mode 120000
index 0000000000..e9356d3b3b
--- /dev/null
+++ b/Lang/Perl/Append-a-record-to-the-end-of-a-text-file
@@ -0,0 +1 @@
+../../Task/Append-a-record-to-the-end-of-a-text-file/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Arithmetic-geometric-mean-Calculate-Pi b/Lang/Perl/Arithmetic-geometric-mean-Calculate-Pi
new file mode 120000
index 0000000000..3b15baad41
--- /dev/null
+++ b/Lang/Perl/Arithmetic-geometric-mean-Calculate-Pi
@@ -0,0 +1 @@
+../../Task/Arithmetic-geometric-mean-Calculate-Pi/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Benfords-law b/Lang/Perl/Benfords-law
new file mode 120000
index 0000000000..7259ad43c0
--- /dev/null
+++ b/Lang/Perl/Benfords-law
@@ -0,0 +1 @@
+../../Task/Benfords-law/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Bernoulli-numbers b/Lang/Perl/Bernoulli-numbers
new file mode 120000
index 0000000000..c697700ec2
--- /dev/null
+++ b/Lang/Perl/Bernoulli-numbers
@@ -0,0 +1 @@
+../../Task/Bernoulli-numbers/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Bitcoin-public-point-to-address b/Lang/Perl/Bitcoin-public-point-to-address
new file mode 120000
index 0000000000..d57a3a3eb9
--- /dev/null
+++ b/Lang/Perl/Bitcoin-public-point-to-address
@@ -0,0 +1 @@
+../../Task/Bitcoin-public-point-to-address/Perl
\ No newline at end of file
diff --git a/Lang/Perl/CSV-data-manipulation b/Lang/Perl/CSV-data-manipulation
new file mode 120000
index 0000000000..78c98803f1
--- /dev/null
+++ b/Lang/Perl/CSV-data-manipulation
@@ -0,0 +1 @@
+../../Task/CSV-data-manipulation/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Calendar---for-REAL-programmers b/Lang/Perl/Calendar---for-REAL-programmers
new file mode 120000
index 0000000000..24d21bfa20
--- /dev/null
+++ b/Lang/Perl/Calendar---for-REAL-programmers
@@ -0,0 +1 @@
+../../Task/Calendar---for-REAL-programmers/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Casting-out-nines b/Lang/Perl/Casting-out-nines
new file mode 120000
index 0000000000..d93aa0e239
--- /dev/null
+++ b/Lang/Perl/Casting-out-nines
@@ -0,0 +1 @@
+../../Task/Casting-out-nines/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Catalan-numbers-Pascals-triangle b/Lang/Perl/Catalan-numbers-Pascals-triangle
new file mode 120000
index 0000000000..bfd2c1f80a
--- /dev/null
+++ b/Lang/Perl/Catalan-numbers-Pascals-triangle
@@ -0,0 +1 @@
+../../Task/Catalan-numbers-Pascals-triangle/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Catamorphism b/Lang/Perl/Catamorphism
new file mode 120000
index 0000000000..23a556ed9b
--- /dev/null
+++ b/Lang/Perl/Catamorphism
@@ -0,0 +1 @@
+../../Task/Catamorphism/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Chinese-remainder-theorem b/Lang/Perl/Chinese-remainder-theorem
new file mode 120000
index 0000000000..2ebbfde38a
--- /dev/null
+++ b/Lang/Perl/Chinese-remainder-theorem
@@ -0,0 +1 @@
+../../Task/Chinese-remainder-theorem/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Closures-Value-capture b/Lang/Perl/Closures-Value-capture
new file mode 120000
index 0000000000..bf26e1635e
--- /dev/null
+++ b/Lang/Perl/Closures-Value-capture
@@ -0,0 +1 @@
+../../Task/Closures-Value-capture/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Combinations-and-permutations b/Lang/Perl/Combinations-and-permutations
new file mode 120000
index 0000000000..5f01b7dd89
--- /dev/null
+++ b/Lang/Perl/Combinations-and-permutations
@@ -0,0 +1 @@
+../../Task/Combinations-and-permutations/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Comma-quibbling b/Lang/Perl/Comma-quibbling
new file mode 120000
index 0000000000..ea344df4c8
--- /dev/null
+++ b/Lang/Perl/Comma-quibbling
@@ -0,0 +1 @@
+../../Task/Comma-quibbling/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Convert-decimal-number-to-rational b/Lang/Perl/Convert-decimal-number-to-rational
new file mode 120000
index 0000000000..b02008c9ef
--- /dev/null
+++ b/Lang/Perl/Convert-decimal-number-to-rational
@@ -0,0 +1 @@
+../../Task/Convert-decimal-number-to-rational/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Currying b/Lang/Perl/Currying
new file mode 120000
index 0000000000..53d7b4ea8a
--- /dev/null
+++ b/Lang/Perl/Currying
@@ -0,0 +1 @@
+../../Task/Currying/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Digital-root-Multiplicative-digital-root b/Lang/Perl/Digital-root-Multiplicative-digital-root
new file mode 120000
index 0000000000..dd6f7c9d41
--- /dev/null
+++ b/Lang/Perl/Digital-root-Multiplicative-digital-root
@@ -0,0 +1 @@
+../../Task/Digital-root-Multiplicative-digital-root/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Draw-a-clock b/Lang/Perl/Draw-a-clock
new file mode 120000
index 0000000000..ecbfe6cd75
--- /dev/null
+++ b/Lang/Perl/Draw-a-clock
@@ -0,0 +1 @@
+../../Task/Draw-a-clock/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Extensible-prime-generator b/Lang/Perl/Extensible-prime-generator
new file mode 120000
index 0000000000..29d1ac5e00
--- /dev/null
+++ b/Lang/Perl/Extensible-prime-generator
@@ -0,0 +1 @@
+../../Task/Extensible-prime-generator/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Fibonacci-word b/Lang/Perl/Fibonacci-word
new file mode 120000
index 0000000000..d7dafe10e7
--- /dev/null
+++ b/Lang/Perl/Fibonacci-word
@@ -0,0 +1 @@
+../../Task/Fibonacci-word/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Fibonacci-word-fractal b/Lang/Perl/Fibonacci-word-fractal
new file mode 120000
index 0000000000..ddaba794db
--- /dev/null
+++ b/Lang/Perl/Fibonacci-word-fractal
@@ -0,0 +1 @@
+../../Task/Fibonacci-word-fractal/Perl
\ No newline at end of file
diff --git a/Lang/Perl/File-input-output b/Lang/Perl/File-input-output
new file mode 120000
index 0000000000..510b0a85cf
--- /dev/null
+++ b/Lang/Perl/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Find-the-last-Sunday-of-each-month b/Lang/Perl/Find-the-last-Sunday-of-each-month
new file mode 120000
index 0000000000..46fc21a3fc
--- /dev/null
+++ b/Lang/Perl/Find-the-last-Sunday-of-each-month
@@ -0,0 +1 @@
+../../Task/Find-the-last-Sunday-of-each-month/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Flipping-bits-game b/Lang/Perl/Flipping-bits-game
new file mode 120000
index 0000000000..0d0a18c5c6
--- /dev/null
+++ b/Lang/Perl/Flipping-bits-game
@@ -0,0 +1 @@
+../../Task/Flipping-bits-game/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Fractran b/Lang/Perl/Fractran
new file mode 120000
index 0000000000..c6abe76b3b
--- /dev/null
+++ b/Lang/Perl/Fractran
@@ -0,0 +1 @@
+../../Task/Fractran/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Gaussian-elimination b/Lang/Perl/Gaussian-elimination
new file mode 120000
index 0000000000..a645794dbc
--- /dev/null
+++ b/Lang/Perl/Gaussian-elimination
@@ -0,0 +1 @@
+../../Task/Gaussian-elimination/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Generate-Chess960-starting-position b/Lang/Perl/Generate-Chess960-starting-position
new file mode 120000
index 0000000000..2704bf8fc3
--- /dev/null
+++ b/Lang/Perl/Generate-Chess960-starting-position
@@ -0,0 +1 @@
+../../Task/Generate-Chess960-starting-position/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Generate-lower-case-ASCII-alphabet b/Lang/Perl/Generate-lower-case-ASCII-alphabet
new file mode 120000
index 0000000000..358d29fe18
--- /dev/null
+++ b/Lang/Perl/Generate-lower-case-ASCII-alphabet
@@ -0,0 +1 @@
+../../Task/Generate-lower-case-ASCII-alphabet/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Hash-join b/Lang/Perl/Hash-join
new file mode 120000
index 0000000000..a07d27654e
--- /dev/null
+++ b/Lang/Perl/Hash-join
@@ -0,0 +1 @@
+../../Task/Hash-join/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Hello-world-Newbie b/Lang/Perl/Hello-world-Newbie
new file mode 120000
index 0000000000..37ad6a86f0
--- /dev/null
+++ b/Lang/Perl/Hello-world-Newbie
@@ -0,0 +1 @@
+../../Task/Hello-world-Newbie/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Heronian-triangles b/Lang/Perl/Heronian-triangles
new file mode 120000
index 0000000000..f6f73af317
--- /dev/null
+++ b/Lang/Perl/Heronian-triangles
@@ -0,0 +1 @@
+../../Task/Heronian-triangles/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Hickerson-series-of-almost-integers b/Lang/Perl/Hickerson-series-of-almost-integers
new file mode 120000
index 0000000000..cb4a4e2cbe
--- /dev/null
+++ b/Lang/Perl/Hickerson-series-of-almost-integers
@@ -0,0 +1 @@
+../../Task/Hickerson-series-of-almost-integers/Perl
\ No newline at end of file
diff --git a/Lang/Perl/IBAN b/Lang/Perl/IBAN
new file mode 120000
index 0000000000..b4103cedc3
--- /dev/null
+++ b/Lang/Perl/IBAN
@@ -0,0 +1 @@
+../../Task/IBAN/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Integer-overflow b/Lang/Perl/Integer-overflow
new file mode 120000
index 0000000000..a7dcb42007
--- /dev/null
+++ b/Lang/Perl/Integer-overflow
@@ -0,0 +1 @@
+../../Task/Integer-overflow/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Iterated-digits-squaring b/Lang/Perl/Iterated-digits-squaring
new file mode 120000
index 0000000000..fe3c3a0dae
--- /dev/null
+++ b/Lang/Perl/Iterated-digits-squaring
@@ -0,0 +1 @@
+../../Task/Iterated-digits-squaring/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Left-factorials b/Lang/Perl/Left-factorials
new file mode 120000
index 0000000000..d63b1eb5a8
--- /dev/null
+++ b/Lang/Perl/Left-factorials
@@ -0,0 +1 @@
+../../Task/Left-factorials/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Longest-increasing-subsequence b/Lang/Perl/Longest-increasing-subsequence
new file mode 120000
index 0000000000..fd4997e2a8
--- /dev/null
+++ b/Lang/Perl/Longest-increasing-subsequence
@@ -0,0 +1 @@
+../../Task/Longest-increasing-subsequence/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Ludic-numbers b/Lang/Perl/Ludic-numbers
new file mode 120000
index 0000000000..772b466ebd
--- /dev/null
+++ b/Lang/Perl/Ludic-numbers
@@ -0,0 +1 @@
+../../Task/Ludic-numbers/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Maximum-triangle-path-sum b/Lang/Perl/Maximum-triangle-path-sum
new file mode 120000
index 0000000000..a25cb2ef13
--- /dev/null
+++ b/Lang/Perl/Maximum-triangle-path-sum
@@ -0,0 +1 @@
+../../Task/Maximum-triangle-path-sum/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Move-to-front-algorithm b/Lang/Perl/Move-to-front-algorithm
new file mode 120000
index 0000000000..f4e43eba43
--- /dev/null
+++ b/Lang/Perl/Move-to-front-algorithm
@@ -0,0 +1 @@
+../../Task/Move-to-front-algorithm/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Munching-squares b/Lang/Perl/Munching-squares
new file mode 120000
index 0000000000..8593cfbd93
--- /dev/null
+++ b/Lang/Perl/Munching-squares
@@ -0,0 +1 @@
+../../Task/Munching-squares/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Narcissistic-decimal-number b/Lang/Perl/Narcissistic-decimal-number
new file mode 120000
index 0000000000..23f3226cc5
--- /dev/null
+++ b/Lang/Perl/Narcissistic-decimal-number
@@ -0,0 +1 @@
+../../Task/Narcissistic-decimal-number/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Natural-sorting b/Lang/Perl/Natural-sorting
new file mode 120000
index 0000000000..ff41e26a60
--- /dev/null
+++ b/Lang/Perl/Natural-sorting
@@ -0,0 +1 @@
+../../Task/Natural-sorting/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Nth b/Lang/Perl/Nth
new file mode 120000
index 0000000000..f1b414b77d
--- /dev/null
+++ b/Lang/Perl/Nth
@@ -0,0 +1 @@
+../../Task/Nth/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Odd-word-problem b/Lang/Perl/Odd-word-problem
new file mode 120000
index 0000000000..df8d33ccef
--- /dev/null
+++ b/Lang/Perl/Odd-word-problem
@@ -0,0 +1 @@
+../../Task/Odd-word-problem/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Old-lady-swallowed-a-fly b/Lang/Perl/Old-lady-swallowed-a-fly
new file mode 120000
index 0000000000..3fbefd1e62
--- /dev/null
+++ b/Lang/Perl/Old-lady-swallowed-a-fly
@@ -0,0 +1 @@
+../../Task/Old-lady-swallowed-a-fly/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Order-disjoint-list-items b/Lang/Perl/Order-disjoint-list-items
new file mode 120000
index 0000000000..bd6060c201
--- /dev/null
+++ b/Lang/Perl/Order-disjoint-list-items
@@ -0,0 +1 @@
+../../Task/Order-disjoint-list-items/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Paraffins b/Lang/Perl/Paraffins
new file mode 120000
index 0000000000..34110a582d
--- /dev/null
+++ b/Lang/Perl/Paraffins
@@ -0,0 +1 @@
+../../Task/Paraffins/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Parse-an-IP-Address b/Lang/Perl/Parse-an-IP-Address
new file mode 120000
index 0000000000..034fb13a15
--- /dev/null
+++ b/Lang/Perl/Parse-an-IP-Address
@@ -0,0 +1 @@
+../../Task/Parse-an-IP-Address/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Percolation-Mean-run-density b/Lang/Perl/Percolation-Mean-run-density
new file mode 120000
index 0000000000..1117e242b5
--- /dev/null
+++ b/Lang/Perl/Percolation-Mean-run-density
@@ -0,0 +1 @@
+../../Task/Percolation-Mean-run-density/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Pernicious-numbers b/Lang/Perl/Pernicious-numbers
new file mode 120000
index 0000000000..c9fe0fa755
--- /dev/null
+++ b/Lang/Perl/Pernicious-numbers
@@ -0,0 +1 @@
+../../Task/Pernicious-numbers/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Phrase-reversals b/Lang/Perl/Phrase-reversals
new file mode 120000
index 0000000000..4caaaf0657
--- /dev/null
+++ b/Lang/Perl/Phrase-reversals
@@ -0,0 +1 @@
+../../Task/Phrase-reversals/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Quickselect-algorithm b/Lang/Perl/Quickselect-algorithm
new file mode 120000
index 0000000000..1a7fa1af1b
--- /dev/null
+++ b/Lang/Perl/Quickselect-algorithm
@@ -0,0 +1 @@
+../../Task/Quickselect-algorithm/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Rep-string b/Lang/Perl/Rep-string
new file mode 120000
index 0000000000..879ed5f8fd
--- /dev/null
+++ b/Lang/Perl/Rep-string
@@ -0,0 +1 @@
+../../Task/Rep-string/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Reverse-words-in-a-string b/Lang/Perl/Reverse-words-in-a-string
new file mode 120000
index 0000000000..af8ee67ce6
--- /dev/null
+++ b/Lang/Perl/Reverse-words-in-a-string
@@ -0,0 +1 @@
+../../Task/Reverse-words-in-a-string/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Rosetta-Code-Find-bare-lang-tags b/Lang/Perl/Rosetta-Code-Find-bare-lang-tags
new file mode 120000
index 0000000000..c5d8ab2076
--- /dev/null
+++ b/Lang/Perl/Rosetta-Code-Find-bare-lang-tags
@@ -0,0 +1 @@
+../../Task/Rosetta-Code-Find-bare-lang-tags/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Runge-Kutta-method b/Lang/Perl/Runge-Kutta-method
new file mode 120000
index 0000000000..a1ab1d58a8
--- /dev/null
+++ b/Lang/Perl/Runge-Kutta-method
@@ -0,0 +1 @@
+../../Task/Runge-Kutta-method/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Semiprime b/Lang/Perl/Semiprime
new file mode 120000
index 0000000000..2a0356260b
--- /dev/null
+++ b/Lang/Perl/Semiprime
@@ -0,0 +1 @@
+../../Task/Semiprime/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Sparkline-in-unicode b/Lang/Perl/Sparkline-in-unicode
new file mode 120000
index 0000000000..866129b76c
--- /dev/null
+++ b/Lang/Perl/Sparkline-in-unicode
@@ -0,0 +1 @@
+../../Task/Sparkline-in-unicode/Perl
\ No newline at end of file
diff --git a/Lang/Perl/State-name-puzzle b/Lang/Perl/State-name-puzzle
new file mode 120000
index 0000000000..0072bfb718
--- /dev/null
+++ b/Lang/Perl/State-name-puzzle
@@ -0,0 +1 @@
+../../Task/State-name-puzzle/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Statistics-Basic b/Lang/Perl/Statistics-Basic
new file mode 120000
index 0000000000..09ed46cb98
--- /dev/null
+++ b/Lang/Perl/Statistics-Basic
@@ -0,0 +1 @@
+../../Task/Statistics-Basic/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Stern-Brocot-sequence b/Lang/Perl/Stern-Brocot-sequence
new file mode 120000
index 0000000000..e6a67136ac
--- /dev/null
+++ b/Lang/Perl/Stern-Brocot-sequence
@@ -0,0 +1 @@
+../../Task/Stern-Brocot-sequence/Perl
\ No newline at end of file
diff --git a/Lang/Perl/String-append b/Lang/Perl/String-append
new file mode 120000
index 0000000000..e7ee653128
--- /dev/null
+++ b/Lang/Perl/String-append
@@ -0,0 +1 @@
+../../Task/String-append/Perl
\ No newline at end of file
diff --git a/Lang/Perl/String-matching b/Lang/Perl/String-matching
new file mode 120000
index 0000000000..6ca7755c53
--- /dev/null
+++ b/Lang/Perl/String-matching
@@ -0,0 +1 @@
+../../Task/String-matching/Perl
\ No newline at end of file
diff --git a/Lang/Perl/String-prepend b/Lang/Perl/String-prepend
new file mode 120000
index 0000000000..d2844045f6
--- /dev/null
+++ b/Lang/Perl/String-prepend
@@ -0,0 +1 @@
+../../Task/String-prepend/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Sum-multiples-of-3-and-5 b/Lang/Perl/Sum-multiples-of-3-and-5
new file mode 120000
index 0000000000..5f802fe7e4
--- /dev/null
+++ b/Lang/Perl/Sum-multiples-of-3-and-5
@@ -0,0 +1 @@
+../../Task/Sum-multiples-of-3-and-5/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Textonyms b/Lang/Perl/Textonyms
new file mode 120000
index 0000000000..d8d38ef90f
--- /dev/null
+++ b/Lang/Perl/Textonyms
@@ -0,0 +1 @@
+../../Task/Textonyms/Perl
\ No newline at end of file
diff --git a/Lang/Perl/The-ISAAC-Cipher b/Lang/Perl/The-ISAAC-Cipher
new file mode 120000
index 0000000000..cbc41c5f28
--- /dev/null
+++ b/Lang/Perl/The-ISAAC-Cipher
@@ -0,0 +1 @@
+../../Task/The-ISAAC-Cipher/Perl
\ No newline at end of file
diff --git a/Lang/Perl/The-Twelve-Days-of-Christmas b/Lang/Perl/The-Twelve-Days-of-Christmas
new file mode 120000
index 0000000000..075cdc1b1e
--- /dev/null
+++ b/Lang/Perl/The-Twelve-Days-of-Christmas
@@ -0,0 +1 @@
+../../Task/The-Twelve-Days-of-Christmas/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Ulam-spiral--for-primes- b/Lang/Perl/Ulam-spiral--for-primes-
new file mode 120000
index 0000000000..08945d4e23
--- /dev/null
+++ b/Lang/Perl/Ulam-spiral--for-primes-
@@ -0,0 +1 @@
+../../Task/Ulam-spiral--for-primes-/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Zero-to-the-zero-power b/Lang/Perl/Zero-to-the-zero-power
new file mode 120000
index 0000000000..9b8d9acfbe
--- /dev/null
+++ b/Lang/Perl/Zero-to-the-zero-power
@@ -0,0 +1 @@
+../../Task/Zero-to-the-zero-power/Perl
\ No newline at end of file
diff --git a/Lang/PicoLisp/9-billion-names-of-God-the-integer b/Lang/PicoLisp/9-billion-names-of-God-the-integer
new file mode 120000
index 0000000000..9abdd99475
--- /dev/null
+++ b/Lang/PicoLisp/9-billion-names-of-God-the-integer
@@ -0,0 +1 @@
+../../Task/9-billion-names-of-God-the-integer/PicoLisp
\ No newline at end of file
diff --git a/Lang/PicoLisp/ABC-Problem b/Lang/PicoLisp/ABC-Problem
new file mode 120000
index 0000000000..84ad78b7b3
--- /dev/null
+++ b/Lang/PicoLisp/ABC-Problem
@@ -0,0 +1 @@
+../../Task/ABC-Problem/PicoLisp
\ No newline at end of file
diff --git a/Lang/PicoLisp/AKS-test-for-primes b/Lang/PicoLisp/AKS-test-for-primes
new file mode 120000
index 0000000000..30f4b7e291
--- /dev/null
+++ b/Lang/PicoLisp/AKS-test-for-primes
@@ -0,0 +1 @@
+../../Task/AKS-test-for-primes/PicoLisp
\ No newline at end of file
diff --git a/Lang/PicoLisp/Almost-prime b/Lang/PicoLisp/Almost-prime
new file mode 120000
index 0000000000..c7a6ccba9b
--- /dev/null
+++ b/Lang/PicoLisp/Almost-prime
@@ -0,0 +1 @@
+../../Task/Almost-prime/PicoLisp
\ No newline at end of file
diff --git a/Lang/PicoLisp/Amb b/Lang/PicoLisp/Amb
new file mode 120000
index 0000000000..f082907af2
--- /dev/null
+++ b/Lang/PicoLisp/Amb
@@ -0,0 +1 @@
+../../Task/Amb/PicoLisp
\ No newline at end of file
diff --git a/Lang/PicoLisp/Append-a-record-to-the-end-of-a-text-file b/Lang/PicoLisp/Append-a-record-to-the-end-of-a-text-file
new file mode 120000
index 0000000000..3a916c21e9
--- /dev/null
+++ b/Lang/PicoLisp/Append-a-record-to-the-end-of-a-text-file
@@ -0,0 +1 @@
+../../Task/Append-a-record-to-the-end-of-a-text-file/PicoLisp
\ No newline at end of file
diff --git a/Lang/PicoLisp/Arithmetic-geometric-mean-Calculate-Pi b/Lang/PicoLisp/Arithmetic-geometric-mean-Calculate-Pi
new file mode 120000
index 0000000000..0541c426f6
--- /dev/null
+++ b/Lang/PicoLisp/Arithmetic-geometric-mean-Calculate-Pi
@@ -0,0 +1 @@
+../../Task/Arithmetic-geometric-mean-Calculate-Pi/PicoLisp
\ No newline at end of file
diff --git a/Lang/PicoLisp/Bernoulli-numbers b/Lang/PicoLisp/Bernoulli-numbers
new file mode 120000
index 0000000000..4cabd42cc7
--- /dev/null
+++ b/Lang/PicoLisp/Bernoulli-numbers
@@ -0,0 +1 @@
+../../Task/Bernoulli-numbers/PicoLisp
\ No newline at end of file
diff --git a/Lang/PicoLisp/CSV-data-manipulation b/Lang/PicoLisp/CSV-data-manipulation
new file mode 120000
index 0000000000..941bc7b084
--- /dev/null
+++ b/Lang/PicoLisp/CSV-data-manipulation
@@ -0,0 +1 @@
+../../Task/CSV-data-manipulation/PicoLisp
\ No newline at end of file
diff --git a/Lang/PicoLisp/Calendar---for-REAL-programmers b/Lang/PicoLisp/Calendar---for-REAL-programmers
new file mode 120000
index 0000000000..a9bbf1cec5
--- /dev/null
+++ b/Lang/PicoLisp/Calendar---for-REAL-programmers
@@ -0,0 +1 @@
+../../Task/Calendar---for-REAL-programmers/PicoLisp
\ No newline at end of file
diff --git a/Lang/PicoLisp/Casting-out-nines b/Lang/PicoLisp/Casting-out-nines
new file mode 120000
index 0000000000..482f79193f
--- /dev/null
+++ b/Lang/PicoLisp/Casting-out-nines
@@ -0,0 +1 @@
+../../Task/Casting-out-nines/PicoLisp
\ No newline at end of file
diff --git a/Lang/PicoLisp/Catalan-numbers-Pascals-triangle b/Lang/PicoLisp/Catalan-numbers-Pascals-triangle
new file mode 120000
index 0000000000..76ee6d9e70
--- /dev/null
+++ b/Lang/PicoLisp/Catalan-numbers-Pascals-triangle
@@ -0,0 +1 @@
+../../Task/Catalan-numbers-Pascals-triangle/PicoLisp
\ No newline at end of file
diff --git a/Lang/PicoLisp/Catamorphism b/Lang/PicoLisp/Catamorphism
new file mode 120000
index 0000000000..d41dea5ca0
--- /dev/null
+++ b/Lang/PicoLisp/Catamorphism
@@ -0,0 +1 @@
+../../Task/Catamorphism/PicoLisp
\ No newline at end of file
diff --git a/Lang/PicoLisp/Chinese-remainder-theorem b/Lang/PicoLisp/Chinese-remainder-theorem
new file mode 120000
index 0000000000..1998630a5c
--- /dev/null
+++ b/Lang/PicoLisp/Chinese-remainder-theorem
@@ -0,0 +1 @@
+../../Task/Chinese-remainder-theorem/PicoLisp
\ No newline at end of file
diff --git a/Lang/PicoLisp/Closures-Value-capture b/Lang/PicoLisp/Closures-Value-capture
new file mode 120000
index 0000000000..f87c04b868
--- /dev/null
+++ b/Lang/PicoLisp/Closures-Value-capture
@@ -0,0 +1 @@
+../../Task/Closures-Value-capture/PicoLisp
\ No newline at end of file
diff --git a/Lang/PicoLisp/Comma-quibbling b/Lang/PicoLisp/Comma-quibbling
new file mode 120000
index 0000000000..876fb81d4e
--- /dev/null
+++ b/Lang/PicoLisp/Comma-quibbling
@@ -0,0 +1 @@
+../../Task/Comma-quibbling/PicoLisp
\ No newline at end of file
diff --git a/Lang/PicoLisp/Draw-a-clock b/Lang/PicoLisp/Draw-a-clock
new file mode 120000
index 0000000000..5f9495e719
--- /dev/null
+++ b/Lang/PicoLisp/Draw-a-clock
@@ -0,0 +1 @@
+../../Task/Draw-a-clock/PicoLisp
\ No newline at end of file
diff --git a/Lang/PicoLisp/File-input-output b/Lang/PicoLisp/File-input-output
new file mode 120000
index 0000000000..f36a21126a
--- /dev/null
+++ b/Lang/PicoLisp/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/PicoLisp
\ No newline at end of file
diff --git a/Lang/PicoLisp/Find-the-last-Sunday-of-each-month b/Lang/PicoLisp/Find-the-last-Sunday-of-each-month
new file mode 120000
index 0000000000..5f271b142e
--- /dev/null
+++ b/Lang/PicoLisp/Find-the-last-Sunday-of-each-month
@@ -0,0 +1 @@
+../../Task/Find-the-last-Sunday-of-each-month/PicoLisp
\ No newline at end of file
diff --git a/Lang/PicoLisp/Generate-Chess960-starting-position b/Lang/PicoLisp/Generate-Chess960-starting-position
new file mode 120000
index 0000000000..8e836193a6
--- /dev/null
+++ b/Lang/PicoLisp/Generate-Chess960-starting-position
@@ -0,0 +1 @@
+../../Task/Generate-Chess960-starting-position/PicoLisp
\ No newline at end of file
diff --git a/Lang/PicoLisp/Generate-lower-case-ASCII-alphabet b/Lang/PicoLisp/Generate-lower-case-ASCII-alphabet
new file mode 120000
index 0000000000..c27915089a
--- /dev/null
+++ b/Lang/PicoLisp/Generate-lower-case-ASCII-alphabet
@@ -0,0 +1 @@
+../../Task/Generate-lower-case-ASCII-alphabet/PicoLisp
\ No newline at end of file
diff --git a/Lang/PicoLisp/IBAN b/Lang/PicoLisp/IBAN
new file mode 120000
index 0000000000..62ea095230
--- /dev/null
+++ b/Lang/PicoLisp/IBAN
@@ -0,0 +1 @@
+../../Task/IBAN/PicoLisp
\ No newline at end of file
diff --git a/Lang/PicoLisp/Ludic-numbers b/Lang/PicoLisp/Ludic-numbers
new file mode 120000
index 0000000000..c4d70afa1b
--- /dev/null
+++ b/Lang/PicoLisp/Ludic-numbers
@@ -0,0 +1 @@
+../../Task/Ludic-numbers/PicoLisp
\ No newline at end of file
diff --git a/Lang/PicoLisp/Narcissistic-decimal-number b/Lang/PicoLisp/Narcissistic-decimal-number
new file mode 120000
index 0000000000..c9f11f857f
--- /dev/null
+++ b/Lang/PicoLisp/Narcissistic-decimal-number
@@ -0,0 +1 @@
+../../Task/Narcissistic-decimal-number/PicoLisp
\ No newline at end of file
diff --git a/Lang/PicoLisp/Natural-sorting b/Lang/PicoLisp/Natural-sorting
new file mode 120000
index 0000000000..4476711e4c
--- /dev/null
+++ b/Lang/PicoLisp/Natural-sorting
@@ -0,0 +1 @@
+../../Task/Natural-sorting/PicoLisp
\ No newline at end of file
diff --git a/Lang/PicoLisp/Nth b/Lang/PicoLisp/Nth
new file mode 120000
index 0000000000..a38e438437
--- /dev/null
+++ b/Lang/PicoLisp/Nth
@@ -0,0 +1 @@
+../../Task/Nth/PicoLisp
\ No newline at end of file
diff --git a/Lang/PicoLisp/Odd-word-problem b/Lang/PicoLisp/Odd-word-problem
new file mode 120000
index 0000000000..640bed26aa
--- /dev/null
+++ b/Lang/PicoLisp/Odd-word-problem
@@ -0,0 +1 @@
+../../Task/Odd-word-problem/PicoLisp
\ No newline at end of file
diff --git a/Lang/PicoLisp/Old-lady-swallowed-a-fly b/Lang/PicoLisp/Old-lady-swallowed-a-fly
new file mode 120000
index 0000000000..ff9fea1441
--- /dev/null
+++ b/Lang/PicoLisp/Old-lady-swallowed-a-fly
@@ -0,0 +1 @@
+../../Task/Old-lady-swallowed-a-fly/PicoLisp
\ No newline at end of file
diff --git a/Lang/PicoLisp/Parse-an-IP-Address b/Lang/PicoLisp/Parse-an-IP-Address
new file mode 120000
index 0000000000..571e6d7f64
--- /dev/null
+++ b/Lang/PicoLisp/Parse-an-IP-Address
@@ -0,0 +1 @@
+../../Task/Parse-an-IP-Address/PicoLisp
\ No newline at end of file
diff --git a/Lang/PicoLisp/RSA-code b/Lang/PicoLisp/RSA-code
new file mode 120000
index 0000000000..8edc8833b2
--- /dev/null
+++ b/Lang/PicoLisp/RSA-code
@@ -0,0 +1 @@
+../../Task/RSA-code/PicoLisp
\ No newline at end of file
diff --git a/Lang/PicoLisp/Semiprime b/Lang/PicoLisp/Semiprime
new file mode 120000
index 0000000000..df680df06a
--- /dev/null
+++ b/Lang/PicoLisp/Semiprime
@@ -0,0 +1 @@
+../../Task/Semiprime/PicoLisp
\ No newline at end of file
diff --git a/Lang/PicoLisp/State-name-puzzle b/Lang/PicoLisp/State-name-puzzle
new file mode 120000
index 0000000000..20c419c13b
--- /dev/null
+++ b/Lang/PicoLisp/State-name-puzzle
@@ -0,0 +1 @@
+../../Task/State-name-puzzle/PicoLisp
\ No newline at end of file
diff --git a/Lang/PicoLisp/Statistics-Basic b/Lang/PicoLisp/Statistics-Basic
new file mode 120000
index 0000000000..5d894bd982
--- /dev/null
+++ b/Lang/PicoLisp/Statistics-Basic
@@ -0,0 +1 @@
+../../Task/Statistics-Basic/PicoLisp
\ No newline at end of file
diff --git a/Lang/PicoLisp/String-append b/Lang/PicoLisp/String-append
new file mode 120000
index 0000000000..eff41c611b
--- /dev/null
+++ b/Lang/PicoLisp/String-append
@@ -0,0 +1 @@
+../../Task/String-append/PicoLisp
\ No newline at end of file
diff --git a/Lang/PicoLisp/String-matching b/Lang/PicoLisp/String-matching
new file mode 120000
index 0000000000..3a288170d9
--- /dev/null
+++ b/Lang/PicoLisp/String-matching
@@ -0,0 +1 @@
+../../Task/String-matching/PicoLisp
\ No newline at end of file
diff --git a/Lang/PicoLisp/String-prepend b/Lang/PicoLisp/String-prepend
new file mode 120000
index 0000000000..1504b0db1d
--- /dev/null
+++ b/Lang/PicoLisp/String-prepend
@@ -0,0 +1 @@
+../../Task/String-prepend/PicoLisp
\ No newline at end of file
diff --git a/Lang/PicoLisp/Sum-multiples-of-3-and-5 b/Lang/PicoLisp/Sum-multiples-of-3-and-5
new file mode 120000
index 0000000000..47028461c2
--- /dev/null
+++ b/Lang/PicoLisp/Sum-multiples-of-3-and-5
@@ -0,0 +1 @@
+../../Task/Sum-multiples-of-3-and-5/PicoLisp
\ No newline at end of file
diff --git a/Lang/PicoLisp/The-ISAAC-Cipher b/Lang/PicoLisp/The-ISAAC-Cipher
new file mode 120000
index 0000000000..c3e28e4f3a
--- /dev/null
+++ b/Lang/PicoLisp/The-ISAAC-Cipher
@@ -0,0 +1 @@
+../../Task/The-ISAAC-Cipher/PicoLisp
\ No newline at end of file
diff --git a/Lang/PicoLisp/The-Twelve-Days-of-Christmas b/Lang/PicoLisp/The-Twelve-Days-of-Christmas
new file mode 120000
index 0000000000..54099d78a5
--- /dev/null
+++ b/Lang/PicoLisp/The-Twelve-Days-of-Christmas
@@ -0,0 +1 @@
+../../Task/The-Twelve-Days-of-Christmas/PicoLisp
\ No newline at end of file
diff --git a/Lang/Pike/Closures-Value-capture b/Lang/Pike/Closures-Value-capture
new file mode 120000
index 0000000000..2f378f320b
--- /dev/null
+++ b/Lang/Pike/Closures-Value-capture
@@ -0,0 +1 @@
+../../Task/Closures-Value-capture/Pike
\ No newline at end of file
diff --git a/Lang/Pike/Paraffins b/Lang/Pike/Paraffins
new file mode 120000
index 0000000000..fce3996ba5
--- /dev/null
+++ b/Lang/Pike/Paraffins
@@ -0,0 +1 @@
+../../Task/Paraffins/Pike
\ No newline at end of file
diff --git a/Lang/Pop11/File-input-output b/Lang/Pop11/File-input-output
new file mode 120000
index 0000000000..c9eff43ec3
--- /dev/null
+++ b/Lang/Pop11/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/Pop11
\ No newline at end of file
diff --git a/Lang/PowerBASIC/ABC-Problem b/Lang/PowerBASIC/ABC-Problem
new file mode 120000
index 0000000000..039676e1a4
--- /dev/null
+++ b/Lang/PowerBASIC/ABC-Problem
@@ -0,0 +1 @@
+../../Task/ABC-Problem/PowerBASIC
\ No newline at end of file
diff --git a/Lang/PowerShell/File-input-output b/Lang/PowerShell/File-input-output
new file mode 120000
index 0000000000..b54d3c5626
--- /dev/null
+++ b/Lang/PowerShell/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/PowerShell
\ No newline at end of file
diff --git a/Lang/PowerShell/Heronian-triangles b/Lang/PowerShell/Heronian-triangles
new file mode 120000
index 0000000000..046bcc6dc1
--- /dev/null
+++ b/Lang/PowerShell/Heronian-triangles
@@ -0,0 +1 @@
+../../Task/Heronian-triangles/PowerShell
\ No newline at end of file
diff --git a/Lang/PowerShell/String-matching b/Lang/PowerShell/String-matching
new file mode 120000
index 0000000000..1eeec59a1a
--- /dev/null
+++ b/Lang/PowerShell/String-matching
@@ -0,0 +1 @@
+../../Task/String-matching/PowerShell
\ No newline at end of file
diff --git a/Lang/PowerShell/Sum-multiples-of-3-and-5 b/Lang/PowerShell/Sum-multiples-of-3-and-5
new file mode 120000
index 0000000000..765735058b
--- /dev/null
+++ b/Lang/PowerShell/Sum-multiples-of-3-and-5
@@ -0,0 +1 @@
+../../Task/Sum-multiples-of-3-and-5/PowerShell
\ No newline at end of file
diff --git a/Lang/PowerShell/The-Twelve-Days-of-Christmas b/Lang/PowerShell/The-Twelve-Days-of-Christmas
new file mode 120000
index 0000000000..a54c5f9099
--- /dev/null
+++ b/Lang/PowerShell/The-Twelve-Days-of-Christmas
@@ -0,0 +1 @@
+../../Task/The-Twelve-Days-of-Christmas/PowerShell
\ No newline at end of file
diff --git a/Lang/PowerShell/Zero-to-the-zero-power b/Lang/PowerShell/Zero-to-the-zero-power
new file mode 120000
index 0000000000..d664269f52
--- /dev/null
+++ b/Lang/PowerShell/Zero-to-the-zero-power
@@ -0,0 +1 @@
+../../Task/Zero-to-the-zero-power/PowerShell
\ No newline at end of file
diff --git a/Lang/Prolog/ABC-Problem b/Lang/Prolog/ABC-Problem
new file mode 120000
index 0000000000..052279454b
--- /dev/null
+++ b/Lang/Prolog/ABC-Problem
@@ -0,0 +1 @@
+../../Task/ABC-Problem/Prolog
\ No newline at end of file
diff --git a/Lang/Prolog/AKS-test-for-primes b/Lang/Prolog/AKS-test-for-primes
new file mode 120000
index 0000000000..6b696daf54
--- /dev/null
+++ b/Lang/Prolog/AKS-test-for-primes
@@ -0,0 +1 @@
+../../Task/AKS-test-for-primes/Prolog
\ No newline at end of file
diff --git a/Lang/Prolog/Almost-prime b/Lang/Prolog/Almost-prime
new file mode 120000
index 0000000000..2057977df6
--- /dev/null
+++ b/Lang/Prolog/Almost-prime
@@ -0,0 +1 @@
+../../Task/Almost-prime/Prolog
\ No newline at end of file
diff --git a/Lang/Prolog/Amb b/Lang/Prolog/Amb
new file mode 120000
index 0000000000..cf43b43a98
--- /dev/null
+++ b/Lang/Prolog/Amb
@@ -0,0 +1 @@
+../../Task/Amb/Prolog
\ No newline at end of file
diff --git a/Lang/Prolog/Benfords-law b/Lang/Prolog/Benfords-law
new file mode 120000
index 0000000000..e0b03c02d5
--- /dev/null
+++ b/Lang/Prolog/Benfords-law
@@ -0,0 +1 @@
+../../Task/Benfords-law/Prolog
\ No newline at end of file
diff --git a/Lang/Prolog/CSV-data-manipulation b/Lang/Prolog/CSV-data-manipulation
new file mode 120000
index 0000000000..bd3e9d39a2
--- /dev/null
+++ b/Lang/Prolog/CSV-data-manipulation
@@ -0,0 +1 @@
+../../Task/CSV-data-manipulation/Prolog
\ No newline at end of file
diff --git a/Lang/Prolog/Catamorphism b/Lang/Prolog/Catamorphism
new file mode 120000
index 0000000000..58376993a2
--- /dev/null
+++ b/Lang/Prolog/Catamorphism
@@ -0,0 +1 @@
+../../Task/Catamorphism/Prolog
\ No newline at end of file
diff --git a/Lang/Prolog/Closures-Value-capture b/Lang/Prolog/Closures-Value-capture
new file mode 120000
index 0000000000..29148f6658
--- /dev/null
+++ b/Lang/Prolog/Closures-Value-capture
@@ -0,0 +1 @@
+../../Task/Closures-Value-capture/Prolog
\ No newline at end of file
diff --git a/Lang/Prolog/Comma-quibbling b/Lang/Prolog/Comma-quibbling
new file mode 120000
index 0000000000..bf50f2e5d6
--- /dev/null
+++ b/Lang/Prolog/Comma-quibbling
@@ -0,0 +1 @@
+../../Task/Comma-quibbling/Prolog
\ No newline at end of file
diff --git a/Lang/Prolog/Generate-lower-case-ASCII-alphabet b/Lang/Prolog/Generate-lower-case-ASCII-alphabet
new file mode 120000
index 0000000000..9602523572
--- /dev/null
+++ b/Lang/Prolog/Generate-lower-case-ASCII-alphabet
@@ -0,0 +1 @@
+../../Task/Generate-lower-case-ASCII-alphabet/Prolog
\ No newline at end of file
diff --git a/Lang/Prolog/Longest-increasing-subsequence b/Lang/Prolog/Longest-increasing-subsequence
new file mode 120000
index 0000000000..09428a724e
--- /dev/null
+++ b/Lang/Prolog/Longest-increasing-subsequence
@@ -0,0 +1 @@
+../../Task/Longest-increasing-subsequence/Prolog
\ No newline at end of file
diff --git a/Lang/Prolog/Maximum-triangle-path-sum b/Lang/Prolog/Maximum-triangle-path-sum
new file mode 120000
index 0000000000..f2d7e434af
--- /dev/null
+++ b/Lang/Prolog/Maximum-triangle-path-sum
@@ -0,0 +1 @@
+../../Task/Maximum-triangle-path-sum/Prolog
\ No newline at end of file
diff --git a/Lang/Prolog/Munching-squares b/Lang/Prolog/Munching-squares
new file mode 120000
index 0000000000..04b5c48b83
--- /dev/null
+++ b/Lang/Prolog/Munching-squares
@@ -0,0 +1 @@
+../../Task/Munching-squares/Prolog
\ No newline at end of file
diff --git a/Lang/Prolog/Nth b/Lang/Prolog/Nth
new file mode 120000
index 0000000000..d2de6181aa
--- /dev/null
+++ b/Lang/Prolog/Nth
@@ -0,0 +1 @@
+../../Task/Nth/Prolog
\ No newline at end of file
diff --git a/Lang/Prolog/Odd-word-problem b/Lang/Prolog/Odd-word-problem
new file mode 120000
index 0000000000..e1b3314d2a
--- /dev/null
+++ b/Lang/Prolog/Odd-word-problem
@@ -0,0 +1 @@
+../../Task/Odd-word-problem/Prolog
\ No newline at end of file
diff --git a/Lang/Prolog/Rep-string b/Lang/Prolog/Rep-string
new file mode 120000
index 0000000000..254f3f7752
--- /dev/null
+++ b/Lang/Prolog/Rep-string
@@ -0,0 +1 @@
+../../Task/Rep-string/Prolog
\ No newline at end of file
diff --git a/Lang/Prolog/Solve-the-no-connection-puzzle b/Lang/Prolog/Solve-the-no-connection-puzzle
new file mode 120000
index 0000000000..037e1d52eb
--- /dev/null
+++ b/Lang/Prolog/Solve-the-no-connection-puzzle
@@ -0,0 +1 @@
+../../Task/Solve-the-no-connection-puzzle/Prolog
\ No newline at end of file
diff --git a/Lang/Prolog/State-name-puzzle b/Lang/Prolog/State-name-puzzle
new file mode 120000
index 0000000000..d9a74a33c0
--- /dev/null
+++ b/Lang/Prolog/State-name-puzzle
@@ -0,0 +1 @@
+../../Task/State-name-puzzle/Prolog
\ No newline at end of file
diff --git a/Lang/Prolog/String-prepend b/Lang/Prolog/String-prepend
new file mode 120000
index 0000000000..18252d644e
--- /dev/null
+++ b/Lang/Prolog/String-prepend
@@ -0,0 +1 @@
+../../Task/String-prepend/Prolog
\ No newline at end of file
diff --git a/Lang/Prolog/Sum-multiples-of-3-and-5 b/Lang/Prolog/Sum-multiples-of-3-and-5
new file mode 120000
index 0000000000..a68eb5fa82
--- /dev/null
+++ b/Lang/Prolog/Sum-multiples-of-3-and-5
@@ -0,0 +1 @@
+../../Task/Sum-multiples-of-3-and-5/Prolog
\ No newline at end of file
diff --git a/Lang/PureBasic/Amb b/Lang/PureBasic/Amb
new file mode 120000
index 0000000000..f736fa81b9
--- /dev/null
+++ b/Lang/PureBasic/Amb
@@ -0,0 +1 @@
+../../Task/Amb/PureBasic
\ No newline at end of file
diff --git a/Lang/PureBasic/Draw-a-clock b/Lang/PureBasic/Draw-a-clock
new file mode 120000
index 0000000000..3d33f65e80
--- /dev/null
+++ b/Lang/PureBasic/Draw-a-clock
@@ -0,0 +1 @@
+../../Task/Draw-a-clock/PureBasic
\ No newline at end of file
diff --git a/Lang/PureBasic/File-input-output b/Lang/PureBasic/File-input-output
new file mode 120000
index 0000000000..1b43d013a7
--- /dev/null
+++ b/Lang/PureBasic/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/PureBasic
\ No newline at end of file
diff --git a/Lang/PureBasic/Generate-lower-case-ASCII-alphabet b/Lang/PureBasic/Generate-lower-case-ASCII-alphabet
new file mode 120000
index 0000000000..6e3c824ec8
--- /dev/null
+++ b/Lang/PureBasic/Generate-lower-case-ASCII-alphabet
@@ -0,0 +1 @@
+../../Task/Generate-lower-case-ASCII-alphabet/PureBasic
\ No newline at end of file
diff --git a/Lang/PureBasic/Machine-code b/Lang/PureBasic/Machine-code
new file mode 120000
index 0000000000..99da1f9912
--- /dev/null
+++ b/Lang/PureBasic/Machine-code
@@ -0,0 +1 @@
+../../Task/Machine-code/PureBasic
\ No newline at end of file
diff --git a/Lang/PureBasic/Munching-squares b/Lang/PureBasic/Munching-squares
new file mode 120000
index 0000000000..67101b762b
--- /dev/null
+++ b/Lang/PureBasic/Munching-squares
@@ -0,0 +1 @@
+../../Task/Munching-squares/PureBasic
\ No newline at end of file
diff --git a/Lang/PureBasic/Odd-word-problem b/Lang/PureBasic/Odd-word-problem
new file mode 120000
index 0000000000..c02a8504da
--- /dev/null
+++ b/Lang/PureBasic/Odd-word-problem
@@ -0,0 +1 @@
+../../Task/Odd-word-problem/PureBasic
\ No newline at end of file
diff --git a/Lang/PureBasic/Statistics-Basic b/Lang/PureBasic/Statistics-Basic
new file mode 120000
index 0000000000..a8f0cbb11e
--- /dev/null
+++ b/Lang/PureBasic/Statistics-Basic
@@ -0,0 +1 @@
+../../Task/Statistics-Basic/PureBasic
\ No newline at end of file
diff --git a/Lang/PureBasic/String-append b/Lang/PureBasic/String-append
new file mode 120000
index 0000000000..d0cfc20120
--- /dev/null
+++ b/Lang/PureBasic/String-append
@@ -0,0 +1 @@
+../../Task/String-append/PureBasic
\ No newline at end of file
diff --git a/Lang/PureBasic/String-matching b/Lang/PureBasic/String-matching
new file mode 120000
index 0000000000..1c75fe7011
--- /dev/null
+++ b/Lang/PureBasic/String-matching
@@ -0,0 +1 @@
+../../Task/String-matching/PureBasic
\ No newline at end of file
diff --git a/Lang/PureBasic/String-prepend b/Lang/PureBasic/String-prepend
new file mode 120000
index 0000000000..643e3b4965
--- /dev/null
+++ b/Lang/PureBasic/String-prepend
@@ -0,0 +1 @@
+../../Task/String-prepend/PureBasic
\ No newline at end of file
diff --git a/Lang/Python/9-billion-names-of-God-the-integer b/Lang/Python/9-billion-names-of-God-the-integer
new file mode 120000
index 0000000000..4ece4ad346
--- /dev/null
+++ b/Lang/Python/9-billion-names-of-God-the-integer
@@ -0,0 +1 @@
+../../Task/9-billion-names-of-God-the-integer/Python
\ No newline at end of file
diff --git a/Lang/Python/ABC-Problem b/Lang/Python/ABC-Problem
new file mode 120000
index 0000000000..17d0b635db
--- /dev/null
+++ b/Lang/Python/ABC-Problem
@@ -0,0 +1 @@
+../../Task/ABC-Problem/Python
\ No newline at end of file
diff --git a/Lang/Python/AKS-test-for-primes b/Lang/Python/AKS-test-for-primes
new file mode 120000
index 0000000000..06e053132a
--- /dev/null
+++ b/Lang/Python/AKS-test-for-primes
@@ -0,0 +1 @@
+../../Task/AKS-test-for-primes/Python
\ No newline at end of file
diff --git a/Lang/Python/Abundant,-deficient-and-perfect-number-classifications b/Lang/Python/Abundant,-deficient-and-perfect-number-classifications
new file mode 120000
index 0000000000..4497dc39b5
--- /dev/null
+++ b/Lang/Python/Abundant,-deficient-and-perfect-number-classifications
@@ -0,0 +1 @@
+../../Task/Abundant,-deficient-and-perfect-number-classifications/Python
\ No newline at end of file
diff --git a/Lang/Python/Aliquot-sequence-classifications b/Lang/Python/Aliquot-sequence-classifications
new file mode 120000
index 0000000000..8406232695
--- /dev/null
+++ b/Lang/Python/Aliquot-sequence-classifications
@@ -0,0 +1 @@
+../../Task/Aliquot-sequence-classifications/Python
\ No newline at end of file
diff --git a/Lang/Python/Almost-prime b/Lang/Python/Almost-prime
new file mode 120000
index 0000000000..ab4a70ac92
--- /dev/null
+++ b/Lang/Python/Almost-prime
@@ -0,0 +1 @@
+../../Task/Almost-prime/Python
\ No newline at end of file
diff --git a/Lang/Python/Amb b/Lang/Python/Amb
new file mode 120000
index 0000000000..2443d947c8
--- /dev/null
+++ b/Lang/Python/Amb
@@ -0,0 +1 @@
+../../Task/Amb/Python
\ No newline at end of file
diff --git a/Lang/Python/Amicable-pairs b/Lang/Python/Amicable-pairs
new file mode 120000
index 0000000000..e0c25c9f7e
--- /dev/null
+++ b/Lang/Python/Amicable-pairs
@@ -0,0 +1 @@
+../../Task/Amicable-pairs/Python
\ No newline at end of file
diff --git a/Lang/Python/Append-a-record-to-the-end-of-a-text-file b/Lang/Python/Append-a-record-to-the-end-of-a-text-file
new file mode 120000
index 0000000000..4081c5171e
--- /dev/null
+++ b/Lang/Python/Append-a-record-to-the-end-of-a-text-file
@@ -0,0 +1 @@
+../../Task/Append-a-record-to-the-end-of-a-text-file/Python
\ No newline at end of file
diff --git a/Lang/Python/Arithmetic-geometric-mean-Calculate-Pi b/Lang/Python/Arithmetic-geometric-mean-Calculate-Pi
new file mode 120000
index 0000000000..f6c56d4fda
--- /dev/null
+++ b/Lang/Python/Arithmetic-geometric-mean-Calculate-Pi
@@ -0,0 +1 @@
+../../Task/Arithmetic-geometric-mean-Calculate-Pi/Python
\ No newline at end of file
diff --git a/Lang/Python/Benfords-law b/Lang/Python/Benfords-law
new file mode 120000
index 0000000000..a5b5393a1e
--- /dev/null
+++ b/Lang/Python/Benfords-law
@@ -0,0 +1 @@
+../../Task/Benfords-law/Python
\ No newline at end of file
diff --git a/Lang/Python/Bernoulli-numbers b/Lang/Python/Bernoulli-numbers
new file mode 120000
index 0000000000..ae40dffc1b
--- /dev/null
+++ b/Lang/Python/Bernoulli-numbers
@@ -0,0 +1 @@
+../../Task/Bernoulli-numbers/Python
\ No newline at end of file
diff --git a/Lang/Python/CSV-data-manipulation b/Lang/Python/CSV-data-manipulation
new file mode 120000
index 0000000000..f6dab386a3
--- /dev/null
+++ b/Lang/Python/CSV-data-manipulation
@@ -0,0 +1 @@
+../../Task/CSV-data-manipulation/Python
\ No newline at end of file
diff --git a/Lang/Python/Casting-out-nines b/Lang/Python/Casting-out-nines
new file mode 120000
index 0000000000..680d27c64a
--- /dev/null
+++ b/Lang/Python/Casting-out-nines
@@ -0,0 +1 @@
+../../Task/Casting-out-nines/Python
\ No newline at end of file
diff --git a/Lang/Python/Catalan-numbers-Pascals-triangle b/Lang/Python/Catalan-numbers-Pascals-triangle
new file mode 120000
index 0000000000..631ee5cb33
--- /dev/null
+++ b/Lang/Python/Catalan-numbers-Pascals-triangle
@@ -0,0 +1 @@
+../../Task/Catalan-numbers-Pascals-triangle/Python
\ No newline at end of file
diff --git a/Lang/Python/Catamorphism b/Lang/Python/Catamorphism
new file mode 120000
index 0000000000..d10817d3ca
--- /dev/null
+++ b/Lang/Python/Catamorphism
@@ -0,0 +1 @@
+../../Task/Catamorphism/Python
\ No newline at end of file
diff --git a/Lang/Python/Chinese-remainder-theorem b/Lang/Python/Chinese-remainder-theorem
new file mode 120000
index 0000000000..bed6d4de77
--- /dev/null
+++ b/Lang/Python/Chinese-remainder-theorem
@@ -0,0 +1 @@
+../../Task/Chinese-remainder-theorem/Python
\ No newline at end of file
diff --git a/Lang/Python/Circles-of-given-radius-through-two-points b/Lang/Python/Circles-of-given-radius-through-two-points
new file mode 120000
index 0000000000..6e7895c56a
--- /dev/null
+++ b/Lang/Python/Circles-of-given-radius-through-two-points
@@ -0,0 +1 @@
+../../Task/Circles-of-given-radius-through-two-points/Python
\ No newline at end of file
diff --git a/Lang/Python/Closures-Value-capture b/Lang/Python/Closures-Value-capture
new file mode 120000
index 0000000000..369e10a918
--- /dev/null
+++ b/Lang/Python/Closures-Value-capture
@@ -0,0 +1 @@
+../../Task/Closures-Value-capture/Python
\ No newline at end of file
diff --git a/Lang/Python/Combinations-and-permutations b/Lang/Python/Combinations-and-permutations
new file mode 120000
index 0000000000..6a899daf2e
--- /dev/null
+++ b/Lang/Python/Combinations-and-permutations
@@ -0,0 +1 @@
+../../Task/Combinations-and-permutations/Python
\ No newline at end of file
diff --git a/Lang/Python/Comma-quibbling b/Lang/Python/Comma-quibbling
new file mode 120000
index 0000000000..de5933980f
--- /dev/null
+++ b/Lang/Python/Comma-quibbling
@@ -0,0 +1 @@
+../../Task/Comma-quibbling/Python
\ No newline at end of file
diff --git a/Lang/Python/Conjugate-transpose b/Lang/Python/Conjugate-transpose
new file mode 120000
index 0000000000..3331b4108a
--- /dev/null
+++ b/Lang/Python/Conjugate-transpose
@@ -0,0 +1 @@
+../../Task/Conjugate-transpose/Python
\ No newline at end of file
diff --git a/Lang/Python/Convert-decimal-number-to-rational b/Lang/Python/Convert-decimal-number-to-rational
new file mode 120000
index 0000000000..8cba7b305b
--- /dev/null
+++ b/Lang/Python/Convert-decimal-number-to-rational
@@ -0,0 +1 @@
+../../Task/Convert-decimal-number-to-rational/Python
\ No newline at end of file
diff --git a/Lang/Python/Currying b/Lang/Python/Currying
new file mode 120000
index 0000000000..4357939807
--- /dev/null
+++ b/Lang/Python/Currying
@@ -0,0 +1 @@
+../../Task/Currying/Python
\ No newline at end of file
diff --git a/Lang/Python/Digital-root-Multiplicative-digital-root b/Lang/Python/Digital-root-Multiplicative-digital-root
new file mode 120000
index 0000000000..fe8d0d9717
--- /dev/null
+++ b/Lang/Python/Digital-root-Multiplicative-digital-root
@@ -0,0 +1 @@
+../../Task/Digital-root-Multiplicative-digital-root/Python
\ No newline at end of file
diff --git a/Lang/Python/Draw-a-clock b/Lang/Python/Draw-a-clock
new file mode 120000
index 0000000000..a00a890cfd
--- /dev/null
+++ b/Lang/Python/Draw-a-clock
@@ -0,0 +1 @@
+../../Task/Draw-a-clock/Python
\ No newline at end of file
diff --git a/Lang/Python/Extensible-prime-generator b/Lang/Python/Extensible-prime-generator
new file mode 120000
index 0000000000..a571e121f9
--- /dev/null
+++ b/Lang/Python/Extensible-prime-generator
@@ -0,0 +1 @@
+../../Task/Extensible-prime-generator/Python
\ No newline at end of file
diff --git a/Lang/Python/Fibonacci-word b/Lang/Python/Fibonacci-word
new file mode 120000
index 0000000000..515b5f9059
--- /dev/null
+++ b/Lang/Python/Fibonacci-word
@@ -0,0 +1 @@
+../../Task/Fibonacci-word/Python
\ No newline at end of file
diff --git a/Lang/Python/Fibonacci-word-fractal b/Lang/Python/Fibonacci-word-fractal
new file mode 120000
index 0000000000..9ff2e105fb
--- /dev/null
+++ b/Lang/Python/Fibonacci-word-fractal
@@ -0,0 +1 @@
+../../Task/Fibonacci-word-fractal/Python
\ No newline at end of file
diff --git a/Lang/Python/File-input-output b/Lang/Python/File-input-output
new file mode 120000
index 0000000000..debed858e4
--- /dev/null
+++ b/Lang/Python/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/Python
\ No newline at end of file
diff --git a/Lang/Python/Find-the-last-Sunday-of-each-month b/Lang/Python/Find-the-last-Sunday-of-each-month
new file mode 120000
index 0000000000..5338837cf1
--- /dev/null
+++ b/Lang/Python/Find-the-last-Sunday-of-each-month
@@ -0,0 +1 @@
+../../Task/Find-the-last-Sunday-of-each-month/Python
\ No newline at end of file
diff --git a/Lang/Python/Flipping-bits-game b/Lang/Python/Flipping-bits-game
new file mode 120000
index 0000000000..76b1971c64
--- /dev/null
+++ b/Lang/Python/Flipping-bits-game
@@ -0,0 +1 @@
+../../Task/Flipping-bits-game/Python
\ No newline at end of file
diff --git a/Lang/Python/Fractran b/Lang/Python/Fractran
new file mode 120000
index 0000000000..8548641cd8
--- /dev/null
+++ b/Lang/Python/Fractran
@@ -0,0 +1 @@
+../../Task/Fractran/Python
\ No newline at end of file
diff --git a/Lang/Python/Gaussian-elimination b/Lang/Python/Gaussian-elimination
new file mode 120000
index 0000000000..ba2abaa0ea
--- /dev/null
+++ b/Lang/Python/Gaussian-elimination
@@ -0,0 +1 @@
+../../Task/Gaussian-elimination/Python
\ No newline at end of file
diff --git a/Lang/Python/Generate-Chess960-starting-position b/Lang/Python/Generate-Chess960-starting-position
new file mode 120000
index 0000000000..bd0a22c2e1
--- /dev/null
+++ b/Lang/Python/Generate-Chess960-starting-position
@@ -0,0 +1 @@
+../../Task/Generate-Chess960-starting-position/Python
\ No newline at end of file
diff --git a/Lang/Python/Generate-lower-case-ASCII-alphabet b/Lang/Python/Generate-lower-case-ASCII-alphabet
new file mode 120000
index 0000000000..d5f2ac907c
--- /dev/null
+++ b/Lang/Python/Generate-lower-case-ASCII-alphabet
@@ -0,0 +1 @@
+../../Task/Generate-lower-case-ASCII-alphabet/Python
\ No newline at end of file
diff --git a/Lang/Python/Hash-join b/Lang/Python/Hash-join
new file mode 120000
index 0000000000..67346843a1
--- /dev/null
+++ b/Lang/Python/Hash-join
@@ -0,0 +1 @@
+../../Task/Hash-join/Python
\ No newline at end of file
diff --git a/Lang/Python/Hello-world-Newbie b/Lang/Python/Hello-world-Newbie
new file mode 120000
index 0000000000..e99724eff5
--- /dev/null
+++ b/Lang/Python/Hello-world-Newbie
@@ -0,0 +1 @@
+../../Task/Hello-world-Newbie/Python
\ No newline at end of file
diff --git a/Lang/Python/Heronian-triangles b/Lang/Python/Heronian-triangles
new file mode 120000
index 0000000000..2174c519a2
--- /dev/null
+++ b/Lang/Python/Heronian-triangles
@@ -0,0 +1 @@
+../../Task/Heronian-triangles/Python
\ No newline at end of file
diff --git a/Lang/Python/Hickerson-series-of-almost-integers b/Lang/Python/Hickerson-series-of-almost-integers
new file mode 120000
index 0000000000..f43873715d
--- /dev/null
+++ b/Lang/Python/Hickerson-series-of-almost-integers
@@ -0,0 +1 @@
+../../Task/Hickerson-series-of-almost-integers/Python
\ No newline at end of file
diff --git a/Lang/Python/IBAN b/Lang/Python/IBAN
new file mode 120000
index 0000000000..c024793555
--- /dev/null
+++ b/Lang/Python/IBAN
@@ -0,0 +1 @@
+../../Task/IBAN/Python
\ No newline at end of file
diff --git a/Lang/Python/Integer-overflow b/Lang/Python/Integer-overflow
new file mode 120000
index 0000000000..c443c370b6
--- /dev/null
+++ b/Lang/Python/Integer-overflow
@@ -0,0 +1 @@
+../../Task/Integer-overflow/Python
\ No newline at end of file
diff --git a/Lang/Python/Iterated-digits-squaring b/Lang/Python/Iterated-digits-squaring
new file mode 120000
index 0000000000..5667be9b16
--- /dev/null
+++ b/Lang/Python/Iterated-digits-squaring
@@ -0,0 +1 @@
+../../Task/Iterated-digits-squaring/Python
\ No newline at end of file
diff --git a/Lang/Python/K-d-tree b/Lang/Python/K-d-tree
new file mode 120000
index 0000000000..a0f979c1a7
--- /dev/null
+++ b/Lang/Python/K-d-tree
@@ -0,0 +1 @@
+../../Task/K-d-tree/Python
\ No newline at end of file
diff --git a/Lang/Python/Left-factorials b/Lang/Python/Left-factorials
new file mode 120000
index 0000000000..313611cf34
--- /dev/null
+++ b/Lang/Python/Left-factorials
@@ -0,0 +1 @@
+../../Task/Left-factorials/Python
\ No newline at end of file
diff --git a/Lang/Python/Longest-increasing-subsequence b/Lang/Python/Longest-increasing-subsequence
new file mode 120000
index 0000000000..322337e22b
--- /dev/null
+++ b/Lang/Python/Longest-increasing-subsequence
@@ -0,0 +1 @@
+../../Task/Longest-increasing-subsequence/Python
\ No newline at end of file
diff --git a/Lang/Python/Ludic-numbers b/Lang/Python/Ludic-numbers
new file mode 120000
index 0000000000..6155a34cd7
--- /dev/null
+++ b/Lang/Python/Ludic-numbers
@@ -0,0 +1 @@
+../../Task/Ludic-numbers/Python
\ No newline at end of file
diff --git a/Lang/Python/Machine-code b/Lang/Python/Machine-code
new file mode 120000
index 0000000000..0858f744be
--- /dev/null
+++ b/Lang/Python/Machine-code
@@ -0,0 +1 @@
+../../Task/Machine-code/Python
\ No newline at end of file
diff --git a/Lang/Python/Magic-squares-of-odd-order b/Lang/Python/Magic-squares-of-odd-order
new file mode 120000
index 0000000000..ecf54f2448
--- /dev/null
+++ b/Lang/Python/Magic-squares-of-odd-order
@@ -0,0 +1 @@
+../../Task/Magic-squares-of-odd-order/Python
\ No newline at end of file
diff --git a/Lang/Python/Make-directory-path b/Lang/Python/Make-directory-path
new file mode 120000
index 0000000000..18106be38f
--- /dev/null
+++ b/Lang/Python/Make-directory-path
@@ -0,0 +1 @@
+../../Task/Make-directory-path/Python
\ No newline at end of file
diff --git a/Lang/Python/Maximum-triangle-path-sum b/Lang/Python/Maximum-triangle-path-sum
new file mode 120000
index 0000000000..7f512f888f
--- /dev/null
+++ b/Lang/Python/Maximum-triangle-path-sum
@@ -0,0 +1 @@
+../../Task/Maximum-triangle-path-sum/Python
\ No newline at end of file
diff --git a/Lang/Python/Move-to-front-algorithm b/Lang/Python/Move-to-front-algorithm
new file mode 120000
index 0000000000..ff81bd655f
--- /dev/null
+++ b/Lang/Python/Move-to-front-algorithm
@@ -0,0 +1 @@
+../../Task/Move-to-front-algorithm/Python
\ No newline at end of file
diff --git a/Lang/Python/Munching-squares b/Lang/Python/Munching-squares
new file mode 120000
index 0000000000..071dbc096b
--- /dev/null
+++ b/Lang/Python/Munching-squares
@@ -0,0 +1 @@
+../../Task/Munching-squares/Python
\ No newline at end of file
diff --git a/Lang/Python/Narcissistic-decimal-number b/Lang/Python/Narcissistic-decimal-number
new file mode 120000
index 0000000000..acefe34315
--- /dev/null
+++ b/Lang/Python/Narcissistic-decimal-number
@@ -0,0 +1 @@
+../../Task/Narcissistic-decimal-number/Python
\ No newline at end of file
diff --git a/Lang/Python/Natural-sorting b/Lang/Python/Natural-sorting
new file mode 120000
index 0000000000..dd7a398ff3
--- /dev/null
+++ b/Lang/Python/Natural-sorting
@@ -0,0 +1 @@
+../../Task/Natural-sorting/Python
\ No newline at end of file
diff --git a/Lang/Python/Nth b/Lang/Python/Nth
new file mode 120000
index 0000000000..d2922b3bea
--- /dev/null
+++ b/Lang/Python/Nth
@@ -0,0 +1 @@
+../../Task/Nth/Python
\ No newline at end of file
diff --git a/Lang/Python/Odd-word-problem b/Lang/Python/Odd-word-problem
new file mode 120000
index 0000000000..940753839c
--- /dev/null
+++ b/Lang/Python/Odd-word-problem
@@ -0,0 +1 @@
+../../Task/Odd-word-problem/Python
\ No newline at end of file
diff --git a/Lang/Python/Old-lady-swallowed-a-fly b/Lang/Python/Old-lady-swallowed-a-fly
new file mode 120000
index 0000000000..841d23d865
--- /dev/null
+++ b/Lang/Python/Old-lady-swallowed-a-fly
@@ -0,0 +1 @@
+../../Task/Old-lady-swallowed-a-fly/Python
\ No newline at end of file
diff --git a/Lang/Python/Order-disjoint-list-items b/Lang/Python/Order-disjoint-list-items
new file mode 120000
index 0000000000..95703346ad
--- /dev/null
+++ b/Lang/Python/Order-disjoint-list-items
@@ -0,0 +1 @@
+../../Task/Order-disjoint-list-items/Python
\ No newline at end of file
diff --git a/Lang/Python/Paraffins b/Lang/Python/Paraffins
new file mode 120000
index 0000000000..7b3c429f85
--- /dev/null
+++ b/Lang/Python/Paraffins
@@ -0,0 +1 @@
+../../Task/Paraffins/Python
\ No newline at end of file
diff --git a/Lang/Python/Parse-an-IP-Address b/Lang/Python/Parse-an-IP-Address
new file mode 120000
index 0000000000..f83e176dec
--- /dev/null
+++ b/Lang/Python/Parse-an-IP-Address
@@ -0,0 +1 @@
+../../Task/Parse-an-IP-Address/Python
\ No newline at end of file
diff --git a/Lang/Python/Penneys-game b/Lang/Python/Penneys-game
new file mode 120000
index 0000000000..4df53cbc23
--- /dev/null
+++ b/Lang/Python/Penneys-game
@@ -0,0 +1 @@
+../../Task/Penneys-game/Python
\ No newline at end of file
diff --git a/Lang/Python/Percolation-Bond-percolation b/Lang/Python/Percolation-Bond-percolation
new file mode 120000
index 0000000000..5fefbf7ddf
--- /dev/null
+++ b/Lang/Python/Percolation-Bond-percolation
@@ -0,0 +1 @@
+../../Task/Percolation-Bond-percolation/Python
\ No newline at end of file
diff --git a/Lang/Python/Percolation-Mean-cluster-density b/Lang/Python/Percolation-Mean-cluster-density
new file mode 120000
index 0000000000..8f43e2e6fc
--- /dev/null
+++ b/Lang/Python/Percolation-Mean-cluster-density
@@ -0,0 +1 @@
+../../Task/Percolation-Mean-cluster-density/Python
\ No newline at end of file
diff --git a/Lang/Python/Percolation-Mean-run-density b/Lang/Python/Percolation-Mean-run-density
new file mode 120000
index 0000000000..d5103e5821
--- /dev/null
+++ b/Lang/Python/Percolation-Mean-run-density
@@ -0,0 +1 @@
+../../Task/Percolation-Mean-run-density/Python
\ No newline at end of file
diff --git a/Lang/Python/Percolation-Site-percolation b/Lang/Python/Percolation-Site-percolation
new file mode 120000
index 0000000000..23e8c1fa4a
--- /dev/null
+++ b/Lang/Python/Percolation-Site-percolation
@@ -0,0 +1 @@
+../../Task/Percolation-Site-percolation/Python
\ No newline at end of file
diff --git a/Lang/Python/Permutations-Rank-of-a-permutation b/Lang/Python/Permutations-Rank-of-a-permutation
new file mode 120000
index 0000000000..39bcfa30b6
--- /dev/null
+++ b/Lang/Python/Permutations-Rank-of-a-permutation
@@ -0,0 +1 @@
+../../Task/Permutations-Rank-of-a-permutation/Python
\ No newline at end of file
diff --git a/Lang/Python/Pernicious-numbers b/Lang/Python/Pernicious-numbers
new file mode 120000
index 0000000000..21114f043c
--- /dev/null
+++ b/Lang/Python/Pernicious-numbers
@@ -0,0 +1 @@
+../../Task/Pernicious-numbers/Python
\ No newline at end of file
diff --git a/Lang/Python/Phrase-reversals b/Lang/Python/Phrase-reversals
new file mode 120000
index 0000000000..c58b3dbc10
--- /dev/null
+++ b/Lang/Python/Phrase-reversals
@@ -0,0 +1 @@
+../../Task/Phrase-reversals/Python
\ No newline at end of file
diff --git a/Lang/Python/Quickselect-algorithm b/Lang/Python/Quickselect-algorithm
new file mode 120000
index 0000000000..cc5bcd7f7f
--- /dev/null
+++ b/Lang/Python/Quickselect-algorithm
@@ -0,0 +1 @@
+../../Task/Quickselect-algorithm/Python
\ No newline at end of file
diff --git a/Lang/Python/RSA-code b/Lang/Python/RSA-code
new file mode 120000
index 0000000000..e1ee0e469d
--- /dev/null
+++ b/Lang/Python/RSA-code
@@ -0,0 +1 @@
+../../Task/RSA-code/Python
\ No newline at end of file
diff --git a/Lang/Python/Ranking-methods b/Lang/Python/Ranking-methods
new file mode 120000
index 0000000000..d1e06e13cc
--- /dev/null
+++ b/Lang/Python/Ranking-methods
@@ -0,0 +1 @@
+../../Task/Ranking-methods/Python
\ No newline at end of file
diff --git a/Lang/Python/Rep-string b/Lang/Python/Rep-string
new file mode 120000
index 0000000000..496c7e685d
--- /dev/null
+++ b/Lang/Python/Rep-string
@@ -0,0 +1 @@
+../../Task/Rep-string/Python
\ No newline at end of file
diff --git a/Lang/Python/Reverse-words-in-a-string b/Lang/Python/Reverse-words-in-a-string
new file mode 120000
index 0000000000..0b2cbde04b
--- /dev/null
+++ b/Lang/Python/Reverse-words-in-a-string
@@ -0,0 +1 @@
+../../Task/Reverse-words-in-a-string/Python
\ No newline at end of file
diff --git a/Lang/Python/Runge-Kutta-method b/Lang/Python/Runge-Kutta-method
new file mode 120000
index 0000000000..c02df96fff
--- /dev/null
+++ b/Lang/Python/Runge-Kutta-method
@@ -0,0 +1 @@
+../../Task/Runge-Kutta-method/Python
\ No newline at end of file
diff --git a/Lang/Python/Semiprime b/Lang/Python/Semiprime
new file mode 120000
index 0000000000..42e4ce42eb
--- /dev/null
+++ b/Lang/Python/Semiprime
@@ -0,0 +1 @@
+../../Task/Semiprime/Python
\ No newline at end of file
diff --git a/Lang/Python/Solve-the-no-connection-puzzle b/Lang/Python/Solve-the-no-connection-puzzle
new file mode 120000
index 0000000000..63ca0567eb
--- /dev/null
+++ b/Lang/Python/Solve-the-no-connection-puzzle
@@ -0,0 +1 @@
+../../Task/Solve-the-no-connection-puzzle/Python
\ No newline at end of file
diff --git a/Lang/Python/Sparkline-in-unicode b/Lang/Python/Sparkline-in-unicode
new file mode 120000
index 0000000000..5d389a1b43
--- /dev/null
+++ b/Lang/Python/Sparkline-in-unicode
@@ -0,0 +1 @@
+../../Task/Sparkline-in-unicode/Python
\ No newline at end of file
diff --git a/Lang/Python/State-name-puzzle b/Lang/Python/State-name-puzzle
new file mode 120000
index 0000000000..feef118df1
--- /dev/null
+++ b/Lang/Python/State-name-puzzle
@@ -0,0 +1 @@
+../../Task/State-name-puzzle/Python
\ No newline at end of file
diff --git a/Lang/Python/Statistics-Basic b/Lang/Python/Statistics-Basic
new file mode 120000
index 0000000000..5b37498522
--- /dev/null
+++ b/Lang/Python/Statistics-Basic
@@ -0,0 +1 @@
+../../Task/Statistics-Basic/Python
\ No newline at end of file
diff --git a/Lang/Python/Stern-Brocot-sequence b/Lang/Python/Stern-Brocot-sequence
new file mode 120000
index 0000000000..e7bd0b0e22
--- /dev/null
+++ b/Lang/Python/Stern-Brocot-sequence
@@ -0,0 +1 @@
+../../Task/Stern-Brocot-sequence/Python
\ No newline at end of file
diff --git a/Lang/Python/String-append b/Lang/Python/String-append
new file mode 120000
index 0000000000..415b5fa1af
--- /dev/null
+++ b/Lang/Python/String-append
@@ -0,0 +1 @@
+../../Task/String-append/Python
\ No newline at end of file
diff --git a/Lang/Python/String-matching b/Lang/Python/String-matching
new file mode 120000
index 0000000000..b8f46996af
--- /dev/null
+++ b/Lang/Python/String-matching
@@ -0,0 +1 @@
+../../Task/String-matching/Python
\ No newline at end of file
diff --git a/Lang/Python/String-prepend b/Lang/Python/String-prepend
new file mode 120000
index 0000000000..0ac084b26c
--- /dev/null
+++ b/Lang/Python/String-prepend
@@ -0,0 +1 @@
+../../Task/String-prepend/Python
\ No newline at end of file
diff --git a/Lang/Python/Sum-multiples-of-3-and-5 b/Lang/Python/Sum-multiples-of-3-and-5
new file mode 120000
index 0000000000..ba7d618bd5
--- /dev/null
+++ b/Lang/Python/Sum-multiples-of-3-and-5
@@ -0,0 +1 @@
+../../Task/Sum-multiples-of-3-and-5/Python
\ No newline at end of file
diff --git a/Lang/Python/Textonyms b/Lang/Python/Textonyms
new file mode 120000
index 0000000000..cf55e80af8
--- /dev/null
+++ b/Lang/Python/Textonyms
@@ -0,0 +1 @@
+../../Task/Textonyms/Python
\ No newline at end of file
diff --git a/Lang/Python/The-ISAAC-Cipher b/Lang/Python/The-ISAAC-Cipher
new file mode 120000
index 0000000000..929cb43ff7
--- /dev/null
+++ b/Lang/Python/The-ISAAC-Cipher
@@ -0,0 +1 @@
+../../Task/The-ISAAC-Cipher/Python
\ No newline at end of file
diff --git a/Lang/Python/The-Twelve-Days-of-Christmas b/Lang/Python/The-Twelve-Days-of-Christmas
new file mode 120000
index 0000000000..88dfa004d7
--- /dev/null
+++ b/Lang/Python/The-Twelve-Days-of-Christmas
@@ -0,0 +1 @@
+../../Task/The-Twelve-Days-of-Christmas/Python
\ No newline at end of file
diff --git a/Lang/Python/Total-circles-area b/Lang/Python/Total-circles-area
new file mode 120000
index 0000000000..5618334f03
--- /dev/null
+++ b/Lang/Python/Total-circles-area
@@ -0,0 +1 @@
+../../Task/Total-circles-area/Python
\ No newline at end of file
diff --git a/Lang/Python/Ulam-spiral--for-primes- b/Lang/Python/Ulam-spiral--for-primes-
new file mode 120000
index 0000000000..ca13dbd4a9
--- /dev/null
+++ b/Lang/Python/Ulam-spiral--for-primes-
@@ -0,0 +1 @@
+../../Task/Ulam-spiral--for-primes-/Python
\ No newline at end of file
diff --git a/Lang/Python/Unix-ls b/Lang/Python/Unix-ls
new file mode 120000
index 0000000000..ccb887ff0f
--- /dev/null
+++ b/Lang/Python/Unix-ls
@@ -0,0 +1 @@
+../../Task/Unix-ls/Python
\ No newline at end of file
diff --git a/Lang/Python/Vogels-approximation-method b/Lang/Python/Vogels-approximation-method
new file mode 120000
index 0000000000..dcfccc8d31
--- /dev/null
+++ b/Lang/Python/Vogels-approximation-method
@@ -0,0 +1 @@
+../../Task/Vogels-approximation-method/Python
\ No newline at end of file
diff --git a/Lang/Python/World-Cup-group-stage b/Lang/Python/World-Cup-group-stage
new file mode 120000
index 0000000000..946517c66a
--- /dev/null
+++ b/Lang/Python/World-Cup-group-stage
@@ -0,0 +1 @@
+../../Task/World-Cup-group-stage/Python
\ No newline at end of file
diff --git a/Lang/Python/Zero-to-the-zero-power b/Lang/Python/Zero-to-the-zero-power
new file mode 120000
index 0000000000..495ccd08d3
--- /dev/null
+++ b/Lang/Python/Zero-to-the-zero-power
@@ -0,0 +1 @@
+../../Task/Zero-to-the-zero-power/Python
\ No newline at end of file
diff --git a/Lang/Python/Zhang-Suen-thinning-algorithm b/Lang/Python/Zhang-Suen-thinning-algorithm
new file mode 120000
index 0000000000..d1cf149ed6
--- /dev/null
+++ b/Lang/Python/Zhang-Suen-thinning-algorithm
@@ -0,0 +1 @@
+../../Task/Zhang-Suen-thinning-algorithm/Python
\ No newline at end of file
diff --git a/Lang/R/ABC-Problem b/Lang/R/ABC-Problem
new file mode 120000
index 0000000000..ea22bce862
--- /dev/null
+++ b/Lang/R/ABC-Problem
@@ -0,0 +1 @@
+../../Task/ABC-Problem/R
\ No newline at end of file
diff --git a/Lang/R/Amb b/Lang/R/Amb
new file mode 120000
index 0000000000..eeb6cf8667
--- /dev/null
+++ b/Lang/R/Amb
@@ -0,0 +1 @@
+../../Task/Amb/R
\ No newline at end of file
diff --git a/Lang/R/Benfords-law b/Lang/R/Benfords-law
new file mode 120000
index 0000000000..fbcb9ff70b
--- /dev/null
+++ b/Lang/R/Benfords-law
@@ -0,0 +1 @@
+../../Task/Benfords-law/R
\ No newline at end of file
diff --git a/Lang/R/CSV-data-manipulation b/Lang/R/CSV-data-manipulation
new file mode 120000
index 0000000000..2898e0b6a4
--- /dev/null
+++ b/Lang/R/CSV-data-manipulation
@@ -0,0 +1 @@
+../../Task/CSV-data-manipulation/R
\ No newline at end of file
diff --git a/Lang/R/Chinese-remainder-theorem b/Lang/R/Chinese-remainder-theorem
new file mode 120000
index 0000000000..3740cf9807
--- /dev/null
+++ b/Lang/R/Chinese-remainder-theorem
@@ -0,0 +1 @@
+../../Task/Chinese-remainder-theorem/R
\ No newline at end of file
diff --git a/Lang/R/Closures-Value-capture b/Lang/R/Closures-Value-capture
new file mode 120000
index 0000000000..3d37a7f4ac
--- /dev/null
+++ b/Lang/R/Closures-Value-capture
@@ -0,0 +1 @@
+../../Task/Closures-Value-capture/R
\ No newline at end of file
diff --git a/Lang/R/Fibonacci-word b/Lang/R/Fibonacci-word
new file mode 120000
index 0000000000..364f80d99a
--- /dev/null
+++ b/Lang/R/Fibonacci-word
@@ -0,0 +1 @@
+../../Task/Fibonacci-word/R
\ No newline at end of file
diff --git a/Lang/R/File-input-output b/Lang/R/File-input-output
new file mode 120000
index 0000000000..806f89acaa
--- /dev/null
+++ b/Lang/R/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/R
\ No newline at end of file
diff --git a/Lang/R/Nth b/Lang/R/Nth
new file mode 120000
index 0000000000..06b36e6d40
--- /dev/null
+++ b/Lang/R/Nth
@@ -0,0 +1 @@
+../../Task/Nth/R
\ No newline at end of file
diff --git a/Lang/R/Sum-multiples-of-3-and-5 b/Lang/R/Sum-multiples-of-3-and-5
new file mode 120000
index 0000000000..4dd3fd8b04
--- /dev/null
+++ b/Lang/R/Sum-multiples-of-3-and-5
@@ -0,0 +1 @@
+../../Task/Sum-multiples-of-3-and-5/R
\ No newline at end of file
diff --git a/Lang/REALbasic/File-input-output b/Lang/REALbasic/File-input-output
new file mode 120000
index 0000000000..569cf6b6d9
--- /dev/null
+++ b/Lang/REALbasic/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/REALbasic
\ No newline at end of file
diff --git a/Lang/REBOL/Comma-quibbling b/Lang/REBOL/Comma-quibbling
new file mode 120000
index 0000000000..b2f7530541
--- /dev/null
+++ b/Lang/REBOL/Comma-quibbling
@@ -0,0 +1 @@
+../../Task/Comma-quibbling/REBOL
\ No newline at end of file
diff --git a/Lang/REBOL/File-input-output b/Lang/REBOL/File-input-output
new file mode 120000
index 0000000000..30e510fb5d
--- /dev/null
+++ b/Lang/REBOL/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/REBOL
\ No newline at end of file
diff --git a/Lang/REBOL/Find-the-last-Sunday-of-each-month b/Lang/REBOL/Find-the-last-Sunday-of-each-month
new file mode 120000
index 0000000000..c54d330170
--- /dev/null
+++ b/Lang/REBOL/Find-the-last-Sunday-of-each-month
@@ -0,0 +1 @@
+../../Task/Find-the-last-Sunday-of-each-month/REBOL
\ No newline at end of file
diff --git a/Lang/REXX/9-billion-names-of-God-the-integer b/Lang/REXX/9-billion-names-of-God-the-integer
new file mode 120000
index 0000000000..5ad3d09d79
--- /dev/null
+++ b/Lang/REXX/9-billion-names-of-God-the-integer
@@ -0,0 +1 @@
+../../Task/9-billion-names-of-God-the-integer/REXX
\ No newline at end of file
diff --git a/Lang/REXX/ABC-Problem b/Lang/REXX/ABC-Problem
new file mode 120000
index 0000000000..b233d5ead7
--- /dev/null
+++ b/Lang/REXX/ABC-Problem
@@ -0,0 +1 @@
+../../Task/ABC-Problem/REXX
\ No newline at end of file
diff --git a/Lang/REXX/AKS-test-for-primes b/Lang/REXX/AKS-test-for-primes
new file mode 120000
index 0000000000..37361fab89
--- /dev/null
+++ b/Lang/REXX/AKS-test-for-primes
@@ -0,0 +1 @@
+../../Task/AKS-test-for-primes/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Aliquot-sequence-classifications b/Lang/REXX/Aliquot-sequence-classifications
new file mode 120000
index 0000000000..8307ba806a
--- /dev/null
+++ b/Lang/REXX/Aliquot-sequence-classifications
@@ -0,0 +1 @@
+../../Task/Aliquot-sequence-classifications/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Almost-prime b/Lang/REXX/Almost-prime
new file mode 120000
index 0000000000..9114a0636c
--- /dev/null
+++ b/Lang/REXX/Almost-prime
@@ -0,0 +1 @@
+../../Task/Almost-prime/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Amb b/Lang/REXX/Amb
new file mode 120000
index 0000000000..e7e8da0eb8
--- /dev/null
+++ b/Lang/REXX/Amb
@@ -0,0 +1 @@
+../../Task/Amb/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Amicable-pairs b/Lang/REXX/Amicable-pairs
new file mode 120000
index 0000000000..3143c7c53c
--- /dev/null
+++ b/Lang/REXX/Amicable-pairs
@@ -0,0 +1 @@
+../../Task/Amicable-pairs/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Append-a-record-to-the-end-of-a-text-file b/Lang/REXX/Append-a-record-to-the-end-of-a-text-file
new file mode 120000
index 0000000000..d24387f339
--- /dev/null
+++ b/Lang/REXX/Append-a-record-to-the-end-of-a-text-file
@@ -0,0 +1 @@
+../../Task/Append-a-record-to-the-end-of-a-text-file/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Arithmetic-geometric-mean-Calculate-Pi b/Lang/REXX/Arithmetic-geometric-mean-Calculate-Pi
new file mode 120000
index 0000000000..fa13ba9a84
--- /dev/null
+++ b/Lang/REXX/Arithmetic-geometric-mean-Calculate-Pi
@@ -0,0 +1 @@
+../../Task/Arithmetic-geometric-mean-Calculate-Pi/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Benfords-law b/Lang/REXX/Benfords-law
new file mode 120000
index 0000000000..0d274e5c41
--- /dev/null
+++ b/Lang/REXX/Benfords-law
@@ -0,0 +1 @@
+../../Task/Benfords-law/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Bernoulli-numbers b/Lang/REXX/Bernoulli-numbers
new file mode 120000
index 0000000000..fe50c8d1d3
--- /dev/null
+++ b/Lang/REXX/Bernoulli-numbers
@@ -0,0 +1 @@
+../../Task/Bernoulli-numbers/REXX
\ No newline at end of file
diff --git a/Lang/REXX/CSV-data-manipulation b/Lang/REXX/CSV-data-manipulation
new file mode 120000
index 0000000000..bf00322662
--- /dev/null
+++ b/Lang/REXX/CSV-data-manipulation
@@ -0,0 +1 @@
+../../Task/CSV-data-manipulation/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Calendar---for-REAL-programmers b/Lang/REXX/Calendar---for-REAL-programmers
new file mode 120000
index 0000000000..fbf41de075
--- /dev/null
+++ b/Lang/REXX/Calendar---for-REAL-programmers
@@ -0,0 +1 @@
+../../Task/Calendar---for-REAL-programmers/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Casting-out-nines b/Lang/REXX/Casting-out-nines
new file mode 120000
index 0000000000..caed618ed0
--- /dev/null
+++ b/Lang/REXX/Casting-out-nines
@@ -0,0 +1 @@
+../../Task/Casting-out-nines/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Catalan-numbers-Pascals-triangle b/Lang/REXX/Catalan-numbers-Pascals-triangle
new file mode 120000
index 0000000000..7fc3be76e6
--- /dev/null
+++ b/Lang/REXX/Catalan-numbers-Pascals-triangle
@@ -0,0 +1 @@
+../../Task/Catalan-numbers-Pascals-triangle/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Catamorphism b/Lang/REXX/Catamorphism
new file mode 120000
index 0000000000..c9120bd890
--- /dev/null
+++ b/Lang/REXX/Catamorphism
@@ -0,0 +1 @@
+../../Task/Catamorphism/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Chinese-remainder-theorem b/Lang/REXX/Chinese-remainder-theorem
new file mode 120000
index 0000000000..b5f01c0971
--- /dev/null
+++ b/Lang/REXX/Chinese-remainder-theorem
@@ -0,0 +1 @@
+../../Task/Chinese-remainder-theorem/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Circles-of-given-radius-through-two-points b/Lang/REXX/Circles-of-given-radius-through-two-points
new file mode 120000
index 0000000000..e398e611a5
--- /dev/null
+++ b/Lang/REXX/Circles-of-given-radius-through-two-points
@@ -0,0 +1 @@
+../../Task/Circles-of-given-radius-through-two-points/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Closures-Value-capture b/Lang/REXX/Closures-Value-capture
new file mode 120000
index 0000000000..709f21d7b1
--- /dev/null
+++ b/Lang/REXX/Closures-Value-capture
@@ -0,0 +1 @@
+../../Task/Closures-Value-capture/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Combinations-and-permutations b/Lang/REXX/Combinations-and-permutations
new file mode 120000
index 0000000000..ebf0a00bd3
--- /dev/null
+++ b/Lang/REXX/Combinations-and-permutations
@@ -0,0 +1 @@
+../../Task/Combinations-and-permutations/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Comma-quibbling b/Lang/REXX/Comma-quibbling
new file mode 120000
index 0000000000..fe8b120114
--- /dev/null
+++ b/Lang/REXX/Comma-quibbling
@@ -0,0 +1 @@
+../../Task/Comma-quibbling/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Conjugate-transpose b/Lang/REXX/Conjugate-transpose
new file mode 120000
index 0000000000..ad9621cc10
--- /dev/null
+++ b/Lang/REXX/Conjugate-transpose
@@ -0,0 +1 @@
+../../Task/Conjugate-transpose/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Convert-decimal-number-to-rational b/Lang/REXX/Convert-decimal-number-to-rational
new file mode 120000
index 0000000000..2afd3dd741
--- /dev/null
+++ b/Lang/REXX/Convert-decimal-number-to-rational
@@ -0,0 +1 @@
+../../Task/Convert-decimal-number-to-rational/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Currying b/Lang/REXX/Currying
new file mode 120000
index 0000000000..3c68456c21
--- /dev/null
+++ b/Lang/REXX/Currying
@@ -0,0 +1 @@
+../../Task/Currying/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Digital-root-Multiplicative-digital-root b/Lang/REXX/Digital-root-Multiplicative-digital-root
new file mode 120000
index 0000000000..736e65429a
--- /dev/null
+++ b/Lang/REXX/Digital-root-Multiplicative-digital-root
@@ -0,0 +1 @@
+../../Task/Digital-root-Multiplicative-digital-root/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Draw-a-clock b/Lang/REXX/Draw-a-clock
new file mode 120000
index 0000000000..3f7a97c39d
--- /dev/null
+++ b/Lang/REXX/Draw-a-clock
@@ -0,0 +1 @@
+../../Task/Draw-a-clock/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Extensible-prime-generator b/Lang/REXX/Extensible-prime-generator
new file mode 120000
index 0000000000..be9243ae70
--- /dev/null
+++ b/Lang/REXX/Extensible-prime-generator
@@ -0,0 +1 @@
+../../Task/Extensible-prime-generator/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Fibonacci-word b/Lang/REXX/Fibonacci-word
new file mode 120000
index 0000000000..9b90790b83
--- /dev/null
+++ b/Lang/REXX/Fibonacci-word
@@ -0,0 +1 @@
+../../Task/Fibonacci-word/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Fibonacci-word-fractal b/Lang/REXX/Fibonacci-word-fractal
new file mode 120000
index 0000000000..99bb62cc6c
--- /dev/null
+++ b/Lang/REXX/Fibonacci-word-fractal
@@ -0,0 +1 @@
+../../Task/Fibonacci-word-fractal/REXX
\ No newline at end of file
diff --git a/Lang/REXX/File-input-output b/Lang/REXX/File-input-output
new file mode 120000
index 0000000000..3a45b1ec58
--- /dev/null
+++ b/Lang/REXX/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Find-the-last-Sunday-of-each-month b/Lang/REXX/Find-the-last-Sunday-of-each-month
new file mode 120000
index 0000000000..14887968cc
--- /dev/null
+++ b/Lang/REXX/Find-the-last-Sunday-of-each-month
@@ -0,0 +1 @@
+../../Task/Find-the-last-Sunday-of-each-month/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Flipping-bits-game b/Lang/REXX/Flipping-bits-game
new file mode 120000
index 0000000000..9310002c87
--- /dev/null
+++ b/Lang/REXX/Flipping-bits-game
@@ -0,0 +1 @@
+../../Task/Flipping-bits-game/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Fractran b/Lang/REXX/Fractran
new file mode 120000
index 0000000000..202c9bcb75
--- /dev/null
+++ b/Lang/REXX/Fractran
@@ -0,0 +1 @@
+../../Task/Fractran/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Gaussian-elimination b/Lang/REXX/Gaussian-elimination
new file mode 120000
index 0000000000..2c3e2c072b
--- /dev/null
+++ b/Lang/REXX/Gaussian-elimination
@@ -0,0 +1 @@
+../../Task/Gaussian-elimination/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Generate-Chess960-starting-position b/Lang/REXX/Generate-Chess960-starting-position
new file mode 120000
index 0000000000..a3625bc2a7
--- /dev/null
+++ b/Lang/REXX/Generate-Chess960-starting-position
@@ -0,0 +1 @@
+../../Task/Generate-Chess960-starting-position/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Generate-lower-case-ASCII-alphabet b/Lang/REXX/Generate-lower-case-ASCII-alphabet
new file mode 120000
index 0000000000..c9f274710b
--- /dev/null
+++ b/Lang/REXX/Generate-lower-case-ASCII-alphabet
@@ -0,0 +1 @@
+../../Task/Generate-lower-case-ASCII-alphabet/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Hash-join b/Lang/REXX/Hash-join
new file mode 120000
index 0000000000..b5b7e1a63e
--- /dev/null
+++ b/Lang/REXX/Hash-join
@@ -0,0 +1 @@
+../../Task/Hash-join/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Hello-world-Newbie b/Lang/REXX/Hello-world-Newbie
new file mode 120000
index 0000000000..219058c8cc
--- /dev/null
+++ b/Lang/REXX/Hello-world-Newbie
@@ -0,0 +1 @@
+../../Task/Hello-world-Newbie/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Heronian-triangles b/Lang/REXX/Heronian-triangles
new file mode 120000
index 0000000000..9c1244a173
--- /dev/null
+++ b/Lang/REXX/Heronian-triangles
@@ -0,0 +1 @@
+../../Task/Heronian-triangles/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Hickerson-series-of-almost-integers b/Lang/REXX/Hickerson-series-of-almost-integers
new file mode 120000
index 0000000000..8fc1748b19
--- /dev/null
+++ b/Lang/REXX/Hickerson-series-of-almost-integers
@@ -0,0 +1 @@
+../../Task/Hickerson-series-of-almost-integers/REXX
\ No newline at end of file
diff --git a/Lang/REXX/IBAN b/Lang/REXX/IBAN
new file mode 120000
index 0000000000..d1f1669b76
--- /dev/null
+++ b/Lang/REXX/IBAN
@@ -0,0 +1 @@
+../../Task/IBAN/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Integer-overflow b/Lang/REXX/Integer-overflow
new file mode 120000
index 0000000000..4d4fac4681
--- /dev/null
+++ b/Lang/REXX/Integer-overflow
@@ -0,0 +1 @@
+../../Task/Integer-overflow/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Iterated-digits-squaring b/Lang/REXX/Iterated-digits-squaring
new file mode 120000
index 0000000000..86301b8ae9
--- /dev/null
+++ b/Lang/REXX/Iterated-digits-squaring
@@ -0,0 +1 @@
+../../Task/Iterated-digits-squaring/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Left-factorials b/Lang/REXX/Left-factorials
new file mode 120000
index 0000000000..fda929295a
--- /dev/null
+++ b/Lang/REXX/Left-factorials
@@ -0,0 +1 @@
+../../Task/Left-factorials/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Ludic-numbers b/Lang/REXX/Ludic-numbers
new file mode 120000
index 0000000000..75d57cbf89
--- /dev/null
+++ b/Lang/REXX/Ludic-numbers
@@ -0,0 +1 @@
+../../Task/Ludic-numbers/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Magic-squares-of-odd-order b/Lang/REXX/Magic-squares-of-odd-order
new file mode 120000
index 0000000000..06f80670e5
--- /dev/null
+++ b/Lang/REXX/Magic-squares-of-odd-order
@@ -0,0 +1 @@
+../../Task/Magic-squares-of-odd-order/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Make-directory-path b/Lang/REXX/Make-directory-path
new file mode 120000
index 0000000000..811fa4fe4b
--- /dev/null
+++ b/Lang/REXX/Make-directory-path
@@ -0,0 +1 @@
+../../Task/Make-directory-path/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Maximum-triangle-path-sum b/Lang/REXX/Maximum-triangle-path-sum
new file mode 120000
index 0000000000..259e55e547
--- /dev/null
+++ b/Lang/REXX/Maximum-triangle-path-sum
@@ -0,0 +1 @@
+../../Task/Maximum-triangle-path-sum/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Move-to-front-algorithm b/Lang/REXX/Move-to-front-algorithm
new file mode 120000
index 0000000000..6cef35cf19
--- /dev/null
+++ b/Lang/REXX/Move-to-front-algorithm
@@ -0,0 +1 @@
+../../Task/Move-to-front-algorithm/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Narcissistic-decimal-number b/Lang/REXX/Narcissistic-decimal-number
new file mode 120000
index 0000000000..11a4e22ae1
--- /dev/null
+++ b/Lang/REXX/Narcissistic-decimal-number
@@ -0,0 +1 @@
+../../Task/Narcissistic-decimal-number/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Nth b/Lang/REXX/Nth
new file mode 120000
index 0000000000..15ba3e9755
--- /dev/null
+++ b/Lang/REXX/Nth
@@ -0,0 +1 @@
+../../Task/Nth/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Odd-word-problem b/Lang/REXX/Odd-word-problem
new file mode 120000
index 0000000000..303f577dd9
--- /dev/null
+++ b/Lang/REXX/Odd-word-problem
@@ -0,0 +1 @@
+../../Task/Odd-word-problem/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Old-lady-swallowed-a-fly b/Lang/REXX/Old-lady-swallowed-a-fly
new file mode 120000
index 0000000000..9caab24816
--- /dev/null
+++ b/Lang/REXX/Old-lady-swallowed-a-fly
@@ -0,0 +1 @@
+../../Task/Old-lady-swallowed-a-fly/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Order-disjoint-list-items b/Lang/REXX/Order-disjoint-list-items
new file mode 120000
index 0000000000..66372bede6
--- /dev/null
+++ b/Lang/REXX/Order-disjoint-list-items
@@ -0,0 +1 @@
+../../Task/Order-disjoint-list-items/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Paraffins b/Lang/REXX/Paraffins
new file mode 120000
index 0000000000..98ccd950a2
--- /dev/null
+++ b/Lang/REXX/Paraffins
@@ -0,0 +1 @@
+../../Task/Paraffins/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Parse-an-IP-Address b/Lang/REXX/Parse-an-IP-Address
new file mode 120000
index 0000000000..0c329dcd23
--- /dev/null
+++ b/Lang/REXX/Parse-an-IP-Address
@@ -0,0 +1 @@
+../../Task/Parse-an-IP-Address/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Penneys-game b/Lang/REXX/Penneys-game
new file mode 120000
index 0000000000..d613c8f4d4
--- /dev/null
+++ b/Lang/REXX/Penneys-game
@@ -0,0 +1 @@
+../../Task/Penneys-game/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Permutations-Rank-of-a-permutation b/Lang/REXX/Permutations-Rank-of-a-permutation
new file mode 120000
index 0000000000..a006d58d6e
--- /dev/null
+++ b/Lang/REXX/Permutations-Rank-of-a-permutation
@@ -0,0 +1 @@
+../../Task/Permutations-Rank-of-a-permutation/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Pernicious-numbers b/Lang/REXX/Pernicious-numbers
new file mode 120000
index 0000000000..516773046f
--- /dev/null
+++ b/Lang/REXX/Pernicious-numbers
@@ -0,0 +1 @@
+../../Task/Pernicious-numbers/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Phrase-reversals b/Lang/REXX/Phrase-reversals
new file mode 120000
index 0000000000..fb720d4d1c
--- /dev/null
+++ b/Lang/REXX/Phrase-reversals
@@ -0,0 +1 @@
+../../Task/Phrase-reversals/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Quickselect-algorithm b/Lang/REXX/Quickselect-algorithm
new file mode 120000
index 0000000000..ef4c8900cf
--- /dev/null
+++ b/Lang/REXX/Quickselect-algorithm
@@ -0,0 +1 @@
+../../Task/Quickselect-algorithm/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Rep-string b/Lang/REXX/Rep-string
new file mode 120000
index 0000000000..b155527c95
--- /dev/null
+++ b/Lang/REXX/Rep-string
@@ -0,0 +1 @@
+../../Task/Rep-string/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Reverse-words-in-a-string b/Lang/REXX/Reverse-words-in-a-string
new file mode 120000
index 0000000000..317a0cfbbd
--- /dev/null
+++ b/Lang/REXX/Reverse-words-in-a-string
@@ -0,0 +1 @@
+../../Task/Reverse-words-in-a-string/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Runge-Kutta-method b/Lang/REXX/Runge-Kutta-method
new file mode 120000
index 0000000000..95816fd7ae
--- /dev/null
+++ b/Lang/REXX/Runge-Kutta-method
@@ -0,0 +1 @@
+../../Task/Runge-Kutta-method/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Semiprime b/Lang/REXX/Semiprime
new file mode 120000
index 0000000000..96972017e2
--- /dev/null
+++ b/Lang/REXX/Semiprime
@@ -0,0 +1 @@
+../../Task/Semiprime/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Sequence-of-primes-by-Trial-Division b/Lang/REXX/Sequence-of-primes-by-Trial-Division
new file mode 120000
index 0000000000..c334f9492f
--- /dev/null
+++ b/Lang/REXX/Sequence-of-primes-by-Trial-Division
@@ -0,0 +1 @@
+../../Task/Sequence-of-primes-by-Trial-Division/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Solve-a-Holy-Knights-tour b/Lang/REXX/Solve-a-Holy-Knights-tour
new file mode 120000
index 0000000000..b45c116e70
--- /dev/null
+++ b/Lang/REXX/Solve-a-Holy-Knights-tour
@@ -0,0 +1 @@
+../../Task/Solve-a-Holy-Knights-tour/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Solve-a-Hopido-puzzle b/Lang/REXX/Solve-a-Hopido-puzzle
new file mode 120000
index 0000000000..37591c1f37
--- /dev/null
+++ b/Lang/REXX/Solve-a-Hopido-puzzle
@@ -0,0 +1 @@
+../../Task/Solve-a-Hopido-puzzle/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Solve-a-Numbrix-puzzle b/Lang/REXX/Solve-a-Numbrix-puzzle
new file mode 120000
index 0000000000..86a629cb3f
--- /dev/null
+++ b/Lang/REXX/Solve-a-Numbrix-puzzle
@@ -0,0 +1 @@
+../../Task/Solve-a-Numbrix-puzzle/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Solve-the-no-connection-puzzle b/Lang/REXX/Solve-the-no-connection-puzzle
new file mode 120000
index 0000000000..1a41d78406
--- /dev/null
+++ b/Lang/REXX/Solve-the-no-connection-puzzle
@@ -0,0 +1 @@
+../../Task/Solve-the-no-connection-puzzle/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Sparkline-in-unicode b/Lang/REXX/Sparkline-in-unicode
new file mode 120000
index 0000000000..5366195abd
--- /dev/null
+++ b/Lang/REXX/Sparkline-in-unicode
@@ -0,0 +1 @@
+../../Task/Sparkline-in-unicode/REXX
\ No newline at end of file
diff --git a/Lang/REXX/State-name-puzzle b/Lang/REXX/State-name-puzzle
new file mode 120000
index 0000000000..614adb2956
--- /dev/null
+++ b/Lang/REXX/State-name-puzzle
@@ -0,0 +1 @@
+../../Task/State-name-puzzle/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Statistics-Basic b/Lang/REXX/Statistics-Basic
new file mode 120000
index 0000000000..bfa9cf1908
--- /dev/null
+++ b/Lang/REXX/Statistics-Basic
@@ -0,0 +1 @@
+../../Task/Statistics-Basic/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Stern-Brocot-sequence b/Lang/REXX/Stern-Brocot-sequence
new file mode 120000
index 0000000000..60449b30ec
--- /dev/null
+++ b/Lang/REXX/Stern-Brocot-sequence
@@ -0,0 +1 @@
+../../Task/Stern-Brocot-sequence/REXX
\ No newline at end of file
diff --git a/Lang/REXX/String-append b/Lang/REXX/String-append
new file mode 120000
index 0000000000..cc30f0f14e
--- /dev/null
+++ b/Lang/REXX/String-append
@@ -0,0 +1 @@
+../../Task/String-append/REXX
\ No newline at end of file
diff --git a/Lang/REXX/String-matching b/Lang/REXX/String-matching
new file mode 120000
index 0000000000..d75f6c9ab6
--- /dev/null
+++ b/Lang/REXX/String-matching
@@ -0,0 +1 @@
+../../Task/String-matching/REXX
\ No newline at end of file
diff --git a/Lang/REXX/String-prepend b/Lang/REXX/String-prepend
new file mode 120000
index 0000000000..c038b6f13f
--- /dev/null
+++ b/Lang/REXX/String-prepend
@@ -0,0 +1 @@
+../../Task/String-prepend/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Sum-multiples-of-3-and-5 b/Lang/REXX/Sum-multiples-of-3-and-5
new file mode 120000
index 0000000000..f8d802544d
--- /dev/null
+++ b/Lang/REXX/Sum-multiples-of-3-and-5
@@ -0,0 +1 @@
+../../Task/Sum-multiples-of-3-and-5/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Textonyms b/Lang/REXX/Textonyms
new file mode 120000
index 0000000000..214ba5cb5b
--- /dev/null
+++ b/Lang/REXX/Textonyms
@@ -0,0 +1 @@
+../../Task/Textonyms/REXX
\ No newline at end of file
diff --git a/Lang/REXX/The-ISAAC-Cipher b/Lang/REXX/The-ISAAC-Cipher
new file mode 120000
index 0000000000..9de63def31
--- /dev/null
+++ b/Lang/REXX/The-ISAAC-Cipher
@@ -0,0 +1 @@
+../../Task/The-ISAAC-Cipher/REXX
\ No newline at end of file
diff --git a/Lang/REXX/The-Twelve-Days-of-Christmas b/Lang/REXX/The-Twelve-Days-of-Christmas
new file mode 120000
index 0000000000..3397abd1b4
--- /dev/null
+++ b/Lang/REXX/The-Twelve-Days-of-Christmas
@@ -0,0 +1 @@
+../../Task/The-Twelve-Days-of-Christmas/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Total-circles-area b/Lang/REXX/Total-circles-area
new file mode 120000
index 0000000000..f2ddc8fc3f
--- /dev/null
+++ b/Lang/REXX/Total-circles-area
@@ -0,0 +1 @@
+../../Task/Total-circles-area/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Ulam-spiral--for-primes- b/Lang/REXX/Ulam-spiral--for-primes-
new file mode 120000
index 0000000000..28ed891dcb
--- /dev/null
+++ b/Lang/REXX/Ulam-spiral--for-primes-
@@ -0,0 +1 @@
+../../Task/Ulam-spiral--for-primes-/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Unix-ls b/Lang/REXX/Unix-ls
new file mode 120000
index 0000000000..d8a9bf89b3
--- /dev/null
+++ b/Lang/REXX/Unix-ls
@@ -0,0 +1 @@
+../../Task/Unix-ls/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Zero-to-the-zero-power b/Lang/REXX/Zero-to-the-zero-power
new file mode 120000
index 0000000000..58425b3d3a
--- /dev/null
+++ b/Lang/REXX/Zero-to-the-zero-power
@@ -0,0 +1 @@
+../../Task/Zero-to-the-zero-power/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Zhang-Suen-thinning-algorithm b/Lang/REXX/Zhang-Suen-thinning-algorithm
new file mode 120000
index 0000000000..3844941c3a
--- /dev/null
+++ b/Lang/REXX/Zhang-Suen-thinning-algorithm
@@ -0,0 +1 @@
+../../Task/Zhang-Suen-thinning-algorithm/REXX
\ No newline at end of file
diff --git a/Lang/Racket/9-billion-names-of-God-the-integer b/Lang/Racket/9-billion-names-of-God-the-integer
new file mode 120000
index 0000000000..e666698e50
--- /dev/null
+++ b/Lang/Racket/9-billion-names-of-God-the-integer
@@ -0,0 +1 @@
+../../Task/9-billion-names-of-God-the-integer/Racket
\ No newline at end of file
diff --git a/Lang/Racket/ABC-Problem b/Lang/Racket/ABC-Problem
new file mode 120000
index 0000000000..9faff3dd18
--- /dev/null
+++ b/Lang/Racket/ABC-Problem
@@ -0,0 +1 @@
+../../Task/ABC-Problem/Racket
\ No newline at end of file
diff --git a/Lang/Racket/AKS-test-for-primes b/Lang/Racket/AKS-test-for-primes
new file mode 120000
index 0000000000..67ef700981
--- /dev/null
+++ b/Lang/Racket/AKS-test-for-primes
@@ -0,0 +1 @@
+../../Task/AKS-test-for-primes/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Abundant,-deficient-and-perfect-number-classifications b/Lang/Racket/Abundant,-deficient-and-perfect-number-classifications
new file mode 120000
index 0000000000..52ce51640d
--- /dev/null
+++ b/Lang/Racket/Abundant,-deficient-and-perfect-number-classifications
@@ -0,0 +1 @@
+../../Task/Abundant,-deficient-and-perfect-number-classifications/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Aliquot-sequence-classifications b/Lang/Racket/Aliquot-sequence-classifications
new file mode 120000
index 0000000000..5c9be191f6
--- /dev/null
+++ b/Lang/Racket/Aliquot-sequence-classifications
@@ -0,0 +1 @@
+../../Task/Aliquot-sequence-classifications/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Almost-prime b/Lang/Racket/Almost-prime
new file mode 120000
index 0000000000..92f4a03e5a
--- /dev/null
+++ b/Lang/Racket/Almost-prime
@@ -0,0 +1 @@
+../../Task/Almost-prime/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Amb b/Lang/Racket/Amb
new file mode 120000
index 0000000000..53bad6c7d4
--- /dev/null
+++ b/Lang/Racket/Amb
@@ -0,0 +1 @@
+../../Task/Amb/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Amicable-pairs b/Lang/Racket/Amicable-pairs
new file mode 120000
index 0000000000..65666502c7
--- /dev/null
+++ b/Lang/Racket/Amicable-pairs
@@ -0,0 +1 @@
+../../Task/Amicable-pairs/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Arithmetic-geometric-mean-Calculate-Pi b/Lang/Racket/Arithmetic-geometric-mean-Calculate-Pi
new file mode 120000
index 0000000000..86eff23e2a
--- /dev/null
+++ b/Lang/Racket/Arithmetic-geometric-mean-Calculate-Pi
@@ -0,0 +1 @@
+../../Task/Arithmetic-geometric-mean-Calculate-Pi/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Benfords-law b/Lang/Racket/Benfords-law
new file mode 120000
index 0000000000..0845953be5
--- /dev/null
+++ b/Lang/Racket/Benfords-law
@@ -0,0 +1 @@
+../../Task/Benfords-law/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Bernoulli-numbers b/Lang/Racket/Bernoulli-numbers
new file mode 120000
index 0000000000..cb5d046fef
--- /dev/null
+++ b/Lang/Racket/Bernoulli-numbers
@@ -0,0 +1 @@
+../../Task/Bernoulli-numbers/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Bitcoin-public-point-to-address b/Lang/Racket/Bitcoin-public-point-to-address
new file mode 120000
index 0000000000..17b9333302
--- /dev/null
+++ b/Lang/Racket/Bitcoin-public-point-to-address
@@ -0,0 +1 @@
+../../Task/Bitcoin-public-point-to-address/Racket
\ No newline at end of file
diff --git a/Lang/Racket/CSV-data-manipulation b/Lang/Racket/CSV-data-manipulation
new file mode 120000
index 0000000000..c8bba1b310
--- /dev/null
+++ b/Lang/Racket/CSV-data-manipulation
@@ -0,0 +1 @@
+../../Task/CSV-data-manipulation/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Calendar---for-REAL-programmers b/Lang/Racket/Calendar---for-REAL-programmers
new file mode 120000
index 0000000000..6f3763eda5
--- /dev/null
+++ b/Lang/Racket/Calendar---for-REAL-programmers
@@ -0,0 +1 @@
+../../Task/Calendar---for-REAL-programmers/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Casting-out-nines b/Lang/Racket/Casting-out-nines
new file mode 120000
index 0000000000..0c0b0e054a
--- /dev/null
+++ b/Lang/Racket/Casting-out-nines
@@ -0,0 +1 @@
+../../Task/Casting-out-nines/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Catalan-numbers-Pascals-triangle b/Lang/Racket/Catalan-numbers-Pascals-triangle
new file mode 120000
index 0000000000..1fad781c9a
--- /dev/null
+++ b/Lang/Racket/Catalan-numbers-Pascals-triangle
@@ -0,0 +1 @@
+../../Task/Catalan-numbers-Pascals-triangle/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Catamorphism b/Lang/Racket/Catamorphism
new file mode 120000
index 0000000000..1f0dd23907
--- /dev/null
+++ b/Lang/Racket/Catamorphism
@@ -0,0 +1 @@
+../../Task/Catamorphism/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Chinese-remainder-theorem b/Lang/Racket/Chinese-remainder-theorem
new file mode 120000
index 0000000000..8613105629
--- /dev/null
+++ b/Lang/Racket/Chinese-remainder-theorem
@@ -0,0 +1 @@
+../../Task/Chinese-remainder-theorem/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Circles-of-given-radius-through-two-points b/Lang/Racket/Circles-of-given-radius-through-two-points
new file mode 120000
index 0000000000..aa7208c58e
--- /dev/null
+++ b/Lang/Racket/Circles-of-given-radius-through-two-points
@@ -0,0 +1 @@
+../../Task/Circles-of-given-radius-through-two-points/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Closures-Value-capture b/Lang/Racket/Closures-Value-capture
new file mode 120000
index 0000000000..9a08756c4b
--- /dev/null
+++ b/Lang/Racket/Closures-Value-capture
@@ -0,0 +1 @@
+../../Task/Closures-Value-capture/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Combinations-and-permutations b/Lang/Racket/Combinations-and-permutations
new file mode 120000
index 0000000000..93dc531d90
--- /dev/null
+++ b/Lang/Racket/Combinations-and-permutations
@@ -0,0 +1 @@
+../../Task/Combinations-and-permutations/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Comma-quibbling b/Lang/Racket/Comma-quibbling
new file mode 120000
index 0000000000..753d3149f0
--- /dev/null
+++ b/Lang/Racket/Comma-quibbling
@@ -0,0 +1 @@
+../../Task/Comma-quibbling/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Conjugate-transpose b/Lang/Racket/Conjugate-transpose
new file mode 120000
index 0000000000..047d6a64d1
--- /dev/null
+++ b/Lang/Racket/Conjugate-transpose
@@ -0,0 +1 @@
+../../Task/Conjugate-transpose/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Convert-decimal-number-to-rational b/Lang/Racket/Convert-decimal-number-to-rational
new file mode 120000
index 0000000000..843f541965
--- /dev/null
+++ b/Lang/Racket/Convert-decimal-number-to-rational
@@ -0,0 +1 @@
+../../Task/Convert-decimal-number-to-rational/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Currying b/Lang/Racket/Currying
new file mode 120000
index 0000000000..2471b2df94
--- /dev/null
+++ b/Lang/Racket/Currying
@@ -0,0 +1 @@
+../../Task/Currying/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Digital-root-Multiplicative-digital-root b/Lang/Racket/Digital-root-Multiplicative-digital-root
new file mode 120000
index 0000000000..2231aa59b6
--- /dev/null
+++ b/Lang/Racket/Digital-root-Multiplicative-digital-root
@@ -0,0 +1 @@
+../../Task/Digital-root-Multiplicative-digital-root/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Draw-a-clock b/Lang/Racket/Draw-a-clock
new file mode 120000
index 0000000000..30abb5e5bc
--- /dev/null
+++ b/Lang/Racket/Draw-a-clock
@@ -0,0 +1 @@
+../../Task/Draw-a-clock/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Extensible-prime-generator b/Lang/Racket/Extensible-prime-generator
new file mode 120000
index 0000000000..59633811e7
--- /dev/null
+++ b/Lang/Racket/Extensible-prime-generator
@@ -0,0 +1 @@
+../../Task/Extensible-prime-generator/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Fibonacci-word b/Lang/Racket/Fibonacci-word
new file mode 120000
index 0000000000..92deb0d1e0
--- /dev/null
+++ b/Lang/Racket/Fibonacci-word
@@ -0,0 +1 @@
+../../Task/Fibonacci-word/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Fibonacci-word-fractal b/Lang/Racket/Fibonacci-word-fractal
new file mode 120000
index 0000000000..9ebb6ff255
--- /dev/null
+++ b/Lang/Racket/Fibonacci-word-fractal
@@ -0,0 +1 @@
+../../Task/Fibonacci-word-fractal/Racket
\ No newline at end of file
diff --git a/Lang/Racket/File-input-output b/Lang/Racket/File-input-output
new file mode 120000
index 0000000000..a26f3298a7
--- /dev/null
+++ b/Lang/Racket/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Find-the-last-Sunday-of-each-month b/Lang/Racket/Find-the-last-Sunday-of-each-month
new file mode 120000
index 0000000000..215a3ff8e1
--- /dev/null
+++ b/Lang/Racket/Find-the-last-Sunday-of-each-month
@@ -0,0 +1 @@
+../../Task/Find-the-last-Sunday-of-each-month/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Flipping-bits-game b/Lang/Racket/Flipping-bits-game
new file mode 120000
index 0000000000..31e5c2818d
--- /dev/null
+++ b/Lang/Racket/Flipping-bits-game
@@ -0,0 +1 @@
+../../Task/Flipping-bits-game/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Fractran b/Lang/Racket/Fractran
new file mode 120000
index 0000000000..0623bb5a37
--- /dev/null
+++ b/Lang/Racket/Fractran
@@ -0,0 +1 @@
+../../Task/Fractran/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Gaussian-elimination b/Lang/Racket/Gaussian-elimination
new file mode 120000
index 0000000000..c2df9daecf
--- /dev/null
+++ b/Lang/Racket/Gaussian-elimination
@@ -0,0 +1 @@
+../../Task/Gaussian-elimination/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Generate-Chess960-starting-position b/Lang/Racket/Generate-Chess960-starting-position
new file mode 120000
index 0000000000..dcda5b108b
--- /dev/null
+++ b/Lang/Racket/Generate-Chess960-starting-position
@@ -0,0 +1 @@
+../../Task/Generate-Chess960-starting-position/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Generate-lower-case-ASCII-alphabet b/Lang/Racket/Generate-lower-case-ASCII-alphabet
new file mode 120000
index 0000000000..8bb5b82a12
--- /dev/null
+++ b/Lang/Racket/Generate-lower-case-ASCII-alphabet
@@ -0,0 +1 @@
+../../Task/Generate-lower-case-ASCII-alphabet/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Hash-join b/Lang/Racket/Hash-join
new file mode 120000
index 0000000000..da5addb6ff
--- /dev/null
+++ b/Lang/Racket/Hash-join
@@ -0,0 +1 @@
+../../Task/Hash-join/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Heronian-triangles b/Lang/Racket/Heronian-triangles
new file mode 120000
index 0000000000..84baf65171
--- /dev/null
+++ b/Lang/Racket/Heronian-triangles
@@ -0,0 +1 @@
+../../Task/Heronian-triangles/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Hickerson-series-of-almost-integers b/Lang/Racket/Hickerson-series-of-almost-integers
new file mode 120000
index 0000000000..1ce5de62b0
--- /dev/null
+++ b/Lang/Racket/Hickerson-series-of-almost-integers
@@ -0,0 +1 @@
+../../Task/Hickerson-series-of-almost-integers/Racket
\ No newline at end of file
diff --git a/Lang/Racket/IBAN b/Lang/Racket/IBAN
new file mode 120000
index 0000000000..1627a1aa05
--- /dev/null
+++ b/Lang/Racket/IBAN
@@ -0,0 +1 @@
+../../Task/IBAN/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Iterated-digits-squaring b/Lang/Racket/Iterated-digits-squaring
new file mode 120000
index 0000000000..b40bcfd2f8
--- /dev/null
+++ b/Lang/Racket/Iterated-digits-squaring
@@ -0,0 +1 @@
+../../Task/Iterated-digits-squaring/Racket
\ No newline at end of file
diff --git a/Lang/Racket/K-d-tree b/Lang/Racket/K-d-tree
new file mode 120000
index 0000000000..2f3ccdcfa7
--- /dev/null
+++ b/Lang/Racket/K-d-tree
@@ -0,0 +1 @@
+../../Task/K-d-tree/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Left-factorials b/Lang/Racket/Left-factorials
new file mode 120000
index 0000000000..8dcefcf1f1
--- /dev/null
+++ b/Lang/Racket/Left-factorials
@@ -0,0 +1 @@
+../../Task/Left-factorials/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Longest-increasing-subsequence b/Lang/Racket/Longest-increasing-subsequence
new file mode 120000
index 0000000000..8a591aad40
--- /dev/null
+++ b/Lang/Racket/Longest-increasing-subsequence
@@ -0,0 +1 @@
+../../Task/Longest-increasing-subsequence/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Ludic-numbers b/Lang/Racket/Ludic-numbers
new file mode 120000
index 0000000000..970f6f5d01
--- /dev/null
+++ b/Lang/Racket/Ludic-numbers
@@ -0,0 +1 @@
+../../Task/Ludic-numbers/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Magic-squares-of-odd-order b/Lang/Racket/Magic-squares-of-odd-order
new file mode 120000
index 0000000000..ee598452c7
--- /dev/null
+++ b/Lang/Racket/Magic-squares-of-odd-order
@@ -0,0 +1 @@
+../../Task/Magic-squares-of-odd-order/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Make-directory-path b/Lang/Racket/Make-directory-path
new file mode 120000
index 0000000000..6e4a58095f
--- /dev/null
+++ b/Lang/Racket/Make-directory-path
@@ -0,0 +1 @@
+../../Task/Make-directory-path/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Maximum-triangle-path-sum b/Lang/Racket/Maximum-triangle-path-sum
new file mode 120000
index 0000000000..15f47fcf05
--- /dev/null
+++ b/Lang/Racket/Maximum-triangle-path-sum
@@ -0,0 +1 @@
+../../Task/Maximum-triangle-path-sum/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Move-to-front-algorithm b/Lang/Racket/Move-to-front-algorithm
new file mode 120000
index 0000000000..bddec8ef59
--- /dev/null
+++ b/Lang/Racket/Move-to-front-algorithm
@@ -0,0 +1 @@
+../../Task/Move-to-front-algorithm/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Munching-squares b/Lang/Racket/Munching-squares
new file mode 120000
index 0000000000..b2a43a98b1
--- /dev/null
+++ b/Lang/Racket/Munching-squares
@@ -0,0 +1 @@
+../../Task/Munching-squares/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Narcissistic-decimal-number b/Lang/Racket/Narcissistic-decimal-number
new file mode 120000
index 0000000000..e91b2d1d9e
--- /dev/null
+++ b/Lang/Racket/Narcissistic-decimal-number
@@ -0,0 +1 @@
+../../Task/Narcissistic-decimal-number/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Natural-sorting b/Lang/Racket/Natural-sorting
new file mode 120000
index 0000000000..36cd01c6bc
--- /dev/null
+++ b/Lang/Racket/Natural-sorting
@@ -0,0 +1 @@
+../../Task/Natural-sorting/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Nth b/Lang/Racket/Nth
new file mode 120000
index 0000000000..aaa81ab992
--- /dev/null
+++ b/Lang/Racket/Nth
@@ -0,0 +1 @@
+../../Task/Nth/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Odd-word-problem b/Lang/Racket/Odd-word-problem
new file mode 120000
index 0000000000..35b5a6d75b
--- /dev/null
+++ b/Lang/Racket/Odd-word-problem
@@ -0,0 +1 @@
+../../Task/Odd-word-problem/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Old-lady-swallowed-a-fly b/Lang/Racket/Old-lady-swallowed-a-fly
new file mode 120000
index 0000000000..6be1826634
--- /dev/null
+++ b/Lang/Racket/Old-lady-swallowed-a-fly
@@ -0,0 +1 @@
+../../Task/Old-lady-swallowed-a-fly/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Order-disjoint-list-items b/Lang/Racket/Order-disjoint-list-items
new file mode 120000
index 0000000000..e13f75bcec
--- /dev/null
+++ b/Lang/Racket/Order-disjoint-list-items
@@ -0,0 +1 @@
+../../Task/Order-disjoint-list-items/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Paraffins b/Lang/Racket/Paraffins
new file mode 120000
index 0000000000..3ed5965f50
--- /dev/null
+++ b/Lang/Racket/Paraffins
@@ -0,0 +1 @@
+../../Task/Paraffins/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Parse-an-IP-Address b/Lang/Racket/Parse-an-IP-Address
new file mode 120000
index 0000000000..94ff71b8e9
--- /dev/null
+++ b/Lang/Racket/Parse-an-IP-Address
@@ -0,0 +1 @@
+../../Task/Parse-an-IP-Address/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Penneys-game b/Lang/Racket/Penneys-game
new file mode 120000
index 0000000000..8c273969c7
--- /dev/null
+++ b/Lang/Racket/Penneys-game
@@ -0,0 +1 @@
+../../Task/Penneys-game/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Percolation-Bond-percolation b/Lang/Racket/Percolation-Bond-percolation
new file mode 120000
index 0000000000..608a0ff0cc
--- /dev/null
+++ b/Lang/Racket/Percolation-Bond-percolation
@@ -0,0 +1 @@
+../../Task/Percolation-Bond-percolation/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Percolation-Mean-cluster-density b/Lang/Racket/Percolation-Mean-cluster-density
new file mode 120000
index 0000000000..6feac8c5b3
--- /dev/null
+++ b/Lang/Racket/Percolation-Mean-cluster-density
@@ -0,0 +1 @@
+../../Task/Percolation-Mean-cluster-density/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Percolation-Mean-run-density b/Lang/Racket/Percolation-Mean-run-density
new file mode 120000
index 0000000000..5af3800df9
--- /dev/null
+++ b/Lang/Racket/Percolation-Mean-run-density
@@ -0,0 +1 @@
+../../Task/Percolation-Mean-run-density/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Percolation-Site-percolation b/Lang/Racket/Percolation-Site-percolation
new file mode 120000
index 0000000000..78dc927dcb
--- /dev/null
+++ b/Lang/Racket/Percolation-Site-percolation
@@ -0,0 +1 @@
+../../Task/Percolation-Site-percolation/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Permutations-Rank-of-a-permutation b/Lang/Racket/Permutations-Rank-of-a-permutation
new file mode 120000
index 0000000000..61362d11b9
--- /dev/null
+++ b/Lang/Racket/Permutations-Rank-of-a-permutation
@@ -0,0 +1 @@
+../../Task/Permutations-Rank-of-a-permutation/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Pernicious-numbers b/Lang/Racket/Pernicious-numbers
new file mode 120000
index 0000000000..414f1f0c6b
--- /dev/null
+++ b/Lang/Racket/Pernicious-numbers
@@ -0,0 +1 @@
+../../Task/Pernicious-numbers/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Phrase-reversals b/Lang/Racket/Phrase-reversals
new file mode 120000
index 0000000000..247c1aa664
--- /dev/null
+++ b/Lang/Racket/Phrase-reversals
@@ -0,0 +1 @@
+../../Task/Phrase-reversals/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Quickselect-algorithm b/Lang/Racket/Quickselect-algorithm
new file mode 120000
index 0000000000..8727eca9fb
--- /dev/null
+++ b/Lang/Racket/Quickselect-algorithm
@@ -0,0 +1 @@
+../../Task/Quickselect-algorithm/Racket
\ No newline at end of file
diff --git a/Lang/Racket/RSA-code b/Lang/Racket/RSA-code
new file mode 120000
index 0000000000..e7c21020f9
--- /dev/null
+++ b/Lang/Racket/RSA-code
@@ -0,0 +1 @@
+../../Task/RSA-code/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Ranking-methods b/Lang/Racket/Ranking-methods
new file mode 120000
index 0000000000..ccaede98ad
--- /dev/null
+++ b/Lang/Racket/Ranking-methods
@@ -0,0 +1 @@
+../../Task/Ranking-methods/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Rep-string b/Lang/Racket/Rep-string
new file mode 120000
index 0000000000..5282bd7927
--- /dev/null
+++ b/Lang/Racket/Rep-string
@@ -0,0 +1 @@
+../../Task/Rep-string/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Reverse-words-in-a-string b/Lang/Racket/Reverse-words-in-a-string
new file mode 120000
index 0000000000..1c059fc10a
--- /dev/null
+++ b/Lang/Racket/Reverse-words-in-a-string
@@ -0,0 +1 @@
+../../Task/Reverse-words-in-a-string/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Runge-Kutta-method b/Lang/Racket/Runge-Kutta-method
new file mode 120000
index 0000000000..5bb75d7f9e
--- /dev/null
+++ b/Lang/Racket/Runge-Kutta-method
@@ -0,0 +1 @@
+../../Task/Runge-Kutta-method/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Semiprime b/Lang/Racket/Semiprime
new file mode 120000
index 0000000000..830adbf126
--- /dev/null
+++ b/Lang/Racket/Semiprime
@@ -0,0 +1 @@
+../../Task/Semiprime/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Sequence-of-primes-by-Trial-Division b/Lang/Racket/Sequence-of-primes-by-Trial-Division
new file mode 120000
index 0000000000..b2d94526a6
--- /dev/null
+++ b/Lang/Racket/Sequence-of-primes-by-Trial-Division
@@ -0,0 +1 @@
+../../Task/Sequence-of-primes-by-Trial-Division/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Solve-a-Holy-Knights-tour b/Lang/Racket/Solve-a-Holy-Knights-tour
new file mode 120000
index 0000000000..2fe2866ab8
--- /dev/null
+++ b/Lang/Racket/Solve-a-Holy-Knights-tour
@@ -0,0 +1 @@
+../../Task/Solve-a-Holy-Knights-tour/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Solve-a-Hopido-puzzle b/Lang/Racket/Solve-a-Hopido-puzzle
new file mode 120000
index 0000000000..ad9a0f927c
--- /dev/null
+++ b/Lang/Racket/Solve-a-Hopido-puzzle
@@ -0,0 +1 @@
+../../Task/Solve-a-Hopido-puzzle/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Solve-a-Numbrix-puzzle b/Lang/Racket/Solve-a-Numbrix-puzzle
new file mode 120000
index 0000000000..b79bf471a0
--- /dev/null
+++ b/Lang/Racket/Solve-a-Numbrix-puzzle
@@ -0,0 +1 @@
+../../Task/Solve-a-Numbrix-puzzle/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Solve-the-no-connection-puzzle b/Lang/Racket/Solve-the-no-connection-puzzle
new file mode 120000
index 0000000000..d2946edc21
--- /dev/null
+++ b/Lang/Racket/Solve-the-no-connection-puzzle
@@ -0,0 +1 @@
+../../Task/Solve-the-no-connection-puzzle/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Sparkline-in-unicode b/Lang/Racket/Sparkline-in-unicode
new file mode 120000
index 0000000000..930c409823
--- /dev/null
+++ b/Lang/Racket/Sparkline-in-unicode
@@ -0,0 +1 @@
+../../Task/Sparkline-in-unicode/Racket
\ No newline at end of file
diff --git a/Lang/Racket/State-name-puzzle b/Lang/Racket/State-name-puzzle
new file mode 120000
index 0000000000..0557af9560
--- /dev/null
+++ b/Lang/Racket/State-name-puzzle
@@ -0,0 +1 @@
+../../Task/State-name-puzzle/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Statistics-Basic b/Lang/Racket/Statistics-Basic
new file mode 120000
index 0000000000..22ddb52363
--- /dev/null
+++ b/Lang/Racket/Statistics-Basic
@@ -0,0 +1 @@
+../../Task/Statistics-Basic/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Stern-Brocot-sequence b/Lang/Racket/Stern-Brocot-sequence
new file mode 120000
index 0000000000..b6dfb67ba9
--- /dev/null
+++ b/Lang/Racket/Stern-Brocot-sequence
@@ -0,0 +1 @@
+../../Task/Stern-Brocot-sequence/Racket
\ No newline at end of file
diff --git a/Lang/Racket/String-append b/Lang/Racket/String-append
new file mode 120000
index 0000000000..b315e12139
--- /dev/null
+++ b/Lang/Racket/String-append
@@ -0,0 +1 @@
+../../Task/String-append/Racket
\ No newline at end of file
diff --git a/Lang/Racket/String-matching b/Lang/Racket/String-matching
new file mode 120000
index 0000000000..66d0dd618b
--- /dev/null
+++ b/Lang/Racket/String-matching
@@ -0,0 +1 @@
+../../Task/String-matching/Racket
\ No newline at end of file
diff --git a/Lang/Racket/String-prepend b/Lang/Racket/String-prepend
new file mode 120000
index 0000000000..1fde47569f
--- /dev/null
+++ b/Lang/Racket/String-prepend
@@ -0,0 +1 @@
+../../Task/String-prepend/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Sum-multiples-of-3-and-5 b/Lang/Racket/Sum-multiples-of-3-and-5
new file mode 120000
index 0000000000..8bd432992e
--- /dev/null
+++ b/Lang/Racket/Sum-multiples-of-3-and-5
@@ -0,0 +1 @@
+../../Task/Sum-multiples-of-3-and-5/Racket
\ No newline at end of file
diff --git a/Lang/Racket/The-ISAAC-Cipher b/Lang/Racket/The-ISAAC-Cipher
new file mode 120000
index 0000000000..45900675ca
--- /dev/null
+++ b/Lang/Racket/The-ISAAC-Cipher
@@ -0,0 +1 @@
+../../Task/The-ISAAC-Cipher/Racket
\ No newline at end of file
diff --git a/Lang/Racket/The-Twelve-Days-of-Christmas b/Lang/Racket/The-Twelve-Days-of-Christmas
new file mode 120000
index 0000000000..a2b0f3808f
--- /dev/null
+++ b/Lang/Racket/The-Twelve-Days-of-Christmas
@@ -0,0 +1 @@
+../../Task/The-Twelve-Days-of-Christmas/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Ulam-spiral--for-primes- b/Lang/Racket/Ulam-spiral--for-primes-
new file mode 120000
index 0000000000..73d5442bdd
--- /dev/null
+++ b/Lang/Racket/Ulam-spiral--for-primes-
@@ -0,0 +1 @@
+../../Task/Ulam-spiral--for-primes-/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Unix-ls b/Lang/Racket/Unix-ls
new file mode 120000
index 0000000000..74b53a0df4
--- /dev/null
+++ b/Lang/Racket/Unix-ls
@@ -0,0 +1 @@
+../../Task/Unix-ls/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Vogels-approximation-method b/Lang/Racket/Vogels-approximation-method
new file mode 120000
index 0000000000..b814c2f78b
--- /dev/null
+++ b/Lang/Racket/Vogels-approximation-method
@@ -0,0 +1 @@
+../../Task/Vogels-approximation-method/Racket
\ No newline at end of file
diff --git a/Lang/Racket/World-Cup-group-stage b/Lang/Racket/World-Cup-group-stage
new file mode 120000
index 0000000000..79d2500605
--- /dev/null
+++ b/Lang/Racket/World-Cup-group-stage
@@ -0,0 +1 @@
+../../Task/World-Cup-group-stage/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Zero-to-the-zero-power b/Lang/Racket/Zero-to-the-zero-power
new file mode 120000
index 0000000000..09395e2d45
--- /dev/null
+++ b/Lang/Racket/Zero-to-the-zero-power
@@ -0,0 +1 @@
+../../Task/Zero-to-the-zero-power/Racket
\ No newline at end of file
diff --git a/Lang/Racket/Zhang-Suen-thinning-algorithm b/Lang/Racket/Zhang-Suen-thinning-algorithm
new file mode 120000
index 0000000000..ca95158a60
--- /dev/null
+++ b/Lang/Racket/Zhang-Suen-thinning-algorithm
@@ -0,0 +1 @@
+../../Task/Zhang-Suen-thinning-algorithm/Racket
\ No newline at end of file
diff --git a/Lang/RapidQ/ABC-Problem b/Lang/RapidQ/ABC-Problem
new file mode 120000
index 0000000000..ecaa7ec541
--- /dev/null
+++ b/Lang/RapidQ/ABC-Problem
@@ -0,0 +1 @@
+../../Task/ABC-Problem/RapidQ
\ No newline at end of file
diff --git a/Lang/RapidQ/Append-a-record-to-the-end-of-a-text-file b/Lang/RapidQ/Append-a-record-to-the-end-of-a-text-file
new file mode 120000
index 0000000000..fa4210c809
--- /dev/null
+++ b/Lang/RapidQ/Append-a-record-to-the-end-of-a-text-file
@@ -0,0 +1 @@
+../../Task/Append-a-record-to-the-end-of-a-text-file/RapidQ
\ No newline at end of file
diff --git a/Lang/RapidQ/File-input-output b/Lang/RapidQ/File-input-output
new file mode 120000
index 0000000000..9cfeba5793
--- /dev/null
+++ b/Lang/RapidQ/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/RapidQ
\ No newline at end of file
diff --git a/Lang/Raven/File-input-output b/Lang/Raven/File-input-output
new file mode 120000
index 0000000000..8dc9d9863f
--- /dev/null
+++ b/Lang/Raven/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/Raven
\ No newline at end of file
diff --git a/Lang/Retro/File-input-output b/Lang/Retro/File-input-output
new file mode 120000
index 0000000000..3cf3bc3ecf
--- /dev/null
+++ b/Lang/Retro/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/Retro
\ No newline at end of file
diff --git a/Lang/Retro/String-matching b/Lang/Retro/String-matching
new file mode 120000
index 0000000000..cdba728951
--- /dev/null
+++ b/Lang/Retro/String-matching
@@ -0,0 +1 @@
+../../Task/String-matching/Retro
\ No newline at end of file
diff --git a/Lang/Ruby/9-billion-names-of-God-the-integer b/Lang/Ruby/9-billion-names-of-God-the-integer
new file mode 120000
index 0000000000..ca7a307dc6
--- /dev/null
+++ b/Lang/Ruby/9-billion-names-of-God-the-integer
@@ -0,0 +1 @@
+../../Task/9-billion-names-of-God-the-integer/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/ABC-Problem b/Lang/Ruby/ABC-Problem
new file mode 120000
index 0000000000..0217b1c304
--- /dev/null
+++ b/Lang/Ruby/ABC-Problem
@@ -0,0 +1 @@
+../../Task/ABC-Problem/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/AKS-test-for-primes b/Lang/Ruby/AKS-test-for-primes
new file mode 120000
index 0000000000..6d55898060
--- /dev/null
+++ b/Lang/Ruby/AKS-test-for-primes
@@ -0,0 +1 @@
+../../Task/AKS-test-for-primes/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Abundant,-deficient-and-perfect-number-classifications b/Lang/Ruby/Abundant,-deficient-and-perfect-number-classifications
new file mode 120000
index 0000000000..9316c73f90
--- /dev/null
+++ b/Lang/Ruby/Abundant,-deficient-and-perfect-number-classifications
@@ -0,0 +1 @@
+../../Task/Abundant,-deficient-and-perfect-number-classifications/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Aliquot-sequence-classifications b/Lang/Ruby/Aliquot-sequence-classifications
new file mode 120000
index 0000000000..92175be2fb
--- /dev/null
+++ b/Lang/Ruby/Aliquot-sequence-classifications
@@ -0,0 +1 @@
+../../Task/Aliquot-sequence-classifications/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Almost-prime b/Lang/Ruby/Almost-prime
new file mode 120000
index 0000000000..2aa9c48356
--- /dev/null
+++ b/Lang/Ruby/Almost-prime
@@ -0,0 +1 @@
+../../Task/Almost-prime/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Amb b/Lang/Ruby/Amb
new file mode 120000
index 0000000000..83bf4777b0
--- /dev/null
+++ b/Lang/Ruby/Amb
@@ -0,0 +1 @@
+../../Task/Amb/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Amicable-pairs b/Lang/Ruby/Amicable-pairs
new file mode 120000
index 0000000000..cf6b6ec244
--- /dev/null
+++ b/Lang/Ruby/Amicable-pairs
@@ -0,0 +1 @@
+../../Task/Amicable-pairs/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Append-a-record-to-the-end-of-a-text-file b/Lang/Ruby/Append-a-record-to-the-end-of-a-text-file
new file mode 120000
index 0000000000..34eccd35bb
--- /dev/null
+++ b/Lang/Ruby/Append-a-record-to-the-end-of-a-text-file
@@ -0,0 +1 @@
+../../Task/Append-a-record-to-the-end-of-a-text-file/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Arithmetic-geometric-mean-Calculate-Pi b/Lang/Ruby/Arithmetic-geometric-mean-Calculate-Pi
new file mode 120000
index 0000000000..21bcdc9789
--- /dev/null
+++ b/Lang/Ruby/Arithmetic-geometric-mean-Calculate-Pi
@@ -0,0 +1 @@
+../../Task/Arithmetic-geometric-mean-Calculate-Pi/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Benfords-law b/Lang/Ruby/Benfords-law
new file mode 120000
index 0000000000..9720747b5d
--- /dev/null
+++ b/Lang/Ruby/Benfords-law
@@ -0,0 +1 @@
+../../Task/Benfords-law/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Bernoulli-numbers b/Lang/Ruby/Bernoulli-numbers
new file mode 120000
index 0000000000..a0989fb0cc
--- /dev/null
+++ b/Lang/Ruby/Bernoulli-numbers
@@ -0,0 +1 @@
+../../Task/Bernoulli-numbers/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Bitcoin-public-point-to-address b/Lang/Ruby/Bitcoin-public-point-to-address
new file mode 120000
index 0000000000..72aa4ec62f
--- /dev/null
+++ b/Lang/Ruby/Bitcoin-public-point-to-address
@@ -0,0 +1 @@
+../../Task/Bitcoin-public-point-to-address/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/CSV-data-manipulation b/Lang/Ruby/CSV-data-manipulation
new file mode 120000
index 0000000000..04d49ca994
--- /dev/null
+++ b/Lang/Ruby/CSV-data-manipulation
@@ -0,0 +1 @@
+../../Task/CSV-data-manipulation/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Calendar---for-REAL-programmers b/Lang/Ruby/Calendar---for-REAL-programmers
new file mode 120000
index 0000000000..ad90632b2f
--- /dev/null
+++ b/Lang/Ruby/Calendar---for-REAL-programmers
@@ -0,0 +1 @@
+../../Task/Calendar---for-REAL-programmers/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Catalan-numbers-Pascals-triangle b/Lang/Ruby/Catalan-numbers-Pascals-triangle
new file mode 120000
index 0000000000..0b9adaa70e
--- /dev/null
+++ b/Lang/Ruby/Catalan-numbers-Pascals-triangle
@@ -0,0 +1 @@
+../../Task/Catalan-numbers-Pascals-triangle/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Catamorphism b/Lang/Ruby/Catamorphism
new file mode 120000
index 0000000000..26c23f1462
--- /dev/null
+++ b/Lang/Ruby/Catamorphism
@@ -0,0 +1 @@
+../../Task/Catamorphism/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Chinese-remainder-theorem b/Lang/Ruby/Chinese-remainder-theorem
new file mode 120000
index 0000000000..df3076e2cf
--- /dev/null
+++ b/Lang/Ruby/Chinese-remainder-theorem
@@ -0,0 +1 @@
+../../Task/Chinese-remainder-theorem/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Circles-of-given-radius-through-two-points b/Lang/Ruby/Circles-of-given-radius-through-two-points
new file mode 120000
index 0000000000..48b4293336
--- /dev/null
+++ b/Lang/Ruby/Circles-of-given-radius-through-two-points
@@ -0,0 +1 @@
+../../Task/Circles-of-given-radius-through-two-points/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Closures-Value-capture b/Lang/Ruby/Closures-Value-capture
new file mode 120000
index 0000000000..15c9e9fe41
--- /dev/null
+++ b/Lang/Ruby/Closures-Value-capture
@@ -0,0 +1 @@
+../../Task/Closures-Value-capture/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Combinations-and-permutations b/Lang/Ruby/Combinations-and-permutations
new file mode 120000
index 0000000000..1ea5cfa0d2
--- /dev/null
+++ b/Lang/Ruby/Combinations-and-permutations
@@ -0,0 +1 @@
+../../Task/Combinations-and-permutations/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Comma-quibbling b/Lang/Ruby/Comma-quibbling
new file mode 120000
index 0000000000..62458ba04f
--- /dev/null
+++ b/Lang/Ruby/Comma-quibbling
@@ -0,0 +1 @@
+../../Task/Comma-quibbling/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Conjugate-transpose b/Lang/Ruby/Conjugate-transpose
new file mode 120000
index 0000000000..2802331eec
--- /dev/null
+++ b/Lang/Ruby/Conjugate-transpose
@@ -0,0 +1 @@
+../../Task/Conjugate-transpose/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Convert-decimal-number-to-rational b/Lang/Ruby/Convert-decimal-number-to-rational
new file mode 120000
index 0000000000..dc6dc5b76c
--- /dev/null
+++ b/Lang/Ruby/Convert-decimal-number-to-rational
@@ -0,0 +1 @@
+../../Task/Convert-decimal-number-to-rational/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Currying b/Lang/Ruby/Currying
new file mode 120000
index 0000000000..86bf783ee1
--- /dev/null
+++ b/Lang/Ruby/Currying
@@ -0,0 +1 @@
+../../Task/Currying/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Digital-root-Multiplicative-digital-root b/Lang/Ruby/Digital-root-Multiplicative-digital-root
new file mode 120000
index 0000000000..7b57191e24
--- /dev/null
+++ b/Lang/Ruby/Digital-root-Multiplicative-digital-root
@@ -0,0 +1 @@
+../../Task/Digital-root-Multiplicative-digital-root/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Draw-a-clock b/Lang/Ruby/Draw-a-clock
new file mode 120000
index 0000000000..c8422c028f
--- /dev/null
+++ b/Lang/Ruby/Draw-a-clock
@@ -0,0 +1 @@
+../../Task/Draw-a-clock/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Extensible-prime-generator b/Lang/Ruby/Extensible-prime-generator
new file mode 120000
index 0000000000..db9062fc8a
--- /dev/null
+++ b/Lang/Ruby/Extensible-prime-generator
@@ -0,0 +1 @@
+../../Task/Extensible-prime-generator/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Fibonacci-word b/Lang/Ruby/Fibonacci-word
new file mode 120000
index 0000000000..ae2e484994
--- /dev/null
+++ b/Lang/Ruby/Fibonacci-word
@@ -0,0 +1 @@
+../../Task/Fibonacci-word/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Fibonacci-word-fractal b/Lang/Ruby/Fibonacci-word-fractal
new file mode 120000
index 0000000000..7013b8fd5e
--- /dev/null
+++ b/Lang/Ruby/Fibonacci-word-fractal
@@ -0,0 +1 @@
+../../Task/Fibonacci-word-fractal/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/File-input-output b/Lang/Ruby/File-input-output
new file mode 120000
index 0000000000..4f09b7ce1c
--- /dev/null
+++ b/Lang/Ruby/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Find-the-last-Sunday-of-each-month b/Lang/Ruby/Find-the-last-Sunday-of-each-month
new file mode 120000
index 0000000000..d92935f3f2
--- /dev/null
+++ b/Lang/Ruby/Find-the-last-Sunday-of-each-month
@@ -0,0 +1 @@
+../../Task/Find-the-last-Sunday-of-each-month/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Flipping-bits-game b/Lang/Ruby/Flipping-bits-game
new file mode 120000
index 0000000000..b148400a05
--- /dev/null
+++ b/Lang/Ruby/Flipping-bits-game
@@ -0,0 +1 @@
+../../Task/Flipping-bits-game/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Fractran b/Lang/Ruby/Fractran
new file mode 120000
index 0000000000..ab43e33c21
--- /dev/null
+++ b/Lang/Ruby/Fractran
@@ -0,0 +1 @@
+../../Task/Fractran/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Gaussian-elimination b/Lang/Ruby/Gaussian-elimination
new file mode 120000
index 0000000000..3aadfc6896
--- /dev/null
+++ b/Lang/Ruby/Gaussian-elimination
@@ -0,0 +1 @@
+../../Task/Gaussian-elimination/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Generate-Chess960-starting-position b/Lang/Ruby/Generate-Chess960-starting-position
new file mode 120000
index 0000000000..e4fe9df62d
--- /dev/null
+++ b/Lang/Ruby/Generate-Chess960-starting-position
@@ -0,0 +1 @@
+../../Task/Generate-Chess960-starting-position/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Generate-lower-case-ASCII-alphabet b/Lang/Ruby/Generate-lower-case-ASCII-alphabet
new file mode 120000
index 0000000000..992d3a5c30
--- /dev/null
+++ b/Lang/Ruby/Generate-lower-case-ASCII-alphabet
@@ -0,0 +1 @@
+../../Task/Generate-lower-case-ASCII-alphabet/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Hash-join b/Lang/Ruby/Hash-join
new file mode 120000
index 0000000000..fe2f2889c8
--- /dev/null
+++ b/Lang/Ruby/Hash-join
@@ -0,0 +1 @@
+../../Task/Hash-join/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Heronian-triangles b/Lang/Ruby/Heronian-triangles
new file mode 120000
index 0000000000..cf38ce98a2
--- /dev/null
+++ b/Lang/Ruby/Heronian-triangles
@@ -0,0 +1 @@
+../../Task/Heronian-triangles/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Hickerson-series-of-almost-integers b/Lang/Ruby/Hickerson-series-of-almost-integers
new file mode 120000
index 0000000000..fc706a038c
--- /dev/null
+++ b/Lang/Ruby/Hickerson-series-of-almost-integers
@@ -0,0 +1 @@
+../../Task/Hickerson-series-of-almost-integers/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/IBAN b/Lang/Ruby/IBAN
new file mode 120000
index 0000000000..d5b4d3337f
--- /dev/null
+++ b/Lang/Ruby/IBAN
@@ -0,0 +1 @@
+../../Task/IBAN/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Integer-overflow b/Lang/Ruby/Integer-overflow
new file mode 120000
index 0000000000..d4c164e4fa
--- /dev/null
+++ b/Lang/Ruby/Integer-overflow
@@ -0,0 +1 @@
+../../Task/Integer-overflow/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Iterated-digits-squaring b/Lang/Ruby/Iterated-digits-squaring
new file mode 120000
index 0000000000..d6724a7174
--- /dev/null
+++ b/Lang/Ruby/Iterated-digits-squaring
@@ -0,0 +1 @@
+../../Task/Iterated-digits-squaring/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Left-factorials b/Lang/Ruby/Left-factorials
new file mode 120000
index 0000000000..d3381e8a5c
--- /dev/null
+++ b/Lang/Ruby/Left-factorials
@@ -0,0 +1 @@
+../../Task/Left-factorials/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Longest-increasing-subsequence b/Lang/Ruby/Longest-increasing-subsequence
new file mode 120000
index 0000000000..02a4b3f7e0
--- /dev/null
+++ b/Lang/Ruby/Longest-increasing-subsequence
@@ -0,0 +1 @@
+../../Task/Longest-increasing-subsequence/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Ludic-numbers b/Lang/Ruby/Ludic-numbers
new file mode 120000
index 0000000000..89feba939a
--- /dev/null
+++ b/Lang/Ruby/Ludic-numbers
@@ -0,0 +1 @@
+../../Task/Ludic-numbers/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Magic-squares-of-odd-order b/Lang/Ruby/Magic-squares-of-odd-order
new file mode 120000
index 0000000000..8901a86701
--- /dev/null
+++ b/Lang/Ruby/Magic-squares-of-odd-order
@@ -0,0 +1 @@
+../../Task/Magic-squares-of-odd-order/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Make-directory-path b/Lang/Ruby/Make-directory-path
new file mode 120000
index 0000000000..5da8e2a2af
--- /dev/null
+++ b/Lang/Ruby/Make-directory-path
@@ -0,0 +1 @@
+../../Task/Make-directory-path/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Maximum-triangle-path-sum b/Lang/Ruby/Maximum-triangle-path-sum
new file mode 120000
index 0000000000..a3dca90005
--- /dev/null
+++ b/Lang/Ruby/Maximum-triangle-path-sum
@@ -0,0 +1 @@
+../../Task/Maximum-triangle-path-sum/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Move-to-front-algorithm b/Lang/Ruby/Move-to-front-algorithm
new file mode 120000
index 0000000000..df056397bd
--- /dev/null
+++ b/Lang/Ruby/Move-to-front-algorithm
@@ -0,0 +1 @@
+../../Task/Move-to-front-algorithm/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Munching-squares b/Lang/Ruby/Munching-squares
new file mode 120000
index 0000000000..61e3a46e5d
--- /dev/null
+++ b/Lang/Ruby/Munching-squares
@@ -0,0 +1 @@
+../../Task/Munching-squares/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Narcissistic-decimal-number b/Lang/Ruby/Narcissistic-decimal-number
new file mode 120000
index 0000000000..3809385138
--- /dev/null
+++ b/Lang/Ruby/Narcissistic-decimal-number
@@ -0,0 +1 @@
+../../Task/Narcissistic-decimal-number/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Natural-sorting b/Lang/Ruby/Natural-sorting
new file mode 120000
index 0000000000..f05dab1851
--- /dev/null
+++ b/Lang/Ruby/Natural-sorting
@@ -0,0 +1 @@
+../../Task/Natural-sorting/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Nth b/Lang/Ruby/Nth
new file mode 120000
index 0000000000..b569e125d6
--- /dev/null
+++ b/Lang/Ruby/Nth
@@ -0,0 +1 @@
+../../Task/Nth/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Odd-word-problem b/Lang/Ruby/Odd-word-problem
new file mode 120000
index 0000000000..b69c31506a
--- /dev/null
+++ b/Lang/Ruby/Odd-word-problem
@@ -0,0 +1 @@
+../../Task/Odd-word-problem/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Old-lady-swallowed-a-fly b/Lang/Ruby/Old-lady-swallowed-a-fly
new file mode 120000
index 0000000000..58aedf7530
--- /dev/null
+++ b/Lang/Ruby/Old-lady-swallowed-a-fly
@@ -0,0 +1 @@
+../../Task/Old-lady-swallowed-a-fly/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Order-disjoint-list-items b/Lang/Ruby/Order-disjoint-list-items
new file mode 120000
index 0000000000..4c5e32aa09
--- /dev/null
+++ b/Lang/Ruby/Order-disjoint-list-items
@@ -0,0 +1 @@
+../../Task/Order-disjoint-list-items/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Paraffins b/Lang/Ruby/Paraffins
new file mode 120000
index 0000000000..ad6ac5052b
--- /dev/null
+++ b/Lang/Ruby/Paraffins
@@ -0,0 +1 @@
+../../Task/Paraffins/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Parse-an-IP-Address b/Lang/Ruby/Parse-an-IP-Address
new file mode 120000
index 0000000000..1f128cada9
--- /dev/null
+++ b/Lang/Ruby/Parse-an-IP-Address
@@ -0,0 +1 @@
+../../Task/Parse-an-IP-Address/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Penneys-game b/Lang/Ruby/Penneys-game
new file mode 120000
index 0000000000..a2dff9fd55
--- /dev/null
+++ b/Lang/Ruby/Penneys-game
@@ -0,0 +1 @@
+../../Task/Penneys-game/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Permutations-Rank-of-a-permutation b/Lang/Ruby/Permutations-Rank-of-a-permutation
new file mode 120000
index 0000000000..9cc348f4ca
--- /dev/null
+++ b/Lang/Ruby/Permutations-Rank-of-a-permutation
@@ -0,0 +1 @@
+../../Task/Permutations-Rank-of-a-permutation/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Pernicious-numbers b/Lang/Ruby/Pernicious-numbers
new file mode 120000
index 0000000000..d732dbcff4
--- /dev/null
+++ b/Lang/Ruby/Pernicious-numbers
@@ -0,0 +1 @@
+../../Task/Pernicious-numbers/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Phrase-reversals b/Lang/Ruby/Phrase-reversals
new file mode 120000
index 0000000000..b56457e6a9
--- /dev/null
+++ b/Lang/Ruby/Phrase-reversals
@@ -0,0 +1 @@
+../../Task/Phrase-reversals/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Quickselect-algorithm b/Lang/Ruby/Quickselect-algorithm
new file mode 120000
index 0000000000..e28d46193a
--- /dev/null
+++ b/Lang/Ruby/Quickselect-algorithm
@@ -0,0 +1 @@
+../../Task/Quickselect-algorithm/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Ranking-methods b/Lang/Ruby/Ranking-methods
new file mode 120000
index 0000000000..2469d80559
--- /dev/null
+++ b/Lang/Ruby/Ranking-methods
@@ -0,0 +1 @@
+../../Task/Ranking-methods/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Rep-string b/Lang/Ruby/Rep-string
new file mode 120000
index 0000000000..9ca5c86851
--- /dev/null
+++ b/Lang/Ruby/Rep-string
@@ -0,0 +1 @@
+../../Task/Rep-string/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Reverse-words-in-a-string b/Lang/Ruby/Reverse-words-in-a-string
new file mode 120000
index 0000000000..632b9a045f
--- /dev/null
+++ b/Lang/Ruby/Reverse-words-in-a-string
@@ -0,0 +1 @@
+../../Task/Reverse-words-in-a-string/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Runge-Kutta-method b/Lang/Ruby/Runge-Kutta-method
new file mode 120000
index 0000000000..9ce7cfc861
--- /dev/null
+++ b/Lang/Ruby/Runge-Kutta-method
@@ -0,0 +1 @@
+../../Task/Runge-Kutta-method/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Semiprime b/Lang/Ruby/Semiprime
new file mode 120000
index 0000000000..86755fdf11
--- /dev/null
+++ b/Lang/Ruby/Semiprime
@@ -0,0 +1 @@
+../../Task/Semiprime/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Sequence-of-primes-by-Trial-Division b/Lang/Ruby/Sequence-of-primes-by-Trial-Division
new file mode 120000
index 0000000000..ae0ea1583c
--- /dev/null
+++ b/Lang/Ruby/Sequence-of-primes-by-Trial-Division
@@ -0,0 +1 @@
+../../Task/Sequence-of-primes-by-Trial-Division/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Solve-a-Holy-Knights-tour b/Lang/Ruby/Solve-a-Holy-Knights-tour
new file mode 120000
index 0000000000..c57e191b3e
--- /dev/null
+++ b/Lang/Ruby/Solve-a-Holy-Knights-tour
@@ -0,0 +1 @@
+../../Task/Solve-a-Holy-Knights-tour/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Solve-a-Hopido-puzzle b/Lang/Ruby/Solve-a-Hopido-puzzle
new file mode 120000
index 0000000000..6d481e254b
--- /dev/null
+++ b/Lang/Ruby/Solve-a-Hopido-puzzle
@@ -0,0 +1 @@
+../../Task/Solve-a-Hopido-puzzle/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Solve-a-Numbrix-puzzle b/Lang/Ruby/Solve-a-Numbrix-puzzle
new file mode 120000
index 0000000000..e4184e9dbf
--- /dev/null
+++ b/Lang/Ruby/Solve-a-Numbrix-puzzle
@@ -0,0 +1 @@
+../../Task/Solve-a-Numbrix-puzzle/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Solve-the-no-connection-puzzle b/Lang/Ruby/Solve-the-no-connection-puzzle
new file mode 120000
index 0000000000..d1509b30b0
--- /dev/null
+++ b/Lang/Ruby/Solve-the-no-connection-puzzle
@@ -0,0 +1 @@
+../../Task/Solve-the-no-connection-puzzle/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Sparkline-in-unicode b/Lang/Ruby/Sparkline-in-unicode
new file mode 120000
index 0000000000..35d38bac30
--- /dev/null
+++ b/Lang/Ruby/Sparkline-in-unicode
@@ -0,0 +1 @@
+../../Task/Sparkline-in-unicode/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/State-name-puzzle b/Lang/Ruby/State-name-puzzle
new file mode 120000
index 0000000000..fcac846e14
--- /dev/null
+++ b/Lang/Ruby/State-name-puzzle
@@ -0,0 +1 @@
+../../Task/State-name-puzzle/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Statistics-Basic b/Lang/Ruby/Statistics-Basic
new file mode 120000
index 0000000000..d5a9733d0c
--- /dev/null
+++ b/Lang/Ruby/Statistics-Basic
@@ -0,0 +1 @@
+../../Task/Statistics-Basic/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Stern-Brocot-sequence b/Lang/Ruby/Stern-Brocot-sequence
new file mode 120000
index 0000000000..2f2146ba59
--- /dev/null
+++ b/Lang/Ruby/Stern-Brocot-sequence
@@ -0,0 +1 @@
+../../Task/Stern-Brocot-sequence/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/String-append b/Lang/Ruby/String-append
new file mode 120000
index 0000000000..78d60eb7e6
--- /dev/null
+++ b/Lang/Ruby/String-append
@@ -0,0 +1 @@
+../../Task/String-append/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/String-matching b/Lang/Ruby/String-matching
new file mode 120000
index 0000000000..81e71fb7ec
--- /dev/null
+++ b/Lang/Ruby/String-matching
@@ -0,0 +1 @@
+../../Task/String-matching/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/String-prepend b/Lang/Ruby/String-prepend
new file mode 120000
index 0000000000..85206a6eb5
--- /dev/null
+++ b/Lang/Ruby/String-prepend
@@ -0,0 +1 @@
+../../Task/String-prepend/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Sum-multiples-of-3-and-5 b/Lang/Ruby/Sum-multiples-of-3-and-5
new file mode 120000
index 0000000000..442f40f983
--- /dev/null
+++ b/Lang/Ruby/Sum-multiples-of-3-and-5
@@ -0,0 +1 @@
+../../Task/Sum-multiples-of-3-and-5/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Textonyms b/Lang/Ruby/Textonyms
new file mode 120000
index 0000000000..0a2e371a39
--- /dev/null
+++ b/Lang/Ruby/Textonyms
@@ -0,0 +1 @@
+../../Task/Textonyms/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/The-Twelve-Days-of-Christmas b/Lang/Ruby/The-Twelve-Days-of-Christmas
new file mode 120000
index 0000000000..8f4f171493
--- /dev/null
+++ b/Lang/Ruby/The-Twelve-Days-of-Christmas
@@ -0,0 +1 @@
+../../Task/The-Twelve-Days-of-Christmas/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Total-circles-area b/Lang/Ruby/Total-circles-area
new file mode 120000
index 0000000000..6b4bee10e7
--- /dev/null
+++ b/Lang/Ruby/Total-circles-area
@@ -0,0 +1 @@
+../../Task/Total-circles-area/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Unix-ls b/Lang/Ruby/Unix-ls
new file mode 120000
index 0000000000..d14bb4ef49
--- /dev/null
+++ b/Lang/Ruby/Unix-ls
@@ -0,0 +1 @@
+../../Task/Unix-ls/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Vogels-approximation-method b/Lang/Ruby/Vogels-approximation-method
new file mode 120000
index 0000000000..c17c7b0ca5
--- /dev/null
+++ b/Lang/Ruby/Vogels-approximation-method
@@ -0,0 +1 @@
+../../Task/Vogels-approximation-method/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/World-Cup-group-stage b/Lang/Ruby/World-Cup-group-stage
new file mode 120000
index 0000000000..8d9b9f6ea3
--- /dev/null
+++ b/Lang/Ruby/World-Cup-group-stage
@@ -0,0 +1 @@
+../../Task/World-Cup-group-stage/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Zero-to-the-zero-power b/Lang/Ruby/Zero-to-the-zero-power
new file mode 120000
index 0000000000..b5baaf1e76
--- /dev/null
+++ b/Lang/Ruby/Zero-to-the-zero-power
@@ -0,0 +1 @@
+../../Task/Zero-to-the-zero-power/Ruby
\ No newline at end of file
diff --git a/Lang/Ruby/Zhang-Suen-thinning-algorithm b/Lang/Ruby/Zhang-Suen-thinning-algorithm
new file mode 120000
index 0000000000..bb92ed72a1
--- /dev/null
+++ b/Lang/Ruby/Zhang-Suen-thinning-algorithm
@@ -0,0 +1 @@
+../../Task/Zhang-Suen-thinning-algorithm/Ruby
\ No newline at end of file
diff --git a/Lang/Run-BASIC/Benfords-law b/Lang/Run-BASIC/Benfords-law
new file mode 120000
index 0000000000..6b2894d9f3
--- /dev/null
+++ b/Lang/Run-BASIC/Benfords-law
@@ -0,0 +1 @@
+../../Task/Benfords-law/Run-BASIC
\ No newline at end of file
diff --git a/Lang/Run-BASIC/CSV-data-manipulation b/Lang/Run-BASIC/CSV-data-manipulation
new file mode 120000
index 0000000000..50faa036aa
--- /dev/null
+++ b/Lang/Run-BASIC/CSV-data-manipulation
@@ -0,0 +1 @@
+../../Task/CSV-data-manipulation/Run-BASIC
\ No newline at end of file
diff --git a/Lang/Run-BASIC/Catalan-numbers-Pascals-triangle b/Lang/Run-BASIC/Catalan-numbers-Pascals-triangle
new file mode 120000
index 0000000000..d5059496b7
--- /dev/null
+++ b/Lang/Run-BASIC/Catalan-numbers-Pascals-triangle
@@ -0,0 +1 @@
+../../Task/Catalan-numbers-Pascals-triangle/Run-BASIC
\ No newline at end of file
diff --git a/Lang/Run-BASIC/Catamorphism b/Lang/Run-BASIC/Catamorphism
new file mode 120000
index 0000000000..2f1af93c4a
--- /dev/null
+++ b/Lang/Run-BASIC/Catamorphism
@@ -0,0 +1 @@
+../../Task/Catamorphism/Run-BASIC
\ No newline at end of file
diff --git a/Lang/Run-BASIC/Comma-quibbling b/Lang/Run-BASIC/Comma-quibbling
new file mode 120000
index 0000000000..26058a6856
--- /dev/null
+++ b/Lang/Run-BASIC/Comma-quibbling
@@ -0,0 +1 @@
+../../Task/Comma-quibbling/Run-BASIC
\ No newline at end of file
diff --git a/Lang/Run-BASIC/Draw-a-clock b/Lang/Run-BASIC/Draw-a-clock
new file mode 120000
index 0000000000..c4b581f997
--- /dev/null
+++ b/Lang/Run-BASIC/Draw-a-clock
@@ -0,0 +1 @@
+../../Task/Draw-a-clock/Run-BASIC
\ No newline at end of file
diff --git a/Lang/Run-BASIC/File-input-output b/Lang/Run-BASIC/File-input-output
new file mode 120000
index 0000000000..8dd0e247aa
--- /dev/null
+++ b/Lang/Run-BASIC/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/Run-BASIC
\ No newline at end of file
diff --git a/Lang/Run-BASIC/Munching-squares b/Lang/Run-BASIC/Munching-squares
new file mode 120000
index 0000000000..4d66a550f0
--- /dev/null
+++ b/Lang/Run-BASIC/Munching-squares
@@ -0,0 +1 @@
+../../Task/Munching-squares/Run-BASIC
\ No newline at end of file
diff --git a/Lang/Run-BASIC/Odd-word-problem b/Lang/Run-BASIC/Odd-word-problem
new file mode 120000
index 0000000000..9b49db6767
--- /dev/null
+++ b/Lang/Run-BASIC/Odd-word-problem
@@ -0,0 +1 @@
+../../Task/Odd-word-problem/Run-BASIC
\ No newline at end of file
diff --git a/Lang/Run-BASIC/Runge-Kutta-method b/Lang/Run-BASIC/Runge-Kutta-method
new file mode 120000
index 0000000000..54f2a2134e
--- /dev/null
+++ b/Lang/Run-BASIC/Runge-Kutta-method
@@ -0,0 +1 @@
+../../Task/Runge-Kutta-method/Run-BASIC
\ No newline at end of file
diff --git a/Lang/Run-BASIC/String-matching b/Lang/Run-BASIC/String-matching
new file mode 120000
index 0000000000..2eb8b3e9d9
--- /dev/null
+++ b/Lang/Run-BASIC/String-matching
@@ -0,0 +1 @@
+../../Task/String-matching/Run-BASIC
\ No newline at end of file
diff --git a/Lang/Run-BASIC/Sum-multiples-of-3-and-5 b/Lang/Run-BASIC/Sum-multiples-of-3-and-5
new file mode 120000
index 0000000000..a7f8e16a1b
--- /dev/null
+++ b/Lang/Run-BASIC/Sum-multiples-of-3-and-5
@@ -0,0 +1 @@
+../../Task/Sum-multiples-of-3-and-5/Run-BASIC
\ No newline at end of file
diff --git a/Lang/Rust/ABC-Problem b/Lang/Rust/ABC-Problem
new file mode 120000
index 0000000000..eb1b7aba8c
--- /dev/null
+++ b/Lang/Rust/ABC-Problem
@@ -0,0 +1 @@
+../../Task/ABC-Problem/Rust
\ No newline at end of file
diff --git a/Lang/Rust/AKS-test-for-primes b/Lang/Rust/AKS-test-for-primes
new file mode 120000
index 0000000000..2448d99a58
--- /dev/null
+++ b/Lang/Rust/AKS-test-for-primes
@@ -0,0 +1 @@
+../../Task/AKS-test-for-primes/Rust
\ No newline at end of file
diff --git a/Lang/Rust/Almost-prime b/Lang/Rust/Almost-prime
new file mode 120000
index 0000000000..9b5595bff7
--- /dev/null
+++ b/Lang/Rust/Almost-prime
@@ -0,0 +1 @@
+../../Task/Almost-prime/Rust
\ No newline at end of file
diff --git a/Lang/Rust/Circles-of-given-radius-through-two-points b/Lang/Rust/Circles-of-given-radius-through-two-points
new file mode 120000
index 0000000000..fad7aab792
--- /dev/null
+++ b/Lang/Rust/Circles-of-given-radius-through-two-points
@@ -0,0 +1 @@
+../../Task/Circles-of-given-radius-through-two-points/Rust
\ No newline at end of file
diff --git a/Lang/Rust/Closures-Value-capture b/Lang/Rust/Closures-Value-capture
new file mode 120000
index 0000000000..5acfbb1c8b
--- /dev/null
+++ b/Lang/Rust/Closures-Value-capture
@@ -0,0 +1 @@
+../../Task/Closures-Value-capture/Rust
\ No newline at end of file
diff --git a/Lang/Rust/Comma-quibbling b/Lang/Rust/Comma-quibbling
new file mode 120000
index 0000000000..d637d95961
--- /dev/null
+++ b/Lang/Rust/Comma-quibbling
@@ -0,0 +1 @@
+../../Task/Comma-quibbling/Rust
\ No newline at end of file
diff --git a/Lang/Rust/Currying b/Lang/Rust/Currying
new file mode 120000
index 0000000000..ef729ba17d
--- /dev/null
+++ b/Lang/Rust/Currying
@@ -0,0 +1 @@
+../../Task/Currying/Rust
\ No newline at end of file
diff --git a/Lang/Rust/File-input-output b/Lang/Rust/File-input-output
new file mode 120000
index 0000000000..30a39c1078
--- /dev/null
+++ b/Lang/Rust/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/Rust
\ No newline at end of file
diff --git a/Lang/Rust/Hello-world-Newbie b/Lang/Rust/Hello-world-Newbie
new file mode 120000
index 0000000000..bac467c970
--- /dev/null
+++ b/Lang/Rust/Hello-world-Newbie
@@ -0,0 +1 @@
+../../Task/Hello-world-Newbie/Rust
\ No newline at end of file
diff --git a/Lang/Rust/Magic-squares-of-odd-order b/Lang/Rust/Magic-squares-of-odd-order
new file mode 120000
index 0000000000..512ff0d924
--- /dev/null
+++ b/Lang/Rust/Magic-squares-of-odd-order
@@ -0,0 +1 @@
+../../Task/Magic-squares-of-odd-order/Rust
\ No newline at end of file
diff --git a/Lang/Rust/Nth b/Lang/Rust/Nth
new file mode 120000
index 0000000000..4f55a7b8cc
--- /dev/null
+++ b/Lang/Rust/Nth
@@ -0,0 +1 @@
+../../Task/Nth/Rust
\ No newline at end of file
diff --git a/Lang/Rust/The-Twelve-Days-of-Christmas b/Lang/Rust/The-Twelve-Days-of-Christmas
new file mode 120000
index 0000000000..f3a205e5b9
--- /dev/null
+++ b/Lang/Rust/The-Twelve-Days-of-Christmas
@@ -0,0 +1 @@
+../../Task/The-Twelve-Days-of-Christmas/Rust
\ No newline at end of file
diff --git a/Lang/Rust/Unix-ls b/Lang/Rust/Unix-ls
new file mode 120000
index 0000000000..021fcdaa37
--- /dev/null
+++ b/Lang/Rust/Unix-ls
@@ -0,0 +1 @@
+../../Task/Unix-ls/Rust
\ No newline at end of file
diff --git a/Lang/Rust/Zero-to-the-zero-power b/Lang/Rust/Zero-to-the-zero-power
new file mode 120000
index 0000000000..d7fae5a183
--- /dev/null
+++ b/Lang/Rust/Zero-to-the-zero-power
@@ -0,0 +1 @@
+../../Task/Zero-to-the-zero-power/Rust
\ No newline at end of file
diff --git a/Lang/SETL/Amb b/Lang/SETL/Amb
new file mode 120000
index 0000000000..f7ce3848c0
--- /dev/null
+++ b/Lang/SETL/Amb
@@ -0,0 +1 @@
+../../Task/Amb/SETL
\ No newline at end of file
diff --git a/Lang/SNOBOL4/File-input-output b/Lang/SNOBOL4/File-input-output
new file mode 120000
index 0000000000..ce1966050a
--- /dev/null
+++ b/Lang/SNOBOL4/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/SNOBOL4
\ No newline at end of file
diff --git a/Lang/SQL/Benfords-law b/Lang/SQL/Benfords-law
new file mode 120000
index 0000000000..24400424af
--- /dev/null
+++ b/Lang/SQL/Benfords-law
@@ -0,0 +1 @@
+../../Task/Benfords-law/SQL
\ No newline at end of file
diff --git a/Lang/SQL/Hash-join b/Lang/SQL/Hash-join
new file mode 120000
index 0000000000..252a8ff0f4
--- /dev/null
+++ b/Lang/SQL/Hash-join
@@ -0,0 +1 @@
+../../Task/Hash-join/SQL
\ No newline at end of file
diff --git a/Lang/Scala/9-billion-names-of-God-the-integer b/Lang/Scala/9-billion-names-of-God-the-integer
new file mode 120000
index 0000000000..16766ecc8a
--- /dev/null
+++ b/Lang/Scala/9-billion-names-of-God-the-integer
@@ -0,0 +1 @@
+../../Task/9-billion-names-of-God-the-integer/Scala
\ No newline at end of file
diff --git a/Lang/Scala/ABC-Problem b/Lang/Scala/ABC-Problem
new file mode 120000
index 0000000000..6370e9a32f
--- /dev/null
+++ b/Lang/Scala/ABC-Problem
@@ -0,0 +1 @@
+../../Task/ABC-Problem/Scala
\ No newline at end of file
diff --git a/Lang/Scala/AKS-test-for-primes b/Lang/Scala/AKS-test-for-primes
new file mode 120000
index 0000000000..7a743c01a6
--- /dev/null
+++ b/Lang/Scala/AKS-test-for-primes
@@ -0,0 +1 @@
+../../Task/AKS-test-for-primes/Scala
\ No newline at end of file
diff --git a/Lang/Scala/Abundant,-deficient-and-perfect-number-classifications b/Lang/Scala/Abundant,-deficient-and-perfect-number-classifications
new file mode 120000
index 0000000000..4927d70276
--- /dev/null
+++ b/Lang/Scala/Abundant,-deficient-and-perfect-number-classifications
@@ -0,0 +1 @@
+../../Task/Abundant,-deficient-and-perfect-number-classifications/Scala
\ No newline at end of file
diff --git a/Lang/Scala/Aliquot-sequence-classifications b/Lang/Scala/Aliquot-sequence-classifications
new file mode 120000
index 0000000000..e22e479a55
--- /dev/null
+++ b/Lang/Scala/Aliquot-sequence-classifications
@@ -0,0 +1 @@
+../../Task/Aliquot-sequence-classifications/Scala
\ No newline at end of file
diff --git a/Lang/Scala/Almost-prime b/Lang/Scala/Almost-prime
new file mode 120000
index 0000000000..1b1639f534
--- /dev/null
+++ b/Lang/Scala/Almost-prime
@@ -0,0 +1 @@
+../../Task/Almost-prime/Scala
\ No newline at end of file
diff --git a/Lang/Scala/Amb b/Lang/Scala/Amb
new file mode 120000
index 0000000000..2ea2b2ffcd
--- /dev/null
+++ b/Lang/Scala/Amb
@@ -0,0 +1 @@
+../../Task/Amb/Scala
\ No newline at end of file
diff --git a/Lang/Scala/Amicable-pairs b/Lang/Scala/Amicable-pairs
new file mode 120000
index 0000000000..b379da8dc2
--- /dev/null
+++ b/Lang/Scala/Amicable-pairs
@@ -0,0 +1 @@
+../../Task/Amicable-pairs/Scala
\ No newline at end of file
diff --git a/Lang/Scala/Append-a-record-to-the-end-of-a-text-file b/Lang/Scala/Append-a-record-to-the-end-of-a-text-file
new file mode 120000
index 0000000000..28bd743a39
--- /dev/null
+++ b/Lang/Scala/Append-a-record-to-the-end-of-a-text-file
@@ -0,0 +1 @@
+../../Task/Append-a-record-to-the-end-of-a-text-file/Scala
\ No newline at end of file
diff --git a/Lang/Scala/Benfords-law b/Lang/Scala/Benfords-law
new file mode 120000
index 0000000000..451f9301ed
--- /dev/null
+++ b/Lang/Scala/Benfords-law
@@ -0,0 +1 @@
+../../Task/Benfords-law/Scala
\ No newline at end of file
diff --git a/Lang/Scala/CSV-data-manipulation b/Lang/Scala/CSV-data-manipulation
new file mode 120000
index 0000000000..0cbb2b4704
--- /dev/null
+++ b/Lang/Scala/CSV-data-manipulation
@@ -0,0 +1 @@
+../../Task/CSV-data-manipulation/Scala
\ No newline at end of file
diff --git a/Lang/Scala/Closures-Value-capture b/Lang/Scala/Closures-Value-capture
new file mode 120000
index 0000000000..7a70c33803
--- /dev/null
+++ b/Lang/Scala/Closures-Value-capture
@@ -0,0 +1 @@
+../../Task/Closures-Value-capture/Scala
\ No newline at end of file
diff --git a/Lang/Scala/Comma-quibbling b/Lang/Scala/Comma-quibbling
new file mode 120000
index 0000000000..c63dc4f131
--- /dev/null
+++ b/Lang/Scala/Comma-quibbling
@@ -0,0 +1 @@
+../../Task/Comma-quibbling/Scala
\ No newline at end of file
diff --git a/Lang/Scala/Digital-root-Multiplicative-digital-root b/Lang/Scala/Digital-root-Multiplicative-digital-root
new file mode 120000
index 0000000000..ab4001f2d4
--- /dev/null
+++ b/Lang/Scala/Digital-root-Multiplicative-digital-root
@@ -0,0 +1 @@
+../../Task/Digital-root-Multiplicative-digital-root/Scala
\ No newline at end of file
diff --git a/Lang/Scala/Draw-a-clock b/Lang/Scala/Draw-a-clock
new file mode 120000
index 0000000000..45c2707ec0
--- /dev/null
+++ b/Lang/Scala/Draw-a-clock
@@ -0,0 +1 @@
+../../Task/Draw-a-clock/Scala
\ No newline at end of file
diff --git a/Lang/Scala/Fibonacci-word b/Lang/Scala/Fibonacci-word
new file mode 120000
index 0000000000..0f2fb06ca0
--- /dev/null
+++ b/Lang/Scala/Fibonacci-word
@@ -0,0 +1 @@
+../../Task/Fibonacci-word/Scala
\ No newline at end of file
diff --git a/Lang/Scala/Fibonacci-word-fractal b/Lang/Scala/Fibonacci-word-fractal
new file mode 120000
index 0000000000..604dd2e3d0
--- /dev/null
+++ b/Lang/Scala/Fibonacci-word-fractal
@@ -0,0 +1 @@
+../../Task/Fibonacci-word-fractal/Scala
\ No newline at end of file
diff --git a/Lang/Scala/File-input-output b/Lang/Scala/File-input-output
new file mode 120000
index 0000000000..753f509f81
--- /dev/null
+++ b/Lang/Scala/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/Scala
\ No newline at end of file
diff --git a/Lang/Scala/Find-the-last-Sunday-of-each-month b/Lang/Scala/Find-the-last-Sunday-of-each-month
new file mode 120000
index 0000000000..405c2aa3b0
--- /dev/null
+++ b/Lang/Scala/Find-the-last-Sunday-of-each-month
@@ -0,0 +1 @@
+../../Task/Find-the-last-Sunday-of-each-month/Scala
\ No newline at end of file
diff --git a/Lang/Scala/Generate-lower-case-ASCII-alphabet b/Lang/Scala/Generate-lower-case-ASCII-alphabet
new file mode 120000
index 0000000000..14b3518c91
--- /dev/null
+++ b/Lang/Scala/Generate-lower-case-ASCII-alphabet
@@ -0,0 +1 @@
+../../Task/Generate-lower-case-ASCII-alphabet/Scala
\ No newline at end of file
diff --git a/Lang/Scala/Hash-join b/Lang/Scala/Hash-join
new file mode 120000
index 0000000000..c6e54349a7
--- /dev/null
+++ b/Lang/Scala/Hash-join
@@ -0,0 +1 @@
+../../Task/Hash-join/Scala
\ No newline at end of file
diff --git a/Lang/Scala/Hello-world-Newbie b/Lang/Scala/Hello-world-Newbie
new file mode 120000
index 0000000000..8c851b4cb4
--- /dev/null
+++ b/Lang/Scala/Hello-world-Newbie
@@ -0,0 +1 @@
+../../Task/Hello-world-Newbie/Scala
\ No newline at end of file
diff --git a/Lang/Scala/IBAN b/Lang/Scala/IBAN
new file mode 120000
index 0000000000..d2ced19728
--- /dev/null
+++ b/Lang/Scala/IBAN
@@ -0,0 +1 @@
+../../Task/IBAN/Scala
\ No newline at end of file
diff --git a/Lang/Scala/Integer-overflow b/Lang/Scala/Integer-overflow
new file mode 120000
index 0000000000..6bb550a169
--- /dev/null
+++ b/Lang/Scala/Integer-overflow
@@ -0,0 +1 @@
+../../Task/Integer-overflow/Scala
\ No newline at end of file
diff --git a/Lang/Scala/K-d-tree b/Lang/Scala/K-d-tree
new file mode 120000
index 0000000000..91d4c47905
--- /dev/null
+++ b/Lang/Scala/K-d-tree
@@ -0,0 +1 @@
+../../Task/K-d-tree/Scala
\ No newline at end of file
diff --git a/Lang/Scala/Longest-increasing-subsequence b/Lang/Scala/Longest-increasing-subsequence
new file mode 120000
index 0000000000..e87f8947f5
--- /dev/null
+++ b/Lang/Scala/Longest-increasing-subsequence
@@ -0,0 +1 @@
+../../Task/Longest-increasing-subsequence/Scala
\ No newline at end of file
diff --git a/Lang/Scala/Make-directory-path b/Lang/Scala/Make-directory-path
new file mode 120000
index 0000000000..1480649c04
--- /dev/null
+++ b/Lang/Scala/Make-directory-path
@@ -0,0 +1 @@
+../../Task/Make-directory-path/Scala
\ No newline at end of file
diff --git a/Lang/Scala/Maximum-triangle-path-sum b/Lang/Scala/Maximum-triangle-path-sum
new file mode 120000
index 0000000000..e361e6be43
--- /dev/null
+++ b/Lang/Scala/Maximum-triangle-path-sum
@@ -0,0 +1 @@
+../../Task/Maximum-triangle-path-sum/Scala
\ No newline at end of file
diff --git a/Lang/Scala/Munching-squares b/Lang/Scala/Munching-squares
new file mode 120000
index 0000000000..16bcdb12ba
--- /dev/null
+++ b/Lang/Scala/Munching-squares
@@ -0,0 +1 @@
+../../Task/Munching-squares/Scala
\ No newline at end of file
diff --git a/Lang/Scala/Narcissistic-decimal-number b/Lang/Scala/Narcissistic-decimal-number
new file mode 120000
index 0000000000..ede813fd40
--- /dev/null
+++ b/Lang/Scala/Narcissistic-decimal-number
@@ -0,0 +1 @@
+../../Task/Narcissistic-decimal-number/Scala
\ No newline at end of file
diff --git a/Lang/Scala/Natural-sorting b/Lang/Scala/Natural-sorting
new file mode 120000
index 0000000000..2534007909
--- /dev/null
+++ b/Lang/Scala/Natural-sorting
@@ -0,0 +1 @@
+../../Task/Natural-sorting/Scala
\ No newline at end of file
diff --git a/Lang/Scala/Nth b/Lang/Scala/Nth
new file mode 120000
index 0000000000..09353864b4
--- /dev/null
+++ b/Lang/Scala/Nth
@@ -0,0 +1 @@
+../../Task/Nth/Scala
\ No newline at end of file
diff --git a/Lang/Scala/Odd-word-problem b/Lang/Scala/Odd-word-problem
new file mode 120000
index 0000000000..38091002af
--- /dev/null
+++ b/Lang/Scala/Odd-word-problem
@@ -0,0 +1 @@
+../../Task/Odd-word-problem/Scala
\ No newline at end of file
diff --git a/Lang/Scala/Old-lady-swallowed-a-fly b/Lang/Scala/Old-lady-swallowed-a-fly
new file mode 120000
index 0000000000..9213f31ea0
--- /dev/null
+++ b/Lang/Scala/Old-lady-swallowed-a-fly
@@ -0,0 +1 @@
+../../Task/Old-lady-swallowed-a-fly/Scala
\ No newline at end of file
diff --git a/Lang/Scala/Order-disjoint-list-items b/Lang/Scala/Order-disjoint-list-items
new file mode 120000
index 0000000000..045fe59dbf
--- /dev/null
+++ b/Lang/Scala/Order-disjoint-list-items
@@ -0,0 +1 @@
+../../Task/Order-disjoint-list-items/Scala
\ No newline at end of file
diff --git a/Lang/Scala/Pernicious-numbers b/Lang/Scala/Pernicious-numbers
new file mode 120000
index 0000000000..2a690811ac
--- /dev/null
+++ b/Lang/Scala/Pernicious-numbers
@@ -0,0 +1 @@
+../../Task/Pernicious-numbers/Scala
\ No newline at end of file
diff --git a/Lang/Scala/Quickselect-algorithm b/Lang/Scala/Quickselect-algorithm
new file mode 120000
index 0000000000..31a6e23062
--- /dev/null
+++ b/Lang/Scala/Quickselect-algorithm
@@ -0,0 +1 @@
+../../Task/Quickselect-algorithm/Scala
\ No newline at end of file
diff --git a/Lang/Scala/Ranking-methods b/Lang/Scala/Ranking-methods
new file mode 120000
index 0000000000..5223c7d187
--- /dev/null
+++ b/Lang/Scala/Ranking-methods
@@ -0,0 +1 @@
+../../Task/Ranking-methods/Scala
\ No newline at end of file
diff --git a/Lang/Scala/Rep-string b/Lang/Scala/Rep-string
new file mode 120000
index 0000000000..77c27fb32a
--- /dev/null
+++ b/Lang/Scala/Rep-string
@@ -0,0 +1 @@
+../../Task/Rep-string/Scala
\ No newline at end of file
diff --git a/Lang/Scala/Reverse-words-in-a-string b/Lang/Scala/Reverse-words-in-a-string
new file mode 120000
index 0000000000..34ae7be490
--- /dev/null
+++ b/Lang/Scala/Reverse-words-in-a-string
@@ -0,0 +1 @@
+../../Task/Reverse-words-in-a-string/Scala
\ No newline at end of file
diff --git a/Lang/Scala/Semiprime b/Lang/Scala/Semiprime
new file mode 120000
index 0000000000..37c6ad2913
--- /dev/null
+++ b/Lang/Scala/Semiprime
@@ -0,0 +1 @@
+../../Task/Semiprime/Scala
\ No newline at end of file
diff --git a/Lang/Scala/Sequence-of-primes-by-Trial-Division b/Lang/Scala/Sequence-of-primes-by-Trial-Division
new file mode 120000
index 0000000000..0b6be33779
--- /dev/null
+++ b/Lang/Scala/Sequence-of-primes-by-Trial-Division
@@ -0,0 +1 @@
+../../Task/Sequence-of-primes-by-Trial-Division/Scala
\ No newline at end of file
diff --git a/Lang/Scala/Sparkline-in-unicode b/Lang/Scala/Sparkline-in-unicode
new file mode 120000
index 0000000000..af97332665
--- /dev/null
+++ b/Lang/Scala/Sparkline-in-unicode
@@ -0,0 +1 @@
+../../Task/Sparkline-in-unicode/Scala
\ No newline at end of file
diff --git a/Lang/Scala/State-name-puzzle b/Lang/Scala/State-name-puzzle
new file mode 120000
index 0000000000..c5cdb112cb
--- /dev/null
+++ b/Lang/Scala/State-name-puzzle
@@ -0,0 +1 @@
+../../Task/State-name-puzzle/Scala
\ No newline at end of file
diff --git a/Lang/Scala/Statistics-Basic b/Lang/Scala/Statistics-Basic
new file mode 120000
index 0000000000..349226ee27
--- /dev/null
+++ b/Lang/Scala/Statistics-Basic
@@ -0,0 +1 @@
+../../Task/Statistics-Basic/Scala
\ No newline at end of file
diff --git a/Lang/Scala/String-append b/Lang/Scala/String-append
new file mode 120000
index 0000000000..235c96f40f
--- /dev/null
+++ b/Lang/Scala/String-append
@@ -0,0 +1 @@
+../../Task/String-append/Scala
\ No newline at end of file
diff --git a/Lang/Scala/String-matching b/Lang/Scala/String-matching
new file mode 120000
index 0000000000..854699fdde
--- /dev/null
+++ b/Lang/Scala/String-matching
@@ -0,0 +1 @@
+../../Task/String-matching/Scala
\ No newline at end of file
diff --git a/Lang/Scala/String-prepend b/Lang/Scala/String-prepend
new file mode 120000
index 0000000000..6fc4f5c241
--- /dev/null
+++ b/Lang/Scala/String-prepend
@@ -0,0 +1 @@
+../../Task/String-prepend/Scala
\ No newline at end of file
diff --git a/Lang/Scala/Sum-multiples-of-3-and-5 b/Lang/Scala/Sum-multiples-of-3-and-5
new file mode 120000
index 0000000000..86de32501c
--- /dev/null
+++ b/Lang/Scala/Sum-multiples-of-3-and-5
@@ -0,0 +1 @@
+../../Task/Sum-multiples-of-3-and-5/Scala
\ No newline at end of file
diff --git a/Lang/Scala/Zero-to-the-zero-power b/Lang/Scala/Zero-to-the-zero-power
new file mode 120000
index 0000000000..6abf0eb72f
--- /dev/null
+++ b/Lang/Scala/Zero-to-the-zero-power
@@ -0,0 +1 @@
+../../Task/Zero-to-the-zero-power/Scala
\ No newline at end of file
diff --git a/Lang/Scheme/Amb b/Lang/Scheme/Amb
new file mode 120000
index 0000000000..c19edc9c49
--- /dev/null
+++ b/Lang/Scheme/Amb
@@ -0,0 +1 @@
+../../Task/Amb/Scheme
\ No newline at end of file
diff --git a/Lang/Scheme/Closures-Value-capture b/Lang/Scheme/Closures-Value-capture
new file mode 120000
index 0000000000..eaf048e4cd
--- /dev/null
+++ b/Lang/Scheme/Closures-Value-capture
@@ -0,0 +1 @@
+../../Task/Closures-Value-capture/Scheme
\ No newline at end of file
diff --git a/Lang/Scheme/File-input-output b/Lang/Scheme/File-input-output
new file mode 120000
index 0000000000..3939a0889f
--- /dev/null
+++ b/Lang/Scheme/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/Scheme
\ No newline at end of file
diff --git a/Lang/Scheme/Generate-lower-case-ASCII-alphabet b/Lang/Scheme/Generate-lower-case-ASCII-alphabet
new file mode 120000
index 0000000000..f61687b57a
--- /dev/null
+++ b/Lang/Scheme/Generate-lower-case-ASCII-alphabet
@@ -0,0 +1 @@
+../../Task/Generate-lower-case-ASCII-alphabet/Scheme
\ No newline at end of file
diff --git a/Lang/Scheme/Hash-join b/Lang/Scheme/Hash-join
new file mode 120000
index 0000000000..9367355510
--- /dev/null
+++ b/Lang/Scheme/Hash-join
@@ -0,0 +1 @@
+../../Task/Hash-join/Scheme
\ No newline at end of file
diff --git a/Lang/Scheme/Longest-increasing-subsequence b/Lang/Scheme/Longest-increasing-subsequence
new file mode 120000
index 0000000000..cf97f99831
--- /dev/null
+++ b/Lang/Scheme/Longest-increasing-subsequence
@@ -0,0 +1 @@
+../../Task/Longest-increasing-subsequence/Scheme
\ No newline at end of file
diff --git a/Lang/Scheme/Odd-word-problem b/Lang/Scheme/Odd-word-problem
new file mode 120000
index 0000000000..740e737e77
--- /dev/null
+++ b/Lang/Scheme/Odd-word-problem
@@ -0,0 +1 @@
+../../Task/Odd-word-problem/Scheme
\ No newline at end of file
diff --git a/Lang/Scheme/Reverse-words-in-a-string b/Lang/Scheme/Reverse-words-in-a-string
new file mode 120000
index 0000000000..cbbff379b8
--- /dev/null
+++ b/Lang/Scheme/Reverse-words-in-a-string
@@ -0,0 +1 @@
+../../Task/Reverse-words-in-a-string/Scheme
\ No newline at end of file
diff --git a/Lang/Scheme/Sum-multiples-of-3-and-5 b/Lang/Scheme/Sum-multiples-of-3-and-5
new file mode 120000
index 0000000000..ab14edf91e
--- /dev/null
+++ b/Lang/Scheme/Sum-multiples-of-3-and-5
@@ -0,0 +1 @@
+../../Task/Sum-multiples-of-3-and-5/Scheme
\ No newline at end of file
diff --git a/Lang/Scheme/Zero-to-the-zero-power b/Lang/Scheme/Zero-to-the-zero-power
new file mode 120000
index 0000000000..fd38e34b62
--- /dev/null
+++ b/Lang/Scheme/Zero-to-the-zero-power
@@ -0,0 +1 @@
+../../Task/Zero-to-the-zero-power/Scheme
\ No newline at end of file
diff --git a/Lang/Scilab/AKS-test-for-primes b/Lang/Scilab/AKS-test-for-primes
new file mode 120000
index 0000000000..3238da9d09
--- /dev/null
+++ b/Lang/Scilab/AKS-test-for-primes
@@ -0,0 +1 @@
+../../Task/AKS-test-for-primes/Scilab
\ No newline at end of file
diff --git a/Lang/Scilab/Catalan-numbers-Pascals-triangle b/Lang/Scilab/Catalan-numbers-Pascals-triangle
new file mode 120000
index 0000000000..8025f0d00b
--- /dev/null
+++ b/Lang/Scilab/Catalan-numbers-Pascals-triangle
@@ -0,0 +1 @@
+../../Task/Catalan-numbers-Pascals-triangle/Scilab
\ No newline at end of file
diff --git a/Lang/Seed7/ABC-Problem b/Lang/Seed7/ABC-Problem
new file mode 120000
index 0000000000..27e8df8f9b
--- /dev/null
+++ b/Lang/Seed7/ABC-Problem
@@ -0,0 +1 @@
+../../Task/ABC-Problem/Seed7
\ No newline at end of file
diff --git a/Lang/Seed7/AKS-test-for-primes b/Lang/Seed7/AKS-test-for-primes
new file mode 120000
index 0000000000..8666d143d1
--- /dev/null
+++ b/Lang/Seed7/AKS-test-for-primes
@@ -0,0 +1 @@
+../../Task/AKS-test-for-primes/Seed7
\ No newline at end of file
diff --git a/Lang/Seed7/Amb b/Lang/Seed7/Amb
new file mode 120000
index 0000000000..f31fd16d58
--- /dev/null
+++ b/Lang/Seed7/Amb
@@ -0,0 +1 @@
+../../Task/Amb/Seed7
\ No newline at end of file
diff --git a/Lang/Seed7/CSV-data-manipulation b/Lang/Seed7/CSV-data-manipulation
new file mode 120000
index 0000000000..78bccbc067
--- /dev/null
+++ b/Lang/Seed7/CSV-data-manipulation
@@ -0,0 +1 @@
+../../Task/CSV-data-manipulation/Seed7
\ No newline at end of file
diff --git a/Lang/Seed7/Calendar---for-REAL-programmers b/Lang/Seed7/Calendar---for-REAL-programmers
new file mode 120000
index 0000000000..dc3a01f0d0
--- /dev/null
+++ b/Lang/Seed7/Calendar---for-REAL-programmers
@@ -0,0 +1 @@
+../../Task/Calendar---for-REAL-programmers/Seed7
\ No newline at end of file
diff --git a/Lang/Seed7/Casting-out-nines b/Lang/Seed7/Casting-out-nines
new file mode 120000
index 0000000000..6aeb840eed
--- /dev/null
+++ b/Lang/Seed7/Casting-out-nines
@@ -0,0 +1 @@
+../../Task/Casting-out-nines/Seed7
\ No newline at end of file
diff --git a/Lang/Seed7/Catalan-numbers-Pascals-triangle b/Lang/Seed7/Catalan-numbers-Pascals-triangle
new file mode 120000
index 0000000000..add88ff3e1
--- /dev/null
+++ b/Lang/Seed7/Catalan-numbers-Pascals-triangle
@@ -0,0 +1 @@
+../../Task/Catalan-numbers-Pascals-triangle/Seed7
\ No newline at end of file
diff --git a/Lang/Seed7/Chinese-remainder-theorem b/Lang/Seed7/Chinese-remainder-theorem
new file mode 120000
index 0000000000..84d40e6c95
--- /dev/null
+++ b/Lang/Seed7/Chinese-remainder-theorem
@@ -0,0 +1 @@
+../../Task/Chinese-remainder-theorem/Seed7
\ No newline at end of file
diff --git a/Lang/Seed7/Circles-of-given-radius-through-two-points b/Lang/Seed7/Circles-of-given-radius-through-two-points
new file mode 120000
index 0000000000..e1b959b423
--- /dev/null
+++ b/Lang/Seed7/Circles-of-given-radius-through-two-points
@@ -0,0 +1 @@
+../../Task/Circles-of-given-radius-through-two-points/Seed7
\ No newline at end of file
diff --git a/Lang/Seed7/Comma-quibbling b/Lang/Seed7/Comma-quibbling
new file mode 120000
index 0000000000..9ed4a9675e
--- /dev/null
+++ b/Lang/Seed7/Comma-quibbling
@@ -0,0 +1 @@
+../../Task/Comma-quibbling/Seed7
\ No newline at end of file
diff --git a/Lang/Seed7/Convert-decimal-number-to-rational b/Lang/Seed7/Convert-decimal-number-to-rational
new file mode 120000
index 0000000000..33811a98b1
--- /dev/null
+++ b/Lang/Seed7/Convert-decimal-number-to-rational
@@ -0,0 +1 @@
+../../Task/Convert-decimal-number-to-rational/Seed7
\ No newline at end of file
diff --git a/Lang/Seed7/Draw-a-clock b/Lang/Seed7/Draw-a-clock
new file mode 120000
index 0000000000..22bf2c103d
--- /dev/null
+++ b/Lang/Seed7/Draw-a-clock
@@ -0,0 +1 @@
+../../Task/Draw-a-clock/Seed7
\ No newline at end of file
diff --git a/Lang/Seed7/Extensible-prime-generator b/Lang/Seed7/Extensible-prime-generator
new file mode 120000
index 0000000000..59db97e922
--- /dev/null
+++ b/Lang/Seed7/Extensible-prime-generator
@@ -0,0 +1 @@
+../../Task/Extensible-prime-generator/Seed7
\ No newline at end of file
diff --git a/Lang/Seed7/Fibonacci-word b/Lang/Seed7/Fibonacci-word
new file mode 120000
index 0000000000..024ed4c387
--- /dev/null
+++ b/Lang/Seed7/Fibonacci-word
@@ -0,0 +1 @@
+../../Task/Fibonacci-word/Seed7
\ No newline at end of file
diff --git a/Lang/Seed7/File-input-output b/Lang/Seed7/File-input-output
new file mode 120000
index 0000000000..6bfe9bd434
--- /dev/null
+++ b/Lang/Seed7/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/Seed7
\ No newline at end of file
diff --git a/Lang/Seed7/Find-the-last-Sunday-of-each-month b/Lang/Seed7/Find-the-last-Sunday-of-each-month
new file mode 120000
index 0000000000..34e6237eab
--- /dev/null
+++ b/Lang/Seed7/Find-the-last-Sunday-of-each-month
@@ -0,0 +1 @@
+../../Task/Find-the-last-Sunday-of-each-month/Seed7
\ No newline at end of file
diff --git a/Lang/Seed7/Fractran b/Lang/Seed7/Fractran
new file mode 120000
index 0000000000..f1be1fc7d9
--- /dev/null
+++ b/Lang/Seed7/Fractran
@@ -0,0 +1 @@
+../../Task/Fractran/Seed7
\ No newline at end of file
diff --git a/Lang/Seed7/Generate-Chess960-starting-position b/Lang/Seed7/Generate-Chess960-starting-position
new file mode 120000
index 0000000000..f68fbc75af
--- /dev/null
+++ b/Lang/Seed7/Generate-Chess960-starting-position
@@ -0,0 +1 @@
+../../Task/Generate-Chess960-starting-position/Seed7
\ No newline at end of file
diff --git a/Lang/Seed7/Hickerson-series-of-almost-integers b/Lang/Seed7/Hickerson-series-of-almost-integers
new file mode 120000
index 0000000000..5e3c3187e3
--- /dev/null
+++ b/Lang/Seed7/Hickerson-series-of-almost-integers
@@ -0,0 +1 @@
+../../Task/Hickerson-series-of-almost-integers/Seed7
\ No newline at end of file
diff --git a/Lang/Seed7/IBAN b/Lang/Seed7/IBAN
new file mode 120000
index 0000000000..e599ad4d86
--- /dev/null
+++ b/Lang/Seed7/IBAN
@@ -0,0 +1 @@
+../../Task/IBAN/Seed7
\ No newline at end of file
diff --git a/Lang/Seed7/Integer-overflow b/Lang/Seed7/Integer-overflow
new file mode 120000
index 0000000000..16ad67ac75
--- /dev/null
+++ b/Lang/Seed7/Integer-overflow
@@ -0,0 +1 @@
+../../Task/Integer-overflow/Seed7
\ No newline at end of file
diff --git a/Lang/Seed7/Left-factorials b/Lang/Seed7/Left-factorials
new file mode 120000
index 0000000000..0655134508
--- /dev/null
+++ b/Lang/Seed7/Left-factorials
@@ -0,0 +1 @@
+../../Task/Left-factorials/Seed7
\ No newline at end of file
diff --git a/Lang/Seed7/Ludic-numbers b/Lang/Seed7/Ludic-numbers
new file mode 120000
index 0000000000..db3d655b70
--- /dev/null
+++ b/Lang/Seed7/Ludic-numbers
@@ -0,0 +1 @@
+../../Task/Ludic-numbers/Seed7
\ No newline at end of file
diff --git a/Lang/Seed7/Magic-squares-of-odd-order b/Lang/Seed7/Magic-squares-of-odd-order
new file mode 120000
index 0000000000..caa938290e
--- /dev/null
+++ b/Lang/Seed7/Magic-squares-of-odd-order
@@ -0,0 +1 @@
+../../Task/Magic-squares-of-odd-order/Seed7
\ No newline at end of file
diff --git a/Lang/Seed7/Nth b/Lang/Seed7/Nth
new file mode 120000
index 0000000000..673f8f5aba
--- /dev/null
+++ b/Lang/Seed7/Nth
@@ -0,0 +1 @@
+../../Task/Nth/Seed7
\ No newline at end of file
diff --git a/Lang/Seed7/Odd-word-problem b/Lang/Seed7/Odd-word-problem
new file mode 120000
index 0000000000..4e39e28f66
--- /dev/null
+++ b/Lang/Seed7/Odd-word-problem
@@ -0,0 +1 @@
+../../Task/Odd-word-problem/Seed7
\ No newline at end of file
diff --git a/Lang/Seed7/Old-lady-swallowed-a-fly b/Lang/Seed7/Old-lady-swallowed-a-fly
new file mode 120000
index 0000000000..16333cae68
--- /dev/null
+++ b/Lang/Seed7/Old-lady-swallowed-a-fly
@@ -0,0 +1 @@
+../../Task/Old-lady-swallowed-a-fly/Seed7
\ No newline at end of file
diff --git a/Lang/Seed7/Paraffins b/Lang/Seed7/Paraffins
new file mode 120000
index 0000000000..9c5779a527
--- /dev/null
+++ b/Lang/Seed7/Paraffins
@@ -0,0 +1 @@
+../../Task/Paraffins/Seed7
\ No newline at end of file
diff --git a/Lang/Seed7/RSA-code b/Lang/Seed7/RSA-code
new file mode 120000
index 0000000000..adab14caef
--- /dev/null
+++ b/Lang/Seed7/RSA-code
@@ -0,0 +1 @@
+../../Task/RSA-code/Seed7
\ No newline at end of file
diff --git a/Lang/Seed7/Rep-string b/Lang/Seed7/Rep-string
new file mode 120000
index 0000000000..546e1e4826
--- /dev/null
+++ b/Lang/Seed7/Rep-string
@@ -0,0 +1 @@
+../../Task/Rep-string/Seed7
\ No newline at end of file
diff --git a/Lang/Seed7/Reverse-words-in-a-string b/Lang/Seed7/Reverse-words-in-a-string
new file mode 120000
index 0000000000..30031bcaaa
--- /dev/null
+++ b/Lang/Seed7/Reverse-words-in-a-string
@@ -0,0 +1 @@
+../../Task/Reverse-words-in-a-string/Seed7
\ No newline at end of file
diff --git a/Lang/Seed7/Semiprime b/Lang/Seed7/Semiprime
new file mode 120000
index 0000000000..6cc35464c6
--- /dev/null
+++ b/Lang/Seed7/Semiprime
@@ -0,0 +1 @@
+../../Task/Semiprime/Seed7
\ No newline at end of file
diff --git a/Lang/Seed7/Sparkline-in-unicode b/Lang/Seed7/Sparkline-in-unicode
new file mode 120000
index 0000000000..156c1b3fd6
--- /dev/null
+++ b/Lang/Seed7/Sparkline-in-unicode
@@ -0,0 +1 @@
+../../Task/Sparkline-in-unicode/Seed7
\ No newline at end of file
diff --git a/Lang/Seed7/String-append b/Lang/Seed7/String-append
new file mode 120000
index 0000000000..17d103c0fb
--- /dev/null
+++ b/Lang/Seed7/String-append
@@ -0,0 +1 @@
+../../Task/String-append/Seed7
\ No newline at end of file
diff --git a/Lang/Seed7/String-matching b/Lang/Seed7/String-matching
new file mode 120000
index 0000000000..8de1ad143d
--- /dev/null
+++ b/Lang/Seed7/String-matching
@@ -0,0 +1 @@
+../../Task/String-matching/Seed7
\ No newline at end of file
diff --git a/Lang/Seed7/String-prepend b/Lang/Seed7/String-prepend
new file mode 120000
index 0000000000..7958d3e7d3
--- /dev/null
+++ b/Lang/Seed7/String-prepend
@@ -0,0 +1 @@
+../../Task/String-prepend/Seed7
\ No newline at end of file
diff --git a/Lang/Seed7/Sum-multiples-of-3-and-5 b/Lang/Seed7/Sum-multiples-of-3-and-5
new file mode 120000
index 0000000000..e2d0b8ff8a
--- /dev/null
+++ b/Lang/Seed7/Sum-multiples-of-3-and-5
@@ -0,0 +1 @@
+../../Task/Sum-multiples-of-3-and-5/Seed7
\ No newline at end of file
diff --git a/Lang/Seed7/The-Twelve-Days-of-Christmas b/Lang/Seed7/The-Twelve-Days-of-Christmas
new file mode 120000
index 0000000000..801cac7955
--- /dev/null
+++ b/Lang/Seed7/The-Twelve-Days-of-Christmas
@@ -0,0 +1 @@
+../../Task/The-Twelve-Days-of-Christmas/Seed7
\ No newline at end of file
diff --git a/Lang/Seed7/Zero-to-the-zero-power b/Lang/Seed7/Zero-to-the-zero-power
new file mode 120000
index 0000000000..36d74f5ab1
--- /dev/null
+++ b/Lang/Seed7/Zero-to-the-zero-power
@@ -0,0 +1 @@
+../../Task/Zero-to-the-zero-power/Seed7
\ No newline at end of file
diff --git a/Lang/Slate/File-input-output b/Lang/Slate/File-input-output
new file mode 120000
index 0000000000..eabc55b6ec
--- /dev/null
+++ b/Lang/Slate/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/Slate
\ No newline at end of file
diff --git a/Lang/Smalltalk/ABC-Problem b/Lang/Smalltalk/ABC-Problem
new file mode 120000
index 0000000000..8257a19ca1
--- /dev/null
+++ b/Lang/Smalltalk/ABC-Problem
@@ -0,0 +1 @@
+../../Task/ABC-Problem/Smalltalk
\ No newline at end of file
diff --git a/Lang/Smalltalk/Closures-Value-capture b/Lang/Smalltalk/Closures-Value-capture
new file mode 120000
index 0000000000..5611997eea
--- /dev/null
+++ b/Lang/Smalltalk/Closures-Value-capture
@@ -0,0 +1 @@
+../../Task/Closures-Value-capture/Smalltalk
\ No newline at end of file
diff --git a/Lang/Smalltalk/File-input-output b/Lang/Smalltalk/File-input-output
new file mode 120000
index 0000000000..4b3a9d54a9
--- /dev/null
+++ b/Lang/Smalltalk/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/Smalltalk
\ No newline at end of file
diff --git a/Lang/Smalltalk/Reverse-words-in-a-string b/Lang/Smalltalk/Reverse-words-in-a-string
new file mode 120000
index 0000000000..bd6f96dcc3
--- /dev/null
+++ b/Lang/Smalltalk/Reverse-words-in-a-string
@@ -0,0 +1 @@
+../../Task/Reverse-words-in-a-string/Smalltalk
\ No newline at end of file
diff --git a/Lang/Smalltalk/String-matching b/Lang/Smalltalk/String-matching
new file mode 120000
index 0000000000..ca047ecf3c
--- /dev/null
+++ b/Lang/Smalltalk/String-matching
@@ -0,0 +1 @@
+../../Task/String-matching/Smalltalk
\ No newline at end of file
diff --git a/Lang/Smalltalk/Zero-to-the-zero-power b/Lang/Smalltalk/Zero-to-the-zero-power
new file mode 120000
index 0000000000..6561c4a7e8
--- /dev/null
+++ b/Lang/Smalltalk/Zero-to-the-zero-power
@@ -0,0 +1 @@
+../../Task/Zero-to-the-zero-power/Smalltalk
\ No newline at end of file
diff --git a/Lang/Standard-ML/Catamorphism b/Lang/Standard-ML/Catamorphism
new file mode 120000
index 0000000000..f4501f3e3f
--- /dev/null
+++ b/Lang/Standard-ML/Catamorphism
@@ -0,0 +1 @@
+../../Task/Catamorphism/Standard-ML
\ No newline at end of file
diff --git a/Lang/Standard-ML/Comma-quibbling b/Lang/Standard-ML/Comma-quibbling
new file mode 120000
index 0000000000..c0ec18422b
--- /dev/null
+++ b/Lang/Standard-ML/Comma-quibbling
@@ -0,0 +1 @@
+../../Task/Comma-quibbling/Standard-ML
\ No newline at end of file
diff --git a/Lang/Standard-ML/Currying b/Lang/Standard-ML/Currying
new file mode 120000
index 0000000000..afe208505f
--- /dev/null
+++ b/Lang/Standard-ML/Currying
@@ -0,0 +1 @@
+../../Task/Currying/Standard-ML
\ No newline at end of file
diff --git a/Lang/Standard-ML/File-input-output b/Lang/Standard-ML/File-input-output
new file mode 120000
index 0000000000..59e89929a6
--- /dev/null
+++ b/Lang/Standard-ML/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/Standard-ML
\ No newline at end of file
diff --git a/Lang/Standard-ML/Generate-lower-case-ASCII-alphabet b/Lang/Standard-ML/Generate-lower-case-ASCII-alphabet
new file mode 120000
index 0000000000..a2a734d909
--- /dev/null
+++ b/Lang/Standard-ML/Generate-lower-case-ASCII-alphabet
@@ -0,0 +1 @@
+../../Task/Generate-lower-case-ASCII-alphabet/Standard-ML
\ No newline at end of file
diff --git a/Lang/Standard-ML/Longest-increasing-subsequence b/Lang/Standard-ML/Longest-increasing-subsequence
new file mode 120000
index 0000000000..dfa6ec4e42
--- /dev/null
+++ b/Lang/Standard-ML/Longest-increasing-subsequence
@@ -0,0 +1 @@
+../../Task/Longest-increasing-subsequence/Standard-ML
\ No newline at end of file
diff --git a/Lang/Standard-ML/Quickselect-algorithm b/Lang/Standard-ML/Quickselect-algorithm
new file mode 120000
index 0000000000..8d2c3676e4
--- /dev/null
+++ b/Lang/Standard-ML/Quickselect-algorithm
@@ -0,0 +1 @@
+../../Task/Quickselect-algorithm/Standard-ML
\ No newline at end of file
diff --git a/Lang/Standard-ML/Runge-Kutta-method b/Lang/Standard-ML/Runge-Kutta-method
new file mode 120000
index 0000000000..b2e77beb2c
--- /dev/null
+++ b/Lang/Standard-ML/Runge-Kutta-method
@@ -0,0 +1 @@
+../../Task/Runge-Kutta-method/Standard-ML
\ No newline at end of file
diff --git a/Lang/Standard-ML/String-matching b/Lang/Standard-ML/String-matching
new file mode 120000
index 0000000000..8ce74b2e97
--- /dev/null
+++ b/Lang/Standard-ML/String-matching
@@ -0,0 +1 @@
+../../Task/String-matching/Standard-ML
\ No newline at end of file
diff --git a/Lang/TI-83-BASIC/Catalan-numbers-Pascals-triangle b/Lang/TI-83-BASIC/Catalan-numbers-Pascals-triangle
new file mode 120000
index 0000000000..bb07e3d491
--- /dev/null
+++ b/Lang/TI-83-BASIC/Catalan-numbers-Pascals-triangle
@@ -0,0 +1 @@
+../../Task/Catalan-numbers-Pascals-triangle/TI-83-BASIC
\ No newline at end of file
diff --git a/Lang/TI-83-BASIC/Hello-world-Newbie b/Lang/TI-83-BASIC/Hello-world-Newbie
new file mode 120000
index 0000000000..73ce752311
--- /dev/null
+++ b/Lang/TI-83-BASIC/Hello-world-Newbie
@@ -0,0 +1 @@
+../../Task/Hello-world-Newbie/TI-83-BASIC
\ No newline at end of file
diff --git a/Lang/TI-83-BASIC/Munching-squares b/Lang/TI-83-BASIC/Munching-squares
new file mode 120000
index 0000000000..6c404f160b
--- /dev/null
+++ b/Lang/TI-83-BASIC/Munching-squares
@@ -0,0 +1 @@
+../../Task/Munching-squares/TI-83-BASIC
\ No newline at end of file
diff --git a/Lang/TUSCRIPT/ABC-Problem b/Lang/TUSCRIPT/ABC-Problem
new file mode 120000
index 0000000000..ca9150a2cf
--- /dev/null
+++ b/Lang/TUSCRIPT/ABC-Problem
@@ -0,0 +1 @@
+../../Task/ABC-Problem/TUSCRIPT
\ No newline at end of file
diff --git a/Lang/TUSCRIPT/Amb b/Lang/TUSCRIPT/Amb
new file mode 120000
index 0000000000..c8aaa106e7
--- /dev/null
+++ b/Lang/TUSCRIPT/Amb
@@ -0,0 +1 @@
+../../Task/Amb/TUSCRIPT
\ No newline at end of file
diff --git a/Lang/TUSCRIPT/CSV-data-manipulation b/Lang/TUSCRIPT/CSV-data-manipulation
new file mode 120000
index 0000000000..fa63752579
--- /dev/null
+++ b/Lang/TUSCRIPT/CSV-data-manipulation
@@ -0,0 +1 @@
+../../Task/CSV-data-manipulation/TUSCRIPT
\ No newline at end of file
diff --git a/Lang/TUSCRIPT/Odd-word-problem b/Lang/TUSCRIPT/Odd-word-problem
new file mode 120000
index 0000000000..5ece6ae29a
--- /dev/null
+++ b/Lang/TUSCRIPT/Odd-word-problem
@@ -0,0 +1 @@
+../../Task/Odd-word-problem/TUSCRIPT
\ No newline at end of file
diff --git a/Lang/TUSCRIPT/String-matching b/Lang/TUSCRIPT/String-matching
new file mode 120000
index 0000000000..eaa5dd73e3
--- /dev/null
+++ b/Lang/TUSCRIPT/String-matching
@@ -0,0 +1 @@
+../../Task/String-matching/TUSCRIPT
\ No newline at end of file
diff --git a/Lang/TXR/ABC-Problem b/Lang/TXR/ABC-Problem
new file mode 120000
index 0000000000..82f1ac3de3
--- /dev/null
+++ b/Lang/TXR/ABC-Problem
@@ -0,0 +1 @@
+../../Task/ABC-Problem/TXR
\ No newline at end of file
diff --git a/Lang/TXR/Amb b/Lang/TXR/Amb
new file mode 120000
index 0000000000..4ef0437a9c
--- /dev/null
+++ b/Lang/TXR/Amb
@@ -0,0 +1 @@
+../../Task/Amb/TXR
\ No newline at end of file
diff --git a/Lang/TXR/Hash-join b/Lang/TXR/Hash-join
new file mode 120000
index 0000000000..11245150b5
--- /dev/null
+++ b/Lang/TXR/Hash-join
@@ -0,0 +1 @@
+../../Task/Hash-join/TXR
\ No newline at end of file
diff --git a/Lang/TXR/Old-lady-swallowed-a-fly b/Lang/TXR/Old-lady-swallowed-a-fly
new file mode 120000
index 0000000000..a5d438a012
--- /dev/null
+++ b/Lang/TXR/Old-lady-swallowed-a-fly
@@ -0,0 +1 @@
+../../Task/Old-lady-swallowed-a-fly/TXR
\ No newline at end of file
diff --git a/Lang/TXR/String-matching b/Lang/TXR/String-matching
new file mode 120000
index 0000000000..449db2a7df
--- /dev/null
+++ b/Lang/TXR/String-matching
@@ -0,0 +1 @@
+../../Task/String-matching/TXR
\ No newline at end of file
diff --git a/Lang/Tcl/9-billion-names-of-God-the-integer b/Lang/Tcl/9-billion-names-of-God-the-integer
new file mode 120000
index 0000000000..9763f08758
--- /dev/null
+++ b/Lang/Tcl/9-billion-names-of-God-the-integer
@@ -0,0 +1 @@
+../../Task/9-billion-names-of-God-the-integer/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/ABC-Problem b/Lang/Tcl/ABC-Problem
new file mode 120000
index 0000000000..5c085135cb
--- /dev/null
+++ b/Lang/Tcl/ABC-Problem
@@ -0,0 +1 @@
+../../Task/ABC-Problem/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/AKS-test-for-primes b/Lang/Tcl/AKS-test-for-primes
new file mode 120000
index 0000000000..50d966f945
--- /dev/null
+++ b/Lang/Tcl/AKS-test-for-primes
@@ -0,0 +1 @@
+../../Task/AKS-test-for-primes/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Almost-prime b/Lang/Tcl/Almost-prime
new file mode 120000
index 0000000000..77a487f9a5
--- /dev/null
+++ b/Lang/Tcl/Almost-prime
@@ -0,0 +1 @@
+../../Task/Almost-prime/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Amb b/Lang/Tcl/Amb
new file mode 120000
index 0000000000..38a675cbd9
--- /dev/null
+++ b/Lang/Tcl/Amb
@@ -0,0 +1 @@
+../../Task/Amb/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Amicable-pairs b/Lang/Tcl/Amicable-pairs
new file mode 120000
index 0000000000..ec3ea86d78
--- /dev/null
+++ b/Lang/Tcl/Amicable-pairs
@@ -0,0 +1 @@
+../../Task/Amicable-pairs/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Append-a-record-to-the-end-of-a-text-file b/Lang/Tcl/Append-a-record-to-the-end-of-a-text-file
new file mode 120000
index 0000000000..cb9aa31075
--- /dev/null
+++ b/Lang/Tcl/Append-a-record-to-the-end-of-a-text-file
@@ -0,0 +1 @@
+../../Task/Append-a-record-to-the-end-of-a-text-file/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Arithmetic-geometric-mean-Calculate-Pi b/Lang/Tcl/Arithmetic-geometric-mean-Calculate-Pi
new file mode 120000
index 0000000000..cb2a56552f
--- /dev/null
+++ b/Lang/Tcl/Arithmetic-geometric-mean-Calculate-Pi
@@ -0,0 +1 @@
+../../Task/Arithmetic-geometric-mean-Calculate-Pi/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Benfords-law b/Lang/Tcl/Benfords-law
new file mode 120000
index 0000000000..5295191165
--- /dev/null
+++ b/Lang/Tcl/Benfords-law
@@ -0,0 +1 @@
+../../Task/Benfords-law/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Bernoulli-numbers b/Lang/Tcl/Bernoulli-numbers
new file mode 120000
index 0000000000..b6146a098c
--- /dev/null
+++ b/Lang/Tcl/Bernoulli-numbers
@@ -0,0 +1 @@
+../../Task/Bernoulli-numbers/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Bitcoin-public-point-to-address b/Lang/Tcl/Bitcoin-public-point-to-address
new file mode 120000
index 0000000000..8d30bd7c16
--- /dev/null
+++ b/Lang/Tcl/Bitcoin-public-point-to-address
@@ -0,0 +1 @@
+../../Task/Bitcoin-public-point-to-address/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/CSV-data-manipulation b/Lang/Tcl/CSV-data-manipulation
new file mode 120000
index 0000000000..30e5d98351
--- /dev/null
+++ b/Lang/Tcl/CSV-data-manipulation
@@ -0,0 +1 @@
+../../Task/CSV-data-manipulation/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Calendar---for-REAL-programmers b/Lang/Tcl/Calendar---for-REAL-programmers
new file mode 120000
index 0000000000..0cb9aaa9cf
--- /dev/null
+++ b/Lang/Tcl/Calendar---for-REAL-programmers
@@ -0,0 +1 @@
+../../Task/Calendar---for-REAL-programmers/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Casting-out-nines b/Lang/Tcl/Casting-out-nines
new file mode 120000
index 0000000000..22c34a8bd7
--- /dev/null
+++ b/Lang/Tcl/Casting-out-nines
@@ -0,0 +1 @@
+../../Task/Casting-out-nines/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Catalan-numbers-Pascals-triangle b/Lang/Tcl/Catalan-numbers-Pascals-triangle
new file mode 120000
index 0000000000..e3206859b5
--- /dev/null
+++ b/Lang/Tcl/Catalan-numbers-Pascals-triangle
@@ -0,0 +1 @@
+../../Task/Catalan-numbers-Pascals-triangle/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Catamorphism b/Lang/Tcl/Catamorphism
new file mode 120000
index 0000000000..9ca508cd94
--- /dev/null
+++ b/Lang/Tcl/Catamorphism
@@ -0,0 +1 @@
+../../Task/Catamorphism/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Chinese-remainder-theorem b/Lang/Tcl/Chinese-remainder-theorem
new file mode 120000
index 0000000000..e002fff774
--- /dev/null
+++ b/Lang/Tcl/Chinese-remainder-theorem
@@ -0,0 +1 @@
+../../Task/Chinese-remainder-theorem/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Circles-of-given-radius-through-two-points b/Lang/Tcl/Circles-of-given-radius-through-two-points
new file mode 120000
index 0000000000..c8849c1ca2
--- /dev/null
+++ b/Lang/Tcl/Circles-of-given-radius-through-two-points
@@ -0,0 +1 @@
+../../Task/Circles-of-given-radius-through-two-points/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Closures-Value-capture b/Lang/Tcl/Closures-Value-capture
new file mode 120000
index 0000000000..3a35f06ec4
--- /dev/null
+++ b/Lang/Tcl/Closures-Value-capture
@@ -0,0 +1 @@
+../../Task/Closures-Value-capture/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Combinations-and-permutations b/Lang/Tcl/Combinations-and-permutations
new file mode 120000
index 0000000000..6500a6a0e6
--- /dev/null
+++ b/Lang/Tcl/Combinations-and-permutations
@@ -0,0 +1 @@
+../../Task/Combinations-and-permutations/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Comma-quibbling b/Lang/Tcl/Comma-quibbling
new file mode 120000
index 0000000000..2bdb8851a1
--- /dev/null
+++ b/Lang/Tcl/Comma-quibbling
@@ -0,0 +1 @@
+../../Task/Comma-quibbling/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Conjugate-transpose b/Lang/Tcl/Conjugate-transpose
new file mode 120000
index 0000000000..1f28e09d9d
--- /dev/null
+++ b/Lang/Tcl/Conjugate-transpose
@@ -0,0 +1 @@
+../../Task/Conjugate-transpose/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Convert-decimal-number-to-rational b/Lang/Tcl/Convert-decimal-number-to-rational
new file mode 120000
index 0000000000..3380963163
--- /dev/null
+++ b/Lang/Tcl/Convert-decimal-number-to-rational
@@ -0,0 +1 @@
+../../Task/Convert-decimal-number-to-rational/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Currying b/Lang/Tcl/Currying
new file mode 120000
index 0000000000..15eba2ee48
--- /dev/null
+++ b/Lang/Tcl/Currying
@@ -0,0 +1 @@
+../../Task/Currying/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Digital-root-Multiplicative-digital-root b/Lang/Tcl/Digital-root-Multiplicative-digital-root
new file mode 120000
index 0000000000..83f0f304a4
--- /dev/null
+++ b/Lang/Tcl/Digital-root-Multiplicative-digital-root
@@ -0,0 +1 @@
+../../Task/Digital-root-Multiplicative-digital-root/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Draw-a-clock b/Lang/Tcl/Draw-a-clock
new file mode 120000
index 0000000000..f3d019520b
--- /dev/null
+++ b/Lang/Tcl/Draw-a-clock
@@ -0,0 +1 @@
+../../Task/Draw-a-clock/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Extensible-prime-generator b/Lang/Tcl/Extensible-prime-generator
new file mode 120000
index 0000000000..4b1ac10ab1
--- /dev/null
+++ b/Lang/Tcl/Extensible-prime-generator
@@ -0,0 +1 @@
+../../Task/Extensible-prime-generator/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Fibonacci-word b/Lang/Tcl/Fibonacci-word
new file mode 120000
index 0000000000..7f1df9fc24
--- /dev/null
+++ b/Lang/Tcl/Fibonacci-word
@@ -0,0 +1 @@
+../../Task/Fibonacci-word/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Fibonacci-word-fractal b/Lang/Tcl/Fibonacci-word-fractal
new file mode 120000
index 0000000000..bbbd26a36e
--- /dev/null
+++ b/Lang/Tcl/Fibonacci-word-fractal
@@ -0,0 +1 @@
+../../Task/Fibonacci-word-fractal/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/File-input-output b/Lang/Tcl/File-input-output
new file mode 120000
index 0000000000..52d0537f51
--- /dev/null
+++ b/Lang/Tcl/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Find-the-last-Sunday-of-each-month b/Lang/Tcl/Find-the-last-Sunday-of-each-month
new file mode 120000
index 0000000000..801604a38a
--- /dev/null
+++ b/Lang/Tcl/Find-the-last-Sunday-of-each-month
@@ -0,0 +1 @@
+../../Task/Find-the-last-Sunday-of-each-month/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Flipping-bits-game b/Lang/Tcl/Flipping-bits-game
new file mode 120000
index 0000000000..696269555f
--- /dev/null
+++ b/Lang/Tcl/Flipping-bits-game
@@ -0,0 +1 @@
+../../Task/Flipping-bits-game/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Fractran b/Lang/Tcl/Fractran
new file mode 120000
index 0000000000..26ad9b7585
--- /dev/null
+++ b/Lang/Tcl/Fractran
@@ -0,0 +1 @@
+../../Task/Fractran/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Gaussian-elimination b/Lang/Tcl/Gaussian-elimination
new file mode 120000
index 0000000000..2db50b3c19
--- /dev/null
+++ b/Lang/Tcl/Gaussian-elimination
@@ -0,0 +1 @@
+../../Task/Gaussian-elimination/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Generate-Chess960-starting-position b/Lang/Tcl/Generate-Chess960-starting-position
new file mode 120000
index 0000000000..7a3f4e54f9
--- /dev/null
+++ b/Lang/Tcl/Generate-Chess960-starting-position
@@ -0,0 +1 @@
+../../Task/Generate-Chess960-starting-position/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Generate-lower-case-ASCII-alphabet b/Lang/Tcl/Generate-lower-case-ASCII-alphabet
new file mode 120000
index 0000000000..0155c4eb2c
--- /dev/null
+++ b/Lang/Tcl/Generate-lower-case-ASCII-alphabet
@@ -0,0 +1 @@
+../../Task/Generate-lower-case-ASCII-alphabet/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Hash-join b/Lang/Tcl/Hash-join
new file mode 120000
index 0000000000..38beb38010
--- /dev/null
+++ b/Lang/Tcl/Hash-join
@@ -0,0 +1 @@
+../../Task/Hash-join/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Hello-world-Newbie b/Lang/Tcl/Hello-world-Newbie
new file mode 120000
index 0000000000..d350b7ce77
--- /dev/null
+++ b/Lang/Tcl/Hello-world-Newbie
@@ -0,0 +1 @@
+../../Task/Hello-world-Newbie/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Hickerson-series-of-almost-integers b/Lang/Tcl/Hickerson-series-of-almost-integers
new file mode 120000
index 0000000000..5ea76bada2
--- /dev/null
+++ b/Lang/Tcl/Hickerson-series-of-almost-integers
@@ -0,0 +1 @@
+../../Task/Hickerson-series-of-almost-integers/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/IBAN b/Lang/Tcl/IBAN
new file mode 120000
index 0000000000..bd4c650bc8
--- /dev/null
+++ b/Lang/Tcl/IBAN
@@ -0,0 +1 @@
+../../Task/IBAN/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Integer-overflow b/Lang/Tcl/Integer-overflow
new file mode 120000
index 0000000000..170b36c39e
--- /dev/null
+++ b/Lang/Tcl/Integer-overflow
@@ -0,0 +1 @@
+../../Task/Integer-overflow/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Iterated-digits-squaring b/Lang/Tcl/Iterated-digits-squaring
new file mode 120000
index 0000000000..4e76f5aae1
--- /dev/null
+++ b/Lang/Tcl/Iterated-digits-squaring
@@ -0,0 +1 @@
+../../Task/Iterated-digits-squaring/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/K-d-tree b/Lang/Tcl/K-d-tree
new file mode 120000
index 0000000000..d1f78afb42
--- /dev/null
+++ b/Lang/Tcl/K-d-tree
@@ -0,0 +1 @@
+../../Task/K-d-tree/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Left-factorials b/Lang/Tcl/Left-factorials
new file mode 120000
index 0000000000..bd7833a9a3
--- /dev/null
+++ b/Lang/Tcl/Left-factorials
@@ -0,0 +1 @@
+../../Task/Left-factorials/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Longest-increasing-subsequence b/Lang/Tcl/Longest-increasing-subsequence
new file mode 120000
index 0000000000..f7674f7b83
--- /dev/null
+++ b/Lang/Tcl/Longest-increasing-subsequence
@@ -0,0 +1 @@
+../../Task/Longest-increasing-subsequence/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Ludic-numbers b/Lang/Tcl/Ludic-numbers
new file mode 120000
index 0000000000..7fb20bb746
--- /dev/null
+++ b/Lang/Tcl/Ludic-numbers
@@ -0,0 +1 @@
+../../Task/Ludic-numbers/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Machine-code b/Lang/Tcl/Machine-code
new file mode 120000
index 0000000000..249526efc4
--- /dev/null
+++ b/Lang/Tcl/Machine-code
@@ -0,0 +1 @@
+../../Task/Machine-code/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Magic-squares-of-odd-order b/Lang/Tcl/Magic-squares-of-odd-order
new file mode 120000
index 0000000000..7bc81ce004
--- /dev/null
+++ b/Lang/Tcl/Magic-squares-of-odd-order
@@ -0,0 +1 @@
+../../Task/Magic-squares-of-odd-order/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Make-directory-path b/Lang/Tcl/Make-directory-path
new file mode 120000
index 0000000000..c917c56de7
--- /dev/null
+++ b/Lang/Tcl/Make-directory-path
@@ -0,0 +1 @@
+../../Task/Make-directory-path/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Maximum-triangle-path-sum b/Lang/Tcl/Maximum-triangle-path-sum
new file mode 120000
index 0000000000..f257e103c1
--- /dev/null
+++ b/Lang/Tcl/Maximum-triangle-path-sum
@@ -0,0 +1 @@
+../../Task/Maximum-triangle-path-sum/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Move-to-front-algorithm b/Lang/Tcl/Move-to-front-algorithm
new file mode 120000
index 0000000000..716ee4bb44
--- /dev/null
+++ b/Lang/Tcl/Move-to-front-algorithm
@@ -0,0 +1 @@
+../../Task/Move-to-front-algorithm/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Munching-squares b/Lang/Tcl/Munching-squares
new file mode 120000
index 0000000000..7a2b01526b
--- /dev/null
+++ b/Lang/Tcl/Munching-squares
@@ -0,0 +1 @@
+../../Task/Munching-squares/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Narcissistic-decimal-number b/Lang/Tcl/Narcissistic-decimal-number
new file mode 120000
index 0000000000..40acfbb781
--- /dev/null
+++ b/Lang/Tcl/Narcissistic-decimal-number
@@ -0,0 +1 @@
+../../Task/Narcissistic-decimal-number/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Natural-sorting b/Lang/Tcl/Natural-sorting
new file mode 120000
index 0000000000..1329a12399
--- /dev/null
+++ b/Lang/Tcl/Natural-sorting
@@ -0,0 +1 @@
+../../Task/Natural-sorting/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Nth b/Lang/Tcl/Nth
new file mode 120000
index 0000000000..31ceda276a
--- /dev/null
+++ b/Lang/Tcl/Nth
@@ -0,0 +1 @@
+../../Task/Nth/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Odd-word-problem b/Lang/Tcl/Odd-word-problem
new file mode 120000
index 0000000000..bc10995c97
--- /dev/null
+++ b/Lang/Tcl/Odd-word-problem
@@ -0,0 +1 @@
+../../Task/Odd-word-problem/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Old-lady-swallowed-a-fly b/Lang/Tcl/Old-lady-swallowed-a-fly
new file mode 120000
index 0000000000..7bf77261b9
--- /dev/null
+++ b/Lang/Tcl/Old-lady-swallowed-a-fly
@@ -0,0 +1 @@
+../../Task/Old-lady-swallowed-a-fly/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Order-disjoint-list-items b/Lang/Tcl/Order-disjoint-list-items
new file mode 120000
index 0000000000..a6851b8844
--- /dev/null
+++ b/Lang/Tcl/Order-disjoint-list-items
@@ -0,0 +1 @@
+../../Task/Order-disjoint-list-items/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Paraffins b/Lang/Tcl/Paraffins
new file mode 120000
index 0000000000..6ec0ca232e
--- /dev/null
+++ b/Lang/Tcl/Paraffins
@@ -0,0 +1 @@
+../../Task/Paraffins/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Parse-an-IP-Address b/Lang/Tcl/Parse-an-IP-Address
new file mode 120000
index 0000000000..208700cc83
--- /dev/null
+++ b/Lang/Tcl/Parse-an-IP-Address
@@ -0,0 +1 @@
+../../Task/Parse-an-IP-Address/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Penneys-game b/Lang/Tcl/Penneys-game
new file mode 120000
index 0000000000..148a11aa06
--- /dev/null
+++ b/Lang/Tcl/Penneys-game
@@ -0,0 +1 @@
+../../Task/Penneys-game/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Percolation-Bond-percolation b/Lang/Tcl/Percolation-Bond-percolation
new file mode 120000
index 0000000000..2e3a994b4c
--- /dev/null
+++ b/Lang/Tcl/Percolation-Bond-percolation
@@ -0,0 +1 @@
+../../Task/Percolation-Bond-percolation/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Percolation-Mean-cluster-density b/Lang/Tcl/Percolation-Mean-cluster-density
new file mode 120000
index 0000000000..62a72f472a
--- /dev/null
+++ b/Lang/Tcl/Percolation-Mean-cluster-density
@@ -0,0 +1 @@
+../../Task/Percolation-Mean-cluster-density/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Percolation-Mean-run-density b/Lang/Tcl/Percolation-Mean-run-density
new file mode 120000
index 0000000000..bf17ee677a
--- /dev/null
+++ b/Lang/Tcl/Percolation-Mean-run-density
@@ -0,0 +1 @@
+../../Task/Percolation-Mean-run-density/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Percolation-Site-percolation b/Lang/Tcl/Percolation-Site-percolation
new file mode 120000
index 0000000000..0029613a17
--- /dev/null
+++ b/Lang/Tcl/Percolation-Site-percolation
@@ -0,0 +1 @@
+../../Task/Percolation-Site-percolation/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Permutations-Rank-of-a-permutation b/Lang/Tcl/Permutations-Rank-of-a-permutation
new file mode 120000
index 0000000000..402e4bf6ca
--- /dev/null
+++ b/Lang/Tcl/Permutations-Rank-of-a-permutation
@@ -0,0 +1 @@
+../../Task/Permutations-Rank-of-a-permutation/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Pernicious-numbers b/Lang/Tcl/Pernicious-numbers
new file mode 120000
index 0000000000..8bb41f3333
--- /dev/null
+++ b/Lang/Tcl/Pernicious-numbers
@@ -0,0 +1 @@
+../../Task/Pernicious-numbers/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Phrase-reversals b/Lang/Tcl/Phrase-reversals
new file mode 120000
index 0000000000..59fbddf09e
--- /dev/null
+++ b/Lang/Tcl/Phrase-reversals
@@ -0,0 +1 @@
+../../Task/Phrase-reversals/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Quickselect-algorithm b/Lang/Tcl/Quickselect-algorithm
new file mode 120000
index 0000000000..b26a81d41c
--- /dev/null
+++ b/Lang/Tcl/Quickselect-algorithm
@@ -0,0 +1 @@
+../../Task/Quickselect-algorithm/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/RSA-code b/Lang/Tcl/RSA-code
new file mode 120000
index 0000000000..70b5ded386
--- /dev/null
+++ b/Lang/Tcl/RSA-code
@@ -0,0 +1 @@
+../../Task/RSA-code/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Ranking-methods b/Lang/Tcl/Ranking-methods
new file mode 120000
index 0000000000..689f13d77b
--- /dev/null
+++ b/Lang/Tcl/Ranking-methods
@@ -0,0 +1 @@
+../../Task/Ranking-methods/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Rep-string b/Lang/Tcl/Rep-string
new file mode 120000
index 0000000000..937ac8e9ed
--- /dev/null
+++ b/Lang/Tcl/Rep-string
@@ -0,0 +1 @@
+../../Task/Rep-string/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Reverse-words-in-a-string b/Lang/Tcl/Reverse-words-in-a-string
new file mode 120000
index 0000000000..3feb3b5948
--- /dev/null
+++ b/Lang/Tcl/Reverse-words-in-a-string
@@ -0,0 +1 @@
+../../Task/Reverse-words-in-a-string/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Runge-Kutta-method b/Lang/Tcl/Runge-Kutta-method
new file mode 120000
index 0000000000..982602cfa1
--- /dev/null
+++ b/Lang/Tcl/Runge-Kutta-method
@@ -0,0 +1 @@
+../../Task/Runge-Kutta-method/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Semiprime b/Lang/Tcl/Semiprime
new file mode 120000
index 0000000000..1737aa0e2d
--- /dev/null
+++ b/Lang/Tcl/Semiprime
@@ -0,0 +1 @@
+../../Task/Semiprime/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Sequence-of-primes-by-Trial-Division b/Lang/Tcl/Sequence-of-primes-by-Trial-Division
new file mode 120000
index 0000000000..f647af3e79
--- /dev/null
+++ b/Lang/Tcl/Sequence-of-primes-by-Trial-Division
@@ -0,0 +1 @@
+../../Task/Sequence-of-primes-by-Trial-Division/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Solve-a-Holy-Knights-tour b/Lang/Tcl/Solve-a-Holy-Knights-tour
new file mode 120000
index 0000000000..0e9c377e8e
--- /dev/null
+++ b/Lang/Tcl/Solve-a-Holy-Knights-tour
@@ -0,0 +1 @@
+../../Task/Solve-a-Holy-Knights-tour/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Solve-a-Hopido-puzzle b/Lang/Tcl/Solve-a-Hopido-puzzle
new file mode 120000
index 0000000000..d17afadb66
--- /dev/null
+++ b/Lang/Tcl/Solve-a-Hopido-puzzle
@@ -0,0 +1 @@
+../../Task/Solve-a-Hopido-puzzle/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Solve-the-no-connection-puzzle b/Lang/Tcl/Solve-the-no-connection-puzzle
new file mode 120000
index 0000000000..df35bb9b04
--- /dev/null
+++ b/Lang/Tcl/Solve-the-no-connection-puzzle
@@ -0,0 +1 @@
+../../Task/Solve-the-no-connection-puzzle/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Sparkline-in-unicode b/Lang/Tcl/Sparkline-in-unicode
new file mode 120000
index 0000000000..82667dbc46
--- /dev/null
+++ b/Lang/Tcl/Sparkline-in-unicode
@@ -0,0 +1 @@
+../../Task/Sparkline-in-unicode/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/State-name-puzzle b/Lang/Tcl/State-name-puzzle
new file mode 120000
index 0000000000..1e3e7b56a9
--- /dev/null
+++ b/Lang/Tcl/State-name-puzzle
@@ -0,0 +1 @@
+../../Task/State-name-puzzle/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Statistics-Basic b/Lang/Tcl/Statistics-Basic
new file mode 120000
index 0000000000..3381774045
--- /dev/null
+++ b/Lang/Tcl/Statistics-Basic
@@ -0,0 +1 @@
+../../Task/Statistics-Basic/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/String-append b/Lang/Tcl/String-append
new file mode 120000
index 0000000000..bd0d9dedc6
--- /dev/null
+++ b/Lang/Tcl/String-append
@@ -0,0 +1 @@
+../../Task/String-append/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/String-matching b/Lang/Tcl/String-matching
new file mode 120000
index 0000000000..a6b3580da6
--- /dev/null
+++ b/Lang/Tcl/String-matching
@@ -0,0 +1 @@
+../../Task/String-matching/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/String-prepend b/Lang/Tcl/String-prepend
new file mode 120000
index 0000000000..4212b62a4f
--- /dev/null
+++ b/Lang/Tcl/String-prepend
@@ -0,0 +1 @@
+../../Task/String-prepend/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Sum-multiples-of-3-and-5 b/Lang/Tcl/Sum-multiples-of-3-and-5
new file mode 120000
index 0000000000..6758fae102
--- /dev/null
+++ b/Lang/Tcl/Sum-multiples-of-3-and-5
@@ -0,0 +1 @@
+../../Task/Sum-multiples-of-3-and-5/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/The-ISAAC-Cipher b/Lang/Tcl/The-ISAAC-Cipher
new file mode 120000
index 0000000000..23ad9da80b
--- /dev/null
+++ b/Lang/Tcl/The-ISAAC-Cipher
@@ -0,0 +1 @@
+../../Task/The-ISAAC-Cipher/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/The-Twelve-Days-of-Christmas b/Lang/Tcl/The-Twelve-Days-of-Christmas
new file mode 120000
index 0000000000..99ab2e721c
--- /dev/null
+++ b/Lang/Tcl/The-Twelve-Days-of-Christmas
@@ -0,0 +1 @@
+../../Task/The-Twelve-Days-of-Christmas/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Total-circles-area b/Lang/Tcl/Total-circles-area
new file mode 120000
index 0000000000..b175482104
--- /dev/null
+++ b/Lang/Tcl/Total-circles-area
@@ -0,0 +1 @@
+../../Task/Total-circles-area/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Unix-ls b/Lang/Tcl/Unix-ls
new file mode 120000
index 0000000000..ab0a67ce77
--- /dev/null
+++ b/Lang/Tcl/Unix-ls
@@ -0,0 +1 @@
+../../Task/Unix-ls/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Vogels-approximation-method b/Lang/Tcl/Vogels-approximation-method
new file mode 120000
index 0000000000..2af1a99fae
--- /dev/null
+++ b/Lang/Tcl/Vogels-approximation-method
@@ -0,0 +1 @@
+../../Task/Vogels-approximation-method/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/World-Cup-group-stage b/Lang/Tcl/World-Cup-group-stage
new file mode 120000
index 0000000000..8e1fe320f3
--- /dev/null
+++ b/Lang/Tcl/World-Cup-group-stage
@@ -0,0 +1 @@
+../../Task/World-Cup-group-stage/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Zero-to-the-zero-power b/Lang/Tcl/Zero-to-the-zero-power
new file mode 120000
index 0000000000..c95b993386
--- /dev/null
+++ b/Lang/Tcl/Zero-to-the-zero-power
@@ -0,0 +1 @@
+../../Task/Zero-to-the-zero-power/Tcl
\ No newline at end of file
diff --git a/Lang/Tcl/Zhang-Suen-thinning-algorithm b/Lang/Tcl/Zhang-Suen-thinning-algorithm
new file mode 120000
index 0000000000..719c3d4b78
--- /dev/null
+++ b/Lang/Tcl/Zhang-Suen-thinning-algorithm
@@ -0,0 +1 @@
+../../Task/Zhang-Suen-thinning-algorithm/Tcl
\ No newline at end of file
diff --git a/Lang/Toka/File-input-output b/Lang/Toka/File-input-output
new file mode 120000
index 0000000000..efd0ff09b3
--- /dev/null
+++ b/Lang/Toka/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/Toka
\ No newline at end of file
diff --git a/Lang/UNIX-Shell/ABC-Problem b/Lang/UNIX-Shell/ABC-Problem
new file mode 120000
index 0000000000..4d815939f3
--- /dev/null
+++ b/Lang/UNIX-Shell/ABC-Problem
@@ -0,0 +1 @@
+../../Task/ABC-Problem/UNIX-Shell
\ No newline at end of file
diff --git a/Lang/UNIX-Shell/Append-a-record-to-the-end-of-a-text-file b/Lang/UNIX-Shell/Append-a-record-to-the-end-of-a-text-file
new file mode 120000
index 0000000000..3d68a76ef7
--- /dev/null
+++ b/Lang/UNIX-Shell/Append-a-record-to-the-end-of-a-text-file
@@ -0,0 +1 @@
+../../Task/Append-a-record-to-the-end-of-a-text-file/UNIX-Shell
\ No newline at end of file
diff --git a/Lang/UNIX-Shell/CSV-data-manipulation b/Lang/UNIX-Shell/CSV-data-manipulation
new file mode 120000
index 0000000000..06c933a557
--- /dev/null
+++ b/Lang/UNIX-Shell/CSV-data-manipulation
@@ -0,0 +1 @@
+../../Task/CSV-data-manipulation/UNIX-Shell
\ No newline at end of file
diff --git a/Lang/UNIX-Shell/Comma-quibbling b/Lang/UNIX-Shell/Comma-quibbling
new file mode 120000
index 0000000000..c9ca895f7f
--- /dev/null
+++ b/Lang/UNIX-Shell/Comma-quibbling
@@ -0,0 +1 @@
+../../Task/Comma-quibbling/UNIX-Shell
\ No newline at end of file
diff --git a/Lang/UNIX-Shell/File-input-output b/Lang/UNIX-Shell/File-input-output
new file mode 120000
index 0000000000..4ebb616c06
--- /dev/null
+++ b/Lang/UNIX-Shell/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/UNIX-Shell
\ No newline at end of file
diff --git a/Lang/UNIX-Shell/Generate-lower-case-ASCII-alphabet b/Lang/UNIX-Shell/Generate-lower-case-ASCII-alphabet
new file mode 120000
index 0000000000..56ceaa7ab4
--- /dev/null
+++ b/Lang/UNIX-Shell/Generate-lower-case-ASCII-alphabet
@@ -0,0 +1 @@
+../../Task/Generate-lower-case-ASCII-alphabet/UNIX-Shell
\ No newline at end of file
diff --git a/Lang/UNIX-Shell/IBAN b/Lang/UNIX-Shell/IBAN
new file mode 120000
index 0000000000..ce60d628fc
--- /dev/null
+++ b/Lang/UNIX-Shell/IBAN
@@ -0,0 +1 @@
+../../Task/IBAN/UNIX-Shell
\ No newline at end of file
diff --git a/Lang/UNIX-Shell/Make-directory-path b/Lang/UNIX-Shell/Make-directory-path
new file mode 120000
index 0000000000..8a5a9757ec
--- /dev/null
+++ b/Lang/UNIX-Shell/Make-directory-path
@@ -0,0 +1 @@
+../../Task/Make-directory-path/UNIX-Shell
\ No newline at end of file
diff --git a/Lang/UNIX-Shell/Narcissistic-decimal-number b/Lang/UNIX-Shell/Narcissistic-decimal-number
new file mode 120000
index 0000000000..76ab481a92
--- /dev/null
+++ b/Lang/UNIX-Shell/Narcissistic-decimal-number
@@ -0,0 +1 @@
+../../Task/Narcissistic-decimal-number/UNIX-Shell
\ No newline at end of file
diff --git a/Lang/UNIX-Shell/Penneys-game b/Lang/UNIX-Shell/Penneys-game
new file mode 120000
index 0000000000..d87c7e450c
--- /dev/null
+++ b/Lang/UNIX-Shell/Penneys-game
@@ -0,0 +1 @@
+../../Task/Penneys-game/UNIX-Shell
\ No newline at end of file
diff --git a/Lang/UNIX-Shell/Phrase-reversals b/Lang/UNIX-Shell/Phrase-reversals
new file mode 120000
index 0000000000..766815a66f
--- /dev/null
+++ b/Lang/UNIX-Shell/Phrase-reversals
@@ -0,0 +1 @@
+../../Task/Phrase-reversals/UNIX-Shell
\ No newline at end of file
diff --git a/Lang/UNIX-Shell/Rep-string b/Lang/UNIX-Shell/Rep-string
new file mode 120000
index 0000000000..2a73c95be1
--- /dev/null
+++ b/Lang/UNIX-Shell/Rep-string
@@ -0,0 +1 @@
+../../Task/Rep-string/UNIX-Shell
\ No newline at end of file
diff --git a/Lang/UNIX-Shell/Reverse-words-in-a-string b/Lang/UNIX-Shell/Reverse-words-in-a-string
new file mode 120000
index 0000000000..5dc2e86406
--- /dev/null
+++ b/Lang/UNIX-Shell/Reverse-words-in-a-string
@@ -0,0 +1 @@
+../../Task/Reverse-words-in-a-string/UNIX-Shell
\ No newline at end of file
diff --git a/Lang/Ursala/File-input-output b/Lang/Ursala/File-input-output
new file mode 120000
index 0000000000..99af38a0a8
--- /dev/null
+++ b/Lang/Ursala/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/Ursala
\ No newline at end of file
diff --git a/Lang/VBA/String-append b/Lang/VBA/String-append
new file mode 120000
index 0000000000..81c5055f2b
--- /dev/null
+++ b/Lang/VBA/String-append
@@ -0,0 +1 @@
+../../Task/String-append/VBA
\ No newline at end of file
diff --git a/Lang/VBA/String-prepend b/Lang/VBA/String-prepend
new file mode 120000
index 0000000000..c60906d033
--- /dev/null
+++ b/Lang/VBA/String-prepend
@@ -0,0 +1 @@
+../../Task/String-prepend/VBA
\ No newline at end of file
diff --git a/Lang/VBScript/Abundant,-deficient-and-perfect-number-classifications b/Lang/VBScript/Abundant,-deficient-and-perfect-number-classifications
new file mode 120000
index 0000000000..4b77871794
--- /dev/null
+++ b/Lang/VBScript/Abundant,-deficient-and-perfect-number-classifications
@@ -0,0 +1 @@
+../../Task/Abundant,-deficient-and-perfect-number-classifications/VBScript
\ No newline at end of file
diff --git a/Lang/VBScript/Amb b/Lang/VBScript/Amb
new file mode 120000
index 0000000000..4ec268c5eb
--- /dev/null
+++ b/Lang/VBScript/Amb
@@ -0,0 +1 @@
+../../Task/Amb/VBScript
\ No newline at end of file
diff --git a/Lang/VBScript/Amicable-pairs b/Lang/VBScript/Amicable-pairs
new file mode 120000
index 0000000000..a5331ded01
--- /dev/null
+++ b/Lang/VBScript/Amicable-pairs
@@ -0,0 +1 @@
+../../Task/Amicable-pairs/VBScript
\ No newline at end of file
diff --git a/Lang/VBScript/Catalan-numbers-Pascals-triangle b/Lang/VBScript/Catalan-numbers-Pascals-triangle
new file mode 120000
index 0000000000..50b29e050d
--- /dev/null
+++ b/Lang/VBScript/Catalan-numbers-Pascals-triangle
@@ -0,0 +1 @@
+../../Task/Catalan-numbers-Pascals-triangle/VBScript
\ No newline at end of file
diff --git a/Lang/VBScript/File-input-output b/Lang/VBScript/File-input-output
new file mode 120000
index 0000000000..71cfabdbe3
--- /dev/null
+++ b/Lang/VBScript/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/VBScript
\ No newline at end of file
diff --git a/Lang/VBScript/Find-the-last-Sunday-of-each-month b/Lang/VBScript/Find-the-last-Sunday-of-each-month
new file mode 120000
index 0000000000..0839f6b883
--- /dev/null
+++ b/Lang/VBScript/Find-the-last-Sunday-of-each-month
@@ -0,0 +1 @@
+../../Task/Find-the-last-Sunday-of-each-month/VBScript
\ No newline at end of file
diff --git a/Lang/VBScript/Stern-Brocot-sequence b/Lang/VBScript/Stern-Brocot-sequence
new file mode 120000
index 0000000000..ce83bb2e31
--- /dev/null
+++ b/Lang/VBScript/Stern-Brocot-sequence
@@ -0,0 +1 @@
+../../Task/Stern-Brocot-sequence/VBScript
\ No newline at end of file
diff --git a/Lang/VBScript/Textonyms b/Lang/VBScript/Textonyms
new file mode 120000
index 0000000000..2818fa96aa
--- /dev/null
+++ b/Lang/VBScript/Textonyms
@@ -0,0 +1 @@
+../../Task/Textonyms/VBScript
\ No newline at end of file
diff --git a/Lang/Vedit-macro-language/CSV-data-manipulation b/Lang/Vedit-macro-language/CSV-data-manipulation
new file mode 120000
index 0000000000..7b0db32630
--- /dev/null
+++ b/Lang/Vedit-macro-language/CSV-data-manipulation
@@ -0,0 +1 @@
+../../Task/CSV-data-manipulation/Vedit-macro-language
\ No newline at end of file
diff --git a/Lang/Vedit-macro-language/Calendar---for-REAL-programmers b/Lang/Vedit-macro-language/Calendar---for-REAL-programmers
new file mode 120000
index 0000000000..1a37d41a84
--- /dev/null
+++ b/Lang/Vedit-macro-language/Calendar---for-REAL-programmers
@@ -0,0 +1 @@
+../../Task/Calendar---for-REAL-programmers/Vedit-macro-language
\ No newline at end of file
diff --git a/Lang/Vedit-macro-language/File-input-output b/Lang/Vedit-macro-language/File-input-output
new file mode 120000
index 0000000000..e41f0dfb55
--- /dev/null
+++ b/Lang/Vedit-macro-language/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/Vedit-macro-language
\ No newline at end of file
diff --git a/Lang/Vim-Script/Generate-lower-case-ASCII-alphabet b/Lang/Vim-Script/Generate-lower-case-ASCII-alphabet
new file mode 120000
index 0000000000..d8ed64aa60
--- /dev/null
+++ b/Lang/Vim-Script/Generate-lower-case-ASCII-alphabet
@@ -0,0 +1 @@
+../../Task/Generate-lower-case-ASCII-alphabet/Vim-Script
\ No newline at end of file
diff --git a/Lang/Visual-Basic-.NET/File-input-output b/Lang/Visual-Basic-.NET/File-input-output
new file mode 120000
index 0000000000..5276a6ad86
--- /dev/null
+++ b/Lang/Visual-Basic-.NET/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/Visual-Basic-.NET
\ No newline at end of file
diff --git a/Lang/Visual-Basic/Catalan-numbers-Pascals-triangle b/Lang/Visual-Basic/Catalan-numbers-Pascals-triangle
new file mode 120000
index 0000000000..ff725a42a0
--- /dev/null
+++ b/Lang/Visual-Basic/Catalan-numbers-Pascals-triangle
@@ -0,0 +1 @@
+../../Task/Catalan-numbers-Pascals-triangle/Visual-Basic
\ No newline at end of file
diff --git a/Lang/X86-Assembly/Calendar---for-REAL-programmers b/Lang/X86-Assembly/Calendar---for-REAL-programmers
new file mode 120000
index 0000000000..0a714c855a
--- /dev/null
+++ b/Lang/X86-Assembly/Calendar---for-REAL-programmers
@@ -0,0 +1 @@
+../../Task/Calendar---for-REAL-programmers/X86-Assembly
\ No newline at end of file
diff --git a/Lang/XPL0/Circles-of-given-radius-through-two-points b/Lang/XPL0/Circles-of-given-radius-through-two-points
new file mode 120000
index 0000000000..c8bab7c254
--- /dev/null
+++ b/Lang/XPL0/Circles-of-given-radius-through-two-points
@@ -0,0 +1 @@
+../../Task/Circles-of-given-radius-through-two-points/XPL0
\ No newline at end of file
diff --git a/Lang/XPL0/Comma-quibbling b/Lang/XPL0/Comma-quibbling
new file mode 120000
index 0000000000..62ab4bec51
--- /dev/null
+++ b/Lang/XPL0/Comma-quibbling
@@ -0,0 +1 @@
+../../Task/Comma-quibbling/XPL0
\ No newline at end of file
diff --git a/Lang/XPL0/File-input-output b/Lang/XPL0/File-input-output
new file mode 120000
index 0000000000..e8d64b7b48
--- /dev/null
+++ b/Lang/XPL0/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/XPL0
\ No newline at end of file
diff --git a/Lang/XPL0/Munching-squares b/Lang/XPL0/Munching-squares
new file mode 120000
index 0000000000..51d114e27c
--- /dev/null
+++ b/Lang/XPL0/Munching-squares
@@ -0,0 +1 @@
+../../Task/Munching-squares/XPL0
\ No newline at end of file
diff --git a/Lang/XPL0/Solve-the-no-connection-puzzle b/Lang/XPL0/Solve-the-no-connection-puzzle
new file mode 120000
index 0000000000..5d02f55775
--- /dev/null
+++ b/Lang/XPL0/Solve-the-no-connection-puzzle
@@ -0,0 +1 @@
+../../Task/Solve-the-no-connection-puzzle/XPL0
\ No newline at end of file
diff --git a/Lang/XPL0/String-matching b/Lang/XPL0/String-matching
new file mode 120000
index 0000000000..b223a9d3af
--- /dev/null
+++ b/Lang/XPL0/String-matching
@@ -0,0 +1 @@
+../../Task/String-matching/XPL0
\ No newline at end of file
diff --git a/Lang/XPL0/Sum-multiples-of-3-and-5 b/Lang/XPL0/Sum-multiples-of-3-and-5
new file mode 120000
index 0000000000..5ab1f5d872
--- /dev/null
+++ b/Lang/XPL0/Sum-multiples-of-3-and-5
@@ -0,0 +1 @@
+../../Task/Sum-multiples-of-3-and-5/XPL0
\ No newline at end of file
diff --git a/Lang/ZX-Spectrum-Basic/Hello-world-Newbie b/Lang/ZX-Spectrum-Basic/Hello-world-Newbie
new file mode 120000
index 0000000000..04bf705f52
--- /dev/null
+++ b/Lang/ZX-Spectrum-Basic/Hello-world-Newbie
@@ -0,0 +1 @@
+../../Task/Hello-world-Newbie/ZX-Spectrum-Basic
\ No newline at end of file
diff --git a/Meta/Task.yaml b/Meta/Task.yaml
index 8921d14f75..35cfc1ffd0 100644
--- a/Meta/Task.yaml
+++ b/Meta/Task.yaml
@@ -11,6 +11,10 @@
name: 24 game/Solve
path: 24-game-Solve
url: 24_game/Solve
+9 billion names of God the integer:
+ name: 9 billion names of God the integer
+ path: 9-billion-names-of-God-the-integer
+ url: 9_billion_names_of_God_the_integer
99 Bottles of Beer:
name: 99 Bottles of Beer
path: 99-Bottles-of-Beer
@@ -19,10 +23,22 @@ A+B:
name: A+B
path: A+B
url: A+B
+ABC Problem:
+ name: ABC Problem
+ path: ABC-Problem
+ url: ABC_Problem
+AKS test for primes:
+ name: AKS test for primes
+ path: AKS-test-for-primes
+ url: AKS_test_for_primes
Abstract type:
name: Abstract type
path: Abstract-type
url: Abstract_type
+Abundant, deficient and perfect number classifications:
+ name: Abundant, deficient and perfect number classifications
+ path: Abundant,-deficient-and-perfect-number-classifications
+ url: Abundant,_deficient_and_perfect_number_classifications
Accumulator factory:
name: Accumulator factory
path: Accumulator-factory
@@ -55,6 +71,22 @@ Align columns:
name: Align columns
path: Align-columns
url: Align_columns
+Aliquot sequence classifications:
+ name: Aliquot sequence classifications
+ path: Aliquot-sequence-classifications
+ url: Aliquot_sequence_classifications
+Almost prime:
+ name: Almost prime
+ path: Almost-prime
+ url: Almost_prime
+Amb:
+ name: Amb
+ path: Amb
+ url: Amb
+Amicable pairs:
+ name: Amicable pairs
+ path: Amicable-pairs
+ url: Amicable_pairs
Anagrams:
name: Anagrams
path: Anagrams
@@ -75,6 +107,10 @@ Anonymous recursion:
name: Anonymous recursion
path: Anonymous-recursion
url: Anonymous_recursion
+Append a record to the end of a text file:
+ name: Append a record to the end of a text file
+ path: Append-a-record-to-the-end-of-a-text-file
+ url: Append_a_record_to_the_end_of_a_text_file
Apply a callback to an array:
name: Apply a callback to an array
path: Apply-a-callback-to-an-array
@@ -95,6 +131,10 @@ Arithmetic-geometric mean:
name: Arithmetic-geometric mean
path: Arithmetic-geometric-mean
url: Arithmetic-geometric_mean
+Arithmetic-geometric mean/Calculate Pi:
+ name: Arithmetic-geometric mean/Calculate Pi
+ path: Arithmetic-geometric-mean-Calculate-Pi
+ url: Arithmetic-geometric_mean/Calculate_Pi
Arithmetic/Complex:
name: Arithmetic/Complex
path: Arithmetic-Complex
@@ -175,6 +215,14 @@ Balanced ternary:
name: Balanced ternary
path: Balanced-ternary
url: Balanced_ternary
+Benford's law:
+ name: Benford's law
+ path: Benfords-law
+ url: Benford's_law
+Bernoulli numbers:
+ name: Bernoulli numbers
+ path: Bernoulli-numbers
+ url: Bernoulli_numbers
Best shuffle:
name: Best shuffle
path: Best-shuffle
@@ -195,6 +243,10 @@ Bitcoin/address validation:
name: Bitcoin/address validation
path: Bitcoin-address-validation
url: Bitcoin/address_validation
+Bitcoin/public point to address:
+ name: Bitcoin/public point to address
+ path: Bitcoin-public-point-to-address
+ url: Bitcoin/public_point_to_address
Bitmap:
name: Bitmap
path: Bitmap
@@ -275,6 +327,10 @@ CRC-32:
name: CRC-32
path: CRC-32
url: CRC-32
+CSV data manipulation:
+ name: CSV data manipulation
+ path: CSV-data-manipulation
+ url: CSV_data_manipulation
CSV to HTML translation:
name: CSV to HTML translation
path: CSV-to-HTML-translation
@@ -287,10 +343,10 @@ Calendar:
name: Calendar
path: Calendar
url: Calendar
-Calendar - for "real" programmers:
- name: Calendar - for "real" programmers
- path: Calendar---for-real-programmers
- url: Calendar_-_for_"real"_programmers
+Calendar - for "REAL" programmers:
+ name: Calendar - for "REAL" programmers
+ path: Calendar---for-REAL-programmers
+ url: Calendar_-_for_"REAL"_programmers
Call a foreign-language function:
name: Call a foreign-language function
path: Call-a-foreign-language-function
@@ -319,10 +375,22 @@ Case-sensitivity of identifiers:
name: Case-sensitivity of identifiers
path: Case-sensitivity-of-identifiers
url: Case-sensitivity_of_identifiers
+Casting out nines:
+ name: Casting out nines
+ path: Casting-out-nines
+ url: Casting_out_nines
Catalan numbers:
name: Catalan numbers
path: Catalan-numbers
url: Catalan_numbers
+Catalan numbers/Pascal's triangle:
+ name: Catalan numbers/Pascal's triangle
+ path: Catalan-numbers-Pascals-triangle
+ url: Catalan_numbers/Pascal's_triangle
+Catamorphism:
+ name: Catamorphism
+ path: Catamorphism
+ url: Catamorphism
Catmull–Clark subdivision surface:
name: Catmull–Clark subdivision surface
path: Catmull-Clark-subdivision-surface
@@ -331,10 +399,6 @@ Character codes:
name: Character codes
path: Character-codes
url: Character_codes
-Character matching:
- name: Character matching
- path: Character-matching
- url: Character_matching
Chat server:
name: Chat server
path: Chat-server
@@ -351,10 +415,18 @@ Checkpoint synchronization:
name: Checkpoint synchronization
path: Checkpoint-synchronization
url: Checkpoint_synchronization
+Chinese remainder theorem:
+ name: Chinese remainder theorem
+ path: Chinese-remainder-theorem
+ url: Chinese_remainder_theorem
Cholesky decomposition:
name: Cholesky decomposition
path: Cholesky-decomposition
url: Cholesky_decomposition
+Circles of given radius through two points:
+ name: Circles of given radius through two points
+ path: Circles-of-given-radius-through-two-points
+ url: Circles_of_given_radius_through_two_points
Classes:
name: Classes
path: Classes
@@ -363,6 +435,10 @@ Closest-pair problem:
name: Closest-pair problem
path: Closest-pair-problem
url: Closest-pair_problem
+Closures/Value capture:
+ name: Closures/Value capture
+ path: Closures-Value-capture
+ url: Closures/Value_capture
Collections:
name: Collections
path: Collections
@@ -391,10 +467,18 @@ Combinations:
name: Combinations
path: Combinations
url: Combinations
+Combinations and permutations:
+ name: Combinations and permutations
+ path: Combinations-and-permutations
+ url: Combinations_and_permutations
Combinations with repetitions:
name: Combinations with repetitions
path: Combinations-with-repetitions
url: Combinations_with_repetitions
+Comma quibbling:
+ name: Comma quibbling
+ path: Comma-quibbling
+ url: Comma_quibbling
Command-line arguments:
name: Command-line arguments
path: Command-line-arguments
@@ -423,6 +507,10 @@ Conditional structures:
name: Conditional structures
path: Conditional-structures
url: Conditional_structures
+Conjugate transpose:
+ name: Conjugate transpose
+ path: Conjugate-transpose
+ url: Conjugate_transpose
Constrained genericity:
name: Constrained genericity
path: Constrained-genericity
@@ -448,6 +536,10 @@ Continued fraction/Arithmetic/G(matrix NG, Contined Fraction N1, Contined Fracti
Fraction N2)
path: Continued-fraction-Arithmetic-G-matrix-NG,-Contined-Fraction-N1,-Contined-Fraction-N2-
url: Continued_fraction/Arithmetic/G(matrix_NG,_Contined_Fraction_N1,_Contined_Fraction_N2)
+Convert decimal number to rational:
+ name: Convert decimal number to rational
+ path: Convert-decimal-number-to-rational
+ url: Convert_decimal_number_to_rational
Conway's Game of Life:
name: Conway's Game of Life
path: Conways-Game-of-Life
@@ -492,6 +584,10 @@ Create an object at a given address:
name: Create an object at a given address
path: Create-an-object-at-a-given-address
url: Create_an_object_at_a_given_address
+Currying:
+ name: Currying
+ path: Currying
+ url: Currying
Cut a rectangle:
name: Cut a rectangle
path: Cut-a-rectangle
@@ -560,6 +656,10 @@ Digital root:
name: Digital root
path: Digital-root
url: Digital_root
+Digital root/Multiplicative digital root:
+ name: Digital root/Multiplicative digital root
+ path: Digital-root-Multiplicative-digital-root
+ url: Digital_root/Multiplicative_digital_root
Dinesman's multiple-dwelling problem:
name: Dinesman's multiple-dwelling problem
path: Dinesmans-multiple-dwelling-problem
@@ -604,6 +704,10 @@ Dragon curve:
name: Dragon curve
path: Dragon-curve
url: Dragon_curve
+Draw a clock:
+ name: Draw a clock
+ path: Draw-a-clock
+ url: Draw_a_clock
Draw a cuboid:
name: Draw a cuboid
path: Draw-a-cuboid
@@ -724,6 +828,10 @@ Extend your language:
name: Extend your language
path: Extend-your-language
url: Extend_your_language
+Extensible prime generator:
+ name: Extensible prime generator
+ path: Extensible-prime-generator
+ url: Extensible_prime_generator
Extreme floating point values:
name: Extreme floating point values
path: Extreme-floating-point-values
@@ -752,10 +860,18 @@ Fibonacci sequence:
name: Fibonacci sequence
path: Fibonacci-sequence
url: Fibonacci_sequence
-File IO:
- name: File IO
- path: File-IO
- url: File_IO
+Fibonacci word:
+ name: Fibonacci word
+ path: Fibonacci-word
+ url: Fibonacci_word
+Fibonacci word/fractal:
+ name: Fibonacci word/fractal
+ path: Fibonacci-word-fractal
+ url: Fibonacci_word/fractal
+File input/output:
+ name: File input/output
+ path: File-input-output
+ url: File_input/output
File modification time:
name: File modification time
path: File-modification-time
@@ -780,6 +896,10 @@ Find limit of recursion:
name: Find limit of recursion
path: Find-limit-of-recursion
url: Find_limit_of_recursion
+Find the last Sunday of each month:
+ name: Find the last Sunday of each month
+ path: Find-the-last-Sunday-of-each-month
+ url: Find_the_last_Sunday_of_each_month
Find the missing permutation:
name: Find the missing permutation
path: Find-the-missing-permutation
@@ -808,6 +928,10 @@ Flatten a list:
name: Flatten a list
path: Flatten-a-list
url: Flatten_a_list
+Flipping bits game:
+ name: Flipping bits game
+ path: Flipping-bits-game
+ url: Flipping_bits_game
Flow-control structures:
name: Flow-control structures
path: Flow-control-structures
@@ -844,6 +968,10 @@ Fractal tree:
name: Fractal tree
path: Fractal-tree
url: Fractal_tree
+Fractran:
+ name: Fractran
+ path: Fractran
+ url: Fractran
Function composition:
name: Function composition
path: Function-composition
@@ -880,6 +1008,18 @@ Gamma function:
name: Gamma function
path: Gamma-function
url: Gamma_function
+Gaussian elimination:
+ name: Gaussian elimination
+ path: Gaussian-elimination
+ url: Gaussian_elimination
+Generate Chess960 starting position:
+ name: Generate Chess960 starting position
+ path: Generate-Chess960-starting-position
+ url: Generate_Chess960_starting_position
+Generate lower case ASCII alphabet:
+ name: Generate lower case ASCII alphabet
+ path: Generate-lower-case-ASCII-alphabet
+ url: Generate_lower_case_ASCII_alphabet
Generator/Exponential:
name: Generator/Exponential
path: Generator-Exponential
@@ -972,6 +1112,10 @@ Hash from two arrays:
name: Hash from two arrays
path: Hash-from-two-arrays
url: Hash_from_two_arrays
+Hash join:
+ name: Hash join
+ path: Hash-join
+ url: Hash_join
Haversine formula:
name: Haversine formula
path: Haversine-formula
@@ -984,6 +1128,10 @@ Hello world/Line printer:
name: Hello world/Line printer
path: Hello-world-Line-printer
url: Hello_world/Line_printer
+Hello world/Newbie:
+ name: Hello world/Newbie
+ path: Hello-world-Newbie
+ url: Hello_world/Newbie
Hello world/Newline omission:
name: Hello world/Newline omission
path: Hello-world-Newline-omission
@@ -1004,6 +1152,14 @@ Here document:
name: Here document
path: Here-document
url: Here_document
+Heronian triangles:
+ name: Heronian triangles
+ path: Heronian-triangles
+ url: Heronian_triangles
+Hickerson series of almost integers:
+ name: Hickerson series of almost integers
+ path: Hickerson-series-of-almost-integers
+ url: Hickerson_series_of_almost_integers
Higher-order functions:
name: Higher-order functions
path: Higher-order-functions
@@ -1060,6 +1216,10 @@ I before E except after C:
name: I before E except after C
path: I-before-E-except-after-C
url: I_before_E_except_after_C
+IBAN:
+ name: IBAN
+ path: IBAN
+ url: IBAN
Identity matrix:
name: Identity matrix
path: Identity-matrix
@@ -1100,6 +1260,10 @@ Integer comparison:
name: Integer comparison
path: Integer-comparison
url: Integer_comparison
+Integer overflow:
+ name: Integer overflow
+ path: Integer-overflow
+ url: Integer_overflow
Integer sequence:
name: Integer sequence
path: Integer-sequence
@@ -1120,6 +1284,10 @@ Inverted syntax:
name: Inverted syntax
path: Inverted-syntax
url: Inverted_syntax
+Iterated digits squaring:
+ name: Iterated digits squaring
+ path: Iterated-digits-squaring
+ url: Iterated_digits_squaring
JSON:
name: JSON
path: JSON
@@ -1140,6 +1308,10 @@ Jump anywhere:
name: Jump anywhere
path: Jump-anywhere
url: Jump_anywhere
+K-d tree:
+ name: K-d tree
+ path: K-d-tree
+ url: K-d_tree
K-means++ clustering:
name: K-means++ clustering
path: K-means++-clustering
@@ -1224,6 +1396,10 @@ Least common multiple:
name: Least common multiple
path: Least-common-multiple
url: Least_common_multiple
+Left factorials:
+ name: Left factorials
+ path: Left-factorials
+ url: Left_factorials
Letter frequency:
name: Letter frequency
path: Letter-frequency
@@ -1264,6 +1440,10 @@ Longest common subsequence:
name: Longest common subsequence
path: Longest-common-subsequence
url: Longest_common_subsequence
+Longest increasing subsequence:
+ name: Longest increasing subsequence
+ path: Longest-increasing-subsequence
+ url: Longest_increasing_subsequence
Longest string challenge:
name: Longest string challenge
path: Longest-string-challenge
@@ -1324,6 +1504,10 @@ Lucas-Lehmer test:
name: Lucas-Lehmer test
path: Lucas-Lehmer-test
url: Lucas-Lehmer_test
+Ludic numbers:
+ name: Ludic numbers
+ path: Ludic-numbers
+ url: Ludic_numbers
Luhn test of credit card numbers:
name: Luhn test of credit card numbers
path: Luhn-test-of-credit-card-numbers
@@ -1340,14 +1524,26 @@ MD5/Implementation:
name: MD5/Implementation
path: MD5-Implementation
url: MD5/Implementation
+Machine code:
+ name: Machine code
+ path: Machine-code
+ url: Machine_code
Mad Libs:
name: Mad Libs
path: Mad-Libs
url: Mad_Libs
+Magic squares of odd order:
+ name: Magic squares of odd order
+ path: Magic-squares-of-odd-order
+ url: Magic_squares_of_odd_order
Main step of GOST 28147-89:
name: Main step of GOST 28147-89
path: Main-step-of-GOST-28147-89
url: Main_step_of_GOST_28147-89
+Make directory path:
+ name: Make directory path
+ path: Make-directory-path
+ url: Make_directory_path
Man or boy test:
name: Man or boy test
path: Man-or-boy-test
@@ -1376,6 +1572,10 @@ Matrix-exponentiation operator:
name: Matrix-exponentiation operator
path: Matrix-exponentiation-operator
url: Matrix-exponentiation_operator
+Maximum triangle path sum:
+ name: Maximum triangle path sum
+ path: Maximum-triangle-path-sum
+ url: Maximum_triangle_path_sum
Maze generation:
name: Maze generation
path: Maze-generation
@@ -1448,6 +1648,10 @@ Mouse position:
name: Mouse position
path: Mouse-position
url: Mouse_position
+Move-to-front algorithm:
+ name: Move-to-front algorithm
+ path: Move-to-front-algorithm
+ url: Move-to-front_algorithm
Multifactorial:
name: Multifactorial
path: Multifactorial
@@ -1472,10 +1676,18 @@ Multisplit:
name: Multisplit
path: Multisplit
url: Multisplit
+Munching squares:
+ name: Munching squares
+ path: Munching-squares
+ url: Munching_squares
Mutual recursion:
name: Mutual recursion
path: Mutual-recursion
url: Mutual_recursion
+N'th:
+ name: N'th
+ path: Nth
+ url: N'th
N-queens problem:
name: N-queens problem
path: N-queens-problem
@@ -1488,6 +1700,14 @@ Narcissist:
name: Narcissist
path: Narcissist
url: Narcissist
+Narcissistic decimal number:
+ name: Narcissistic decimal number
+ path: Narcissistic-decimal-number
+ url: Narcissistic_decimal_number
+Natural sorting:
+ name: Natural sorting
+ path: Natural-sorting
+ url: Natural_sorting
Nautical bell:
name: Nautical bell
path: Nautical-bell
@@ -1544,6 +1764,14 @@ Object serialization:
name: Object serialization
path: Object-serialization
url: Object_serialization
+Odd word problem:
+ name: Odd word problem
+ path: Odd-word-problem
+ url: Odd_word_problem
+Old lady swallowed a fly:
+ name: Old lady swallowed a fly
+ path: Old-lady-swallowed-a-fly
+ url: Old_lady_swallowed_a_fly
One of n lines in a file:
name: One of n lines in a file
path: One-of-n-lines-in-a-file
@@ -1564,6 +1792,10 @@ Optional parameters:
name: Optional parameters
path: Optional-parameters
url: Optional_parameters
+Order disjoint list items:
+ name: Order disjoint list items
+ path: Order-disjoint-list-items
+ url: Order_disjoint_list_items
Order two numerical lists:
name: Order two numerical lists
path: Order-two-numerical-lists
@@ -1584,6 +1816,10 @@ Pangram checker:
name: Pangram checker
path: Pangram-checker
url: Pangram_checker
+Paraffins:
+ name: Paraffins
+ path: Paraffins
+ url: Paraffins
Parallel calculations:
name: Parallel calculations
path: Parallel-calculations
@@ -1596,6 +1832,10 @@ Parametrized SQL statement:
name: Parametrized SQL statement
path: Parametrized-SQL-statement
url: Parametrized_SQL_statement
+Parse an IP Address:
+ name: Parse an IP Address
+ path: Parse-an-IP-Address
+ url: Parse_an_IP_Address
Parsing/RPN calculator algorithm:
name: Parsing/RPN calculator algorithm
path: Parsing-RPN-calculator-algorithm
@@ -1624,10 +1864,30 @@ Pattern matching:
name: Pattern matching
path: Pattern-matching
url: Pattern_matching
+Penney's game:
+ name: Penney's game
+ path: Penneys-game
+ url: Penney's_game
Percentage difference between images:
name: Percentage difference between images
path: Percentage-difference-between-images
url: Percentage_difference_between_images
+Percolation/Bond percolation:
+ name: Percolation/Bond percolation
+ path: Percolation-Bond-percolation
+ url: Percolation/Bond_percolation
+Percolation/Mean cluster density:
+ name: Percolation/Mean cluster density
+ path: Percolation-Mean-cluster-density
+ url: Percolation/Mean_cluster_density
+Percolation/Mean run density:
+ name: Percolation/Mean run density
+ path: Percolation-Mean-run-density
+ url: Percolation/Mean_run_density
+Percolation/Site percolation:
+ name: Percolation/Site percolation
+ path: Percolation-Site-percolation
+ url: Percolation/Site_percolation
Perfect numbers:
name: Perfect numbers
path: Perfect-numbers
@@ -1648,6 +1908,18 @@ Permutations/Derangements:
name: Permutations/Derangements
path: Permutations-Derangements
url: Permutations/Derangements
+Permutations/Rank of a permutation:
+ name: Permutations/Rank of a permutation
+ path: Permutations-Rank-of-a-permutation
+ url: Permutations/Rank_of_a_permutation
+Pernicious numbers:
+ name: Pernicious numbers
+ path: Pernicious-numbers
+ url: Pernicious_numbers
+Phrase reversals:
+ name: Phrase reversals
+ path: Phrase-reversals
+ url: Phrase_reversals
Pi:
name: Pi
path: Pi
@@ -1764,6 +2036,10 @@ Queue/Usage:
name: Queue/Usage
path: Queue-Usage
url: Queue/Usage
+Quickselect algorithm:
+ name: Quickselect algorithm
+ path: Quickselect-algorithm
+ url: Quickselect_algorithm
Quine:
name: Quine
path: Quine
@@ -1776,6 +2052,10 @@ RIPEMD-160:
name: RIPEMD-160
path: RIPEMD-160
url: RIPEMD-160
+RSA code:
+ name: RSA code
+ path: RSA-code
+ url: RSA_code
Random number generator (device):
name: Random number generator (device)
path: Random-number-generator--device-
@@ -1796,6 +2076,10 @@ Range extraction:
name: Range extraction
path: Range-extraction
url: Range_extraction
+Ranking methods:
+ name: Ranking methods
+ path: Ranking-methods
+ url: Ranking_methods
Rate counter:
name: Rate counter
path: Rate-counter
@@ -1852,6 +2136,10 @@ Rendezvous:
name: Rendezvous
path: Rendezvous
url: Rendezvous
+Rep-string:
+ name: Rep-string
+ path: Rep-string
+ url: Rep-string
Repeat a string:
name: Repeat a string
path: Repeat-a-string
@@ -1872,6 +2160,10 @@ Reverse a string:
name: Reverse a string
path: Reverse-a-string
url: Reverse_a_string
+Reverse words in a string:
+ name: Reverse words in a string
+ path: Reverse-words-in-a-string
+ url: Reverse_words_in_a_string
Rock-paper-scissors:
name: Rock-paper-scissors
path: Rock-paper-scissors
@@ -1896,22 +2188,6 @@ Roots of unity:
name: Roots of unity
path: Roots-of-unity
url: Roots_of_unity
-Rosetta Code/Count examples:
- name: Rosetta Code/Count examples
- path: Rosetta-Code-Count-examples
- url: Rosetta_Code/Count_examples
-Rosetta Code/Find unimplemented tasks:
- name: Rosetta Code/Find unimplemented tasks
- path: Rosetta-Code-Find-unimplemented-tasks
- url: Rosetta_Code/Find_unimplemented_tasks
-Rosetta Code/Fix code tags:
- name: Rosetta Code/Fix code tags
- path: Rosetta-Code-Fix-code-tags
- url: Rosetta_Code/Fix_code_tags
-Rosetta Code/Rank languages by popularity:
- name: Rosetta Code/Rank languages by popularity
- path: Rosetta-Code-Rank-languages-by-popularity
- url: Rosetta_Code/Rank_languages_by_popularity
Rot-13:
name: Rot-13
path: Rot-13
@@ -1920,6 +2196,10 @@ Run-length encoding:
name: Run-length encoding
path: Run-length-encoding
url: Run-length_encoding
+Runge-Kutta method:
+ name: Runge-Kutta method
+ path: Runge-Kutta-method
+ url: Runge-Kutta_method
Runtime evaluation:
name: Runtime evaluation
path: Runtime-evaluation
@@ -1984,6 +2264,10 @@ Self-referential sequence:
name: Self-referential sequence
path: Self-referential-sequence
url: Self-referential_sequence
+Semiprime:
+ name: Semiprime
+ path: Semiprime
+ url: Semiprime
Semordnilap:
name: Semordnilap
path: Semordnilap
@@ -2000,6 +2284,10 @@ Sequence of non-squares:
name: Sequence of non-squares
path: Sequence-of-non-squares
url: Sequence_of_non-squares
+Sequence of primes by Trial Division:
+ name: Sequence of primes by Trial Division
+ path: Sequence-of-primes-by-Trial-Division
+ url: Sequence_of_primes_by_Trial_Division
Set:
name: Set
path: Set
@@ -2096,6 +2384,22 @@ Solve a Hidato puzzle:
name: Solve a Hidato puzzle
path: Solve-a-Hidato-puzzle
url: Solve_a_Hidato_puzzle
+Solve a Holy Knight's tour:
+ name: Solve a Holy Knight's tour
+ path: Solve-a-Holy-Knights-tour
+ url: Solve_a_Holy_Knight's_tour
+Solve a Hopido puzzle:
+ name: Solve a Hopido puzzle
+ path: Solve-a-Hopido-puzzle
+ url: Solve_a_Hopido_puzzle
+Solve a Numbrix puzzle:
+ name: Solve a Numbrix puzzle
+ path: Solve-a-Numbrix-puzzle
+ url: Solve_a_Numbrix_puzzle
+Solve the no connection puzzle:
+ name: Solve the no connection puzzle
+ path: Solve-the-no-connection-puzzle
+ url: Solve_the_no_connection_puzzle
Sort an array of composite structures:
name: Sort an array of composite structures
path: Sort-an-array-of-composite-structures
@@ -2196,6 +2500,10 @@ Soundex:
name: Soundex
path: Soundex
url: Soundex
+Sparkline in unicode:
+ name: Sparkline in unicode
+ path: Sparkline-in-unicode
+ url: Sparkline_in_unicode
Special characters:
name: Special characters
path: Special-characters
@@ -2236,10 +2544,26 @@ Start from a main routine:
name: Start from a main routine
path: Start-from-a-main-routine
url: Start_from_a_main_routine
+State name puzzle:
+ name: State name puzzle
+ path: State-name-puzzle
+ url: State_name_puzzle
+Statistics/Basic:
+ name: Statistics/Basic
+ path: Statistics-Basic
+ url: Statistics/Basic
Stem-and-leaf plot:
name: Stem-and-leaf plot
path: Stem-and-leaf-plot
url: Stem-and-leaf_plot
+Stern-Brocot sequence:
+ name: Stern-Brocot sequence
+ path: Stern-Brocot-sequence
+ url: Stern-Brocot_sequence
+String append:
+ name: String append
+ path: String-append
+ url: String_append
String case:
name: String case
path: String-case
@@ -2260,6 +2584,14 @@ String length:
name: String length
path: String-length
url: String_length
+String matching:
+ name: String matching
+ path: String-matching
+ url: String_matching
+String prepend:
+ name: String prepend
+ path: String-prepend
+ url: String_prepend
Strip a set of characters from a string:
name: Strip a set of characters from a string
path: Strip-a-set-of-characters-from-a-string
@@ -2304,6 +2636,10 @@ Sum digits of an integer:
name: Sum digits of an integer
path: Sum-digits-of-an-integer
url: Sum_digits_of_an_integer
+Sum multiples of 3 and 5:
+ name: Sum multiples of 3 and 5
+ path: Sum-multiples-of-3-and-5
+ url: Sum_multiples_of_3_and_5
Sum of a series:
name: Sum of a series
path: Sum-of-a-series
@@ -2408,6 +2744,18 @@ Text processing/Max licenses in use:
name: Text processing/Max licenses in use
path: Text-processing-Max-licenses-in-use
url: Text_processing/Max_licenses_in_use
+Textonyms:
+ name: Textonyms
+ path: Textonyms
+ url: Textonyms
+The ISAAC Cipher:
+ name: The ISAAC Cipher
+ path: The-ISAAC-Cipher
+ url: The_ISAAC_Cipher
+The Twelve Days of Christmas:
+ name: The Twelve Days of Christmas
+ path: The-Twelve-Days-of-Christmas
+ url: The_Twelve_Days_of_Christmas
Thiele's interpolation formula:
name: Thiele's interpolation formula
path: Thieles-interpolation-formula
@@ -2440,6 +2788,10 @@ Topswops:
name: Topswops
path: Topswops
url: Topswops
+Total circles area:
+ name: Total circles area
+ path: Total-circles-area
+ url: Total_circles_area
Towers of Hanoi:
name: Towers of Hanoi
path: Towers-of-Hanoi
@@ -2476,6 +2828,10 @@ URL encoding:
name: URL encoding
path: URL-encoding
url: URL_encoding
+Ulam spiral (for primes):
+ name: Ulam spiral (for primes)
+ path: Ulam-spiral--for-primes-
+ url: Ulam_spiral_(for_primes)
Unbias a random generator:
name: Unbias a random generator
path: Unbias-a-random-generator
@@ -2496,6 +2852,10 @@ Universal Turing machine:
name: Universal Turing machine
path: Universal-Turing-machine
url: Universal_Turing_machine
+Unix/ls:
+ name: Unix/ls
+ path: Unix-ls
+ url: Unix/ls
Update a configuration file:
name: Update a configuration file
path: Update-a-configuration-file
@@ -2568,6 +2928,10 @@ Visualize a tree:
name: Visualize a tree
path: Visualize-a-tree
url: Visualize_a_tree
+Vogel's approximation method:
+ name: Vogel's approximation method
+ path: Vogels-approximation-method
+ url: Vogel's_approximation_method
Voronoi diagram:
name: Voronoi diagram
path: Voronoi-diagram
@@ -2604,6 +2968,10 @@ Word wrap:
name: Word wrap
path: Word-wrap
url: Word_wrap
+World Cup group stage:
+ name: World Cup group stage
+ path: World-Cup-group-stage
+ url: World_Cup_group_stage
Write float arrays to a text file:
name: Write float arrays to a text file
path: Write-float-arrays-to-a-text-file
@@ -2660,6 +3028,14 @@ Zeckendorf number representation:
name: Zeckendorf number representation
path: Zeckendorf-number-representation
url: Zeckendorf_number_representation
+Zero to the zero power:
+ name: Zero to the zero power
+ path: Zero-to-the-zero-power
+ url: Zero_to_the_zero_power
+Zhang-Suen thinning algorithm:
+ name: Zhang-Suen thinning algorithm
+ path: Zhang-Suen-thinning-algorithm
+ url: Zhang-Suen_thinning_algorithm
Zig-zag matrix:
name: Zig-zag matrix
path: Zig-zag-matrix
diff --git a/Task/9-billion-names-of-God-the-integer/00DESCRIPTION b/Task/9-billion-names-of-God-the-integer/00DESCRIPTION
new file mode 100644
index 0000000000..650f143d7d
--- /dev/null
+++ b/Task/9-billion-names-of-God-the-integer/00DESCRIPTION
@@ -0,0 +1,28 @@
+This task is a variation of the [[wp:The Nine Billion Names of God#Plot_summary|short story by Arthur C. Clarke]].
+(Solvers should be aware of the consequences of completing this task.)
+In detail, to specify what is meant by a “name”:
+:The integer 1 has 1 name “1”.
+:The integer 2 has 2 names “1+1”, and “2”.
+:The integer 3 has 3 names “1+1+1”, “2+1”, and “3”.
+:The integer 4 has 5 names “1+1+1+1”, “2+1+1”, “2+2”, “3+1”, “4”.
+:The integer 5 has 7 names “1+1+1+1+1”, “2+1+1+1”, “2+2+1”, “3+1+1”, “3+2”, “4+1”, “5”.
+
+;Task
+The task is to display the first 25 rows of a number triangle which begins:
+
+ 1
+ 1 1
+ 1 1 1
+ 1 2 1 1
+ 1 2 2 1 1
+ 1 3 3 2 1 1
+
+
+Where row corresponds to integer , and each column in row from left to right corresponds to the number of names begining with .
+
+A function should return the sum of the -th row. Demonstrate this function by displaying: , , , and .
+Optionally note that the sum of the -th row is the [http://mathworld.wolfram.com/PartitionFunctionP.html integer partition function]. Demonstrate this is equivalent to by displaying: , , , and .
+
+;Extra credit
+
+If your environment is able, plot against for .
diff --git a/Task/9-billion-names-of-God-the-integer/AutoHotkey/9-billion-names-of-god-the-integer.ahk b/Task/9-billion-names-of-God-the-integer/AutoHotkey/9-billion-names-of-god-the-integer.ahk
new file mode 100644
index 0000000000..cba3fdcd19
--- /dev/null
+++ b/Task/9-billion-names-of-God-the-integer/AutoHotkey/9-billion-names-of-god-the-integer.ahk
@@ -0,0 +1,58 @@
+SetBatchLines -1
+
+InputBox, Enter_value, Enter the no. of lines sought
+array := []
+Loop, % 2*Enter_value - 1
+ Loop, % x := A_Index
+ y := A_Index, Array[x, y] := 1
+
+x := 3
+
+Loop
+{
+ base_r := x - 1
+ , x++
+ , y := 2
+ , index := x
+ , new := 1
+
+ Loop, % base_r - 1
+ {
+ array[x, new+1] := array[x-1, new] + array[base_r, y]
+ , x++
+ , new ++
+ , y++
+ }
+ x := index
+ If ( mod(x,2) = 0 )
+ {
+ to_run := floor(x - x/2)
+ , y2 := to_run + 1
+ }
+ Else
+ {
+ to_run := x - floor(x/2)
+ , y2 := to_run
+ }
+ Loop, % to_run
+ {
+ array[x, y2] := array[x-1, y2-1]
+ , y2++
+ If ( y2 = Enter_value + 1 ) && ( x = Enter_value )
+ {
+ Loop, % Enter_value
+ {
+ Loop, % x11 := A_Index
+ {
+ y11 := A_Index
+ , string2 .= " " array[x11, y11]
+ }
+ string2 .= "`n"
+ }
+ MsgBox % string2
+ ExitApp
+ }
+ }
+}
+
+~Esc::ExitApp
diff --git a/Task/9-billion-names-of-God-the-integer/C++/9-billion-names-of-god-the-integer-1.cpp b/Task/9-billion-names-of-God-the-integer/C++/9-billion-names-of-god-the-integer-1.cpp
new file mode 100644
index 0000000000..067a36adf2
--- /dev/null
+++ b/Task/9-billion-names-of-God-the-integer/C++/9-billion-names-of-god-the-integer-1.cpp
@@ -0,0 +1,8 @@
+// Calculate hypotenuse n of OTT assuming only nothingness, unity, and hyp[n-1] if n>1
+// Nigel Galloway, May 6th., 2013
+#include
+int N{123456};
+mpz_class hyp[N-3];
+const mpz_class G(const int n,const int g){return g>n?0:(g==1 or n-g<2)?1:hyp[n-g-2];};
+void G_hyp(const int n){for(int i=0;i
+#include
+int main(){
+ N=25;
+ for (int n=1; n0; g--) {
+ std::string t{hyp[g-1].get_str()};
+ t.append(6-t.size(),' ');
+ std::cout << t;
+ }
+ std::cout << "1 1" << std::endl;
+ }
diff --git a/Task/9-billion-names-of-God-the-integer/C++/9-billion-names-of-god-the-integer-4.cpp b/Task/9-billion-names-of-God-the-integer/C++/9-billion-names-of-god-the-integer-4.cpp
new file mode 100644
index 0000000000..8eba2fe225
--- /dev/null
+++ b/Task/9-billion-names-of-God-the-integer/C++/9-billion-names-of-god-the-integer-4.cpp
@@ -0,0 +1,11 @@
+#include
+int main(){
+ for (int n=1; n
+#include
+
+#define N 100000
+mpz_t p[N + 1];
+
+void calc(int n)
+{
+ mpz_init_set_ui(p[n], 0);
+
+ for (int k = 1; k <= n; k++) {
+ int d = n - k * (3 * k - 1) / 2;
+ if (d < 0) break;
+
+ if (k&1)mpz_add(p[n], p[n], p[d]);
+ else mpz_sub(p[n], p[n], p[d]);
+
+ d -= k;
+ if (d < 0) break;
+
+ if (k&1)mpz_add(p[n], p[n], p[d]);
+ else mpz_sub(p[n], p[n], p[d]);
+ }
+}
+
+int main(void)
+{
+ int idx[] = { 23, 123, 1234, 12345, 20000, 30000, 40000, 50000, N, 0 };
+ int at = 0;
+
+ mpz_init_set_ui(p[0], 1);
+
+ for (int i = 1; idx[at]; i++) {
+ calc(i);
+ if (i != idx[at]) continue;
+
+ gmp_printf("%2d:\t%Zd\n", i, p[i]);
+ at++;
+ }
+}
diff --git a/Task/9-billion-names-of-God-the-integer/Common-Lisp/9-billion-names-of-god-the-integer.lisp b/Task/9-billion-names-of-God-the-integer/Common-Lisp/9-billion-names-of-god-the-integer.lisp
new file mode 100644
index 0000000000..4ad42c901e
--- /dev/null
+++ b/Task/9-billion-names-of-God-the-integer/Common-Lisp/9-billion-names-of-god-the-integer.lisp
@@ -0,0 +1,15 @@
+(defun 9-billion-names (row column)
+ (cond ((<= row 0) 0)
+ ((<= column 0) 0)
+ ((< row column) 0)
+ ((equal row 1) 1)
+ (t (let ((addend (9-billion-names (1- row) (1- column)))
+ (augend (9-billion-names (- row column) column)))
+ (+ addend augend)))))
+
+(defun 9-billion-names-triangle (rows)
+ (loop for row from 1 to rows
+ collect (loop for column from 1 to row
+ collect (9-billion-names row column))))
+
+(9-billion-names-triangle 25)
diff --git a/Task/9-billion-names-of-God-the-integer/D/9-billion-names-of-god-the-integer-1.d b/Task/9-billion-names-of-God-the-integer/D/9-billion-names-of-god-the-integer-1.d
new file mode 100644
index 0000000000..2b8f641443
--- /dev/null
+++ b/Task/9-billion-names-of-God-the-integer/D/9-billion-names-of-god-the-integer-1.d
@@ -0,0 +1,27 @@
+import std.stdio, std.bigint, std.algorithm, std.range;
+
+auto cumu(in uint n) {
+ __gshared cache = [[1.BigInt]];
+ foreach (l; cache.length .. n + 1) {
+ auto r = [0.BigInt];
+ foreach (x; 1 .. l + 1)
+ r ~= r.back + cache[l - x][min(x, l - x)];
+ cache ~= r;
+ }
+ return cache[n];
+}
+
+auto row(in uint n) {
+ auto r = n.cumu;
+ return n.iota.map!(i => r[i + 1] - r[i]);
+}
+
+void main() {
+ writeln("Rows:");
+ foreach (x; 1 .. 11)
+ writefln("%2d: %s", x, x.row);
+
+ writeln("\nSums:");
+ foreach (x; [23, 123, 1234])
+ writeln(x, " ", x.cumu.back);
+}
diff --git a/Task/9-billion-names-of-God-the-integer/D/9-billion-names-of-god-the-integer-2.d b/Task/9-billion-names-of-God-the-integer/D/9-billion-names-of-god-the-integer-2.d
new file mode 100644
index 0000000000..7c131ac142
--- /dev/null
+++ b/Task/9-billion-names-of-God-the-integer/D/9-billion-names-of-god-the-integer-2.d
@@ -0,0 +1,51 @@
+import std.stdio, std.bigint, std.algorithm;
+
+struct Names {
+ BigInt[] p = [1.BigInt];
+
+ int opApply(int delegate(ref immutable int, ref BigInt) dg) {
+ int result;
+
+ foreach (immutable n; 1 .. int.max) {
+ p.assumeSafeAppend;
+ p ~= 0.BigInt;
+
+ foreach (immutable k; 1 .. n + 1) {
+ auto d = n - k * (3 * k - 1) / 2;
+ if (d < 0)
+ break;
+
+ if (k & 1)
+ p[n] += p[d];
+ else
+ p[n] -= p[d];
+
+ d -= k;
+ if (d < 0)
+ break;
+
+ if (k & 1)
+ p[n] += p[d];
+ else
+ p[n] -= p[d];
+ }
+
+ result = dg(n, p[n]);
+ if (result) break;
+ }
+
+ return result;
+ }
+}
+
+void main() {
+ immutable ns = [23:0, 123:0, 1234:0, 12345:0];
+ immutable maxNs = ns.byKey.reduce!max;
+
+ foreach (immutable i, p; Names()) {
+ if (i > maxNs)
+ break;
+ if (i in ns)
+ writefln("%6d: %s", i, p);
+ }
+}
diff --git a/Task/9-billion-names-of-God-the-integer/Erlang/9-billion-names-of-god-the-integer.erl b/Task/9-billion-names-of-God-the-integer/Erlang/9-billion-names-of-god-the-integer.erl
new file mode 100644
index 0000000000..1280760e09
--- /dev/null
+++ b/Task/9-billion-names-of-God-the-integer/Erlang/9-billion-names-of-god-the-integer.erl
@@ -0,0 +1,29 @@
+-module(god_the_integer).
+-export([example/0, names/1, print_pyramid/1]).
+
+example() ->
+ Names = names( 10 ),
+ print_pyramid( Names ).
+
+names( N ) ->
+ [names_row(X) || X <- lists:seq(1, N)].
+
+print_pyramid( Names ) ->
+ Width = erlang:length( lists:last(Names) ),
+ [print_pyramid_row(Width, X) || X <- Names].
+
+
+
+names_row( M ) ->
+ [p(M, X) || X <- lists:seq(1, M)].
+
+p( N, K ) when K > N -> 0;
+p( N, N ) -> 1;
+p( _N, 0 ) -> 0;
+p( N, K ) ->
+ p( N - 1, K - 1 ) + p( N - K, K ).
+
+print_pyramid_row( Width, Row ) ->
+ io:fwrite( "~*s", [Width - erlang:length(Row), " "] ),
+ [io:fwrite("~p ", [X]) || X <- Row],
+ io:nl().
diff --git a/Task/9-billion-names-of-God-the-integer/Frink/9-billion-names-of-god-the-integer.frink b/Task/9-billion-names-of-God-the-integer/Frink/9-billion-names-of-god-the-integer.frink
new file mode 100644
index 0000000000..bcaf96eb10
--- /dev/null
+++ b/Task/9-billion-names-of-God-the-integer/Frink/9-billion-names-of-god-the-integer.frink
@@ -0,0 +1,54 @@
+class PartitionCount
+{
+ // Array of elements
+ class var triangle = [[0],[0,1]]
+
+ // Array of cumulative sums in each row.
+ class var sumTriangle = [[1],[0,1]]
+
+ class calcRowsTo[toRow] :=
+ {
+ for row = length[triangle] to toRow
+ {
+ triangle@row = workrow = new array[[row+1],0]
+ sumTriangle@row = sumworkrow = new array[[row+1],0]
+ oversum = 0
+ for col = 1 to row
+ {
+ otherRow = row-col
+ sum = sumTriangle@otherRow@min[col,otherRow]
+ workrow@col = sum
+ oversum = oversum + sum
+ sumworkrow@col = oversum
+ }
+ }
+ }
+
+ class rowSum[row] :=
+ {
+ calcRowsTo[row]
+ return sumTriangle@row@row
+ }
+}
+
+PartitionCount.calcRowsTo[25]
+for row=1 to 25
+{
+ for col=1 to row
+ print[PartitionCount.triangle@row@col + " "]
+ println[]
+}
+
+// Test against Frink's built-in much faster partitionCount function that uses
+// Euler's pentagonal method for counting partitions.
+testRow[row] :=
+{
+ sum = PartitionCount.rowSum[row]
+ println["$row\t$sum\t" + (sum == partitionCount[row] ? "correct" : "incorrect")]
+}
+
+println[]
+testRow[23]
+testRow[123]
+testRow[1234]
+testRow[12345]
diff --git a/Task/9-billion-names-of-God-the-integer/Haskell/9-billion-names-of-god-the-integer-1.hs b/Task/9-billion-names-of-God-the-integer/Haskell/9-billion-names-of-god-the-integer-1.hs
new file mode 100644
index 0000000000..ddca799a9f
--- /dev/null
+++ b/Task/9-billion-names-of-God-the-integer/Haskell/9-billion-names-of-god-the-integer-1.hs
@@ -0,0 +1,21 @@
+import Data.List (mapAccumL)
+
+cumu :: [[Integer]]
+cumu = [1] : map (scanl (+) 0) rows
+
+rows :: [[Integer]]
+rows = snd $ mapAccumL f [] cumu where
+ f r row = (rr, new_row) where
+ new_row = map head rr
+ rr = map tailKeepOne (row:r)
+ tailKeepOne [x] = [x]
+ tailKeepOne (_:xs) = xs
+
+sums n = cumu !! n !! n
+--curiously, the following seems to be faster
+--sums = sum . (rows!!)
+
+main :: IO ()
+main = do
+ mapM_ print $ take 10 rows
+ mapM_ (print.sums) [23, 123, 1234, 12345]
diff --git a/Task/9-billion-names-of-God-the-integer/Haskell/9-billion-names-of-god-the-integer-2.hs b/Task/9-billion-names-of-God-the-integer/Haskell/9-billion-names-of-god-the-integer-2.hs
new file mode 100644
index 0000000000..0f9af6f747
--- /dev/null
+++ b/Task/9-billion-names-of-God-the-integer/Haskell/9-billion-names-of-god-the-integer-2.hs
@@ -0,0 +1,25 @@
+procedure main(A)
+ n := integer(!A) | 10
+ every r := 2 to (n+1) do write(right(r-1,2),": ",showList(row(r)))
+ write()
+ every r := 23 | 123 | 1234 | 12345 do write(r," ",cumu(r+1)[-1])
+end
+
+procedure cumu(n)
+ static cache
+ initial cache := [[1]]
+ every l := *cache to n do {
+ every (r := [0], x := !l) do put(r, r[-1]+cache[1+l-x][1+min(x,l-x)])
+ put(cache, r)
+ }
+ return cache[n]
+end
+
+procedure row(n)
+ return (r := cumu(n), [: (i := !(*r-1), r[i+1]-r[i]) :]) | r
+end
+
+procedure showList(A)
+ every (s := "[") ||:= (!A||", ")
+ return s[1:-2]||"]"
+end
diff --git a/Task/9-billion-names-of-God-the-integer/J/9-billion-names-of-god-the-integer-1.j b/Task/9-billion-names-of-God-the-integer/J/9-billion-names-of-god-the-integer-1.j
new file mode 100644
index 0000000000..7b4d94e1c5
--- /dev/null
+++ b/Task/9-billion-names-of-God-the-integer/J/9-billion-names-of-god-the-integer-1.j
@@ -0,0 +1 @@
+T=: 0:`1:`(($:&<:+ - $: ])`0:@.(0=]))@.(1+*@-) M. "0
diff --git a/Task/9-billion-names-of-God-the-integer/J/9-billion-names-of-god-the-integer-2.j b/Task/9-billion-names-of-God-the-integer/J/9-billion-names-of-god-the-integer-2.j
new file mode 100644
index 0000000000..43234b5e39
--- /dev/null
+++ b/Task/9-billion-names-of-God-the-integer/J/9-billion-names-of-god-the-integer-2.j
@@ -0,0 +1 @@
+rows=: <@(#~0<])@({: T ])\@i.
diff --git a/Task/9-billion-names-of-God-the-integer/J/9-billion-names-of-god-the-integer-3.j b/Task/9-billion-names-of-God-the-integer/J/9-billion-names-of-god-the-integer-3.j
new file mode 100644
index 0000000000..4975b99af3
--- /dev/null
+++ b/Task/9-billion-names-of-God-the-integer/J/9-billion-names-of-god-the-integer-3.j
@@ -0,0 +1,11 @@
+ ({.~1+1 i:~ '1'=])"1 ":> }.rows 1+10
+1
+1 1
+1 1 1
+1 2 1 1
+1 2 2 1 1
+1 3 3 2 1 1
+1 3 4 3 2 1 1
+1 4 5 5 3 2 1 1
+1 4 7 6 5 3 2 1 1
+1 5 8 9 7 5 3 2 1 1
diff --git a/Task/9-billion-names-of-God-the-integer/J/9-billion-names-of-god-the-integer-4.j b/Task/9-billion-names-of-God-the-integer/J/9-billion-names-of-god-the-integer-4.j
new file mode 100644
index 0000000000..b2c645086a
--- /dev/null
+++ b/Task/9-billion-names-of-God-the-integer/J/9-billion-names-of-god-the-integer-4.j
@@ -0,0 +1,11 @@
+rowSums=: 3 :0"0
+z=. (y+1){. 1x
+for_ks. <\1+i.y do.
+ n=.{: k=.>ks
+ r=.#c=. ({.~* i._1:)(n,0.5 _1.5) p. k
+ s=.#d=.({.~* i._1:)c-r{.k
+ 'v i'=.|: \:~(c,d),. r ,&({.&k) s
+ a=. +/(n{z),(_1^1x+2|i) * v{z
+ z=. a n}z
+end.
+)
diff --git a/Task/9-billion-names-of-God-the-integer/JavaScript/9-billion-names-of-god-the-integer.js b/Task/9-billion-names-of-God-the-integer/JavaScript/9-billion-names-of-god-the-integer.js
new file mode 100644
index 0000000000..c412aa5402
--- /dev/null
+++ b/Task/9-billion-names-of-God-the-integer/JavaScript/9-billion-names-of-god-the-integer.js
@@ -0,0 +1,57 @@
+(function () {
+ var cache = [
+ [1]
+ ];
+//this was never needed.
+ /* function PyRange(start, end, step) {
+ step = step || 1;
+ if (!end) {
+ end = start;
+ start = 0;
+ }
+ var arr = [];
+ for (var i = start; i < end; i += step) arr.push(i);
+ return arr;
+ }*/
+
+ function cumu(n) {
+ var /*ra = PyRange(cache.length, n + 1),*/ //Seems there is a better version for this
+ r, l, x, Aa, Mi;
+ // for (ll in ra) { too pythony
+ for (l=cache.length;l All]
diff --git a/Task/9-billion-names-of-God-the-integer/OCaml/9-billion-names-of-god-the-integer.ocaml b/Task/9-billion-names-of-God-the-integer/OCaml/9-billion-names-of-god-the-integer.ocaml
new file mode 100644
index 0000000000..a96b2c8c64
--- /dev/null
+++ b/Task/9-billion-names-of-God-the-integer/OCaml/9-billion-names-of-god-the-integer.ocaml
@@ -0,0 +1,78 @@
+let get, sum_unto =
+ let cache = ref [||]
+ let rec get i j =
+ if Array.length !cache < i then
+ cache :=
+ Array.init i begin fun i ->
+ try !cache.(i) with Invalid_argument _ ->
+ Array.make (i+1) (Num.num_of_int 0)
+ end;
+ if Num.(!cache.(i-1).(j-1) =/ num_of_int 0)
+ then !cache.(i-1).(j-1) <- sum_unto (i-j) j;
+ !cache.(i-1).(j-1)
+ and sum_unto i j =
+ let rec sum_unto sum i j =
+ match (i,j) with
+ |(0,0) -> (Num.num_of_int 1)
+ |(_,0) -> sum
+ |(i,j) when j > i -> sum_unto sum i i
+ |(i,j) -> sum_unto Num.(sum +/ (get i j)) i (j-1)
+ in
+ sum_unto (Num.num_of_int 0) i j
+ in
+ get, sum_unto
+
+let sum_of_row n = sum_unto n n
+
+let euler_recurrence =
+ let cache = ref [||] in
+ let rec recurrence = function
+ |n when n < 0 -> Num.num_of_int 0
+ |0 -> Num.num_of_int 1
+ |n ->
+ if n >= Array.length !cache then
+ cache :=
+ Array.init (n+1) (fun i ->
+ try !cache.(i) with Invalid_argument _ -> Num.num_of_int 0);
+ if Num.(!cache.(n) =/ num_of_int 0)
+ then begin
+ let rec summing sum = function
+ |0 -> sum
+ |k ->
+ let op = if k mod 2 = 0 then Num.sub_num else Num.add_num in
+ let sum = op sum (recurrence (n - k * (3*k - 1) / 2)) in
+ let sum = op sum (recurrence (n - k * (3*k + 1) / 2)) in
+ summing sum (k-1)
+ in
+ !cache.(n) <- summing (Num.num_of_int 0) n
+ end;
+ !cache.(n)
+ in
+ recurrence
+
+let print i_max =
+ for i=1 to i_max do
+ print_int (i+1); print_string ": ";
+ for j=1 to i do
+ print_string (Num.string_of_num (get i j));
+ print_char ' ';
+ done;
+ print_newline ();
+ done
+
+let () =
+ print 30;
+ print_newline ();
+ List.iter begin fun i ->
+ Printf.printf "%i: %s ?= %s\n" i
+ (Num.string_of_num (sum_of_row i))
+ (Num.string_of_num (euler_recurrence i));
+ flush stdout;
+ end
+ [23;123;1234;];
+ List.iter begin fun i ->
+ Printf.printf "%i: %s\n" i
+ (Num.string_of_num (euler_recurrence i));
+ flush stdout;
+ end
+ [23;123;1234;12345;123456]
diff --git a/Task/9-billion-names-of-God-the-integer/Perl-6/9-billion-names-of-god-the-integer.pl6 b/Task/9-billion-names-of-God-the-integer/Perl-6/9-billion-names-of-god-the-integer.pl6
new file mode 100644
index 0000000000..d3b8bd70f4
--- /dev/null
+++ b/Task/9-billion-names-of-God-the-integer/Perl-6/9-billion-names-of-god-the-integer.pl6
@@ -0,0 +1,29 @@
+my @todo = [1];
+my @sums = 0;
+sub nextrow($n) {
+ for +@todo .. $n -> $l {
+ @sums[$l] = 0;
+ print $l,"\r" if $l < $n;
+ my $r = [];
+ for reverse ^$l -> $x {
+ my @x := @todo[$x];
+ if @x {
+ $r.push: @sums[$x] += @x.shift;
+ }
+ else {
+ $r.push: @sums[$x];
+ }
+ }
+ @todo.push($r);
+ }
+ @todo[$n];
+}
+
+say "rows:";
+say .fmt('%2d'), ": ", nextrow($_)[] for 1..10;
+
+
+say "\nsums:";
+for 23, 123, 1234, 10000 {
+ say $_, "\t", [+] nextrow($_)[];
+}
diff --git a/Task/9-billion-names-of-God-the-integer/Perl/9-billion-names-of-god-the-integer-1.pl b/Task/9-billion-names-of-God-the-integer/Perl/9-billion-names-of-god-the-integer-1.pl
new file mode 100644
index 0000000000..7dd88ded99
--- /dev/null
+++ b/Task/9-billion-names-of-God-the-integer/Perl/9-billion-names-of-god-the-integer-1.pl
@@ -0,0 +1,12 @@
+use ntheory qw/:all/;
+
+sub triangle_row {
+ my($n,@row) = (shift);
+ # Tally by first element of the unrestricted integer partitions.
+ forpart { $row[ $_[0] - 1 ]++ } $n;
+ @row;
+}
+
+printf "%2d: %s\n", $_, join(" ",triangle_row($_)) for 1..25;
+print "\n";
+say "P($_) = ", partitions($_) for (23, 123, 1234, 12345);
diff --git a/Task/9-billion-names-of-God-the-integer/Perl/9-billion-names-of-god-the-integer-2.pl b/Task/9-billion-names-of-God-the-integer/Perl/9-billion-names-of-god-the-integer-2.pl
new file mode 100644
index 0000000000..614a2ccce5
--- /dev/null
+++ b/Task/9-billion-names-of-God-the-integer/Perl/9-billion-names-of-god-the-integer-2.pl
@@ -0,0 +1,40 @@
+use strict;
+use warnings;
+
+# Where perl6 uses arbitrary precision integers everywhere
+# that you don't tell it not to do so, perl5 will only use
+# them where you *do* tell it do so.
+use Math::BigInt;
+use constant zero => Math::BigInt->bzero;
+use constant one => Math::BigInt->bone;
+
+my @todo = [one];
+my @sums = (zero);
+sub nextrow {
+ my $n = shift;
+ for my $l (@todo .. $n) {
+ $sums[$l] = zero;
+ #print "$l\r" if $l < $n;
+ my @r;
+ for my $x (reverse 0 .. $l-1) {
+ my $todo = $todo[$x];
+ $sums[$x] += shift @$todo if @$todo;
+ push @r, $sums[$x];
+ }
+ push @todo, \@r;
+ }
+ @{ $todo[$n] };
+}
+
+print "rows:\n";
+for(1..25) {
+ printf("%2d: ", $_);
+ print join(' ', nextrow($_)), "\n";
+}
+print "\nsums:\n";
+for (23, 123, 1234, 12345) {
+ print $_, "." x (8 - length);
+ my $i = 0;
+ $i += $_ for nextrow($_);
+ print $i, "\n";
+}
diff --git a/Task/9-billion-names-of-God-the-integer/PicoLisp/9-billion-names-of-god-the-integer.l b/Task/9-billion-names-of-God-the-integer/PicoLisp/9-billion-names-of-god-the-integer.l
new file mode 100644
index 0000000000..46868b544f
--- /dev/null
+++ b/Task/9-billion-names-of-God-the-integer/PicoLisp/9-billion-names-of-god-the-integer.l
@@ -0,0 +1,52 @@
+(de row (N)
+ (let C '((1))
+ (do N
+ (push 'C (grow C)) )
+ (mapcon
+ '((L)
+ (when (cdr L)
+ (cons (- (cadr L) (car L))) ) )
+ (car C) ) ) )
+
+(de grow (Lst)
+ (let (L (length Lst) S 0)
+ (cons
+ 0
+ (mapcar
+ '((I X)
+ (inc 'S
+ (get I (inc (min X (- L X)))) ) )
+ Lst
+ (range 1 L) ) ) ) )
+
+(de sumr (N)
+ (let
+ (K 1
+ S 1
+ O (cons 1 (need N 0))
+ D
+ (make
+ (while
+ (<
+ (* K (dec (* 3 K)))
+ (* 2 N) )
+ (link (list (dec (* 2 K)) S))
+ (link (list K S))
+ (inc 'K)
+ (setq S (- S)) ) ) )
+ (for (Y O (cdr Y) (cdr Y))
+ (let Z Y
+ (for L D
+ (inc
+ (setq Z (cdr (nth Z (car L))))
+ (* (car Y) (cadr L)) ) ) ) )
+ (last O) ) )
+
+(for I 25
+ (println (row I)) )
+
+(bench
+ (for I '(23 123 1234 12345)
+ (println (sumr I)) ) )
+
+(bye)
diff --git a/Task/9-billion-names-of-God-the-integer/Python/9-billion-names-of-god-the-integer-1.py b/Task/9-billion-names-of-God-the-integer/Python/9-billion-names-of-god-the-integer-1.py
new file mode 100644
index 0000000000..9fff750582
--- /dev/null
+++ b/Task/9-billion-names-of-God-the-integer/Python/9-billion-names-of-god-the-integer-1.py
@@ -0,0 +1,19 @@
+cache = [[1]]
+def cumu(n):
+ for l in range(len(cache), n+1):
+ r = [0]
+ for x in range(1, l+1):
+ r.append(r[-1] + cache[l-x][min(x, l-x)])
+ cache.append(r)
+ return cache[n]
+
+def row(n):
+ r = cumu(n)
+ return [r[i+1] - r[i] for i in range(n)]
+
+print "rows:"
+for x in range(1, 11): print "%2d:"%x, row(x)
+
+
+print "\nsums:"
+for x in [23, 123, 1234, 12345]: print x, cumu(x)[-1]
diff --git a/Task/9-billion-names-of-God-the-integer/Python/9-billion-names-of-god-the-integer-2.py b/Task/9-billion-names-of-God-the-integer/Python/9-billion-names-of-god-the-integer-2.py
new file mode 100644
index 0000000000..af4209c290
--- /dev/null
+++ b/Task/9-billion-names-of-God-the-integer/Python/9-billion-names-of-god-the-integer-2.py
@@ -0,0 +1,18 @@
+def partitions(N):
+ diffs,k,s = [],1,1
+ while k * (3*k-1) < 2*N:
+ diffs.extend([(2*k - 1, s), (k, s)])
+ k,s = k+1,-s
+
+ out = [1] + [0]*N
+ for p in range(0, N+1):
+ x = out[p]
+ for (o,s) in diffs:
+ p += o
+ if p > N: break
+ out[p] += x*s
+
+ return out
+
+p = partitions(12345)
+for x in [23,123,1234,12345]: print x, p[x]
diff --git a/Task/9-billion-names-of-God-the-integer/Python/9-billion-names-of-god-the-integer-3.py b/Task/9-billion-names-of-God-the-integer/Python/9-billion-names-of-god-the-integer-3.py
new file mode 100644
index 0000000000..1a67ccd4ab
--- /dev/null
+++ b/Task/9-billion-names-of-God-the-integer/Python/9-billion-names-of-god-the-integer-3.py
@@ -0,0 +1,38 @@
+def partitions(n):
+ partitions.p.append(0)
+
+ for k in xrange(1, n + 1):
+ d = n - k * (3 * k - 1) // 2
+ if d < 0:
+ break
+
+ if k & 1:
+ partitions.p[n] += partitions.p[d]
+ else:
+ partitions.p[n] -= partitions.p[d]
+
+ d -= k
+ if d < 0:
+ break
+
+ if k & 1:
+ partitions.p[n] += partitions.p[d]
+ else:
+ partitions.p[n] -= partitions.p[d]
+
+ return partitions.p[-1]
+
+partitions.p = [1]
+
+def main():
+ ns = set([23, 123, 1234, 12345])
+ max_ns = max(ns)
+
+ for i in xrange(1, max_ns + 1):
+ if i > max_ns:
+ break
+ p = partitions(i)
+ if i in ns:
+ print "%6d: %s" % (i, p)
+
+main()
diff --git a/Task/9-billion-names-of-God-the-integer/README b/Task/9-billion-names-of-God-the-integer/README
new file mode 100644
index 0000000000..579a09b686
--- /dev/null
+++ b/Task/9-billion-names-of-God-the-integer/README
@@ -0,0 +1 @@
+Data source: http://rosettacode.org/wiki/9_billion_names_of_God_the_integer
diff --git a/Task/9-billion-names-of-God-the-integer/REXX/9-billion-names-of-god-the-integer.rexx b/Task/9-billion-names-of-God-the-integer/REXX/9-billion-names-of-god-the-integer.rexx
new file mode 100644
index 0000000000..b953b64d23
--- /dev/null
+++ b/Task/9-billion-names-of-God-the-integer/REXX/9-billion-names-of-god-the-integer.rexx
@@ -0,0 +1,52 @@
+/*REXX program generates a number triangle for partitions of a number.*/
+numeric digits 400 /*be able to handle large numbers*/
+parse arg N .; if N=='' then N=25 /*No input? Then use the default*/
+@.=0; @.0=1; aN=abs(N)
+if N==N+0 then say ' G('aN"):" G(N) /*just for well formed #s*/
+ say 'partitions('aN"):" partitions(aN) /*the easy way*/
+exit /*stick a fork in it, we're done.*/
+/*──────────────────────────────────G subroutine────────────────────────*/
+G: procedure; parse arg nn; !.=0; mx=1; aN=abs(nn); build=nn>0
+!.4.2=2; do j=1 for aN%2; !.j.j=1; end /*j*/ /*shortcuts.*/
+
+ do t=1 for 1+build; #.=1 /*gen triangle once or twice ∙∙∙*/
+ do r=1 for aN; #.2=r%2 /*#.2 is a shortcut calc.*/
+ do c=3 to r-2; #.c=gen#(r,c); end /*c*/
+ L=length(mx); p=0; aLine=
+ do cc=1 for r /*only sum last row of numbers. */
+ p=p+#.cc /*add last row of the triangle. */
+ if \build then iterate /*skip building the triangle? */
+ mx=max(mx,#.cc) /*used to build symmetric numbers*/
+ aLine=aLine right(#.cc,L) /*build a row of the triangle. */
+ end /*cc*/
+ if t==1 then iterate /*Is first time through? No show*/
+ L=length(mx); say centre(strip(aLine,'L'), 2+(aN-1)*(L+1))
+ end /*r*/ /* [↑] centre the row (triangle).*/
+ end /*t*/
+return p /*return with generated number. */
+/*──────────────────────────────────GEN# subroutine─────────────────────*/
+gen#: procedure expose !.; parse arg x,y /*obtain X and Y arguments.*/
+if !.x.y\==0 then return !.x.y /*was this # generated before? */
+if y>x%2 then do; nx=x+1-2*(y-x%2)-(x//2==0); ny=nx%2; !.x.y=!.nx.ny
+ return !.x.y /*return with the calculated num.*/
+ end /*[↑] right half of the triangle.*/
+$=1 /*[↓] left half of the triangle.*/
+ do q=2 to y; xy=x-y; if q>xy then iterate
+ if q==2 then $=$+xy%2
+ else if q==xy-1 then $=$+1
+ else $=$+gen#(xy,q)
+ end /*q*/
+!.x.y=$; return $ /*remember #, return with number.*/
+/*──────────────────────────────────PARTITIONS subroutine───────────────*/
+partitions: procedure expose @.; parse arg n
+if @.n\==0 then return @.n /*Already computed? Return it. */
+$=0 /*[↓] Euler's recursive function.*/
+ do k=1 for n; _=n-(k*3-1)*k%2; if _<0 then leave
+ if @._==0 then x=partitions(_); else x=@._
+ _=_-k; if _<0 then y=0
+ else if @._==0 then y=partitions(_)
+ else y=@._
+ if k//2 then $=$+x+y /*sum this way if K is odd ···*/
+ else $=$-x-y /* " " " " " " even ···*/
+ end /*k*/
+@.n=$; return $
diff --git a/Task/9-billion-names-of-God-the-integer/Racket/9-billion-names-of-god-the-integer.rkt b/Task/9-billion-names-of-God-the-integer/Racket/9-billion-names-of-god-the-integer.rkt
new file mode 100644
index 0000000000..1c9adfe4c0
--- /dev/null
+++ b/Task/9-billion-names-of-God-the-integer/Racket/9-billion-names-of-god-the-integer.rkt
@@ -0,0 +1,23 @@
+#lang racket
+
+(define (cdr-empty ls) (if (empty? ls) empty (cdr ls)))
+
+(define (names-of n)
+ (define (names-of-tail ans raws-rest n)
+ (if (zero? n)
+ ans
+ (names-of-tail (cons 1 (append (map +
+ (take ans (length raws-rest))
+ (map car raws-rest))
+ (drop ans (length raws-rest))))
+ (filter (compose not empty?)
+ (map cdr-empty (cons ans raws-rest)))
+ (sub1 n))))
+ (names-of-tail '() '() n))
+
+(define (G n) (foldl + 0 (names-of n)))
+
+(module+ main
+ (build-list 25 (compose names-of add1))
+ (newline)
+ (map G '(23 123 1234)))
diff --git a/Task/9-billion-names-of-God-the-integer/Ruby/9-billion-names-of-god-the-integer-1.rb b/Task/9-billion-names-of-God-the-integer/Ruby/9-billion-names-of-god-the-integer-1.rb
new file mode 100644
index 0000000000..5505c75695
--- /dev/null
+++ b/Task/9-billion-names-of-God-the-integer/Ruby/9-billion-names-of-god-the-integer-1.rb
@@ -0,0 +1,10 @@
+# Generate IPF triangle
+# Nigel_Galloway: May 1st., 2013.
+def g(n,g)
+ return 1 unless 1 < g and g < n-1
+ (2..g).inject(1){|res,q| res + (q > n-g ? 0 : g(n-g,q))}
+end
+
+(1..25).each {|n|
+ puts (1..n).map {|g| "%4s" % g(n,g)}.join
+}
diff --git a/Task/9-billion-names-of-God-the-integer/Ruby/9-billion-names-of-god-the-integer-2.rb b/Task/9-billion-names-of-God-the-integer/Ruby/9-billion-names-of-god-the-integer-2.rb
new file mode 100644
index 0000000000..bf22f880f4
--- /dev/null
+++ b/Task/9-billion-names-of-God-the-integer/Ruby/9-billion-names-of-god-the-integer-2.rb
@@ -0,0 +1,30 @@
+# Find large values of IPF
+# Nigel_Galloway: May 1st., 2013.
+N = 12345
+@ng = []
+@ipn1 = []
+@ipn2 = []
+def g(n,g)
+ t = n-g-2
+ return 1 if n<4 or t<0
+ return @ng[g-2][n-4] unless n/2 B) extends (A => B) {
+ private val cache = Map.empty[A, B]
+ def apply(x: A) = cache getOrElseUpdate (x, f(x))
+ }
+
+ // Naive, but memoized solution
+ lazy val namesStartingMemo : Memo[Tuple2[Int, Int], BigInt] = Memo {
+ case (1, 1) => 1
+ case (a, n) =>
+ if (a > n/2) namesStartingMemo(a - 1, n - 1)
+ else if (n < a) 0
+ else if (n == a) 1
+ else (1 to a).map(i => namesStartingMemo(i, n - a)).sum
+
+ }
+
+ def partitions(n: Int) = (1 to n).map(namesStartingMemo(_, n)).sum
+
+ // main method
+ def main(args: Array[String]): Unit = {
+ for (i <- 1 to 25) {
+ for (j <- 1 to i) {
+ print(namesStartingMemo(j, i));
+ print(' ');
+ }
+ println()
+ }
+ println(partitions(23))
+ println(partitions(123))
+ println(partitions(1234))
+ println(partitions(12345))
+ }
+}
diff --git a/Task/9-billion-names-of-God-the-integer/Scala/9-billion-names-of-god-the-integer-2.scala b/Task/9-billion-names-of-God-the-integer/Scala/9-billion-names-of-god-the-integer-2.scala
new file mode 100644
index 0000000000..0ce4eb0f89
--- /dev/null
+++ b/Task/9-billion-names-of-God-the-integer/Scala/9-billion-names-of-god-the-integer-2.scala
@@ -0,0 +1,49 @@
+val cache = new Array[BigInt](15000)
+cache(0) = 1
+val cacheNaive = scala.collection.mutable.Map[Tuple2[Int, Int], BigInt]()
+
+def p(n: Int, k: Int): BigInt = cacheNaive.getOrElseUpdate((n, k), (n, k) match {
+ case (n, 1) => 1
+ case (n, k) if n < k => 0
+ case (n, k) if n == k => 1
+ case (n, k) =>
+ if (k > n/2) p(n - 1, k - 1)
+ else p(n - 1, k - 1) + p(n - k, k)
+})
+
+def partitions(n: Int) = (1 to n).map(p(n, _)).sum
+
+def updateCache(n: Int, d: Int, k: Int) =
+ if ((k & 1) == 1) cache(n) = cache(n) + cache(d)
+ else cache(n) = cache(n) - cache(d)
+
+def quickPartitions(n: Int): BigInt = {
+ cache(n) = 0
+ for (k <- 1 to n) {
+ val d = n - k * (3 * k - 1) / 2
+ if (d >= 0) {
+ updateCache(n, d, k)
+
+ val e = d - k
+ if (e >= 0) {
+ updateCache(n, e, k)
+ }
+ }
+ }
+ cache(n)
+}
+
+for (i <- 1 to 23) {
+ for (j <- 1 to i) {
+ print(f"${p(i, j)}%4d")
+ }
+ println
+}
+println(partitions(23))
+
+for (i <- 1 until cache.length) {
+ quickPartitions(i)
+}
+println(quickPartitions(123))
+println(quickPartitions(1234))
+println(quickPartitions(12345))
diff --git a/Task/9-billion-names-of-God-the-integer/Tcl/9-billion-names-of-god-the-integer.tcl b/Task/9-billion-names-of-God-the-integer/Tcl/9-billion-names-of-god-the-integer.tcl
new file mode 100644
index 0000000000..8b53dde153
--- /dev/null
+++ b/Task/9-billion-names-of-God-the-integer/Tcl/9-billion-names-of-god-the-integer.tcl
@@ -0,0 +1,30 @@
+set cache 1
+proc cumu {n} {
+ global cache
+ for {set l [llength $cache]} {$l <= $n} {incr l} {
+ set r 0
+ for {set x 1; set y [expr {$l-1}]} {$y >= 0} {incr x; incr y -1} {
+ lappend r [expr {
+ [lindex $r end] + [lindex $cache $y [expr {min($x, $y)}]]
+ }]
+ }
+ lappend cache $r
+ }
+ return [lindex $cache $n]
+}
+proc row {n} {
+ set r [cumu $n]
+ for {set i 0; set j 1} {$j < [llength $r]} {incr i; incr j} {
+ lappend result [expr {[lindex $r $j] - [lindex $r $i]}]
+ }
+ return $result
+}
+
+puts "rows:"
+foreach x {1 2 3 4 5 6 7 8 9 10} {
+ puts "${x}: \[[join [row $x] {, }]\]"
+}
+puts "\nsums:"
+foreach x {23 123 1234 12345} {
+ puts "${x}: [lindex [cumu $x] end]"
+}
diff --git a/Task/ABC-Problem/00DESCRIPTION b/Task/ABC-Problem/00DESCRIPTION
new file mode 100644
index 0000000000..13624d5561
--- /dev/null
+++ b/Task/ABC-Problem/00DESCRIPTION
@@ -0,0 +1,48 @@
+You are given a collection of ABC blocks. Just like the ones you had when you were a kid. There are twenty blocks with two letters on each block. You are guaranteed to have a complete alphabet amongst all sides of the blocks. The sample blocks are:
+
+:((B O)
+: (X K)
+: (D Q)
+: (C P)
+: (N A)
+: (G T)
+: (R E)
+: (T G)
+: (Q D)
+: (F S)
+: (J W)
+: (H U)
+: (V I)
+: (A N)
+: (O B)
+: (E R)
+: (F S)
+: (L Y)
+: (P C)
+: (Z M))
+
+The goal of this task is to write a function that takes a string and can determine whether you can spell the word with the given collection of blocks.
+The rules are simple:
+
+#Once a letter on a block is used that block cannot be used again
+#The function should be case-insensitive
+# Show your output on this page for the following words:
+
+;Example:
+
+
+ >>> can_make_word("A")
+ True
+ >>> can_make_word("BARK")
+ True
+ >>> can_make_word("BOOK")
+ False
+ >>> can_make_word("TREAT")
+ True
+ >>> can_make_word("COMMON")
+ False
+ >>> can_make_word("SQUAD")
+ True
+ >>> can_make_word("CONFUSE")
+ True
+
diff --git a/Task/ABC-Problem/Ada/abc-problem.ada b/Task/ABC-Problem/Ada/abc-problem.ada
new file mode 100644
index 0000000000..28ac345566
--- /dev/null
+++ b/Task/ABC-Problem/Ada/abc-problem.ada
@@ -0,0 +1,78 @@
+with Ada.Characters.Handling;
+use Ada.Characters.Handling;
+
+
+package Abc is
+ type Block_Faces is array(1..2) of Character;
+ type Block_List is array(positive range <>) of Block_Faces;
+ function Can_Make_Word(W: String; Blocks: Block_List) return Boolean;
+end Abc;
+
+
+package body Abc is
+
+function Can_Make_Word(W: String; Blocks: Block_List) return Boolean is
+ Used : array(Blocks'Range) of Boolean := (Others => False);
+ subtype wIndex is Integer range W'First..W'Last;
+ wPos : wIndex;
+begin
+ if W'Length = 0 then
+ return True;
+ end if;
+ wPos := W'First;
+ while True loop
+ declare
+ C : Character := To_Upper(W(wPos));
+ X : constant wIndex := wPos;
+ begin
+ for I in Blocks'Range loop
+ if (not Used(I)) then
+ if C = To_Upper(Blocks(I)(1)) or C = To_Upper(Blocks(I)(2)) then
+ Used(I) := True;
+ if wPos = W'Last then
+ return True;
+ end if;
+ wPos := wIndex'Succ(wPos);
+ exit;
+ end if;
+ end if;
+ end loop;
+ if X = wPos then
+ return False;
+ end if;
+ end;
+ end loop;
+ return False;
+end Can_Make_Word;
+
+end Abc;
+
+with Ada.Text_IO, Ada.Strings.Unbounded, Abc;
+use Ada.Text_IO, Ada.Strings.Unbounded, Abc;
+
+procedure Abc_Problem is
+ Blocks : Block_List := (
+ ('B','O'), ('X','K'), ('D','Q'), ('C','P')
+ , ('N','A'), ('G','T'), ('R','E'), ('T','G')
+ , ('Q','D'), ('F','S'), ('J','W'), ('H','U')
+ , ('V','I'), ('A','N'), ('O','B'), ('E','R')
+ , ('F','S'), ('L','Y'), ('P','C'), ('Z','M')
+ );
+ function "+" (S : String) return Unbounded_String renames To_Unbounded_String;
+ words : array(positive range <>) of Unbounded_String := (
+ +"A"
+ , +"BARK"
+ , +"BOOK"
+ , +"TREAT"
+ , +"COMMON"
+ , +"SQUAD"
+ , +"CONFUSE"
+ -- Border cases:
+ -- , +"CONFUSE2"
+ -- , +""
+ );
+begin
+ for I in words'Range loop
+ Put_Line ( To_String(words(I)) & ": " & Boolean'Image(Can_Make_Word(To_String(words(I)),Blocks)) );
+ end loop;
+end Abc_Problem;
diff --git a/Task/ABC-Problem/AutoHotkey/abc-problem-1.ahk b/Task/ABC-Problem/AutoHotkey/abc-problem-1.ahk
new file mode 100644
index 0000000000..448f692c2b
--- /dev/null
+++ b/Task/ABC-Problem/AutoHotkey/abc-problem-1.ahk
@@ -0,0 +1,24 @@
+isWordPossible(blocks, word){
+ o := {}
+ loop, parse, blocks, `n, `r
+ o.Insert(A_LoopField)
+ loop, parse, word
+ if !(r := isWordPossible_contains(o, A_LoopField, word))
+ return 0
+ return 1
+}
+isWordPossible_contains(byref o, letter, word){
+ loop 2 {
+ for k,v in o
+ if Instr(v,letter)
+ {
+ StringReplace, op, v,% letter
+ if RegExMatch(op, "[" word "]")
+ sap := k
+ else added := 1 , sap := k
+ if added
+ return "1" o.remove(sap)
+ }
+ added := 1
+ }
+}
diff --git a/Task/ABC-Problem/AutoHotkey/abc-problem-2.ahk b/Task/ABC-Problem/AutoHotkey/abc-problem-2.ahk
new file mode 100644
index 0000000000..dff93522ac
--- /dev/null
+++ b/Task/ABC-Problem/AutoHotkey/abc-problem-2.ahk
@@ -0,0 +1,38 @@
+blocks := "
+(
+BO
+XK
+DQ
+CP
+NA
+GT
+RE
+TG
+QD
+FS
+JW
+HU
+VI
+AN
+OB
+ER
+FS
+LY
+PC
+ZM
+)"
+
+wordlist := "
+(
+A
+BARK
+BOOK
+TREAT
+COMMON
+SQUAD
+CONFUSE
+)"
+
+loop, parse, wordlist, `n
+ out .= A_LoopField " - " isWordPossible(blocks, A_LoopField) "`n"
+msgbox % out
diff --git a/Task/ABC-Problem/BBC-BASIC/abc-problem.bbc b/Task/ABC-Problem/BBC-BASIC/abc-problem.bbc
new file mode 100644
index 0000000000..cea8d9fb56
--- /dev/null
+++ b/Task/ABC-Problem/BBC-BASIC/abc-problem.bbc
@@ -0,0 +1,22 @@
+ BLOCKS$="BOXKDQCPNAGTRETGQDFSJWHUVIANOBERFSLYPCZM"
+ PROCcan_make_word("A")
+ PROCcan_make_word("BARK")
+ PROCcan_make_word("BOOK")
+ PROCcan_make_word("TREAT")
+ PROCcan_make_word("COMMON")
+ PROCcan_make_word("SQUAD")
+ PROCcan_make_word("Confuse")
+ END
+
+ DEF PROCcan_make_word(word$)
+ LOCAL b$,p%
+ b$=BLOCKS$
+ PRINT word$ " -> ";
+ p%=INSTR(b$,CHR$(ASCword$ AND &DF))
+ WHILE p%>0 AND word$>""
+ MID$(b$,p%-1+(p% MOD 2),2)=".."
+ word$=MID$(word$,2)
+ p%=INSTR(b$,CHR$(ASCword$ AND &DF))
+ ENDWHILE
+ IF word$>"" PRINT "False" ELSE PRINT "True"
+ ENDPROC
diff --git a/Task/ABC-Problem/Batch-File/abc-problem.bat b/Task/ABC-Problem/Batch-File/abc-problem.bat
new file mode 100644
index 0000000000..c7420baaec
--- /dev/null
+++ b/Task/ABC-Problem/Batch-File/abc-problem.bat
@@ -0,0 +1,62 @@
+@echo off
+::abc.bat
+::
+::Batch file to evaluate if a given string can be represented with a set of
+::20 2-faced blocks.
+::
+
+::Check if a string was provided
+if "%1"=="" goto ERROR
+
+::Define blocks. Separate blocks by ':', and terminat with '::'
+set "FACES=BO:XK:DQ:CP:NA:GT:RE:TG:QD:FS:JW:HU:VI:AN:OB:ER:FS:LY:PC:ZM::"
+set INPUT=%1
+set "COUNTER=0"
+
+::The main loop steps through the input string, checking if an available
+::block exists for each character
+:LOOP_MAIN
+
+ ::Get character, increase counter, and test if there are still characters
+ call set "char=%%INPUT:~%COUNTER%,1%%"
+ set /a "COUNTER+=1"
+ if "%CHAR%"=="" goto LOOP_MAIN_END
+
+ set "OFFSET=0"
+ :LOOP_2
+
+ ::Read in two characters (one block)
+ call set "BLOCK=%%FACES%:~%OFFSET%,2%%"
+
+ ::Test if the all blocks were checked. If so, no match was found
+ if "%BLOCK%"==":" goto FAIL
+
+ ::Test if current input string character is in the current block
+ if /i "%BLOCK:~0,1%"=="%CHAR%" goto FOUND
+ if /i "%BLOCK:~1,1%"=="%CHAR%" goto FOUND
+
+ ::Increase offset to point to the next block
+ set /a "OFFSET+=3"
+
+ goto LOOP_2
+ :LOOP_2_END
+
+ ::If found, blank out the block used
+ :FOUND
+ call set "FACES=%%FACES:%BLOCK%:= :%%"
+
+goto LOOP_MAIN
+:LOOP_MAIN_END
+
+echo %0: It is possible to write the '%INPUT%' with my blocks.
+goto END
+
+:FAIL
+echo %0: It is NOT possible to write the '%INPUT%' with my blocks.
+goto END
+
+:ERROR
+echo %0: Please enter a string to evaluate
+echo.
+
+:END
diff --git a/Task/ABC-Problem/Bracmat/abc-problem.bracmat b/Task/ABC-Problem/Bracmat/abc-problem.bracmat
new file mode 100644
index 0000000000..ae1666bdc7
--- /dev/null
+++ b/Task/ABC-Problem/Bracmat/abc-problem.bracmat
@@ -0,0 +1,48 @@
+(
+ ( can-make-word
+ = ABC blocks
+ . (B O)
+ + (X K)
+ + (D Q)
+ + (C P)
+ + (N A)
+ + (G T)
+ + (R E)
+ + (T G)
+ + (Q D)
+ + (F S)
+ + (J W)
+ + (H U)
+ + (V I)
+ + (A N)
+ + (O B)
+ + (E R)
+ + (F S)
+ + (L Y)
+ + (P C)
+ + (Z M)
+ : ?blocks
+ & ( ABC
+ = letter blocks A Z
+ . !arg:(.?)
+ | !arg:(@(?:%?letter ?arg).?blocks)
+ & !blocks
+ : ?
+ + ?*(? !letter ?:?block)
+ + (?&ABC$(!arg.!blocks+-1*!block))
+ )
+ & out
+ $ ( !arg
+ ( ABC$(upp$!arg.!blocks)&yes
+ | no
+ )
+ )
+ )
+& can-make-word'A
+& can-make-word'BARK
+& can-make-word'BOOK
+& can-make-word'TREAT
+& can-make-word'COMMON
+& can-make-word'SQUAD
+& can-make-word'CONFUSE
+);
diff --git a/Task/ABC-Problem/C++/abc-problem.cpp b/Task/ABC-Problem/C++/abc-problem.cpp
new file mode 100644
index 0000000000..986445dbc9
--- /dev/null
+++ b/Task/ABC-Problem/C++/abc-problem.cpp
@@ -0,0 +1,37 @@
+#include
+#include
+#include
+#include
+#include
+
+
+typedef std::pair item_t;
+typedef std::vector list_t;
+
+bool can_make_word(const std::string& w, const list_t& vals) {
+ std::set used;
+ while (used.size() < w.size()) {
+ const char c = toupper(w[used.size()]);
+ uint32_t x = used.size();
+ for (uint32_t i = 0, ii = vals.size(); i < ii; ++i) {
+ if (used.find(i) == used.end()) {
+ if (toupper(vals[i].first) == c || toupper(vals[i].second) == c) {
+ used.insert(i);
+ break;
+ }
+ }
+ }
+ if (x == used.size()) break;
+ }
+ return used.size() == w.size();
+}
+
+
+int main() {
+ list_t vals{ {'B','O'}, {'X','K'}, {'D','Q'}, {'C','P'}, {'N','A'}, {'G','T'}, {'R','E'}, {'T','G'}, {'Q','D'}, {'F','S'}, {'J','W'}, {'H','U'}, {'V','I'}, {'A','N'}, {'O','B'}, {'E','R'}, {'F','S'}, {'L','Y'}, {'P','C'}, {'Z','M'} };
+ std::vector words{"A","BARK","BOOK","TREAT","COMMON","SQUAD","CONFUSE"};
+ for (const std::string& w : words) {
+ std::cout << w << ": " << std::boolalpha << can_make_word(w,vals) << ".\n";
+ }
+
+}
diff --git a/Task/ABC-Problem/C-sharp/abc-problem.cs b/Task/ABC-Problem/C-sharp/abc-problem.cs
new file mode 100644
index 0000000000..3b74191a56
--- /dev/null
+++ b/Task/ABC-Problem/C-sharp/abc-problem.cs
@@ -0,0 +1,82 @@
+using System.Collections.Generic;
+using System.Linq;
+
+void Main()
+{
+ List blocks =
+ new List() { "bo", "xk", "dq", "cp", "na", "gt", "re", "tg", "qd", "fs",
+ "jw", "hu", "vi", "an", "ob", "er", "fs", "ly", "pc", "zm" };
+ List words = new List() {
+ "A", "BARK", "BOOK", "TREAT", "COMMON", "SQUAD", "CONFUSE"};
+
+ var solver = new ABC(blocks);
+
+ foreach( var word in words)
+ {
+ Console.WriteLine("{0} :{1}", word, solver.CanMake(word));
+ }
+}
+
+class ABC
+{
+ readonly Dictionary> _blockDict = new Dictionary>();
+ bool[] _used;
+ int _nextBlock;
+
+ readonly List _blocks;
+
+ private void AddBlockChar(char c)
+ {
+ if (!_blockDict.ContainsKey(c))
+ {
+ _blockDict[c] = new List();
+ }
+ _blockDict[c].Add(_nextBlock);
+ }
+
+ private void AddBlock(string block)
+ {
+ AddBlockChar(block[0]);
+ AddBlockChar(block[1]);
+ _nextBlock++;
+ }
+
+ public ABC(List blocks)
+ {
+ _blocks = blocks;
+ foreach (var block in blocks)
+ {
+ AddBlock(block);
+ }
+ }
+
+ public bool CanMake(string word)
+ {
+ word = word.ToLower();
+ if (word.Length > _blockDict.Count)
+ {
+ return false;
+ }
+ _used = new bool[_blocks.Count];
+ return TryMake(word);
+ }
+
+ public bool TryMake(string word)
+ {
+ if (word == string.Empty)
+ {
+ return true;
+ }
+ var blocks = _blockDict[word[0]].Where(b => !_used[b]);
+ foreach (var block in blocks)
+ {
+ _used[block] = true;
+ if (TryMake(word.Substring(1)))
+ {
+ return true;
+ }
+ _used[block] = false;
+ }
+ return false;
+ }
+}
diff --git a/Task/ABC-Problem/C/abc-problem.c b/Task/ABC-Problem/C/abc-problem.c
new file mode 100644
index 0000000000..0a798cd2c4
--- /dev/null
+++ b/Task/ABC-Problem/C/abc-problem.c
@@ -0,0 +1,41 @@
+#include
+#include
+
+int can_make_words(char **b, char *word)
+{
+ int i, ret = 0, c = toupper(*word);
+
+#define SWAP(a, b) if (a != b) { char * tmp = a; a = b; b = tmp; }
+
+ if (!c) return 1;
+ if (!b[0]) return 0;
+
+ for (i = 0; b[i] && !ret; i++) {
+ if (b[i][0] != c && b[i][1] != c) continue;
+ SWAP(b[i], b[0]);
+ ret = can_make_words(b + 1, word + 1);
+ SWAP(b[i], b[0]);
+ }
+
+ return ret;
+}
+
+int main(void)
+{
+ char* blocks[] = {
+ "BO", "XK", "DQ", "CP", "NA",
+ "GT", "RE", "TG", "QD", "FS",
+ "JW", "HU", "VI", "AN", "OB",
+ "ER", "FS", "LY", "PC", "ZM",
+ 0 };
+
+ char *words[] = {
+ "", "A", "BARK", "BOOK", "TREAT", "COMMON", "SQUAD", "Confuse", 0
+ };
+
+ char **w;
+ for (w = words; *w; w++)
+ printf("%s\t%d\n", *w, can_make_words(blocks, *w));
+
+ return 0;
+}
diff --git a/Task/ABC-Problem/Clojure/abc-problem.clj b/Task/ABC-Problem/Clojure/abc-problem.clj
new file mode 100644
index 0000000000..00b43386e8
--- /dev/null
+++ b/Task/ABC-Problem/Clojure/abc-problem.clj
@@ -0,0 +1,21 @@
+(def blocks
+ (-> "BO XK DQ CP NA GT RE TG QD FS JW HU VI AN OB ER FS LY PC ZM" (.split " ") vec))
+
+(defn omit
+ "return bs with (one instance of) b omitted"
+ [bs b]
+ (let [[before after] (split-with #(not= b %) bs)]
+ (concat before (rest after))))
+
+(defn abc
+ "return lazy sequence of solutions (i.e. block lists)"
+ [blocks [c & cs]]
+ (if-some c
+ (for [b blocks :when (some #(= c %) b)
+ bs (abc (omit blocks b) cs)]
+ (cons b bs))
+ [[]]))
+
+
+(doseq [word ["A" "BARK" "Book" "treat" "COMMON" "SQUAD" "CONFUSE"]]
+ (->> word .toUpperCase (abc blocks) first (printf "%s: %b\n" word)))
diff --git a/Task/ABC-Problem/CoffeeScript/abc-problem.coffee b/Task/ABC-Problem/CoffeeScript/abc-problem.coffee
new file mode 100644
index 0000000000..2bc54c4925
--- /dev/null
+++ b/Task/ABC-Problem/CoffeeScript/abc-problem.coffee
@@ -0,0 +1,15 @@
+canMakeWord = (word="") ->
+ # Create a shallow clone of the master blockList
+ blocks = blockList.slice 0
+ # Check if blocks contains letter
+ checkBlocks = (letter) ->
+ # Loop through every remaining block
+ for block, idx in blocks
+ # If letter is in block, blocks.splice will return an array, which will evaluate as true
+ return blocks.splice idx, 1 if letter.toUpperCase() in block
+ return false
+ # Return true if there are no falsy values
+ return false not in (checkBlocks letter for letter in word)
+
+# Expect true, true, false, true, false, true, true, true
+console.log (canMakeWord word for word in ["A", "BARK", "BOOK", "TREAT", "COMMON", "squad", "CONFUSE", "STORM"])
diff --git a/Task/ABC-Problem/Common-Lisp/abc-problem.lisp b/Task/ABC-Problem/Common-Lisp/abc-problem.lisp
new file mode 100644
index 0000000000..34642b4385
--- /dev/null
+++ b/Task/ABC-Problem/Common-Lisp/abc-problem.lisp
@@ -0,0 +1,14 @@
+(defun word-possible-p (word blocks)
+ (cond
+ ((= (length word) 0) t)
+ ((null blocks) nil)
+ (t (let*
+ ((c (aref word 0))
+ (bs (remove-if-not #'(lambda (b)
+ (find c b :test #'char-equal))
+ blocks)))
+ (some #'identity
+ (loop for b in bs
+ collect (word-possible-p
+ (subseq word 1)
+ (remove b blocks))))))))
diff --git a/Task/ABC-Problem/D/abc-problem-1.d b/Task/ABC-Problem/D/abc-problem-1.d
new file mode 100644
index 0000000000..84eaeef371
--- /dev/null
+++ b/Task/ABC-Problem/D/abc-problem-1.d
@@ -0,0 +1,22 @@
+import std.stdio, std.algorithm, std.string;
+
+bool canMakeWord(in string word, in string[] blocks) pure /*nothrow*/ @safe {
+ auto bs = blocks.dup;
+ outer: foreach (immutable ch; word.toUpper) {
+ foreach (immutable block; bs)
+ if (block.canFind(ch)) {
+ bs = bs.remove(bs.countUntil(block));
+ continue outer;
+ }
+ return false;
+ }
+ return true;
+}
+
+void main() @safe {
+ immutable blocks = "BO XK DQ CP NA GT RE TG QD FS JW HU VI
+ AN OB ER FS LY PC ZM".split;
+
+ foreach (word; "" ~ "A BARK BoOK TrEAT COmMoN SQUAD conFUsE".split)
+ writefln(`"%s" %s`, word, canMakeWord(word, blocks));
+}
diff --git a/Task/ABC-Problem/D/abc-problem-2.d b/Task/ABC-Problem/D/abc-problem-2.d
new file mode 100644
index 0000000000..5f9efd6445
--- /dev/null
+++ b/Task/ABC-Problem/D/abc-problem-2.d
@@ -0,0 +1,39 @@
+import std.ascii, core.stdc.stdlib;
+
+bool canMakeWord(in string word, in string[] blocks) nothrow @nogc
+in {
+ foreach (immutable char ch; word)
+ assert(ch.isASCII);
+ foreach (const block; blocks)
+ assert(block.length == 2 && block[0].isASCII && block[1].isASCII);
+} body {
+ auto ptr = cast(string*)alloca(blocks.length * string.sizeof);
+ if (ptr == null)
+ exit(1);
+ auto blocks2 = ptr[0 .. blocks.length];
+ blocks2[] = blocks[];
+
+ outer: foreach (immutable i; 0 .. word.length) {
+ immutable ch = word[i].toUpper;
+ foreach (immutable j; 0 .. blocks2.length) {
+ if (blocks2[j][0] == ch || blocks2[j][1] == ch) {
+ if (blocks2.length > 1)
+ blocks2[j] = blocks2[$ - 1];
+ blocks2 = blocks2[0 .. $ - 1];
+ continue outer;
+ }
+ }
+ return false;
+ }
+ return true;
+}
+
+void main() {
+ import std.stdio, std.string;
+
+ immutable blocks = "BO XK DQ CP NA GT RE TG QD FS JW HU VI
+ AN OB ER FS LY PC ZM".split;
+
+ foreach (word; "" ~ "A BARK BoOK TrEAT COmMoN SQUAD conFUsE".split)
+ writefln(`"%s" %s`, word, canMakeWord(word, blocks));
+}
diff --git a/Task/ABC-Problem/D/abc-problem-3.d b/Task/ABC-Problem/D/abc-problem-3.d
new file mode 100644
index 0000000000..18a68f33c5
--- /dev/null
+++ b/Task/ABC-Problem/D/abc-problem-3.d
@@ -0,0 +1,38 @@
+import std.stdio, std.ascii, std.algorithm, std.array;
+
+alias Block = char[2];
+
+// Modifies the order of the given blocks.
+bool canMakeWord(Block[] blocks, in string word) pure nothrow
+in {
+ assert(blocks.all!(w => w[].all!isAlpha));
+ assert(word.all!isAlpha);
+} body {
+ if (word.empty)
+ return true;
+
+ immutable c = word[0].toUpper;
+ foreach (ref b; blocks) {
+ if (b[0].toUpper != c && b[1].toUpper != c)
+ continue;
+ blocks[0].swap(b);
+ if (blocks[1 .. $].canMakeWord(word[1 .. $]))
+ return true;
+ blocks[0].swap(b);
+ }
+
+ return false;
+}
+
+void main() {
+ enum Block[] blocks = "BO XK DQ CP NA GT RE TG QD FS
+ JW HU VI AN OB ER FS LY PC ZM".split;
+
+ foreach (w; "" ~ "A BARK BoOK TrEAT COmMoN SQUAD conFUsE".split)
+ writefln(`"%s" %s`, w, blocks.canMakeWord(w));
+
+ // Extra test.
+ Block[] blocks2 = ["AB", "AB", "AC", "AC"];
+ immutable word = "abba";
+ writefln(`"%s" %s`, word, blocks2.canMakeWord(word));
+}
diff --git a/Task/ABC-Problem/D/abc-problem-4.d b/Task/ABC-Problem/D/abc-problem-4.d
new file mode 100644
index 0000000000..2dc87f707a
--- /dev/null
+++ b/Task/ABC-Problem/D/abc-problem-4.d
@@ -0,0 +1,42 @@
+import std.stdio, std.ascii, std.algorithm, std.array, std.range;
+
+alias Block = char[2];
+
+bool canMakeWord(immutable Block[] blocks, in string word) pure nothrow
+in {
+ assert(blocks.all!(w => w[].all!isAlpha));
+ assert(word.all!isAlpha);
+} body {
+ bool inner(size_t[] indexes, in string w) pure nothrow {
+ if (w.empty)
+ return true;
+
+ immutable c = w[0].toUpper;
+ foreach (ref idx; indexes) {
+ if (blocks[idx][0].toUpper != c &&
+ blocks[idx][1].toUpper != c)
+ continue;
+ indexes[0].swap(idx);
+ if (inner(indexes[1 .. $], w[1 .. $]))
+ return true;
+ indexes[0].swap(idx);
+ }
+
+ return false;
+ }
+
+ return inner(blocks.length.iota.array, word);
+}
+
+void main() {
+ enum Block[] blocks = "BO XK DQ CP NA GT RE TG QD FS
+ JW HU VI AN OB ER FS LY PC ZM".split;
+
+ foreach (w; "" ~ "A BARK BoOK TrEAT COmMoN SQUAD conFUsE".split)
+ writefln(`"%s" %s`, w, blocks.canMakeWord(w));
+
+ // Extra test.
+ immutable Block[] blocks2 = ["AB", "AB", "AC", "AC"];
+ immutable word = "abba";
+ writefln(`"%s" %s`, word, blocks2.canMakeWord(word));
+}
diff --git a/Task/ABC-Problem/Delphi/abc-problem.delphi b/Task/ABC-Problem/Delphi/abc-problem.delphi
new file mode 100644
index 0000000000..442a1dc411
--- /dev/null
+++ b/Task/ABC-Problem/Delphi/abc-problem.delphi
@@ -0,0 +1,63 @@
+program ABC;
+{$APPTYPE CONSOLE}
+
+uses SysUtils;
+
+type
+ TBlock = set of char;
+
+const
+ TheBlocks : array [0..19] of TBlock =
+ (
+ [ 'B', 'O' ], [ 'X', 'K' ], [ 'D', 'Q' ], [ 'C', 'P' ], [ 'N', 'A' ],
+ [ 'G', 'T' ], [ 'R', 'E' ], [ 'T', 'G' ], [ 'Q', 'D' ], [ 'F', 'S' ],
+ [ 'J', 'W' ], [ 'H', 'U' ], [ 'V', 'I' ], [ 'A', 'N' ], [ 'O', 'B' ],
+ [ 'E', 'R' ], [ 'F', 'S' ], [ 'L', 'Y' ], [ 'P', 'C' ], [ 'Z', 'M' ]
+ );
+
+function SolveABC(Target : string; Blocks : array of TBlock) : boolean;
+var
+ iChr : integer;
+ Used : array [0..19] of boolean;
+
+ function FindUnused(TargetChr : char) : boolean; // Nested routine
+ var
+ iBlock : integer;
+ begin
+ Result := FALSE;
+ for iBlock := low(Blocks) to high(Blocks) do
+ if (not Used[iBlock]) and ( TargetChr in Blocks[iBlock] ) then
+ begin
+ Result := TRUE;
+ Used[iBlock] := TRUE;
+ Break;
+ end;
+ end;
+
+begin
+ FillChar(Used, sizeof(Used), ord(FALSE));
+ Result := TRUE;
+ iChr := 1;
+ while Result and (iChr <= length(Target)) do
+ if FindUnused(Target[iChr]) then inc(iChr)
+ else Result := FALSE;
+end;
+
+procedure CheckABC(Target : string);
+begin
+ if SolveABC(uppercase(Target), TheBlocks) then
+ writeln('Can make ' + Target)
+ else
+ writeln('Can NOT make ' + Target);
+end;
+
+begin
+ CheckABC('A');
+ CheckABC('BARK');
+ CheckABC('BOOK');
+ CheckABC('TREAT');
+ CheckABC('COMMON');
+ CheckABC('SQUAD');
+ CheckABC('CONFUSE');
+ readln;
+end.
diff --git a/Task/ABC-Problem/Erlang/abc-problem.erl b/Task/ABC-Problem/Erlang/abc-problem.erl
new file mode 100644
index 0000000000..d60189c38f
--- /dev/null
+++ b/Task/ABC-Problem/Erlang/abc-problem.erl
@@ -0,0 +1,16 @@
+-module(abc).
+-export([can_make_word/1, can_make_word/2, blocks/0]).
+
+blocks() -> ["BO", "XK", "DQ", "CP", "NA", "GT", "RE", "TG", "QD", "FS",
+ "JW", "HU", "VI", "AN", "OB", "ER", "FS", "LY", "PC", "ZM"].
+
+can_make_word(Word) -> can_make_word(Word, blocks()).
+can_make_word(Word, Avail) -> can_make_word(string:to_upper(Word), Avail, []).
+can_make_word([], _, _) -> true;
+can_make_word(_, [], _) -> false;
+can_make_word([L|Tail], [B|Rest], Tried) ->
+ (lists:member(L,B) andalso can_make_word(Tail, lists:append(Rest, Tried),[]))
+ orelse can_make_word([L|Tail], Rest, [B|Tried]).
+
+main(_) -> lists:map(fun(W) -> io:fwrite("~s: ~s~n", [W, can_make_word(W)]) end,
+ ["A","Bark","Book","Treat","Common","Squad","Confuse"]).
diff --git a/Task/ABC-Problem/Euphoria/abc-problem.euphoria b/Task/ABC-Problem/Euphoria/abc-problem.euphoria
new file mode 100644
index 0000000000..efa3352600
--- /dev/null
+++ b/Task/ABC-Problem/Euphoria/abc-problem.euphoria
@@ -0,0 +1,35 @@
+include std/text.e
+
+sequence blocks = {{'B','O'},{'X','K'},{'D','Q'},{'C','P'},{'N','A'},
+ {'G','T'},{'R','E'},{'T','G'},{'Q','D'},{'F','S'},
+ {'J','W'},{'H','U'},{'V','I'},{'A','N'},{'O','B'},
+ {'E','R'},{'F','S'},{'L','Y'},{'P','C'},{'Z','M'}}
+sequence words = {"A","BarK","BOOK","TrEaT","COMMON","SQUAD","CONFUSE"}
+
+sequence current_word
+sequence temp
+integer matches
+
+for i = 1 to length(words) do
+ current_word = upper(words[i])
+ temp = blocks
+ matches = 0
+ for j = 1 to length(current_word) do
+ for k = 1 to length(temp) do
+ if find(current_word[j],temp[k]) then
+ temp = remove(temp,k)
+ matches += 1
+ exit
+ end if
+ end for
+ if length(current_word) = matches then
+ printf(1,"%s: TRUE\n",{words[i]})
+ exit
+ end if
+ end for
+ if length(current_word) != matches then
+ printf(1,"%s: FALSE\n",{words[i]})
+ end if
+end for
+
+if getc(0) then end if
diff --git a/Task/ABC-Problem/FBSL/abc-problem.fbsl b/Task/ABC-Problem/FBSL/abc-problem.fbsl
new file mode 100644
index 0000000000..9c34a6ea72
--- /dev/null
+++ b/Task/ABC-Problem/FBSL/abc-problem.fbsl
@@ -0,0 +1,44 @@
+#APPTYPE CONSOLE
+SUB MAIN()
+ BlockCheck("A")
+ BlockCheck("BARK")
+ BlockCheck("BooK")
+ BlockCheck("TrEaT")
+ BlockCheck("comMON")
+ BlockCheck("sQuAd")
+ BlockCheck("Confuse")
+ pause
+END SUB
+
+FUNCTION BlockCheck(str)
+ print str " " iif( Blockable( str ), "can", "cannot" ) " be spelled with blocks."
+END FUNCTION
+
+FUNCTION Blockable(str AS STRING)
+ DIM blocks AS STRING = "BOXKDQCPNAGTRETGQDFSJWHUVIANOBERFSLYPCZM"
+ DIM C AS STRING = ""
+ DIM POS AS INTEGER = 0
+
+ FOR DIM I = 1 TO LEN(str)
+ C = str{i}
+ POS = INSTR(BLOCKS, C, 0, 1) 'case insensitive
+ IF POS > 0 THEN
+ 'if the pos is odd, it's the first of the pair
+ IF POS MOD 2 = 1 THEN
+ 'so clear the first and the second
+ poke(@blocks + pos - 1," ")
+ poke(@blocks + pos," ")
+ 'otherwise, it's the last of the pair
+ ELSE
+ 'clear the second and the first
+ poke(@blocks + pos - 1," ")
+ poke(@blocks + pos - 2," ")
+ END IF
+ ELSE
+ 'not found, so can't be spelled
+ RETURN FALSE
+ END IF
+ NEXT
+ 'got thru to here, so can be spelled
+ RETURN TRUE
+END FUNCTION
diff --git a/Task/ABC-Problem/Fortran/abc-problem.f b/Task/ABC-Problem/Fortran/abc-problem.f
new file mode 100644
index 0000000000..41ab0d9942
--- /dev/null
+++ b/Task/ABC-Problem/Fortran/abc-problem.f
@@ -0,0 +1,70 @@
+!-*- mode: compilation; default-directory: "/tmp/" -*-
+!Compilation started at Thu Jun 5 01:52:03
+!
+!make f && for a in '' a bark book treat common squad confuse ; do echo $a | ./f ; done
+!gfortran -std=f2008 -Wall -fopenmp -ffree-form -fall-intrinsics -fimplicit-none -g f.f08 -o f
+! T
+! T A NA
+! T BARK BO NA RE XK
+! F BOOK OB BO -- --
+! T TREAT GT RE ER NA TG
+! F COMMON PC OB ZM -- -- --
+! T SQUAD FS DQ HU NA QD
+! T CONFUSE CP BO NA FS HU FS RE
+!
+!Compilation finished at Thu Jun 5 01:52:03
+
+program abc
+ implicit none
+ integer, parameter :: nblocks = 20
+ character(len=nblocks) :: goal
+ integer, dimension(nblocks) :: solution
+ character(len=2), dimension(0:nblocks) :: blocks_copy, blocks = &
+ &(/'--','BO','XK','DQ','CP','NA','GT','RE','TG','QD','FS','JW','HU','VI','AN','OB','ER','FS','LY','PC','ZM'/)
+ logical :: valid
+ integer :: i, iostat
+ read(5,*,iostat=iostat) goal
+ if (iostat .ne. 0) goal = ''
+ call ucase(goal)
+ solution = 0
+ blocks_copy = blocks
+ valid = assign_block(goal(1:len_trim(goal)), blocks, solution, 1)
+ write(6,*) valid, ' '//goal, (' '//blocks_copy(solution(i)), i=1,len_trim(goal))
+
+contains
+
+ recursive function assign_block(goal, blocks, solution, n) result(valid)
+ implicit none
+ logical :: valid
+ character(len=*), intent(in) :: goal
+ character(len=2), dimension(0:), intent(inout) :: blocks
+ integer, dimension(:), intent(out) :: solution
+ integer, intent(in) :: n
+ integer :: i
+ character(len=2) :: backing_store
+ valid = .true.
+ if (len(goal)+1 .eq. n) return
+ do i=1, size(blocks)
+ if (index(blocks(i),goal(n:n)) .ne. 0) then
+ backing_store = blocks(i)
+ blocks(i) = ''
+ solution(n) = i
+ if (assign_block(goal, blocks, solution, n+1)) return
+ blocks(i) = backing_store
+ end if
+ end do
+ valid = .false.
+ return
+ end function assign_block
+
+ subroutine ucase(a)
+ implicit none
+ character(len=*), intent(inout) :: a
+ integer :: i, j
+ do i = 1, len_trim(a)
+ j = index('abcdefghijklmnopqrstuvwxyz',a(i:i))
+ if (j .ne. 0) a(i:i) = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'(j:j)
+ end do
+ end subroutine ucase
+
+end program abc
diff --git a/Task/ABC-Problem/Go/abc-problem.go b/Task/ABC-Problem/Go/abc-problem.go
new file mode 100644
index 0000000000..5ad1a85f59
--- /dev/null
+++ b/Task/ABC-Problem/Go/abc-problem.go
@@ -0,0 +1,39 @@
+package main
+
+import (
+ "fmt"
+ "strings"
+)
+
+func newSpeller(blocks string) func(string) bool {
+ bl := strings.Fields(blocks)
+ return func(word string) bool {
+ return r(word, bl)
+ }
+}
+
+func r(word string, bl []string) bool {
+ if word == "" {
+ return true
+ }
+ c := word[0] | 32
+ for i, b := range bl {
+ if c == b[0]|32 || c == b[1]|32 {
+ bl[i], bl[0] = bl[0], b
+ if r(word[1:], bl[1:]) == true {
+ return true
+ }
+ bl[i], bl[0] = bl[0], bl[i]
+ }
+ }
+ return false
+}
+
+func main() {
+ sp := newSpeller(
+ "BO XK DQ CP NA GT RE TG QD FS JW HU VI AN OB ER FS LY PC ZM")
+ for _, word := range []string{
+ "A", "BARK", "BOOK", "TREAT", "COMMON", "SQUAD", "CONFUSE"} {
+ fmt.Println(word, sp(word))
+ }
+}
diff --git a/Task/ABC-Problem/Groovy/abc-problem-1.groovy b/Task/ABC-Problem/Groovy/abc-problem-1.groovy
new file mode 100644
index 0000000000..5d3cd45b11
--- /dev/null
+++ b/Task/ABC-Problem/Groovy/abc-problem-1.groovy
@@ -0,0 +1,12 @@
+class ABCSolver {
+ def blocks
+
+ ABCSolver(blocks = []) { this.blocks = blocks }
+
+ boolean canMakeWord(rawWord) {
+ if (rawWord == '' || rawWord == null) { return true; }
+ def word = rawWord.toUpperCase()
+ def blocksLeft = [] + blocks
+ word.every { letter -> blocksLeft.remove(blocksLeft.find { block -> block.contains(letter) }) }
+ }
+}
diff --git a/Task/ABC-Problem/Groovy/abc-problem-2.groovy b/Task/ABC-Problem/Groovy/abc-problem-2.groovy
new file mode 100644
index 0000000000..d55aea5884
--- /dev/null
+++ b/Task/ABC-Problem/Groovy/abc-problem-2.groovy
@@ -0,0 +1,6 @@
+def a = new ABCSolver(["BO", "XK", "DQ", "CP", "NA", "GT", "RE", "TG", "QD", "FS",
+ "JW", "HU", "VI", "AN", "OB", "ER", "FS", "LY", "PC", "ZM"])
+
+['', 'A', 'BARK', 'book', 'treat', 'COMMON', 'SQuAd', 'CONFUSE'].each {
+ println "'${it}': ${a.canMakeWord(it)}"
+}
diff --git a/Task/ABC-Problem/Haskell/abc-problem.hs b/Task/ABC-Problem/Haskell/abc-problem.hs
new file mode 100644
index 0000000000..76258b53e9
--- /dev/null
+++ b/Task/ABC-Problem/Haskell/abc-problem.hs
@@ -0,0 +1,15 @@
+import Data.List (delete)
+import Data.Char (toUpper)
+
+-- returns list of all solutions, each solution being a list of blocks
+abc :: (Eq a) => [[a]] -> [a] -> [[[a]]]
+abc _ [] = [[]]
+abc blocks (c:cs) = [b:ans | b <- blocks, c `elem` b,
+ ans <- abc (delete b blocks) cs]
+
+blocks = ["BO", "XK", "DQ", "CP", "NA", "GT", "RE", "TG", "QD", "FS",
+ "JW", "HU", "VI", "AN", "OB", "ER", "FS", "LY", "PC", "ZM"]
+
+main :: IO ()
+main = mapM_ (\w -> print (w, not . null $ abc blocks (map toUpper w)))
+ ["", "A", "BARK", "BoOK", "TrEAT", "COmMoN", "SQUAD", "conFUsE"]
diff --git a/Task/ABC-Problem/Icon/abc-problem.icon b/Task/ABC-Problem/Icon/abc-problem.icon
new file mode 100644
index 0000000000..8c841b34ce
--- /dev/null
+++ b/Task/ABC-Problem/Icon/abc-problem.icon
@@ -0,0 +1,24 @@
+procedure main(A)
+ blocks := ["bo","xk","dq","cp","na","gt","re","tg","qd","fs",
+ "jw","hu","vi","an","ob","er","fs","ly","pc","zm",&null]
+ every write("\"",word := !A,"\" ",checkSpell(map(word),blocks)," with blocks.")
+end
+
+procedure checkSpell(w,blocks)
+ blks := copy(blocks)
+ w ? return if canMakeWord(blks) then "can be spelled"
+ else "can not be spelled"
+end
+
+procedure canMakeWord(blks)
+ c := move(1) | return
+ if /blks[1] then fail
+ every i := 1 to *blks do {
+ if /blks[i] then (move(-1),fail)
+ if c == !blks[i] then {
+ blks[1] :=: blks[i]
+ if canMakeWord(blks[2:0]) then return
+ blks[1] :=: blks[i]
+ }
+ }
+end
diff --git a/Task/ABC-Problem/J/abc-problem-1.j b/Task/ABC-Problem/J/abc-problem-1.j
new file mode 100644
index 0000000000..a934ff56bc
--- /dev/null
+++ b/Task/ABC-Problem/J/abc-problem-1.j
@@ -0,0 +1,11 @@
+reduce=: verb define
+ 'rows cols'=. i.&.> $y
+ for_c. cols do.
+ r=. 1 i.~ c {"1 y NB. row idx of first 1 in col
+ if. r = #rows do. continue. end.
+ y=. 0 (<((r+1)}.rows);c) } y NB. zero rest of col
+ y=. 0 (<(r;(c+1)}.cols)) } y NB. zero rest of row
+ end.
+)
+
+abc=: *./@(+./)@reduce@(e."1~ ,)&toupper :: 0:
diff --git a/Task/ABC-Problem/J/abc-problem-2.j b/Task/ABC-Problem/J/abc-problem-2.j
new file mode 100644
index 0000000000..92b6be9062
--- /dev/null
+++ b/Task/ABC-Problem/J/abc-problem-2.j
@@ -0,0 +1,14 @@
+ Blocks=: ];._2 'BO XK DQ CP NA GT RE TG QD FS JW HU VI AN OB ER FS LY PC ZM '
+ ExampleWords=: <;._2 'A BaRK BOoK tREaT COmMOn SqUAD CoNfuSE '
+
+ Blocks&abc &> ExampleWords
+1 1 0 1 0 1 1
+ require 'format/printf'
+ '%10s %s' printf (dquote ; 'FT' {~ Blocks&abc) &> ExampleWords
+ "A" T
+ "BaRK" T
+ "BOoK" F
+ "tREaT" T
+ "COmMOn" F
+ "SqUAD" T
+ "CoNfuSE" T
diff --git a/Task/ABC-Problem/J/abc-problem-3.j b/Task/ABC-Problem/J/abc-problem-3.j
new file mode 100644
index 0000000000..56e3992269
--- /dev/null
+++ b/Task/ABC-Problem/J/abc-problem-3.j
@@ -0,0 +1,3 @@
+delElem=: {~<@<@<
+uppc=:(-32*96&<*.123&>)&.(3&u:)
+reduc=: ] delElem 1 i.~e."0 1
diff --git a/Task/ABC-Problem/J/abc-problem-4.j b/Task/ABC-Problem/J/abc-problem-4.j
new file mode 100644
index 0000000000..10190ed384
--- /dev/null
+++ b/Task/ABC-Problem/J/abc-problem-4.j
@@ -0,0 +1,10 @@
+Blocks=: >;:'BO XK DQ CP NA GT RE TG QD FS JW HU VI AN OB ER FS LY PC ZM '
+ExampleWords=: ;: 'A BaRK BOoK tREaT COmMOn SqUAD CoNfuSE '
+
+canform=:4 :0
+ word=: toupper y
+ need=: #/.~ word,word
+ relevant=: (x +./@e."1 word) # x
+ candidates=: word,"1>,{{relevant
+ +./(((#need){. #/.~)"1 candidates) */ .>:need
+)
diff --git a/Task/ABC-Problem/J/abc-problem-5.j b/Task/ABC-Problem/J/abc-problem-5.j
new file mode 100644
index 0000000000..24e2166934
--- /dev/null
+++ b/Task/ABC-Problem/J/abc-problem-5.j
@@ -0,0 +1,14 @@
+ Blocks canform 0{::ExampleWords
+1
+ Blocks canform 1{::ExampleWords
+1
+ Blocks canform 2{::ExampleWords
+0
+ Blocks canform 3{::ExampleWords
+1
+ Blocks canform 4{::ExampleWords
+0
+ Blocks canform 5{::ExampleWords
+1
+ Blocks canform 6{::ExampleWords
+1
diff --git a/Task/ABC-Problem/Java/abc-problem.java b/Task/ABC-Problem/Java/abc-problem.java
new file mode 100644
index 0000000000..8cd74ed0ba
--- /dev/null
+++ b/Task/ABC-Problem/Java/abc-problem.java
@@ -0,0 +1,44 @@
+import java.util.Arrays;
+
+public class ABC{
+ private static void swap(int i, int j, Object... arr){
+ Object tmp = arr[i];
+ arr[i] = arr[j];
+ arr[j] = tmp;
+ }
+
+ public static boolean canMakeWord(String word, String... blocks) {
+ if(word.length() == 0)
+ return true;
+
+ char c = Character.toUpperCase(word.charAt(0));
+ for(int i = 0; i < blocks.length; i++) {
+ String b = blocks[i];
+ if(Character.toUpperCase(b.charAt(0)) != c && Character.toUpperCase(b.charAt(1)) != c)
+ continue;
+ swap(0, i, blocks);
+ if(canMakeWord(word.substring(1), Arrays.copyOfRange(blocks, 1, blocks.length)))
+ return true;
+ swap(0, i, blocks);
+ }
+
+ return false;
+ }
+
+ public static void main(String[] args){
+ String[] blocks = {"BO", "XK", "DQ", "CP", "NA",
+ "GT", "RE", "TG", "QD", "FS",
+ "JW", "HU", "VI", "AN", "OB",
+ "ER", "FS", "LY", "PC", "ZM"};
+
+ System.out.println("\"\": " + canMakeWord("", blocks));
+ System.out.println("A: " + canMakeWord("A", blocks));
+ System.out.println("BARK: " + canMakeWord("BARK", blocks));
+ System.out.println("book: " + canMakeWord("book", blocks));
+ System.out.println("treat: " + canMakeWord("treat", blocks));
+ System.out.println("COMMON: " + canMakeWord("COMMON", blocks));
+ System.out.println("SQuAd: " + canMakeWord("SQuAd", blocks));
+ System.out.println("CONFUSE: " + canMakeWord("CONFUSE", blocks));
+
+ }
+}
diff --git a/Task/ABC-Problem/JavaScript/abc-problem.js b/Task/ABC-Problem/JavaScript/abc-problem.js
new file mode 100644
index 0000000000..b7a0a153cc
--- /dev/null
+++ b/Task/ABC-Problem/JavaScript/abc-problem.js
@@ -0,0 +1,32 @@
+let characters = "BO XK DQ CP NA GT RE TG QD FS JW HU VI AN OB ER FS LY PC ZM";
+let blocks = characters.split(" ").map(pair => pair.split(""));
+
+function isWordPossible(word) {
+ var letters = [...word.toUpperCase()];
+ var length = letters.length;
+ var copy = new Set(blocks);
+
+ for (let letter of letters) {
+ for (let block of copy) {
+ let index = block.indexOf(letter);
+
+ if (index !== -1) {
+ length--;
+ copy.delete(block);
+ break;
+ }
+ }
+
+ }
+ return !length;
+}
+
+[
+ "A",
+ "BARK",
+ "BOOK",
+ "TREAT",
+ "COMMON",
+ "SQUAD",
+ "CONFUSE"
+].forEach(word => console.log(`${word}: ${isWordPossible(word)}`));
diff --git a/Task/ABC-Problem/Julia/abc-problem.julia b/Task/ABC-Problem/Julia/abc-problem.julia
new file mode 100644
index 0000000000..06d600fbc6
--- /dev/null
+++ b/Task/ABC-Problem/Julia/abc-problem.julia
@@ -0,0 +1,9 @@
+function abc (str, list)
+ isempty(str) && return true
+ for i = 1:length(list)
+ str[end] in list[i] &&
+ any([abc(str[1:end-1], deleteat!(copy(list), i))]) &&
+ return true
+ end
+ false
+end
diff --git a/Task/ABC-Problem/Logo/abc-problem.logo b/Task/ABC-Problem/Logo/abc-problem.logo
new file mode 100644
index 0000000000..65666745dd
--- /dev/null
+++ b/Task/ABC-Problem/Logo/abc-problem.logo
@@ -0,0 +1,21 @@
+make "blocks [[B O] [X K] [D Q] [C P] [N A] [G T] [R E] [T G] [Q D] [F S]
+ [J W] [H U] [V I] [A N] [O B] [E R] [F S] [L Y] [P C] [Z M]]
+
+to can_make? :word [:avail :blocks]
+ if empty? :word [output "true]
+ local "letter make "letter first :word
+ foreach :avail [
+ local "i make "i #
+ local "block make "block ?
+ if member? :letter :block [
+ if (can_make? bf :word filter [notequal? # :i] :avail) [output "true]
+ ]
+ ]
+ output "false
+end
+
+foreach [A BARK BOOK TREAT COMMON SQUAD CONFUSE] [
+ print sentence word ? ": can_make? ?
+]
+
+bye
diff --git a/Task/ABC-Problem/MATLAB/abc-problem.m b/Task/ABC-Problem/MATLAB/abc-problem.m
new file mode 100644
index 0000000000..e8ab76b86e
--- /dev/null
+++ b/Task/ABC-Problem/MATLAB/abc-problem.m
@@ -0,0 +1,26 @@
+function testABC
+ combos = ['BO' ; 'XK' ; 'DQ' ; 'CP' ; 'NA' ; 'GT' ; 'RE' ; 'TG' ; 'QD' ; ...
+ 'FS' ; 'JW' ; 'HU' ; 'VI' ; 'AN' ; 'OB' ; 'ER' ; 'FS' ; 'LY' ; ...
+ 'PC' ; 'ZM'];
+ words = {'A' 'BARK' 'BOOK' 'TREAT' 'COMMON' 'SQUAD' 'CONFUSE'};
+ for k = 1:length(words)
+ possible = canMakeWord(words{k}, combos);
+ fprintf('Can%s make word %s.\n', char(~possible.*'NOT'), words{k})
+ end
+end
+
+function isPossible = canMakeWord(word, combos)
+ word = lower(word);
+ combos = lower(combos);
+ isPossible = true;
+ k = 1;
+ while isPossible && k <= length(word)
+ [r, c] = find(combos == word(k), 1);
+ if ~isempty(r)
+ combos(r, :) = '';
+ else
+ isPossible = false;
+ end
+ k = k+1;
+ end
+end
diff --git a/Task/ABC-Problem/MAXScript/abc-problem-1.max b/Task/ABC-Problem/MAXScript/abc-problem-1.max
new file mode 100644
index 0000000000..c05646f32e
--- /dev/null
+++ b/Task/ABC-Problem/MAXScript/abc-problem-1.max
@@ -0,0 +1,98 @@
+-- This is the blocks array
+global GlobalBlocks = #("BO","XK","DQ","CP","NA", \
+ "GT","RE","TG","QD","FS", \
+ "JW","HU","VI","AN","OB", \
+ "ER","FS","LY","PC","ZM")
+
+-- This function returns true if "_str" is part of "_word", false otherwise
+fn occurs _str _word =
+(
+ if _str != undefined and _word != undefined then
+ (
+ matchpattern _word pattern:("*"+_str+"*")
+ ) else return false
+)
+
+-- This is the main function
+fn isWordPossible word blocks: = -- blocks is a keyword argument
+(
+ word = toupper word -- convert the string to upper case, to make it case insensitive
+ if blocks == unsupplied do blocks = GlobalBlocks
+ -- if blocks (keyword argument) is unsupplied, use the global blocks array (this is for recursion)
+
+ blocks = deepcopy blocks
+
+ local pos = 1 -- start at the beginning of the word
+ local solvedLetters = #() -- this array stores the indices of solved letters
+
+ while pos <= word.count do -- loop through every character in the word
+ (
+ local possibleBlocks = #() -- this array stores the blocks which can be used to make that letter
+ for b = 1 to Blocks.count do -- this loop finds all the possible blocks that can be used to make that letter
+ (
+ if occurs word[pos] blocks[b] do
+ (
+ appendifunique possibleBlocks b
+ )
+ )
+ if possibleBlocks.count > 0 then -- if it found any blocks
+ (
+ if possibleBlocks.count == 1 then -- if it found one block, then continue
+ (
+ appendifunique solvedLetters pos
+ deleteitem blocks possibleblocks[1]
+ pos += 1
+ )
+ else -- if it found more than one
+ (
+ for b = 1 to possibleBlocks.count do -- loop through every possible block
+ (
+ local possibleBlock = blocks[possibleBlocks[b]]
+ local blockFirstLetter = possibleBlock[1]
+ local blockSecondLetter = possibleBlock[2]
+ local matchingLetter = if blockFirstLetter == word[pos] then 1 else 2
+ -- ^ this is the index of the matching letter on the block
+
+ local notMatchingIndex = if matchingLetter == 1 then 2 else 1
+ local notMatchingLetter = possibleBlock[notMatchingIndex]
+ -- ^ this is the other letter on the block
+
+ if occurs notMatchingLetter (substring word (pos+1) -1) then
+ ( -- if the other letter occurs in the rest of the word
+ local removedBlocks = deepcopy blocks -- copy the current blocks array
+ deleteitem removedBlocks possibleBlocks[b] -- remove the item from the copied array
+
+ -- recursively check if the word is possible if that block is taken away from the array:
+ if (isWordPossible (substring word (pos+1) -1) blocks:removedBlocks) then
+ ( -- if it is, then remove the block and move to next character
+ appendifunique solvedLetters pos
+ deleteitem blocks possibleblocks[1]
+ pos += 1
+ exit
+ )
+ else
+ ( -- if it isn't and it looped through every possible block, then the word is not possible
+ if b == possibleBlocks.count do return false
+ )
+ )
+ else
+ ( -- if the other letter on this block doesn't occur in the rest of the word, then the letter is solved, continue
+ appendifunique solvedLetters pos
+ deleteitem blocks possibleblocks[b]
+ pos += 1
+ exit
+ )
+ )
+ )
+ ) else return false -- if it didn't find any blocks, then return false
+ )
+
+ makeuniquearray solvedLetters -- make sure there are no duplicates in the solved array
+ if solvedLetters.count != word.count then return false -- if number of solved letters is not equal to word length
+ else
+ ( -- this checks if all the solved letters are the same as the word
+ check = ""
+ for bit in solvedLetters do append check word[bit]
+ if check == word then return true else return false
+ )
+)
diff --git a/Task/ABC-Problem/MAXScript/abc-problem-2.max b/Task/ABC-Problem/MAXScript/abc-problem-2.max
new file mode 100644
index 0000000000..588811d229
--- /dev/null
+++ b/Task/ABC-Problem/MAXScript/abc-problem-2.max
@@ -0,0 +1,14 @@
+iswordpossible "a"
+true
+iswordpossible "bark"
+true
+iswordpossible "book"
+false
+iswordpossible "treat"
+true
+iswordpossible "common"
+false
+iswordpossible "squad"
+true
+iswordpossible "confuse"
+true
diff --git a/Task/ABC-Problem/MAXScript/abc-problem-3.max b/Task/ABC-Problem/MAXScript/abc-problem-3.max
new file mode 100644
index 0000000000..4681f1b686
--- /dev/null
+++ b/Task/ABC-Problem/MAXScript/abc-problem-3.max
@@ -0,0 +1,30 @@
+fn isWordPossible2 word =
+(
+ Blocks = #("BO","XK","DQ","CP","NA", \
+ "GT","RE","TG","QD","FS", \
+ "JW","HU","VI","AN","OB", \
+ "ER","FS","LY","PC","ZM")
+ word = toupper word
+ local pos = 1
+ local solvedLetters = #()
+ while pos <= word.count do
+ (
+ for i = 1 to blocks.count do
+ (
+ if (matchpattern blocks[i] pattern:("*"+word[pos]+"*")) then
+ (
+ deleteitem blocks i
+ appendifunique solvedLetters pos
+ pos +=1
+ exit
+ )
+ else if i == blocks.count do return false
+ )
+ )
+ if solvedLetters.count == word.count then
+ (
+ local check = ""
+ for bit in solvedLetters do append check word[bit]
+ if check == word then return true else return false
+ ) else return false
+)
diff --git a/Task/ABC-Problem/MAXScript/abc-problem-4.max b/Task/ABC-Problem/MAXScript/abc-problem-4.max
new file mode 100644
index 0000000000..de896ca7ec
--- /dev/null
+++ b/Task/ABC-Problem/MAXScript/abc-problem-4.max
@@ -0,0 +1,4 @@
+iswordpossible "water"
+true
+iswordpossible2 "water"
+false
diff --git a/Task/ABC-Problem/Mathematica/abc-problem.math b/Task/ABC-Problem/Mathematica/abc-problem.math
new file mode 100644
index 0000000000..7e1e87644e
--- /dev/null
+++ b/Task/ABC-Problem/Mathematica/abc-problem.math
@@ -0,0 +1,12 @@
+blocks=Partition[Characters[ToLowerCase["BOXKDQCPNAGTRETGQDFSJWHUVIANOBERFSLYPCZM"]],2];
+ClearAll[DoStep,ABCBlockQ]
+DoStep[chars_List,blcks_List,chosen_List]:=Module[{opts},
+ If[chars=!={},
+ opts=Select[blcks,MemberQ[#,First[chars]]&];
+ {Rest[chars],DeleteCases[blcks,#,1,1],Append[chosen,#]}&/@opts
+ ,
+ {{chars,blcks,chosen}}
+ ]
+]
+DoStep[opts_List]:=Flatten[DoStep@@@opts,1]
+ABCBlockQ[str_String]:=(FixedPoint[DoStep,{{Characters[ToLowerCase[str]],blocks,{}}}]=!={})
diff --git a/Task/ABC-Problem/OCaml/abc-problem.ocaml b/Task/ABC-Problem/OCaml/abc-problem.ocaml
new file mode 100644
index 0000000000..f65ef95aa9
--- /dev/null
+++ b/Task/ABC-Problem/OCaml/abc-problem.ocaml
@@ -0,0 +1,40 @@
+let blocks = [
+ ('B', 'O'); ('X', 'K'); ('D', 'Q'); ('C', 'P');
+ ('N', 'A'); ('G', 'T'); ('R', 'E'); ('T', 'G');
+ ('Q', 'D'); ('F', 'S'); ('J', 'W'); ('H', 'U');
+ ('V', 'I'); ('A', 'N'); ('O', 'B'); ('E', 'R');
+ ('F', 'S'); ('L', 'Y'); ('P', 'C'); ('Z', 'M');
+]
+
+let find_letter blocks c =
+ let found, remaining =
+ List.partition (fun (c1, c2) -> c1 = c || c2 = c) blocks
+ in
+ match found with
+ | _ :: res -> Some (res @ remaining)
+ | _ -> None
+
+let can_make_word w =
+ let n = String.length w in
+ let rec aux i _blocks =
+ if i >= n then true else
+ match find_letter _blocks w.[i] with
+ | None -> false
+ | Some rem_blocks ->
+ aux (succ i) rem_blocks
+ in
+ aux 0 blocks
+
+let test label f (word, should) =
+ Printf.printf "- %s %S = %B (should: %B)\n" label word (f word) should
+
+let () =
+ List.iter (test "can make word" can_make_word) [
+ "A", true;
+ "BARK", true;
+ "BOOK", false;
+ "TREAT", true;
+ "COMMON", false;
+ "SQUAD", true;
+ "CONFUSE", true;
+ ]
diff --git a/Task/ABC-Problem/Oberon-2/abc-problem.oberon-2 b/Task/ABC-Problem/Oberon-2/abc-problem.oberon-2
new file mode 100644
index 0000000000..fbddd4d9bb
--- /dev/null
+++ b/Task/ABC-Problem/Oberon-2/abc-problem.oberon-2
@@ -0,0 +1,83 @@
+MODULE ABCBlocks;
+IMPORT
+ Object,
+ Out;
+
+VAR
+ blocks: ARRAY 20 OF STRING;
+
+ PROCEDURE CanMakeWord(w: STRING): BOOLEAN;
+ VAR
+ used: ARRAY 20 OF LONGINT;
+ wChars: Object.CharsLatin1;
+ i,j: LONGINT;
+
+ PROCEDURE IsUsed(i: LONGINT): BOOLEAN;
+ VAR
+ b: LONGINT;
+ BEGIN
+ b := 0;
+ WHILE (b < LEN(used) - 1) & (used[b] # -1) DO
+ IF used[b] = i THEN RETURN TRUE END;
+ INC(b)
+ END;
+ RETURN FALSE
+ END IsUsed;
+
+ PROCEDURE GetBlockFor(blocks: ARRAY OF STRING; c: CHAR): LONGINT;
+ VAR
+ i: LONGINT;
+ BEGIN
+ i := 0;
+ WHILE (i < LEN(blocks)) DO
+ IF (blocks[i].IndexOf(c,0) >= 0) & (~IsUsed(i)) THEN RETURN i END;
+ INC(i)
+ END;
+
+ RETURN -1;
+ END GetBlockFor;
+
+ BEGIN
+ FOR i := 0 TO LEN(used) - 1 DO used[i] := -1 END;
+ wChars := w(Object.String8).CharsLatin1();
+
+ i := 0;
+ WHILE (i < LEN(wChars^) - 1) DO
+ j := GetBlockFor(blocks,CAP(wChars[i]));
+ IF j < 0 THEN RETURN FALSE END;
+ used[i] := j;
+ INC(i)
+ END;
+ RETURN TRUE
+ END CanMakeWord;
+
+BEGIN
+ blocks[0] := "BO";
+ blocks[1] := "XK";
+ blocks[2] := "DQ";
+ blocks[3] := "CP";
+ blocks[4] := "NA";
+ blocks[5] := "GT";
+ blocks[6] := "RE";
+ blocks[7] := "TG";
+ blocks[8] := "QD";
+ blocks[9] := "FS";
+ blocks[10] := "JW";
+ blocks[11] := "HU";
+ blocks[12] := "VI";
+ blocks[13] := "AN";
+ blocks[14] := "OB";
+ blocks[15] := "ER";
+ blocks[16] := "FS";
+ blocks[17] := "LY";
+ blocks[18] := "PC";
+ blocks[19] := "ZM";
+
+ Out.String("A: ");Out.Bool(CanMakeWord("A"));Out.Ln;
+ Out.String("BARK: ");Out.Bool(CanMakeWord("BARK"));Out.Ln;
+ Out.String("BOOK: ");Out.Bool(CanMakeWord("BOOK"));Out.Ln;
+ Out.String("TREAT: ");Out.Bool(CanMakeWord("TREAT"));Out.Ln;
+ Out.String("COMMON: ");Out.Bool(CanMakeWord("COMMON"));Out.Ln;
+ Out.String("SQAD: ");Out.Bool(CanMakeWord("SQUAD"));Out.Ln;
+ Out.String("confuse: ");Out.Bool(CanMakeWord("confuse"));Out.Ln;
+END ABCBlocks.
diff --git a/Task/ABC-Problem/PHP/abc-problem.php b/Task/ABC-Problem/PHP/abc-problem.php
new file mode 100644
index 0000000000..14d5f206b3
--- /dev/null
+++ b/Task/ABC-Problem/PHP/abc-problem.php
@@ -0,0 +1,29 @@
+ $block) {
+ if (strpos($block, $char) !== FALSE) {
+ unset($blocks[$k]);
+ continue(2);
+ }
+ }
+ return false;
+ }
+ return true;
+}
+
+foreach ($words as $word) {
+ echo $word.': ';
+ echo canMakeWord($word) ? "True" : "False";
+ echo "\r\n";
+}
diff --git a/Task/ABC-Problem/PL-I/abc-problem-1.pli b/Task/ABC-Problem/PL-I/abc-problem-1.pli
new file mode 100644
index 0000000000..3592b2aec8
--- /dev/null
+++ b/Task/ABC-Problem/PL-I/abc-problem-1.pli
@@ -0,0 +1,25 @@
+ABC: procedure options (main); /* 12 January 2014 */
+
+ declare word character (20) varying, blocks character (200) varying initial
+ ('((B O) (X K) (D Q) (C P) (N A) (G T) (R E) (T G) (Q D) (F S)
+ (J W) (H U) (V I) (A N) (O B) (E R) (F S) (L Y) (P C) (Z M))');
+ declare tblocks character (200) varying;
+ declare (true value ('1'b), false value ('0'b), flag) bit (1);
+ declare ch character (1);
+ declare (i, k) fixed binary;
+
+ do word = 'A', 'BARK', 'BOOK', 'TREAT', 'COMMON', 'SQuAd', 'CONFUSE';
+ flag = true;
+ tblocks = blocks;
+ do i = 1 to length(word);
+ ch = substr(word, i, 1);
+ k = index(tblocks, uppercase(ch));
+ if k = 0 then
+ flag = false;
+ else /* Found a block with the letter on it. */
+ substr(tblocks, k-1, 4) = ' '; /* Delete the block. */
+ end;
+ if flag then put skip list (word, 'true'); else put skip list (word, 'false');
+ end;
+
+end ABC;
diff --git a/Task/ABC-Problem/PL-I/abc-problem-2.pli b/Task/ABC-Problem/PL-I/abc-problem-2.pli
new file mode 100644
index 0000000000..7e1907395b
--- /dev/null
+++ b/Task/ABC-Problem/PL-I/abc-problem-2.pli
@@ -0,0 +1,121 @@
+*process source attributes xref or(!) options nest;
+ abc: Proc Options(main);
+ /* REXX --------------------------------------------------------------
+ * 10.01.2013 Walter Pachl counts the number of possible ways
+ * translated from Rexx version 2
+ *-------------------------------------------------------------------*/
+
+ Dcl (ADDR,HBOUND,INDEX,LEFT,LENGTH,MAX,SUBSTR,TRANSLATE) builtin;
+ Dcl sysprint Print;
+ Dcl (i,j,k,m,mm,wi,wj,wlen,ways,lw) Bin Fixed(15);
+ Dcl blocks(20) Char(2)
+ Init('BO','XK','DQ','CP','NA','GT','RE','TG','QD','FS','JW',
+ 'HU','VI','AN','OB','ER','FS','LY','PC','ZM');
+ Dcl blk Char(2);
+ Dcl words(8) Char(7) Var
+ Init('$','A','baRk','bOOk','trEat','coMMon','squaD','conFuse');
+ Dcl word Char(7) Var;
+ Dcl c Char(1);
+ Dcl (show,cannot) Bit(1) Init('0'b);
+ Dcl poss(100,0:100) Pic'99'; poss=0;
+ Dcl s(20,100) char(100) Var;
+ Dcl str Char(100);
+ Dcl 1 *(30) Based(addr(str)),
+ 2 strp Pic'99',
+ 2 * Char(1);
+ Dcl ns(20) Bin Fixed(15) Init((20)0);
+ Dcl ol(100) Char(100) Var;
+ Dcl os Char(100) Var;
+ wlen=0;
+ Dcl lower Char(26) Init('abcdefghijklmnopqrstuvwxyz');
+ Dcl upper Char(26) Init('ABCDEFGHIJKLMNOPQRSTUVWXYZ');
+ Do wi=1 To hbound(words);
+ wlen=max(wlen,length(words(wi)));
+ End;
+ Do wi=1 To hbound(words);
+ word = translate(words(wi),upper,lower);
+ ways=0;
+ lw=length(word);
+ cannot='0'b;
+ poss=0;
+ ns=0;
+ ol='';
+ iloop:
+ Do i=1 To lw; /* loop over the characters */
+ c=substr(word,i,1); /* the current character */
+ Do j=1 To hbound(blocks); /* loop over blocks */
+ blk=blocks(j);
+ If index(blk,c)>0 Then Do; /* block can be used in this pos( */
+ poss(i,0)+=1; /* number of possible blocks for pos i */
+ poss(i,poss(i,0))=j;
+ End;
+ End;
+ If poss(i,0)=0 Then Do;
+ Leave iloop;
+ End;
+ End;
+ If i>lw Then Do; /* no prohibitive character */
+ ns=0;
+ Do j=1 To poss(1,0); /* build possible strings for char 1 */
+ ns(1)+=1;;
+ s(1,j)=poss(1,j);
+ End;
+ Do m=2 To lw; /* build possible strings for chars 1 to i */
+ mm=m-1;
+ Do j=1 To ns(mm);
+ Do k=1 To poss(m,0);
+ ns(m)+=1;
+ s(m,ns(m))=s(mm,j)!!' '!!poss(m,k);
+ End;
+ End;
+ End;
+ Do m=1 To ns(lw);
+ If valid(s(lw,m)) Then Do;
+ ways+=1;
+ str=s(lw,m);
+ Do k=1 To lw;
+ ol(ways)=ol(ways)!!blocks(strp(k))!!' ';
+ End;
+ End;
+ End;
+ End;
+ /*--------------------------------------------------------------------
+ * now show the result
+ *-------------------------------------------------------------------*/
+ os=left(''''!!word!!'''',wlen+2);
+ Select;
+ When(ways=0)
+ os=os!!' cannot be spelt.';
+ When(ways=1)
+ os=os!!' can be spelt.';
+ Otherwise
+ os=os!!' can be spelt in'!!ways!!' ways.';
+ End;
+ Put Skip List(os);
+ If show Then Do;
+ Do wj=1 To ways;
+ Put Edit(' '!!ol(wj))(Skip,a);
+ End;
+ End;
+ End;
+ Return;
+
+ valid: Procedure(list) Returns(bit(1));
+ /*--------------------------------------------------------------------
+ * Check if the same block is used more than once -> 0
+ * Else: the combination is valid
+ *-------------------------------------------------------------------*/
+ Dcl list Char(*) Var;
+ Dcl i Bin Fixed(15);
+ Dcl used(20) Bit(1);
+ str=list;
+ used='0'b;
+ Do i=1 To lw;
+ If used(strp(i)) Then
+ Return('0'b);
+ used(strp(i))='1'b;
+ End;
+ Return('1'b);
+ End;
+
+ End;
diff --git a/Task/ABC-Problem/Perl-6/abc-problem.pl6 b/Task/ABC-Problem/Perl-6/abc-problem.pl6
new file mode 100644
index 0000000000..0f331a2891
--- /dev/null
+++ b/Task/ABC-Problem/Perl-6/abc-problem.pl6
@@ -0,0 +1,21 @@
+multi can-spell-word(Str $word, @blocks) {
+ my @regex = @blocks.map({ EVAL "/{.comb.join('|')}/" }).grep: { .ACCEPTS($word.uc) }
+ can-spell-word $word.uc.comb, @regex;
+}
+
+multi can-spell-word([$head,*@tail], @regex) {
+ for @regex -> $re {
+ if $head ~~ $re {
+ return True unless @tail;
+ return False if @regex == 1;
+ return True if can-spell-word @tail, @regex.grep: * !=== $re;
+ }
+ }
+ False;
+}
+
+my @b = ;
+
+for {
+ say "$_ &can-spell-word($_, @b)";
+}
diff --git a/Task/ABC-Problem/Perl/abc-problem-1.pl b/Task/ABC-Problem/Perl/abc-problem-1.pl
new file mode 100644
index 0000000000..ea2ee774f0
--- /dev/null
+++ b/Task/ABC-Problem/Perl/abc-problem-1.pl
@@ -0,0 +1,26 @@
+#!/usr/bin/perl
+use warnings;
+use strict;
+
+
+sub can_make_word {
+ my ($word, @blocks) = @_;
+ $_ = uc join q(), sort split // for @blocks;
+ my %blocks;
+ $blocks{$_}++ for @blocks;
+ return _can_make_word(uc $word, %blocks)
+}
+
+
+sub _can_make_word {
+ my ($word, %blocks) = @_;
+ my $char = substr $word, 0, 1, q();
+
+ my @candidates = grep 0 <= index($_, $char), keys %blocks;
+ for my $candidate (@candidates) {
+ next if $blocks{$candidate} <= 0;
+ local $blocks{$candidate} = $blocks{$candidate} - 1;
+ return 1 if q() eq $word or _can_make_word($word, %blocks);
+ }
+ return
+}
diff --git a/Task/ABC-Problem/Perl/abc-problem-2.pl b/Task/ABC-Problem/Perl/abc-problem-2.pl
new file mode 100644
index 0000000000..e16cfe094f
--- /dev/null
+++ b/Task/ABC-Problem/Perl/abc-problem-2.pl
@@ -0,0 +1,13 @@
+use Test::More tests => 8;
+
+my @blocks1 = qw(BO XK DQ CP NA GT RE TG QD FS JW HU VI AN OB ER FS LY PC ZM);
+is(can_make_word("A", @blocks1), 1);
+is(can_make_word("BARK", @blocks1), 1);
+is(can_make_word("BOOK", @blocks1), undef);
+is(can_make_word("TREAT", @blocks1), 1);
+is(can_make_word("COMMON", @blocks1), undef);
+is(can_make_word("SQUAD", @blocks1), 1);
+is(can_make_word("CONFUSE", @blocks1), 1);
+
+my @blocks2 = qw(US TZ AO QA);
+is(can_make_word('auto', @blocks2), 1);
diff --git a/Task/ABC-Problem/PicoLisp/abc-problem.l b/Task/ABC-Problem/PicoLisp/abc-problem.l
new file mode 100644
index 0000000000..2034d57658
--- /dev/null
+++ b/Task/ABC-Problem/PicoLisp/abc-problem.l
@@ -0,0 +1,33 @@
+(setq *Blocks
+ '((B O) (X K) (D Q) (C P) (N A) (G T) (R E)
+ (T G) (Q D) (F S) (J W) (H U) (V I) (A N)
+ (O B) (E R) (F S) (L Y) (P C) (Z M) ) )
+(setq *Words '("" "1" "A" "BARK" "BOOK" "TREAT"
+ "Bbb" "COMMON" "SQUAD" "Confuse"
+ "abba" "ANBOCPDQERSFTGUVWXLZ") )
+
+(de abc (W B)
+ (let Myblocks (copy B)
+ (fully
+ '((C)
+ (when (seek '((Lst) (member C (car Lst))) Myblocks)
+ (set @)
+ T ) )
+ (chop (uppc W)) ) ) )
+
+(de abcR (W B)
+ (nond
+ ((car W) T)
+ ((car B) NIL)
+ (NIL
+ (setq W (chop W))
+ (let? I
+ (find
+ '((Lst) (member (uppc (car W)) Lst))
+ B )
+ (abcR (cdr W) (delete I B)) ) ) ) )
+
+(for Word *Words
+ (println Word (abc Word *Blocks) (abcR Word *Blocks)) )
+
+(bye)
diff --git a/Task/ABC-Problem/PowerBASIC/abc-problem.powerbasic b/Task/ABC-Problem/PowerBASIC/abc-problem.powerbasic
new file mode 100644
index 0000000000..ff524d89eb
--- /dev/null
+++ b/Task/ABC-Problem/PowerBASIC/abc-problem.powerbasic
@@ -0,0 +1,155 @@
+#COMPILE EXE
+#DIM ALL
+'
+' A B C p r o b l e m . b a s
+'
+' by Geary Chopoff
+' for Chopoff Consulting and RosettaCode.org
+' on 2014Jul23
+'
+'2014Jul23
+'
+'You are given a collection of ABC blocks. Just like the ones you had when you were a kid.
+'There are twenty blocks with two letters on each block. You are guaranteed to have a complete
+'alphabet amongst all sides of the blocks. The sample blocks are:
+'((B O) (X K) (D Q) (C P) (N A) (G T) (R E) (T G) (Q D) (F S) (J W) (H U) (V I) (A N) (O B) (E R) (F S) (L Y) (P C) (Z M))
+'The goal of this task is to write a function that takes a string and can determine whether
+'you can spell the word with the given collection of blocks.
+'
+'The rules are simple:
+'1.Once a letter on a block is used that block cannot be used again
+'2.The function should be case-insensitive
+'3. Show your output on this page for the following words:
+' A, BARK, BOOK, TREAT, COMMON, SQUAD, CONFUSE
+'-----------------------------------------------------------------------------
+' G l o b a l C o n s t a n t s
+'
+%Verbose = 0 'make this 1 to have a lot of feedback
+%MAX_BLOCKS = 20 'total number of blocks
+%MAX_SIDES = 2 'total number of sides containing a unique letter per block
+
+%MAX_ASC = 255
+%FALSE = 0 'this is correct because there is ONLY ONE value for FALSE
+%TRUE = (NOT %FALSE) 'this is one of MANY values of TRUE!
+$FLAG_TRUE = "1"
+$FLAG_FALSE = "0"
+'-----------------------------------------------------------------------------
+' G l o b a l V a r i a b l e s
+'
+GLOBAL blk() AS STRING
+'-----------------------------------------------------------------------------
+'i n i t B l o c k s
+'
+' as we will use this array only once we build it each time program is run
+'
+SUB initBlocks
+ LOCAL j AS INTEGER
+ j=1
+ blk(j)="BO"
+ j=j+1
+ blk(j)="XK"
+ j=j+1
+ blk(j)="DQ"
+ j=j+1
+ blk(j)="CP"
+ j=j+1
+ blk(j)="NA"
+ j=j+1
+ blk(j)="GT"
+ j=j+1
+ blk(j)="RE"
+ j=j+1
+ blk(j)="TG"
+ j=j+1
+ blk(j)="QD"
+ j=j+1
+ blk(j)="FS"
+ j=j+1
+ blk(j)="JW"
+ j=j+1
+ blk(j)="HU"
+ j=j+1
+ blk(j)="VI"
+ j=j+1
+ blk(j)="AN"
+ j=j+1
+ blk(j)="OB"
+ j=j+1
+ blk(j)="ER"
+ j=j+1
+ blk(j)="FS"
+ j=j+1
+ blk(j)="LY"
+ j=j+1
+ blk(j)="PC"
+ j=j+1
+ blk(j)="ZM"
+ IF j <> %MAX_BLOCKS THEN
+ STDOUT "initBlocks:Error: j is not same as MAX_BLOCKS!",j,%MAX_BLOCKS
+ END IF
+END SUB
+'-----------------------------------------------------------------------------
+' m a k e W o r d
+'
+FUNCTION makeWord(tryWord AS STRING) AS BYTE
+ LOCAL retTF AS BYTE
+ LOCAL j AS INTEGER
+ LOCAL s AS INTEGER 'which side of block we are looking at
+ LOCAL k AS INTEGER
+ LOCAL c AS STRING 'character in tryWord we are looking for
+
+
+ FOR j = 1 TO LEN(tryWord)
+ c = UCASE$(MID$(tryWord,j,1)) 'character we want to show with block
+
+ retTF = %FALSE 'we assume this will fail
+
+ FOR k = 1 TO %MAX_BLOCKS
+ IF LEN(blk(k)) = %MAX_SIDES THEN
+ FOR s = 1 TO %MAX_SIDES
+ IF c = MID$(blk(k),s,1) THEN
+ retTF = %TRUE 'this block has letter we want
+ blk(k) = "" 'remove this block from further consideration
+ EXIT FOR
+ END IF
+ NEXT s
+ END IF
+ IF retTF THEN EXIT FOR 'can go on to next character in word
+ NEXT k
+ IF ISFALSE retTF THEN EXIT FOR 'if character not found then all is done
+ NEXT j
+
+ FUNCTION = retTF
+END FUNCTION
+'-----------------------------------------------------------------------------
+' P B M A I N
+'
+FUNCTION PBMAIN () AS LONG
+ DIM blk(1 TO %MAX_BLOCKS, 1 TO %MAX_SIDES) AS STRING
+ LOCAL cmdLine AS STRING
+
+ initBlocks 'setup global array of blocks
+
+ cmdLine=COMMAND$
+ IF LEN(cmdLine)= 0 THEN
+ STDOUT "Useage for ABCproblem Version 1.00:"
+ STDOUT ""
+ STDOUT " >ABCproblem tryThisWord"
+ STDOUT ""
+ STDOUT "Where tryThisWord is a word you want to see if"+STR$(%MAX_BLOCKS)+" blocks can make."
+ STDOUT "If word can be made TRUE is returned."
+ STDOUT "Otherwise FALSE is returned."
+ EXIT FUNCTION
+ END IF
+
+ IF INSTR(TRIM$(cmdLine)," ") = 0 THEN
+ IF makeWord(cmdLine) THEN
+ STDOUT "TRUE"
+ ELSE
+ STDOUT "FALSE"
+ END IF
+ ELSE
+ STDOUT "Error:Missing word to try to make with blocks! <" & cmdLine & ">"
+ EXIT FUNCTION
+ END IF
+END FUNCTION
diff --git a/Task/ABC-Problem/Prolog/abc-problem.pro b/Task/ABC-Problem/Prolog/abc-problem.pro
new file mode 100644
index 0000000000..99d543c21b
--- /dev/null
+++ b/Task/ABC-Problem/Prolog/abc-problem.pro
@@ -0,0 +1,22 @@
+abc_problem :-
+ maplist(abc_problem, ['', 'A', bark, bOOk, treAT, 'COmmon', sQuaD, 'CONFUSE']).
+
+
+abc_problem(Word) :-
+ L = [[b,o],[x,k],[d,q],[c,p],[n,a],[g,t],[r,e],[t,g],[q,d],[f,s],
+ [j,w],[h,u],[v,i],[a,n],[o,b],[e,r],[f,s],[l,y],[p,c],[z,m]],
+
+ ( abc_problem(L, Word)
+ -> format('~w OK~n', [Word])
+ ; format('~w KO~n', [Word])).
+
+abc_problem(L, Word) :-
+ atom_chars(Word, C_Words),
+ maplist(downcase_atom, C_Words, D_Words),
+ can_makeword(L, D_Words).
+
+can_makeword(_L, []).
+
+can_makeword(L, [H | T]) :-
+ ( select([H, _], L, L1); select([_, H], L, L1)),
+ can_makeword(L1, T).
diff --git a/Task/ABC-Problem/Python/abc-problem-1.py b/Task/ABC-Problem/Python/abc-problem-1.py
new file mode 100644
index 0000000000..355da9cc93
--- /dev/null
+++ b/Task/ABC-Problem/Python/abc-problem-1.py
@@ -0,0 +1,63 @@
+blocks = [("B", "O"),
+ ("X", "K"),
+ ("D", "Q"),
+ ("C", "P"),
+ ("N", "A"),
+ ("G", "T"),
+ ("R", "E"),
+ ("T", "G"),
+ ("Q", "D"),
+ ("F", "S"),
+ ("J", "W"),
+ ("H", "U"),
+ ("V", "I"),
+ ("A", "N"),
+ ("O", "B"),
+ ("E", "R"),
+ ("F", "S"),
+ ("L", "Y"),
+ ("P", "C"),
+ ("Z", "M")]
+
+
+def can_make_word(word, block_collection=blocks):
+ """
+ Return True if `word` can be made from the blocks in `block_collection`.
+
+ >>> can_make_word("")
+ False
+ >>> can_make_word("a")
+ True
+ >>> can_make_word("bark")
+ True
+ >>> can_make_word("book")
+ False
+ >>> can_make_word("treat")
+ True
+ >>> can_make_word("common")
+ False
+ >>> can_make_word("squad")
+ True
+ >>> can_make_word("coNFused")
+ True
+ """
+ if not word:
+ return False
+
+ blocks_remaining = block_collection[:]
+ for char in word.upper():
+ for block in blocks_remaining:
+ if char in block:
+ blocks_remaining.remove(block)
+ break
+ else:
+ return False
+ return True
+
+
+if __name__ == "__main__":
+ import doctest
+ doctest.testmod()
+ print(", ".join("'%s': %s" % (w, can_make_word(w)) for w in
+ ["", "a", "baRk", "booK", "treat",
+ "COMMON", "squad", "Confused"]))
diff --git a/Task/ABC-Problem/Python/abc-problem-2.py b/Task/ABC-Problem/Python/abc-problem-2.py
new file mode 100644
index 0000000000..6e0a1569b8
--- /dev/null
+++ b/Task/ABC-Problem/Python/abc-problem-2.py
@@ -0,0 +1,25 @@
+BLOCKS = 'BO XK DQ CP NA GT RE TG QD FS JW HU VI AN OB ER FS LY PC ZM'.split()
+
+def _abc(word, blocks):
+ for i, ch in enumerate(word):
+ for blk in (b for b in blocks if ch in b):
+ whatsleft = word[i + 1:]
+ blksleft = blocks[:]
+ blksleft.remove(blk)
+ if not whatsleft:
+ return True, blksleft
+ if not blksleft:
+ return False, blksleft
+ ans, blksleft = _abc(whatsleft, blksleft)
+ if ans:
+ return ans, blksleft
+ else:
+ break
+ return False, blocks
+
+def abc(word, blocks=BLOCKS):
+ return _abc(word.upper(), blocks)[0]
+
+if __name__ == '__main__':
+ for word in [''] + 'A BARK BoOK TrEAT COmMoN SQUAD conFUsE'.split():
+ print('Can we spell %9r? %r' % (word, abc(word)))
diff --git a/Task/ABC-Problem/Python/abc-problem-3.py b/Task/ABC-Problem/Python/abc-problem-3.py
new file mode 100644
index 0000000000..16ba9fdad6
--- /dev/null
+++ b/Task/ABC-Problem/Python/abc-problem-3.py
@@ -0,0 +1,16 @@
+def mkword(w, b):
+ if not w: return []
+
+ c,w = w[0],w[1:]
+ for i in range(len(b)):
+ if c in b[i]:
+ m = mkword(w, b[0:i] + b[i+1:])
+ if m != None: return [b[i]] + m
+
+def abc(w, blk):
+ return mkword(w.upper(), [a.upper() for a in blk])
+
+blocks = 'BO XK DQ CP NA GT RE TG QD FS JW HU VI AN OB ER FS LY PC ZM'.split()
+
+for w in ", A, bark, book, treat, common, SQUAD, conFUsEd".split(', '):
+ print '\'' + w + '\'' + ' ->', abc(w, blocks)
diff --git a/Task/ABC-Problem/R/abc-problem-1.r b/Task/ABC-Problem/R/abc-problem-1.r
new file mode 100644
index 0000000000..e20e0680eb
--- /dev/null
+++ b/Task/ABC-Problem/R/abc-problem-1.r
@@ -0,0 +1,43 @@
+blocks <- rbind(c("B","O"),
+ c("X","K"),
+ c("D","Q"),
+ c("C","P"),
+ c("N","A"),
+ c("G","T"),
+ c("R","E"),
+ c("T","G"),
+ c("Q","D"),
+ c("F","S"),
+ c("J","W"),
+ c("H","U"),
+ c("V","I"),
+ c("A","N"),
+ c("O","B"),
+ c("E","R"),
+ c("F","S"),
+ c("L","Y"),
+ c("P","C"),
+ c("Z","M"))
+
+canMake <- function(x) {
+ x <- toupper(x)
+ used <- rep(FALSE, dim(blocks)[1L])
+ charList <- strsplit(x, character(0))
+ tryChars <- function(chars, pos, used, inUse=NA) {
+ if (pos > length(chars)) {
+ TRUE
+ } else {
+ used[inUse] <- TRUE
+ possible <- which(blocks == chars[pos] & !used, arr.ind=TRUE)[, 1L]
+ any(vapply(possible, function(possBlock) tryChars(chars, pos + 1, used, possBlock), logical(1)))
+ }
+ }
+ setNames(vapply(charList, tryChars, logical(1), 1L, used), x)
+}
+canMake(c("A",
+ "BARK",
+ "BOOK",
+ "TREAT",
+ "COMMON",
+ "SQUAD",
+ "CONFUSE"))
diff --git a/Task/ABC-Problem/R/abc-problem-2.r b/Task/ABC-Problem/R/abc-problem-2.r
new file mode 100644
index 0000000000..92e478a134
--- /dev/null
+++ b/Task/ABC-Problem/R/abc-problem-2.r
@@ -0,0 +1,21 @@
+canMakeNoRecursion <- function(x) {
+ x <- toupper(x)
+ charList <- strsplit(x, character(0))
+ getCombos <- function(chars) {
+ charBlocks <- data.matrix(expand.grid(lapply(chars, function(char) which(blocks == char, arr.ind=TRUE)[, 1L])))
+ charBlocks <- charBlocks[!apply(charBlocks, 1, function(row) any(duplicated(row))), , drop=FALSE]
+ if (dim(charBlocks)[1L] > 0L) {
+ t(apply(charBlocks, 1, function(row) apply(blocks[row, , drop=FALSE], 1, paste, collapse="")))
+ } else {
+ character(0)
+ }
+ }
+ setNames(lapply(charList, getCombos), x)
+}
+canMakeNoRecursion(c("A",
+ "BARK",
+ "BOOK",
+ "TREAT",
+ "COMMON",
+ "SQUAD",
+ "CONFUSE"))
diff --git a/Task/ABC-Problem/README b/Task/ABC-Problem/README
new file mode 100644
index 0000000000..fbb90afaf2
--- /dev/null
+++ b/Task/ABC-Problem/README
@@ -0,0 +1 @@
+Data source: http://rosettacode.org/wiki/ABC_Problem
diff --git a/Task/ABC-Problem/REXX/abc-problem-1.rexx b/Task/ABC-Problem/REXX/abc-problem-1.rexx
new file mode 100644
index 0000000000..4e78f30afe
--- /dev/null
+++ b/Task/ABC-Problem/REXX/abc-problem-1.rexx
@@ -0,0 +1,24 @@
+/*REXX pgm checks if a word list can be spelt from a pool of toy blocks.*/
+list = 'A bark bOOk treat common squaD conFuse' /*words can be any case.*/
+blocks = 'BO XK DQ CP NA GT RE TG QD FS JW HU VI AN OB ER FS LY PC ZM'
+ do k=1 for words(list) /*traipse through list of words. */
+ call spell word(list,k) /*show if word be spelt (or not).*/
+ end /*k*/ /* [↑] tests each word in list. */
+exit /*stick a fork in it, we're done.*/
+/*──────────────────────────────────SPELL subroutine────────────────────*/
+spell: procedure expose blocks; parse arg ox . 1 x . /*get word to spell*/
+z=blocks; upper x z; oz=z; p.=0; L=length(x) /*uppercase the blocks. */
+ /* [↓] try to spell it.*/
+ do try=1 for L; z=oz /*use a fresh copy of Z.*/
+ do n=1 for L; y=substr(x,n,1) /*attempt another letter*/
+ p.n=pos(y,z,1+p.n); if p.n==0 then iterate try /*¬ found? Try again.*/
+ z=overlay(' ',z,p.n) /*mutate block──► onesy.*/
+ do k=1 for words(blocks) /*scrub block pool (¬1s)*/
+ if length(word(z,k))==1 then z=delword(z,k,1) /*1 char? Delete.*/
+ end /*k*/ /* [↑] elide any onesy.*/
+ if n==L then leave try /*the last letter spelt?*/
+ end /*n*/ /* [↑] end of an attempt*/
+ end /*try*/ /* [↑] end TRY permute.*/
+
+say right(ox,30) right(word("can't can", (n==L)+1), 6) 'be spelt.'
+return n==L /*also, return the flag.*/
diff --git a/Task/ABC-Problem/REXX/abc-problem-2.rexx b/Task/ABC-Problem/REXX/abc-problem-2.rexx
new file mode 100644
index 0000000000..779f1645f2
--- /dev/null
+++ b/Task/ABC-Problem/REXX/abc-problem-2.rexx
@@ -0,0 +1,103 @@
+/* REXX ---------------------------------------------------------------
+* 10.01.2014 Walter Pachl counts the number of possible ways
+* 12.01.2014 corrected date and output
+*--------------------------------------------------------------------*/
+show=(arg(1)<>'')
+blocks = 'BO XK DQ CP NA GT RE TG QD FS JW HU VI AN OB ER FS LY PC ZM'
+list = '$ A baRk bOOk trEat coMMon squaD conFuse'
+list=translate(list)
+Do i=1 To words(blocks)
+ blkn.i=word(blocks,i)'-'i
+ blk.i=word(blocks,i)
+ End
+w.=''
+wlen=0
+Do i=1 To words(list)
+ w.i=word(list,i)
+ wlen=max(wlen,length(w.i))
+ End
+Do wi=0 To words(list)
+ word = w.wi
+ ways=0
+ poss.=0
+ lw=length(word)
+ cannot=0
+ Do i=1 To lw /* loop over the characters */
+ c=substr(word,i,1) /* the current character */
+ Do j=1 To words(blocks) /* loop over blocks */
+ blk=word(blocks,j)
+ If pos(c,blk)>0 Then Do /* block can be used in this position */
+ z=poss.i.0+1
+ poss.i.z=j
+ poss.i.0=z /* number of possible blocks for pos i */
+ End
+ End
+ If poss.i.0=0 Then Do
+ cannot=1
+ Leave i
+ End
+ End
+
+ If cannot=0 Then Do /* no prohibitive character */
+ s.=0
+ Do j=1 To poss.1.0 /* build possible strings for char 1 */
+ z=s.1.0+1
+ s.1.z=poss.1.j
+ s.1.0=z
+ End
+ Do i=2 To lw /* build possible strings for chars 1 to i */
+ ii=i-1
+ Do j=1 To poss.i.0
+ Do k=1 To s.ii.0
+ z=s.i.0+1
+ s.i.z=s.ii.k poss.i.j
+ s.i.0=z
+ End
+ End
+ End
+ Do p=1 To s.lw.0 /* loop through all possible strings */
+ v=valid(s.lw.p) /* test if the string is valid*/
+ If v Then Do /* it is */
+ ways=ways+1 /* increment number of ways */
+ way.ways='' /* and store the string's blocks */
+ Do ii=1 To lw
+ z=word(s.lw.p,ii)
+ way.ways=way.ways blk.z
+ End
+ End
+ End
+ End
+/*---------------------------------------------------------------------
+* now show the result
+*--------------------------------------------------------------------*/
+ ol=left(''''word'''',wlen+2)
+ Select
+ When ways=0 Then
+ ol=ol 'cannot be spelt'
+ When ways=1 Then
+ ol=ol 'can be spelt'
+ Otherwise
+ ol=ol 'can be spelt in' ways 'ways'
+ End
+ Say ol'.'
+ If show Then Do
+ Do wj=1 To ways
+ Say copies(' ',10) way.wj
+ End
+ End
+ End
+Exit
+
+valid: Procedure
+/*---------------------------------------------------------------------
+* Check if the same block is used more than once -> 0
+* Else: the combination is valid
+*--------------------------------------------------------------------*/
+ Parse Arg list
+ used.=0
+ Do i=1 To words(list)
+ w=word(list,i)
+ If used.w Then Return 0
+ used.w=1
+ End
+ Return 1
diff --git a/Task/ABC-Problem/Racket/abc-problem.rkt b/Task/ABC-Problem/Racket/abc-problem.rkt
new file mode 100644
index 0000000000..94ace663ef
--- /dev/null
+++ b/Task/ABC-Problem/Racket/abc-problem.rkt
@@ -0,0 +1,43 @@
+#lang racket
+(define block-strings
+ (list "BO" "XK" "DQ" "CP" "NA"
+ "GT" "RE" "TG" "QD" "FS"
+ "JW" "HU" "VI" "AN" "OB"
+ "ER" "FS" "LY" "PC" "ZM"))
+(define BLOCKS (map string->list block-strings))
+
+(define (can-make-word? w)
+ (define (usable-block blocks word-char)
+ (for/first ((b (in-list blocks)) #:when (memf (curry char-ci=? word-char) b)) b))
+
+ (define (inner word-chars blocks tried-blocks)
+ (cond
+ [(null? word-chars) #t]
+ [(usable-block blocks (car word-chars))
+ =>
+ (lambda (b)
+ (or
+ (inner (cdr word-chars) (append tried-blocks (remove b blocks)) null)
+ (inner word-chars (remove b blocks) (cons b tried-blocks))))]
+ [else #f]))
+ (inner (string->list w) BLOCKS null))
+
+(define WORD-LIST '("" "A" "BARK" "BOOK" "TREAT" "COMMON" "SQUAD" "CONFUSE"))
+(define (report-word w)
+ (printf "Can we make: ~a? ~a~%"
+ (~s w #:min-width 9)
+ (if (can-make-word? w) "yes" "no")))
+
+(module+ main
+ (for-each report-word WORD-LIST))
+
+(module+ test
+ (require rackunit)
+ (check-true (can-make-word? ""))
+ (check-true (can-make-word? "A"))
+ (check-true (can-make-word? "BARK"))
+ (check-false (can-make-word? "BOOK"))
+ (check-true (can-make-word? "TREAT"))
+ (check-false (can-make-word? "COMMON"))
+ (check-true (can-make-word? "SQUAD"))
+ (check-true (can-make-word? "CONFUSE")))
diff --git a/Task/ABC-Problem/RapidQ/abc-problem.rapidq b/Task/ABC-Problem/RapidQ/abc-problem.rapidq
new file mode 100644
index 0000000000..3a6e61650a
--- /dev/null
+++ b/Task/ABC-Problem/RapidQ/abc-problem.rapidq
@@ -0,0 +1,26 @@
+dim Blocks as string
+dim InWord as string
+
+Function CanMakeWord (FInWord as string, FBlocks as string) as integer
+ dim WIndex as integer, BIndex as integer
+
+ FBlocks = UCase$(FBlocks) - " " - ","
+ FInWord = UCase$(FInWord)
+
+ for WIndex = 1 to len(FInWord)
+ BIndex = instr(FBlocks, FInWord[WIndex])
+
+ if BIndex then
+ FBlocks = Replace$(FBlocks,"**",iif(BIndex mod 2,BIndex,BIndex-1))
+ else
+ Result = 0
+ exit function
+ end if
+ next
+
+ Result = 1
+end function
+
+InWord = "Confuse"
+Blocks = "BO, XK, DQ, CP, NA, GT, RE, TG, QD, FS, JW, HU, VI, AN, OB, ER, FS, LY, PC, ZM"
+showmessage "Can make: " + InWord + " = " + iif(CanMakeWord(InWord, Blocks), "True", "False")
diff --git a/Task/ABC-Problem/Ruby/abc-problem.rb b/Task/ABC-Problem/Ruby/abc-problem.rb
new file mode 100644
index 0000000000..08fe02a3c6
--- /dev/null
+++ b/Task/ABC-Problem/Ruby/abc-problem.rb
@@ -0,0 +1,7 @@
+words = %w(A BaRK BOoK tREaT COmMOn SqUAD CoNfuSE) << ""
+
+words.each do |word|
+ blocks = "BO XK DQ CP NA GT RE TG QD FS JW HU VI AN OB ER FS LY PC ZM"
+ res = word.each_char.all?{|c| blocks.sub!(/\w?#{c}\w?/i, "")} #regexps can be interpolated like strings
+ puts "#{word.inspect}: #{res}"
+end
diff --git a/Task/ABC-Problem/Rust/abc-problem.rust b/Task/ABC-Problem/Rust/abc-problem.rust
new file mode 100644
index 0000000000..7ae452408a
--- /dev/null
+++ b/Task/ABC-Problem/Rust/abc-problem.rust
@@ -0,0 +1,33 @@
+#![feature(core, unicode)]
+extern crate core;
+extern crate unicode;
+
+use core::iter::repeat;
+use core::str::StrExt;
+use unicode::char::CharExt;
+
+fn rec_can_make_word(index: usize, word: &str, blocks: &[&str], used: &mut[bool]) -> bool {
+ let c = word.char_at(index).to_uppercase();
+ for i in range(0, blocks.len()) {
+ if !used[i] && blocks[i].chars().any(|s| s == c) {
+ used[i] = true;
+ if index == 0 || rec_can_make_word(index - 1, word, blocks, used) {
+ return true;
+ }
+ used[i] = false;
+ }
+ }
+ false
+}
+
+fn can_make_word(word: &str, blocks: &[&str]) -> bool {
+ return rec_can_make_word(word.char_len() - 1, word, blocks, repeat(false).take(blocks.len()).collect::>().as_mut_slice());
+}
+
+fn main() {
+ let blocks = [("BO"), ("XK"), ("DQ"), ("CP"), ("NA"), ("GT"), ("RE"), ("TG"), ("QD"), ("FS"), ("JW"), ("HU"), ("VI"), ("AN"), ("OB"), ("ER"), ("FS"), ("LY"), ("PC"), ("ZM")];
+ let words = ["A", "BARK", "BOOK", "TREAT", "COMMON", "SQUAD", "CONFUSE"];
+ for word in words.iter() {
+ println!("{} -> {}", word, can_make_word(word.as_slice(), blocks.as_slice()))
+ }
+}
diff --git a/Task/ABC-Problem/Scala/abc-problem.scala b/Task/ABC-Problem/Scala/abc-problem.scala
new file mode 100644
index 0000000000..09af8540aa
--- /dev/null
+++ b/Task/ABC-Problem/Scala/abc-problem.scala
@@ -0,0 +1,50 @@
+object AbcBlocks extends App {
+
+ protected class Block(face1: Char, face2: Char) {
+
+ def isFacedWith(that: Char) = { that == face1 || that == face2 }
+ override def toString() = face1.toString + face2
+ }
+ protected object Block {
+ def apply(faces: String) = new Block(faces.head, faces.last)
+ }
+
+ type word = Seq[Block]
+
+ private val blocks = List(Block("BO"), Block("XK"), Block("DQ"), Block("CP"), Block("NA"),
+ Block("GT"), Block("RE"), Block("TG"), Block("QD"), Block("FS"),
+ Block("JW"), Block("HU"), Block("VI"), Block("AN"), Block("OB"),
+ Block("ER"), Block("FS"), Block("LY"), Block("PC"), Block("ZM"))
+
+ private def isMakeable(word: String, blocks: word) = {
+
+ def getTheBlocks(word: String, blocks: word) = {
+
+ def inner(word: String, toCompare: word, rest: word, accu: word): word = {
+ if (word.isEmpty || rest.isEmpty || toCompare.isEmpty) accu
+ else if (toCompare.head.isFacedWith(word.head)) {
+ val restant = rest diff List(toCompare.head)
+ inner(word.tail, restant, restant, accu :+ toCompare.head)
+ } else inner(word, toCompare.tail, rest, accu)
+ }
+ inner(word, blocks, blocks, Nil)
+ }
+
+ word.lengthCompare(getTheBlocks(word, blocks).size) == 0
+ }
+
+ val words = List("A", "BARK", "BOOK", "TREAT", "COMMON", "SQUAD", "CONFUSED", "ANBOCPDQERSFTGUVWXLZ")
+ // Automatic tests
+ assert(isMakeable(words(0), blocks))
+ assert(isMakeable(words(1), blocks))
+ assert(!isMakeable(words(2), blocks)) // BOOK not
+ assert(isMakeable(words(3), blocks))
+ assert(!isMakeable(words(4), blocks)) // COMMON not
+ assert(isMakeable(words(5), blocks))
+ assert(isMakeable(words(6), blocks))
+ assert(isMakeable(words(7), blocks))
+
+ //words(7).mkString.permutations.foreach(s => assert(isMakeable(s, blocks)))
+
+ words.foreach(w => println(s"$w can${if (isMakeable(w, blocks)) " " else "not "}be made."))
+}
diff --git a/Task/ABC-Problem/Seed7/abc-problem.seed7 b/Task/ABC-Problem/Seed7/abc-problem.seed7
new file mode 100644
index 0000000000..36ab406bda
--- /dev/null
+++ b/Task/ABC-Problem/Seed7/abc-problem.seed7
@@ -0,0 +1,34 @@
+$ include "seed7_05.s7i";
+
+const func boolean: canMakeWords (in array string: blocks, in string: word) is func
+ result
+ var boolean: okay is FALSE;
+ local
+ var integer: index is 1;
+ begin
+ if word = "" then
+ okay := TRUE;
+ elsif length(blocks) <> 0 then
+ while index <= length(blocks) and not okay do
+ if blocks[index][1] = word[1] or blocks[index][2] = word[1] then
+ okay := canMakeWords(blocks[.. pred(index)] & blocks[succ(index) ..], word[2 ..]);
+ end if;
+ incr(index);
+ end while;
+ end if;
+ end func;
+
+const array string: blocks is [] ("BO", "XK", "DQ", "CP", "NA", "GT", "RE", "TG", "QD", "FS",
+ "JW", "HU", "VI", "AN", "OB", "ER", "FS", "LY", "PC", "ZM");
+
+const func boolean: canMakeWords (in string: word) is
+ return canMakeWords(blocks, upper(word));
+
+const proc: main is func
+ local
+ var string: word is "";
+ begin
+ for word range [] ("", "A", "BARK", "BOOK", "TREAT", "COMMON", "SQUAD", "Confuse") do
+ writeln(word rpad 10 <& canMakeWords(word));
+ end for;
+ end func;
diff --git a/Task/ABC-Problem/Smalltalk/abc-problem.st b/Task/ABC-Problem/Smalltalk/abc-problem.st
new file mode 100644
index 0000000000..d6a10f2fbe
--- /dev/null
+++ b/Task/ABC-Problem/Smalltalk/abc-problem.st
@@ -0,0 +1,21 @@
+ABCPuzzle>>test
+ #('A' 'BARK' 'BOOK' 'TreaT' 'COMMON' 'sQUAD' 'CONFuSE') do: [ :each |
+ Transcript crShow: each, ': ', (self solveFor: each) asString ]
+
+ABCPuzzle>>solveFor: letters
+ | blocks |
+ blocks := #('BO' 'XK' 'DQ' 'CP' 'NA' 'GT' 'RE' 'TG' 'QD' 'FS' 'JW' 'HU' 'VI' 'AN' 'OB' 'ER' 'FS' 'LY' 'PC' 'ZM').
+ ^ self solveFor: letters asUppercase with: blocks asOrderedCollection
+
+ABCPuzzle>>solveFor: letters with: blocks
+ | l ldash matches |
+ letters isEmpty ifTrue: [ ^ true ].
+ l := letters first.
+ ldash := letters allButFirst.
+ matches := blocks select: [ :b | b includes: l ].
+ matches isEmpty ifTrue: [ ^ false ].
+ matches do: [ :m | | bdash |
+ bdash := blocks copy.
+ bdash remove: m.
+ (self solveFor: ldash with: bdash) ifTrue: [ ^ true ] ].
+ ^ false
diff --git a/Task/ABC-Problem/TUSCRIPT/abc-problem.tu b/Task/ABC-Problem/TUSCRIPT/abc-problem.tu
new file mode 100644
index 0000000000..a380b44dd2
--- /dev/null
+++ b/Task/ABC-Problem/TUSCRIPT/abc-problem.tu
@@ -0,0 +1,18 @@
+set words = "A'BARK'BOOK'TREAT'COMMON'SQUAD'CONFUSE"
+set result = *
+loop word = words
+ set blocks = "BO'XK'DQ'CP'NA'GT'RE'TG'QD'FS'JW'HU'VI'AN'OB'ER'FS'LY'PC'ZM"
+ set wordx = split (word, |"~~")
+ set cond = "true"
+ loop char = wordx
+ set n = filter_index (blocks, "~*{char}*~", -)
+ if (n.eq."") then
+ set cond = "false"
+ exit
+ endif
+ set n2 = select (n, 1)
+ set n3 = select (blocks, #n2, blocks)
+ endloop
+ set out = concat (word, " ", cond)
+ set result = append (result, out)
+endloop
diff --git a/Task/ABC-Problem/TXR/abc-problem.txr b/Task/ABC-Problem/TXR/abc-problem.txr
new file mode 100644
index 0000000000..0083bbb8c9
--- /dev/null
+++ b/Task/ABC-Problem/TXR/abc-problem.txr
@@ -0,0 +1,47 @@
+@(do
+ (defvar blocks '((B O) (X K) (D Q) (C P) (N A) (G T) (R E) (T G)
+ (Q D) (F S) (J W) (H U) (V I) (A N) (O B) (E R)
+ (F S) (L Y) (P C) (Z M)))
+
+ ;; Define and build hash which maps each letter that occurs in blocks
+ ;; to a list of the blocks in which that letter occurs.
+
+ (defvar alpha2blocks [hash-uni [group-by first blocks]
+ [group-by second blocks]
+ append])
+
+ ;; convert, e.g. "abc" -> (A B C)
+ ;; intern -- convert a string to an interned symbol "A" -> A
+ ;; tuples -- turn string into 1-element tuples: "ABC" -> ("A" "B" "C")
+ ;; square brackets around mapcar -- Lisp-1 style evaluation, allowing
+ ;; the intern function binding to be treated as a variable binding.
+
+ (defun string-to-syms (str)
+ [mapcar intern (tuples 1 (upcase-str str))])
+
+ ;; Recursive part of algorithm working purely with Lisp symbols.
+ ;; alpha -- single symbol denoting a letter
+ ;; [alpha2blocks alpha] -- look up list of blocks for given letter
+ ;; (memq item list) -- is item a member of list, under eq equality?
+ ;; (remq item list) -- remove items from list which are eq to item.
+
+ (defun can-make-word-guts (letters blocks)
+ (cond
+ ((null letters) t)
+ ((null blocks) nil)
+ (t (let ((alpha (first letters)))
+ (each ((bl [alpha2blocks alpha]))
+ (if (and (memq bl blocks)
+ (can-make-word-guts (rest letters)
+ (remq bl blocks)))
+ (return-from can-make-word-guts t)))))))
+
+ (defun can-make-word (str)
+ (can-make-word-guts (string-to-syms str) blocks)))
+@(repeat)
+@w
+@(output)
+>>> can_make_word("@(upcase-str w)")
+@(if (can-make-word w) "True" "False")
+@(end)
+@(end)
diff --git a/Task/ABC-Problem/Tcl/abc-problem.tcl b/Task/ABC-Problem/Tcl/abc-problem.tcl
new file mode 100644
index 0000000000..d3f4b8f321
--- /dev/null
+++ b/Task/ABC-Problem/Tcl/abc-problem.tcl
@@ -0,0 +1,21 @@
+package require Tcl 8.6
+
+proc abc {word {blocks {BO XK DQ CP NA GT RE TG QD FS JW HU VI AN OB ER FS LY PC ZM}}} {
+ set abc {{letters blocks abc} {
+ set rest [lassign $letters ch]
+ set i 0
+ foreach blk $blocks {
+ if {$ch in $blk && (![llength $rest]
+ || [apply $abc $rest [lreplace $blocks $i $i] $abc])} {
+ return true
+ }
+ incr i
+ }
+ return false
+ }}
+ return [apply $abc [split $word ""] [lmap b $blocks {split $b ""}] $abc]
+}
+
+foreach word {"" A BARK BOOK TREAT COMMON SQUAD CONFUSE} {
+ puts [format "Can we spell %9s? %s" '$word' [abc $word]]
+}
diff --git a/Task/ABC-Problem/UNIX-Shell/abc-problem.sh b/Task/ABC-Problem/UNIX-Shell/abc-problem.sh
new file mode 100644
index 0000000000..c683d77800
--- /dev/null
+++ b/Task/ABC-Problem/UNIX-Shell/abc-problem.sh
@@ -0,0 +1,39 @@
+can_build_word() {
+ if [[ $1 ]]; then
+ can_build_word_rec "$1" BO XK DQ CP NA GT RE TG QD FS JW HU VI AN OB ER FS LY PC ZM
+ else
+ return 1
+ fi
+}
+
+can_build_word_rec() {
+ [[ -z $1 ]] && return 0
+
+ local -u word=$1 # uppercase the first parameter
+ shift
+ local blocks=("$@")
+
+ # see if we have a block for the first letter
+ local letter=${word:0:1} indices=() i
+ for (( i=0; i<${#blocks[@]}; i++ )); do
+ if [[ ${blocks[i]} == *$letter* ]]; then
+ indices+=($i)
+ fi
+ done
+ (( ${#indices[@]} == 0 )) && return 1
+
+ local tmp
+ for i in ${indices[@]}; do
+ tmp=( "${blocks[@]}" )
+ unset "tmp[$i]"
+ can_build_word_rec "${word:1}" "${tmp[@]}" && return 0
+ done
+
+ return 1
+}
+
+words=( "" A BARK Book treat COMMON Squad confuse )
+for word in "${words[@]}"; do
+ can_build_word "$word" "${blocks[@]}" && ans=yes || ans=no
+ printf "%s\t%s\n" "$word" $ans
+done
diff --git a/Task/AKS-test-for-primes/00DESCRIPTION b/Task/AKS-test-for-primes/00DESCRIPTION
new file mode 100644
index 0000000000..9b1322f542
--- /dev/null
+++ b/Task/AKS-test-for-primes/00DESCRIPTION
@@ -0,0 +1,30 @@
+The [http://www.cse.iitk.ac.in/users/manindra/algebra/primality_v6.pdf AKS algorithm] for testing whether a number is prime is a
+polynomial-time algorithm based on an elementary theorem about Pascal triangles.
+
+The theorem on which the test is based can be stated as follows:
+
+* a number is prime if and only if all the coefficients of the polynomial expansion of
+:
+are divisible by .
+
+For example, trying :
+
+:
+:And all the coefficients are divisible by 3 so 3 is prime.
+
+;The task:
+# Create a function/subroutine/method that given p generates the coefficients of the expanded polynomial representation of .
+# Use the function to show here the polynomial expansions of for p in the range 0 to at least 7, inclusive.
+# Use the previous function in creating another function that when given p returns whether p is prime using the theorem.
+# Use your test to generate a list of all primes ''under'' 35.
+# '''As a stretch goal''', generate all primes under 50 (Needs greater than 31 bit integers).
+
+;Note:
+The task given here is related to the elementary theorem, not the actual AKS algorithm. Using the elementary theorem directly as a way of testing for primes is interesting as an exercise but impractical.
+
+;References:
+* [https://en.wikipedia.org/wiki/AKS_primality_test Agrawal-Kayal-Saxena (AKS) primality test] (Wikipedia)
+* [http://www.youtube.com/watch?v=HvMSRWTE2mI Fool-Proof Test for Primes] - Numberphile (Video). The accuracy of this video is disputed -- at best it is an oversimplification.
diff --git a/Task/AKS-test-for-primes/00META.yaml b/Task/AKS-test-for-primes/00META.yaml
new file mode 100644
index 0000000000..06b4f1f0c9
--- /dev/null
+++ b/Task/AKS-test-for-primes/00META.yaml
@@ -0,0 +1,2 @@
+---
+note: Prime Numbers
diff --git a/Task/AKS-test-for-primes/AutoHotkey/aks-test-for-primes.ahk b/Task/AKS-test-for-primes/AutoHotkey/aks-test-for-primes.ahk
new file mode 100644
index 0000000000..9a9d1104d0
--- /dev/null
+++ b/Task/AKS-test-for-primes/AutoHotkey/aks-test-for-primes.ahk
@@ -0,0 +1,53 @@
+; 1. Create a function/subroutine/method that given p generates the coefficients of the expanded polynomial representation of (x-1)^p.
+; Function modified from http://rosettacode.org/wiki/Pascal%27s_triangle#AutoHotkey
+pascalstriangle(n=8) ; n rows of Pascal's triangle
+{
+ p := Object(), z:=Object()
+ Loop, % n
+ Loop, % row := A_Index
+ col := A_Index
+ , p[row, col] := row = 1 and col = 1
+ ? 1
+ : (p[row-1, col-1] = "" ; math operations on blanks return blanks; I want to assume zero
+ ? 0
+ : p[row-1, col-1])
+ - (p[row-1, col] = ""
+ ? 0
+ : p[row-1, col])
+ Return p
+}
+
+; 2. Use the function to show here the polynomial expansions of p for p in the range 0 to at least 7, inclusive.
+For k, v in pascalstriangle()
+{
+ s .= "`n(x-1)^" k-1 . "="
+ For k, w in v
+ s .= "+" w "x^" k-1
+}
+s := RegExReplace(s, "\+-", "-")
+s := RegExReplace(s, "x\^0", "")
+s := RegExReplace(s, "x\^1", "x")
+Msgbox % clipboard := s
+
+; 3. Use the previous function in creating another function that when given p returns whether p is prime using the AKS test.
+aks(n)
+{
+ isnotprime := False
+ For k, v in pascalstriangle(n+1)[n+1]
+ (k != 1 and k != n+1) ? isnotprime |= !(v // n = v / n) ; if any is not divisible, returns true
+ Return !isnotprime
+}
+
+; 4. Use your AKS test to generate a list of all primes under 35.
+i := 49
+p := pascalstriangle(i+1)
+Loop, % i
+{
+ n := A_Index
+ isnotprime := False
+ For k, v in p[n+1]
+ (k != 1 and k != n+1) ? isnotprime |= !(v // n = v / n) ; if any is not divisible, returns true
+ t .= isnotprime ? "" : A_Index " "
+}
+Msgbox % t
+Return
diff --git a/Task/AKS-test-for-primes/Bracmat/aks-test-for-primes-1.bracmat b/Task/AKS-test-for-primes/Bracmat/aks-test-for-primes-1.bracmat
new file mode 100644
index 0000000000..7f56cc4900
--- /dev/null
+++ b/Task/AKS-test-for-primes/Bracmat/aks-test-for-primes-1.bracmat
@@ -0,0 +1,27 @@
+( (forceExpansion=.1+!arg+-1)
+& (expandx-1P=.forceExpansion$((x+-1)^!arg))
+& ( isPrime
+ =
+ . forceExpansion
+ $ (!arg^-1*(expandx-1P$!arg+-1*(x^!arg+-1)))
+ : ?+/*?+?
+ & ~`
+ |
+ )
+& out$"Polynomial representations of (x-1)^p for p <= 7 :"
+& -1:?n
+& whl
+ ' ( 1+!n:~>7:?n
+ & out$(str$("n=" !n ":") expandx-1P$!n)
+ )
+& 1:?n
+& :?primes
+& whl
+ ' ( 1+!n:~>50:?n
+ & ( isPrime$!n&!primes !n:?primes
+ |
+ )
+ )
+& out$"2 <= Primes <= 50:"
+& out$!primes
+);
diff --git a/Task/AKS-test-for-primes/Bracmat/aks-test-for-primes-2.bracmat b/Task/AKS-test-for-primes/Bracmat/aks-test-for-primes-2.bracmat
new file mode 100644
index 0000000000..7ec0df5629
--- /dev/null
+++ b/Task/AKS-test-for-primes/Bracmat/aks-test-for-primes-2.bracmat
@@ -0,0 +1,9 @@
+( out$"Primes between 980 and 1000, short version:"
+& 980:?n
+& whl
+ ' ( !n+1:<1000:?n
+ & ( 1+!n^-1*((x+-1)^!n+-1*(x^!n+-1))+-1:?+/*?+?
+ | out$!n
+ )
+ )
+);
diff --git a/Task/AKS-test-for-primes/C/aks-test-for-primes.c b/Task/AKS-test-for-primes/C/aks-test-for-primes.c
new file mode 100644
index 0000000000..cf35e19a90
--- /dev/null
+++ b/Task/AKS-test-for-primes/C/aks-test-for-primes.c
@@ -0,0 +1,51 @@
+#include
+#include
+
+long long c[100];
+
+void coef(int n)
+{
+ int i, j;
+
+ if (n < 0 || n > 63) abort(); // gracefully deal with range issue
+
+ for (c[i=0] = 1; i < n; c[0] = -c[0], i++)
+ for (c[1 + (j=i)] = 1; j > 0; j--)
+ c[j] = c[j-1] - c[j];
+}
+
+int is_prime(int n)
+{
+ int i;
+
+ coef(n);
+ c[0] += 1, c[i=n] -= 1;
+ while (i-- && !(c[i] % n));
+
+ return i < 0;
+}
+
+void show(int n)
+{
+ do printf("%+lldx^%d", c[n], n); while (n--);
+}
+
+int main(void)
+{
+ int n;
+
+ for (n = 0; n < 10; n++) {
+ coef(n);
+ printf("(x-1)^%d = ", n);
+ show(n);
+ putchar('\n');
+ }
+
+ printf("\nprimes (never mind the 1):");
+ for (n = 1; n <= 63; n++)
+ if (is_prime(n))
+ printf(" %d", n);
+
+ putchar('\n');
+ return 0;
+}
diff --git a/Task/AKS-test-for-primes/Clojure/aks-test-for-primes.clj b/Task/AKS-test-for-primes/Clojure/aks-test-for-primes.clj
new file mode 100644
index 0000000000..377a586076
--- /dev/null
+++ b/Task/AKS-test-for-primes/Clojure/aks-test-for-primes.clj
@@ -0,0 +1,18 @@
+(defn c
+ "kth coefficient of (x - 1)^n"
+ [n k]
+ (/ (apply *' (range n (- n k) -1))
+ (apply *' (range k 0 -1))
+ (if (and (even? k) (< k n)) -1 1)))
+
+(defn cs
+ "coefficient series for (x - 1)^n, k=[0..n]"
+ [n]
+ (map #(c n %) (range (inc n))))
+
+(defn aks? [p] (->> (cs p) rest butlast (every? #(-> % (mod p) zero?))))
+
+(println "coefficient series n (k[0] .. k[n])")
+(doseq [n (range 10)] (println n (cs n)))
+(println)
+(println "primes < 50 per AKS:" (filter aks? (range 2 50)))
diff --git a/Task/AKS-test-for-primes/CoffeeScript/aks-test-for-primes.coffee b/Task/AKS-test-for-primes/CoffeeScript/aks-test-for-primes.coffee
new file mode 100644
index 0000000000..52fb636e4b
--- /dev/null
+++ b/Task/AKS-test-for-primes/CoffeeScript/aks-test-for-primes.coffee
@@ -0,0 +1,39 @@
+pascal = () ->
+ a = []
+ return () ->
+ if a.length is 0 then a = [1]
+ else
+ b = (a[i] + a[i+1] for i in [0 ... a.length - 1])
+ a = [1].concat(b).concat [1]
+
+show = (a) ->
+ show_x = (e) ->
+ switch e
+ when 0 then ""
+ when 1 then "x"
+ else "x^#{e}"
+
+ degree = a.length - 1
+ str = "(x - 1)^#{degree} ="
+ sgn = 1
+
+ for i in [0...a.length]
+ str += ' ' + (if sgn > 0 then "+" else "-") + ' ' + a[i] + show_x(degree - i)
+ sgn = -sgn
+
+ return str
+
+primerow = (row) ->
+ degree = row.length - 1
+ row[1 ... degree].every (x) -> x % degree is 0
+
+p = pascal()
+console.log show p() for i in [0..7]
+
+p = pascal()
+p(); p() # skip 0 and 1
+
+primes = (i+1 for i in [1..49] when primerow p())
+
+console.log ""
+console.log "The primes upto 50 are: #{primes}"
diff --git a/Task/AKS-test-for-primes/Common-Lisp/aks-test-for-primes.lisp b/Task/AKS-test-for-primes/Common-Lisp/aks-test-for-primes.lisp
new file mode 100644
index 0000000000..6ccf10dcdc
--- /dev/null
+++ b/Task/AKS-test-for-primes/Common-Lisp/aks-test-for-primes.lisp
@@ -0,0 +1,36 @@
+(defun coefficients (p)
+ (cond
+ ((= p 0) #(1))
+
+ (t (loop for i from 1 upto p
+ for result = #(1 -1) then (map 'vector
+ #'-
+ (concatenate 'vector result #(0))
+ (concatenate 'vector #(0) result))
+ finally (return result)))))
+
+(defun primep (p)
+ (cond
+ ((< p 2) nil)
+
+ (t (let ((c (coefficients p)))
+ (decf (elt c 0))
+ (loop for i from 0 upto (/ (length c) 2)
+ for x across c
+ never (/= (mod x p) 0))))))
+
+(defun main ()
+ (format t "# p: (x-1)^p for small p:~%")
+ (loop for p from 0 upto 7
+ do (format t "~D: " p)
+ (loop for i from 0
+ for x across (reverse (coefficients p))
+ do (when (>= x 0) (format t "+"))
+ (format t "~D" x)
+ (if (> i 0)
+ (format t "X^~D " i)
+ (format t " ")))
+ (format t "~%"))
+ (loop for i from 0 to 50
+ do (when (primep i) (format t "~D " i)))
+ (format t "~%"))
diff --git a/Task/AKS-test-for-primes/D/aks-test-for-primes.d b/Task/AKS-test-for-primes/D/aks-test-for-primes.d
new file mode 100644
index 0000000000..d2f0ac8d42
--- /dev/null
+++ b/Task/AKS-test-for-primes/D/aks-test-for-primes.d
@@ -0,0 +1,29 @@
+import std.stdio, std.range, std.algorithm, std.string, std.bigint;
+
+BigInt[] expandX1(in uint p) pure /*nothrow*/ {
+ if (p == 0) return [1.BigInt];
+ typeof(return) r = [1.BigInt, BigInt(-1)];
+ foreach (immutable _; 1 .. p)
+ r = zip(r~0.BigInt, 0.BigInt~r).map!(xy => xy[0]-xy[1]).array;
+ r.reverse();
+ return r;
+}
+
+bool aksTest(in uint p) pure /*nothrow*/ {
+ if (p < 2) return false;
+ auto ex = p.expandX1;
+ ex[0]++;
+ return !ex[0 .. $ - 1].any!(mult => mult % p);
+}
+
+void main() {
+ "# p: (x-1)^p for small p:".writeln;
+ foreach (immutable p; 0 .. 12)
+ writefln("%3d: %s", p, p.expandX1.zip(iota(p + 1)).retro
+ .map!q{"%+dx^%d ".format(a[])}.join.replace("x^0", "")
+ .replace("^1 ", " ").replace("+", "+ ")
+ .replace("-", "- ").replace(" 1x", " x")[2 .. $]);
+
+ "\nSmall primes using the AKS test:".writeln;
+ 101.iota.filter!aksTest.writeln;
+}
diff --git a/Task/AKS-test-for-primes/Erlang/aks-test-for-primes.erl b/Task/AKS-test-for-primes/Erlang/aks-test-for-primes.erl
new file mode 100644
index 0000000000..28588baf35
--- /dev/null
+++ b/Task/AKS-test-for-primes/Erlang/aks-test-for-primes.erl
@@ -0,0 +1,39 @@
+#! /usr/bin/escript
+
+-import(lists, [all/2, seq/2, zip/2]).
+
+iterate(F, X) -> fun() -> [X | iterate(F, F(X))] end.
+
+take(0, _lazy) -> [];
+take(N, Lazy) ->
+ [Value | Next] = Lazy(),
+ [Value | take(N-1, Next)].
+
+
+pascal() -> iterate(fun (Row) -> [1 | sum_adj(Row)] end, [1]).
+
+sum_adj([_] = L) -> L;
+sum_adj([A, B | _] = Row) -> [A+B | sum_adj(tl(Row))].
+
+
+show_binomial(Row) ->
+ Degree = length(Row) - 1,
+ ["(x - 1)^", integer_to_list(Degree), " =", binomial_rhs(Row, 1, Degree)].
+
+show_x(0) -> "";
+show_x(1) -> "x";
+show_x(N) -> [$x, $^ | integer_to_list(N)].
+
+binomial_rhs([], _, _) -> [];
+binomial_rhs([Coef | Coefs], Sgn, Exp) ->
+ SignChar = if Sgn > 0 -> $+; true -> $- end,
+ [$ , SignChar, $ , integer_to_list(Coef), show_x(Exp) | binomial_rhs(Coefs, -Sgn, Exp-1)].
+
+
+primerow(Row, N) -> all(fun (Coef) -> (Coef =:= 1) or (Coef rem N =:= 0) end, Row).
+
+main(_) ->
+ [io:format("~s~n", [show_binomial(Row)]) || Row <- take(8, pascal())],
+ io:format("~nThe primes upto 50: ~p~n",
+ [[N || {Row, N} <- zip(tl(tl(take(51, pascal()))), seq(2, 50)),
+ primerow(Row, N)]]).
diff --git a/Task/AKS-test-for-primes/Go/aks-test-for-primes.go b/Task/AKS-test-for-primes/Go/aks-test-for-primes.go
new file mode 100644
index 0000000000..6bd81a3487
--- /dev/null
+++ b/Task/AKS-test-for-primes/Go/aks-test-for-primes.go
@@ -0,0 +1,65 @@
+package main
+
+import "fmt"
+
+func bc(p int) []int64 {
+ c := make([]int64, p+1)
+ r := int64(1)
+ for i, half := 0, p/2; i <= half; i++ {
+ c[i] = r
+ c[p-i] = r
+ r = r * int64(p-i) / int64(i+1)
+ }
+ for i := p - 1; i >= 0; i -= 2 {
+ c[i] = -c[i]
+ }
+ return c
+}
+
+func main() {
+ for p := 0; p <= 7; p++ {
+ fmt.Printf("%d: %s\n", p, pp(bc(p)))
+ }
+ for p := 2; p < 50; p++ {
+ if aks(p) {
+ fmt.Print(p, " ")
+ }
+ }
+ fmt.Println()
+}
+
+var e = []rune("²³⁴⁵⁶⁷")
+
+func pp(c []int64) (s string) {
+ if len(c) == 1 {
+ return fmt.Sprint(c[0])
+ }
+ p := len(c) - 1
+ if c[p] != 1 {
+ s = fmt.Sprint(c[p])
+ }
+ for i := p; i > 0; i-- {
+ s += "x"
+ if i != 1 {
+ s += string(e[i-2])
+ }
+ if d := c[i-1]; d < 0 {
+ s += fmt.Sprintf(" - %d", -d)
+ } else {
+ s += fmt.Sprintf(" + %d", d)
+ }
+ }
+ return
+}
+
+func aks(p int) bool {
+ c := bc(p)
+ c[p]--
+ c[0]++
+ for _, d := range c {
+ if d%int64(p) != 0 {
+ return false
+ }
+ }
+ return true
+}
diff --git a/Task/AKS-test-for-primes/Haskell/aks-test-for-primes.hs b/Task/AKS-test-for-primes/Haskell/aks-test-for-primes.hs
new file mode 100644
index 0000000000..10b280c1d0
--- /dev/null
+++ b/Task/AKS-test-for-primes/Haskell/aks-test-for-primes.hs
@@ -0,0 +1,20 @@
+expand p = scanl (\z i -> z * (p-i+1) `div` i) 1 [1..p]
+
+
+test p | p < 2 = False
+ | otherwise = and [mod n p == 0 | n <- init . tail $ expand p]
+
+
+printPoly [1] = "1"
+printPoly p = concat [ unwords [pow i, sgn (l-i), show (p!!(i-1))]
+ | i <- [l-1,l-2..1] ] where
+ l = length p
+ sgn i = if even i then "+" else "-"
+ pow i = take i "x^" ++ if i > 1 then show i else ""
+
+
+main = do
+ putStrLn "-- p: (x-1)^p for small p"
+ putStrLn $ unlines [show i ++ ": " ++ printPoly (expand i) | i <- [0..10]]
+ putStrLn "-- Primes up to 100:"
+ print (filter test [1..100])
diff --git a/Task/AKS-test-for-primes/J/aks-test-for-primes-1.j b/Task/AKS-test-for-primes/J/aks-test-for-primes-1.j
new file mode 100644
index 0000000000..ff08443623
--- /dev/null
+++ b/Task/AKS-test-for-primes/J/aks-test-for-primes-1.j
@@ -0,0 +1,2 @@
+ binomialExpansion =: (!~ * _1 ^ 2 | ]) i.&.:<: NB. 1) Create a function that gives the coefficients of (x-1)^p.
+ testAKS =: 0 *./ .= ] | binomialExpansion NB. 3) Use that function to create another which determines whether p is prime using AKS.
diff --git a/Task/AKS-test-for-primes/J/aks-test-for-primes-2.j b/Task/AKS-test-for-primes/J/aks-test-for-primes-2.j
new file mode 100644
index 0000000000..e57ebad41e
--- /dev/null
+++ b/Task/AKS-test-for-primes/J/aks-test-for-primes-2.j
@@ -0,0 +1,10 @@
+ binomialExpansion&.> i. 8 NB. 2) show the polynomial expansions p in the range 0 to at 7 inclusive.
++-++--+----+-------+-----------+---------------+------------------+
+|0||_2|_3 3|_4 6 _4|_5 10 _10 5|_6 15 _20 15 _6|_7 21 _35 35 _21 7|
++-++--+----+-------+-----------+---------------+------------------+
+ (#~ testAKS&> ) 2+i. 35 NB. 4) Generate a list of all primes under 35.
+2 3 5 7 11 13 17 19 23 29 31
+ (#~ testAKS&> ) 2+i. 50 NB. 5) [stretch] Generate all primes under 50
+2 3 5 7 11 13 17 19 23 29 31 37 41 43 47
+ i.&.:(_1&p:) 50 NB. Double-check our results using built-in prime filter.
+2 3 5 7 11 13 17 19 23 29 31 37 41 43 47
diff --git a/Task/AKS-test-for-primes/JavaScript/aks-test-for-primes.js b/Task/AKS-test-for-primes/JavaScript/aks-test-for-primes.js
new file mode 100644
index 0000000000..d7a7910d5a
--- /dev/null
+++ b/Task/AKS-test-for-primes/JavaScript/aks-test-for-primes.js
@@ -0,0 +1,79 @@
+var i, p, pascal, primerow, primes, show, _i;
+
+pascal = function() {
+ var a;
+ a = [];
+ return function() {
+ var b, i;
+ if (a.length === 0) {
+ return a = [1];
+ } else {
+ b = (function() {
+ var _i, _ref, _results;
+ _results = [];
+ for (i = _i = 0, _ref = a.length - 1; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {
+ _results.push(a[i] + a[i + 1]);
+ }
+ return _results;
+ })();
+ return a = [1].concat(b).concat([1]);
+ }
+ };
+};
+
+show = function(a) {
+ var degree, i, sgn, show_x, str, _i, _ref;
+ show_x = function(e) {
+ switch (e) {
+ case 0:
+ return "";
+ case 1:
+ return "x";
+ default:
+ return "x^" + e;
+ }
+ };
+ degree = a.length - 1;
+ str = "(x - 1)^" + degree + " =";
+ sgn = 1;
+ for (i = _i = 0, _ref = a.length; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {
+ str += ' ' + (sgn > 0 ? "+" : "-") + ' ' + a[i] + show_x(degree - i);
+ sgn = -sgn;
+ }
+ return str;
+};
+
+primerow = function(row) {
+ var degree;
+ degree = row.length - 1;
+ return row.slice(1, degree).every(function(x) {
+ return x % degree === 0;
+ });
+};
+
+p = pascal();
+
+for (i = _i = 0; _i <= 7; i = ++_i) {
+ console.log(show(p()));
+}
+
+p = pascal();
+
+p();
+
+p();
+
+primes = (function() {
+ var _j, _results;
+ _results = [];
+ for (i = _j = 1; _j <= 49; i = ++_j) {
+ if (primerow(p())) {
+ _results.push(i + 1);
+ }
+ }
+ return _results;
+})();
+
+console.log("");
+
+console.log("The primes upto 50 are: " + primes);
diff --git a/Task/AKS-test-for-primes/Maple/aks-test-for-primes-1.maple b/Task/AKS-test-for-primes/Maple/aks-test-for-primes-1.maple
new file mode 100644
index 0000000000..e82760b06e
--- /dev/null
+++ b/Task/AKS-test-for-primes/Maple/aks-test-for-primes-1.maple
@@ -0,0 +1,22 @@
+> for xpr in seq( expand( (x-1)^p ), p = 0 .. 7 ) do print( xpr ) end:
+ 1
+
+ x - 1
+
+ 2
+ x - 2 x + 1
+
+ 3 2
+ x - 3 x + 3 x - 1
+
+ 4 3 2
+ x - 4 x + 6 x - 4 x + 1
+
+ 5 4 3 2
+ x - 5 x + 10 x - 10 x + 5 x - 1
+
+ 6 5 4 3 2
+ x - 6 x + 15 x - 20 x + 15 x - 6 x + 1
+
+ 7 6 5 4 3 2
+ x - 7 x + 21 x - 35 x + 35 x - 21 x + 7 x - 1
diff --git a/Task/AKS-test-for-primes/Maple/aks-test-for-primes-2.maple b/Task/AKS-test-for-primes/Maple/aks-test-for-primes-2.maple
new file mode 100644
index 0000000000..ae2918dd85
--- /dev/null
+++ b/Task/AKS-test-for-primes/Maple/aks-test-for-primes-2.maple
@@ -0,0 +1 @@
+ polc := p -> [coeffs]( expand( (x-1)^p - (x^p-1) ) ):
diff --git a/Task/AKS-test-for-primes/Maple/aks-test-for-primes-3.maple b/Task/AKS-test-for-primes/Maple/aks-test-for-primes-3.maple
new file mode 100644
index 0000000000..49dc774b48
--- /dev/null
+++ b/Task/AKS-test-for-primes/Maple/aks-test-for-primes-3.maple
@@ -0,0 +1 @@
+prime? := n -> n > 1 and {op}( map( modp, polc( n ), n ) ) = {0}
diff --git a/Task/AKS-test-for-primes/Maple/aks-test-for-primes-4.maple b/Task/AKS-test-for-primes/Maple/aks-test-for-primes-4.maple
new file mode 100644
index 0000000000..22916f30c2
--- /dev/null
+++ b/Task/AKS-test-for-primes/Maple/aks-test-for-primes-4.maple
@@ -0,0 +1 @@
+prime? := (n::posint) -> n > 1 and {op}( map( modp, [coeffs]( expand( (x-1)^n - (x^n-1) ) ), n ) ) = {0}
diff --git a/Task/AKS-test-for-primes/Maple/aks-test-for-primes-5.maple b/Task/AKS-test-for-primes/Maple/aks-test-for-primes-5.maple
new file mode 100644
index 0000000000..5f977da948
--- /dev/null
+++ b/Task/AKS-test-for-primes/Maple/aks-test-for-primes-5.maple
@@ -0,0 +1,2 @@
+> evalb( seq( prime?(i), i = 1 .. 1000 ) = seq( isprime( i ), i = 1 .. 1000 ) );
+ true
diff --git a/Task/AKS-test-for-primes/Maple/aks-test-for-primes-6.maple b/Task/AKS-test-for-primes/Maple/aks-test-for-primes-6.maple
new file mode 100644
index 0000000000..4dab05cbe4
--- /dev/null
+++ b/Task/AKS-test-for-primes/Maple/aks-test-for-primes-6.maple
@@ -0,0 +1,2 @@
+> select( prime?, [seq](1..50) );
+ [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]
diff --git a/Task/AKS-test-for-primes/Mathematica/aks-test-for-primes.math b/Task/AKS-test-for-primes/Mathematica/aks-test-for-primes.math
new file mode 100644
index 0000000000..4806e2685b
--- /dev/null
+++ b/Task/AKS-test-for-primes/Mathematica/aks-test-for-primes.math
@@ -0,0 +1,7 @@
+Print["powers of (x-1)"]
+(x - 1)^( Range[0, 7]) // Expand // TableForm
+Print["primes under 50"]
+poly[p_] := (x - 1)^p - (x^p - 1) // Expand;
+coefflist[p_Integer] := Coefficient[poly[p], x, #] & /@ Range[0, p - 1];
+AKSPrimeQ[p_Integer] := (Mod[coefflist[p] , p] // Union) == {0};
+Select[Range[1, 50], AKSPrimeQ]
diff --git a/Task/AKS-test-for-primes/PARI-GP/aks-test-for-primes.pari b/Task/AKS-test-for-primes/PARI-GP/aks-test-for-primes.pari
new file mode 100644
index 0000000000..588302154d
--- /dev/null
+++ b/Task/AKS-test-for-primes/PARI-GP/aks-test-for-primes.pari
@@ -0,0 +1,5 @@
+getPoly(n)=('x-1)^n;
+vector(8,n,getPoly(n-1))
+AKS_slow(n)=my(P=getPoly(n));for(i=1,n-1,if(polcoeff(P,i)%n,return(0))); 1;
+AKS(n)=my(X=('x-1)*Mod(1,n));X^n=='x^n-1;
+select(AKS, [1..50])
diff --git a/Task/AKS-test-for-primes/Pascal/aks-test-for-primes.pascal b/Task/AKS-test-for-primes/Pascal/aks-test-for-primes.pascal
new file mode 100644
index 0000000000..048f436b40
--- /dev/null
+++ b/Task/AKS-test-for-primes/Pascal/aks-test-for-primes.pascal
@@ -0,0 +1,108 @@
+const
+ pasTriMax = 61;
+type
+ tpasTri =array[0..pasTriMax] of UInt64;
+
+var
+ pasTri : tpasTri;
+
+procedure pastriangle(n:longInt);
+//calculate the n'th line 0.. middle
+var
+ j,k: longWord;
+begin
+ pasTri[0] := 1;
+ j := 1;
+ while (j<=n) do
+ begin
+ inc(j);
+ k := j SHR 1;
+ pasTri[k] :=pasTri[k-1];
+ For k := k downto 1 do
+ inc(pasTri[k],pasTri[k-1]);
+ end;
+end;
+
+function CheckPrime(n:longWord):boolean;
+var
+ i : integer;
+ res: boolean;
+Begin
+
+ IF n > pasTriMax then
+ begin
+ writeln(n,' is out of range ');
+ EXIT;
+ end;
+
+ pastriangle(n);
+ res := true;
+ i := n shr 1;
+ while res AND (i >1) do
+ Begin
+ res := res AND(pasTri[i] mod n = 0);
+ dec(i);
+ end;
+ CheckPrime := res;
+end;
+
+procedure ExpandPoly(n:longWord);
+const
+ Vz :array[boolean] of char = ('+','-');
+var
+ j,k: longWord;
+ bVz: Boolean;
+Begin
+ IF n < 2 then
+ Begin
+ IF n = 0 then
+ writeln('(x-1)^0 = 1')
+ else
+ writeln('(x-1)^1 = x-1');
+ EXIT;
+ end;
+
+ IF n > pasTriMax then
+ begin
+ writeln(n,' is out of range ');
+ EXIT;
+ end;
+
+ pastriangle(n);
+ write('(x-1)^',n,' = ');
+ k := 0;
+ j := n;
+ bVz := false;
+ repeat
+ IF j=n then
+ write('x^',j)
+ else
+ write(Vz[bVz],pasTri[k],'*x^',j);
+ bVz := Not(bVz);
+ inc(k);
+ dec(j);
+ until k>= j;
+ k := j;
+ while k > 0 do
+ Begin
+ IF j <> 1 then
+ write(Vz[bVz],pasTri[k],'*x^',j)
+ else
+ write(Vz[bVz],pasTri[k],'*x');
+ bVz := Not(bVz);
+ dec(k);
+ dec(j);
+ end;
+ write(Vz[bVz],pasTri[0]);
+ writeln;
+end;
+
+var
+ n: LongWord;
+Begin
+ For n := 0 to 9 do
+ ExpandPoly(n);
+ For n := 2 to pasTriMax do
+ IF CheckPrime(n) then
+ write(n:3);
+end.
diff --git a/Task/AKS-test-for-primes/Perl-6/aks-test-for-primes-1.pl6 b/Task/AKS-test-for-primes/Perl-6/aks-test-for-primes-1.pl6
new file mode 100644
index 0000000000..c79e49e1f9
--- /dev/null
+++ b/Task/AKS-test-for-primes/Perl-6/aks-test-for-primes-1.pl6
@@ -0,0 +1,3 @@
+constant expansions = [1], [1,-1], -> @prior { [@prior,0 Z- 0,@prior] } ... *;
+
+sub polyprime($p where 2..*) { so expansions[$p].[1 ..^ */2].all %% $p }
diff --git a/Task/AKS-test-for-primes/Perl-6/aks-test-for-primes-2.pl6 b/Task/AKS-test-for-primes/Perl-6/aks-test-for-primes-2.pl6
new file mode 100644
index 0000000000..5fcbb0706e
--- /dev/null
+++ b/Task/AKS-test-for-primes/Perl-6/aks-test-for-primes-2.pl6
@@ -0,0 +1,21 @@
+say ' p: (x-1)ᵖ';
+say '-----------';
+
+sub super ($n) {
+ $n.trans: '0123456789'
+ => '⁰¹²³⁴⁵⁶⁷⁸⁹';
+}
+
+for ^13 -> $d {
+ say $d.fmt('%2i: '), (
+ expansions[$d].kv.map: -> $i, $n {
+ my $p = $d - $i;
+ [~] gather {
+ take < + - >[$n < 0] ~ ' ' unless $p == $d;
+ take $n.abs unless $p == $d > 0;
+ take 'x' if $p > 0;
+ take super $p - $i if $p > 1;
+ }
+ }
+ )
+}
diff --git a/Task/AKS-test-for-primes/Perl-6/aks-test-for-primes-3.pl6 b/Task/AKS-test-for-primes/Perl-6/aks-test-for-primes-3.pl6
new file mode 100644
index 0000000000..ccefe36582
--- /dev/null
+++ b/Task/AKS-test-for-primes/Perl-6/aks-test-for-primes-3.pl6
@@ -0,0 +1 @@
+print "\nPrimes up to 100:\n { grep &polyprime, 2..100 }\n";
diff --git a/Task/AKS-test-for-primes/Perl/aks-test-for-primes.pl b/Task/AKS-test-for-primes/Perl/aks-test-for-primes.pl
new file mode 100644
index 0000000000..5dafc47c2c
--- /dev/null
+++ b/Task/AKS-test-for-primes/Perl/aks-test-for-primes.pl
@@ -0,0 +1,29 @@
+use strict;
+use warnings;
+# Select one of these lines. Math::BigInt is in core, but quite slow.
+use Math::BigInt; sub binomial { Math::BigInt->new(shift)->bnok(shift) }
+# use Math::Pari "binomial";
+# use ntheory "binomial";
+
+sub binprime {
+ my $p = shift;
+ return 0 unless $p >= 2;
+ # binomial is symmetric, so only test half the terms
+ for (1 .. ($p>>1)) { return 0 if binomial($p,$_) % $p }
+ 1;
+}
+sub coef { # For prettier printing
+ my($n,$e) = @_;
+ return $n unless $e;
+ $n = "" if $n==1;
+ $e==1 ? "${n}x" : "${n}x^$e";
+}
+sub binpoly {
+ my $p = shift;
+ join(" ", coef(1,$p),
+ map { join("",("+","-")[($p-$_)&1]," ",coef(binomial($p,$_),$_)) }
+ reverse 0..$p-1 );
+}
+print "expansions of (x-1)^p:\n";
+print binpoly($_),"\n" for 0..9;
+print "Primes to 80: [", join(",", grep { binprime($_) } 2..80), "]\n";
diff --git a/Task/AKS-test-for-primes/PicoLisp/aks-test-for-primes.l b/Task/AKS-test-for-primes/PicoLisp/aks-test-for-primes.l
new file mode 100644
index 0000000000..1fa3fdbe96
--- /dev/null
+++ b/Task/AKS-test-for-primes/PicoLisp/aks-test-for-primes.l
@@ -0,0 +1,20 @@
+(de pascal (N)
+ (let D 1
+ (make
+ (for X (inc N)
+ (link D)
+ (setq D
+ (*/ D (- (inc N) X) (- X)) ) ) ) ) )
+
+(for (X 0 (> 10 X) (inc X))
+ (println X '-> (pascal X) ) )
+
+(println
+ (filter
+ '((X)
+ (fully
+ '((Y) (=0 (% Y X)))
+ (cdr (head -1 (pascal X))) ) )
+ (range 2 50) ) )
+
+(bye)
diff --git a/Task/AKS-test-for-primes/Prolog/aks-test-for-primes-1.pro b/Task/AKS-test-for-primes/Prolog/aks-test-for-primes-1.pro
new file mode 100644
index 0000000000..92a49575ac
--- /dev/null
+++ b/Task/AKS-test-for-primes/Prolog/aks-test-for-primes-1.pro
@@ -0,0 +1,4 @@
+ prime(P) :-
+ pascal([1,P|Xs]),
+ append(Xs, [1], Rest),
+ forall( member(X,Xs), 0 is X mod P).
diff --git a/Task/AKS-test-for-primes/Prolog/aks-test-for-primes-2.pro b/Task/AKS-test-for-primes/Prolog/aks-test-for-primes-2.pro
new file mode 100644
index 0000000000..338aaf51df
--- /dev/null
+++ b/Task/AKS-test-for-primes/Prolog/aks-test-for-primes-2.pro
@@ -0,0 +1,43 @@
+% To generate the n-th row of a Pascal triangle
+% pascal(+N, Row)
+pascal(0, [1]).
+pascal(N, Row) :-
+ N > 0, optpascal( [1, N|Xs] ),
+ !,
+ pascalize( [1, N|Xs], Row ).
+
+pascalize( Opt, Row ) :-
+ % if Opt ends in a pair, then peel off the pair:
+ ( append(X, [R,R], Opt) -> true ; append(X, [R], Opt) ),
+ reverse(X, Rs),
+ append( Opt, Rs, Row ).
+
+% optpascal(-X) generates optpascal lines:
+optpascal(X) :-
+ optpascal_successor( [], X).
+
+% optpascal_successor(+P, -Q) is true if Q is an optpascal list beneath the optpascal list P:
+optpascal_successor(P, Q) :-
+ optpascal(P, NextP),
+ (Q = NextP ; optpascal_successor(NextP, Q)).
+
+% optpascal(+Row, NextRow) is true if Row and NextRow are adjacent rows in the Pascal triangle.
+% optpascal(+Row, NextRow) where the optpascal representation is used
+optpascal(X, [1|Y]) :-
+ add_pairs(X, Y).
+
+% add_pairs(+OptPascal, NextOptPascal) is a helper function for optpascal/2.
+% Given one OptPascal list, it generates the next by adding adjacent
+% items, but if the last two items are unequal, then their sum is
+% repeated. This is intended to be a deterministic predicate, and to
+% avoid a probable compiler limitation, we therefore use one cut.
+add_pairs([], []).
+add_pairs([X], [X]).
+add_pairs([X,Y], Ans) :-
+ S is X + Y,
+ (X = Y -> Ans=[S] ; Ans=[S,S]),
+ !. % To overcome potential limitation of compiler
+
+add_pairs( [X1, X2, X3|Xs], [S|Ys]) :-
+ S is X1 + X2,
+ add_pairs( [X2, X3|Xs], Ys).
diff --git a/Task/AKS-test-for-primes/Prolog/aks-test-for-primes-3.pro b/Task/AKS-test-for-primes/Prolog/aks-test-for-primes-3.pro
new file mode 100644
index 0000000000..41e31bd9b1
--- /dev/null
+++ b/Task/AKS-test-for-primes/Prolog/aks-test-for-primes-3.pro
@@ -0,0 +1,22 @@
+%%% Task 1: "A method to generate the coefficients of (1-X)^p"
+
+coefficients(N, Coefficients) :-
+ pascal(N, X),
+ alternate_signs(X, Coefficients).
+
+alternate_signs( [], [] ).
+alternate_signs( [A], [A] ).
+alternate_signs( [A,B | X], [A, MB | Y] ) :-
+ MB is -B,
+ alternate_signs(X,Y).
+
+%%% Task 2. "Show here the polynomial expansions of (x − 1)p for p in the range 0 to at least 7, inclusive."
+
+coefficients(Coefficients) :-
+ optpascal( Opt),
+ pascalize( Opt, Row ),
+ alternate_signs(Row, Coefficients).
+
+
+% As required by the problem statement, but necessarily very inefficient:
+:- between(0, 7, N), coefficients(N, Coefficients), writeln(Coefficients), fail ; true.
diff --git a/Task/AKS-test-for-primes/Prolog/aks-test-for-primes-4.pro b/Task/AKS-test-for-primes/Prolog/aks-test-for-primes-4.pro
new file mode 100644
index 0000000000..736c8e0b63
--- /dev/null
+++ b/Task/AKS-test-for-primes/Prolog/aks-test-for-primes-4.pro
@@ -0,0 +1,11 @@
+%%% Task 3. Use the previous function in creating [sic]
+%%% another function that when given p returns whether p is prime
+%%% using the AKS test.
+
+% Even for testing whether a given number, N, is prime,
+% this approach is inefficient, but here is a Prolog implementation:
+
+ prime_test_per_requirements(N) :-
+ coefficients(N, [1|Coefficients]),
+ append(Cs, [_], Coefficients),
+ forall( member(C, Cs), 0 is C mod N).
diff --git a/Task/AKS-test-for-primes/Prolog/aks-test-for-primes-5.pro b/Task/AKS-test-for-primes/Prolog/aks-test-for-primes-5.pro
new file mode 100644
index 0000000000..0aeb583a1a
--- /dev/null
+++ b/Task/AKS-test-for-primes/Prolog/aks-test-for-primes-5.pro
@@ -0,0 +1 @@
+ prime(N) :- optpascal([1,N|Xs]), forall( member(X,Xs), 0 is X mod N).
diff --git a/Task/AKS-test-for-primes/Prolog/aks-test-for-primes-6.pro b/Task/AKS-test-for-primes/Prolog/aks-test-for-primes-6.pro
new file mode 100644
index 0000000000..40f1f62d26
--- /dev/null
+++ b/Task/AKS-test-for-primes/Prolog/aks-test-for-primes-6.pro
@@ -0,0 +1,11 @@
+%%% Task 4. Use your AKS test to generate a list of all primes under 35.
+
+:- prime(N), (N < 35 -> write(N), write(' '), fail ; nl).
+
+% Output: 1 2 3 5 7 11 13 17 19 23 29 31
+
+%%% Task 5. As a stretch goal, generate all primes under 50.
+
+:- prime(N), (N < 50 -> write(N), write(' '), fail ; nl).
+
+% Output: 1 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47
diff --git a/Task/AKS-test-for-primes/Python/aks-test-for-primes-1.py b/Task/AKS-test-for-primes/Python/aks-test-for-primes-1.py
new file mode 100644
index 0000000000..da7833f1ec
--- /dev/null
+++ b/Task/AKS-test-for-primes/Python/aks-test-for-primes-1.py
@@ -0,0 +1,20 @@
+def expand_x_1(p):
+ ex = [1]
+ for i in range(p):
+ ex.append(ex[-1] * -(p-i) / (i+1))
+ return ex[::-1]
+
+def aks_test(p):
+ if p < 2: return False
+ ex = expand_x_1(p)
+ ex[0] += 1
+ return not any(mult % p for mult in ex[0:-1])
+
+
+print('# p: (x-1)^p for small p')
+for p in range(12):
+ print('%3i: %s' % (p, ' '.join('%+i%s' % (e, ('x^%i' % n) if n else '')
+ for n,e in enumerate(expand_x_1(p)))))
+
+print('\n# small primes using the aks test')
+print([p for p in range(101) if aks_test(p)])
diff --git a/Task/AKS-test-for-primes/Python/aks-test-for-primes-2.py b/Task/AKS-test-for-primes/Python/aks-test-for-primes-2.py
new file mode 100644
index 0000000000..4e7140c616
--- /dev/null
+++ b/Task/AKS-test-for-primes/Python/aks-test-for-primes-2.py
@@ -0,0 +1,15 @@
+print('''
+{| class="wikitable" style="text-align:left;"
+|+ Polynomial Expansions and AKS prime test
+|-
+!
+!
+|-''')
+for p in range(12):
+ print('! \n| \n| %r\n|-'
+ % (p,
+ ' '.join('%s%s' % (('%+i' % e) if (e != 1 or not p or (p and not n) ) else '+',
+ (('x^{%i}' % n) if n > 1 else 'x') if n else '')
+ for n,e in enumerate(expand_x_1(p))),
+ aks_test(p)))
+print('|}')
diff --git a/Task/AKS-test-for-primes/README b/Task/AKS-test-for-primes/README
new file mode 100644
index 0000000000..24614ea647
--- /dev/null
+++ b/Task/AKS-test-for-primes/README
@@ -0,0 +1 @@
+Data source: http://rosettacode.org/wiki/AKS_test_for_primes
diff --git a/Task/AKS-test-for-primes/REXX/aks-test-for-primes-1.rexx b/Task/AKS-test-for-primes/REXX/aks-test-for-primes-1.rexx
new file mode 100644
index 0000000000..31fa66cb02
--- /dev/null
+++ b/Task/AKS-test-for-primes/REXX/aks-test-for-primes-1.rexx
@@ -0,0 +1,49 @@
+/* REXX ---------------------------------------------------------------
+* 09.02.2014 Walter Pachl
+* 22.02.2014 WP fix 'accounting' problem (courtesy GS)
+*--------------------------------------------------------------------*/
+c.=1
+Numeric Digits 100
+limit=200
+pl=''
+mmm=0
+Do p=3 To limit
+ pm1=p-1
+ c.p.1=1
+ c.p.p=1
+ Do j=2 To p-1
+ jm1=j-1
+ c.p.j=c.pm1.jm1+c.pm1.j
+ mmm=max(mmm,c.p.j)
+ End
+ End
+Say '(x-1)**0 = 1'
+do i=2 To limit
+ im1=i-1
+ sign='+'
+ ol='(x-1)^'im1 '='
+ Do j=i to 2 by -1
+ If j=2 Then
+ term='x '
+ Else
+ term='x^'||(j-1)
+ If j=i Then
+ ol=ol term
+ Else
+ ol=ol sign c.i.j'*'term
+ sign=translate(sign,'+-','-+')
+ End
+ If i<10 then
+ Say ol sign 1
+ Do j=2 To i-1
+ If c.i.j//(i-1)>0 Then
+ Leave
+ End
+ If j>i-1 Then
+ pl=pl (i-1)
+ End
+Say ' '
+Say 'Primes:' subword(pl,2,27)
+Say ' ' subword(pl,29)
+Say 'Largest coefficient:' mmm
+Say 'This has' length(mmm) 'digits'
diff --git a/Task/AKS-test-for-primes/REXX/aks-test-for-primes-2.rexx b/Task/AKS-test-for-primes/REXX/aks-test-for-primes-2.rexx
new file mode 100644
index 0000000000..49977af5a2
--- /dev/null
+++ b/Task/AKS-test-for-primes/REXX/aks-test-for-primes-2.rexx
@@ -0,0 +1,42 @@
+/*REXX pgm calculates primes via the Agrawal-Kayal-Saxena primality test*/
+parse arg top .; if top=='' then top=200 /*Not specified? Use default.*/
+oTop=top; tell=top<0; top=abs(top) /*TOP negative? Show expression.*/
+numeric digits max(9,top%3) /*define a dynamic number of digs*/
+@.=1; big=1 /*set all coefficients to unity. */
+#= /*define a list of prime numbers.*/
+ do p=3 for top; pm=p-1; pp=p+1 /*PM & PP: used as a convenience.*/
+ do m=2 to pp%2; mm=m-1 /*calc. coefficients for a power.*/
+ @.p.m=@.pm.mm + @.pm.m; mh=pp-m /*calculate left side of coeff.*/
+ @.p.mh=@.p.m /* " right " " " */
+ if @.p.m>big then big=@.p.m /*This coefficient the biggest? */
+ end /*m*/ /* [↑] The M DO loop does both*/
+ end /*p*/ /* sides in the same loop, */
+ /* saving a bunch of time. */
+if tell then say '(x-1)^0: 1' /*maybe show the first expression*/
+$.0='-'; $.1="+" /*$.x is the sign to be used.*/
+ /* [↓] test for primality by ÷ */
+ do n=2 for top; nh=n%2; nm=n-1 /*create expressions/find primes.*/
+ do k=3 to nh until @.n.k//nm\==0 /*coefficients divisible by N-1 ?*/
+ end /*k*/ /* [↑] skip the 1st & 2nd coeff.*/
+ /* [↓] search for a good coeff. */
+ if k>nh & nm\==1 & n\==5 then #=# nm /*add a number to the prime list.*/
+ if \tell then iterate /*¬tell? Don't show expressions.*/
+ s=1 /*S: is the sign indicator. */
+ y='(x-1)^'nm": " /*define first part of expression*/
+ /* [↓] create higher powers 1st.*/
+ do j=n to 2 by -1; jm=j-1 /*JM is used as a convenience.*/
+ if j==2 then exp='x' /*if power=1, don't show the pow.*/
+ else exp='x^'jm /* ··· else show the power with ^*/
+ if j==n then y=y exp /*no sign for the 1st expression.*/
+ else y=y $.s @.n.j'∙'exp /*build the expression with sign.*/
+ s=\s /*flip the sign in the expression*/
+ end /*j*/ /* [↑] the sign (now) is 0 | 1,*/
+ /* and is shown as - | + */
+ say y $.s 1 /*just show first N expressions, */
+ end /*n*/ /* [↑] ··· but only for neg TOP.*/
+ say /* [↓] Has TOP a leading +? Show*/
+if left(oTop,1)=='+' then say top is 'prime.' /*tell is/isn't. */
+ else say 'primes:' # /*display prime # list. */
+say /* [↓] size of big 'un.*/
+say 'Found ' words(#) ' primes and the largest coefficient has' ,
+ length(big) "decimal digits." /*stick a fork in it, we're done.*/
diff --git a/Task/AKS-test-for-primes/Racket/aks-test-for-primes.rkt b/Task/AKS-test-for-primes/Racket/aks-test-for-primes.rkt
new file mode 100644
index 0000000000..e4d9260d7c
--- /dev/null
+++ b/Task/AKS-test-for-primes/Racket/aks-test-for-primes.rkt
@@ -0,0 +1,61 @@
+#lang racket
+(require math/number-theory)
+
+;; 1. coefficients of expanded polynomial (x-1)^p
+;; produces a vector because in-vector can provide a start
+;; and stop (of 1 and p) which allow us to drop the (-1)^p
+;; and the x^p terms, respectively.
+;;
+;; (vector-ref (coefficients p) e) is the coefficient for p^e
+(define (coefficients p)
+ (for/vector ((e (in-range 0 (add1 p))))
+ (define sign (expt -1 (- p e)))
+ (* sign (binomial p e))))
+
+;; 2. Show the polynomial expansions from p=0 .. 7 (inclusive)
+;; (it's possible some of these can be merged...)
+(define (format-coefficient c e leftmost?)
+ (define (format-c.x^e c e)
+ (define +c (abs c))
+ (match* (+c e)
+ [(_ 0) (format "~a" +c)]
+ [(1 _) (format "x^~a" e)]
+ [(_ _) (format "~ax^~a" +c e)]))
+ (define +/- (if (negative? c) "-" "+"))
+ (define +c.x^e (format-c.x^e c e))
+ (match* (c e leftmost?)
+ [(0 _ _) ""]
+ [((? negative?) _ #t) (format "-~a" +c.x^e)]
+ [(_ _ #t) +c.x^e]
+ [(_ _ _) (format " ~a ~a" +/- +c.x^e)]))
+
+(define (format-polynomial cs)
+ (define cs-length (sequence-length cs))
+ (apply
+ string-append
+ (reverse ; convention is to display highest exponent first
+ (for/list ((c cs) (e (in-naturals)))
+ (format-coefficient c e (= e (sub1 cs-length)))))))
+
+(for ((p (in-range 0 (add1 11))))
+ (printf "p=~a: ~a~%" p (format-polynomial (coefficients p))))
+
+;; 3. AKS primeality test
+(define (prime?/AKS p)
+ (define cs (coefficients p))
+ (and
+ (or (= (vector-ref cs 0) -1) ; c_0 = -1 -> c_0 - (-1) = 0
+ (divides? p 2)) ; c_0 = 1 -> c_0 - (-1) = 2 -> divides?
+ (for/and ((c (in-vector cs 1 p))) (divides? p c))))
+
+;; there is some discussion (see Discussion) about what to do with the perennial "1"
+;; case. This is my way of saying that I'm ignoring it
+(define lowest-tested-number 2)
+
+;; 4. list of numbers < 35 that are prime (note that 1 is prime
+;; by the definition of the AKS test for primes):
+(displayln (for/list ((i (in-range lowest-tested-number 35)) #:when (prime?/AKS i)) i))
+
+;; 5. stretch goal: all prime numbers under 50
+(displayln (for/list ((i (in-range lowest-tested-number 50)) #:when (prime?/AKS i)) i))
+(displayln (for/list ((i (in-range lowest-tested-number 100)) #:when (prime?/AKS i)) i))
diff --git a/Task/AKS-test-for-primes/Ruby/aks-test-for-primes-1.rb b/Task/AKS-test-for-primes/Ruby/aks-test-for-primes-1.rb
new file mode 100644
index 0000000000..a32f37c73e
--- /dev/null
+++ b/Task/AKS-test-for-primes/Ruby/aks-test-for-primes-1.rb
@@ -0,0 +1,18 @@
+require 'polynomial'
+
+def x_minus_1_to_the(p)
+ return Polynomial.new(-1,1)**p
+end
+
+def prime?(p)
+ return false if p < 2
+ (x_minus_1_to_the(p) - Polynomial.from_string("x**#{p}-1")).coefs.all?{|n| n%p==0}
+end
+
+8.times do |n|
+ # the default Polynomial#to_s would be OK here; the substitutions just make the
+ # output match the other version below.
+ puts "(x-1)^#{n} = #{x_minus_1_to_the(n).to_s.gsub(/\*\*/,'^').gsub(/\*/,'')}"
+end
+
+puts "\nPrimes below 50:", 50.times.select {|n| prime? n}.join(',')
diff --git a/Task/AKS-test-for-primes/Ruby/aks-test-for-primes-2.rb b/Task/AKS-test-for-primes/Ruby/aks-test-for-primes-2.rb
new file mode 100644
index 0000000000..f73a774b9c
--- /dev/null
+++ b/Task/AKS-test-for-primes/Ruby/aks-test-for-primes-2.rb
@@ -0,0 +1,26 @@
+def x_minus_1_to_the(p)
+ p.times.inject([1]) do |ex, _|
+ ([0] + ex).zip(ex + [0]).map { |x,y| x - y }
+ end
+end
+
+def prime?(p)
+ return false if p < 2
+ coeff = x_minus_1_to_the(p)
+ coeff[0] += coeff.pop
+ coeff.all?{|n| n%p==0}
+end
+
+8.times do |n|
+ puts "(x-1)^#{n} = " +
+ x_minus_1_to_the(n).
+ each_with_index.
+ map { |c, p|
+ if p.zero? then c.to_s
+ else
+ (c<0 ? " - " : " + ") + (c.abs==1 ? "x" : "#{c.abs}x") + (p==1 ? "" : "^#{p}")
+ end
+ }.join
+end
+
+puts "\nPrimes below 50:", 50.times.select {|n| prime? n}.join(',')
diff --git a/Task/AKS-test-for-primes/Rust/aks-test-for-primes-1.rust b/Task/AKS-test-for-primes/Rust/aks-test-for-primes-1.rust
new file mode 100644
index 0000000000..c60dccf84d
--- /dev/null
+++ b/Task/AKS-test-for-primes/Rust/aks-test-for-primes-1.rust
@@ -0,0 +1,38 @@
+//Rust 1.0.0-alpha
+#![feature(core)]
+extern crate core;
+
+use core::iter::repeat;
+
+fn aks_coefficients(k: usize) -> Vec {
+ let mut coefficients = repeat(0i64).take(k + 1).collect::>();
+ coefficients[0] = 1;
+ for i in 1..(k + 1) {
+ coefficients[i] = -(1..i).fold(coefficients[0], |&mut: prev, j|{
+ let old = coefficients[j];
+ coefficients[j] = old - prev;
+ old
+ });
+ }
+ coefficients
+}
+
+
+fn is_prime(p: usize) -> bool {
+ if p < 2 {
+ false
+ } else {
+ let c = aks_coefficients(p);
+ core::iter::range_inclusive(1, (c.len() - 1) / 2)
+ .all(|&:i| (c[i] % (p as i64)) == 0)
+ }
+}
+
+fn main() {
+ for i in 0us..8 {
+ println!("{}: {:?}", i, aks_coefficients(i));
+ }
+ for i in (1us..51).filter(|&: &i| is_prime(i)) {
+ print!("{} ", i);
+ }
+}
diff --git a/Task/AKS-test-for-primes/Rust/aks-test-for-primes-2.rust b/Task/AKS-test-for-primes/Rust/aks-test-for-primes-2.rust
new file mode 100644
index 0000000000..9cd3c46cb7
--- /dev/null
+++ b/Task/AKS-test-for-primes/Rust/aks-test-for-primes-2.rust
@@ -0,0 +1,12 @@
+fn aks_coefficients(k: usize) -> Vec {
+ if k == 0 {
+ vec![1i64]
+ } else {
+ let zero = Some(0i64);
+ range(1, k).fold(vec![1i64, -1], |r, _| {
+ let a = r.iter().chain(zero.iter());
+ let b = zero.iter().chain(r.iter());
+ a.zip(b).map(|(x, &y)| x-y).collect()
+ })
+ }
+}
diff --git a/Task/AKS-test-for-primes/Scala/aks-test-for-primes.scala b/Task/AKS-test-for-primes/Scala/aks-test-for-primes.scala
new file mode 100644
index 0000000000..e069d2c329
--- /dev/null
+++ b/Task/AKS-test-for-primes/Scala/aks-test-for-primes.scala
@@ -0,0 +1,30 @@
+def powerMin1(n: BigInt) = if (n % 2 == 0) BigInt(1) else BigInt(-1)
+
+val pascal = (( Vector(Vector(BigInt(1))) /: (1 to 50)) { (rows, i) =>
+ val v = rows.head
+ val newVector = ((1 until v.length) map (j =>
+ powerMin1(j+i) * (v(j-1).abs + v(j).abs))
+ ).toVector
+ (powerMin1(i) +: newVector :+ powerMin1(i+v.length)) +: rows
+}).reverse
+
+def poly2String(poly: Vector[BigInt]) = ((0 until poly.length) map { i =>
+ (i, poly(i)) match {
+ case (0, c) => c.toString
+ case (_, c) =>
+ (if (c >= 0) "+" else "-") +
+ (if (c == 1) "x" else c.abs + "x") +
+ (if (i == 1) "" else "^" + i)
+ }
+}) mkString ""
+
+def isPrime(n: Int) = {
+ val poly = pascal(n)
+ poly.slice(1, poly.length - 1).forall(i => i % n == 0)
+}
+
+for(i <- 0 to 7) { println( f"(x-1)^$i = ${poly2String( pascal(i) )}" ) }
+
+val primes = (2 to 50).filter(isPrime)
+println
+println(primes mkString " ")
diff --git a/Task/AKS-test-for-primes/Scilab/aks-test-for-primes.scilab b/Task/AKS-test-for-primes/Scilab/aks-test-for-primes.scilab
new file mode 100644
index 0000000000..bd06f3720e
--- /dev/null
+++ b/Task/AKS-test-for-primes/Scilab/aks-test-for-primes.scilab
@@ -0,0 +1,67 @@
+clear
+xdel(winsid())
+
+stacksize('max')
+sz=stacksize();
+
+n=7; //For the expansion up to power of n
+g=50; //For test of primes up to g
+
+function X = pascal(g) //Pascal´s triangle
+ X(1,1)=1; //Zeroth power
+ X(2,1)=1; //First power
+ X(2,2)=1;
+ for q=3:1:g+1 //From second power use this loop
+ X(q,1)=1;
+ X(q,q)=1;
+ for p=2:1:q-1
+ X(q,p)=X(q-1,p-1)+X(q-1,p);
+ end
+ end
+endfunction
+
+Z=pascal(g); //Generate Pascal's triangle up to g
+
+Q(0+1)="(x-1)^0 = 1"; //For nicer display
+Q(1+1)="(x-1)^1 = x^1-1"; //For nicer display
+
+disp(Q(1))
+disp(Q(2))
+
+function cf=coef(Z,q,p) //Return coeffiecents for nicer display of expansion without "ones"
+ if Z(q,p)==1 then
+ cf="";
+ else
+ cf=string(Z(q,p));
+ end
+endfunction
+
+for q=3:n+1 //Generate and display the expansions
+ Q(q)=strcat(["(x-1)^",string(q-1)," = "]);
+ sing=""; //Sign of coeff.
+ for p=1:q-1 //Number of coefficients equals power minus 1
+ Q(q)=strcat([Q(q),sing,coef(Z,q,p),"x^",string(q-p)]);
+ if sing=="-" then sing="+"; else sing="-"; end
+ end
+ Q(q)=strcat([Q(q),sing,string(1)]);
+ disp(Q(q))
+ clear Q
+end
+
+function prime=prime(Z,g)
+ prime="true";
+ for p=2:g
+ if abs(floor(Z(g+1,p)/g)-Z(g+1,p)/g)>0 then
+ prime="false";
+ break;
+ end
+ end
+endfunction
+
+R="2"; //For nicer display
+for r=3:g
+ if prime(Z,r)=="true" then
+ R=strcat([R, ", ",string(r)]);
+ end
+end
+disp(R)
diff --git a/Task/AKS-test-for-primes/Seed7/aks-test-for-primes.seed7 b/Task/AKS-test-for-primes/Seed7/aks-test-for-primes.seed7
new file mode 100644
index 0000000000..f240c4f87b
--- /dev/null
+++ b/Task/AKS-test-for-primes/Seed7/aks-test-for-primes.seed7
@@ -0,0 +1,60 @@
+$ include "seed7_05.s7i";
+
+const func array integer: expand_x_1 (in integer: p) is func
+ result
+ var array integer: ex is [] (1);
+ local
+ var integer: i is 0;
+ begin
+ for i range 0 to p - 1 do
+ ex := [] (ex[1] * -(p - i) div (i + 1)) & ex;
+ end for;
+ end func;
+
+const func boolean: aks_test (in integer: p) is func
+ result
+ var boolean: aks_test is FALSE;
+ local
+ var array integer: ex is 0 times 0;
+ var integer: idx is 0;
+ begin
+ if p >= 2 then
+ ex := expand_x_1(p);
+ ex[1] +:= 1;
+ for idx range 1 to pred(length(ex)) until ex[idx] rem p <> 0 do
+ noop;
+ end for;
+ aks_test := idx = length(ex);
+ end if;
+ end func;
+
+const proc: main is func
+ local
+ var integer: p is 0;
+ var integer: n is 0;
+ var integer: e is 0;
+ begin
+ writeln("# p: (x-1)^p for small p");
+ for p range 0 to 11 do
+ write(p lpad 3 <& ": ");
+ for n key e range expand_x_1(p) do
+ write(" ");
+ if n >= 0 then
+ write("+");
+ end if;
+ write(n);
+ if e > 1 then
+ write("x^" <& pred(e));
+ end if;
+ end for;
+ writeln;
+ end for;
+ writeln;
+ writeln("# small primes using the aks test");
+ for p range 0 to 61 do
+ if aks_test(p) then
+ write(p <& " ");
+ end if;
+ end for;
+ writeln;
+ end func;
diff --git a/Task/AKS-test-for-primes/Tcl/aks-test-for-primes.tcl b/Task/AKS-test-for-primes/Tcl/aks-test-for-primes.tcl
new file mode 100644
index 0000000000..4ac73142a7
--- /dev/null
+++ b/Task/AKS-test-for-primes/Tcl/aks-test-for-primes.tcl
@@ -0,0 +1,51 @@
+proc coeffs {p {signs 1}} {
+ set clist 1
+ for {set i 0} {$i < $p} {incr i} {
+ set clist [lmap x [list 0 {*}$clist] y [list {*}$clist 0] {
+ expr {$x + $y}
+ }]
+ }
+ if {$signs} {
+ set s -1
+ set clist [lmap c $clist {expr {[set s [expr {-$s}]] * $c}}]
+ }
+ return $clist
+}
+proc aksprime {p} {
+ if {$p < 2} {
+ return false
+ }
+ foreach c [coeffs $p 0] {
+ if {$c == 1} continue
+ if {$c % $p} {
+ return false
+ }
+ }
+ return true
+}
+
+for {set i 0} {$i <= 7} {incr i} {
+ puts -nonewline "(x-1)^$i ="
+ set j $i
+ foreach c [coeffs $i] {
+ puts -nonewline [format " %+dx^%d" $c $j]
+ incr j -1
+ }
+ puts ""
+}
+
+set sub35primes {}
+for {set i 1} {$i < 35} {incr i} {
+ if {[aksprime $i]} {
+ lappend sub35primes $i
+ }
+}
+puts "primes under 35: [join $sub35primes ,]"
+
+set sub50primes {}
+for {set i 1} {$i < 50} {incr i} {
+ if {[aksprime $i]} {
+ lappend sub50primes $i
+ }
+}
+puts "primes under 50: [join $sub50primes ,]"
diff --git a/Task/Abundant,-deficient-and-perfect-number-classifications/00DESCRIPTION b/Task/Abundant,-deficient-and-perfect-number-classifications/00DESCRIPTION
new file mode 100644
index 0000000000..ae3b02930b
--- /dev/null
+++ b/Task/Abundant,-deficient-and-perfect-number-classifications/00DESCRIPTION
@@ -0,0 +1,17 @@
+These define three classifications of positive integers based on their [[Proper divisors|proper divisors]].
+
+Let P(n) be the sum of the proper divisors of n, where the proper divisors of n are all positive divisors of n other than n itself.
+* if P(n) < n then n is classed as '''deficient''' ([https://oeis.org/A005100 OEIS A005100]).
+* if P(n) == n then n is classed as '''perfect''' ([https://oeis.org/A000396 OEIS A000396]).
+* if P(n) > n then n is classed as '''abundant''' ([https://oeis.org/A005101 OEIS A005101]).
+
+Example: 6 has proper divisors 1, 2, and 3. 1 + 2 + 3 = 6 so 6 is classed as a perfect number.
+
+;Task:
+Calculate how many of the integers 1 to 20,000 inclusive are in each of the three classes and show the result here.
+
+;Cf.
+* [[Aliquot sequence classifications]]. (The whole series from which this task is a subset).
+* [[Proper divisors]]
+* [[Amicable pairs]]
+* [http://www.pleacher.com/mp/mlessons/algebra/mystic.html Numbers and Mysticism]
diff --git a/Task/Abundant,-deficient-and-perfect-number-classifications/AutoHotkey/abundant,-deficient-and-perfect-number-classifications.ahk b/Task/Abundant,-deficient-and-perfect-number-classifications/AutoHotkey/abundant,-deficient-and-perfect-number-classifications.ahk
new file mode 100644
index 0000000000..fcd4952d9a
--- /dev/null
+++ b/Task/Abundant,-deficient-and-perfect-number-classifications/AutoHotkey/abundant,-deficient-and-perfect-number-classifications.ahk
@@ -0,0 +1,52 @@
+Loop
+{
+ m := A_index
+ ; getting factors=====================
+ loop % floor(sqrt(m))
+ {
+ if ( mod(m, A_index) == "0" )
+ {
+ if ( A_index ** 2 == m )
+ {
+ list .= A_index . ":"
+ sum := sum + A_index
+ continue
+ }
+ if ( A_index != 1 )
+ {
+ list .= A_index . ":" . m//A_index . ":"
+ sum := sum + A_index + m//A_index
+ }
+ if ( A_index == "1" )
+ {
+ list .= A_index . ":"
+ sum := sum + A_index
+ }
+ }
+ }
+ ; Factors obtained above===============
+ if ( sum == m ) && ( sum != 1 )
+ {
+ result := "perfect"
+ perfect++
+ }
+ if ( sum > m )
+ {
+ result := "Abundant"
+ Abundant++
+ }
+ if ( sum < m ) or ( m == "1" )
+ {
+ result := "Deficient"
+ Deficient++
+ }
+ if ( m == 20000 )
+ {
+ MsgBox % "number: " . m . "`nFactors:`n" . list . "`nSum of Factors: " . Sum . "`nResult: " . result . "`n_______________________`nTotals up to: " . m . "`nPerfect: " . perfect . "`nAbundant: " . Abundant . "`nDeficient: " . Deficient
+ ExitApp
+ }
+ list := ""
+ sum := 0
+}
+
+esc::ExitApp
diff --git a/Task/Abundant,-deficient-and-perfect-number-classifications/C/abundant,-deficient-and-perfect-number-classifications.c b/Task/Abundant,-deficient-and-perfect-number-classifications/C/abundant,-deficient-and-perfect-number-classifications.c
new file mode 100644
index 0000000000..869c90661e
--- /dev/null
+++ b/Task/Abundant,-deficient-and-perfect-number-classifications/C/abundant,-deficient-and-perfect-number-classifications.c
@@ -0,0 +1,41 @@
+#include
+#define d 0
+#define p 1
+#define a 2
+int main(){
+ int sum_pd=0,i,j;
+ int try_max=0;
+ //1 is deficient by default and can add it deficient list
+ int count_list[3]={1,0,0};
+ for(i=2;i<=20000;i++){
+ //Set maximum to check for proper division
+ try_max=i/2;
+ //1 is in all proper division number
+ sum_pd=1;
+ for(j=2;ji){
+ count_list[a]++;
+ continue;
+ }
+ count_list[p]++;
+ }
+ printf("\nThere are %d deficient,",count_list[d]);
+ printf(" %d perfect,",count_list[p]);
+ printf(" %d abundant numbers between 1 and 20000.\n",count_list[a]);
+return 0;
+}
diff --git a/Task/Abundant,-deficient-and-perfect-number-classifications/D/abundant,-deficient-and-perfect-number-classifications.d b/Task/Abundant,-deficient-and-perfect-number-classifications/D/abundant,-deficient-and-perfect-number-classifications.d
new file mode 100644
index 0000000000..b472bca318
--- /dev/null
+++ b/Task/Abundant,-deficient-and-perfect-number-classifications/D/abundant,-deficient-and-perfect-number-classifications.d
@@ -0,0 +1,18 @@
+void main() /*@safe*/ {
+ import std.stdio, std.algorithm, std.range;
+
+ static immutable properDivs = (in uint n) pure nothrow @safe /*@nogc*/ =>
+ iota(1, (n + 1) / 2 + 1).filter!(x => n % x == 0 && n != x);
+
+ enum Class { deficient, perfect, abundant }
+
+ static Class classify(in uint n) pure nothrow @safe /*@nogc*/ {
+ immutable p = properDivs(n).sum;
+ with (Class)
+ return (p < n) ? deficient : ((p == n) ? perfect : abundant);
+ }
+
+ enum rangeMax = 20_000;
+ //iota(1, 1 + rangeMax).map!classify.hashGroup.writeln;
+ iota(1, 1 + rangeMax).map!classify.array.sort().group.writeln;
+}
diff --git a/Task/Abundant,-deficient-and-perfect-number-classifications/Haskell/abundant,-deficient-and-perfect-number-classifications.hs b/Task/Abundant,-deficient-and-perfect-number-classifications/Haskell/abundant,-deficient-and-perfect-number-classifications.hs
new file mode 100644
index 0000000000..070060495b
--- /dev/null
+++ b/Task/Abundant,-deficient-and-perfect-number-classifications/Haskell/abundant,-deficient-and-perfect-number-classifications.hs
@@ -0,0 +1,13 @@
+divisors :: (Integral a) => a -> [a]
+divisors n = filter ((0 ==) . (n `mod`)) [1 .. (n `div` 2)]
+
+classOf :: (Integral a) => a -> Ordering
+classOf n = compare (sum $ divisors n) n
+
+main :: IO ()
+main = do
+ let classes = map classOf [1 .. 20000 :: Int]
+ printRes w c = putStrLn $ w ++ (show . length $ filter (== c) classes)
+ printRes "deficient: " LT
+ printRes "perfect: " EQ
+ printRes "abundant: " GT
diff --git a/Task/Abundant,-deficient-and-perfect-number-classifications/J/abundant,-deficient-and-perfect-number-classifications-1.j b/Task/Abundant,-deficient-and-perfect-number-classifications/J/abundant,-deficient-and-perfect-number-classifications-1.j
new file mode 100644
index 0000000000..064c369417
--- /dev/null
+++ b/Task/Abundant,-deficient-and-perfect-number-classifications/J/abundant,-deficient-and-perfect-number-classifications-1.j
@@ -0,0 +1,2 @@
+factors=: [: /:~@, */&>@{@((^ i.@>:)&.>/)@q:~&__
+properDivisors=: factors -. ]
diff --git a/Task/Abundant,-deficient-and-perfect-number-classifications/J/abundant,-deficient-and-perfect-number-classifications-2.j b/Task/Abundant,-deficient-and-perfect-number-classifications/J/abundant,-deficient-and-perfect-number-classifications-2.j
new file mode 100644
index 0000000000..f143869212
--- /dev/null
+++ b/Task/Abundant,-deficient-and-perfect-number-classifications/J/abundant,-deficient-and-perfect-number-classifications-2.j
@@ -0,0 +1,2 @@
+ (- +/@properDivisors&>) 1+i.10
+1 1 2 1 4 0 6 1 5 2
diff --git a/Task/Abundant,-deficient-and-perfect-number-classifications/J/abundant,-deficient-and-perfect-number-classifications-3.j b/Task/Abundant,-deficient-and-perfect-number-classifications/J/abundant,-deficient-and-perfect-number-classifications-3.j
new file mode 100644
index 0000000000..b81e086dea
--- /dev/null
+++ b/Task/Abundant,-deficient-and-perfect-number-classifications/J/abundant,-deficient-and-perfect-number-classifications-3.j
@@ -0,0 +1,2 @@
+ *(- +/@properDivisors&>) 1+i.30
+1 1 1 1 1 0 1 1 1 1 1 _1 1 1 1 1 1 _1 1 _1 1 1 1 _1 1 1 1 0 1 _1
diff --git a/Task/Abundant,-deficient-and-perfect-number-classifications/J/abundant,-deficient-and-perfect-number-classifications-4.j b/Task/Abundant,-deficient-and-perfect-number-classifications/J/abundant,-deficient-and-perfect-number-classifications-4.j
new file mode 100644
index 0000000000..361ff39705
--- /dev/null
+++ b/Task/Abundant,-deficient-and-perfect-number-classifications/J/abundant,-deficient-and-perfect-number-classifications-4.j
@@ -0,0 +1,2 @@
+ #/.~ *(- +/@properDivisors&>) 1+i.20000
+15043 4 4953
diff --git a/Task/Abundant,-deficient-and-perfect-number-classifications/J/abundant,-deficient-and-perfect-number-classifications-5.j b/Task/Abundant,-deficient-and-perfect-number-classifications/J/abundant,-deficient-and-perfect-number-classifications-5.j
new file mode 100644
index 0000000000..1d6007de9b
--- /dev/null
+++ b/Task/Abundant,-deficient-and-perfect-number-classifications/J/abundant,-deficient-and-perfect-number-classifications-5.j
@@ -0,0 +1,2 @@
+ ~. *(- +/@properDivisors&>) 1+i.20000
+1 0 _1
diff --git a/Task/Abundant,-deficient-and-perfect-number-classifications/Mathematica/abundant,-deficient-and-perfect-number-classifications.math b/Task/Abundant,-deficient-and-perfect-number-classifications/Mathematica/abundant,-deficient-and-perfect-number-classifications.math
new file mode 100644
index 0000000000..7daa1f089e
--- /dev/null
+++ b/Task/Abundant,-deficient-and-perfect-number-classifications/Mathematica/abundant,-deficient-and-perfect-number-classifications.math
@@ -0,0 +1,7 @@
+classify[n_Integer] := Sign[Total[Most@Divisors@n] - n]
+
+StringJoin[
+ Flatten[Tally[
+ Table[classify[n], {n, 20000}]] /. {-1 -> "deficient: ",
+ 0 -> " perfect: ", 1 -> " abundant: "}] /.
+ n_Integer :> ToString[n]]
diff --git a/Task/Abundant,-deficient-and-perfect-number-classifications/PL-I/abundant,-deficient-and-perfect-number-classifications.pli b/Task/Abundant,-deficient-and-perfect-number-classifications/PL-I/abundant,-deficient-and-perfect-number-classifications.pli
new file mode 100644
index 0000000000..8408ef9a10
--- /dev/null
+++ b/Task/Abundant,-deficient-and-perfect-number-classifications/PL-I/abundant,-deficient-and-perfect-number-classifications.pli
@@ -0,0 +1,56 @@
+*process source xref;
+ apd: Proc Options(main);
+ p9a=time();
+ Dcl (p9a,p9b) Pic'(9)9';
+ Dcl cnt(3) Bin Fixed(31) Init((3)0);
+ Dcl x Bin Fixed(31);
+ Dcl pd(300) Bin Fixed(31);
+ Dcl sumpd Bin Fixed(31);
+ Dcl npd Bin Fixed(31);
+ Do x=1 To 20000;
+ Call proper_divisors(x,pd,npd);
+ sumpd=sum(pd,npd);
+ Select;
+ When(x1 Then Do;
+ If mod(n,2)=1 Then /* odd number */
+ delta=2;
+ Else /* even number */
+ delta=1;
+ Do d=1 To n/2 By delta;
+ If mod(n,d)=0 Then Do;
+ npd+=1;
+ pd(npd)=d;
+ End;
+ End;
+ End;
+ End;
+
+ sum: Proc(pd,npd) Returns(Bin Fixed(31));
+ Dcl (pd(300),npd) Bin Fixed(31);
+ Dcl sum Bin Fixed(31) Init(0);
+ Dcl i Bin Fixed(31);
+ Do i=1 To npd;
+ sum+=pd(i);
+ End;
+ Return(sum);
+ End;
+
+ End;
diff --git a/Task/Abundant,-deficient-and-perfect-number-classifications/Pascal/abundant,-deficient-and-perfect-number-classifications.pascal b/Task/Abundant,-deficient-and-perfect-number-classifications/Pascal/abundant,-deficient-and-perfect-number-classifications.pascal
new file mode 100644
index 0000000000..0bc967dad3
--- /dev/null
+++ b/Task/Abundant,-deficient-and-perfect-number-classifications/Pascal/abundant,-deficient-and-perfect-number-classifications.pascal
@@ -0,0 +1,11 @@
+type
+ tdpa = array[0..2] of LongWord; // 0 = deficient,1= perfect,2 = abundant
+var
+ ..
+ DpaCnt : tdpa;
+..
+in function Check
+ // SumOfProperDivs
+ s := DivSumField[i]-i;
+ //in Pascal boolean true == 1/false == 0
+ inc(DpaCnt[Ord(s>=i)-Ord(s<=i)+1]);
diff --git a/Task/Abundant,-deficient-and-perfect-number-classifications/Perl-6/abundant,-deficient-and-perfect-number-classifications.pl6 b/Task/Abundant,-deficient-and-perfect-number-classifications/Perl-6/abundant,-deficient-and-perfect-number-classifications.pl6
new file mode 100644
index 0000000000..dfd1f3a358
--- /dev/null
+++ b/Task/Abundant,-deficient-and-perfect-number-classifications/Perl-6/abundant,-deficient-and-perfect-number-classifications.pl6
@@ -0,0 +1,8 @@
+sub propdivsum (\x) {
+ [+] (1 if x > 1), gather for 2 .. x.sqrt.floor -> \d {
+ my \y = x div d;
+ if y * d == x { take d; take y unless y == d }
+ }
+}
+
+say bag map { propdivsum($_) <=> $_ }, 1..20000
diff --git a/Task/Abundant,-deficient-and-perfect-number-classifications/Perl/abundant,-deficient-and-perfect-number-classifications-1.pl b/Task/Abundant,-deficient-and-perfect-number-classifications/Perl/abundant,-deficient-and-perfect-number-classifications-1.pl
new file mode 100644
index 0000000000..90d9289a70
--- /dev/null
+++ b/Task/Abundant,-deficient-and-perfect-number-classifications/Perl/abundant,-deficient-and-perfect-number-classifications-1.pl
@@ -0,0 +1,2 @@
+use ntheory qw/divisor_sum/;
+say join " ", map { divisor_sum($_)-$_ <=> $_ } 1..30;
diff --git a/Task/Abundant,-deficient-and-perfect-number-classifications/Perl/abundant,-deficient-and-perfect-number-classifications-2.pl b/Task/Abundant,-deficient-and-perfect-number-classifications/Perl/abundant,-deficient-and-perfect-number-classifications-2.pl
new file mode 100644
index 0000000000..5eae5bf393
--- /dev/null
+++ b/Task/Abundant,-deficient-and-perfect-number-classifications/Perl/abundant,-deficient-and-perfect-number-classifications-2.pl
@@ -0,0 +1,4 @@
+use ntheory qw/divisor_sum/;
+my %h;
+$h{divisor_sum($_)-$_ <=> $_}++ for 1..20000;
+say "Perfect: $h{0} Deficient: $h{-1} Abundant: $h{1}";
diff --git a/Task/Abundant,-deficient-and-perfect-number-classifications/Python/abundant,-deficient-and-perfect-number-classifications-1.py b/Task/Abundant,-deficient-and-perfect-number-classifications/Python/abundant,-deficient-and-perfect-number-classifications-1.py
new file mode 100644
index 0000000000..fef62aaa57
--- /dev/null
+++ b/Task/Abundant,-deficient-and-perfect-number-classifications/Python/abundant,-deficient-and-perfect-number-classifications-1.py
@@ -0,0 +1,15 @@
+>>> from proper_divisors import proper_divs
+>>> from collections import Counter
+>>>
+>>> rangemax = 20000
+>>>
+>>> def pdsum(n):
+... return sum(proper_divs(n))
+...
+>>> def classify(n, p):
+... return 'perfect' if n == p else 'abundant' if p > n else 'deficient'
+...
+>>> classes = Counter(classify(n, pdsum(n)) for n in range(1, 1 + rangemax))
+>>> classes.most_common()
+[('deficient', 15043), ('abundant', 4953), ('perfect', 4)]
+>>>
diff --git a/Task/Abundant,-deficient-and-perfect-number-classifications/Python/abundant,-deficient-and-perfect-number-classifications-2.py b/Task/Abundant,-deficient-and-perfect-number-classifications/Python/abundant,-deficient-and-perfect-number-classifications-2.py
new file mode 100644
index 0000000000..bf3832ad49
--- /dev/null
+++ b/Task/Abundant,-deficient-and-perfect-number-classifications/Python/abundant,-deficient-and-perfect-number-classifications-2.py
@@ -0,0 +1,26 @@
+#lang racket
+(require "proper-divisors.rkt")
+(define SCOPE 20000)
+
+(define P
+ (let ((P-v (vector)))
+ (λ (n)
+ (set! P-v (fold-divisors P-v n 0 +))
+ (vector-ref P-v n))))
+
+(define-values
+ (a d p)
+ (for/fold ((a 0) (d 0) (p 0))
+ ((n (in-range SCOPE 0 -1))) ; doing this backwards initialises the memo
+ (match (- (P n) n)
+ [0 (values a d (add1 p))] ; perfect
+ [(? negative?) (values a (add1 d) p)] ; deficient
+ [(? positive?) (values (add1 a) d p)]))) ; abundant
+
+(printf #< n] += 1}
+puts "Deficient: #{res[-1]} Perfect: #{res[0]} Abundant: #{res[1]}"
diff --git a/Task/Abundant,-deficient-and-perfect-number-classifications/Scala/abundant,-deficient-and-perfect-number-classifications.scala b/Task/Abundant,-deficient-and-perfect-number-classifications/Scala/abundant,-deficient-and-perfect-number-classifications.scala
new file mode 100644
index 0000000000..bb0b6fb49f
--- /dev/null
+++ b/Task/Abundant,-deficient-and-perfect-number-classifications/Scala/abundant,-deficient-and-perfect-number-classifications.scala
@@ -0,0 +1,6 @@
+def properDivisors(n: Int) = (1 to n/2).filter(i => n % i == 0)
+def classifier(i: Int) = properDivisors(i).sum compare i
+val groups = (1 to 20000).groupBy( classifier )
+println("Deficient: " + groups(-1).length)
+println("Abundant: " + groups(1).length)
+println("Perfect: " + groups(0).length + " (" + groups(0).mkString(",") + ")")
diff --git a/Task/Abundant,-deficient-and-perfect-number-classifications/VBScript/abundant,-deficient-and-perfect-number-classifications.vb b/Task/Abundant,-deficient-and-perfect-number-classifications/VBScript/abundant,-deficient-and-perfect-number-classifications.vb
new file mode 100644
index 0000000000..17ddc48cbf
--- /dev/null
+++ b/Task/Abundant,-deficient-and-perfect-number-classifications/VBScript/abundant,-deficient-and-perfect-number-classifications.vb
@@ -0,0 +1,23 @@
+Deficient = 0
+Perfect = 0
+Abundant = 0
+For i = 1 To 20000
+ sum = 0
+ For n = 1 To 20000
+ If n < i Then
+ If i Mod n = 0 Then
+ sum = sum + n
+ End If
+ End If
+ Next
+ If sum < i Then
+ Deficient = Deficient + 1
+ ElseIf sum = i Then
+ Perfect = Perfect + 1
+ ElseIf sum > i Then
+ Abundant = Abundant + 1
+ End If
+Next
+WScript.Echo "Deficient = " & Deficient & vbCrLf &_
+ "Perfect = " & Perfect & vbCrLf &_
+ "Abundant = " & Abundant
diff --git a/Task/Aliquot-sequence-classifications/00DESCRIPTION b/Task/Aliquot-sequence-classifications/00DESCRIPTION
new file mode 100644
index 0000000000..9b9729b67a
--- /dev/null
+++ b/Task/Aliquot-sequence-classifications/00DESCRIPTION
@@ -0,0 +1,29 @@
+An [[wp:Aliquot sequence|aliquot sequence]] of a positive integer K is defined recursively as the first member
+being K and subsequent members being the sum of the [[Proper divisors]] of the previous term.
+
+:* If the terms eventually reach 0 then the series for K is said to '''terminate'''.
+
+:
There are several classifications for non termination:
+:* If the second term is K then all future terms are also K and so the sequence repeats from the first term with period 1 and K is called '''perfect'''.
+:* If the third term ''would'' be repeating K then the sequence repeats with period 2 and K is called '''amicable'''.
+:* If the N'th term ''would'' be repeating K for the first time, with N > 3 then the sequence repeats with period N - 1 and K is called '''sociable'''.
+:
Perfect, amicable and sociable numbers eventually repeat the original number K; there are other repetitions...
+:* Some K have a sequence that eventually forms a periodic repetition of period 1 but of a number other than K, for example 95 which forms the sequence 95, 25, 6, 6, 6, ... such K are called '''aspiring'''.
+:* K that have a sequence that eventually forms a periodic repetition of period >= 2 but of a number other than K, for example 562 which forms the sequence 562, 284, 220, 284, 220, ... such K are called '''cyclic'''.
+
+:
And finally:
+:* Some K form aliquot sequences that are not known to be either terminating or periodic. these K are to be called '''non-terminating'''.
For the purposes of this task, K is to be classed as non-terminating if it has not been otherwise classed after generating '''16''' terms or if any term of the sequence is greater than 2**47 = 140737488355328.
+
+
+;Task:
+# Create routine(s) to generate the aliquot sequence of a positive integer enough to classify it according to the classifications given above.
+# Use it to display the classification and sequences of the numbers one to ten inclusive.
+# Use it to show the classification and sequences of the following integers, in order:
+:: 11, 12, 28, 496, 220, 1184, 12496, 1264460, 790, 909, 562, 1064, 1488, and optionally 15355717786080.
+
+Show all output on this page.
+
+;Cf.
+* [[Abundant, deficient and perfect number classifications]]. (Classifications from only the first two members of the whole sequence).
+* [[Proper divisors]]
+* [[Amicable pairs]]
diff --git a/Task/Aliquot-sequence-classifications/D/aliquot-sequence-classifications.d b/Task/Aliquot-sequence-classifications/D/aliquot-sequence-classifications.d
new file mode 100644
index 0000000000..3a915675d2
--- /dev/null
+++ b/Task/Aliquot-sequence-classifications/D/aliquot-sequence-classifications.d
@@ -0,0 +1,51 @@
+import std.stdio, std.range, std.algorithm, std.typecons, std.conv;
+
+auto properDivisors(in ulong n) pure nothrow @safe /*@nogc*/ {
+ return iota(1UL, (n + 1) / 2 + 1).filter!(x => n % x == 0 && n != x);
+}
+
+enum pDivsSum = (in ulong n) pure nothrow @safe /*@nogc*/ =>
+ n.properDivisors.sum;
+
+auto aliquot(in ulong n,
+ in size_t maxLen=16,
+ in ulong maxTerm=2UL^^47) pure nothrow @safe {
+ if (n == 0)
+ return tuple("Terminating", [0UL]);
+ ulong[] s = [n];
+ size_t sLen = 1;
+ ulong newN = n;
+
+ while (sLen <= maxLen && newN < maxTerm) {
+ newN = s.back.pDivsSum;
+ if (s.canFind(newN)) {
+ if (s[0] == newN) {
+ if (sLen == 1) {
+ return tuple("Perfect", s);
+ } else if (sLen == 2) {
+ return tuple("Amicable", s);
+ } else
+ return tuple(text("Sociable of length ", sLen), s);
+ } else if (s.back == newN) {
+ return tuple("Aspiring", s);
+ } else
+ return tuple(text("Cyclic back to ", newN), s);
+ } else if (newN == 0) {
+ return tuple("Terminating", s ~ 0);
+ } else {
+ s ~= newN;
+ sLen++;
+ }
+ }
+
+ return tuple("Non-terminating", s);
+}
+
+void main() {
+ foreach (immutable n; 1 .. 11)
+ writefln("%s: %s", n.aliquot[]);
+ writeln;
+ foreach (immutable n; [11, 12, 28, 496, 220, 1184, 12496, 1264460,
+ 790, 909, 562, 1064, 1488])
+ writefln("%s: %s", n.aliquot[]);
+}
diff --git a/Task/Aliquot-sequence-classifications/Haskell/aliquot-sequence-classifications.hs b/Task/Aliquot-sequence-classifications/Haskell/aliquot-sequence-classifications.hs
new file mode 100644
index 0000000000..944e015706
--- /dev/null
+++ b/Task/Aliquot-sequence-classifications/Haskell/aliquot-sequence-classifications.hs
@@ -0,0 +1,41 @@
+divisors :: (Integral a) => a -> [a]
+divisors n = filter ((0 ==) . (n `mod`)) [1 .. (n `div` 2)]
+
+data Class
+ = Terminating
+ | Perfect
+ | Amicable
+ | Sociable
+ | Aspiring
+ | Cyclic
+ | Nonterminating
+ deriving (Show)
+
+aliquot :: (Integral a) => a -> [a]
+aliquot 0 = [0]
+aliquot n = n : (aliquot $ sum $ divisors n)
+
+classify :: (Num a, Eq a) => [a] -> Class
+classify [] = Nonterminating
+classify [0] = Terminating
+classify [_] = Nonterminating
+classify [a,b]
+ | a == b = Perfect
+ | b == 0 = Terminating
+ | otherwise = Nonterminating
+classify x@(a:b:c:_)
+ | a == b = Perfect
+ | a == c = Amicable
+ | a `elem` (drop 1 x) = Sociable
+ | otherwise =
+ case classify (drop 1 x) of
+ Perfect -> Aspiring
+ Amicable -> Cyclic
+ Sociable -> Cyclic
+ d -> d
+
+main :: IO ()
+main = do
+ let cls n = let ali = take 16 $ aliquot n in (classify ali, ali)
+ mapM_ (print . cls) $ [1..10] ++
+ [11, 12, 28, 496, 220, 1184, 12496, 1264460, 790, 909, 562, 1064, 1488]
diff --git a/Task/Aliquot-sequence-classifications/J/aliquot-sequence-classifications-1.j b/Task/Aliquot-sequence-classifications/J/aliquot-sequence-classifications-1.j
new file mode 100644
index 0000000000..89f9521754
--- /dev/null
+++ b/Task/Aliquot-sequence-classifications/J/aliquot-sequence-classifications-1.j
@@ -0,0 +1,5 @@
+proper_divisors =: [: */&> [: }: [: , [: { [: <@:({. ^ i.@:>:@:{:)";: [: |: 2 p: x:
+aliquot =: ([: +/ proper_divisors) ::0:
+rc_aliquot_sequence =: aliquot^:(i.16)&>
+rc_classify =: [: {. ([;.1' invalid terminate non-terminating perfect amicable sociable aspiring cyclic') #~ (16 ~: #) , (6 > {:) , (([: +./ (2^47x)&<) +. (16 = #@:~.)) , (1 = #@:~.) , ((8&= , 1&<)@:{.@:(#/.~)) , ([: =/ _2&{.) , 1:
+rc_display_aliquot_sequence =: (":,~' ',~rc_classify)@:rc_aliquot_sequence
diff --git a/Task/Aliquot-sequence-classifications/J/aliquot-sequence-classifications-2.j b/Task/Aliquot-sequence-classifications/J/aliquot-sequence-classifications-2.j
new file mode 100644
index 0000000000..4a9dda699c
--- /dev/null
+++ b/Task/Aliquot-sequence-classifications/J/aliquot-sequence-classifications-2.j
@@ -0,0 +1,27 @@
+ rc_display_aliquot_sequence&> >: i.10
+ terminate 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ terminate 2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ terminate 3 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ terminate 4 3 1 0 0 0 0 0 0 0 0 0 0 0 0 0
+ terminate 5 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ perfect 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6
+ terminate 7 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ terminate 8 7 1 0 0 0 0 0 0 0 0 0 0 0 0 0
+ terminate 9 4 3 1 0 0 0 0 0 0 0 0 0 0 0 0
+ terminate 10 8 7 1 0 0 0 0 0 0 0 0 0 0 0 0
+
+ rc_display_aliquot_sequence&>11, 12, 28, 496, 220, 1184, 12496, 1264460, 790, 909, 562, 1064, 1488, 15355717786080x
+ terminate 11 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...
+ terminate 12 16 15 9 4 3 1 0 0 0 0 0 0 0 0 0 ...
+ perfect 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 ...
+ perfect 496 496 496 496 496 496 496 496 496 496 496 496 496 496 496 496 ...
+ amicable 220 284 220 284 220 284 220 284 220 284 220 284 220 284 220 284 ...
+ amicable 1184 1210 1184 1210 1184 1210 1184 1210 1184 1210 1184 1210 1184 1210 1184 1210 ...
+ sociable 12496 14288 15472 14536 14264 12496 14288 15472 14536 14264 12496 14288 15472 14536 14264 12496 ...
+ sociable 1264460 1547860 1727636 1305184 1264460 1547860 1727636 1305184 1264460 1547860 1727636 1305184 1264460 1547860 1727636 1305184 ...
+ aspiring 790 650 652 496 496 496 496 496 496 496 496 496 496 496 496 496 ...
+ aspiring 909 417 143 25 6 6 6 6 6 6 6 6 6 6 6 6 ...
+ cyclic 562 284 220 284 220 284 220 284 220 284 220 284 220 284 220 284 ...
+ cyclic 1064 1336 1184 1210 1184 1210 1184 1210 1184 1210 1184 1210 1184 1210 1184 1210 ...
+ non-terminating 1488 2480 3472 4464 8432 9424 10416 21328 22320 55056 95728 96720 236592 459792 881392 882384 ...
+ non-terminating 15355717786080 44534663601120 144940087464480 471714103310688 1130798979186912 2688948041357088 6050151708497568 13613157922639968 35513546724070632 74727605255142168 162658586225561832 353930992506879768 642678347124409032 112510261154846...
diff --git a/Task/Aliquot-sequence-classifications/Perl-6/aliquot-sequence-classifications.pl6 b/Task/Aliquot-sequence-classifications/Perl-6/aliquot-sequence-classifications.pl6
new file mode 100644
index 0000000000..98f75eaf93
--- /dev/null
+++ b/Task/Aliquot-sequence-classifications/Perl-6/aliquot-sequence-classifications.pl6
@@ -0,0 +1,34 @@
+sub propdivsum (\x) {
+ [+] x > 1, gather for 2 .. x.sqrt.floor -> \d {
+ my \y = x div d;
+ if y * d == x { take d; take y unless y == d }
+ }
+}
+
+multi quality (0,1) { 'perfect ' }
+multi quality (0,2) { 'amicable' }
+multi quality (0,$n) { "sociable-$n" }
+multi quality ($,1) { 'aspiring' }
+multi quality ($,$n) { "cyclic-$n" }
+
+sub aliquotidian ($x) {
+ my %seen;
+ my @seq := $x, &propdivsum ... *;
+ for 0..16 -> $to {
+ my $this = @seq[$to] or return "$x terminating [@seq[^$to]]";
+ last if $this > 140737488355328;
+ if %seen{$this}:exists {
+ my $from = %seen{$this};
+ return "$x &quality($from, $to-$from) [@seq[^$to]]";
+ }
+ %seen{$this} = $to;
+ }
+ "$x non-terminating";
+
+}
+
+aliquotidian($_).say for
+ 1..10,
+ 11, 12, 28, 496, 220, 1184, 12496, 1264460,
+ 790, 909, 562, 1064, 1488,
+ 15355717786080;
diff --git a/Task/Aliquot-sequence-classifications/Perl/aliquot-sequence-classifications.pl b/Task/Aliquot-sequence-classifications/Perl/aliquot-sequence-classifications.pl
new file mode 100644
index 0000000000..6897c41ff7
--- /dev/null
+++ b/Task/Aliquot-sequence-classifications/Perl/aliquot-sequence-classifications.pl
@@ -0,0 +1,36 @@
+use ntheory qw/divisor_sum/;
+
+sub aliquot {
+ my($n, $maxterms, $maxn) = @_;
+ $maxterms = 16 unless defined $maxterms;
+ $maxn = 2**47 unless defined $maxn;
+
+ my %terms = ($n => 1);
+ my @allterms = ($n);
+ for my $term (2 .. $maxterms) {
+ $n = divisor_sum($n)-$n;
+ # push onto allterms here if we want the cyclic term to display
+ last if $n > $maxn;
+ return ("terminates",@allterms, 0) if $n == 0;
+ if (defined $terms{$n}) {
+ return ("perfect",@allterms) if $term == 2 && $terms{$n} == 1;
+ return ("amicible",@allterms) if $term == 3 && $terms{$n} == 1;
+ return ("sociable-".($term-1),@allterms) if $term > 3 && $terms{$n} == 1;
+ return ("aspiring",@allterms) if $terms{$n} == $term-1;
+ return ("cyclic-".($term-$terms{$n}),@allterms) if $terms{$n} < $term-1;
+ }
+ $terms{$n} = $term;
+ push @allterms, $n;
+ }
+ ("non-term",@allterms);
+}
+
+for my $n (1..10) {
+ my($class, @seq) = aliquot($n);
+ printf "%14d %10s [@seq]\n", $n, $class;
+}
+print "\n";
+for my $n (qw/11 12 28 496 220 1184 12496 1264460 790 909 562 1064 1488 15355717786080/) {
+ my($class, @seq) = aliquot($n);
+ printf "%14d %10s [@seq]\n", $n, $class;
+}
diff --git a/Task/Aliquot-sequence-classifications/Python/aliquot-sequence-classifications.py b/Task/Aliquot-sequence-classifications/Python/aliquot-sequence-classifications.py
new file mode 100644
index 0000000000..027640469a
--- /dev/null
+++ b/Task/Aliquot-sequence-classifications/Python/aliquot-sequence-classifications.py
@@ -0,0 +1,41 @@
+from proper_divisors import proper_divs
+from functools import lru_cache
+
+
+@lru_cache()
+def pdsum(n):
+ return sum(proper_divs(n))
+
+
+def aliquot(n, maxlen=16, maxterm=2**47):
+ if n == 0:
+ return 'terminating', [0]
+ s, slen, new = [n], 1, n
+ while slen <= maxlen and new < maxterm:
+ new = pdsum(s[-1])
+ if new in s:
+ if s[0] == new:
+ if slen == 1:
+ return 'perfect', s
+ elif slen == 2:
+ return 'amicable', s
+ else:
+ return 'sociable of length %i' % slen, s
+ elif s[-1] == new:
+ return 'aspiring', s
+ else:
+ return 'cyclic back to %i' % new, s
+ elif new == 0:
+ return 'terminating', s + [0]
+ else:
+ s.append(new)
+ slen += 1
+ else:
+ return 'non-terminating', s
+
+if __name__ == '__main__':
+ for n in range(1, 11):
+ print('%s: %r' % aliquot(n))
+ print()
+ for n in [11, 12, 28, 496, 220, 1184, 12496, 1264460, 790, 909, 562, 1064, 1488, 15355717786080]:
+ print('%s: %r' % aliquot(n))
diff --git a/Task/Aliquot-sequence-classifications/README b/Task/Aliquot-sequence-classifications/README
new file mode 100644
index 0000000000..07a02fc175
--- /dev/null
+++ b/Task/Aliquot-sequence-classifications/README
@@ -0,0 +1 @@
+Data source: http://rosettacode.org/wiki/Aliquot_sequence_classifications
diff --git a/Task/Aliquot-sequence-classifications/REXX/aliquot-sequence-classifications.rexx b/Task/Aliquot-sequence-classifications/REXX/aliquot-sequence-classifications.rexx
new file mode 100644
index 0000000000..ae16429c73
--- /dev/null
+++ b/Task/Aliquot-sequence-classifications/REXX/aliquot-sequence-classifications.rexx
@@ -0,0 +1,62 @@
+/*REXX pgm classifies various positive integers for aliquot sequences. */
+parse arg low high L /*get optional arguments*/
+high=word(high low 10,1); low=word(low 1,1) /*get the LOW and HIGH. */
+if L='' then L=11 12 28 496 220 1184 12496 1264460 790 909 562 1064 1488
+big=2**47; NTlimit=16+1 /*limit: non-terminating*/
+numeric digits max(9, 1+length(big)) /*be able to handle // */
+@.=.; @.0=0; @.1=0 /*proper divisor sums. */
+say center('numbers from ' low " to " high, 79, "═")
+
+ do n=low to high /*process probably some low nums.*/
+ call classify_aliquot n /*call subroutine to classify it.*/
+ end /*n*/ /* [↑] process a range of ints.*/
+say
+say center('first numbers for each classification', 79, "═")
+b.=0 /* [↓] ensure one of each class.*/
+ do q=1 until b.sociable \== 0 /*only one that has to be counted*/
+ call classify_aliquot -q /*the minus sign indicates ¬tell.*/
+ b._=b._+1; if b._==1 then call show_class q,$ /*show 1st found.*/
+ end /*q*/ /* [↑] until all classes found. */
+say
+say center('classifications for specific numbers', 79, "═")
+
+ do i=1 for words(L) /*L is a list of "special numbers*/
+ call classify_aliquot word(L,i) /*call subroutine to classify it.*/
+ end /*i*/ /* [↑] process a list of numbers*/
+exit /*stick a fork in it, we're done.*/
+/*──────────────────────────────────CLASSIFY_ALIQUOT subroutine─────────*/
+classify_aliquot: parse arg a 1 aa; a=abs(a) /*get what # to be used.*/
+if @.a\==. then s=@.a /*Was number been summed before? */
+ else s=SPdivs(a) /*No, then do it the hard way. */
+@.a=s; $=s /*define sum of the proper DIVs. */
+what='terminating' /*assume this classification kind*/
+c.=0; c.s=1 /*clear all cyclic seqs, set 1st.*/
+if $==a then what='perfect' /*check for "perfect" number. */
+ else do t=1 while s\==0 /*loop until sum isn't 0 or >big.*/
+ m=word($, words($)) /*obtain the last number in seq. */
+ if @.m==. then s=SPdivs(m) /*if ¬defined, then sum Pdivs.*/
+ else s=@.m /*use the previously found number*/
+ if m==s & m\==0 then do; what='aspiring' ; leave; end
+ if word($,2)==a then do; what='amicable' ; leave; end
+ $=$ s /*append a sum to number sequence*/
+ if s==a & t>3 then do; what='sociable' ; leave; end
+ if c.s & m\==0 then do; what='cyclic' ; leave; end
+ c.s=1 /*assign another possible cyclic.*/
+ /* [↓] Rosetta Code's limit: >16*/
+ if t>NTlimit then do; what='non-terminating'; leave; end
+ if s>big then do; what='NON-TERMINATING'; leave; end
+ end /*t*/ /* [↑] only permit within reason*/
+if aa>0 then call show_class a,$ /*only display if A is positive.*/
+return
+/*──────────────────────────────────SHOW_CLASS subroutine───────────────*/
+show_class: say right(arg(1),digits()) 'is' center(what,15) arg(2); return
+/*──────────────────────────────────SPDIVS subroutine───────────────────*/
+SPdivs: procedure expose @.; parse arg x; if x<2 then return 0; odd=x//2
+s=1 /* [↓] use only EVEN|ODD integers*/
+ do j=2+odd by 1+odd while j*j n SCOPE)
+ (apply + (drop-right (divisors n) 1))]
+ [else
+ (set! P-v (fold-divisors P-v n 0 +))
+ (vector-ref P-v n)]))))
+
+;; initialise P-v
+(void (P SCOPE))
+
+(define (aliquot-sequence-class K)
+ ;; note that seq is reversed as a list, since we're consing
+ (define (inr-asc seq)
+ (match seq
+ [(list 0 _ ...)
+ (values "terminating" seq)]
+ [(list (== K) (== K) _ ...)
+ (values "perfect" seq)]
+ [(list n n _ ...)
+ (values (format "aspiring to ~a" n) seq)]
+ [(list (== K) ami (== K) _ ...)
+ (values (format "amicable with ~a" ami) seq)]
+ [(list (== K) cycle ... (== K))
+ (values (format "sociable length ~a" (add1 (length cycle))) seq)]
+ [(list n cycle ... n _ ...)
+ (values (format "cyclic on ~a length ~a" n (add1 (length cycle))) seq)]
+ [(list X _ ...)
+ #:when (> X 140737488355328)
+ (values "non-terminating big number" seq)]
+ [(list seq ...)
+ #:when (> (length seq) 16)
+ (values "non-terminating long sequence" seq)]
+ [(list seq1 seq ...) (inr-asc (list* (P seq1) seq1 seq))]))
+(inr-asc (list K)))
+
+(define (report-aliquot-sequence-class n)
+ (define-values (c s) (aliquot-sequence-class n))
+ (printf "~a:\t~a\t~a~%" n c (reverse s)))
+
+(for ((i (in-range 1 10)))
+ (report-aliquot-sequence-class i))
+(newline)
+
+(for ((i (in-list '(11 12 28 496 220 1184 12496 1264460 790 909 562 1064 1488 15355717786080))))
+ (report-aliquot-sequence-class i))
diff --git a/Task/Aliquot-sequence-classifications/Ruby/aliquot-sequence-classifications.rb b/Task/Aliquot-sequence-classifications/Ruby/aliquot-sequence-classifications.rb
new file mode 100644
index 0000000000..25f001ae72
--- /dev/null
+++ b/Task/Aliquot-sequence-classifications/Ruby/aliquot-sequence-classifications.rb
@@ -0,0 +1,29 @@
+def aliquot(n, maxlen=16, maxterm=2**47)
+ return "terminating", [0] if n == 0
+ s = []
+ while (s << n).size <= maxlen and n < maxterm
+ n = n.proper_divisors.inject(0, :+)
+ if s.include?(n)
+ case n
+ when s[0]
+ case s.size
+ when 1 then return "perfect", s
+ when 2 then return "amicable", s
+ else return "sociable of length #{s.size}", s
+ end
+ when s[-1] then return "aspiring", s
+ else return "cyclic back to #{n}", s
+ end
+ elsif n == 0 then return "terminating", s << 0
+ end
+ end
+ return "non-terminating", s
+end
+
+for n in 1..10
+ puts "%20s: %p" % aliquot(n)
+end
+puts
+for n in [11, 12, 28, 496, 220, 1184, 12496, 1264460, 790, 909, 562, 1064, 1488, 15355717786080]
+ puts "%20s: %p" % aliquot(n)
+end
diff --git a/Task/Aliquot-sequence-classifications/Scala/aliquot-sequence-classifications.scala b/Task/Aliquot-sequence-classifications/Scala/aliquot-sequence-classifications.scala
new file mode 100644
index 0000000000..edbb871cb8
--- /dev/null
+++ b/Task/Aliquot-sequence-classifications/Scala/aliquot-sequence-classifications.scala
@@ -0,0 +1,20 @@
+def createAliquotSeq(n: Long, step: Int, list: List[Long]): (String, List[Long]) = {
+ val sum = properDivisors(n).sum
+ if (sum == 0) ("terminate", list ::: List(sum))
+ else if (step >= 16 || sum > 140737488355328L) ("non-term", list)
+ else {
+ list.indexOf(sum) match {
+ case -1 => createAliquotSeq(sum, step + 1, list ::: List(sum))
+ case 0 => if (step == 0) ("perfect", list ::: List(sum))
+ else if (step == 1) ("amicable", list ::: List(sum))
+ else ("sociable-" + (step + 1), list ::: List(sum))
+ case index => if (step == index) ("aspiring", list ::: List(sum))
+ else ("cyclic-" + (step - index + 1), list ::: List(sum))
+ }
+ }
+}
+val numbers = List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 28, 496, 220, 1184,
+ 12496, 1264460, 790, 909, 562, 1064, 1488, 15355717786080L)
+val result = numbers.map(i => createAliquotSeq(i, 0, List(i)))
+
+result foreach { v => println(f"${v._2.head}%14d ${v._1}%10s [${v._2 mkString " "}]" ) }
diff --git a/Task/Almost-prime/00DESCRIPTION b/Task/Almost-prime/00DESCRIPTION
new file mode 100644
index 0000000000..b48de6f50a
--- /dev/null
+++ b/Task/Almost-prime/00DESCRIPTION
@@ -0,0 +1,8 @@
+A [[wp:Almost prime|k-Almost-prime]] is a natural number that is the product of (possibly identical) primes.
+So, for example, 1-almost-primes, where , are the prime numbers themselves; 2-almost-primes are the [[Semiprime|semiprimes]].
+
+The task is to write a function/method/subroutine/... that generates k-almost primes and use it to create a table here of the first ten members of k-Almost primes for .
+
+;Cf.
+* [[Semiprime]]
+* [[:Category:Prime Numbers]]
diff --git a/Task/Almost-prime/00META.yaml b/Task/Almost-prime/00META.yaml
new file mode 100644
index 0000000000..06b4f1f0c9
--- /dev/null
+++ b/Task/Almost-prime/00META.yaml
@@ -0,0 +1,2 @@
+---
+note: Prime Numbers
diff --git a/Task/Almost-prime/Ada/almost-prime.ada b/Task/Almost-prime/Ada/almost-prime.ada
new file mode 100644
index 0000000000..0284c35f41
--- /dev/null
+++ b/Task/Almost-prime/Ada/almost-prime.ada
@@ -0,0 +1,25 @@
+with Prime_Numbers, Ada.Text_IO;
+
+procedure Test_Kth_Prime is
+
+ package Integer_Numbers is new
+ Prime_Numbers (Natural, 0, 1, 2);
+ use Integer_Numbers;
+
+ Out_Length: constant Positive := 10; -- 10 k-th almost primes
+ N: Positive; -- the "current number" to be checked
+
+begin
+ for K in 1 .. 5 loop
+ Ada.Text_IO.Put("K =" & Integer'Image(K) &": ");
+ N := 2;
+ for I in 1 .. Out_Length loop
+ while Decompose(N)'Length /= K loop
+ N := N + 1;
+ end loop; -- now N is Kth almost prime;
+ Ada.Text_IO.Put(Integer'Image(Integer(N)));
+ N := N + 1;
+ end loop;
+ Ada.Text_IO.New_Line;
+ end loop;
+end Test_Kth_Prime;
diff --git a/Task/Almost-prime/AutoHotkey/almost-prime.ahk b/Task/Almost-prime/AutoHotkey/almost-prime.ahk
new file mode 100644
index 0000000000..659ecf318e
--- /dev/null
+++ b/Task/Almost-prime/AutoHotkey/almost-prime.ahk
@@ -0,0 +1,27 @@
+kprime(n,k) {
+ p:=2, f:=0
+ while( (f1) == k
+}
+
+k:=1, results:=""
+while( k<=5 ) {
+ i:=2, c:=0, results:=results "k =" k ":"
+ while( c<10 ) {
+ if (kprime(i,k)) {
+ results:=results " " i
+ c++
+ }
+ i++
+ }
+ results:=results "`n"
+ k++
+}
+
+MsgBox % results
diff --git a/Task/Almost-prime/C-sharp/almost-prime.cs b/Task/Almost-prime/C-sharp/almost-prime.cs
new file mode 100644
index 0000000000..ec8a76bbc4
--- /dev/null
+++ b/Task/Almost-prime/C-sharp/almost-prime.cs
@@ -0,0 +1,55 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+
+namespace AlmostPrime
+{
+ class Program
+ {
+ static void Main(string[] args)
+ {
+ foreach (int k in Enumerable.Range(1, 5))
+ {
+ KPrime kprime = new KPrime() { K = k };
+ Console.WriteLine("k = {0}: {1}",
+ k, string.Join(" ", kprime.GetFirstN(10)));
+ }
+ }
+ }
+
+ class KPrime
+ {
+ public int K { get; set; }
+
+ public bool IsKPrime(int number)
+ {
+ int primes = 0;
+ for (int p = 2; p * p <= number && primes < K; ++p)
+ {
+ while (number % p == 0 && primes < K)
+ {
+ number /= p;
+ ++primes;
+ }
+ }
+ if (number > 1)
+ {
+ ++primes;
+ }
+ return primes == K;
+ }
+
+ public List GetFirstN(int n)
+ {
+ List result = new List();
+ for (int number = 2; result.Count < n; ++number)
+ {
+ if (IsKPrime(number))
+ {
+ result.Add(number);
+ }
+ }
+ return result;
+ }
+ }
+}
diff --git a/Task/Almost-prime/C/almost-prime.c b/Task/Almost-prime/C/almost-prime.c
new file mode 100644
index 0000000000..1f2080aa73
--- /dev/null
+++ b/Task/Almost-prime/C/almost-prime.c
@@ -0,0 +1,30 @@
+#include
+
+int kprime(int n, int k)
+{
+ int p, f = 0;
+ for (p = 2; f < k && p*p <= n; p++)
+ while (0 == n % p)
+ n /= p, f++;
+
+ return f + (n > 1) == k;
+}
+
+int main(void)
+{
+ int i, c, k;
+
+ for (k = 1; k <= 5; k++) {
+ printf("k = %d:", k);
+
+ for (i = 2, c = 0; c < 10; i++)
+ if (kprime(i, k)) {
+ printf(" %d", i);
+ c++;
+ }
+
+ putchar('\n');
+ }
+
+ return 0;
+}
diff --git a/Task/Almost-prime/Common-Lisp/almost-prime.lisp b/Task/Almost-prime/Common-Lisp/almost-prime.lisp
new file mode 100644
index 0000000000..a97daf5f72
--- /dev/null
+++ b/Task/Almost-prime/Common-Lisp/almost-prime.lisp
@@ -0,0 +1,13 @@
+(defun start ()
+ (loop for k from 1 to 5
+ do (format t "k = ~a: ~a~%" k (collect-k-almost-prime k))))
+
+(defun collect-k-almost-prime (k &optional (d 2) (lst nil))
+ (cond ((= (length lst) 10) (reverse lst))
+ ((= (?-primality d) k) (collect-k-almost-prime k (+ d 1) (cons d lst)))
+ (t (collect-k-almost-prime k (+ d 1) lst))))
+
+(defun ?-primality (n &optional (d 2) (c 0))
+ (cond ((> d (isqrt n)) (+ c 1))
+ ((zerop (rem n d)) (?-primality (/ n d) d (+ c 1)))
+ (t (?-primality n (+ d 1) c))))
diff --git a/Task/Almost-prime/D/almost-prime.d b/Task/Almost-prime/D/almost-prime.d
new file mode 100644
index 0000000000..c9016d426c
--- /dev/null
+++ b/Task/Almost-prime/D/almost-prime.d
@@ -0,0 +1,36 @@
+import std.stdio, std.algorithm, std.traits;
+
+Unqual!T[] decompose(T)(in T number) pure nothrow
+in {
+ assert(number > 1);
+} body {
+ typeof(return) result;
+ Unqual!T n = number;
+
+ for (Unqual!T i = 2; n % i == 0; n /= i)
+ result ~= i;
+ for (Unqual!T i = 3; n >= i * i; i += 2)
+ for (; n % i == 0; n /= i)
+ result ~= i;
+
+ if (n != 1)
+ result ~= n;
+ return result;
+}
+
+void main() {
+ enum outLength = 10; // 10 k-th almost primes.
+
+ foreach (immutable k; 1 .. 6) {
+ writef("K = %d: ", k);
+ auto n = 2; // The "current number" to be checked.
+ foreach (immutable i; 1 .. outLength + 1) {
+ while (n.decompose.length != k)
+ n++;
+ // Now n is K-th almost prime.
+ write(n, " ");
+ n++;
+ }
+ writeln;
+ }
+}
diff --git a/Task/Almost-prime/Go/almost-prime.go b/Task/Almost-prime/Go/almost-prime.go
new file mode 100644
index 0000000000..6565b5f17a
--- /dev/null
+++ b/Task/Almost-prime/Go/almost-prime.go
@@ -0,0 +1,36 @@
+package main
+
+import "fmt"
+
+func kPrime(n, k int) bool {
+ nf := 0
+ for i := 2; i <= n; i++ {
+ for n%i == 0 {
+ if nf == k {
+ return false
+ }
+ nf++
+ n /= i
+ }
+ }
+ return nf == k
+}
+
+func gen(k, n int) []int {
+ r := make([]int, n)
+ n = 2
+ for i := range r {
+ for !kPrime(n, k) {
+ n++
+ }
+ r[i] = n
+ n++
+ }
+ return r
+}
+
+func main() {
+ for k := 1; k <= 5; k++ {
+ fmt.Println(k, gen(k, 10))
+ }
+}
diff --git a/Task/Almost-prime/Haskell/almost-prime.hs b/Task/Almost-prime/Haskell/almost-prime.hs
new file mode 100644
index 0000000000..037341c890
--- /dev/null
+++ b/Task/Almost-prime/Haskell/almost-prime.hs
@@ -0,0 +1,18 @@
+isPrime :: Integral a => a -> Bool
+isPrime n = not $ any ((0 ==) . (mod n)) [2..(truncate $ sqrt $ fromIntegral n)]
+
+primes :: [Integer]
+primes = filter isPrime [2..]
+
+isKPrime :: (Num a, Eq a) => a -> Integer -> Bool
+isKPrime 1 n = isPrime n
+isKPrime k n = any (isKPrime (k - 1)) sprimes
+ where
+ sprimes = map fst $ filter ((0 ==) . snd) $ map (divMod n) $ takeWhile (< n) primes
+
+kPrimes :: (Num a, Eq a) => a -> [Integer]
+kPrimes k = filter (isKPrime k) [2..]
+
+main :: IO ()
+main = flip mapM_ [1..5] $ \k ->
+ putStrLn $ "k = " ++ show k ++ ": " ++ (unwords $ map show (take 10 $ kPrimes k))
diff --git a/Task/Almost-prime/Icon/almost-prime.icon b/Task/Almost-prime/Icon/almost-prime.icon
new file mode 100644
index 0000000000..297458b93a
--- /dev/null
+++ b/Task/Almost-prime/Icon/almost-prime.icon
@@ -0,0 +1,10 @@
+link "factors"
+
+procedure main()
+ every writes(k := 1 to 5,": ") do
+ every writes(right(genKap(k),5)\10|"\n")
+end
+
+procedure genKap(k)
+ suspend (k = *factors(n := seq(q)), n)
+end
diff --git a/Task/Almost-prime/J/almost-prime.j b/Task/Almost-prime/J/almost-prime.j
new file mode 100644
index 0000000000..9a21975536
--- /dev/null
+++ b/Task/Almost-prime/J/almost-prime.j
@@ -0,0 +1,6 @@
+ (10 {. [:~.[:/:~[:,*/~)^:(i.5)~p:i.10
+ 2 3 5 7 11 13 17 19 23 29
+ 4 6 9 10 14 15 21 22 25 26
+ 8 12 18 20 27 28 30 42 44 45
+16 24 36 40 54 56 60 81 84 88
+32 48 72 80 108 112 120 162 168 176
diff --git a/Task/Almost-prime/Julia/almost-prime.julia b/Task/Almost-prime/Julia/almost-prime.julia
new file mode 100644
index 0000000000..08e662e387
--- /dev/null
+++ b/Task/Almost-prime/Julia/almost-prime.julia
@@ -0,0 +1,10 @@
+isalmostprime(n, k) = sum(values(factor(n))) == k
+function almostprimes(N, k) # return first N almost-k primes
+ P = Array(Int, N)
+ i = 0; n = 2
+ while i < N
+ if isalmostprime(n, k); P[i += 1] = n; end
+ n += 1
+ end
+ return P
+end
diff --git a/Task/Almost-prime/Mathematica/almost-prime.math b/Task/Almost-prime/Mathematica/almost-prime.math
new file mode 100644
index 0000000000..67420e9ca7
--- /dev/null
+++ b/Task/Almost-prime/Mathematica/almost-prime.math
@@ -0,0 +1,14 @@
+kprimes[k_,n_] :=
+ (* generates a list of the n smallest k-almost-primes *)
+ Module[{firstnprimes, runningkprimes = {}},
+ firstnprimes = Prime[Range[n]];
+ runningkprimes = firstnprimes;
+ Do[
+ runningkprimes =
+ Outer[Times, firstnprimes , runningkprimes ] // Flatten // Union // Take[#, n] & ;
+ (* only keep lowest n numbers in our running list *)
+ , {i, 1, k - 1}];
+ runningkprimes
+ ]
+(* now to create table with n=10 and k ranging from 1 to 5 *)
+Table[Flatten[{"k = " <> ToString[i] <> ": ", kprimes[i, 10]}], {i,1,5}] // TableForm
diff --git a/Task/Almost-prime/Objeck/almost-prime.objeck b/Task/Almost-prime/Objeck/almost-prime.objeck
new file mode 100644
index 0000000000..6ca52d43a6
--- /dev/null
+++ b/Task/Almost-prime/Objeck/almost-prime.objeck
@@ -0,0 +1,27 @@
+class Kth_Prime {
+ function : native : kPrime(n : Int, k : Int) ~ Bool {
+ f := 0;
+ for (p := 2; f < k & p*p <= n; p+=1;) {
+ while (0 = n % p) {
+ n /= p; f+=1;
+ };
+ };
+
+ return f + ((n > 1) ? 1 : 0) = k;
+ }
+
+ function : Main(args : String[]) ~ Nil {
+ for (k := 1; k <= 5; k+=1;) {
+ "k = {$k}:"->Print();
+
+ c := 0;
+ for (i := 2; c < 10; i+=1;) {
+ if (kPrime(i, k)) {
+ " {$i}"->Print();
+ c+=1;
+ };
+ };
+ '\n'->Print();
+ };
+ }
+}
diff --git a/Task/Almost-prime/PARI-GP/almost-prime.pari b/Task/Almost-prime/PARI-GP/almost-prime.pari
new file mode 100644
index 0000000000..05444b7223
--- /dev/null
+++ b/Task/Almost-prime/PARI-GP/almost-prime.pari
@@ -0,0 +1,2 @@
+almost(k)=my(n); for(i=1,10,while(bigomega(n++)!=k,); print1(n", "));
+for(k=1,5,almost(k);print)
diff --git a/Task/Almost-prime/Pascal/almost-prime.pascal b/Task/Almost-prime/Pascal/almost-prime.pascal
new file mode 100644
index 0000000000..8d7ded27ce
--- /dev/null
+++ b/Task/Almost-prime/Pascal/almost-prime.pascal
@@ -0,0 +1,26 @@
+program AlmostPrime;
+{$IFDEF FPC}
+ {$Mode Delphi}
+{$ENDIF}
+uses
+ primtrial;
+var
+ i,K,cnt : longWord;
+BEGIN
+ K := 1;
+ repeat
+ cnt := 0;
+ i := 2;
+ write('K=',K:2,':');
+ repeat
+ if isAlmostPrime(i,K) then
+ Begin
+ write(i:6,' ');
+ inc(cnt);
+ end;
+ inc(i);
+ until cnt = 9;
+ writeln;
+ inc(k);
+ until k > 10;
+END.
diff --git a/Task/Almost-prime/Perl-6/almost-prime-1.pl6 b/Task/Almost-prime/Perl-6/almost-prime-1.pl6
new file mode 100644
index 0000000000..19356e9e56
--- /dev/null
+++ b/Task/Almost-prime/Perl-6/almost-prime-1.pl6
@@ -0,0 +1,11 @@
+sub is-k-almost-prime($n is copy, $k) returns Bool {
+ loop (my ($p, $f) = 2, 0; $f < $k && $p*$p <= $n; $p++) {
+ $n /= $p, $f++ while $n %% $p;
+ }
+ $f + ($n > 1) == $k;
+}
+
+for 1 .. 5 -> $k {
+ say .[^10]
+ given grep { is-k-almost-prime($_, $k) }, 2 .. *
+}
diff --git a/Task/Almost-prime/Perl-6/almost-prime-2.pl6 b/Task/Almost-prime/Perl-6/almost-prime-2.pl6
new file mode 100644
index 0000000000..56165db9a0
--- /dev/null
+++ b/Task/Almost-prime/Perl-6/almost-prime-2.pl6
@@ -0,0 +1,5 @@
+constant factory = 0..* Z=> (0, 0, map { +factors($_) }, 2..*);
+
+sub almost($n) { map *.key, grep *.value == $n, factory }
+
+say almost($_)[^10] for 1..5;
diff --git a/Task/Almost-prime/Perl/almost-prime-1.pl b/Task/Almost-prime/Perl/almost-prime-1.pl
new file mode 100644
index 0000000000..7e2266dbe6
--- /dev/null
+++ b/Task/Almost-prime/Perl/almost-prime-1.pl
@@ -0,0 +1,7 @@
+use ntheory qw/factor/;
+sub almost {
+ my($k,$n) = @_;
+ my $i = 1;
+ map { $i++ while scalar factor($i) != $k; $i++ } 1..$n;
+}
+say "$_ : ", join(" ", almost($_,10)) for 1..5;
diff --git a/Task/Almost-prime/Perl/almost-prime-2.pl b/Task/Almost-prime/Perl/almost-prime-2.pl
new file mode 100644
index 0000000000..fb4ba27e91
--- /dev/null
+++ b/Task/Almost-prime/Perl/almost-prime-2.pl
@@ -0,0 +1,64 @@
+use strict;
+use warnings;
+
+sub k_almost_prime;
+
+for my $k ( 1 .. 5 ) {
+ my $almost = 0;
+ print join(", ", map {
+ 1 until k_almost_prime ++$almost, $k;
+ "$almost";
+ } 1 .. 10), "\n";
+}
+
+sub nth_prime;
+
+sub k_almost_prime {
+ my ($n, $k) = @_;
+ return if $n <= 1 or $k < 1;
+ my $which_prime = 0;
+ for my $count ( 1 .. $k ) {
+ while( $n % nth_prime $which_prime ) {
+ ++$which_prime;
+ }
+ $n /= nth_prime $which_prime;
+ return if $n == 1 and $count != $k;
+ }
+ ($n == 1) ? 1 : ();
+}
+
+BEGIN {
+ # This is loosely based on one of the python solutions
+ # to the RC Sieve of Eratosthenes task.
+ my @primes = (2, 3, 5, 7);
+ my $p_iter = 1;
+ my $p = $primes[$p_iter];
+ my $q = $p*$p;
+ my %sieve;
+ my $candidate = $primes[-1] + 2;
+ sub nth_prime {
+ my $n = shift;
+ return if $n < 0;
+ OUTER: while( $#primes < $n ) {
+ while( my $s = delete $sieve{$candidate} ) {
+ my $next = $s + $candidate;
+ $next += $s while exists $sieve{$next};
+ $sieve{$next} = $s;
+ $candidate += 2;
+ }
+ while( $candidate < $q ) {
+ push @primes, $candidate;
+ $candidate += 2;
+ next OUTER if exists $sieve{$candidate};
+ }
+ my $twop = 2 * $p;
+ my $next = $q + $twop;
+ $next += $twop while exists $sieve{$next};
+ $sieve{$next} = $twop;
+ $p = $primes[++$p_iter];
+ $q = $p * $p;
+ $candidate += 2;
+ }
+ return $primes[$n];
+ }
+}
diff --git a/Task/Almost-prime/PicoLisp/almost-prime.l b/Task/Almost-prime/PicoLisp/almost-prime.l
new file mode 100644
index 0000000000..53a8534b86
--- /dev/null
+++ b/Task/Almost-prime/PicoLisp/almost-prime.l
@@ -0,0 +1,27 @@
+(de factor (N)
+ (make
+ (let
+ (D 2
+ L (1 2 2 . (4 2 4 2 4 6 2 6 .))
+ M (sqrt N) )
+ (while (>= M D)
+ (if (=0 (% N D))
+ (setq M
+ (sqrt (setq N (/ N (link D)))) )
+ (inc 'D (pop 'L)) ) )
+ (link N) ) ) )
+
+(de almost (N)
+ (let (X 2 Y 0)
+ (make
+ (loop
+ (when (and (nth (factor X) N) (not (cdr @)))
+ (link X)
+ (inc 'Y) )
+ (T (= 10 Y) 'done)
+ (inc 'X) ) ) ) )
+
+(for I 5
+ (println I '-> (almost I) ) )
+
+(bye)
diff --git a/Task/Almost-prime/Prolog/almost-prime-1.pro b/Task/Almost-prime/Prolog/almost-prime-1.pro
new file mode 100644
index 0000000000..4df0b0a648
--- /dev/null
+++ b/Task/Almost-prime/Prolog/almost-prime-1.pro
@@ -0,0 +1,20 @@
+% almostPrime(K, +Take, List) succeeds if List can be unified with the
+% first Take K-almost-primes.
+% Notice that K need not be specified.
+% To avoid having to cache or recompute the first Take primes, we define
+% almostPrime/3 in terms of almostPrime/4 as follows:
+%
+almostPrime(K, Take, List) :-
+ % Compute the list of the first Take primes:
+ nPrimes(Take, Primes),
+ almostPrime(K, Take, Primes, List).
+
+almostPrime(1, Take, Primes, Primes).
+
+almostPrime(K, Take, Primes, List) :-
+ generate(2, K), % generate K >= 2
+ K1 is K - 1,
+ almostPrime(K1, Take, Primes, L),
+ multiplylist( Primes, L, Long),
+ sort(Long, Sorted), % uniquifies
+ take(Take, Sorted, List).
diff --git a/Task/Almost-prime/Prolog/almost-prime-2.pro b/Task/Almost-prime/Prolog/almost-prime-2.pro
new file mode 100644
index 0000000000..c2a85acb52
--- /dev/null
+++ b/Task/Almost-prime/Prolog/almost-prime-2.pro
@@ -0,0 +1,40 @@
+nPrimes( M, Primes) :- nPrimes( [2], M, Primes).
+
+nPrimes( Accumulator, I, Primes) :-
+ next_prime(Accumulator, Prime),
+ append(Accumulator, [Prime], Next),
+ length(Next, N),
+ ( N = I -> Primes = Next; nPrimes( Next, I, Primes)).
+
+% next_prime(+Primes, NextPrime) succeeds if NextPrime is the next
+% prime after a list, Primes, of consecutive primes starting at 2.
+next_prime([2], 3).
+next_prime([2|Primes], P) :-
+ last(Primes, PP),
+ P2 is PP + 2,
+ generate(P2, N),
+ 1 is N mod 2, % odd
+ Max is floor(sqrt(N+1)), % round-off paranoia
+ forall( (member(Prime, [2|Primes]),
+ (Prime =< Max -> true
+ ; (!, fail))), N mod Prime > 0 ),
+ !,
+ P = N.
+
+% multiply( +A, +List, Answer )
+multiply( A, [], [] ).
+multiply( A, [X|Xs], [AX|As] ) :-
+ AX is A * X,
+ multiply(A, Xs, As).
+
+% multiplylist( L1, L2, List ) succeeds if List is the concatenation of X * L2
+% for successive elements X of L1.
+multiplylist( [], B, [] ).
+multiplylist( [A|As], B, List ) :-
+ multiply(A, B, L1),
+ multiplylist(As, B, L2),
+ append(L1, L2, List).
+
+take(N, List, Head) :-
+ length(Head, N),
+ append(Head,X,List).
diff --git a/Task/Almost-prime/Prolog/almost-prime-3.pro b/Task/Almost-prime/Prolog/almost-prime-3.pro
new file mode 100644
index 0000000000..eb2f3f6acc
--- /dev/null
+++ b/Task/Almost-prime/Prolog/almost-prime-3.pro
@@ -0,0 +1,28 @@
+%%%%% compatibility section %%%%%
+
+:- if(current_prolog_flag(dialect, yap)).
+generate(Min, I) :- between(Min, inf, I).
+
+append([],L,L).
+append([X|Xs], L, [X|Ls]) :- append(Xs,L,Ls).
+
+:- endif.
+
+:- if(current_prolog_flag(dialect, swi)).
+generate(Min, I) :- between(Min, inf, I).
+:- endif.
+
+:- if(current_prolog_flag(dialect, yap)).
+append([],L,L).
+append([X|Xs], L, [X|Ls]) :- append(Xs,L,Ls).
+
+last([X], X).
+last([_|Xs],X) :- last(Xs,X).
+
+:- endif.
+
+:- if(current_prolog_flag(dialect, gprolog)).
+generate(Min, I) :-
+ current_prolog_flag(max_integer, Max),
+ between(Min, Max, I).
+:- endif.
diff --git a/Task/Almost-prime/Python/almost-prime.py b/Task/Almost-prime/Python/almost-prime.py
new file mode 100644
index 0000000000..317ae1e381
--- /dev/null
+++ b/Task/Almost-prime/Python/almost-prime.py
@@ -0,0 +1,19 @@
+from prime_decomposition import decompose
+from itertools import islice, count
+try:
+ from functools import reduce
+except:
+ pass
+
+
+def almostprime(n, k=2):
+ d = decompose(n)
+ try:
+ terms = [next(d) for i in range(k)]
+ return reduce(int.__mul__, terms, 1) == n
+ except:
+ return False
+
+if __name__ == '__main__':
+ for k in range(1,6):
+ print('%i: %r' % (k, list(islice((n for n in count() if almostprime(n, k)), 10))))
diff --git a/Task/Almost-prime/README b/Task/Almost-prime/README
new file mode 100644
index 0000000000..1189a43b83
--- /dev/null
+++ b/Task/Almost-prime/README
@@ -0,0 +1 @@
+Data source: http://rosettacode.org/wiki/Almost_prime
diff --git a/Task/Almost-prime/REXX/almost-prime-1.rexx b/Task/Almost-prime/REXX/almost-prime-1.rexx
new file mode 100644
index 0000000000..90f5629f0e
--- /dev/null
+++ b/Task/Almost-prime/REXX/almost-prime-1.rexx
@@ -0,0 +1,33 @@
+/*REXX program displays the N numbers of the first K k-almost primes*/
+parse arg N K . /*get the arguments from the C.L.*/
+if N=='' then N=10 /*No N? Then use the default.*/
+if K=='' then K=5 /* " K? " " " " */
+ /* [↓] display one line per K.*/
+ do m=1 for K; $=2**m; fir=$ /*generate the 1st k_almost prime*/
+ #=1; if #==N then leave /*# k-almost primes; 'nuff found?*/
+ sec=3*(2**(m-1)); $=$ sec; #=2 /*generate the 2nd k-almost prime*/
+ do j=fir+fir+1 until #==N /*process an almost-prime N times*/
+ if #factr(j)\==m then iterate /*not the correct k-almost prime?*/
+ #=#+1 /*bump the k-almost prime counter*/
+ $=$ j /*append k-almost prime to list. */
+ end /*j*/ /* [↑] gen N k-almost primes.*/
+ say N right(m,4)"-almost primes:" $ /*display the k-almost primes.*/
+ end /*m*/ /* [↑] display a line for each K*/
+exit /*stick a fork in it, we're done.*/
+/*──────────────────────────────────#FACTR subroutine───────────────────*/
+#factr: procedure;parse arg x 1 z; f=0 /*defines X and Z to the arg.*/
+if x<2 then return 0 /*invalid number? Then return 0.*/
+ do j=2 to 5; if j\==4 then call .#factr; end /*fast factoring.*/
+j=5 /*start were we left off (J=5). */
+ do y=0 by 2; j=j+2 + y//4 /*insure it's not divisible by 3.*/
+ if right(j,1)==5 then iterate /*fast check for divisible by 5.*/
+ if j>z then leave /*number reduced to a wee number?*/
+ call .#factr /*go add other factors to count. */
+ end /*y*/ /* [↑] find all factors in X. */
+return max(f,1) /*if prime (f==0), then return 1.*/
+/*──────────────────────────────────.#FACTR subroutine──────────────────*/
+.#factr: do f=f+1 while z//j==0 /*keep dividing until we can't. */
+ z=z%j /*perform an (%) integer divide.*/
+ end /*while*/ /* [↑] whittle down the Z num.*/
+f=f-1 /*adjust the count of factors. */
+return
diff --git a/Task/Almost-prime/REXX/almost-prime-2.rexx b/Task/Almost-prime/REXX/almost-prime-2.rexx
new file mode 100644
index 0000000000..1673079e3f
--- /dev/null
+++ b/Task/Almost-prime/REXX/almost-prime-2.rexx
@@ -0,0 +1,35 @@
+/*REXX program displays the N numbers of the first K k-almost primes*/
+parse arg N K . /*get the arguments from the C.L.*/
+if N=='' then N=10 /*No N? Then use the default.*/
+if K=='' then K=5 /* " K? " " " " */
+ /* [↓] display one line per K.*/
+ do m=1 for K; $=2**m; fir=$ /*generate the 1st k_almost prime*/
+ #=1; if #==N then leave /*# k-almost primes; 'nuff found?*/
+ sec=3*(2**(m-1)); $=$ sec; #=2 /*generate the 2nd k-almost prime*/
+ do j=fir+fir+1 until #==N /*process an almost-prime N times*/
+ if #factL(j,m)\==m then iterate /*not the correct k-almost prime?*/
+ #=#+1 /*bump the k-almost prime counter*/
+ $=$ j /*append k-almost prime to list. */
+ end /*j*/ /* [↑] gen N k-almost primes.*/
+ say N right(m,4)"-almost primes:" $ /*display the k-almost primes.*/
+ end /*m*/ /* [↑] display a line for each K*/
+exit /*stick a fork in it, we're done.*/
+/*──────────────────────────────────#FACTL subroutine───────────────────*/
+#factL: procedure; parse arg x 1 z,L /*defines X and Z to the arg.*/
+f=0; if x<2 then return 0 /*invalid number? Then return 0.*/
+ do j=2 to 5; if j\==4 then call .#factL; end /*fast factoring.*/
+if f>L then return f /*#factors > L ? Then too many.*/
+j=5 /*start were we left off (J=5). */
+ do y=0 by 2; j=j+2 + y//4 /*insure it's not divisible by 3.*/
+ if right(j,1)==5 then iterate /*fast check for divisible by 5.*/
+ if j>z then leave /*number reduced to a wee number?*/
+ call .#factL /*go add other factors to count. */
+ if f>L then return f /*#factors > L ? Then too many.*/
+ end /*y*/ /* [↑] find all factors in X. */
+return max(f,1) /*if prime (f==0), then return 1.*/
+/*──────────────────────────────────.#FACTL subroutine──────────────────*/
+.#factL: do f=f+1 while z//j==0 /*keep dividing until we can't. */
+ z=z%j /*perform an (%) integer divide.*/
+ end /*while*/ /* [↑] whittle down the Z num.*/
+f=f-1 /*adjust the count of factors. */
+return
diff --git a/Task/Almost-prime/Racket/almost-prime.rkt b/Task/Almost-prime/Racket/almost-prime.rkt
new file mode 100644
index 0000000000..a2e5a4c9d5
--- /dev/null
+++ b/Task/Almost-prime/Racket/almost-prime.rkt
@@ -0,0 +1,25 @@
+#lang racket
+(require (only-in math/number-theory factorize))
+
+(define ((k-almost-prime? k) n)
+ (= k (for/sum ((f (factorize n))) (cadr f))))
+
+(define KAP-table-values
+ (for/list ((k (in-range 1 (add1 5))))
+ (define kap? (k-almost-prime? k))
+ (for/list ((j (in-range 10)) (i (sequence-filter kap? (in-naturals 1))))
+ i)))
+
+(define (format-table t)
+ (define longest-number-length
+ (add1 (order-of-magnitude (argmax order-of-magnitude (cons (length t) (apply append t))))))
+ (define (fmt-val v) (~a v #:width longest-number-length #:align 'right))
+ (string-join
+ (for/list ((r t) (k (in-naturals 1)))
+ (string-append
+ (format "║ k = ~a║ " (fmt-val k))
+ (string-join (for/list ((c r)) (fmt-val c)) "| ")
+ "║"))
+ "\n"))
+
+(displayln (format-table KAP-table-values))
diff --git a/Task/Almost-prime/Ruby/almost-prime-1.rb b/Task/Almost-prime/Ruby/almost-prime-1.rb
new file mode 100644
index 0000000000..0e578dd9ff
--- /dev/null
+++ b/Task/Almost-prime/Ruby/almost-prime-1.rb
@@ -0,0 +1,12 @@
+require 'prime'
+
+def almost_primes(k=2)
+ return to_enum(:almost_primes, k) unless block_given?
+ n = 0
+ loop do
+ n += 1
+ yield n if n.prime_division.map( &:last ).inject( &:+ ) == k
+ end
+end
+
+(1..5).each{|k| puts almost_primes(k).take(10).join(", ")}
diff --git a/Task/Almost-prime/Ruby/almost-prime-2.rb b/Task/Almost-prime/Ruby/almost-prime-2.rb
new file mode 100644
index 0000000000..2c79cd8424
--- /dev/null
+++ b/Task/Almost-prime/Ruby/almost-prime-2.rb
@@ -0,0 +1,4 @@
+require 'prime'
+
+p ar = pr = Prime.take(10)
+4.times{p ar = ar.product(pr).map{|(a,b)| a*b}.uniq.sort.take(10)}
diff --git a/Task/Almost-prime/Rust/almost-prime.rust b/Task/Almost-prime/Rust/almost-prime.rust
new file mode 100644
index 0000000000..4ff84b9ee4
--- /dev/null
+++ b/Task/Almost-prime/Rust/almost-prime.rust
@@ -0,0 +1,39 @@
+fn is_kprime(n: usize, k: usize) -> bool {
+ let mut primes = 0us;
+ let mut f = 2us;
+ let mut rem = n;
+ while primes < k && rem > 1{
+ while (rem % f) == 0 && rem > 1{
+ rem /= f;
+ primes += 1;
+ }
+ f += 1;
+ }
+ rem == 1 && primes == k
+}
+
+struct KPrimeGen {
+ k: usize,
+ n: usize,
+}
+
+impl Iterator for KPrimeGen {
+ type Item = usize;
+ fn next(&mut self) -> Option {
+ self.n += 1;
+ while !is_kprime(self.n, self.k) {
+ self.n += 1;
+ }
+ Some(self.n)
+ }
+}
+
+fn kprime_generator(k: usize) -> KPrimeGen {
+ KPrimeGen {k: k, n: 1}
+}
+
+fn main() {
+ for k in 1us..6 {
+ println!("{}: {:?}", k, kprime_generator(k).take(10).collect::>());
+ }
+}
diff --git a/Task/Almost-prime/Scala/almost-prime.scala b/Task/Almost-prime/Scala/almost-prime.scala
new file mode 100644
index 0000000000..0a0fed609c
--- /dev/null
+++ b/Task/Almost-prime/Scala/almost-prime.scala
@@ -0,0 +1,16 @@
+def isKPrime(n: Int, k: Int, d: Int = 2): Boolean = (n, k, d) match {
+ case (n, k, _) if n == 1 => k == 0
+ case (n, _, d) if n % d == 0 => isKPrime(n / d, k - 1, d)
+ case (_, _, _) => isKPrime(n, k, d + 1)
+}
+
+def kPrimeStream(k: Int): Stream[Int] = {
+ def loop(n: Int): Stream[Int] =
+ if (isKPrime(n, k)) n #:: loop(n+ 1)
+ else loop(n + 1)
+ loop(2)
+}
+
+for (k <- 1 to 5) {
+ println( s"$k: [${ kPrimeStream(k).take(10) mkString " " }]" )
+}
diff --git a/Task/Almost-prime/Tcl/almost-prime.tcl b/Task/Almost-prime/Tcl/almost-prime.tcl
new file mode 100644
index 0000000000..fd540fea86
--- /dev/null
+++ b/Task/Almost-prime/Tcl/almost-prime.tcl
@@ -0,0 +1,31 @@
+package require Tcl 8.6
+package require math::numtheory
+
+proc firstNprimes n {
+ for {set result {};set i 2} {[llength $result] < $n} {incr i} {
+ if {[::math::numtheory::isprime $i]} {
+ lappend result $i
+ }
+ }
+ return $result
+}
+
+proc firstN_KalmostPrimes {n k} {
+ set p [firstNprimes $n]
+ set i [lrepeat $k 0]
+ set c {}
+
+ while true {
+ dict set c [::tcl::mathop::* {*}[lmap j $i {lindex $p $j}]] ""
+ for {set x 0} {$x < $k} {incr x} {
+ lset i $x [set xx [expr {([lindex $i $x] + 1) % $n}]]
+ if {$xx} break
+ }
+ if {$x == $k} break
+ }
+ return [lrange [lsort -integer [dict keys $c]] 0 [expr {$n - 1}]]
+}
+
+for {set K 1} {$K <= 5} {incr K} {
+ puts "$K => [firstN_KalmostPrimes 10 $K]"
+}
diff --git a/Task/Amb/00DESCRIPTION b/Task/Amb/00DESCRIPTION
new file mode 100644
index 0000000000..dd5c12be1f
--- /dev/null
+++ b/Task/Amb/00DESCRIPTION
@@ -0,0 +1,17 @@
+Define and give an example of the Amb operator.
+
+The Amb operator takes some number of expressions (or values if that's simpler in the language) and nondeterministically yields the one or fails if given no parameter, amb returns the value that doesn't lead to failure.
+
+The example is using amb to choose four words from the following strings:
+
+set 1: "the" "that" "a"
+
+set 2: "frog" "elephant" "thing"
+
+set 3: "walked" "treaded" "grows"
+
+set 4: "slowly" "quickly"
+
+It is a failure if the last character of word 1 is not equal to the first character
+of word 2, and similarly with word 2 and word 3, as well as word 3 and word 4.
+(the only successful sentence is "that thing grows slowly").
diff --git a/Task/Amb/ALGOL-68/amb.alg b/Task/Amb/ALGOL-68/amb.alg
new file mode 100644
index 0000000000..a0d2f5dcc0
--- /dev/null
+++ b/Task/Amb/ALGOL-68/amb.alg
@@ -0,0 +1,38 @@
+MODE PAGE = FLEX[0]STRING;
+MODE YIELDPAGE = PROC(PAGE)VOID;
+MODE ITERPAGE = PROC(YIELDPAGE)VOID;
+
+OP INITITERPAGE = (PAGE self)ITERPAGE:
+ (YIELDPAGE yield)VOID: # scope violation #
+ FOR i TO UPB self DO
+ yield(self[i])
+ OD;
+
+OP + = (ITERPAGE for strings, PAGE b)ITERPAGE:
+ (YIELDPAGE yield)VOID: # scope violation #
+ for strings((PAGE amb)VOID:(
+ [UPB amb + 1]STRING joined;
+ joined[:UPB amb] := amb;
+ STRING last string := amb[UPB amb];
+ CHAR last char := last string[UPB last string];
+ FOR i TO UPB b DO
+ IF last char = b[i][1] THEN
+ joined[UPB joined] := b[i];
+ yield(joined)
+ FI
+ OD
+ ));
+
+OP + = (PAGE a, PAGE b)ITERPAGE: INITITERPAGE a + b;
+
+ITERPAGE gen amb :=
+ PAGE("the", "that", "a") +
+ PAGE("frog", "elephant", "thing") +
+ PAGE("walked", "treaded", "grows") +
+ PAGE("slowly", "quickly");
+
+PAGE sep;
+#FOR PAGE amb IN # gen amb( # ) DO #
+## (PAGE amb)VOID:
+ print((amb[1]+" "+amb[2]+" "+amb[3]+" "+amb[4], new line))
+#OD# )
diff --git a/Task/Amb/Ada/amb.ada b/Task/Amb/Ada/amb.ada
new file mode 100644
index 0000000000..35a5c0f474
--- /dev/null
+++ b/Task/Amb/Ada/amb.ada
@@ -0,0 +1,70 @@
+with Ada.Strings.Unbounded; use Ada.Strings.Unbounded;
+with Ada.Text_IO; use Ada.Text_IO;
+
+procedure Test_Amb is
+ type Alternatives is array (Positive range <>) of Unbounded_String;
+
+ type Amb (Count : Positive) is record
+ This : Positive := 1;
+ Left : access Amb;
+ List : Alternatives (1..Count);
+ end record;
+
+ function Image (L : Amb) return String is
+ begin
+ return To_String (L.List (L.This));
+ end Image;
+
+ function "/" (L, R : String) return Amb is
+ Result : Amb (2);
+ begin
+ Append (Result.List (1), L);
+ Append (Result.List (2), R);
+ return Result;
+ end "/";
+
+ function "/" (L : Amb; R : String) return Amb is
+ Result : Amb (L.Count + 1);
+ begin
+ Result.List (1..L.Count) := L.List ;
+ Append (Result.List (Result.Count), R);
+ return Result;
+ end "/";
+
+ function "=" (L, R : Amb) return Boolean is
+ Left : Unbounded_String renames L.List (L.This);
+ begin
+ return Element (Left, Length (Left)) = Element (R.List (R.This), 1);
+ end "=";
+
+ procedure Failure (L : in out Amb) is
+ begin
+ loop
+ if L.This < L.Count then
+ L.This := L.This + 1;
+ else
+ L.This := 1;
+ Failure (L.Left.all);
+ end if;
+ exit when L.Left = null or else L.Left.all = L;
+ end loop;
+ end Failure;
+
+ procedure Join (L : access Amb; R : in out Amb) is
+ begin
+ R.Left := L;
+ while L.all /= R loop
+ Failure (R);
+ end loop;
+ end Join;
+
+ W_1 : aliased Amb := "the" / "that" / "a";
+ W_2 : aliased Amb := "frog" / "elephant" / "thing";
+ W_3 : aliased Amb := "walked" / "treaded" / "grows";
+ W_4 : aliased Amb := "slowly" / "quickly";
+begin
+ Join (W_1'Access, W_2);
+ Join (W_2'Access, W_3);
+ Join (W_3'Access, W_4);
+ Put_Line (Image (W_1) & ' ' & Image (W_2) & ' ' & Image (W_3) & ' ' & Image (W_4));
+end Test_Amb;
diff --git a/Task/Amb/AutoHotkey/amb.ahk b/Task/Amb/AutoHotkey/amb.ahk
new file mode 100644
index 0000000000..fb03a7fa9a
--- /dev/null
+++ b/Task/Amb/AutoHotkey/amb.ahk
@@ -0,0 +1,16 @@
+set1 := "the that a"
+set2 := "frog elephant thing"
+set3 := "walked treaded grows"
+set4 := "slowly quickly"
+
+MsgBox % amb( "", set1, set2, set3, set4 )
+; this takes a total of 17 iterations to complete
+
+amb( char = "", set1 = "", set2 = "", set3 = "", set4 = "" )
+{ ; original call to amb must leave char param blank
+ Loop, Parse, set1, %A_Space%
+ If (char = (idxchar := SubStr(A_LoopField, 1, 1)) && set2 = ""
+ || (char = idxchar || char = "") && ((retval:= amb(SubStr(A_LoopField, 0, 1), set2, set3, set4)) != ""))
+ Return A_LoopField " " retval
+ Return ""
+}
diff --git a/Task/Amb/Bracmat/amb.bracmat b/Task/Amb/Bracmat/amb.bracmat
new file mode 100644
index 0000000000..9c81b825c2
--- /dev/null
+++ b/Task/Amb/Bracmat/amb.bracmat
@@ -0,0 +1,23 @@
+( ( Amb
+ = first last list words word solution
+ . !arg:(?first.?list)
+ & ( !list:
+ | !list:(.?words) ?list
+ & !words
+ : ?
+ %( @(?word:!first ? @?last)
+ & Amb$(!last.!list):?solution
+ & !word !solution:?solution
+ )
+ ?
+ & !solution
+ )
+ )
+& Amb
+ $ (
+ . (.the that a)
+ (.frog elephant thing)
+ (.walked treaded grows)
+ (.slowly quickly)
+ )
+)
diff --git a/Task/Amb/C-sharp/amb-1.cs b/Task/Amb/C-sharp/amb-1.cs
new file mode 100644
index 0000000000..2e90a45f7c
--- /dev/null
+++ b/Task/Amb/C-sharp/amb-1.cs
@@ -0,0 +1,152 @@
+using System;
+using System.Collections.Generic;
+
+public class Amb : IDisposable
+{
+ List streams = new List();
+ List assertsOrActions = new List();
+ volatile bool stopped = false;
+
+ public IAmbValue DefineValues(params T[] values)
+ {
+ return DefineValueSet(values);
+ }
+
+ public IAmbValue DefineValueSet(IEnumerable values)
+ {
+ ValueSet stream = new ValueSet();
+ stream.Enumerable = values;
+ streams.Add(stream);
+ return stream;
+ }
+
+ public Amb Assert(Func function)
+ {
+ assertsOrActions.Add(new AmbAssert()
+ {
+ Level = streams.Count,
+ IsValidFunction = function
+ });
+ return this;
+ }
+
+ public Amb Perform(Action action)
+ {
+ assertsOrActions.Add(new AmbAction()
+ {
+ Level = streams.Count,
+ Action = action
+ });
+ return this;
+ }
+
+ public void Stop()
+ {
+ stopped = true;
+ }
+
+ public void Dispose()
+ {
+ RunLevel(0, 0);
+ if (!stopped)
+ {
+ throw new AmbException();
+ }
+ }
+
+ void RunLevel(int level, int actionIndex)
+ {
+ while (actionIndex < assertsOrActions.Count && assertsOrActions[actionIndex].Level <= level)
+ {
+ if (!assertsOrActions[actionIndex].Invoke() || stopped)
+ return;
+ actionIndex++;
+ }
+ if (level < streams.Count)
+ {
+ using (IValueSetIterator iterator = streams[level].CreateIterator())
+ {
+ while (iterator.MoveNext())
+ {
+ RunLevel(level + 1, actionIndex);
+ }
+ }
+ }
+ }
+
+ interface IValueSet
+ {
+ IValueSetIterator CreateIterator();
+ }
+
+ interface IValueSetIterator : IDisposable
+ {
+ bool MoveNext();
+ }
+
+ interface IAssertOrAction
+ {
+ int Level { get; }
+ bool Invoke();
+ }
+
+ class AmbAssert : IAssertOrAction
+ {
+ internal int Level;
+ internal Func IsValidFunction;
+
+ int IAssertOrAction.Level { get { return Level; } }
+
+ bool IAssertOrAction.Invoke()
+ {
+ return IsValidFunction();
+ }
+ }
+
+ class AmbAction : IAssertOrAction
+ {
+ internal int Level;
+ internal Action Action;
+
+ int IAssertOrAction.Level { get { return Level; } }
+
+ bool IAssertOrAction.Invoke()
+ {
+ Action(); return true;
+ }
+ }
+
+ class ValueSet : IValueSet, IAmbValue, IValueSetIterator
+ {
+ internal IEnumerable Enumerable;
+ private IEnumerator enumerator;
+
+ public T Value { get { return enumerator.Current; } }
+
+ public IValueSetIterator CreateIterator()
+ {
+ enumerator = Enumerable.GetEnumerator();
+ return this;
+ }
+
+ public bool MoveNext()
+ {
+ return enumerator.MoveNext();
+ }
+
+ public void Dispose()
+ {
+ enumerator.Dispose();
+ }
+ }
+}
+
+public interface IAmbValue
+{
+ T Value { get; }
+}
+
+public class AmbException : Exception
+{
+ public AmbException() : base("AMB is angry") { }
+}
diff --git a/Task/Amb/C-sharp/amb-2.cs b/Task/Amb/C-sharp/amb-2.cs
new file mode 100644
index 0000000000..3d6de52aa3
--- /dev/null
+++ b/Task/Amb/C-sharp/amb-2.cs
@@ -0,0 +1,30 @@
+ // original problem
+ using (Amb amb = new Amb())
+ {
+ var set1 = amb.DefineValues("the", "that", "a");
+ var set2 = amb.DefineValues("frog", "elephant", "thing");
+ var set3 = amb.DefineValues("walked", "treaded", "grows");
+ var set4 = amb.DefineValues("slowly", "quickly");
+
+ amb.Assert(() => IsJoinable(set1.Value, set2.Value));
+ amb.Assert(() => IsJoinable(set2.Value, set3.Value));
+ amb.Assert(() => IsJoinable(set3.Value, set4.Value));
+
+ amb.Perform(() =>
+ {
+ System.Console.WriteLine("{0} {1} {2} {3}", set1.Value, set2.Value, set3.Value, set4.Value);
+ amb.Stop();
+ });
+ }
+ // problem from http://www.randomhacks.net/articles/2005/10/11/amb-operator
+ using (Amb amb = new Amb())
+ {
+ IAmbValue x = amb.DefineValues(1, 2, 3);
+ IAmbValue y = amb.DefineValues(4, 5, 6);
+ amb.Assert(() => x.Value * y.Value == 8);
+ amb.Perform(() =>
+ {
+ System.Console.WriteLine("{0} {1}", x.Value, y.Value);
+ amb.Stop();
+ });
+ }
diff --git a/Task/Amb/C/amb.c b/Task/Amb/C/amb.c
new file mode 100644
index 0000000000..614f870840
--- /dev/null
+++ b/Task/Amb/C/amb.c
@@ -0,0 +1,41 @@
+typedef const char * amb_t;
+
+amb_t amb(size_t argc, ...)
+{
+ amb_t *choices;
+ va_list ap;
+ int i;
+
+ if(argc) {
+ choices = malloc(argc*sizeof(amb_t));
+ va_start(ap, argc);
+ i = 0;
+ do { choices[i] = va_arg(ap, amb_t); } while(++i < argc);
+ va_end(ap);
+
+ i = 0;
+ do { TRY(choices[i]); } while(++i < argc);
+ free(choices);
+ }
+
+ FAIL;
+}
+
+int joins(const char *left, const char *right) { return left[strlen(left)-1] == right[0]; }
+
+int _main() {
+ const char *w1,*w2,*w3,*w4;
+
+ w1 = amb(3, "the", "that", "a");
+ w2 = amb(3, "frog", "elephant", "thing");
+ w3 = amb(3, "walked", "treaded", "grows");
+ w4 = amb(2, "slowly", "quickly");
+
+ if(!joins(w1, w2)) amb(0);
+ if(!joins(w2, w3)) amb(0);
+ if(!joins(w3, w4)) amb(0);
+
+ printf("%s %s %s %s\n", w1, w2, w3, w4);
+
+ return EXIT_SUCCESS;
+}
diff --git a/Task/Amb/Clojure/amb.clj b/Task/Amb/Clojure/amb.clj
new file mode 100644
index 0000000000..81a3e62620
--- /dev/null
+++ b/Task/Amb/Clojure/amb.clj
@@ -0,0 +1,12 @@
+(ns amb
+ (:use clojure.contrib.monads))
+
+(defn amb [wss]
+ (let [valid-word (fn [w1 w2]
+ (if (and w1 (= (last w1) (first w2)))
+ (str w1 " " w2)))]
+ (filter #(reduce valid-word %)
+ (with-monad sequence-m (m-seq wss)))))
+
+amb> (amb '(("the" "that" "a") ("frog" "elephant" "thing") ("walked" "treaded" "grows") ("slowly" "quickly")))
+(("that" "thing" "grows" "slowly"))
diff --git a/Task/Amb/Common-Lisp/amb-1.lisp b/Task/Amb/Common-Lisp/amb-1.lisp
new file mode 100644
index 0000000000..d132cb65bb
--- /dev/null
+++ b/Task/Amb/Common-Lisp/amb-1.lisp
@@ -0,0 +1,35 @@
+(define-condition amb-failure () ()
+ (:report "No amb alternative succeeded."))
+
+(defun invoke-ambiguously (function thunks)
+ "Call function with successive values produced by successive
+functions in thunks until some invocation of function does not signal
+an amb-failure."
+ (do ((thunks thunks (rest thunks)))
+ ((endp thunks) (error 'amb-failure))
+ (let ((argument (funcall (first thunks))))
+ (handler-case (return (funcall function argument))
+ (amb-failure ())))))
+
+(defmacro amblet1 ((var form) &body body)
+ "If form is of the form (amb {form}*) then amblet1 is a convenient
+syntax for invoke-ambiguously, by which body is evaluated with var
+bound the results of each form until some evaluation of body does not
+signal an amb-failure. For any other form, amblet binds var the result
+of form, and evaluates body."
+ (if (and (listp form) (eq (first form) 'amb))
+ `(invoke-ambiguously
+ #'(lambda (,var) ,@body)
+ (list ,@(loop for amb-form in (rest form)
+ collecting `#'(lambda () ,amb-form))))
+ `(let ((,var ,form))
+ ,@body)))
+
+(defmacro amblet (bindings &body body)
+ "Like let, except that if an init-form is of the form (amb {form}*),
+then the corresponding var is bound with amblet1."
+ (if (endp bindings)
+ `(progn ,@body)
+ `(amblet1 ,(first bindings)
+ (amblet ,(rest bindings)
+ ,@body))))
diff --git a/Task/Amb/Common-Lisp/amb-2.lisp b/Task/Amb/Common-Lisp/amb-2.lisp
new file mode 100644
index 0000000000..b47d182081
--- /dev/null
+++ b/Task/Amb/Common-Lisp/amb-2.lisp
@@ -0,0 +1,50 @@
+(defparameter *amb-ops* nil)
+(defparameter *amb-hist* nil)
+
+(setf *random-state* (make-random-state t))
+(defun shuffle (items)
+ (loop for i from 0 with r = items with l = (length r) while (< i l) do
+ (rotatef (elt r i) (elt r (+ i (random (- l i)))))
+ finally (return r)))
+
+;;; (assert '(mess in, mess out))
+(defmacro amb (a &rest rest)
+ (let ((f (first rest))
+ (rest (rest rest)))
+ (if (not f)
+ `(let ((items (shuffle ,a)))
+ (let ((y (car (last *amb-hist*)))
+ (o (car (last *amb-ops*))))
+ (loop for x in items do
+ (if (or (not *amb-ops*)
+ (funcall o y x))
+ (return (append *amb-hist* (list x))))
+ (elt items (random (length items))))))
+
+ `(let ((items (shuffle ,a)))
+ (let ((y (car (last *amb-hist*)))
+ (o (car (last *amb-ops*))))
+ (loop for x in items do
+ (if (or (not *amb-ops*)
+ (funcall o y x))
+ (let ((*amb-hist* (append *amb-hist* (list x)))
+ (*amb-ops* (append *amb-ops* (list ,f))))
+ (let ((r ,@rest))
+ (if r (return r)))))))))))
+
+;; test cases
+(defun joins (a b)
+ (char= (char a (1- (length a))) (char b 0)))
+
+(defun w34()
+ (amb '("walked" "treaded" "grows") #'joins
+ (amb '("slowly" "quickly"))))
+
+(print
+ (amb '("the" "that" "a") #'joins
+ (amb '("frog" "elephant" "thing") #'joins
+ (w34))))
+
+(print (amb '(1 2 5) #'<
+ (amb '(2 3 4) #'=
+ (amb '(3 4 5))))) ; 1 4 4, 2 3 3, etc
diff --git a/Task/Amb/D/amb.d b/Task/Amb/D/amb.d
new file mode 100644
index 0000000000..cc589071d0
--- /dev/null
+++ b/Task/Amb/D/amb.d
@@ -0,0 +1,47 @@
+import std.stdio, std.array;
+
+/** This amb function takes a comparison function and
+the possibilities that need to be checked.*/
+//string[] amb(in bool function(in string, in string) pure comp,
+const(string)[] amb(in bool function(in string, in string) pure comp,
+ in string[][] options,
+ in string prev = null) pure {
+ if (options.empty)
+ return null;
+
+ foreach (immutable opt; options.front) {
+ // If this is the base call, prev is null and we need to
+ // continue.
+ if (!prev.empty && !comp(prev, opt))
+ continue;
+
+ // Take care of the case where we have no options left.
+ if (options.length == 1)
+ return [opt];
+
+ // Traverse into the tree.
+ const res = amb(comp, options[1 .. $], opt);
+
+ // If it was a failure, try the next one.
+ if (!res.empty)
+ return opt ~ res; // We have a match!
+ }
+
+ return null; // No matches.
+}
+
+void main() {
+ immutable sets = [["the", "that", "a"],
+ ["frog", "elephant", "thing"],
+ ["walked", "treaded", "grows"],
+ ["slowly", "quickly"]];
+
+ // Pass in the comparator and the available sets.
+ // (The comparator is not nothrow because of UTF.)
+ const result = amb((s, t) => s.back == t.front, sets);
+
+ if (result.empty)
+ writeln("No matches found!");
+ else
+ writefln("%-(%s %)", result);
+}
diff --git a/Task/Amb/E/amb-1.e b/Task/Amb/E/amb-1.e
new file mode 100644
index 0000000000..7a1ed1e159
--- /dev/null
+++ b/Task/Amb/E/amb-1.e
@@ -0,0 +1,81 @@
+pragma.enable("accumulator")
+
+def [amb, unamb] := { # block hides internals
+
+ def Choice := Tuple[any, Map]
+
+ def [ambS, ambU] := ("amb")
+ var counter := 0 # Used just for printing ambs
+
+ /** Check whether two sets of decisions are consistent */
+ def consistent(decA, decB) {
+ def overlap := decA.domain() & decB.domain()
+ for ambObj in overlap {
+ if (decA[ambObj] != decB[ambObj]) { return false }
+ }
+ return true
+ }
+
+ /** From an amb object, extract the possible choices */
+ def getChoices(obj, decisions) :List[Choice] {
+ if (decisions.maps(obj)) {
+ return [[decisions[obj], decisions]]
+ } else if (ambU.amplify(obj) =~ [[choices, _]]) {
+ return accum [] for [chosen, dec] ? (consistent(decisions, dec)) in choices { _ + getChoices(chosen, (decisions | dec).with(obj, chosen)) }
+ } else {
+ return [[obj, decisions]]
+ }
+ }
+
+ /** Construct an amb object with remembered decisions */
+ def ambDec(choices :List[Choice]) {
+ def serial := (counter += 1)
+ def ambObj {
+ to __printOn(out) {
+ out.print(" v in decisions {
+ out.print(";", ambU.amplify(k)[0][1], "=", v)
+ }
+ }
+ out.print(">")
+ }
+ to __optSealedDispatch(brand) {
+ if (brand == ambS.getBrand()) {
+ return ambS.seal([choices, serial])
+ }
+ }
+ match [verb, args] {
+ var results := []
+ for [rec, rdec] in getChoices(ambObj, [].asMap()) {
+ def expandArgs(dec, prefix, choosing) {
+ switch (choosing) {
+ match [] { results with= [E.call(rec, verb, prefix), dec] }
+ match [argAmb] + moreArgs {
+ for [arg, adec] in getChoices(argAmb, dec) {
+ expandArgs(adec, prefix.with(arg), moreArgs)
+ }
+ }
+ }
+ }
+ expandArgs(rdec, [], args)
+ }
+ ambDec(results)
+ }
+ }
+ return ambObj
+ }
+
+ /** Construct an amb object with no remembered decisions. (public interface) */
+ def amb(choices) {
+ return ambDec(accum [] for c in choices { _.with([c, [].asMap()]) })
+ }
+
+ /** Get the possible results from an amb object, discarding decision info. (public interface) */
+ def unamb(ambObj) {
+ return accum [] for [c,_] in getChoices(ambObj, [].asMap()) { _.with(c) }
+ }
+
+ [amb, unamb]
+}
diff --git a/Task/Amb/E/amb-2.e b/Task/Amb/E/amb-2.e
new file mode 100644
index 0000000000..3bb8cd08e2
--- /dev/null
+++ b/Task/Amb/E/amb-2.e
@@ -0,0 +1,18 @@
+def join(a, b) {
+ # This must not use the builtin if, since it coerces to boolean rather than passing messages.
+ # false.pick(x, y) returns y and true.pick(x, y) returns x; we protect the amb([]) from causing
+ # unconditional failure by putting both options in functions.
+ # <=> is the comparison operator that happens to be message-based.
+ return (a.last() <=> b[0]).pick(fn {
+ a + " " + b
+ }, fn {
+ amb([])
+ })()
+}
+
+def w1 := amb(["the", "that", "a" ])
+def w2 := amb(["frog", "elephant", "thing" ])
+def w3 := amb(["walked", "treaded", "grows" ])
+def w4 := amb(["slowly", "quickly" ])
+
+unamb(join(join(join(w1, w2), w3), w4))
diff --git a/Task/Amb/Ela/amb-1.ela b/Task/Amb/Ela/amb-1.ela
new file mode 100644
index 0000000000..c6974d25cc
--- /dev/null
+++ b/Task/Amb/Ela/amb-1.ela
@@ -0,0 +1,15 @@
+open list core
+
+amb xs = x where
+ (Some x) = & join xs ""
+ join (x::xs) = amb' x (join xs)
+ join [] = \_ -> Some ""
+ eq' [] x = true
+ eq' w x = last w == head x
+ amb' [] _ _ = None
+ amb' (x::xs) n w
+ | eq' w x =
+ match n x with
+ Some v = Some (x ++ " " ++ v)
+ _ = amb' xs n w
+ | else = amb' xs n w
diff --git a/Task/Amb/Ela/amb-2.ela b/Task/Amb/Ela/amb-2.ela
new file mode 100644
index 0000000000..0448b6446e
--- /dev/null
+++ b/Task/Amb/Ela/amb-2.ela
@@ -0,0 +1,6 @@
+amb [
+ ["the","that","a"]
+ ,["frog","elephant","thing"]
+ ,["walked","treaded","grows"]
+ ,["slowly","quickly"]
+ ]
diff --git a/Task/Amb/Elena/amb.elena b/Task/Amb/Elena/amb.elena
new file mode 100644
index 0000000000..6c94cd7cb5
--- /dev/null
+++ b/Task/Amb/Elena/amb.elena
@@ -0,0 +1,125 @@
+#define system.
+#define extensions.
+#define extensions'routines.
+
+// --- Joinable --
+
+#symbol joinable = (:aFormer:aLater)
+ [ (aFormer @ (aFormer length - 1)) == (aLater @ 0) ].
+
+// --- Activatora ---
+
+#class(role)Activator2
+{
+ #method eval : anArray
+ [
+ ^ self eval:(anArray@0):(anArray@1).
+ ]
+}
+
+#class(role)Activator3
+{
+ #method eval : anArray
+ [
+ ^ self eval:(anArray@0):(anArray@1):(anArray@2).
+ ]
+}
+
+#class(role)Activator4
+{
+ #method eval : anArray
+ [
+ ^ self eval:(anArray@0):(anArray@1):(anArray@2):(anArray@3).
+ ]
+}
+
+#class(role)Activator5
+{
+ #method eval : anArray
+ [
+ ^ self eval:(anArray@0):(anArray@1):(anArray@2):(anArray@3):(anArray@4).
+ ]
+}
+
+// --- AmbValueCollection ---
+
+#class AmbValueCollection
+{
+ #field theCombinator.
+ #field theRole.
+
+ #constructor new : aSet1 : aSet2
+ [
+ theRole := Activator2.
+ theCombinator := CombinatorWithRepetition new:(aSet1,aSet2).
+ ]
+
+ #constructor new : aSet1 : aSet2 : aSet3
+ [
+ theRole := Activator3.
+ theCombinator := CombinatorWithRepetition new:(aSet1,aSet2,aSet3).
+ ]
+
+ #constructor new : aSet1 : aSet2 : aSet3 : aSet4
+ [
+ theRole := Activator4.
+ theCombinator := CombinatorWithRepetition new:(aSet1,aSet2,aSet3,aSet4).
+ ]
+
+ #constructor new : aSet1 : aSet2 : aSet3 : aSet4 : aSet5
+ [
+ theRole := Activator5.
+ theCombinator := CombinatorWithRepetition new:(aSet1,aSet2,aSet3,aSet4,aSet5).
+ ]
+
+ #method seek : aCondition
+ [
+ theCombinator reset.
+
+ control while:[ theCombinator next ] &do:
+ [
+ aCondition~theRole eval:(theCombinator get) ?
+ [ #break nil. ].
+ ].
+ ]
+
+ #method do : aFunction
+ [
+ #var aResult := theCombinator get.
+ nil != aResult
+ ? [ aFunction~theRole eval:aResult. ]
+ ! [ #throw InvalidArgumentException new. ].
+ ]
+}
+
+// --- ambOperator ---
+
+#symbol ambOperator =
+{
+ for : aSet1 : aSet2
+ = AmbValueCollection new:aSet1:aSet2.
+
+ for : aSet1 : aSet2 : aSet3
+ = AmbValueCollection new:aSet1:aSet2:aSet3.
+
+ for : aSet1 : aSet2 : aSet3 : aSet4
+ = AmbValueCollection new:aSet1:aSet2:aSet3:aSet4.
+
+ for : aSet1 : aSet2 : aSet3 : aSet4 : aSet5
+ = AmbValueCollection new:aSet1:aSet2:aSet3:aSet4:aSet5.
+}.
+
+// --- Program ---
+
+#symbol program =
+[
+ ambOperator for:(1,2,4):(4,5,6) seek: (:a:b) [ a * b == 8 ] do: (:a:b)
+ [ consoleEx writeLine: a : " * " : b : " = 8" ]
+ | if &InvalidArgumentError: e [ consoleEx writeLine:"AMB is angry". ].
+
+ ambOperator
+ for:("the","that","a"):("frog", "elephant", "thing"):("walked", "treaded", "grows"):("slowly", "quickly")
+ seek: (:a:b:c:d) [ (joinable:a:b) and:(joinable:b:c) and:(joinable:c:d) ]
+ do: (:a:b:c:d) [ consoleEx writeLine:a:" ":b:" ":c:" ":d. ]
+ | if &InvalidArgumentError: e [ consoleEx writeLine:"AMB is angry". ].
+].
diff --git a/Task/Amb/Factor/amb.factor b/Task/Amb/Factor/amb.factor
new file mode 100644
index 0000000000..1de802fcbc
--- /dev/null
+++ b/Task/Amb/Factor/amb.factor
@@ -0,0 +1,20 @@
+USING: backtrack continuations kernel prettyprint sequences ;
+IN: amb
+
+CONSTANT: words {
+ { "the" "that" "a" }
+ { "frog" "elephant" "thing" }
+ { "walked" "treaded" "grows" }
+ { "slowly" "quickly" }
+}
+
+: letters-match? ( str1 str2 -- ? ) [ last ] [ first ] bi* = ;
+
+: sentence-match? ( seq -- ? ) dup rest [ letters-match? ] 2all? ;
+
+: select ( seq -- seq' ) [ amb-lazy ] map ;
+
+: search ( -- )
+ words select dup sentence-match? [ " " join ] [ fail ] if . ;
+
+MAIN: search
diff --git a/Task/Amb/Go/amb-1.go b/Task/Amb/Go/amb-1.go
new file mode 100644
index 0000000000..29599d532b
--- /dev/null
+++ b/Task/Amb/Go/amb-1.go
@@ -0,0 +1,49 @@
+package main
+
+import (
+ "fmt"
+ "sync"
+)
+
+func ambStrings(ss []string) chan []string {
+ c := make(chan []string)
+ go func() {
+ for _, s := range ss {
+ c <- []string{s}
+ }
+ close(c)
+ }()
+ return c
+}
+
+func ambChain(ss []string, cIn chan []string) chan []string {
+ cOut := make(chan []string)
+ go func() {
+ var w sync.WaitGroup
+ for chain := range cIn {
+ w.Add(1)
+ go func(chain []string) {
+ for s1 := range ambStrings(ss) {
+ if s1[0][len(s1[0])-1] == chain[0][0] {
+ cOut <- append(s1, chain...)
+ }
+ }
+ w.Done()
+ }(chain)
+ }
+ w.Wait()
+ close(cOut)
+ }()
+ return cOut
+}
+
+func main() {
+ s1 := []string{"the", "that", "a"}
+ s2 := []string{"frog", "elephant", "thing"}
+ s3 := []string{"walked", "treaded", "grows"}
+ s4 := []string{"slowly", "quickly"}
+ c := ambChain(s1, ambChain(s2, ambChain(s3, ambStrings(s4))))
+ for s := range c {
+ fmt.Println(s)
+ }
+}
diff --git a/Task/Amb/Go/amb-2.go b/Task/Amb/Go/amb-2.go
new file mode 100644
index 0000000000..80e5a32d8a
--- /dev/null
+++ b/Task/Amb/Go/amb-2.go
@@ -0,0 +1,39 @@
+package main
+import "fmt"
+
+func amb(wordsets [][]string, res []string) bool {
+ if len(wordsets) == 0 {
+ return true
+ }
+
+ var s string
+
+ l := len(res)
+ if l > 0 { s = res[l - 1] }
+
+ res = res[0:len(res) + 1]
+
+ for _, res[l] = range(wordsets[0]) {
+ if l > 0 && s[len(s) - 1] != res[l][0] { continue }
+
+ if amb(wordsets[1:len(wordsets)], res) {
+ return true
+ }
+ }
+
+ return false
+}
+
+func main() {
+ wordset := [][]string { { "the", "that", "a" },
+ { "frog", "elephant", "thing" },
+ { "walked", "treaded", "grows" },
+ { "slowly", "quickly" } }
+ res := make([]string, len(wordset))
+
+ if amb(wordset, res[0:0]) {
+ fmt.Println(res)
+ } else {
+ fmt.Println("No amb found")
+ }
+}
diff --git a/Task/Amb/Haskell/amb.hs b/Task/Amb/Haskell/amb.hs
new file mode 100644
index 0000000000..ee620710f3
--- /dev/null
+++ b/Task/Amb/Haskell/amb.hs
@@ -0,0 +1,15 @@
+import Control.Monad
+
+amb = id
+
+joins left right = last left == head right
+
+example = do
+ w1 <- amb ["the", "that", "a"]
+ w2 <- amb ["frog", "elephant", "thing"]
+ w3 <- amb ["walked", "treaded", "grows"]
+ w4 <- amb ["slowly", "quickly"]
+ unless (joins w1 w2) (amb [])
+ unless (joins w2 w3) (amb [])
+ unless (joins w3 w4) (amb [])
+ return (unwords [w1, w2, w3, w4])
diff --git a/Task/Amb/Haxe/amb.haxe b/Task/Amb/Haxe/amb.haxe
new file mode 100644
index 0000000000..96a6ab598b
--- /dev/null
+++ b/Task/Amb/Haxe/amb.haxe
@@ -0,0 +1,73 @@
+class RosettaDemo
+{
+ static var setA = ['the', 'that', 'a'];
+ static var setB = ['frog', 'elephant', 'thing'];
+ static var setC = ['walked', 'treaded', 'grows'];
+ static var setD = ['slowly', 'quickly'];
+
+ static public function main()
+ {
+ Sys.print(ambParse([ setA, setB, setC, setD ]).toString());
+ }
+
+ static function ambParse(sets : Array>)
+ {
+ var ambData : Dynamic = amb(sets);
+
+ for (data in 0...ambData.length)
+ {
+ var tmpData = parseIt(ambData[data]);
+ var tmpArray = tmpData.split(' ');
+ tmpArray.pop();
+ if (tmpArray.length == sets.length)
+ {
+ return tmpData;
+ }
+ }
+
+ return '';
+ }
+
+ static function amb(startingWith : String = '', sets : Array>) : Dynamic
+ {
+ if (sets.length == 0 || sets[0].length == 0) return;
+
+ var match : Dynamic = [];
+ for (reference in sets[0])
+ {
+ if (startingWith == '' || startingWith == reference.charAt(0))
+ {
+ var lastChar = reference.charAt(reference.length-1);
+ if (Std.is(amb(lastChar, sets.slice(1)), Array))
+ {
+ match.push([ reference, amb(lastChar, sets.slice(1))]);
+ }
+ else
+ {
+ match.push([ reference ]);
+ }
+ }
+ }
+ return match;
+ }
+
+ static function parseIt(data : Dynamic)
+ {
+ var retData = '';
+ if (Std.is(data, Array))
+ {
+ for (elements in 0...data.length)
+ {
+ if (Std.is(data[elements], Array))
+ {
+ retData = retData + parseIt(data[elements]);
+ }
+ else
+ {
+ retData = retData + data[elements] + ' ';
+ }
+ }
+ }
+ return retData;
+ }
+}
diff --git a/Task/Amb/Icon/amb.icon b/Task/Amb/Icon/amb.icon
new file mode 100644
index 0000000000..313cb47a00
--- /dev/null
+++ b/Task/Amb/Icon/amb.icon
@@ -0,0 +1,18 @@
+procedure main()
+ s1 := ["the","that","a"]
+ s2 := ["frog","elephant","thing"]
+ s3 := ["walked","treaded","grows"]
+ s4 := ["slowly","quickly"]
+
+ write(amb(!s1,!s2,!s3,!s4))
+end
+
+procedure amb(exprs[])
+ s := ""
+ every e := !exprs do {
+ if \c ~== e[1] then fail
+ c := e[-1]
+ s ||:= e || " "
+ }
+ return s
+end
diff --git a/Task/Amb/J/amb-1.j b/Task/Amb/J/amb-1.j
new file mode 100644
index 0000000000..e29a0283bf
--- /dev/null
+++ b/Task/Amb/J/amb-1.j
@@ -0,0 +1,5 @@
+ amb=. ([ , ' ' , ])&>/&.>@:((({:@:[ = {.@:])&>/&> # ])@:,@:({@(,&<)))
+ >@(amb&.>/) ('the';'that';'a');('frog';'elephant';'thing');('walked';'treaded';'grows');(<'slowly';'quickly')
++-----------------------+
+|that thing grows slowly|
++-----------------------+
diff --git a/Task/Amb/J/amb-2.j b/Task/Amb/J/amb-2.j
new file mode 100644
index 0000000000..115740d4a9
--- /dev/null
+++ b/Task/Amb/J/amb-2.j
@@ -0,0 +1,4 @@
+ ('the';'that';'a') amb ('frog';'elephant';'thing') amb ('walked';'treaded';'grows') amb ('slowly';'quickly')
++-----------------------+
+|that thing grows slowly|
++-----------------------+
diff --git a/Task/Amb/J/amb-3.j b/Task/Amb/J/amb-3.j
new file mode 100644
index 0000000000..acbad858aa
--- /dev/null
+++ b/Task/Amb/J/amb-3.j
@@ -0,0 +1,10 @@
+ NB. Dynamic programming method...
+
+ o=. @: NB. Composing verbs
+ success=. {:o[ = {.o] NB. Is the last letter of the left word equal to the first of the right?
+ join=. [ , ' ' , ] NB. Joining the left and right words
+ cp=. {@(,&<) NB. Cartesian product
+
+ amb=. join&>/&.> o ((success&>/ &> # ]) o , o cp)f.
+ amb NB. Showing the point-free code...
+([ , ' ' , ])&>/&.>@:((({:@:[ = {.@:])&>/&> # ])@:,@:({@(,&<)))
diff --git a/Task/Amb/JavaScript/amb.js b/Task/Amb/JavaScript/amb.js
new file mode 100644
index 0000000000..8cc231ee81
--- /dev/null
+++ b/Task/Amb/JavaScript/amb.js
@@ -0,0 +1,53 @@
+function ambRun(func) {
+ var choices = [];
+ var index;
+
+ function amb(values) {
+ if (values.length == 0) {
+ fail();
+ }
+ if (index == choices.length) {
+ choices.push({i: 0,
+ count: values.length});
+ }
+ var choice = choices[index++];
+ return values[choice.i];
+ }
+
+ function fail() { throw fail; }
+
+ while (true) {
+ try {
+ index = 0;
+ return func(amb, fail);
+ } catch (e) {
+ if (e != fail) {
+ throw e;
+ }
+ var choice;
+ while ((choice = choices.pop()) && ++choice.i == choice.count) {}
+ if (choice == undefined) {
+ return undefined;
+ }
+ choices.push(choice);
+ }
+ }
+}
+
+ambRun(function(amb, fail) {
+ function linked(s1, s2) {
+ return s1.slice(-1) == s2.slice(0, 1);
+ }
+
+ var w1 = amb(["the", "that", "a"]);
+ var w2 = amb(["frog", "elephant", "thing"]);
+ if (!linked(w1, w2)) fail();
+
+ var w3 = amb(["walked", "treaded", "grows"]);
+ if (!linked(w2, w3)) fail();
+
+ var w4 = amb(["slowly", "quickly"]);
+ if (!linked(w3, w4)) fail();
+
+ return [w1, w2, w3, w4].join(' ');
+}); // "that thing grows slowly"
diff --git a/Task/Amb/Lua/amb-1.lua b/Task/Amb/Lua/amb-1.lua
new file mode 100644
index 0000000000..be14fa39c1
--- /dev/null
+++ b/Task/Amb/Lua/amb-1.lua
@@ -0,0 +1,21 @@
+function amb (set)
+ local workset = {}
+ if (#set == 0) or (type(set) ~= 'table') then return end
+ if #set == 1 then return set end
+ if #set > 2 then
+ local first = table.remove(set,1)
+ set = amb(set)
+ for i,v in next,first do
+ for j,u in next,set do
+ if v:byte(#v) == u[1]:byte(1) then table.insert(workset, {v,unpack(u)}) end
+ end
+ end
+ return workset
+ end
+ for i,v in next,set[1] do
+ for j,u in next,set[2] do
+ if v:byte(#v) == u:byte(1) then table.insert(workset,{v,u}) end
+ end
+ end
+ return workset
+end
diff --git a/Task/Amb/Lua/amb-2.lua b/Task/Amb/Lua/amb-2.lua
new file mode 100644
index 0000000000..2eb2ec36a6
--- /dev/null
+++ b/Task/Amb/Lua/amb-2.lua
@@ -0,0 +1,8 @@
+result = amb({{'the','that','a'},{'frog','elephant','thing'},{'walked','treaded','grows'},{'slowly','quickly'}})
+for i,v in next,result do
+ io.write (i,':\t')
+ for j,u in next,v do
+ io.write (u,' ')
+ end
+ io.write ('\n')
+end
diff --git a/Task/Amb/Mathematica/amb-1.math b/Task/Amb/Mathematica/amb-1.math
new file mode 100644
index 0000000000..fdc821a3a0
--- /dev/null
+++ b/Task/Amb/Mathematica/amb-1.math
@@ -0,0 +1,3 @@
+ CheckValid[i_List]:=If[Length[i]<=1,True,And@@(StringTake[#[[1]],-1]==StringTake[#[[2]],1]&/@Partition[i,2,1])]
+ sets={{"the","that","a"},{"frog","elephant","thing"},{"walked","treaded","grows"},{"slowly","quickly"}};
+ Select[Tuples[sets],CheckValid]
diff --git a/Task/Amb/Mathematica/amb-2.math b/Task/Amb/Mathematica/amb-2.math
new file mode 100644
index 0000000000..b5b723c2b1
--- /dev/null
+++ b/Task/Amb/Mathematica/amb-2.math
@@ -0,0 +1 @@
+{{"that", "thing", "grows", "slowly"}}
diff --git a/Task/Amb/Mathematica/amb-3.math b/Task/Amb/Mathematica/amb-3.math
new file mode 100644
index 0000000000..8ed7cf413e
--- /dev/null
+++ b/Task/Amb/Mathematica/amb-3.math
@@ -0,0 +1 @@
+CheckValid2[i_List] := StringFreeQ[StringJoin[Riffle[i, ","]], a_ ~~ "," ~~ b_ /; a =!= b]
diff --git a/Task/Amb/Mercury/amb-1.mercury b/Task/Amb/Mercury/amb-1.mercury
new file mode 100644
index 0000000000..60c9132fb4
--- /dev/null
+++ b/Task/Amb/Mercury/amb-1.mercury
@@ -0,0 +1,25 @@
+:- module amb.
+:- interface.
+:- import_module io.
+:- pred main(io::di, io::uo) is cc_multi.
+:- implementation.
+:- import_module list, string, char, int.
+
+main(!IO) :-
+ ( solution(S) -> io.write_string(S, !IO), io.nl(!IO)
+ ; io.write_string("No solutions found :-(\n", !IO) ).
+
+:- pred solution(string::out) is nondet.
+solution(S) :-
+ member(A, ["the", "that", "a"]),
+ member(N, ["frog", "elephant", "thing"]),
+ member(V, ["walked", "treaded", "grows"]),
+ member(E, ["slowly", "quickly"]),
+ S = join_list(" ", [A, N, V, E]),
+ rule1(A, N), rule1(N, V), rule1(V, E).
+
+:- pred rule1(string::in, string::in) is semidet.
+rule1(A, B) :- last_char(A) = C, first_char(B, C, _).
+
+:- func last_char(string::in) = (char::out) is semidet.
+last_char(S) = C :- index(S, length(S) - 1, C).
diff --git a/Task/Amb/Mercury/amb-2.mercury b/Task/Amb/Mercury/amb-2.mercury
new file mode 100644
index 0000000000..c700761e35
--- /dev/null
+++ b/Task/Amb/Mercury/amb-2.mercury
@@ -0,0 +1,6 @@
+:- pred noun(string).
+:- mode noun(out) is multi. % provide any one noun.
+:- mode noun(in) is semidet. % fail if given string isn't a known noun.
+noun("frog").
+noun("elephant").
+noun("thing").
diff --git a/Task/Amb/NetRexx/amb.netrexx b/Task/Amb/NetRexx/amb.netrexx
new file mode 100644
index 0000000000..ca4c51334e
--- /dev/null
+++ b/Task/Amb/NetRexx/amb.netrexx
@@ -0,0 +1,71 @@
+ /* REXX **************************************************************
+ * 25.08.2013 Walter Pachl derived from REXX version 2
+ *********************************************************************/
+ w=''
+ l=0
+ mm=0
+ mkset(1,'the that a if',w,mm,l)
+ mkset(2,'frog elephant thing',w,mm,l)
+ mkset(3,'walked treaded grows trots',w,mm,l)
+ mkset(4,'slowly quickly',w,mm,l)
+ show(w,mm,l)
+
+ Loop i=1 to 3 /* loop over sets */
+ k=i+1 /* the following set */
+ Loop ii=1 To 10 /* loop over elements in set k*/
+ If w[i,ii].words=i Then Do /* a sentence part found */
+ Loop jj=1 To 10 /* loop over following words */
+ If w[i,ii].right(1)=w[k,jj].left(1) Then Do /* fitting */
+ ns=w[i,ii]' 'w[k,jj] /* build new sentence (part) */
+ If ns.words=k Then /* 'complete' part */
+ add(w,k,ns) /* add to set k */
+ End
+ End
+ End
+ End
+ End
+ Say 'Results:'
+ Loop jj=1 To 10 /* show the results */
+ If w[4,jj].words=4 Then
+ Say '-->' w[4,jj]
+ End
+
+ method add(w,k,s) public static
+ /*********************************************************************
+ * add a fitting sentence (part) s to set w[k,*]
+ *********************************************************************/
+ Loop i=1 To 10 While w[k,i]>'' /* look for an empty slot */
+ End
+ w[k,i]=s /* add the sentence (part) */
+ Return
+
+ method mkset(n,arg,smp,mm,l) public static
+ /*********************************************************************
+ * create set smp[n,*] from data in arg
+ * mm[0] maximum number of elements in any set
+ * l[n] maximum word length in set n
+ *********************************************************************/
+ loop i = 1 to arg.words
+ smp[n,i] = arg.word(i)
+ If smp[n,i].length>l[n] Then
+ l[n]=smp[n,i].length
+ end
+ if i-1>mm[0] Then Do
+ mm[0]=i-1
+ End
+ return
+
+ method show(w,mm,l) public static
+ /*********************************************************************
+ * show the input
+ *********************************************************************/
+ Say 'Input:'
+ Loop j=1 To mm[0] /* output lines */
+ ol=''
+ Loop i=1 To 4
+ ol=ol w[i,j].left(l[i])
+ End
+ Say ol.strip
+ End;
+ say ''
+ Return
diff --git a/Task/Amb/OCaml/amb-1.ocaml b/Task/Amb/OCaml/amb-1.ocaml
new file mode 100644
index 0000000000..1e80256083
--- /dev/null
+++ b/Task/Amb/OCaml/amb-1.ocaml
@@ -0,0 +1,36 @@
+let set_1 = ["the"; "that"; "a"]
+let set_2 = ["frog"; "elephant"; "thing"]
+let set_3 = ["walked"; "treaded"; "grows"]
+let set_4 = ["slowly"; "quickly"]
+
+let combs ll =
+ let rec aux acc = function
+ | [] -> (List.map List.rev acc)
+ | hd::tl ->
+ let acc =
+ List.fold_left
+ (fun _ac l ->
+ List.fold_left (fun _ac v -> (v::l)::_ac) _ac hd
+ ) [] acc
+ in
+ aux acc tl
+ in
+ aux [[]] ll
+
+let last s = s.[pred(String.length s)]
+let joined a b = (last a = b.[0])
+
+let rec test = function
+ | a::b::tl -> (joined a b) && (test (b::tl))
+ | _ -> true
+
+let print_set set =
+ List.iter (Printf.printf " %s") set;
+ print_newline();
+;;
+
+let () =
+ let sets = combs [set_1; set_2; set_3; set_4] in
+ let sets = List.filter test sets in
+ List.iter print_set sets;
+;;
diff --git a/Task/Amb/OCaml/amb-2.ocaml b/Task/Amb/OCaml/amb-2.ocaml
new file mode 100644
index 0000000000..2f792d447f
--- /dev/null
+++ b/Task/Amb/OCaml/amb-2.ocaml
@@ -0,0 +1,51 @@
+let set_1 = [| "the"; "that"; "a" |]
+let set_2 = [| "frog"; "elephant"; "thing" |]
+let set_3 = [| "walked"; "treaded"; "grows" |]
+let set_4 = [| "slowly"; "quickly" |]
+
+let comb_search p aa =
+ let nx = Array.make (Array.length aa) 0 in
+ let lx = Array.map Array.length aa in
+ let la = Array.length aa in
+ let rec loop() =
+ let res = Array.mapi (fun i j -> aa.(i).(j)) nx in
+ if p res then (res)
+ else
+ ( nx.(0) <- nx.(0) + 1;
+ if nx.(0) < lx.(0)
+ then loop()
+ else
+ ( nx.(0) <- 0;
+ let rec roll n =
+ if n >= la then raise Not_found
+ else
+ ( nx.(n) <- nx.(n) + 1;
+ if nx.(n) >= lx.(n)
+ then ( nx.(n) <- 0; roll (n+1) )
+ else loop()
+ )
+ in
+ roll 1
+ )
+ )
+ in
+ loop()
+
+let last s = s.[pred(String.length s)]
+let joined a b = (last a = b.[0])
+
+let rec test = function
+ | a::b::tl -> (joined a b) && (test (b::tl))
+ | _ -> true
+
+let test r = test(Array.to_list r)
+
+let print_set set =
+ Array.iter (Printf.printf " %s") set;
+ print_newline();
+;;
+
+let () =
+ let result = comb_search test [| set_1; set_2; set_3; set_4 |] in
+ print_set result;
+;;
diff --git a/Task/Amb/OpenEdge-Progress/amb.openedge b/Task/Amb/OpenEdge-Progress/amb.openedge
new file mode 100644
index 0000000000..7f2802be52
--- /dev/null
+++ b/Task/Amb/OpenEdge-Progress/amb.openedge
@@ -0,0 +1,36 @@
+DEF VAR cset AS CHAR EXTENT 4 INIT [
+ "the,that,a",
+ "frog,elephant,thing",
+ "walked,treaded,grows",
+ "slowly,quickly"
+].
+
+FUNCTION getAmb RETURNS CHARACTER (
+ i_cwords AS CHAR,
+ i_iset AS INT
+):
+
+ DEF VAR cresult AS CHAR.
+ DEF VAR ii AS INT.
+ DEF VAR cword AS CHAR.
+
+ DO ii = 1 TO NUM-ENTRIES( cset [ i_iset ] ) WHILE NUM-ENTRIES( cresult, " " ) < EXTENT( cset ):
+
+ cword = ENTRY( ii, cset[ i_iset ] ).
+ IF i_cwords = "" OR
+ SUBSTRING( i_cwords, LENGTH( i_cwords ), 1 ) = SUBSTRING( cword, 1, 1 )
+ THEN DO:
+ IF i_iset = EXTENT ( cset ) THEN
+ cresult = i_cwords + " " + cword.
+ ELSE
+ cresult = getAmb( i_cwords + " " + cword, i_iset + 1 ).
+ END.
+
+ END.
+
+ RETURN cresult.
+
+END FUNCTION. /* getAmb */
+
+
+MESSAGE getAmb( "", 1 ) VIEW-AS ALERT-BOX.
diff --git a/Task/Amb/Oz/amb.oz b/Task/Amb/Oz/amb.oz
new file mode 100644
index 0000000000..aa96eef8c5
--- /dev/null
+++ b/Task/Amb/Oz/amb.oz
@@ -0,0 +1,27 @@
+declare
+
+ fun {Amb Xs}
+ case Xs of nil then fail
+ [] [X] then X
+ [] X|Xr then
+ choice X
+ [] {Amb Xr}
+ end
+ end
+ end
+
+ fun {Example}
+ W1 = {Amb ["the" "that" "a"]}
+ W2 = {Amb ["frog" "elephant" "thing"]}
+ W3 = {Amb ["walked" "treaded" "grows"]}
+ W4 = {Amb ["slowly" "quickly"]}
+ in
+ {List.last W1 W2.1}
+ {List.last W2 W3.1}
+ {List.last W3 W4.1}
+ W1#" "#W2#" "#W3#" "#W4
+ end
+
+in
+
+ {ForAll {SearchAll Example} System.showInfo}
diff --git a/Task/Amb/PARI-GP/amb.pari b/Task/Amb/PARI-GP/amb.pari
new file mode 100644
index 0000000000..45af9983a1
--- /dev/null
+++ b/Task/Amb/PARI-GP/amb.pari
@@ -0,0 +1,16 @@
+Amb(V)={
+ amb(vector(#V,i,vector(#V[i],j,Vec(V[i][j]))),[])
+};
+amb(V,s)={
+ if (#V == 0, return(concat(s)));
+ my(v=V[1],U=vecextract(V,2^#V-2),t,final=if(#s,s[#s]));
+ if(#s, s = concat(s,[" "]));
+ for(i=1,#v,
+ if ((#s == 0 | final == v[i][1]),
+ t = amb(U, concat(s, v[i]));
+ if (t, return(t))
+ )
+ );
+ 0
+};
+Amb([["the","that","a"],["frog","elephant","thing"],["walked","treaded","grows"],["slowly","quickly"]])
diff --git a/Task/Amb/PL-I/amb.pli b/Task/Amb/PL-I/amb.pli
new file mode 100644
index 0000000000..3d572cc848
--- /dev/null
+++ b/Task/Amb/PL-I/amb.pli
@@ -0,0 +1,86 @@
+*process or(!) source attributes xref;
+ amb: Proc Options(main);
+ /*********************************************************************
+ * 25.08.2013 Walter Pachl
+ *********************************************************************/
+ Dcl w(4,10) Char(40) Var
+ Init('the','that','a','if',(6)(1)' ',
+ 'frog','elephant','thing',(7)(1)' ',
+ 'walked','treaded','grows','trots',(6)(1)' ',
+ 'slowly','quickly',(8)(1)' ');
+ Dcl ns Char(40) Var;
+ Dcl (i,k,j,ii,jj,m,n) Bin Fixed(31);
+ n=hbound(w,1); /* number of sets */
+ m=hbound(w,2); /* max number of words in set */
+ Call show; /* show the input */
+ Do i=1 To n-1; /* loop over sets */
+ k=i+1; /* the following set */
+ Do ii=1 To m; /* loop over elements in set k*/
+ If words(w(i,ii))=i Then Do; /* a sentence part found */
+ Do jj=1 To m; /* loop over following words */
+ If right(w(i,ii),1)=left(w(k,jj),1) Then Do; /* fitting */
+ ns=w(i,ii)!!' '!!w(k,jj); /* build new sentence (part) */
+ If words(ns)=k Then /* 'complete' part */
+ Call add(k,ns); /* add to set k */
+ End;
+ End;
+ End;
+ End;
+ Do jj=1 To m; /* show the results */
+ If words(w(4,jj))=4 Then
+ put edit('--> ',w(4,jj))(Skip,a,a);
+ End;
+
+ add: Proc(ni,s);
+ /*********************************************************************
+ * add a sentence (part) to set ni
+ *********************************************************************/
+ Dcl (i,ni) Bin Fixed(31);
+ Dcl s Char(40) Var;
+ Do i=1 To m While(w(ni,i)>''); /* look for an empty slot */
+ End;
+ w(ni,i)=s; /* add the sentence (part) */
+ End;
+
+ words: Proc(s) Returns(Bin Fixed(31));
+ /*********************************************************************
+ * return the number of blank separated words in s
+ *********************************************************************/
+ Dcl s Char(40) Var;
+ Dcl nw Bin Fixed(31) Init(0);
+ Dcl i Bin Fixed(31) Init(1);
+ If s>'' Then Do;
+ nw=1;
+ Do i=1 To length(s);
+ If substr(s,i,1)=' ' Then
+ nw+=1;
+ End;
+ End;
+ Return(nw);
+ End;
+
+ show: Proc;
+ /*********************************************************************
+ * show the input sets
+ *********************************************************************/
+ Dcl (i,j,mm) Bin Fixed(31) Init(0);
+ Dcl l(4) Bin Fixed(31) Init((4)0);
+ Do i=1 To n;
+ Do j=1 To m;
+ If w(i,j)>'' Then Do;
+ mm=max(mm,j); /* max number of words in any set */
+ l(i)=max(l(i),length(w(i,j))); /* max word length in set i */
+ End;
+ End;
+ End;
+ Put Edit('Input:')(Skip,a);
+ Do j=1 To mm; /* output lines */
+ Put Skip;
+ Do i=1 To n;
+ Put Edit(w(i,j),' ')(a(l(i)),a);
+ End;
+ End;
+ Put Skip;
+ End;
+
+ End;
diff --git a/Task/Amb/Perl-6/amb-1.pl6 b/Task/Amb/Perl-6/amb-1.pl6
new file mode 100644
index 0000000000..d62d77b93d
--- /dev/null
+++ b/Task/Amb/Perl-6/amb-1.pl6
@@ -0,0 +1,18 @@
+sub infix: ($a,$b) {
+ next unless try $a.substr(*-1,1) eq $b.substr(0,1);
+ "$a $b";
+}
+
+multi dethunk(Callable $x) { try take $x() }
+multi dethunk( Any $x) { take $x }
+
+sub amb (*@c) { gather @c».&dethunk }
+
+say first *, do
+ amb(, { die 'oops'}) Xlf
+ amb('frog',{'elephant'},'thing') Xlf
+ amb() Xlf
+ amb { die 'poison dart' },
+ {'slowly'},
+ {'quickly'},
+ { die 'fire' };
diff --git a/Task/Amb/Perl-6/amb-2.pl6 b/Task/Amb/Perl-6/amb-2.pl6
new file mode 100644
index 0000000000..d5d5695a94
--- /dev/null
+++ b/Task/Amb/Perl-6/amb-2.pl6
@@ -0,0 +1,18 @@
+sub amb($var,*@a) {
+ "[{
+ @a.pick(*).map: {"||\{ $var = '$_' }"}
+ }]";
+}
+
+'' ~~ m/
+ :my ($a,$b,$c,$d);
+ <{ amb '$a', }>
+ <{ amb '$b', }>
+ { substr($a,*-1,1) eq substr($b,0,1) }>
+ <{ amb '$c', }>
+ { substr($b,*-1,1) eq substr($c,0,1) }>
+ <{ amb '$d', }>
+ { substr($c,*-1,1) eq substr($d,0,1) }>
+ { say "$a $b $c $d" }
+
+/;
diff --git a/Task/Amb/Perl/amb-1.pl b/Task/Amb/Perl/amb-1.pl
new file mode 100644
index 0000000000..7dca79558a
--- /dev/null
+++ b/Task/Amb/Perl/amb-1.pl
@@ -0,0 +1,35 @@
+use strict;
+use warnings;
+
+use constant EXIT_FAILURE => 1;
+use constant EXIT_SUCCESS => 0;
+
+sub amb {
+ exit(EXIT_FAILURE) if !@_;
+ for my $word (@_) {
+ my $pid = fork;
+ die $! unless defined $pid;
+ return $word if !$pid;
+ my $wpid = waitpid $pid, 0;
+ die $! unless $wpid == $pid;
+ exit(EXIT_SUCCESS) if $? == EXIT_SUCCESS;
+ }
+ exit(EXIT_FAILURE);
+}
+
+sub joined {
+ my ($join_a, $join_b) = @_;
+ substr($join_a, -1) eq substr($join_b, 0, 1);
+}
+
+my $w1 = amb(qw(the that a));
+my $w2 = amb(qw(frog elephant thing));
+my $w3 = amb(qw(walked treaded grows));
+my $w4 = amb(qw(slowly quickly));
+
+amb() unless joined $w1, $w2;
+amb() unless joined $w2, $w3;
+amb() unless joined $w3, $w4;
+
+print "$w1 $w2 $w3 $w4\n";
+exit(EXIT_SUCCESS);
diff --git a/Task/Amb/Perl/amb-2.pl b/Task/Amb/Perl/amb-2.pl
new file mode 100644
index 0000000000..1323079790
--- /dev/null
+++ b/Task/Amb/Perl/amb-2.pl
@@ -0,0 +1,40 @@
+use strict;
+use warnings;
+
+sub amb {
+ if( @_ == 0 ) {
+ no warnings 'exiting';
+ next AMB;
+ }
+ my $code = pop;
+ my @words = @_;
+ my @index = (0) x @words;
+ AMB: while( 1 ) {
+ my @w = map $words[$_][$index[$_]], 0 .. $#_;
+ return $code->( @w );
+ } continue {
+ my $i = 0;
+ while( ++$index[$i] == @{$words[$i]} ) {
+ $index[$i] = 0;
+ return if ++$i == @index;
+ }
+ }
+}
+
+my @w1 = qw(the that a);
+my @w2 = qw(frog elephant thing);
+my @w3 = qw(walked treaded grows);
+my @w4 = qw(slowly quickly);
+
+sub joined {
+ my ($join_a, $join_b) = @_;
+ substr($join_a, -1) eq substr($join_b, 0, 1);
+}
+
+amb( \(@w1, @w2, @w3, @w4), sub {
+ my ($w1, $w2, $w3, $w4) = @_;
+ amb() unless joined($w1, $w2);
+ amb() unless joined($w2, $w3);
+ amb() unless joined($w3, $w4);
+ print "$w1 $w2 $w3 $w4\n";
+});
diff --git a/Task/Amb/PicoLisp/amb.l b/Task/Amb/PicoLisp/amb.l
new file mode 100644
index 0000000000..be418db426
--- /dev/null
+++ b/Task/Amb/PicoLisp/amb.l
@@ -0,0 +1,18 @@
+(be amb (@E @Lst)
+ (lst @E @Lst) )
+
+(be joins (@Left @Right)
+ (^ @T (last (chop (-> @Left))))
+ (^ @R (car (chop (-> @Right))))
+ (or
+ ((equal @T @R))
+ ((amb @ NIL)) ) ) # Explicitly using amb fail as required
+
+(be ambExample ((@Word1 @Word2 @Word3 @Word4))
+ (amb @Word1 ("the" "that" "a"))
+ (amb @Word2 ("frog" "elephant" "thing"))
+ (amb @Word3 ("walked" "treaded" "grows"))
+ (amb @Word4 ("slowly" "quickly"))
+ (joins @Word1 @Word2)
+ (joins @Word2 @Word3)
+ (joins @Word3 @Word4) )
diff --git a/Task/Amb/Prolog/amb.pro b/Task/Amb/Prolog/amb.pro
new file mode 100644
index 0000000000..09f80f9c85
--- /dev/null
+++ b/Task/Amb/Prolog/amb.pro
@@ -0,0 +1,17 @@
+amb(E, [E|_]).
+amb(E, [_|ES]) :- amb(E, ES).
+
+joins(Left, Right) :-
+ append(_, [T], Left),
+ append([R], _, Right),
+ ( T \= R -> amb(_, []) % (explicitly using amb fail as required)
+ ; true ).
+
+amb_example([Word1, Word2, Word3, Word4]) :-
+ amb(Word1, ["the","that","a"]),
+ amb(Word2, ["frog","elephant","thing"]),
+ amb(Word3, ["walked","treaded","grows"]),
+ amb(Word4, ["slowly","quickly"]),
+ joins(Word1, Word2),
+ joins(Word2, Word3),
+ joins(Word3, Word4).
diff --git a/Task/Amb/PureBasic/amb.purebasic b/Task/Amb/PureBasic/amb.purebasic
new file mode 100644
index 0000000000..26a054230e
--- /dev/null
+++ b/Task/Amb/PureBasic/amb.purebasic
@@ -0,0 +1,44 @@
+Procedure Words_Ok(String1.s, String2.s)
+ If Mid(String1,Len(String1),1)=Mid(String2,1,1)
+ ProcedureReturn #True
+ EndIf
+ ProcedureReturn #False
+EndProcedure
+
+Procedure.s Amb(Array A.s(1), Array B.s(1), Array C.s(1), Array D.s(1))
+ Protected a, b, c, d
+ For a=0 To ArraySize(A())
+ For b=0 To ArraySize(B())
+ For c=0 To ArraySize(C())
+ For d=0 To ArraySize(D())
+ If Words_Ok(A(a),B(b)) And Words_Ok(B(b),C(c)) And Words_Ok(C(c),D(d))
+ ProcedureReturn A(a)+" "+B(b)+" "+C(c)+" "+D(d)
+ EndIf
+ Next
+ Next
+ Next
+ Next
+ ProcedureReturn "" ; Empty string, e.g. fail
+EndProcedure
+
+If OpenConsole()
+ Define Text.s
+ Dim Set1.s(2)
+ Dim Set2.s(2)
+ Dim Set3.s(2)
+ Dim Set4.s(1)
+
+ Set1(0)="the": set1(1)="that": set1(2)="a"
+ Set2(0)="frog": set2(1)="elephant": set2(2)="thing"
+ Set3(0)="walked": set3(1)="treaded": set3(2)="grows"
+ Set4(0)="slowly": set4(1)="quickly"
+
+ text=Amb(set1(),set2(),Set3(),set4())
+ If Text<>""
+ PrintN("Correct sentence would be,"+#CRLF$+Text)
+ Else
+ PrintN("Failed to fine a correct sentence.")
+ EndIf
+ PrintN(#CRLF$+#CRLF$+"Press ENTER to exit."): Input()
+ CloseConsole()
+EndIf
diff --git a/Task/Amb/Python/amb.py b/Task/Amb/Python/amb.py
new file mode 100644
index 0000000000..485ff38852
--- /dev/null
+++ b/Task/Amb/Python/amb.py
@@ -0,0 +1,100 @@
+import itertools as _itertools
+
+class Amb(object):
+ def __init__(self):
+ self._names2values = {} # set of values for each global name
+ self._func = None # Boolean constraint function
+ self._valueiterator = None # itertools.product of names values
+ self._funcargnames = None # Constraint parameter names
+
+ def __call__(self, arg=None):
+ if hasattr(arg, '__code__'):
+ ##
+ ## Called with a constraint function.
+ ##
+ globls = arg.__globals__ if hasattr(arg, '__globals__') else arg.func_globals
+ # Names used in constraint
+ argv = arg.__code__.co_varnames[:arg.__code__.co_argcount]
+ for name in argv:
+ if name not in self._names2values:
+ assert name in globls, \
+ "Global name %s not found in function globals" % name
+ self._names2values[name] = globls[name]
+ # Gather the range of values of all names used in the constraint
+ valuesets = [self._names2values[name] for name in argv]
+ self._valueiterator = _itertools.product(*valuesets)
+ self._func = arg
+ self._funcargnames = argv
+ return self
+ elif arg is not None:
+ ##
+ ## Assume called with an iterable set of values
+ ##
+ arg = frozenset(arg)
+ return arg
+ else:
+ ##
+ ## blank call tries to return next solution
+ ##
+ return self._nextinsearch()
+
+ def _nextinsearch(self):
+ arg = self._func
+ globls = arg.__globals__
+ argv = self._funcargnames
+ found = False
+ for values in self._valueiterator:
+ if arg(*values):
+ # Set globals.
+ found = True
+ for n, v in zip(argv, values):
+ globls[n] = v
+ break
+ if not found: raise StopIteration
+ return values
+
+ def __iter__(self):
+ return self
+
+ def __next__(self):
+ return self()
+ next = __next__ # Python 2
+
+if __name__ == '__main__':
+ if True:
+ amb = Amb()
+
+ print("\nSmall Pythagorean triples problem:")
+ x = amb(range(1,11))
+ y = amb(range(1,11))
+ z = amb(range(1,11))
+
+ for _dummy in amb( lambda x, y, z: x*x + y*y == z*z ):
+ print ('%s %s %s' % (x, y, z))
+
+
+ if True:
+ amb = Amb()
+
+ print("\nRosetta Code Amb problem:")
+ w1 = amb(["the", "that", "a"])
+ w2 = amb(["frog", "elephant", "thing"])
+ w3 = amb(["walked", "treaded", "grows"])
+ w4 = amb(["slowly", "quickly"])
+
+ for _dummy in amb( lambda w1, w2, w3, w4: \
+ w1[-1] == w2[0] and \
+ w2[-1] == w3[0] and \
+ w3[-1] == w4[0] ):
+ print ('%s %s %s %s' % (w1, w2, w3, w4))
+
+ if True:
+ amb = Amb()
+
+ print("\nAmb problem from "
+ "http://www.randomhacks.net/articles/2005/10/11/amb-operator:")
+ x = amb([1, 2, 3])
+ y = amb([4, 5, 6])
+
+ for _dummy in amb( lambda x, y: x * y != 8 ):
+ print ('%s %s' % (x, y))
diff --git a/Task/Amb/R/amb-1.r b/Task/Amb/R/amb-1.r
new file mode 100644
index 0000000000..2b2a86bb40
--- /dev/null
+++ b/Task/Amb/R/amb-1.r
@@ -0,0 +1,23 @@
+checkSentence <- function(sentence){
+# Input: character vector
+# Output: whether the sentence formed by the elements of the vector is valid
+ for (index in 1:(length(sentence)-1)){
+ first.word <- sentence[index]
+ second.word <- sentence[index+1]
+
+ last.letter <- substr(first.word, nchar(first.word), nchar(first.word))
+ first.letter <- substr(second.word, 1, 1)
+
+ if (last.letter != first.letter){ return(FALSE) }
+ }
+ return(TRUE)
+}
+
+amb <- function(sets){
+# Input: list of character vectors containing all sets to consider
+# Output: list of character vectors that are valid
+ all.paths <- apply(expand.grid(sets), 2, as.character)
+ all.paths.list <- split(all.paths, 1:nrow(all.paths))
+ winners <- all.paths.list[sapply(all.paths.list, checkSentence)]
+ return(winners)
+}
diff --git a/Task/Amb/R/amb-2.r b/Task/Amb/R/amb-2.r
new file mode 100644
index 0000000000..73616a1824
--- /dev/null
+++ b/Task/Amb/R/amb-2.r
@@ -0,0 +1,14 @@
+sentence1 <- c("that", "thing", "grows", "slowly")
+sentence2 <- c("rosetta", "code", "is", "cool")
+sentence <- list(sentence1, sentence2)
+sapply(sentence, checkSentence)
+[1] TRUE FALSE
+
+set1 <- c("the", "that", "a")
+set2 <- c("frog", "elephant", "thing")
+set3 <- c("walked", "treaded", "grows")
+set4 <- c("slowly", "quickly")
+sets <- list(set1, set2, set3, set4)
+amb(sets)
+$`26`
+[1] "that" "thing" "grows" "slowly"
diff --git a/Task/Amb/README b/Task/Amb/README
new file mode 100644
index 0000000000..7316bfdebd
--- /dev/null
+++ b/Task/Amb/README
@@ -0,0 +1 @@
+Data source: http://rosettacode.org/wiki/Amb
diff --git a/Task/Amb/REXX/amb-1.rexx b/Task/Amb/REXX/amb-1.rexx
new file mode 100644
index 0000000000..0aa5fcdb4a
--- /dev/null
+++ b/Task/Amb/REXX/amb-1.rexx
@@ -0,0 +1,22 @@
+/*REXX program demonstrates Amd operator, choosing a word from each set.*/
+@.= /*default value for any # of sets*/
+@.1 = "the that a"
+@.2 = "frog elephant thing"
+@.3 = "walked treaded grows"
+@.4 = "slowly quickly"
+ do j=1 until @.j==''; end; @.0=j-1 /*set @.0 to the number of sets.*/
+call Amb 1 /*find combo of words that works.*/
+exit /*stick a fork in it, we're done.*/
+/*─────────────────────────────────────AMB procedure────────────────────*/
+Amb: procedure expose @.; parse arg # _; arg . u; if #=='' then return
+if #>@.0 then do; if u=='' then return /*return if no words are left. */
+ w=word(u,1) /*use upper case version of word.*/
+ do n=2 to words(u); c=word(u,n)
+ if left(c,1)\==right(w,1) then return; w=c
+ end /*n*/
+ say strip(_) /* _ has an extra leading blank. */
+ end
+ do k=1 for words(@.#)
+ call amb #+1 _ word(@.#,k) /*generate the next combination. */
+ end /*k*/
+return
diff --git a/Task/Amb/REXX/amb-2.rexx b/Task/Amb/REXX/amb-2.rexx
new file mode 100644
index 0000000000..d2492ea0a5
--- /dev/null
+++ b/Task/Amb/REXX/amb-2.rexx
@@ -0,0 +1,85 @@
+ /* REXX **************************************************************
+ * 25.08.2013 Walter Pachl derived from PL/I
+ *********************************************************************/
+ mm=0
+ w.=''
+ l.=0
+ Call mkset 1,'the that a if'
+ Call mkset 2,'frog elephant thing'
+ Call mkset 3,'walked treaded grows trots'
+ Call mkset 4,'slowly quickly'
+
+ Call show
+ Do i=1 to 3 /* loop over sets */
+ Call showm
+ k=i+1 /* the following set */
+ Do ii=1 To 10 /* loop over elements in set k*/
+ If words(w.i.ii)=i Then Do /* a sentence part found */
+ Do jj=1 To 10 /* loop over following words */
+ If right(w.i.ii,1)=left(w.k.jj,1) Then Do /* fitting */
+ ns=w.i.ii' 'w.k.jj /* build new sentence (part) */
+ If words(ns)=k Then /* 'complete' part */
+ Call add k,ns /* add to set k */
+ End
+ End
+ End
+ End
+ End
+
+ Do jj=1 To 10 /* show the results */
+ If words(w.4.jj)=4 Then
+ Say '-->' w.4.jj
+ End
+ Return
+
+ add: Procedure Expose w.
+ /*********************************************************************
+ * add a sentence (part) to set ni
+ *********************************************************************/
+ Parse Arg ni,s
+ Do i=1 To 10 While w.ni.i>'' /* look for an empty slot */
+ End
+ w.ni.i=s /* add the sentence (part) */
+ Return
+
+ mkset: Procedure Expose w. mm l.
+ /*********************************************************************
+ * initialize the sets
+ *********************************************************************/
+ Parse Arg i,wl
+ Do j=1 By 1 While wl<>''
+ Parse Var wl w.i.j wl
+ l.i=max(l.i,length(w.i.j))
+ End
+ mm=max(mm,j-1)
+ Return
+
+show: Procedure Expose w. mm l.
+ /*********************************************************************
+ * show the input
+ *********************************************************************/
+ Say 'Input:'
+ Do j=1 To mm /* output lines */
+ ol=''
+ Do i=1 To 4
+ ol=ol left(w.i.j,l.i)
+ End
+ Say strip(ol)
+ End;
+ say ''
+ Return
+
+showm: Procedure Expose w.
+ /*********************************************************************
+ * show the sets' contents
+ *********************************************************************/
+ dbg=0
+ If dbg Then Do
+ Do i=1 To 4
+ Do j=1 To 10
+ If w.i.j>'' Then
+ Say i j w.i.j
+ End
+ End
+ End
+ Return
diff --git a/Task/Amb/Racket/amb.rkt b/Task/Amb/Racket/amb.rkt
new file mode 100644
index 0000000000..6d761c6dab
--- /dev/null
+++ b/Task/Amb/Racket/amb.rkt
@@ -0,0 +1,30 @@
+#lang racket
+
+;; A quick `amb' implementation (same as in the Twelve Statements task)
+(define failures null)
+
+(define (fail)
+ (if (pair? failures) ((first failures)) (error "no more choices!")))
+
+(define (amb/thunks choices)
+ (let/cc k (set! failures (cons k failures)))
+ (if (pair? choices)
+ (let ([choice (first choices)]) (set! choices (rest choices)) (choice))
+ (begin (set! failures (rest failures)) (fail))))
+
+(define-syntax-rule (amb E ...) (amb/thunks (list (lambda () E) ...)))
+
+(define (assert condition) (unless condition (fail)))
+
+;; Problem solution
+
+(define (joins? left right)
+ (regexp-match? #px"(.)\0\\1" (~a left "\0" right)))
+
+(let ([result (list (amb "the" "that" "a")
+ (amb "frog" "elephant" "thing")
+ (amb "walked" "treaded" "grows")
+ (amb "slowly" "quickly"))])
+ (for ([x result] [y (cdr result)]) (assert (joins? x y)))
+ result)
+;; -> '("that" "thing" "grows" "slowly")
diff --git a/Task/Amb/Ruby/amb.rb b/Task/Amb/Ruby/amb.rb
new file mode 100644
index 0000000000..8b13f0bf76
--- /dev/null
+++ b/Task/Amb/Ruby/amb.rb
@@ -0,0 +1,47 @@
+class Amb
+ class ExhaustedError < RuntimeError; end
+
+ def initialize
+ @fail = proc { fail ExhaustedError, "amb tree exhausted" }
+ end
+
+ def choose(*choices)
+ prev_fail = @fail
+ callcc { |sk|
+ choices.each { |choice|
+ callcc { |fk|
+ @fail = proc {
+ @fail = prev_fail
+ fk.call(:fail)
+ }
+ if choice.respond_to? :call
+ sk.call(choice.call)
+ else
+ sk.call(choice)
+ end
+ }
+ }
+ @fail.call
+ }
+ end
+
+ def failure
+ choose
+ end
+
+ def assert(cond)
+ failure unless cond
+ end
+end
+
+A = Amb.new
+w1 = A.choose("the", "that", "a")
+w2 = A.choose("frog", "elephant", "thing")
+w3 = A.choose("walked", "treaded", "grows")
+w4 = A.choose("slowly", "quickly")
+
+A.choose() unless w1[-1] == w2[0]
+A.choose() unless w2[-1] == w3[0]
+A.choose() unless w3[-1] == w4[0]
+
+puts w1, w2, w3, w4
diff --git a/Task/Amb/SETL/amb-1.setl b/Task/Amb/SETL/amb-1.setl
new file mode 100644
index 0000000000..e0e263731f
--- /dev/null
+++ b/Task/Amb/SETL/amb-1.setl
@@ -0,0 +1,15 @@
+program amb;
+
+sets := unstr('[{the that a} {frog elephant thing} {walked treaded grows} {slowly quickly}]');
+
+words := [amb(words): words in sets];
+if exists lWord = words(i), rWord in {words(i+1)} |
+ lWord(#lWord) /= rWord(1) then
+ fail;
+end if;
+
+proc amb(words);
+ return arb {word in words | ok};
+end proc;
+
+end program;
diff --git a/Task/Amb/SETL/amb-2.setl b/Task/Amb/SETL/amb-2.setl
new file mode 100644
index 0000000000..be137522ab
--- /dev/null
+++ b/Task/Amb/SETL/amb-2.setl
@@ -0,0 +1,26 @@
+program amb;
+
+sets := unstr('[{the that a} {frog elephant thing} {walked treaded grows} {slowly quickly}]');
+
+print(amb(sets));
+
+proc amb(sets);
+ return amb1([], {}, sets);
+end proc;
+
+proc amb1(prev, mbLast, sets);
+ if sets = [] then
+ return prev;
+ else
+ words fromb sets;
+ if exists word in words |
+ (forall last in mbLast |
+ last(#last) = word(1)) and
+ (exists sentence in {amb1(prev with word, {word}, sets)} |
+ true) then
+ return sentence;
+ end if;
+ end if;
+end proc;
+
+end program;
diff --git a/Task/Amb/Scala/amb.scala b/Task/Amb/Scala/amb.scala
new file mode 100644
index 0000000000..04e95f4e51
--- /dev/null
+++ b/Task/Amb/Scala/amb.scala
@@ -0,0 +1,20 @@
+object Amb {
+
+ def amb(wss: List[List[String]]): Option[String] = {
+ def _amb(ws: List[String], wss: List[List[String]]): Option[String] = wss match {
+ case Nil => ((Some(ws.head): Option[String]) /: ws.tail)((a, w) => a match {
+ case Some(x) => if (x.last == w.head) Some(x + " " + w) else None
+ case None => None
+ })
+ case ws1 :: wss1 => ws1.flatMap(w => _amb(w :: ws, wss1)).headOption
+ }
+ _amb(Nil, wss.reverse)
+ }
+
+ def main(args: Array[String]) {
+ println(amb(List(List("the", "that", "a"),
+ List("frog", "elephant", "thing"),
+ List("walked", "treaded", "grows"),
+ List("slowly", "quickly"))))
+ }
+}
diff --git a/Task/Amb/Scheme/amb.ss b/Task/Amb/Scheme/amb.ss
new file mode 100644
index 0000000000..951db6f220
--- /dev/null
+++ b/Task/Amb/Scheme/amb.ss
@@ -0,0 +1,34 @@
+(define fail
+ (lambda ()
+ (error "Amb tree exhausted")))
+
+(define-syntax amb
+ (syntax-rules ()
+ ((AMB) (FAIL)) ; Two shortcuts.
+ ((AMB expression) expression)
+
+ ((AMB expression ...)
+ (LET ((FAIL-SAVE FAIL))
+ ((CALL-WITH-CURRENT-CONTINUATION ; Capture a continuation to
+ (LAMBDA (K-SUCCESS) ; which we return possibles.
+ (CALL-WITH-CURRENT-CONTINUATION
+ (LAMBDA (K-FAILURE) ; K-FAILURE will try the next
+ (SET! FAIL K-FAILURE) ; possible expression.
+ (K-SUCCESS ; Note that the expression is
+ (LAMBDA () ; evaluated in tail position
+ expression)))) ; with respect to AMB.
+ ...
+ (SET! FAIL FAIL-SAVE) ; Finally, if this is reached,
+ FAIL-SAVE))))))) ; we restore the saved FAIL.
+
+
+(let ((w-1 (amb "the" "that" "a"))
+ (w-2 (amb "frog" "elephant" "thing"))
+ (w-3 (amb "walked" "treaded" "grows"))
+ (w-4 (amb "slowly" "quickly")))
+ (define (joins? left right)
+ (equal? (string-ref left (- (string-length left) 1)) (string-ref right 0)))
+ (if (joins? w-1 w-2) '() (amb))
+ (if (joins? w-2 w-3) '() (amb))
+ (if (joins? w-3 w-4) '() (amb))
+ (list w-1 w-2 w-3 w-4))
diff --git a/Task/Amb/Seed7/amb.seed7 b/Task/Amb/Seed7/amb.seed7
new file mode 100644
index 0000000000..86855b3f5d
--- /dev/null
+++ b/Task/Amb/Seed7/amb.seed7
@@ -0,0 +1,51 @@
+$ include "seed7_05.s7i";
+
+const type: setListType is array array string;
+
+const func array string: amb (in string: word1, in setListType: listOfSets) is func
+ result
+ var array string: ambResult is 0 times "";
+ local
+ var string: word2 is "";
+ begin
+ for word2 range listOfSets[1] do
+ if length(ambResult) = 0 and word1[length(word1) len 1] = word2[1 len 1] then
+ if length(listOfSets) = 1 then
+ ambResult := [] (word1) & [] (word2);
+ else
+ ambResult := amb(word2, listOfSets[2 ..]);
+ if length(ambResult) <> 0 then
+ ambResult := [] (word1) & ambResult;
+ end if;
+ end if;
+ end if;
+ end for;
+ end func;
+
+const func array string: amb (in setListType: listOfSets) is func
+ result
+ var array string: ambResult is 0 times "";
+ local
+ var string: word1 is "";
+ begin
+ for word1 range listOfSets[1] do
+ if length(ambResult) = 0 then
+ ambResult := amb(word1, listOfSets[2 ..]);
+ end if;
+ end for;
+ end func;
+
+const proc: main is func
+ local
+ var array string: ambResult is 0 times "";
+ var string: word is "";
+ begin
+ ambResult := amb([] ([] ("the", "that", "a"),
+ [] ("frog", "elephant", "thing"),
+ [] ("walked", "treaded", "grows"),
+ [] ("slowly", "quickly")));
+ for word range ambResult do
+ write(word <& " ");
+ end for;
+ writeln;
+ end func;
diff --git a/Task/Amb/TUSCRIPT/amb.tu b/Task/Amb/TUSCRIPT/amb.tu
new file mode 100644
index 0000000000..a927256baf
--- /dev/null
+++ b/Task/Amb/TUSCRIPT/amb.tu
@@ -0,0 +1,22 @@
+$$ MODE TUSCRIPT
+set1="the'that'a"
+set2="frog'elephant'thing"
+set3="walked'treaded'grows"
+set4="slowly'quickly"
+LOOP w1=set1
+ lastw1=EXTRACT (w1,-1,0)
+ LOOP w2=set2
+ IF (w2.sw.$lastw1) THEN
+ lastw2=EXTRACT (w2,-1,0)
+ LOOP w3=set3
+ IF (w3.sw.$lastw2) THEN
+ lastw3=EXTRACT (w3,-1,0)
+ LOOP w4=set4
+ IF (w4.sw.$lastw3) sentence=JOIN (w1," ",w2,w3,w4)
+ ENDLOOP
+ ENDIF
+ ENDLOOP
+ ENDIF
+ ENDLOOP
+ENDLOOP
+PRINT sentence
diff --git a/Task/Amb/TXR/amb-1.txr b/Task/Amb/TXR/amb-1.txr
new file mode 100644
index 0000000000..67e21ef8d9
--- /dev/null
+++ b/Task/Amb/TXR/amb-1.txr
@@ -0,0 +1,24 @@
+@(define first_last (first last whole))
+@ (all)
+@(skip :greedy)@{last 1}
+@ (and)
+@{first 1}@(skip)
+@ (and)
+@whole
+@ (end)
+@(end)
+@(next "amb/set1")
+@(skip)
+@(first_last fi1 la1 w1)
+@(next "amb/set2")
+@(skip)
+@(first_last la1 la2 w2)
+@(next "amb/set3")
+@(skip)
+@(first_last la2 la3 w3)
+@(next "amb/set4")
+@(skip)
+@(first_last la3 la4 w4)
+@(output)
+@w1 @w2 @w3 @w4
+@(end)
diff --git a/Task/Amb/TXR/amb-2.txr b/Task/Amb/TXR/amb-2.txr
new file mode 100644
index 0000000000..ce8aad703d
--- /dev/null
+++ b/Task/Amb/TXR/amb-2.txr
@@ -0,0 +1,24 @@
+@(define first_last (first last whole))
+@ (all)
+@(skip :greedy)@{last 1}
+@ (and)
+@{first 1}@(skip)
+@ (and)
+@whole
+@ (end)
+@(end)
+@(next :list ("the" "that" "a"))
+@(skip)
+@(first_last fi1 la1 w1)
+@(next :list ("frog" "elephant" "thing"))
+@(skip)
+@(first_last la1 la2 w2)
+@(next :list ("walked" "treaded" "grows"))
+@(skip)
+@(first_last la2 la3 w3)
+@(next :list ("slowly" "quickly"))
+@(skip)
+@(first_last la3 la4 w4)
+@(output)
+@w1 @w2 @w3 @w4
+@(end)
diff --git a/Task/Amb/Tcl/amb-1.tcl b/Task/Amb/Tcl/amb-1.tcl
new file mode 100644
index 0000000000..2ae771ca74
--- /dev/null
+++ b/Task/Amb/Tcl/amb-1.tcl
@@ -0,0 +1,24 @@
+set amb {
+ {the that a}
+ {frog elephant thing}
+ {walked treaded grows}
+ {slowly quickly}
+}
+
+proc joins {a b} {
+ expr {[string index $a end] eq [string index $b 0]}
+}
+
+foreach i [lindex $amb 0] {
+ foreach j [lindex $amb 1] {
+ if ![joins $i $j] continue
+ foreach k [lindex $amb 2] {
+ if ![joins $j $k] continue
+ foreach l [lindex $amb 3] {
+ if [joins $k $l] {
+ puts [list $i $j $k $l]
+ }
+ }
+ }
+ }
+}
diff --git a/Task/Amb/Tcl/amb-2.tcl b/Task/Amb/Tcl/amb-2.tcl
new file mode 100644
index 0000000000..5866e28fcc
--- /dev/null
+++ b/Task/Amb/Tcl/amb-2.tcl
@@ -0,0 +1,41 @@
+package require Tcl 8.6
+proc cp {args} {
+ coroutine cp.[incr ::cps] apply {{list args} {
+ yield [info coroutine]
+ foreach item $list {
+ if {[llength $args]} {
+ set c [cp {*}$args]
+ while 1 { yield [list $item {*}[$c]] }
+ } else { yield $item }
+ }
+ return -code break
+ }} {*}$args
+}
+proc amb {name filter args} {
+ coroutine $name apply {{filter args} {
+ set c [cp {*}$args]
+ yield [info coroutine]
+ while 1 {
+ set value [$c]
+ if {[{*}$filter $value]} { yield $value }
+ }
+ return -code break
+ }} $filter {*}$args
+}
+
+proc joins {a b} {
+ expr {[string index $a end] eq [string index $b 0]}
+}
+proc joins* list {
+ foreach a [lrange $list 0 end-1] b [lrange $list 1 end] {
+ if {![joins $a $b]} {return 0}
+ }
+ return 1
+}
+
+amb words joins* \
+ {the that a} \
+ {frog elephant thing} \
+ {walked treaded grows} \
+ {slowly quickly}
+while 1 { puts [words] }
diff --git a/Task/Amb/VBScript/amb-1.vb b/Task/Amb/VBScript/amb-1.vb
new file mode 100644
index 0000000000..a0329873e2
--- /dev/null
+++ b/Task/Amb/VBScript/amb-1.vb
@@ -0,0 +1,11 @@
+class ambiguous
+ dim sRule
+
+ public property let rule( x )
+ sRule = x
+ end property
+
+ public default function amb(p1, p2)
+ amb = eval(sRule)
+ end function
+end class
diff --git a/Task/Amb/VBScript/amb-2.vb b/Task/Amb/VBScript/amb-2.vb
new file mode 100644
index 0000000000..2fb0ec5398
--- /dev/null
+++ b/Task/Amb/VBScript/amb-2.vb
@@ -0,0 +1,17 @@
+dim amb
+set amb = new ambiguous
+
+amb.rule = "right(p1,1)=left(p2,1)"
+
+dim w1, w2, w3, w4
+for each w1 in split("the that a", " ")
+ for each w2 in split("frog elephant thing", " ")
+ for each w3 in split("walked treaded grows", " ")
+ for each w4 in split("slowly quickly", " ")
+ if amb(w1, w2) and amb(w2, w3) and amb(w3, w4) then
+ wscript.echo w1, w2, w3, w4
+ end if
+ next
+ next
+ next
+next
diff --git a/Task/Amicable-pairs/00DESCRIPTION b/Task/Amicable-pairs/00DESCRIPTION
new file mode 100644
index 0000000000..c15152bac6
--- /dev/null
+++ b/Task/Amicable-pairs/00DESCRIPTION
@@ -0,0 +1,11 @@
+Two integers and are said to be [[wp:Amicable numbers|amicable pairs]] if and the sum of the [[Proper divisors|proper divisors]] of () as well as .
+
+For example 1184 and 1210 are an amicable pair (with proper divisors 1, 2, 4, 8, 16, 32, 37, 74, 148, 296, 592 and 1, 2, 5, 10, 11, 22, 55, 110, 121, 242, 605 respectively).
+
+;Task:
+Calculate and show here the Amicable pairs below 20,000; (there are eight).
+
+;Cf.
+* [[Proper divisors]]
+* [[Abundant, deficient and perfect number classifications]]
+* [[Aliquot sequence classifications]] and its amicable ''classification''.
diff --git a/Task/Amicable-pairs/AutoHotkey/amicable-pairs.ahk b/Task/Amicable-pairs/AutoHotkey/amicable-pairs.ahk
new file mode 100644
index 0000000000..695ead2392
--- /dev/null
+++ b/Task/Amicable-pairs/AutoHotkey/amicable-pairs.ahk
@@ -0,0 +1,53 @@
+SetBatchLines -1
+Loop, 20000
+{
+ m := A_index
+
+ ; Getting factors
+ loop % floor(sqrt(m))
+ {
+ if ( mod(m, A_index) = 0 )
+ {
+ if ( A_index ** 2 == m )
+ {
+ sum += A_index
+ continue
+ } else if ( A_index != 1 )
+ {
+ sum += A_index + m//A_index
+ } else if ( A_index = 1 )
+ {
+ sum += A_index
+ }
+ }
+ } ; Factors obtained
+
+ ; Checking factors of sum
+ if ( sum > 1 )
+ {
+ loop % floor(sqrt(sum))
+ {
+ if ( mod(sum, A_index) = 0 )
+ {
+ if ( A_index ** 2 == sum )
+ {
+ sum2 += A_index
+ continue
+ } else if ( A_index != 1 )
+ {
+ sum2 += A_index + sum//A_index
+ } else if ( A_index = 1 )
+ {
+ sum2 += A_index
+ }
+ }
+ }
+ if ( m = sum2 ) && ( m != sum ) && ( m < sum )
+ final .= m . ":" . sum . "`n"
+ } ; Checked
+
+ sum := 0
+ sum2 := 0
+}
+MsgBox % final
+ExitApp
diff --git a/Task/Amicable-pairs/C/amicable-pairs.c b/Task/Amicable-pairs/C/amicable-pairs.c
new file mode 100644
index 0000000000..ae528a648e
--- /dev/null
+++ b/Task/Amicable-pairs/C/amicable-pairs.c
@@ -0,0 +1,41 @@
+#include
+#include
+
+typedef unsigned int uint;
+
+int main(int argc, char **argv)
+{
+ uint top = atoi(argv[1]);
+ uint *divsum = malloc((top + 1) * sizeof(*divsum));
+ uint pows[32] = {1, 0};
+
+ for (uint i = 0; i <= top; i++) divsum[i] = 1;
+
+ // sieve
+ for (uint p = 2; p <= top; p++) {
+ if (divsum[p] > 1) continue; // p not prime
+
+ uint x; // highest power of p we need
+
+ // checking x <= top/y instead of x*y <= top to avoid overflow
+ for (x = 1; pows[x - 1] <= top/p; x++)
+ pows[x] = p*pows[x - 1];
+
+ for (uint n = p; n <= top; n += p) {
+ uint s;
+ for (uint i = s = 1; i < x && !(n%pows[i]); s += pows[i++]);
+ divsum[n] *= s;
+ }
+ }
+
+ // subtract number itself from divisor sum ('proper')
+ for (uint i = 0; i <= top; i++) divsum[i] -= i;
+
+ for (uint a = 1; a <= top; a++) {
+ uint b = divsum[a];
+ if (b > a && b <= top && divsum[b] == a)
+ printf("%u %u\n", a, b);
+ }
+
+ return 0;
+}
diff --git a/Task/Amicable-pairs/D/amicable-pairs.d b/Task/Amicable-pairs/D/amicable-pairs.d
new file mode 100644
index 0000000000..ef66cb5ae0
--- /dev/null
+++ b/Task/Amicable-pairs/D/amicable-pairs.d
@@ -0,0 +1,14 @@
+void main() @safe /*@nogc*/ {
+ import std.stdio, std.algorithm, std.range, std.typecons, std.array;
+
+ immutable properDivs = (in uint n) pure nothrow @safe /*@nogc*/ =>
+ iota(1, (n + 1) / 2 + 1).filter!(x => n % x == 0);
+
+ enum rangeMax = 20_000;
+ auto n2d = iota(1, rangeMax + 1).map!(n => properDivs(n).sum);
+
+ foreach (immutable n, immutable divSum; n2d.enumerate(1))
+ if (n < divSum && divSum <= rangeMax && n2d[divSum - 1] == n)
+ writefln("Amicable pair: %d and %d with proper divisors:\n %s\n %s",
+ n, divSum, properDivs(n), properDivs(divSum));
+}
diff --git a/Task/Amicable-pairs/Haskell/amicable-pairs.hs b/Task/Amicable-pairs/Haskell/amicable-pairs.hs
new file mode 100644
index 0000000000..01bbecbd19
--- /dev/null
+++ b/Task/Amicable-pairs/Haskell/amicable-pairs.hs
@@ -0,0 +1,10 @@
+divisors :: (Integral a) => a -> [a]
+divisors n = filter ((0 ==) . (n `mod`)) [1 .. (n `div` 2)]
+
+main :: IO ()
+main = do
+ let range = [1 .. 20000 :: Int]
+ divs = zip range $ map (sum . divisors) range
+ pairs = [(n, m) | (n, nd) <- divs, (m, md) <- divs,
+ n < m, nd == m, md == n]
+ print pairs
diff --git a/Task/Amicable-pairs/J/amicable-pairs-1.j b/Task/Amicable-pairs/J/amicable-pairs-1.j
new file mode 100644
index 0000000000..c131df8a6c
--- /dev/null
+++ b/Task/Amicable-pairs/J/amicable-pairs-1.j
@@ -0,0 +1,2 @@
+factors=: [: /:~@, */&>@{@((^ i.@>:)&.>/)@q:~&__
+properDivisors=: factors -. -.&1
diff --git a/Task/Amicable-pairs/J/amicable-pairs-2.j b/Task/Amicable-pairs/J/amicable-pairs-2.j
new file mode 100644
index 0000000000..c21dc963a9
--- /dev/null
+++ b/Task/Amicable-pairs/J/amicable-pairs-2.j
@@ -0,0 +1,9 @@
+ 1+0 20000 #:I.,(~@i.@#*(*|:))(=/ +/@properDivisors@>) 1+i.20000
+ 220 284
+ 1184 1210
+ 2620 2924
+ 5020 5564
+ 6232 6368
+10744 10856
+12285 14595
+17296 18416
diff --git a/Task/Amicable-pairs/Mathematica/amicable-pairs.math b/Task/Amicable-pairs/Mathematica/amicable-pairs.math
new file mode 100644
index 0000000000..a6b280e60f
--- /dev/null
+++ b/Task/Amicable-pairs/Mathematica/amicable-pairs.math
@@ -0,0 +1,5 @@
+amicableQ[n_] :=
+ Module[{sum = Total[Most@Divisors@n]},
+ sum != n && n == Total[Most@Divisors@sum]]
+
+Grid@Partition[Cases[Range[4, 20000], _?(amicableQ@# &)], 2]
diff --git a/Task/Amicable-pairs/PARI-GP/amicable-pairs.pari b/Task/Amicable-pairs/PARI-GP/amicable-pairs.pari
new file mode 100644
index 0000000000..723ed3b79e
--- /dev/null
+++ b/Task/Amicable-pairs/PARI-GP/amicable-pairs.pari
@@ -0,0 +1 @@
+for(x=1,20000,my(y=sigma(x)-x); if(y>x && x == sigma(y)-y,print(x" "y)))
diff --git a/Task/Amicable-pairs/PL-I/amicable-pairs.pli b/Task/Amicable-pairs/PL-I/amicable-pairs.pli
new file mode 100644
index 0000000000..a50fcc3cd8
--- /dev/null
+++ b/Task/Amicable-pairs/PL-I/amicable-pairs.pli
@@ -0,0 +1,60 @@
+*process source xref;
+ ami: Proc Options(main);
+ p9a=time();
+ Dcl (p9a,p9b,p9c) Pic'(9)9';
+ Dcl sumpd(20000) Bin Fixed(31);
+ Dcl pd(300) Bin Fixed(31);
+ Dcl npd Bin Fixed(31);
+ Dcl (x,y) Bin Fixed(31);
+
+ Do x=1 To 20000;
+ Call proper_divisors(x,pd,npd);
+ sumpd(x)=sum(pd,npd);
+ End;
+ p9b=time();
+ Put Edit('sum(pd) computed in',(p9b-p9a)/1000,' seconds elapsed')
+ (Skip,col(7),a,f(6,3),a);
+
+ Do x=1 To 20000;
+ Do y=x+1 To 20000;
+ If y=sumpd(x) &
+ x=sumpd(y) Then
+ Put Edit(x,y,' found after ',elapsed(),' seconds')
+ (Skip,2(f(6)),a,f(6,3),a);
+ End;
+ End;
+ Put Edit(elapsed(),' seconds total search time')(Skip,f(6,3),a);
+
+ proper_divisors: Proc(n,pd,npd);
+ Dcl (n,pd(300),npd) Bin Fixed(31);
+ Dcl (d,delta) Bin Fixed(31);
+ npd=0;
+ If n>1 Then Do;
+ If mod(n,2)=1 Then /* odd number */
+ delta=2;
+ Else /* even number */
+ delta=1;
+ Do d=1 To n/2 By delta;
+ If mod(n,d)=0 Then Do;
+ npd+=1;
+ pd(npd)=d;
+ End;
+ End;
+ End;
+ End;
+
+ sum: Proc(pd,npd) Returns(Bin Fixed(31));
+ Dcl (pd(300),npd) Bin Fixed(31);
+ Dcl sum Bin Fixed(31) Init(0);
+ Dcl i Bin Fixed(31);
+ Do i=1 To npd;
+ sum+=pd(i);
+ End;
+ Return(sum);
+ End;
+
+ elapsed: Proc Returns(Dec Fixed(6,3));
+ p9c=time();
+ Return((p9c-p9b)/1000);
+ End;
+ End;
diff --git a/Task/Amicable-pairs/Pascal/amicable-pairs-1.pascal b/Task/Amicable-pairs/Pascal/amicable-pairs-1.pascal
new file mode 100644
index 0000000000..a823986e1c
--- /dev/null
+++ b/Task/Amicable-pairs/Pascal/amicable-pairs-1.pascal
@@ -0,0 +1,232 @@
+program AmicablePairs;
+{$IFDEF FPC}
+ {$MODE DELPHI}
+ {$H+}
+{$ELSE}
+ {$APPTYPE CONSOLE}
+{$ENDIF}
+uses
+ sysutils;
+const
+ MAX = 20000;
+//MAX = 20*1000*1000;
+type
+ tValue = LongWord;
+ tpValue = ^tValue;
+ tPower = array[0..31] of tValue;
+ tIndex = record
+ idxI,
+ idxS : Uint64;
+ end;
+
+var
+ Indices : array[0..511] of tIndex;
+ //primes up to 65536 enough until 2^32
+ primes : array[0..6542] of tValue;
+
+procedure InitPrimes;
+// sieve of erathosthenes without multiples of 2
+type
+ tSieve = array[0..(65536-1) div 2] of char;
+var
+ ESieve : ^tSieve;
+ idx,i,j,p : LongINt;
+Begin
+ new(ESieve);
+ fillchar(ESieve^[0],SizeOF(tSieve),#1);
+ primes[0] := 2;
+ idx := 1;
+
+ //sieving
+ j := 1;
+ p := 2*j+1;
+ repeat
+ if Esieve^[j] = #1 then
+ begin
+ i := (2*j+2)*j;// i := (sqr(p) -1) div 2;
+ if i > High(tSieve) then
+ BREAK;
+ repeat
+ ESIeve^[i] := #0;
+ inc(i,p);
+ until i > High(tSieve);
+ end;
+ inc(j);
+ inc(p,2);
+ until j >High(tSieve);
+
+ //collecting
+ For i := 1 to High(tSieve) do
+ IF Esieve^[i] = #1 then
+ Begin
+ primes[idx] := 2*i+1;
+ inc(idx);
+ IF idx>High(primes) then
+ BREAK;
+ end;
+ dispose(Esieve);
+end;
+
+procedure Su_append(n,factor:tValue;var su:string);
+var
+ q,p : tValue;
+begin
+ p := 0;
+ repeat
+ q := n div factor;
+ IF q*factor<>n then
+ Break;
+ inc(p);
+ n := q;
+ until false;
+ IF p > 0 then
+ IF p= 1 then
+ su:= su+IntToStr(factor)+'*'
+ else
+ su:= su+IntToStr(factor)+'^'+IntToStr(p)+'*';
+end;
+
+procedure ProperDivs(n: Uint64);
+//output of prime factorization
+var
+ su : string;
+ primNo : tValue;
+ p:tValue;
+
+begin
+ str(n:8,su);
+ su:= su +' [';
+ primNo := 0;
+ p := primes[0];
+ repeat
+ Su_Append(n,p,su);
+ inc(primNo);
+ p := primes[primNo];
+ until (p=0) OR (p*p >= n);
+ p := n;
+ Su_Append(n,p,su);
+ su[length(su)] := ']';
+ writeln(su);
+end;
+
+procedure AmPairOutput(cnt:tValue);
+var
+ i : tValue;
+ r_max,r_min,r : double;
+begin
+ r_max := 1.0;
+ r_min := 16.0;
+ For i := 0 to cnt-1 do
+ with Indices[i] do
+ begin
+ r := IdxS/IDxI;
+ writeln(i+1:4,IdxI:16,IDxS:16,' ratio ',r:10:7);
+ IF r < 1 then
+ begin
+ writeln(i);
+ readln;
+ halt;
+ end;
+ if r_max < r then
+ r_max := r
+ else
+ if r_min > r then
+ r_min := r;
+ IF cnt < 20 then
+ begin
+ ProperDivs(IdxI);
+ ProperDivs(IdxS);
+ end;
+ end;
+ writeln(' min ratio ',r_min:12:10); writeln(' max ratio ',r_max:12:10);
+end;
+
+procedure SumOFProperDiv(n: tValue;var SumOfProperDivs:tValue);
+// calculated by prime factorization
+var
+ i,q, primNo, Prime,pot : tValue;
+ SumOfDivs: tValue;
+begin
+ i := N;
+ SumOfDivs := 1;
+ primNo := 0;
+ Prime := Primes[0];
+ q := i DIV Prime;
+ repeat
+ if q*Prime = i then
+ Begin
+ pot := 1;
+ repeat
+ i := q;
+ q := i div Prime;
+ Pot := Pot * Prime+1;
+ until q*Prime <> i;
+ SumOfDivs := SumOfDivs * pot;
+ end;
+ Inc(primNo);
+ Prime := Primes[primNo];
+ q := i DIV Prime;
+
+ {check if i already prime}
+ if Prime > q then
+ begin
+ prime := i;
+ q := 1;
+ end;
+ until i = 1;
+ SumOfProperDivs := SumOfDivs - N;
+end;
+
+function Check:tValue;
+const
+ //going backwards
+ DIV23 : array[0..5] of byte =
+ //== 5,4,3,2,1,0
+ (1,0,0,0,1,0);
+
+var
+ i,s,k,n : tValue;
+ idx : nativeInt;
+begin
+ n := 0;
+ idx := 3;
+ For i := 2 to MAX do
+ begin
+ //must be divisble by 2 or 3 ( n < High(tValue) < 1e14 )
+ IF DIV23[idx] = 0 then
+ begin
+ SumOFProperDiv(i,s);
+ //only 24.7...%
+ IF s>i then
+ Begin
+ SumOFProperDiv(s,k);
+ IF k = i then
+ begin
+ With indices[n] do
+ begin
+ idxI := i;
+ idxS := s;
+ end;
+ inc(n);
+ end;
+ end;
+ end;
+ dec(idx);
+ IF idx < 0 then
+ idx := high(DIV23);
+ end;
+ result := n;
+end;
+
+var
+ T2,T1: TDatetime;
+ APcnt: tValue;
+begin
+ InitPrimes;
+ T1:= time;
+ APCnt:= Check;
+ T2:= time;
+ AmPairOutput(APCnt);
+ writeln('Time to find amicable pairs ',FormatDateTime('HH:NN:SS.ZZZ' ,T2-T1));
+ {$IFNDEF UNIX} readln;{$ENDIF}
+end.
diff --git a/Task/Amicable-pairs/Pascal/amicable-pairs-2.pascal b/Task/Amicable-pairs/Pascal/amicable-pairs-2.pascal
new file mode 100644
index 0000000000..cf9651d404
--- /dev/null
+++ b/Task/Amicable-pairs/Pascal/amicable-pairs-2.pascal
@@ -0,0 +1,210 @@
+program AmicablePairs;
+{find amicable pairs in a limited region 2..MAX
+beware that >both< numbers must be smaller than MAX
+there are 455 amicable pairs up to 524*1000*1000
+correct up to
+#437 460122410
+}
+//optimized for freepascal 2.6.4 32-Bit
+{$IFDEF FPC}
+ {$MODE DELPHI}
+ {$OPTIMIZATION ON,peephole,cse,asmcse,regvar}
+ {$CODEALIGN loop=1,proc=8}
+{$ELSE}
+ {$APPTYPE CONSOLE}
+{$ENDIF}
+
+uses
+ sysutils;
+const
+//MAX = 20000;
+{$IFDEF UNIX} MAX = 524*1000*1000;{$ELSE}MAX = 499*1000*1000;{$ENDIF}
+type
+ tValue = LongWord;
+ tpValue = ^tValue;
+ tPower = array[0..31] of tValue;
+ tIndex = record
+ idxI,
+ idxS : tValue;
+ end;
+ tdpa = array[0..2] of LongWord;
+var
+ power : tPower;
+ PowerFac : tPower;
+ DivSumField : array[0..MAX] of tValue;
+ Indices : array[0..511] of tIndex;
+ DpaCnt : tdpa;
+
+procedure Init;
+var
+ i : LongInt;
+begin
+ DivSumField[0]:= 0;
+ For i := 1 to MAX do
+ DivSumField[i]:= 1;
+end;
+
+procedure ProperDivs(n: tValue);
+//Only for output, normally a factorication would do
+var
+ su,so : string;
+ i,q : tValue;
+begin
+ su:= '1';
+ so:= '';
+ i := 2;
+ while i*i <= n do
+ begin
+ q := n div i;
+ IF q*i -n = 0 then
+ begin
+ su:= su+','+IntToStr(i);
+ IF q <> i then
+ so:= ','+IntToStr(q)+so;
+ end;
+ inc(i);
+ end;
+ writeln(' [',su+so,']');
+end;
+
+procedure AmPairOutput(cnt:tValue);
+var
+ i : tValue;
+ r : double;
+begin
+ r := 1.0;
+ For i := 0 to cnt-1 do
+ with Indices[i] do
+ begin
+ writeln(i+1:4,IdxI:12,IDxS:12,' ratio ',IdxS/IDxI:10:7);
+ if r < IdxS/IDxI then
+ r := IdxS/IDxI;
+ IF cnt < 20 then
+ begin
+ ProperDivs(IdxI);
+ ProperDivs(IdxS);
+ end;
+ end;
+ writeln(' max ratio ',r:10:4);
+end;
+
+function Check:tValue;
+var
+ i,s,n : tValue;
+begin
+ fillchar(DpaCnt,SizeOf(dpaCnt),#0);
+ n := 0;
+ For i := 1 to MAX do
+ begin
+ //s = sum of proper divs (I) == sum of divs (I) - I
+ s := DivSumField[i]-i;
+ IF (s <=MAX) AND (s>i) then
+ begin
+ IF DivSumField[s]-s = i then
+ begin
+ With indices[n] do
+ begin
+ idxI := i;
+ idxS := s;
+ end;
+ inc(n);
+ end;
+ end;
+ inc(DpaCnt[Ord(s>=i)-Ord(s<=i)+1]);
+ end;
+ result := n;
+end;
+
+Procedure CalcPotfactor(prim:tValue);
+//PowerFac[k] = (prim^(k+1)-1)/(prim-1) == Sum (i=1..k) prim^i
+var
+ k: tValue;
+ Pot, //== prim^k
+ PFac : Int64;
+begin
+ Pot := prim;
+ PFac := 1;
+ For k := 0 to High(PowerFac) do
+ begin
+ PFac := PFac+Pot;
+ IF (POT > MAX) then
+ BREAK;
+ PowerFac[k] := PFac;
+ Pot := Pot*prim;
+ end;
+end;
+
+procedure InitPW(prim:tValue);
+begin
+ fillchar(power,SizeOf(power),#0);
+ CalcPotfactor(prim);
+end;
+
+function NextPotCnt(p: tValue):tValue;inline;
+//return the first power <> 0
+//power == n to base prim
+var
+ i : tValue;
+begin
+ result := 0;
+ repeat
+ i := power[result];
+ Inc(i);
+ IF i < p then
+ BREAK
+ else
+ begin
+ i := 0;
+ power[result] := 0;
+ inc(result);
+ end;
+ until false;
+ power[result] := i;
+end;
+
+function Sieve(prim: tValue):tValue;
+//simple version
+var
+ actNumber : tValue;
+begin
+ while prim <= MAX do
+ begin
+ InitPW(prim);
+ //actNumber = actual number = n*prim
+ //power == n to base prim
+ actNumber := prim;
+ while actNumber < MAX do
+ begin
+ DivSumField[actNumber] := DivSumField[actNumber] *PowerFac[NextPotCnt(prim)];
+ inc(actNumber,prim);
+ end;
+ //next prime
+ repeat
+ inc(prim);
+ until (DivSumField[prim] = 1);
+ end;
+ result := prim;
+end;
+
+var
+ T2,T1,T0: TDatetime;
+ APcnt: tValue;
+
+begin
+ T0:= time;
+ Init;
+ Sieve(2);
+ T1:= time;
+ APCnt := Check;
+ T2:= time;
+ AmPairOutput(APCnt);
+ writeln(DpaCnt[0]:10,' deficient');
+ writeln(DpaCnt[1]:10,' perfect');
+ writeln(DpaCnt[2]:10,' abundant');
+ writeln(DpaCnt[2]/DpaCnt[0]:14:10,' ratio abundant/deficient ');
+ writeln('Time to calc sum of divs ',FormatDateTime('HH:NN:SS.ZZZ' ,T1-T0));
+ writeln('Time to find amicable pairs ',FormatDateTime('HH:NN:SS.ZZZ' ,T2-T1));
+ {$IFNDEF UNIX}
+ readln;
+ {$ENDIF}
+end.
diff --git a/Task/Amicable-pairs/Perl-6/amicable-pairs.pl6 b/Task/Amicable-pairs/Perl-6/amicable-pairs.pl6
new file mode 100644
index 0000000000..c94e2e3045
--- /dev/null
+++ b/Task/Amicable-pairs/Perl-6/amicable-pairs.pl6
@@ -0,0 +1,11 @@
+sub propdivsum (\x) {
+ [+] x > 1, gather for 2 .. x.sqrt.floor -> \d {
+ my \y = x div d;
+ if y * d == x { take d; take y unless y == d }
+ }
+}
+
+for 1..20000 -> $i {
+ my $j = propdivsum($i);
+ say "$i $j" if $j > $i and $i == propdivsum($j);
+}
diff --git a/Task/Amicable-pairs/Perl/amicable-pairs.pl b/Task/Amicable-pairs/Perl/amicable-pairs.pl
new file mode 100644
index 0000000000..42d0826260
--- /dev/null
+++ b/Task/Amicable-pairs/Perl/amicable-pairs.pl
@@ -0,0 +1,5 @@
+use ntheory qw/divisor_sum/;
+for my $x (1..20000) {
+ my $y = divisor_sum($x)-$x;
+ say "$x $y" if $y > $x && $x == divisor_sum($y)-$y;
+}
diff --git a/Task/Amicable-pairs/Python/amicable-pairs.py b/Task/Amicable-pairs/Python/amicable-pairs.py
new file mode 100644
index 0000000000..ebceb1739e
--- /dev/null
+++ b/Task/Amicable-pairs/Python/amicable-pairs.py
@@ -0,0 +1,12 @@
+from proper_divisors import proper_divs
+
+def amicable(rangemax=20000):
+ n2divsum = {n: sum(proper_divs(n)) for n in range(1, rangemax + 1)}
+ for num, divsum in n2divsum.items():
+ if num < divsum and divsum <= rangemax and n2divsum[divsum] == num:
+ yield num, divsum
+
+if __name__ == '__main__':
+ for num, divsum in amicable():
+ print('Amicable pair: %i and %i With proper divisors:\n %r\n %r'
+ % (num, divsum, sorted(proper_divs(num)), sorted(proper_divs(divsum))))
diff --git a/Task/Amicable-pairs/README b/Task/Amicable-pairs/README
new file mode 100644
index 0000000000..4028296b4b
--- /dev/null
+++ b/Task/Amicable-pairs/README
@@ -0,0 +1 @@
+Data source: http://rosettacode.org/wiki/Amicable_pairs
diff --git a/Task/Amicable-pairs/REXX/amicable-pairs-1.rexx b/Task/Amicable-pairs/REXX/amicable-pairs-1.rexx
new file mode 100644
index 0000000000..072eb00b03
--- /dev/null
+++ b/Task/Amicable-pairs/REXX/amicable-pairs-1.rexx
@@ -0,0 +1,39 @@
+Call time 'R'
+Do x=1 To 20000
+ pd=proper_divisors(x)
+ sumpd.x=sum(pd)
+ End
+Say 'sum(pd) computed in' time('E') 'seconds'
+Call time 'R'
+Do x=1 To 20000
+ /* If x//1000=0 Then Say x time() */
+ Do y=x+1 To 20000
+ If y=sumpd.x &,
+ x=sumpd.y Then
+ Say x y 'found after' time('E') 'seconds'
+ End
+ End
+Say time('E') 'seconds total search time'
+Exit
+
+proper_divisors: Procedure
+Parse Arg n
+Pd=''
+If n=1 Then Return ''
+If n//2=1 Then /* odd number */
+ delta=2
+Else /* even number */
+ delta=1
+Do d=1 To n%2 By delta
+ If n//d=0 Then
+ pd=pd d
+ End
+Return space(pd)
+
+sum: Procedure
+Parse Arg list
+sum=0
+Do i=1 To words(list)
+ sum=sum+word(list,i)
+ End
+Return sum
diff --git a/Task/Amicable-pairs/REXX/amicable-pairs-2.rexx b/Task/Amicable-pairs/REXX/amicable-pairs-2.rexx
new file mode 100644
index 0000000000..a981b1f3b8
--- /dev/null
+++ b/Task/Amicable-pairs/REXX/amicable-pairs-2.rexx
@@ -0,0 +1,28 @@
+/*REXX program finds/displays all amicable pairs up to a given number.*/
+parse arg H .; if H=='' then H=20000 /*get optional arg (high limit).*/
+w=length(H) ; H.=H || . /*for columnar aligned output. */
+@.=0
+ do k=1 for H; _=Pdivs(k); #=words(_) /*gen proper divs.*/
+ do i=1 for #; @.k=@.k + word(_,i) /*gen Pdivs sums. */
+ end /*i*/ /* [↑] sum the proper divisors.*/
+ end /*k*/ /* [↑] process a range of ints.*/
+#=0 /*number of amicable pairs found.*/
+ do m=220 for H-220+1 /*start search at lowest number. */
+ do n=m+1 for H-m
+ if m==@.n then if n==@.m then do; #=#+1 /*bump the counter.*/
+ say right(m,w) ' and ' right(n,w) " are amicable pairs."
+ end
+ end /*p*/
+ end /*n*/ /*DO loop FORs: faster than TOs.*/
+say
+say # 'amicable pairs found up to' H. /*display count of amicable pairs*/
+exit /*stick a fork in it, we're done.*/
+/*──────────────────────────────────PDIVS subroutine────────────────────*/
+Pdivs: procedure; parse arg x,b; odd=x//2 /* [↑] modified for amicable*/
+a=1 /* [↓] use only EVEN|ODD integers*/
+ do j=2+odd by 1+odd while j*j n % i == 0)
+val divisorsSum = (1 to 20000).map(i => i -> properDivisors(i).sum).toMap
+val result = divisorsSum.filter(v => v._1 < v._2 && divisorsSum.get(v._2) == Some(v._1))
+
+println( result mkString ", " )
diff --git a/Task/Amicable-pairs/Tcl/amicable-pairs.tcl b/Task/Amicable-pairs/Tcl/amicable-pairs.tcl
new file mode 100644
index 0000000000..fb096e6eb4
--- /dev/null
+++ b/Task/Amicable-pairs/Tcl/amicable-pairs.tcl
@@ -0,0 +1,41 @@
+proc properDivisors {n} {
+ if {$n == 1} return
+ set divs 1
+ set sum 1
+ for {set i 2} {$i*$i <= $n} {incr i} {
+ if {!($n % $i)} {
+ lappend divs $i
+ incr sum $i
+ if {$i*$i < $n} {
+ lappend divs [set d [expr {$n / $i}]]
+ incr sum $d
+ }
+ }
+ }
+ return [list $sum $divs]
+}
+
+proc amicablePairs {limit} {
+ set result {}
+ set sums [set divs {{}}]
+ for {set n 1} {$n < $limit} {incr n} {
+ lassign [properDivisors $n] sum d
+ lappend sums $sum
+ lappend divs [lsort -integer $d]
+ }
+ for {set n 1} {$n < $limit} {incr n} {
+ set nsum [lindex $sums $n]
+ for {set m 1} {$m < $n} {incr m} {
+ if {$n==[lindex $sums $m] && $m==$nsum} {
+ lappend result $m $n [lindex $divs $m] [lindex $divs $n]
+ }
+ }
+ }
+ return $result
+}
+
+foreach {m n md nd} [amicablePairs 20000] {
+ puts "$m and $n are an amicable pair with these proper divisors"
+ puts "\t$m : $md"
+ puts "\t$n : $nd"
+}
diff --git a/Task/Amicable-pairs/VBScript/amicable-pairs.vb b/Task/Amicable-pairs/VBScript/amicable-pairs.vb
new file mode 100644
index 0000000000..679a5f41ae
--- /dev/null
+++ b/Task/Amicable-pairs/VBScript/amicable-pairs.vb
@@ -0,0 +1,36 @@
+start = Now
+Set nlookup = CreateObject("Scripting.Dictionary")
+Set uniquepair = CreateObject("Scripting.Dictionary")
+
+For i = 1 To 20000
+ sum = 0
+ For n = 1 To 20000
+ If n < i Then
+ If i Mod n = 0 Then
+ sum = sum + n
+ End If
+ End If
+ Next
+ nlookup.Add i,sum
+Next
+
+For j = 1 To 20000
+ sum = 0
+ For m = 1 To 20000
+ If m < j Then
+ If j Mod m = 0 Then
+ sum = sum + m
+ End If
+ End If
+ Next
+ If nlookup.Exists(sum) And nlookup.Item(sum) = j And j <> sum _
+ And uniquepair.Exists(sum) = False Then
+ uniquepair.Add j,sum
+ End If
+Next
+
+For Each key In uniquepair.Keys
+ WScript.Echo key & ":" & uniquepair.Item(key)
+Next
+
+WScript.Echo "Execution Time: " & DateDiff("s",Start,Now) & " seconds"
diff --git a/Task/Append-a-record-to-the-end-of-a-text-file/00DESCRIPTION b/Task/Append-a-record-to-the-end-of-a-text-file/00DESCRIPTION
new file mode 100644
index 0000000000..34ab44e60d
--- /dev/null
+++ b/Task/Append-a-record-to-the-end-of-a-text-file/00DESCRIPTION
@@ -0,0 +1,58 @@
+Many systems offer the ability to open a file for writing, such that any data written will be appended to the end of the file. Further, the file operations will always adjust the position pointer to guarantee the end of the file, even in a multitasking environment.
+
+This feature is most useful in the case of log files, where many jobs may be appending to the log file at the same time, or where care ''must'' be taken to avoid concurrently overwriting the same record from another job.
+
+'''Task:'''
+Given a two record sample for a mythical "passwd" file:
+* Write these records out in the typical system format.
+** Ideally these records will have named fields of various types.
+* Close the file, then reopen the file for append.
+** '''Append''' a new record to the file and close the file again.
+** Take appropriate care to avoid concurrently overwrites from another job.
+* Open the file and demonstrate the new record has indeed written to the end.
+
+{|class="wikitable" style="text-align: center; margin: 1em auto 1em auto;"
+|+ Source record field types and contents.
+|-
+!account||password||UID||GID||fullname,office,extension,homephone,email||directory||shell
+|-
+!string||string||int||int||struct(string,string,string,string,string)||string||string
+|-
+|jsmith||x||1001||1000||Joe Smith,Room 1007,(234)555-8917,(234)555-0077,jsmith@rosettacode.org||/home/jsmith||/bin/bash
+|-
+|jdoe||x||1002||1000||Jane Doe,Room 1004,(234)555-8914,(234)555-0044,jdoe@rosettacode.org||/home/jdoe||/bin/bash
+|}
+
+{|class="wikitable" style="text-align: center; margin: 1em auto 1em auto;"
+|+ Record to be appended.
+|-
+!account||password||UID||GID||fullname,office,extension,homephone,email||directory||shell
+|-
+!string||string||int||int||struct(string,string,string,string,string)||string||string
+|-
+|xyz||x||1003||1000||X Yz,Room 1003,(234)555-8913,(234)555-0033,xyz@rosettacode.org||/home/xyz||/bin/bash
+|}
+
+'''Resulting file format:''' should mimic Linux's /etc/passwd file format with particular attention to the "," separator used in the [[wp:Gecos field|GECOS field]]. But if the specific language has a particular or unique format of storing records in text file, then this format should be named and demonstrated with an additional example.
+
+'''Expected output:'''
+
+Appended record: xyz:x:1003:1000:X Yz,Room 1003,(234)555-8913,(234)555-0033,xyz@rosettacode.org:/home/xyz:/bin/bash
+
+
+'''Finally:''' Provide a summary of the language's "append record" capabilities in a table. eg.
+{|class="wikitable" style="text-align: center; margin: 1em auto 1em auto;"
+|+ Append Capabilities.
+|-
+!colspan=2| Data Representation
+!rowspan=2| IO
Library
+!rowspan=2| Append
Possible
+!rowspan=2| Automatic
Append
+!rowspan=2| Multi-tasking
Safe
+|-
+! In core || On disk
+|-
+| C struct || CSV text file || glibc/stdio || ☑ || ☑ || ☑ (Not all, eg NFS)
+|}
+
+Alternatively: If the language's appends can not guarantee its writes will '''always''' append, then note this restriction in the table. If possible, provide an actual code example (possibly using file/record locking) to guarantee correct concurrent appends.
diff --git a/Task/File-IO/00META.yaml b/Task/Append-a-record-to-the-end-of-a-text-file/00META.yaml
similarity index 100%
rename from Task/File-IO/00META.yaml
rename to Task/Append-a-record-to-the-end-of-a-text-file/00META.yaml
diff --git a/Task/Append-a-record-to-the-end-of-a-text-file/C/append-a-record-to-the-end-of-a-text-file.c b/Task/Append-a-record-to-the-end-of-a-text-file/C/append-a-record-to-the-end-of-a-text-file.c
new file mode 100644
index 0000000000..267b0d739b
--- /dev/null
+++ b/Task/Append-a-record-to-the-end-of-a-text-file/C/append-a-record-to-the-end-of-a-text-file.c
@@ -0,0 +1,53 @@
+#include
+#include
+/* note that UID & GID are of type "int" */
+typedef const char *STRING;
+typedef struct{STRING fullname, office, extension, homephone, email; } gecos_t;
+typedef struct{STRING account, password; int uid, gid; gecos_t gecos; STRING directory, shell; } passwd_t;
+
+#define GECOS_FMT "%s,%s,%s,%s,%s"
+#define PASSWD_FMT "%s:%s:%d:%d:"GECOS_FMT":%s:%s"
+
+passwd_t passwd_list[]={
+ {"jsmith", "x", 1001, 1000, /* UID and GID are type int */
+ {"Joe Smith", "Room 1007", "(234)555-8917", "(234)555-0077", "jsmith@rosettacode.org"},
+ "/home/jsmith", "/bin/bash"},
+ {"jdoe", "x", 1002, 1000,
+ {"Jane Doe", "Room 1004", "(234)555-8914", "(234)555-0044", "jdoe@rosettacode.org"},
+ "/home/jdoe", "/bin/bash"}
+};
+
+main(){
+/****************************
+* Create a passwd text file *
+****************************/
+ FILE *passwd_text=fopen("passwd.txt", "w");
+ int rec_num;
+ for(rec_num=0; rec_num < sizeof passwd_list/sizeof(passwd_t); rec_num++)
+ fprintf(passwd_text, PASSWD_FMT"\n", passwd_list[rec_num]);
+ fclose(passwd_text);
+
+/********************************
+* Load text ready for appending *
+********************************/
+ passwd_text=fopen("passwd.txt", "a+");
+ char passwd_buf[BUFSIZ]; /* warning: fixed length */
+ passwd_t new_rec =
+ {"xyz", "x", 1003, 1000, /* UID and GID are type int */
+ {"X Yz", "Room 1003", "(234)555-8913", "(234)555-0033", "xyz@rosettacode.org"},
+ "/home/xyz", "/bin/bash"};
+ sprintf(passwd_buf, PASSWD_FMT"\n", new_rec);
+/* An atomic append without a file lock,
+ Note: wont work on some file systems, eg NFS */
+ write(fileno(passwd_text), passwd_buf, strlen(passwd_buf));
+ close(passwd_text);
+
+/***********************************************
+* Finally reopen and check record was appended *
+***********************************************/
+ passwd_text=fopen("passwd.txt", "r");
+ while(!feof(passwd_text))
+ fscanf(passwd_text, "%[^\n]\n", passwd_buf, "\n");
+ if(strstr(passwd_buf, "xyz"))
+ printf("Appended record: %s\n", passwd_buf);
+}
diff --git a/Task/Append-a-record-to-the-end-of-a-text-file/Go/append-a-record-to-the-end-of-a-text-file.go b/Task/Append-a-record-to-the-end-of-a-text-file/Go/append-a-record-to-the-end-of-a-text-file.go
new file mode 100644
index 0000000000..985ce3c3f0
--- /dev/null
+++ b/Task/Append-a-record-to-the-end-of-a-text-file/Go/append-a-record-to-the-end-of-a-text-file.go
@@ -0,0 +1,101 @@
+package main
+
+import (
+ "bytes"
+ "fmt"
+ "io"
+ "io/ioutil"
+ "os"
+)
+
+type pw struct {
+ account, password string
+ uid, gid uint
+ gecos
+ directory, shell string
+}
+
+type gecos struct {
+ fullname, office, extension, homephone, email string
+}
+
+func (p *pw) encode(w io.Writer) (int, error) {
+ return fmt.Fprintf(w, "%s:%s:%d:%d:%s,%s,%s,%s,%s:%s:%s\n",
+ p.account, p.password, p.uid, p.gid,
+ p.fullname, p.office, p.extension, p.homephone, p.email,
+ p.directory, p.shell)
+}
+
+// data cut and pasted from task description
+var p2 = []pw{
+ {"jsmith", "x", 1001, 1000, gecos{"Joe Smith", "Room 1007",
+ "(234)555-8917", "(234)555-0077", "jsmith@rosettacode.org"},
+ "/home/jsmith", "/bin/bash"},
+ {"jdoe", "x", 1002, 1000, gecos{"Jane Doe", "Room 1004",
+ "(234)555-8914", "(234)555-0044", "jdoe@rosettacode.org"},
+ "/home/jsmith", "/bin/bash"},
+}
+
+var pa = pw{"xyz", "x", 1003, 1000, gecos{"X Yz", "Room 1003",
+ "(234)555-8913", "(234)555-0033", "xyz@rosettacode.org"},
+ "/home/xyz", "/bin/bash"}
+
+var expected = "xyz:x:1003:1000:X Yz,Room 1003,(234)555-8913," +
+ "(234)555-0033,xyz@rosettacode.org:/home/xyz:/bin/bash"
+
+const pfn = "mythical"
+
+func main() {
+ writeTwo()
+ appendOneMore()
+ checkResult()
+}
+
+func writeTwo() {
+ // overwrites any existing file
+ f, err := os.Create(pfn)
+ if err != nil {
+ fmt.Println(err)
+ return
+ }
+ defer func() {
+ if cErr := f.Close(); cErr != nil && err == nil {
+ fmt.Println(cErr)
+ }
+ }()
+ for _, p := range p2 {
+ if _, err = p.encode(f); err != nil {
+ fmt.Println(err)
+ return
+ }
+ }
+}
+
+func appendOneMore() {
+ // file must already exist
+ f, err := os.OpenFile(pfn, os.O_RDWR|os.O_APPEND, 0)
+ if err != nil {
+ fmt.Println(err)
+ return
+ }
+ if _, err := pa.encode(f); err != nil {
+ fmt.Println(err)
+ }
+ if cErr := f.Close(); cErr != nil && err == nil {
+ fmt.Println(cErr)
+ }
+}
+
+func checkResult() {
+ // reads entire file then closes it
+ b, err := ioutil.ReadFile(pfn)
+ if err != nil {
+ fmt.Println(err)
+ return
+ }
+ if string(bytes.Split(b, []byte{'\n'})[2]) == expected {
+ fmt.Println("append okay")
+ } else {
+ fmt.Println("it didn't work")
+ }
+}
diff --git a/Task/Append-a-record-to-the-end-of-a-text-file/Groovy/append-a-record-to-the-end-of-a-text-file-1.groovy b/Task/Append-a-record-to-the-end-of-a-text-file/Groovy/append-a-record-to-the-end-of-a-text-file-1.groovy
new file mode 100644
index 0000000000..b58b5c9ce9
--- /dev/null
+++ b/Task/Append-a-record-to-the-end-of-a-text-file/Groovy/append-a-record-to-the-end-of-a-text-file-1.groovy
@@ -0,0 +1,68 @@
+class PasswdRecord {
+ String account, password, directory, shell
+ int uid, gid
+ SourceRecord source
+
+ private static final fs = ':'
+ private static final fieldNames = ['account', 'password', 'uid', 'gid', 'source', 'directory', 'shell']
+ private static final stringFields = ['account', 'password', 'directory', 'shell']
+ private static final intFields = ['uid', 'gid']
+
+ PasswdRecord(String line = null) {
+ if (!line) return
+ def fields = line.split(fs)
+ if (fields.size() != fieldNames.size()) {
+ throw new IllegalArgumentException(
+ "Passwd record must have exactly ${fieldNames.size()} '${fs}'-delimited fields")
+ }
+ (0..
+ switch (fieldNames[i]) {
+ case stringFields: this[fieldNames[i]] = fields[i]; break
+ case intFields: this[fieldNames[i]] = fields[i] as Integer; break
+ default /* source */: this.source = new SourceRecord(fields[i]); break
+ }
+ }
+ }
+
+ @Override String toString() { fieldNames.collect { "${this[it]}${fs}" }.sum()[0..-2] }
+}
+
+class SourceRecord {
+ String fullname, office, extension, homephone, email
+
+ private static final fs = ','
+ private static final fieldNames =
+ ['fullname', 'office', 'extension', 'homephone', 'email']
+
+ SourceRecord(String line = null) {
+ if (!line) return
+ def fields = line.split(fs)
+ if (fields.size() != fieldNames.size()) {
+ throw new IllegalArgumentException(
+ "Source record must have exactly ${fieldNames.size()} '${fs}'-delimited fields")
+ }
+ (0..
+ this[fieldNames[i]] = fields[i]
+ }
+ }
+
+ @Override String toString() { fieldNames.collect { "${this[it]}${fs}" }.sum()[0..-2] }
+}
+
+def appendNewPasswdRecord = {
+ PasswdRecord pwr = new PasswdRecord().with { p ->
+ (account, password, uid, gid) = ['xyz', 'x', 1003, 1000]
+ source = new SourceRecord().with { s ->
+ (fullname, office, extension, homephone, email) =
+ ['X Yz', 'Room 1003', '(234)555-8913', '(234)555-0033', 'xyz@rosettacode.org']
+ s
+ }
+ (directory, shell) = ['/home/xyz', '/bin/bash']
+ p
+ };
+
+ new File('passwd.txt').withWriterAppend { w ->
+ w.append(pwr as String)
+ w.append('\r\n')
+ }
+}
diff --git a/Task/Append-a-record-to-the-end-of-a-text-file/Groovy/append-a-record-to-the-end-of-a-text-file-2.groovy b/Task/Append-a-record-to-the-end-of-a-text-file/Groovy/append-a-record-to-the-end-of-a-text-file-2.groovy
new file mode 100644
index 0000000000..e111381e2e
--- /dev/null
+++ b/Task/Append-a-record-to-the-end-of-a-text-file/Groovy/append-a-record-to-the-end-of-a-text-file-2.groovy
@@ -0,0 +1,21 @@
+def checkPasswdFile = { it ->
+ File passwd = new File('passwd.txt')
+ assert passwd.exists()
+
+ passwd.eachLine { line ->
+ def pw = new PasswdRecord(line)
+ assert pw && pw instanceof PasswdRecord
+ assert pw.source && pw.source instanceof SourceRecord
+ println pw
+ }
+
+ println()
+}
+
+println "File contents before new record added"
+checkPasswdFile()
+
+appendNewPasswdRecord()
+
+println "File contents after new record added"
+checkPasswdFile()
diff --git a/Task/Append-a-record-to-the-end-of-a-text-file/Haskell/append-a-record-to-the-end-of-a-text-file-1.hs b/Task/Append-a-record-to-the-end-of-a-text-file/Haskell/append-a-record-to-the-end-of-a-text-file-1.hs
new file mode 100644
index 0000000000..0fecd80ad4
--- /dev/null
+++ b/Task/Append-a-record-to-the-end-of-a-text-file/Haskell/append-a-record-to-the-end-of-a-text-file-1.hs
@@ -0,0 +1,29 @@
+{-# LANGUAGE RecordWildCards #-}
+
+import System.IO
+import Data.List (intercalate)
+
+data Gecos = Gecos { fullname :: String
+ , office :: String
+ , extension :: String
+ , homephone :: String
+ , email :: String
+ }
+
+data Record = Record { account :: String
+ , password :: String
+ , uid :: Int
+ , gid :: Int
+ , directory :: String
+ , shell :: String
+ , gecos :: Gecos
+ }
+
+instance Show Gecos where
+ show (Gecos {..}) = intercalate "," [fullname, office, extension, homephone, email]
+
+instance Show Record where
+ show (Record {..}) = intercalate ":" [account, password, show uid, show gid, show gecos, directory, shell]
+
+addRecord :: String -> Record -> IO ()
+addRecord path r = appendFile path (show r)
diff --git a/Task/Append-a-record-to-the-end-of-a-text-file/Haskell/append-a-record-to-the-end-of-a-text-file-2.hs b/Task/Append-a-record-to-the-end-of-a-text-file/Haskell/append-a-record-to-the-end-of-a-text-file-2.hs
new file mode 100644
index 0000000000..0aa9f55581
--- /dev/null
+++ b/Task/Append-a-record-to-the-end-of-a-text-file/Haskell/append-a-record-to-the-end-of-a-text-file-2.hs
@@ -0,0 +1,14 @@
+t1 = Record "jsmith" "x" 1001 1000 "/home/jsmith" "/bin/bash"
+ (Gecos "Joe Smith" "Room 1007" "(234)555-8917" "(234)555-0077" "jsmith@rosettacode.org")
+
+t2 = Record "jdoe" "x" 1002 1000 "/home/jdoe" "/bin/bash"
+ (Gecos "Jane Doe" "Room 1004" "(234)555-8914" "(234)555-0044" "jdoe@rosettacode.org")
+
+t3 = Record "xyz" "x" 1003 1000 "/home/xyz" "/bin/bash"
+ (Gecos "X Yz" "Room 1003" "(234)555-8913" "(234)555-0033" "xyz@rosettacode.org")
+
+main = do
+ let path = "test.txt"
+ forM [t1,t2,t3] (addRecord path)
+ lastLine <- fmap (last . lines) (readFile path)
+ putStrLn lastLine
diff --git a/Task/Append-a-record-to-the-end-of-a-text-file/Icon/append-a-record-to-the-end-of-a-text-file.icon b/Task/Append-a-record-to-the-end-of-a-text-file/Icon/append-a-record-to-the-end-of-a-text-file.icon
new file mode 100644
index 0000000000..1939cdd27f
--- /dev/null
+++ b/Task/Append-a-record-to-the-end-of-a-text-file/Icon/append-a-record-to-the-end-of-a-text-file.icon
@@ -0,0 +1,13 @@
+procedure main()
+ orig := [
+ "jsmith:x:1001:1000:Joe Smith,Room 1007,(234)555-8917,(234)555-0077,jsmith@rosettacode.org:/home/jsmith:/bin/bash",
+ "jdoe:x:1002:1000:Jane Doe,Room 1004,(234)555-8914,(234)555-0044,jdoe@rosettacode.org:/home/jsmith:/bin/bash"
+ ]
+ new := [
+ "xyz:x:1003:1000:X:Yz,Room 1003,(234)555-8913,(234)555-0033,xyz@rosettacode.org:/home/xyz:/bin/bash"
+ ]
+ fName := !open("mktemp","rp")
+ every (f := open(fName,"w")) | write(f,!orig) | close(f)
+ every (f := open(fName,"a")) | write(f,!new) | close(f)
+ every (f := open(fName,"r")) | write(!f) | close(f)
+end
diff --git a/Task/Append-a-record-to-the-end-of-a-text-file/J/append-a-record-to-the-end-of-a-text-file.j b/Task/Append-a-record-to-the-end-of-a-text-file/J/append-a-record-to-the-end-of-a-text-file.j
new file mode 100644
index 0000000000..3f59c57a6f
--- /dev/null
+++ b/Task/Append-a-record-to-the-end-of-a-text-file/J/append-a-record-to-the-end-of-a-text-file.j
@@ -0,0 +1,43 @@
+require'strings ~system/packages/misc/xenos.ijs'
+record=: [:|: <@deb;._1@(':',]);._2@do bind '0 :0'
+
+passfields=: <;._1':username:password:gid:uid:gecos:home:shell'
+
+passrec=: LF,~ [: }.@;@ , ':';"0 (passfields i. {. ) { a:,~ {:
+
+R1=: passrec record''
+ username: jsmith
+ password: x
+ gid: 1001
+ uid: 1000
+ gecos: Joe Smith,Room 1007,(234)555-8917,(234)555-0077,jsmith@rosettacode.org
+ home: /home/jsmith
+ shell: /bin/bash
+)
+
+R2=: passrec record''
+ username: jdoe
+ password: x
+ gid: 1002
+ uid: 1000
+ gecos: Jane Doe,Room 1004,(234)555-8914,(234)555-0044,jdoe@rosettacode.org
+ home: /home/jdoe
+ shell: /bin/bash
+)
+
+R3=: passrec record''
+ username: xyz
+ password: x
+ gid: 1003
+ uid: 1000
+ gecos: X Yz,Room 1003,(234)555-8913,(234)555-0033,xyz@rosettacode.org
+ home: /home/xyz
+ shell: /bin/bash
+)
+
+passwd=: <'/tmp/passwd.txt' NB. file needs to be writable on implementation machine
+
+(R1,R2) fwrite passwd
+R3 fappend passwd
+
+assert 1 e. R3 E. fread passwd
diff --git a/Task/Append-a-record-to-the-end-of-a-text-file/Java/append-a-record-to-the-end-of-a-text-file.java b/Task/Append-a-record-to-the-end-of-a-text-file/Java/append-a-record-to-the-end-of-a-text-file.java
new file mode 100644
index 0000000000..93a68243a4
--- /dev/null
+++ b/Task/Append-a-record-to-the-end-of-a-text-file/Java/append-a-record-to-the-end-of-a-text-file.java
@@ -0,0 +1,119 @@
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
+
+public class RecordAppender {
+
+ public static class Record {
+
+ String account, password;
+ Integer uid, gid;
+ String[] gecos;
+ String directory, shell;
+
+ public Record(String account, String password, int uid, int gid,
+ String gecos[], String directory, String shell) {
+ this.account = account;
+ this.password = password;
+ this.uid = uid;
+ this.gid = gid;
+ this.gecos = gecos;
+ this.directory = directory;
+ this.shell = shell;
+ }
+
+ public Record(String line) {
+ String[] token = line.trim().split(":");
+ if ((token == null) || (token.length < 7)) {
+ throw new IllegalArgumentException(line);
+ }
+ this.account = token[0].trim();
+ this.password = token[1].trim();
+ this.uid = Integer.parseInt(token[2].trim());
+ this.gid = Integer.parseInt(token[3].trim());
+ this.gecos = token[4].trim().split(",");
+ this.directory = token[5].trim();
+ this.shell = token[6].trim();
+ }
+
+ public String asLine() {
+ StringBuilder sb = new StringBuilder();
+ sb.append(account + ":" + password + ":");
+ sb.append(uid + ":" + gid + ":");
+ for (int i = 0; i < gecos.length; i++) {
+ sb.append((i == 0 ? "" : ",") + gecos[i].trim());
+ }
+ sb.append(":" + directory + ":" + shell + "\n");
+ return sb.toString();
+ }
+ }
+
+ public static void main(String[] args) {
+ File file = null;
+ FileWriter writer = null;
+ BufferedReader br = null;
+ String line = null;
+ Record record = null;
+ try {
+ file = File.createTempFile("_rosetta", ".passwd");
+
+ writer = new FileWriter(file);
+
+ writer.write(new Record("jsmith", "x", 1001, 1000, new String[] {
+ "Joe Smith", "Room 1007", "(234)555-8917", "(234)555-0077",
+ "jsmith@rosettacode.org" }, "/home/jsmith", "/bin/bash")
+ .asLine());
+
+ writer.write(new Record("jdoe", "x", 1002, 1000, new String[] {
+ "Jane Doe", "Room 1004", "(234)555-8914", "(234)555-0044",
+ "jdoe@rosettacode.org" }, "/home/jdoe", "/bin/bash")
+ .asLine());
+
+ writer.close();
+
+ // Setting the 'append'-Parameter to true writes data
+ // to the end of the file rather than the beginning
+
+ writer = new FileWriter(file, true);
+
+ writer.write(new Record("xyz", "x", 1003, 1000, new String[] {
+ "X Yz", "Room 1003", "(234)555-8913", "(234)555-0033",
+ "xyz@rosettacode.org" }, "/home/xyz", "/bin/bash")
+ .asLine());
+
+ writer.close();
+
+ br = new BufferedReader(new FileReader(file));
+ while ((line = br.readLine()) != null) {
+ record = new Record(line);
+ if (record.account.equals("xyz")) {
+ System.out.println("Appended Record: " + record.asLine());
+ }
+ }
+
+ br.close();
+
+ } catch (IOException e) {
+ System.err.println("Running Example failed: " + e.getMessage());
+ } finally {
+ try {
+ if (br != null) {
+ br.close();
+ }
+ } catch (IOException ignored) {
+ }
+ try {
+ if (writer != null) {
+ writer.close();
+ }
+ } catch (IOException ignored) {
+ }
+ if (file != null) {
+ file.delete();
+ }
+ }
+ }
+
+}
diff --git a/Task/Append-a-record-to-the-end-of-a-text-file/MATLAB/append-a-record-to-the-end-of-a-text-file.m b/Task/Append-a-record-to-the-end-of-a-text-file/MATLAB/append-a-record-to-the-end-of-a-text-file.m
new file mode 100644
index 0000000000..d3d81797cf
--- /dev/null
+++ b/Task/Append-a-record-to-the-end-of-a-text-file/MATLAB/append-a-record-to-the-end-of-a-text-file.m
@@ -0,0 +1,58 @@
+ DS{1}.account='jsmith';
+ DS{1}.password='x';
+ DS{1}.UID=1001;
+ DS{1}.GID=1000;
+ DS{1}.fullname='Joe Smith';
+ DS{1}.office='Room 1007';
+ DS{1}.extension='(234)555-8917';
+ DS{1}.homephone='(234)555-0077';
+ DS{1}.email='jsmith@rosettacode.org';
+ DS{1}.directory='/home/jsmith';
+ DS{1}.shell='/bin/bash';
+
+ DS{2}.account='jdoe';
+ DS{2}.password='x';
+ DS{2}.UID=1002;
+ DS{2}.GID=1000;
+ DS{2}.fullname='Jane Doe';
+ DS{2}.office='Room 1004';
+ DS{2}.extension='(234)555-8914';
+ DS{2}.homephone='(234)555-0044';
+ DS{2}.email='jdoe@rosettacode.org';
+ DS{2}.directory='/home/jdoe';
+ DS{2}.shell='/bin/bash';
+
+ function WriteRecord(fid, rec)
+ fprintf(fid,"%s:%s:%i:%i:%s,%s,%s,%s,%s:%s%s\n", rec.account, rec.password, rec.UID, rec.GID, rec.fullname, rec.office, rec.extension, rec.homephone, rec.email, rec.directory, rec.shell);
+ return;
+ end
+
+ %% write
+ fid = fopen('passwd.txt','w');
+ WriteRecord(fid,DS{1});
+ WriteRecord(fid,DS{2});
+ fclose(fid);
+
+ new.account='xyz';
+ new.password='x';
+ new.UID=1003;
+ new.GID=1000;
+ new.fullname='X Yz';
+ new.office='Room 1003';
+ new.extension='(234)555-8913';
+ new.homephone='(234)555-0033';
+ new.email='xyz@rosettacode.org';
+ new.directory='/home/xyz';
+ new.shell='/bin/bash';
+
+ %% append
+ fid = fopen('passwd.txt','a+');
+ WriteRecord(fid,new);
+ fclose(fid);
+
+ % read password file
+ fid = fopen('passwd.txt','r');
+ while ~feof(fid)
+ printf('%s\n',fgetl(fid));
+ end;
+ fclose(fid);
diff --git a/Task/Append-a-record-to-the-end-of-a-text-file/Perl/append-a-record-to-the-end-of-a-text-file.pl b/Task/Append-a-record-to-the-end-of-a-text-file/Perl/append-a-record-to-the-end-of-a-text-file.pl
new file mode 100644
index 0000000000..d802cd481f
--- /dev/null
+++ b/Task/Append-a-record-to-the-end-of-a-text-file/Perl/append-a-record-to-the-end-of-a-text-file.pl
@@ -0,0 +1,106 @@
+use strict;
+use warnings;
+
+use Fcntl qw( :flock SEEK_END );
+
+use constant {
+ RECORD_FIELDS => [qw( account password UID GID GECOS directory shell )],
+ GECOS_FIELDS => [qw( fullname office extension homephone email )],
+ RECORD_SEP => ':',
+ GECOS_SEP => ',',
+ PASSWD_FILE => 'passwd.txt',
+};
+
+# here's our three records
+my $records_to_write = [
+ {
+ account => 'jsmith',
+ password => 'x',
+ UID => 1001,
+ GID => 1000,
+ GECOS => {
+ fullname => 'John Smith',
+ office => 'Room 1007',
+ extension => '(234)555-8917',
+ homephone => '(234)555-0077',
+ email => 'jsmith@rosettacode.org',
+ },
+ directory => '/home/jsmith',
+ shell => '/bin/bash',
+ },
+ {
+ account => 'jdoe',
+ password => 'x',
+ UID => 1002,
+ GID => 1000,
+ GECOS => {
+ fullname => 'Jane Doe',
+ office => 'Room 1004',
+ extension => '(234)555-8914',
+ homephone => '(234)555-0044',
+ email => 'jdoe@rosettacode.org',
+ },
+ directory => '/home/jdoe',
+ shell => '/bin/bash',
+ },
+];
+my $record_to_append = {
+ account => 'xyz',
+ password => 'x',
+ UID => 1003,
+ GID => 1000,
+ GECOS => {
+ fullname => 'X Yz',
+ office => 'Room 1003',
+ extension => '(234)555-8913',
+ homephone => '(234)555-0033',
+ email => 'xyz@rosettacode.org',
+ },
+ directory => '/home/xyz',
+ shell => '/bin/bash',
+};
+
+sub record_to_string {
+ my $rec = shift;
+ my $sep = shift // RECORD_SEP;
+ my $fields = shift // RECORD_FIELDS;
+ my @ary;
+ for my $field (@$fields) {
+ my $r = $rec->{$field};
+ die "Field '$field' not found" unless defined $r; # simple sanity check
+ push @ary, ( $field eq 'GECOS' ? record_to_string( $r, GECOS_SEP, GECOS_FIELDS ) : $r );
+ }
+ return join $sep, @ary;
+}
+
+sub write_records_to_file {
+ my $records = shift;
+ my $filename = shift // PASSWD_FILE;
+ open my $fh, '>>', $filename or die "Can't open $filename: $!";
+ flock( $fh, LOCK_EX ) or die "Can't lock $filename: $!";
+ # if someone appended while we were waiting...
+ seek( $fh, 0, SEEK_END ) or die "Can't seek $filename: $!" ;
+ print $fh record_to_string($_), "\n" for @$records;
+ flock( $fh, LOCK_UN ) or die "Can't unlock $filename: $!";
+ # note: the file is closed automatically when function returns (and refcount of $fh becomes 0)
+}
+
+# write two records to file
+write_records_to_file( $records_to_write );
+
+# append one more record to file
+write_records_to_file( [$record_to_append] );
+
+# test
+{
+ use Test::Simple tests => 1;
+
+ open my $fh, '<', PASSWD_FILE or die "Can't open ", PASSWD_FILE, ": $!";
+ my @lines = <$fh>;
+ chomp @lines;
+ ok(
+ $lines[-1] eq
+'xyz:x:1003:1000:X Yz,Room 1003,(234)555-8913,(234)555-0033,xyz@rosettacode.org:/home/xyz:/bin/bash',
+ "Appended record: $lines[-1]"
+ );
+}
diff --git a/Task/Append-a-record-to-the-end-of-a-text-file/PicoLisp/append-a-record-to-the-end-of-a-text-file.l b/Task/Append-a-record-to-the-end-of-a-text-file/PicoLisp/append-a-record-to-the-end-of-a-text-file.l
new file mode 100644
index 0000000000..53d33b5a20
--- /dev/null
+++ b/Task/Append-a-record-to-the-end-of-a-text-file/PicoLisp/append-a-record-to-the-end-of-a-text-file.l
@@ -0,0 +1,27 @@
+(setq L '((jsmith x 1001 1000
+ "Joe Smith,Room 1007,(234)555-8917,\
+ (234)555-0077,jsmith@rosettacode.org"
+ /home/jsmith /bin/bash )
+ (jdoe x 1002 1000
+ "Jane Doe,Room 1004,(234)555-8914,\
+ (234)555-0044,jdoe@rosettacode.org"
+ /home/jsmith /bin/bash ) ) )
+
+(setq A '(xyz x 1003 1000
+ "X Yz,Room 1003,(234)555-8913,\
+ (234)555-0033,xyz@rosettacode.org"
+ /home/xyz /bin/bash ) )
+
+(out "mythical"
+ (for I L
+ (prinl (glue ': I)) ) )
+(out "+mythical"
+ (prinl (glue ': A)) )
+(in "mythical"
+ (do 2 (line))
+ (println
+ (and
+ (= "xyz" (pack (till ':)))
+ (= 3 (lines "mythical") ) ) ) )
+
+(bye)
diff --git a/Task/Append-a-record-to-the-end-of-a-text-file/Python/append-a-record-to-the-end-of-a-text-file.py b/Task/Append-a-record-to-the-end-of-a-text-file/Python/append-a-record-to-the-end-of-a-text-file.py
new file mode 100644
index 0000000000..e21feece57
--- /dev/null
+++ b/Task/Append-a-record-to-the-end-of-a-text-file/Python/append-a-record-to-the-end-of-a-text-file.py
@@ -0,0 +1,48 @@
+#############################
+# Create a passwd text file
+#############################
+# note that UID & gid are of type "text"
+passwd_list=[
+ dict(account='jsmith', password='x', UID=1001, GID=1000, # UID and GID are type int
+ GECOS=dict(fullname='Joe Smith', office='Room 1007', extension='(234)555-8917',
+ homephone='(234)555-0077', email='jsmith@rosettacode.org'),
+ directory='/home/jsmith', shell='/bin/bash'),
+ dict(account='jdoe', password='x', UID=1002, GID=1000,
+ GECOS=dict(fullname='Jane Doe', office='Room 1004', extension='(234)555-8914',
+ homephone='(234)555-0044', email='jdoe@rosettacode.org'),
+ directory='/home/jdoe', shell='/bin/bash')
+]
+
+passwd_fields="account password UID GID GECOS directory shell".split()
+GECOS_fields="fullname office extension homephone email".split()
+
+def passwd_text_repr(passwd_rec):
+# convert individual fields to string type
+ passwd_rec["GECOS"]=",".join([ passwd_rec["GECOS"][field] for field in GECOS_fields])
+ for field in passwd_rec: # convert "int" fields
+ if not isinstance(passwd_rec[field], str):
+ passwd_rec[field]=`passwd_rec[field]`
+ return ":".join([ passwd_rec[field] for field in passwd_fields ])
+
+passwd_text=open("passwd.txt","w")
+for passwd_rec in passwd_list:
+ print >> passwd_text,passwd_text_repr(passwd_rec)
+passwd_text.close()
+
+#################################
+# Load text ready for appending
+#################################
+passwd_text=open("passwd.txt","a+")
+new_rec=dict(account='xyz', password='x', UID=1003, GID=1000,
+ GECOS=dict(fullname='X Yz', office='Room 1003', extension='(234)555-8913',
+ homephone='(234)555-0033', email='xyz@rosettacode.org'),
+ directory='/home/xyz', shell='/bin/bash')
+print >> passwd_text, passwd_text_repr(new_rec)
+passwd_text.close()
+
+##############################################
+# Finally reopen and check record was appended
+##############################################
+passwd_list=list(open("passwd.txt","r"))
+if "xyz" in passwd_list[-1]:
+ print "Appended record:",passwd_list[-1][:-1]
diff --git a/Task/Append-a-record-to-the-end-of-a-text-file/README b/Task/Append-a-record-to-the-end-of-a-text-file/README
new file mode 100644
index 0000000000..03ec58d52e
--- /dev/null
+++ b/Task/Append-a-record-to-the-end-of-a-text-file/README
@@ -0,0 +1 @@
+Data source: http://rosettacode.org/wiki/Append_a_record_to_the_end_of_a_text_file
diff --git a/Task/Append-a-record-to-the-end-of-a-text-file/REXX/append-a-record-to-the-end-of-a-text-file.rexx b/Task/Append-a-record-to-the-end-of-a-text-file/REXX/append-a-record-to-the-end-of-a-text-file.rexx
new file mode 100644
index 0000000000..7dfbc98a4e
--- /dev/null
+++ b/Task/Append-a-record-to-the-end-of-a-text-file/REXX/append-a-record-to-the-end-of-a-text-file.rexx
@@ -0,0 +1,48 @@
+/*REXX pgm: writes two records, close file, appends another record. */
+signal on syntax; signal on novalue /*handle REXX program errors. */
+tFID='PASSWD.TXT' /*define the name of the out file*/
+call lineout tFID /*close the file, just in case; */
+ /*could be open from calling pgm.*/
+call writeRec tFID,, /*append 1st record to the file. */
+ 'jsmith',"x", 1001, 1000, 'Joe Smith,Room 1007,(234)555-8917,(234)555-0077,jsmith@rosettacode.org', "/home/jsmith", '/bin/bash'
+
+call writeRec tFID,, /*append 2nd record to the file. */
+ 'jdoe', "x", 1002, 1000, 'Jane Doe,Room 1004,(234)555-8914,(234)555-0044,jdoe@rosettacode.org', "/home/jsmith", '/bin/bash'
+
+call lineout fid /*close the file. */
+
+call writeRec tFID,, /*append 3rd record to the file. */
+ 'xyz', "x", 1003, 1000, 'X Yz,Room 1003,(234)555-8913,(234)555-0033,xyz@rosettacode.org', "/home/xyz", '/bin/bash'
+/*─account─pw────uid───gid──────────────fullname,office,extension,homephone,Email────────────────────────directory───────shell──*/
+
+call lineout fid /*safe programming: close file. */
+exit /*stick a fork in it, we're done.*/
+/*──────────────────────────────────WRITEREC subroutine─────────────────*/
+writeRec: parse arg fid,_ /*get the fileID, and the 1st arg*/
+sep=':' /*field delimiter used in file. */
+ /*Note: SEP field should be ··· */
+ /*··· unique and can be any size.*/
+ do i=3 to arg() /*get each argument and append it*/
+ _=_ ||sep|| arg(i) /*to the prev. arg, with a : sep.*/
+ end /*i*/
+
+ do tries=0 for 11 /*keep trying for 66 seconds. */
+ r=lineout(fid,_) /*write (append) the new record. */
+ if r==0 then return /*Zero? Then record was written.*/
+ call sleep tries /*Error: so try again after delay*/
+ end /*tries*/ /*Note: not all REXXes have SLEEP*/
+
+ /*possibly: no write access, */
+ /* proper authority, */
+ /* permission, etc. */
+call err r 'record's(r) "not written to file" fid
+exit 13
+/*───────────────────────────────error handling subroutines and others.─*/
+err: say; say; say center(' error! ',40,"*"); say
+ do j=1 for arg(); say arg(j); say; end; say; exit 13
+
+novalue: syntax: call err 'REXX program' condition('C') "error",,
+ condition('D'),'REXX source statement (line' sigl"):",,
+ sourceline(sigl)
+
+s: if arg(1)==1 then return arg(3);return word(arg(2) 's',1)
diff --git a/Task/Append-a-record-to-the-end-of-a-text-file/RapidQ/append-a-record-to-the-end-of-a-text-file-1.rapidq b/Task/Append-a-record-to-the-end-of-a-text-file/RapidQ/append-a-record-to-the-end-of-a-text-file-1.rapidq
new file mode 100644
index 0000000000..7306007084
--- /dev/null
+++ b/Task/Append-a-record-to-the-end-of-a-text-file/RapidQ/append-a-record-to-the-end-of-a-text-file-1.rapidq
@@ -0,0 +1,28 @@
+'Short solution: Append record and read last record
+$Include "Rapidq.inc"
+
+dim file as qfilestream
+dim filename as string
+dim LogRec as string
+
+'First create our logfile
+filename = "C:\Logfile2.txt"
+file.open(filename, fmCreate)
+file.writeline "jsmith:x:1001:1000:Joe Smith,Room 1007,(234)555-8917,(234)555-0077,jsmith@rosettacode.org:/home/jsmith:/bin/bash"
+file.writeline "jdoe:x:1002:1000:Jane Doe,Room 1004,(234)555-8914,(234)555-0044,jdoe@rosettacode.org:/home/jsmith:/bin/bash"
+file.close
+
+'Append record
+file.open(filename, fmOpenWrite)
+file.position = File.size
+file.writeline "xyz:x:1003:1000:X Yz,Room 1003,(234)555-8913,(234)555-0033,xyz@rosettacode.org:/home/xyz:/bin/bash"
+file.close
+
+'Read last record
+file.open (filename, fmOpenRead)
+while not file.EOF
+ LogRec = File.Readline
+wend
+file.close
+
+showmessage "Appended record: " + LogRec
diff --git a/Task/Append-a-record-to-the-end-of-a-text-file/RapidQ/append-a-record-to-the-end-of-a-text-file-2.rapidq b/Task/Append-a-record-to-the-end-of-a-text-file/RapidQ/append-a-record-to-the-end-of-a-text-file-2.rapidq
new file mode 100644
index 0000000000..ac9902151b
--- /dev/null
+++ b/Task/Append-a-record-to-the-end-of-a-text-file/RapidQ/append-a-record-to-the-end-of-a-text-file-2.rapidq
@@ -0,0 +1,145 @@
+'Full solution: Create an object with all required fields and
+'build-in functions to append a record and to read the last record
+$include "Rapidq.inc"
+
+Type TLogFile extends QObject
+ Private:
+ file as qfilestream
+
+ Public:
+ account as string
+ password as string
+ UID as integer
+ GID as integer
+ GECOS.fullname as string
+ GECOS.office as string
+ GECOS.extension as string
+ GECOS.homephone as string
+ GECOS.email as string
+ directory as string
+ shell as string
+
+ RSep as string
+ GSep as string
+
+ function AppendRecord(LogFile as string) as integer
+ with This
+ if fileexists(LogFile) then
+ Result = .file.open(LogFile, fmOpenWrite)
+ else
+ Result = .file.open(LogFile, fmCreate)
+ end if
+
+ .file.position = .file.size
+ .file.writeline .account + .RSep + .password + .RSep + str$(.UID) + .RSep + str$(.GID) + .RSep +_
+ .GECOS.fullname + .GSep + .GECOS.office + .GSep + .GECOS.extension +_
+ .GSep + .GECOS.homephone + .GSep + .GECOS.email + .RSep +_
+ .directory + .RSep + .shell
+ .file.close
+ end with
+ end function
+
+ Function ReadLastRecord(LogFile as string) as string
+ dim x as integer
+ dim LogRec as string
+ dim GECOSRec as string
+
+ With This
+ if fileexists(LogFile) then
+ .file.open(LogFile, fmOpenRead)
+ While not .file.eof
+ LogRec = .file.readline
+ Wend
+ .file.close
+
+ .account = field$(LogRec, .RSep, 1)
+ .password = field$(LogRec, .RSep, 2)
+ .UID = val(field$(LogRec, .RSep, 3))
+ .GID = val(field$(LogRec, .RSep, 4))
+ GECOSRec = field$(LogRec, .RSep, 5)
+ .directory = field$(LogRec, .RSep, 6)
+ .shell = field$(LogRec, .RSep, 7)
+ .GECOS.fullname = field$(GECOSRec, .GSep, 1)
+ .GECOS.office = field$(GECOSRec, .GSep, 2)
+ .GECOS.extension = field$(GECOSRec, .GSep, 3)
+ .GECOS.homephone = field$(GECOSRec, .GSep, 4)
+ .GECOS.email = field$(GECOSRec, .GSep, 5)
+
+ else
+ showmessage "Can't read file " + Logfile
+
+ end if
+ end with
+ End function
+
+ Constructor
+ RSep = ":"
+ GSep = ","
+ End Constructor
+end type
+
+'--- Now we can use our LogFile object:
+dim LogFile as TLogFile
+
+'--- Let's save a record: Set field values
+Logfile.account = "jsmith"
+Logfile.password = "X"
+Logfile.UID = 1001
+Logfile.GID = 1000
+Logfile.directory = "/home/jsmith"
+Logfile.shell = "/bin/bash"
+Logfile.GECOS.fullname = "Joe Smith"
+Logfile.GECOS.office = "Room 1007"
+Logfile.GECOS.extension = "(234)555-8917"
+Logfile.GECOS.homephone = "(234)555-0077"
+Logfile.GECOS.email = "jsmith@rosettacode.org"
+'--- And save it to our logfile
+Logfile.appendrecord("c:\A test.txt")
+
+'--- Let's save the second one: Set field values
+Logfile.account = "jdoe"
+Logfile.password = "X"
+Logfile.UID = 1002
+Logfile.GID = 1000
+Logfile.directory = "/home/jsmith"
+Logfile.shell = "/bin/bash"
+Logfile.GECOS.fullname = "Jane Doe"
+Logfile.GECOS.office = "Room 1004"
+Logfile.GECOS.extension = "(234)555-8914"
+Logfile.GECOS.homephone = "(234)555-0044"
+Logfile.GECOS.email = "jdoe@rosettacode.org"
+'--- And save it to our logfile
+Logfile.appendrecord("c:\A test.txt")
+
+'--- And append the last one: Set field values
+Logfile.account = "xyz"
+Logfile.password = "X"
+Logfile.UID = 1003
+Logfile.GID = 1000
+Logfile.directory = "/home/xyz"
+Logfile.shell = "/bin/bash"
+Logfile.GECOS.fullname = "X Yz"
+Logfile.GECOS.office = "Room 1003"
+Logfile.GECOS.extension = "(234)555-8913"
+Logfile.GECOS.homephone = "(234)555-0033"
+Logfile.GECOS.email = "xyz@rosettacode.org"
+'--- And save it to our logfile
+Logfile.appendrecord("c:\A test.txt")
+
+
+'--- Read last record: load all CSV fields in our LogFile object props
+Logfile.ReadLastRecord("c:\A test.txt")
+'--- And simply Read values from the objects properties
+Print Logfile.account
+Print Logfile.password
+Print Logfile.UID
+Print Logfile.GID
+Print Logfile.directory
+Print Logfile.shell
+Print Logfile.GECOS.fullname
+Print Logfile.GECOS.office
+Print Logfile.GECOS.extension
+Print Logfile.GECOS.homephone
+Print Logfile.GECOS.email
+Print ""
+input "Press enter to exit:";a$
diff --git a/Task/Append-a-record-to-the-end-of-a-text-file/Ruby/append-a-record-to-the-end-of-a-text-file.rb b/Task/Append-a-record-to-the-end-of-a-text-file/Ruby/append-a-record-to-the-end-of-a-text-file.rb
new file mode 100644
index 0000000000..103ae63e8a
--- /dev/null
+++ b/Task/Append-a-record-to-the-end-of-a-text-file/Ruby/append-a-record-to-the-end-of-a-text-file.rb
@@ -0,0 +1,36 @@
+Gecos = Struct.new :fullname, :office, :extension, :homephone, :email
+class Gecos
+ def to_s
+ "%s,%s,%s,%s,%s" % [fullname, office, extension, homephone, email]
+ end
+end
+
+# Another way define 'to_s' method
+Passwd = Struct.new(:account, :password, :uid, :gid, :gecos, :directory, :shell) do
+ def to_s
+ to_a.map(&:to_s).join(':')
+ end
+end
+
+jsmith = Passwd.new('jsmith','x',1001, 1000, Gecos.new('Joe Smith', 'Room 1007', '(234)555-8917', '(234)555-0077', 'jsmith@rosettacode.org'), '/home/jsmith', '/bin/bash')
+jdoe = Passwd.new('jdoe','x',1002, 1000, Gecos.new('Jane Doe', 'Room 1004', '(234)555-8914', '(234)555-0044', 'jdoe@rosettacode.org'), '/home/jdoe', '/bin/bash')
+xyz = Passwd.new('xyz','x',1003, 1000, Gecos.new('X Yz', 'Room 1003', '(234)555-8913', '(234)555-0033', 'xyz@rosettacode.org'), '/home/xyz', '/bin/bash')
+
+filename = 'append.records.test'
+
+# create the passwd file with two records
+File.open(filename, 'w') do |io|
+ io.puts jsmith
+ io.puts jdoe
+end
+
+puts "before appending:"
+puts File.readlines(filename)
+
+# append the third record
+File.open(filename, 'a') do |io|
+ io.puts xyz
+end
+
+puts "after appending:"
+puts File.readlines(filename)
diff --git a/Task/Append-a-record-to-the-end-of-a-text-file/Scala/append-a-record-to-the-end-of-a-text-file.scala b/Task/Append-a-record-to-the-end-of-a-text-file/Scala/append-a-record-to-the-end-of-a-text-file.scala
new file mode 100644
index 0000000000..4c5574897a
--- /dev/null
+++ b/Task/Append-a-record-to-the-end-of-a-text-file/Scala/append-a-record-to-the-end-of-a-text-file.scala
@@ -0,0 +1,56 @@
+import java.io.{File, FileWriter, IOException}
+import scala.io.Source
+
+object RecordAppender extends App {
+ val rawDataIt = Source.fromString(rawData).getLines()
+
+ def writeStringToFile(file: File, data: String, appending: Boolean = false) =
+ using(new FileWriter(file, appending))(_.write(data))
+
+ def using[A <: {def close() : Unit}, B](resource: A)(f: A => B): B =
+ try f(resource) finally resource.close()
+
+ def rawData =
+ """jsmith:x:1001:1000:Joe Smith,Room 1007,(234)555-8917,(234)555-0077,jsmith@rosettacode.org:/home/jsmith:/bin/bash
+ |jdoe:x:1002:1000:Jane Doe,Room 1004,(234)555-8914,(234)555-0044,jdoe@rosettacode.org:/home/jdoe:/bin/bash
+ |xyz:x:1003:1000:X Yz,Room 1003,(234)555-8913,(234)555-0033,xyz@rosettacode.org:/home/xyz:/bin/bash""".stripMargin
+
+ case class Record(account: String,
+ password: String,
+ uid: Int,
+ gid: Int,
+ gecos: Array[String],
+ directory: String,
+ shell: String) {
+ def asLine: String = s"$account:$password:$uid:$gid:${gecos.mkString(",")}:$directory:$shell\n"
+ }
+
+ object Record {
+ def apply(line: String): Record = {
+ val token = line.trim.split(":")
+ require((token != null) || (token.length == 7))
+ this(token(0).trim,
+ token(1).trim,
+ Integer.parseInt(token(2).trim),
+ Integer.parseInt(token(3).trim),
+ token(4).split(","),
+ token(5).trim,
+ token(6).trim)
+ }
+ }
+
+ try {
+ val file = File.createTempFile("_rosetta", ".passwd")
+ using(new FileWriter(file))(writer => rawDataIt.take(2).foreach(line => writer.write(Record(line).asLine)))
+
+ writeStringToFile(file, Record(rawDataIt.next()).asLine, appending = true) // Append a record
+
+ Source.fromFile(file).getLines().foreach(line => {
+ if (line startsWith """xyz""") print(s"Selected record: ${Record(line).asLine}")
+ })
+ scala.compat.Platform.collectGarbage() // JVM Windows related bug workaround JDK-4715154
+ file.deleteOnExit()
+ } catch {
+ case e: IOException => println(s"Running Example failed: ${e.getMessage}")
+ }
+} // 57 lines
diff --git a/Task/Append-a-record-to-the-end-of-a-text-file/Tcl/append-a-record-to-the-end-of-a-text-file.tcl b/Task/Append-a-record-to-the-end-of-a-text-file/Tcl/append-a-record-to-the-end-of-a-text-file.tcl
new file mode 100644
index 0000000000..3901124610
--- /dev/null
+++ b/Task/Append-a-record-to-the-end-of-a-text-file/Tcl/append-a-record-to-the-end-of-a-text-file.tcl
@@ -0,0 +1,85 @@
+# Model the data as nested lists, as that is a natural fit for Tcl
+set basicRecords {
+ {
+ jsmith
+ x
+ 1001
+ 1000
+ {
+ {Joe Smith}
+ {Room 1007}
+ (234)555-8917
+ (234)555-0077
+ jsmith@rosettacode.org
+ }
+ /home/jsmith
+ /bin/bash
+ }
+ {
+ jdoe
+ x
+ 1002
+ 1000
+ {
+ {Jane Doe}
+ {Room 1004}
+ (234)555-8914
+ (234)555-0044
+ jdoe@rosettacode.org
+ }
+ /home/jsmith
+ /bin/bash
+ }
+}
+set addedRecords {
+ {
+ xyz
+ x
+ 1003
+ 1000
+ {
+ {X Yz}
+ {Room 1003}
+ (234)555-8913
+ (234)555-0033
+ xyz@rosettacode.org
+ }
+ /home/xyz
+ /bin/bash
+ }
+}
+
+proc printRecords {records fd} {
+ fconfigure $fd -buffering none
+ foreach record $records {
+ lset record 4 [join [lindex $record 4] ","]
+ puts -nonewline $fd [join $record ":"]\n
+ }
+}
+proc readRecords fd {
+ set result {}
+ foreach line [split [read $fd] "\n"] {
+ if {$line eq ""} continue
+ set record [split $line ":"]
+ # Special handling for GECOS
+ lset record 4 [split [lindex $record 4] ","]
+ lappend result $record
+ }
+ return $result
+}
+
+# Write basic set
+set f [open ./passwd w]
+printRecords $basicRecords $f
+close $f
+
+# Append the extra ones
+# Use {WRONLY APPEND} on Tcl 8.4
+set f [open ./passwd a]
+printRecords $addedRecords $f
+close $f
+
+set f [open ./passwd]
+set recs [readRecords $f]
+close $f
+puts "last record is for [lindex $recs end 0], named [lindex $recs end 4 0]"
diff --git a/Task/Append-a-record-to-the-end-of-a-text-file/UNIX-Shell/append-a-record-to-the-end-of-a-text-file.sh b/Task/Append-a-record-to-the-end-of-a-text-file/UNIX-Shell/append-a-record-to-the-end-of-a-text-file.sh
new file mode 100644
index 0000000000..178fe86dd9
--- /dev/null
+++ b/Task/Append-a-record-to-the-end-of-a-text-file/UNIX-Shell/append-a-record-to-the-end-of-a-text-file.sh
@@ -0,0 +1,49 @@
+rec1=(
+ jsmith
+ x
+ 1001
+ 1000
+ "Joe Smith,Room 1007,(234)555-8917,(234)555-0077,jsmith@rosettacode.org"
+ /home/jsmith
+ /bin/bash
+)
+
+rec2=(
+ jdoe
+ x
+ 1002
+ 1000
+ "Jane Doe,Room 1004,(234)555-8914,(234)555-0044,jdoe@rosettacode.org"
+ /home/jdoe
+ /bin/bash
+)
+
+rec3=(
+ xyz
+ x
+ 1003
+ 1000
+ "X Yz,Room 1003,(234)555-8913,(234)555-0033,xyz@rosettacode.org"
+ /home/xyz
+ /bin/bash
+)
+
+filename=./passwd-ish
+
+# use parentheses to run the commands in a subshell, so the
+# current shell's IFS variable is not changed
+(
+ IFS=:
+ echo "${rec1[*]}"
+ echo "${rec2[*]}"
+) > "$filename"
+
+echo before appending:
+cat "$filename"
+
+# appending, use the ">>" redirection symbol
+IFS=:
+echo "${rec3[*]}" >> "$filename"
+
+echo after appending:
+cat "$filename"
diff --git a/Task/Arithmetic-geometric-mean-Calculate-Pi/00DESCRIPTION b/Task/Arithmetic-geometric-mean-Calculate-Pi/00DESCRIPTION
new file mode 100644
index 0000000000..a18a4854c7
--- /dev/null
+++ b/Task/Arithmetic-geometric-mean-Calculate-Pi/00DESCRIPTION
@@ -0,0 +1,17 @@
+[http://www.maa.org/sites/default/files/pdf/upload_library/22/Ford/Almkvist-Berndt585-608.pdf Almkvist Berndt 1988] begins with an investigation of why the agm is such an efficient algorithm, and proves that it converges quadratically. This is an efficient method to calculate .
+
+With the same notations used in [[Arithmetic-geometric mean]], we can summarize the paper by writing:
+
+
+
+This allows you to make the approximation, for any large N:
+
+
+
+The purpose of this task is to demonstrate how to use this approximation in order to compute a large number of decimals of .
diff --git a/Task/Arithmetic-geometric-mean-Calculate-Pi/C++/arithmetic-geometric-mean-calculate-pi.cpp b/Task/Arithmetic-geometric-mean-Calculate-Pi/C++/arithmetic-geometric-mean-calculate-pi.cpp
new file mode 100644
index 0000000000..f207cdb7a4
--- /dev/null
+++ b/Task/Arithmetic-geometric-mean-Calculate-Pi/C++/arithmetic-geometric-mean-calculate-pi.cpp
@@ -0,0 +1,35 @@
+#include
+
+void agm(mpf_class& rop1, mpf_class& rop2, const mpf_class& op1,
+ const mpf_class& op2)
+{
+ rop1 = (op1 + op2) / 2;
+ rop2 = op1 * op2;
+ mpf_sqrt(rop2.get_mpf_t(), rop2.get_mpf_t());
+}
+
+int main(void)
+{
+ mpf_set_default_prec(300000);
+ mpf_class x0, y0, resA, resB, Z;
+
+ x0 = 1;
+ y0 = 0.5;
+ Z = 0.25;
+ mpf_sqrt(y0.get_mpf_t(), y0.get_mpf_t());
+
+ int n = 1;
+ for (int i = 0; i < 8; i++) {
+ agm(resA, resB, x0, y0);
+ Z -= n * (resA - x0) * (resA - x0);
+ n *= 2;
+
+ agm(x0, y0, resA, resB);
+ Z -= n * (x0 - resA) * (x0 - resA);
+ n *= 2;
+ }
+
+ x0 = x0 * x0 / Z;
+ gmp_printf ("%.100000Ff\n", x0.get_mpf_t());
+ return 0;
+}
diff --git a/Task/Arithmetic-geometric-mean-Calculate-Pi/C/arithmetic-geometric-mean-calculate-pi.c b/Task/Arithmetic-geometric-mean-Calculate-Pi/C/arithmetic-geometric-mean-calculate-pi.c
new file mode 100644
index 0000000000..e3a2b572fa
--- /dev/null
+++ b/Task/Arithmetic-geometric-mean-Calculate-Pi/C/arithmetic-geometric-mean-calculate-pi.c
@@ -0,0 +1,42 @@
+#include "gmp.h"
+
+void agm (const mpf_t in1, const mpf_t in2, mpf_t out1, mpf_t out2) {
+ mpf_add (out1, in1, in2);
+ mpf_div_ui (out1, out1, 2);
+ mpf_mul (out2, in1, in2);
+ mpf_sqrt (out2, out2);
+}
+
+int main (void) {
+ mpf_set_default_prec (300000);
+ mpf_t x0, y0, resA, resB, Z, var;
+
+ mpf_init_set_ui (x0, 1);
+ mpf_init_set_d (y0, 0.5);
+ mpf_sqrt (y0, y0);
+ mpf_init (resA);
+ mpf_init (resB);
+ mpf_init_set_d (Z, 0.25);
+ mpf_init (var);
+
+ int n = 1;
+ int i;
+ for(i=0; i<8; i++){
+ agm(x0, y0, resA, resB);
+ mpf_sub(var, resA, x0);
+ mpf_mul(var, var, var);
+ mpf_mul_ui(var, var, n);
+ mpf_sub(Z, Z, var);
+ n += n;
+ agm(resA, resB, x0, y0);
+ mpf_sub(var, x0, resA);
+ mpf_mul(var, var, var);
+ mpf_mul_ui(var, var, n);
+ mpf_sub(Z, Z, var);
+ n += n;
+ }
+ mpf_mul(x0, x0, x0);
+ mpf_div(x0, x0, Z);
+ gmp_printf ("%.100000Ff\n", x0);
+ return 0;
+}
diff --git a/Task/Arithmetic-geometric-mean-Calculate-Pi/Haskell/arithmetic-geometric-mean-calculate-pi.hs b/Task/Arithmetic-geometric-mean-Calculate-Pi/Haskell/arithmetic-geometric-mean-calculate-pi.hs
new file mode 100644
index 0000000000..18691c9667
--- /dev/null
+++ b/Task/Arithmetic-geometric-mean-Calculate-Pi/Haskell/arithmetic-geometric-mean-calculate-pi.hs
@@ -0,0 +1,33 @@
+import Prelude hiding (pi)
+import Data.Number.MPFR hiding (sqrt, pi, div)
+import Data.Number.MPFR.Instances.Near ()
+
+-- A generous overshoot of the number of bits needed for a
+-- given number of digits.
+digitBits :: (Integral a, Num a) => a -> a
+digitBits n = (n + 1) `div` 2 * 8
+
+-- Calculate pi accurate to a given number of digits.
+pi :: Integer -> MPFR
+pi digits =
+ let eps = fromString ("1e-" ++ show digits)
+ (fromInteger $ digitBits digits) 0
+ two = fromInt Near (getPrec eps) 2
+ twoi = 2 :: Int
+ twoI = 2 :: Integer
+ pis a g s n =
+ let aB = (a + g) / two
+ gB = sqrt (a * g)
+ aB2 = aB ^^ twoi
+ sB = s + (two ^^ n) * (aB2 - gB ^^ twoi)
+ num = 4 * aB2
+ den = 1 - sB
+ in (num / den) : pis aB gB sB (n + 1)
+ puntil f (a:b:xs) = if f a b then b else puntil f (b:xs)
+ in puntil (\a b -> abs (a - b) < eps)
+ $ pis one (one / sqrt two) zero twoI
+
+main :: IO ()
+main = do
+ -- The last decimal is rounded.
+ putStrLn $ toString 1000 $ pi 1000
diff --git a/Task/Arithmetic-geometric-mean-Calculate-Pi/J/arithmetic-geometric-mean-calculate-pi.j b/Task/Arithmetic-geometric-mean-Calculate-Pi/J/arithmetic-geometric-mean-calculate-pi.j
new file mode 100644
index 0000000000..0c047b0896
--- /dev/null
+++ b/Task/Arithmetic-geometric-mean-Calculate-Pi/J/arithmetic-geometric-mean-calculate-pi.j
@@ -0,0 +1,25 @@
+DP=: 100
+
+round=: DP&$: : (4 : 0)
+ b %~ <.1r2+y*b=. 10x^x
+)
+
+sqrt=: DP&$: : (4 : 0) " 0
+ assert. 0<:y
+ %/ <.@%: (2 x: (2*x) round y)*10x^2*x+0>.>.10^.y
+)
+
+pi =: 3 : 0
+ A =. N =. 1x
+ 'G Z HALF' =. (% sqrt 2) , 1r4 1r2
+ for_I. i.18 do.
+ X =. ((A + G) * HALF) , sqrt A * G
+ VAR =. ({.X) - A
+ Z =. Z - VAR * VAR * N
+ N =. +: N
+ 'A G' =. X
+ PI =: A * A % Z
+ smoutput (0j100":PI) , 4 ": I
+ end.
+ PI
+)
diff --git a/Task/Arithmetic-geometric-mean-Calculate-Pi/Mathematica/arithmetic-geometric-mean-calculate-pi.math b/Task/Arithmetic-geometric-mean-Calculate-Pi/Mathematica/arithmetic-geometric-mean-calculate-pi.math
new file mode 100644
index 0000000000..4fca4bf983
--- /dev/null
+++ b/Task/Arithmetic-geometric-mean-Calculate-Pi/Mathematica/arithmetic-geometric-mean-calculate-pi.math
@@ -0,0 +1,8 @@
+piCalc[n_,precision_]:=($precision=precision;4*a[n]^2)/(1-Sum[2^(1+k)*(a[k]^2-b[k]^2),{k,1,n}])
+a[h_]:=(a[h]=(N[#,$precision]&@a[h-1]+b[h-1])/2)
+b[h_]:=(b[h]=N[#,$precision]&@Sqrt[a[h-1] b[h-1]])
+a[0]=1;
+b[0]=1/Sqrt[2];
+
+N[Pi, 1000000] - piCalc[10, 5]
+0.*10^-996
diff --git a/Task/Arithmetic-geometric-mean-Calculate-Pi/PARI-GP/arithmetic-geometric-mean-calculate-pi.pari b/Task/Arithmetic-geometric-mean-Calculate-Pi/PARI-GP/arithmetic-geometric-mean-calculate-pi.pari
new file mode 100644
index 0000000000..0522f02847
--- /dev/null
+++ b/Task/Arithmetic-geometric-mean-Calculate-Pi/PARI-GP/arithmetic-geometric-mean-calculate-pi.pari
@@ -0,0 +1,2 @@
+pi(n)=my(a=1,g=2^-.5);(1-2*sum(k=1,n,[a,g]=[(a+g)/2,sqrt(a*g)];(a^2-g^2)< FatRat) {
+ return FatRat.new:
+ sqrt($r.nude[0] * 10**(number-of-decimals*2) div $r.nude[1]),
+ 10**number-of-decimals;
+}
+
+my FatRat ($a, $n) = 1.FatRat xx 2;
+my FatRat $g = sqrt(1/2.FatRat);
+my $z = .25;
+
+for ^10 {
+ given [ ($a + $g)/2, sqrt($a * $g) ] {
+ $z -= (.[0] - $a)**2 * $n;
+ $n += $n;
+ ($a, $g) = @$_;
+ say ($a ** 2 / $z).substr: 0, 2 + number-of-decimals;
+ }
+}
diff --git a/Task/Arithmetic-geometric-mean-Calculate-Pi/Perl/arithmetic-geometric-mean-calculate-pi-1.pl b/Task/Arithmetic-geometric-mean-Calculate-Pi/Perl/arithmetic-geometric-mean-calculate-pi-1.pl
new file mode 100644
index 0000000000..23ab3dd171
--- /dev/null
+++ b/Task/Arithmetic-geometric-mean-Calculate-Pi/Perl/arithmetic-geometric-mean-calculate-pi-1.pl
@@ -0,0 +1,23 @@
+use Math::BigFloat try => "GMP,Pari";
+
+my $digits = shift || 100; # Get number of digits from command line
+print agm_pi($digits), "\n";
+
+sub agm_pi {
+ my $digits = shift;
+ my $acc = $digits + 8;
+ my $HALF = Math::BigFloat->new("0.5");
+ my ($an, $bn, $tn, $pn) = (Math::BigFloat->bone, $HALF->copy->bsqrt($acc),
+ $HALF->copy->bmul($HALF), Math::BigFloat->bone);
+ while ($pn < $acc) {
+ my $prev_an = $an->copy;
+ $an->badd($bn)->bmul($HALF, $acc);
+ $bn->bmul($prev_an)->bsqrt($acc);
+ $prev_an->bsub($an);
+ $tn->bsub($pn * $prev_an * $prev_an);
+ $pn->badd($pn);
+ }
+ $an->badd($bn);
+ $an->bmul($an,$acc)->bdiv(4*$tn, $digits);
+ return $an;
+}
diff --git a/Task/Arithmetic-geometric-mean-Calculate-Pi/Perl/arithmetic-geometric-mean-calculate-pi-2.pl b/Task/Arithmetic-geometric-mean-Calculate-Pi/Perl/arithmetic-geometric-mean-calculate-pi-2.pl
new file mode 100644
index 0000000000..642474f195
--- /dev/null
+++ b/Task/Arithmetic-geometric-mean-Calculate-Pi/Perl/arithmetic-geometric-mean-calculate-pi-2.pl
@@ -0,0 +1,17 @@
+use strict;
+use warnings;
+use Math::BigFloat;
+
+Math::BigFloat->div_scale(100);
+
+my $a = my $n = 1;
+my $g = 1 / sqrt(Math::BigFloat->new(2));
+my $z = 0.25;
+for( 0 .. 17 ) {
+ my $x = [ ($a + $g) * 0.5, sqrt($a * $g) ];
+ my $var = $x->[0] - $a;
+ $z -= $var * $var * $n;
+ $n += $n;
+ ($a, $g) = @$x;
+}
+print $a * $a / $z, "\n";
diff --git a/Task/Arithmetic-geometric-mean-Calculate-Pi/PicoLisp/arithmetic-geometric-mean-calculate-pi.l b/Task/Arithmetic-geometric-mean-Calculate-Pi/PicoLisp/arithmetic-geometric-mean-calculate-pi.l
new file mode 100644
index 0000000000..aff2660d6f
--- /dev/null
+++ b/Task/Arithmetic-geometric-mean-Calculate-Pi/PicoLisp/arithmetic-geometric-mean-calculate-pi.l
@@ -0,0 +1,21 @@
+(scl 40)
+
+(de pi ()
+ (let
+ (A 1.0 N 1.0 Z 0.25
+ G (/ (* 1.0 1.0) (sqrt 2.0 1.0)) )
+ (use (X1 X2 V)
+ (do 18
+ (setq
+ X1 (/ (* (+ A G) 0.5) 1.0)
+ X2 (sqrt (* A G))
+ V (- X1 A)
+ Z (- Z (/ (* (/ (* V V) 1.0) N) 1.0))
+ N (+ N N)
+ A X1
+ G X2 ) ) )
+ (round (/ (* A A) Z) 40)) )
+
+(println (pi))
+
+(bye)
diff --git a/Task/Arithmetic-geometric-mean-Calculate-Pi/Python/arithmetic-geometric-mean-calculate-pi.py b/Task/Arithmetic-geometric-mean-Calculate-Pi/Python/arithmetic-geometric-mean-calculate-pi.py
new file mode 100644
index 0000000000..dda1802965
--- /dev/null
+++ b/Task/Arithmetic-geometric-mean-Calculate-Pi/Python/arithmetic-geometric-mean-calculate-pi.py
@@ -0,0 +1,13 @@
+from decimal import *
+
+D = Decimal
+getcontext().prec = 100
+a = n = D(1)
+g, z, half = 1 / D(2).sqrt(), D(0.25), D(0.5)
+for i in range(18):
+ x = [(a + g) * half, (a * g).sqrt()]
+ var = x[0] - a
+ z -= var * var * n
+ n += n
+ a, g = x
+print(a * a / z)
diff --git a/Task/Arithmetic-geometric-mean-Calculate-Pi/README b/Task/Arithmetic-geometric-mean-Calculate-Pi/README
new file mode 100644
index 0000000000..f2ad7fc83a
--- /dev/null
+++ b/Task/Arithmetic-geometric-mean-Calculate-Pi/README
@@ -0,0 +1 @@
+Data source: http://rosettacode.org/wiki/Arithmetic-geometric_mean/Calculate_Pi
diff --git a/Task/Arithmetic-geometric-mean-Calculate-Pi/REXX/arithmetic-geometric-mean-calculate-pi-1.rexx b/Task/Arithmetic-geometric-mean-Calculate-Pi/REXX/arithmetic-geometric-mean-calculate-pi-1.rexx
new file mode 100644
index 0000000000..055f17fbd4
--- /dev/null
+++ b/Task/Arithmetic-geometric-mean-Calculate-Pi/REXX/arithmetic-geometric-mean-calculate-pi-1.rexx
@@ -0,0 +1,21 @@
+/*REXX program calculates the value of pi using the AGM algorithm. */
+parse arg d .; if d=='' then d=500 /*D specified? Then use default.*/
+numeric digits d+5 /*set the numeric digits to D+5. */
+a=1; n=1; z=1/4; g=sqrt(1/2) /*calculate some initial values. */
+
+ do j=1 until a==old; old=a /*keep calculating until no noise*/
+ x=(a+g)*.5; g=sqrt(a*g) /*calculate the next set of terms*/
+ z=z-n*(x-a)**2; n=n+n; a=x /*Z is used in final calculation.*/
+ end /*j*/ /* [↑] stop if A equals OLD */
+
+pi=a**2/z /*display the computed value of π*/
+numeric digits d /*set the numeric digits to D */
+say pi/1 /*display the computed value of π*/
+exit /*stick a fork in it, we're done.*/
+/*──────────────────────────────────SQRT subroutine─────────────────────*/
+sqrt: procedure; parse arg x; if x=0 then return 0; m.=9; p=digits()
+numeric digits 9; numeric form; m.0=p
+parse value format(x,2,1,,0) 'E0' with g 'E' _ .; g=g*.5'E'_%2; m.1=p
+ do j=2 while p>9; m.j=p; p=p%2+1; end /*j*/
+ do k=j+5 to 0 by -1; numeric digits m.k; g=.5*(g+x/g); end /*k*/
+ numeric digits m.0; return (g/1)
diff --git a/Task/Arithmetic-geometric-mean-Calculate-Pi/REXX/arithmetic-geometric-mean-calculate-pi-2.rexx b/Task/Arithmetic-geometric-mean-Calculate-Pi/REXX/arithmetic-geometric-mean-calculate-pi-2.rexx
new file mode 100644
index 0000000000..f01480f22b
--- /dev/null
+++ b/Task/Arithmetic-geometric-mean-Calculate-Pi/REXX/arithmetic-geometric-mean-calculate-pi-2.rexx
@@ -0,0 +1,24 @@
+/*REXX program calculates the value of pi using the AGM algorithm. */
+parse arg d .; if d=='' then d=500 /*D specified? Then use default.*/
+numeric digits d+5 /*set the numeric digits to D+5. */
+a=1; n=1; z=1/4; g=sqrt(1/2) /*calculate some initial values. */
+
+ do j=1 until a==old; old=a /*keep calculating until no noise*/
+ x=(a+g)*.5; g=sqrt(a*g) /*calculate the next set of terms*/
+ z=z-n*(x-a)**2; n=n+n; a=x /*Z is used in final calculation.*/
+ many=compare(a,old) /*how many accurate digs computed*/
+ if many==0 then many=d /*adjust for the very last time. */
+ say right('iteration' j,20) right(many,9) "digits" /*show digs*/
+ end /*j*/ /* [↑] stop if A equals OLD */
+say /*display a blank line for a sep.*/
+pi=a**2/z /*calculate the value of pi. */
+numeric digits d /*set the numeric digits to D */
+say pi/1 /*display the computed value of π*/
+exit /*stick a fork in it, we're done.*/
+/*──────────────────────────────────SQRT subroutine─────────────────────*/
+sqrt: procedure; parse arg x; if x=0 then return 0; m.=9; p=digits()
+numeric digits 9; numeric form; m.0=p
+parse value format(x,2,1,,0) 'E0' with g 'E' _ .; g=g*.5'E'_%2; m.1=p
+ do j=2 while p>9; m.j=p; p=p%2+1; end /*j*/
+ do k=j+5 to 0 by -1; numeric digits m.k; g=.5*(g+x/g); end /*k*/
+ numeric digits m.0; return (g/1)
diff --git a/Task/Arithmetic-geometric-mean-Calculate-Pi/REXX/arithmetic-geometric-mean-calculate-pi-3.rexx b/Task/Arithmetic-geometric-mean-Calculate-Pi/REXX/arithmetic-geometric-mean-calculate-pi-3.rexx
new file mode 100644
index 0000000000..70b4c5ac59
--- /dev/null
+++ b/Task/Arithmetic-geometric-mean-Calculate-Pi/REXX/arithmetic-geometric-mean-calculate-pi-3.rexx
@@ -0,0 +1,48 @@
+Do d=10 To 13
+ Say d pib(d)
+ End
+Do d=1000 To 1005
+ pi=pib(d)
+ say d left(pi,5)'...'substr(pi,997)
+ End
+Exit
+pib: Procedure
+/* REXX ---------------------------------------------------------------
+* program calculates the value of pi using the AGM algorithm.
+* building on top of version 2
+* reformatted, improved, and using 'my own' sqrt
+* 08.07.2014 Walter Pachl
+*--------------------------------------------------------------------*/
+ Parse Arg d .
+ If d=='' Then
+ d=500 /* D specified? Then use default.*/
+ Numeric Digits d+5 /* set the numeric digits to D+5. */
+ a=1
+ n=1
+ z=1/4
+ g=sqrt(1/2) /* calculate some initial values. */
+ Do j=1 Until a==old
+ old=a /* keep calculating until no noise*/
+ x=(a+g)*.5
+ g=sqrt(a*g) /* calculate the next set of terms*/
+ z=z-n*(x-a)**2
+ n=n+n
+ a=x
+ End
+ pi=a**2/z
+ Numeric Digits d /* set the numeric digits to D */
+ Return pi+0
+
+sqrt: Procedure
+ Parse Arg x
+ xprec=digits()
+ iprec=xprec+10
+ Numeric Digits iprec
+ r0=x
+ r =1
+ Do i=1 By 1 Until r=r0 | (abs(r*r-x)<10**-iprec)
+ r0 = r
+ r = (r + x/r) / 2
+ End
+ Numeric Digits xprec
+ Return (r+0)
diff --git a/Task/Arithmetic-geometric-mean-Calculate-Pi/Racket/arithmetic-geometric-mean-calculate-pi.rkt b/Task/Arithmetic-geometric-mean-Calculate-Pi/Racket/arithmetic-geometric-mean-calculate-pi.rkt
new file mode 100644
index 0000000000..906dae436c
--- /dev/null
+++ b/Task/Arithmetic-geometric-mean-Calculate-Pi/Racket/arithmetic-geometric-mean-calculate-pi.rkt
@@ -0,0 +1,23 @@
+#lang racket
+(require math/bigfloat)
+
+(define (pi/a-g rep)
+ (let loop ([a 1.bf]
+ [g (bf1/sqrt 2.bf)]
+ [z (bf/ 1.bf 4.bf)]
+ [n (bf 1)]
+ [r 0])
+ (if (< r rep)
+ (let* ([a-p (bf/ (bf+ a g) 2.bf)]
+ [g-p (bfsqrt (bf* a g))]
+ [z-p (bf- z (bf* (bfsqr (bf- a-p a)) n))])
+ (loop a-p g-p z-p (bf* n 2.bf) (add1 r)))
+ (bf/ (bfsqr a) z))))
+
+(parameterize ([bf-precision 100])
+ (displayln (bigfloat->string (pi/a-g 5)))
+ (displayln (bigfloat->string pi.bf)))
+
+(parameterize ([bf-precision 200])
+ (displayln (bigfloat->string (pi/a-g 6)))
+ (displayln (bigfloat->string pi.bf)))
diff --git a/Task/Arithmetic-geometric-mean-Calculate-Pi/Ruby/arithmetic-geometric-mean-calculate-pi.rb b/Task/Arithmetic-geometric-mean-Calculate-Pi/Ruby/arithmetic-geometric-mean-calculate-pi.rb
new file mode 100644
index 0000000000..ae9e30ba4c
--- /dev/null
+++ b/Task/Arithmetic-geometric-mean-Calculate-Pi/Ruby/arithmetic-geometric-mean-calculate-pi.rb
@@ -0,0 +1,20 @@
+# Calculate Pi using the Arithmetic Geometric Mean of 1 and 1/sqrt(2)
+#
+#
+# Nigel_Galloway
+# March 8th., 2012.
+#
+require 'flt'
+Flt::BinNum.Context.precision = 8192
+a = n = 1
+g = 1 / Flt::BinNum(2).sqrt
+z = 0.25
+(0..17).each{
+ x = [(a + g) * 0.5, (a * g).sqrt]
+ var = x[0] - a
+ z -= var * var * n
+ n += n
+ a = x[0]
+ g = x[1]
+}
+puts a * a / z
diff --git a/Task/Arithmetic-geometric-mean-Calculate-Pi/Tcl/arithmetic-geometric-mean-calculate-pi.tcl b/Task/Arithmetic-geometric-mean-Calculate-Pi/Tcl/arithmetic-geometric-mean-calculate-pi.tcl
new file mode 100644
index 0000000000..ac142eb40f
--- /dev/null
+++ b/Task/Arithmetic-geometric-mean-Calculate-Pi/Tcl/arithmetic-geometric-mean-calculate-pi.tcl
@@ -0,0 +1,23 @@
+package require math::bigfloat
+namespace import math::bigfloat::*
+
+proc agm/π {N {precision 8192}} {
+ set 1 [int2float 1 $precision]
+ set 2 [int2float 2 $precision]
+ set n 1
+ set a $1
+ set g [div $1 [sqrt $2]]
+ set z [div $1 [int2float 4 $precision]]
+ for {set i 0} {$i <= $N} {incr i} {
+ set x0 [div [add $a $g] $2]
+ set x1 [sqrt [mul $a $g]]
+ set var [sub $x0 $a]
+ set z [sub $z [mul [mul $var $n] $var]]
+ incr n $n
+ set a $x0
+ set g $x1
+ }
+ return [tostr [div [mul $a $a] $z]]
+}
+
+puts [agm/π 17]
diff --git a/Task/Benfords-law/00DESCRIPTION b/Task/Benfords-law/00DESCRIPTION
new file mode 100644
index 0000000000..246bf34e89
--- /dev/null
+++ b/Task/Benfords-law/00DESCRIPTION
@@ -0,0 +1,18 @@
+{{Wikipedia|Benford's_law}}
+'''Benford's law''', also called the '''first-digit law''', refers to the frequency distribution of digits in many (but not all) real-life sources of data. In this distribution, the number 1 occurs as the first digit about 30% of the time, while larger numbers occur in that position less frequently: 9 as the first digit less than 5% of the time. This distribution of first digits is the same as the widths of gridlines on a logarithmic scale. Benford's law also concerns the expected distribution for digits beyond the first, which approach a uniform distribution.
+
+This result has been found to apply to a wide variety of data sets, including electricity bills, street addresses, stock prices, population numbers, death rates, lengths of rivers, physical and mathematical constants, and processes described by power laws (which are very common in nature). It tends to be most accurate when values are distributed across multiple orders of magnitude.
+
+A set of numbers is said to satisfy Benford's law if the leading digit () occurs with probability
+
+:
+
+For this task, write (a) routine(s) to calculate the distribution of first significant (non-zero) digits in a collection of numbers, then display the actual vs. expected distribution in the way most convenient for your language (table / graph / histogram / whatever).
+
+Use the first 1000 numbers from the Fibonacci sequence as your data set. No need to show how the Fibonacci numbers are obtained. You can [[Fibonacci sequence|generate]] them or load them [http://www.ibiblio.org/pub/docs/books/gutenberg/etext01/fbncc10.txt from a file]; whichever is easiest. Display your actual vs expected distribution.
+
+''For extra credit:'' Show the distribution for one other set of numbers from a page on Wikipedia. State which Wikipedia page it can be obtained from and what the set enumerates. Again, no need to display the actual list of numbers or the code to load them.
+
+;See also:
+* [http://www.numberphile.com/videos/benfords_law.html numberphile.com].
+* A starting page on Wolfram Mathworld is {{Wolfram|Benfords|Law}}.
diff --git a/Task/Benfords-law/AWK/benfords-law.awk b/Task/Benfords-law/AWK/benfords-law.awk
new file mode 100644
index 0000000000..52417f3b5d
--- /dev/null
+++ b/Task/Benfords-law/AWK/benfords-law.awk
@@ -0,0 +1,27 @@
+# syntax: GAWK -f BENFORDS_LAW.AWK
+BEGIN {
+ n = 1000
+ for (i=1; i<=n; i++) {
+ arr[substr(fibonacci(i),1,1)]++
+ }
+ print("digit expected observed deviation")
+ for (i=1; i<=9; i++) {
+ expected = log10(i+1) - log10(i)
+ actual = arr[i] / n
+ deviation = expected - actual
+ printf("%5d %8.4f %8.4f %9.4f\n",i,expected*100,actual*100,abs(deviation*100))
+ }
+ exit(0)
+}
+function fibonacci(n, a,b,c,i) {
+ a = 0
+ b = 1
+ for (i=1; i<=n; i++) {
+ c = a + b
+ a = b
+ b = c
+ }
+ return(c)
+}
+function abs(x) { if (x >= 0) { return x } else { return -x } }
+function log10(x) { return log(x)/log(10) }
diff --git a/Task/Benfords-law/Ada/benfords-law-1.ada b/Task/Benfords-law/Ada/benfords-law-1.ada
new file mode 100644
index 0000000000..b11e243437
--- /dev/null
+++ b/Task/Benfords-law/Ada/benfords-law-1.ada
@@ -0,0 +1,49 @@
+with Ada.Text_IO, Ada.Numerics.Generic_Elementary_Functions;
+
+procedure Benford is
+
+ subtype Nonzero_Digit is Natural range 1 .. 9;
+ function First_Digit(S: String) return Nonzero_Digit is
+ (if S(S'First) in '1' .. '9'
+ then Nonzero_Digit'Value(S(S'First .. S'First))
+ else First_Digit(S(S'First+1 .. S'Last)));
+
+ package N_IO is new Ada.Text_IO.Integer_IO(Natural);
+
+ procedure Print(D: Nonzero_Digit; Counted, Sum: Natural) is
+ package Math is new Ada.Numerics.Generic_Elementary_Functions(Float);
+ package F_IO is new Ada.Text_IO.Float_IO(Float);
+ Actual: constant Float := Float(Counted) / Float(Sum);
+ Expected: constant Float := Math.Log(1.0 + 1.0 / Float(D), Base => 10.0);
+ Deviation: constant Float := abs(Expected-Actual);
+ begin
+ N_IO.Put(D, 5);
+ N_IO.Put(Counted, 14);
+ F_IO.Put(Float(Sum)*Expected, Fore => 16, Aft => 1, Exp => 0);
+ F_IO.Put(100.0*Actual, Fore => 9, Aft => 2, Exp => 0);
+ F_IO.Put(100.0*Expected, Fore => 11, Aft => 2, Exp => 0);
+ F_IO.Put(100.0*Deviation, Fore => 13, Aft => 2, Exp => 0);
+ end Print;
+
+ Cnt: array(Nonzero_Digit) of Natural := (1 .. 9 => 0);
+ D: Nonzero_Digit;
+ Sum: Natural := 0;
+ Counter: Positive;
+
+begin
+ while not Ada.Text_IO.End_Of_File loop
+ -- each line in the input file holds Counter, followed by Fib(Counter)
+ N_IO.Get(Counter);
+ -- Counter and skip it, we just don't need it
+ D := First_Digit(Ada.Text_IO.Get_Line);
+ -- read the rest of the line and extract the first digit
+ Cnt(D) := Cnt(D)+1;
+ Sum := Sum + 1;
+ end loop;
+ Ada.Text_IO.Put_Line(" Digit Found[total] Expected[total] Found[%]"
+ & " Expected[%] Difference[%]");
+ for I in Nonzero_Digit loop
+ Print(I, Cnt(I), Sum);
+ Ada.Text_IO.New_Line;
+ end loop;
+end Benford;
diff --git a/Task/Benfords-law/Ada/benfords-law-2.ada b/Task/Benfords-law/Ada/benfords-law-2.ada
new file mode 100644
index 0000000000..e041c0ce41
--- /dev/null
+++ b/Task/Benfords-law/Ada/benfords-law-2.ada
@@ -0,0 +1 @@
+ -- N_IO.Get(Counter);
diff --git a/Task/Benfords-law/Aime/benfords-law.aime b/Task/Benfords-law/Aime/benfords-law.aime
new file mode 100644
index 0000000000..2eb7a0227e
--- /dev/null
+++ b/Task/Benfords-law/Aime/benfords-law.aime
@@ -0,0 +1,95 @@
+text
+sum(text a, text b)
+{
+ data d;
+ integer e, f, n, r;
+
+ e = length(a);
+ f = length(b);
+
+ r = 0;
+
+ n = min(e, f);
+ while (n) {
+ n -= 1;
+ e -= 1;
+ f -= 1;
+ r += a[e] - '0';
+ r += b[f] - '0';
+ b_insert(d, 0, r % 10 + '0');
+ r /= 10;
+ }
+
+ if (f) {
+ e = f;
+ a = b;
+ }
+
+ while (e) {
+ e -= 1;
+ r += a[e] - '0';
+ b_insert(d, 0, r % 10 + '0');
+ r /= 10;
+ }
+
+ if (r) {
+ b_insert(d, 0, r + '0');
+ }
+
+ return b_string(d);
+}
+
+text
+fibs(list l, integer n)
+{
+ integer c, i;
+ text a, b, w;
+
+ l_r_integer(l, 1, 1);
+
+ a = "0";
+ b = "1";
+ i = 1;
+ while (i < n) {
+ w = sum(a, b);
+ a = b;
+ b = w;
+ c = w[0] - '0';
+ l_r_integer(l, c, 1 + l_q_integer(l, c));
+ i += 1;
+ }
+
+ return w;
+}
+
+integer
+main(void)
+{
+ integer i, n;
+ list f;
+ real m;
+
+ n = 1000;
+
+ i = 10;
+ while (i) {
+ i -= 1;
+ lb_p_integer(f, 0);
+ }
+
+ fibs(f, n);
+
+ m = 100r / n;
+
+ o_text("\t\texpected\t found\n");
+ i = 0;
+ while (i < 9) {
+ i += 1;
+ o_winteger(8, i);
+ o_wpreal(16, 3, 3, 100 * log10(1 + 1r / i));
+ o_wpreal(16, 3, 3, l_q_integer(f, i) * m);
+ o_text("\n");
+ }
+
+ return 0;
+}
diff --git a/Task/Benfords-law/AutoHotkey/benfords-law.ahk b/Task/Benfords-law/AutoHotkey/benfords-law.ahk
new file mode 100644
index 0000000000..61929fa93d
--- /dev/null
+++ b/Task/Benfords-law/AutoHotkey/benfords-law.ahk
@@ -0,0 +1,43 @@
+SetBatchLines, -1
+fib := NStepSequence(1, 1, 2, 1000)
+Out := "Digit`tExpected`tObserved`tDeviation`n"
+n := []
+for k, v in fib
+ d := SubStr(v, 1, 1)
+ , n[d] := n[d] ? n[d] + 1 : 1
+for k, v in n
+ Exppected := 100 * Log(1+ (1 / k))
+ , Observed := (v / fib.MaxIndex()) * 100
+ , Out .= k "`t" Exppected "`t" Observed "`t" Abs(Exppected - Observed) "`n"
+MsgBox, % Out
+
+NStepSequence(v1, v2, n, k) {
+ a := [v1, v2]
+ Loop, % k - 2 {
+ a[j := A_Index + 2] := 0
+ Loop, % j < n + 2 ? j - 1 : n
+ a[j] := BigAdd(a[j - A_Index], a[j])
+ }
+ return, a
+}
+
+BigAdd(a, b) {
+ if (StrLen(b) > StrLen(a))
+ t := a, a := b, b := t
+ LenA := StrLen(a) + 1, LenB := StrLen(B) + 1, Carry := 0
+ Loop, % LenB - 1
+ Sum := SubStr(a, LenA - A_Index, 1) + SubStr(B, LenB - A_Index, 1) + Carry
+ , Carry := Sum // 10
+ , Result := Mod(Sum, 10) . Result
+ Loop, % I := LenA - LenB {
+ if (!Carry) {
+ Result := SubStr(a, 1, I) . Result
+ break
+ }
+ Sum := SubStr(a, I, 1) + Carry
+ , Carry := Sum // 10
+ , Result := Mod(Sum, 10) . Result
+ , I--
+ }
+ return, (Carry ? Carry : "") . Result
+}
diff --git a/Task/Benfords-law/C++/benfords-law.cpp b/Task/Benfords-law/C++/benfords-law.cpp
new file mode 100644
index 0000000000..f3eac082bf
--- /dev/null
+++ b/Task/Benfords-law/C++/benfords-law.cpp
@@ -0,0 +1,62 @@
+//to cope with the big numbers , I used the Class Library for Numbers( CLN )
+//if used prepackaged you can compile writing "g++ -std=c++11 -lcln yourprogram.cpp -o yourprogram"
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include