diff --git a/Conf/lang.yaml b/Conf/lang.yaml
index fbbc732424..4ccf7202e4 100644
--- a/Conf/lang.yaml
+++ b/Conf/lang.yaml
@@ -187,7 +187,7 @@ Crack: .crack
Craft Basic: .basic
Creative Basic: .basic
Curto: .curto
-Crystal: .crystal
+Crystal: .cr
C sharp: .cs
C Shell: .csh
Cubescript: .cube
@@ -202,7 +202,7 @@ DBL: .dbl
Dc: .dc
DCL: .dcl
DDNC: .ddnc
-Delphi: .delphi
+Delphi: .pas
Deluge: .deluge
DeviousYarn: .dy
DIBOL-11: .dibol-11
@@ -241,7 +241,7 @@ Elan: .elan
ElastiC: .elastic
Elena: .elena
Elisa: .elisa
-Elixir: .elixir
+Elixir: .ex
ELLA: .ella
Elm: .elm
Emacs Lisp: .l
@@ -255,7 +255,7 @@ ERRE: .erre
Es: .es
ESQL: .esql
Euler: .euler
-Euphoria: .euphoria
+Euphoria: .ex
Evaldraw: .evaldraw
Excel: .excel
Explore: .explore
@@ -398,7 +398,7 @@ JScript.NET: .jscript
JSE: .jse
Jsish: .jsish
JudoScript: .judo
-Julia: .julia
+Julia: .jl
K: .k
Kabap: .kabap
Kamailio Script: .kamailio
@@ -414,7 +414,7 @@ Klong: .klong
Koka: .koka
Komodo: .komodo
KonsolScript: .konsol
-Kotlin: .kotlin
+Kotlin: .kts
KQL: .kql
Ksh: .ksh
L++: .l++
@@ -581,14 +581,14 @@ Objeck: .objeck
ObjectIcon: .oi
Objective-C: .m
Object Pascal: .pas
-OCaml: .ocaml
+OCaml: .ml
Occam: .occam
Octave: .octave
Odin: .odin
Oforth: .fth
Ol: .ol
Omega: .omega
-OmniMark: .omnimark
+OmniMark: .xom
Onyx: .onyx
Onyx (wasm): .onyx
OOC: .ooc
@@ -675,7 +675,7 @@ Pure: .pure
PureBasic: .basic
Pure Data: .puredata
Purity: .purity
-Pyret: .pyret
+Pyret: .arr
Python: .py
Q: .q
QB64: .qb64
@@ -701,7 +701,7 @@ RASEL: .rasel
RATFOR: .ratfor
Raven: .raven
REALbasic: .basic
-Reason: .reason
+Reason: .re
REBOL: .rebol
Red: .red
Reduce: .reduce
@@ -729,7 +729,7 @@ RTSL: .rtsl
Rubylog: .rubylog
Ruby: .rb
Run BASIC: .basic
-Rust: .rust
+Rust: .rs
S++: .s++
Sage: .sage
Salmon: .salmon
@@ -739,7 +739,7 @@ Sass/SCSS: .sass
Sather: .sa
S-BASIC: .basic
Scala: .scala
-Scheme: .ss
+Scheme: .scm
Scilab: .scilab
Scratch: .scratch
ScratchScript: .scratch
@@ -860,7 +860,7 @@ Uiua: .uiua
Ultimate++: .ultimate++
Unicon: .unicon
Uniface: .uniface
-Unison: .unison
+Unison: .u
UnixPipes: .up
UNIX Shell: .sh
Unlambda: .unlambda
diff --git a/Lang/4ME/00-LANG.txt b/Lang/4ME/00-LANG.txt
new file mode 100644
index 0000000000..d297ba9483
--- /dev/null
+++ b/Lang/4ME/00-LANG.txt
@@ -0,0 +1,7 @@
+{{language|4ME
+|site=https://thevitebsk.github.io/4ME.by/}}
+4ME is a programing language created by [[User:Gaham]] implemented in 04.07.2024 MSK
+==See Also==
+* [https://esolangs.org/wiki/4ME 4ME in Esolangs.org]
+* [https://github.com/Thevitebsk/4me/ Github repo]
+[[Category:Programming paradigm/Concatenative]]
\ No newline at end of file
diff --git a/Lang/4ME/00-META.yaml b/Lang/4ME/00-META.yaml
new file mode 100644
index 0000000000..f0031de2c3
--- /dev/null
+++ b/Lang/4ME/00-META.yaml
@@ -0,0 +1,2 @@
+---
+from: http://rosettacode.org/wiki/Category:4ME
diff --git a/Lang/AArch64-Assembly/Bifid-cipher b/Lang/AArch64-Assembly/Bifid-cipher
new file mode 120000
index 0000000000..57b7c95a81
--- /dev/null
+++ b/Lang/AArch64-Assembly/Bifid-cipher
@@ -0,0 +1 @@
+../../Task/Bifid-cipher/AArch64-Assembly
\ No newline at end of file
diff --git a/Lang/AArch64-Assembly/Binary-strings b/Lang/AArch64-Assembly/Binary-strings
new file mode 120000
index 0000000000..09d5581057
--- /dev/null
+++ b/Lang/AArch64-Assembly/Binary-strings
@@ -0,0 +1 @@
+../../Task/Binary-strings/AArch64-Assembly
\ No newline at end of file
diff --git a/Lang/AArch64-Assembly/Calculating-the-value-of-e b/Lang/AArch64-Assembly/Calculating-the-value-of-e
new file mode 120000
index 0000000000..6be0e9e4dd
--- /dev/null
+++ b/Lang/AArch64-Assembly/Calculating-the-value-of-e
@@ -0,0 +1 @@
+../../Task/Calculating-the-value-of-e/AArch64-Assembly
\ No newline at end of file
diff --git a/Lang/AArch64-Assembly/Comma-quibbling b/Lang/AArch64-Assembly/Comma-quibbling
new file mode 120000
index 0000000000..09eae1e29d
--- /dev/null
+++ b/Lang/AArch64-Assembly/Comma-quibbling
@@ -0,0 +1 @@
+../../Task/Comma-quibbling/AArch64-Assembly
\ No newline at end of file
diff --git a/Lang/AArch64-Assembly/Compound-data-type b/Lang/AArch64-Assembly/Compound-data-type
new file mode 120000
index 0000000000..5e69c433e8
--- /dev/null
+++ b/Lang/AArch64-Assembly/Compound-data-type
@@ -0,0 +1 @@
+../../Task/Compound-data-type/AArch64-Assembly
\ No newline at end of file
diff --git a/Lang/AArch64-Assembly/Create-an-HTML-table b/Lang/AArch64-Assembly/Create-an-HTML-table
new file mode 120000
index 0000000000..53d9451773
--- /dev/null
+++ b/Lang/AArch64-Assembly/Create-an-HTML-table
@@ -0,0 +1 @@
+../../Task/Create-an-HTML-table/AArch64-Assembly
\ No newline at end of file
diff --git a/Lang/AArch64-Assembly/Determine-sentence-type b/Lang/AArch64-Assembly/Determine-sentence-type
new file mode 120000
index 0000000000..9e5de0c792
--- /dev/null
+++ b/Lang/AArch64-Assembly/Determine-sentence-type
@@ -0,0 +1 @@
+../../Task/Determine-sentence-type/AArch64-Assembly
\ No newline at end of file
diff --git a/Lang/AArch64-Assembly/Environment-variables b/Lang/AArch64-Assembly/Environment-variables
new file mode 120000
index 0000000000..bf37f1b011
--- /dev/null
+++ b/Lang/AArch64-Assembly/Environment-variables
@@ -0,0 +1 @@
+../../Task/Environment-variables/AArch64-Assembly
\ No newline at end of file
diff --git a/Lang/AArch64-Assembly/Fibonacci-n-step-number-sequences b/Lang/AArch64-Assembly/Fibonacci-n-step-number-sequences
new file mode 120000
index 0000000000..27c6d5155d
--- /dev/null
+++ b/Lang/AArch64-Assembly/Fibonacci-n-step-number-sequences
@@ -0,0 +1 @@
+../../Task/Fibonacci-n-step-number-sequences/AArch64-Assembly
\ No newline at end of file
diff --git a/Lang/AArch64-Assembly/Fibonacci-sequence b/Lang/AArch64-Assembly/Fibonacci-sequence
new file mode 120000
index 0000000000..1b2a811917
--- /dev/null
+++ b/Lang/AArch64-Assembly/Fibonacci-sequence
@@ -0,0 +1 @@
+../../Task/Fibonacci-sequence/AArch64-Assembly
\ No newline at end of file
diff --git a/Lang/AArch64-Assembly/Halt-and-catch-fire b/Lang/AArch64-Assembly/Halt-and-catch-fire
new file mode 120000
index 0000000000..fcd91d9797
--- /dev/null
+++ b/Lang/AArch64-Assembly/Halt-and-catch-fire
@@ -0,0 +1 @@
+../../Task/Halt-and-catch-fire/AArch64-Assembly
\ No newline at end of file
diff --git a/Lang/AArch64-Assembly/Hash-from-two-arrays b/Lang/AArch64-Assembly/Hash-from-two-arrays
new file mode 120000
index 0000000000..8f4af92c06
--- /dev/null
+++ b/Lang/AArch64-Assembly/Hash-from-two-arrays
@@ -0,0 +1 @@
+../../Task/Hash-from-two-arrays/AArch64-Assembly
\ No newline at end of file
diff --git a/Lang/AArch64-Assembly/Hofstadter-Q-sequence b/Lang/AArch64-Assembly/Hofstadter-Q-sequence
new file mode 120000
index 0000000000..249eb0836e
--- /dev/null
+++ b/Lang/AArch64-Assembly/Hofstadter-Q-sequence
@@ -0,0 +1 @@
+../../Task/Hofstadter-Q-sequence/AArch64-Assembly
\ No newline at end of file
diff --git a/Lang/AArch64-Assembly/Keyboard-input-Obtain-a-Y-or-N-response b/Lang/AArch64-Assembly/Keyboard-input-Obtain-a-Y-or-N-response
new file mode 120000
index 0000000000..ea8bafc85e
--- /dev/null
+++ b/Lang/AArch64-Assembly/Keyboard-input-Obtain-a-Y-or-N-response
@@ -0,0 +1 @@
+../../Task/Keyboard-input-Obtain-a-Y-or-N-response/AArch64-Assembly
\ No newline at end of file
diff --git a/Lang/AArch64-Assembly/Leonardo-numbers b/Lang/AArch64-Assembly/Leonardo-numbers
new file mode 120000
index 0000000000..c954cc6b34
--- /dev/null
+++ b/Lang/AArch64-Assembly/Leonardo-numbers
@@ -0,0 +1 @@
+../../Task/Leonardo-numbers/AArch64-Assembly
\ No newline at end of file
diff --git a/Lang/AArch64-Assembly/Machine-code b/Lang/AArch64-Assembly/Machine-code
new file mode 120000
index 0000000000..0510df24d2
--- /dev/null
+++ b/Lang/AArch64-Assembly/Machine-code
@@ -0,0 +1 @@
+../../Task/Machine-code/AArch64-Assembly
\ No newline at end of file
diff --git a/Lang/AArch64-Assembly/Mandelbrot-set b/Lang/AArch64-Assembly/Mandelbrot-set
new file mode 120000
index 0000000000..8e4411d4d0
--- /dev/null
+++ b/Lang/AArch64-Assembly/Mandelbrot-set
@@ -0,0 +1 @@
+../../Task/Mandelbrot-set/AArch64-Assembly
\ No newline at end of file
diff --git a/Lang/AArch64-Assembly/Menu b/Lang/AArch64-Assembly/Menu
new file mode 120000
index 0000000000..5b0688a2c5
--- /dev/null
+++ b/Lang/AArch64-Assembly/Menu
@@ -0,0 +1 @@
+../../Task/Menu/AArch64-Assembly
\ No newline at end of file
diff --git a/Lang/AArch64-Assembly/Phrase-reversals b/Lang/AArch64-Assembly/Phrase-reversals
new file mode 120000
index 0000000000..65751e913c
--- /dev/null
+++ b/Lang/AArch64-Assembly/Phrase-reversals
@@ -0,0 +1 @@
+../../Task/Phrase-reversals/AArch64-Assembly
\ No newline at end of file
diff --git a/Lang/AArch64-Assembly/Read-a-configuration-file b/Lang/AArch64-Assembly/Read-a-configuration-file
new file mode 120000
index 0000000000..869fc1989f
--- /dev/null
+++ b/Lang/AArch64-Assembly/Read-a-configuration-file
@@ -0,0 +1 @@
+../../Task/Read-a-configuration-file/AArch64-Assembly
\ No newline at end of file
diff --git a/Lang/AArch64-Assembly/Repeat-a-string b/Lang/AArch64-Assembly/Repeat-a-string
new file mode 120000
index 0000000000..c83eefd8df
--- /dev/null
+++ b/Lang/AArch64-Assembly/Repeat-a-string
@@ -0,0 +1 @@
+../../Task/Repeat-a-string/AArch64-Assembly
\ No newline at end of file
diff --git a/Lang/AArch64-Assembly/Reverse-words-in-a-string b/Lang/AArch64-Assembly/Reverse-words-in-a-string
new file mode 120000
index 0000000000..2f40f86595
--- /dev/null
+++ b/Lang/AArch64-Assembly/Reverse-words-in-a-string
@@ -0,0 +1 @@
+../../Task/Reverse-words-in-a-string/AArch64-Assembly
\ No newline at end of file
diff --git a/Lang/AArch64-Assembly/Strip-block-comments b/Lang/AArch64-Assembly/Strip-block-comments
new file mode 120000
index 0000000000..4a2741cf35
--- /dev/null
+++ b/Lang/AArch64-Assembly/Strip-block-comments
@@ -0,0 +1 @@
+../../Task/Strip-block-comments/AArch64-Assembly
\ No newline at end of file
diff --git a/Lang/AArch64-Assembly/Strip-comments-from-a-string b/Lang/AArch64-Assembly/Strip-comments-from-a-string
new file mode 120000
index 0000000000..1e7fb59c48
--- /dev/null
+++ b/Lang/AArch64-Assembly/Strip-comments-from-a-string
@@ -0,0 +1 @@
+../../Task/Strip-comments-from-a-string/AArch64-Assembly
\ No newline at end of file
diff --git a/Lang/AArch64-Assembly/Strip-whitespace-from-a-string-Top-and-tail b/Lang/AArch64-Assembly/Strip-whitespace-from-a-string-Top-and-tail
new file mode 120000
index 0000000000..115198d3ea
--- /dev/null
+++ b/Lang/AArch64-Assembly/Strip-whitespace-from-a-string-Top-and-tail
@@ -0,0 +1 @@
+../../Task/Strip-whitespace-from-a-string-Top-and-tail/AArch64-Assembly
\ No newline at end of file
diff --git a/Lang/AArch64-Assembly/Twos-complement b/Lang/AArch64-Assembly/Twos-complement
new file mode 120000
index 0000000000..92454eff57
--- /dev/null
+++ b/Lang/AArch64-Assembly/Twos-complement
@@ -0,0 +1 @@
+../../Task/Twos-complement/AArch64-Assembly
\ No newline at end of file
diff --git a/Lang/AArch64-Assembly/Update-a-configuration-file b/Lang/AArch64-Assembly/Update-a-configuration-file
new file mode 120000
index 0000000000..c28afd01b6
--- /dev/null
+++ b/Lang/AArch64-Assembly/Update-a-configuration-file
@@ -0,0 +1 @@
+../../Task/Update-a-configuration-file/AArch64-Assembly
\ No newline at end of file
diff --git a/Lang/AArch64-Assembly/Vigen-re-cipher b/Lang/AArch64-Assembly/Vigen-re-cipher
new file mode 120000
index 0000000000..02254d1d9a
--- /dev/null
+++ b/Lang/AArch64-Assembly/Vigen-re-cipher
@@ -0,0 +1 @@
+../../Task/Vigen-re-cipher/AArch64-Assembly
\ No newline at end of file
diff --git a/Lang/AArch64-Assembly/Vigen-re-cipher-Cryptanalysis b/Lang/AArch64-Assembly/Vigen-re-cipher-Cryptanalysis
new file mode 120000
index 0000000000..cc7f7e2227
--- /dev/null
+++ b/Lang/AArch64-Assembly/Vigen-re-cipher-Cryptanalysis
@@ -0,0 +1 @@
+../../Task/Vigen-re-cipher-Cryptanalysis/AArch64-Assembly
\ No newline at end of file
diff --git a/Lang/ALGOL-68/00-LANG.txt b/Lang/ALGOL-68/00-LANG.txt
index 4aa1cbcf81..875b4abf89 100644
--- a/Lang/ALGOL-68/00-LANG.txt
+++ b/Lang/ALGOL-68/00-LANG.txt
@@ -280,13 +280,17 @@ For more details about Primaries and Secondaries refer to [[Operator_precedence#
* [[Action!]]
* [[Agena]]
* [[Draco]]
+* [[RTL/2]]
* [https://en.wikipedia.org/wiki/S3_(programming_language) S3 for ICL 2900]
== Library code used in Rosetta Code samples ==
[https://rosettacode.org/wiki/ALGOL_68/prelude Various (including the standard prelude)]
+
+[https://rosettacode.org/wiki/Category:ALGOL_68-files File related]
+[https://rosettacode.org/wiki/Category:ALGOL_68-l-system L-System related]
[https://rosettacode.org/wiki/Category:ALGOL_68-primes Prime related]
[https://rosettacode.org/wiki/Category:ALGOL_68-rows Row (array) related]
-[https://rosettacode.org/wiki/Category:ALGOL_68-l-system L-System related]
+[https://rosettacode.org/wiki/Category:ALGOL_68-sort Sorting related]
== Tools ==
[[Syntax_highlighting_using_Mediawiki_formatting#ALGOL 68|Format an upper-stropped Algol 68 source with Mediawiki markup]]
diff --git a/Lang/ALGOL-68/9-billion-names-of-God-the-integer b/Lang/ALGOL-68/9-billion-names-of-God-the-integer
new file mode 120000
index 0000000000..01c632e0dd
--- /dev/null
+++ b/Lang/ALGOL-68/9-billion-names-of-God-the-integer
@@ -0,0 +1 @@
+../../Task/9-billion-names-of-God-the-integer/ALGOL-68
\ No newline at end of file
diff --git a/Lang/ALGOL-68/Archimedean-spiral b/Lang/ALGOL-68/Archimedean-spiral
new file mode 120000
index 0000000000..64c4988ade
--- /dev/null
+++ b/Lang/ALGOL-68/Archimedean-spiral
@@ -0,0 +1 @@
+../../Task/Archimedean-spiral/ALGOL-68
\ No newline at end of file
diff --git a/Lang/ALGOL-68/Arithmetic-geometric-mean-Calculate-Pi b/Lang/ALGOL-68/Arithmetic-geometric-mean-Calculate-Pi
new file mode 120000
index 0000000000..1c8bcda555
--- /dev/null
+++ b/Lang/ALGOL-68/Arithmetic-geometric-mean-Calculate-Pi
@@ -0,0 +1 @@
+../../Task/Arithmetic-geometric-mean-Calculate-Pi/ALGOL-68
\ No newline at end of file
diff --git a/Lang/ALGOL-68/Bifid-cipher b/Lang/ALGOL-68/Bifid-cipher
new file mode 120000
index 0000000000..5e9da259ac
--- /dev/null
+++ b/Lang/ALGOL-68/Bifid-cipher
@@ -0,0 +1 @@
+../../Task/Bifid-cipher/ALGOL-68
\ No newline at end of file
diff --git a/Lang/ALGOL-68/Chaocipher b/Lang/ALGOL-68/Chaocipher
new file mode 120000
index 0000000000..1d4c0173db
--- /dev/null
+++ b/Lang/ALGOL-68/Chaocipher
@@ -0,0 +1 @@
+../../Task/Chaocipher/ALGOL-68
\ No newline at end of file
diff --git a/Lang/ALGOL-68/De-Bruijn-sequences b/Lang/ALGOL-68/De-Bruijn-sequences
new file mode 120000
index 0000000000..1c1a7f459e
--- /dev/null
+++ b/Lang/ALGOL-68/De-Bruijn-sequences
@@ -0,0 +1 @@
+../../Task/De-Bruijn-sequences/ALGOL-68
\ No newline at end of file
diff --git a/Lang/ALGOL-68/Demings-funnel b/Lang/ALGOL-68/Demings-funnel
new file mode 120000
index 0000000000..c30e5a173e
--- /dev/null
+++ b/Lang/ALGOL-68/Demings-funnel
@@ -0,0 +1 @@
+../../Task/Demings-funnel/ALGOL-68
\ No newline at end of file
diff --git a/Lang/ALGOL-68/Sailors-coconuts-and-a-monkey-problem b/Lang/ALGOL-68/Sailors-coconuts-and-a-monkey-problem
new file mode 120000
index 0000000000..c84573878e
--- /dev/null
+++ b/Lang/ALGOL-68/Sailors-coconuts-and-a-monkey-problem
@@ -0,0 +1 @@
+../../Task/Sailors-coconuts-and-a-monkey-problem/ALGOL-68
\ No newline at end of file
diff --git a/Lang/ALGOL-68/Solve-a-Hidato-puzzle b/Lang/ALGOL-68/Solve-a-Hidato-puzzle
new file mode 120000
index 0000000000..228ccf6bb3
--- /dev/null
+++ b/Lang/ALGOL-68/Solve-a-Hidato-puzzle
@@ -0,0 +1 @@
+../../Task/Solve-a-Hidato-puzzle/ALGOL-68
\ No newline at end of file
diff --git a/Lang/ALGOL-68/Sort-disjoint-sublist b/Lang/ALGOL-68/Sort-disjoint-sublist
new file mode 120000
index 0000000000..be15a7cde3
--- /dev/null
+++ b/Lang/ALGOL-68/Sort-disjoint-sublist
@@ -0,0 +1 @@
+../../Task/Sort-disjoint-sublist/ALGOL-68
\ No newline at end of file
diff --git a/Lang/ALGOL-68/Take-notes-on-the-command-line b/Lang/ALGOL-68/Take-notes-on-the-command-line
new file mode 120000
index 0000000000..f0f896e58b
--- /dev/null
+++ b/Lang/ALGOL-68/Take-notes-on-the-command-line
@@ -0,0 +1 @@
+../../Task/Take-notes-on-the-command-line/ALGOL-68
\ No newline at end of file
diff --git a/Lang/ALGOL-W/00-LANG.txt b/Lang/ALGOL-W/00-LANG.txt
index eed21ba5cf..f0f11b51d0 100644
--- a/Lang/ALGOL-W/00-LANG.txt
+++ b/Lang/ALGOL-W/00-LANG.txt
@@ -7,27 +7,15 @@
|checking=both
|tags=algolw
|LCT=yes}}
-Algol W is a successor to [[wp:Algol 60|Algol 60]] closely based on A
+Algol W was designed as a successor to [[wp:Algol 60|Algol 60]], closely based on A
Contribution to the Development of ALGOL by [[wp:Niklaus Wirth|Niklaus Wirth]]
and [[wp:C.A.R. Hoare|C. A. R. Hoare]]. It includes dynamically
allocated records, string handling, complex numbers and a standard I/O
-system. A copy of the Algol W Language Description can be found on Karl
-Kleine's [http://www.fh-jena.de/~kleine/history/history.html Historic Documents in Computer Science]
+system. A description of the Algol W Language as at 1972 can be found at [https://bitsavers.org/pdf/stanford/cs_techReports/STAN-CS-71-230_Algol_W_Reference_Manual_Feb72.pdf Algol W Reference Manual 1972 on bitsavers.org]
page. [http://everything2.com/title/Algol%2520W Dabcanboulet's Algol W @ Everything2]
page contains an excellent
history and tutorial.
-[http://tiddly-pom.com/~glyn/ Awe] is a new compiler for the Algol W
-language. It is a complete implementation of the language described in
-the [https://tiddly-pom.com/~glyn/algolw.pdf Algol W Language Description, June 1972]. Awe should be able to
-compile code intended for the [[wp:OS/360|OS/360]] Algol W compilers
-with little or no modification. See the Awe manual for more details.
-
-Awe correctly compiles Tony Marsland's computer [[wp:chess|chess]] player
-[http://webdocs.cs.ualberta.ca/~tony/Public/Awit-Wita-ComputerChess/ Awit]
-and Hendrik Boom's [http://mtn-host.prjek.net/projects/a68h/ A68H]
-[[Algol 68]] compiler.
-
==To do==
[[Tasks not implemented in ALGOL W]]
diff --git a/Lang/ALGOL-W/Arithmetic-geometric-mean-Calculate-Pi b/Lang/ALGOL-W/Arithmetic-geometric-mean-Calculate-Pi
new file mode 120000
index 0000000000..0fd6c8a97f
--- /dev/null
+++ b/Lang/ALGOL-W/Arithmetic-geometric-mean-Calculate-Pi
@@ -0,0 +1 @@
+../../Task/Arithmetic-geometric-mean-Calculate-Pi/ALGOL-W
\ No newline at end of file
diff --git a/Lang/ALGOL-W/Eulers-identity b/Lang/ALGOL-W/Eulers-identity
new file mode 120000
index 0000000000..cda4a96c63
--- /dev/null
+++ b/Lang/ALGOL-W/Eulers-identity
@@ -0,0 +1 @@
+../../Task/Eulers-identity/ALGOL-W
\ No newline at end of file
diff --git a/Lang/ALGOL-W/Factorial-primes b/Lang/ALGOL-W/Factorial-primes
new file mode 120000
index 0000000000..d855b375f0
--- /dev/null
+++ b/Lang/ALGOL-W/Factorial-primes
@@ -0,0 +1 @@
+../../Task/Factorial-primes/ALGOL-W
\ No newline at end of file
diff --git a/Lang/ALGOL-W/Meissel-Mertens-constant b/Lang/ALGOL-W/Meissel-Mertens-constant
new file mode 120000
index 0000000000..48dc998c83
--- /dev/null
+++ b/Lang/ALGOL-W/Meissel-Mertens-constant
@@ -0,0 +1 @@
+../../Task/Meissel-Mertens-constant/ALGOL-W
\ No newline at end of file
diff --git a/Lang/ALGOL-W/Mian-Chowla-sequence b/Lang/ALGOL-W/Mian-Chowla-sequence
new file mode 120000
index 0000000000..ef2068107d
--- /dev/null
+++ b/Lang/ALGOL-W/Mian-Chowla-sequence
@@ -0,0 +1 @@
+../../Task/Mian-Chowla-sequence/ALGOL-W
\ No newline at end of file
diff --git a/Lang/ANSI-BASIC/Day-of-the-week b/Lang/ANSI-BASIC/Day-of-the-week
new file mode 120000
index 0000000000..8ccffe667c
--- /dev/null
+++ b/Lang/ANSI-BASIC/Day-of-the-week
@@ -0,0 +1 @@
+../../Task/Day-of-the-week/ANSI-BASIC
\ No newline at end of file
diff --git a/Lang/ANSI-BASIC/Periodic-table b/Lang/ANSI-BASIC/Periodic-table
new file mode 120000
index 0000000000..b9e95e6595
--- /dev/null
+++ b/Lang/ANSI-BASIC/Periodic-table
@@ -0,0 +1 @@
+../../Task/Periodic-table/ANSI-BASIC
\ No newline at end of file
diff --git a/Lang/APL/Combinations b/Lang/APL/Combinations
new file mode 120000
index 0000000000..b1574b8996
--- /dev/null
+++ b/Lang/APL/Combinations
@@ -0,0 +1 @@
+../../Task/Combinations/APL
\ No newline at end of file
diff --git a/Lang/ARM-Assembly/Bifid-cipher b/Lang/ARM-Assembly/Bifid-cipher
new file mode 120000
index 0000000000..456e328d85
--- /dev/null
+++ b/Lang/ARM-Assembly/Bifid-cipher
@@ -0,0 +1 @@
+../../Task/Bifid-cipher/ARM-Assembly
\ No newline at end of file
diff --git a/Lang/ARM-Assembly/Binary-strings b/Lang/ARM-Assembly/Binary-strings
new file mode 120000
index 0000000000..a7b6ed7647
--- /dev/null
+++ b/Lang/ARM-Assembly/Binary-strings
@@ -0,0 +1 @@
+../../Task/Binary-strings/ARM-Assembly
\ No newline at end of file
diff --git a/Lang/ARM-Assembly/Comma-quibbling b/Lang/ARM-Assembly/Comma-quibbling
new file mode 120000
index 0000000000..3d3d7812f0
--- /dev/null
+++ b/Lang/ARM-Assembly/Comma-quibbling
@@ -0,0 +1 @@
+../../Task/Comma-quibbling/ARM-Assembly
\ No newline at end of file
diff --git a/Lang/ARM-Assembly/Create-an-HTML-table b/Lang/ARM-Assembly/Create-an-HTML-table
new file mode 120000
index 0000000000..72c300d67a
--- /dev/null
+++ b/Lang/ARM-Assembly/Create-an-HTML-table
@@ -0,0 +1 @@
+../../Task/Create-an-HTML-table/ARM-Assembly
\ No newline at end of file
diff --git a/Lang/ARM-Assembly/Determine-sentence-type b/Lang/ARM-Assembly/Determine-sentence-type
new file mode 120000
index 0000000000..5e77711ab2
--- /dev/null
+++ b/Lang/ARM-Assembly/Determine-sentence-type
@@ -0,0 +1 @@
+../../Task/Determine-sentence-type/ARM-Assembly
\ No newline at end of file
diff --git a/Lang/ARM-Assembly/Environment-variables b/Lang/ARM-Assembly/Environment-variables
new file mode 120000
index 0000000000..11f3baa342
--- /dev/null
+++ b/Lang/ARM-Assembly/Environment-variables
@@ -0,0 +1 @@
+../../Task/Environment-variables/ARM-Assembly
\ No newline at end of file
diff --git a/Lang/ARM-Assembly/Fibonacci-n-step-number-sequences b/Lang/ARM-Assembly/Fibonacci-n-step-number-sequences
new file mode 120000
index 0000000000..6e51a1f11e
--- /dev/null
+++ b/Lang/ARM-Assembly/Fibonacci-n-step-number-sequences
@@ -0,0 +1 @@
+../../Task/Fibonacci-n-step-number-sequences/ARM-Assembly
\ No newline at end of file
diff --git a/Lang/ARM-Assembly/Halt-and-catch-fire b/Lang/ARM-Assembly/Halt-and-catch-fire
new file mode 120000
index 0000000000..56faf31b66
--- /dev/null
+++ b/Lang/ARM-Assembly/Halt-and-catch-fire
@@ -0,0 +1 @@
+../../Task/Halt-and-catch-fire/ARM-Assembly
\ No newline at end of file
diff --git a/Lang/ARM-Assembly/Hash-from-two-arrays b/Lang/ARM-Assembly/Hash-from-two-arrays
new file mode 120000
index 0000000000..2a1c9147a6
--- /dev/null
+++ b/Lang/ARM-Assembly/Hash-from-two-arrays
@@ -0,0 +1 @@
+../../Task/Hash-from-two-arrays/ARM-Assembly
\ No newline at end of file
diff --git a/Lang/ARM-Assembly/Keyboard-input-Obtain-a-Y-or-N-response b/Lang/ARM-Assembly/Keyboard-input-Obtain-a-Y-or-N-response
new file mode 120000
index 0000000000..dc21bae989
--- /dev/null
+++ b/Lang/ARM-Assembly/Keyboard-input-Obtain-a-Y-or-N-response
@@ -0,0 +1 @@
+../../Task/Keyboard-input-Obtain-a-Y-or-N-response/ARM-Assembly
\ No newline at end of file
diff --git a/Lang/ARM-Assembly/Leonardo-numbers b/Lang/ARM-Assembly/Leonardo-numbers
new file mode 120000
index 0000000000..6639dbc2f4
--- /dev/null
+++ b/Lang/ARM-Assembly/Leonardo-numbers
@@ -0,0 +1 @@
+../../Task/Leonardo-numbers/ARM-Assembly
\ No newline at end of file
diff --git a/Lang/ARM-Assembly/Machine-code b/Lang/ARM-Assembly/Machine-code
new file mode 120000
index 0000000000..e48d9e81b2
--- /dev/null
+++ b/Lang/ARM-Assembly/Machine-code
@@ -0,0 +1 @@
+../../Task/Machine-code/ARM-Assembly
\ No newline at end of file
diff --git a/Lang/ARM-Assembly/Menu b/Lang/ARM-Assembly/Menu
new file mode 120000
index 0000000000..73a332d6f3
--- /dev/null
+++ b/Lang/ARM-Assembly/Menu
@@ -0,0 +1 @@
+../../Task/Menu/ARM-Assembly
\ No newline at end of file
diff --git a/Lang/ARM-Assembly/Phrase-reversals b/Lang/ARM-Assembly/Phrase-reversals
new file mode 120000
index 0000000000..011ca34c42
--- /dev/null
+++ b/Lang/ARM-Assembly/Phrase-reversals
@@ -0,0 +1 @@
+../../Task/Phrase-reversals/ARM-Assembly
\ No newline at end of file
diff --git a/Lang/ARM-Assembly/Read-a-configuration-file b/Lang/ARM-Assembly/Read-a-configuration-file
new file mode 120000
index 0000000000..76094b38c7
--- /dev/null
+++ b/Lang/ARM-Assembly/Read-a-configuration-file
@@ -0,0 +1 @@
+../../Task/Read-a-configuration-file/ARM-Assembly
\ No newline at end of file
diff --git a/Lang/ARM-Assembly/Repeat-a-string b/Lang/ARM-Assembly/Repeat-a-string
new file mode 120000
index 0000000000..69591f65b7
--- /dev/null
+++ b/Lang/ARM-Assembly/Repeat-a-string
@@ -0,0 +1 @@
+../../Task/Repeat-a-string/ARM-Assembly
\ No newline at end of file
diff --git a/Lang/ARM-Assembly/Reverse-words-in-a-string b/Lang/ARM-Assembly/Reverse-words-in-a-string
new file mode 120000
index 0000000000..10d177c9f9
--- /dev/null
+++ b/Lang/ARM-Assembly/Reverse-words-in-a-string
@@ -0,0 +1 @@
+../../Task/Reverse-words-in-a-string/ARM-Assembly
\ No newline at end of file
diff --git a/Lang/ARM-Assembly/Strip-block-comments b/Lang/ARM-Assembly/Strip-block-comments
new file mode 120000
index 0000000000..6a5702298a
--- /dev/null
+++ b/Lang/ARM-Assembly/Strip-block-comments
@@ -0,0 +1 @@
+../../Task/Strip-block-comments/ARM-Assembly
\ No newline at end of file
diff --git a/Lang/ARM-Assembly/Strip-comments-from-a-string b/Lang/ARM-Assembly/Strip-comments-from-a-string
new file mode 120000
index 0000000000..b01acc2585
--- /dev/null
+++ b/Lang/ARM-Assembly/Strip-comments-from-a-string
@@ -0,0 +1 @@
+../../Task/Strip-comments-from-a-string/ARM-Assembly
\ No newline at end of file
diff --git a/Lang/ARM-Assembly/Strip-whitespace-from-a-string-Top-and-tail b/Lang/ARM-Assembly/Strip-whitespace-from-a-string-Top-and-tail
new file mode 120000
index 0000000000..ba0f5a585c
--- /dev/null
+++ b/Lang/ARM-Assembly/Strip-whitespace-from-a-string-Top-and-tail
@@ -0,0 +1 @@
+../../Task/Strip-whitespace-from-a-string-Top-and-tail/ARM-Assembly
\ No newline at end of file
diff --git a/Lang/ARM-Assembly/Update-a-configuration-file b/Lang/ARM-Assembly/Update-a-configuration-file
new file mode 120000
index 0000000000..9dd67115c0
--- /dev/null
+++ b/Lang/ARM-Assembly/Update-a-configuration-file
@@ -0,0 +1 @@
+../../Task/Update-a-configuration-file/ARM-Assembly
\ No newline at end of file
diff --git a/Lang/ARM-Assembly/Vigen-re-cipher b/Lang/ARM-Assembly/Vigen-re-cipher
new file mode 120000
index 0000000000..caeb031a4b
--- /dev/null
+++ b/Lang/ARM-Assembly/Vigen-re-cipher
@@ -0,0 +1 @@
+../../Task/Vigen-re-cipher/ARM-Assembly
\ No newline at end of file
diff --git a/Lang/ARM-Assembly/Vigen-re-cipher-Cryptanalysis b/Lang/ARM-Assembly/Vigen-re-cipher-Cryptanalysis
new file mode 120000
index 0000000000..ecfd7ae59c
--- /dev/null
+++ b/Lang/ARM-Assembly/Vigen-re-cipher-Cryptanalysis
@@ -0,0 +1 @@
+../../Task/Vigen-re-cipher-Cryptanalysis/ARM-Assembly
\ No newline at end of file
diff --git a/Lang/Ada/Angles-geometric-normalization-and-conversion b/Lang/Ada/Angles-geometric-normalization-and-conversion
new file mode 120000
index 0000000000..d4d2487c81
--- /dev/null
+++ b/Lang/Ada/Angles-geometric-normalization-and-conversion
@@ -0,0 +1 @@
+../../Task/Angles-geometric-normalization-and-conversion/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Brilliant-numbers b/Lang/Ada/Brilliant-numbers
new file mode 120000
index 0000000000..80af4238ae
--- /dev/null
+++ b/Lang/Ada/Brilliant-numbers
@@ -0,0 +1 @@
+../../Task/Brilliant-numbers/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Cuban-primes b/Lang/Ada/Cuban-primes
new file mode 120000
index 0000000000..a7270c8ac4
--- /dev/null
+++ b/Lang/Ada/Cuban-primes
@@ -0,0 +1 @@
+../../Task/Cuban-primes/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Determine-sentence-type b/Lang/Ada/Determine-sentence-type
new file mode 120000
index 0000000000..df39412f47
--- /dev/null
+++ b/Lang/Ada/Determine-sentence-type
@@ -0,0 +1 @@
+../../Task/Determine-sentence-type/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Eban-numbers b/Lang/Ada/Eban-numbers
new file mode 120000
index 0000000000..8c7c83bfc9
--- /dev/null
+++ b/Lang/Ada/Eban-numbers
@@ -0,0 +1 @@
+../../Task/Eban-numbers/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Equal-prime-and-composite-sums b/Lang/Ada/Equal-prime-and-composite-sums
new file mode 120000
index 0000000000..b1a2555466
--- /dev/null
+++ b/Lang/Ada/Equal-prime-and-composite-sums
@@ -0,0 +1 @@
+../../Task/Equal-prime-and-composite-sums/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Factorial-primes b/Lang/Ada/Factorial-primes
new file mode 120000
index 0000000000..fdff310065
--- /dev/null
+++ b/Lang/Ada/Factorial-primes
@@ -0,0 +1 @@
+../../Task/Factorial-primes/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Giuga-numbers b/Lang/Ada/Giuga-numbers
new file mode 120000
index 0000000000..24ab180f54
--- /dev/null
+++ b/Lang/Ada/Giuga-numbers
@@ -0,0 +1 @@
+../../Task/Giuga-numbers/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Jacobsthal-numbers b/Lang/Ada/Jacobsthal-numbers
new file mode 120000
index 0000000000..630504cad4
--- /dev/null
+++ b/Lang/Ada/Jacobsthal-numbers
@@ -0,0 +1 @@
+../../Task/Jacobsthal-numbers/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Numbers-which-are-the-cube-roots-of-the-product-of-their-proper-divisors b/Lang/Ada/Numbers-which-are-the-cube-roots-of-the-product-of-their-proper-divisors
new file mode 120000
index 0000000000..58dcaaaaee
--- /dev/null
+++ b/Lang/Ada/Numbers-which-are-the-cube-roots-of-the-product-of-their-proper-divisors
@@ -0,0 +1 @@
+../../Task/Numbers-which-are-the-cube-roots-of-the-product-of-their-proper-divisors/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Safe-primes-and-unsafe-primes b/Lang/Ada/Safe-primes-and-unsafe-primes
new file mode 120000
index 0000000000..97b204f4de
--- /dev/null
+++ b/Lang/Ada/Safe-primes-and-unsafe-primes
@@ -0,0 +1 @@
+../../Task/Safe-primes-and-unsafe-primes/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Sleeping-Beauty-problem b/Lang/Ada/Sleeping-Beauty-problem
new file mode 120000
index 0000000000..1c2ef27d37
--- /dev/null
+++ b/Lang/Ada/Sleeping-Beauty-problem
@@ -0,0 +1 @@
+../../Task/Sleeping-Beauty-problem/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Twin-primes b/Lang/Ada/Twin-primes
new file mode 120000
index 0000000000..f368573f47
--- /dev/null
+++ b/Lang/Ada/Twin-primes
@@ -0,0 +1 @@
+../../Task/Twin-primes/Ada
\ No newline at end of file
diff --git a/Lang/Amazing-Hopper/Digital-root b/Lang/Amazing-Hopper/Digital-root
new file mode 120000
index 0000000000..22bf453215
--- /dev/null
+++ b/Lang/Amazing-Hopper/Digital-root
@@ -0,0 +1 @@
+../../Task/Digital-root/Amazing-Hopper
\ No newline at end of file
diff --git a/Lang/Amazing-Hopper/Sum-of-a-series b/Lang/Amazing-Hopper/Sum-of-a-series
new file mode 120000
index 0000000000..03635804ee
--- /dev/null
+++ b/Lang/Amazing-Hopper/Sum-of-a-series
@@ -0,0 +1 @@
+../../Task/Sum-of-a-series/Amazing-Hopper
\ No newline at end of file
diff --git a/Lang/AmigaBASIC/Animate-a-pendulum b/Lang/AmigaBASIC/Animate-a-pendulum
new file mode 120000
index 0000000000..010529e570
--- /dev/null
+++ b/Lang/AmigaBASIC/Animate-a-pendulum
@@ -0,0 +1 @@
+../../Task/Animate-a-pendulum/AmigaBASIC
\ No newline at end of file
diff --git a/Lang/Applesoft-BASIC/Determine-if-a-string-is-collapsible b/Lang/Applesoft-BASIC/Determine-if-a-string-is-collapsible
new file mode 120000
index 0000000000..02f9d8d440
--- /dev/null
+++ b/Lang/Applesoft-BASIC/Determine-if-a-string-is-collapsible
@@ -0,0 +1 @@
+../../Task/Determine-if-a-string-is-collapsible/Applesoft-BASIC
\ No newline at end of file
diff --git a/Lang/Applesoft-BASIC/Determine-if-a-string-is-squeezable b/Lang/Applesoft-BASIC/Determine-if-a-string-is-squeezable
new file mode 120000
index 0000000000..b18de01c9a
--- /dev/null
+++ b/Lang/Applesoft-BASIC/Determine-if-a-string-is-squeezable
@@ -0,0 +1 @@
+../../Task/Determine-if-a-string-is-squeezable/Applesoft-BASIC
\ No newline at end of file
diff --git a/Lang/Applesoft-BASIC/Enumerations b/Lang/Applesoft-BASIC/Enumerations
new file mode 120000
index 0000000000..aa327448dc
--- /dev/null
+++ b/Lang/Applesoft-BASIC/Enumerations
@@ -0,0 +1 @@
+../../Task/Enumerations/Applesoft-BASIC
\ No newline at end of file
diff --git a/Lang/Applesoft-BASIC/Eulers-sum-of-powers-conjecture b/Lang/Applesoft-BASIC/Eulers-sum-of-powers-conjecture
new file mode 120000
index 0000000000..814a94e748
--- /dev/null
+++ b/Lang/Applesoft-BASIC/Eulers-sum-of-powers-conjecture
@@ -0,0 +1 @@
+../../Task/Eulers-sum-of-powers-conjecture/Applesoft-BASIC
\ No newline at end of file
diff --git a/Lang/Applesoft-BASIC/Modular-inverse b/Lang/Applesoft-BASIC/Modular-inverse
new file mode 120000
index 0000000000..d8b60109c6
--- /dev/null
+++ b/Lang/Applesoft-BASIC/Modular-inverse
@@ -0,0 +1 @@
+../../Task/Modular-inverse/Applesoft-BASIC
\ No newline at end of file
diff --git a/Lang/Applesoft-BASIC/Monty-Hall-problem b/Lang/Applesoft-BASIC/Monty-Hall-problem
new file mode 120000
index 0000000000..6e0ff7bcb9
--- /dev/null
+++ b/Lang/Applesoft-BASIC/Monty-Hall-problem
@@ -0,0 +1 @@
+../../Task/Monty-Hall-problem/Applesoft-BASIC
\ No newline at end of file
diff --git a/Lang/Applesoft-BASIC/Rep-string b/Lang/Applesoft-BASIC/Rep-string
new file mode 120000
index 0000000000..ba7d92f8da
--- /dev/null
+++ b/Lang/Applesoft-BASIC/Rep-string
@@ -0,0 +1 @@
+../../Task/Rep-string/Applesoft-BASIC
\ No newline at end of file
diff --git a/Lang/Applesoft-BASIC/Sorting-algorithms-Gnome-sort b/Lang/Applesoft-BASIC/Sorting-algorithms-Gnome-sort
new file mode 120000
index 0000000000..4b7c42e62c
--- /dev/null
+++ b/Lang/Applesoft-BASIC/Sorting-algorithms-Gnome-sort
@@ -0,0 +1 @@
+../../Task/Sorting-algorithms-Gnome-sort/Applesoft-BASIC
\ No newline at end of file
diff --git a/Lang/Asymptote/Day-of-the-week b/Lang/Asymptote/Day-of-the-week
new file mode 120000
index 0000000000..f31fd61474
--- /dev/null
+++ b/Lang/Asymptote/Day-of-the-week
@@ -0,0 +1 @@
+../../Task/Day-of-the-week/Asymptote
\ No newline at end of file
diff --git a/Lang/Asymptote/Determine-sentence-type b/Lang/Asymptote/Determine-sentence-type
new file mode 120000
index 0000000000..250fb5d120
--- /dev/null
+++ b/Lang/Asymptote/Determine-sentence-type
@@ -0,0 +1 @@
+../../Task/Determine-sentence-type/Asymptote
\ No newline at end of file
diff --git a/Lang/Asymptote/Hello-world-Newline-omission b/Lang/Asymptote/Hello-world-Newline-omission
new file mode 120000
index 0000000000..1f04f08bd4
--- /dev/null
+++ b/Lang/Asymptote/Hello-world-Newline-omission
@@ -0,0 +1 @@
+../../Task/Hello-world-Newline-omission/Asymptote
\ No newline at end of file
diff --git a/Lang/Asymptote/Leonardo-numbers b/Lang/Asymptote/Leonardo-numbers
new file mode 120000
index 0000000000..53f9861f22
--- /dev/null
+++ b/Lang/Asymptote/Leonardo-numbers
@@ -0,0 +1 @@
+../../Task/Leonardo-numbers/Asymptote
\ No newline at end of file
diff --git a/Lang/Asymptote/Loops-Infinite b/Lang/Asymptote/Loops-Infinite
new file mode 120000
index 0000000000..0aa1840fd7
--- /dev/null
+++ b/Lang/Asymptote/Loops-Infinite
@@ -0,0 +1 @@
+../../Task/Loops-Infinite/Asymptote
\ No newline at end of file
diff --git a/Lang/Asymptote/Pancake-numbers b/Lang/Asymptote/Pancake-numbers
new file mode 120000
index 0000000000..de9f5cf18c
--- /dev/null
+++ b/Lang/Asymptote/Pancake-numbers
@@ -0,0 +1 @@
+../../Task/Pancake-numbers/Asymptote
\ No newline at end of file
diff --git a/Lang/Asymptote/Primality-by-trial-division b/Lang/Asymptote/Primality-by-trial-division
new file mode 120000
index 0000000000..0cfaa74cf3
--- /dev/null
+++ b/Lang/Asymptote/Primality-by-trial-division
@@ -0,0 +1 @@
+../../Task/Primality-by-trial-division/Asymptote
\ No newline at end of file
diff --git a/Lang/Asymptote/Sudan-function b/Lang/Asymptote/Sudan-function
new file mode 120000
index 0000000000..97eca50473
--- /dev/null
+++ b/Lang/Asymptote/Sudan-function
@@ -0,0 +1 @@
+../../Task/Sudan-function/Asymptote
\ No newline at end of file
diff --git a/Lang/Asymptote/Twos-complement b/Lang/Asymptote/Twos-complement
new file mode 120000
index 0000000000..a487252d4a
--- /dev/null
+++ b/Lang/Asymptote/Twos-complement
@@ -0,0 +1 @@
+../../Task/Twos-complement/Asymptote
\ No newline at end of file
diff --git a/Lang/BASIC256/Associative-array-Merging b/Lang/BASIC256/Associative-array-Merging
new file mode 120000
index 0000000000..20bef5368f
--- /dev/null
+++ b/Lang/BASIC256/Associative-array-Merging
@@ -0,0 +1 @@
+../../Task/Associative-array-Merging/BASIC256
\ No newline at end of file
diff --git a/Lang/BASIC256/Determine-if-a-string-has-all-the-same-characters b/Lang/BASIC256/Determine-if-a-string-has-all-the-same-characters
new file mode 120000
index 0000000000..0fc88a3804
--- /dev/null
+++ b/Lang/BASIC256/Determine-if-a-string-has-all-the-same-characters
@@ -0,0 +1 @@
+../../Task/Determine-if-a-string-has-all-the-same-characters/BASIC256
\ No newline at end of file
diff --git a/Lang/BASIC256/Determine-sentence-type b/Lang/BASIC256/Determine-sentence-type
new file mode 120000
index 0000000000..6be21d3753
--- /dev/null
+++ b/Lang/BASIC256/Determine-sentence-type
@@ -0,0 +1 @@
+../../Task/Determine-sentence-type/BASIC256
\ No newline at end of file
diff --git a/Lang/BASIC256/Eban-numbers b/Lang/BASIC256/Eban-numbers
new file mode 120000
index 0000000000..cc54b44b18
--- /dev/null
+++ b/Lang/BASIC256/Eban-numbers
@@ -0,0 +1 @@
+../../Task/Eban-numbers/BASIC256
\ No newline at end of file
diff --git a/Lang/BASIC256/Phrase-reversals b/Lang/BASIC256/Phrase-reversals
new file mode 120000
index 0000000000..7bce29f023
--- /dev/null
+++ b/Lang/BASIC256/Phrase-reversals
@@ -0,0 +1 @@
+../../Task/Phrase-reversals/BASIC256
\ No newline at end of file
diff --git a/Lang/BASIC256/Sailors-coconuts-and-a-monkey-problem b/Lang/BASIC256/Sailors-coconuts-and-a-monkey-problem
new file mode 120000
index 0000000000..3cfdfb5740
--- /dev/null
+++ b/Lang/BASIC256/Sailors-coconuts-and-a-monkey-problem
@@ -0,0 +1 @@
+../../Task/Sailors-coconuts-and-a-monkey-problem/BASIC256
\ No newline at end of file
diff --git a/Lang/BASIC256/Sort-disjoint-sublist b/Lang/BASIC256/Sort-disjoint-sublist
new file mode 120000
index 0000000000..4422d7b840
--- /dev/null
+++ b/Lang/BASIC256/Sort-disjoint-sublist
@@ -0,0 +1 @@
+../../Task/Sort-disjoint-sublist/BASIC256
\ No newline at end of file
diff --git a/Lang/BASIC256/Twos-complement b/Lang/BASIC256/Twos-complement
new file mode 120000
index 0000000000..8b3d33db0a
--- /dev/null
+++ b/Lang/BASIC256/Twos-complement
@@ -0,0 +1 @@
+../../Task/Twos-complement/BASIC256
\ No newline at end of file
diff --git a/Lang/BQN/Base64-decode-data b/Lang/BQN/Base64-decode-data
new file mode 120000
index 0000000000..2272b7f2a1
--- /dev/null
+++ b/Lang/BQN/Base64-decode-data
@@ -0,0 +1 @@
+../../Task/Base64-decode-data/BQN
\ No newline at end of file
diff --git a/Lang/BQN/CUSIP b/Lang/BQN/CUSIP
new file mode 120000
index 0000000000..b7ca66ab5f
--- /dev/null
+++ b/Lang/BQN/CUSIP
@@ -0,0 +1 @@
+../../Task/CUSIP/BQN
\ No newline at end of file
diff --git a/Lang/BQN/Cartesian-product-of-two-or-more-lists b/Lang/BQN/Cartesian-product-of-two-or-more-lists
new file mode 120000
index 0000000000..9eca0c70e0
--- /dev/null
+++ b/Lang/BQN/Cartesian-product-of-two-or-more-lists
@@ -0,0 +1 @@
+../../Task/Cartesian-product-of-two-or-more-lists/BQN
\ No newline at end of file
diff --git a/Lang/BQN/Determine-if-a-string-is-squeezable b/Lang/BQN/Determine-if-a-string-is-squeezable
new file mode 120000
index 0000000000..604c0583b1
--- /dev/null
+++ b/Lang/BQN/Determine-if-a-string-is-squeezable
@@ -0,0 +1 @@
+../../Task/Determine-if-a-string-is-squeezable/BQN
\ No newline at end of file
diff --git a/Lang/BQN/Harmonic-series b/Lang/BQN/Harmonic-series
new file mode 120000
index 0000000000..6efb347667
--- /dev/null
+++ b/Lang/BQN/Harmonic-series
@@ -0,0 +1 @@
+../../Task/Harmonic-series/BQN
\ No newline at end of file
diff --git a/Lang/BQN/IBAN b/Lang/BQN/IBAN
new file mode 120000
index 0000000000..501e54d38b
--- /dev/null
+++ b/Lang/BQN/IBAN
@@ -0,0 +1 @@
+../../Task/IBAN/BQN
\ No newline at end of file
diff --git a/Lang/BQN/ISBN13-check-digit b/Lang/BQN/ISBN13-check-digit
new file mode 120000
index 0000000000..70feb3a0c6
--- /dev/null
+++ b/Lang/BQN/ISBN13-check-digit
@@ -0,0 +1 @@
+../../Task/ISBN13-check-digit/BQN
\ No newline at end of file
diff --git a/Lang/BQN/Phrase-reversals b/Lang/BQN/Phrase-reversals
new file mode 120000
index 0000000000..a35381900f
--- /dev/null
+++ b/Lang/BQN/Phrase-reversals
@@ -0,0 +1 @@
+../../Task/Phrase-reversals/BQN
\ No newline at end of file
diff --git a/Lang/BQN/Self-describing-numbers b/Lang/BQN/Self-describing-numbers
new file mode 120000
index 0000000000..394307e5cb
--- /dev/null
+++ b/Lang/BQN/Self-describing-numbers
@@ -0,0 +1 @@
+../../Task/Self-describing-numbers/BQN
\ No newline at end of file
diff --git a/Lang/BQN/Sort-disjoint-sublist b/Lang/BQN/Sort-disjoint-sublist
new file mode 120000
index 0000000000..b6e62b246c
--- /dev/null
+++ b/Lang/BQN/Sort-disjoint-sublist
@@ -0,0 +1 @@
+../../Task/Sort-disjoint-sublist/BQN
\ No newline at end of file
diff --git a/Lang/BQN/Water-collected-between-towers b/Lang/BQN/Water-collected-between-towers
new file mode 120000
index 0000000000..905f66c364
--- /dev/null
+++ b/Lang/BQN/Water-collected-between-towers
@@ -0,0 +1 @@
+../../Task/Water-collected-between-towers/BQN
\ No newline at end of file
diff --git a/Lang/BlooP/00-LANG.txt b/Lang/BlooP/00-LANG.txt
index 61490d18ec..d0fc3b449f 100644
--- a/Lang/BlooP/00-LANG.txt
+++ b/Lang/BlooP/00-LANG.txt
@@ -20,7 +20,7 @@ The best way to explain BlooP is really just to look at some examples, so here a
Find the factorial of N:
-
diff --git a/Lang/C++/Bitwise-IO b/Lang/C++/Bitwise-IO
new file mode 120000
index 0000000000..0612736bad
--- /dev/null
+++ b/Lang/C++/Bitwise-IO
@@ -0,0 +1 @@
+../../Task/Bitwise-IO/C++
\ No newline at end of file
diff --git a/Lang/C++/Commatizing-numbers b/Lang/C++/Commatizing-numbers
new file mode 120000
index 0000000000..96b27f445d
--- /dev/null
+++ b/Lang/C++/Commatizing-numbers
@@ -0,0 +1 @@
+../../Task/Commatizing-numbers/C++
\ No newline at end of file
diff --git a/Lang/C++/Compare-sorting-algorithms-performance b/Lang/C++/Compare-sorting-algorithms-performance
new file mode 120000
index 0000000000..8616fdb726
--- /dev/null
+++ b/Lang/C++/Compare-sorting-algorithms-performance
@@ -0,0 +1 @@
+../../Task/Compare-sorting-algorithms-performance/C++
\ No newline at end of file
diff --git a/Lang/C++/Deconvolution-2D+ b/Lang/C++/Deconvolution-2D+
new file mode 120000
index 0000000000..dba078e8e0
--- /dev/null
+++ b/Lang/C++/Deconvolution-2D+
@@ -0,0 +1 @@
+../../Task/Deconvolution-2D+/C++
\ No newline at end of file
diff --git a/Lang/C++/Documentation b/Lang/C++/Documentation
new file mode 120000
index 0000000000..dd69dde201
--- /dev/null
+++ b/Lang/C++/Documentation
@@ -0,0 +1 @@
+../../Task/Documentation/C++
\ No newline at end of file
diff --git a/Lang/C++/Dominoes b/Lang/C++/Dominoes
new file mode 120000
index 0000000000..5c79b6947b
--- /dev/null
+++ b/Lang/C++/Dominoes
@@ -0,0 +1 @@
+../../Task/Dominoes/C++
\ No newline at end of file
diff --git a/Lang/C++/Euclid-Mullin-sequence b/Lang/C++/Euclid-Mullin-sequence
new file mode 120000
index 0000000000..f743f51e54
--- /dev/null
+++ b/Lang/C++/Euclid-Mullin-sequence
@@ -0,0 +1 @@
+../../Task/Euclid-Mullin-sequence/C++
\ No newline at end of file
diff --git a/Lang/C++/Extend-your-language b/Lang/C++/Extend-your-language
new file mode 120000
index 0000000000..da1eb035c9
--- /dev/null
+++ b/Lang/C++/Extend-your-language
@@ -0,0 +1 @@
+../../Task/Extend-your-language/C++
\ No newline at end of file
diff --git a/Lang/C++/Extreme-floating-point-values b/Lang/C++/Extreme-floating-point-values
new file mode 120000
index 0000000000..36dd74b460
--- /dev/null
+++ b/Lang/C++/Extreme-floating-point-values
@@ -0,0 +1 @@
+../../Task/Extreme-floating-point-values/C++
\ No newline at end of file
diff --git a/Lang/C++/First-class-environments b/Lang/C++/First-class-environments
new file mode 120000
index 0000000000..652816150b
--- /dev/null
+++ b/Lang/C++/First-class-environments
@@ -0,0 +1 @@
+../../Task/First-class-environments/C++
\ No newline at end of file
diff --git a/Lang/C++/French-Republican-calendar b/Lang/C++/French-Republican-calendar
new file mode 120000
index 0000000000..b361af00f6
--- /dev/null
+++ b/Lang/C++/French-Republican-calendar
@@ -0,0 +1 @@
+../../Task/French-Republican-calendar/C++
\ No newline at end of file
diff --git a/Lang/C++/MD5-Implementation b/Lang/C++/MD5-Implementation
new file mode 120000
index 0000000000..b31aca0e67
--- /dev/null
+++ b/Lang/C++/MD5-Implementation
@@ -0,0 +1 @@
+../../Task/MD5-Implementation/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..221a15ac6d
--- /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++/Non-transitive-dice b/Lang/C++/Non-transitive-dice
new file mode 120000
index 0000000000..2c6300fda7
--- /dev/null
+++ b/Lang/C++/Non-transitive-dice
@@ -0,0 +1 @@
+../../Task/Non-transitive-dice/C++
\ No newline at end of file
diff --git a/Lang/C++/Rendezvous b/Lang/C++/Rendezvous
new file mode 120000
index 0000000000..b1c8af4bea
--- /dev/null
+++ b/Lang/C++/Rendezvous
@@ -0,0 +1 @@
+../../Task/Rendezvous/C++
\ No newline at end of file
diff --git a/Lang/C++/UTF-8-encode-and-decode b/Lang/C++/UTF-8-encode-and-decode
new file mode 120000
index 0000000000..a3942ee81c
--- /dev/null
+++ b/Lang/C++/UTF-8-encode-and-decode
@@ -0,0 +1 @@
+../../Task/UTF-8-encode-and-decode/C++
\ No newline at end of file
diff --git a/Lang/C/Harmonic-series b/Lang/C/Harmonic-series
new file mode 120000
index 0000000000..dfebedc2c8
--- /dev/null
+++ b/Lang/C/Harmonic-series
@@ -0,0 +1 @@
+../../Task/Harmonic-series/C
\ No newline at end of file
diff --git a/Lang/CB80/00-LANG.txt b/Lang/CB80/00-LANG.txt
index 96b8bf005c..86de52ef42 100644
--- a/Lang/CB80/00-LANG.txt
+++ b/Lang/CB80/00-LANG.txt
@@ -1 +1,2 @@
-{{language}}{{Stub}}
\ No newline at end of file
+{{language}}{{Stub}}
+CB80 is not a separate language or dialect but rather a companion compiler for the [[CBASIC]] dialect of BASIC for 8-bit CP/M systems. The CBASIC compiler compiles source code into an intermediate form, which is stored on disk with the file extension INT. The compiled code is executed by invoking a run-time interpreter (CRUN.COM) from the command line. CB80, by contrast, compiles the source into a relocatable machine code file having an REL extension, which is then linked with necessary run-time library routines using the supplied linker (either LINK.COM or LK80.COM), to create a stand-alone executable file with the extension COM, which can be run simply by typing its name on the CP/M command-line. All of the posted CBASIC examples on Rosetta Code as of 9/14/2024 will compile and run without change under CB80. One subtle difference which could affect some programs lies in the behavior of the FOR .. NEXT statement. When run under CBASIC the body of the statement will always be executed at least once even if the index variable exceeds the value of the stop expression. If compiled using CB80, however, the loop will not be executed under those circumstances.
\ No newline at end of file
diff --git a/Lang/CBASIC/00-LANG.txt b/Lang/CBASIC/00-LANG.txt
new file mode 100644
index 0000000000..f0ff8ea32b
--- /dev/null
+++ b/Lang/CBASIC/00-LANG.txt
@@ -0,0 +1,21 @@
+{{stub}} {{language|CBASIC}}
+CBASIC was the commercial outgrowth of the BASIC-E compiler
+written by Gordon Eubanks as his Master's thesis while a
+student at the Naval Postgraduate School. CBASIC -- which
+was marketed for both 8 and 16 bit CP/M systems -- differed from
+many of the BASIC dialects of the day in two major respects:
+(1) line numbers were not required unless the statement was
+the target of a GOTO or GOSUB statement (and were in any event
+treated simply as labels) and (2) real (floating point) variables
+were implemented as 14-digit binary coded decimal (BCD), which,
+particularly in business and accounting applications, avoided round-off
+errors which purely binary floating point computations were prone
+to. Integer and string variables (which required % and $ suffixes,
+respectively) were also provided, as well as multi-dimensional arrays.
+Identifiers could be of any length, although only the first 31
+characters were significant. CBASIC supported multiline user-defined
+functions with parameters passed by value but did not support recursion.
+CBASIC was implemented as a compiler-interpreter: the source code was
+compiled into an intermediate form, which could then be executed by
+invoking a run-time interpreter. A companion compiler, [[CB80]], was
+offered that compiled to machine code.
\ No newline at end of file
diff --git a/Lang/CBASIC/00-META.yaml b/Lang/CBASIC/00-META.yaml
new file mode 100644
index 0000000000..ad24e74664
--- /dev/null
+++ b/Lang/CBASIC/00-META.yaml
@@ -0,0 +1,2 @@
+---
+from: http://rosettacode.org/wiki/Category:CBASIC
diff --git a/Lang/CBASIC/100-doors b/Lang/CBASIC/100-doors
new file mode 120000
index 0000000000..e01a233041
--- /dev/null
+++ b/Lang/CBASIC/100-doors
@@ -0,0 +1 @@
+../../Task/100-doors/CBASIC
\ No newline at end of file
diff --git a/Lang/CBASIC/Amicable-pairs b/Lang/CBASIC/Amicable-pairs
new file mode 120000
index 0000000000..6386efc2a5
--- /dev/null
+++ b/Lang/CBASIC/Amicable-pairs
@@ -0,0 +1 @@
+../../Task/Amicable-pairs/CBASIC
\ No newline at end of file
diff --git a/Lang/CBASIC/Binary-digits b/Lang/CBASIC/Binary-digits
new file mode 120000
index 0000000000..d0de913861
--- /dev/null
+++ b/Lang/CBASIC/Binary-digits
@@ -0,0 +1 @@
+../../Task/Binary-digits/CBASIC
\ No newline at end of file
diff --git a/Lang/CBASIC/Fibonacci-sequence b/Lang/CBASIC/Fibonacci-sequence
new file mode 120000
index 0000000000..eb9f8cf7a1
--- /dev/null
+++ b/Lang/CBASIC/Fibonacci-sequence
@@ -0,0 +1 @@
+../../Task/Fibonacci-sequence/CBASIC
\ No newline at end of file
diff --git a/Lang/CBASIC/Harmonic-series b/Lang/CBASIC/Harmonic-series
new file mode 120000
index 0000000000..aa1eac83fa
--- /dev/null
+++ b/Lang/CBASIC/Harmonic-series
@@ -0,0 +1 @@
+../../Task/Harmonic-series/CBASIC
\ No newline at end of file
diff --git a/Lang/CBASIC/Perfect-numbers b/Lang/CBASIC/Perfect-numbers
new file mode 120000
index 0000000000..3f847760d8
--- /dev/null
+++ b/Lang/CBASIC/Perfect-numbers
@@ -0,0 +1 @@
+../../Task/Perfect-numbers/CBASIC
\ No newline at end of file
diff --git a/Lang/CBASIC/Rot-13 b/Lang/CBASIC/Rot-13
new file mode 120000
index 0000000000..bbda100cd2
--- /dev/null
+++ b/Lang/CBASIC/Rot-13
@@ -0,0 +1 @@
+../../Task/Rot-13/CBASIC
\ No newline at end of file
diff --git a/Lang/CBASIC/Sieve-of-Eratosthenes b/Lang/CBASIC/Sieve-of-Eratosthenes
new file mode 120000
index 0000000000..ecdf66656a
--- /dev/null
+++ b/Lang/CBASIC/Sieve-of-Eratosthenes
@@ -0,0 +1 @@
+../../Task/Sieve-of-Eratosthenes/CBASIC
\ No newline at end of file
diff --git a/Lang/COBOL/Cullen-and-Woodall-numbers b/Lang/COBOL/Cullen-and-Woodall-numbers
new file mode 120000
index 0000000000..b212ad96a5
--- /dev/null
+++ b/Lang/COBOL/Cullen-and-Woodall-numbers
@@ -0,0 +1 @@
+../../Task/Cullen-and-Woodall-numbers/COBOL
\ No newline at end of file
diff --git a/Lang/COBOL/Leonardo-numbers b/Lang/COBOL/Leonardo-numbers
new file mode 120000
index 0000000000..65bc7509a4
--- /dev/null
+++ b/Lang/COBOL/Leonardo-numbers
@@ -0,0 +1 @@
+../../Task/Leonardo-numbers/COBOL
\ No newline at end of file
diff --git a/Lang/COBOL/Pancake-numbers b/Lang/COBOL/Pancake-numbers
new file mode 120000
index 0000000000..22e5574a28
--- /dev/null
+++ b/Lang/COBOL/Pancake-numbers
@@ -0,0 +1 @@
+../../Task/Pancake-numbers/COBOL
\ No newline at end of file
diff --git a/Lang/COBOL/The-Name-Game b/Lang/COBOL/The-Name-Game
new file mode 120000
index 0000000000..35866ecb72
--- /dev/null
+++ b/Lang/COBOL/The-Name-Game
@@ -0,0 +1 @@
+../../Task/The-Name-Game/COBOL
\ No newline at end of file
diff --git a/Lang/COBOL/Twos-complement b/Lang/COBOL/Twos-complement
new file mode 120000
index 0000000000..776801b9e2
--- /dev/null
+++ b/Lang/COBOL/Twos-complement
@@ -0,0 +1 @@
+../../Task/Twos-complement/COBOL
\ No newline at end of file
diff --git a/Lang/Chipmunk-Basic/Associative-array-Merging b/Lang/Chipmunk-Basic/Associative-array-Merging
new file mode 120000
index 0000000000..dd87e8e06c
--- /dev/null
+++ b/Lang/Chipmunk-Basic/Associative-array-Merging
@@ -0,0 +1 @@
+../../Task/Associative-array-Merging/Chipmunk-Basic
\ No newline at end of file
diff --git a/Lang/Chipmunk-Basic/Determine-sentence-type b/Lang/Chipmunk-Basic/Determine-sentence-type
new file mode 120000
index 0000000000..6851894430
--- /dev/null
+++ b/Lang/Chipmunk-Basic/Determine-sentence-type
@@ -0,0 +1 @@
+../../Task/Determine-sentence-type/Chipmunk-Basic
\ No newline at end of file
diff --git a/Lang/Chipmunk-Basic/Eban-numbers b/Lang/Chipmunk-Basic/Eban-numbers
new file mode 120000
index 0000000000..109253525e
--- /dev/null
+++ b/Lang/Chipmunk-Basic/Eban-numbers
@@ -0,0 +1 @@
+../../Task/Eban-numbers/Chipmunk-Basic
\ No newline at end of file
diff --git a/Lang/Chipmunk-Basic/Generate-lower-case-ASCII-alphabet b/Lang/Chipmunk-Basic/Generate-lower-case-ASCII-alphabet
new file mode 120000
index 0000000000..22e12f5ab0
--- /dev/null
+++ b/Lang/Chipmunk-Basic/Generate-lower-case-ASCII-alphabet
@@ -0,0 +1 @@
+../../Task/Generate-lower-case-ASCII-alphabet/Chipmunk-Basic
\ No newline at end of file
diff --git a/Lang/Chipmunk-Basic/Leonardo-numbers b/Lang/Chipmunk-Basic/Leonardo-numbers
new file mode 120000
index 0000000000..65f7e68a9b
--- /dev/null
+++ b/Lang/Chipmunk-Basic/Leonardo-numbers
@@ -0,0 +1 @@
+../../Task/Leonardo-numbers/Chipmunk-Basic
\ No newline at end of file
diff --git a/Lang/Chipmunk-Basic/Pascals-triangle b/Lang/Chipmunk-Basic/Pascals-triangle
new file mode 120000
index 0000000000..aa62c07130
--- /dev/null
+++ b/Lang/Chipmunk-Basic/Pascals-triangle
@@ -0,0 +1 @@
+../../Task/Pascals-triangle/Chipmunk-Basic
\ No newline at end of file
diff --git a/Lang/Chipmunk-Basic/Perfect-numbers b/Lang/Chipmunk-Basic/Perfect-numbers
new file mode 120000
index 0000000000..4bd1876580
--- /dev/null
+++ b/Lang/Chipmunk-Basic/Perfect-numbers
@@ -0,0 +1 @@
+../../Task/Perfect-numbers/Chipmunk-Basic
\ No newline at end of file
diff --git a/Lang/Chipmunk-Basic/Phrase-reversals b/Lang/Chipmunk-Basic/Phrase-reversals
new file mode 120000
index 0000000000..3d4b70a430
--- /dev/null
+++ b/Lang/Chipmunk-Basic/Phrase-reversals
@@ -0,0 +1 @@
+../../Task/Phrase-reversals/Chipmunk-Basic
\ No newline at end of file
diff --git a/Lang/Chipmunk-Basic/Shell-one-liner b/Lang/Chipmunk-Basic/Shell-one-liner
new file mode 120000
index 0000000000..a90b838683
--- /dev/null
+++ b/Lang/Chipmunk-Basic/Shell-one-liner
@@ -0,0 +1 @@
+../../Task/Shell-one-liner/Chipmunk-Basic
\ No newline at end of file
diff --git a/Lang/Chipmunk-Basic/Split-a-character-string-based-on-change-of-character b/Lang/Chipmunk-Basic/Split-a-character-string-based-on-change-of-character
new file mode 120000
index 0000000000..ae1d1da2a7
--- /dev/null
+++ b/Lang/Chipmunk-Basic/Split-a-character-string-based-on-change-of-character
@@ -0,0 +1 @@
+../../Task/Split-a-character-string-based-on-change-of-character/Chipmunk-Basic
\ No newline at end of file
diff --git a/Lang/Chipmunk-Basic/Sudan-function b/Lang/Chipmunk-Basic/Sudan-function
new file mode 120000
index 0000000000..8b26708ee8
--- /dev/null
+++ b/Lang/Chipmunk-Basic/Sudan-function
@@ -0,0 +1 @@
+../../Task/Sudan-function/Chipmunk-Basic
\ No newline at end of file
diff --git a/Lang/Chipmunk-Basic/Sum-of-a-series b/Lang/Chipmunk-Basic/Sum-of-a-series
new file mode 120000
index 0000000000..f9bdcf9a6b
--- /dev/null
+++ b/Lang/Chipmunk-Basic/Sum-of-a-series
@@ -0,0 +1 @@
+../../Task/Sum-of-a-series/Chipmunk-Basic
\ No newline at end of file
diff --git a/Lang/Chipmunk-Basic/The-Name-Game b/Lang/Chipmunk-Basic/The-Name-Game
new file mode 120000
index 0000000000..5655525e11
--- /dev/null
+++ b/Lang/Chipmunk-Basic/The-Name-Game
@@ -0,0 +1 @@
+../../Task/The-Name-Game/Chipmunk-Basic
\ No newline at end of file
diff --git a/Lang/Chipmunk-Basic/Twos-complement b/Lang/Chipmunk-Basic/Twos-complement
new file mode 120000
index 0000000000..4eb5b36880
--- /dev/null
+++ b/Lang/Chipmunk-Basic/Twos-complement
@@ -0,0 +1 @@
+../../Task/Twos-complement/Chipmunk-Basic
\ No newline at end of file
diff --git a/Lang/Dart/Cullen-and-Woodall-numbers b/Lang/Dart/Cullen-and-Woodall-numbers
new file mode 120000
index 0000000000..573f34cd4f
--- /dev/null
+++ b/Lang/Dart/Cullen-and-Woodall-numbers
@@ -0,0 +1 @@
+../../Task/Cullen-and-Woodall-numbers/Dart
\ No newline at end of file
diff --git a/Lang/Dart/Day-of-the-week b/Lang/Dart/Day-of-the-week
new file mode 120000
index 0000000000..15dd0e18f6
--- /dev/null
+++ b/Lang/Dart/Day-of-the-week
@@ -0,0 +1 @@
+../../Task/Day-of-the-week/Dart
\ No newline at end of file
diff --git a/Lang/Dart/Determine-sentence-type b/Lang/Dart/Determine-sentence-type
new file mode 120000
index 0000000000..cbfbfb1793
--- /dev/null
+++ b/Lang/Dart/Determine-sentence-type
@@ -0,0 +1 @@
+../../Task/Determine-sentence-type/Dart
\ No newline at end of file
diff --git a/Lang/Dart/Generate-lower-case-ASCII-alphabet b/Lang/Dart/Generate-lower-case-ASCII-alphabet
new file mode 120000
index 0000000000..947014123e
--- /dev/null
+++ b/Lang/Dart/Generate-lower-case-ASCII-alphabet
@@ -0,0 +1 @@
+../../Task/Generate-lower-case-ASCII-alphabet/Dart
\ No newline at end of file
diff --git a/Lang/Dart/Jewels-and-stones b/Lang/Dart/Jewels-and-stones
new file mode 120000
index 0000000000..8673bcd41d
--- /dev/null
+++ b/Lang/Dart/Jewels-and-stones
@@ -0,0 +1 @@
+../../Task/Jewels-and-stones/Dart
\ No newline at end of file
diff --git a/Lang/Dart/Leonardo-numbers b/Lang/Dart/Leonardo-numbers
new file mode 120000
index 0000000000..93d2f002c1
--- /dev/null
+++ b/Lang/Dart/Leonardo-numbers
@@ -0,0 +1 @@
+../../Task/Leonardo-numbers/Dart
\ No newline at end of file
diff --git a/Lang/Dart/Pancake-numbers b/Lang/Dart/Pancake-numbers
new file mode 120000
index 0000000000..78b8078b97
--- /dev/null
+++ b/Lang/Dart/Pancake-numbers
@@ -0,0 +1 @@
+../../Task/Pancake-numbers/Dart
\ No newline at end of file
diff --git a/Lang/Dart/Partition-function-P b/Lang/Dart/Partition-function-P
new file mode 120000
index 0000000000..9146b4b231
--- /dev/null
+++ b/Lang/Dart/Partition-function-P
@@ -0,0 +1 @@
+../../Task/Partition-function-P/Dart
\ No newline at end of file
diff --git a/Lang/Dart/Sorting-algorithms-Gnome-sort b/Lang/Dart/Sorting-algorithms-Gnome-sort
new file mode 120000
index 0000000000..0f0280ed89
--- /dev/null
+++ b/Lang/Dart/Sorting-algorithms-Gnome-sort
@@ -0,0 +1 @@
+../../Task/Sorting-algorithms-Gnome-sort/Dart
\ No newline at end of file
diff --git a/Lang/Dart/Split-a-character-string-based-on-change-of-character b/Lang/Dart/Split-a-character-string-based-on-change-of-character
new file mode 120000
index 0000000000..06c92b1b7c
--- /dev/null
+++ b/Lang/Dart/Split-a-character-string-based-on-change-of-character
@@ -0,0 +1 @@
+../../Task/Split-a-character-string-based-on-change-of-character/Dart
\ No newline at end of file
diff --git a/Lang/Dart/The-Name-Game b/Lang/Dart/The-Name-Game
new file mode 120000
index 0000000000..41a16ad1a3
--- /dev/null
+++ b/Lang/Dart/The-Name-Game
@@ -0,0 +1 @@
+../../Task/The-Name-Game/Dart
\ No newline at end of file
diff --git a/Lang/Draco/Cullen-and-Woodall-numbers b/Lang/Draco/Cullen-and-Woodall-numbers
new file mode 120000
index 0000000000..4559430dd4
--- /dev/null
+++ b/Lang/Draco/Cullen-and-Woodall-numbers
@@ -0,0 +1 @@
+../../Task/Cullen-and-Woodall-numbers/Draco
\ No newline at end of file
diff --git a/Lang/EDSAC-order-code/Numerical-integration-Gauss-Legendre-Quadrature b/Lang/EDSAC-order-code/Numerical-integration-Gauss-Legendre-Quadrature
new file mode 120000
index 0000000000..f518a6e1fc
--- /dev/null
+++ b/Lang/EDSAC-order-code/Numerical-integration-Gauss-Legendre-Quadrature
@@ -0,0 +1 @@
+../../Task/Numerical-integration-Gauss-Legendre-Quadrature/EDSAC-order-code
\ No newline at end of file
diff --git a/Lang/EDSAC-order-code/Water-collected-between-towers b/Lang/EDSAC-order-code/Water-collected-between-towers
new file mode 120000
index 0000000000..7c9456760f
--- /dev/null
+++ b/Lang/EDSAC-order-code/Water-collected-between-towers
@@ -0,0 +1 @@
+../../Task/Water-collected-between-towers/EDSAC-order-code
\ No newline at end of file
diff --git a/Lang/EMal/00-LANG.txt b/Lang/EMal/00-LANG.txt
index 9ecf11d932..d01be43a3a 100644
--- a/Lang/EMal/00-LANG.txt
+++ b/Lang/EMal/00-LANG.txt
@@ -8,7 +8,9 @@
|gc=yes}}
EMal is a prototyping programming language that supports english and italian syntax.
-EMal wants to be expressive and easy to read.
+EMal wants to be expressive and readable. It supports closures, classes, records; it's influenced by Java, Perl, Javascript.
+
+The programming environment consists of an interpreter that directly navigates the AST produced by the parser.
This is an example that, inside the same script, calculates F10 = 55 in english and in italian:
diff --git a/Lang/EMal/ABC-problem b/Lang/EMal/ABC-problem
new file mode 120000
index 0000000000..4b49dc2baf
--- /dev/null
+++ b/Lang/EMal/ABC-problem
@@ -0,0 +1 @@
+../../Task/ABC-problem/EMal
\ No newline at end of file
diff --git a/Lang/EMal/Determine-if-a-string-is-squeezable b/Lang/EMal/Determine-if-a-string-is-squeezable
new file mode 120000
index 0000000000..27c56fc092
--- /dev/null
+++ b/Lang/EMal/Determine-if-a-string-is-squeezable
@@ -0,0 +1 @@
+../../Task/Determine-if-a-string-is-squeezable/EMal
\ No newline at end of file
diff --git a/Lang/EMal/Dynamic-variable-names b/Lang/EMal/Dynamic-variable-names
new file mode 120000
index 0000000000..28a70b20a1
--- /dev/null
+++ b/Lang/EMal/Dynamic-variable-names
@@ -0,0 +1 @@
+../../Task/Dynamic-variable-names/EMal
\ No newline at end of file
diff --git a/Lang/EMal/Greatest-common-divisor b/Lang/EMal/Greatest-common-divisor
new file mode 120000
index 0000000000..5a6de213e1
--- /dev/null
+++ b/Lang/EMal/Greatest-common-divisor
@@ -0,0 +1 @@
+../../Task/Greatest-common-divisor/EMal
\ No newline at end of file
diff --git a/Lang/EMal/Halt-and-catch-fire b/Lang/EMal/Halt-and-catch-fire
new file mode 120000
index 0000000000..63015fddfa
--- /dev/null
+++ b/Lang/EMal/Halt-and-catch-fire
@@ -0,0 +1 @@
+../../Task/Halt-and-catch-fire/EMal
\ No newline at end of file
diff --git a/Lang/EMal/Nth-root b/Lang/EMal/Nth-root
new file mode 120000
index 0000000000..58e1f9e30f
--- /dev/null
+++ b/Lang/EMal/Nth-root
@@ -0,0 +1 @@
+../../Task/Nth-root/EMal
\ No newline at end of file
diff --git a/Lang/EMal/Sorting-algorithms-Bubble-sort b/Lang/EMal/Sorting-algorithms-Bubble-sort
new file mode 120000
index 0000000000..53f744e6e9
--- /dev/null
+++ b/Lang/EMal/Sorting-algorithms-Bubble-sort
@@ -0,0 +1 @@
+../../Task/Sorting-algorithms-Bubble-sort/EMal
\ No newline at end of file
diff --git a/Lang/EMal/Sorting-algorithms-Stooge-sort b/Lang/EMal/Sorting-algorithms-Stooge-sort
new file mode 120000
index 0000000000..05296c2a09
--- /dev/null
+++ b/Lang/EMal/Sorting-algorithms-Stooge-sort
@@ -0,0 +1 @@
+../../Task/Sorting-algorithms-Stooge-sort/EMal
\ No newline at end of file
diff --git a/Lang/EMal/String-comparison b/Lang/EMal/String-comparison
new file mode 120000
index 0000000000..02b430a538
--- /dev/null
+++ b/Lang/EMal/String-comparison
@@ -0,0 +1 @@
+../../Task/String-comparison/EMal
\ No newline at end of file
diff --git a/Lang/EasyLang/24-game b/Lang/EasyLang/24-game
new file mode 120000
index 0000000000..85da2301e7
--- /dev/null
+++ b/Lang/EasyLang/24-game
@@ -0,0 +1 @@
+../../Task/24-game/EasyLang
\ No newline at end of file
diff --git a/Lang/EasyLang/Associative-array-Merging b/Lang/EasyLang/Associative-array-Merging
new file mode 120000
index 0000000000..efe48db36d
--- /dev/null
+++ b/Lang/EasyLang/Associative-array-Merging
@@ -0,0 +1 @@
+../../Task/Associative-array-Merging/EasyLang
\ No newline at end of file
diff --git a/Lang/EasyLang/Bioinformatics-Sequence-mutation b/Lang/EasyLang/Bioinformatics-Sequence-mutation
new file mode 120000
index 0000000000..6d30bfa11e
--- /dev/null
+++ b/Lang/EasyLang/Bioinformatics-Sequence-mutation
@@ -0,0 +1 @@
+../../Task/Bioinformatics-Sequence-mutation/EasyLang
\ No newline at end of file
diff --git a/Lang/EasyLang/Brace-expansion b/Lang/EasyLang/Brace-expansion
new file mode 120000
index 0000000000..fadaa7c96a
--- /dev/null
+++ b/Lang/EasyLang/Brace-expansion
@@ -0,0 +1 @@
+../../Task/Brace-expansion/EasyLang
\ No newline at end of file
diff --git a/Lang/EasyLang/Burrows-Wheeler-transform b/Lang/EasyLang/Burrows-Wheeler-transform
new file mode 120000
index 0000000000..d3dcf6a651
--- /dev/null
+++ b/Lang/EasyLang/Burrows-Wheeler-transform
@@ -0,0 +1 @@
+../../Task/Burrows-Wheeler-transform/EasyLang
\ No newline at end of file
diff --git a/Lang/EasyLang/CRC-32 b/Lang/EasyLang/CRC-32
new file mode 120000
index 0000000000..75d250a063
--- /dev/null
+++ b/Lang/EasyLang/CRC-32
@@ -0,0 +1 @@
+../../Task/CRC-32/EasyLang
\ No newline at end of file
diff --git a/Lang/EasyLang/Cheryls-birthday b/Lang/EasyLang/Cheryls-birthday
new file mode 120000
index 0000000000..da4092e3ea
--- /dev/null
+++ b/Lang/EasyLang/Cheryls-birthday
@@ -0,0 +1 @@
+../../Task/Cheryls-birthday/EasyLang
\ No newline at end of file
diff --git a/Lang/EasyLang/Date-format b/Lang/EasyLang/Date-format
new file mode 120000
index 0000000000..443f76ed6a
--- /dev/null
+++ b/Lang/EasyLang/Date-format
@@ -0,0 +1 @@
+../../Task/Date-format/EasyLang
\ No newline at end of file
diff --git a/Lang/EasyLang/Deconvolution-1D b/Lang/EasyLang/Deconvolution-1D
new file mode 120000
index 0000000000..7dba9ab208
--- /dev/null
+++ b/Lang/EasyLang/Deconvolution-1D
@@ -0,0 +1 @@
+../../Task/Deconvolution-1D/EasyLang
\ No newline at end of file
diff --git a/Lang/EasyLang/Deepcopy b/Lang/EasyLang/Deepcopy
new file mode 120000
index 0000000000..4137c6d590
--- /dev/null
+++ b/Lang/EasyLang/Deepcopy
@@ -0,0 +1 @@
+../../Task/Deepcopy/EasyLang
\ No newline at end of file
diff --git a/Lang/EasyLang/Determinant-and-permanent b/Lang/EasyLang/Determinant-and-permanent
new file mode 120000
index 0000000000..09ae422506
--- /dev/null
+++ b/Lang/EasyLang/Determinant-and-permanent
@@ -0,0 +1 @@
+../../Task/Determinant-and-permanent/EasyLang
\ No newline at end of file
diff --git a/Lang/EasyLang/Eulers-identity b/Lang/EasyLang/Eulers-identity
new file mode 120000
index 0000000000..6753a604ea
--- /dev/null
+++ b/Lang/EasyLang/Eulers-identity
@@ -0,0 +1 @@
+../../Task/Eulers-identity/EasyLang
\ No newline at end of file
diff --git a/Lang/EasyLang/Fast-Fourier-transform b/Lang/EasyLang/Fast-Fourier-transform
new file mode 120000
index 0000000000..6486d41d10
--- /dev/null
+++ b/Lang/EasyLang/Fast-Fourier-transform
@@ -0,0 +1 @@
+../../Task/Fast-Fourier-transform/EasyLang
\ No newline at end of file
diff --git a/Lang/EasyLang/Find-if-a-point-is-within-a-triangle b/Lang/EasyLang/Find-if-a-point-is-within-a-triangle
new file mode 120000
index 0000000000..cd1bb80075
--- /dev/null
+++ b/Lang/EasyLang/Find-if-a-point-is-within-a-triangle
@@ -0,0 +1 @@
+../../Task/Find-if-a-point-is-within-a-triangle/EasyLang
\ No newline at end of file
diff --git a/Lang/EasyLang/Floyd-Warshall-algorithm b/Lang/EasyLang/Floyd-Warshall-algorithm
new file mode 120000
index 0000000000..3210a33bb1
--- /dev/null
+++ b/Lang/EasyLang/Floyd-Warshall-algorithm
@@ -0,0 +1 @@
+../../Task/Floyd-Warshall-algorithm/EasyLang
\ No newline at end of file
diff --git a/Lang/EasyLang/Fortunate-numbers b/Lang/EasyLang/Fortunate-numbers
new file mode 120000
index 0000000000..2c6e02874b
--- /dev/null
+++ b/Lang/EasyLang/Fortunate-numbers
@@ -0,0 +1 @@
+../../Task/Fortunate-numbers/EasyLang
\ No newline at end of file
diff --git a/Lang/EasyLang/Forward-difference b/Lang/EasyLang/Forward-difference
new file mode 120000
index 0000000000..12de7eedb0
--- /dev/null
+++ b/Lang/EasyLang/Forward-difference
@@ -0,0 +1 @@
+../../Task/Forward-difference/EasyLang
\ No newline at end of file
diff --git a/Lang/EasyLang/Heronian-triangles b/Lang/EasyLang/Heronian-triangles
new file mode 120000
index 0000000000..8656dc59f0
--- /dev/null
+++ b/Lang/EasyLang/Heronian-triangles
@@ -0,0 +1 @@
+../../Task/Heronian-triangles/EasyLang
\ No newline at end of file
diff --git a/Lang/EasyLang/Hex-words b/Lang/EasyLang/Hex-words
new file mode 120000
index 0000000000..0d39e2eee9
--- /dev/null
+++ b/Lang/EasyLang/Hex-words
@@ -0,0 +1 @@
+../../Task/Hex-words/EasyLang
\ No newline at end of file
diff --git a/Lang/EasyLang/Idiomatically-determine-all-the-characters-that-can-be-used-for-symbols b/Lang/EasyLang/Idiomatically-determine-all-the-characters-that-can-be-used-for-symbols
new file mode 120000
index 0000000000..ff1573925b
--- /dev/null
+++ b/Lang/EasyLang/Idiomatically-determine-all-the-characters-that-can-be-used-for-symbols
@@ -0,0 +1 @@
+../../Task/Idiomatically-determine-all-the-characters-that-can-be-used-for-symbols/EasyLang
\ No newline at end of file
diff --git a/Lang/EasyLang/Isograms-and-heterograms b/Lang/EasyLang/Isograms-and-heterograms
new file mode 120000
index 0000000000..44f53b57ff
--- /dev/null
+++ b/Lang/EasyLang/Isograms-and-heterograms
@@ -0,0 +1 @@
+../../Task/Isograms-and-heterograms/EasyLang
\ No newline at end of file
diff --git a/Lang/EasyLang/Jacobi-symbol b/Lang/EasyLang/Jacobi-symbol
new file mode 120000
index 0000000000..fec464ee0d
--- /dev/null
+++ b/Lang/EasyLang/Jacobi-symbol
@@ -0,0 +1 @@
+../../Task/Jacobi-symbol/EasyLang
\ No newline at end of file
diff --git a/Lang/EasyLang/Jaro-Winkler-distance b/Lang/EasyLang/Jaro-Winkler-distance
new file mode 120000
index 0000000000..727f74b880
--- /dev/null
+++ b/Lang/EasyLang/Jaro-Winkler-distance
@@ -0,0 +1 @@
+../../Task/Jaro-Winkler-distance/EasyLang
\ No newline at end of file
diff --git a/Lang/EasyLang/Jaro-similarity b/Lang/EasyLang/Jaro-similarity
new file mode 120000
index 0000000000..d630573e8e
--- /dev/null
+++ b/Lang/EasyLang/Jaro-similarity
@@ -0,0 +1 @@
+../../Task/Jaro-similarity/EasyLang
\ No newline at end of file
diff --git a/Lang/EasyLang/Keyboard-input-Keypress-check b/Lang/EasyLang/Keyboard-input-Keypress-check
new file mode 120000
index 0000000000..749a963892
--- /dev/null
+++ b/Lang/EasyLang/Keyboard-input-Keypress-check
@@ -0,0 +1 @@
+../../Task/Keyboard-input-Keypress-check/EasyLang
\ No newline at end of file
diff --git a/Lang/EasyLang/Keyboard-input-Obtain-a-Y-or-N-response b/Lang/EasyLang/Keyboard-input-Obtain-a-Y-or-N-response
new file mode 120000
index 0000000000..afc72ecd9d
--- /dev/null
+++ b/Lang/EasyLang/Keyboard-input-Obtain-a-Y-or-N-response
@@ -0,0 +1 @@
+../../Task/Keyboard-input-Obtain-a-Y-or-N-response/EasyLang
\ No newline at end of file
diff --git a/Lang/EasyLang/Knapsack-problem-Bounded b/Lang/EasyLang/Knapsack-problem-Bounded
new file mode 120000
index 0000000000..d0f7a40df2
--- /dev/null
+++ b/Lang/EasyLang/Knapsack-problem-Bounded
@@ -0,0 +1 @@
+../../Task/Knapsack-problem-Bounded/EasyLang
\ No newline at end of file
diff --git a/Lang/EasyLang/Knapsack-problem-Continuous b/Lang/EasyLang/Knapsack-problem-Continuous
new file mode 120000
index 0000000000..a54e4a1363
--- /dev/null
+++ b/Lang/EasyLang/Knapsack-problem-Continuous
@@ -0,0 +1 @@
+../../Task/Knapsack-problem-Continuous/EasyLang
\ No newline at end of file
diff --git a/Lang/EasyLang/Knapsack-problem-Unbounded b/Lang/EasyLang/Knapsack-problem-Unbounded
new file mode 120000
index 0000000000..feaf22d24e
--- /dev/null
+++ b/Lang/EasyLang/Knapsack-problem-Unbounded
@@ -0,0 +1 @@
+../../Task/Knapsack-problem-Unbounded/EasyLang
\ No newline at end of file
diff --git a/Lang/EasyLang/Knights-tour b/Lang/EasyLang/Knights-tour
new file mode 120000
index 0000000000..c3c72273c2
--- /dev/null
+++ b/Lang/EasyLang/Knights-tour
@@ -0,0 +1 @@
+../../Task/Knights-tour/EasyLang
\ No newline at end of file
diff --git a/Lang/EasyLang/Kolakoski-sequence b/Lang/EasyLang/Kolakoski-sequence
new file mode 120000
index 0000000000..0d808caea4
--- /dev/null
+++ b/Lang/EasyLang/Kolakoski-sequence
@@ -0,0 +1 @@
+../../Task/Kolakoski-sequence/EasyLang
\ No newline at end of file
diff --git a/Lang/EasyLang/Kosaraju b/Lang/EasyLang/Kosaraju
new file mode 120000
index 0000000000..84b9e66a67
--- /dev/null
+++ b/Lang/EasyLang/Kosaraju
@@ -0,0 +1 @@
+../../Task/Kosaraju/EasyLang
\ No newline at end of file
diff --git a/Lang/EasyLang/Law-of-cosines---triples b/Lang/EasyLang/Law-of-cosines---triples
new file mode 120000
index 0000000000..c863a3f9c0
--- /dev/null
+++ b/Lang/EasyLang/Law-of-cosines---triples
@@ -0,0 +1 @@
+../../Task/Law-of-cosines---triples/EasyLang
\ No newline at end of file
diff --git a/Lang/EasyLang/List-rooted-trees b/Lang/EasyLang/List-rooted-trees
new file mode 120000
index 0000000000..14cdfaa5a6
--- /dev/null
+++ b/Lang/EasyLang/List-rooted-trees
@@ -0,0 +1 @@
+../../Task/List-rooted-trees/EasyLang
\ No newline at end of file
diff --git a/Lang/EasyLang/Magic-squares-of-doubly-even-order b/Lang/EasyLang/Magic-squares-of-doubly-even-order
new file mode 120000
index 0000000000..b5f41f3cca
--- /dev/null
+++ b/Lang/EasyLang/Magic-squares-of-doubly-even-order
@@ -0,0 +1 @@
+../../Task/Magic-squares-of-doubly-even-order/EasyLang
\ No newline at end of file
diff --git a/Lang/EasyLang/Magic-squares-of-singly-even-order b/Lang/EasyLang/Magic-squares-of-singly-even-order
new file mode 120000
index 0000000000..bffad4e9d9
--- /dev/null
+++ b/Lang/EasyLang/Magic-squares-of-singly-even-order
@@ -0,0 +1 @@
+../../Task/Magic-squares-of-singly-even-order/EasyLang
\ No newline at end of file
diff --git a/Lang/EasyLang/Matrix-chain-multiplication b/Lang/EasyLang/Matrix-chain-multiplication
new file mode 120000
index 0000000000..49b2582836
--- /dev/null
+++ b/Lang/EasyLang/Matrix-chain-multiplication
@@ -0,0 +1 @@
+../../Task/Matrix-chain-multiplication/EasyLang
\ No newline at end of file
diff --git a/Lang/EasyLang/Matrix-exponentiation-operator b/Lang/EasyLang/Matrix-exponentiation-operator
new file mode 120000
index 0000000000..ffeb77ddad
--- /dev/null
+++ b/Lang/EasyLang/Matrix-exponentiation-operator
@@ -0,0 +1 @@
+../../Task/Matrix-exponentiation-operator/EasyLang
\ No newline at end of file
diff --git a/Lang/EasyLang/Merge-and-aggregate-datasets b/Lang/EasyLang/Merge-and-aggregate-datasets
new file mode 120000
index 0000000000..4240a68719
--- /dev/null
+++ b/Lang/EasyLang/Merge-and-aggregate-datasets
@@ -0,0 +1 @@
+../../Task/Merge-and-aggregate-datasets/EasyLang
\ No newline at end of file
diff --git a/Lang/EasyLang/Mian-Chowla-sequence b/Lang/EasyLang/Mian-Chowla-sequence
new file mode 120000
index 0000000000..314aaad4b1
--- /dev/null
+++ b/Lang/EasyLang/Mian-Chowla-sequence
@@ -0,0 +1 @@
+../../Task/Mian-Chowla-sequence/EasyLang
\ No newline at end of file
diff --git a/Lang/EasyLang/Nonoblock b/Lang/EasyLang/Nonoblock
new file mode 120000
index 0000000000..e2c27bd166
--- /dev/null
+++ b/Lang/EasyLang/Nonoblock
@@ -0,0 +1 @@
+../../Task/Nonoblock/EasyLang
\ No newline at end of file
diff --git a/Lang/EasyLang/Order-by-pair-comparisons b/Lang/EasyLang/Order-by-pair-comparisons
new file mode 120000
index 0000000000..78fc8f28e3
--- /dev/null
+++ b/Lang/EasyLang/Order-by-pair-comparisons
@@ -0,0 +1 @@
+../../Task/Order-by-pair-comparisons/EasyLang
\ No newline at end of file
diff --git a/Lang/EasyLang/Order-disjoint-list-items b/Lang/EasyLang/Order-disjoint-list-items
new file mode 120000
index 0000000000..bd0f2b89f9
--- /dev/null
+++ b/Lang/EasyLang/Order-disjoint-list-items
@@ -0,0 +1 @@
+../../Task/Order-disjoint-list-items/EasyLang
\ No newline at end of file
diff --git a/Lang/EasyLang/Ordered-words b/Lang/EasyLang/Ordered-words
new file mode 120000
index 0000000000..284c4e7df2
--- /dev/null
+++ b/Lang/EasyLang/Ordered-words
@@ -0,0 +1 @@
+../../Task/Ordered-words/EasyLang
\ No newline at end of file
diff --git a/Lang/EasyLang/Parsing-RPN-calculator-algorithm b/Lang/EasyLang/Parsing-RPN-calculator-algorithm
new file mode 120000
index 0000000000..4c308dc876
--- /dev/null
+++ b/Lang/EasyLang/Parsing-RPN-calculator-algorithm
@@ -0,0 +1 @@
+../../Task/Parsing-RPN-calculator-algorithm/EasyLang
\ No newline at end of file
diff --git a/Lang/EasyLang/Primorial-numbers b/Lang/EasyLang/Primorial-numbers
new file mode 120000
index 0000000000..d0a4900284
--- /dev/null
+++ b/Lang/EasyLang/Primorial-numbers
@@ -0,0 +1 @@
+../../Task/Primorial-numbers/EasyLang
\ No newline at end of file
diff --git a/Lang/EasyLang/Range-consolidation b/Lang/EasyLang/Range-consolidation
new file mode 120000
index 0000000000..2af9d87ce4
--- /dev/null
+++ b/Lang/EasyLang/Range-consolidation
@@ -0,0 +1 @@
+../../Task/Range-consolidation/EasyLang
\ No newline at end of file
diff --git a/Lang/EasyLang/Read-a-specific-line-from-a-file b/Lang/EasyLang/Read-a-specific-line-from-a-file
new file mode 120000
index 0000000000..d7d3ddb462
--- /dev/null
+++ b/Lang/EasyLang/Read-a-specific-line-from-a-file
@@ -0,0 +1 @@
+../../Task/Read-a-specific-line-from-a-file/EasyLang
\ No newline at end of file
diff --git a/Lang/EasyLang/Semordnilap b/Lang/EasyLang/Semordnilap
new file mode 120000
index 0000000000..54e7d67bd7
--- /dev/null
+++ b/Lang/EasyLang/Semordnilap
@@ -0,0 +1 @@
+../../Task/Semordnilap/EasyLang
\ No newline at end of file
diff --git a/Lang/EasyLang/Solve-a-Hidato-puzzle b/Lang/EasyLang/Solve-a-Hidato-puzzle
new file mode 120000
index 0000000000..91cd1509fe
--- /dev/null
+++ b/Lang/EasyLang/Solve-a-Hidato-puzzle
@@ -0,0 +1 @@
+../../Task/Solve-a-Hidato-puzzle/EasyLang
\ No newline at end of file
diff --git a/Lang/EasyLang/Solve-a-Holy-Knights-tour b/Lang/EasyLang/Solve-a-Holy-Knights-tour
new file mode 120000
index 0000000000..0807789002
--- /dev/null
+++ b/Lang/EasyLang/Solve-a-Holy-Knights-tour
@@ -0,0 +1 @@
+../../Task/Solve-a-Holy-Knights-tour/EasyLang
\ No newline at end of file
diff --git a/Lang/EasyLang/Solve-a-Hopido-puzzle b/Lang/EasyLang/Solve-a-Hopido-puzzle
new file mode 120000
index 0000000000..f1ae260677
--- /dev/null
+++ b/Lang/EasyLang/Solve-a-Hopido-puzzle
@@ -0,0 +1 @@
+../../Task/Solve-a-Hopido-puzzle/EasyLang
\ No newline at end of file
diff --git a/Lang/EasyLang/Stable-marriage-problem b/Lang/EasyLang/Stable-marriage-problem
new file mode 120000
index 0000000000..5a03ad65b0
--- /dev/null
+++ b/Lang/EasyLang/Stable-marriage-problem
@@ -0,0 +1 @@
+../../Task/Stable-marriage-problem/EasyLang
\ No newline at end of file
diff --git a/Lang/EasyLang/Teacup-rim-text b/Lang/EasyLang/Teacup-rim-text
new file mode 120000
index 0000000000..6602971306
--- /dev/null
+++ b/Lang/EasyLang/Teacup-rim-text
@@ -0,0 +1 @@
+../../Task/Teacup-rim-text/EasyLang
\ No newline at end of file
diff --git a/Lang/EasyLang/UPC b/Lang/EasyLang/UPC
new file mode 120000
index 0000000000..2bb2969064
--- /dev/null
+++ b/Lang/EasyLang/UPC
@@ -0,0 +1 @@
+../../Task/UPC/EasyLang
\ No newline at end of file
diff --git a/Lang/EasyLang/Weird-numbers b/Lang/EasyLang/Weird-numbers
new file mode 120000
index 0000000000..503b16eabc
--- /dev/null
+++ b/Lang/EasyLang/Weird-numbers
@@ -0,0 +1 @@
+../../Task/Weird-numbers/EasyLang
\ No newline at end of file
diff --git a/Lang/EasyLang/Word-ladder b/Lang/EasyLang/Word-ladder
new file mode 120000
index 0000000000..c40a883a5f
--- /dev/null
+++ b/Lang/EasyLang/Word-ladder
@@ -0,0 +1 @@
+../../Task/Word-ladder/EasyLang
\ No newline at end of file
diff --git a/Lang/EasyLang/Word-wheel b/Lang/EasyLang/Word-wheel
new file mode 120000
index 0000000000..cc8df0aac8
--- /dev/null
+++ b/Lang/EasyLang/Word-wheel
@@ -0,0 +1 @@
+../../Task/Word-wheel/EasyLang
\ No newline at end of file
diff --git a/Lang/Ed/00-LANG.txt b/Lang/Ed/00-LANG.txt
new file mode 100644
index 0000000000..07b70e4e49
--- /dev/null
+++ b/Lang/Ed/00-LANG.txt
@@ -0,0 +1,25 @@
+{{stub}}
+{{language|Ed}}
+This is the command language used by [[wp:ed_(software)]],
+the line oriented text editor.
+
+Implementations are [[GNU Ed]], [[Plan 9 Ed]], BSD ed, and original UNIX ed.
+Ed is also a precursor to a whole family of other text editors and command languages.
+Including [[Sed]], ex, vi, vim, sam, and others.
+
+Ed scripts are usually ran as (on the example of [[GNU Ed]])
+
+cat script.ed | ed -lEGs file.in
+
+
+Or, more portably, with Basic Regular Expressions on BSD, Mac, and [[GNU Ed]].
+
+cat script.ed | ed -s file.in
+
+
+There's a convention of starting every ed script with capital H on a line of its own, to toggle more verbose error messages on. And optionally end the script with capital Q to force-quit without saving the changes to file.
+
+Also see [[Tasks not implemented in Ed]]
+
+[[Category:Editor]]
+[[Category:Utility]]
\ No newline at end of file
diff --git a/Lang/Ed/00-META.yaml b/Lang/Ed/00-META.yaml
new file mode 100644
index 0000000000..8c668497f3
--- /dev/null
+++ b/Lang/Ed/00-META.yaml
@@ -0,0 +1,2 @@
+---
+from: http://rosettacode.org/wiki/Category:Ed
diff --git a/Lang/Ed/A+B b/Lang/Ed/A+B
new file mode 120000
index 0000000000..00ee271a45
--- /dev/null
+++ b/Lang/Ed/A+B
@@ -0,0 +1 @@
+../../Task/A+B/Ed
\ No newline at end of file
diff --git a/Lang/Ed/Address-of-a-variable b/Lang/Ed/Address-of-a-variable
new file mode 120000
index 0000000000..b7216d9c2d
--- /dev/null
+++ b/Lang/Ed/Address-of-a-variable
@@ -0,0 +1 @@
+../../Task/Address-of-a-variable/Ed
\ No newline at end of file
diff --git a/Lang/Ed/Append-a-record-to-the-end-of-a-text-file b/Lang/Ed/Append-a-record-to-the-end-of-a-text-file
new file mode 120000
index 0000000000..c20f4ffb66
--- /dev/null
+++ b/Lang/Ed/Append-a-record-to-the-end-of-a-text-file
@@ -0,0 +1 @@
+../../Task/Append-a-record-to-the-end-of-a-text-file/Ed
\ No newline at end of file
diff --git a/Lang/Ed/Balanced-brackets b/Lang/Ed/Balanced-brackets
new file mode 120000
index 0000000000..12f98da078
--- /dev/null
+++ b/Lang/Ed/Balanced-brackets
@@ -0,0 +1 @@
+../../Task/Balanced-brackets/Ed
\ No newline at end of file
diff --git a/Lang/Ed/Base64-decode-data b/Lang/Ed/Base64-decode-data
new file mode 120000
index 0000000000..d08c0a29a4
--- /dev/null
+++ b/Lang/Ed/Base64-decode-data
@@ -0,0 +1 @@
+../../Task/Base64-decode-data/Ed
\ No newline at end of file
diff --git a/Lang/Ed/Binary-digits b/Lang/Ed/Binary-digits
new file mode 120000
index 0000000000..3593438a83
--- /dev/null
+++ b/Lang/Ed/Binary-digits
@@ -0,0 +1 @@
+../../Task/Binary-digits/Ed
\ No newline at end of file
diff --git a/Lang/Ed/Bioinformatics-base-count b/Lang/Ed/Bioinformatics-base-count
new file mode 120000
index 0000000000..1af1da6104
--- /dev/null
+++ b/Lang/Ed/Bioinformatics-base-count
@@ -0,0 +1 @@
+../../Task/Bioinformatics-base-count/Ed
\ No newline at end of file
diff --git a/Lang/Ed/Brace-expansion b/Lang/Ed/Brace-expansion
new file mode 120000
index 0000000000..57b88b6984
--- /dev/null
+++ b/Lang/Ed/Brace-expansion
@@ -0,0 +1 @@
+../../Task/Brace-expansion/Ed
\ No newline at end of file
diff --git a/Lang/Ed/CSV-to-HTML-translation b/Lang/Ed/CSV-to-HTML-translation
new file mode 120000
index 0000000000..982d76328a
--- /dev/null
+++ b/Lang/Ed/CSV-to-HTML-translation
@@ -0,0 +1 @@
+../../Task/CSV-to-HTML-translation/Ed
\ No newline at end of file
diff --git a/Lang/Ed/Camel-case-and-snake-case b/Lang/Ed/Camel-case-and-snake-case
new file mode 120000
index 0000000000..34e48e10ce
--- /dev/null
+++ b/Lang/Ed/Camel-case-and-snake-case
@@ -0,0 +1 @@
+../../Task/Camel-case-and-snake-case/Ed
\ No newline at end of file
diff --git a/Lang/Ed/Check-input-device-is-a-terminal b/Lang/Ed/Check-input-device-is-a-terminal
new file mode 120000
index 0000000000..aaa70cb2b9
--- /dev/null
+++ b/Lang/Ed/Check-input-device-is-a-terminal
@@ -0,0 +1 @@
+../../Task/Check-input-device-is-a-terminal/Ed
\ No newline at end of file
diff --git a/Lang/Ed/Check-output-device-is-a-terminal b/Lang/Ed/Check-output-device-is-a-terminal
new file mode 120000
index 0000000000..7304043875
--- /dev/null
+++ b/Lang/Ed/Check-output-device-is-a-terminal
@@ -0,0 +1 @@
+../../Task/Check-output-device-is-a-terminal/Ed
\ No newline at end of file
diff --git a/Lang/Ed/Chinese-zodiac b/Lang/Ed/Chinese-zodiac
new file mode 120000
index 0000000000..3a56ea0052
--- /dev/null
+++ b/Lang/Ed/Chinese-zodiac
@@ -0,0 +1 @@
+../../Task/Chinese-zodiac/Ed
\ No newline at end of file
diff --git a/Lang/Ed/Cistercian-numerals b/Lang/Ed/Cistercian-numerals
new file mode 120000
index 0000000000..f8c9ddde28
--- /dev/null
+++ b/Lang/Ed/Cistercian-numerals
@@ -0,0 +1 @@
+../../Task/Cistercian-numerals/Ed
\ No newline at end of file
diff --git a/Lang/Ed/Comma-quibbling b/Lang/Ed/Comma-quibbling
new file mode 120000
index 0000000000..d9dc3b3989
--- /dev/null
+++ b/Lang/Ed/Comma-quibbling
@@ -0,0 +1 @@
+../../Task/Comma-quibbling/Ed
\ No newline at end of file
diff --git a/Lang/Ed/Comments b/Lang/Ed/Comments
new file mode 120000
index 0000000000..08d536496b
--- /dev/null
+++ b/Lang/Ed/Comments
@@ -0,0 +1 @@
+../../Task/Comments/Ed
\ No newline at end of file
diff --git a/Lang/Ed/Conditional-structures b/Lang/Ed/Conditional-structures
new file mode 120000
index 0000000000..46db5ede62
--- /dev/null
+++ b/Lang/Ed/Conditional-structures
@@ -0,0 +1 @@
+../../Task/Conditional-structures/Ed
\ No newline at end of file
diff --git a/Lang/Ed/Copy-a-string b/Lang/Ed/Copy-a-string
new file mode 120000
index 0000000000..55ec74ae6a
--- /dev/null
+++ b/Lang/Ed/Copy-a-string
@@ -0,0 +1 @@
+../../Task/Copy-a-string/Ed
\ No newline at end of file
diff --git a/Lang/Ed/Count-occurrences-of-a-substring b/Lang/Ed/Count-occurrences-of-a-substring
new file mode 120000
index 0000000000..1c698d3069
--- /dev/null
+++ b/Lang/Ed/Count-occurrences-of-a-substring
@@ -0,0 +1 @@
+../../Task/Count-occurrences-of-a-substring/Ed
\ No newline at end of file
diff --git a/Lang/Ed/Create-a-file b/Lang/Ed/Create-a-file
new file mode 120000
index 0000000000..11ca37c1ec
--- /dev/null
+++ b/Lang/Ed/Create-a-file
@@ -0,0 +1 @@
+../../Task/Create-a-file/Ed
\ No newline at end of file
diff --git a/Lang/Ed/Date-format b/Lang/Ed/Date-format
new file mode 120000
index 0000000000..972dcea98a
--- /dev/null
+++ b/Lang/Ed/Date-format
@@ -0,0 +1 @@
+../../Task/Date-format/Ed
\ No newline at end of file
diff --git a/Lang/Ed/Delete-a-file b/Lang/Ed/Delete-a-file
new file mode 120000
index 0000000000..f208022c59
--- /dev/null
+++ b/Lang/Ed/Delete-a-file
@@ -0,0 +1 @@
+../../Task/Delete-a-file/Ed
\ No newline at end of file
diff --git a/Lang/Ed/Determine-if-a-string-has-all-the-same-characters b/Lang/Ed/Determine-if-a-string-has-all-the-same-characters
new file mode 120000
index 0000000000..448ed7ccc8
--- /dev/null
+++ b/Lang/Ed/Determine-if-a-string-has-all-the-same-characters
@@ -0,0 +1 @@
+../../Task/Determine-if-a-string-has-all-the-same-characters/Ed
\ No newline at end of file
diff --git a/Lang/Ed/Determine-if-a-string-has-all-unique-characters b/Lang/Ed/Determine-if-a-string-has-all-unique-characters
new file mode 120000
index 0000000000..3ce9aedae3
--- /dev/null
+++ b/Lang/Ed/Determine-if-a-string-has-all-unique-characters
@@ -0,0 +1 @@
+../../Task/Determine-if-a-string-has-all-unique-characters/Ed
\ No newline at end of file
diff --git a/Lang/Ed/Determine-if-a-string-is-collapsible b/Lang/Ed/Determine-if-a-string-is-collapsible
new file mode 120000
index 0000000000..8b2921d3eb
--- /dev/null
+++ b/Lang/Ed/Determine-if-a-string-is-collapsible
@@ -0,0 +1 @@
+../../Task/Determine-if-a-string-is-collapsible/Ed
\ No newline at end of file
diff --git a/Lang/Ed/Determine-if-a-string-is-numeric b/Lang/Ed/Determine-if-a-string-is-numeric
new file mode 120000
index 0000000000..05c951f131
--- /dev/null
+++ b/Lang/Ed/Determine-if-a-string-is-numeric
@@ -0,0 +1 @@
+../../Task/Determine-if-a-string-is-numeric/Ed
\ No newline at end of file
diff --git a/Lang/Ed/Empty-string b/Lang/Ed/Empty-string
new file mode 120000
index 0000000000..d609b5a73a
--- /dev/null
+++ b/Lang/Ed/Empty-string
@@ -0,0 +1 @@
+../../Task/Empty-string/Ed
\ No newline at end of file
diff --git a/Lang/Ed/Ethiopian-multiplication b/Lang/Ed/Ethiopian-multiplication
new file mode 120000
index 0000000000..a218310c2e
--- /dev/null
+++ b/Lang/Ed/Ethiopian-multiplication
@@ -0,0 +1 @@
+../../Task/Ethiopian-multiplication/Ed
\ No newline at end of file
diff --git a/Lang/Ed/Even-or-odd b/Lang/Ed/Even-or-odd
new file mode 120000
index 0000000000..216cea134c
--- /dev/null
+++ b/Lang/Ed/Even-or-odd
@@ -0,0 +1 @@
+../../Task/Even-or-odd/Ed
\ No newline at end of file
diff --git a/Lang/Ed/File-input-output b/Lang/Ed/File-input-output
new file mode 120000
index 0000000000..ab2356c090
--- /dev/null
+++ b/Lang/Ed/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/Ed
\ No newline at end of file
diff --git a/Lang/Ed/Filter b/Lang/Ed/Filter
new file mode 120000
index 0000000000..0e10013135
--- /dev/null
+++ b/Lang/Ed/Filter
@@ -0,0 +1 @@
+../../Task/Filter/Ed
\ No newline at end of file
diff --git a/Lang/Ed/Find-common-directory-path b/Lang/Ed/Find-common-directory-path
new file mode 120000
index 0000000000..31b50e9c25
--- /dev/null
+++ b/Lang/Ed/Find-common-directory-path
@@ -0,0 +1 @@
+../../Task/Find-common-directory-path/Ed
\ No newline at end of file
diff --git a/Lang/Ed/FizzBuzz b/Lang/Ed/FizzBuzz
new file mode 120000
index 0000000000..5f01963d2b
--- /dev/null
+++ b/Lang/Ed/FizzBuzz
@@ -0,0 +1 @@
+../../Task/FizzBuzz/Ed
\ No newline at end of file
diff --git a/Lang/Ed/Hello-world-Text b/Lang/Ed/Hello-world-Text
new file mode 120000
index 0000000000..09329e9578
--- /dev/null
+++ b/Lang/Ed/Hello-world-Text
@@ -0,0 +1 @@
+../../Task/Hello-world-Text/Ed
\ No newline at end of file
diff --git a/Lang/Ed/Here-document b/Lang/Ed/Here-document
new file mode 120000
index 0000000000..1aca222a29
--- /dev/null
+++ b/Lang/Ed/Here-document
@@ -0,0 +1 @@
+../../Task/Here-document/Ed
\ No newline at end of file
diff --git a/Lang/Ed/I-before-E-except-after-C b/Lang/Ed/I-before-E-except-after-C
new file mode 120000
index 0000000000..017b410bd0
--- /dev/null
+++ b/Lang/Ed/I-before-E-except-after-C
@@ -0,0 +1 @@
+../../Task/I-before-E-except-after-C/Ed
\ No newline at end of file
diff --git a/Lang/Ed/Increment-a-numerical-string b/Lang/Ed/Increment-a-numerical-string
new file mode 120000
index 0000000000..e55a87b09f
--- /dev/null
+++ b/Lang/Ed/Increment-a-numerical-string
@@ -0,0 +1 @@
+../../Task/Increment-a-numerical-string/Ed
\ No newline at end of file
diff --git a/Lang/Ed/Jewels-and-stones b/Lang/Ed/Jewels-and-stones
new file mode 120000
index 0000000000..aa6e0865ea
--- /dev/null
+++ b/Lang/Ed/Jewels-and-stones
@@ -0,0 +1 @@
+../../Task/Jewels-and-stones/Ed
\ No newline at end of file
diff --git a/Lang/Ed/Longest-common-subsequence b/Lang/Ed/Longest-common-subsequence
new file mode 120000
index 0000000000..d0e8efbf1e
--- /dev/null
+++ b/Lang/Ed/Longest-common-subsequence
@@ -0,0 +1 @@
+../../Task/Longest-common-subsequence/Ed
\ No newline at end of file
diff --git a/Lang/Ed/Loops-For b/Lang/Ed/Loops-For
new file mode 120000
index 0000000000..3de59c57c2
--- /dev/null
+++ b/Lang/Ed/Loops-For
@@ -0,0 +1 @@
+../../Task/Loops-For/Ed
\ No newline at end of file
diff --git a/Lang/Ed/Loops-Foreach b/Lang/Ed/Loops-Foreach
new file mode 120000
index 0000000000..c06f3655df
--- /dev/null
+++ b/Lang/Ed/Loops-Foreach
@@ -0,0 +1 @@
+../../Task/Loops-Foreach/Ed
\ No newline at end of file
diff --git a/Lang/Ed/Morse-code b/Lang/Ed/Morse-code
new file mode 120000
index 0000000000..e5384e5776
--- /dev/null
+++ b/Lang/Ed/Morse-code
@@ -0,0 +1 @@
+../../Task/Morse-code/Ed
\ No newline at end of file
diff --git a/Lang/Ed/Nth b/Lang/Ed/Nth
new file mode 120000
index 0000000000..d2f15b3c88
--- /dev/null
+++ b/Lang/Ed/Nth
@@ -0,0 +1 @@
+../../Task/Nth/Ed
\ No newline at end of file
diff --git a/Lang/Ed/Palindrome-detection b/Lang/Ed/Palindrome-detection
new file mode 120000
index 0000000000..1bec256a92
--- /dev/null
+++ b/Lang/Ed/Palindrome-detection
@@ -0,0 +1 @@
+../../Task/Palindrome-detection/Ed
\ No newline at end of file
diff --git a/Lang/Ed/Phrase-reversals b/Lang/Ed/Phrase-reversals
new file mode 120000
index 0000000000..0ee3f41dfa
--- /dev/null
+++ b/Lang/Ed/Phrase-reversals
@@ -0,0 +1 @@
+../../Task/Phrase-reversals/Ed
\ No newline at end of file
diff --git a/Lang/Ed/Quine b/Lang/Ed/Quine
new file mode 120000
index 0000000000..3690e73126
--- /dev/null
+++ b/Lang/Ed/Quine
@@ -0,0 +1 @@
+../../Task/Quine/Ed
\ No newline at end of file
diff --git a/Lang/Ed/Random-number-generator-device- b/Lang/Ed/Random-number-generator-device-
new file mode 120000
index 0000000000..ebfa530984
--- /dev/null
+++ b/Lang/Ed/Random-number-generator-device-
@@ -0,0 +1 @@
+../../Task/Random-number-generator-device-/Ed
\ No newline at end of file
diff --git a/Lang/Ed/Read-a-specific-line-from-a-file b/Lang/Ed/Read-a-specific-line-from-a-file
new file mode 120000
index 0000000000..68b3526a94
--- /dev/null
+++ b/Lang/Ed/Read-a-specific-line-from-a-file
@@ -0,0 +1 @@
+../../Task/Read-a-specific-line-from-a-file/Ed
\ No newline at end of file
diff --git a/Lang/Ed/Regular-expressions b/Lang/Ed/Regular-expressions
new file mode 120000
index 0000000000..03fa790d32
--- /dev/null
+++ b/Lang/Ed/Regular-expressions
@@ -0,0 +1 @@
+../../Task/Regular-expressions/Ed
\ No newline at end of file
diff --git a/Lang/Ed/Rep-string b/Lang/Ed/Rep-string
new file mode 120000
index 0000000000..1cabc7547c
--- /dev/null
+++ b/Lang/Ed/Rep-string
@@ -0,0 +1 @@
+../../Task/Rep-string/Ed
\ No newline at end of file
diff --git a/Lang/Ed/Repeat-a-string b/Lang/Ed/Repeat-a-string
new file mode 120000
index 0000000000..88553bc853
--- /dev/null
+++ b/Lang/Ed/Repeat-a-string
@@ -0,0 +1 @@
+../../Task/Repeat-a-string/Ed
\ No newline at end of file
diff --git a/Lang/Ed/Reverse-a-string b/Lang/Ed/Reverse-a-string
new file mode 120000
index 0000000000..6104b59dd9
--- /dev/null
+++ b/Lang/Ed/Reverse-a-string
@@ -0,0 +1 @@
+../../Task/Reverse-a-string/Ed
\ No newline at end of file
diff --git a/Lang/Ed/Reverse-words-in-a-string b/Lang/Ed/Reverse-words-in-a-string
new file mode 120000
index 0000000000..d59e80e1fb
--- /dev/null
+++ b/Lang/Ed/Reverse-words-in-a-string
@@ -0,0 +1 @@
+../../Task/Reverse-words-in-a-string/Ed
\ No newline at end of file
diff --git a/Lang/Ed/Roman-numerals-Decode b/Lang/Ed/Roman-numerals-Decode
new file mode 120000
index 0000000000..81a8608ea4
--- /dev/null
+++ b/Lang/Ed/Roman-numerals-Decode
@@ -0,0 +1 @@
+../../Task/Roman-numerals-Decode/Ed
\ No newline at end of file
diff --git a/Lang/Ed/Roman-numerals-Encode b/Lang/Ed/Roman-numerals-Encode
new file mode 120000
index 0000000000..686206e904
--- /dev/null
+++ b/Lang/Ed/Roman-numerals-Encode
@@ -0,0 +1 @@
+../../Task/Roman-numerals-Encode/Ed
\ No newline at end of file
diff --git a/Lang/Ed/Rot-13 b/Lang/Ed/Rot-13
new file mode 120000
index 0000000000..731a496ae9
--- /dev/null
+++ b/Lang/Ed/Rot-13
@@ -0,0 +1 @@
+../../Task/Rot-13/Ed
\ No newline at end of file
diff --git a/Lang/Ed/Run-length-encoding b/Lang/Ed/Run-length-encoding
new file mode 120000
index 0000000000..69e6b1b531
--- /dev/null
+++ b/Lang/Ed/Run-length-encoding
@@ -0,0 +1 @@
+../../Task/Run-length-encoding/Ed
\ No newline at end of file
diff --git a/Lang/Ed/Selectively-replace-multiple-instances-of-a-character-within-a-string b/Lang/Ed/Selectively-replace-multiple-instances-of-a-character-within-a-string
new file mode 120000
index 0000000000..e414614b56
--- /dev/null
+++ b/Lang/Ed/Selectively-replace-multiple-instances-of-a-character-within-a-string
@@ -0,0 +1 @@
+../../Task/Selectively-replace-multiple-instances-of-a-character-within-a-string/Ed
\ No newline at end of file
diff --git a/Lang/Ed/Semordnilap b/Lang/Ed/Semordnilap
new file mode 120000
index 0000000000..daf7a5ecb1
--- /dev/null
+++ b/Lang/Ed/Semordnilap
@@ -0,0 +1 @@
+../../Task/Semordnilap/Ed
\ No newline at end of file
diff --git a/Lang/Ed/Sort-an-integer-array b/Lang/Ed/Sort-an-integer-array
new file mode 120000
index 0000000000..b1a2a66ffa
--- /dev/null
+++ b/Lang/Ed/Sort-an-integer-array
@@ -0,0 +1 @@
+../../Task/Sort-an-integer-array/Ed
\ No newline at end of file
diff --git a/Lang/Ed/Split-a-character-string-based-on-change-of-character b/Lang/Ed/Split-a-character-string-based-on-change-of-character
new file mode 120000
index 0000000000..0033ba43dd
--- /dev/null
+++ b/Lang/Ed/Split-a-character-string-based-on-change-of-character
@@ -0,0 +1 @@
+../../Task/Split-a-character-string-based-on-change-of-character/Ed
\ No newline at end of file
diff --git a/Lang/Ed/String-case b/Lang/Ed/String-case
new file mode 120000
index 0000000000..daab926f48
--- /dev/null
+++ b/Lang/Ed/String-case
@@ -0,0 +1 @@
+../../Task/String-case/Ed
\ No newline at end of file
diff --git a/Lang/Ed/String-comparison b/Lang/Ed/String-comparison
new file mode 120000
index 0000000000..d24860c04c
--- /dev/null
+++ b/Lang/Ed/String-comparison
@@ -0,0 +1 @@
+../../Task/String-comparison/Ed
\ No newline at end of file
diff --git a/Lang/Ed/String-concatenation b/Lang/Ed/String-concatenation
new file mode 120000
index 0000000000..f24bfde76e
--- /dev/null
+++ b/Lang/Ed/String-concatenation
@@ -0,0 +1 @@
+../../Task/String-concatenation/Ed
\ No newline at end of file
diff --git a/Lang/Ed/String-interpolation-included- b/Lang/Ed/String-interpolation-included-
new file mode 120000
index 0000000000..6b90881c7e
--- /dev/null
+++ b/Lang/Ed/String-interpolation-included-
@@ -0,0 +1 @@
+../../Task/String-interpolation-included-/Ed
\ No newline at end of file
diff --git a/Lang/Ed/String-length b/Lang/Ed/String-length
new file mode 120000
index 0000000000..de41c29ef2
--- /dev/null
+++ b/Lang/Ed/String-length
@@ -0,0 +1 @@
+../../Task/String-length/Ed
\ No newline at end of file
diff --git a/Lang/Ed/String-matching b/Lang/Ed/String-matching
new file mode 120000
index 0000000000..2895138190
--- /dev/null
+++ b/Lang/Ed/String-matching
@@ -0,0 +1 @@
+../../Task/String-matching/Ed
\ No newline at end of file
diff --git a/Lang/Ed/String-prepend b/Lang/Ed/String-prepend
new file mode 120000
index 0000000000..ce1d9a46f5
--- /dev/null
+++ b/Lang/Ed/String-prepend
@@ -0,0 +1 @@
+../../Task/String-prepend/Ed
\ No newline at end of file
diff --git a/Lang/Ed/Strip-a-set-of-characters-from-a-string b/Lang/Ed/Strip-a-set-of-characters-from-a-string
new file mode 120000
index 0000000000..6a57ca5210
--- /dev/null
+++ b/Lang/Ed/Strip-a-set-of-characters-from-a-string
@@ -0,0 +1 @@
+../../Task/Strip-a-set-of-characters-from-a-string/Ed
\ No newline at end of file
diff --git a/Lang/Ed/Strip-block-comments b/Lang/Ed/Strip-block-comments
new file mode 120000
index 0000000000..913cdfb609
--- /dev/null
+++ b/Lang/Ed/Strip-block-comments
@@ -0,0 +1 @@
+../../Task/Strip-block-comments/Ed
\ No newline at end of file
diff --git a/Lang/Ed/Strip-comments-from-a-string b/Lang/Ed/Strip-comments-from-a-string
new file mode 120000
index 0000000000..f7c3c178f3
--- /dev/null
+++ b/Lang/Ed/Strip-comments-from-a-string
@@ -0,0 +1 @@
+../../Task/Strip-comments-from-a-string/Ed
\ No newline at end of file
diff --git a/Lang/Ed/Strip-control-codes-and-extended-characters-from-a-string b/Lang/Ed/Strip-control-codes-and-extended-characters-from-a-string
new file mode 120000
index 0000000000..8cffb60723
--- /dev/null
+++ b/Lang/Ed/Strip-control-codes-and-extended-characters-from-a-string
@@ -0,0 +1 @@
+../../Task/Strip-control-codes-and-extended-characters-from-a-string/Ed
\ No newline at end of file
diff --git a/Lang/Ed/Strip-whitespace-from-a-string-Top-and-tail b/Lang/Ed/Strip-whitespace-from-a-string-Top-and-tail
new file mode 120000
index 0000000000..87421d1e38
--- /dev/null
+++ b/Lang/Ed/Strip-whitespace-from-a-string-Top-and-tail
@@ -0,0 +1 @@
+../../Task/Strip-whitespace-from-a-string-Top-and-tail/Ed
\ No newline at end of file
diff --git a/Lang/Ed/Substring b/Lang/Ed/Substring
new file mode 120000
index 0000000000..373a20b8f4
--- /dev/null
+++ b/Lang/Ed/Substring
@@ -0,0 +1 @@
+../../Task/Substring/Ed
\ No newline at end of file
diff --git a/Lang/Ed/Substring-Top-and-tail b/Lang/Ed/Substring-Top-and-tail
new file mode 120000
index 0000000000..bff998aeb0
--- /dev/null
+++ b/Lang/Ed/Substring-Top-and-tail
@@ -0,0 +1 @@
+../../Task/Substring-Top-and-tail/Ed
\ No newline at end of file
diff --git a/Lang/Ed/Tokenize-a-string b/Lang/Ed/Tokenize-a-string
new file mode 120000
index 0000000000..d8f4499b3c
--- /dev/null
+++ b/Lang/Ed/Tokenize-a-string
@@ -0,0 +1 @@
+../../Task/Tokenize-a-string/Ed
\ No newline at end of file
diff --git a/Lang/Ed/Word-wrap b/Lang/Ed/Word-wrap
new file mode 120000
index 0000000000..b86e0349c6
--- /dev/null
+++ b/Lang/Ed/Word-wrap
@@ -0,0 +1 @@
+../../Task/Word-wrap/Ed
\ No newline at end of file
diff --git a/Lang/Emacs-Lisp/Bulls-and-cows b/Lang/Emacs-Lisp/Bulls-and-cows
new file mode 120000
index 0000000000..b0602ecaf2
--- /dev/null
+++ b/Lang/Emacs-Lisp/Bulls-and-cows
@@ -0,0 +1 @@
+../../Task/Bulls-and-cows/Emacs-Lisp
\ No newline at end of file
diff --git a/Lang/Emacs-Lisp/Find-palindromic-numbers-in-both-binary-and-ternary-bases b/Lang/Emacs-Lisp/Find-palindromic-numbers-in-both-binary-and-ternary-bases
new file mode 120000
index 0000000000..d1e4e53b61
--- /dev/null
+++ b/Lang/Emacs-Lisp/Find-palindromic-numbers-in-both-binary-and-ternary-bases
@@ -0,0 +1 @@
+../../Task/Find-palindromic-numbers-in-both-binary-and-ternary-bases/Emacs-Lisp
\ No newline at end of file
diff --git a/Lang/Emacs-Lisp/Search-a-list b/Lang/Emacs-Lisp/Search-a-list
new file mode 120000
index 0000000000..6aef3bcdb0
--- /dev/null
+++ b/Lang/Emacs-Lisp/Search-a-list
@@ -0,0 +1 @@
+../../Task/Search-a-list/Emacs-Lisp
\ No newline at end of file
diff --git a/Lang/Emacs-Lisp/Soundex b/Lang/Emacs-Lisp/Soundex
new file mode 120000
index 0000000000..d8aeb9b48e
--- /dev/null
+++ b/Lang/Emacs-Lisp/Soundex
@@ -0,0 +1 @@
+../../Task/Soundex/Emacs-Lisp
\ No newline at end of file
diff --git a/Lang/Erlang/Cheryls-birthday b/Lang/Erlang/Cheryls-birthday
new file mode 120000
index 0000000000..2e3c0e28bc
--- /dev/null
+++ b/Lang/Erlang/Cheryls-birthday
@@ -0,0 +1 @@
+../../Task/Cheryls-birthday/Erlang
\ No newline at end of file
diff --git a/Lang/F-Sharp/Bifid-cipher b/Lang/F-Sharp/Bifid-cipher
new file mode 120000
index 0000000000..4ac927ed58
--- /dev/null
+++ b/Lang/F-Sharp/Bifid-cipher
@@ -0,0 +1 @@
+../../Task/Bifid-cipher/F-Sharp
\ No newline at end of file
diff --git a/Lang/F-Sharp/I-before-E-except-after-C b/Lang/F-Sharp/I-before-E-except-after-C
new file mode 120000
index 0000000000..67d12030f9
--- /dev/null
+++ b/Lang/F-Sharp/I-before-E-except-after-C
@@ -0,0 +1 @@
+../../Task/I-before-E-except-after-C/F-Sharp
\ No newline at end of file
diff --git a/Lang/FOCAL/Combinations b/Lang/FOCAL/Combinations
new file mode 120000
index 0000000000..882a5e580d
--- /dev/null
+++ b/Lang/FOCAL/Combinations
@@ -0,0 +1 @@
+../../Task/Combinations/FOCAL
\ No newline at end of file
diff --git a/Lang/Factor/Brownian-tree b/Lang/Factor/Brownian-tree
new file mode 120000
index 0000000000..a93650256d
--- /dev/null
+++ b/Lang/Factor/Brownian-tree
@@ -0,0 +1 @@
+../../Task/Brownian-tree/Factor
\ No newline at end of file
diff --git a/Lang/FreeBASIC/ADFGVX-cipher b/Lang/FreeBASIC/ADFGVX-cipher
new file mode 120000
index 0000000000..43433b4959
--- /dev/null
+++ b/Lang/FreeBASIC/ADFGVX-cipher
@@ -0,0 +1 @@
+../../Task/ADFGVX-cipher/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/AVL-tree b/Lang/FreeBASIC/AVL-tree
new file mode 120000
index 0000000000..7500f1c637
--- /dev/null
+++ b/Lang/FreeBASIC/AVL-tree
@@ -0,0 +1 @@
+../../Task/AVL-tree/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/Abbreviations-simple b/Lang/FreeBASIC/Abbreviations-simple
new file mode 120000
index 0000000000..de9c8f171b
--- /dev/null
+++ b/Lang/FreeBASIC/Abbreviations-simple
@@ -0,0 +1 @@
+../../Task/Abbreviations-simple/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/Abelian-sandpile-model-Identity b/Lang/FreeBASIC/Abelian-sandpile-model-Identity
new file mode 120000
index 0000000000..e9077c65f8
--- /dev/null
+++ b/Lang/FreeBASIC/Abelian-sandpile-model-Identity
@@ -0,0 +1 @@
+../../Task/Abelian-sandpile-model-Identity/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/Algebraic-data-types b/Lang/FreeBASIC/Algebraic-data-types
new file mode 120000
index 0000000000..f2fce8f3dc
--- /dev/null
+++ b/Lang/FreeBASIC/Algebraic-data-types
@@ -0,0 +1 @@
+../../Task/Algebraic-data-types/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/Almkvist-Giullera-formula-for-pi b/Lang/FreeBASIC/Almkvist-Giullera-formula-for-pi
new file mode 120000
index 0000000000..37082cc7bb
--- /dev/null
+++ b/Lang/FreeBASIC/Almkvist-Giullera-formula-for-pi
@@ -0,0 +1 @@
+../../Task/Almkvist-Giullera-formula-for-pi/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/Arithmetic-Rational b/Lang/FreeBASIC/Arithmetic-Rational
new file mode 120000
index 0000000000..3182d3a125
--- /dev/null
+++ b/Lang/FreeBASIC/Arithmetic-Rational
@@ -0,0 +1 @@
+../../Task/Arithmetic-Rational/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/Associative-array-Merging b/Lang/FreeBASIC/Associative-array-Merging
new file mode 120000
index 0000000000..77edeb4249
--- /dev/null
+++ b/Lang/FreeBASIC/Associative-array-Merging
@@ -0,0 +1 @@
+../../Task/Associative-array-Merging/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/Bifid-cipher b/Lang/FreeBASIC/Bifid-cipher
new file mode 120000
index 0000000000..6fc87c7ae7
--- /dev/null
+++ b/Lang/FreeBASIC/Bifid-cipher
@@ -0,0 +1 @@
+../../Task/Bifid-cipher/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/Bitmap-Histogram b/Lang/FreeBASIC/Bitmap-Histogram
new file mode 120000
index 0000000000..dc9da15219
--- /dev/null
+++ b/Lang/FreeBASIC/Bitmap-Histogram
@@ -0,0 +1 @@
+../../Task/Bitmap-Histogram/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/Bitmap-Write-a-PPM-file b/Lang/FreeBASIC/Bitmap-Write-a-PPM-file
new file mode 120000
index 0000000000..91057d85e5
--- /dev/null
+++ b/Lang/FreeBASIC/Bitmap-Write-a-PPM-file
@@ -0,0 +1 @@
+../../Task/Bitmap-Write-a-PPM-file/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/Bulls-and-cows-Player b/Lang/FreeBASIC/Bulls-and-cows-Player
new file mode 120000
index 0000000000..3f30549ded
--- /dev/null
+++ b/Lang/FreeBASIC/Bulls-and-cows-Player
@@ -0,0 +1 @@
+../../Task/Bulls-and-cows-Player/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/Canny-edge-detector b/Lang/FreeBASIC/Canny-edge-detector
new file mode 120000
index 0000000000..17dd124847
--- /dev/null
+++ b/Lang/FreeBASIC/Canny-edge-detector
@@ -0,0 +1 @@
+../../Task/Canny-edge-detector/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/Colorful-numbers b/Lang/FreeBASIC/Colorful-numbers
new file mode 120000
index 0000000000..dcf0a876c1
--- /dev/null
+++ b/Lang/FreeBASIC/Colorful-numbers
@@ -0,0 +1 @@
+../../Task/Colorful-numbers/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/Cut-a-rectangle b/Lang/FreeBASIC/Cut-a-rectangle
new file mode 120000
index 0000000000..16e664db93
--- /dev/null
+++ b/Lang/FreeBASIC/Cut-a-rectangle
@@ -0,0 +1 @@
+../../Task/Cut-a-rectangle/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/De-Bruijn-sequences b/Lang/FreeBASIC/De-Bruijn-sequences
new file mode 120000
index 0000000000..2f6e2651ca
--- /dev/null
+++ b/Lang/FreeBASIC/De-Bruijn-sequences
@@ -0,0 +1 @@
+../../Task/De-Bruijn-sequences/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/Death-Star b/Lang/FreeBASIC/Death-Star
new file mode 120000
index 0000000000..b45f2416c8
--- /dev/null
+++ b/Lang/FreeBASIC/Death-Star
@@ -0,0 +1 @@
+../../Task/Death-Star/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/Distributed-programming b/Lang/FreeBASIC/Distributed-programming
new file mode 120000
index 0000000000..3c9ea14752
--- /dev/null
+++ b/Lang/FreeBASIC/Distributed-programming
@@ -0,0 +1 @@
+../../Task/Distributed-programming/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/Elementary-cellular-automaton-Infinite-length b/Lang/FreeBASIC/Elementary-cellular-automaton-Infinite-length
new file mode 120000
index 0000000000..ab22fce8e1
--- /dev/null
+++ b/Lang/FreeBASIC/Elementary-cellular-automaton-Infinite-length
@@ -0,0 +1 @@
+../../Task/Elementary-cellular-automaton-Infinite-length/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/Executable-library b/Lang/FreeBASIC/Executable-library
new file mode 120000
index 0000000000..ece6e47b6f
--- /dev/null
+++ b/Lang/FreeBASIC/Executable-library
@@ -0,0 +1 @@
+../../Task/Executable-library/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/Faces-from-a-mesh b/Lang/FreeBASIC/Faces-from-a-mesh
new file mode 120000
index 0000000000..33d860451f
--- /dev/null
+++ b/Lang/FreeBASIC/Faces-from-a-mesh
@@ -0,0 +1 @@
+../../Task/Faces-from-a-mesh/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/File-size-distribution b/Lang/FreeBASIC/File-size-distribution
new file mode 120000
index 0000000000..fa04d214bc
--- /dev/null
+++ b/Lang/FreeBASIC/File-size-distribution
@@ -0,0 +1 @@
+../../Task/File-size-distribution/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/Fraction-reduction b/Lang/FreeBASIC/Fraction-reduction
new file mode 120000
index 0000000000..fe901cf96d
--- /dev/null
+++ b/Lang/FreeBASIC/Fraction-reduction
@@ -0,0 +1 @@
+../../Task/Fraction-reduction/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/Functional-coverage-tree b/Lang/FreeBASIC/Functional-coverage-tree
new file mode 120000
index 0000000000..03b730b6d0
--- /dev/null
+++ b/Lang/FreeBASIC/Functional-coverage-tree
@@ -0,0 +1 @@
+../../Task/Functional-coverage-tree/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/Galton-box-animation b/Lang/FreeBASIC/Galton-box-animation
new file mode 120000
index 0000000000..d8550e96b6
--- /dev/null
+++ b/Lang/FreeBASIC/Galton-box-animation
@@ -0,0 +1 @@
+../../Task/Galton-box-animation/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/HTTPS b/Lang/FreeBASIC/HTTPS
new file mode 120000
index 0000000000..ffa1e6ee82
--- /dev/null
+++ b/Lang/FreeBASIC/HTTPS
@@ -0,0 +1 @@
+../../Task/HTTPS/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/HTTPS-Authenticated b/Lang/FreeBASIC/HTTPS-Authenticated
new file mode 120000
index 0000000000..3da86c1cef
--- /dev/null
+++ b/Lang/FreeBASIC/HTTPS-Authenticated
@@ -0,0 +1 @@
+../../Task/HTTPS-Authenticated/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/Hex-words b/Lang/FreeBASIC/Hex-words
new file mode 120000
index 0000000000..fa25607a2e
--- /dev/null
+++ b/Lang/FreeBASIC/Hex-words
@@ -0,0 +1 @@
+../../Task/Hex-words/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/Honeycombs b/Lang/FreeBASIC/Honeycombs
new file mode 120000
index 0000000000..12b1cd0046
--- /dev/null
+++ b/Lang/FreeBASIC/Honeycombs
@@ -0,0 +1 @@
+../../Task/Honeycombs/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/Image-convolution b/Lang/FreeBASIC/Image-convolution
new file mode 120000
index 0000000000..5f1451fadd
--- /dev/null
+++ b/Lang/FreeBASIC/Image-convolution
@@ -0,0 +1 @@
+../../Task/Image-convolution/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/Isograms-and-heterograms b/Lang/FreeBASIC/Isograms-and-heterograms
new file mode 120000
index 0000000000..c142330285
--- /dev/null
+++ b/Lang/FreeBASIC/Isograms-and-heterograms
@@ -0,0 +1 @@
+../../Task/Isograms-and-heterograms/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/Kolakoski-sequence b/Lang/FreeBASIC/Kolakoski-sequence
new file mode 120000
index 0000000000..fce085b91c
--- /dev/null
+++ b/Lang/FreeBASIC/Kolakoski-sequence
@@ -0,0 +1 @@
+../../Task/Kolakoski-sequence/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/Kosaraju b/Lang/FreeBASIC/Kosaraju
new file mode 120000
index 0000000000..b8d8396338
--- /dev/null
+++ b/Lang/FreeBASIC/Kosaraju
@@ -0,0 +1 @@
+../../Task/Kosaraju/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/Latin-Squares-in-reduced-form b/Lang/FreeBASIC/Latin-Squares-in-reduced-form
new file mode 120000
index 0000000000..db9e5d8a88
--- /dev/null
+++ b/Lang/FreeBASIC/Latin-Squares-in-reduced-form
@@ -0,0 +1 @@
+../../Task/Latin-Squares-in-reduced-form/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/List-rooted-trees b/Lang/FreeBASIC/List-rooted-trees
new file mode 120000
index 0000000000..d641d1dcf0
--- /dev/null
+++ b/Lang/FreeBASIC/List-rooted-trees
@@ -0,0 +1 @@
+../../Task/List-rooted-trees/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/Lucky-and-even-lucky-numbers b/Lang/FreeBASIC/Lucky-and-even-lucky-numbers
new file mode 120000
index 0000000000..ab68b27195
--- /dev/null
+++ b/Lang/FreeBASIC/Lucky-and-even-lucky-numbers
@@ -0,0 +1 @@
+../../Task/Lucky-and-even-lucky-numbers/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/Maze-solving b/Lang/FreeBASIC/Maze-solving
new file mode 120000
index 0000000000..2140d087ef
--- /dev/null
+++ b/Lang/FreeBASIC/Maze-solving
@@ -0,0 +1 @@
+../../Task/Maze-solving/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/N-smooth-numbers b/Lang/FreeBASIC/N-smooth-numbers
new file mode 120000
index 0000000000..7dad0a8519
--- /dev/null
+++ b/Lang/FreeBASIC/N-smooth-numbers
@@ -0,0 +1 @@
+../../Task/N-smooth-numbers/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/Non-transitive-dice b/Lang/FreeBASIC/Non-transitive-dice
new file mode 120000
index 0000000000..a320f65fd4
--- /dev/null
+++ b/Lang/FreeBASIC/Non-transitive-dice
@@ -0,0 +1 @@
+../../Task/Non-transitive-dice/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/Nonoblock b/Lang/FreeBASIC/Nonoblock
new file mode 120000
index 0000000000..18e71abc62
--- /dev/null
+++ b/Lang/FreeBASIC/Nonoblock
@@ -0,0 +1 @@
+../../Task/Nonoblock/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/Numerical-and-alphabetical-suffixes b/Lang/FreeBASIC/Numerical-and-alphabetical-suffixes
new file mode 120000
index 0000000000..f6a2f778c0
--- /dev/null
+++ b/Lang/FreeBASIC/Numerical-and-alphabetical-suffixes
@@ -0,0 +1 @@
+../../Task/Numerical-and-alphabetical-suffixes/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/OLE-automation b/Lang/FreeBASIC/OLE-automation
new file mode 120000
index 0000000000..eb6c2ccae6
--- /dev/null
+++ b/Lang/FreeBASIC/OLE-automation
@@ -0,0 +1 @@
+../../Task/OLE-automation/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/Order-disjoint-list-items b/Lang/FreeBASIC/Order-disjoint-list-items
new file mode 120000
index 0000000000..d5dc6c71fd
--- /dev/null
+++ b/Lang/FreeBASIC/Order-disjoint-list-items
@@ -0,0 +1 @@
+../../Task/Order-disjoint-list-items/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/Particle-fountain b/Lang/FreeBASIC/Particle-fountain
new file mode 120000
index 0000000000..e93e8b964f
--- /dev/null
+++ b/Lang/FreeBASIC/Particle-fountain
@@ -0,0 +1 @@
+../../Task/Particle-fountain/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/Partition-an-integer-x-into-n-primes b/Lang/FreeBASIC/Partition-an-integer-x-into-n-primes
new file mode 120000
index 0000000000..1e3ac14a3f
--- /dev/null
+++ b/Lang/FreeBASIC/Partition-an-integer-x-into-n-primes
@@ -0,0 +1 @@
+../../Task/Partition-an-integer-x-into-n-primes/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/Pentagram b/Lang/FreeBASIC/Pentagram
new file mode 120000
index 0000000000..60996db876
--- /dev/null
+++ b/Lang/FreeBASIC/Pentagram
@@ -0,0 +1 @@
+../../Task/Pentagram/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/Pentomino-tiling b/Lang/FreeBASIC/Pentomino-tiling
new file mode 120000
index 0000000000..684a3829b3
--- /dev/null
+++ b/Lang/FreeBASIC/Pentomino-tiling
@@ -0,0 +1 @@
+../../Task/Pentomino-tiling/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/Percentage-difference-between-images b/Lang/FreeBASIC/Percentage-difference-between-images
new file mode 120000
index 0000000000..4b5a28d9b2
--- /dev/null
+++ b/Lang/FreeBASIC/Percentage-difference-between-images
@@ -0,0 +1 @@
+../../Task/Percentage-difference-between-images/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/Peripheral-drift-illusion b/Lang/FreeBASIC/Peripheral-drift-illusion
new file mode 120000
index 0000000000..8fbf1d3fb4
--- /dev/null
+++ b/Lang/FreeBASIC/Peripheral-drift-illusion
@@ -0,0 +1 @@
+../../Task/Peripheral-drift-illusion/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/Pig-the-dice-game-Player b/Lang/FreeBASIC/Pig-the-dice-game-Player
new file mode 120000
index 0000000000..5766e4e5d7
--- /dev/null
+++ b/Lang/FreeBASIC/Pig-the-dice-game-Player
@@ -0,0 +1 @@
+../../Task/Pig-the-dice-game-Player/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/Pinstripe-Printer b/Lang/FreeBASIC/Pinstripe-Printer
new file mode 120000
index 0000000000..be78fdd396
--- /dev/null
+++ b/Lang/FreeBASIC/Pinstripe-Printer
@@ -0,0 +1 @@
+../../Task/Pinstripe-Printer/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/Pisano-period b/Lang/FreeBASIC/Pisano-period
new file mode 120000
index 0000000000..33961710c0
--- /dev/null
+++ b/Lang/FreeBASIC/Pisano-period
@@ -0,0 +1 @@
+../../Task/Pisano-period/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/Play-recorded-sounds b/Lang/FreeBASIC/Play-recorded-sounds
new file mode 120000
index 0000000000..a80641ee64
--- /dev/null
+++ b/Lang/FreeBASIC/Play-recorded-sounds
@@ -0,0 +1 @@
+../../Task/Play-recorded-sounds/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/Pseudo-random-numbers-Combined-recursive-generator-MRG32k3a b/Lang/FreeBASIC/Pseudo-random-numbers-Combined-recursive-generator-MRG32k3a
new file mode 120000
index 0000000000..a870f104af
--- /dev/null
+++ b/Lang/FreeBASIC/Pseudo-random-numbers-Combined-recursive-generator-MRG32k3a
@@ -0,0 +1 @@
+../../Task/Pseudo-random-numbers-Combined-recursive-generator-MRG32k3a/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/Reflection-List-methods b/Lang/FreeBASIC/Reflection-List-methods
new file mode 120000
index 0000000000..c065c312ec
--- /dev/null
+++ b/Lang/FreeBASIC/Reflection-List-methods
@@ -0,0 +1 @@
+../../Task/Reflection-List-methods/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/Reflection-List-properties b/Lang/FreeBASIC/Reflection-List-properties
new file mode 120000
index 0000000000..0fd1a0e61e
--- /dev/null
+++ b/Lang/FreeBASIC/Reflection-List-properties
@@ -0,0 +1 @@
+../../Task/Reflection-List-properties/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/Rendezvous b/Lang/FreeBASIC/Rendezvous
new file mode 120000
index 0000000000..1f852cdb53
--- /dev/null
+++ b/Lang/FreeBASIC/Rendezvous
@@ -0,0 +1 @@
+../../Task/Rendezvous/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/Repunit-primes b/Lang/FreeBASIC/Repunit-primes
new file mode 120000
index 0000000000..f9270140df
--- /dev/null
+++ b/Lang/FreeBASIC/Repunit-primes
@@ -0,0 +1 @@
+../../Task/Repunit-primes/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/Rosetta-Code-Count-examples b/Lang/FreeBASIC/Rosetta-Code-Count-examples
new file mode 120000
index 0000000000..c38f53ad75
--- /dev/null
+++ b/Lang/FreeBASIC/Rosetta-Code-Count-examples
@@ -0,0 +1 @@
+../../Task/Rosetta-Code-Count-examples/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/Rosetta-Code-Find-unimplemented-tasks b/Lang/FreeBASIC/Rosetta-Code-Find-unimplemented-tasks
new file mode 120000
index 0000000000..3f89d2cb42
--- /dev/null
+++ b/Lang/FreeBASIC/Rosetta-Code-Find-unimplemented-tasks
@@ -0,0 +1 @@
+../../Task/Rosetta-Code-Find-unimplemented-tasks/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/Same-fringe b/Lang/FreeBASIC/Same-fringe
new file mode 120000
index 0000000000..756cf55a7d
--- /dev/null
+++ b/Lang/FreeBASIC/Same-fringe
@@ -0,0 +1 @@
+../../Task/Same-fringe/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/Search-in-paragraphs-text b/Lang/FreeBASIC/Search-in-paragraphs-text
new file mode 120000
index 0000000000..bb0ecc2e40
--- /dev/null
+++ b/Lang/FreeBASIC/Search-in-paragraphs-text
@@ -0,0 +1 @@
+../../Task/Search-in-paragraphs-text/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/Set-puzzle b/Lang/FreeBASIC/Set-puzzle
new file mode 120000
index 0000000000..bdebb4443c
--- /dev/null
+++ b/Lang/FreeBASIC/Set-puzzle
@@ -0,0 +1 @@
+../../Task/Set-puzzle/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/Simple-database b/Lang/FreeBASIC/Simple-database
new file mode 120000
index 0000000000..8d38b56c2d
--- /dev/null
+++ b/Lang/FreeBASIC/Simple-database
@@ -0,0 +1 @@
+../../Task/Simple-database/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/Singular-value-decomposition b/Lang/FreeBASIC/Singular-value-decomposition
new file mode 120000
index 0000000000..efbf29e97a
--- /dev/null
+++ b/Lang/FreeBASIC/Singular-value-decomposition
@@ -0,0 +1 @@
+../../Task/Singular-value-decomposition/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/Solve-a-Hidato-puzzle b/Lang/FreeBASIC/Solve-a-Hidato-puzzle
new file mode 120000
index 0000000000..ad49dd7d72
--- /dev/null
+++ b/Lang/FreeBASIC/Solve-a-Hidato-puzzle
@@ -0,0 +1 @@
+../../Task/Solve-a-Hidato-puzzle/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/Solve-a-Holy-Knights-tour b/Lang/FreeBASIC/Solve-a-Holy-Knights-tour
new file mode 120000
index 0000000000..f7260b5f2d
--- /dev/null
+++ b/Lang/FreeBASIC/Solve-a-Holy-Knights-tour
@@ -0,0 +1 @@
+../../Task/Solve-a-Holy-Knights-tour/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/Solve-a-Hopido-puzzle b/Lang/FreeBASIC/Solve-a-Hopido-puzzle
new file mode 120000
index 0000000000..3af9403ab8
--- /dev/null
+++ b/Lang/FreeBASIC/Solve-a-Hopido-puzzle
@@ -0,0 +1 @@
+../../Task/Solve-a-Hopido-puzzle/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/Solve-a-Numbrix-puzzle b/Lang/FreeBASIC/Solve-a-Numbrix-puzzle
new file mode 120000
index 0000000000..9212eac2bb
--- /dev/null
+++ b/Lang/FreeBASIC/Solve-a-Numbrix-puzzle
@@ -0,0 +1 @@
+../../Task/Solve-a-Numbrix-puzzle/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/Sorting-algorithms-Patience-sort b/Lang/FreeBASIC/Sorting-algorithms-Patience-sort
new file mode 120000
index 0000000000..1fc80c416d
--- /dev/null
+++ b/Lang/FreeBASIC/Sorting-algorithms-Patience-sort
@@ -0,0 +1 @@
+../../Task/Sorting-algorithms-Patience-sort/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/Synchronous-concurrency b/Lang/FreeBASIC/Synchronous-concurrency
new file mode 120000
index 0000000000..787a5aebfc
--- /dev/null
+++ b/Lang/FreeBASIC/Synchronous-concurrency
@@ -0,0 +1 @@
+../../Task/Synchronous-concurrency/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/Teacup-rim-text b/Lang/FreeBASIC/Teacup-rim-text
new file mode 120000
index 0000000000..e0ebee7a7f
--- /dev/null
+++ b/Lang/FreeBASIC/Teacup-rim-text
@@ -0,0 +1 @@
+../../Task/Teacup-rim-text/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/Text-processing-1 b/Lang/FreeBASIC/Text-processing-1
new file mode 120000
index 0000000000..1e52cc9a2a
--- /dev/null
+++ b/Lang/FreeBASIC/Text-processing-1
@@ -0,0 +1 @@
+../../Task/Text-processing-1/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/Textonyms b/Lang/FreeBASIC/Textonyms
new file mode 120000
index 0000000000..1d60439533
--- /dev/null
+++ b/Lang/FreeBASIC/Textonyms
@@ -0,0 +1 @@
+../../Task/Textonyms/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/Tree-datastructures b/Lang/FreeBASIC/Tree-datastructures
new file mode 120000
index 0000000000..9ca72e7eb6
--- /dev/null
+++ b/Lang/FreeBASIC/Tree-datastructures
@@ -0,0 +1 @@
+../../Task/Tree-datastructures/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/UPC b/Lang/FreeBASIC/UPC
new file mode 120000
index 0000000000..ddcf027e49
--- /dev/null
+++ b/Lang/FreeBASIC/UPC
@@ -0,0 +1 @@
+../../Task/UPC/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/Use-another-language-to-call-a-function b/Lang/FreeBASIC/Use-another-language-to-call-a-function
new file mode 120000
index 0000000000..5d195ad8f5
--- /dev/null
+++ b/Lang/FreeBASIC/Use-another-language-to-call-a-function
@@ -0,0 +1 @@
+../../Task/Use-another-language-to-call-a-function/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/User-input-Graphical b/Lang/FreeBASIC/User-input-Graphical
new file mode 120000
index 0000000000..8c4f2f8158
--- /dev/null
+++ b/Lang/FreeBASIC/User-input-Graphical
@@ -0,0 +1 @@
+../../Task/User-input-Graphical/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/Window-management b/Lang/FreeBASIC/Window-management
new file mode 120000
index 0000000000..f998cbb6ef
--- /dev/null
+++ b/Lang/FreeBASIC/Window-management
@@ -0,0 +1 @@
+../../Task/Window-management/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/World-Cup-group-stage b/Lang/FreeBASIC/World-Cup-group-stage
new file mode 120000
index 0000000000..10c687e006
--- /dev/null
+++ b/Lang/FreeBASIC/World-Cup-group-stage
@@ -0,0 +1 @@
+../../Task/World-Cup-group-stage/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/Zebra-puzzle b/Lang/FreeBASIC/Zebra-puzzle
new file mode 120000
index 0000000000..aa6204ae2d
--- /dev/null
+++ b/Lang/FreeBASIC/Zebra-puzzle
@@ -0,0 +1 @@
+../../Task/Zebra-puzzle/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/Zeckendorf-arithmetic b/Lang/FreeBASIC/Zeckendorf-arithmetic
new file mode 120000
index 0000000000..5830437272
--- /dev/null
+++ b/Lang/FreeBASIC/Zeckendorf-arithmetic
@@ -0,0 +1 @@
+../../Task/Zeckendorf-arithmetic/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/Zumkeller-numbers b/Lang/FreeBASIC/Zumkeller-numbers
new file mode 120000
index 0000000000..6994043985
--- /dev/null
+++ b/Lang/FreeBASIC/Zumkeller-numbers
@@ -0,0 +1 @@
+../../Task/Zumkeller-numbers/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FutureBasic/Bin-given-limits b/Lang/FutureBasic/Bin-given-limits
new file mode 120000
index 0000000000..6397588001
--- /dev/null
+++ b/Lang/FutureBasic/Bin-given-limits
@@ -0,0 +1 @@
+../../Task/Bin-given-limits/FutureBasic
\ No newline at end of file
diff --git a/Lang/FutureBasic/Bitmap b/Lang/FutureBasic/Bitmap
new file mode 120000
index 0000000000..5e3f607822
--- /dev/null
+++ b/Lang/FutureBasic/Bitmap
@@ -0,0 +1 @@
+../../Task/Bitmap/FutureBasic
\ No newline at end of file
diff --git a/Lang/FutureBasic/Brazilian-numbers b/Lang/FutureBasic/Brazilian-numbers
new file mode 120000
index 0000000000..ea4e519da9
--- /dev/null
+++ b/Lang/FutureBasic/Brazilian-numbers
@@ -0,0 +1 @@
+../../Task/Brazilian-numbers/FutureBasic
\ No newline at end of file
diff --git a/Lang/FutureBasic/Colorful-numbers b/Lang/FutureBasic/Colorful-numbers
new file mode 120000
index 0000000000..f9f2dd43bc
--- /dev/null
+++ b/Lang/FutureBasic/Colorful-numbers
@@ -0,0 +1 @@
+../../Task/Colorful-numbers/FutureBasic
\ No newline at end of file
diff --git a/Lang/FutureBasic/Consecutive-primes-with-ascending-or-descending-differences b/Lang/FutureBasic/Consecutive-primes-with-ascending-or-descending-differences
new file mode 120000
index 0000000000..ca47092ad1
--- /dev/null
+++ b/Lang/FutureBasic/Consecutive-primes-with-ascending-or-descending-differences
@@ -0,0 +1 @@
+../../Task/Consecutive-primes-with-ascending-or-descending-differences/FutureBasic
\ No newline at end of file
diff --git a/Lang/FutureBasic/Curzon-numbers b/Lang/FutureBasic/Curzon-numbers
new file mode 120000
index 0000000000..bcd7e577f6
--- /dev/null
+++ b/Lang/FutureBasic/Curzon-numbers
@@ -0,0 +1 @@
+../../Task/Curzon-numbers/FutureBasic
\ No newline at end of file
diff --git a/Lang/FutureBasic/Determine-if-a-string-is-squeezable b/Lang/FutureBasic/Determine-if-a-string-is-squeezable
new file mode 120000
index 0000000000..3b259327b7
--- /dev/null
+++ b/Lang/FutureBasic/Determine-if-a-string-is-squeezable
@@ -0,0 +1 @@
+../../Task/Determine-if-a-string-is-squeezable/FutureBasic
\ No newline at end of file
diff --git a/Lang/FutureBasic/Determine-if-only-one-instance-is-running b/Lang/FutureBasic/Determine-if-only-one-instance-is-running
new file mode 120000
index 0000000000..e3fa96a5b5
--- /dev/null
+++ b/Lang/FutureBasic/Determine-if-only-one-instance-is-running
@@ -0,0 +1 @@
+../../Task/Determine-if-only-one-instance-is-running/FutureBasic
\ No newline at end of file
diff --git a/Lang/FutureBasic/Determine-if-two-triangles-overlap b/Lang/FutureBasic/Determine-if-two-triangles-overlap
new file mode 120000
index 0000000000..40f32b74b7
--- /dev/null
+++ b/Lang/FutureBasic/Determine-if-two-triangles-overlap
@@ -0,0 +1 @@
+../../Task/Determine-if-two-triangles-overlap/FutureBasic
\ No newline at end of file
diff --git a/Lang/FutureBasic/Greatest-subsequential-sum b/Lang/FutureBasic/Greatest-subsequential-sum
new file mode 120000
index 0000000000..cf9f89b8cf
--- /dev/null
+++ b/Lang/FutureBasic/Greatest-subsequential-sum
@@ -0,0 +1 @@
+../../Task/Greatest-subsequential-sum/FutureBasic
\ No newline at end of file
diff --git a/Lang/FutureBasic/Keyboard-input-Flush-the-keyboard-buffer b/Lang/FutureBasic/Keyboard-input-Flush-the-keyboard-buffer
new file mode 120000
index 0000000000..958993035a
--- /dev/null
+++ b/Lang/FutureBasic/Keyboard-input-Flush-the-keyboard-buffer
@@ -0,0 +1 @@
+../../Task/Keyboard-input-Flush-the-keyboard-buffer/FutureBasic
\ No newline at end of file
diff --git a/Lang/FutureBasic/Prime-conspiracy b/Lang/FutureBasic/Prime-conspiracy
new file mode 120000
index 0000000000..73d0f046b0
--- /dev/null
+++ b/Lang/FutureBasic/Prime-conspiracy
@@ -0,0 +1 @@
+../../Task/Prime-conspiracy/FutureBasic
\ No newline at end of file
diff --git a/Lang/FutureBasic/Read-a-file-character-by-character-UTF8 b/Lang/FutureBasic/Read-a-file-character-by-character-UTF8
new file mode 120000
index 0000000000..beadc18b56
--- /dev/null
+++ b/Lang/FutureBasic/Read-a-file-character-by-character-UTF8
@@ -0,0 +1 @@
+../../Task/Read-a-file-character-by-character-UTF8/FutureBasic
\ No newline at end of file
diff --git a/Lang/FutureBasic/Read-a-file-line-by-line b/Lang/FutureBasic/Read-a-file-line-by-line
new file mode 120000
index 0000000000..43ff8334a4
--- /dev/null
+++ b/Lang/FutureBasic/Read-a-file-line-by-line
@@ -0,0 +1 @@
+../../Task/Read-a-file-line-by-line/FutureBasic
\ No newline at end of file
diff --git a/Lang/FutureBasic/SEDOLs b/Lang/FutureBasic/SEDOLs
new file mode 120000
index 0000000000..87a0048d3a
--- /dev/null
+++ b/Lang/FutureBasic/SEDOLs
@@ -0,0 +1 @@
+../../Task/SEDOLs/FutureBasic
\ No newline at end of file
diff --git a/Lang/FutureBasic/Smarandache-prime-digital-sequence b/Lang/FutureBasic/Smarandache-prime-digital-sequence
new file mode 120000
index 0000000000..879ea05348
--- /dev/null
+++ b/Lang/FutureBasic/Smarandache-prime-digital-sequence
@@ -0,0 +1 @@
+../../Task/Smarandache-prime-digital-sequence/FutureBasic
\ No newline at end of file
diff --git a/Lang/FutureBasic/Sort-three-variables b/Lang/FutureBasic/Sort-three-variables
new file mode 120000
index 0000000000..48424426c7
--- /dev/null
+++ b/Lang/FutureBasic/Sort-three-variables
@@ -0,0 +1 @@
+../../Task/Sort-three-variables/FutureBasic
\ No newline at end of file
diff --git a/Lang/FutureBasic/Sum-of-squares b/Lang/FutureBasic/Sum-of-squares
new file mode 120000
index 0000000000..3bded3f286
--- /dev/null
+++ b/Lang/FutureBasic/Sum-of-squares
@@ -0,0 +1 @@
+../../Task/Sum-of-squares/FutureBasic
\ No newline at end of file
diff --git a/Lang/FutureBasic/Time-a-function b/Lang/FutureBasic/Time-a-function
new file mode 120000
index 0000000000..819601365f
--- /dev/null
+++ b/Lang/FutureBasic/Time-a-function
@@ -0,0 +1 @@
+../../Task/Time-a-function/FutureBasic
\ No newline at end of file
diff --git a/Lang/FutureBasic/Transliterate-English-text-using-the-Greek-alphabet b/Lang/FutureBasic/Transliterate-English-text-using-the-Greek-alphabet
new file mode 120000
index 0000000000..f300e3db8a
--- /dev/null
+++ b/Lang/FutureBasic/Transliterate-English-text-using-the-Greek-alphabet
@@ -0,0 +1 @@
+../../Task/Transliterate-English-text-using-the-Greek-alphabet/FutureBasic
\ No newline at end of file
diff --git a/Lang/FutureBasic/Truncate-a-file b/Lang/FutureBasic/Truncate-a-file
new file mode 120000
index 0000000000..29710d148d
--- /dev/null
+++ b/Lang/FutureBasic/Truncate-a-file
@@ -0,0 +1 @@
+../../Task/Truncate-a-file/FutureBasic
\ No newline at end of file
diff --git a/Lang/FutureBasic/Twin-primes b/Lang/FutureBasic/Twin-primes
new file mode 120000
index 0000000000..172e832801
--- /dev/null
+++ b/Lang/FutureBasic/Twin-primes
@@ -0,0 +1 @@
+../../Task/Twin-primes/FutureBasic
\ No newline at end of file
diff --git a/Lang/FutureBasic/URL-decoding b/Lang/FutureBasic/URL-decoding
new file mode 120000
index 0000000000..001e7a5dfa
--- /dev/null
+++ b/Lang/FutureBasic/URL-decoding
@@ -0,0 +1 @@
+../../Task/URL-decoding/FutureBasic
\ No newline at end of file
diff --git a/Lang/FutureBasic/URL-parser b/Lang/FutureBasic/URL-parser
new file mode 120000
index 0000000000..46cddba12b
--- /dev/null
+++ b/Lang/FutureBasic/URL-parser
@@ -0,0 +1 @@
+../../Task/URL-parser/FutureBasic
\ No newline at end of file
diff --git a/Lang/GAP/Character-codes b/Lang/GAP/Character-codes
new file mode 120000
index 0000000000..ff4a3d2754
--- /dev/null
+++ b/Lang/GAP/Character-codes
@@ -0,0 +1 @@
+../../Task/Character-codes/GAP
\ No newline at end of file
diff --git a/Lang/GDScript/Playing-cards b/Lang/GDScript/Playing-cards
new file mode 120000
index 0000000000..11180c642f
--- /dev/null
+++ b/Lang/GDScript/Playing-cards
@@ -0,0 +1 @@
+../../Task/Playing-cards/GDScript
\ No newline at end of file
diff --git a/Lang/GW-BASIC/Associative-array-Merging b/Lang/GW-BASIC/Associative-array-Merging
new file mode 120000
index 0000000000..bd171c9e89
--- /dev/null
+++ b/Lang/GW-BASIC/Associative-array-Merging
@@ -0,0 +1 @@
+../../Task/Associative-array-Merging/GW-BASIC
\ No newline at end of file
diff --git a/Lang/GW-BASIC/Determine-sentence-type b/Lang/GW-BASIC/Determine-sentence-type
new file mode 120000
index 0000000000..0a4310dab2
--- /dev/null
+++ b/Lang/GW-BASIC/Determine-sentence-type
@@ -0,0 +1 @@
+../../Task/Determine-sentence-type/GW-BASIC
\ No newline at end of file
diff --git a/Lang/GW-BASIC/Phrase-reversals b/Lang/GW-BASIC/Phrase-reversals
new file mode 120000
index 0000000000..f735fa85b8
--- /dev/null
+++ b/Lang/GW-BASIC/Phrase-reversals
@@ -0,0 +1 @@
+../../Task/Phrase-reversals/GW-BASIC
\ No newline at end of file
diff --git a/Lang/GW-BASIC/Split-a-character-string-based-on-change-of-character b/Lang/GW-BASIC/Split-a-character-string-based-on-change-of-character
new file mode 120000
index 0000000000..55c414402a
--- /dev/null
+++ b/Lang/GW-BASIC/Split-a-character-string-based-on-change-of-character
@@ -0,0 +1 @@
+../../Task/Split-a-character-string-based-on-change-of-character/GW-BASIC
\ No newline at end of file
diff --git a/Lang/GW-BASIC/Sum-of-a-series b/Lang/GW-BASIC/Sum-of-a-series
new file mode 120000
index 0000000000..0eb15c49ab
--- /dev/null
+++ b/Lang/GW-BASIC/Sum-of-a-series
@@ -0,0 +1 @@
+../../Task/Sum-of-a-series/GW-BASIC
\ No newline at end of file
diff --git a/Lang/GW-BASIC/Twos-complement b/Lang/GW-BASIC/Twos-complement
new file mode 120000
index 0000000000..6a1e61b45b
--- /dev/null
+++ b/Lang/GW-BASIC/Twos-complement
@@ -0,0 +1 @@
+../../Task/Twos-complement/GW-BASIC
\ No newline at end of file
diff --git a/Lang/Gambas/Determine-if-a-string-has-all-the-same-characters b/Lang/Gambas/Determine-if-a-string-has-all-the-same-characters
new file mode 120000
index 0000000000..448e7d07b5
--- /dev/null
+++ b/Lang/Gambas/Determine-if-a-string-has-all-the-same-characters
@@ -0,0 +1 @@
+../../Task/Determine-if-a-string-has-all-the-same-characters/Gambas
\ No newline at end of file
diff --git a/Lang/Gambas/Determine-sentence-type b/Lang/Gambas/Determine-sentence-type
new file mode 120000
index 0000000000..2d6d98f0ec
--- /dev/null
+++ b/Lang/Gambas/Determine-sentence-type
@@ -0,0 +1 @@
+../../Task/Determine-sentence-type/Gambas
\ No newline at end of file
diff --git a/Lang/Gambas/Eban-numbers b/Lang/Gambas/Eban-numbers
new file mode 120000
index 0000000000..238b6dbb7b
--- /dev/null
+++ b/Lang/Gambas/Eban-numbers
@@ -0,0 +1 @@
+../../Task/Eban-numbers/Gambas
\ No newline at end of file
diff --git a/Lang/Gambas/Hofstadter-Q-sequence b/Lang/Gambas/Hofstadter-Q-sequence
new file mode 120000
index 0000000000..6288d88da4
--- /dev/null
+++ b/Lang/Gambas/Hofstadter-Q-sequence
@@ -0,0 +1 @@
+../../Task/Hofstadter-Q-sequence/Gambas
\ No newline at end of file
diff --git a/Lang/Gambas/Jewels-and-stones b/Lang/Gambas/Jewels-and-stones
new file mode 120000
index 0000000000..b13ca1d825
--- /dev/null
+++ b/Lang/Gambas/Jewels-and-stones
@@ -0,0 +1 @@
+../../Task/Jewels-and-stones/Gambas
\ No newline at end of file
diff --git a/Lang/Gambas/Leonardo-numbers b/Lang/Gambas/Leonardo-numbers
new file mode 120000
index 0000000000..92f225b368
--- /dev/null
+++ b/Lang/Gambas/Leonardo-numbers
@@ -0,0 +1 @@
+../../Task/Leonardo-numbers/Gambas
\ No newline at end of file
diff --git a/Lang/Gambas/Sort-disjoint-sublist b/Lang/Gambas/Sort-disjoint-sublist
new file mode 120000
index 0000000000..d77e8ada49
--- /dev/null
+++ b/Lang/Gambas/Sort-disjoint-sublist
@@ -0,0 +1 @@
+../../Task/Sort-disjoint-sublist/Gambas
\ No newline at end of file
diff --git a/Lang/Gambas/The-Name-Game b/Lang/Gambas/The-Name-Game
new file mode 120000
index 0000000000..03cc006601
--- /dev/null
+++ b/Lang/Gambas/The-Name-Game
@@ -0,0 +1 @@
+../../Task/The-Name-Game/Gambas
\ No newline at end of file
diff --git a/Lang/Gambas/Twos-complement b/Lang/Gambas/Twos-complement
new file mode 120000
index 0000000000..4ed9e66d7c
--- /dev/null
+++ b/Lang/Gambas/Twos-complement
@@ -0,0 +1 @@
+../../Task/Twos-complement/Gambas
\ No newline at end of file
diff --git a/Lang/Golfscript/Primality-by-trial-division b/Lang/Golfscript/Primality-by-trial-division
new file mode 120000
index 0000000000..42e31431cb
--- /dev/null
+++ b/Lang/Golfscript/Primality-by-trial-division
@@ -0,0 +1 @@
+../../Task/Primality-by-trial-division/Golfscript
\ No newline at end of file
diff --git a/Lang/IS-BASIC/Determine-if-a-string-has-all-the-same-characters b/Lang/IS-BASIC/Determine-if-a-string-has-all-the-same-characters
new file mode 120000
index 0000000000..3a0ac72c5c
--- /dev/null
+++ b/Lang/IS-BASIC/Determine-if-a-string-has-all-the-same-characters
@@ -0,0 +1 @@
+../../Task/Determine-if-a-string-has-all-the-same-characters/IS-BASIC
\ No newline at end of file
diff --git a/Lang/Imp77/00-LANG.txt b/Lang/Imp77/00-LANG.txt
new file mode 100644
index 0000000000..85ea555671
--- /dev/null
+++ b/Lang/Imp77/00-LANG.txt
@@ -0,0 +1,37 @@
+{{language
+|exec=machine
+|gc=no
+|parampass=value or by address
+|checking=static
+|tags=imp77
+}}{{language programming paradigm|Imperative}}
+'''Imp77''' is a general-purpose, [[procedural programming|procedural]], [[imperative programming|imperative]] computer programming language developed around 1977 by the Computer Science Department at Edinburgh University. The original Imp was an incremental development of its predecessor, [[derived from::AtlasAutocode]], via Imp9 .
+
+==Versions==
+* '''Atlas Autocode''' was originally created by Tony Brooker as his response to the 1958 IAL proposal which was the prototype for Algol60. It was very similar to Algol 60 but without some of the problematic areas such as 'call-by-name'.
+* '''Imp(AA)''' was the first Imp compiler (running on the KDF9) to use the name Imp, but it was almost identical to Atlas Autocode apart from having removed a few unused language features such as %complex variables and minor syntax that was dependent on the use of the Flexowriter and the KDF9 character set, which happened when the compiler was modified to use the 7-bit ISO character set.
+* '''Imp9''' was the final release of Imp on the ICL System 4/75. By this point Imp had acquired records and strings.
+* '''Impi''' was an interactive version of the Imp language based on the Imp9 specification, which compiled a statement at a time or a procedure at a time to executable code in memory. Although the Impi name meant "Imp Interpreter" it was not an interpreter in the sense of interpreting an intermediate code, but was rather a true dynamic and interactive compiler.
+* '''Iopt''' was the Imp9 compiler modernised and ported to the ICL 29XX range. This was the most fully-featured version of Imp until Imp77 was created.
+* '''Skimp''' was a cut-down version of the language, at about the same level of complexity as Atlas Autocode, used for teaching compiler-writing to third-year computer science students at Edinburgh University. It was also used as a bootstrapping compiler when porting imp to new systems.
+* '''Imp15''' was an implementation of Imp for the PDP9 and PDP15 systems, which ran in 8K words (words being 18 bits).
+* '''Imp11''' was a version of Imp, bootstrapped through Skimp but implementing most of the language, written to support the PDP11 processors used at Edinburgh for the communications network.
+* '''Imp77''' was a full implementation of Imp supporting all language features, written by Peter Robertson of the Department of Computer Science in support of his PhD thesis on the subject of portable intermediate codes. Imp77 was adopted as the primary compiler of the Department of Computer Science at Edinburgh and made available on many architectures. Most Imp submissions to Rosetta Code will be in Imp77 because it is the only version of Imp remaining with a native compiler available (x86) although there are a few other architectures still usable under emulation. The current Imp77 compiler is a hobbyist revival and is to some extent still under development, lacking the extensive library support and runtime diagnostics that were present in Edinburgh University implementations.
+* '''Imp80''' was an attempt to merge Iopt and Imp77 into a common subset language, as the versions of Imp used by the Edinburgh Regional Computing Center and the Department of Computer Science had diverged sufficiently by 1980, that much code was not compatible between the two versions. The standardisation process that Imp80 started was never completed as Edinburgh abandoned the use of Imp in the 1980's, under political pressure to switch to using languages with a broader code base.
+
+==Overview==
+
+Imp is structurally very similar to Algol 60 except that instead of Algol's "name" parameters which implement a somewhat broken call-by-substitution mechanism, Imp uses call-by-reference, passing the address of a variable instead, and implicitly de-referencing such variables within a procedure, without requiring explicit syntax to access them as would be done in C for example.
+
+==Stropping==
+
+Imp uses keywords rather than reserved words, and in principle keywords in an Imp program are written with underlining. However this was seldom done in practise (in fact the last implementation to support underlining was back when the language was still called Atlas Autocode) and the convention used was that alphabetic sequences introduced by a '%' character were to be considered as being underlined, with the underlining terminating on the first non-alphabetic character. Imp compilers applied a 'line reconstruction' phase to their input, converting underlined letters into an internal representation distinct from regular letters, whilst removing all spaces (but not line endings) from the input other than within quoted strings and characters.
+
+It is however quite acceptable to show listings of Imp programs with underlined (or bold) keywords in place of %-stropped keywords.
+==Citation==
+
+==Todo==
+* [[Tasks not implemented in Imp77]]
+
+
+{{language programming paradigm|Imperative}}
\ No newline at end of file
diff --git a/Lang/Imp77/00-META.yaml b/Lang/Imp77/00-META.yaml
new file mode 100644
index 0000000000..382e836f84
--- /dev/null
+++ b/Lang/Imp77/00-META.yaml
@@ -0,0 +1,2 @@
+---
+from: http://rosettacode.org/wiki/Category:Imp77
diff --git a/Lang/Imp77/Towers-of-Hanoi b/Lang/Imp77/Towers-of-Hanoi
new file mode 120000
index 0000000000..9cf1e23a14
--- /dev/null
+++ b/Lang/Imp77/Towers-of-Hanoi
@@ -0,0 +1 @@
+../../Task/Towers-of-Hanoi/Imp77
\ No newline at end of file
diff --git a/Lang/Imp77/Trabb-Pardo-Knuth-algorithm b/Lang/Imp77/Trabb-Pardo-Knuth-algorithm
new file mode 120000
index 0000000000..974a19fbc9
--- /dev/null
+++ b/Lang/Imp77/Trabb-Pardo-Knuth-algorithm
@@ -0,0 +1 @@
+../../Task/Trabb-Pardo-Knuth-algorithm/Imp77
\ No newline at end of file
diff --git a/Lang/J/00-LANG.txt b/Lang/J/00-LANG.txt
index c3a67e79d5..c2cd3a263c 100644
--- a/Lang/J/00-LANG.txt
+++ b/Lang/J/00-LANG.txt
@@ -117,6 +117,7 @@ Discussion of the goals of the J community on RC and general guidelines for pres
*[[User:Lambertdw|David Lambert]]:[[Special:Contributions/Lambertdw|contributions]]
*[[User:JimTheriot|JimTheriot]]: [[Special:Contributions/JimTheriot|contributions]]
*[[User:DevonMcC|Devon McCormick]]: [[Special:Contributions/DevonMcC|contributions]]
+*[[User:Cchando|Cameron Chandoke]]: [[Special:Contributions/Cchando|contributions]]
== Try me ==
diff --git a/Lang/Java/Bitwise-IO b/Lang/Java/Bitwise-IO
new file mode 120000
index 0000000000..91887eddd0
--- /dev/null
+++ b/Lang/Java/Bitwise-IO
@@ -0,0 +1 @@
+../../Task/Bitwise-IO/Java
\ No newline at end of file
diff --git a/Lang/Java/Compare-sorting-algorithms-performance b/Lang/Java/Compare-sorting-algorithms-performance
new file mode 120000
index 0000000000..1c312e8af3
--- /dev/null
+++ b/Lang/Java/Compare-sorting-algorithms-performance
@@ -0,0 +1 @@
+../../Task/Compare-sorting-algorithms-performance/Java
\ No newline at end of file
diff --git a/Lang/Java/Cyclops-numbers b/Lang/Java/Cyclops-numbers
new file mode 120000
index 0000000000..2d9674ea30
--- /dev/null
+++ b/Lang/Java/Cyclops-numbers
@@ -0,0 +1 @@
+../../Task/Cyclops-numbers/Java
\ No newline at end of file
diff --git a/Lang/Java/Deconvolution-2D+ b/Lang/Java/Deconvolution-2D+
new file mode 120000
index 0000000000..a4641fed07
--- /dev/null
+++ b/Lang/Java/Deconvolution-2D+
@@ -0,0 +1 @@
+../../Task/Deconvolution-2D+/Java
\ No newline at end of file
diff --git a/Lang/Java/Dominoes b/Lang/Java/Dominoes
new file mode 120000
index 0000000000..f00d194617
--- /dev/null
+++ b/Lang/Java/Dominoes
@@ -0,0 +1 @@
+../../Task/Dominoes/Java
\ No newline at end of file
diff --git a/Lang/Java/French-Republican-calendar b/Lang/Java/French-Republican-calendar
new file mode 120000
index 0000000000..2451cb085a
--- /dev/null
+++ b/Lang/Java/French-Republican-calendar
@@ -0,0 +1 @@
+../../Task/French-Republican-calendar/Java
\ No newline at end of file
diff --git a/Lang/Java/Natural-sorting b/Lang/Java/Natural-sorting
new file mode 120000
index 0000000000..9f37ed8709
--- /dev/null
+++ b/Lang/Java/Natural-sorting
@@ -0,0 +1 @@
+../../Task/Natural-sorting/Java
\ No newline at end of file
diff --git a/Lang/Java/Nested-templated-data b/Lang/Java/Nested-templated-data
new file mode 120000
index 0000000000..ffed37deff
--- /dev/null
+++ b/Lang/Java/Nested-templated-data
@@ -0,0 +1 @@
+../../Task/Nested-templated-data/Java
\ No newline at end of file
diff --git a/Lang/Java/Rendezvous b/Lang/Java/Rendezvous
new file mode 120000
index 0000000000..b182a3392e
--- /dev/null
+++ b/Lang/Java/Rendezvous
@@ -0,0 +1 @@
+../../Task/Rendezvous/Java
\ No newline at end of file
diff --git a/Lang/JavaScript/Check-output-device-is-a-terminal b/Lang/JavaScript/Check-output-device-is-a-terminal
new file mode 120000
index 0000000000..0efca1a6ff
--- /dev/null
+++ b/Lang/JavaScript/Check-output-device-is-a-terminal
@@ -0,0 +1 @@
+../../Task/Check-output-device-is-a-terminal/JavaScript
\ No newline at end of file
diff --git a/Lang/Jq/15-puzzle-game b/Lang/Jq/15-puzzle-game
new file mode 120000
index 0000000000..9c065d8ccc
--- /dev/null
+++ b/Lang/Jq/15-puzzle-game
@@ -0,0 +1 @@
+../../Task/15-puzzle-game/Jq
\ No newline at end of file
diff --git a/Lang/Jq/15-puzzle-solver b/Lang/Jq/15-puzzle-solver
new file mode 120000
index 0000000000..e822e3d4e7
--- /dev/null
+++ b/Lang/Jq/15-puzzle-solver
@@ -0,0 +1 @@
+../../Task/15-puzzle-solver/Jq
\ No newline at end of file
diff --git a/Lang/Jq/Chaocipher b/Lang/Jq/Chaocipher
new file mode 120000
index 0000000000..3383992151
--- /dev/null
+++ b/Lang/Jq/Chaocipher
@@ -0,0 +1 @@
+../../Task/Chaocipher/Jq
\ No newline at end of file
diff --git a/Lang/Jq/Pancake-numbers b/Lang/Jq/Pancake-numbers
new file mode 120000
index 0000000000..7c0b6487cc
--- /dev/null
+++ b/Lang/Jq/Pancake-numbers
@@ -0,0 +1 @@
+../../Task/Pancake-numbers/Jq
\ No newline at end of file
diff --git a/Lang/Jq/Prime-numbers-whose-neighboring-pairs-are-tetraprimes b/Lang/Jq/Prime-numbers-whose-neighboring-pairs-are-tetraprimes
new file mode 120000
index 0000000000..e1fd0d226c
--- /dev/null
+++ b/Lang/Jq/Prime-numbers-whose-neighboring-pairs-are-tetraprimes
@@ -0,0 +1 @@
+../../Task/Prime-numbers-whose-neighboring-pairs-are-tetraprimes/Jq
\ No newline at end of file
diff --git a/Lang/Jq/Twos-complement b/Lang/Jq/Twos-complement
new file mode 120000
index 0000000000..79d28d31d7
--- /dev/null
+++ b/Lang/Jq/Twos-complement
@@ -0,0 +1 @@
+../../Task/Twos-complement/Jq
\ No newline at end of file
diff --git a/Lang/Jq/Vogels-approximation-method b/Lang/Jq/Vogels-approximation-method
new file mode 120000
index 0000000000..fb9aff7884
--- /dev/null
+++ b/Lang/Jq/Vogels-approximation-method
@@ -0,0 +1 @@
+../../Task/Vogels-approximation-method/Jq
\ No newline at end of file
diff --git a/Lang/K/Bulls-and-cows b/Lang/K/Bulls-and-cows
new file mode 120000
index 0000000000..97544c963d
--- /dev/null
+++ b/Lang/K/Bulls-and-cows
@@ -0,0 +1 @@
+../../Task/Bulls-and-cows/K
\ No newline at end of file
diff --git a/Lang/K/Monads-Maybe-monad b/Lang/K/Monads-Maybe-monad
new file mode 120000
index 0000000000..c39136ba4b
--- /dev/null
+++ b/Lang/K/Monads-Maybe-monad
@@ -0,0 +1 @@
+../../Task/Monads-Maybe-monad/K
\ No newline at end of file
diff --git a/Lang/K/Reverse-words-in-a-string b/Lang/K/Reverse-words-in-a-string
new file mode 120000
index 0000000000..d83b97640c
--- /dev/null
+++ b/Lang/K/Reverse-words-in-a-string
@@ -0,0 +1 @@
+../../Task/Reverse-words-in-a-string/K
\ No newline at end of file
diff --git a/Lang/K/Tic-tac-toe b/Lang/K/Tic-tac-toe
new file mode 120000
index 0000000000..bdd7e9ba5b
--- /dev/null
+++ b/Lang/K/Tic-tac-toe
@@ -0,0 +1 @@
+../../Task/Tic-tac-toe/K
\ No newline at end of file
diff --git a/Lang/Komodo/00-LANG.txt b/Lang/Komodo/00-LANG.txt
new file mode 100644
index 0000000000..90f6e00b5c
--- /dev/null
+++ b/Lang/Komodo/00-LANG.txt
@@ -0,0 +1,4 @@
+{{language
+|exec=interpreted
+|site=https://komodo-lang.org}}{{language programming paradigm|Declarative}}{{language programming paradigm|Procedural}}
+Komodo is a programming language to test ideas in a fast and easy way. It is ideal for problems with basic discrete structures, like numbers and words. Komodo tries to make operating with these entities as easy as possible while minimizing the amount of code needed to achieve a successful implementation. Komodo is a scripting language regarding its flexibility, but it is a pretty specific language with a lot of assumptions about how things should be. Komodo is an experimental language, and some of its features are there because I had a personal preference for them.
\ No newline at end of file
diff --git a/Lang/Komodo/00-META.yaml b/Lang/Komodo/00-META.yaml
new file mode 100644
index 0000000000..c626a5f324
--- /dev/null
+++ b/Lang/Komodo/00-META.yaml
@@ -0,0 +1,2 @@
+---
+from: http://rosettacode.org/wiki/Category:Komodo
diff --git a/Lang/Komodo/Arithmetic-Integer b/Lang/Komodo/Arithmetic-Integer
new file mode 120000
index 0000000000..bfaefbd88d
--- /dev/null
+++ b/Lang/Komodo/Arithmetic-Integer
@@ -0,0 +1 @@
+../../Task/Arithmetic-Integer/Komodo
\ No newline at end of file
diff --git a/Lang/Komodo/Array-concatenation b/Lang/Komodo/Array-concatenation
new file mode 120000
index 0000000000..bc329941d2
--- /dev/null
+++ b/Lang/Komodo/Array-concatenation
@@ -0,0 +1 @@
+../../Task/Array-concatenation/Komodo
\ No newline at end of file
diff --git a/Lang/Komodo/Empty-string b/Lang/Komodo/Empty-string
new file mode 120000
index 0000000000..9210767339
--- /dev/null
+++ b/Lang/Komodo/Empty-string
@@ -0,0 +1 @@
+../../Task/Empty-string/Komodo
\ No newline at end of file
diff --git a/Lang/Komodo/FizzBuzz b/Lang/Komodo/FizzBuzz
new file mode 120000
index 0000000000..49b35c998a
--- /dev/null
+++ b/Lang/Komodo/FizzBuzz
@@ -0,0 +1 @@
+../../Task/FizzBuzz/Komodo
\ No newline at end of file
diff --git a/Lang/Komodo/Function-definition b/Lang/Komodo/Function-definition
new file mode 120000
index 0000000000..375c03b7e3
--- /dev/null
+++ b/Lang/Komodo/Function-definition
@@ -0,0 +1 @@
+../../Task/Function-definition/Komodo
\ No newline at end of file
diff --git a/Lang/Komodo/Greatest-element-of-a-list b/Lang/Komodo/Greatest-element-of-a-list
new file mode 120000
index 0000000000..61a341a27e
--- /dev/null
+++ b/Lang/Komodo/Greatest-element-of-a-list
@@ -0,0 +1 @@
+../../Task/Greatest-element-of-a-list/Komodo
\ No newline at end of file
diff --git a/Lang/Komodo/Hello-world-Text b/Lang/Komodo/Hello-world-Text
new file mode 120000
index 0000000000..cf4d6242bb
--- /dev/null
+++ b/Lang/Komodo/Hello-world-Text
@@ -0,0 +1 @@
+../../Task/Hello-world-Text/Komodo
\ No newline at end of file
diff --git a/Lang/Komodo/Literals-Integer b/Lang/Komodo/Literals-Integer
new file mode 120000
index 0000000000..e770e3710e
--- /dev/null
+++ b/Lang/Komodo/Literals-Integer
@@ -0,0 +1 @@
+../../Task/Literals-Integer/Komodo
\ No newline at end of file
diff --git a/Lang/Komodo/Logical-operations b/Lang/Komodo/Logical-operations
new file mode 120000
index 0000000000..f15b7485a0
--- /dev/null
+++ b/Lang/Komodo/Logical-operations
@@ -0,0 +1 @@
+../../Task/Logical-operations/Komodo
\ No newline at end of file
diff --git a/Lang/Komodo/Null-object b/Lang/Komodo/Null-object
new file mode 120000
index 0000000000..a6a020a8ca
--- /dev/null
+++ b/Lang/Komodo/Null-object
@@ -0,0 +1 @@
+../../Task/Null-object/Komodo
\ No newline at end of file
diff --git a/Lang/Komodo/Set b/Lang/Komodo/Set
new file mode 120000
index 0000000000..a5c8370f07
--- /dev/null
+++ b/Lang/Komodo/Set
@@ -0,0 +1 @@
+../../Task/Set/Komodo
\ No newline at end of file
diff --git a/Lang/Komodo/String-concatenation b/Lang/Komodo/String-concatenation
new file mode 120000
index 0000000000..72385e6195
--- /dev/null
+++ b/Lang/Komodo/String-concatenation
@@ -0,0 +1 @@
+../../Task/String-concatenation/Komodo
\ No newline at end of file
diff --git a/Lang/MSX-Basic/Generate-lower-case-ASCII-alphabet b/Lang/MSX-Basic/Generate-lower-case-ASCII-alphabet
new file mode 120000
index 0000000000..8cceece87f
--- /dev/null
+++ b/Lang/MSX-Basic/Generate-lower-case-ASCII-alphabet
@@ -0,0 +1 @@
+../../Task/Generate-lower-case-ASCII-alphabet/MSX-Basic
\ No newline at end of file
diff --git a/Lang/MSX-Basic/Leonardo-numbers b/Lang/MSX-Basic/Leonardo-numbers
new file mode 120000
index 0000000000..070fbe9186
--- /dev/null
+++ b/Lang/MSX-Basic/Leonardo-numbers
@@ -0,0 +1 @@
+../../Task/Leonardo-numbers/MSX-Basic
\ No newline at end of file
diff --git a/Lang/MSX-Basic/Pascals-triangle b/Lang/MSX-Basic/Pascals-triangle
new file mode 120000
index 0000000000..bfaa04f0db
--- /dev/null
+++ b/Lang/MSX-Basic/Pascals-triangle
@@ -0,0 +1 @@
+../../Task/Pascals-triangle/MSX-Basic
\ No newline at end of file
diff --git a/Lang/MUMPS/Menu b/Lang/MUMPS/Menu
deleted file mode 120000
index e9b86505e7..0000000000
--- a/Lang/MUMPS/Menu
+++ /dev/null
@@ -1 +0,0 @@
-../../Task/Menu/MUMPS
\ No newline at end of file
diff --git a/Lang/MariaDB/00-LANG.txt b/Lang/MariaDB/00-LANG.txt
new file mode 100644
index 0000000000..fc505f9a24
--- /dev/null
+++ b/Lang/MariaDB/00-LANG.txt
@@ -0,0 +1,15 @@
+{{language|MariaDB}}
+{{implementation|SQL}}
+
+'''MariaDB''' is a relational database management system (RDBMS) with non-relational extensions, like JSON and dynamic columns. It was originally forked from MySQL. After Oracle acquired MySQL in 2009, its creator Michael "Monty" Widenius and other developers from the team created MariaDB. MariaDB was named after Monty's second daughter, Maria.
+
+MariaDB is backed by two organisations: the MariaDB Foundation, a not-for-profit organisation that makes sure that MariaDB will remain free forever; and MariaDB plc, a company that provides MariaDB support and sells the MariaDB Enterprise edition. MariaDB code is distributed under the GNU GPL 2. Part of the code belongs to Oracle, because it derives from MySQL. MariaDB KnowledgeBase, its documentation, is available under that GNU FDL and the CC-BY-SA 3.0.
+
+MariaDB SQL has procedural extensions, which can be used to develop stored procedures, stored functions, triggers and events, as well as anonymous code blocks. It also supports a PL/SQL parser, available when MariaDB is used in Oracle compatibility mode. User-Defined Functions can also be written in a compiled language and be used in SQL statements. MariaDB also supports storage engines and other types of plugins.
+
+== External Links ==
+* [https://en.wikipedia.org/wiki/MariaDB Wikipedia:MariaDB]
+* [https://mariadb.com/kb MariaDB KnowledgeBase]
+* [https://mariadb.com/ MariaDB website]
+
+[[Category:SQL Derivatives]]
\ No newline at end of file
diff --git a/Lang/MariaDB/00-META.yaml b/Lang/MariaDB/00-META.yaml
new file mode 100644
index 0000000000..4ad202983e
--- /dev/null
+++ b/Lang/MariaDB/00-META.yaml
@@ -0,0 +1,2 @@
+---
+from: http://rosettacode.org/wiki/Category:MariaDB
diff --git a/Lang/MariaDB/Conditional-structures b/Lang/MariaDB/Conditional-structures
new file mode 120000
index 0000000000..1ed7f68fbf
--- /dev/null
+++ b/Lang/MariaDB/Conditional-structures
@@ -0,0 +1 @@
+../../Task/Conditional-structures/MariaDB
\ No newline at end of file
diff --git a/Lang/MariaDB/Hello-world-Text b/Lang/MariaDB/Hello-world-Text
new file mode 120000
index 0000000000..bc1357e35b
--- /dev/null
+++ b/Lang/MariaDB/Hello-world-Text
@@ -0,0 +1 @@
+../../Task/Hello-world-Text/MariaDB
\ No newline at end of file
diff --git a/Lang/MariaDB/Parameterized-SQL-statement b/Lang/MariaDB/Parameterized-SQL-statement
new file mode 120000
index 0000000000..28a4df441a
--- /dev/null
+++ b/Lang/MariaDB/Parameterized-SQL-statement
@@ -0,0 +1 @@
+../../Task/Parameterized-SQL-statement/MariaDB
\ No newline at end of file
diff --git a/Lang/MariaDB/Table-creation-Postal-addresses b/Lang/MariaDB/Table-creation-Postal-addresses
new file mode 120000
index 0000000000..5f671a41e1
--- /dev/null
+++ b/Lang/MariaDB/Table-creation-Postal-addresses
@@ -0,0 +1 @@
+../../Task/Table-creation-Postal-addresses/MariaDB
\ No newline at end of file
diff --git a/Lang/Mastermind/00-LANG.txt b/Lang/Mastermind/00-LANG.txt
new file mode 100644
index 0000000000..faed2e3417
--- /dev/null
+++ b/Lang/Mastermind/00-LANG.txt
@@ -0,0 +1,292 @@
+{{stub}}{{language|Mastermind}}
+Mastermind is a programming language designed specifically to create [[Brainf***]] code. The [https://mastermind.lostpixels.org Mastermind IDE] includes a [[Rust]]-based compiler, which converts (compiles) Mastermind source programs into Brainf***.
+The current Mastermind compiler generates Brainf*** code assuming an infinite bi-directional tape, as well as 8-bit wrapping cells https://github.com/Heathcorp/Mastermind.
+
+== Usage ==
+
+=== Variables & Values ===
+
+Variables can be defined as single cells, or as contiguous sets of cells:
+// single-cell:
+let var = 56;
+let c = 'g';
+let bool = true; // true/false equivalent to 1/0
+// multi-cell:
+let array[4] = [1, 2, 3, 4];
+let string[5] = "hello";
+If left uninitialised, a cell is assumed to have a value of 0.
+
+Expressions consist of simple adds and subtractions, arrays and strings cannot be used in expressions:
+
+// supported:
+var += 4 + (5 - 4 + (3 - 2));
+var = 'g' - 23 + true;
+var = var + 5; // inefficient but supported
+var += array[0] + 5;
+let arr[3] = [4 + 3 - ('5' - 46), 1, 3];
+
+// NOT supported:
+var += [4, 5, 7][1] + 3;
+Array indices must be compile-time constant integers
+
+=== Input & Output ===
+
+Single bytes can be output using the ''output'' operator:
+
+output 'h';
+output var;
+output var + 6;
+output array[0];
+// the following are equivalent:
+output '\n';
+output 10;
+Likewise for ''input'':
+
+input var;
+input arr[2];
+There is also ''*'' spread syntax and support for strings and arrays for ease of use:
+
+output "hello";
+output ['1', '2', '3'];
+output *array;
+
+input *array;
+
+=== Loops ===
+
+The simplest is the ''while'' loop, which only supports cell references, not expressions:
+
+while var {
+ // do stuff
+ // var -= 1;
+ // etc
+}
+
+==== Draining loops ====
+The "drain" loop is equivalent to the common Brainf*** construction of repeating an action ''N'' times, where ''N'' is the value of a tape cell. Hence, "draining" the cell while doing the actions in the loop body.
+
+drain var {
+
+}
+// shorthand for following:
+while var {
+ // do stuff
+ var -= 1;
+}
+This destructively loops as many times as the value in the cell being referenced, this can be used with expressions:
+
+drain 10 {}
+drain var - 6 {}
+There is also shorthand "into" syntax for adding to other cells:
+
+drain var into other_var other_var_2 *spread_array etc;
+
+// example of typical "for loop":
+let i;
+drain 10 into i {
+ output '0' + i; // inefficient for the example
+}
+// "0123456789"
+// equivalent to the following:
+let i;
+let N = 10;
+while N {
+ output '0' + i;
+}
+
+==== Copying loops ====
+The "copy" loop is equivalent to the drain loop, except it is not destructive. This means the variable can be accessed safely from inside the loop body.
+
+copy var into other_var *spread_var etc;
+
+// examples:
+copy var {
+ // this will output the original var value, var times
+ output var;
+}
+
+let rows = 3;
+let columns = 6;
+let total;
+drain rows {
+ copy columns into total {
+ output '.';
+ }
+}
+// ......
+// ......
+// ......
+
+=== If/Else ===
+The "if" and "else" keywords operate similar to [[C]], except "else if" is not supported. The code in the "if" body will be executed if the provided expression is positive, otherwise the "else" body is executed. If the "not" keyword is used, the behavior is reversed.
+Examples:
+
+if 13 {
+ output "13";
+}
+
+if var {
+ output "true";
+} else {
+ output "false";
+}
+
+// typical equivalence use-case:
+if not var - 10 {
+ // ==
+} else {
+ // !=
+}
+
+=== Functions ===
+Functions work like templates/macros, as they do not perform any passing by value. All functions are in-lined at compile time. This means multiple calls to a large function will significantly increase your compiled [[Brainf***]] size.
+
+For this reason, function arguments are given using ''<'' angled bracket ''>'' syntax, much like generic functions in other languages:
+
+def quote {
+ output 39; // ASCII single quote
+ output arg;
+ output 39;
+}
+
+let N = 'g';
+quote;
+N += 3;
+quote;
+// gj
+
+=== Imports ===
+
+Imports work much like the [[C]] preprocessor:
+
+#include "other_file"
+This copies the contents of "other_file" into the current file at compile-time.
+
+=== In-line Brainf*** features ===
+
+In-line Brainf*** allows the programmer to define custom behavior as if writing raw [[Brainf***]], this is analogous to [[C]]'s in-line [[Assembly]].
+
+
+// This is its most basic form:
+// find the next cell that equals -1
+bf {
+ +[->+]-
+}
+
+// This is its more advanced form:
+// input a line of lowercase letters and output the uppercase version
+// this is an intentionally inefficient example
+bf @3 clobbers var *spread_var etc {
+ ,----------[++++++++++>,----------]
+ <[<]>
+ [
+ {
+ let g @0;
+ assert g unknown;
+ output g + ('A' - 'a');
+ // embedded Mastermind!
+ }
+ >
+ ]
+ // now clear and return
+ <[[-]<]>
+}
+It is the programmer's responsibility to clear used cells and return back to the cell in which the in-line Brainf*** context began. If the programmer does not do this, any Mastermind code after the in-line Brainf*** command will likely break.
+
+==== Memory location specifiers ====
+For hand-tuning optimizations and in-line Brainf*** that reads from Mastermind variables, you can specify the location on the Brainf*** tape:
+Variables can be fixed to a specified location on the eventual Brainf*** tape. This can also be done with in-line Brainf*** code sections. This can be used to share values between Mastermind and Brainf*** contexts.
+
+let var @3 = 4;
+// compiled: >>>++++
+
+bf @4 {
+ <><><>
+}
+// compiled: >>>><><><>
+
+==== Clobbering and Assertions ====
+The Mastermind compiler will try to predict the value of cells at compile-time, so it can prevent unnecessary cell clean-ups and unreachable code (with optimizations turned on). If your in-line Brainf*** affects existing Mastermind variables, you should tell the compiler using the "clobbers" keyword, the syntax is similar to the ''drain into'' variable list:
+
+bf clobbers var *spread_var other_var etc {}
+The compiler will now assume nothing about the values of those variables afterwards.
+
+If instead you want to tell the compiler specifically that a value has become certain, you can use ''assert'':
+
+assert var equals 3;
+// most common use cases:
+assert var equals 0;
+assert var unknown;
+Asserting a variable as ''unknown'' is equivalent to clobbering.
+
+==== Embedded Mastermind ====
+Embedding Mastermind into your in-line [[Brainf***]] allows you to use Mastermind syntax features for programs within your Brainf***, this is useful for ''N''-length string based programs, or anything not possible in pure Mastermind:
+
+
+let sum @0;
+
+bf @0 {
+ >>
+ // read input (until eof) to the tape, nullifying any spaces or newlines
+ // (this is probably not a good practical example, ideas are appreciated)
+ ,[
+ {
+ let c @0;
+ assert c unknown; // needed otherwise the compiler assumes c = 0
+
+ if not (c - '\n') {
+ c = 0;
+ }
+ if not (c - ' ') {
+ c = 0;
+ }
+ }
+ >,
+ ]
+}
+Memory location specifiers are relative to the current Mastermind context. Also, top-level variables are not cleared by default in Mastermind contexts, this allows you to "leave" variables in cells for your Brainf*** to use. If you want your embedded Mastermind to clean itself up, you can simply open a scope at the top level:
+
+bf {
+ ++----++[][][<><><>] // the program doesn't matter for this example
+ {
+ // variables here will not be cleared
+ let g @2;
+ assert g unknown;
+ {
+ // variables here will be cleared
+ let b = 32;
+ }
+ }
+ {{
+ // self-cleaning Mastermind code here
+ }}
+}
+
+==== Advanced ====
+All Mastermind features are available within the embedded Mastermind contexts, including in-line [[Brainf***]] code.
+
+bf {
+ ++++[
+ {
+ let i @0;
+ assert i unknown;
+ let j @1 = i + 1;
+
+ bf @1 {
+ [.+]
+ {
+ // even more layers are possible
+ bf {
+ {
+ output "h"
+ }
+ }
+ }
+ }
+ }
+ -]
+}
+
+
+== References ==
+{{reflist}}
\ No newline at end of file
diff --git a/Lang/Mastermind/00-META.yaml b/Lang/Mastermind/00-META.yaml
new file mode 100644
index 0000000000..52ba5ad7eb
--- /dev/null
+++ b/Lang/Mastermind/00-META.yaml
@@ -0,0 +1,2 @@
+---
+from: http://rosettacode.org/wiki/Category:Mastermind
diff --git a/Lang/Mastermind/Hello-world-Text b/Lang/Mastermind/Hello-world-Text
new file mode 120000
index 0000000000..a0461bd60e
--- /dev/null
+++ b/Lang/Mastermind/Hello-world-Text
@@ -0,0 +1 @@
+../../Task/Hello-world-Text/Mastermind
\ No newline at end of file
diff --git a/Lang/Mastermind/Repeat b/Lang/Mastermind/Repeat
new file mode 120000
index 0000000000..25794ace84
--- /dev/null
+++ b/Lang/Mastermind/Repeat
@@ -0,0 +1 @@
+../../Task/Repeat/Mastermind
\ No newline at end of file
diff --git a/Lang/Mathematica/Arithmetic-derivative b/Lang/Mathematica/Arithmetic-derivative
new file mode 120000
index 0000000000..a9033ded41
--- /dev/null
+++ b/Lang/Mathematica/Arithmetic-derivative
@@ -0,0 +1 @@
+../../Task/Arithmetic-derivative/Mathematica
\ No newline at end of file
diff --git a/Lang/Mathematica/Doomsday-rule b/Lang/Mathematica/Doomsday-rule
new file mode 120000
index 0000000000..92b8fc707b
--- /dev/null
+++ b/Lang/Mathematica/Doomsday-rule
@@ -0,0 +1 @@
+../../Task/Doomsday-rule/Mathematica
\ No newline at end of file
diff --git a/Lang/Mathematica/Jordan-P-lya-numbers b/Lang/Mathematica/Jordan-P-lya-numbers
new file mode 120000
index 0000000000..4fd2ab0262
--- /dev/null
+++ b/Lang/Mathematica/Jordan-P-lya-numbers
@@ -0,0 +1 @@
+../../Task/Jordan-P-lya-numbers/Mathematica
\ No newline at end of file
diff --git a/Lang/Mathematica/Radical-of-an-integer b/Lang/Mathematica/Radical-of-an-integer
new file mode 120000
index 0000000000..e6b1268eae
--- /dev/null
+++ b/Lang/Mathematica/Radical-of-an-integer
@@ -0,0 +1 @@
+../../Task/Radical-of-an-integer/Mathematica
\ No newline at end of file
diff --git a/Lang/Mathematica/Sudan-function b/Lang/Mathematica/Sudan-function
new file mode 120000
index 0000000000..915d15ee53
--- /dev/null
+++ b/Lang/Mathematica/Sudan-function
@@ -0,0 +1 @@
+../../Task/Sudan-function/Mathematica
\ No newline at end of file
diff --git a/Lang/Minimal-BASIC/Leonardo-numbers b/Lang/Minimal-BASIC/Leonardo-numbers
new file mode 120000
index 0000000000..c45ebe1ebc
--- /dev/null
+++ b/Lang/Minimal-BASIC/Leonardo-numbers
@@ -0,0 +1 @@
+../../Task/Leonardo-numbers/Minimal-BASIC
\ No newline at end of file
diff --git a/Lang/Minimal-BASIC/Loops-Infinite b/Lang/Minimal-BASIC/Loops-Infinite
new file mode 120000
index 0000000000..a936b362aa
--- /dev/null
+++ b/Lang/Minimal-BASIC/Loops-Infinite
@@ -0,0 +1 @@
+../../Task/Loops-Infinite/Minimal-BASIC
\ No newline at end of file
diff --git a/Lang/Minimal-BASIC/Pancake-numbers b/Lang/Minimal-BASIC/Pancake-numbers
new file mode 120000
index 0000000000..5141be0a11
--- /dev/null
+++ b/Lang/Minimal-BASIC/Pancake-numbers
@@ -0,0 +1 @@
+../../Task/Pancake-numbers/Minimal-BASIC
\ No newline at end of file
diff --git a/Lang/Minimal-BASIC/Sum-of-a-series b/Lang/Minimal-BASIC/Sum-of-a-series
new file mode 120000
index 0000000000..b515c8004d
--- /dev/null
+++ b/Lang/Minimal-BASIC/Sum-of-a-series
@@ -0,0 +1 @@
+../../Task/Sum-of-a-series/Minimal-BASIC
\ No newline at end of file
diff --git a/Lang/Miranda/Combinations b/Lang/Miranda/Combinations
new file mode 120000
index 0000000000..b252f73176
--- /dev/null
+++ b/Lang/Miranda/Combinations
@@ -0,0 +1 @@
+../../Task/Combinations/Miranda
\ No newline at end of file
diff --git a/Lang/Miranda/Execute-Brain- b/Lang/Miranda/Execute-Brain-
new file mode 120000
index 0000000000..e3f7d58819
--- /dev/null
+++ b/Lang/Miranda/Execute-Brain-
@@ -0,0 +1 @@
+../../Task/Execute-Brain-/Miranda
\ No newline at end of file
diff --git a/Lang/Miranda/Partition-an-integer-x-into-n-primes b/Lang/Miranda/Partition-an-integer-x-into-n-primes
new file mode 120000
index 0000000000..0d73af13aa
--- /dev/null
+++ b/Lang/Miranda/Partition-an-integer-x-into-n-primes
@@ -0,0 +1 @@
+../../Task/Partition-an-integer-x-into-n-primes/Miranda
\ No newline at end of file
diff --git a/Lang/MySQL/00-LANG.txt b/Lang/MySQL/00-LANG.txt
index 9f2e3a69fb..bf94001666 100644
--- a/Lang/MySQL/00-LANG.txt
+++ b/Lang/MySQL/00-LANG.txt
@@ -1,9 +1,9 @@
{{language}}
'''MySQL''' is a multithreaded, multi-user, SQL Database Management System (DBMS) with more than six million installations.
-'''MySQL''' is owned and sponsored by a single for-profit firm, the Swedish company MySQL AB, which holds the copyright to most of the codebase. This is similar to the JBoss model and how the Free Software Foundation handles copyright in its projects, and dissimilar to how the Apache project does it, where the software is developed by a public community, and the copyright to the codebase is owned by its individual authors.
+'''MySQL''' is owned and sponsored by a single for-profit firm, Oracle, which holds the copyright to most of the codebase. This is similar to the JBoss model and how the Free Software Foundation handles copyright in its projects, and dissimilar to how the Apache project does it, where the software is developed by a public community, and the copyright to the codebase is owned by its individual authors.
-The company develops and maintains the system, selling support and service contracts, as well as proprietary-licensed copies of MySQL, and employing people all over the world who collaborate via the Internet. MySQL AB was founded by David Axmark, Allan Larsson, and Michael "Monty" Widenius.
+The company develops and maintains the system, selling support and service contracts, as well as a cloud variant called HeatWave (part of Oracle Cloud), proprietary-licensed copies of MySQL, and employing people all over the world who collaborate via the Internet. MySQL AB was founded by David Axmark, Allan Larsson, and Michael "Monty" Widenius.
==Citations==
* [http://en.wikipedia.org/wiki/Mysql Wikipedia:MySQL]
diff --git a/Lang/NewLISP/Abbreviations-simple b/Lang/NewLISP/Abbreviations-simple
new file mode 120000
index 0000000000..ec4184c6a2
--- /dev/null
+++ b/Lang/NewLISP/Abbreviations-simple
@@ -0,0 +1 @@
+../../Task/Abbreviations-simple/NewLISP
\ No newline at end of file
diff --git a/Lang/NewLISP/Ascending-primes b/Lang/NewLISP/Ascending-primes
new file mode 120000
index 0000000000..68daf13118
--- /dev/null
+++ b/Lang/NewLISP/Ascending-primes
@@ -0,0 +1 @@
+../../Task/Ascending-primes/NewLISP
\ No newline at end of file
diff --git a/Lang/NewLISP/Associative-array-Merging b/Lang/NewLISP/Associative-array-Merging
new file mode 120000
index 0000000000..8ebd2e6646
--- /dev/null
+++ b/Lang/NewLISP/Associative-array-Merging
@@ -0,0 +1 @@
+../../Task/Associative-array-Merging/NewLISP
\ No newline at end of file
diff --git a/Lang/NewLISP/Cartesian-product-of-two-or-more-lists b/Lang/NewLISP/Cartesian-product-of-two-or-more-lists
new file mode 120000
index 0000000000..4a3b5275b2
--- /dev/null
+++ b/Lang/NewLISP/Cartesian-product-of-two-or-more-lists
@@ -0,0 +1 @@
+../../Task/Cartesian-product-of-two-or-more-lists/NewLISP
\ No newline at end of file
diff --git a/Lang/NewLISP/Compare-a-list-of-strings b/Lang/NewLISP/Compare-a-list-of-strings
new file mode 120000
index 0000000000..9b0eddc19c
--- /dev/null
+++ b/Lang/NewLISP/Compare-a-list-of-strings
@@ -0,0 +1 @@
+../../Task/Compare-a-list-of-strings/NewLISP
\ No newline at end of file
diff --git a/Lang/NewLISP/Department-numbers b/Lang/NewLISP/Department-numbers
new file mode 120000
index 0000000000..17043dfb0a
--- /dev/null
+++ b/Lang/NewLISP/Department-numbers
@@ -0,0 +1 @@
+../../Task/Department-numbers/NewLISP
\ No newline at end of file
diff --git a/Lang/NewLISP/Dinesmans-multiple-dwelling-problem b/Lang/NewLISP/Dinesmans-multiple-dwelling-problem
new file mode 120000
index 0000000000..0b5efae41b
--- /dev/null
+++ b/Lang/NewLISP/Dinesmans-multiple-dwelling-problem
@@ -0,0 +1 @@
+../../Task/Dinesmans-multiple-dwelling-problem/NewLISP
\ No newline at end of file
diff --git a/Lang/NewLISP/Find-Chess960-starting-position-identifier b/Lang/NewLISP/Find-Chess960-starting-position-identifier
new file mode 120000
index 0000000000..772e0d75d4
--- /dev/null
+++ b/Lang/NewLISP/Find-Chess960-starting-position-identifier
@@ -0,0 +1 @@
+../../Task/Find-Chess960-starting-position-identifier/NewLISP
\ No newline at end of file
diff --git a/Lang/NewLISP/Loops-With-multiple-ranges b/Lang/NewLISP/Loops-With-multiple-ranges
new file mode 120000
index 0000000000..ef48847607
--- /dev/null
+++ b/Lang/NewLISP/Loops-With-multiple-ranges
@@ -0,0 +1 @@
+../../Task/Loops-With-multiple-ranges/NewLISP
\ No newline at end of file
diff --git a/Lang/NewLISP/Matrix-multiplication b/Lang/NewLISP/Matrix-multiplication
new file mode 120000
index 0000000000..0badc9299f
--- /dev/null
+++ b/Lang/NewLISP/Matrix-multiplication
@@ -0,0 +1 @@
+../../Task/Matrix-multiplication/NewLISP
\ No newline at end of file
diff --git a/Lang/NewLISP/Multisplit b/Lang/NewLISP/Multisplit
new file mode 120000
index 0000000000..1bb5fea36e
--- /dev/null
+++ b/Lang/NewLISP/Multisplit
@@ -0,0 +1 @@
+../../Task/Multisplit/NewLISP
\ No newline at end of file
diff --git a/Lang/NewLISP/Range-consolidation b/Lang/NewLISP/Range-consolidation
new file mode 120000
index 0000000000..15f7beee34
--- /dev/null
+++ b/Lang/NewLISP/Range-consolidation
@@ -0,0 +1 @@
+../../Task/Range-consolidation/NewLISP
\ No newline at end of file
diff --git a/Lang/NewLISP/Range-expansion b/Lang/NewLISP/Range-expansion
new file mode 120000
index 0000000000..8f2d253805
--- /dev/null
+++ b/Lang/NewLISP/Range-expansion
@@ -0,0 +1 @@
+../../Task/Range-expansion/NewLISP
\ No newline at end of file
diff --git a/Lang/NewLISP/Run-length-encoding b/Lang/NewLISP/Run-length-encoding
new file mode 120000
index 0000000000..91cae97224
--- /dev/null
+++ b/Lang/NewLISP/Run-length-encoding
@@ -0,0 +1 @@
+../../Task/Run-length-encoding/NewLISP
\ No newline at end of file
diff --git a/Lang/NewLISP/Set-consolidation b/Lang/NewLISP/Set-consolidation
new file mode 120000
index 0000000000..9d4d20d448
--- /dev/null
+++ b/Lang/NewLISP/Set-consolidation
@@ -0,0 +1 @@
+../../Task/Set-consolidation/NewLISP
\ No newline at end of file
diff --git a/Lang/NewLISP/Sorting-algorithms-Permutation-sort b/Lang/NewLISP/Sorting-algorithms-Permutation-sort
new file mode 120000
index 0000000000..a14257af91
--- /dev/null
+++ b/Lang/NewLISP/Sorting-algorithms-Permutation-sort
@@ -0,0 +1 @@
+../../Task/Sorting-algorithms-Permutation-sort/NewLISP
\ No newline at end of file
diff --git a/Lang/NewLISP/Split-a-character-string-based-on-change-of-character b/Lang/NewLISP/Split-a-character-string-based-on-change-of-character
new file mode 120000
index 0000000000..5af27e593c
--- /dev/null
+++ b/Lang/NewLISP/Split-a-character-string-based-on-change-of-character
@@ -0,0 +1 @@
+../../Task/Split-a-character-string-based-on-change-of-character/NewLISP
\ No newline at end of file
diff --git a/Lang/NewLISP/Text-processing-1 b/Lang/NewLISP/Text-processing-1
new file mode 120000
index 0000000000..39b0cd8b87
--- /dev/null
+++ b/Lang/NewLISP/Text-processing-1
@@ -0,0 +1 @@
+../../Task/Text-processing-1/NewLISP
\ No newline at end of file
diff --git a/Lang/NewLISP/Text-processing-Max-licenses-in-use b/Lang/NewLISP/Text-processing-Max-licenses-in-use
new file mode 120000
index 0000000000..fca40fd641
--- /dev/null
+++ b/Lang/NewLISP/Text-processing-Max-licenses-in-use
@@ -0,0 +1 @@
+../../Task/Text-processing-Max-licenses-in-use/NewLISP
\ No newline at end of file
diff --git a/Lang/NewLISP/Truncatable-primes b/Lang/NewLISP/Truncatable-primes
new file mode 120000
index 0000000000..52cd8db47d
--- /dev/null
+++ b/Lang/NewLISP/Truncatable-primes
@@ -0,0 +1 @@
+../../Task/Truncatable-primes/NewLISP
\ No newline at end of file
diff --git a/Lang/Nu/00-LANG.txt b/Lang/Nu/00-LANG.txt
index d173c3d735..4a1eea655e 100644
--- a/Lang/Nu/00-LANG.txt
+++ b/Lang/Nu/00-LANG.txt
@@ -1,3 +1,5 @@
-{{stub}}{{language|Nu}}
+{{stub}}
+{{language|Nu|site=https://www.nushell.sh|tags=nu}}
+{{Language programming paradigm|Functional}}
Nu is the programming language used by Nushell.
\ No newline at end of file
diff --git a/Lang/Nu/Associative-array-Merging b/Lang/Nu/Associative-array-Merging
new file mode 120000
index 0000000000..7f423eb251
--- /dev/null
+++ b/Lang/Nu/Associative-array-Merging
@@ -0,0 +1 @@
+../../Task/Associative-array-Merging/Nu
\ No newline at end of file
diff --git a/Lang/Nu/Averages-Arithmetic-mean b/Lang/Nu/Averages-Arithmetic-mean
new file mode 120000
index 0000000000..21a1e77aec
--- /dev/null
+++ b/Lang/Nu/Averages-Arithmetic-mean
@@ -0,0 +1 @@
+../../Task/Averages-Arithmetic-mean/Nu
\ No newline at end of file
diff --git a/Lang/Nu/Averages-Median b/Lang/Nu/Averages-Median
new file mode 120000
index 0000000000..8b1a3ddc2c
--- /dev/null
+++ b/Lang/Nu/Averages-Median
@@ -0,0 +1 @@
+../../Task/Averages-Median/Nu
\ No newline at end of file
diff --git a/Lang/Nu/Averages-Mode b/Lang/Nu/Averages-Mode
new file mode 120000
index 0000000000..bb3150600b
--- /dev/null
+++ b/Lang/Nu/Averages-Mode
@@ -0,0 +1 @@
+../../Task/Averages-Mode/Nu
\ No newline at end of file
diff --git a/Lang/Nu/Averages-Pythagorean-means b/Lang/Nu/Averages-Pythagorean-means
new file mode 120000
index 0000000000..02b10a7b5e
--- /dev/null
+++ b/Lang/Nu/Averages-Pythagorean-means
@@ -0,0 +1 @@
+../../Task/Averages-Pythagorean-means/Nu
\ No newline at end of file
diff --git a/Lang/Nu/Averages-Root-mean-square b/Lang/Nu/Averages-Root-mean-square
new file mode 120000
index 0000000000..ed92d8f206
--- /dev/null
+++ b/Lang/Nu/Averages-Root-mean-square
@@ -0,0 +1 @@
+../../Task/Averages-Root-mean-square/Nu
\ No newline at end of file
diff --git a/Lang/Nu/Base64-decode-data b/Lang/Nu/Base64-decode-data
new file mode 120000
index 0000000000..3620ff6de5
--- /dev/null
+++ b/Lang/Nu/Base64-decode-data
@@ -0,0 +1 @@
+../../Task/Base64-decode-data/Nu
\ No newline at end of file
diff --git a/Lang/Nu/Binary-digits b/Lang/Nu/Binary-digits
new file mode 120000
index 0000000000..cbbd7fb698
--- /dev/null
+++ b/Lang/Nu/Binary-digits
@@ -0,0 +1 @@
+../../Task/Binary-digits/Nu
\ No newline at end of file
diff --git a/Lang/Nu/Calculating-the-value-of-e b/Lang/Nu/Calculating-the-value-of-e
new file mode 120000
index 0000000000..60dd80e1f7
--- /dev/null
+++ b/Lang/Nu/Calculating-the-value-of-e
@@ -0,0 +1 @@
+../../Task/Calculating-the-value-of-e/Nu
\ No newline at end of file
diff --git a/Lang/Nu/Check-input-device-is-a-terminal b/Lang/Nu/Check-input-device-is-a-terminal
new file mode 120000
index 0000000000..2c12886796
--- /dev/null
+++ b/Lang/Nu/Check-input-device-is-a-terminal
@@ -0,0 +1 @@
+../../Task/Check-input-device-is-a-terminal/Nu
\ No newline at end of file
diff --git a/Lang/Nu/Check-output-device-is-a-terminal b/Lang/Nu/Check-output-device-is-a-terminal
new file mode 120000
index 0000000000..8ac81dc9fd
--- /dev/null
+++ b/Lang/Nu/Check-output-device-is-a-terminal
@@ -0,0 +1 @@
+../../Task/Check-output-device-is-a-terminal/Nu
\ No newline at end of file
diff --git a/Lang/Nu/Check-that-file-exists b/Lang/Nu/Check-that-file-exists
new file mode 120000
index 0000000000..aa750c153c
--- /dev/null
+++ b/Lang/Nu/Check-that-file-exists
@@ -0,0 +1 @@
+../../Task/Check-that-file-exists/Nu
\ No newline at end of file
diff --git a/Lang/Nu/Comma-quibbling b/Lang/Nu/Comma-quibbling
new file mode 120000
index 0000000000..6196295075
--- /dev/null
+++ b/Lang/Nu/Comma-quibbling
@@ -0,0 +1 @@
+../../Task/Comma-quibbling/Nu
\ No newline at end of file
diff --git a/Lang/Nu/Count-in-octal b/Lang/Nu/Count-in-octal
new file mode 120000
index 0000000000..b2bc3a9f84
--- /dev/null
+++ b/Lang/Nu/Count-in-octal
@@ -0,0 +1 @@
+../../Task/Count-in-octal/Nu
\ No newline at end of file
diff --git a/Lang/Nu/Count-occurrences-of-a-substring b/Lang/Nu/Count-occurrences-of-a-substring
new file mode 120000
index 0000000000..1a4f958e67
--- /dev/null
+++ b/Lang/Nu/Count-occurrences-of-a-substring
@@ -0,0 +1 @@
+../../Task/Count-occurrences-of-a-substring/Nu
\ No newline at end of file
diff --git a/Lang/Nu/Date-format b/Lang/Nu/Date-format
new file mode 120000
index 0000000000..b99fcd9487
--- /dev/null
+++ b/Lang/Nu/Date-format
@@ -0,0 +1 @@
+../../Task/Date-format/Nu
\ No newline at end of file
diff --git a/Lang/Nu/Day-of-the-week b/Lang/Nu/Day-of-the-week
new file mode 120000
index 0000000000..628ae77cde
--- /dev/null
+++ b/Lang/Nu/Day-of-the-week
@@ -0,0 +1 @@
+../../Task/Day-of-the-week/Nu
\ No newline at end of file
diff --git a/Lang/Nu/Dot-product b/Lang/Nu/Dot-product
new file mode 120000
index 0000000000..98aeabb740
--- /dev/null
+++ b/Lang/Nu/Dot-product
@@ -0,0 +1 @@
+../../Task/Dot-product/Nu
\ No newline at end of file
diff --git a/Lang/Nu/Entropy b/Lang/Nu/Entropy
new file mode 120000
index 0000000000..5bed68a8b8
--- /dev/null
+++ b/Lang/Nu/Entropy
@@ -0,0 +1 @@
+../../Task/Entropy/Nu
\ No newline at end of file
diff --git a/Lang/Nu/Even-or-odd b/Lang/Nu/Even-or-odd
new file mode 120000
index 0000000000..7bc71663d2
--- /dev/null
+++ b/Lang/Nu/Even-or-odd
@@ -0,0 +1 @@
+../../Task/Even-or-odd/Nu
\ No newline at end of file
diff --git a/Lang/Nu/Fibonacci-sequence b/Lang/Nu/Fibonacci-sequence
new file mode 120000
index 0000000000..c835014e2a
--- /dev/null
+++ b/Lang/Nu/Fibonacci-sequence
@@ -0,0 +1 @@
+../../Task/Fibonacci-sequence/Nu
\ No newline at end of file
diff --git a/Lang/Nu/File-size b/Lang/Nu/File-size
new file mode 120000
index 0000000000..14db7aa8d0
--- /dev/null
+++ b/Lang/Nu/File-size
@@ -0,0 +1 @@
+../../Task/File-size/Nu
\ No newline at end of file
diff --git a/Lang/Nu/Find-limit-of-recursion b/Lang/Nu/Find-limit-of-recursion
new file mode 120000
index 0000000000..c6b78c9274
--- /dev/null
+++ b/Lang/Nu/Find-limit-of-recursion
@@ -0,0 +1 @@
+../../Task/Find-limit-of-recursion/Nu
\ No newline at end of file
diff --git a/Lang/Nu/Find-the-last-Sunday-of-each-month b/Lang/Nu/Find-the-last-Sunday-of-each-month
new file mode 120000
index 0000000000..7d0aedf546
--- /dev/null
+++ b/Lang/Nu/Find-the-last-Sunday-of-each-month
@@ -0,0 +1 @@
+../../Task/Find-the-last-Sunday-of-each-month/Nu
\ No newline at end of file
diff --git a/Lang/Nu/Generate-lower-case-ASCII-alphabet b/Lang/Nu/Generate-lower-case-ASCII-alphabet
new file mode 120000
index 0000000000..2680ace5a7
--- /dev/null
+++ b/Lang/Nu/Generate-lower-case-ASCII-alphabet
@@ -0,0 +1 @@
+../../Task/Generate-lower-case-ASCII-alphabet/Nu
\ No newline at end of file
diff --git a/Lang/Nu/Greatest-common-divisor b/Lang/Nu/Greatest-common-divisor
new file mode 120000
index 0000000000..d844f147ad
--- /dev/null
+++ b/Lang/Nu/Greatest-common-divisor
@@ -0,0 +1 @@
+../../Task/Greatest-common-divisor/Nu
\ No newline at end of file
diff --git a/Lang/Nu/Greatest-element-of-a-list b/Lang/Nu/Greatest-element-of-a-list
new file mode 120000
index 0000000000..3b8838db94
--- /dev/null
+++ b/Lang/Nu/Greatest-element-of-a-list
@@ -0,0 +1 @@
+../../Task/Greatest-element-of-a-list/Nu
\ No newline at end of file
diff --git a/Lang/Nu/Harshad-or-Niven-series b/Lang/Nu/Harshad-or-Niven-series
new file mode 120000
index 0000000000..87dd3a6ea5
--- /dev/null
+++ b/Lang/Nu/Harshad-or-Niven-series
@@ -0,0 +1 @@
+../../Task/Harshad-or-Niven-series/Nu
\ No newline at end of file
diff --git a/Lang/Nu/Hello-world-Newline-omission b/Lang/Nu/Hello-world-Newline-omission
new file mode 120000
index 0000000000..f00be9e5a7
--- /dev/null
+++ b/Lang/Nu/Hello-world-Newline-omission
@@ -0,0 +1 @@
+../../Task/Hello-world-Newline-omission/Nu
\ No newline at end of file
diff --git a/Lang/Nu/Hex-words b/Lang/Nu/Hex-words
new file mode 120000
index 0000000000..14f92faeab
--- /dev/null
+++ b/Lang/Nu/Hex-words
@@ -0,0 +1 @@
+../../Task/Hex-words/Nu
\ No newline at end of file
diff --git a/Lang/Nu/Identity-matrix b/Lang/Nu/Identity-matrix
new file mode 120000
index 0000000000..31adec2ac4
--- /dev/null
+++ b/Lang/Nu/Identity-matrix
@@ -0,0 +1 @@
+../../Task/Identity-matrix/Nu
\ No newline at end of file
diff --git a/Lang/Nu/Integer-sequence b/Lang/Nu/Integer-sequence
new file mode 120000
index 0000000000..32270a6fb8
--- /dev/null
+++ b/Lang/Nu/Integer-sequence
@@ -0,0 +1 @@
+../../Task/Integer-sequence/Nu
\ No newline at end of file
diff --git a/Lang/Nu/Jewels-and-stones b/Lang/Nu/Jewels-and-stones
new file mode 120000
index 0000000000..31ec593a67
--- /dev/null
+++ b/Lang/Nu/Jewels-and-stones
@@ -0,0 +1 @@
+../../Task/Jewels-and-stones/Nu
\ No newline at end of file
diff --git a/Lang/Nu/Last-Friday-of-each-month b/Lang/Nu/Last-Friday-of-each-month
new file mode 120000
index 0000000000..6075ef1dcc
--- /dev/null
+++ b/Lang/Nu/Last-Friday-of-each-month
@@ -0,0 +1 @@
+../../Task/Last-Friday-of-each-month/Nu
\ No newline at end of file
diff --git a/Lang/Nu/Letter-frequency b/Lang/Nu/Letter-frequency
new file mode 120000
index 0000000000..0b7cf31f44
--- /dev/null
+++ b/Lang/Nu/Letter-frequency
@@ -0,0 +1 @@
+../../Task/Letter-frequency/Nu
\ No newline at end of file
diff --git a/Lang/Nu/Levenshtein-distance b/Lang/Nu/Levenshtein-distance
new file mode 120000
index 0000000000..f8c80b6b68
--- /dev/null
+++ b/Lang/Nu/Levenshtein-distance
@@ -0,0 +1 @@
+../../Task/Levenshtein-distance/Nu
\ No newline at end of file
diff --git a/Lang/Nu/MD5 b/Lang/Nu/MD5
new file mode 120000
index 0000000000..feac42125d
--- /dev/null
+++ b/Lang/Nu/MD5
@@ -0,0 +1 @@
+../../Task/MD5/Nu
\ No newline at end of file
diff --git a/Lang/Nu/Matrix-transposition b/Lang/Nu/Matrix-transposition
new file mode 120000
index 0000000000..adc758bbe0
--- /dev/null
+++ b/Lang/Nu/Matrix-transposition
@@ -0,0 +1 @@
+../../Task/Matrix-transposition/Nu
\ No newline at end of file
diff --git a/Lang/Nu/Multiplication-tables b/Lang/Nu/Multiplication-tables
new file mode 120000
index 0000000000..ac72d93e8f
--- /dev/null
+++ b/Lang/Nu/Multiplication-tables
@@ -0,0 +1 @@
+../../Task/Multiplication-tables/Nu
\ No newline at end of file
diff --git a/Lang/Nu/Non-decimal-radices-Convert b/Lang/Nu/Non-decimal-radices-Convert
new file mode 120000
index 0000000000..1dbd245069
--- /dev/null
+++ b/Lang/Nu/Non-decimal-radices-Convert
@@ -0,0 +1 @@
+../../Task/Non-decimal-radices-Convert/Nu
\ No newline at end of file
diff --git a/Lang/Nu/Null-object b/Lang/Nu/Null-object
new file mode 120000
index 0000000000..74589e5538
--- /dev/null
+++ b/Lang/Nu/Null-object
@@ -0,0 +1 @@
+../../Task/Null-object/Nu
\ No newline at end of file
diff --git a/Lang/Nu/Order-two-numerical-lists b/Lang/Nu/Order-two-numerical-lists
new file mode 120000
index 0000000000..a09725d44a
--- /dev/null
+++ b/Lang/Nu/Order-two-numerical-lists
@@ -0,0 +1 @@
+../../Task/Order-two-numerical-lists/Nu
\ No newline at end of file
diff --git a/Lang/Nu/Ordered-words b/Lang/Nu/Ordered-words
new file mode 120000
index 0000000000..fb4962c2af
--- /dev/null
+++ b/Lang/Nu/Ordered-words
@@ -0,0 +1 @@
+../../Task/Ordered-words/Nu
\ No newline at end of file
diff --git a/Lang/Nu/Phrase-reversals b/Lang/Nu/Phrase-reversals
new file mode 120000
index 0000000000..df54742816
--- /dev/null
+++ b/Lang/Nu/Phrase-reversals
@@ -0,0 +1 @@
+../../Task/Phrase-reversals/Nu
\ No newline at end of file
diff --git a/Lang/Nu/Pick-random-element b/Lang/Nu/Pick-random-element
new file mode 120000
index 0000000000..184348b826
--- /dev/null
+++ b/Lang/Nu/Pick-random-element
@@ -0,0 +1 @@
+../../Task/Pick-random-element/Nu
\ No newline at end of file
diff --git a/Lang/Nu/Random-numbers b/Lang/Nu/Random-numbers
new file mode 120000
index 0000000000..ba277327c8
--- /dev/null
+++ b/Lang/Nu/Random-numbers
@@ -0,0 +1 @@
+../../Task/Random-numbers/Nu
\ No newline at end of file
diff --git a/Lang/Nu/Remove-duplicate-elements b/Lang/Nu/Remove-duplicate-elements
new file mode 120000
index 0000000000..d498c34eae
--- /dev/null
+++ b/Lang/Nu/Remove-duplicate-elements
@@ -0,0 +1 @@
+../../Task/Remove-duplicate-elements/Nu
\ No newline at end of file
diff --git a/Lang/Nu/Repeat-a-string b/Lang/Nu/Repeat-a-string
new file mode 120000
index 0000000000..962454e331
--- /dev/null
+++ b/Lang/Nu/Repeat-a-string
@@ -0,0 +1 @@
+../../Task/Repeat-a-string/Nu
\ No newline at end of file
diff --git a/Lang/Nu/Reverse-a-string b/Lang/Nu/Reverse-a-string
new file mode 120000
index 0000000000..34f43d53f3
--- /dev/null
+++ b/Lang/Nu/Reverse-a-string
@@ -0,0 +1 @@
+../../Task/Reverse-a-string/Nu
\ No newline at end of file
diff --git a/Lang/Nu/Rot-13 b/Lang/Nu/Rot-13
new file mode 120000
index 0000000000..d2902fe7ad
--- /dev/null
+++ b/Lang/Nu/Rot-13
@@ -0,0 +1 @@
+../../Task/Rot-13/Nu
\ No newline at end of file
diff --git a/Lang/Nu/SHA-256 b/Lang/Nu/SHA-256
new file mode 120000
index 0000000000..b58398940b
--- /dev/null
+++ b/Lang/Nu/SHA-256
@@ -0,0 +1 @@
+../../Task/SHA-256/Nu
\ No newline at end of file
diff --git a/Lang/Nu/Show-the-epoch b/Lang/Nu/Show-the-epoch
new file mode 120000
index 0000000000..9547f199df
--- /dev/null
+++ b/Lang/Nu/Show-the-epoch
@@ -0,0 +1 @@
+../../Task/Show-the-epoch/Nu
\ No newline at end of file
diff --git a/Lang/Nu/Sort-a-list-of-object-identifiers b/Lang/Nu/Sort-a-list-of-object-identifiers
new file mode 120000
index 0000000000..9efe53a3b5
--- /dev/null
+++ b/Lang/Nu/Sort-a-list-of-object-identifiers
@@ -0,0 +1 @@
+../../Task/Sort-a-list-of-object-identifiers/Nu
\ No newline at end of file
diff --git a/Lang/Nu/Sort-an-integer-array b/Lang/Nu/Sort-an-integer-array
new file mode 120000
index 0000000000..cff6ab8400
--- /dev/null
+++ b/Lang/Nu/Sort-an-integer-array
@@ -0,0 +1 @@
+../../Task/Sort-an-integer-array/Nu
\ No newline at end of file
diff --git a/Lang/Nu/Split-a-character-string-based-on-change-of-character b/Lang/Nu/Split-a-character-string-based-on-change-of-character
new file mode 120000
index 0000000000..c6103b5715
--- /dev/null
+++ b/Lang/Nu/Split-a-character-string-based-on-change-of-character
@@ -0,0 +1 @@
+../../Task/Split-a-character-string-based-on-change-of-character/Nu
\ No newline at end of file
diff --git a/Lang/Nu/Strip-whitespace-from-a-string-Top-and-tail b/Lang/Nu/Strip-whitespace-from-a-string-Top-and-tail
new file mode 120000
index 0000000000..c8922d283e
--- /dev/null
+++ b/Lang/Nu/Strip-whitespace-from-a-string-Top-and-tail
@@ -0,0 +1 @@
+../../Task/Strip-whitespace-from-a-string-Top-and-tail/Nu
\ No newline at end of file
diff --git a/Lang/Nu/Substring-Top-and-tail b/Lang/Nu/Substring-Top-and-tail
new file mode 120000
index 0000000000..8e1ec9809c
--- /dev/null
+++ b/Lang/Nu/Substring-Top-and-tail
@@ -0,0 +1 @@
+../../Task/Substring-Top-and-tail/Nu
\ No newline at end of file
diff --git a/Lang/Nu/Sum-and-product-of-an-array b/Lang/Nu/Sum-and-product-of-an-array
new file mode 120000
index 0000000000..c3f15d2743
--- /dev/null
+++ b/Lang/Nu/Sum-and-product-of-an-array
@@ -0,0 +1 @@
+../../Task/Sum-and-product-of-an-array/Nu
\ No newline at end of file
diff --git a/Lang/Nu/Sum-digits-of-an-integer b/Lang/Nu/Sum-digits-of-an-integer
new file mode 120000
index 0000000000..41b99ca024
--- /dev/null
+++ b/Lang/Nu/Sum-digits-of-an-integer
@@ -0,0 +1 @@
+../../Task/Sum-digits-of-an-integer/Nu
\ No newline at end of file
diff --git a/Lang/Nu/Sum-of-a-series b/Lang/Nu/Sum-of-a-series
new file mode 120000
index 0000000000..8172f12fc3
--- /dev/null
+++ b/Lang/Nu/Sum-of-a-series
@@ -0,0 +1 @@
+../../Task/Sum-of-a-series/Nu
\ No newline at end of file
diff --git a/Lang/Nu/Sum-of-squares b/Lang/Nu/Sum-of-squares
new file mode 120000
index 0000000000..d7b0eacde8
--- /dev/null
+++ b/Lang/Nu/Sum-of-squares
@@ -0,0 +1 @@
+../../Task/Sum-of-squares/Nu
\ No newline at end of file
diff --git a/Lang/Nu/Terminal-control-Clear-the-screen b/Lang/Nu/Terminal-control-Clear-the-screen
new file mode 120000
index 0000000000..929018a6f7
--- /dev/null
+++ b/Lang/Nu/Terminal-control-Clear-the-screen
@@ -0,0 +1 @@
+../../Task/Terminal-control-Clear-the-screen/Nu
\ No newline at end of file
diff --git a/Lang/Nu/Terminal-control-Dimensions b/Lang/Nu/Terminal-control-Dimensions
new file mode 120000
index 0000000000..6f437c04e4
--- /dev/null
+++ b/Lang/Nu/Terminal-control-Dimensions
@@ -0,0 +1 @@
+../../Task/Terminal-control-Dimensions/Nu
\ No newline at end of file
diff --git a/Lang/Nu/Terminal-control-Display-an-extended-character b/Lang/Nu/Terminal-control-Display-an-extended-character
new file mode 120000
index 0000000000..e54390beea
--- /dev/null
+++ b/Lang/Nu/Terminal-control-Display-an-extended-character
@@ -0,0 +1 @@
+../../Task/Terminal-control-Display-an-extended-character/Nu
\ No newline at end of file
diff --git a/Lang/Nu/Terminal-control-Hiding-the-cursor b/Lang/Nu/Terminal-control-Hiding-the-cursor
new file mode 120000
index 0000000000..e19aad16bb
--- /dev/null
+++ b/Lang/Nu/Terminal-control-Hiding-the-cursor
@@ -0,0 +1 @@
+../../Task/Terminal-control-Hiding-the-cursor/Nu
\ No newline at end of file
diff --git a/Lang/Nu/Terminal-control-Inverse-video b/Lang/Nu/Terminal-control-Inverse-video
new file mode 120000
index 0000000000..dbb97c54ab
--- /dev/null
+++ b/Lang/Nu/Terminal-control-Inverse-video
@@ -0,0 +1 @@
+../../Task/Terminal-control-Inverse-video/Nu
\ No newline at end of file
diff --git a/Lang/Nu/Terminal-control-Ringing-the-terminal-bell b/Lang/Nu/Terminal-control-Ringing-the-terminal-bell
new file mode 120000
index 0000000000..f67008c1f1
--- /dev/null
+++ b/Lang/Nu/Terminal-control-Ringing-the-terminal-bell
@@ -0,0 +1 @@
+../../Task/Terminal-control-Ringing-the-terminal-bell/Nu
\ No newline at end of file
diff --git a/Lang/Nu/Time-a-function b/Lang/Nu/Time-a-function
new file mode 120000
index 0000000000..d32498490a
--- /dev/null
+++ b/Lang/Nu/Time-a-function
@@ -0,0 +1 @@
+../../Task/Time-a-function/Nu
\ No newline at end of file
diff --git a/Lang/Nu/Tokenize-a-string b/Lang/Nu/Tokenize-a-string
new file mode 120000
index 0000000000..e254094f94
--- /dev/null
+++ b/Lang/Nu/Tokenize-a-string
@@ -0,0 +1 @@
+../../Task/Tokenize-a-string/Nu
\ No newline at end of file
diff --git a/Lang/Nu/Y-combinator b/Lang/Nu/Y-combinator
new file mode 120000
index 0000000000..77e8ec4916
--- /dev/null
+++ b/Lang/Nu/Y-combinator
@@ -0,0 +1 @@
+../../Task/Y-combinator/Nu
\ No newline at end of file
diff --git a/Lang/Nu/Zero-to-the-zero-power b/Lang/Nu/Zero-to-the-zero-power
new file mode 120000
index 0000000000..950e81f484
--- /dev/null
+++ b/Lang/Nu/Zero-to-the-zero-power
@@ -0,0 +1 @@
+../../Task/Zero-to-the-zero-power/Nu
\ No newline at end of file
diff --git a/Lang/Oberon-07/00-LANG.txt b/Lang/Oberon-07/00-LANG.txt
new file mode 100644
index 0000000000..3e769f71f7
--- /dev/null
+++ b/Lang/Oberon-07/00-LANG.txt
@@ -0,0 +1,16 @@
+{{stub}}
+{{language|Oberon-07
+|strength=strong
+|safety=safe
+|express=explicit
+|compat=structural
+|checking=static
+|parampass=both
+|gc=yes
+}}
+
+'''Oberon-07''' is a revision of the Oberon language by Niklaus Wirth. Oberon-07 is based on Wirth's original Oberon language (not [[Oberon-2]]), Wirth lists the changes [https://people.inf.ethz.ch/wirth/Oberon/Oberon07.pdf here], which are largely aimed at simplification - in [https://people.inf.ethz.ch/wirth/Oberon/Oberon07.Report.pdf his defining document], Wirth quotes Einstein: "Make it as simple as possible, but not simpler".
+
+Oberon-07 contains a WHILE loop that allows multiple conditions and statements - similar to the loop in [[wp:Guarded_Command_Language|Edsgar Dijkstra's Guarded Command Language]], though with different syntax and without non-determinism. See [[Loops/N_plus_one_half#Oberon-07]] for an example.
+
+In addition to the samples below, many of the [[Oberon-2]] samples should work with Oberon-07, particularly if the Oberon-07 compiler you are using allows LONGINT as a synonym for INTEGER (LONGINT, SHORTINT, LONGREAL and SHORTREAL were dropped from Oberon-07).
\ No newline at end of file
diff --git a/Lang/Oberon-07/00-META.yaml b/Lang/Oberon-07/00-META.yaml
new file mode 100644
index 0000000000..df5ec38ad0
--- /dev/null
+++ b/Lang/Oberon-07/00-META.yaml
@@ -0,0 +1,2 @@
+---
+from: http://rosettacode.org/wiki/Category:Oberon-07
diff --git a/Lang/Oberon-07/Additive-primes b/Lang/Oberon-07/Additive-primes
new file mode 120000
index 0000000000..29e374f522
--- /dev/null
+++ b/Lang/Oberon-07/Additive-primes
@@ -0,0 +1 @@
+../../Task/Additive-primes/Oberon-07
\ No newline at end of file
diff --git a/Lang/Oberon-07/Arithmetic-numbers b/Lang/Oberon-07/Arithmetic-numbers
new file mode 120000
index 0000000000..12d1ac60ce
--- /dev/null
+++ b/Lang/Oberon-07/Arithmetic-numbers
@@ -0,0 +1 @@
+../../Task/Arithmetic-numbers/Oberon-07
\ No newline at end of file
diff --git a/Lang/Oberon-07/Day-of-the-week b/Lang/Oberon-07/Day-of-the-week
new file mode 120000
index 0000000000..f4a166cd18
--- /dev/null
+++ b/Lang/Oberon-07/Day-of-the-week
@@ -0,0 +1 @@
+../../Task/Day-of-the-week/Oberon-07
\ No newline at end of file
diff --git a/Lang/Oberon-07/Factorial b/Lang/Oberon-07/Factorial
new file mode 120000
index 0000000000..42b8c4919c
--- /dev/null
+++ b/Lang/Oberon-07/Factorial
@@ -0,0 +1 @@
+../../Task/Factorial/Oberon-07
\ No newline at end of file
diff --git a/Lang/Oberon-07/Find-the-last-Sunday-of-each-month b/Lang/Oberon-07/Find-the-last-Sunday-of-each-month
new file mode 120000
index 0000000000..1d918212c0
--- /dev/null
+++ b/Lang/Oberon-07/Find-the-last-Sunday-of-each-month
@@ -0,0 +1 @@
+../../Task/Find-the-last-Sunday-of-each-month/Oberon-07
\ No newline at end of file
diff --git a/Lang/Oberon-07/Last-Friday-of-each-month b/Lang/Oberon-07/Last-Friday-of-each-month
new file mode 120000
index 0000000000..e8c07d9c19
--- /dev/null
+++ b/Lang/Oberon-07/Last-Friday-of-each-month
@@ -0,0 +1 @@
+../../Task/Last-Friday-of-each-month/Oberon-07
\ No newline at end of file
diff --git a/Lang/Oberon-07/Leap-year b/Lang/Oberon-07/Leap-year
new file mode 120000
index 0000000000..8797ca0922
--- /dev/null
+++ b/Lang/Oberon-07/Leap-year
@@ -0,0 +1 @@
+../../Task/Leap-year/Oberon-07
\ No newline at end of file
diff --git a/Lang/Oberon-07/Long-year b/Lang/Oberon-07/Long-year
new file mode 120000
index 0000000000..a0709fd34e
--- /dev/null
+++ b/Lang/Oberon-07/Long-year
@@ -0,0 +1 @@
+../../Task/Long-year/Oberon-07
\ No newline at end of file
diff --git a/Lang/Oberon-07/Loops-Break b/Lang/Oberon-07/Loops-Break
new file mode 120000
index 0000000000..bcd210938e
--- /dev/null
+++ b/Lang/Oberon-07/Loops-Break
@@ -0,0 +1 @@
+../../Task/Loops-Break/Oberon-07
\ No newline at end of file
diff --git a/Lang/Oberon-07/Loops-N-plus-one-half b/Lang/Oberon-07/Loops-N-plus-one-half
new file mode 120000
index 0000000000..f9ed03d1cc
--- /dev/null
+++ b/Lang/Oberon-07/Loops-N-plus-one-half
@@ -0,0 +1 @@
+../../Task/Loops-N-plus-one-half/Oberon-07
\ No newline at end of file
diff --git a/Lang/Oberon-07/Pell-numbers b/Lang/Oberon-07/Pell-numbers
new file mode 120000
index 0000000000..7b4ee7e909
--- /dev/null
+++ b/Lang/Oberon-07/Pell-numbers
@@ -0,0 +1 @@
+../../Task/Pell-numbers/Oberon-07
\ No newline at end of file
diff --git a/Lang/Oberon-07/Sierpinski-triangle b/Lang/Oberon-07/Sierpinski-triangle
new file mode 120000
index 0000000000..bdad2ec3ac
--- /dev/null
+++ b/Lang/Oberon-07/Sierpinski-triangle
@@ -0,0 +1 @@
+../../Task/Sierpinski-triangle/Oberon-07
\ No newline at end of file
diff --git a/Lang/Oberon-07/Sleeping-Beauty-problem b/Lang/Oberon-07/Sleeping-Beauty-problem
new file mode 120000
index 0000000000..94be576322
--- /dev/null
+++ b/Lang/Oberon-07/Sleeping-Beauty-problem
@@ -0,0 +1 @@
+../../Task/Sleeping-Beauty-problem/Oberon-07
\ No newline at end of file
diff --git a/Lang/Objeck/Queue-Definition b/Lang/Objeck/Queue-Definition
new file mode 120000
index 0000000000..392e43e236
--- /dev/null
+++ b/Lang/Objeck/Queue-Definition
@@ -0,0 +1 @@
+../../Task/Queue-Definition/Objeck
\ No newline at end of file
diff --git a/Lang/Objeck/Take-notes-on-the-command-line b/Lang/Objeck/Take-notes-on-the-command-line
new file mode 120000
index 0000000000..5d55699b35
--- /dev/null
+++ b/Lang/Objeck/Take-notes-on-the-command-line
@@ -0,0 +1 @@
+../../Task/Take-notes-on-the-command-line/Objeck
\ No newline at end of file
diff --git a/Lang/Odin/100-doors b/Lang/Odin/100-doors
new file mode 120000
index 0000000000..67c11787e6
--- /dev/null
+++ b/Lang/Odin/100-doors
@@ -0,0 +1 @@
+../../Task/100-doors/Odin
\ No newline at end of file
diff --git a/Lang/Odin/Reverse-words-in-a-string b/Lang/Odin/Reverse-words-in-a-string
new file mode 120000
index 0000000000..9648c360e7
--- /dev/null
+++ b/Lang/Odin/Reverse-words-in-a-string
@@ -0,0 +1 @@
+../../Task/Reverse-words-in-a-string/Odin
\ No newline at end of file
diff --git a/Lang/OmniMark/00-LANG.txt b/Lang/OmniMark/00-LANG.txt
new file mode 100644
index 0000000000..43585c3f19
--- /dev/null
+++ b/Lang/OmniMark/00-LANG.txt
@@ -0,0 +1,15 @@
+{{language|OmniMark
+|tags=omnimark
+|site=https://www.stilo.com/omnimark/}}
+'''OmniMark''' is a fourth-generation programming language used mostly in the publishing industry. It is currently a proprietary software product of Stilo International. The most recent release of OmniMark is 12.0 (as at 2024-06-25).
+
+For a brief period, in 1999-2000, OmniMark was available free of charge (versions 4 and 5, including a 'Lite edition' of version 4, which was limited to 200 actions).
+
+==Links==
+* [[wp:OmniMark|Omnimark in Wikipedia]]
+* [https://developers.stilo.com/docs/html/index.html Version 12.0 documentation]
+* [https://developers.stilo.com/documentation/docs/html/index.htm Version 6.5 documentation]
+* [https://developers.stilo.com/documentation/v4r0/index.htm Version 4.0 documentation]
+
+==Todo==
+* [[Tasks not implemented in OmniMark]]
\ No newline at end of file
diff --git a/Lang/OmniMark/00-META.yaml b/Lang/OmniMark/00-META.yaml
new file mode 100644
index 0000000000..4f47c1011a
--- /dev/null
+++ b/Lang/OmniMark/00-META.yaml
@@ -0,0 +1,2 @@
+---
+from: http://rosettacode.org/wiki/Category:OmniMark
diff --git a/Lang/OmniMark/100-doors b/Lang/OmniMark/100-doors
new file mode 120000
index 0000000000..97ec6d7965
--- /dev/null
+++ b/Lang/OmniMark/100-doors
@@ -0,0 +1 @@
+../../Task/100-doors/OmniMark
\ No newline at end of file
diff --git a/Lang/OmniMark/Array-length b/Lang/OmniMark/Array-length
new file mode 120000
index 0000000000..47ea995113
--- /dev/null
+++ b/Lang/OmniMark/Array-length
@@ -0,0 +1 @@
+../../Task/Array-length/OmniMark
\ No newline at end of file
diff --git a/Lang/OmniMark/CSV-to-HTML-translation b/Lang/OmniMark/CSV-to-HTML-translation
new file mode 120000
index 0000000000..78c14aa62b
--- /dev/null
+++ b/Lang/OmniMark/CSV-to-HTML-translation
@@ -0,0 +1 @@
+../../Task/CSV-to-HTML-translation/OmniMark
\ No newline at end of file
diff --git a/Lang/OmniMark/Caesar-cipher b/Lang/OmniMark/Caesar-cipher
new file mode 120000
index 0000000000..abca569385
--- /dev/null
+++ b/Lang/OmniMark/Caesar-cipher
@@ -0,0 +1 @@
+../../Task/Caesar-cipher/OmniMark
\ No newline at end of file
diff --git a/Lang/OmniMark/Camel-case-and-snake-case b/Lang/OmniMark/Camel-case-and-snake-case
new file mode 120000
index 0000000000..977f7a6fec
--- /dev/null
+++ b/Lang/OmniMark/Camel-case-and-snake-case
@@ -0,0 +1 @@
+../../Task/Camel-case-and-snake-case/OmniMark
\ No newline at end of file
diff --git a/Lang/OmniMark/Determine-if-a-string-has-all-the-same-characters b/Lang/OmniMark/Determine-if-a-string-has-all-the-same-characters
new file mode 120000
index 0000000000..c1672ea012
--- /dev/null
+++ b/Lang/OmniMark/Determine-if-a-string-has-all-the-same-characters
@@ -0,0 +1 @@
+../../Task/Determine-if-a-string-has-all-the-same-characters/OmniMark
\ No newline at end of file
diff --git a/Lang/OmniMark/Hello-world-Standard-error b/Lang/OmniMark/Hello-world-Standard-error
new file mode 120000
index 0000000000..8ef2028e3a
--- /dev/null
+++ b/Lang/OmniMark/Hello-world-Standard-error
@@ -0,0 +1 @@
+../../Task/Hello-world-Standard-error/OmniMark
\ No newline at end of file
diff --git a/Lang/OmniMark/Hex-words b/Lang/OmniMark/Hex-words
new file mode 120000
index 0000000000..b43e37ad28
--- /dev/null
+++ b/Lang/OmniMark/Hex-words
@@ -0,0 +1 @@
+../../Task/Hex-words/OmniMark
\ No newline at end of file
diff --git a/Lang/OmniMark/ISBN13-check-digit b/Lang/OmniMark/ISBN13-check-digit
new file mode 120000
index 0000000000..5629e040c9
--- /dev/null
+++ b/Lang/OmniMark/ISBN13-check-digit
@@ -0,0 +1 @@
+../../Task/ISBN13-check-digit/OmniMark
\ No newline at end of file
diff --git a/Lang/OmniMark/Input-loop b/Lang/OmniMark/Input-loop
new file mode 120000
index 0000000000..c2f5884755
--- /dev/null
+++ b/Lang/OmniMark/Input-loop
@@ -0,0 +1 @@
+../../Task/Input-loop/OmniMark
\ No newline at end of file
diff --git a/Lang/OmniMark/Repeat-a-string b/Lang/OmniMark/Repeat-a-string
new file mode 120000
index 0000000000..a5c79bdf8d
--- /dev/null
+++ b/Lang/OmniMark/Repeat-a-string
@@ -0,0 +1 @@
+../../Task/Repeat-a-string/OmniMark
\ No newline at end of file
diff --git a/Lang/OmniMark/Reverse-a-string b/Lang/OmniMark/Reverse-a-string
new file mode 120000
index 0000000000..ac30e9d9f0
--- /dev/null
+++ b/Lang/OmniMark/Reverse-a-string
@@ -0,0 +1 @@
+../../Task/Reverse-a-string/OmniMark
\ No newline at end of file
diff --git a/Lang/OmniMark/Rot-13 b/Lang/OmniMark/Rot-13
new file mode 120000
index 0000000000..34ecde427b
--- /dev/null
+++ b/Lang/OmniMark/Rot-13
@@ -0,0 +1 @@
+../../Task/Rot-13/OmniMark
\ No newline at end of file
diff --git a/Lang/OmniMark/Strip-control-codes-and-extended-characters-from-a-string b/Lang/OmniMark/Strip-control-codes-and-extended-characters-from-a-string
new file mode 120000
index 0000000000..e108d513e0
--- /dev/null
+++ b/Lang/OmniMark/Strip-control-codes-and-extended-characters-from-a-string
@@ -0,0 +1 @@
+../../Task/Strip-control-codes-and-extended-characters-from-a-string/OmniMark
\ No newline at end of file
diff --git a/Lang/OmniMark/Substring b/Lang/OmniMark/Substring
new file mode 120000
index 0000000000..3eb9323ac2
--- /dev/null
+++ b/Lang/OmniMark/Substring
@@ -0,0 +1 @@
+../../Task/Substring/OmniMark
\ No newline at end of file
diff --git a/Lang/OmniMark/Substring-Top-and-tail b/Lang/OmniMark/Substring-Top-and-tail
new file mode 120000
index 0000000000..b88887f219
--- /dev/null
+++ b/Lang/OmniMark/Substring-Top-and-tail
@@ -0,0 +1 @@
+../../Task/Substring-Top-and-tail/OmniMark
\ No newline at end of file
diff --git a/Lang/OmniMark/XML-Input b/Lang/OmniMark/XML-Input
new file mode 120000
index 0000000000..56ac42b963
--- /dev/null
+++ b/Lang/OmniMark/XML-Input
@@ -0,0 +1 @@
+../../Task/XML-Input/OmniMark
\ No newline at end of file
diff --git a/Lang/OxygenBasic/Cullen-and-Woodall-numbers b/Lang/OxygenBasic/Cullen-and-Woodall-numbers
new file mode 120000
index 0000000000..75020e6fa5
--- /dev/null
+++ b/Lang/OxygenBasic/Cullen-and-Woodall-numbers
@@ -0,0 +1 @@
+../../Task/Cullen-and-Woodall-numbers/OxygenBasic
\ No newline at end of file
diff --git a/Lang/OxygenBasic/Determine-if-a-string-has-all-the-same-characters b/Lang/OxygenBasic/Determine-if-a-string-has-all-the-same-characters
new file mode 120000
index 0000000000..5577d0b0ab
--- /dev/null
+++ b/Lang/OxygenBasic/Determine-if-a-string-has-all-the-same-characters
@@ -0,0 +1 @@
+../../Task/Determine-if-a-string-has-all-the-same-characters/OxygenBasic
\ No newline at end of file
diff --git a/Lang/OxygenBasic/FizzBuzz b/Lang/OxygenBasic/FizzBuzz
new file mode 120000
index 0000000000..7f3e716c79
--- /dev/null
+++ b/Lang/OxygenBasic/FizzBuzz
@@ -0,0 +1 @@
+../../Task/FizzBuzz/OxygenBasic
\ No newline at end of file
diff --git a/Lang/OxygenBasic/Generate-lower-case-ASCII-alphabet b/Lang/OxygenBasic/Generate-lower-case-ASCII-alphabet
new file mode 120000
index 0000000000..dc06638a04
--- /dev/null
+++ b/Lang/OxygenBasic/Generate-lower-case-ASCII-alphabet
@@ -0,0 +1 @@
+../../Task/Generate-lower-case-ASCII-alphabet/OxygenBasic
\ No newline at end of file
diff --git a/Lang/OxygenBasic/Hello-world-Newline-omission b/Lang/OxygenBasic/Hello-world-Newline-omission
new file mode 120000
index 0000000000..b315730342
--- /dev/null
+++ b/Lang/OxygenBasic/Hello-world-Newline-omission
@@ -0,0 +1 @@
+../../Task/Hello-world-Newline-omission/OxygenBasic
\ No newline at end of file
diff --git a/Lang/OxygenBasic/Hello-world-Text b/Lang/OxygenBasic/Hello-world-Text
new file mode 120000
index 0000000000..0286beeff0
--- /dev/null
+++ b/Lang/OxygenBasic/Hello-world-Text
@@ -0,0 +1 @@
+../../Task/Hello-world-Text/OxygenBasic
\ No newline at end of file
diff --git a/Lang/OxygenBasic/Hofstadter-Q-sequence b/Lang/OxygenBasic/Hofstadter-Q-sequence
new file mode 120000
index 0000000000..99d7dde29e
--- /dev/null
+++ b/Lang/OxygenBasic/Hofstadter-Q-sequence
@@ -0,0 +1 @@
+../../Task/Hofstadter-Q-sequence/OxygenBasic
\ No newline at end of file
diff --git a/Lang/OxygenBasic/Jewels-and-stones b/Lang/OxygenBasic/Jewels-and-stones
new file mode 120000
index 0000000000..af9c0e197d
--- /dev/null
+++ b/Lang/OxygenBasic/Jewels-and-stones
@@ -0,0 +1 @@
+../../Task/Jewels-and-stones/OxygenBasic
\ No newline at end of file
diff --git a/Lang/OxygenBasic/Leonardo-numbers b/Lang/OxygenBasic/Leonardo-numbers
new file mode 120000
index 0000000000..9d8949a99b
--- /dev/null
+++ b/Lang/OxygenBasic/Leonardo-numbers
@@ -0,0 +1 @@
+../../Task/Leonardo-numbers/OxygenBasic
\ No newline at end of file
diff --git a/Lang/OxygenBasic/Primality-by-trial-division b/Lang/OxygenBasic/Primality-by-trial-division
new file mode 120000
index 0000000000..90df6937ed
--- /dev/null
+++ b/Lang/OxygenBasic/Primality-by-trial-division
@@ -0,0 +1 @@
+../../Task/Primality-by-trial-division/OxygenBasic
\ No newline at end of file
diff --git a/Lang/OxygenBasic/Sudan-function b/Lang/OxygenBasic/Sudan-function
new file mode 120000
index 0000000000..05a812bb81
--- /dev/null
+++ b/Lang/OxygenBasic/Sudan-function
@@ -0,0 +1 @@
+../../Task/Sudan-function/OxygenBasic
\ No newline at end of file
diff --git a/Lang/Oz/FizzBuzz b/Lang/Oz/FizzBuzz
deleted file mode 120000
index 287980acd6..0000000000
--- a/Lang/Oz/FizzBuzz
+++ /dev/null
@@ -1 +0,0 @@
-../../Task/FizzBuzz/Oz
\ No newline at end of file
diff --git a/Lang/PARI-GP/00-LANG.txt b/Lang/PARI-GP/00-LANG.txt
index bacfec6d7d..81b37f3de6 100644
--- a/Lang/PARI-GP/00-LANG.txt
+++ b/Lang/PARI-GP/00-LANG.txt
@@ -17,7 +17,7 @@ PARI/GP is a widely used computer algebra system designed for fast computations
PARI/GP is composed of two parts: a [[C]] library called PARI and an interface, gp, to this library. GP scripts are concise, easy to write, and resemble mathematical language. (Terminology: the scripting language of gp is called GP.)
-PARI was written by Henri Cohen and others at Université de Bordeaux and is now maintained by Karim Belabas. gp was originally written by Dominique Bernardi, then maintained and enhanced by Karim Belabas and Ilya Zakharevich, and finally rewritten by Bill Allombert.
+PARI was written by Henri Cohen and others at Université de Bordeaux; Aurel Page is the current project leader. gp was originally written by Dominique Bernardi, then maintained and enhanced by Karim Belabas and Ilya Zakharevich, and finally rewritten by Bill Allombert.
== Getting PARI/GP ==
PARI/GP can be used in many different operating systems. This is a reasonably comprehensive list of currently-supported systems; for other systems, please use the [https://pari.math.u-bordeaux.fr/lists-index.html mailing lists].
@@ -219,12 +219,16 @@ If you want to program with PARI, many languages are supported:
** [https://pari.math.u-bordeaux.fr/Events/PARI2017c/talks/TAN2.pdf Théorie algébrique des nombres avancée] (22 pp.)
** [https://pari.math.u-bordeaux.fr/Events/PARI2017c/talks/ecc.pdf Courbes elliptiques sur les corps finis] (4 pp.)
*[http://w3.countnumber.de/fischer/res-ZT2007/PariByExample.pdf Erste Schritte mit PARI/GP] by Lars Fischer (13 pp., 2007; German)
-*[https://www.youtube.com/watch?v=I_GfMUGAlns Pari Gp مع NotPad++] by NoorDeen Rahmani (2020; 2:46; Arabic) -- setting up Notepad++ for syntax highlighting for PARI/GP.
+* [https://www.youtube.com/watch?v=I_GfMUGAlns Pari Gp مع NotPad++] by NoorDeen Rahmani (2020; 2:46; Arabic) -- setting up Notepad++ for syntax highlighting for PARI/GP.
==== Video tutorials ====
* [https://www.youtube.com/watch?v=RQLqQHu7i0Y Pari/GP Tutorial: Basics] by Leandro Junes (2020, 19:04)
-*[https://www.youtube.com/watch?v=FeG0BYRrDOE&t=12m Video demo of RSA in PARI/GP] by Maren1955 (2014, 17:39)
-*Video tutorials, parts [http://www.youtube.com/watch?v=0G-9JzlrzBM 1] [http://www.youtube.com/watch?v=d7i0rv59hns 2] [http://www.youtube.com/watch?v=wCyU2n-G-pk 3] [http://www.youtube.com/watch?v=WOCuBvK8O6Q 4] (2011, appx. 20 minutes)
+* [https://www.youtube.com/watch?v=FeG0BYRrDOE&t=12m Video demo of RSA in PARI/GP] by Maren1955 (2014, 17:39)
+* Video tutorials, parts [http://www.youtube.com/watch?v=0G-9JzlrzBM 1] [http://www.youtube.com/watch?v=d7i0rv59hns 2] [http://www.youtube.com/watch?v=wCyU2n-G-pk 3] [http://www.youtube.com/watch?v=WOCuBvK8O6Q 4] (2011, appx. 20 minutes)
+
+== Syntax highlighting ==
+* [https://github.com/notepad-plus-plus/userDefinedLanguages/blob/master/UDLs/PARI-GP_by-third_maths.xml Notepad++]
+* [https://www.youtube.com/watch?v=I_GfMUGAlns Pari Gp مع NotPad++] (Arabic tutorial)
=== Papers on PARI/GP ===
* Karim Belabas and Henri Cohen, [https://arxiv.org/abs/1810.00547 Modular Forms in Pari/GP], ''Research in the Mathematical Sciences'' '''5''':37 (2018)
diff --git a/Lang/PHP/Abbreviations-automatic b/Lang/PHP/Abbreviations-automatic
new file mode 120000
index 0000000000..30112aa9b6
--- /dev/null
+++ b/Lang/PHP/Abbreviations-automatic
@@ -0,0 +1 @@
+../../Task/Abbreviations-automatic/PHP
\ No newline at end of file
diff --git a/Lang/PL-I-80/Character-codes b/Lang/PL-I-80/Character-codes
new file mode 120000
index 0000000000..c19a7eafa1
--- /dev/null
+++ b/Lang/PL-I-80/Character-codes
@@ -0,0 +1 @@
+../../Task/Character-codes/PL-I-80
\ No newline at end of file
diff --git a/Lang/PL-I-80/Strip-whitespace-from-a-string-Top-and-tail b/Lang/PL-I-80/Strip-whitespace-from-a-string-Top-and-tail
new file mode 120000
index 0000000000..ac54cb4639
--- /dev/null
+++ b/Lang/PL-I-80/Strip-whitespace-from-a-string-Top-and-tail
@@ -0,0 +1 @@
+../../Task/Strip-whitespace-from-a-string-Top-and-tail/PL-I-80
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/100-doors b/Lang/PascalABC.NET/100-doors
deleted file mode 120000
index ba816799a0..0000000000
--- a/Lang/PascalABC.NET/100-doors
+++ /dev/null
@@ -1 +0,0 @@
-../../Task/100-doors/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Angle-difference-between-two-bearings b/Lang/PascalABC.NET/Angle-difference-between-two-bearings
new file mode 120000
index 0000000000..a9e8619c23
--- /dev/null
+++ b/Lang/PascalABC.NET/Angle-difference-between-two-bearings
@@ -0,0 +1 @@
+../../Task/Angle-difference-between-two-bearings/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Angles-geometric-normalization-and-conversion b/Lang/PascalABC.NET/Angles-geometric-normalization-and-conversion
new file mode 120000
index 0000000000..27c57b8ea0
--- /dev/null
+++ b/Lang/PascalABC.NET/Angles-geometric-normalization-and-conversion
@@ -0,0 +1 @@
+../../Task/Angles-geometric-normalization-and-conversion/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Anti-primes b/Lang/PascalABC.NET/Anti-primes
new file mode 120000
index 0000000000..0107c4a2bb
--- /dev/null
+++ b/Lang/PascalABC.NET/Anti-primes
@@ -0,0 +1 @@
+../../Task/Anti-primes/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Approximate-equality b/Lang/PascalABC.NET/Approximate-equality
new file mode 120000
index 0000000000..9d80191945
--- /dev/null
+++ b/Lang/PascalABC.NET/Approximate-equality
@@ -0,0 +1 @@
+../../Task/Approximate-equality/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Arbitrary-precision-integers-included- b/Lang/PascalABC.NET/Arbitrary-precision-integers-included-
new file mode 120000
index 0000000000..8e9998f39e
--- /dev/null
+++ b/Lang/PascalABC.NET/Arbitrary-precision-integers-included-
@@ -0,0 +1 @@
+../../Task/Arbitrary-precision-integers-included-/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Archimedean-spiral b/Lang/PascalABC.NET/Archimedean-spiral
new file mode 120000
index 0000000000..8c791b5144
--- /dev/null
+++ b/Lang/PascalABC.NET/Archimedean-spiral
@@ -0,0 +1 @@
+../../Task/Archimedean-spiral/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Arithmetic-Rational b/Lang/PascalABC.NET/Arithmetic-Rational
new file mode 120000
index 0000000000..e1c3c085b7
--- /dev/null
+++ b/Lang/PascalABC.NET/Arithmetic-Rational
@@ -0,0 +1 @@
+../../Task/Arithmetic-Rational/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Arithmetic-geometric-mean b/Lang/PascalABC.NET/Arithmetic-geometric-mean
new file mode 120000
index 0000000000..de68d8badc
--- /dev/null
+++ b/Lang/PascalABC.NET/Arithmetic-geometric-mean
@@ -0,0 +1 @@
+../../Task/Arithmetic-geometric-mean/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Ascending-primes b/Lang/PascalABC.NET/Ascending-primes
new file mode 120000
index 0000000000..764168a0be
--- /dev/null
+++ b/Lang/PascalABC.NET/Ascending-primes
@@ -0,0 +1 @@
+../../Task/Ascending-primes/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Associative-array-Merging b/Lang/PascalABC.NET/Associative-array-Merging
new file mode 120000
index 0000000000..debbdc2521
--- /dev/null
+++ b/Lang/PascalABC.NET/Associative-array-Merging
@@ -0,0 +1 @@
+../../Task/Associative-array-Merging/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Averages-Arithmetic-mean b/Lang/PascalABC.NET/Averages-Arithmetic-mean
new file mode 120000
index 0000000000..c13a81b3d2
--- /dev/null
+++ b/Lang/PascalABC.NET/Averages-Arithmetic-mean
@@ -0,0 +1 @@
+../../Task/Averages-Arithmetic-mean/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Averages-Mean-angle b/Lang/PascalABC.NET/Averages-Mean-angle
new file mode 120000
index 0000000000..1138410560
--- /dev/null
+++ b/Lang/PascalABC.NET/Averages-Mean-angle
@@ -0,0 +1 @@
+../../Task/Averages-Mean-angle/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Averages-Median b/Lang/PascalABC.NET/Averages-Median
new file mode 120000
index 0000000000..3e861f57c5
--- /dev/null
+++ b/Lang/PascalABC.NET/Averages-Median
@@ -0,0 +1 @@
+../../Task/Averages-Median/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Averages-Mode b/Lang/PascalABC.NET/Averages-Mode
new file mode 120000
index 0000000000..73a256bfd8
--- /dev/null
+++ b/Lang/PascalABC.NET/Averages-Mode
@@ -0,0 +1 @@
+../../Task/Averages-Mode/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Averages-Pythagorean-means b/Lang/PascalABC.NET/Averages-Pythagorean-means
new file mode 120000
index 0000000000..d41041c28e
--- /dev/null
+++ b/Lang/PascalABC.NET/Averages-Pythagorean-means
@@ -0,0 +1 @@
+../../Task/Averages-Pythagorean-means/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Averages-Root-mean-square b/Lang/PascalABC.NET/Averages-Root-mean-square
new file mode 120000
index 0000000000..fcd93926c8
--- /dev/null
+++ b/Lang/PascalABC.NET/Averages-Root-mean-square
@@ -0,0 +1 @@
+../../Task/Averages-Root-mean-square/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Bifid-cipher b/Lang/PascalABC.NET/Bifid-cipher
new file mode 120000
index 0000000000..b627ea6e1a
--- /dev/null
+++ b/Lang/PascalABC.NET/Bifid-cipher
@@ -0,0 +1 @@
+../../Task/Bifid-cipher/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/CRC-32 b/Lang/PascalABC.NET/CRC-32
new file mode 120000
index 0000000000..dfed202f62
--- /dev/null
+++ b/Lang/PascalABC.NET/CRC-32
@@ -0,0 +1 @@
+../../Task/CRC-32/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/CUSIP b/Lang/PascalABC.NET/CUSIP
new file mode 120000
index 0000000000..1b4c6de901
--- /dev/null
+++ b/Lang/PascalABC.NET/CUSIP
@@ -0,0 +1 @@
+../../Task/CUSIP/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Caesar-cipher b/Lang/PascalABC.NET/Caesar-cipher
new file mode 120000
index 0000000000..7b80169afb
--- /dev/null
+++ b/Lang/PascalABC.NET/Caesar-cipher
@@ -0,0 +1 @@
+../../Task/Caesar-cipher/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Calendar---for-REAL-programmers b/Lang/PascalABC.NET/Calendar---for-REAL-programmers
new file mode 120000
index 0000000000..aa32b573de
--- /dev/null
+++ b/Lang/PascalABC.NET/Calendar---for-REAL-programmers
@@ -0,0 +1 @@
+../../Task/Calendar---for-REAL-programmers/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Cartesian-product-of-two-or-more-lists b/Lang/PascalABC.NET/Cartesian-product-of-two-or-more-lists
new file mode 120000
index 0000000000..e9abacde8d
--- /dev/null
+++ b/Lang/PascalABC.NET/Cartesian-product-of-two-or-more-lists
@@ -0,0 +1 @@
+../../Task/Cartesian-product-of-two-or-more-lists/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Casting-out-nines b/Lang/PascalABC.NET/Casting-out-nines
new file mode 120000
index 0000000000..2635cd3c59
--- /dev/null
+++ b/Lang/PascalABC.NET/Casting-out-nines
@@ -0,0 +1 @@
+../../Task/Casting-out-nines/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Catalan-numbers b/Lang/PascalABC.NET/Catalan-numbers
new file mode 120000
index 0000000000..a970e535cd
--- /dev/null
+++ b/Lang/PascalABC.NET/Catalan-numbers
@@ -0,0 +1 @@
+../../Task/Catalan-numbers/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Catamorphism b/Lang/PascalABC.NET/Catamorphism
new file mode 120000
index 0000000000..4cd74052dd
--- /dev/null
+++ b/Lang/PascalABC.NET/Catamorphism
@@ -0,0 +1 @@
+../../Task/Catamorphism/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Check-input-device-is-a-terminal b/Lang/PascalABC.NET/Check-input-device-is-a-terminal
new file mode 120000
index 0000000000..942e91ecc8
--- /dev/null
+++ b/Lang/PascalABC.NET/Check-input-device-is-a-terminal
@@ -0,0 +1 @@
+../../Task/Check-input-device-is-a-terminal/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Check-output-device-is-a-terminal b/Lang/PascalABC.NET/Check-output-device-is-a-terminal
new file mode 120000
index 0000000000..ddcd688824
--- /dev/null
+++ b/Lang/PascalABC.NET/Check-output-device-is-a-terminal
@@ -0,0 +1 @@
+../../Task/Check-output-device-is-a-terminal/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Check-that-file-exists b/Lang/PascalABC.NET/Check-that-file-exists
new file mode 120000
index 0000000000..8a6772fd4b
--- /dev/null
+++ b/Lang/PascalABC.NET/Check-that-file-exists
@@ -0,0 +1 @@
+../../Task/Check-that-file-exists/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Cheryls-birthday b/Lang/PascalABC.NET/Cheryls-birthday
new file mode 120000
index 0000000000..a54346abfd
--- /dev/null
+++ b/Lang/PascalABC.NET/Cheryls-birthday
@@ -0,0 +1 @@
+../../Task/Cheryls-birthday/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Chinese-remainder-theorem b/Lang/PascalABC.NET/Chinese-remainder-theorem
new file mode 120000
index 0000000000..72e58e3a4a
--- /dev/null
+++ b/Lang/PascalABC.NET/Chinese-remainder-theorem
@@ -0,0 +1 @@
+../../Task/Chinese-remainder-theorem/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Chinese-zodiac b/Lang/PascalABC.NET/Chinese-zodiac
new file mode 120000
index 0000000000..f7393d9042
--- /dev/null
+++ b/Lang/PascalABC.NET/Chinese-zodiac
@@ -0,0 +1 @@
+../../Task/Chinese-zodiac/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Cholesky-decomposition b/Lang/PascalABC.NET/Cholesky-decomposition
new file mode 120000
index 0000000000..35182d3cfc
--- /dev/null
+++ b/Lang/PascalABC.NET/Cholesky-decomposition
@@ -0,0 +1 @@
+../../Task/Cholesky-decomposition/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Chowla-numbers b/Lang/PascalABC.NET/Chowla-numbers
new file mode 120000
index 0000000000..556f1a6dfd
--- /dev/null
+++ b/Lang/PascalABC.NET/Chowla-numbers
@@ -0,0 +1 @@
+../../Task/Chowla-numbers/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Circular-primes b/Lang/PascalABC.NET/Circular-primes
new file mode 120000
index 0000000000..5224e07ad0
--- /dev/null
+++ b/Lang/PascalABC.NET/Circular-primes
@@ -0,0 +1 @@
+../../Task/Circular-primes/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Closures-Value-capture b/Lang/PascalABC.NET/Closures-Value-capture
new file mode 120000
index 0000000000..428138cdfe
--- /dev/null
+++ b/Lang/PascalABC.NET/Closures-Value-capture
@@ -0,0 +1 @@
+../../Task/Closures-Value-capture/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Color-of-a-screen-pixel b/Lang/PascalABC.NET/Color-of-a-screen-pixel
new file mode 120000
index 0000000000..45582746a3
--- /dev/null
+++ b/Lang/PascalABC.NET/Color-of-a-screen-pixel
@@ -0,0 +1 @@
+../../Task/Color-of-a-screen-pixel/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Color-wheel b/Lang/PascalABC.NET/Color-wheel
new file mode 120000
index 0000000000..ea27bb369f
--- /dev/null
+++ b/Lang/PascalABC.NET/Color-wheel
@@ -0,0 +1 @@
+../../Task/Color-wheel/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Colour-bars-Display b/Lang/PascalABC.NET/Colour-bars-Display
new file mode 120000
index 0000000000..e504c543a7
--- /dev/null
+++ b/Lang/PascalABC.NET/Colour-bars-Display
@@ -0,0 +1 @@
+../../Task/Colour-bars-Display/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Colour-pinstripe-Display b/Lang/PascalABC.NET/Colour-pinstripe-Display
new file mode 120000
index 0000000000..c9febd7d37
--- /dev/null
+++ b/Lang/PascalABC.NET/Colour-pinstripe-Display
@@ -0,0 +1 @@
+../../Task/Colour-pinstripe-Display/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Combinations b/Lang/PascalABC.NET/Combinations
new file mode 120000
index 0000000000..fad981495d
--- /dev/null
+++ b/Lang/PascalABC.NET/Combinations
@@ -0,0 +1 @@
+../../Task/Combinations/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Compile-time-calculation b/Lang/PascalABC.NET/Compile-time-calculation
new file mode 120000
index 0000000000..aa6140bdc4
--- /dev/null
+++ b/Lang/PascalABC.NET/Compile-time-calculation
@@ -0,0 +1 @@
+../../Task/Compile-time-calculation/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Composite-numbers-k-with-no-single-digit-factors-whose-factors-are-all-substrings-of-k b/Lang/PascalABC.NET/Composite-numbers-k-with-no-single-digit-factors-whose-factors-are-all-substrings-of-k
new file mode 120000
index 0000000000..54d237d7ab
--- /dev/null
+++ b/Lang/PascalABC.NET/Composite-numbers-k-with-no-single-digit-factors-whose-factors-are-all-substrings-of-k
@@ -0,0 +1 @@
+../../Task/Composite-numbers-k-with-no-single-digit-factors-whose-factors-are-all-substrings-of-k/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Constrained-random-points-on-a-circle b/Lang/PascalABC.NET/Constrained-random-points-on-a-circle
new file mode 120000
index 0000000000..5d3f518fc9
--- /dev/null
+++ b/Lang/PascalABC.NET/Constrained-random-points-on-a-circle
@@ -0,0 +1 @@
+../../Task/Constrained-random-points-on-a-circle/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Continued-fraction b/Lang/PascalABC.NET/Continued-fraction
new file mode 120000
index 0000000000..f6f45a7af5
--- /dev/null
+++ b/Lang/PascalABC.NET/Continued-fraction
@@ -0,0 +1 @@
+../../Task/Continued-fraction/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Continued-fraction-Arithmetic-Construct-from-rational-number b/Lang/PascalABC.NET/Continued-fraction-Arithmetic-Construct-from-rational-number
new file mode 120000
index 0000000000..2bab87463d
--- /dev/null
+++ b/Lang/PascalABC.NET/Continued-fraction-Arithmetic-Construct-from-rational-number
@@ -0,0 +1 @@
+../../Task/Continued-fraction-Arithmetic-Construct-from-rational-number/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Convert-decimal-number-to-rational b/Lang/PascalABC.NET/Convert-decimal-number-to-rational
new file mode 120000
index 0000000000..7827892fb4
--- /dev/null
+++ b/Lang/PascalABC.NET/Convert-decimal-number-to-rational
@@ -0,0 +1 @@
+../../Task/Convert-decimal-number-to-rational/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Count-the-coins b/Lang/PascalABC.NET/Count-the-coins
new file mode 120000
index 0000000000..43a4fdb837
--- /dev/null
+++ b/Lang/PascalABC.NET/Count-the-coins
@@ -0,0 +1 @@
+../../Task/Count-the-coins/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Create-a-file b/Lang/PascalABC.NET/Create-a-file
new file mode 120000
index 0000000000..5f3fa97f14
--- /dev/null
+++ b/Lang/PascalABC.NET/Create-a-file
@@ -0,0 +1 @@
+../../Task/Create-a-file/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Cuban-primes b/Lang/PascalABC.NET/Cuban-primes
new file mode 120000
index 0000000000..844ac15cb4
--- /dev/null
+++ b/Lang/PascalABC.NET/Cuban-primes
@@ -0,0 +1 @@
+../../Task/Cuban-primes/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Cullen-and-Woodall-numbers b/Lang/PascalABC.NET/Cullen-and-Woodall-numbers
new file mode 120000
index 0000000000..714083d23b
--- /dev/null
+++ b/Lang/PascalABC.NET/Cullen-and-Woodall-numbers
@@ -0,0 +1 @@
+../../Task/Cullen-and-Woodall-numbers/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Cumulative-standard-deviation b/Lang/PascalABC.NET/Cumulative-standard-deviation
new file mode 120000
index 0000000000..b6ef0ab016
--- /dev/null
+++ b/Lang/PascalABC.NET/Cumulative-standard-deviation
@@ -0,0 +1 @@
+../../Task/Cumulative-standard-deviation/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Currency b/Lang/PascalABC.NET/Currency
new file mode 120000
index 0000000000..2017d69d57
--- /dev/null
+++ b/Lang/PascalABC.NET/Currency
@@ -0,0 +1 @@
+../../Task/Currency/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Curzon-numbers b/Lang/PascalABC.NET/Curzon-numbers
new file mode 120000
index 0000000000..13437cd157
--- /dev/null
+++ b/Lang/PascalABC.NET/Curzon-numbers
@@ -0,0 +1 @@
+../../Task/Curzon-numbers/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/DNS-query b/Lang/PascalABC.NET/DNS-query
new file mode 120000
index 0000000000..52bda8e0aa
--- /dev/null
+++ b/Lang/PascalABC.NET/DNS-query
@@ -0,0 +1 @@
+../../Task/DNS-query/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Damm-algorithm b/Lang/PascalABC.NET/Damm-algorithm
new file mode 120000
index 0000000000..6fee5b0ddc
--- /dev/null
+++ b/Lang/PascalABC.NET/Damm-algorithm
@@ -0,0 +1 @@
+../../Task/Damm-algorithm/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Deceptive-numbers b/Lang/PascalABC.NET/Deceptive-numbers
new file mode 120000
index 0000000000..007d2d649c
--- /dev/null
+++ b/Lang/PascalABC.NET/Deceptive-numbers
@@ -0,0 +1 @@
+../../Task/Deceptive-numbers/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Deconvolution-1D b/Lang/PascalABC.NET/Deconvolution-1D
new file mode 120000
index 0000000000..9604235c77
--- /dev/null
+++ b/Lang/PascalABC.NET/Deconvolution-1D
@@ -0,0 +1 @@
+../../Task/Deconvolution-1D/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Demings-funnel b/Lang/PascalABC.NET/Demings-funnel
new file mode 120000
index 0000000000..0255de8e51
--- /dev/null
+++ b/Lang/PascalABC.NET/Demings-funnel
@@ -0,0 +1 @@
+../../Task/Demings-funnel/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Department-numbers b/Lang/PascalABC.NET/Department-numbers
new file mode 120000
index 0000000000..1b068d9b34
--- /dev/null
+++ b/Lang/PascalABC.NET/Department-numbers
@@ -0,0 +1 @@
+../../Task/Department-numbers/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Descending-primes b/Lang/PascalABC.NET/Descending-primes
new file mode 120000
index 0000000000..5641c47c94
--- /dev/null
+++ b/Lang/PascalABC.NET/Descending-primes
@@ -0,0 +1 @@
+../../Task/Descending-primes/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Detect-division-by-zero b/Lang/PascalABC.NET/Detect-division-by-zero
new file mode 120000
index 0000000000..a843cd631e
--- /dev/null
+++ b/Lang/PascalABC.NET/Detect-division-by-zero
@@ -0,0 +1 @@
+../../Task/Detect-division-by-zero/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Determine-if-a-string-has-all-the-same-characters b/Lang/PascalABC.NET/Determine-if-a-string-has-all-the-same-characters
new file mode 120000
index 0000000000..bb838a1f25
--- /dev/null
+++ b/Lang/PascalABC.NET/Determine-if-a-string-has-all-the-same-characters
@@ -0,0 +1 @@
+../../Task/Determine-if-a-string-has-all-the-same-characters/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Determine-if-a-string-has-all-unique-characters b/Lang/PascalABC.NET/Determine-if-a-string-has-all-unique-characters
new file mode 120000
index 0000000000..7c66082879
--- /dev/null
+++ b/Lang/PascalABC.NET/Determine-if-a-string-has-all-unique-characters
@@ -0,0 +1 @@
+../../Task/Determine-if-a-string-has-all-unique-characters/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Determine-if-a-string-is-collapsible b/Lang/PascalABC.NET/Determine-if-a-string-is-collapsible
new file mode 120000
index 0000000000..d22cc466fc
--- /dev/null
+++ b/Lang/PascalABC.NET/Determine-if-a-string-is-collapsible
@@ -0,0 +1 @@
+../../Task/Determine-if-a-string-is-collapsible/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Dice-game-probabilities b/Lang/PascalABC.NET/Dice-game-probabilities
new file mode 120000
index 0000000000..e5f12572e0
--- /dev/null
+++ b/Lang/PascalABC.NET/Dice-game-probabilities
@@ -0,0 +1 @@
+../../Task/Dice-game-probabilities/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Digital-root b/Lang/PascalABC.NET/Digital-root
new file mode 120000
index 0000000000..2ade97cd7d
--- /dev/null
+++ b/Lang/PascalABC.NET/Digital-root
@@ -0,0 +1 @@
+../../Task/Digital-root/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Digital-root-Multiplicative-digital-root b/Lang/PascalABC.NET/Digital-root-Multiplicative-digital-root
new file mode 120000
index 0000000000..3dcbce4c26
--- /dev/null
+++ b/Lang/PascalABC.NET/Digital-root-Multiplicative-digital-root
@@ -0,0 +1 @@
+../../Task/Digital-root-Multiplicative-digital-root/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Dinesmans-multiple-dwelling-problem b/Lang/PascalABC.NET/Dinesmans-multiple-dwelling-problem
new file mode 120000
index 0000000000..b9659a07e6
--- /dev/null
+++ b/Lang/PascalABC.NET/Dinesmans-multiple-dwelling-problem
@@ -0,0 +1 @@
+../../Task/Dinesmans-multiple-dwelling-problem/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Disarium-numbers b/Lang/PascalABC.NET/Disarium-numbers
new file mode 120000
index 0000000000..25866ae831
--- /dev/null
+++ b/Lang/PascalABC.NET/Disarium-numbers
@@ -0,0 +1 @@
+../../Task/Disarium-numbers/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Distribution-of-0-digits-in-factorial-series b/Lang/PascalABC.NET/Distribution-of-0-digits-in-factorial-series
new file mode 120000
index 0000000000..f8efbe37d1
--- /dev/null
+++ b/Lang/PascalABC.NET/Distribution-of-0-digits-in-factorial-series
@@ -0,0 +1 @@
+../../Task/Distribution-of-0-digits-in-factorial-series/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Diversity-prediction-theorem b/Lang/PascalABC.NET/Diversity-prediction-theorem
new file mode 120000
index 0000000000..a1a0483997
--- /dev/null
+++ b/Lang/PascalABC.NET/Diversity-prediction-theorem
@@ -0,0 +1 @@
+../../Task/Diversity-prediction-theorem/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Doomsday-rule b/Lang/PascalABC.NET/Doomsday-rule
new file mode 120000
index 0000000000..4aed9db54a
--- /dev/null
+++ b/Lang/PascalABC.NET/Doomsday-rule
@@ -0,0 +1 @@
+../../Task/Doomsday-rule/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Dot-product b/Lang/PascalABC.NET/Dot-product
new file mode 120000
index 0000000000..75977e9d01
--- /dev/null
+++ b/Lang/PascalABC.NET/Dot-product
@@ -0,0 +1 @@
+../../Task/Dot-product/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Duffinian-numbers b/Lang/PascalABC.NET/Duffinian-numbers
new file mode 120000
index 0000000000..ed0f087334
--- /dev/null
+++ b/Lang/PascalABC.NET/Duffinian-numbers
@@ -0,0 +1 @@
+../../Task/Duffinian-numbers/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Dutch-national-flag-problem b/Lang/PascalABC.NET/Dutch-national-flag-problem
new file mode 120000
index 0000000000..20b563dbd5
--- /dev/null
+++ b/Lang/PascalABC.NET/Dutch-national-flag-problem
@@ -0,0 +1 @@
+../../Task/Dutch-national-flag-problem/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Egyptian-division b/Lang/PascalABC.NET/Egyptian-division
new file mode 120000
index 0000000000..d931ff8696
--- /dev/null
+++ b/Lang/PascalABC.NET/Egyptian-division
@@ -0,0 +1 @@
+../../Task/Egyptian-division/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Empty-string b/Lang/PascalABC.NET/Empty-string
new file mode 120000
index 0000000000..39d89b0e6b
--- /dev/null
+++ b/Lang/PascalABC.NET/Empty-string
@@ -0,0 +1 @@
+../../Task/Empty-string/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Entropy b/Lang/PascalABC.NET/Entropy
new file mode 120000
index 0000000000..792ccf7d2a
--- /dev/null
+++ b/Lang/PascalABC.NET/Entropy
@@ -0,0 +1 @@
+../../Task/Entropy/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Environment-variables b/Lang/PascalABC.NET/Environment-variables
new file mode 120000
index 0000000000..a87e0f0eca
--- /dev/null
+++ b/Lang/PascalABC.NET/Environment-variables
@@ -0,0 +1 @@
+../../Task/Environment-variables/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Equal-prime-and-composite-sums b/Lang/PascalABC.NET/Equal-prime-and-composite-sums
new file mode 120000
index 0000000000..e0ef8faaeb
--- /dev/null
+++ b/Lang/PascalABC.NET/Equal-prime-and-composite-sums
@@ -0,0 +1 @@
+../../Task/Equal-prime-and-composite-sums/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Equilibrium-index b/Lang/PascalABC.NET/Equilibrium-index
new file mode 120000
index 0000000000..1ebc161d1d
--- /dev/null
+++ b/Lang/PascalABC.NET/Equilibrium-index
@@ -0,0 +1 @@
+../../Task/Equilibrium-index/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Erd-s-Nicolas-numbers b/Lang/PascalABC.NET/Erd-s-Nicolas-numbers
new file mode 120000
index 0000000000..8d04b147b5
--- /dev/null
+++ b/Lang/PascalABC.NET/Erd-s-Nicolas-numbers
@@ -0,0 +1 @@
+../../Task/Erd-s-Nicolas-numbers/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Ethiopian-multiplication b/Lang/PascalABC.NET/Ethiopian-multiplication
new file mode 120000
index 0000000000..225d8834fa
--- /dev/null
+++ b/Lang/PascalABC.NET/Ethiopian-multiplication
@@ -0,0 +1 @@
+../../Task/Ethiopian-multiplication/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Euclid-Mullin-sequence b/Lang/PascalABC.NET/Euclid-Mullin-sequence
new file mode 120000
index 0000000000..c1a4f722c5
--- /dev/null
+++ b/Lang/PascalABC.NET/Euclid-Mullin-sequence
@@ -0,0 +1 @@
+../../Task/Euclid-Mullin-sequence/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Euler-method b/Lang/PascalABC.NET/Euler-method
new file mode 120000
index 0000000000..d3b60b57ad
--- /dev/null
+++ b/Lang/PascalABC.NET/Euler-method
@@ -0,0 +1 @@
+../../Task/Euler-method/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Eulers-constant-0.5772... b/Lang/PascalABC.NET/Eulers-constant-0.5772...
new file mode 120000
index 0000000000..093c235349
--- /dev/null
+++ b/Lang/PascalABC.NET/Eulers-constant-0.5772...
@@ -0,0 +1 @@
+../../Task/Eulers-constant-0.5772.../PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Eulers-identity b/Lang/PascalABC.NET/Eulers-identity
new file mode 120000
index 0000000000..05f2a3a1ec
--- /dev/null
+++ b/Lang/PascalABC.NET/Eulers-identity
@@ -0,0 +1 @@
+../../Task/Eulers-identity/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Eulers-sum-of-powers-conjecture b/Lang/PascalABC.NET/Eulers-sum-of-powers-conjecture
new file mode 120000
index 0000000000..a568356eba
--- /dev/null
+++ b/Lang/PascalABC.NET/Eulers-sum-of-powers-conjecture
@@ -0,0 +1 @@
+../../Task/Eulers-sum-of-powers-conjecture/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Evaluate-binomial-coefficients b/Lang/PascalABC.NET/Evaluate-binomial-coefficients
new file mode 120000
index 0000000000..6ad68ae41d
--- /dev/null
+++ b/Lang/PascalABC.NET/Evaluate-binomial-coefficients
@@ -0,0 +1 @@
+../../Task/Evaluate-binomial-coefficients/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Events b/Lang/PascalABC.NET/Events
new file mode 120000
index 0000000000..75843719a2
--- /dev/null
+++ b/Lang/PascalABC.NET/Events
@@ -0,0 +1 @@
+../../Task/Events/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/File-modification-time b/Lang/PascalABC.NET/File-modification-time
new file mode 120000
index 0000000000..f54091dc36
--- /dev/null
+++ b/Lang/PascalABC.NET/File-modification-time
@@ -0,0 +1 @@
+../../Task/File-modification-time/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Find-if-a-point-is-within-a-triangle b/Lang/PascalABC.NET/Find-if-a-point-is-within-a-triangle
new file mode 120000
index 0000000000..995f2a0af8
--- /dev/null
+++ b/Lang/PascalABC.NET/Find-if-a-point-is-within-a-triangle
@@ -0,0 +1 @@
+../../Task/Find-if-a-point-is-within-a-triangle/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Find-palindromic-numbers-in-both-binary-and-ternary-bases b/Lang/PascalABC.NET/Find-palindromic-numbers-in-both-binary-and-ternary-bases
new file mode 120000
index 0000000000..d897fb9951
--- /dev/null
+++ b/Lang/PascalABC.NET/Find-palindromic-numbers-in-both-binary-and-ternary-bases
@@ -0,0 +1 @@
+../../Task/Find-palindromic-numbers-in-both-binary-and-ternary-bases/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Find-the-intersection-of-a-line-with-a-plane b/Lang/PascalABC.NET/Find-the-intersection-of-a-line-with-a-plane
new file mode 120000
index 0000000000..db54cce940
--- /dev/null
+++ b/Lang/PascalABC.NET/Find-the-intersection-of-a-line-with-a-plane
@@ -0,0 +1 @@
+../../Task/Find-the-intersection-of-a-line-with-a-plane/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Find-the-intersection-of-two-lines b/Lang/PascalABC.NET/Find-the-intersection-of-two-lines
new file mode 120000
index 0000000000..654d760b69
--- /dev/null
+++ b/Lang/PascalABC.NET/Find-the-intersection-of-two-lines
@@ -0,0 +1 @@
+../../Task/Find-the-intersection-of-two-lines/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Find-the-last-Sunday-of-each-month b/Lang/PascalABC.NET/Find-the-last-Sunday-of-each-month
new file mode 120000
index 0000000000..14b7c01559
--- /dev/null
+++ b/Lang/PascalABC.NET/Find-the-last-Sunday-of-each-month
@@ -0,0 +1 @@
+../../Task/Find-the-last-Sunday-of-each-month/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Find-the-missing-permutation b/Lang/PascalABC.NET/Find-the-missing-permutation
new file mode 120000
index 0000000000..74bb4ee6f0
--- /dev/null
+++ b/Lang/PascalABC.NET/Find-the-missing-permutation
@@ -0,0 +1 @@
+../../Task/Find-the-missing-permutation/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/First-class-functions-Use-numbers-analogously b/Lang/PascalABC.NET/First-class-functions-Use-numbers-analogously
new file mode 120000
index 0000000000..60d3a6b1c4
--- /dev/null
+++ b/Lang/PascalABC.NET/First-class-functions-Use-numbers-analogously
@@ -0,0 +1 @@
+../../Task/First-class-functions-Use-numbers-analogously/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/First-perfect-square-in-base-n-with-n-unique-digits b/Lang/PascalABC.NET/First-perfect-square-in-base-n-with-n-unique-digits
new file mode 120000
index 0000000000..dd9c2365f8
--- /dev/null
+++ b/Lang/PascalABC.NET/First-perfect-square-in-base-n-with-n-unique-digits
@@ -0,0 +1 @@
+../../Task/First-perfect-square-in-base-n-with-n-unique-digits/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/First-power-of-2-that-has-leading-decimal-digits-of-12 b/Lang/PascalABC.NET/First-power-of-2-that-has-leading-decimal-digits-of-12
new file mode 120000
index 0000000000..31a48a0c89
--- /dev/null
+++ b/Lang/PascalABC.NET/First-power-of-2-that-has-leading-decimal-digits-of-12
@@ -0,0 +1 @@
+../../Task/First-power-of-2-that-has-leading-decimal-digits-of-12/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Forward-difference b/Lang/PascalABC.NET/Forward-difference
new file mode 120000
index 0000000000..6ba594a872
--- /dev/null
+++ b/Lang/PascalABC.NET/Forward-difference
@@ -0,0 +1 @@
+../../Task/Forward-difference/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Fractal-tree b/Lang/PascalABC.NET/Fractal-tree
new file mode 120000
index 0000000000..1018455008
--- /dev/null
+++ b/Lang/PascalABC.NET/Fractal-tree
@@ -0,0 +1 @@
+../../Task/Fractal-tree/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Function-composition b/Lang/PascalABC.NET/Function-composition
new file mode 120000
index 0000000000..10938e885c
--- /dev/null
+++ b/Lang/PascalABC.NET/Function-composition
@@ -0,0 +1 @@
+../../Task/Function-composition/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Fusc-sequence b/Lang/PascalABC.NET/Fusc-sequence
new file mode 120000
index 0000000000..30b9581633
--- /dev/null
+++ b/Lang/PascalABC.NET/Fusc-sequence
@@ -0,0 +1 @@
+../../Task/Fusc-sequence/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Gapful-numbers b/Lang/PascalABC.NET/Gapful-numbers
new file mode 120000
index 0000000000..c53e98533f
--- /dev/null
+++ b/Lang/PascalABC.NET/Gapful-numbers
@@ -0,0 +1 @@
+../../Task/Gapful-numbers/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Gauss-Jordan-matrix-inversion b/Lang/PascalABC.NET/Gauss-Jordan-matrix-inversion
new file mode 120000
index 0000000000..af61f036c2
--- /dev/null
+++ b/Lang/PascalABC.NET/Gauss-Jordan-matrix-inversion
@@ -0,0 +1 @@
+../../Task/Gauss-Jordan-matrix-inversion/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Generator-Exponential b/Lang/PascalABC.NET/Generator-Exponential
new file mode 120000
index 0000000000..ca6d0b1093
--- /dev/null
+++ b/Lang/PascalABC.NET/Generator-Exponential
@@ -0,0 +1 @@
+../../Task/Generator-Exponential/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Get-system-command-output b/Lang/PascalABC.NET/Get-system-command-output
new file mode 120000
index 0000000000..41cb609755
--- /dev/null
+++ b/Lang/PascalABC.NET/Get-system-command-output
@@ -0,0 +1 @@
+../../Task/Get-system-command-output/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Giuga-numbers b/Lang/PascalABC.NET/Giuga-numbers
new file mode 120000
index 0000000000..e5f281e7e3
--- /dev/null
+++ b/Lang/PascalABC.NET/Giuga-numbers
@@ -0,0 +1 @@
+../../Task/Giuga-numbers/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Globally-replace-text-in-several-files b/Lang/PascalABC.NET/Globally-replace-text-in-several-files
new file mode 120000
index 0000000000..d8545a73f2
--- /dev/null
+++ b/Lang/PascalABC.NET/Globally-replace-text-in-several-files
@@ -0,0 +1 @@
+../../Task/Globally-replace-text-in-several-files/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Golden-ratio-Convergence b/Lang/PascalABC.NET/Golden-ratio-Convergence
new file mode 120000
index 0000000000..375683d4e0
--- /dev/null
+++ b/Lang/PascalABC.NET/Golden-ratio-Convergence
@@ -0,0 +1 @@
+../../Task/Golden-ratio-Convergence/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Gray-code b/Lang/PascalABC.NET/Gray-code
new file mode 120000
index 0000000000..078fdc2c8b
--- /dev/null
+++ b/Lang/PascalABC.NET/Gray-code
@@ -0,0 +1 @@
+../../Task/Gray-code/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Greatest-element-of-a-list b/Lang/PascalABC.NET/Greatest-element-of-a-list
new file mode 120000
index 0000000000..b5185eb27d
--- /dev/null
+++ b/Lang/PascalABC.NET/Greatest-element-of-a-list
@@ -0,0 +1 @@
+../../Task/Greatest-element-of-a-list/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Greatest-subsequential-sum b/Lang/PascalABC.NET/Greatest-subsequential-sum
new file mode 120000
index 0000000000..10aeb8b0f0
--- /dev/null
+++ b/Lang/PascalABC.NET/Greatest-subsequential-sum
@@ -0,0 +1 @@
+../../Task/Greatest-subsequential-sum/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/HTTP b/Lang/PascalABC.NET/HTTP
new file mode 120000
index 0000000000..28d630c27b
--- /dev/null
+++ b/Lang/PascalABC.NET/HTTP
@@ -0,0 +1 @@
+../../Task/HTTP/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/HTTPS b/Lang/PascalABC.NET/HTTPS
new file mode 120000
index 0000000000..88259c85d4
--- /dev/null
+++ b/Lang/PascalABC.NET/HTTPS
@@ -0,0 +1 @@
+../../Task/HTTPS/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/HTTPS-Authenticated b/Lang/PascalABC.NET/HTTPS-Authenticated
new file mode 120000
index 0000000000..5f39b0a90c
--- /dev/null
+++ b/Lang/PascalABC.NET/HTTPS-Authenticated
@@ -0,0 +1 @@
+../../Task/HTTPS-Authenticated/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Hailstone-sequence b/Lang/PascalABC.NET/Hailstone-sequence
new file mode 120000
index 0000000000..f83360c3ea
--- /dev/null
+++ b/Lang/PascalABC.NET/Hailstone-sequence
@@ -0,0 +1 @@
+../../Task/Hailstone-sequence/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Halt-and-catch-fire b/Lang/PascalABC.NET/Halt-and-catch-fire
new file mode 120000
index 0000000000..531d664087
--- /dev/null
+++ b/Lang/PascalABC.NET/Halt-and-catch-fire
@@ -0,0 +1 @@
+../../Task/Halt-and-catch-fire/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Hamming-numbers b/Lang/PascalABC.NET/Hamming-numbers
new file mode 120000
index 0000000000..bd37bceed8
--- /dev/null
+++ b/Lang/PascalABC.NET/Hamming-numbers
@@ -0,0 +1 @@
+../../Task/Hamming-numbers/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Handle-a-signal b/Lang/PascalABC.NET/Handle-a-signal
new file mode 120000
index 0000000000..e3f3390134
--- /dev/null
+++ b/Lang/PascalABC.NET/Handle-a-signal
@@ -0,0 +1 @@
+../../Task/Handle-a-signal/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Happy-numbers b/Lang/PascalABC.NET/Happy-numbers
new file mode 120000
index 0000000000..2b0f0e30d5
--- /dev/null
+++ b/Lang/PascalABC.NET/Happy-numbers
@@ -0,0 +1 @@
+../../Task/Happy-numbers/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Harmonic-series b/Lang/PascalABC.NET/Harmonic-series
new file mode 120000
index 0000000000..c5dec236a3
--- /dev/null
+++ b/Lang/PascalABC.NET/Harmonic-series
@@ -0,0 +1 @@
+../../Task/Harmonic-series/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Harshad-or-Niven-series b/Lang/PascalABC.NET/Harshad-or-Niven-series
new file mode 120000
index 0000000000..4a30ac9f34
--- /dev/null
+++ b/Lang/PascalABC.NET/Harshad-or-Niven-series
@@ -0,0 +1 @@
+../../Task/Harshad-or-Niven-series/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Here-document b/Lang/PascalABC.NET/Here-document
new file mode 120000
index 0000000000..073a394aa5
--- /dev/null
+++ b/Lang/PascalABC.NET/Here-document
@@ -0,0 +1 @@
+../../Task/Here-document/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Higher-order-functions b/Lang/PascalABC.NET/Higher-order-functions
new file mode 120000
index 0000000000..c3ac017464
--- /dev/null
+++ b/Lang/PascalABC.NET/Higher-order-functions
@@ -0,0 +1 @@
+../../Task/Higher-order-functions/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Hilbert-curve b/Lang/PascalABC.NET/Hilbert-curve
new file mode 120000
index 0000000000..319eba89d6
--- /dev/null
+++ b/Lang/PascalABC.NET/Hilbert-curve
@@ -0,0 +1 @@
+../../Task/Hilbert-curve/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Horners-rule-for-polynomial-evaluation b/Lang/PascalABC.NET/Horners-rule-for-polynomial-evaluation
new file mode 120000
index 0000000000..43a8514719
--- /dev/null
+++ b/Lang/PascalABC.NET/Horners-rule-for-polynomial-evaluation
@@ -0,0 +1 @@
+../../Task/Horners-rule-for-polynomial-evaluation/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Host-introspection b/Lang/PascalABC.NET/Host-introspection
new file mode 120000
index 0000000000..786a9617c6
--- /dev/null
+++ b/Lang/PascalABC.NET/Host-introspection
@@ -0,0 +1 @@
+../../Task/Host-introspection/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Hostname b/Lang/PascalABC.NET/Hostname
new file mode 120000
index 0000000000..89e14c01f4
--- /dev/null
+++ b/Lang/PascalABC.NET/Hostname
@@ -0,0 +1 @@
+../../Task/Hostname/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/I-before-E-except-after-C b/Lang/PascalABC.NET/I-before-E-except-after-C
new file mode 120000
index 0000000000..db9c4689f9
--- /dev/null
+++ b/Lang/PascalABC.NET/I-before-E-except-after-C
@@ -0,0 +1 @@
+../../Task/I-before-E-except-after-C/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Increment-a-numerical-string b/Lang/PascalABC.NET/Increment-a-numerical-string
new file mode 120000
index 0000000000..5570e6302a
--- /dev/null
+++ b/Lang/PascalABC.NET/Increment-a-numerical-string
@@ -0,0 +1 @@
+../../Task/Increment-a-numerical-string/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Jewels-and-stones b/Lang/PascalABC.NET/Jewels-and-stones
new file mode 120000
index 0000000000..3c21e35293
--- /dev/null
+++ b/Lang/PascalABC.NET/Jewels-and-stones
@@ -0,0 +1 @@
+../../Task/Jewels-and-stones/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Kaprekar-numbers b/Lang/PascalABC.NET/Kaprekar-numbers
new file mode 120000
index 0000000000..f1765dac14
--- /dev/null
+++ b/Lang/PascalABC.NET/Kaprekar-numbers
@@ -0,0 +1 @@
+../../Task/Kaprekar-numbers/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Keyboard-input-Obtain-a-Y-or-N-response b/Lang/PascalABC.NET/Keyboard-input-Obtain-a-Y-or-N-response
new file mode 120000
index 0000000000..d70dc96806
--- /dev/null
+++ b/Lang/PascalABC.NET/Keyboard-input-Obtain-a-Y-or-N-response
@@ -0,0 +1 @@
+../../Task/Keyboard-input-Obtain-a-Y-or-N-response/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Leap-year b/Lang/PascalABC.NET/Leap-year
new file mode 120000
index 0000000000..250d71014a
--- /dev/null
+++ b/Lang/PascalABC.NET/Leap-year
@@ -0,0 +1 @@
+../../Task/Leap-year/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Left-factorials b/Lang/PascalABC.NET/Left-factorials
new file mode 120000
index 0000000000..8ed1d03134
--- /dev/null
+++ b/Lang/PascalABC.NET/Left-factorials
@@ -0,0 +1 @@
+../../Task/Left-factorials/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Linear-congruential-generator b/Lang/PascalABC.NET/Linear-congruential-generator
new file mode 120000
index 0000000000..901b6b4116
--- /dev/null
+++ b/Lang/PascalABC.NET/Linear-congruential-generator
@@ -0,0 +1 @@
+../../Task/Linear-congruential-generator/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Matrix-exponentiation-operator b/Lang/PascalABC.NET/Matrix-exponentiation-operator
new file mode 120000
index 0000000000..31137ceb77
--- /dev/null
+++ b/Lang/PascalABC.NET/Matrix-exponentiation-operator
@@ -0,0 +1 @@
+../../Task/Matrix-exponentiation-operator/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Matrix-multiplication b/Lang/PascalABC.NET/Matrix-multiplication
new file mode 120000
index 0000000000..ab9b502408
--- /dev/null
+++ b/Lang/PascalABC.NET/Matrix-multiplication
@@ -0,0 +1 @@
+../../Task/Matrix-multiplication/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Matrix-transposition b/Lang/PascalABC.NET/Matrix-transposition
new file mode 120000
index 0000000000..2ba6e5da4b
--- /dev/null
+++ b/Lang/PascalABC.NET/Matrix-transposition
@@ -0,0 +1 @@
+../../Task/Matrix-transposition/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Modular-exponentiation b/Lang/PascalABC.NET/Modular-exponentiation
new file mode 120000
index 0000000000..06db8e7a38
--- /dev/null
+++ b/Lang/PascalABC.NET/Modular-exponentiation
@@ -0,0 +1 @@
+../../Task/Modular-exponentiation/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Monte-Carlo-methods b/Lang/PascalABC.NET/Monte-Carlo-methods
new file mode 120000
index 0000000000..097d7017f6
--- /dev/null
+++ b/Lang/PascalABC.NET/Monte-Carlo-methods
@@ -0,0 +1 @@
+../../Task/Monte-Carlo-methods/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Multiplication-tables b/Lang/PascalABC.NET/Multiplication-tables
new file mode 120000
index 0000000000..bbe1dc2627
--- /dev/null
+++ b/Lang/PascalABC.NET/Multiplication-tables
@@ -0,0 +1 @@
+../../Task/Multiplication-tables/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Multisplit b/Lang/PascalABC.NET/Multisplit
new file mode 120000
index 0000000000..cacc0acc3b
--- /dev/null
+++ b/Lang/PascalABC.NET/Multisplit
@@ -0,0 +1 @@
+../../Task/Multisplit/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Mutual-recursion b/Lang/PascalABC.NET/Mutual-recursion
new file mode 120000
index 0000000000..ccdccec66f
--- /dev/null
+++ b/Lang/PascalABC.NET/Mutual-recursion
@@ -0,0 +1 @@
+../../Task/Mutual-recursion/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Naming-conventions b/Lang/PascalABC.NET/Naming-conventions
new file mode 120000
index 0000000000..5fc365228c
--- /dev/null
+++ b/Lang/PascalABC.NET/Naming-conventions
@@ -0,0 +1 @@
+../../Task/Naming-conventions/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Ordered-words b/Lang/PascalABC.NET/Ordered-words
new file mode 120000
index 0000000000..d3217a2d03
--- /dev/null
+++ b/Lang/PascalABC.NET/Ordered-words
@@ -0,0 +1 @@
+../../Task/Ordered-words/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Partition-function-P b/Lang/PascalABC.NET/Partition-function-P
new file mode 120000
index 0000000000..e780cc5e40
--- /dev/null
+++ b/Lang/PascalABC.NET/Partition-function-P
@@ -0,0 +1 @@
+../../Task/Partition-function-P/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Permutations b/Lang/PascalABC.NET/Permutations
new file mode 120000
index 0000000000..e1329591d7
--- /dev/null
+++ b/Lang/PascalABC.NET/Permutations
@@ -0,0 +1 @@
+../../Task/Permutations/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Plot-coordinate-pairs b/Lang/PascalABC.NET/Plot-coordinate-pairs
new file mode 120000
index 0000000000..4d0282311b
--- /dev/null
+++ b/Lang/PascalABC.NET/Plot-coordinate-pairs
@@ -0,0 +1 @@
+../../Task/Plot-coordinate-pairs/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Population-count b/Lang/PascalABC.NET/Population-count
new file mode 120000
index 0000000000..742c56a591
--- /dev/null
+++ b/Lang/PascalABC.NET/Population-count
@@ -0,0 +1 @@
+../../Task/Population-count/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/RPG-attributes-generator b/Lang/PascalABC.NET/RPG-attributes-generator
new file mode 120000
index 0000000000..ddbe45c835
--- /dev/null
+++ b/Lang/PascalABC.NET/RPG-attributes-generator
@@ -0,0 +1 @@
+../../Task/RPG-attributes-generator/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Ramer-Douglas-Peucker-line-simplification b/Lang/PascalABC.NET/Ramer-Douglas-Peucker-line-simplification
new file mode 120000
index 0000000000..31e2b26ec5
--- /dev/null
+++ b/Lang/PascalABC.NET/Ramer-Douglas-Peucker-line-simplification
@@ -0,0 +1 @@
+../../Task/Ramer-Douglas-Peucker-line-simplification/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Random-numbers b/Lang/PascalABC.NET/Random-numbers
new file mode 120000
index 0000000000..da187d2cc0
--- /dev/null
+++ b/Lang/PascalABC.NET/Random-numbers
@@ -0,0 +1 @@
+../../Task/Random-numbers/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Search-a-list-of-records b/Lang/PascalABC.NET/Search-a-list-of-records
new file mode 120000
index 0000000000..7e72a33d4d
--- /dev/null
+++ b/Lang/PascalABC.NET/Search-a-list-of-records
@@ -0,0 +1 @@
+../../Task/Search-a-list-of-records/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Short-circuit-evaluation b/Lang/PascalABC.NET/Short-circuit-evaluation
new file mode 120000
index 0000000000..582c107471
--- /dev/null
+++ b/Lang/PascalABC.NET/Short-circuit-evaluation
@@ -0,0 +1 @@
+../../Task/Short-circuit-evaluation/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Sierpinski-triangle b/Lang/PascalABC.NET/Sierpinski-triangle
new file mode 120000
index 0000000000..7eb8f22264
--- /dev/null
+++ b/Lang/PascalABC.NET/Sierpinski-triangle
@@ -0,0 +1 @@
+../../Task/Sierpinski-triangle/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Sorting-algorithms-Bubble-sort b/Lang/PascalABC.NET/Sorting-algorithms-Bubble-sort
new file mode 120000
index 0000000000..75fb7e1472
--- /dev/null
+++ b/Lang/PascalABC.NET/Sorting-algorithms-Bubble-sort
@@ -0,0 +1 @@
+../../Task/Sorting-algorithms-Bubble-sort/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Split-a-character-string-based-on-change-of-character b/Lang/PascalABC.NET/Split-a-character-string-based-on-change-of-character
new file mode 120000
index 0000000000..b7c7bef74b
--- /dev/null
+++ b/Lang/PascalABC.NET/Split-a-character-string-based-on-change-of-character
@@ -0,0 +1 @@
+../../Task/Split-a-character-string-based-on-change-of-character/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Statistics-Basic b/Lang/PascalABC.NET/Statistics-Basic
new file mode 120000
index 0000000000..5ef44d7d18
--- /dev/null
+++ b/Lang/PascalABC.NET/Statistics-Basic
@@ -0,0 +1 @@
+../../Task/Statistics-Basic/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Teacup-rim-text b/Lang/PascalABC.NET/Teacup-rim-text
new file mode 120000
index 0000000000..408b28d813
--- /dev/null
+++ b/Lang/PascalABC.NET/Teacup-rim-text
@@ -0,0 +1 @@
+../../Task/Teacup-rim-text/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/Perl/Compare-sorting-algorithms-performance b/Lang/Perl/Compare-sorting-algorithms-performance
new file mode 120000
index 0000000000..a54a5351fe
--- /dev/null
+++ b/Lang/Perl/Compare-sorting-algorithms-performance
@@ -0,0 +1 @@
+../../Task/Compare-sorting-algorithms-performance/Perl
\ No newline at end of file
diff --git a/Lang/Perl/K-d-tree b/Lang/Perl/K-d-tree
new file mode 120000
index 0000000000..1cd4d50962
--- /dev/null
+++ b/Lang/Perl/K-d-tree
@@ -0,0 +1 @@
+../../Task/K-d-tree/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Singular-value-decomposition b/Lang/Perl/Singular-value-decomposition
new file mode 120000
index 0000000000..0fe6468df6
--- /dev/null
+++ b/Lang/Perl/Singular-value-decomposition
@@ -0,0 +1 @@
+../../Task/Singular-value-decomposition/Perl
\ No newline at end of file
diff --git a/Lang/Perl/Steffensens-method b/Lang/Perl/Steffensens-method
new file mode 120000
index 0000000000..3b3d8146aa
--- /dev/null
+++ b/Lang/Perl/Steffensens-method
@@ -0,0 +1 @@
+../../Task/Steffensens-method/Perl
\ No newline at end of file
diff --git a/Lang/ProDOS/00-LANG.txt b/Lang/ProDOS/00-LANG.txt
index 3affb9c53a..d4852ff3b2 100644
--- a/Lang/ProDOS/00-LANG.txt
+++ b/Lang/ProDOS/00-LANG.txt
@@ -4,18 +4,18 @@ ProDOS is an open-source command-based programming language created by Riley Hou
===Overview===
ProDOS is a command-based language. This term refers to any form of language that uses built-in commands to function, instead of strings of keywords to function. For example:
-printline Hello, World!
+printline Hello, World!
The command "printline" is used to display the line "Hello, World". For clarification, in Java the alternative would be:
-public class HelloWorld
+public class HelloWorld
{
public static void main(String[] args)
{
System.out.println("Goodbye, World!");
}
-}
+}
-As you can see, the difference is quite significant. The command "printline" is pre-defined, this means that the user does not have to define classes,etc.
+As you can see, the difference is quite significant. The command "printline" is pre-defined, this means that the user does not have to define classes,etc.
===Future Implementations===
ProDOS has not yet reached a release stage, but due to it being only a few months left until it is able to be released, ProDOS 1 will be ready to be released for public distribution by early 2012.
\ No newline at end of file
diff --git a/Lang/ProgressBASIC/00-LANG.txt b/Lang/ProgressBASIC/00-LANG.txt
new file mode 100644
index 0000000000..d243dbaa3d
--- /dev/null
+++ b/Lang/ProgressBASIC/00-LANG.txt
@@ -0,0 +1,3 @@
+{{language}}
+ProgressBASIC is a BASIC-like programming language used in the mobile/steam game Progressbar95. To get acses to the programming language. You must unlock the 8-bit category of systems.
+To understand how this programming language works, [https://progressbar95.fandom.com/wiki/ProgressBASIC#Commands click this]
\ No newline at end of file
diff --git a/Lang/ProgressBASIC/00-META.yaml b/Lang/ProgressBASIC/00-META.yaml
new file mode 100644
index 0000000000..82857e2590
--- /dev/null
+++ b/Lang/ProgressBASIC/00-META.yaml
@@ -0,0 +1,2 @@
+---
+from: http://rosettacode.org/wiki/Category:ProgressBASIC
diff --git a/Lang/Prolog/Determine-sentence-type b/Lang/Prolog/Determine-sentence-type
new file mode 120000
index 0000000000..d87bf5b582
--- /dev/null
+++ b/Lang/Prolog/Determine-sentence-type
@@ -0,0 +1 @@
+../../Task/Determine-sentence-type/Prolog
\ No newline at end of file
diff --git a/Lang/Prolog/Twos-complement b/Lang/Prolog/Twos-complement
new file mode 120000
index 0000000000..1ba2d1e131
--- /dev/null
+++ b/Lang/Prolog/Twos-complement
@@ -0,0 +1 @@
+../../Task/Twos-complement/Prolog
\ No newline at end of file
diff --git a/Lang/PureBasic/Determine-if-a-string-has-all-the-same-characters b/Lang/PureBasic/Determine-if-a-string-has-all-the-same-characters
new file mode 120000
index 0000000000..8ce6b940bc
--- /dev/null
+++ b/Lang/PureBasic/Determine-if-a-string-has-all-the-same-characters
@@ -0,0 +1 @@
+../../Task/Determine-if-a-string-has-all-the-same-characters/PureBasic
\ No newline at end of file
diff --git a/Lang/PureBasic/Determine-sentence-type b/Lang/PureBasic/Determine-sentence-type
new file mode 120000
index 0000000000..58f4c9411b
--- /dev/null
+++ b/Lang/PureBasic/Determine-sentence-type
@@ -0,0 +1 @@
+../../Task/Determine-sentence-type/PureBasic
\ No newline at end of file
diff --git a/Lang/PureBasic/Jewels-and-stones b/Lang/PureBasic/Jewels-and-stones
new file mode 120000
index 0000000000..90d847c8e7
--- /dev/null
+++ b/Lang/PureBasic/Jewels-and-stones
@@ -0,0 +1 @@
+../../Task/Jewels-and-stones/PureBasic
\ No newline at end of file
diff --git a/Lang/PureBasic/Numerical-and-alphabetical-suffixes b/Lang/PureBasic/Numerical-and-alphabetical-suffixes
new file mode 120000
index 0000000000..1544fa8d4a
--- /dev/null
+++ b/Lang/PureBasic/Numerical-and-alphabetical-suffixes
@@ -0,0 +1 @@
+../../Task/Numerical-and-alphabetical-suffixes/PureBasic
\ No newline at end of file
diff --git a/Lang/PureBasic/Periodic-table b/Lang/PureBasic/Periodic-table
new file mode 120000
index 0000000000..d212a3056c
--- /dev/null
+++ b/Lang/PureBasic/Periodic-table
@@ -0,0 +1 @@
+../../Task/Periodic-table/PureBasic
\ No newline at end of file
diff --git a/Lang/PureBasic/The-Name-Game b/Lang/PureBasic/The-Name-Game
new file mode 120000
index 0000000000..50ae0fd1b6
--- /dev/null
+++ b/Lang/PureBasic/The-Name-Game
@@ -0,0 +1 @@
+../../Task/The-Name-Game/PureBasic
\ No newline at end of file
diff --git a/Lang/PureBasic/Twos-complement b/Lang/PureBasic/Twos-complement
new file mode 120000
index 0000000000..dfe56459f4
--- /dev/null
+++ b/Lang/PureBasic/Twos-complement
@@ -0,0 +1 @@
+../../Task/Twos-complement/PureBasic
\ No newline at end of file
diff --git a/Lang/Q/00-LANG.txt b/Lang/Q/00-LANG.txt
index 761de14eda..1cf9ed3990 100644
--- a/Lang/Q/00-LANG.txt
+++ b/Lang/Q/00-LANG.txt
@@ -1,5 +1,6 @@
-{{language}}Q is another vector language (in the family of [[APL]] [[J]] [[K]] and [[Nial]])
+{{language}}
+Q is another vector language (in the family of [[APL]], [[J]], [[K]], and [[Nial]])
-There is a totally unrelated language called Q [http://q-lang.sourceforge.net/ here]. (It is an equational programming language)
+There is a totally unrelated language called Q [http://q-lang.sourceforge.net/ here]. (It is an equational programming language.)
-Q [https://code.kx.com/trac/wiki/QforMortals docs](anonymous/anonymous)
\ No newline at end of file
+Documentation: [https://code.kx.com/q4m3/ Q for Mortals] An introduction to q programming
\ No newline at end of file
diff --git a/Lang/QB64/Determine-if-a-string-has-all-the-same-characters b/Lang/QB64/Determine-if-a-string-has-all-the-same-characters
new file mode 120000
index 0000000000..e5cb75941f
--- /dev/null
+++ b/Lang/QB64/Determine-if-a-string-has-all-the-same-characters
@@ -0,0 +1 @@
+../../Task/Determine-if-a-string-has-all-the-same-characters/QB64
\ No newline at end of file
diff --git a/Lang/QB64/Hello-world-Newline-omission b/Lang/QB64/Hello-world-Newline-omission
new file mode 120000
index 0000000000..355c4d1286
--- /dev/null
+++ b/Lang/QB64/Hello-world-Newline-omission
@@ -0,0 +1 @@
+../../Task/Hello-world-Newline-omission/QB64
\ No newline at end of file
diff --git a/Lang/QB64/Hofstadter-Q-sequence b/Lang/QB64/Hofstadter-Q-sequence
new file mode 120000
index 0000000000..636c2bd5e2
--- /dev/null
+++ b/Lang/QB64/Hofstadter-Q-sequence
@@ -0,0 +1 @@
+../../Task/Hofstadter-Q-sequence/QB64
\ No newline at end of file
diff --git a/Lang/QB64/Perfect-numbers b/Lang/QB64/Perfect-numbers
new file mode 120000
index 0000000000..313898bfff
--- /dev/null
+++ b/Lang/QB64/Perfect-numbers
@@ -0,0 +1 @@
+../../Task/Perfect-numbers/QB64
\ No newline at end of file
diff --git a/Lang/QB64/Safe-primes-and-unsafe-primes b/Lang/QB64/Safe-primes-and-unsafe-primes
new file mode 120000
index 0000000000..2fe9c13027
--- /dev/null
+++ b/Lang/QB64/Safe-primes-and-unsafe-primes
@@ -0,0 +1 @@
+../../Task/Safe-primes-and-unsafe-primes/QB64
\ No newline at end of file
diff --git a/Lang/QB64/Sum-of-a-series b/Lang/QB64/Sum-of-a-series
new file mode 120000
index 0000000000..67ad320160
--- /dev/null
+++ b/Lang/QB64/Sum-of-a-series
@@ -0,0 +1 @@
+../../Task/Sum-of-a-series/QB64
\ No newline at end of file
diff --git a/Lang/QB64/Twos-complement b/Lang/QB64/Twos-complement
new file mode 120000
index 0000000000..fd393f8160
--- /dev/null
+++ b/Lang/QB64/Twos-complement
@@ -0,0 +1 @@
+../../Task/Twos-complement/QB64
\ No newline at end of file
diff --git a/Lang/QBasic/Associative-array-Merging b/Lang/QBasic/Associative-array-Merging
new file mode 120000
index 0000000000..7cdfcc0848
--- /dev/null
+++ b/Lang/QBasic/Associative-array-Merging
@@ -0,0 +1 @@
+../../Task/Associative-array-Merging/QBasic
\ No newline at end of file
diff --git a/Lang/QBasic/Determine-sentence-type b/Lang/QBasic/Determine-sentence-type
new file mode 120000
index 0000000000..5f23645126
--- /dev/null
+++ b/Lang/QBasic/Determine-sentence-type
@@ -0,0 +1 @@
+../../Task/Determine-sentence-type/QBasic
\ No newline at end of file
diff --git a/Lang/QBasic/Dinesmans-multiple-dwelling-problem b/Lang/QBasic/Dinesmans-multiple-dwelling-problem
deleted file mode 120000
index 58659e8fb4..0000000000
--- a/Lang/QBasic/Dinesmans-multiple-dwelling-problem
+++ /dev/null
@@ -1 +0,0 @@
-../../Task/Dinesmans-multiple-dwelling-problem/QBasic
\ No newline at end of file
diff --git a/Lang/QBasic/Leonardo-numbers b/Lang/QBasic/Leonardo-numbers
new file mode 120000
index 0000000000..d0e3199c8a
--- /dev/null
+++ b/Lang/QBasic/Leonardo-numbers
@@ -0,0 +1 @@
+../../Task/Leonardo-numbers/QBasic
\ No newline at end of file
diff --git a/Lang/QBasic/Phrase-reversals b/Lang/QBasic/Phrase-reversals
new file mode 120000
index 0000000000..7f3671bcb7
--- /dev/null
+++ b/Lang/QBasic/Phrase-reversals
@@ -0,0 +1 @@
+../../Task/Phrase-reversals/QBasic
\ No newline at end of file
diff --git a/Lang/QBasic/Soundex b/Lang/QBasic/Soundex
new file mode 120000
index 0000000000..2d904fe964
--- /dev/null
+++ b/Lang/QBasic/Soundex
@@ -0,0 +1 @@
+../../Task/Soundex/QBasic
\ No newline at end of file
diff --git a/Lang/QBasic/Split-a-character-string-based-on-change-of-character b/Lang/QBasic/Split-a-character-string-based-on-change-of-character
new file mode 120000
index 0000000000..5e5ffa8a44
--- /dev/null
+++ b/Lang/QBasic/Split-a-character-string-based-on-change-of-character
@@ -0,0 +1 @@
+../../Task/Split-a-character-string-based-on-change-of-character/QBasic
\ No newline at end of file
diff --git a/Lang/QBasic/The-Name-Game b/Lang/QBasic/The-Name-Game
new file mode 120000
index 0000000000..f7f2e9b30b
--- /dev/null
+++ b/Lang/QBasic/The-Name-Game
@@ -0,0 +1 @@
+../../Task/The-Name-Game/QBasic
\ No newline at end of file
diff --git a/Lang/Quite-BASIC/Determine-sentence-type b/Lang/Quite-BASIC/Determine-sentence-type
new file mode 120000
index 0000000000..6c274b9228
--- /dev/null
+++ b/Lang/Quite-BASIC/Determine-sentence-type
@@ -0,0 +1 @@
+../../Task/Determine-sentence-type/Quite-BASIC
\ No newline at end of file
diff --git a/Lang/REXX/00-LANG.txt b/Lang/REXX/00-LANG.txt
index e8f90b2e8c..a1abf9f554 100644
--- a/Lang/REXX/00-LANG.txt
+++ b/Lang/REXX/00-LANG.txt
@@ -26,6 +26,15 @@
The '''REXX''' language was influenced by the computer programming languages: '''ALGOL, PL/I, EXEC,''' and '''EXEC 2.'''
+Using Classic REXX closely resembles pseudo code and many languages like Basic or Julia. Experienced programmers should have no problem reading REXX code and translating it to other languages.
+Some items that might differ from what you are familiar with.
+* No data types, no declarations, everything is string.
+* Exponentiation is designated by '**' thus x^2 = x**2.
+* Integer division is designated by '%' thus 13%3 = 4.
+* Modulo division (remainder) is designated by '//' thus 13//3 = 1 ('13 mod 3').
+* Arrays (here called 'stems') are designated by something like 'stem.a.b. etc' (stem = name array; a, b etc any value; 'associative arrays').
+* Precision is unlimited (default 9 digits), but you have to specify it yourself ('numeric digits nn').
+
Versions of REXX:
* '''[[wp:ARexx|ARexx]]''' is a classic REXX implementation (with extensions) for the AmigaOS, given in bundle since AmigaOS 2. (Regina REXX has specific support for the extended functions that were introduced in ARexx.) ARexx was written in 1987 by William S. Hawes.
diff --git a/Lang/REXX/Arithmetic-numbers b/Lang/REXX/Arithmetic-numbers
new file mode 120000
index 0000000000..71a3332017
--- /dev/null
+++ b/Lang/REXX/Arithmetic-numbers
@@ -0,0 +1 @@
+../../Task/Arithmetic-numbers/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Chernicks-Carmichael-numbers b/Lang/REXX/Chernicks-Carmichael-numbers
new file mode 120000
index 0000000000..4050cb562e
--- /dev/null
+++ b/Lang/REXX/Chernicks-Carmichael-numbers
@@ -0,0 +1 @@
+../../Task/Chernicks-Carmichael-numbers/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Euclid-Mullin-sequence b/Lang/REXX/Euclid-Mullin-sequence
new file mode 120000
index 0000000000..3ded1fce93
--- /dev/null
+++ b/Lang/REXX/Euclid-Mullin-sequence
@@ -0,0 +1 @@
+../../Task/Euclid-Mullin-sequence/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Find-largest-left-truncatable-prime-in-a-given-base b/Lang/REXX/Find-largest-left-truncatable-prime-in-a-given-base
new file mode 120000
index 0000000000..528dd8a890
--- /dev/null
+++ b/Lang/REXX/Find-largest-left-truncatable-prime-in-a-given-base
@@ -0,0 +1 @@
+../../Task/Find-largest-left-truncatable-prime-in-a-given-base/REXX
\ No newline at end of file
diff --git a/Lang/REXX/Meissel-Mertens-constant b/Lang/REXX/Meissel-Mertens-constant
new file mode 120000
index 0000000000..20c3a86a87
--- /dev/null
+++ b/Lang/REXX/Meissel-Mertens-constant
@@ -0,0 +1 @@
+../../Task/Meissel-Mertens-constant/REXX
\ No newline at end of file
diff --git a/Lang/RTL-2/00-LANG.txt b/Lang/RTL-2/00-LANG.txt
index 4f020fcdf0..da5b7b1776 100644
--- a/Lang/RTL-2/00-LANG.txt
+++ b/Lang/RTL-2/00-LANG.txt
@@ -83,6 +83,7 @@ LENGTH
LET
LOR
MOD
+MODE
NEV
NOT
OCT
diff --git a/Lang/Red/Leap-year b/Lang/Red/Leap-year
new file mode 120000
index 0000000000..cb911ae827
--- /dev/null
+++ b/Lang/Red/Leap-year
@@ -0,0 +1 @@
+../../Task/Leap-year/Red
\ No newline at end of file
diff --git a/Lang/Refal/Combinations b/Lang/Refal/Combinations
new file mode 120000
index 0000000000..d4a5475872
--- /dev/null
+++ b/Lang/Refal/Combinations
@@ -0,0 +1 @@
+../../Task/Combinations/Refal
\ No newline at end of file
diff --git a/Lang/Refal/Narcissistic-decimal-number b/Lang/Refal/Narcissistic-decimal-number
new file mode 120000
index 0000000000..3c509c9753
--- /dev/null
+++ b/Lang/Refal/Narcissistic-decimal-number
@@ -0,0 +1 @@
+../../Task/Narcissistic-decimal-number/Refal
\ No newline at end of file
diff --git a/Lang/Run-BASIC/Determine-sentence-type b/Lang/Run-BASIC/Determine-sentence-type
new file mode 120000
index 0000000000..5db5f89e0c
--- /dev/null
+++ b/Lang/Run-BASIC/Determine-sentence-type
@@ -0,0 +1 @@
+../../Task/Determine-sentence-type/Run-BASIC
\ No newline at end of file
diff --git a/Lang/Run-BASIC/Pancake-numbers b/Lang/Run-BASIC/Pancake-numbers
new file mode 120000
index 0000000000..8078e50109
--- /dev/null
+++ b/Lang/Run-BASIC/Pancake-numbers
@@ -0,0 +1 @@
+../../Task/Pancake-numbers/Run-BASIC
\ No newline at end of file
diff --git a/Lang/Run-BASIC/Phrase-reversals b/Lang/Run-BASIC/Phrase-reversals
new file mode 120000
index 0000000000..db249e8a6e
--- /dev/null
+++ b/Lang/Run-BASIC/Phrase-reversals
@@ -0,0 +1 @@
+../../Task/Phrase-reversals/Run-BASIC
\ No newline at end of file
diff --git a/Lang/Run-BASIC/Split-a-character-string-based-on-change-of-character b/Lang/Run-BASIC/Split-a-character-string-based-on-change-of-character
new file mode 120000
index 0000000000..afd1d6a928
--- /dev/null
+++ b/Lang/Run-BASIC/Split-a-character-string-based-on-change-of-character
@@ -0,0 +1 @@
+../../Task/Split-a-character-string-based-on-change-of-character/Run-BASIC
\ No newline at end of file
diff --git a/Lang/Run-BASIC/The-Name-Game b/Lang/Run-BASIC/The-Name-Game
new file mode 120000
index 0000000000..a0ca866e4a
--- /dev/null
+++ b/Lang/Run-BASIC/The-Name-Game
@@ -0,0 +1 @@
+../../Task/The-Name-Game/Run-BASIC
\ No newline at end of file
diff --git a/Lang/Rust/Color-quantization b/Lang/Rust/Color-quantization
new file mode 120000
index 0000000000..76c5471c0f
--- /dev/null
+++ b/Lang/Rust/Color-quantization
@@ -0,0 +1 @@
+../../Task/Color-quantization/Rust
\ No newline at end of file
diff --git a/Lang/Rust/Commatizing-numbers b/Lang/Rust/Commatizing-numbers
new file mode 120000
index 0000000000..5df0e95315
--- /dev/null
+++ b/Lang/Rust/Commatizing-numbers
@@ -0,0 +1 @@
+../../Task/Commatizing-numbers/Rust
\ No newline at end of file
diff --git a/Lang/Rust/De-Bruijn-sequences b/Lang/Rust/De-Bruijn-sequences
new file mode 120000
index 0000000000..69c62c6871
--- /dev/null
+++ b/Lang/Rust/De-Bruijn-sequences
@@ -0,0 +1 @@
+../../Task/De-Bruijn-sequences/Rust
\ No newline at end of file
diff --git a/Lang/Rust/Demings-funnel b/Lang/Rust/Demings-funnel
new file mode 120000
index 0000000000..295d5542ba
--- /dev/null
+++ b/Lang/Rust/Demings-funnel
@@ -0,0 +1 @@
+../../Task/Demings-funnel/Rust
\ No newline at end of file
diff --git a/Lang/Rust/Eban-numbers b/Lang/Rust/Eban-numbers
new file mode 120000
index 0000000000..cf564cdce5
--- /dev/null
+++ b/Lang/Rust/Eban-numbers
@@ -0,0 +1 @@
+../../Task/Eban-numbers/Rust
\ No newline at end of file
diff --git a/Lang/Rust/Find-largest-left-truncatable-prime-in-a-given-base b/Lang/Rust/Find-largest-left-truncatable-prime-in-a-given-base
new file mode 120000
index 0000000000..e7da5ced0b
--- /dev/null
+++ b/Lang/Rust/Find-largest-left-truncatable-prime-in-a-given-base
@@ -0,0 +1 @@
+../../Task/Find-largest-left-truncatable-prime-in-a-given-base/Rust
\ No newline at end of file
diff --git a/Lang/Rust/Functional-coverage-tree b/Lang/Rust/Functional-coverage-tree
new file mode 120000
index 0000000000..fab149755e
--- /dev/null
+++ b/Lang/Rust/Functional-coverage-tree
@@ -0,0 +1 @@
+../../Task/Functional-coverage-tree/Rust
\ No newline at end of file
diff --git a/Lang/Rust/List-rooted-trees b/Lang/Rust/List-rooted-trees
new file mode 120000
index 0000000000..ef07119312
--- /dev/null
+++ b/Lang/Rust/List-rooted-trees
@@ -0,0 +1 @@
+../../Task/List-rooted-trees/Rust
\ No newline at end of file
diff --git a/Lang/Rust/Long-literals-with-continuations b/Lang/Rust/Long-literals-with-continuations
new file mode 120000
index 0000000000..ad69d0820b
--- /dev/null
+++ b/Lang/Rust/Long-literals-with-continuations
@@ -0,0 +1 @@
+../../Task/Long-literals-with-continuations/Rust
\ No newline at end of file
diff --git a/Lang/Rust/Non-continuous-subsequences b/Lang/Rust/Non-continuous-subsequences
new file mode 120000
index 0000000000..7152418d6c
--- /dev/null
+++ b/Lang/Rust/Non-continuous-subsequences
@@ -0,0 +1 @@
+../../Task/Non-continuous-subsequences/Rust
\ No newline at end of file
diff --git a/Lang/Rust/Numerical-and-alphabetical-suffixes b/Lang/Rust/Numerical-and-alphabetical-suffixes
new file mode 120000
index 0000000000..0446d710e5
--- /dev/null
+++ b/Lang/Rust/Numerical-and-alphabetical-suffixes
@@ -0,0 +1 @@
+../../Task/Numerical-and-alphabetical-suffixes/Rust
\ No newline at end of file
diff --git a/Lang/Rust/Permutations-Derangements b/Lang/Rust/Permutations-Derangements
new file mode 120000
index 0000000000..9efa9a4159
--- /dev/null
+++ b/Lang/Rust/Permutations-Derangements
@@ -0,0 +1 @@
+../../Task/Permutations-Derangements/Rust
\ No newline at end of file
diff --git a/Lang/Rust/Sorting-algorithms-Permutation-sort b/Lang/Rust/Sorting-algorithms-Permutation-sort
new file mode 120000
index 0000000000..0bbf7e172b
--- /dev/null
+++ b/Lang/Rust/Sorting-algorithms-Permutation-sort
@@ -0,0 +1 @@
+../../Task/Sorting-algorithms-Permutation-sort/Rust
\ No newline at end of file
diff --git a/Lang/Rust/Special-characters b/Lang/Rust/Special-characters
new file mode 120000
index 0000000000..7cb915367e
--- /dev/null
+++ b/Lang/Rust/Special-characters
@@ -0,0 +1 @@
+../../Task/Special-characters/Rust
\ No newline at end of file
diff --git a/Lang/Rust/Stable-marriage-problem b/Lang/Rust/Stable-marriage-problem
new file mode 120000
index 0000000000..98e509ab20
--- /dev/null
+++ b/Lang/Rust/Stable-marriage-problem
@@ -0,0 +1 @@
+../../Task/Stable-marriage-problem/Rust
\ No newline at end of file
diff --git a/Lang/Rust/State-name-puzzle b/Lang/Rust/State-name-puzzle
new file mode 120000
index 0000000000..a88b598d4b
--- /dev/null
+++ b/Lang/Rust/State-name-puzzle
@@ -0,0 +1 @@
+../../Task/State-name-puzzle/Rust
\ No newline at end of file
diff --git a/Lang/Rust/Strip-block-comments b/Lang/Rust/Strip-block-comments
new file mode 120000
index 0000000000..c9f77902d0
--- /dev/null
+++ b/Lang/Rust/Strip-block-comments
@@ -0,0 +1 @@
+../../Task/Strip-block-comments/Rust
\ No newline at end of file
diff --git a/Lang/Rust/Strip-control-codes-and-extended-characters-from-a-string b/Lang/Rust/Strip-control-codes-and-extended-characters-from-a-string
new file mode 120000
index 0000000000..56a1876479
--- /dev/null
+++ b/Lang/Rust/Strip-control-codes-and-extended-characters-from-a-string
@@ -0,0 +1 @@
+../../Task/Strip-control-codes-and-extended-characters-from-a-string/Rust
\ No newline at end of file
diff --git a/Lang/Rust/Suffixation-of-decimal-numbers b/Lang/Rust/Suffixation-of-decimal-numbers
new file mode 120000
index 0000000000..2428a135a4
--- /dev/null
+++ b/Lang/Rust/Suffixation-of-decimal-numbers
@@ -0,0 +1 @@
+../../Task/Suffixation-of-decimal-numbers/Rust
\ No newline at end of file
diff --git a/Lang/Rust/Summarize-and-say-sequence b/Lang/Rust/Summarize-and-say-sequence
new file mode 120000
index 0000000000..030276987c
--- /dev/null
+++ b/Lang/Rust/Summarize-and-say-sequence
@@ -0,0 +1 @@
+../../Task/Summarize-and-say-sequence/Rust
\ No newline at end of file
diff --git a/Lang/Rust/Superpermutation-minimisation b/Lang/Rust/Superpermutation-minimisation
new file mode 120000
index 0000000000..8b214e27cd
--- /dev/null
+++ b/Lang/Rust/Superpermutation-minimisation
@@ -0,0 +1 @@
+../../Task/Superpermutation-minimisation/Rust
\ No newline at end of file
diff --git a/Lang/Rust/The-Name-Game b/Lang/Rust/The-Name-Game
new file mode 120000
index 0000000000..92835f00de
--- /dev/null
+++ b/Lang/Rust/The-Name-Game
@@ -0,0 +1 @@
+../../Task/The-Name-Game/Rust
\ No newline at end of file
diff --git a/Lang/Rust/Twos-complement b/Lang/Rust/Twos-complement
new file mode 120000
index 0000000000..086c8719d1
--- /dev/null
+++ b/Lang/Rust/Twos-complement
@@ -0,0 +1 @@
+../../Task/Twos-complement/Rust
\ No newline at end of file
diff --git a/Lang/Rust/Word-ladder b/Lang/Rust/Word-ladder
new file mode 120000
index 0000000000..9973e5c323
--- /dev/null
+++ b/Lang/Rust/Word-ladder
@@ -0,0 +1 @@
+../../Task/Word-ladder/Rust
\ No newline at end of file
diff --git a/Lang/Rust/Word-search b/Lang/Rust/Word-search
new file mode 120000
index 0000000000..737b35c0c7
--- /dev/null
+++ b/Lang/Rust/Word-search
@@ -0,0 +1 @@
+../../Task/Word-search/Rust
\ No newline at end of file
diff --git a/Lang/Rust/Word-wheel b/Lang/Rust/Word-wheel
new file mode 120000
index 0000000000..3c8a9835e5
--- /dev/null
+++ b/Lang/Rust/Word-wheel
@@ -0,0 +1 @@
+../../Task/Word-wheel/Rust
\ No newline at end of file
diff --git a/Lang/Rust/Wordiff b/Lang/Rust/Wordiff
new file mode 120000
index 0000000000..44e42a760a
--- /dev/null
+++ b/Lang/Rust/Wordiff
@@ -0,0 +1 @@
+../../Task/Wordiff/Rust
\ No newline at end of file
diff --git a/Lang/Rust/Zebra-puzzle b/Lang/Rust/Zebra-puzzle
new file mode 120000
index 0000000000..2b9c2729f7
--- /dev/null
+++ b/Lang/Rust/Zebra-puzzle
@@ -0,0 +1 @@
+../../Task/Zebra-puzzle/Rust
\ No newline at end of file
diff --git a/Lang/S-BASIC/Address-of-a-variable b/Lang/S-BASIC/Address-of-a-variable
new file mode 120000
index 0000000000..e42c14ed1b
--- /dev/null
+++ b/Lang/S-BASIC/Address-of-a-variable
@@ -0,0 +1 @@
+../../Task/Address-of-a-variable/S-BASIC
\ No newline at end of file
diff --git a/Lang/S-BASIC/Harmonic-series b/Lang/S-BASIC/Harmonic-series
new file mode 120000
index 0000000000..32781a4eaa
--- /dev/null
+++ b/Lang/S-BASIC/Harmonic-series
@@ -0,0 +1 @@
+../../Task/Harmonic-series/S-BASIC
\ No newline at end of file
diff --git a/Lang/S-BASIC/Loops-Do-while b/Lang/S-BASIC/Loops-Do-while
new file mode 120000
index 0000000000..026ddb5c46
--- /dev/null
+++ b/Lang/S-BASIC/Loops-Do-while
@@ -0,0 +1 @@
+../../Task/Loops-Do-while/S-BASIC
\ No newline at end of file
diff --git a/Lang/S-BASIC/Rename-a-file b/Lang/S-BASIC/Rename-a-file
new file mode 120000
index 0000000000..918d2d7e4f
--- /dev/null
+++ b/Lang/S-BASIC/Rename-a-file
@@ -0,0 +1 @@
+../../Task/Rename-a-file/S-BASIC
\ No newline at end of file
diff --git a/Lang/S-BASIC/Strip-whitespace-from-a-string-Top-and-tail b/Lang/S-BASIC/Strip-whitespace-from-a-string-Top-and-tail
new file mode 120000
index 0000000000..e52fe4d75d
--- /dev/null
+++ b/Lang/S-BASIC/Strip-whitespace-from-a-string-Top-and-tail
@@ -0,0 +1 @@
+../../Task/Strip-whitespace-from-a-string-Top-and-tail/S-BASIC
\ No newline at end of file
diff --git a/Lang/SETL/Best-shuffle b/Lang/SETL/Best-shuffle
new file mode 120000
index 0000000000..25f39d305e
--- /dev/null
+++ b/Lang/SETL/Best-shuffle
@@ -0,0 +1 @@
+../../Task/Best-shuffle/SETL
\ No newline at end of file
diff --git a/Lang/SETL/Calculating-the-value-of-e b/Lang/SETL/Calculating-the-value-of-e
new file mode 120000
index 0000000000..751e6b54b5
--- /dev/null
+++ b/Lang/SETL/Calculating-the-value-of-e
@@ -0,0 +1 @@
+../../Task/Calculating-the-value-of-e/SETL
\ No newline at end of file
diff --git a/Lang/SETL/Largest-proper-divisor-of-n b/Lang/SETL/Largest-proper-divisor-of-n
new file mode 120000
index 0000000000..a82ec82f9e
--- /dev/null
+++ b/Lang/SETL/Largest-proper-divisor-of-n
@@ -0,0 +1 @@
+../../Task/Largest-proper-divisor-of-n/SETL
\ No newline at end of file
diff --git a/Lang/SETL/Loops-N-plus-one-half b/Lang/SETL/Loops-N-plus-one-half
new file mode 120000
index 0000000000..111820383b
--- /dev/null
+++ b/Lang/SETL/Loops-N-plus-one-half
@@ -0,0 +1 @@
+../../Task/Loops-N-plus-one-half/SETL
\ No newline at end of file
diff --git a/Lang/SETL/Matrix-transposition b/Lang/SETL/Matrix-transposition
new file mode 120000
index 0000000000..9a975d9213
--- /dev/null
+++ b/Lang/SETL/Matrix-transposition
@@ -0,0 +1 @@
+../../Task/Matrix-transposition/SETL
\ No newline at end of file
diff --git a/Lang/SETL/Vector-products b/Lang/SETL/Vector-products
new file mode 120000
index 0000000000..936d45f3d5
--- /dev/null
+++ b/Lang/SETL/Vector-products
@@ -0,0 +1 @@
+../../Task/Vector-products/SETL
\ No newline at end of file
diff --git a/Lang/Scheme/Find-the-missing-permutation b/Lang/Scheme/Find-the-missing-permutation
new file mode 120000
index 0000000000..8f7e82d271
--- /dev/null
+++ b/Lang/Scheme/Find-the-missing-permutation
@@ -0,0 +1 @@
+../../Task/Find-the-missing-permutation/Scheme
\ No newline at end of file
diff --git a/Lang/Scheme/Last-letter-first-letter b/Lang/Scheme/Last-letter-first-letter
new file mode 120000
index 0000000000..a5c5c31b6e
--- /dev/null
+++ b/Lang/Scheme/Last-letter-first-letter
@@ -0,0 +1 @@
+../../Task/Last-letter-first-letter/Scheme
\ No newline at end of file
diff --git a/Lang/Scheme/Word-frequency b/Lang/Scheme/Word-frequency
new file mode 120000
index 0000000000..109edef2da
--- /dev/null
+++ b/Lang/Scheme/Word-frequency
@@ -0,0 +1 @@
+../../Task/Word-frequency/Scheme
\ No newline at end of file
diff --git a/Lang/Sidef/CRC-32 b/Lang/Sidef/CRC-32
new file mode 120000
index 0000000000..7abbf21ee3
--- /dev/null
+++ b/Lang/Sidef/CRC-32
@@ -0,0 +1 @@
+../../Task/CRC-32/Sidef
\ No newline at end of file
diff --git a/Lang/TXR/Cheryls-birthday b/Lang/TXR/Cheryls-birthday
new file mode 120000
index 0000000000..3755473e4e
--- /dev/null
+++ b/Lang/TXR/Cheryls-birthday
@@ -0,0 +1 @@
+../../Task/Cheryls-birthday/TXR
\ No newline at end of file
diff --git a/Lang/Tailspin/00-LANG.txt b/Lang/Tailspin/00-LANG.txt
index a8437326e6..02c82847dd 100644
--- a/Lang/Tailspin/00-LANG.txt
+++ b/Lang/Tailspin/00-LANG.txt
@@ -18,4 +18,6 @@ The inspiration comes mostly from xslt, but data structures are json-like. The m
[https://github.com/tobega/tailspin-v0/blob/master/TailspinReference.md Syntax reference]
-Development page, also how to run Tailspin programs [https://github.com/tobega/tailspin-v0 on github]
\ No newline at end of file
+Development page, also how to run Tailspin programs [https://github.com/tobega/tailspin-v0 on github]
+
+Next version v0.5 [https://github.com/tobega/tailspin-v0.5 under development]
\ No newline at end of file
diff --git a/Lang/Tailspin/Combinations b/Lang/Tailspin/Combinations
new file mode 120000
index 0000000000..987b496fbb
--- /dev/null
+++ b/Lang/Tailspin/Combinations
@@ -0,0 +1 @@
+../../Task/Combinations/Tailspin
\ No newline at end of file
diff --git a/Lang/Tailspin/Sierpinski-triangle b/Lang/Tailspin/Sierpinski-triangle
new file mode 120000
index 0000000000..b603b111a2
--- /dev/null
+++ b/Lang/Tailspin/Sierpinski-triangle
@@ -0,0 +1 @@
+../../Task/Sierpinski-triangle/Tailspin
\ No newline at end of file
diff --git a/Lang/True-BASIC/Determine-sentence-type b/Lang/True-BASIC/Determine-sentence-type
new file mode 120000
index 0000000000..988197fd95
--- /dev/null
+++ b/Lang/True-BASIC/Determine-sentence-type
@@ -0,0 +1 @@
+../../Task/Determine-sentence-type/True-BASIC
\ No newline at end of file
diff --git a/Lang/True-BASIC/Greatest-element-of-a-list b/Lang/True-BASIC/Greatest-element-of-a-list
new file mode 120000
index 0000000000..3c9a45a72c
--- /dev/null
+++ b/Lang/True-BASIC/Greatest-element-of-a-list
@@ -0,0 +1 @@
+../../Task/Greatest-element-of-a-list/True-BASIC
\ No newline at end of file
diff --git a/Lang/True-BASIC/Leonardo-numbers b/Lang/True-BASIC/Leonardo-numbers
new file mode 120000
index 0000000000..7faae2372e
--- /dev/null
+++ b/Lang/True-BASIC/Leonardo-numbers
@@ -0,0 +1 @@
+../../Task/Leonardo-numbers/True-BASIC
\ No newline at end of file
diff --git a/Lang/True-BASIC/Loop-over-multiple-arrays-simultaneously b/Lang/True-BASIC/Loop-over-multiple-arrays-simultaneously
new file mode 120000
index 0000000000..0cb7e37da5
--- /dev/null
+++ b/Lang/True-BASIC/Loop-over-multiple-arrays-simultaneously
@@ -0,0 +1 @@
+../../Task/Loop-over-multiple-arrays-simultaneously/True-BASIC
\ No newline at end of file
diff --git a/Lang/True-BASIC/Phrase-reversals b/Lang/True-BASIC/Phrase-reversals
new file mode 120000
index 0000000000..564680054e
--- /dev/null
+++ b/Lang/True-BASIC/Phrase-reversals
@@ -0,0 +1 @@
+../../Task/Phrase-reversals/True-BASIC
\ No newline at end of file
diff --git a/Lang/True-BASIC/Soundex b/Lang/True-BASIC/Soundex
new file mode 120000
index 0000000000..33e7fb68ee
--- /dev/null
+++ b/Lang/True-BASIC/Soundex
@@ -0,0 +1 @@
+../../Task/Soundex/True-BASIC
\ No newline at end of file
diff --git a/Lang/True-BASIC/Split-a-character-string-based-on-change-of-character b/Lang/True-BASIC/Split-a-character-string-based-on-change-of-character
new file mode 120000
index 0000000000..e25a5cf6f3
--- /dev/null
+++ b/Lang/True-BASIC/Split-a-character-string-based-on-change-of-character
@@ -0,0 +1 @@
+../../Task/Split-a-character-string-based-on-change-of-character/True-BASIC
\ No newline at end of file
diff --git a/Lang/True-BASIC/The-Name-Game b/Lang/True-BASIC/The-Name-Game
new file mode 120000
index 0000000000..bf4d14fb81
--- /dev/null
+++ b/Lang/True-BASIC/The-Name-Game
@@ -0,0 +1 @@
+../../Task/The-Name-Game/True-BASIC
\ No newline at end of file
diff --git a/Lang/Uiua/Circular-primes b/Lang/Uiua/Circular-primes
new file mode 120000
index 0000000000..65d19beab0
--- /dev/null
+++ b/Lang/Uiua/Circular-primes
@@ -0,0 +1 @@
+../../Task/Circular-primes/Uiua
\ No newline at end of file
diff --git a/Lang/Uiua/Cistercian-numerals b/Lang/Uiua/Cistercian-numerals
new file mode 120000
index 0000000000..7a072fe82a
--- /dev/null
+++ b/Lang/Uiua/Cistercian-numerals
@@ -0,0 +1 @@
+../../Task/Cistercian-numerals/Uiua
\ No newline at end of file
diff --git a/Lang/Uiua/Colorful-numbers b/Lang/Uiua/Colorful-numbers
new file mode 120000
index 0000000000..b2f820f214
--- /dev/null
+++ b/Lang/Uiua/Colorful-numbers
@@ -0,0 +1 @@
+../../Task/Colorful-numbers/Uiua
\ No newline at end of file
diff --git a/Lang/Uiua/Continued-fraction b/Lang/Uiua/Continued-fraction
new file mode 120000
index 0000000000..e2c428ddc0
--- /dev/null
+++ b/Lang/Uiua/Continued-fraction
@@ -0,0 +1 @@
+../../Task/Continued-fraction/Uiua
\ No newline at end of file
diff --git a/Lang/Uiua/Count-occurrences-of-a-substring b/Lang/Uiua/Count-occurrences-of-a-substring
new file mode 120000
index 0000000000..5aa05050f1
--- /dev/null
+++ b/Lang/Uiua/Count-occurrences-of-a-substring
@@ -0,0 +1 @@
+../../Task/Count-occurrences-of-a-substring/Uiua
\ No newline at end of file
diff --git a/Lang/Uiua/Dijkstras-algorithm b/Lang/Uiua/Dijkstras-algorithm
new file mode 120000
index 0000000000..f3d03f9e62
--- /dev/null
+++ b/Lang/Uiua/Dijkstras-algorithm
@@ -0,0 +1 @@
+../../Task/Dijkstras-algorithm/Uiua
\ No newline at end of file
diff --git a/Lang/Uiua/Doomsday-rule b/Lang/Uiua/Doomsday-rule
new file mode 120000
index 0000000000..d408a1ec32
--- /dev/null
+++ b/Lang/Uiua/Doomsday-rule
@@ -0,0 +1 @@
+../../Task/Doomsday-rule/Uiua
\ No newline at end of file
diff --git a/Lang/Uiua/Proper-divisors b/Lang/Uiua/Proper-divisors
new file mode 120000
index 0000000000..94a040a034
--- /dev/null
+++ b/Lang/Uiua/Proper-divisors
@@ -0,0 +1 @@
+../../Task/Proper-divisors/Uiua
\ No newline at end of file
diff --git a/Lang/Uiua/Self-describing-numbers b/Lang/Uiua/Self-describing-numbers
new file mode 120000
index 0000000000..158e71854a
--- /dev/null
+++ b/Lang/Uiua/Self-describing-numbers
@@ -0,0 +1 @@
+../../Task/Self-describing-numbers/Uiua
\ No newline at end of file
diff --git a/Lang/Unison/Spiral-matrix b/Lang/Unison/Spiral-matrix
new file mode 120000
index 0000000000..423c950e4b
--- /dev/null
+++ b/Lang/Unison/Spiral-matrix
@@ -0,0 +1 @@
+../../Task/Spiral-matrix/Unison
\ No newline at end of file
diff --git a/Lang/Ursalang/Anagrams b/Lang/Ursalang/Anagrams
new file mode 120000
index 0000000000..955e3f6b2d
--- /dev/null
+++ b/Lang/Ursalang/Anagrams
@@ -0,0 +1 @@
+../../Task/Anagrams/Ursalang
\ No newline at end of file
diff --git a/Lang/Ursalang/FizzBuzz b/Lang/Ursalang/FizzBuzz
new file mode 120000
index 0000000000..7a0a8b495c
--- /dev/null
+++ b/Lang/Ursalang/FizzBuzz
@@ -0,0 +1 @@
+../../Task/FizzBuzz/Ursalang
\ No newline at end of file
diff --git a/Lang/Ursalang/Generator-Exponential b/Lang/Ursalang/Generator-Exponential
new file mode 120000
index 0000000000..4533fcc114
--- /dev/null
+++ b/Lang/Ursalang/Generator-Exponential
@@ -0,0 +1 @@
+../../Task/Generator-Exponential/Ursalang
\ No newline at end of file
diff --git a/Lang/Ursalang/Hailstone-sequence b/Lang/Ursalang/Hailstone-sequence
new file mode 120000
index 0000000000..fd3a016859
--- /dev/null
+++ b/Lang/Ursalang/Hailstone-sequence
@@ -0,0 +1 @@
+../../Task/Hailstone-sequence/Ursalang
\ No newline at end of file
diff --git a/Lang/Ursalang/Loops-Continue b/Lang/Ursalang/Loops-Continue
new file mode 120000
index 0000000000..b92db2e19a
--- /dev/null
+++ b/Lang/Ursalang/Loops-Continue
@@ -0,0 +1 @@
+../../Task/Loops-Continue/Ursalang
\ No newline at end of file
diff --git a/Lang/Ursalang/Man-or-boy-test b/Lang/Ursalang/Man-or-boy-test
new file mode 120000
index 0000000000..14bf7f1c8c
--- /dev/null
+++ b/Lang/Ursalang/Man-or-boy-test
@@ -0,0 +1 @@
+../../Task/Man-or-boy-test/Ursalang
\ No newline at end of file
diff --git a/Lang/V-(Vlang)/00-LANG.txt b/Lang/V-(Vlang)/00-LANG.txt
index 9a2f5797f1..dfc23e4e27 100644
--- a/Lang/V-(Vlang)/00-LANG.txt
+++ b/Lang/V-(Vlang)/00-LANG.txt
@@ -70,7 +70,7 @@ V language review and documentation are [https://github.com/vlang/v/blob/master/
|-
| 29 || [https://rosettacode.org/wiki/Category:Vlang-os os] || || 30 || [https://rosettacode.org/wiki/Category:Vlang-pg pg]
|-
-| 31 || [https://rosettacode.org/wiki/Category:Vlang-picoev picoev] || || 32 || [https://rosettacode.org/wiki/Category:Vlang-event picoev]
+| 31 || [https://rosettacode.org/wiki/Category:Vlang-picoev picoev] || || 32 || [https://rosettacode.org/wiki/Category:Vlang-veb veb]
|-
| 33 || [https://rosettacode.org/wiki/Category:Vlang-picohttpparser picohttpparser] || || 34 || [https://rosettacode.org/wiki/Category:Vlang-rand rand]
|-
@@ -89,5 +89,4 @@ V language review and documentation are [https://github.com/vlang/v/blob/master/
| 47 || [https://rosettacode.org/wiki/Category:Vlang-time time] || || 48 || [https://rosettacode.org/wiki/Category:Vlang-toml toml]
|-
| 49 || [https://rosettacode.org/wiki/Category:Vlang-vweb vweb] || || 50 || [https://rosettacode.org/wiki/Category:Vlang-wasm wasm]
-|-
|}
\ No newline at end of file
diff --git a/Lang/V-(Vlang)/Apply-a-callback-to-an-array b/Lang/V-(Vlang)/Apply-a-callback-to-an-array
new file mode 120000
index 0000000000..8b7f34e888
--- /dev/null
+++ b/Lang/V-(Vlang)/Apply-a-callback-to-an-array
@@ -0,0 +1 @@
+../../Task/Apply-a-callback-to-an-array/V-(Vlang)
\ No newline at end of file
diff --git a/Lang/V-(Vlang)/Classes b/Lang/V-(Vlang)/Classes
new file mode 120000
index 0000000000..a7d339230e
--- /dev/null
+++ b/Lang/V-(Vlang)/Classes
@@ -0,0 +1 @@
+../../Task/Classes/V-(Vlang)
\ No newline at end of file
diff --git a/Lang/V-(Vlang)/Closures-Value-capture b/Lang/V-(Vlang)/Closures-Value-capture
new file mode 120000
index 0000000000..d671104741
--- /dev/null
+++ b/Lang/V-(Vlang)/Closures-Value-capture
@@ -0,0 +1 @@
+../../Task/Closures-Value-capture/V-(Vlang)
\ No newline at end of file
diff --git a/Lang/V-(Vlang)/Define-a-primitive-data-type b/Lang/V-(Vlang)/Define-a-primitive-data-type
new file mode 120000
index 0000000000..aebf4cbe69
--- /dev/null
+++ b/Lang/V-(Vlang)/Define-a-primitive-data-type
@@ -0,0 +1 @@
+../../Task/Define-a-primitive-data-type/V-(Vlang)
\ No newline at end of file
diff --git a/Lang/V-(Vlang)/Dutch-national-flag-problem b/Lang/V-(Vlang)/Dutch-national-flag-problem
new file mode 120000
index 0000000000..826568fc3d
--- /dev/null
+++ b/Lang/V-(Vlang)/Dutch-national-flag-problem
@@ -0,0 +1 @@
+../../Task/Dutch-national-flag-problem/V-(Vlang)
\ No newline at end of file
diff --git a/Lang/V-(Vlang)/Dynamic-variable-names b/Lang/V-(Vlang)/Dynamic-variable-names
new file mode 120000
index 0000000000..59780bc7d8
--- /dev/null
+++ b/Lang/V-(Vlang)/Dynamic-variable-names
@@ -0,0 +1 @@
+../../Task/Dynamic-variable-names/V-(Vlang)
\ No newline at end of file
diff --git a/Lang/V-(Vlang)/Enumerations b/Lang/V-(Vlang)/Enumerations
new file mode 120000
index 0000000000..711e1f8ea0
--- /dev/null
+++ b/Lang/V-(Vlang)/Enumerations
@@ -0,0 +1 @@
+../../Task/Enumerations/V-(Vlang)
\ No newline at end of file
diff --git a/Lang/V-(Vlang)/Floyds-triangle b/Lang/V-(Vlang)/Floyds-triangle
new file mode 120000
index 0000000000..cc0e0a9649
--- /dev/null
+++ b/Lang/V-(Vlang)/Floyds-triangle
@@ -0,0 +1 @@
+../../Task/Floyds-triangle/V-(Vlang)
\ No newline at end of file
diff --git a/Lang/V-(Vlang)/Get-system-command-output b/Lang/V-(Vlang)/Get-system-command-output
new file mode 120000
index 0000000000..1b29764574
--- /dev/null
+++ b/Lang/V-(Vlang)/Get-system-command-output
@@ -0,0 +1 @@
+../../Task/Get-system-command-output/V-(Vlang)
\ No newline at end of file
diff --git a/Lang/V-(Vlang)/Hello-world-Standard-error b/Lang/V-(Vlang)/Hello-world-Standard-error
new file mode 120000
index 0000000000..f1aa7945d1
--- /dev/null
+++ b/Lang/V-(Vlang)/Hello-world-Standard-error
@@ -0,0 +1 @@
+../../Task/Hello-world-Standard-error/V-(Vlang)
\ No newline at end of file
diff --git a/Lang/V-(Vlang)/Humble-numbers b/Lang/V-(Vlang)/Humble-numbers
new file mode 120000
index 0000000000..c32de84293
--- /dev/null
+++ b/Lang/V-(Vlang)/Humble-numbers
@@ -0,0 +1 @@
+../../Task/Humble-numbers/V-(Vlang)
\ No newline at end of file
diff --git a/Lang/V-(Vlang)/Idiomatically-determine-all-the-lowercase-and-uppercase-letters b/Lang/V-(Vlang)/Idiomatically-determine-all-the-lowercase-and-uppercase-letters
new file mode 120000
index 0000000000..efa66c489c
--- /dev/null
+++ b/Lang/V-(Vlang)/Idiomatically-determine-all-the-lowercase-and-uppercase-letters
@@ -0,0 +1 @@
+../../Task/Idiomatically-determine-all-the-lowercase-and-uppercase-letters/V-(Vlang)
\ No newline at end of file
diff --git a/Lang/V-(Vlang)/Include-a-file b/Lang/V-(Vlang)/Include-a-file
new file mode 120000
index 0000000000..439a7ac6c3
--- /dev/null
+++ b/Lang/V-(Vlang)/Include-a-file
@@ -0,0 +1 @@
+../../Task/Include-a-file/V-(Vlang)
\ No newline at end of file
diff --git a/Lang/V-(Vlang)/Integer-comparison b/Lang/V-(Vlang)/Integer-comparison
new file mode 120000
index 0000000000..0152b2d289
--- /dev/null
+++ b/Lang/V-(Vlang)/Integer-comparison
@@ -0,0 +1 @@
+../../Task/Integer-comparison/V-(Vlang)
\ No newline at end of file
diff --git a/Lang/V-(Vlang)/Logical-operations b/Lang/V-(Vlang)/Logical-operations
new file mode 120000
index 0000000000..bed3efe6b2
--- /dev/null
+++ b/Lang/V-(Vlang)/Logical-operations
@@ -0,0 +1 @@
+../../Task/Logical-operations/V-(Vlang)
\ No newline at end of file
diff --git a/Lang/V-(Vlang)/Magic-8-ball b/Lang/V-(Vlang)/Magic-8-ball
new file mode 120000
index 0000000000..01ad1da8ee
--- /dev/null
+++ b/Lang/V-(Vlang)/Magic-8-ball
@@ -0,0 +1 @@
+../../Task/Magic-8-ball/V-(Vlang)
\ No newline at end of file
diff --git a/Lang/V-(Vlang)/Magic-squares-of-odd-order b/Lang/V-(Vlang)/Magic-squares-of-odd-order
new file mode 120000
index 0000000000..15a07e422e
--- /dev/null
+++ b/Lang/V-(Vlang)/Magic-squares-of-odd-order
@@ -0,0 +1 @@
+../../Task/Magic-squares-of-odd-order/V-(Vlang)
\ No newline at end of file
diff --git a/Lang/V-(Vlang)/Monads-Maybe-monad b/Lang/V-(Vlang)/Monads-Maybe-monad
new file mode 120000
index 0000000000..bcf0927f50
--- /dev/null
+++ b/Lang/V-(Vlang)/Monads-Maybe-monad
@@ -0,0 +1 @@
+../../Task/Monads-Maybe-monad/V-(Vlang)
\ No newline at end of file
diff --git a/Lang/V-(Vlang)/Morse-code b/Lang/V-(Vlang)/Morse-code
new file mode 120000
index 0000000000..ac98ffd266
--- /dev/null
+++ b/Lang/V-(Vlang)/Morse-code
@@ -0,0 +1 @@
+../../Task/Morse-code/V-(Vlang)
\ No newline at end of file
diff --git a/Lang/V-(Vlang)/Operator-precedence b/Lang/V-(Vlang)/Operator-precedence
new file mode 120000
index 0000000000..749797e963
--- /dev/null
+++ b/Lang/V-(Vlang)/Operator-precedence
@@ -0,0 +1 @@
+../../Task/Operator-precedence/V-(Vlang)
\ No newline at end of file
diff --git a/Lang/V-(Vlang)/Optional-parameters b/Lang/V-(Vlang)/Optional-parameters
new file mode 120000
index 0000000000..34451b5a74
--- /dev/null
+++ b/Lang/V-(Vlang)/Optional-parameters
@@ -0,0 +1 @@
+../../Task/Optional-parameters/V-(Vlang)
\ No newline at end of file
diff --git a/Lang/V-(Vlang)/Pangram-checker b/Lang/V-(Vlang)/Pangram-checker
new file mode 120000
index 0000000000..281ca7e770
--- /dev/null
+++ b/Lang/V-(Vlang)/Pangram-checker
@@ -0,0 +1 @@
+../../Task/Pangram-checker/V-(Vlang)
\ No newline at end of file
diff --git a/Lang/V-(Vlang)/Program-name b/Lang/V-(Vlang)/Program-name
new file mode 120000
index 0000000000..9b2935c679
--- /dev/null
+++ b/Lang/V-(Vlang)/Program-name
@@ -0,0 +1 @@
+../../Task/Program-name/V-(Vlang)
\ No newline at end of file
diff --git a/Lang/V-(Vlang)/Read-a-specific-line-from-a-file b/Lang/V-(Vlang)/Read-a-specific-line-from-a-file
new file mode 120000
index 0000000000..8f9a931625
--- /dev/null
+++ b/Lang/V-(Vlang)/Read-a-specific-line-from-a-file
@@ -0,0 +1 @@
+../../Task/Read-a-specific-line-from-a-file/V-(Vlang)
\ No newline at end of file
diff --git a/Lang/V-(Vlang)/Return-multiple-values b/Lang/V-(Vlang)/Return-multiple-values
new file mode 120000
index 0000000000..ddbdb0227d
--- /dev/null
+++ b/Lang/V-(Vlang)/Return-multiple-values
@@ -0,0 +1 @@
+../../Task/Return-multiple-values/V-(Vlang)
\ No newline at end of file
diff --git a/Lang/V-(Vlang)/Scope-modifiers b/Lang/V-(Vlang)/Scope-modifiers
new file mode 120000
index 0000000000..429eb578e5
--- /dev/null
+++ b/Lang/V-(Vlang)/Scope-modifiers
@@ -0,0 +1 @@
+../../Task/Scope-modifiers/V-(Vlang)
\ No newline at end of file
diff --git a/Lang/V-(Vlang)/Special-variables b/Lang/V-(Vlang)/Special-variables
new file mode 120000
index 0000000000..cf6afb2ad0
--- /dev/null
+++ b/Lang/V-(Vlang)/Special-variables
@@ -0,0 +1 @@
+../../Task/Special-variables/V-(Vlang)
\ No newline at end of file
diff --git a/Lang/V-(Vlang)/Sum-of-squares b/Lang/V-(Vlang)/Sum-of-squares
new file mode 120000
index 0000000000..bdf6276079
--- /dev/null
+++ b/Lang/V-(Vlang)/Sum-of-squares
@@ -0,0 +1 @@
+../../Task/Sum-of-squares/V-(Vlang)
\ No newline at end of file
diff --git a/Lang/V-(Vlang)/Taxicab-numbers b/Lang/V-(Vlang)/Taxicab-numbers
new file mode 120000
index 0000000000..d3f4a716c8
--- /dev/null
+++ b/Lang/V-(Vlang)/Taxicab-numbers
@@ -0,0 +1 @@
+../../Task/Taxicab-numbers/V-(Vlang)
\ No newline at end of file
diff --git a/Lang/V-(Vlang)/Topic-variable b/Lang/V-(Vlang)/Topic-variable
new file mode 120000
index 0000000000..99a32af3bb
--- /dev/null
+++ b/Lang/V-(Vlang)/Topic-variable
@@ -0,0 +1 @@
+../../Task/Topic-variable/V-(Vlang)
\ No newline at end of file
diff --git a/Lang/V-(Vlang)/User-input-Graphical b/Lang/V-(Vlang)/User-input-Graphical
new file mode 120000
index 0000000000..d985c46dcb
--- /dev/null
+++ b/Lang/V-(Vlang)/User-input-Graphical
@@ -0,0 +1 @@
+../../Task/User-input-Graphical/V-(Vlang)
\ No newline at end of file
diff --git a/Lang/VBA/Deal-cards-for-FreeCell b/Lang/VBA/Deal-cards-for-FreeCell
new file mode 120000
index 0000000000..33506ab6dc
--- /dev/null
+++ b/Lang/VBA/Deal-cards-for-FreeCell
@@ -0,0 +1 @@
+../../Task/Deal-cards-for-FreeCell/VBA
\ No newline at end of file
diff --git a/Lang/Verilog/Leonardo-numbers b/Lang/Verilog/Leonardo-numbers
new file mode 120000
index 0000000000..fdea2f05f8
--- /dev/null
+++ b/Lang/Verilog/Leonardo-numbers
@@ -0,0 +1 @@
+../../Task/Leonardo-numbers/Verilog
\ No newline at end of file
diff --git a/Lang/Verilog/Loops-Infinite b/Lang/Verilog/Loops-Infinite
new file mode 120000
index 0000000000..07545a5d7e
--- /dev/null
+++ b/Lang/Verilog/Loops-Infinite
@@ -0,0 +1 @@
+../../Task/Loops-Infinite/Verilog
\ No newline at end of file
diff --git a/Lang/Verilog/Pancake-numbers b/Lang/Verilog/Pancake-numbers
new file mode 120000
index 0000000000..f9cd19af94
--- /dev/null
+++ b/Lang/Verilog/Pancake-numbers
@@ -0,0 +1 @@
+../../Task/Pancake-numbers/Verilog
\ No newline at end of file
diff --git a/Lang/Verilog/Twos-complement b/Lang/Verilog/Twos-complement
new file mode 120000
index 0000000000..8527a62e79
--- /dev/null
+++ b/Lang/Verilog/Twos-complement
@@ -0,0 +1 @@
+../../Task/Twos-complement/Verilog
\ No newline at end of file
diff --git a/Lang/Waduzitdo/00-LANG.txt b/Lang/Waduzitdo/00-LANG.txt
new file mode 100644
index 0000000000..140eff39b3
--- /dev/null
+++ b/Lang/Waduzitdo/00-LANG.txt
@@ -0,0 +1,7 @@
+{{stub}}
+{{language|Waduzitdo
+|site=https://waduzitdo.org/
+|hopl=no
+}}
+
+Waduzitdo is a programming language created by Larry Kheriaty and published in the popular computer culture magazine BYTE in 1978. It very closely resembles [[PILOT]], but is even more simplified and has been proven to not be Turing complete. It appears to have been created as an attempt to create an extremely small compiler, as well as being a good language for demonstrating basic functions; the language only has eight commands, which demonstrate input and output, along with basic pattern-matching and decision-making. The language gets its name from the fact that it was designed for demonstrating a computer to people who had never used one before who are asking "What does it do?"
\ No newline at end of file
diff --git a/Lang/Waduzitdo/00-META.yaml b/Lang/Waduzitdo/00-META.yaml
new file mode 100644
index 0000000000..7c62d1f448
--- /dev/null
+++ b/Lang/Waduzitdo/00-META.yaml
@@ -0,0 +1,2 @@
+---
+from: http://rosettacode.org/wiki/Category:Waduzitdo
diff --git a/Lang/Waduzitdo/Hello-world-Text b/Lang/Waduzitdo/Hello-world-Text
new file mode 120000
index 0000000000..4d7c98308f
--- /dev/null
+++ b/Lang/Waduzitdo/Hello-world-Text
@@ -0,0 +1 @@
+../../Task/Hello-world-Text/Waduzitdo
\ No newline at end of file
diff --git a/Lang/Waduzitdo/Nim-game b/Lang/Waduzitdo/Nim-game
new file mode 120000
index 0000000000..d8c3766378
--- /dev/null
+++ b/Lang/Waduzitdo/Nim-game
@@ -0,0 +1 @@
+../../Task/Nim-game/Waduzitdo
\ No newline at end of file
diff --git a/Lang/X-script/00-LANG.txt b/Lang/X-script/00-LANG.txt
new file mode 100644
index 0000000000..af743e22c3
--- /dev/null
+++ b/Lang/X-script/00-LANG.txt
@@ -0,0 +1,38 @@
+{{language|X-script}}
+X-script is a minimalistic programming language which is characterised by user friendlyness and simplicity.
+All data are strings. It can also handle binary data, which are then encoded as hexadecimal strings.
+It can read from and write to files and serial devices like TCP/IP ports and serial ports.
+It has a window that has similarities with consoles, where you can start programs, call functions and call states or just write code (like in Python).
+
+Here is an example of an x-script that implements a chemical calculator:
+[[Chemical_calculator#X-script]].
+
+The development of X-script started around 1980 and the language has been improved ever since. Originally, the goal was to enable the creation of rapid prototypes of programs, to test ideas before the real programming started.
+
+The "Hello world" program looks like this:
+
+
+In x-script, you can develop an application in two different ways. One is as a function, which is similar to functions in other languages, except that all data are strings.
+
+The other is as a state, which is a list of inputs and outputs.
+A state is mostly the quickest way to solve a programming problem. It is also easy to read, since it is a list of inputs and the corresponding outputs or actions. The inputs are surrounded by ?"..."? and the corresponding outputs or actions by !"..."!. If you for example want to read a comma-separated account from a bank, the state could look like this:
+
+accountStatement.x
+------------------
+(* Titles *)
+?"TransactionDate;Reference;Amount
+"?
+!""!
+
+(* Example: 2023-09-04;Accessa Finance Inc 305653152413;-3850.00 *)
+?";;
+"?
+!" you '<0,payed to,earned from> :
dollars."!
+
+?""?
+!""!
+
+
+Function calls have this format: .
+
+The example above calls the library functions , , , , , and .
, , and are "pattern functions" which are used to match input strings. , and are ordinary functions. prints a string to the X-window.
retrieves stringparts identified in the input file. returns from the state,
\ No newline at end of file
diff --git a/Lang/X-script/00-META.yaml b/Lang/X-script/00-META.yaml
new file mode 100644
index 0000000000..2fd50d732b
--- /dev/null
+++ b/Lang/X-script/00-META.yaml
@@ -0,0 +1,2 @@
+---
+from: http://rosettacode.org/wiki/Category:X-script
diff --git a/Lang/X86-64-Assembly/A+B b/Lang/X86-64-Assembly/A+B
new file mode 120000
index 0000000000..8da0da2282
--- /dev/null
+++ b/Lang/X86-64-Assembly/A+B
@@ -0,0 +1 @@
+../../Task/A+B/X86-64-Assembly
\ No newline at end of file
diff --git a/Lang/X86-64-Assembly/Binary-digits b/Lang/X86-64-Assembly/Binary-digits
new file mode 120000
index 0000000000..1eb48aa18a
--- /dev/null
+++ b/Lang/X86-64-Assembly/Binary-digits
@@ -0,0 +1 @@
+../../Task/Binary-digits/X86-64-Assembly
\ No newline at end of file
diff --git a/Lang/X86-64-Assembly/Command-line-arguments b/Lang/X86-64-Assembly/Command-line-arguments
new file mode 120000
index 0000000000..112452a5d5
--- /dev/null
+++ b/Lang/X86-64-Assembly/Command-line-arguments
@@ -0,0 +1 @@
+../../Task/Command-line-arguments/X86-64-Assembly
\ No newline at end of file
diff --git a/Lang/X86-64-Assembly/Create-an-HTML-table b/Lang/X86-64-Assembly/Create-an-HTML-table
new file mode 120000
index 0000000000..e10bb5efed
--- /dev/null
+++ b/Lang/X86-64-Assembly/Create-an-HTML-table
@@ -0,0 +1 @@
+../../Task/Create-an-HTML-table/X86-64-Assembly
\ No newline at end of file
diff --git a/Lang/X86-64-Assembly/Generate-lower-case-ASCII-alphabet b/Lang/X86-64-Assembly/Generate-lower-case-ASCII-alphabet
new file mode 120000
index 0000000000..0146a7c580
--- /dev/null
+++ b/Lang/X86-64-Assembly/Generate-lower-case-ASCII-alphabet
@@ -0,0 +1 @@
+../../Task/Generate-lower-case-ASCII-alphabet/X86-64-Assembly
\ No newline at end of file
diff --git a/Lang/X86-64-Assembly/Miller-Rabin-primality-test b/Lang/X86-64-Assembly/Miller-Rabin-primality-test
new file mode 120000
index 0000000000..0607272f30
--- /dev/null
+++ b/Lang/X86-64-Assembly/Miller-Rabin-primality-test
@@ -0,0 +1 @@
+../../Task/Miller-Rabin-primality-test/X86-64-Assembly
\ No newline at end of file
diff --git a/Lang/X86-64-Assembly/Password-generator b/Lang/X86-64-Assembly/Password-generator
new file mode 120000
index 0000000000..e8e77773e7
--- /dev/null
+++ b/Lang/X86-64-Assembly/Password-generator
@@ -0,0 +1 @@
+../../Task/Password-generator/X86-64-Assembly
\ No newline at end of file
diff --git a/Lang/X86-64-Assembly/Random-number-generator-device- b/Lang/X86-64-Assembly/Random-number-generator-device-
new file mode 120000
index 0000000000..17f5db574d
--- /dev/null
+++ b/Lang/X86-64-Assembly/Random-number-generator-device-
@@ -0,0 +1 @@
+../../Task/Random-number-generator-device-/X86-64-Assembly
\ No newline at end of file
diff --git a/Lang/X86-64-Assembly/Rot-13 b/Lang/X86-64-Assembly/Rot-13
new file mode 120000
index 0000000000..498ce19193
--- /dev/null
+++ b/Lang/X86-64-Assembly/Rot-13
@@ -0,0 +1 @@
+../../Task/Rot-13/X86-64-Assembly
\ No newline at end of file
diff --git a/Lang/X86-64-Assembly/Stack b/Lang/X86-64-Assembly/Stack
new file mode 120000
index 0000000000..f458d7ec5f
--- /dev/null
+++ b/Lang/X86-64-Assembly/Stack
@@ -0,0 +1 @@
+../../Task/Stack/X86-64-Assembly
\ No newline at end of file
diff --git a/Lang/X86-Assembly/Stack b/Lang/X86-Assembly/Stack
deleted file mode 120000
index c0f7dc8fa0..0000000000
--- a/Lang/X86-Assembly/Stack
+++ /dev/null
@@ -1 +0,0 @@
-../../Task/Stack/X86-Assembly
\ No newline at end of file
diff --git a/Lang/XBS/00-LANG.txt b/Lang/XBS/00-LANG.txt
index 46cebd0203..87ee4c9802 100644
--- a/Lang/XBS/00-LANG.txt
+++ b/Lang/XBS/00-LANG.txt
@@ -1,29 +1,8 @@
{{language|XBS}}
== What is XBS? ==
-XBS is an interpreted language written in [[JavaScript]]. XBS has similarities to JavaScript and Python, as well as some other languages. XBS can be used for any web page with the correct library.
-----
-
-== Details ==
-
-XBS has a github page and is currently open-sourced. The github page has a wiki for the documentation; but just know, this language still isn't done. It has most features a programming language has, except for some minor details that I need to fix.
-
-----
-
-== Code Examples ==
-
-Variable declaration
-
-set x = "Hello, world!";
-log(x)
-
-Functions
-
-func FirstFunction(a,b){
- send a+b; #Add a and b
-}
-log(FirstFunction(1,2));
+XBS is an interpreted language written in [[JavaScript]]. The language does not have its own sandbox, and relies on methods passed down from JavaScript. XBS was created originally to help its creator understand how to create a basic programming language, and later branched out its syntax in creative ways.
----
@@ -34,4 +13,5 @@ log(FirstFunction(1,2));
== Notes ==
-XBS is currently going through a rewrite, and the wiki has not been rewritten yet.
\ No newline at end of file
+* XBS was re-written back in 2021 as the language had a lot of issues with expressional parsing priorities. Most XBS examples on this site are outdated.
+* XBS is a slow language, as it is interpreted using [[JavaScript]]
\ No newline at end of file
diff --git a/Lang/XBasic/Associative-array-Merging b/Lang/XBasic/Associative-array-Merging
new file mode 120000
index 0000000000..9fcd826207
--- /dev/null
+++ b/Lang/XBasic/Associative-array-Merging
@@ -0,0 +1 @@
+../../Task/Associative-array-Merging/XBasic
\ No newline at end of file
diff --git a/Lang/XBasic/Determine-sentence-type b/Lang/XBasic/Determine-sentence-type
new file mode 120000
index 0000000000..ea580ad280
--- /dev/null
+++ b/Lang/XBasic/Determine-sentence-type
@@ -0,0 +1 @@
+../../Task/Determine-sentence-type/XBasic
\ No newline at end of file
diff --git a/Lang/XBasic/Jewels-and-stones b/Lang/XBasic/Jewels-and-stones
new file mode 120000
index 0000000000..b0451efebb
--- /dev/null
+++ b/Lang/XBasic/Jewels-and-stones
@@ -0,0 +1 @@
+../../Task/Jewels-and-stones/XBasic
\ No newline at end of file
diff --git a/Lang/XBasic/Loops-Infinite b/Lang/XBasic/Loops-Infinite
new file mode 120000
index 0000000000..b803a965e4
--- /dev/null
+++ b/Lang/XBasic/Loops-Infinite
@@ -0,0 +1 @@
+../../Task/Loops-Infinite/XBasic
\ No newline at end of file
diff --git a/Lang/XBasic/Pancake-numbers b/Lang/XBasic/Pancake-numbers
new file mode 120000
index 0000000000..ba6560d347
--- /dev/null
+++ b/Lang/XBasic/Pancake-numbers
@@ -0,0 +1 @@
+../../Task/Pancake-numbers/XBasic
\ No newline at end of file
diff --git a/Lang/XBasic/The-Name-Game b/Lang/XBasic/The-Name-Game
new file mode 120000
index 0000000000..bc5b69cbc8
--- /dev/null
+++ b/Lang/XBasic/The-Name-Game
@@ -0,0 +1 @@
+../../Task/The-Name-Game/XBasic
\ No newline at end of file
diff --git a/Lang/XBasic/Twos-complement b/Lang/XBasic/Twos-complement
new file mode 120000
index 0000000000..651db096a5
--- /dev/null
+++ b/Lang/XBasic/Twos-complement
@@ -0,0 +1 @@
+../../Task/Twos-complement/XBasic
\ No newline at end of file
diff --git a/Lang/XPL0/Arithmetic-geometric-mean-Calculate-Pi b/Lang/XPL0/Arithmetic-geometric-mean-Calculate-Pi
new file mode 120000
index 0000000000..34337f3f2d
--- /dev/null
+++ b/Lang/XPL0/Arithmetic-geometric-mean-Calculate-Pi
@@ -0,0 +1 @@
+../../Task/Arithmetic-geometric-mean-Calculate-Pi/XPL0
\ No newline at end of file
diff --git a/Lang/XPL0/Average-loop-length b/Lang/XPL0/Average-loop-length
new file mode 120000
index 0000000000..b29c22437d
--- /dev/null
+++ b/Lang/XPL0/Average-loop-length
@@ -0,0 +1 @@
+../../Task/Average-loop-length/XPL0
\ No newline at end of file
diff --git a/Lang/XPL0/Bifid-cipher b/Lang/XPL0/Bifid-cipher
new file mode 120000
index 0000000000..224f51d976
--- /dev/null
+++ b/Lang/XPL0/Bifid-cipher
@@ -0,0 +1 @@
+../../Task/Bifid-cipher/XPL0
\ No newline at end of file
diff --git a/Lang/XPL0/Find-common-directory-path b/Lang/XPL0/Find-common-directory-path
new file mode 120000
index 0000000000..29427fdf4b
--- /dev/null
+++ b/Lang/XPL0/Find-common-directory-path
@@ -0,0 +1 @@
+../../Task/Find-common-directory-path/XPL0
\ No newline at end of file
diff --git a/Lang/XPL0/Fivenum b/Lang/XPL0/Fivenum
new file mode 120000
index 0000000000..2bd4e43614
--- /dev/null
+++ b/Lang/XPL0/Fivenum
@@ -0,0 +1 @@
+../../Task/Fivenum/XPL0
\ No newline at end of file
diff --git a/Lang/XPL0/Hex-words b/Lang/XPL0/Hex-words
new file mode 120000
index 0000000000..4ed3e2b550
--- /dev/null
+++ b/Lang/XPL0/Hex-words
@@ -0,0 +1 @@
+../../Task/Hex-words/XPL0
\ No newline at end of file
diff --git a/Lang/XPL0/I-before-E-except-after-C b/Lang/XPL0/I-before-E-except-after-C
new file mode 120000
index 0000000000..4eed624cc7
--- /dev/null
+++ b/Lang/XPL0/I-before-E-except-after-C
@@ -0,0 +1 @@
+../../Task/I-before-E-except-after-C/XPL0
\ No newline at end of file
diff --git a/Lang/XPL0/Knapsack-problem-Bounded b/Lang/XPL0/Knapsack-problem-Bounded
new file mode 120000
index 0000000000..3ed5296747
--- /dev/null
+++ b/Lang/XPL0/Knapsack-problem-Bounded
@@ -0,0 +1 @@
+../../Task/Knapsack-problem-Bounded/XPL0
\ No newline at end of file
diff --git a/Lang/XPL0/Long-literals-with-continuations b/Lang/XPL0/Long-literals-with-continuations
new file mode 120000
index 0000000000..d850e008c5
--- /dev/null
+++ b/Lang/XPL0/Long-literals-with-continuations
@@ -0,0 +1 @@
+../../Task/Long-literals-with-continuations/XPL0
\ No newline at end of file
diff --git a/Lang/XPL0/Longest-increasing-subsequence b/Lang/XPL0/Longest-increasing-subsequence
new file mode 120000
index 0000000000..bed908bffb
--- /dev/null
+++ b/Lang/XPL0/Longest-increasing-subsequence
@@ -0,0 +1 @@
+../../Task/Longest-increasing-subsequence/XPL0
\ No newline at end of file
diff --git a/Lang/XPL0/Phrase-reversals b/Lang/XPL0/Phrase-reversals
new file mode 120000
index 0000000000..2aa0453c8b
--- /dev/null
+++ b/Lang/XPL0/Phrase-reversals
@@ -0,0 +1 @@
+../../Task/Phrase-reversals/XPL0
\ No newline at end of file
diff --git a/Lang/XPL0/Rep-string b/Lang/XPL0/Rep-string
new file mode 120000
index 0000000000..d90ffe53d7
--- /dev/null
+++ b/Lang/XPL0/Rep-string
@@ -0,0 +1 @@
+../../Task/Rep-string/XPL0
\ No newline at end of file
diff --git a/Lang/XPL0/Sort-numbers-lexicographically b/Lang/XPL0/Sort-numbers-lexicographically
new file mode 120000
index 0000000000..f415eaee2b
--- /dev/null
+++ b/Lang/XPL0/Sort-numbers-lexicographically
@@ -0,0 +1 @@
+../../Task/Sort-numbers-lexicographically/XPL0
\ No newline at end of file
diff --git a/Lang/XPL0/Sorting-algorithms-Patience-sort b/Lang/XPL0/Sorting-algorithms-Patience-sort
new file mode 120000
index 0000000000..5ca2b1424f
--- /dev/null
+++ b/Lang/XPL0/Sorting-algorithms-Patience-sort
@@ -0,0 +1 @@
+../../Task/Sorting-algorithms-Patience-sort/XPL0
\ No newline at end of file
diff --git a/Lang/XPL0/Sorting-algorithms-Permutation-sort b/Lang/XPL0/Sorting-algorithms-Permutation-sort
new file mode 120000
index 0000000000..a50b3c1c69
--- /dev/null
+++ b/Lang/XPL0/Sorting-algorithms-Permutation-sort
@@ -0,0 +1 @@
+../../Task/Sorting-algorithms-Permutation-sort/XPL0
\ No newline at end of file
diff --git a/Lang/XPL0/Stern-Brocot-sequence b/Lang/XPL0/Stern-Brocot-sequence
new file mode 120000
index 0000000000..a67d0ce67d
--- /dev/null
+++ b/Lang/XPL0/Stern-Brocot-sequence
@@ -0,0 +1 @@
+../../Task/Stern-Brocot-sequence/XPL0
\ No newline at end of file
diff --git a/Lang/XPL0/Strip-block-comments b/Lang/XPL0/Strip-block-comments
new file mode 120000
index 0000000000..734cf1b909
--- /dev/null
+++ b/Lang/XPL0/Strip-block-comments
@@ -0,0 +1 @@
+../../Task/Strip-block-comments/XPL0
\ No newline at end of file
diff --git a/Lang/XPL0/Substitution-cipher b/Lang/XPL0/Substitution-cipher
new file mode 120000
index 0000000000..e26a399b99
--- /dev/null
+++ b/Lang/XPL0/Substitution-cipher
@@ -0,0 +1 @@
+../../Task/Substitution-cipher/XPL0
\ No newline at end of file
diff --git a/Lang/XPL0/User-input-Graphical b/Lang/XPL0/User-input-Graphical
new file mode 120000
index 0000000000..9b08de25b4
--- /dev/null
+++ b/Lang/XPL0/User-input-Graphical
@@ -0,0 +1 @@
+../../Task/User-input-Graphical/XPL0
\ No newline at end of file
diff --git a/Lang/XPL0/Visualize-a-tree b/Lang/XPL0/Visualize-a-tree
new file mode 120000
index 0000000000..022c2d2ff2
--- /dev/null
+++ b/Lang/XPL0/Visualize-a-tree
@@ -0,0 +1 @@
+../../Task/Visualize-a-tree/XPL0
\ No newline at end of file
diff --git a/Lang/XPL0/Window-creation b/Lang/XPL0/Window-creation
new file mode 120000
index 0000000000..8cbc53df4a
--- /dev/null
+++ b/Lang/XPL0/Window-creation
@@ -0,0 +1 @@
+../../Task/Window-creation/XPL0
\ No newline at end of file
diff --git a/Lang/YAMLScript/00-LANG.txt b/Lang/YAMLScript/00-LANG.txt
index eae1577f6a..1df1514fb9 100644
--- a/Lang/YAMLScript/00-LANG.txt
+++ b/Lang/YAMLScript/00-LANG.txt
@@ -4,11 +4,16 @@
{{language programming paradigm|hosted}}
{{implementation|Lisp}}
-'''[https://yamlscript.org YAMLScript]''' is a new programming language that uses [https://yaml.org/ YAML] as its syntax. It is a complete, functional, general purpose language, but can also be easily embedded in YAML files to make them dynamic at load time. Most existing YAML files and all JSON files are already valid YAMLScript programs. YAMLScript has a compiler/interpreter CLI program called [https://github.com/yaml/yamlscript/releases ys] and is also available in several programming languages as a binding module to the [https://github.com/yaml/yamlscript/releases libyamlscript.so] shared library:
+'''[https://yamlscript.org YAMLScript]''' is a new programming language that uses [https://yaml.org/ YAML] as its syntax. It is a complete, functional, general purpose language, but can also be easily embedded in YAML files to make them dynamic at load time. Most existing YAML files and all JSON files are already valid YAMLScript programs.
+
+You can learn YAMLScript for free (with help from experienced mentors) at [https://exercism.org/tracks/yamlscript Exercism].
+
+YAMLScript has a compiler/interpreter CLI program called [https://github.com/yaml/yamlscript/releases ys] and is also available in several programming languages as a binding module to the [https://github.com/yaml/yamlscript/releases libyamlscript.so] shared library:
* [https://clojars.org/org.yamlscript/clj-yamlscript Clojure]
* [https://github.com/yaml/yamlscript-go Go]
* [https://clojars.org/org.yamlscript/yamlscript Java]
+* [https://juliahub.com/ui/Packages/General/YAMLScript Julia]
* [https://www.npmjs.com/package/@yaml/yamlscript NodeJS]
* [https://metacpan.org/pod/YAMLScript Perl]
* [https://pypi.org/project/yamlscript/ Python]
diff --git a/Lang/YAMLScript/100-prisoners b/Lang/YAMLScript/100-prisoners
new file mode 120000
index 0000000000..bebf8d5d8f
--- /dev/null
+++ b/Lang/YAMLScript/100-prisoners
@@ -0,0 +1 @@
+../../Task/100-prisoners/YAMLScript
\ No newline at end of file
diff --git a/Lang/YAMLScript/Average-loop-length b/Lang/YAMLScript/Average-loop-length
new file mode 120000
index 0000000000..21710eecef
--- /dev/null
+++ b/Lang/YAMLScript/Average-loop-length
@@ -0,0 +1 @@
+../../Task/Average-loop-length/YAMLScript
\ No newline at end of file
diff --git a/Lang/YAMLScript/Floyds-triangle b/Lang/YAMLScript/Floyds-triangle
new file mode 120000
index 0000000000..9c388f69f3
--- /dev/null
+++ b/Lang/YAMLScript/Floyds-triangle
@@ -0,0 +1 @@
+../../Task/Floyds-triangle/YAMLScript
\ No newline at end of file
diff --git a/Lang/YAMLScript/Function-definition b/Lang/YAMLScript/Function-definition
new file mode 120000
index 0000000000..cc6f6727f4
--- /dev/null
+++ b/Lang/YAMLScript/Function-definition
@@ -0,0 +1 @@
+../../Task/Function-definition/YAMLScript
\ No newline at end of file
diff --git a/Lang/YAMLScript/Greatest-common-divisor b/Lang/YAMLScript/Greatest-common-divisor
new file mode 120000
index 0000000000..134280cc97
--- /dev/null
+++ b/Lang/YAMLScript/Greatest-common-divisor
@@ -0,0 +1 @@
+../../Task/Greatest-common-divisor/YAMLScript
\ No newline at end of file
diff --git a/Lang/YAMLScript/Palindrome-detection b/Lang/YAMLScript/Palindrome-detection
new file mode 120000
index 0000000000..fc4c1cdd2f
--- /dev/null
+++ b/Lang/YAMLScript/Palindrome-detection
@@ -0,0 +1 @@
+../../Task/Palindrome-detection/YAMLScript
\ No newline at end of file
diff --git a/Lang/YAMLScript/Sieve-of-Eratosthenes b/Lang/YAMLScript/Sieve-of-Eratosthenes
new file mode 120000
index 0000000000..b42b0394f6
--- /dev/null
+++ b/Lang/YAMLScript/Sieve-of-Eratosthenes
@@ -0,0 +1 @@
+../../Task/Sieve-of-Eratosthenes/YAMLScript
\ No newline at end of file
diff --git a/Lang/YAMLScript/Weird-numbers b/Lang/YAMLScript/Weird-numbers
new file mode 120000
index 0000000000..bf5aa481d4
--- /dev/null
+++ b/Lang/YAMLScript/Weird-numbers
@@ -0,0 +1 @@
+../../Task/Weird-numbers/YAMLScript
\ No newline at end of file
diff --git a/Lang/Yabasic/Associative-array-Merging b/Lang/Yabasic/Associative-array-Merging
new file mode 120000
index 0000000000..446716ab58
--- /dev/null
+++ b/Lang/Yabasic/Associative-array-Merging
@@ -0,0 +1 @@
+../../Task/Associative-array-Merging/Yabasic
\ No newline at end of file
diff --git a/Lang/Yabasic/Determine-if-a-string-has-all-the-same-characters b/Lang/Yabasic/Determine-if-a-string-has-all-the-same-characters
new file mode 120000
index 0000000000..c1da4813dd
--- /dev/null
+++ b/Lang/Yabasic/Determine-if-a-string-has-all-the-same-characters
@@ -0,0 +1 @@
+../../Task/Determine-if-a-string-has-all-the-same-characters/Yabasic
\ No newline at end of file
diff --git a/Lang/Yabasic/Determine-sentence-type b/Lang/Yabasic/Determine-sentence-type
new file mode 120000
index 0000000000..54129c23c0
--- /dev/null
+++ b/Lang/Yabasic/Determine-sentence-type
@@ -0,0 +1 @@
+../../Task/Determine-sentence-type/Yabasic
\ No newline at end of file
diff --git a/Lang/Yabasic/Modular-inverse b/Lang/Yabasic/Modular-inverse
new file mode 120000
index 0000000000..996963babe
--- /dev/null
+++ b/Lang/Yabasic/Modular-inverse
@@ -0,0 +1 @@
+../../Task/Modular-inverse/Yabasic
\ No newline at end of file
diff --git a/Lang/Yabasic/Pascals-triangle b/Lang/Yabasic/Pascals-triangle
new file mode 120000
index 0000000000..9cb7c7cced
--- /dev/null
+++ b/Lang/Yabasic/Pascals-triangle
@@ -0,0 +1 @@
+../../Task/Pascals-triangle/Yabasic
\ No newline at end of file
diff --git a/Lang/Yabasic/Shell-one-liner b/Lang/Yabasic/Shell-one-liner
new file mode 120000
index 0000000000..04ae90ab0a
--- /dev/null
+++ b/Lang/Yabasic/Shell-one-liner
@@ -0,0 +1 @@
+../../Task/Shell-one-liner/Yabasic
\ No newline at end of file
diff --git a/Lang/Yabasic/Soundex b/Lang/Yabasic/Soundex
new file mode 120000
index 0000000000..154bd39b85
--- /dev/null
+++ b/Lang/Yabasic/Soundex
@@ -0,0 +1 @@
+../../Task/Soundex/Yabasic
\ No newline at end of file
diff --git a/Lang/Yabasic/The-Name-Game b/Lang/Yabasic/The-Name-Game
new file mode 120000
index 0000000000..97bfdf9347
--- /dev/null
+++ b/Lang/Yabasic/The-Name-Game
@@ -0,0 +1 @@
+../../Task/The-Name-Game/Yabasic
\ No newline at end of file
diff --git a/Lang/Yabasic/Tree-datastructures b/Lang/Yabasic/Tree-datastructures
new file mode 120000
index 0000000000..da4a839e0d
--- /dev/null
+++ b/Lang/Yabasic/Tree-datastructures
@@ -0,0 +1 @@
+../../Task/Tree-datastructures/Yabasic
\ No newline at end of file
diff --git a/Lang/Yabasic/Twos-complement b/Lang/Yabasic/Twos-complement
new file mode 120000
index 0000000000..3889fdcaf6
--- /dev/null
+++ b/Lang/Yabasic/Twos-complement
@@ -0,0 +1 @@
+../../Task/Twos-complement/Yabasic
\ No newline at end of file
diff --git a/Lang/Zig/Babbage-problem b/Lang/Zig/Babbage-problem
new file mode 120000
index 0000000000..c79a638466
--- /dev/null
+++ b/Lang/Zig/Babbage-problem
@@ -0,0 +1 @@
+../../Task/Babbage-problem/Zig
\ No newline at end of file
diff --git a/Lang/Zig/Babylonian-spiral b/Lang/Zig/Babylonian-spiral
new file mode 120000
index 0000000000..518c958994
--- /dev/null
+++ b/Lang/Zig/Babylonian-spiral
@@ -0,0 +1 @@
+../../Task/Babylonian-spiral/Zig
\ No newline at end of file
diff --git a/Lang/Zig/Balanced-brackets b/Lang/Zig/Balanced-brackets
new file mode 120000
index 0000000000..0a6293637f
--- /dev/null
+++ b/Lang/Zig/Balanced-brackets
@@ -0,0 +1 @@
+../../Task/Balanced-brackets/Zig
\ No newline at end of file
diff --git a/Lang/Zig/Deal-cards-for-FreeCell b/Lang/Zig/Deal-cards-for-FreeCell
new file mode 120000
index 0000000000..8f0b26df35
--- /dev/null
+++ b/Lang/Zig/Deal-cards-for-FreeCell
@@ -0,0 +1 @@
+../../Task/Deal-cards-for-FreeCell/Zig
\ No newline at end of file
diff --git a/Task/100-doors/CBASIC/100-doors.basic b/Task/100-doors/CBASIC/100-doors.basic
new file mode 100644
index 0000000000..f81972b2ae
--- /dev/null
+++ b/Task/100-doors/CBASIC/100-doors.basic
@@ -0,0 +1,27 @@
+dim doors%(100)
+
+print "Finding solution to the 100 Doors Problem"
+
+rem - all doors are initially closed
+for i% = 1 to 100
+ doors%(i%) = 0
+next i%
+
+rem - pass through at increasing intervals
+for i% = 1 to 100
+ for j% = i% to 100 step i%
+ rem - flip each door encountered
+ doors%(j%) = 1 - doors%(j%)
+ next j%
+next i%
+
+rem - show which doors are open
+print "The open doors are: ";
+for i% = 1 to 100
+ if doors%(i%) = 1 then print i%;
+next i%
+
+print
+print "Thanks for consulting the puzzle guru!"
+
+end
diff --git a/Task/100-doors/Crystal/100-doors.crystal b/Task/100-doors/Crystal/100-doors.cr
similarity index 100%
rename from Task/100-doors/Crystal/100-doors.crystal
rename to Task/100-doors/Crystal/100-doors.cr
diff --git a/Task/100-doors/EMal/100-doors.emal b/Task/100-doors/EMal/100-doors.emal
index 6f7b1360d1..2bbd5d7aeb 100644
--- a/Task/100-doors/EMal/100-doors.emal
+++ b/Task/100-doors/EMal/100-doors.emal
@@ -4,7 +4,7 @@ type Door
model
int id
Door:State state
- new by int =id, Door:State =state do end
+ new by int ←id, Door:State ←state do end
fun toggle ← <|me.state ← when(me.state æ Door:State.CLOSED, Door:State.OPEN, Door:State.CLOSED)
fun asText ← <|"Door #" + me.id + " is " + when(me.state æ Door:State.CLOSED, "closed", "open")
end
diff --git a/Task/100-doors/Elixir/100-doors.elixir b/Task/100-doors/Elixir/100-doors.ex
similarity index 100%
rename from Task/100-doors/Elixir/100-doors.elixir
rename to Task/100-doors/Elixir/100-doors.ex
diff --git a/Task/100-doors/Euphoria/100-doors.euphoria b/Task/100-doors/Euphoria/100-doors.ex
similarity index 100%
rename from Task/100-doors/Euphoria/100-doors.euphoria
rename to Task/100-doors/Euphoria/100-doors.ex
diff --git a/Task/100-doors/Julia/100-doors-1.julia b/Task/100-doors/Julia/100-doors-1.jl
similarity index 100%
rename from Task/100-doors/Julia/100-doors-1.julia
rename to Task/100-doors/Julia/100-doors-1.jl
diff --git a/Task/100-doors/Julia/100-doors-2.julia b/Task/100-doors/Julia/100-doors-2.jl
similarity index 100%
rename from Task/100-doors/Julia/100-doors-2.julia
rename to Task/100-doors/Julia/100-doors-2.jl
diff --git a/Task/100-doors/Kotlin/100-doors.kotlin b/Task/100-doors/Kotlin/100-doors.kts
similarity index 100%
rename from Task/100-doors/Kotlin/100-doors.kotlin
rename to Task/100-doors/Kotlin/100-doors.kts
diff --git a/Task/100-doors/OCaml/100-doors-1.ocaml b/Task/100-doors/OCaml/100-doors-1.ml
similarity index 100%
rename from Task/100-doors/OCaml/100-doors-1.ocaml
rename to Task/100-doors/OCaml/100-doors-1.ml
diff --git a/Task/100-doors/OCaml/100-doors-2.ocaml b/Task/100-doors/OCaml/100-doors-2.ml
similarity index 100%
rename from Task/100-doors/OCaml/100-doors-2.ocaml
rename to Task/100-doors/OCaml/100-doors-2.ml
diff --git a/Task/100-doors/OCaml/100-doors-3.ocaml b/Task/100-doors/OCaml/100-doors-3.ml
similarity index 100%
rename from Task/100-doors/OCaml/100-doors-3.ocaml
rename to Task/100-doors/OCaml/100-doors-3.ml
diff --git a/Task/100-doors/Odin/100-doors-1.odin b/Task/100-doors/Odin/100-doors-1.odin
new file mode 100644
index 0000000000..b4fcc95bd6
--- /dev/null
+++ b/Task/100-doors/Odin/100-doors-1.odin
@@ -0,0 +1,24 @@
+package main
+
+import "core:fmt"
+
+main :: proc() {
+ using fmt
+
+ Door_State :: enum {Closed, Open}
+
+ doors := [?]Door_State { 0..<100 = .Closed }
+
+ for i in 1..=100 {
+ for j := i-1; j < 100; j += i {
+ if doors[j] == .Closed {
+ doors[j] = .Open
+ } else {
+ doors[j] = .Closed
+ }
+ }
+ }
+ for state, i in doors {
+ println("Door: ",int(i+1)," -> ",state)
+ }
+}
diff --git a/Task/100-doors/Odin/100-doors-2.odin b/Task/100-doors/Odin/100-doors-2.odin
new file mode 100644
index 0000000000..77e9cd99ef
--- /dev/null
+++ b/Task/100-doors/Odin/100-doors-2.odin
@@ -0,0 +1,22 @@
+package main
+
+import "core:fmt"
+import "core:math"
+
+main :: proc() {
+ using fmt
+
+ Door_State :: enum {Closed, Open}
+
+ doors := [?]Door_State { 0..<100 = .Closed }
+
+ for i in 1..=100 {
+ res := math.sqrt_f64( f64(i) )
+ if math.mod_f64( res, 1) == 0 {
+ doors[i-1] = .Open
+ } else {
+ doors[i-1] = .Closed
+ }
+ println("Door: ", i, " -> ", doors[i-1])
+ }
+}
diff --git a/Task/100-doors/OmniMark/100-doors-1.xom b/Task/100-doors/OmniMark/100-doors-1.xom
new file mode 100644
index 0000000000..8a04ae39c7
--- /dev/null
+++ b/Task/100-doors/OmniMark/100-doors-1.xom
@@ -0,0 +1,18 @@
+process
+ local switch doors size 100 ; all initialised ('1st pass' to false)
+
+ repeat over doors
+ repeat for integer door from #item to 100 by #item
+ do when doors[door] = false
+ activate doors[door] ; illustrating alternative to set ... to
+ else
+ set doors[door] to false
+ done
+ again
+ again
+
+ repeat over doors
+ do when doors = true
+ put #error '%d(#item)%n'
+ done
+ again
diff --git a/Task/100-doors/OmniMark/100-doors-2.xom b/Task/100-doors/OmniMark/100-doors-2.xom
new file mode 100644
index 0000000000..8c4bd45aa7
--- /dev/null
+++ b/Task/100-doors/OmniMark/100-doors-2.xom
@@ -0,0 +1,10 @@
+process
+ local integer door initial {1}
+ local integer step initial {3}
+
+ repeat
+ output "Door %d(door) is open%n"
+ increment door by step
+ increment step by 2
+ exit when door > 100
+ again
diff --git a/Task/100-doors/PascalABC.NET/100-doors.pas b/Task/100-doors/PascalABC.NET/100-doors.pas
deleted file mode 100644
index fab41ed069..0000000000
--- a/Task/100-doors/PascalABC.NET/100-doors.pas
+++ /dev/null
@@ -1,8 +0,0 @@
-// 100 doors. Nigel Galloway: January 1th., 2023
-type doorState=(Open,Closed);
-function flip(n:doorState):doorState:=if n=Open then Closed else Open;
-var Doors:Array of doorState:=ArrFill(100,Closed);
-begin
- for var n:=1 to 100 do for var g:=n-1 to 99 step n do Doors[g]:=flip(Doors[g]);
- for var n:=0 to 99 do if Doors[n]=Open then write(n+1,' '); writeLn
-end.
diff --git a/Task/100-doors/Pyret/100-doors.pyret b/Task/100-doors/Pyret/100-doors.arr
similarity index 100%
rename from Task/100-doors/Pyret/100-doors.pyret
rename to Task/100-doors/Pyret/100-doors.arr
diff --git a/Task/100-doors/Rust/100-doors-1.rust b/Task/100-doors/Rust/100-doors-1.rs
similarity index 100%
rename from Task/100-doors/Rust/100-doors-1.rust
rename to Task/100-doors/Rust/100-doors-1.rs
diff --git a/Task/100-doors/Rust/100-doors-2.rust b/Task/100-doors/Rust/100-doors-2.rs
similarity index 100%
rename from Task/100-doors/Rust/100-doors-2.rust
rename to Task/100-doors/Rust/100-doors-2.rs
diff --git a/Task/100-doors/Rust/100-doors-3.rust b/Task/100-doors/Rust/100-doors-3.rs
similarity index 100%
rename from Task/100-doors/Rust/100-doors-3.rust
rename to Task/100-doors/Rust/100-doors-3.rs
diff --git a/Task/100-doors/Rust/100-doors-4.rust b/Task/100-doors/Rust/100-doors-4.rs
similarity index 100%
rename from Task/100-doors/Rust/100-doors-4.rust
rename to Task/100-doors/Rust/100-doors-4.rs
diff --git a/Task/100-doors/Scheme/100-doors-1.ss b/Task/100-doors/Scheme/100-doors-1.scm
similarity index 100%
rename from Task/100-doors/Scheme/100-doors-1.ss
rename to Task/100-doors/Scheme/100-doors-1.scm
diff --git a/Task/100-doors/Scheme/100-doors-2.ss b/Task/100-doors/Scheme/100-doors-2.scm
similarity index 100%
rename from Task/100-doors/Scheme/100-doors-2.ss
rename to Task/100-doors/Scheme/100-doors-2.scm
diff --git a/Task/100-doors/Scheme/100-doors-3.ss b/Task/100-doors/Scheme/100-doors-3.scm
similarity index 100%
rename from Task/100-doors/Scheme/100-doors-3.ss
rename to Task/100-doors/Scheme/100-doors-3.scm
diff --git a/Task/100-doors/Tailspin/100-doors.tailspin b/Task/100-doors/Tailspin/100-doors-1.tailspin
similarity index 60%
rename from Task/100-doors/Tailspin/100-doors.tailspin
rename to Task/100-doors/Tailspin/100-doors-1.tailspin
index 8ea97723d3..3a2f81f4c2 100644
--- a/Task/100-doors/Tailspin/100-doors.tailspin
+++ b/Task/100-doors/Tailspin/100-doors-1.tailspin
@@ -2,7 +2,10 @@ source hundredDoors
@: [ 1..100 -> 0 ];
templates toggle
def jump: $;
- $jump..100:$jump -> \(when ($@hundredDoors($) <=0>)> do @hundredDoors($): 1; otherwise @hundredDoors($): 0;\) -> !VOID
+ $jump..100:$jump -> \(
+ when ($@hundredDoors($) <=0>)> do @hundredDoors($): 1;
+ otherwise @hundredDoors($): 0;
+ \) -> !VOID
end toggle
1..100 -> toggle -> !VOID
$@ -> \[i](<=1> ' $i;' !\) !
diff --git a/Task/100-doors/Tailspin/100-doors-2.tailspin b/Task/100-doors/Tailspin/100-doors-2.tailspin
new file mode 100644
index 0000000000..fb29ae1395
--- /dev/null
+++ b/Task/100-doors/Tailspin/100-doors-2.tailspin
@@ -0,0 +1,14 @@
+hundredDoors source
+ @ set [ 1..100 -> 0 ];
+ toggle templates
+ jump is $;
+ $jump..100:$jump -> templates
+ when <|?($@hundredDoors($) matches <|=0>)> do @hundredDoors($) set 1;
+ otherwise @hundredDoors($) set 0;
+ end -> !VOID
+ end toggle
+ 1..100 -> toggle -> !VOID
+ $@(.. as i; -> if <|=1> -> ' $i;') !
+end hundredDoors
+
+$hundredDoors -> 'Open doors:$...;' !
diff --git a/Task/100-doors/Unison/100-doors.unison b/Task/100-doors/Unison/100-doors.u
similarity index 100%
rename from Task/100-doors/Unison/100-doors.unison
rename to Task/100-doors/Unison/100-doors.u
diff --git a/Task/100-doors/YAMLScript/100-doors.ys b/Task/100-doors/YAMLScript/100-doors.ys
index d5248aee43..918b5e5f0a 100644
--- a/Task/100-doors/YAMLScript/100-doors.ys
+++ b/Task/100-doors/YAMLScript/100-doors.ys
@@ -3,14 +3,15 @@
defn main():
say: |-
Open doors after 100 passes:
- $(apply str interpose(', ' open-doors()))
+ $(open-doors().join(', '))
defn open-doors():
- for [[d n] map(vector doors() iterate(inc 1)) :when d]:
- n
+ ? for [d n] map(vector doors() range().drop(1))
+ :when d
+ : n
defn doors():
reduce:
- fn(doors idx): assoc(doors idx true)
+ fn(doors idx): doors.assoc(idx true)
into []: repeat(100 false)
- map \(dec (%1 * %1)): 1 .. 10
+ map \(sqr(_).--): 1 .. 10
diff --git a/Task/100-prisoners/Crystal/100-prisoners.crystal b/Task/100-prisoners/Crystal/100-prisoners.cr
similarity index 100%
rename from Task/100-prisoners/Crystal/100-prisoners.crystal
rename to Task/100-prisoners/Crystal/100-prisoners.cr
diff --git a/Task/100-prisoners/EasyLang/100-prisoners.easy b/Task/100-prisoners/EasyLang/100-prisoners.easy
index 6bdc815b68..3435445f04 100644
--- a/Task/100-prisoners/EasyLang/100-prisoners.easy
+++ b/Task/100-prisoners/EasyLang/100-prisoners.easy
@@ -4,7 +4,7 @@ for i = 1 to 100
.
subr shuffle_drawer
for i = len drawer[] downto 2
- r = randint i
+ r = random i
swap drawer[r] drawer[i]
.
.
@@ -13,7 +13,7 @@ subr play_random
for prisoner = 1 to 100
found = 0
for i = 1 to 50
- r = randint (100 - i)
+ r = random (100 - i)
card = drawer[sampler[r]]
swap sampler[r] sampler[100 - i - 1]
if card = prisoner
diff --git a/Task/100-prisoners/Elixir/100-prisoners.elixir b/Task/100-prisoners/Elixir/100-prisoners.ex
similarity index 100%
rename from Task/100-prisoners/Elixir/100-prisoners.elixir
rename to Task/100-prisoners/Elixir/100-prisoners.ex
diff --git a/Task/100-prisoners/Julia/100-prisoners.julia b/Task/100-prisoners/Julia/100-prisoners.jl
similarity index 100%
rename from Task/100-prisoners/Julia/100-prisoners.julia
rename to Task/100-prisoners/Julia/100-prisoners.jl
diff --git a/Task/100-prisoners/Kotlin/100-prisoners.kotlin b/Task/100-prisoners/Kotlin/100-prisoners.kts
similarity index 100%
rename from Task/100-prisoners/Kotlin/100-prisoners.kotlin
rename to Task/100-prisoners/Kotlin/100-prisoners.kts
diff --git a/Task/100-prisoners/Rust/100-prisoners-1.rust b/Task/100-prisoners/Rust/100-prisoners-1.rs
similarity index 100%
rename from Task/100-prisoners/Rust/100-prisoners-1.rust
rename to Task/100-prisoners/Rust/100-prisoners-1.rs
diff --git a/Task/100-prisoners/Rust/100-prisoners-2.rust b/Task/100-prisoners/Rust/100-prisoners-2.rs
similarity index 100%
rename from Task/100-prisoners/Rust/100-prisoners-2.rust
rename to Task/100-prisoners/Rust/100-prisoners-2.rs
diff --git a/Task/100-prisoners/YAMLScript/100-prisoners.ys b/Task/100-prisoners/YAMLScript/100-prisoners.ys
new file mode 100644
index 0000000000..f4e680f3bb
--- /dev/null
+++ b/Task/100-prisoners/YAMLScript/100-prisoners.ys
@@ -0,0 +1,79 @@
+!yamlscript/v0
+
+defn main(n=5000):
+ :: https://rosettacode.org/wiki/100_prisoners
+
+ random-successes optimal-successes run-count =:
+ simulate-n-runs(n)
+ .slice(q(random-successes optimal-successes run-count))
+
+ say: "Probability of survival with random search: $F(random-successes / run-count)"
+
+ say: "Probability of survival with ordered search: $F(optimal-successes / run-count)"
+
+defn simulate-n-runs(n):
+ :: Simulate n runs of the 100 prisoner problem and returns a success count
+ for each search method.
+
+ loop random-successes 0, optimal-successes 0, run-count 0:
+ # If we've done the loop n times
+ if n == run-count:
+ # return results
+ then::
+ random-successes :: random-successes
+ optimal-successes :: optimal-successes
+ run-count :: run-count
+
+ # Otherwise, run for another batch of prisoners
+ else:
+ next-result =: simulate-100-prisoners()
+ recur:
+ (random-successes + next-result.random)
+ (optimal-successes + next-result.optimal)
+ run-count.++
+
+defn simulate-100-prisoners():
+ :: Simulates all prisoners searching the same drawers by both strategies,
+ returns map showing whether each was successful.
+
+ # Create 100 drawers with randomly ordered prisoner numbers:
+ drawers =: random-drawers()
+ hash-map:
+ :random try-luck(drawers search-50-random-drawers)
+ :optimal try-luck(drawers search-50-optimal-drawers)
+
+defn try-luck(drawers drawer-searching-function):
+ :: Returns 1 if all prisoners find their number otherwise 0.
+
+ loop prisoners range(100):
+ if prisoners.?:
+ if prisoners.0.drawer-searching-function(drawers):
+ recur: rest(prisoners)
+ else: 0
+ else: 1
+
+defn search-50-optimal-drawers(prisoner-number drawers):
+ :: Open 50 drawers according to the agreed strategy, returning true if
+ prisoner's number was found.
+
+ loop next-drawer prisoner-number, drawers-opened 0:
+ when drawers-opened != 50:
+ result =: drawers.$next-drawer
+ result == prisoner-number ||:
+ recur: result drawers-opened.++
+
+defn search-50-random-drawers(prisoner-number drawers):
+ :: Select 50 random drawers and return true if the prisoner's number was
+ found.
+
+ drawers:
+ .shuffle()
+ .take(50)
+ .filter(eq(prisoner-number))
+ .count()
+ .eq(1)
+
+defn random-drawers():
+ :: Returns a list of shuffled numbers.
+
+ shuffle: range(100)
diff --git a/Task/15-puzzle-game/Delphi/15-puzzle-game.delphi b/Task/15-puzzle-game/Delphi/15-puzzle-game.pas
similarity index 100%
rename from Task/15-puzzle-game/Delphi/15-puzzle-game.delphi
rename to Task/15-puzzle-game/Delphi/15-puzzle-game.pas
diff --git a/Task/15-puzzle-game/EasyLang/15-puzzle-game.easy b/Task/15-puzzle-game/EasyLang/15-puzzle-game.easy
index e10e23f2a7..2b4fba7059 100644
--- a/Task/15-puzzle-game/EasyLang/15-puzzle-game.easy
+++ b/Task/15-puzzle-game/EasyLang/15-puzzle-game.easy
@@ -1,4 +1,4 @@
-sys topleft
+sysconf topleft
background 432
textsize 13
len f[] 16
@@ -44,7 +44,7 @@ proc init . .
.
# shuffle
for i = 15 downto 2
- r = randint i
+ r = random i
swap f[r] f[i]
.
# make it solvable
diff --git a/Task/15-puzzle-game/Jq/15-puzzle-game.jq b/Task/15-puzzle-game/Jq/15-puzzle-game.jq
new file mode 100644
index 0000000000..6ae4fa4c93
--- /dev/null
+++ b/Task/15-puzzle-game/Jq/15-puzzle-game.jq
@@ -0,0 +1,93 @@
+include "MRG32k3a" {search: "."}; # see above
+
+# The following may be omitted if using the C implementation of jq
+def _nwise($n):
+ def n: if length <= $n then . else .[0:$n] , (.[$n:] | n) end;
+ n;
+
+### Generic utilities
+
+def lpad($len): tostring | ($len - length) as $l | (" " * $l) + .;
+
+# tabular print
+def tprint($columns; $width):
+ reduce _nwise($columns) as $row ("";
+ . + ($row|map(lpad($width)) | join(" ")) + "\n" );
+
+def array_swap($i; $j):
+ if $j < $i then array_swap($j;$i)
+ elif $i == $j then .
+ else .[:$i] + [.[$j]] + .[$i+1:$j] + [.[$i]] + .[$j+1:]
+ end ;
+
+### Pre-requisite: MRG32k3a
+# Input: an array to be shuffled
+# Output: the shuffled array using a seed based on `now`
+def shuffle:
+ { prng: (seed(now | tostring | sub("^.*[.]";"") | tonumber)),
+ array: . }
+ | knuthShuffle
+ | .array;
+
+### 15-Puzzle
+
+# Pretty-print the board
+def pp:
+ .board | map(if . == 0 then "" end) | tprint(4;3);
+
+def row: ./4 | floor;
+def col: . % 4;
+
+def move($p):
+ .zero as $zero
+ | (.board |= array_swap($zero; $p))
+ | .zero = $p
+ | .n += 1 ;
+
+def SolvedBoard: [range(1;16), 0];
+
+# Output: {goal, n, board, zero}
+def init($easy):
+ SolvedBoard as $init
+ | { goal: $init,
+ n: 0, # number of moves so far
+ board: ($init | if $easy then array_swap(14;15) else shuffle end)
+ }
+ | .zero = (.board|index(0)) ;
+
+# If $m is a valid single-letter move, then emit the corresponding
+# index of the proposed new position.
+# Input must include .zero
+def isValidMove($m):
+ if ($m == "u") then if (.zero|row) != 0 then .zero - 4 else false end
+ elif ($m == "d") then if (.zero|row) != 3 then .zero + 4 else false end
+ elif ($m == "r") then if (.zero|col) != 3 then .zero + 1 else false end
+ elif ($m == "l") then if (.zero|col) != 0 then .zero - 1 else false end
+ else false
+ end;
+
+def instructions:
+ "Please enter \"u\", \"d\", \"l\", or \"r\" to move the empty cell",
+ "up, down, left, or right. You can also enter \"q\" to quit.",
+ "Upper or lowercase is accepted and only the first character",
+ "is important, so for example you could enter `up` instead of `u`.";
+
+def play($easy):
+ def prompt:
+ pp,
+ if .board == .goal then "Congratulations. You solved the puzzle in \(.n) moves."
+ else
+ "Enter move #\(.n + 1) (u, d, l, r or q): ",
+ ( (limit(1;inputs)[:1]|ascii_downcase) as $m
+ | if $m == "q" then halt
+ else isValidMove($m) as $p
+ | if $p then move($p) | prompt
+ else "Invalid move.", prompt
+ end
+ end)
+ end;
+
+ instructions,
+ (init($easy) | prompt);
+
+play(ARGS.named.easy)
diff --git a/Task/15-puzzle-game/Julia/15-puzzle-game.julia b/Task/15-puzzle-game/Julia/15-puzzle-game.jl
similarity index 100%
rename from Task/15-puzzle-game/Julia/15-puzzle-game.julia
rename to Task/15-puzzle-game/Julia/15-puzzle-game.jl
diff --git a/Task/15-puzzle-game/Kotlin/15-puzzle-game.kotlin b/Task/15-puzzle-game/Kotlin/15-puzzle-game.kts
similarity index 100%
rename from Task/15-puzzle-game/Kotlin/15-puzzle-game.kotlin
rename to Task/15-puzzle-game/Kotlin/15-puzzle-game.kts
diff --git a/Task/15-puzzle-game/OCaml/15-puzzle-game.ocaml b/Task/15-puzzle-game/OCaml/15-puzzle-game.ml
similarity index 100%
rename from Task/15-puzzle-game/OCaml/15-puzzle-game.ocaml
rename to Task/15-puzzle-game/OCaml/15-puzzle-game.ml
diff --git a/Task/15-puzzle-game/Rust/15-puzzle-game.rust b/Task/15-puzzle-game/Rust/15-puzzle-game.rs
similarity index 100%
rename from Task/15-puzzle-game/Rust/15-puzzle-game.rust
rename to Task/15-puzzle-game/Rust/15-puzzle-game.rs
diff --git a/Task/15-puzzle-game/Scheme/15-puzzle-game.ss b/Task/15-puzzle-game/Scheme/15-puzzle-game.scm
similarity index 100%
rename from Task/15-puzzle-game/Scheme/15-puzzle-game.ss
rename to Task/15-puzzle-game/Scheme/15-puzzle-game.scm
diff --git a/Task/15-puzzle-game/Zig/15-puzzle-game.zig b/Task/15-puzzle-game/Zig/15-puzzle-game.zig
index 11d3ca114f..431b73eab5 100644
--- a/Task/15-puzzle-game/Zig/15-puzzle-game.zig
+++ b/Task/15-puzzle-game/Zig/15-puzzle-game.zig
@@ -64,7 +64,7 @@ fn waitForMove() !Move {
}
fn shuffle(moves: u8) !void {
- var random = std.rand.DefaultPrng.init(@intCast(std.time.microTimestamp()));
+ var random = std.Random.DefaultPrng.init(@intCast(std.time.microTimestamp()));
const rand = random.random();
var n: u8 = 0;
while (n < moves) {
diff --git a/Task/15-puzzle-solver/Jq/15-puzzle-solver.jq b/Task/15-puzzle-solver/Jq/15-puzzle-solver.jq
new file mode 100644
index 0000000000..0e7f033340
--- /dev/null
+++ b/Task/15-puzzle-solver/Jq/15-puzzle-solver.jq
@@ -0,0 +1,192 @@
+# The following may be omitted if using the C implementation
+# or if the debug messages are deleted.
+def debug(msg): (msg | tostring | debug | empty), .;
+
+### Generic functions
+
+def array_swap($i; $j):
+ if $j < $i then array_swap($j;$i)
+ elif $i == $j then .
+ else .[:$i] + [.[$j]] + .[$i+1:$j] + [.[$i]] + .[$j+1:]
+ end ;
+
+def sum(s): reduce s as $x (0; . + $x);
+
+### The 15-Puzzle
+
+# manhattan distance between points $ix and $iy where these are indices in the flat array
+def distance($ix; $jx):
+ def row: ./4 | floor;
+ def col: . % 4;
+ [$ix, $jx]
+ | map(row) as $mr # [$ri, $rj]
+ | map(col) as $mc # [$ci, $cj]
+ | [$mr[0] - $mr[1], $mc[0] - $mc[1]]
+ | map(length) # i.e. abs
+ | add;
+
+# What is the Manhattan distance between the position of $tile in the goal
+# and the location corresponding to index $ix, where $ix is in range(0;16)
+def manhattan($tile; $ix):
+ .position[$tile|tostring] as $jx
+ | distance($ix; $jx);
+
+# The total of the discrepancies
+def total_manhattan_distance:
+ sum( range(0;16) as $p | .board[$p] as $tile | select($tile != 0) | manhattan($tile; $p) )
+ | debug;
+
+# Input:
+# .goal is the desired board (flat array)
+# .position is the JSON object mapping tiles to the goal index
+# .zero is the location of 0
+# .board is the current state of the board (flat array)
+# .distance is incremented by $delta after each move
+# .seen is our memory
+# If allowed, move the zero tile to $p where $p has been properly specified in relation to .zero;
+# otherwise emit empty
+def move($p):
+ if $p >= 0 and $p < 16
+ then .board[$p] as $tile
+ # Are we making things worse off?
+ | (manhattan($tile; .zero) - manhattan($tile; $p)) as $delta
+ | if $delta > 0 and .distance > (.N - .n)
+ then if .n >= .N then debug({n, N, distance,sequence: (.sequence|length)}) end | empty
+ else # make the move
+ .zero as $zero
+ | (.board | array_swap($zero; $p)) as $candidate
+ | ($candidate|tostring) as $s
+ | if .seen[$s]
+ then empty
+ else .board = $candidate
+ | .zero = $p
+ | .n += 1
+ | .seen[$s] = true
+ end
+ end
+ # We should only reach here if the move has been made
+ | if $delta != 0
+ then .distance += $delta
+ end
+ else empty
+ end
+;
+
+def row: . / 4 | floor;
+def col: . % 4;
+
+def up:
+ if (.zero | row) == 0 then empty
+ else move(.zero - 4)
+ | .sequence += ["u"]
+ end;
+
+def down:
+ if (.zero | row) == 3 then empty
+ else move(.zero + 4)
+ | .sequence += ["d"]
+ end;
+
+def left:
+ if (.zero|col) == 0 then empty
+ else move(.zero - 1)
+ | .sequence += ["l"]
+ end;
+
+def right:
+ if (.zero|col) == 3 then empty
+ else move(.zero + 1)
+ | .sequence += ["r"]
+ end;
+
+# $array is a permutation of range(0;16), e.g. the goal
+# Output: a JSON object such that .[$tile] is the position of $tile in the goal
+def positions($array):
+ reduce range(0; $array|length) as $i ({}; . + {($array[$i]|tostring): $i});
+
+# map a string of lowercase hex digits to an array of decimals
+def symbols2array: explode | map(if . > 96 then .-87 else .-48 end);
+
+# $start should be a string of length 16 representing the starting state;
+# the goal is: "123456789abcdef0"
+def init($start):
+ if $start|length == 16 then . else error end
+ | [range(1;16), 0] as $init
+ | {goal: $init,
+ position: positions($init),
+ distance: 0,
+ n: 0, # number of moves so far
+ sequence: [], # the sequence of moves so far
+ seen: {}
+ }
+ | .board = ($start | symbols2array)
+ | .zero = (.board|index(0))
+ | (.board|tostring) as $s
+ | .seen[$s] = true
+;
+
+# Output: If the move of the zero tile to $p is legal in one step,
+# then emit manhattan($tile; .zero) - manhattan($tile; $p)
+# where $tile is the tile at $p;
+# otherwise: null
+def delta_move($p):
+ if $p >= 0 and $p < 16
+ then distance($p; .zero) as $base
+ | if ($base|length) == 1 # abs
+ then .board[$p] as $tile
+ | manhattan($tile; .zero) - manhattan($tile; $p)
+ else null
+ end
+ else null
+ end ;
+
+# For comparing the possible moves:
+def moves:
+ {"u": delta_move( .zero - 4),
+ "d": delta_move( .zero + 4),
+ "l": delta_move( .zero - 1),
+ "r": delta_move( .zero + 1) }
+ | to_entries
+ | map(select( .value ) )
+ | sort_by(.value)
+ ;
+
+
+# input: the output of moves
+def execute($moves):
+ ($moves[] |.key) as $key
+ | if $key == "l" then left
+ elif $key == "r" then right
+ elif $key == "u" then up
+ elif $key == "d" then down
+ else empty
+ end;
+
+# $N is the maximum number of moves allowed
+# Input: as per `input`; .n is the number of moves so far
+def possible_moves($N):
+ def possible_moves:
+ if .board == .goal then . # a solution
+ elif (.sequence|length) >= $N then empty
+ else .sequence[-1] as $lastmove
+ | if $lastmove == "l" then execute(moves | map(select(.key != "r")))
+ elif $lastmove == "r" then execute(moves | map(select(.key != "l")))
+ elif $lastmove == "u" then execute(moves | map(select(.key != "d")))
+ elif $lastmove == "d" then execute(moves | map(select(.key != "u")))
+ else execute(moves)
+ end
+ | possible_moves
+ end ;
+ possible_moves;
+
+def solve($goal):
+ init($goal)
+ | total_manhattan_distance as $d
+ | first( range($d; 100) as $n
+ | .N = $n
+ | .distance = $d
+ | debug("before: n=\($n) distance = \($d))")
+ | possible_moves($n)
+ | .sequence | join("") ) ;
+
+solve("fe169b4c0a73d852")
diff --git a/Task/15-puzzle-solver/Julia/15-puzzle-solver.julia b/Task/15-puzzle-solver/Julia/15-puzzle-solver.jl
similarity index 100%
rename from Task/15-puzzle-solver/Julia/15-puzzle-solver.julia
rename to Task/15-puzzle-solver/Julia/15-puzzle-solver.jl
diff --git a/Task/15-puzzle-solver/Rust/15-puzzle-solver-1.rust b/Task/15-puzzle-solver/Rust/15-puzzle-solver-1.rs
similarity index 100%
rename from Task/15-puzzle-solver/Rust/15-puzzle-solver-1.rust
rename to Task/15-puzzle-solver/Rust/15-puzzle-solver-1.rs
diff --git a/Task/15-puzzle-solver/Rust/15-puzzle-solver-2.rust b/Task/15-puzzle-solver/Rust/15-puzzle-solver-2.rs
similarity index 100%
rename from Task/15-puzzle-solver/Rust/15-puzzle-solver-2.rust
rename to Task/15-puzzle-solver/Rust/15-puzzle-solver-2.rs
diff --git a/Task/2048/Delphi/2048.delphi b/Task/2048/Delphi/2048.pas
similarity index 100%
rename from Task/2048/Delphi/2048.delphi
rename to Task/2048/Delphi/2048.pas
diff --git a/Task/2048/Elixir/2048.elixir b/Task/2048/Elixir/2048.ex
similarity index 100%
rename from Task/2048/Elixir/2048.elixir
rename to Task/2048/Elixir/2048.ex
diff --git a/Task/2048/Julia/2048.julia b/Task/2048/Julia/2048.jl
similarity index 100%
rename from Task/2048/Julia/2048.julia
rename to Task/2048/Julia/2048.jl
diff --git a/Task/2048/Kotlin/2048.kotlin b/Task/2048/Kotlin/2048.kts
similarity index 100%
rename from Task/2048/Kotlin/2048.kotlin
rename to Task/2048/Kotlin/2048.kts
diff --git a/Task/2048/OCaml/2048.ocaml b/Task/2048/OCaml/2048.ml
similarity index 100%
rename from Task/2048/OCaml/2048.ocaml
rename to Task/2048/OCaml/2048.ml
diff --git a/Task/2048/Rust/2048.rust b/Task/2048/Rust/2048.rs
similarity index 100%
rename from Task/2048/Rust/2048.rust
rename to Task/2048/Rust/2048.rs
diff --git a/Task/21-game/EasyLang/21-game.easy b/Task/21-game/EasyLang/21-game.easy
index 1ed700b063..bcbd765121 100644
--- a/Task/21-game/EasyLang/21-game.easy
+++ b/Task/21-game/EasyLang/21-game.easy
@@ -17,7 +17,7 @@ repeat
else
sleep 1
if sum mod 4 = 1
- n = randint 3
+ n = random 3
else
n = 4 - (sum + 3) mod 4
.
diff --git a/Task/21-game/J/21-game.j b/Task/21-game/J/21-game.j
index 821237993a..04b5ac792e 100644
--- a/Task/21-game/J/21-game.j
+++ b/Task/21-game/J/21-game.j
@@ -1,37 +1,32 @@
-g21=: summarize@play@setup ::('g21: error termination'"_)
+g21=: summarize@play@setup ::'g21: error termination'
-NB. non-verb must be defined before use, otherwise are assumed verbs.
-Until=: 2 :'u^:(0-:v)^:_'
+Until=: {{u^:(0-:v)^:_}}
-t=: 'score turn choice'
-(t)=: i. # ;: t
-empty erase't'
-
-Fetch=: &{
-Alter=: }
+'score turn choice'=: 0 1 2
play=: move Until done
-done=: 21 <: score Fetch
-move=: [: update you`it@.(turn Fetch)
+move=: [: update you`it@.(turn&{)
+done=: 21 <: score&{
+
update=: swap@display@add
-add=: score Alter~ (score Fetch + choice Fetch)
-display=: [ ([: echo 'sum: {}' format~ score Fetch)
-swap=: turn Alter~ ([: -. turn Fetch)
+add=: score}~ score&{ + choice&{
+display=: [ 'sum: {}' echo@format~ score&{
+swap=: turn}~ [: -. turn&{
-it=: ([ [: echo 'It chose {}.' format~ choice Fetch)@(choice Alter~ cb)
-cb=: (1:`r`3:`2:)@.(4 | score Fetch) NB. computer brain
-r=: 3 :'>:?3'
+it=: ([ 'It chose {}.' echo@format~ choice&{)@(choice}~ cb)
+cb=: 1:`(>:@?@3)`3:`2:@.(4 | score&{) NB. computer brain
you=: qio1@check@acquire@prompt
-prompt=: [ ([: echo 'your choice?'"_)
-acquire=: choice Alter~ ('123' i. 0 { ' ' ,~ read)
-check=: (choice Alter~ (665 - score Fetch))@([ ([: echo 'g21: early termination'"_))^:(3 = choice Fetch)
-qio1=: choice Alter~ ([: >: choice Fetch)
+prompt=: [ echo@'your choice?'
+acquire=: choice}~'123'i.0{' ',~read
+check=: (choice}~ 665 - score&{)@([ echo@'g21: early termination')^:(3 = choice&{)
+qio1=: choice}~ ([: >: choice&{)
-setup=: ([ [: echo 'On your turn enter 1 2 or 3, other entries exit'"_)@((3 :'?2') turn Alter ])@0 0 0"_ NB. choose first player randomly
-summarize=: ' won' ,~ (];._2 'it you ') {~ turn Fetch
+setup=: ([ echo@'On your turn enter 1 2 or 3, other entries exit')@(?@2 turn} ])@0 0 0 NB. choose first player randomly
-read=: 1!:1@:1:
-write=: 1!:2 4: NB. unused
-format=: ''&$: :([: ; (a: , [: ":&.> [) ,. '{}' ([ (E. <@}.;._1 ]) ,) ])
+summarize=: ' won',~ ];._2@'it you '{~turn&{
+
+read=: 1!:1@1
+write=: 1!:2&4 NB. unused
+format=: ''&$: : ([: ; (a: , [: ":&.> [) ,. '{}' ([ (E. <@}.;._1 ]) ,) ])
diff --git a/Task/21-game/Julia/21-game.julia b/Task/21-game/Julia/21-game.jl
similarity index 100%
rename from Task/21-game/Julia/21-game.julia
rename to Task/21-game/Julia/21-game.jl
diff --git a/Task/21-game/Rust/21-game.rust b/Task/21-game/Rust/21-game.rs
similarity index 100%
rename from Task/21-game/Rust/21-game.rust
rename to Task/21-game/Rust/21-game.rs
diff --git a/Task/24-game-Solve/Elixir/24-game-solve.elixir b/Task/24-game-Solve/Elixir/24-game-solve.ex
similarity index 100%
rename from Task/24-game-Solve/Elixir/24-game-solve.elixir
rename to Task/24-game-Solve/Elixir/24-game-solve.ex
diff --git a/Task/24-game-Solve/Fortran/24-game-solve-3.f b/Task/24-game-Solve/Fortran/24-game-solve-3.f
new file mode 100644
index 0000000000..c3f0095d7a
--- /dev/null
+++ b/Task/24-game-Solve/Fortran/24-game-solve-3.f
@@ -0,0 +1,481 @@
+module game24_module
+ use omp_lib
+ use iso_fortran_env, only: int64
+ implicit none
+ ! Define constants
+ integer, parameter :: max_limit = 8 ! Maximum allowed value for the number of inputs
+ integer, parameter :: expr_len = 200 ! Maximum length for expressions
+
+ ! Precomputed total calls for n=6,7,8
+ integer(int64), parameter :: total_calls_n6 = 20000000_int64
+ integer(int64), parameter :: total_calls_n7 = 2648275200_int64
+ integer(int64), parameter :: total_calls_n8 = 444557593600_int64
+
+ !----------------------- Progress Indicator Variables ---------------------
+ integer(int64) :: total_calls = 0 ! Total number of recursive calls
+ integer(int64) :: completed_calls = 0 ! Number of completed recursive calls
+ integer :: last_percentage = -1 ! Last percentage reported
+ integer, parameter :: progress_bar_width = 50 ! Width of the progress bar
+ character(len=1) :: carriage_return = char(13) ! Carriage return character
+ logical :: show_progress = .false. ! Flag to show progress bar
+ !--------------------------------------------------------------------------
+contains
+
+ !-----------------------------------------------------------------------
+ ! ! Aborted function: calculate_total_calls
+ ! ! Description:
+ ! ! Estimates the total number of recursive calls for a given n,
+ ! ! considering commutativity (addition and multiplication).
+ ! ! Arguments:
+ ! ! n: The number of input numbers.
+ ! ! Returns:
+ ! ! The estimated total number of recursive calls as an integer.
+ ! !-----------------------------------------------------------------------
+ ! integer function calculate_total_calls(n)
+ ! implicit none
+ ! integer, intent(in) :: n
+ ! integer :: k
+ ! calculate_total_calls = 1
+ ! do k = 2, n
+ ! ! For each pair, there are 6 possible operations:
+ ! ! 1 addition, 1 multiplication (commutative)
+ ! ! 2 subtraction, 2 division (non-commutative)
+ ! calculate_total_calls = calculate_total_calls * ((k * (k - 1)) / 2) * 6
+ ! end do
+ ! end function calculate_total_calls
+
+ !-----------------------------------------------------------------------
+ ! Subroutine: convert_to_number
+ ! Description:
+ ! Converts user input (numbers or card values) into numeric values.
+ ! Handles card values such as 'A', 'J', 'Q', 'K' and converts them into
+ ! corresponding numbers (A=1, J=11, Q=12, K=13).
+ ! Arguments:
+ ! input_str: Input string representing the number or card.
+ ! number: Output real number after conversion.
+ ! ios: I/O status indicator (0 for success, non-zero for error).
+ !-----------------------------------------------------------------------
+ subroutine convert_to_number(input_str, number, ios)
+ implicit none
+ character(len=*), intent(in) :: input_str
+ real, intent(out) :: number
+ integer, intent(out) :: ios
+ character(len=1) :: first_char
+ real :: temp_number
+
+ ios = 0 ! Reset the I/O status to 0 (valid input by default)
+ first_char = input_str(1:1)
+
+ select case (first_char)
+ case ('A', 'a')
+ number = 1.0
+ case ('J', 'j')
+ number = 11.0
+ case ('Q', 'q')
+ number = 12.0
+ case ('K', 'k')
+ number = 13.0
+ case default
+ read (input_str, *, iostat=ios) temp_number ! Attempt to read a real number
+
+ ! If input is not a valid real number or is not an integer, set ios to 1
+ if (ios /= 0 .or. mod(temp_number, 1.0) /= 0.0) then
+ ios = 1 ! Invalid input
+ else
+ number = temp_number ! Valid integer input
+ end if
+ end select
+ end subroutine convert_to_number
+
+ !-----------------------------------------------------------------------
+ ! Subroutine: remove_decimal_zeros
+ ! Description:
+ ! Removes trailing zeros after the decimal point from a string.
+ ! Arguments:
+ ! str: Input string that may contain trailing zeros.
+ ! result: Output string with trailing zeros removed.
+ !-----------------------------------------------------------------------
+ subroutine remove_decimal_zeros(str, result)
+ implicit none
+ character(len=*), intent(in) :: str ! Input: String to remove zeros from
+ character(len=*), intent(out) :: result ! Output: String without trailing zeros
+ integer :: i, len_str ! Loop counter and string length
+
+ len_str = len_trim(str)
+ result = adjustl(str(1:len_str))
+
+ ! Find the position of the decimal point
+ i = index(result, '.')
+
+ ! If there's a decimal point, remove trailing zeros
+ if (i > 0) then
+ do while (len_str > i .and. result(len_str:len_str) == '0')
+ len_str = len_str - 1
+ end do
+ if (result(len_str:len_str) == '.') len_str = len_str - 1
+ result = result(1:len_str)
+ end if
+ end subroutine remove_decimal_zeros
+
+ !-----------------------------------------------------------------------
+ ! Subroutine: create_new_arrays
+ ! Description:
+ ! Creates new arrays after performing an operation.
+ ! Arguments:
+ ! nums: Input array of numbers.
+ ! exprs: Input array of expressions.
+ ! idx1: Index of the first element to remove.
+ ! idx2: Index of the second element to remove.
+ ! result: Result of the operation.
+ ! new_expr: New expression string.
+ ! new_nums: Output array of numbers with elements removed and result added.
+ ! new_exprs: Output array of expressions with elements removed and new_expr added.
+ !-----------------------------------------------------------------------
+ subroutine create_new_arrays(nums, exprs, idx1, idx2, result, new_expr, new_nums, new_exprs)
+ implicit none
+ real, intent(in) :: nums(:) ! Input: Array of numbers
+ character(len=expr_len), intent(in) :: exprs(:) ! Input: Array of expressions
+ integer, intent(in) :: idx1, idx2 ! Input: Indices of elements to remove
+ real, intent(in) :: result ! Input: Result of the operation
+ character(len=expr_len), intent(in) :: new_expr ! Input: New expression
+ real, allocatable, intent(out) :: new_nums(:) ! Output: New array of numbers
+ character(len=expr_len), allocatable, intent(out) :: new_exprs(:) ! Output: New array of expressions
+ integer :: i, j, n ! Loop counters and size of input arrays
+
+ n = size(nums)
+ allocate (new_nums(n - 1))
+ allocate (new_exprs(n - 1))
+
+ j = 0
+ do i = 1, n
+ if (i /= idx1 .and. i /= idx2) then
+ j = j + 1
+ new_nums(j) = nums(i)
+ new_exprs(j) = exprs(i)
+ end if
+ end do
+
+ ! Add the result of the operation to the new arrays
+ new_nums(n - 1) = result
+ new_exprs(n - 1) = new_expr
+ end subroutine create_new_arrays
+
+ !-----------------------------------------------------------------------
+ ! Subroutine: update_progress_bar
+ ! Description:
+ ! Updates and displays the horizontal percentage-based progress bar.
+ ! Arguments:
+ ! None
+ !-----------------------------------------------------------------------
+ subroutine update_progress_bar()
+ implicit none
+ real :: percentage
+ integer :: filled_length
+ character(len=progress_bar_width) :: bar
+ integer :: int_percentage
+
+ if (total_calls == 0 .or. .not. show_progress) return ! Avoid division by zero and check the flag
+
+ percentage = real(completed_calls) / real(total_calls) * 100.0
+
+ ! Ensure percentage does not exceed 100%
+ if (percentage > 100.0) percentage = 100.0
+
+ ! Calculate integer percentage
+ int_percentage = int(percentage)
+
+ ! Update progress bar only when percentage increases by at least 1%
+ if (int_percentage > last_percentage) then
+ last_percentage = int_percentage
+
+ ! Calculate the filled length of the progress bar
+ filled_length = min(int(percentage / 100.0 * progress_bar_width), progress_bar_width)
+
+ ! Construct the progress bar string
+ bar = repeat('=', filled_length)
+ if (filled_length < progress_bar_width) then
+ bar = bar//'>'//repeat(' ', progress_bar_width - filled_length - 1)
+ end if
+
+ ! Print the progress bar and integer percentage
+ write (*, '(A, F4.1, A)', advance='no') carriage_return//'['//bar//'] ', percentage, '%'
+ call flush (0) ! Ensure output is displayed immediately
+ end if
+ end subroutine update_progress_bar
+
+ !-----------------------------------------------------------------------
+ ! Recursive Subroutine: solve_24
+ ! Description:
+ ! Recursively solves the 24 game by trying all possible operations.
+ ! Utilizes OpenMP tasks for parallelization.
+ ! Arguments:
+ ! nums: Array of numbers to use in the game.
+ ! exprs: Array of string expressions representing the numbers.
+ ! found: Logical flag indicating if a solution has been found.
+ !-----------------------------------------------------------------------
+ recursive subroutine solve_24(nums, exprs, found)
+ use omp_lib
+ implicit none
+ real, intent(in) :: nums(:) ! Input: Array of numbers
+ character(len=expr_len), intent(in) :: exprs(:) ! Input: Array of expressions
+ logical, intent(inout) :: found ! Input/Output: Flag indicating if a solution is found
+ integer :: n ! Size of the input arrays
+ integer :: i, j, op ! Loop counters
+ real :: a, b, result ! Temporary variables for calculations
+ real, allocatable :: new_nums(:) ! Temp array to store numbers after an operation
+ character(len=expr_len), allocatable :: new_exprs(:) ! Temp array to store expressions after an operation
+ character(len=expr_len) :: expr_a, expr_b, new_expr ! Temp variables for expressions
+
+ n = size(nums)
+
+ ! Increment the completed_calls counter and update progress bar
+ if (show_progress) then
+ !$omp atomic
+ completed_calls = completed_calls + 1
+ call update_progress_bar()
+ end if
+
+ ! If a solution is found, return
+ if (found) return
+
+ ! Base case: If only one number is left, check if it is 24
+ if (n == 1) then
+ if (abs(nums(1) - 24.0) < 1e-4) then
+ if (show_progress) then
+ write (*, '(A, F5.1, A)', advance='no') carriage_return//'['//repeat('=', progress_bar_width)//'] ', 100.0, '%'
+ write (*, '(A)') '' ! Insert a blank line
+ end if
+ !$omp critical
+ write (*, '(A, A, A, F10.7, A)') 'Solution found:', trim(exprs(1)), '= 24 (', nums(1), ')'
+ found = .true.
+ !$omp end critical
+ end if
+ return
+ end if
+
+ ! Iterate over all pairs of numbers
+ do i = 1, n - 1
+ do j = i + 1, n
+ a = nums(i)
+ b = nums(j)
+ expr_a = exprs(i)
+ expr_b = exprs(j)
+
+ ! Iterate over all operators
+ do op = 1, 4
+ ! Avoid division by zero
+ if ((op == 4 .and. abs(b) < 1e-6)) cycle
+
+ ! Perform the operation and create the new expression
+ select case (op)
+ case (1)
+ result = a + b
+ new_expr = '('//trim(expr_a)//'+'//trim(expr_b)//')'
+ case (2)
+ result = a - b
+ new_expr = '('//trim(expr_a)//'-'//trim(expr_b)//')'
+ case (3)
+ result = a * b
+ new_expr = '('//trim(expr_a)//'*'//trim(expr_b)//')'
+ case (4)
+ result = a / b
+ new_expr = '('//trim(expr_a)//'/'//trim(expr_b)//')'
+ end select
+
+ ! Create new arrays with the selected numbers removed
+ call create_new_arrays(nums, exprs, i, j, result, new_expr, new_nums, new_exprs)
+
+ ! For the first few recursion levels, create parallel tasks
+ if (n >= 6 .and. omp_get_level() < 2) then
+ !$omp task shared(found) firstprivate(new_nums, new_exprs)
+ call solve_24(new_nums, new_exprs, found)
+ !$omp end task
+ else
+ call solve_24(new_nums, new_exprs, found)
+ end if
+
+ ! If a solution is found, deallocate memory and return
+ if (found) then
+ deallocate (new_nums)
+ deallocate (new_exprs)
+ return
+ end if
+
+ ! Handle commutative operations only once
+ if (op == 1 .or. op == 3) cycle
+
+ ! Swap operands for subtraction and division
+ if (op == 2 .or. op == 4) then
+ if (op == 4 .and. abs(a) < 1e-6) cycle ! Avoid division by zero
+
+ select case (op)
+ case (2)
+ result = b - a
+ new_expr = '('//trim(expr_b)//'-'//trim(expr_a)//')'
+ case (4)
+ result = b / a
+ new_expr = '('//trim(expr_b)//'/'//trim(expr_a)//')'
+ end select
+
+ ! Create new arrays with the selected numbers removed
+ call create_new_arrays(nums, exprs, i, j, result, new_expr, new_nums, new_exprs)
+
+ ! For the first few recursion levels, create parallel tasks
+ if (n >= 6 .and. omp_get_level() < 2) then
+ !$omp task shared(found) firstprivate(new_nums, new_exprs)
+ call solve_24(new_nums, new_exprs, found)
+ !$omp end task
+ else
+ ! Recursively call the solve_24 function with the new arrays
+ call solve_24(new_nums, new_exprs, found)
+ end if
+
+ ! If a solution is found, deallocate memory and return
+ if (found) then
+ deallocate (new_nums)
+ deallocate (new_exprs)
+ return
+ end if
+ end if
+
+ end do ! End of operator loop
+ end do ! End of j loop
+ end do ! End of i loop
+ end subroutine solve_24
+
+end module game24_module
+
+program game24
+ use game24_module
+ implicit none
+
+ ! Declare variables
+ integer :: maxn ! Number of numbers to be entered by the user
+ real, allocatable :: numbers(:) ! Array to store the numbers entered by the user
+ character(len=expr_len), allocatable :: expressions(:) ! Array to store the expressions
+ integer :: i, ios ! Loop counter and I/O status
+ logical :: found_solution ! Flag to indicate if a solution was found
+ character(len=10) :: user_input ! Variable to store user input
+ character(len=1) :: play_again ! Variable to store the user's decision
+
+ do ! Game loop to allow restarting the game
+
+ ! Prompt the user for the number of numbers to use in the game
+ do
+ write (*, '(A,I0,A)', advance='no') 'Enter the number of numbers (1 to ', max_limit, '): '
+ read (*, *, iostat=ios) maxn
+
+ ! Check if the input is valid
+ if (ios /= 0) then
+ write (*, '(A,I0,A)') 'Invalid input. Please enter an integer between 1 and ', max_limit, '.'
+ cycle
+ end if
+
+ ! Validate the input: Ensure the number of numbers is within the valid range
+ if (maxn < 1 .or. maxn > max_limit) then
+ write (*, '(A,I0,A)') 'Error: Number of numbers must be between 1 and ', max_limit, '. Try again.'
+ cycle
+ end if
+
+ exit ! Exit loop if the input is valid
+ end do
+
+ ! Allocate memory for the arrays based on the number of numbers
+ allocate (numbers(maxn))
+ allocate (expressions(maxn))
+
+ ! Prompt the user to enter the numbers or card values
+ write (*, '(A,I0,A)') 'Enter ', maxn, ' numbers or card values (A=1, J=11, Q=12, K=13).'
+ do i = 1, maxn
+ do
+ ! Prompt the user to enter a number or card value
+ write (*, '(A,I0,A)', advance='no') 'Enter value for card ', i, ': '
+ read (*, '(A)', iostat=ios) user_input
+
+ ! Check if input is an integer or valid card symbol (A, J, Q, K)
+ call convert_to_number(user_input, numbers(i), ios)
+
+ ! If the input is valid, exit loop
+ if (ios == 0) exit
+
+ ! Invalid input: prompt the user to try again
+ write (*, '(A)') 'Invalid input. Please enter an integer or valid card symbol (A, J, Q, K).'
+ end do
+
+ ! Convert the number to a string expression and remove trailing zeros
+ write (expressions(i), '(F0.2)') numbers(i)
+ call remove_decimal_zeros(expressions(i), expressions(i))
+ end do
+
+ ! Initialize the solution flag to false
+ found_solution = .false.
+
+ ! Assign precomputed total_calls based on n
+ select case (maxn)
+ case (6)
+ total_calls = total_calls_n6
+ case (7)
+ total_calls = total_calls_n7
+ case (8)
+ total_calls = total_calls_n8
+ case default
+ total_calls = 0
+ end select
+
+ ! Decide whether to show progress bar based on n
+ if (maxn >= 6) then
+ show_progress = .true.
+ completed_calls = 0
+ last_percentage = -1
+
+ ! Initialize progress bar display
+ write (*, '(A)', advance='no') '['//repeat(' ', progress_bar_width)//'] 0%'
+ call flush (0) ! Ensure the output is displayed immediately
+ else
+ show_progress = .false.
+ end if
+
+ ! Start parallel region
+ !$omp parallel
+ !$omp single nowait
+ call solve_24(numbers, expressions, found_solution)
+ !$omp end single
+ !$omp end parallel
+
+ ! After search completes, ensure the progress bar reaches 100% if shown
+ if (show_progress .and. .not. found_solution) then
+ write (*, '(A, A)', advance='no') carriage_return//'['//repeat('=', progress_bar_width)//'] 100% '
+ call flush (0)
+ write (*, '(A)') '' ! Insert a blank line
+ end if
+
+ ! If a solution was found and progress bar is shown, ensure a blank line
+ if (show_progress .and. found_solution) then
+ ! Progress bar already refreshed to 100% and blank line inserted in solve_24
+ end if
+
+ ! If no solution was found, print a message
+ if (.not. found_solution) then
+ write (*, '(A)') 'No valid solution found.'
+ end if
+
+ ! Deallocate the memory used by the arrays
+ deallocate (numbers)
+ deallocate (expressions)
+
+ ! Ask the user if they want to play again
+ if (show_progress) then
+ write (*, '(A)', advance='no') carriage_return//'Play again? (Enter y/n to continue or any other key to exit): '
+ else
+ write (*, '(A)', advance='no') 'Play again? (Enter y/n to continue or any other key to exit): '
+ end if
+ read (*, '(A)') play_again ! Read user input
+
+ ! Check if the user wants to exit
+ if (play_again /= 'y' .and. play_again /= 'Y') exit
+
+ end do ! End of game loop
+
+ write (*, '(A)') 'Exiting the game...'
+
+end program game24
diff --git a/Task/24-game-Solve/FutureBasic/24-game-solve.basic b/Task/24-game-Solve/FutureBasic/24-game-solve.basic
index 5a2f9b5cf2..4f6e1c9984 100644
--- a/Task/24-game-Solve/FutureBasic/24-game-solve.basic
+++ b/Task/24-game-Solve/FutureBasic/24-game-solve.basic
@@ -15,7 +15,6 @@ void local fn eval( t as CFStringRef )
end if
end fn
-
clear local fn work( t as CFStringRef )
Short a, b, c, d, e, f, g
CGFloat n(3)
@@ -44,7 +43,6 @@ clear local fn work( t as CFStringRef )
next : next : next : next
end fn
-
window 1, @"24 Game", ( 0, 0, 250, 250 )
fn work(@"3388")
fn work(@"1346")
diff --git a/Task/24-game-Solve/Julia/24-game-solve.julia b/Task/24-game-Solve/Julia/24-game-solve.jl
similarity index 100%
rename from Task/24-game-Solve/Julia/24-game-solve.julia
rename to Task/24-game-Solve/Julia/24-game-solve.jl
diff --git a/Task/24-game-Solve/Kotlin/24-game-solve.kotlin b/Task/24-game-Solve/Kotlin/24-game-solve.kts
similarity index 100%
rename from Task/24-game-Solve/Kotlin/24-game-solve.kotlin
rename to Task/24-game-Solve/Kotlin/24-game-solve.kts
diff --git a/Task/24-game-Solve/OCaml/24-game-solve.ocaml b/Task/24-game-Solve/OCaml/24-game-solve.ml
similarity index 100%
rename from Task/24-game-Solve/OCaml/24-game-solve.ocaml
rename to Task/24-game-Solve/OCaml/24-game-solve.ml
diff --git a/Task/24-game-Solve/Rust/24-game-solve.rust b/Task/24-game-Solve/Rust/24-game-solve.rs
similarity index 100%
rename from Task/24-game-Solve/Rust/24-game-solve.rust
rename to Task/24-game-Solve/Rust/24-game-solve.rs
diff --git a/Task/24-game-Solve/Scheme/24-game-solve-1.ss b/Task/24-game-Solve/Scheme/24-game-solve-1.scm
similarity index 100%
rename from Task/24-game-Solve/Scheme/24-game-solve-1.ss
rename to Task/24-game-Solve/Scheme/24-game-solve-1.scm
diff --git a/Task/24-game-Solve/Scheme/24-game-solve-2.ss b/Task/24-game-Solve/Scheme/24-game-solve-2.scm
similarity index 100%
rename from Task/24-game-Solve/Scheme/24-game-solve-2.ss
rename to Task/24-game-Solve/Scheme/24-game-solve-2.scm
diff --git a/Task/24-game/Delphi/24-game.delphi b/Task/24-game/Delphi/24-game.pas
similarity index 100%
rename from Task/24-game/Delphi/24-game.delphi
rename to Task/24-game/Delphi/24-game.pas
diff --git a/Task/24-game/EasyLang/24-game.easy b/Task/24-game/EasyLang/24-game.easy
new file mode 100644
index 0000000000..aa12c02486
--- /dev/null
+++ b/Task/24-game/EasyLang/24-game.easy
@@ -0,0 +1,69 @@
+print "Enter an equation in RPN form using all of, and"
+print "only the following single digits which evaluates"
+print "to 24. Only '*', '/', '+' and '-' are allowed:"
+func game .
+ len cnt[] 9
+ write ">> "
+ for i to 4
+ h = random 9
+ write h & " "
+ cnt[h] += 1
+ .
+ print ""
+ s$ = input
+ print s$
+ if s$ = ""
+ return 1
+ .
+ for c$ in strchars s$
+ if c$ = "+" or c$ = "-" or c$ = "*" or c$ = "/"
+ if len st[] < 2
+ print "Stack empty"
+ return 1
+ .
+ if c$ = "+"
+ st[$ - 1] = st[$ - 1] + st[$]
+ elif c$ = "-"
+ st[$ - 1] = st[$ - 1] - st[$]
+ elif c$ = "*"
+ st[$ - 1] = st[$ - 1] * st[$]
+ else
+ st[$ - 1] = st[$ - 1] / st[$]
+ .
+ len st[] -1
+ elif c$ <> " "
+ h = strcode c$ - 48
+ if h < 1 or h > 9
+ print "Wrong command " & c$
+ return 0
+ .
+ if cnt[h] = 0
+ print "Wrong number " & h
+ return 0
+ .
+ cnt[h] -= 1
+ st[] &= h
+ .
+ .
+ for c in cnt[]
+ s += c
+ .
+ if s > 0
+ print "Not all numbers used"
+ return 0
+ .
+ if len st[] > 1
+ print "Calculation not finished"
+ return 0
+ .
+ print st[1]
+ if abs (st[1] - 24) < 1e-10
+ print "Well done"
+ else
+ print "Wrong result"
+ .
+.
+repeat
+ print ""
+ until game = 1
+.
diff --git a/Task/24-game/Elixir/24-game.elixir b/Task/24-game/Elixir/24-game.ex
similarity index 100%
rename from Task/24-game/Elixir/24-game.elixir
rename to Task/24-game/Elixir/24-game.ex
diff --git a/Task/24-game/Julia/24-game.julia b/Task/24-game/Julia/24-game.jl
similarity index 100%
rename from Task/24-game/Julia/24-game.julia
rename to Task/24-game/Julia/24-game.jl
diff --git a/Task/24-game/Kotlin/24-game.kotlin b/Task/24-game/Kotlin/24-game.kts
similarity index 100%
rename from Task/24-game/Kotlin/24-game.kotlin
rename to Task/24-game/Kotlin/24-game.kts
diff --git a/Task/24-game/OCaml/24-game.ocaml b/Task/24-game/OCaml/24-game.ml
similarity index 100%
rename from Task/24-game/OCaml/24-game.ocaml
rename to Task/24-game/OCaml/24-game.ml
diff --git a/Task/24-game/Rust/24-game.rust b/Task/24-game/Rust/24-game.rs
similarity index 100%
rename from Task/24-game/Rust/24-game.rust
rename to Task/24-game/Rust/24-game.rs
diff --git a/Task/24-game/Scheme/24-game.ss b/Task/24-game/Scheme/24-game.scm
similarity index 100%
rename from Task/24-game/Scheme/24-game.ss
rename to Task/24-game/Scheme/24-game.scm
diff --git a/Task/4-rings-or-4-squares-puzzle/Crystal/4-rings-or-4-squares-puzzle.crystal b/Task/4-rings-or-4-squares-puzzle/Crystal/4-rings-or-4-squares-puzzle.cr
similarity index 100%
rename from Task/4-rings-or-4-squares-puzzle/Crystal/4-rings-or-4-squares-puzzle.crystal
rename to Task/4-rings-or-4-squares-puzzle/Crystal/4-rings-or-4-squares-puzzle.cr
diff --git a/Task/4-rings-or-4-squares-puzzle/Julia/4-rings-or-4-squares-puzzle.julia b/Task/4-rings-or-4-squares-puzzle/Julia/4-rings-or-4-squares-puzzle.jl
similarity index 100%
rename from Task/4-rings-or-4-squares-puzzle/Julia/4-rings-or-4-squares-puzzle.julia
rename to Task/4-rings-or-4-squares-puzzle/Julia/4-rings-or-4-squares-puzzle.jl
diff --git a/Task/4-rings-or-4-squares-puzzle/Kotlin/4-rings-or-4-squares-puzzle.kotlin b/Task/4-rings-or-4-squares-puzzle/Kotlin/4-rings-or-4-squares-puzzle.kts
similarity index 100%
rename from Task/4-rings-or-4-squares-puzzle/Kotlin/4-rings-or-4-squares-puzzle.kotlin
rename to Task/4-rings-or-4-squares-puzzle/Kotlin/4-rings-or-4-squares-puzzle.kts
diff --git a/Task/4-rings-or-4-squares-puzzle/OCaml/4-rings-or-4-squares-puzzle.ocaml b/Task/4-rings-or-4-squares-puzzle/OCaml/4-rings-or-4-squares-puzzle.ml
similarity index 100%
rename from Task/4-rings-or-4-squares-puzzle/OCaml/4-rings-or-4-squares-puzzle.ocaml
rename to Task/4-rings-or-4-squares-puzzle/OCaml/4-rings-or-4-squares-puzzle.ml
diff --git a/Task/4-rings-or-4-squares-puzzle/Rust/4-rings-or-4-squares-puzzle.rust b/Task/4-rings-or-4-squares-puzzle/Rust/4-rings-or-4-squares-puzzle.rs
similarity index 100%
rename from Task/4-rings-or-4-squares-puzzle/Rust/4-rings-or-4-squares-puzzle.rust
rename to Task/4-rings-or-4-squares-puzzle/Rust/4-rings-or-4-squares-puzzle.rs
diff --git a/Task/4-rings-or-4-squares-puzzle/Scheme/4-rings-or-4-squares-puzzle.ss b/Task/4-rings-or-4-squares-puzzle/Scheme/4-rings-or-4-squares-puzzle.scm
similarity index 100%
rename from Task/4-rings-or-4-squares-puzzle/Scheme/4-rings-or-4-squares-puzzle.ss
rename to Task/4-rings-or-4-squares-puzzle/Scheme/4-rings-or-4-squares-puzzle.scm
diff --git a/Task/9-billion-names-of-God-the-integer/ALGOL-68/9-billion-names-of-god-the-integer.alg b/Task/9-billion-names-of-God-the-integer/ALGOL-68/9-billion-names-of-god-the-integer.alg
new file mode 100644
index 0000000000..857c2ecdef
--- /dev/null
+++ b/Task/9-billion-names-of-God-the-integer/ALGOL-68/9-billion-names-of-god-the-integer.alg
@@ -0,0 +1,41 @@
+INT number of rows = 123;
+MODE NAMEG = LONG INT;
+
+
+[ number of rows ]REF[]NAMEG c;
+[ number ofrows ] NAMEG names;
+FOR i TO UPB names DO
+ names[ i ] := 0;
+ c[ i ] := HEAP [ i ]NAMEG;
+ FOR j TO i DO c[ i ][ j ] := 0 OD
+OD;
+
+FOR n TO UPB names DO
+ FOR col TO n DO
+ c[ n ][ col ] := IF col = 1 THEN 1
+ ELIF col = 2 THEN n OVER 2
+ ELIF col >= n - 1 THEN 1
+ ELIF ( n - col ) < col THEN names[ n - col ]
+ ELIF ( n - col ) = col AND NOT ODD n THEN names[ n - col ]
+ ELSE
+ NAMEG partial sum := 0;
+ FOR k TO col DO partial sum +:= c[ n - col ][ k ] OD;
+ partial sum
+ FI
+ OD;
+ names[ n ]:= 0;
+ FOR k TO n DO names[ n ] +:= c[ n ][ k ] OD
+; IF n MOD 200 = 0 THEN print( ( "...", whole( n, 0 ), newline ) ) FI
+OD;
+
+# display the first 25 rows of the triangle #
+FOR n TO 25 DO
+ print( ( "(", whole( names[ n ], -6 ), ")", whole( n, -3 ), ":" ) );
+ FOR col TO n DO
+ print( ( " ", whole( c[ n ][ col ], -3 ) ) )
+ OD;
+ print( ( newline ) )
+OD;
+
+print( ( " 23: ", whole( names[ 23 ], 0 ), newline ) );
+print( ( " 123: ", whole( names[ 123 ], 0 ), newline ) )
diff --git a/Task/9-billion-names-of-God-the-integer/Crystal/9-billion-names-of-god-the-integer.crystal b/Task/9-billion-names-of-God-the-integer/Crystal/9-billion-names-of-god-the-integer.cr
similarity index 100%
rename from Task/9-billion-names-of-God-the-integer/Crystal/9-billion-names-of-god-the-integer.crystal
rename to Task/9-billion-names-of-God-the-integer/Crystal/9-billion-names-of-god-the-integer.cr
diff --git a/Task/9-billion-names-of-God-the-integer/Elixir/9-billion-names-of-god-the-integer.elixir b/Task/9-billion-names-of-God-the-integer/Elixir/9-billion-names-of-god-the-integer.ex
similarity index 100%
rename from Task/9-billion-names-of-God-the-integer/Elixir/9-billion-names-of-god-the-integer.elixir
rename to Task/9-billion-names-of-God-the-integer/Elixir/9-billion-names-of-god-the-integer.ex
diff --git a/Task/9-billion-names-of-God-the-integer/Julia/9-billion-names-of-god-the-integer.julia b/Task/9-billion-names-of-God-the-integer/Julia/9-billion-names-of-god-the-integer.jl
similarity index 100%
rename from Task/9-billion-names-of-God-the-integer/Julia/9-billion-names-of-god-the-integer.julia
rename to Task/9-billion-names-of-God-the-integer/Julia/9-billion-names-of-god-the-integer.jl
diff --git a/Task/9-billion-names-of-God-the-integer/Kotlin/9-billion-names-of-god-the-integer.kotlin b/Task/9-billion-names-of-God-the-integer/Kotlin/9-billion-names-of-god-the-integer.kts
similarity index 100%
rename from Task/9-billion-names-of-God-the-integer/Kotlin/9-billion-names-of-god-the-integer.kotlin
rename to Task/9-billion-names-of-God-the-integer/Kotlin/9-billion-names-of-god-the-integer.kts
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.ml
similarity index 100%
rename from Task/9-billion-names-of-God-the-integer/OCaml/9-billion-names-of-god-the-integer.ocaml
rename to Task/9-billion-names-of-God-the-integer/OCaml/9-billion-names-of-god-the-integer.ml
diff --git a/Task/9-billion-names-of-God-the-integer/Rust/9-billion-names-of-god-the-integer.rust b/Task/9-billion-names-of-God-the-integer/Rust/9-billion-names-of-god-the-integer.rs
similarity index 100%
rename from Task/9-billion-names-of-God-the-integer/Rust/9-billion-names-of-god-the-integer.rust
rename to Task/9-billion-names-of-God-the-integer/Rust/9-billion-names-of-god-the-integer.rs
diff --git a/Task/9-billion-names-of-God-the-integer/Scheme/9-billion-names-of-god-the-integer.ss b/Task/9-billion-names-of-God-the-integer/Scheme/9-billion-names-of-god-the-integer.scm
similarity index 100%
rename from Task/9-billion-names-of-God-the-integer/Scheme/9-billion-names-of-god-the-integer.ss
rename to Task/9-billion-names-of-God-the-integer/Scheme/9-billion-names-of-god-the-integer.scm
diff --git a/Task/99-bottles-of-beer/Crystal/99-bottles-of-beer.crystal b/Task/99-bottles-of-beer/Crystal/99-bottles-of-beer.cr
similarity index 100%
rename from Task/99-bottles-of-beer/Crystal/99-bottles-of-beer.crystal
rename to Task/99-bottles-of-beer/Crystal/99-bottles-of-beer.cr
diff --git a/Task/99-bottles-of-beer/EMal/99-bottles-of-beer.emal b/Task/99-bottles-of-beer/EMal/99-bottles-of-beer.emal
index 7f8bf2daa2..4993f8c5ee 100644
--- a/Task/99-bottles-of-beer/EMal/99-bottles-of-beer.emal
+++ b/Task/99-bottles-of-beer/EMal/99-bottles-of-beer.emal
@@ -1,30 +1,28 @@
type NinetynineBottles
-int DEFAULT_BOTTLES_COUNT = 99
+int DEFAULT_BOTTLES_COUNT ← 99
model
int initialBottlesCount, bottlesCount
- new by int =bottlesCount
- me.initialBottlesCount = bottlesCount
+ new by int ←bottlesCount
+ me.initialBottlesCount ← bottlesCount
end
- fun subject = <|when(me.bottlesCount == 1, "bottle", "bottles")
- fun bottles = <|when(me.bottlesCount == 0, "no more", text!me.bottlesCount)
- fun goToWall = void by block
- text line = me.bottles() + " " + me.subject() + " of beer on the wall, " +
+ fun subject ← <|when(me.bottlesCount æ 1, "bottle", "bottles")
+ fun bottles ← <|when(me.bottlesCount æ 0, "no more", text!me.bottlesCount)
+ fun goToWall ← void by block
+ text line ← me.bottles() + " " + me.subject() + " of beer on the wall, " +
me.bottles() + " " + me.subject() + " of beer."
- if me.bottlesCount == 0 do line[0] = line[0].upper() end # text can be modified
+ if me.bottlesCount æ 0 do line[0] ← line[0].upper() end # text can be modified
writeLine(line)
end
- fun takeOne = logic by block
+ fun takeOne ← logic by block
if --me.bottlesCount < 0 do return false end # cannot take a beer down
writeLine("Take one down and pass it around, " + me.bottles() +
" " + me.subject() + " of beer on the wall.")
writeLine()
return true
end
- fun goToStore = void by block
- writeLine("Go to the store and buy some more, " + me.initialBottlesCount +
- " bottles of beer on the wall.")
- end
- fun play = void by block
+ fun goToStore ← <|writeLine("Go to the store and buy some more, " +
+ me.initialBottlesCount + " bottles of beer on the wall.")
+ fun play ← void by block
for ever
me.goToWall()
if not me.takeOne()
diff --git a/Task/99-bottles-of-beer/Elixir/99-bottles-of-beer.elixir b/Task/99-bottles-of-beer/Elixir/99-bottles-of-beer.ex
similarity index 100%
rename from Task/99-bottles-of-beer/Elixir/99-bottles-of-beer.elixir
rename to Task/99-bottles-of-beer/Elixir/99-bottles-of-beer.ex
diff --git a/Task/99-bottles-of-beer/Euphoria/99-bottles-of-beer-1.euphoria b/Task/99-bottles-of-beer/Euphoria/99-bottles-of-beer-1.ex
similarity index 100%
rename from Task/99-bottles-of-beer/Euphoria/99-bottles-of-beer-1.euphoria
rename to Task/99-bottles-of-beer/Euphoria/99-bottles-of-beer-1.ex
diff --git a/Task/99-bottles-of-beer/Euphoria/99-bottles-of-beer-2.euphoria b/Task/99-bottles-of-beer/Euphoria/99-bottles-of-beer-2.ex
similarity index 100%
rename from Task/99-bottles-of-beer/Euphoria/99-bottles-of-beer-2.euphoria
rename to Task/99-bottles-of-beer/Euphoria/99-bottles-of-beer-2.ex
diff --git a/Task/99-bottles-of-beer/Euphoria/99-bottles-of-beer-3.euphoria b/Task/99-bottles-of-beer/Euphoria/99-bottles-of-beer-3.ex
similarity index 100%
rename from Task/99-bottles-of-beer/Euphoria/99-bottles-of-beer-3.euphoria
rename to Task/99-bottles-of-beer/Euphoria/99-bottles-of-beer-3.ex
diff --git a/Task/99-bottles-of-beer/Julia/99-bottles-of-beer-1.julia b/Task/99-bottles-of-beer/Julia/99-bottles-of-beer-1.jl
similarity index 100%
rename from Task/99-bottles-of-beer/Julia/99-bottles-of-beer-1.julia
rename to Task/99-bottles-of-beer/Julia/99-bottles-of-beer-1.jl
diff --git a/Task/99-bottles-of-beer/Julia/99-bottles-of-beer-2.julia b/Task/99-bottles-of-beer/Julia/99-bottles-of-beer-2.jl
similarity index 100%
rename from Task/99-bottles-of-beer/Julia/99-bottles-of-beer-2.julia
rename to Task/99-bottles-of-beer/Julia/99-bottles-of-beer-2.jl
diff --git a/Task/99-bottles-of-beer/Julia/99-bottles-of-beer-3.julia b/Task/99-bottles-of-beer/Julia/99-bottles-of-beer-3.jl
similarity index 100%
rename from Task/99-bottles-of-beer/Julia/99-bottles-of-beer-3.julia
rename to Task/99-bottles-of-beer/Julia/99-bottles-of-beer-3.jl
diff --git a/Task/99-bottles-of-beer/Kotlin/99-bottles-of-beer.kotlin b/Task/99-bottles-of-beer/Kotlin/99-bottles-of-beer.kts
similarity index 100%
rename from Task/99-bottles-of-beer/Kotlin/99-bottles-of-beer.kotlin
rename to Task/99-bottles-of-beer/Kotlin/99-bottles-of-beer.kts
diff --git a/Task/99-bottles-of-beer/Lua/99-bottles-of-beer-4.lua b/Task/99-bottles-of-beer/Lua/99-bottles-of-beer-4.lua
new file mode 100644
index 0000000000..5fdc0aa064
--- /dev/null
+++ b/Task/99-bottles-of-beer/Lua/99-bottles-of-beer-4.lua
@@ -0,0 +1,13 @@
+local bottlesCount = 99
+local word = function(n) return n == 1 and "bottle" or "bottles" end
+while bottlesCount do
+ print (string.format("%d %s of beer on the wall, %d %s of beer", bottlesCount, word(bottlesCount),bottlesCount, word(bottlesCount)))
+ print ("You take one down, pass it around, ")
+ bottlesCount = bottlesCount - 1
+ if bottlesCount > 0 then
+ print (string.format("%d %s of beer on the wall", bottlesCount, word(bottlesCount)))
+ else
+ print ("No more bottles of beer on the wall.")
+ end
+ if bottlesCount == 0 then bottlesCount = false end -- coud use reserved word break instead
+end
diff --git a/Task/99-bottles-of-beer/Lua/99-bottles-of-beer-5.lua b/Task/99-bottles-of-beer/Lua/99-bottles-of-beer-5.lua
new file mode 100644
index 0000000000..8bc69c1a98
--- /dev/null
+++ b/Task/99-bottles-of-beer/Lua/99-bottles-of-beer-5.lua
@@ -0,0 +1,10 @@
+word = function(n) return n == 1 and "bottle" or "bottles" end
+
+coldOne = function (bottlesCount)
+ if bottlesCount < 1 then return print ("drunk, eh?") end
+ if bottlesCount == 1 then return print ("1 bottle of beer and it's mine!") end
+ print (string.format("%d %s of beer on the wall, %d %s of beer", bottlesCount, word(bottlesCount),bottlesCount, word(bottlesCount)))
+ print ("You take one down, pass it around, ")
+ print (string.format("%d %s of beer on the wall", bottlesCount-1, word(bottlesCount-1)))
+ coldOne ( bottlesCount - 1)
+end
diff --git a/Task/99-bottles-of-beer/OCaml/99-bottles-of-beer-1.ocaml b/Task/99-bottles-of-beer/OCaml/99-bottles-of-beer-1.ml
similarity index 100%
rename from Task/99-bottles-of-beer/OCaml/99-bottles-of-beer-1.ocaml
rename to Task/99-bottles-of-beer/OCaml/99-bottles-of-beer-1.ml
diff --git a/Task/99-bottles-of-beer/OCaml/99-bottles-of-beer-2.ocaml b/Task/99-bottles-of-beer/OCaml/99-bottles-of-beer-2.ml
similarity index 100%
rename from Task/99-bottles-of-beer/OCaml/99-bottles-of-beer-2.ocaml
rename to Task/99-bottles-of-beer/OCaml/99-bottles-of-beer-2.ml
diff --git a/Task/99-bottles-of-beer/OCaml/99-bottles-of-beer-3.ocaml b/Task/99-bottles-of-beer/OCaml/99-bottles-of-beer-3.ml
similarity index 100%
rename from Task/99-bottles-of-beer/OCaml/99-bottles-of-beer-3.ocaml
rename to Task/99-bottles-of-beer/OCaml/99-bottles-of-beer-3.ml
diff --git a/Task/99-bottles-of-beer/OCaml/99-bottles-of-beer-4.ocaml b/Task/99-bottles-of-beer/OCaml/99-bottles-of-beer-4.ml
similarity index 100%
rename from Task/99-bottles-of-beer/OCaml/99-bottles-of-beer-4.ocaml
rename to Task/99-bottles-of-beer/OCaml/99-bottles-of-beer-4.ml
diff --git a/Task/99-bottles-of-beer/Red/99-bottles-of-beer.red b/Task/99-bottles-of-beer/Red/99-bottles-of-beer-1.red
similarity index 100%
rename from Task/99-bottles-of-beer/Red/99-bottles-of-beer.red
rename to Task/99-bottles-of-beer/Red/99-bottles-of-beer-1.red
diff --git a/Task/99-bottles-of-beer/Red/99-bottles-of-beer-2.red b/Task/99-bottles-of-beer/Red/99-bottles-of-beer-2.red
new file mode 100644
index 0000000000..e01dbbd378
--- /dev/null
+++ b/Task/99-bottles-of-beer/Red/99-bottles-of-beer-2.red
@@ -0,0 +1,21 @@
+w: 99
+while [w][
+ print [
+ reform [
+ w x: either 1 < w ["bottles"] ["bottle"] y: "of beer" z: "on the wall" ","
+ w x y
+ ]
+ ]
+ w: w - 1
+ if w = 1 [remove at x length? x]
+ print [
+ "take one down pass it around, "
+ either 0 < w [
+ reform [w x y z]
+ ][
+ w: false reform [
+ "no more bottles " y rejoin [z "."]
+ ]
+ ]
+ ]
+]
diff --git a/Task/99-bottles-of-beer/Red/99-bottles-of-beer-3.red b/Task/99-bottles-of-beer/Red/99-bottles-of-beer-3.red
new file mode 100644
index 0000000000..67973dc127
--- /dev/null
+++ b/Task/99-bottles-of-beer/Red/99-bottles-of-beer-3.red
@@ -0,0 +1,21 @@
+cold-one?: function [
+ count [integer!]
+][
+ case [
+ count < 1 [return print "drunk, eh?"]
+ count = 1 [print "1 bottle of beer and it's mine." ]
+ 'otherwise [
+ print [count x: "bottles of beer" y: "on the wall" ","
+ count x
+ ]
+ print [
+ "take one down pass it around, "
+ z: (-1 + count)
+ either z = 1 [replace x "s" ""][x]
+ y
+ ]
+ ]
+ ]
+ cold-one? -1 + count
+
+]
diff --git a/Task/99-bottles-of-beer/Rust/99-bottles-of-beer-1.rust b/Task/99-bottles-of-beer/Rust/99-bottles-of-beer-1.rs
similarity index 100%
rename from Task/99-bottles-of-beer/Rust/99-bottles-of-beer-1.rust
rename to Task/99-bottles-of-beer/Rust/99-bottles-of-beer-1.rs
diff --git a/Task/99-bottles-of-beer/Rust/99-bottles-of-beer-2.rust b/Task/99-bottles-of-beer/Rust/99-bottles-of-beer-2.rs
similarity index 100%
rename from Task/99-bottles-of-beer/Rust/99-bottles-of-beer-2.rust
rename to Task/99-bottles-of-beer/Rust/99-bottles-of-beer-2.rs
diff --git a/Task/99-bottles-of-beer/Scheme/99-bottles-of-beer.ss b/Task/99-bottles-of-beer/Scheme/99-bottles-of-beer.scm
similarity index 100%
rename from Task/99-bottles-of-beer/Scheme/99-bottles-of-beer.ss
rename to Task/99-bottles-of-beer/Scheme/99-bottles-of-beer.scm
diff --git a/Task/99-bottles-of-beer/Tailspin/99-bottles-of-beer.tailspin b/Task/99-bottles-of-beer/Tailspin/99-bottles-of-beer-1.tailspin
similarity index 100%
rename from Task/99-bottles-of-beer/Tailspin/99-bottles-of-beer.tailspin
rename to Task/99-bottles-of-beer/Tailspin/99-bottles-of-beer-1.tailspin
diff --git a/Task/99-bottles-of-beer/Tailspin/99-bottles-of-beer-2.tailspin b/Task/99-bottles-of-beer/Tailspin/99-bottles-of-beer-2.tailspin
new file mode 100644
index 0000000000..2925e02e15
--- /dev/null
+++ b/Task/99-bottles-of-beer/Tailspin/99-bottles-of-beer-2.tailspin
@@ -0,0 +1,16 @@
+sayBottleCount templates
+ when <|=1> do
+ '1 bottle' !
+ when <|=0> do
+ 'No bottles' !
+ otherwise
+ '$; bottles' !
+end sayBottleCount
+
+'$:99..1:-1 ->
+'$->sayBottleCount; of beer on the wall,
+$->sayBottleCount; of beer.
+Take one down, pass it around,
+$ - 1 -> sayBottleCount; of beer on the wall.
+
+';' !
diff --git a/Task/99-bottles-of-beer/YAMLScript/99-bottles-of-beer-1.ys b/Task/99-bottles-of-beer/YAMLScript/99-bottles-of-beer-1.ys
new file mode 100644
index 0000000000..d951447c6d
--- /dev/null
+++ b/Task/99-bottles-of-beer/YAMLScript/99-bottles-of-beer-1.ys
@@ -0,0 +1,16 @@
+!yamlscript/v0
+
+defn main(number=99):
+ :: Print the verses to "99 Bottles of Beer"
+ each num (number .. 1):
+ say: |
+ $bottles(num) of beer on the wall,
+ $bottles(num) of beer.
+ Take one down, pass it around.
+ $bottles(num.--) of beer on the wall.
+
+defn bottles(n):
+ condp eq n:
+ 0 :: No more bottles
+ 1 :: 1 bottle
+ else : "$n bottles"
diff --git a/Task/99-bottles-of-beer/YAMLScript/99-bottles-of-beer-2.ys b/Task/99-bottles-of-beer/YAMLScript/99-bottles-of-beer-2.ys
new file mode 100644
index 0000000000..d830a6c4a7
--- /dev/null
+++ b/Task/99-bottles-of-beer/YAMLScript/99-bottles-of-beer-2.ys
@@ -0,0 +1,9 @@
+!yamlscript/v0
+
+defn main(number=99):
+ each num (number .. 1):
+ say: |
+ $num bottles of beer on the wall,
+ $num bottles of beer.
+ Take one down, pass it around.
+ $(num.--) bottles of beer on the wall.
diff --git a/Task/99-bottles-of-beer/YAMLScript/99-bottles-of-beer.ys b/Task/99-bottles-of-beer/YAMLScript/99-bottles-of-beer.ys
deleted file mode 100644
index 4aa8dbc7b3..0000000000
--- a/Task/99-bottles-of-beer/YAMLScript/99-bottles-of-beer.ys
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/usr/bin/env ys-0
-
-# Print the verses to "99 Bottles of Beer"
-#
-# usage:
-# ys 99-bottles.ys []
-
-defn main(number=99):
- each [n (number .. 1)]:
- say: paragraph(n)
-
-defn paragraph(num): |
- $bottles(num) of beer on the wall,
- $bottles(num) of beer.
- Take one down, pass it around.
- $bottles(num - 1) of beer on the wall.
-
-defn bottles(n):
- cond:
- n == 0 : 'No more bottles'
- n == 1 : '1 bottle'
- => : "$n bottles"
diff --git a/Task/A+B/Crystal/a+b-1.crystal b/Task/A+B/Crystal/a+b-1.cr
similarity index 100%
rename from Task/A+B/Crystal/a+b-1.crystal
rename to Task/A+B/Crystal/a+b-1.cr
diff --git a/Task/A+B/Crystal/a+b-2.crystal b/Task/A+B/Crystal/a+b-2.cr
similarity index 100%
rename from Task/A+B/Crystal/a+b-2.crystal
rename to Task/A+B/Crystal/a+b-2.cr
diff --git a/Task/A+B/Delphi/a+b.delphi b/Task/A+B/Delphi/a+b.pas
similarity index 100%
rename from Task/A+B/Delphi/a+b.delphi
rename to Task/A+B/Delphi/a+b.pas
diff --git a/Task/A+B/EMal/a+b.emal b/Task/A+B/EMal/a+b.emal
index c2e2652cab..22106f56f5 100644
--- a/Task/A+B/EMal/a+b.emal
+++ b/Task/A+B/EMal/a+b.emal
@@ -1,17 +1,15 @@
-fun main = int by List args
- text input = when(args.length == 1, args[0], ask(text, "Enter n integers separated by a space: "))
+fun main ← int by List args
+ text input ← when(args.length æ 1, args[0], ask(text, "Enter n integers separated by a space: "))
int sum, count
for each text word in input.split(" ")
- word = word.trim()
+ word ← word.trim()
if word.isEmpty() do continue end # ignore empty words
- int nr = int!word # this can raise an exception
- if abs(nr) > 1000
- Event.error(0, "Integers must be in the interval [-1000, 1000]").raise()
- end
+ int nr ← int!word # this can raise an exception
+ if abs(nr) > 1000 do error(0, "Integers must be in the interval [-1000, 1000]") end
sum += nr
++count
end
- if count < 2 do Event.error(1, "At least two integers must be provided").raise() end
+ if count < 2 do error(1, "At least two integers must be provided") end
writeLine("The sum of " + count + " integers is: " + sum)
return 0
end
diff --git a/Task/A+B/Ed/a+b.ed b/Task/A+B/Ed/a+b.ed
new file mode 100644
index 0000000000..fdc4ec064b
--- /dev/null
+++ b/Task/A+B/Ed/a+b.ed
@@ -0,0 +1,101 @@
+H
+g/[^0-9]{1,}/s///g
+,p
+# decimal -> unary
+g/^0+([0-9])/s//\1/
+g/^9([0-9]*)(i*)/s//\1\2\2\2\2\2\2\2\2\2\2iiiiiiiii/
+g/^8([0-9]*)(i*)/s//\1\2\2\2\2\2\2\2\2\2\2iiiiiiii/
+g/^7([0-9]*)(i*)/s//\1\2\2\2\2\2\2\2\2\2\2iiiiiii/
+g/^6([0-9]*)(i*)/s//\1\2\2\2\2\2\2\2\2\2\2iiiiii/
+g/^5([0-9]*)(i*)/s//\1\2\2\2\2\2\2\2\2\2\2iiiii/
+g/^4([0-9]*)(i*)/s//\1\2\2\2\2\2\2\2\2\2\2iiii/
+g/^3([0-9]*)(i*)/s//\1\2\2\2\2\2\2\2\2\2\2iii/
+g/^2([0-9]*)(i*)/s//\1\2\2\2\2\2\2\2\2\2\2ii/
+g/^1([0-9]*)(i*)/s//\1\2\2\2\2\2\2\2\2\2\2i/
+g/^0([0-9]*)(i*)/s//\1\2\2\2\2\2\2\2\2\2\2/
+g/^9([0-9]*)(i*)/s//\1\2\2\2\2\2\2\2\2\2\2iiiiiiiii/
+g/^8([0-9]*)(i*)/s//\1\2\2\2\2\2\2\2\2\2\2iiiiiiii/
+g/^7([0-9]*)(i*)/s//\1\2\2\2\2\2\2\2\2\2\2iiiiiii/
+g/^6([0-9]*)(i*)/s//\1\2\2\2\2\2\2\2\2\2\2iiiiii/
+g/^5([0-9]*)(i*)/s//\1\2\2\2\2\2\2\2\2\2\2iiiii/
+g/^4([0-9]*)(i*)/s//\1\2\2\2\2\2\2\2\2\2\2iiii/
+g/^3([0-9]*)(i*)/s//\1\2\2\2\2\2\2\2\2\2\2iii/
+g/^2([0-9]*)(i*)/s//\1\2\2\2\2\2\2\2\2\2\2ii/
+g/^1([0-9]*)(i*)/s//\1\2\2\2\2\2\2\2\2\2\2i/
+g/^0([0-9]*)(i*)/s//\1\2\2\2\2\2\2\2\2\2\2/
+g/^9([0-9]*)(i*)/s//\1\2\2\2\2\2\2\2\2\2\2iiiiiiiii/
+g/^8([0-9]*)(i*)/s//\1\2\2\2\2\2\2\2\2\2\2iiiiiiii/
+g/^7([0-9]*)(i*)/s//\1\2\2\2\2\2\2\2\2\2\2iiiiiii/
+g/^6([0-9]*)(i*)/s//\1\2\2\2\2\2\2\2\2\2\2iiiiii/
+g/^5([0-9]*)(i*)/s//\1\2\2\2\2\2\2\2\2\2\2iiiii/
+g/^4([0-9]*)(i*)/s//\1\2\2\2\2\2\2\2\2\2\2iiii/
+g/^3([0-9]*)(i*)/s//\1\2\2\2\2\2\2\2\2\2\2iii/
+g/^2([0-9]*)(i*)/s//\1\2\2\2\2\2\2\2\2\2\2ii/
+g/^1([0-9]*)(i*)/s//\1\2\2\2\2\2\2\2\2\2\2i/
+g/^0([0-9]*)(i*)/s//\1\2\2\2\2\2\2\2\2\2\2/
+g/^9([0-9]*)(i*)/s//\1\2\2\2\2\2\2\2\2\2\2iiiiiiiii/
+g/^8([0-9]*)(i*)/s//\1\2\2\2\2\2\2\2\2\2\2iiiiiiii/
+g/^7([0-9]*)(i*)/s//\1\2\2\2\2\2\2\2\2\2\2iiiiiii/
+g/^6([0-9]*)(i*)/s//\1\2\2\2\2\2\2\2\2\2\2iiiiii/
+g/^5([0-9]*)(i*)/s//\1\2\2\2\2\2\2\2\2\2\2iiiii/
+g/^4([0-9]*)(i*)/s//\1\2\2\2\2\2\2\2\2\2\2iiii/
+g/^3([0-9]*)(i*)/s//\1\2\2\2\2\2\2\2\2\2\2iii/
+g/^2([0-9]*)(i*)/s//\1\2\2\2\2\2\2\2\2\2\2ii/
+g/^1([0-9]*)(i*)/s//\1\2\2\2\2\2\2\2\2\2\2i/
+g/^0([0-9]*)(i*)/s//\1\2\2\2\2\2\2\2\2\2\2/
+g/^9([0-9]*)(i*)/s//\1\2\2\2\2\2\2\2\2\2\2iiiiiiiii/
+g/^8([0-9]*)(i*)/s//\1\2\2\2\2\2\2\2\2\2\2iiiiiiii/
+g/^7([0-9]*)(i*)/s//\1\2\2\2\2\2\2\2\2\2\2iiiiiii/
+g/^6([0-9]*)(i*)/s//\1\2\2\2\2\2\2\2\2\2\2iiiiii/
+g/^5([0-9]*)(i*)/s//\1\2\2\2\2\2\2\2\2\2\2iiiii/
+g/^4([0-9]*)(i*)/s//\1\2\2\2\2\2\2\2\2\2\2iiii/
+g/^3([0-9]*)(i*)/s//\1\2\2\2\2\2\2\2\2\2\2iii/
+g/^2([0-9]*)(i*)/s//\1\2\2\2\2\2\2\2\2\2\2ii/
+g/^1([0-9]*)(i*)/s//\1\2\2\2\2\2\2\2\2\2\2i/
+g/^0([0-9]*)(i*)/s//\1\2\2\2\2\2\2\2\2\2\2/
+# actual logic
+,j
+# unary -> decimal (for 0-10000 range)
+g/i{9000}(i{0,999})/s//9\1/
+g/i{8000}(i{0,999})/s//8\1/
+g/i{7000}(i{0,999})/s//7\1/
+g/i{6000}(i{0,999})/s//6\1/
+g/i{5000}(i{0,999})/s//5\1/
+g/i{4000}(i{0,999})/s//4\1/
+g/i{3000}(i{0,999})/s//3\1/
+g/i{2000}(i{0,999})/s//2\1/
+g/i{1000}(i{0,999})/s//1\1/
+v/^[0-9]i*$/s/.*/0&/
+g/i{900}(i{0,99})/s//9\1/
+g/i{800}(i{0,99})/s//8\1/
+g/i{700}(i{0,99})/s//7\1/
+g/i{600}(i{0,99})/s//6\1/
+g/i{500}(i{0,99})/s//5\1/
+g/i{400}(i{0,99})/s//4\1/
+g/i{300}(i{0,99})/s//3\1/
+g/i{200}(i{0,99})/s//2\1/
+g/i{100}(i{0,99})/s//1\1/
+v/^[0-9]{2}i*$/s/^([0-9])(i*)$/\10\2/
+g/i{90}(i{0,9})/s//9\1/
+g/i{80}(i{0,9})/s//8\1/
+g/i{70}(i{0,9})/s//7\1/
+g/i{60}(i{0,9})/s//6\1/
+g/i{50}(i{0,9})/s//5\1/
+g/i{40}(i{0,9})/s//4\1/
+g/i{30}(i{0,9})/s//3\1/
+g/i{20}(i{0,9})/s//2\1/
+g/i{10}(i{0,9})/s//1\1/
+v/^[0-9]{3}i*$/s/^([0-9]{2})(i*)$/\10\2/
+g/i{9}/s//9/
+g/i{8}/s//8/
+g/i{7}/s//7/
+g/i{6}/s//6/
+g/i{5}/s//5/
+g/i{4}/s//4/
+g/i{3}/s//3/
+g/i{2}/s//2/
+g/i{1}/s//1/
+v/^[0-9]{4}i*$/s/^([0-9]{3})(i*)$/\10\2/
+g/^0+([0-9])/s//\1/
+,p
+Q
diff --git a/Task/A+B/Elixir/a+b.elixir b/Task/A+B/Elixir/a+b.ex
similarity index 100%
rename from Task/A+B/Elixir/a+b.elixir
rename to Task/A+B/Elixir/a+b.ex
diff --git a/Task/A+B/Euphoria/a+b.euphoria b/Task/A+B/Euphoria/a+b.ex
similarity index 100%
rename from Task/A+B/Euphoria/a+b.euphoria
rename to Task/A+B/Euphoria/a+b.ex
diff --git a/Task/A+B/Forth/a+b.fth b/Task/A+B/Forth/a+b-1.fth
similarity index 100%
rename from Task/A+B/Forth/a+b.fth
rename to Task/A+B/Forth/a+b-1.fth
diff --git a/Task/A+B/Forth/a+b-2.fth b/Task/A+B/Forth/a+b-2.fth
new file mode 100644
index 0000000000..f83c5b0b46
--- /dev/null
+++ b/Task/A+B/Forth/a+b-2.fth
@@ -0,0 +1 @@
+: addab + cr . cr ;
diff --git a/Task/A+B/FutureBasic/a+b.basic b/Task/A+B/FutureBasic/a+b-1.basic
similarity index 100%
rename from Task/A+B/FutureBasic/a+b.basic
rename to Task/A+B/FutureBasic/a+b-1.basic
diff --git a/Task/A+B/FutureBasic/a+b-2.basic b/Task/A+B/FutureBasic/a+b-2.basic
new file mode 100644
index 0000000000..aee4ef9505
--- /dev/null
+++ b/Task/A+B/FutureBasic/a+b-2.basic
@@ -0,0 +1,15 @@
+void local fn InputIntegers
+ while ( 1 )
+ CFStringRef s = input @"", @"0123456789 ", YES
+ if ( !s ) then end
+ CFArrayRef a = fn StringComponentsSeparatedByString( s, @" " )
+ if ( len(a) != 2 ) then beep : continue
+ cls : print %(150,95),a[0];@" + ";a[1];@" = ";intval(a[0]) + intval(a[1])
+ wend
+end fn
+
+window 1, @"A+B", (0,0,290,200)
+textlabel 1, @"Enter two integers separated by space(s).\nPress 'return' to calculate or 'esc' to quit.", (20,160,270,32)
+fn InputIntegers
+
+HandleEvents
diff --git a/Task/A+B/Julia/a+b-1.julia b/Task/A+B/Julia/a+b-1.jl
similarity index 100%
rename from Task/A+B/Julia/a+b-1.julia
rename to Task/A+B/Julia/a+b-1.jl
diff --git a/Task/A+B/Julia/a+b-2.julia b/Task/A+B/Julia/a+b-2.jl
similarity index 100%
rename from Task/A+B/Julia/a+b-2.julia
rename to Task/A+B/Julia/a+b-2.jl
diff --git a/Task/A+B/Kotlin/a+b.kotlin b/Task/A+B/Kotlin/a+b.kts
similarity index 100%
rename from Task/A+B/Kotlin/a+b.kotlin
rename to Task/A+B/Kotlin/a+b.kts
diff --git a/Task/A+B/Nu/a+b.nu b/Task/A+B/Nu/a+b.nu
index fe56af1ee0..1cb2baca8a 100644
--- a/Task/A+B/Nu/a+b.nu
+++ b/Task/A+B/Nu/a+b.nu
@@ -1 +1 @@
-input | parse "{a} {b}" | first | values | into int | math sum
+input | split words | into int | math sum
diff --git a/Task/A+B/OCaml/a+b.ocaml b/Task/A+B/OCaml/a+b.ml
similarity index 100%
rename from Task/A+B/OCaml/a+b.ocaml
rename to Task/A+B/OCaml/a+b.ml
diff --git a/Task/A+B/Rust/a+b-1.rust b/Task/A+B/Rust/a+b-1.rs
similarity index 100%
rename from Task/A+B/Rust/a+b-1.rust
rename to Task/A+B/Rust/a+b-1.rs
diff --git a/Task/A+B/Rust/a+b-2.rust b/Task/A+B/Rust/a+b-2.rs
similarity index 100%
rename from Task/A+B/Rust/a+b-2.rust
rename to Task/A+B/Rust/a+b-2.rs
diff --git a/Task/A+B/Scheme/a+b.ss b/Task/A+B/Scheme/a+b.scm
similarity index 100%
rename from Task/A+B/Scheme/a+b.ss
rename to Task/A+B/Scheme/a+b.scm
diff --git a/Task/A+B/X86-64-Assembly/a+b.x86-64 b/Task/A+B/X86-64-Assembly/a+b.x86-64
new file mode 100644
index 0000000000..6254ca0053
--- /dev/null
+++ b/Task/A+B/X86-64-Assembly/a+b.x86-64
@@ -0,0 +1,150 @@
+format ELF64 executable 3
+entry start
+bsize equ 24
+
+segment executable readable
+start:
+ pop rdx
+ cmp rdx, 1
+ jg .getargv0
+ mov qword[avar], 0
+ mov qword[bvar], 0
+ jmp .calculate
+ .getargv0:
+ pop rdi
+ pop rdi
+ call atoq
+ mov qword[avar], rax
+ cmp rdx, 2
+ jg .getargv1
+ mov qword[bvar], 0
+ jmp .calculate
+ .getargv1:
+ pop rdi
+ call atoq
+ mov qword[bvar], rax
+ .calculate:
+ xor rdi, rdi
+ add rdi, qword[avar]
+ add rdi, qword[bvar]
+ call printq
+ .exit0:
+ mov rax, 60
+ xor rdi, rdi
+ syscall
+
+atoq:
+ push r8
+ push r9
+ push rdi
+ push rsi
+ push rdx
+ push rcx
+ xor rcx, rcx
+ xor rax, rax
+ xor r8, r8
+ mov r9, 1
+ cmp byte[rdi], 0
+ jz .exit
+ cmp byte[rdi], '-'
+ jne .stbegin
+ mov r9, -1
+ inc rdi
+ .stbegin:
+ cmp byte[rdi], '0'
+ jl .return
+ cmp byte[rdi], '9'
+ jg .return
+ .stloop:
+ cmp byte[rdi + r8], '0'
+ jl .calc0
+ cmp byte[rdi + r8], '9'
+ jg .calc0
+ mov sil, byte[rdi + r8]
+ sub rsi, '0'
+ push rsi
+ inc r8
+ jmp .stloop
+ .calc0:
+ xor rcx, rcx
+ mov rdi, 10
+ mov rsi, 1
+ .calc1:
+ pop rax
+ mul rsi
+ add rcx, rax
+ dec r8
+ jz .return
+ mov rax, rsi
+ mul rdi
+ mov rsi, rax
+ jmp .calc1
+ .return:
+ xor rdx, rdx
+ mov rax, rcx
+ imul r9
+ .exit:
+ pop rcx
+ pop rdx
+ pop rsi
+ pop rdi
+ pop r9
+ pop r8
+ ret
+
+printq:
+ push r9
+ push rdi
+ push rsi
+ push rdx
+ mov rax, rdi
+ mov r9, bsize
+ dec r9
+ mov rsi, 10
+ sub rsp, bsize
+ sub rax, 0
+ jns .stloop
+ neg rax
+ .stloop:
+ xor rdx, rdx
+ div rsi
+ add dl, '0'
+ mov byte[rsp + r9], dl
+ sub rax, 0
+ jz .negtest
+ dec r9
+ jmp .stloop
+ .negtest:
+ sub rdi, 0
+ jns .printit
+ dec r9
+ mov byte[rsp + r9], '-'
+ .printit:
+ mov rdx, bsize
+ sub rdx, r9
+ mov rsi, rsp
+ add rsi, r9
+ mov rdi, 1
+ mov rax, 1
+ syscall
+ sub rsp, 8
+ mov byte[rsp], 0x0a
+ mov rax, 1
+ mov rdi, 1
+ mov rsi, rsp
+ mov rdx, 1
+ syscall
+ add rsp, 8
+ .restores:
+ add rsp, bsize
+ mov rax, rdx
+ pop rdx
+ pop rsi
+ pop rdi
+ pop r9
+ .return:
+ ret
+
+segment readable writable
+avar: rq 1
+bvar: rq 1
diff --git a/Task/ABC-problem/Delphi/abc-problem.delphi b/Task/ABC-problem/Delphi/abc-problem.pas
similarity index 100%
rename from Task/ABC-problem/Delphi/abc-problem.delphi
rename to Task/ABC-problem/Delphi/abc-problem.pas
diff --git a/Task/ABC-problem/EMal/abc-problem.emal b/Task/ABC-problem/EMal/abc-problem.emal
new file mode 100644
index 0000000000..3fba5d142a
--- /dev/null
+++ b/Task/ABC-problem/EMal/abc-problem.emal
@@ -0,0 +1,28 @@
+List words ← text["", "A", "Bark", "book", "TREAT", "COMMON", "SQuAd", "CONFUSE"]
+List checks ← logic[true, true, true, false, true, false, true, true]
+fun canMakeWord ← logic by text word
+ if word.length æ 0 do return true end
+ List wblocks ← text[
+ "BO", "XK", "DQ", "CP", "NA",
+ "GT", "RE", "TG", "QD", "FS",
+ "JW", "HU", "VI", "AN", "OB",
+ "ER", "FS", "LY", "PC", "ZM"]
+ for each text ch in word.upper().split()
+ logic found ← false
+ for each text wblock in wblocks
+ if wblock.find(ch) ≥ 0
+ wblocks[wblockIndex] ← Text.EMPTY
+ found ← true
+ break
+ end
+ end
+ if not found do return false end
+ end
+ return true
+end
+writeLine("word".padEnd(11, " "), "|", "canMakeWord", "|", "isCorrect")
+for each text word in words
+ writeLine(word.padEnd(11, " "), "|",
+ (text!canMakeWord(word)).padEnd(11, " "), "|",
+ (canMakeWord(word) æ checks[wordIndex]))
+end
diff --git a/Task/ABC-problem/Elixir/abc-problem.elixir b/Task/ABC-problem/Elixir/abc-problem.ex
similarity index 100%
rename from Task/ABC-problem/Elixir/abc-problem.elixir
rename to Task/ABC-problem/Elixir/abc-problem.ex
diff --git a/Task/ABC-problem/Euphoria/abc-problem.euphoria b/Task/ABC-problem/Euphoria/abc-problem.ex
similarity index 100%
rename from Task/ABC-problem/Euphoria/abc-problem.euphoria
rename to Task/ABC-problem/Euphoria/abc-problem.ex
diff --git a/Task/ABC-problem/FutureBasic/abc-problem-1.basic b/Task/ABC-problem/FutureBasic/abc-problem-1.basic
index 5097485aa6..e9f8bea0fc 100644
--- a/Task/ABC-problem/FutureBasic/abc-problem-1.basic
+++ b/Task/ABC-problem/FutureBasic/abc-problem-1.basic
@@ -1,30 +1,26 @@
-include "NSLog.incl"
-
local fn CanBlocksSpell( w as CFStringRef ) as CFStringRef
-NSUInteger i, j
-CFStringRef s = @"", t1, t2 : if fn StringIsEqual( w, @"" ) then exit fn = @"YES" else w = ucase(w)
+ long i, j
+ CFStringRef s = @"", t1, t2 : if fn StringIsEqual( w, @"" ) then exit fn = @"YES" else w = ucase(w)
-mda(0) = {@"BO",@"XK",@"DQ",@"CP",@"NA",@"GT",@"RE",@"TG",@"QD",¬
-@"FS",@"JW",@"HU",@"VI",@"AN",@"OB",@"ER",@"FS",@"LY",@"PC",@"ZM"}
+ mda(0) = {@"BO",@"XK",@"DQ",@"CP",@"NA",@"GT",@"RE",@"TG",@"QD",¬
+ @"FS",@"JW",@"HU",@"VI",@"AN",@"OB",@"ER",@"FS",@"LY",@"PC",@"ZM"}
-for i = 0 to len(w) - 1
-for j = 0 to mda_count - 1
-t1 = mid( mda(j), 0, 1 ) : t2 = mid( mda(j), 1, 1 )
-if ( fn StringIsEqual( mid( w, i, 1 ), t1 ) ) then s = fn StringByAppendingString( s, t1 ) : mda(j) = @" " : break
-if ( fn StringIsEqual( mid( w, i, 1 ), t2 ) ) then s = fn StringByAppendingString( s, t2 ) : mda(j) = @" " : break
-next
-next
-if fn StringIsEqual( s, w ) then exit fn = @"YES"
+ for i = 0 to len(w) - 1
+ for j = 0 to mda_count - 1
+ t1 = mid( mda(j), 0, 1 ) : t2 = mid( mda(j), 1, 1 )
+ if ( fn StringIsEqual( mid( w, i, 1 ), t1 ) ) then s = fn StringByAppendingString( s, t1 ) : mda(j) = @" " : break
+ if ( fn StringIsEqual( mid( w, i, 1 ), t2 ) ) then s = fn StringByAppendingString( s, t2 ) : mda(j) = @" " : break
+ next
+ next
+ if fn StringIsEqual( s, w ) then exit fn = @"YES"
end fn = @"NO"
-NSUInteger i
+long i
CFArrayRef words
CFStringRef w
words = @[@"", @"a",@"Bark",@"BOOK",@"TrEaT",@"COMMON",@"Squad",@"conFUse",@"ABBA",@"aUtO"]
for w in words
-printf @"Can blocks spell %7s : %@", fn StringUTF8String( w ), fn CanBlocksSpell( w )
+ printf @"Can blocks spell %7s : %@", fn StringUTF8String( w ), fn CanBlocksSpell( w )
next
-NSLog( @"%@", fn WindowPrintViewString( 1 ) )
-
HandleEvents
diff --git a/Task/ABC-problem/FutureBasic/abc-problem-2.basic b/Task/ABC-problem/FutureBasic/abc-problem-2.basic
index 0919078013..76e7d3016f 100644
--- a/Task/ABC-problem/FutureBasic/abc-problem-2.basic
+++ b/Task/ABC-problem/FutureBasic/abc-problem-2.basic
@@ -4,7 +4,7 @@ local fn blocks( wordList as str255 )
found = instr$( 1, blocks, ch )
select found
case > 3: mid$( blocks, found and -2, 2 ) = "__" : text , , fn ColorYellow
- rect fill ( x, y + 5.5, 15, 15 ), fn ColorBrown
+ rect fill ( x, y + 1, 15, 15 ), fn ColorBrown
case 0: text , , fn ColorLightGray
case < 4: blocks=" ,;BOXKDQCPNAGTRETGQDFSJWHUVIANOBERFSLYPCZM": x=3: y+=26: ch=""
end select
diff --git a/Task/ABC-problem/Julia/abc-problem.julia b/Task/ABC-problem/Julia/abc-problem.jl
similarity index 100%
rename from Task/ABC-problem/Julia/abc-problem.julia
rename to Task/ABC-problem/Julia/abc-problem.jl
diff --git a/Task/ABC-problem/Kotlin/abc-problem.kotlin b/Task/ABC-problem/Kotlin/abc-problem.kts
similarity index 100%
rename from Task/ABC-problem/Kotlin/abc-problem.kotlin
rename to Task/ABC-problem/Kotlin/abc-problem.kts
diff --git a/Task/ABC-problem/OCaml/abc-problem.ocaml b/Task/ABC-problem/OCaml/abc-problem.ml
similarity index 100%
rename from Task/ABC-problem/OCaml/abc-problem.ocaml
rename to Task/ABC-problem/OCaml/abc-problem.ml
diff --git a/Task/ABC-problem/Rust/abc-problem.rust b/Task/ABC-problem/Rust/abc-problem.rs
similarity index 100%
rename from Task/ABC-problem/Rust/abc-problem.rust
rename to Task/ABC-problem/Rust/abc-problem.rs
diff --git a/Task/ABC-problem/Scheme/abc-problem.ss b/Task/ABC-problem/Scheme/abc-problem.scm
similarity index 100%
rename from Task/ABC-problem/Scheme/abc-problem.ss
rename to Task/ABC-problem/Scheme/abc-problem.scm
diff --git a/Task/ADFGVX-cipher/FreeBASIC/adfgvx-cipher.basic b/Task/ADFGVX-cipher/FreeBASIC/adfgvx-cipher.basic
new file mode 100644
index 0000000000..e2bd2cc64b
--- /dev/null
+++ b/Task/ADFGVX-cipher/FreeBASIC/adfgvx-cipher.basic
@@ -0,0 +1,169 @@
+Const ADFGVX As String = "ADFGVX"
+Const ALPHABET As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
+
+Function InitialisePolybiusSquare() As String
+ Dim As Integer i, j
+ Dim As String letters(35)
+ For i = 0 To 35
+ letters(i) = Mid(ALPHABET, i + 1, 1)
+ Next
+ Randomize Timer
+ For i = 0 To 35
+ j = Int(Rnd * 36)
+ Swap letters(i), letters(j)
+ Next
+
+ Dim As Integer row, column
+ Dim As String result = ""
+ For row = 0 To 5
+ For column = 0 To 5
+ result &= letters(6 * row + column)
+ Next
+ Next
+
+ Return result
+End Function
+
+Function CreateKey(size As Integer) As String
+ If size < 7 Or size > 12 Then
+ Print "Key should contain between 7 and 12 letters, both inclusive."
+ Exit Function
+ End If
+
+ Dim As Integer i, j
+ Dim As String word, candidates()
+ Dim As Integer ff = Freefile
+
+ Open "i:\unixdict.txt" For Input As #ff
+ While Not Eof(ff)
+ Line Input #ff, word
+
+ Dim As String uniqueWord = ""
+ For i = 1 To Len(word)
+ If Instr(uniqueWord, Mid(word, i, 1)) = 0 Then
+ uniqueWord &= Mid(word, i, 1)
+ End If
+ Next
+
+ If Len(word) = size And Len(word) = Len(uniqueWord) Then
+ word = Ucase(word)
+
+ Dim isAlphanum As Boolean = TRue
+ For i = 1 To Len(word)
+ If Not (Mid(word, i, 1) >= "A" And Mid(word, i, 1) <= "Z") And Not (Mid(word, i, 1) >= "0" And Mid(word, i, 1) <= "9") Then
+ isAlphanum = False
+ Exit For
+ End If
+ Next
+
+ If isAlphanum Then
+ Redim Preserve candidates(Ubound(candidates) + 1)
+ candidates(Ubound(candidates)) = word
+ End If
+ End If
+ Wend
+ Close #ff
+
+ Randomize Timer
+ For i = 0 To Ubound(candidates)
+ j = Int(Rnd * (Ubound(candidates) + 1))
+ Swap candidates(i), candidates(j)
+ Next
+
+ Return candidates(0)
+End Function
+
+Function Encrypt(plainText As String, polybius As String, key As String) As String
+ Dim As Integer i, j, row, column
+ Dim As String code, ch, encrypted
+
+ code = ""
+ For i = 1 To Len(plainText)
+ ch = Mid(plainText, i, 1)
+ For row = 0 To 5
+ For column = 0 To 5
+ If Mid(polybius, row * 6 + column + 1, 1) = ch Then
+ code &= Mid(ADFGVX, row + 1, 1)
+ code &= Mid(ADFGVX, column + 1, 1)
+ End If
+ Next
+ Next
+ Next
+
+ encrypted = ""
+ For i = 1 To Len(key)
+ ch = Mid(key, i, 1)
+ For j = Instr(key, ch) - 1 To Len(code) - 1 Step Len(key)
+ encrypted &= Mid(code, j + 1, 1)
+ Next
+ encrypted &= " "
+ Next
+
+ Return encrypted
+End Function
+
+Function Decrypt(encryptedText As String, polybius As String, key As String) As String
+ Dim As Integer i, j, row, column, spaceCount, codeSize
+ Dim As String result, stream, word, code, plainText
+ Dim As String blocks()
+
+ result = ""
+ i = 1
+ While i <= Len(encryptedText)
+ If Mid(encryptedText, i, 1) = " " Then
+ i += 1
+ Else
+ result += Mid(encryptedText, i, 1)
+ i += 1
+ End If
+ Wend
+ spaceCount = Len(encryptedText) - Len(result)
+ codeSize = Len(encryptedText) - spaceCount
+
+ stream = encryptedText
+ While Len(stream) > 0
+ word = Left(stream, Instr(stream, " ") - 1)
+ Redim Preserve blocks(Ubound(blocks) + 1)
+ blocks(Ubound(blocks)) = word
+ stream = Mid(stream, Instr(stream, " ") + 1)
+ Wend
+
+ code = ""
+ For i = 0 To codeSize - 1
+ For j = 0 To Ubound(blocks)
+ If Len(code) < codeSize Then code &= Mid(blocks(j), i + 1, 1)
+ Next
+ Next
+
+ plainText = ""
+ For i = 1 To codeSize - 1 Step 2
+ row = Instr(ADFGVX, Mid(code, i, 1)) - 1
+ column = Instr(ADFGVX, Mid(code, i + 1, 1)) - 1
+ plainText &= Mid(polybius, row * 6 + column + 1, 1)
+ Next
+
+ Return plainText
+End Function
+
+Dim As String polybius = InitialisePolybiusSquare()
+Print "The 6 x 6 Polybius square:"
+Print " | A D F G V X"
+Print "--------------"
+For row As Integer = 0 To 5
+ Print Mid(ADFGVX, row + 1, 1); "|";
+ For column As Integer = 0 To 5
+ Print " "; Mid(polybius, row * 6 + column + 1, 1);
+ Next
+ Print
+Next
+
+Dim As String key = CreateKey(9)
+Print !"\nThe key is "; key
+Dim As String plainText = "ATTACKAT1200AM"
+Print !"\nPlain text: "; plainText
+Dim As String encryptedText = Encrypt(plainText, polybius, key)
+Print !"\nEncrypted: "; encryptedText
+Dim As String decryptedText = Decrypt(encryptedText, polybius, key)
+Print !"\nDecrypted: "; decryptedText
+
+Sleep
diff --git a/Task/ADFGVX-cipher/Julia/adfgvx-cipher.julia b/Task/ADFGVX-cipher/Julia/adfgvx-cipher.jl
similarity index 100%
rename from Task/ADFGVX-cipher/Julia/adfgvx-cipher.julia
rename to Task/ADFGVX-cipher/Julia/adfgvx-cipher.jl
diff --git a/Task/ADFGVX-cipher/Rust/adfgvx-cipher.rust b/Task/ADFGVX-cipher/Rust/adfgvx-cipher.rs
similarity index 100%
rename from Task/ADFGVX-cipher/Rust/adfgvx-cipher.rust
rename to Task/ADFGVX-cipher/Rust/adfgvx-cipher.rs
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
index 377a586076..47c637a9e0 100644
--- a/Task/AKS-test-for-primes/Clojure/aks-test-for-primes.clj
+++ b/Task/AKS-test-for-primes/Clojure/aks-test-for-primes.clj
@@ -3,7 +3,7 @@
[n k]
(/ (apply *' (range n (- n k) -1))
(apply *' (range k 0 -1))
- (if (and (even? k) (< k n)) -1 1)))
+ (if (even? k) 1 -1)))
(defn cs
"coefficient series for (x - 1)^n, k=[0..n]"
diff --git a/Task/AKS-test-for-primes/Crystal/aks-test-for-primes.crystal b/Task/AKS-test-for-primes/Crystal/aks-test-for-primes.cr
similarity index 100%
rename from Task/AKS-test-for-primes/Crystal/aks-test-for-primes.crystal
rename to Task/AKS-test-for-primes/Crystal/aks-test-for-primes.cr
diff --git a/Task/AKS-test-for-primes/Elixir/aks-test-for-primes.elixir b/Task/AKS-test-for-primes/Elixir/aks-test-for-primes.ex
similarity index 100%
rename from Task/AKS-test-for-primes/Elixir/aks-test-for-primes.elixir
rename to Task/AKS-test-for-primes/Elixir/aks-test-for-primes.ex
diff --git a/Task/AKS-test-for-primes/Julia/aks-test-for-primes-1.julia b/Task/AKS-test-for-primes/Julia/aks-test-for-primes-1.jl
similarity index 100%
rename from Task/AKS-test-for-primes/Julia/aks-test-for-primes-1.julia
rename to Task/AKS-test-for-primes/Julia/aks-test-for-primes-1.jl
diff --git a/Task/AKS-test-for-primes/Julia/aks-test-for-primes-2.julia b/Task/AKS-test-for-primes/Julia/aks-test-for-primes-2.jl
similarity index 100%
rename from Task/AKS-test-for-primes/Julia/aks-test-for-primes-2.julia
rename to Task/AKS-test-for-primes/Julia/aks-test-for-primes-2.jl
diff --git a/Task/AKS-test-for-primes/Julia/aks-test-for-primes-3.julia b/Task/AKS-test-for-primes/Julia/aks-test-for-primes-3.jl
similarity index 100%
rename from Task/AKS-test-for-primes/Julia/aks-test-for-primes-3.julia
rename to Task/AKS-test-for-primes/Julia/aks-test-for-primes-3.jl
diff --git a/Task/AKS-test-for-primes/Julia/aks-test-for-primes-4.julia b/Task/AKS-test-for-primes/Julia/aks-test-for-primes-4.jl
similarity index 100%
rename from Task/AKS-test-for-primes/Julia/aks-test-for-primes-4.julia
rename to Task/AKS-test-for-primes/Julia/aks-test-for-primes-4.jl
diff --git a/Task/AKS-test-for-primes/Kotlin/aks-test-for-primes.kotlin b/Task/AKS-test-for-primes/Kotlin/aks-test-for-primes.kts
similarity index 100%
rename from Task/AKS-test-for-primes/Kotlin/aks-test-for-primes.kotlin
rename to Task/AKS-test-for-primes/Kotlin/aks-test-for-primes.kts
diff --git a/Task/AKS-test-for-primes/OCaml/aks-test-for-primes.ocaml b/Task/AKS-test-for-primes/OCaml/aks-test-for-primes.ml
similarity index 100%
rename from Task/AKS-test-for-primes/OCaml/aks-test-for-primes.ocaml
rename to Task/AKS-test-for-primes/OCaml/aks-test-for-primes.ml
diff --git a/Task/AKS-test-for-primes/REXX/aks-test-for-primes-3.rexx b/Task/AKS-test-for-primes/REXX/aks-test-for-primes-3.rexx
new file mode 100644
index 0000000000..62180990b7
--- /dev/null
+++ b/Task/AKS-test-for-primes/REXX/aks-test-for-primes-3.rexx
@@ -0,0 +1,194 @@
+parse version version; say version
+say 'AKS-test for Primes'; say
+arg p
+if p = '' then
+ p = 10
+numeric digits Max(10,Abs(p)%3)
+call Combinations p
+call Polynomials p
+call ShowPrimes p
+exit
+
+Combinations:
+procedure expose comb.
+arg p; p = Abs(p)
+call Time('r')
+say 'Combinations up to' p'...'
+say Combs(p) 'combinations generated'
+say Format(Time('e'),,3) 'seconds'
+say
+return
+
+Polynomials:
+procedure expose poly. comb. work. prim.
+arg p
+call Time('r')
+say 'Polynomials...'
+if p < 0 then
+ b = Abs(p)
+else
+ b = 0
+p = Abs(p); prim. = 0; n = 0
+do i = b to p
+ a = Ppower('1 -1',i)
+ if i < 11 then
+ say '(x-1)^'i '=' Parray2formula()
+ s = 1
+ do j = 2 to poly.0-1
+ a = poly.coef.j
+ if a//i > 0 then do
+ s = 0
+ leave j
+ end
+ end
+ if s = 1 then do
+ if i > 1 then do
+ n = n+1
+ prim.n = i
+ end
+ end
+end
+prim.0 = n
+say Format(Time('e'),,3) 'seconds'
+say
+return
+
+ShowPrimes:
+procedure expose prim.
+arg p
+call Time('r')
+say 'Primes...'
+if p < 0 then do
+ p = Abs(p)
+ if prim.0 > 0 then
+ say p 'is prime'
+ else
+ say p 'is not prime'
+end
+else do
+ do i = 1 to prim.0
+ call Charout ,Right(prim.i,5)
+ if i//20 = 0 then
+ say
+ end
+ say
+end
+say Format(Time('e'),,3) 'seconds'
+say
+return
+
+Combs:
+-- Combinations
+procedure expose comb.
+arg x
+-- Valid
+if \ Iswhole(x) then
+ x = dummy
+if x < 0 then
+ x = dummy
+-- Recurring definition
+comb. = 1
+do i = 1 to x
+ i1 = i-1
+ do j = 1 to i1
+ j1 = j-1
+ comb.i.j = comb.i1.j1+comb.i1.j
+ end
+end
+return (x*x+3*x+2)/2
+
+Ppower:
+-- Exponentiation
+procedure expose poly. comb. work.
+arg x,y
+-- Validate
+if x = '' then
+ x = dummy
+if \ Iswhole(y) then
+ y = dummy
+if y < 0 then
+ y = dummy
+-- Exponentiate
+numeric digits Digits()+2
+wx = Words(x); wm = wx*y-y+1
+poly. = 0; poly.0 = wm
+select
+ when wx = 1 then
+-- Power of a number
+ poly.coef.1 = x**y
+ when wx = 2 then do
+-- Newton's binomial
+ a = Word(x,1); b = Word(x,2)
+ do i = 1 to wm
+ j = y-i+1; k = i-1
+ poly.coef.i = comb.y.k*a**j*b**k
+ end
+ end
+ otherwise do
+-- Repeated multiplication
+ do i = 1 to wx
+ poly.coef.1.i = Word(x,i)
+ poly.coef.2.i = poly.coef.1.i
+ end
+ wy = wx
+ do i = 2 to y
+ work. = 0
+ do j = 1 to wx
+ do k = 1 to wy
+ l = j+k-1; work.coef.l = work.coef.l+poly.coef.1.j*poly.coef.2.k
+ end
+ end
+ if i = y then
+ leave i
+ wx = wx+wy-1
+ do j = 1 to wx
+ poly.coef.1.j = work.coef.j
+ end
+ end
+ do i = 1 to wm
+ poly.coef.i = work.coef.i
+ end
+ end
+end
+numeric digits Digits()-2
+-- Normalize coefs
+call Pnormalize
+return wm
+
+Parray2formula:
+-- Array -> Formula
+procedure expose poly.
+-- Generate formula
+y = ''; wm = poly.0
+do i = 1 to wm
+ a = poly.coef.i
+ if a <> 0 then do
+ select
+ when a < 0 then
+ s = '-'
+ when i > 1 then
+ s = '+'
+ otherwise
+ s = ''
+ end
+ a = Abs(a); e = wm-i
+ if a = 1 & e > 0 then
+ a = ''
+ select
+ when e > 1 then
+ b = 'x^'e
+ when e = 1 then
+ b = 'x'
+ otherwise
+ b = ''
+ end
+ y = y||s||a||b
+ end
+end
+if y = '' then
+ y = 0
+return strip(y)
+
+include Functions
+include Numbers
+include Polynomial
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.rs
similarity index 100%
rename from Task/AKS-test-for-primes/Rust/aks-test-for-primes-1.rust
rename to Task/AKS-test-for-primes/Rust/aks-test-for-primes-1.rs
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.rs
similarity index 100%
rename from Task/AKS-test-for-primes/Rust/aks-test-for-primes-2.rust
rename to Task/AKS-test-for-primes/Rust/aks-test-for-primes-2.rs
diff --git a/Task/AKS-test-for-primes/Scheme/aks-test-for-primes.ss b/Task/AKS-test-for-primes/Scheme/aks-test-for-primes.scm
similarity index 100%
rename from Task/AKS-test-for-primes/Scheme/aks-test-for-primes.ss
rename to Task/AKS-test-for-primes/Scheme/aks-test-for-primes.scm
diff --git a/Task/ASCII-art-diagram-converter/Julia/ascii-art-diagram-converter.julia b/Task/ASCII-art-diagram-converter/Julia/ascii-art-diagram-converter.jl
similarity index 100%
rename from Task/ASCII-art-diagram-converter/Julia/ascii-art-diagram-converter.julia
rename to Task/ASCII-art-diagram-converter/Julia/ascii-art-diagram-converter.jl
diff --git a/Task/ASCII-art-diagram-converter/Rust/ascii-art-diagram-converter.rust b/Task/ASCII-art-diagram-converter/Rust/ascii-art-diagram-converter.rs
similarity index 100%
rename from Task/ASCII-art-diagram-converter/Rust/ascii-art-diagram-converter.rust
rename to Task/ASCII-art-diagram-converter/Rust/ascii-art-diagram-converter.rs
diff --git a/Task/AVL-tree/FreeBASIC/avl-tree-1.basic b/Task/AVL-tree/FreeBASIC/avl-tree-1.basic
new file mode 100644
index 0000000000..18c1627e91
--- /dev/null
+++ b/Task/AVL-tree/FreeBASIC/avl-tree-1.basic
@@ -0,0 +1,160 @@
+#define max(a, b) iif((a > b), a, b)
+
+Enum
+ _KEY
+ _RIGHT
+ _LEFT
+ _HEIGHT
+End Enum
+
+Dim Shared As Integer root = 0
+Dim Shared As Integer ramas = 5, indice = 0
+Dim Shared As Integer arbol(ramas, 4)
+
+Function height(current As Integer) As Integer
+ Return Iif(current = 0, 0, arbol(current, _HEIGHT))
+End Function
+
+Function Balance(current As Integer) As Integer
+ Return height(arbol(current, _LEFT)) - height(arbol(current, _RIGHT))
+End Function
+
+Function rotateRight(y As Integer) As Integer
+ Dim As Integer x, T2
+
+ x = arbol(y, _LEFT)
+ T2 = arbol(x, _RIGHT)
+ arbol(x, _RIGHT) = y
+ arbol(y, _LEFT) = T2
+ arbol(y, _HEIGHT) = max(height(arbol(y, _LEFT)), height(arbol(y, _RIGHT))) + 1
+ arbol(x, _HEIGHT) = max(height(arbol(x, _LEFT)), height(arbol(x, _RIGHT))) + 1
+ Return x
+End Function
+
+Function rotateLeft(x As Integer) As Integer
+ Dim As Integer y, T2
+
+ y = arbol(x, _RIGHT)
+ T2 = arbol(y, _LEFT)
+ arbol(y, _LEFT) = x
+ arbol(x, _RIGHT) = T2
+ arbol(x, _HEIGHT) = max(height(arbol(x, _LEFT)), height(arbol(x, _RIGHT))) + 1
+ arbol(y, _HEIGHT) = max(height(arbol(y, _LEFT)), height(arbol(y, _RIGHT))) + 1
+ Return y
+End Function
+
+Function insert(current As Integer, key As Integer) As Integer
+ Dim As Integer balanceo
+
+ If current = 0 Then
+ indice += 1
+ If indice > ramas Then
+ ramas += 5
+ Redim Preserve arbol(ramas, 4)
+ End If
+ arbol(indice, _KEY) = key
+ arbol(indice, _HEIGHT) = 1
+ Return indice
+ End If
+
+ If key < arbol(current, _KEY) Then
+ arbol(current, _LEFT) = insert(arbol(current, _LEFT), key)
+ Elseif key > arbol(current, _KEY) Then
+ arbol(current, _RIGHT) = insert(arbol(current, _RIGHT), key)
+ Else
+ Return current
+ End If
+
+ arbol(current, _HEIGHT) = max(height(arbol(current, _LEFT)), height(arbol(current, _RIGHT))) + 1
+ balanceo = Balance(current)
+
+ If balanceo > 1 And key < arbol(arbol(current, _LEFT), _KEY) Then Return rotateRight(current)
+ If balanceo < -1 And key > arbol(arbol(current, _RIGHT), _KEY) Then Return rotateLeft(current)
+ If balanceo > 1 And key > arbol(arbol(current, _LEFT), _KEY) Then
+ arbol(current, _LEFT) = rotateLeft(arbol(current, _LEFT))
+ Return rotateRight(current)
+ End If
+ If balanceo < -1 And key < arbol(arbol(current, _RIGHT), _KEY) Then
+ arbol(current, _RIGHT) = rotateRight(arbol(current, _RIGHT))
+ Return rotateLeft(current)
+ End If
+
+ Return current
+End Function
+
+Function minValueNode(current As Integer) As Integer
+ While arbol(current, _LEFT) '<> 0
+ current = arbol(current, _LEFT)
+ Wend
+ Return current
+End Function
+
+Function deleteNode(root As Integer, key As Integer) As Integer
+ Dim As Integer temp, balanceo
+ ' Find the node and delete it
+ If root = 0 Then Return root
+
+ If key < arbol(root, _KEY) Then
+ arbol(root, _LEFT) = deleteNode(arbol(root, _LEFT), key)
+ Elseif key > arbol(root, _KEY) Then
+ arbol(root, _RIGHT) = deleteNode(arbol(root, _RIGHT), key)
+ Else
+ If arbol(root, _LEFT) = 0 Or arbol(root, _RIGHT) = 0 Then
+ temp = max(arbol(root, _LEFT), arbol(root, _RIGHT))
+ If temp = 0 Then
+ temp = root
+ root = 0
+ Else
+ root = temp
+ End If
+ Else
+ temp = minValueNode(arbol(root, _RIGHT))
+ arbol(root, _KEY) = arbol(temp, _KEY)
+ arbol(root, _RIGHT) = deleteNode(arbol(root, _RIGHT), arbol(temp, _KEY))
+ End If
+ End If
+
+ If root = 0 Then Return root
+
+ ' Update the balance factor of each node and balance the tree
+ arbol(root, _HEIGHT) = 1 + max(height(arbol(root, _LEFT)), height(arbol(root, _RIGHT)))
+
+ balanceo = Balance(root)
+ If balanceo > 1 And Balance(arbol(root, _LEFT)) >= 0 Then Return rotateRight(root)
+ If balanceo > 1 And Balance(arbol(root, _LEFT)) < 0 Then
+ arbol(root, _LEFT) = rotateLeft(arbol(root, _LEFT))
+ Return rotateRight(root)
+ End If
+ If balanceo < -1 And Balance(arbol(root, _RIGHT)) <= 0 Then Return rotateLeft(root)
+ If balanceo < -1 And Balance(arbol(root, _RIGHT)) > 0 Then
+ arbol(root, _RIGHT) = rotateRight(arbol(root, _RIGHT))
+ Return rotateLeft(root)
+ End If
+
+ Return root
+End Function
+
+Sub preOrder(temp As Integer)
+ If temp <> 0 Then
+ Print arbol(temp, _KEY); arbol(temp, _HEIGHT); Balance(temp)
+ preOrder(arbol(temp, _LEFT))
+ preOrder(arbol(temp, _RIGHT))
+ End If
+End Sub
+
+root = insert(root, 2)
+root = insert(root, 1)
+root = insert(root, 7)
+root = insert(root, 4)
+root = insert(root, 5)
+root = insert(root, 3)
+root = insert(root, 8)
+
+preOrder(root)
+
+root = deleteNode(root, 3)
+
+Print !"\nAfter deletion: "
+preOrder(root)
+
+Sleep
diff --git a/Task/AVL-tree/FreeBASIC/avl-tree-2.basic b/Task/AVL-tree/FreeBASIC/avl-tree-2.basic
new file mode 100644
index 0000000000..d8c4a5e768
--- /dev/null
+++ b/Task/AVL-tree/FreeBASIC/avl-tree-2.basic
@@ -0,0 +1,139 @@
+Type Nodo
+ valor As Integer
+ izda As Nodo Ptr
+ dcha As Nodo Ptr
+End Type
+
+Function createNodo(Byval v As Integer, Byval l As Nodo Ptr, Byval r As Nodo Ptr) As Nodo Ptr
+ Dim nuevo As Nodo Ptr = 0
+ nuevo = Callocate(Len(Nodo))
+ nuevo->valor = v
+ nuevo->izda = l
+ nuevo->dcha = r
+ Return nuevo
+End Function
+
+Function insertar(Byval v As Integer, n As Nodo Ptr) As Nodo Ptr
+ If (n = 0) Then
+ n = createNodo(v, 0, 0)
+ Elseif (v < n->valor) Then
+ n->izda = insertar(v, n->izda)
+ Elseif (v > n->valor) Then
+ n->dcha = insertar(v, n->dcha)
+ End If
+ Return n
+End Function
+
+Function encuentraMin(Byval n As Nodo Ptr) As Nodo Ptr
+ If (n = 0) Then Return 0
+
+ While (n->izda <> 0)
+ n = n->izda
+ Wend
+ Return n
+End Function
+
+Function encuentraMax(Byval n As Nodo Ptr) As Nodo Ptr
+ If (n = 0) Then Return 0
+
+ While (n->dcha <> 0)
+ n = n->dcha
+ Wend
+ Return n
+End Function
+
+Function preOrden(Byval n As Nodo Ptr) As Nodo Ptr
+ If (n = 0) Then Return 0
+
+ Print (n->valor);
+ preOrden(n->izda)
+ preOrden(n->dcha)
+ Return 0
+End Function
+
+Function postOrden(Byval n As Nodo Ptr) As Nodo Ptr
+ If (n = 0) Then Return 0
+
+ postOrden(n->izda)
+ postOrden(n->dcha)
+ Print (n->valor);
+ Return 0
+End Function
+
+Function enOrden(Byval n As Nodo Ptr) As Nodo Ptr
+ If (n = 0) Then Return 0
+
+ enOrden(n->izda)
+ Print (n->valor);
+ enOrden(n->dcha)
+ Return 0
+End Function
+
+Function eliminarMin(n As Nodo Ptr) As Nodo Ptr
+ If n = 0 Then Return 0
+
+ Dim As Nodo Ptr old = 0
+ If (n->izda <> 0) Then
+ n->izda = eliminarMin(n->izda)
+ Else
+ old = n
+ n = n->dcha
+ Deallocate old
+ End If
+ Return n
+End Function
+
+Function eliminarMax(n As Nodo Ptr) As Nodo Ptr
+ If n = 0 Then Return 0
+
+ Dim As Nodo Ptr old = 0
+ If (n->dcha <> 0) Then
+ n->dcha = eliminarMax(n->dcha)
+ Else
+ old = n
+ n = n->izda
+ Deallocate old
+ End If
+ Return n
+End Function
+
+Function eliminar(Byval v As Integer, n As Nodo Ptr) As Nodo Ptr
+ If n = 0 Then Return 0
+
+ Dim As Nodo Ptr old = 0
+ If v < n->valor Then
+ n->izda = eliminar(v, n->izda)
+ Elseif v > n->valor Then
+ n->dcha = eliminar(v, n->dcha)
+ Elseif (n->izda <> 0) And (n->dcha <> 0) Then
+ n->valor = encuentraMax(n->izda)->valor
+ n->izda = eliminarMax(n->izda)
+ Else
+ old = n
+ n = Iif(n->izda = 0, n->dcha, n->izda)
+ Deallocate old
+ End If
+ Return n
+End Function
+
+Dim raiz As Nodo Ptr = 0
+
+raiz = insertar(10, raiz)
+raiz = insertar(11, raiz)
+raiz = insertar(5 , raiz)
+raiz = insertar(8 , raiz)
+raiz = insertar(2 , raiz)
+raiz = insertar(7 , raiz)
+
+Print "preOrder : "; preOrden(raiz)
+Print !"\postOrder : "; postOrden(raiz)
+Print !"\inOrder : "; enOrden(raiz)
+
+Print !"\nremoving 5 from tree\n"
+raiz = eliminar(5, raiz)
+
+Print "preOrder : "; preOrden(raiz)
+Print !"\postOrder : "; postOrden(raiz)
+Print !"\inOrder : "; enOrden(raiz)(root)
+
+Sleep
diff --git a/Task/AVL-tree/Julia/avl-tree.julia b/Task/AVL-tree/Julia/avl-tree.jl
similarity index 100%
rename from Task/AVL-tree/Julia/avl-tree.julia
rename to Task/AVL-tree/Julia/avl-tree.jl
diff --git a/Task/AVL-tree/Kotlin/avl-tree.kotlin b/Task/AVL-tree/Kotlin/avl-tree.kts
similarity index 100%
rename from Task/AVL-tree/Kotlin/avl-tree.kotlin
rename to Task/AVL-tree/Kotlin/avl-tree.kts
diff --git a/Task/AVL-tree/Scheme/avl-tree.ss b/Task/AVL-tree/Scheme/avl-tree.scm
similarity index 100%
rename from Task/AVL-tree/Scheme/avl-tree.ss
rename to Task/AVL-tree/Scheme/avl-tree.scm
diff --git a/Task/Abbreviations-automatic/Delphi/abbreviations-automatic.delphi b/Task/Abbreviations-automatic/Delphi/abbreviations-automatic.pas
similarity index 100%
rename from Task/Abbreviations-automatic/Delphi/abbreviations-automatic.delphi
rename to Task/Abbreviations-automatic/Delphi/abbreviations-automatic.pas
diff --git a/Task/Abbreviations-automatic/Julia/abbreviations-automatic.julia b/Task/Abbreviations-automatic/Julia/abbreviations-automatic.jl
similarity index 100%
rename from Task/Abbreviations-automatic/Julia/abbreviations-automatic.julia
rename to Task/Abbreviations-automatic/Julia/abbreviations-automatic.jl
diff --git a/Task/Abbreviations-automatic/Kotlin/abbreviations-automatic-1.kotlin b/Task/Abbreviations-automatic/Kotlin/abbreviations-automatic-1.kts
similarity index 100%
rename from Task/Abbreviations-automatic/Kotlin/abbreviations-automatic-1.kotlin
rename to Task/Abbreviations-automatic/Kotlin/abbreviations-automatic-1.kts
diff --git a/Task/Abbreviations-automatic/Kotlin/abbreviations-automatic-2.kotlin b/Task/Abbreviations-automatic/Kotlin/abbreviations-automatic-2.kts
similarity index 100%
rename from Task/Abbreviations-automatic/Kotlin/abbreviations-automatic-2.kotlin
rename to Task/Abbreviations-automatic/Kotlin/abbreviations-automatic-2.kts
diff --git a/Task/Abbreviations-automatic/PHP/abbreviations-automatic.php b/Task/Abbreviations-automatic/PHP/abbreviations-automatic.php
new file mode 100644
index 0000000000..b77d3893b6
--- /dev/null
+++ b/Task/Abbreviations-automatic/PHP/abbreviations-automatic.php
@@ -0,0 +1,18 @@
+function genMinAbbr(array $days): array {
+ $len = 0;
+ while(true) {
+ $dict = [];
+ $len++;
+ foreach($days as $day) {
+ $abbr = substr($day, 0, $len);
+ if (isset($dict[$abbr])) continue 2;
+ $dict[$abbr] = true;
+ }
+ return array_keys($dict);
+ }
+}
+
+foreach(explode("\n", file_get_contents("days-of-the-week.txt")) as $line) {
+ if (!$line) { echo "\n"; continue; }
+ echo implode(" ", genMinAbbr(explode(" ", $line))) . "\n";
+}
diff --git a/Task/Abbreviations-automatic/Rust/abbreviations-automatic.rust b/Task/Abbreviations-automatic/Rust/abbreviations-automatic.rs
similarity index 100%
rename from Task/Abbreviations-automatic/Rust/abbreviations-automatic.rust
rename to Task/Abbreviations-automatic/Rust/abbreviations-automatic.rs
diff --git a/Task/Abbreviations-automatic/Uiua/abbreviations-automatic.uiua b/Task/Abbreviations-automatic/Uiua/abbreviations-automatic.uiua
index 983c4fa405..dd8e665201 100644
--- a/Task/Abbreviations-automatic/Uiua/abbreviations-automatic.uiua
+++ b/Task/Abbreviations-automatic/Uiua/abbreviations-automatic.uiua
@@ -1,5 +1,4 @@
-# Experimental!
-# Find shortest distinct abbreviation length per line
+# Find shortest distinct abbreviation per line
Lines ← {"Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
"sing_kei_yaht sing_kei_yat sing_kei_yee sing_kei_saam sing_kei_sie sing_kei_ng sing_kei_luk"
@@ -7,11 +6,6 @@ Lines ← {"Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
"Diu_prima Diu_sequima Diu_tritima Diu_quartima Diu_quintima Diu_sextima Diu_sabbata"
"sunnudagur mánadagur tÿsdaguy mikudagur hósdagur friggjadagur leygardagur"
"Yek_Sham'beh Do_Sham'beh Seh_Sham'beh Cha'har_Sham'beh Panj_Sham'beh Jom'eh Sham'beh"}
-
-# Return 1+max_common_prefix
-AbbrevLen ← +1/↥◹(/↥↘1)⊞(/+\↧⬚@ =∩°□).
Split ← ⊜□⊸(≠@ )
-RemoveEmpty ← ▽⊸(≡(≠0◇⧻))
-Line ← ⊂⊂:": " °⋕:⊸(/(⊂⊂) " "≡(⬚@ ↙:°□)⊙¤)⟜AbbrevLen ◇Split
-≡⍚Line RemoveEmpty Lines
-≡&p
+Pref ← +1⬚¯1⊢⊚¬⬚@ ≡≍ # for two strings give pos of first diff char
+≡◇(&p$"_: _" :/$"_ _"⟜(⧻⊢)≡◇⬚@ ↙/↥/↥⊞◇Pref..Split)▽⊸≡(>0◇⧻)Lines
diff --git a/Task/Abbreviations-easy/ALGOL-68/abbreviations-easy.alg b/Task/Abbreviations-easy/ALGOL-68/abbreviations-easy.alg
index 3fe3c6e7fe..e232808609 100644
--- a/Task/Abbreviations-easy/ALGOL-68/abbreviations-easy.alg
+++ b/Task/Abbreviations-easy/ALGOL-68/abbreviations-easy.alg
@@ -1,12 +1,4 @@
# "Easy" abbreviations #
-# table of "commands" - upper-case indicates the mminimum abbreviation #
-STRING command table = "Add ALTer BAckup Bottom CAppend Change SCHANGE CInsert CLAst COMPress COpy "
- + "COUnt COVerlay CURsor DELete CDelete Down DUPlicate Xedit EXPand EXTract Find "
- + "NFind NFINDUp NFUp CFind FINdup FUp FOrward GET Help HEXType Input POWerinput "
- + "Join SPlit SPLTJOIN LOAD Locate CLocate LOWercase UPPercase LPrefix MACRO "
- + "MErge MODify MOve MSG Next Overlay PARSE PREServe PURge PUT PUTD Query QUIT "
- + "READ RECover REFRESH RENum REPeat Replace CReplace RESet RESTore RGTLEFT "
- + "RIght LEft SAVE SET SHift SI SORT SOS STAck STATus TOP TRAnsfer Type Up";
# returns the next word from text, updating pos #
PRIO NEXTWORD = 1;
@@ -80,6 +72,18 @@ PROC test expand = ( STRING words, command table )VOID:
print( ( "Output: ", results, newline ) )
END # test expand # ;
-# task test cases #
-test expand( "riG rePEAT copies put mo rest types fup. 6 poweRin", command table );
-test expand( "", command table )
+BEGIN # task test cases #
+ # table of "commands" #
+ # - upper-case indicates the mminimum abbreviation #
+ STRING command table
+ = "Add ALTer BAckup Bottom CAppend Change SCHANGE CInsert CLAst COMPress COpy "
+ + "COUnt COVerlay CURsor DELete CDelete Down DUPlicate Xedit EXPand EXTract Find "
+ + "NFind NFINDUp NFUp CFind FINdup FUp FOrward GET Help HEXType Input POWerinput "
+ + "Join SPlit SPLTJOIN LOAD Locate CLocate LOWercase UPPercase LPrefix MACRO "
+ + "MErge MODify MOve MSG Next Overlay PARSE PREServe PURge PUT PUTD Query QUIT "
+ + "READ RECover REFRESH RENum REPeat Replace CReplace RESet RESTore RGTLEFT "
+ + "RIght LEft SAVE SET SHift SI SORT SOS STAck STATus TOP TRAnsfer Type Up"
+ ;
+ test expand( "riG rePEAT copies put mo rest types fup. 6 poweRin", command table );
+ test expand( "", command table )
+END
diff --git a/Task/Abbreviations-easy/Delphi/abbreviations-easy.delphi b/Task/Abbreviations-easy/Delphi/abbreviations-easy.pas
similarity index 100%
rename from Task/Abbreviations-easy/Delphi/abbreviations-easy.delphi
rename to Task/Abbreviations-easy/Delphi/abbreviations-easy.pas
diff --git a/Task/Abbreviations-easy/Euphoria/abbreviations-easy.euphoria b/Task/Abbreviations-easy/Euphoria/abbreviations-easy.ex
similarity index 100%
rename from Task/Abbreviations-easy/Euphoria/abbreviations-easy.euphoria
rename to Task/Abbreviations-easy/Euphoria/abbreviations-easy.ex
diff --git a/Task/Abbreviations-easy/FutureBasic/abbreviations-easy.basic b/Task/Abbreviations-easy/FutureBasic/abbreviations-easy.basic
index a3a715c327..1cc3c42aec 100644
--- a/Task/Abbreviations-easy/FutureBasic/abbreviations-easy.basic
+++ b/Task/Abbreviations-easy/FutureBasic/abbreviations-easy.basic
@@ -27,12 +27,12 @@ end fn
local fn Commands as CFArrayRef
CFStringRef words = @"Add ALTer BAckup Bottom CAppend Change SCHANGE CInsert CLAst COMPress COpy "
- words = fn StringByAppendingString( words, @"COUnt COVerlay CURsor DELete CDelete Down DUPlicate Xedit EXPand EXTract Find " )
- words = fn StringByAppendingString( words, @"NFind NFINDUp NFUp CFind FINdup FUp FOrward GET Help HEXType Input POWerinput " )
- words = fn StringByAppendingString( words, @"Join SPlit SPLTJOIN LOAD Locate CLocate LOWercase UPPercase LPrefix MACRO " )
- words = fn StringByAppendingString( words, @"MErge MODify MOve MSG Next Overlay PARSE PREServe PURge PUT PUTD Query QUIT " )
- words = fn StringByAppendingString( words, @"READ RECover REFRESH RENum REPeat Replace CReplace RESet RESTore RGTLEFT " )
- words = fn StringByAppendingString( words, @"RIght LEft SAVE SET SHift SI SORT SOS STAck STATus TOP TRAnsfer Type Up" )
+ words = concat( words, @"COUnt COVerlay CURsor DELete CDelete Down DUPlicate Xedit EXPand EXTract Find " )
+ words = concat( words, @"NFind NFINDUp NFUp CFind FINdup FUp FOrward GET Help HEXType Input POWerinput " )
+ words = concat( words, @"Join SPlit SPLTJOIN LOAD Locate CLocate LOWercase UPPercase LPrefix MACRO " )
+ words = concat( words, @"MErge MODify MOve MSG Next Overlay PARSE PREServe PURge PUT PUTD Query QUIT " )
+ words = concat( words, @"READ RECover REFRESH RENum REPeat Replace CReplace RESet RESTore RGTLEFT " )
+ words = concat( words, @"RIght LEft SAVE SET SHift SI SORT SOS STAck STATus TOP TRAnsfer Type Up" )
end fn = fn StringComponentsSeparatedByCharactersInSet( words, fn CharacterSetWhitespaceAndNewlineSet )
@@ -55,7 +55,7 @@ void local fn Validate
CFStringRef userString = fn ControlStringValue( _userStringFld )
CFArrayRef words = fn StringComponentsSeparatedByCharactersInSet( userString, fn CharacterSetWhitespaceAndNewlineSet )
long cmdCount = len(commands)
- CFMutableStringRef results = fn MutableStringWithCapacity(0)
+ CFMutableStringRef results = fn MutableStringNew
long wordCount = len(words)
long i, j
for i = 0 to wordCount - 1
diff --git a/Task/Abbreviations-easy/Julia/abbreviations-easy.julia b/Task/Abbreviations-easy/Julia/abbreviations-easy.jl
similarity index 100%
rename from Task/Abbreviations-easy/Julia/abbreviations-easy.julia
rename to Task/Abbreviations-easy/Julia/abbreviations-easy.jl
diff --git a/Task/Abbreviations-easy/Kotlin/abbreviations-easy.kotlin b/Task/Abbreviations-easy/Kotlin/abbreviations-easy.kts
similarity index 100%
rename from Task/Abbreviations-easy/Kotlin/abbreviations-easy.kotlin
rename to Task/Abbreviations-easy/Kotlin/abbreviations-easy.kts
diff --git a/Task/Abbreviations-easy/OCaml/abbreviations-easy.ocaml b/Task/Abbreviations-easy/OCaml/abbreviations-easy.ml
similarity index 100%
rename from Task/Abbreviations-easy/OCaml/abbreviations-easy.ocaml
rename to Task/Abbreviations-easy/OCaml/abbreviations-easy.ml
diff --git a/Task/Abbreviations-easy/Rust/abbreviations-easy.rust b/Task/Abbreviations-easy/Rust/abbreviations-easy.rs
similarity index 100%
rename from Task/Abbreviations-easy/Rust/abbreviations-easy.rust
rename to Task/Abbreviations-easy/Rust/abbreviations-easy.rs
diff --git a/Task/Abbreviations-simple/ALGOL-68/abbreviations-simple.alg b/Task/Abbreviations-simple/ALGOL-68/abbreviations-simple.alg
index 7fb19e2ffc..636f2ee9b6 100644
--- a/Task/Abbreviations-simple/ALGOL-68/abbreviations-simple.alg
+++ b/Task/Abbreviations-simple/ALGOL-68/abbreviations-simple.alg
@@ -51,10 +51,11 @@ PROC count commands = ( STRING commands )INT:
result
END # count commands # ;
+# build a table of the commands and their minimum lengths #
# list of "commands" - the words are optionally followed by the minimum #
# length of abbreviation - if there isn't a number #
# the command can only appear in full #
-STRING commands
+STRING command list
= "add 1 alter 3 backup 2 bottom 1 Cappend 2 change 1 Schange Cinsert 2 Clast 3 "
+ "compress 4 copy 2 count 3 Coverlay 3 cursor 3 delete 3 Cdelete 2 down 1 duplicate "
+ "3 xEdit 1 expand 3 extract 3 find 1 Nfind 2 Nfindup 6 NfUP 3 Cfind 2 findUP 3 fUP 2 "
@@ -64,7 +65,6 @@ STRING commands
+ "refresh renum 3 repeat 3 replace 1 Creplace 2 reset 3 restore 4 rgtLEFT right 2 left "
+ "2 save set shift 2 si sort sos stack 3 status 4 top transfer 3 type 1 up 1 "
;
-# build the tables of the commands and their minimum lengths #
PROC load commands = ( STRING commands )VOID:
BEGIN
INT cmd pos := 0;
@@ -82,6 +82,7 @@ PROC load commands = ( STRING commands )VOID:
FI
OD
END # load commands # ;
+
# searches for word in command table and returns the full command #
# matching the possible abbreviation or *error* if there is no match #
OP EXPAND = ( STRING word )STRING:
@@ -122,9 +123,9 @@ PROC test expand = ( STRING words )VOID:
END # test expand # ;
# build the command table #
-[ 1 : count commands( commands ) ]STRING command table;
-[ 1 : UPB command table ]INT min abbreviation;
-load commands( commands );
+[ 1 : count commands( command list ) ]STRING command table;
+[ 1 : UPB command table ]INT min abbreviation;
+load commands( commandlist );
# task test cases #
test expand( "riG rePEAT copies put mo rest types fup. 6 poweRin" )
diff --git a/Task/Abbreviations-simple/Crystal/abbreviations-simple.crystal b/Task/Abbreviations-simple/Crystal/abbreviations-simple.cr
similarity index 100%
rename from Task/Abbreviations-simple/Crystal/abbreviations-simple.crystal
rename to Task/Abbreviations-simple/Crystal/abbreviations-simple.cr
diff --git a/Task/Abbreviations-simple/Delphi/abbreviations-simple.delphi b/Task/Abbreviations-simple/Delphi/abbreviations-simple.pas
similarity index 100%
rename from Task/Abbreviations-simple/Delphi/abbreviations-simple.delphi
rename to Task/Abbreviations-simple/Delphi/abbreviations-simple.pas
diff --git a/Task/Abbreviations-simple/FreeBASIC/abbreviations-simple.basic b/Task/Abbreviations-simple/FreeBASIC/abbreviations-simple.basic
new file mode 100644
index 0000000000..357da06424
--- /dev/null
+++ b/Task/Abbreviations-simple/FreeBASIC/abbreviations-simple.basic
@@ -0,0 +1,83 @@
+Function Token(cad As String, tokens() As String) As Integer
+ Dim As Integer n = 0
+ Dim As String temp = ""
+ Dim As Integer i
+
+ For i = 1 To Len(cad)
+ If Mid(cad, i, 1) <> " " Then
+ temp &= Mid(cad, i, 1)
+ Elseif temp <> "" Then
+ n += 1
+ Redim Preserve tokens(1 To n)
+ tokens(n) = temp
+ temp = ""
+ End If
+ Next
+
+ If temp <> "" Then
+ n += 1
+ Redim Preserve tokens(1 To n)
+ tokens(n) = temp
+ End If
+
+ Return n
+End Function
+
+Dim As String c = "add 1 alter 3 backup 2 bottom 1 Cappend 2 change 1 Schange Cinsert 2 Clast 3" & _
+" compress 4 copy 2 count 3 Coverlay 3 cursor 3 delete 3 Cdelete 2 down 1 duplicate" & _
+" 3 xEdit 1 expand 3 extract 3 find 1 Nfind 2 Nfindup 6 NfUP 3 Cfind 2 findUP 3 fUP 2" & _
+" forward 2 get help 1 hexType 4 input 1 powerInput 3 join 1 split 2 spltJOIN load" & _
+" locate 1 Clocate 2 lowerCase 3 upperCase 3 Lprefix 2 macro merge 2 modify 3 move 2" & _
+" msg next 1 overlay 1 parse preserve 4 purge 3 put putD query 1 quit read recover 3" & _
+" refresh renum 3 repeat 3 replace 1 Creplace 2 reset 3 restore 4 rgtLEFT right 2 left" & _
+" 2 save set shift 2 si sort sos stack 3 status 4 top transfer 3 type 1 up 1"
+c = Ucase(c)
+
+Dim As String chunk()
+Dim As Integer i, j, n, v
+
+n = Token(c, chunk())
+
+Dim As Integer lonc(1 To n)
+
+For i = 1 To n - 1
+ v = Val(chunk(i + 1))
+ If v Then
+ lonc(i) = v
+ chunk(i + 1) = ""
+ Else
+ lonc(i) = Len(chunk(i))
+ End If
+Next
+
+Dim As String test = "riG rePEAT copies put mo rest types fup. 6 poweRin"
+test = Ucase(test)
+
+Dim As String w()
+Dim As Integer x = Token(test, w())
+
+Dim As Integer lonw(1 To x)
+
+For i = 1 To x
+ lonw(i) = Len(w(i))
+Next
+
+Dim As String r = ""
+
+For j = 1 To x
+ Dim As String p = ""
+ For i = 1 To n
+ Dim As String lc = Left(chunk(i), lonw(j))
+ Dim As String lw = w(j)
+ If (lw = lc) And (lonc(i) <= lonw(j)) Then
+ p = chunk(i)
+ Exit For
+ End If
+ Next
+ If p = "" Then p = "*error*"
+ r &= " " & p
+Next
+
+Print r
+
+Sleep
diff --git a/Task/Abbreviations-simple/FutureBasic/abbreviations-simple.basic b/Task/Abbreviations-simple/FutureBasic/abbreviations-simple.basic
index 7efb0d63b7..633cab9bbc 100644
--- a/Task/Abbreviations-simple/FutureBasic/abbreviations-simple.basic
+++ b/Task/Abbreviations-simple/FutureBasic/abbreviations-simple.basic
@@ -26,17 +26,17 @@ end fn
local fn Commands as CFArrayRef
CFStringRef cmd, string
long abbrLen
- CFMutableArrayRef commands = fn MutableArrayWithCapacity(0)
+ CFMutableArrayRef commands = fn MutableArrayNew
ScannerRef scanner
string = @" add 1 alter 3 backup 2 bottom 1 Cappend 2 change 1 Schange Cinsert 2 Clast 3"
- string = fn StringByAppendingString( string, @" compress 4 copy 2 count 3 Coverlay 3 cursor 3 delete 3 Cdelete 2 down 1 duplicate" )
- string = fn StringByAppendingString( string, @" 3 xEdit 1 expand 3 extract 3 find 1 Nfind 2 Nfindup 6 NfUP 3 Cfind 2 findUP 3 fUP 2" )
- string = fn StringByAppendingString( string, @" forward 2 get help 1 hexType 4 input 1 powerInput 3 join 1 split 2 spltJOIN load" )
- string = fn StringByAppendingString( string, @" locate 1 Clocate 2 lowerCase 3 upperCase 3 Lprefix 2 macro merge 2 modify 3 move 2" )
- string = fn StringByAppendingString( string, @" msg next 1 overlay 1 parse preserve 4 purge 3 put putD query 1 quit read recover 3" )
- string = fn StringByAppendingString( string, @" refresh renum 3 repeat 3 replace 1 Creplace 2 reset 3 restore 4 rgtLEFT right 2 left" )
- string = fn StringByAppendingString( string, @" 2 save set shift 2 si sort sos stack 3 status 4 top transfer 3 type 1 up 1" )
+ string = concat( string, @" compress 4 copy 2 count 3 Coverlay 3 cursor 3 delete 3 Cdelete 2 down 1 duplicate" )
+ string = concat( string, @" 3 xEdit 1 expand 3 extract 3 find 1 Nfind 2 Nfindup 6 NfUP 3 Cfind 2 findUP 3 fUP 2" )
+ string = concat( string, @" forward 2 get help 1 hexType 4 input 1 powerInput 3 join 1 split 2 spltJOIN load" )
+ string = concat( string, @" locate 1 Clocate 2 lowerCase 3 upperCase 3 Lprefix 2 macro merge 2 modify 3 move 2" )
+ string = concat( string, @" msg next 1 overlay 1 parse preserve 4 purge 3 put putD query 1 quit read recover 3" )
+ string = concat( string, @" refresh renum 3 repeat 3 replace 1 Creplace 2 reset 3 restore 4 rgtLEFT right 2 left" )
+ string = concat( string, @" 2 save set shift 2 si sort sos stack 3 status 4 top transfer 3 type 1 up 1" )
scanner = fn ScannerWithString( string )
while ( fn ScannerIsAtEnd( scanner ) == NO )
@@ -59,7 +59,7 @@ void local fn Validate
commands = fn Commands
userString = fn ControlStringValue( _userStringFld )
words = fn StringComponentsSeparatedByCharactersInSet( userString, fn CharacterSetWhitespaceAndNewlineSet )
- results = fn MutableStringWithCapacity( 0 )
+ results = fn MutableStringNew
wordCount = len( words )
for i = 0 to wordCount - 1
@@ -83,7 +83,6 @@ void local fn Validate
result = fn StringWithFormat( @"%@ ",ucase( cmd ) )
break
end if
-
next
MutableStringAppendString( results, result )
@@ -93,14 +92,12 @@ void local fn Validate
ControlSetStringValue( _resultsStringFld, results )
end fn
-
void local fn DoDialog( ev as long, tag as long )
select ( ev )
case _btnClick : fn Validate
end select
end fn
-
editmenu 1
fn BuildWindow
diff --git a/Task/Abbreviations-simple/Julia/abbreviations-simple.julia b/Task/Abbreviations-simple/Julia/abbreviations-simple.jl
similarity index 100%
rename from Task/Abbreviations-simple/Julia/abbreviations-simple.julia
rename to Task/Abbreviations-simple/Julia/abbreviations-simple.jl
diff --git a/Task/Abbreviations-simple/Kotlin/abbreviations-simple.kotlin b/Task/Abbreviations-simple/Kotlin/abbreviations-simple.kts
similarity index 100%
rename from Task/Abbreviations-simple/Kotlin/abbreviations-simple.kotlin
rename to Task/Abbreviations-simple/Kotlin/abbreviations-simple.kts
diff --git a/Task/Abbreviations-simple/NewLISP/abbreviations-simple.l b/Task/Abbreviations-simple/NewLISP/abbreviations-simple.l
new file mode 100644
index 0000000000..2f137ce9e2
--- /dev/null
+++ b/Task/Abbreviations-simple/NewLISP/abbreviations-simple.l
@@ -0,0 +1,37 @@
+(define (foo text)
+ (let (command-table '() toks
+ (map upper-case (parse (trim "
+ add 1 alter 3 backup 2 bottom 1 Cappend 2 change 1
+ Schange Cinsert 2 Clast 3 compress 4 copy 2 count 3
+ Coverlay 3 cursor 3 delete 3 Cdelete 2 down 1
+ duplicate 3 xEdit 1 expand 3 extract 3 find 1 Nfind 2
+ Nfindup 6 NfUP 3 Cfind 2 findUP 3 fUP 2 forward 2 get
+ help 1 hexType 4 input 1 powerInput 3 join 1 split 2
+ spltJOIN load locate 1 Clocate 2 lowerCase 3 upperCase
+ 3 Lprefix 2 macro merge 2 modify 3 move 2 msg next 1
+ overlay 1 parse preserve 4 purge 3 put putD query 1
+ quit read recover 3 refresh renum 3 repeat 3 replace 1
+ Creplace 2 reset 3 restore 4 rgtLEFT right 2 left 2
+ save set shift 2 si sort sos stack 3 status 4 top
+ transfer 3 type 1 up 1"))))
+ (local (tok amin word found? result)
+ (until (empty? toks)
+ (setq tok (pop toks))
+ (setq amin
+ (or (and (true? toks) (int (first toks)) (int (pop toks)))
+ 99))
+ (push (list tok amin) command-table -1))
+ (dolist (word (parse (trim text)))
+ (setq word (upper-case word))
+ (setq found? nil)
+ (dolist (command-pair command-table found?)
+ (when (or (= word (command-pair 0))
+ (and (starts-with (command-pair 0) word)
+ (>= (length word) (command-pair 1))))
+ (setq found? (command-pair 0))))
+ (push (or found? "*error*") result -1))
+ (join result " "))))
+
+(foo
+"riG rePEAT copies put mo rest types fup. 6 poweRin"
+)
diff --git a/Task/Abbreviations-simple/OCaml/abbreviations-simple-1.ocaml b/Task/Abbreviations-simple/OCaml/abbreviations-simple-1.ml
similarity index 100%
rename from Task/Abbreviations-simple/OCaml/abbreviations-simple-1.ocaml
rename to Task/Abbreviations-simple/OCaml/abbreviations-simple-1.ml
diff --git a/Task/Abbreviations-simple/OCaml/abbreviations-simple-2.ocaml b/Task/Abbreviations-simple/OCaml/abbreviations-simple-2.ml
similarity index 100%
rename from Task/Abbreviations-simple/OCaml/abbreviations-simple-2.ocaml
rename to Task/Abbreviations-simple/OCaml/abbreviations-simple-2.ml
diff --git a/Task/Abbreviations-simple/OCaml/abbreviations-simple-3.ocaml b/Task/Abbreviations-simple/OCaml/abbreviations-simple-3.ml
similarity index 100%
rename from Task/Abbreviations-simple/OCaml/abbreviations-simple-3.ocaml
rename to Task/Abbreviations-simple/OCaml/abbreviations-simple-3.ml
diff --git a/Task/Abbreviations-simple/OCaml/abbreviations-simple-4.ocaml b/Task/Abbreviations-simple/OCaml/abbreviations-simple-4.ml
similarity index 100%
rename from Task/Abbreviations-simple/OCaml/abbreviations-simple-4.ocaml
rename to Task/Abbreviations-simple/OCaml/abbreviations-simple-4.ml
diff --git a/Task/Abbreviations-simple/Rust/abbreviations-simple.rust b/Task/Abbreviations-simple/Rust/abbreviations-simple.rs
similarity index 100%
rename from Task/Abbreviations-simple/Rust/abbreviations-simple.rust
rename to Task/Abbreviations-simple/Rust/abbreviations-simple.rs
diff --git a/Task/Abelian-sandpile-model-Identity/FreeBASIC/abelian-sandpile-model-identity.basic b/Task/Abelian-sandpile-model-Identity/FreeBASIC/abelian-sandpile-model-identity.basic
new file mode 100644
index 0000000000..e6b8ab0cf6
--- /dev/null
+++ b/Task/Abelian-sandpile-model-Identity/FreeBASIC/abelian-sandpile-model-identity.basic
@@ -0,0 +1,115 @@
+Sub SandpilePrint(s() As Integer)
+ Dim As Integer r, c
+ For r = 1 To 3
+ For c = 1 To 3
+ Print s(r, c);
+ Next c
+ Print
+ Next r
+ Print
+End Sub
+
+Sub SandpileTopple(s() As Integer)
+ Dim As Integer r, c, value
+ Dim As Boolean stable = False
+
+ While Not stable
+ stable = True
+ For r = 1 To 3
+ For c = 1 To 3
+ value = s(r, c)
+ If value > 3 Then
+ s(r, c) -= 4
+ If r > 1 Then s(r - 1, c) += 1
+ If r < 3 Then s(r + 1, c) += 1
+ If c > 1 Then s(r, c - 1) += 1
+ If c < 3 Then s(r, c + 1) += 1
+ Print Chr(32); String(5, Chr(25)); Chr(10)
+ SandpilePrint(s())
+ stable = False
+ End If
+ Next c
+ Next r
+ Wend
+End Sub
+
+Sub SandpileLoad(s() As Integer, values As String)
+ Dim As Integer r, c, i = 1
+ For r = 1 To 3
+ For c = 1 To 3
+ s(r, c) = Val(Mid(values, i, 1))
+ i += 1
+ Next c
+ Next r
+End Sub
+
+Sub main()
+ Dim As Integer r, c
+ Dim As Integer s(1 To 3, 1 To 3), s1(1 To 3, 1 To 3), s2(1 To 3, 1 To 3), s3(1 To 3, 1 To 3), s3_id(1 To 3, 1 To 3)
+
+ ' s
+ Print !"avalanche\n----------"
+ SandpileLoad(s(), "433312023")
+ SandpilePrint(s())
+ SandpileTopple(s())
+
+ ' s1
+ SandpileLoad(s1(), "120211013")
+
+ ' s2
+ SandpileLoad(s2(), "213101010")
+
+ ' s1 + s2
+ For r = 1 To 3
+ For c = 1 To 3
+ s(r, c) = s1(r, c) + s2(r, c)
+ Next c
+ Next r
+ Print !"s1 + s2\n----------"
+ SandpileTopple(s())
+ SandpilePrint(s())
+
+ ' s2 + s1
+ For r = 1 To 3
+ For c = 1 To 3
+ s(r, c) = s2(r, c) + s1(r, c)
+ Next c
+ Next r
+ Print !"s2 + s1\n----------"
+ SandpileTopple(s())
+ SandpilePrint(s())
+
+ ' s3
+ SandpileLoad(s3(), "333333333")
+ Print !"s3\n----------"
+ SandpilePrint(s3())
+
+ ' s3_id
+ SandpileLoad(s3_id(), "212101212")
+ Print !"s3_id\n----------"
+ SandpilePrint(s3_id())
+
+ ' s3 + s3_id
+ For r = 1 To 3
+ For c = 1 To 3
+ s(r, c) = s3(r, c) + s3_id(r, c)
+ Next c
+ Next r
+ Print !"s3 + s3_id\n----------"
+ SandpilePrint(s())
+ SandpileTopple(s())
+
+ ' s3_id + s3_id
+ For r = 1 To 3
+ For c = 1 To 3
+ s(r, c) = s3_id(r, c) + s3_id(r, c)
+ Next c
+ Next r
+ Print !"s3_id + s3_id\n-----------"
+ SandpilePrint(s())
+ SandpileTopple(s())
+End Sub
+
+main()
+
+Sleep
diff --git a/Task/Abelian-sandpile-model-Identity/Julia/abelian-sandpile-model-identity.julia b/Task/Abelian-sandpile-model-Identity/Julia/abelian-sandpile-model-identity.jl
similarity index 100%
rename from Task/Abelian-sandpile-model-Identity/Julia/abelian-sandpile-model-identity.julia
rename to Task/Abelian-sandpile-model-Identity/Julia/abelian-sandpile-model-identity.jl
diff --git a/Task/Abelian-sandpile-model-Identity/OCaml/abelian-sandpile-model-identity.ocaml b/Task/Abelian-sandpile-model-Identity/OCaml/abelian-sandpile-model-identity.ml
similarity index 100%
rename from Task/Abelian-sandpile-model-Identity/OCaml/abelian-sandpile-model-identity.ocaml
rename to Task/Abelian-sandpile-model-Identity/OCaml/abelian-sandpile-model-identity.ml
diff --git a/Task/Abelian-sandpile-model-Identity/Rust/abelian-sandpile-model-identity.rust b/Task/Abelian-sandpile-model-Identity/Rust/abelian-sandpile-model-identity.rs
similarity index 100%
rename from Task/Abelian-sandpile-model-Identity/Rust/abelian-sandpile-model-identity.rust
rename to Task/Abelian-sandpile-model-Identity/Rust/abelian-sandpile-model-identity.rs
diff --git a/Task/Abelian-sandpile-model/Delphi/abelian-sandpile-model.delphi b/Task/Abelian-sandpile-model/Delphi/abelian-sandpile-model.pas
similarity index 100%
rename from Task/Abelian-sandpile-model/Delphi/abelian-sandpile-model.delphi
rename to Task/Abelian-sandpile-model/Delphi/abelian-sandpile-model.pas
diff --git a/Task/Abelian-sandpile-model/Julia/abelian-sandpile-model.julia b/Task/Abelian-sandpile-model/Julia/abelian-sandpile-model.jl
similarity index 100%
rename from Task/Abelian-sandpile-model/Julia/abelian-sandpile-model.julia
rename to Task/Abelian-sandpile-model/Julia/abelian-sandpile-model.jl
diff --git a/Task/Abelian-sandpile-model/OCaml/abelian-sandpile-model.ocaml b/Task/Abelian-sandpile-model/OCaml/abelian-sandpile-model.ml
similarity index 100%
rename from Task/Abelian-sandpile-model/OCaml/abelian-sandpile-model.ocaml
rename to Task/Abelian-sandpile-model/OCaml/abelian-sandpile-model.ml
diff --git a/Task/Abelian-sandpile-model/Rust/abelian-sandpile-model.rust b/Task/Abelian-sandpile-model/Rust/abelian-sandpile-model.rs
similarity index 100%
rename from Task/Abelian-sandpile-model/Rust/abelian-sandpile-model.rust
rename to Task/Abelian-sandpile-model/Rust/abelian-sandpile-model.rs
diff --git a/Task/Abelian-sandpile-model/Scheme/abelian-sandpile-model.ss b/Task/Abelian-sandpile-model/Scheme/abelian-sandpile-model.scm
similarity index 100%
rename from Task/Abelian-sandpile-model/Scheme/abelian-sandpile-model.ss
rename to Task/Abelian-sandpile-model/Scheme/abelian-sandpile-model.scm
diff --git a/Task/Abstract-type/Crystal/abstract-type.crystal b/Task/Abstract-type/Crystal/abstract-type.cr
similarity index 100%
rename from Task/Abstract-type/Crystal/abstract-type.crystal
rename to Task/Abstract-type/Crystal/abstract-type.cr
diff --git a/Task/Abstract-type/Delphi/abstract-type-1.delphi b/Task/Abstract-type/Delphi/abstract-type-1.pas
similarity index 100%
rename from Task/Abstract-type/Delphi/abstract-type-1.delphi
rename to Task/Abstract-type/Delphi/abstract-type-1.pas
diff --git a/Task/Abstract-type/Delphi/abstract-type-2.delphi b/Task/Abstract-type/Delphi/abstract-type-2.pas
similarity index 100%
rename from Task/Abstract-type/Delphi/abstract-type-2.delphi
rename to Task/Abstract-type/Delphi/abstract-type-2.pas
diff --git a/Task/Abstract-type/EMal/abstract-type.emal b/Task/Abstract-type/EMal/abstract-type.emal
index 7c23bd32c9..914f209076 100644
--- a/Task/Abstract-type/EMal/abstract-type.emal
+++ b/Task/Abstract-type/EMal/abstract-type.emal
@@ -3,35 +3,34 @@
|^
type Beast
interface
- fun getKind = text by block do end
- fun getName = text by block do end
- fun getCry = text by block do end
+ fun getKind ← text by block do end
+ fun getName ← text by block do end
+ fun getCry ← text by block do end
end
type Dog implements Beast
model
text kind
text name
- fun getKind = text by block do return me.kind end
- fun getName = text by block do return me.name end
- fun getCry = text by block do return "Woof" end
+ fun getKind ← text by block do return me.kind end
+ fun getName ← text by block do return me.name end
+ fun getCry ← text by block do return "Woof" end
end
type Cat implements Beast
model
text kind
text name
- fun getKind = text by block do return me.kind end
- fun getName = text by block do return me.name end
- fun getCry = text by block do return "Meow" end
+ fun getKind ← text by block do return me.kind end
+ fun getName ← text by block do return me.name end
+ fun getCry ← text by block do return "Meow" end
end
type AbstractType
-^|Beast b = Beast() # interface instantiation is not allowed|^
-fun bprint = void by Beast b
- writeLine(b.getName() + ", who's a " + b.getKind() + ", cries: " + b.getCry() + ".")
-end
+^|Beast b ← Beast() # interface instantiation is not allowed|^
+fun bprint ← :@] NB. if 0=x, 1+y
-c2=: <:@[ ack 1: NB. if 0=y, (x-1) ack 1
-c3=: <:@[ ack [ ack <:@] NB. else, (x-1) ack x ack y-1
+ack=: >:@]`(<:@[ $: 1:)`(<:@[ $: ($: <:))@.(,&*i.0:)M.
diff --git a/Task/Ackermann-function/J/ackermann-function-2.j b/Task/Ackermann-function/J/ackermann-function-2.j
index 397865d9a4..4f1c56b769 100644
--- a/Task/Ackermann-function/J/ackermann-function-2.j
+++ b/Task/Ackermann-function/J/ackermann-function-2.j
@@ -1,8 +1,4 @@
- 0 ack 3
-4
- 1 ack 3
-5
- 2 ack 3
-9
- 3 ack 3
-61
+c1=: >:@] NB. if 0=x, 1+y
+c2=: <:@[ ack 1: NB. if 0=y, (x-1) ack 1
+c3=: <:@[ ack [ ack <:@] NB. else, (x-1) ack x ack y-1
+ack=: c1`c2`c3@.(,&* i. 0:)M.
diff --git a/Task/Ackermann-function/J/ackermann-function-3.j b/Task/Ackermann-function/J/ackermann-function-3.j
index 7b48188e8a..397865d9a4 100644
--- a/Task/Ackermann-function/J/ackermann-function-3.j
+++ b/Task/Ackermann-function/J/ackermann-function-3.j
@@ -1 +1,8 @@
- Ack=. 3 -~ [ ({&(2 4$'>: 2x&+') ::(,&'&1'&'2x&*'@:(-&2))"0@:[ 128!:2 ]) 3 + ]
+ 0 ack 3
+4
+ 1 ack 3
+5
+ 2 ack 3
+9
+ 3 ack 3
+61
diff --git a/Task/Ackermann-function/J/ackermann-function-4.j b/Task/Ackermann-function/J/ackermann-function-4.j
index d399b2f999..7b48188e8a 100644
--- a/Task/Ackermann-function/J/ackermann-function-4.j
+++ b/Task/Ackermann-function/J/ackermann-function-4.j
@@ -1,15 +1 @@
- 0 1 2 3 Ack 0 1 2 3 4 5 6 7
-1 2 3 4 5 6 7 8
-2 3 4 5 6 7 8 9
-3 5 7 9 11 13 15 17
-5 13 29 61 125 253 509 1021
-
- 3 4 Ack 0 1 2
- 5 13 ...
-13 65533 2003529930406846464979072351560255750447825475569751419265016973710894059556311453089506130880933348101038234342907263181822949382118812668869506364761547029165041871916351587966347219442930927982084309104855990570159318959639524863372367203002916...
-
- 4 # @: ": @: Ack 2 NB. Number of digits of 4 Ack 2
-19729
-
- 5 Ack 0
-65533
+ Ack=. 3 -~ [ ({&(2 4$'>: 2x&+') ::(,&'&1'&'2x&*'@:(-&2))"0@:[ 128!:2 ]) 3 + ]
diff --git a/Task/Ackermann-function/J/ackermann-function-5.j b/Task/Ackermann-function/J/ackermann-function-5.j
index 694278f3db..d399b2f999 100644
--- a/Task/Ackermann-function/J/ackermann-function-5.j
+++ b/Task/Ackermann-function/J/ackermann-function-5.j
@@ -1,27 +1,15 @@
- o=. @: NB. Composition of verbs (functions)
- x=. o[ NB. Composing the left noun (argument)
+ 0 1 2 3 Ack 0 1 2 3 4 5 6 7
+1 2 3 4 5 6 7 8
+2 3 4 5 6 7 8 9
+3 5 7 9 11 13 15 17
+5 13 29 61 125 253 509 1021
- (rows2up=. ,&'&1'&'2x&*') o i. 4
-2x&*
-2x&*&1
-2x&*&1&1
-2x&*&1&1&1
- NB. 2's multiplication, exponentiation, tetration, pentation, etc.
+ 3 4 Ack 0 1 2
+ 5 13 ...
+13 65533 2003529930406846464979072351560255750447825475569751419265016973710894059556311453089506130880933348101038234342907263181822949382118812668869506364761547029165041871916351587966347219442930927982084309104855990570159318959639524863372367203002916...
- 0 1 2 (BuckTruncated=. (rows2up x apply ]) f.) 0 1 2 3 4 5
-0 2 4 6 8 ...
-1 2 4 8 16 ...
-1 2 4 16 65536 2003529930406846464979072351560255750447825475569751419265016973710894059556311453089506130880933348101038234342907263181822949382118812668869506364761547029165041871916351587966347219442930927982084309104855990570159318959639524863372367203...
- NB. Buck truncated function (missing the first two rows)
+ 4 # @: ": @: Ack 2 NB. Number of digits of 4 Ack 2
+19729
- BuckTruncated NB. Buck truncated function-level code
-,&'&1'&'2x&*'@:[ 128!:2 ]
-
- (rows01=. {&('>:',:'2x&+')) 0 1 NB. The missing first two rows
->:
-2x&+
-
- Buck=. (rows01 :: (rows2up o (-&2)))"0 x apply ]
-
- (Ack=. (3 -~ [ Buck 3 + ])f.) NB. Ackermann function-level code
-3 -~ [ ({&(2 4$'>: 2x&+') ::(,&'&1'&'2x&*'@:(-&2))"0@:[ 128!:2 ]) 3 + ]
+ 5 Ack 0
+65533
diff --git a/Task/Ackermann-function/J/ackermann-function-6.j b/Task/Ackermann-function/J/ackermann-function-6.j
new file mode 100644
index 0000000000..694278f3db
--- /dev/null
+++ b/Task/Ackermann-function/J/ackermann-function-6.j
@@ -0,0 +1,27 @@
+ o=. @: NB. Composition of verbs (functions)
+ x=. o[ NB. Composing the left noun (argument)
+
+ (rows2up=. ,&'&1'&'2x&*') o i. 4
+2x&*
+2x&*&1
+2x&*&1&1
+2x&*&1&1&1
+ NB. 2's multiplication, exponentiation, tetration, pentation, etc.
+
+ 0 1 2 (BuckTruncated=. (rows2up x apply ]) f.) 0 1 2 3 4 5
+0 2 4 6 8 ...
+1 2 4 8 16 ...
+1 2 4 16 65536 2003529930406846464979072351560255750447825475569751419265016973710894059556311453089506130880933348101038234342907263181822949382118812668869506364761547029165041871916351587966347219442930927982084309104855990570159318959639524863372367203...
+ NB. Buck truncated function (missing the first two rows)
+
+ BuckTruncated NB. Buck truncated function-level code
+,&'&1'&'2x&*'@:[ 128!:2 ]
+
+ (rows01=. {&('>:',:'2x&+')) 0 1 NB. The missing first two rows
+>:
+2x&+
+
+ Buck=. (rows01 :: (rows2up o (-&2)))"0 x apply ]
+
+ (Ack=. (3 -~ [ Buck 3 + ])f.) NB. Ackermann function-level code
+3 -~ [ ({&(2 4$'>: 2x&+') ::(,&'&1'&'2x&*'@:(-&2))"0@:[ 128!:2 ]) 3 + ]
diff --git a/Task/Ackermann-function/Julia/ackermann-function-1.julia b/Task/Ackermann-function/Julia/ackermann-function-1.jl
similarity index 100%
rename from Task/Ackermann-function/Julia/ackermann-function-1.julia
rename to Task/Ackermann-function/Julia/ackermann-function-1.jl
diff --git a/Task/Ackermann-function/Julia/ackermann-function-2.julia b/Task/Ackermann-function/Julia/ackermann-function-2.jl
similarity index 100%
rename from Task/Ackermann-function/Julia/ackermann-function-2.julia
rename to Task/Ackermann-function/Julia/ackermann-function-2.jl
diff --git a/Task/Ackermann-function/Julia/ackermann-function-3.julia b/Task/Ackermann-function/Julia/ackermann-function-3.jl
similarity index 100%
rename from Task/Ackermann-function/Julia/ackermann-function-3.julia
rename to Task/Ackermann-function/Julia/ackermann-function-3.jl
diff --git a/Task/Ackermann-function/Kotlin/ackermann-function.kotlin b/Task/Ackermann-function/Kotlin/ackermann-function.kts
similarity index 100%
rename from Task/Ackermann-function/Kotlin/ackermann-function.kotlin
rename to Task/Ackermann-function/Kotlin/ackermann-function.kts
diff --git a/Task/Ackermann-function/OCaml/ackermann-function-1.ocaml b/Task/Ackermann-function/OCaml/ackermann-function-1.ml
similarity index 100%
rename from Task/Ackermann-function/OCaml/ackermann-function-1.ocaml
rename to Task/Ackermann-function/OCaml/ackermann-function-1.ml
diff --git a/Task/Ackermann-function/OCaml/ackermann-function-2.ocaml b/Task/Ackermann-function/OCaml/ackermann-function-2.ml
similarity index 100%
rename from Task/Ackermann-function/OCaml/ackermann-function-2.ocaml
rename to Task/Ackermann-function/OCaml/ackermann-function-2.ml
diff --git a/Task/Ackermann-function/OCaml/ackermann-function-3.ocaml b/Task/Ackermann-function/OCaml/ackermann-function-3.ml
similarity index 100%
rename from Task/Ackermann-function/OCaml/ackermann-function-3.ocaml
rename to Task/Ackermann-function/OCaml/ackermann-function-3.ml
diff --git a/Task/Ackermann-function/OCaml/ackermann-function-4.ocaml b/Task/Ackermann-function/OCaml/ackermann-function-4.ml
similarity index 100%
rename from Task/Ackermann-function/OCaml/ackermann-function-4.ocaml
rename to Task/Ackermann-function/OCaml/ackermann-function-4.ml
diff --git a/Task/Ackermann-function/OCaml/ackermann-function-5.ocaml b/Task/Ackermann-function/OCaml/ackermann-function-5.ml
similarity index 100%
rename from Task/Ackermann-function/OCaml/ackermann-function-5.ocaml
rename to Task/Ackermann-function/OCaml/ackermann-function-5.ml
diff --git a/Task/Ackermann-function/OCaml/ackermann-function-6.ocaml b/Task/Ackermann-function/OCaml/ackermann-function-6.ml
similarity index 100%
rename from Task/Ackermann-function/OCaml/ackermann-function-6.ocaml
rename to Task/Ackermann-function/OCaml/ackermann-function-6.ml
diff --git a/Task/Ackermann-function/OCaml/ackermann-function-7.ocaml b/Task/Ackermann-function/OCaml/ackermann-function-7.ml
similarity index 100%
rename from Task/Ackermann-function/OCaml/ackermann-function-7.ocaml
rename to Task/Ackermann-function/OCaml/ackermann-function-7.ml
diff --git a/Task/Ackermann-function/Rust/ackermann-function-1.rust b/Task/Ackermann-function/Rust/ackermann-function-1.rs
similarity index 100%
rename from Task/Ackermann-function/Rust/ackermann-function-1.rust
rename to Task/Ackermann-function/Rust/ackermann-function-1.rs
diff --git a/Task/Ackermann-function/Rust/ackermann-function-2.rust b/Task/Ackermann-function/Rust/ackermann-function-2.rs
similarity index 100%
rename from Task/Ackermann-function/Rust/ackermann-function-2.rust
rename to Task/Ackermann-function/Rust/ackermann-function-2.rs
diff --git a/Task/Ackermann-function/Scheme/ackermann-function-1.ss b/Task/Ackermann-function/Scheme/ackermann-function-1.scm
similarity index 100%
rename from Task/Ackermann-function/Scheme/ackermann-function-1.ss
rename to Task/Ackermann-function/Scheme/ackermann-function-1.scm
diff --git a/Task/Ackermann-function/Scheme/ackermann-function-2.ss b/Task/Ackermann-function/Scheme/ackermann-function-2.scm
similarity index 100%
rename from Task/Ackermann-function/Scheme/ackermann-function-2.ss
rename to Task/Ackermann-function/Scheme/ackermann-function-2.scm
diff --git a/Task/Active-Directory-Connect/Julia/active-directory-connect.julia b/Task/Active-Directory-Connect/Julia/active-directory-connect.jl
similarity index 100%
rename from Task/Active-Directory-Connect/Julia/active-directory-connect.julia
rename to Task/Active-Directory-Connect/Julia/active-directory-connect.jl
diff --git a/Task/Active-Directory-Connect/Kotlin/active-directory-connect.kotlin b/Task/Active-Directory-Connect/Kotlin/active-directory-connect.kts
similarity index 100%
rename from Task/Active-Directory-Connect/Kotlin/active-directory-connect.kotlin
rename to Task/Active-Directory-Connect/Kotlin/active-directory-connect.kts
diff --git a/Task/Active-Directory-Connect/Rust/active-directory-connect.rust b/Task/Active-Directory-Connect/Rust/active-directory-connect.rs
similarity index 100%
rename from Task/Active-Directory-Connect/Rust/active-directory-connect.rust
rename to Task/Active-Directory-Connect/Rust/active-directory-connect.rs
diff --git a/Task/Active-Directory-Search-for-a-user/Julia/active-directory-search-for-a-user.julia b/Task/Active-Directory-Search-for-a-user/Julia/active-directory-search-for-a-user.jl
similarity index 100%
rename from Task/Active-Directory-Search-for-a-user/Julia/active-directory-search-for-a-user.julia
rename to Task/Active-Directory-Search-for-a-user/Julia/active-directory-search-for-a-user.jl
diff --git a/Task/Active-object/Crystal/active-object.crystal b/Task/Active-object/Crystal/active-object.cr
similarity index 100%
rename from Task/Active-object/Crystal/active-object.crystal
rename to Task/Active-object/Crystal/active-object.cr
diff --git a/Task/Active-object/Delphi/active-object.delphi b/Task/Active-object/Delphi/active-object.pas
similarity index 100%
rename from Task/Active-object/Delphi/active-object.delphi
rename to Task/Active-object/Delphi/active-object.pas
diff --git a/Task/Active-object/Julia/active-object.julia b/Task/Active-object/Julia/active-object.jl
similarity index 100%
rename from Task/Active-object/Julia/active-object.julia
rename to Task/Active-object/Julia/active-object.jl
diff --git a/Task/Active-object/Kotlin/active-object.kotlin b/Task/Active-object/Kotlin/active-object.kts
similarity index 100%
rename from Task/Active-object/Kotlin/active-object.kotlin
rename to Task/Active-object/Kotlin/active-object.kts
diff --git a/Task/Active-object/Rust/active-object.rust b/Task/Active-object/Rust/active-object.rs
similarity index 100%
rename from Task/Active-object/Rust/active-object.rust
rename to Task/Active-object/Rust/active-object.rs
diff --git a/Task/Add-a-variable-to-a-class-instance-at-runtime/Julia/add-a-variable-to-a-class-instance-at-runtime-1.julia b/Task/Add-a-variable-to-a-class-instance-at-runtime/Julia/add-a-variable-to-a-class-instance-at-runtime-1.jl
similarity index 100%
rename from Task/Add-a-variable-to-a-class-instance-at-runtime/Julia/add-a-variable-to-a-class-instance-at-runtime-1.julia
rename to Task/Add-a-variable-to-a-class-instance-at-runtime/Julia/add-a-variable-to-a-class-instance-at-runtime-1.jl
diff --git a/Task/Add-a-variable-to-a-class-instance-at-runtime/Julia/add-a-variable-to-a-class-instance-at-runtime-2.julia b/Task/Add-a-variable-to-a-class-instance-at-runtime/Julia/add-a-variable-to-a-class-instance-at-runtime-2.jl
similarity index 100%
rename from Task/Add-a-variable-to-a-class-instance-at-runtime/Julia/add-a-variable-to-a-class-instance-at-runtime-2.julia
rename to Task/Add-a-variable-to-a-class-instance-at-runtime/Julia/add-a-variable-to-a-class-instance-at-runtime-2.jl
diff --git a/Task/Add-a-variable-to-a-class-instance-at-runtime/Kotlin/add-a-variable-to-a-class-instance-at-runtime.kotlin b/Task/Add-a-variable-to-a-class-instance-at-runtime/Kotlin/add-a-variable-to-a-class-instance-at-runtime.kts
similarity index 100%
rename from Task/Add-a-variable-to-a-class-instance-at-runtime/Kotlin/add-a-variable-to-a-class-instance-at-runtime.kotlin
rename to Task/Add-a-variable-to-a-class-instance-at-runtime/Kotlin/add-a-variable-to-a-class-instance-at-runtime.kts
diff --git a/Task/Additive-primes/Crystal/additive-primes.crystal b/Task/Additive-primes/Crystal/additive-primes.cr
similarity index 100%
rename from Task/Additive-primes/Crystal/additive-primes.crystal
rename to Task/Additive-primes/Crystal/additive-primes.cr
diff --git a/Task/Additive-primes/Delphi/additive-primes.delphi b/Task/Additive-primes/Delphi/additive-primes.pas
similarity index 100%
rename from Task/Additive-primes/Delphi/additive-primes.delphi
rename to Task/Additive-primes/Delphi/additive-primes.pas
diff --git a/Task/Additive-primes/Julia/additive-primes.julia b/Task/Additive-primes/Julia/additive-primes.jl
similarity index 100%
rename from Task/Additive-primes/Julia/additive-primes.julia
rename to Task/Additive-primes/Julia/additive-primes.jl
diff --git a/Task/Additive-primes/Kotlin/additive-primes.kotlin b/Task/Additive-primes/Kotlin/additive-primes.kts
similarity index 100%
rename from Task/Additive-primes/Kotlin/additive-primes.kotlin
rename to Task/Additive-primes/Kotlin/additive-primes.kts
diff --git a/Task/Additive-primes/OCaml/additive-primes.ocaml b/Task/Additive-primes/OCaml/additive-primes.ml
similarity index 100%
rename from Task/Additive-primes/OCaml/additive-primes.ocaml
rename to Task/Additive-primes/OCaml/additive-primes.ml
diff --git a/Task/Additive-primes/Oberon-07/additive-primes.oberon b/Task/Additive-primes/Oberon-07/additive-primes.oberon
new file mode 100644
index 0000000000..fb80acbf37
--- /dev/null
+++ b/Task/Additive-primes/Oberon-07/additive-primes.oberon
@@ -0,0 +1,51 @@
+MODULE AdditivePrimes;
+
+IMPORT
+ Out;
+
+CONST
+ Max = 500;
+
+VAR
+ Count, n :INTEGER;
+ Prime :ARRAY Max + 1 OF BOOLEAN;
+
+PROCEDURE DigitSum( n :INTEGER ):INTEGER;
+ VAR result :INTEGER;
+ BEGIN
+ result := 0;
+ IF n < 10 THEN result := n
+ ELSE result := ( n MOD 10 ) + DigitSum( n DIV 10 )
+ END
+ RETURN result
+ END DigitSum;
+
+PROCEDURE Sieve;
+ VAR i, j :INTEGER;
+ BEGIN
+ Prime[ 0 ] := FALSE; Prime[ 1 ] := FALSE;
+ FOR i := 2 TO Max DO Prime[ i ] := TRUE END;
+ FOR i := 2 TO Max DIV 2 DO
+ IF Prime[ i ] THEN
+ j := i * 2;
+ WHILE j <= Max DO
+ Prime[ j ] := FALSE;
+ INC( j, i )
+ END
+ END
+ END
+ END Sieve;
+
+BEGIN
+ Sieve;
+ FOR n := 2 TO Max DO
+ IF Prime[ n ] & Prime[ DigitSum( n ) ] THEN
+ Out.Int( n, 4 );
+ INC( Count );
+ IF Count MOD 20 = 0 THEN Out.Ln END
+ END
+ END;
+ Out.Ln;Out.String( "There are " );Out.Int( Count, 1 );
+ Out.String( " additive primes less than " );Out.Int( Max, 1 );
+ Out.String( "." );Out.Ln
+END AdditivePrimes.
diff --git a/Task/Additive-primes/REXX/additive-primes.rexx b/Task/Additive-primes/REXX/additive-primes-1.rexx
similarity index 100%
rename from Task/Additive-primes/REXX/additive-primes.rexx
rename to Task/Additive-primes/REXX/additive-primes-1.rexx
diff --git a/Task/Additive-primes/REXX/additive-primes-2.rexx b/Task/Additive-primes/REXX/additive-primes-2.rexx
new file mode 100644
index 0000000000..714891bd5b
--- /dev/null
+++ b/Task/Additive-primes/REXX/additive-primes-2.rexx
@@ -0,0 +1,60 @@
+include Settings
+
+say version; say 'Additive primes'; say
+arg n
+numeric digits 16
+if n = '' then
+ n = -500
+show = (n > 0); n = Abs(n)
+a = AdditivePrimes(n)
+if show then do
+ do i = 1 to a
+ call Charout ,right(addi.additiveprime.i,8)' '
+ if i//10 = 0 then
+ say
+ end
+ say
+end
+say a 'additive primes found below' n
+say Time('e') 'seconds'
+exit
+
+Additiveprimes:
+/* Additive prime numbers */
+procedure expose addi. prim.
+arg x
+/* Init */
+addi. = 0
+/* Fast values */
+if x < 2 then
+ return 0
+if x < 101 then do
+ a = '2 3 5 7 11 23 29 41 43 47 61 67 83 89 999'
+ do n = 1 to Words(a)
+ w = Word(a,n)
+ if w > x then
+ leave
+ addi.additiveprime.n = w
+ end
+ n = n-1; addi.0 = n
+ return n
+end
+/* Get primes */
+p = Primes(x)
+/* Collect additive primes */
+n = 0
+do i = 1 to p
+ q = prim.prime.i; s = 0
+ do j = 1 to Length(q)
+ s = s+Substr(q,j,1)
+ end
+ if IsPrime(s) then do
+ n = n+1; addi.additiveprime.n = q
+ end
+end
+/* Return number of additive primes */
+return n
+
+include Numbers
+include Functions
+include Abend
diff --git a/Task/Additive-primes/Rust/additive-primes-1.rust b/Task/Additive-primes/Rust/additive-primes-1.rs
similarity index 100%
rename from Task/Additive-primes/Rust/additive-primes-1.rust
rename to Task/Additive-primes/Rust/additive-primes-1.rs
diff --git a/Task/Additive-primes/Rust/additive-primes-2.rust b/Task/Additive-primes/Rust/additive-primes-2.rs
similarity index 100%
rename from Task/Additive-primes/Rust/additive-primes-2.rust
rename to Task/Additive-primes/Rust/additive-primes-2.rs
diff --git a/Task/Address-of-a-variable/Delphi/address-of-a-variable-1.delphi b/Task/Address-of-a-variable/Delphi/address-of-a-variable-1.pas
similarity index 100%
rename from Task/Address-of-a-variable/Delphi/address-of-a-variable-1.delphi
rename to Task/Address-of-a-variable/Delphi/address-of-a-variable-1.pas
diff --git a/Task/Address-of-a-variable/Delphi/address-of-a-variable-2.delphi b/Task/Address-of-a-variable/Delphi/address-of-a-variable-2.pas
similarity index 100%
rename from Task/Address-of-a-variable/Delphi/address-of-a-variable-2.delphi
rename to Task/Address-of-a-variable/Delphi/address-of-a-variable-2.pas
diff --git a/Task/Address-of-a-variable/Ed/address-of-a-variable-1.ed b/Task/Address-of-a-variable/Ed/address-of-a-variable-1.ed
new file mode 100644
index 0000000000..3134d36bfd
--- /dev/null
+++ b/Task/Address-of-a-variable/Ed/address-of-a-variable-1.ed
@@ -0,0 +1 @@
+=
diff --git a/Task/Address-of-a-variable/Ed/address-of-a-variable-2.ed b/Task/Address-of-a-variable/Ed/address-of-a-variable-2.ed
new file mode 100644
index 0000000000..9686bc628d
--- /dev/null
+++ b/Task/Address-of-a-variable/Ed/address-of-a-variable-2.ed
@@ -0,0 +1,5 @@
+# Set a mark
+km
+# ...
+# Get mark line number
+'m=
diff --git a/Task/Address-of-a-variable/Julia/address-of-a-variable-1.julia b/Task/Address-of-a-variable/Julia/address-of-a-variable-1.jl
similarity index 100%
rename from Task/Address-of-a-variable/Julia/address-of-a-variable-1.julia
rename to Task/Address-of-a-variable/Julia/address-of-a-variable-1.jl
diff --git a/Task/Address-of-a-variable/Julia/address-of-a-variable-2.julia b/Task/Address-of-a-variable/Julia/address-of-a-variable-2.jl
similarity index 100%
rename from Task/Address-of-a-variable/Julia/address-of-a-variable-2.julia
rename to Task/Address-of-a-variable/Julia/address-of-a-variable-2.jl
diff --git a/Task/Address-of-a-variable/Julia/address-of-a-variable-3.julia b/Task/Address-of-a-variable/Julia/address-of-a-variable-3.jl
similarity index 100%
rename from Task/Address-of-a-variable/Julia/address-of-a-variable-3.julia
rename to Task/Address-of-a-variable/Julia/address-of-a-variable-3.jl
diff --git a/Task/Address-of-a-variable/Kotlin/address-of-a-variable.kotlin b/Task/Address-of-a-variable/Kotlin/address-of-a-variable.kts
similarity index 100%
rename from Task/Address-of-a-variable/Kotlin/address-of-a-variable.kotlin
rename to Task/Address-of-a-variable/Kotlin/address-of-a-variable.kts
diff --git a/Task/Address-of-a-variable/OCaml/address-of-a-variable.ocaml b/Task/Address-of-a-variable/OCaml/address-of-a-variable.ml
similarity index 100%
rename from Task/Address-of-a-variable/OCaml/address-of-a-variable.ocaml
rename to Task/Address-of-a-variable/OCaml/address-of-a-variable.ml
diff --git a/Task/Address-of-a-variable/Rust/address-of-a-variable-1.rust b/Task/Address-of-a-variable/Rust/address-of-a-variable-1.rs
similarity index 100%
rename from Task/Address-of-a-variable/Rust/address-of-a-variable-1.rust
rename to Task/Address-of-a-variable/Rust/address-of-a-variable-1.rs
diff --git a/Task/Address-of-a-variable/Rust/address-of-a-variable-2.rust b/Task/Address-of-a-variable/Rust/address-of-a-variable-2.rs
similarity index 100%
rename from Task/Address-of-a-variable/Rust/address-of-a-variable-2.rust
rename to Task/Address-of-a-variable/Rust/address-of-a-variable-2.rs
diff --git a/Task/Address-of-a-variable/Rust/address-of-a-variable-3.rust b/Task/Address-of-a-variable/Rust/address-of-a-variable-3.rs
similarity index 100%
rename from Task/Address-of-a-variable/Rust/address-of-a-variable-3.rust
rename to Task/Address-of-a-variable/Rust/address-of-a-variable-3.rs
diff --git a/Task/Address-of-a-variable/Rust/address-of-a-variable-4.rust b/Task/Address-of-a-variable/Rust/address-of-a-variable-4.rs
similarity index 100%
rename from Task/Address-of-a-variable/Rust/address-of-a-variable-4.rust
rename to Task/Address-of-a-variable/Rust/address-of-a-variable-4.rs
diff --git a/Task/Address-of-a-variable/S-BASIC/address-of-a-variable.basic b/Task/Address-of-a-variable/S-BASIC/address-of-a-variable.basic
new file mode 100644
index 0000000000..f117a30105
--- /dev/null
+++ b/Task/Address-of-a-variable/S-BASIC/address-of-a-variable.basic
@@ -0,0 +1,22 @@
+comment
+ The LOCATION statement (with its somewhat counter-
+ intuitive syntax) is used to obtain the address
+ of a variable. A variable may be placed at a
+ particular memory address by declaring it as BASED and
+ then positioning it at run-time using the BASE..AT
+ statement. Most often this is done to access the values
+ stored in operating system variables and structures,
+ though it has other uses as well.
+end
+
+var i, address_of_i = integer
+based k = integer
+
+location var address_of_i = i
+print "The variable i is stored at "; hex$(address_of_i)
+base k at address_of_i
+i = 12345
+print "i ="; i
+print "k ="; k rem - same as i
+
+end
diff --git a/Task/Algebraic-data-types/Elixir/algebraic-data-types.elixir b/Task/Algebraic-data-types/Elixir/algebraic-data-types.ex
similarity index 100%
rename from Task/Algebraic-data-types/Elixir/algebraic-data-types.elixir
rename to Task/Algebraic-data-types/Elixir/algebraic-data-types.ex
diff --git a/Task/Algebraic-data-types/FreeBASIC/algebraic-data-types.basic b/Task/Algebraic-data-types/FreeBASIC/algebraic-data-types.basic
new file mode 100644
index 0000000000..6ef8f4e474
--- /dev/null
+++ b/Task/Algebraic-data-types/FreeBASIC/algebraic-data-types.basic
@@ -0,0 +1,91 @@
+Const NULL As Any Ptr = 0
+
+Type Arbol
+ isRed As Boolean
+ valor As Integer
+ izda As Arbol Ptr
+ dcha As Arbol Ptr
+End Type
+
+Dim Shared As Arbol Ptr E
+
+Function crearArbol(c As Boolean, l As Arbol Ptr, v As Integer, r As Arbol Ptr) As Arbol Ptr
+ Dim As Arbol Ptr nuevoArbol = Callocate(Sizeof(Arbol))
+ nuevoArbol->isRed = c
+ nuevoArbol->valor = v
+ nuevoArbol->izda = Iif(l <> NULL, l, E)
+ nuevoArbol->dcha = Iif(r <> NULL, r, E)
+ Return nuevoArbol
+End Function
+
+Sub inicializarE()
+ E = crearArbol(False, NULL, 0, NULL)
+ E->izda = E
+ E->dcha = E
+End Sub
+
+Function hacerNegro(t As Arbol Ptr) As Arbol Ptr
+ t->isRed = False
+ Return t
+End Function
+
+Function balance(t As Arbol Ptr) As Arbol Ptr
+ If t->isRed = False Then
+ If t->izda->isRed And t->izda->izda->isRed Then
+ Return crearArbol(True, crearArbol(False, t->izda->izda->izda, _
+ t->izda->izda->valor, t->izda->izda->dcha), t->izda->valor, _
+ crearArbol(False, t->izda->dcha, t->valor, t->dcha))
+ Elseif t->izda->isRed And t->izda->dcha->isRed Then
+ Return crearArbol(True, crearArbol(False, t->izda->izda, _
+ t->izda->valor, t->izda->dcha->izda), t->izda->dcha->valor, _
+ crearArbol(False, t->izda->dcha->dcha, t->valor, t->dcha))
+ Elseif t->dcha->isRed And t->dcha->izda->isRed Then
+ Return crearArbol(True, crearArbol(False, t->izda, t->valor, t->dcha->izda->izda), _
+ t->dcha->izda->valor, _
+ crearArbol(False, t->dcha->izda->dcha, t->dcha->valor, t->dcha->dcha))
+ Elseif t->dcha->isRed And t->dcha->dcha->isRed Then
+ Return crearArbol(True, crearArbol(False, t->izda, t->valor, _
+ t->dcha->izda), t->dcha->valor, _
+ crearArbol(False, t->dcha->dcha->izda, t->dcha->dcha->valor, t->dcha->dcha->dcha))
+ End If
+ End If
+ Return t
+End Function
+
+Function ins(t As Arbol Ptr, x As Integer) As Arbol Ptr
+ If t = E Then
+ Return crearArbol(True, E, x, E)
+ Elseif x < t->valor Then
+ Return balance(crearArbol(t->isRed, ins(t->izda, x), t->valor, t->dcha))
+ Elseif x > t->valor Then
+ Return balance(crearArbol(t->isRed, t->izda, t->valor, ins(t->dcha, x)))
+ Else
+ Return t
+ End If
+End Function
+
+Function insertar(t As Arbol Ptr, x As Integer) As Arbol Ptr
+ Return hacerNegro(ins(t, x))
+End Function
+
+Sub imprimeArbol(t As Arbol Ptr, indent As Integer = 0)
+ If t = E Then
+ Print Space(indent * 4); "[]"
+ Else
+ imprimeArbol(t->dcha, indent + 1)
+ Print Space(indent * 4); "["; Iif(t->isRed, "R", "B"); t->valor; "]"
+ imprimeArbol(t->izda, indent + 1)
+ End If
+End Sub
+
+' Main program
+inicializarE()
+Dim As Arbol Ptr tree = E
+
+For i As Integer = 1 To 16
+ tree = insertar(tree, i)
+Next
+
+imprimeArbol(tree)
+
+Sleep
diff --git a/Task/Algebraic-data-types/Julia/algebraic-data-types.julia b/Task/Algebraic-data-types/Julia/algebraic-data-types.jl
similarity index 100%
rename from Task/Algebraic-data-types/Julia/algebraic-data-types.julia
rename to Task/Algebraic-data-types/Julia/algebraic-data-types.jl
diff --git a/Task/Algebraic-data-types/Kotlin/algebraic-data-types.kotlin b/Task/Algebraic-data-types/Kotlin/algebraic-data-types.kts
similarity index 100%
rename from Task/Algebraic-data-types/Kotlin/algebraic-data-types.kotlin
rename to Task/Algebraic-data-types/Kotlin/algebraic-data-types.kts
diff --git a/Task/Algebraic-data-types/OCaml/algebraic-data-types.ocaml b/Task/Algebraic-data-types/OCaml/algebraic-data-types.ml
similarity index 100%
rename from Task/Algebraic-data-types/OCaml/algebraic-data-types.ocaml
rename to Task/Algebraic-data-types/OCaml/algebraic-data-types.ml
diff --git a/Task/Algebraic-data-types/Rust/algebraic-data-types.rust b/Task/Algebraic-data-types/Rust/algebraic-data-types.rs
similarity index 100%
rename from Task/Algebraic-data-types/Rust/algebraic-data-types.rust
rename to Task/Algebraic-data-types/Rust/algebraic-data-types.rs
diff --git a/Task/Align-columns/Delphi/align-columns.delphi b/Task/Align-columns/Delphi/align-columns.pas
similarity index 100%
rename from Task/Align-columns/Delphi/align-columns.delphi
rename to Task/Align-columns/Delphi/align-columns.pas
diff --git a/Task/Align-columns/Elixir/align-columns.elixir b/Task/Align-columns/Elixir/align-columns.ex
similarity index 100%
rename from Task/Align-columns/Elixir/align-columns.elixir
rename to Task/Align-columns/Elixir/align-columns.ex
diff --git a/Task/Align-columns/Euphoria/align-columns.euphoria b/Task/Align-columns/Euphoria/align-columns.ex
similarity index 100%
rename from Task/Align-columns/Euphoria/align-columns.euphoria
rename to Task/Align-columns/Euphoria/align-columns.ex
diff --git a/Task/Align-columns/Julia/align-columns.julia b/Task/Align-columns/Julia/align-columns.jl
similarity index 100%
rename from Task/Align-columns/Julia/align-columns.julia
rename to Task/Align-columns/Julia/align-columns.jl
diff --git a/Task/Align-columns/Kotlin/align-columns.kotlin b/Task/Align-columns/Kotlin/align-columns.kts
similarity index 100%
rename from Task/Align-columns/Kotlin/align-columns.kotlin
rename to Task/Align-columns/Kotlin/align-columns.kts
diff --git a/Task/Align-columns/OCaml/align-columns.ocaml b/Task/Align-columns/OCaml/align-columns.ml
similarity index 100%
rename from Task/Align-columns/OCaml/align-columns.ocaml
rename to Task/Align-columns/OCaml/align-columns.ml
diff --git a/Task/Align-columns/Rust/align-columns.rust b/Task/Align-columns/Rust/align-columns.rs
similarity index 100%
rename from Task/Align-columns/Rust/align-columns.rust
rename to Task/Align-columns/Rust/align-columns.rs
diff --git a/Task/Align-columns/Scheme/align-columns.ss b/Task/Align-columns/Scheme/align-columns.scm
similarity index 100%
rename from Task/Align-columns/Scheme/align-columns.ss
rename to Task/Align-columns/Scheme/align-columns.scm
diff --git a/Task/Align-columns/Uiua/align-columns.uiua b/Task/Align-columns/Uiua/align-columns.uiua
index 147119d5cb..01621181ac 100644
--- a/Task/Align-columns/Uiua/align-columns.uiua
+++ b/Task/Align-columns/Uiua/align-columns.uiua
@@ -1,17 +1,16 @@
# Split the text at $ and then justify each word 3 ways
+
N ← {"Given$a$text$file$of$many$lines,$where$fields$within$a$line$"
"are$delineated$by$a$single$'dollar'$character,$write$a$program"
"that$aligns$each$column$of$fields$by$ensuring$that$words$in$each$"
"column$are$separated$by$at$least$one$space."
"Further,$allow$for$each$word$in$a$column$to$be$either$left$"
"justified,$right$justified,$or$center$justified$within$its$column."}
-Ls ← ≡⍚(⊜□≠@$.)N # Get the word arrays
-P ← +1/↥≡◇⧻/◇⊂Ls # Padding = Max length + 1
-PadL ← /↥⬚@ ⊟↯P@
-PadR ← ⍜⇌PadL
-PadC ← PadL⊂↯:@ ⌊÷2-:P⧻.
-Format! ← ≡&p≡(□/⊂≡◇^!°□)
-# Demonstration of use of an array macro, which actually just resolves to
-# ⊃(Format!PadC|Format!PadR|Format!PadL)Ls
-Fall‼! ←^ $"⊃(_)"/⊂≡($"Format!_ |"°□)⇌
-Fall‼!PadL PadR PadC Ls
+Ls ← ≡⍚(⊜□≠@$.) # Get the word arrays.
+PadC ← ↻:⊙(⌊÷2-)⊃(⬚@ ↙|⊙⧻) # Pad centre.
+Pad! ← ≡/◇⊂⍉≡≡⍚^! # Apply a padding function to all.
+Prep ← (
+ ≡◇⬚""↙/↥≡◇⧻. # Pad each row to same length.
+ +1≡◇(/↥≡◇⧻).⍉ # Find required length for each column.
+)
+≡(&p/$"_\n_")[⊃(Pad!⬚@ ↙|Pad!(⬚@ ↙¯)|Pad!PadC)] Prep Ls N
diff --git a/Task/Aliquot-sequence-classifications/Elixir/aliquot-sequence-classifications.elixir b/Task/Aliquot-sequence-classifications/Elixir/aliquot-sequence-classifications.ex
similarity index 100%
rename from Task/Aliquot-sequence-classifications/Elixir/aliquot-sequence-classifications.elixir
rename to Task/Aliquot-sequence-classifications/Elixir/aliquot-sequence-classifications.ex
diff --git a/Task/Aliquot-sequence-classifications/Julia/aliquot-sequence-classifications-1.julia b/Task/Aliquot-sequence-classifications/Julia/aliquot-sequence-classifications-1.jl
similarity index 100%
rename from Task/Aliquot-sequence-classifications/Julia/aliquot-sequence-classifications-1.julia
rename to Task/Aliquot-sequence-classifications/Julia/aliquot-sequence-classifications-1.jl
diff --git a/Task/Aliquot-sequence-classifications/Julia/aliquot-sequence-classifications-2.julia b/Task/Aliquot-sequence-classifications/Julia/aliquot-sequence-classifications-2.jl
similarity index 100%
rename from Task/Aliquot-sequence-classifications/Julia/aliquot-sequence-classifications-2.julia
rename to Task/Aliquot-sequence-classifications/Julia/aliquot-sequence-classifications-2.jl
diff --git a/Task/Aliquot-sequence-classifications/Julia/aliquot-sequence-classifications-3.julia b/Task/Aliquot-sequence-classifications/Julia/aliquot-sequence-classifications-3.jl
similarity index 100%
rename from Task/Aliquot-sequence-classifications/Julia/aliquot-sequence-classifications-3.julia
rename to Task/Aliquot-sequence-classifications/Julia/aliquot-sequence-classifications-3.jl
diff --git a/Task/Aliquot-sequence-classifications/Kotlin/aliquot-sequence-classifications.kotlin b/Task/Aliquot-sequence-classifications/Kotlin/aliquot-sequence-classifications.kts
similarity index 100%
rename from Task/Aliquot-sequence-classifications/Kotlin/aliquot-sequence-classifications.kotlin
rename to Task/Aliquot-sequence-classifications/Kotlin/aliquot-sequence-classifications.kts
diff --git a/Task/Aliquot-sequence-classifications/Rust/aliquot-sequence-classifications.rust b/Task/Aliquot-sequence-classifications/Rust/aliquot-sequence-classifications.rs
similarity index 100%
rename from Task/Aliquot-sequence-classifications/Rust/aliquot-sequence-classifications.rust
rename to Task/Aliquot-sequence-classifications/Rust/aliquot-sequence-classifications.rs
diff --git a/Task/Almkvist-Giullera-formula-for-pi/FreeBASIC/almkvist-giullera-formula-for-pi.basic b/Task/Almkvist-Giullera-formula-for-pi/FreeBASIC/almkvist-giullera-formula-for-pi.basic
new file mode 100644
index 0000000000..d326167e00
--- /dev/null
+++ b/Task/Almkvist-Giullera-formula-for-pi/FreeBASIC/almkvist-giullera-formula-for-pi.basic
@@ -0,0 +1,77 @@
+' version 10-10-2024
+' compile with: fbc -s console
+
+#Include Once "gmp.bi"
+#Include Once "crt/stdio.bi"
+
+#Define prec 70
+
+Dim As UInteger n, tmp
+Dim As String buffer = Space(50)
+Dim As ZString Ptr gmp_str : gmp_str = Allocate(prec * 100)
+
+Dim As Mpz_ptr t1, t2, t3, t4
+t1 = Allocate(Len(__Mpz_struct)) : Mpz_init(t1)
+t2 = Allocate(Len(__Mpz_struct)) : Mpz_init(t2)
+t3 = Allocate(Len(__Mpz_struct)) : Mpz_init(t3)
+
+Dim As mpf_ptr f1, f2, sum, pi
+f1 = Allocate(Len(__Mpf_struct)) : Mpf_init2(f1, prec * 10)
+f2 = Allocate(Len(__Mpf_struct)) : Mpf_init2(f2, prec * 10)
+sum = Allocate(Len(__Mpf_struct)) : Mpf_init2(sum, prec * 10)
+pi = Allocate(Len(__Mpf_struct)) : Mpf_init2(pi, prec * 10)
+
+For n = 0 To prec
+
+ mpz_fac_ui(t1, 6 * n)
+
+ mpz_ui_pow_ui(t2 , n, 2)
+ mpz_mul_ui(t2, t2, 532)
+ mpz_set_ui(t3, n)
+ mpz_mul_ui(t3, t3, 126)
+ mpz_add(t2, t2, t3)
+ mpz_add_ui(t2, t2, 9)
+
+ mpz_fac_ui(t3, n)
+ mpz_pow_ui(t3, t3, 6)
+ mpz_mul_ui(t3, t3, 3)
+
+ mpz_mul(t1, t1, t2)
+ mpz_mul_2exp(t1, t1, 5)
+ mpz_divexact(t1, t1, t3)
+
+ Mpz_get_str(gmp_str, 10, t1)
+ If n < 10 Then
+ RSet buffer, *gmp_str
+ Print n; buffer
+ EndIf
+
+ tmp = 6 * n +3
+ mpf_set_z(f1, t1)
+ mpf_set_ui(f2, 10)
+ mpf_pow_ui(f2, f2, tmp)
+ mpf_div(f1, f1, f2)
+ mpf_add(sum, sum, f1)
+
+ If tmp - Len(*gmp_Str) > prec Then
+ Print
+ Print "Pi with 70 decimal digits of precision"
+ mpf_sqrt(f2, sum)
+ mpf_ui_div(pi , 1 , f2)
+ gmp_printf (!"pi = %.*Ff \n", 70, pi)
+ fflush(stdout)
+ Exit For
+ EndIf
+
+Next
+
+mpz_clears(t1, t2, t3, NULL)
+mpf_clears(f1, f2, sum, pi, NULL)
+DeAllocate(gmp_str)
+
+
+' empty keyboard buffer
+While Inkey <> "" : Wend
+Print : Print "hit any key to end program"
+Sleep
+End
diff --git a/Task/Almkvist-Giullera-formula-for-pi/Julia/almkvist-giullera-formula-for-pi.julia b/Task/Almkvist-Giullera-formula-for-pi/Julia/almkvist-giullera-formula-for-pi.jl
similarity index 100%
rename from Task/Almkvist-Giullera-formula-for-pi/Julia/almkvist-giullera-formula-for-pi.julia
rename to Task/Almkvist-Giullera-formula-for-pi/Julia/almkvist-giullera-formula-for-pi.jl
diff --git a/Task/Almkvist-Giullera-formula-for-pi/Kotlin/almkvist-giullera-formula-for-pi.kotlin b/Task/Almkvist-Giullera-formula-for-pi/Kotlin/almkvist-giullera-formula-for-pi.kts
similarity index 100%
rename from Task/Almkvist-Giullera-formula-for-pi/Kotlin/almkvist-giullera-formula-for-pi.kotlin
rename to Task/Almkvist-Giullera-formula-for-pi/Kotlin/almkvist-giullera-formula-for-pi.kts
diff --git a/Task/Almost-prime/Delphi/almost-prime.delphi b/Task/Almost-prime/Delphi/almost-prime.pas
similarity index 100%
rename from Task/Almost-prime/Delphi/almost-prime.delphi
rename to Task/Almost-prime/Delphi/almost-prime.pas
diff --git a/Task/Almost-prime/Elixir/almost-prime.elixir b/Task/Almost-prime/Elixir/almost-prime.ex
similarity index 100%
rename from Task/Almost-prime/Elixir/almost-prime.elixir
rename to Task/Almost-prime/Elixir/almost-prime.ex
diff --git a/Task/Almost-prime/Julia/almost-prime.julia b/Task/Almost-prime/Julia/almost-prime.jl
similarity index 100%
rename from Task/Almost-prime/Julia/almost-prime.julia
rename to Task/Almost-prime/Julia/almost-prime.jl
diff --git a/Task/Almost-prime/Kotlin/almost-prime.kotlin b/Task/Almost-prime/Kotlin/almost-prime.kts
similarity index 100%
rename from Task/Almost-prime/Kotlin/almost-prime.kotlin
rename to Task/Almost-prime/Kotlin/almost-prime.kts
diff --git a/Task/Almost-prime/REXX/almost-prime-3.rexx b/Task/Almost-prime/REXX/almost-prime-3.rexx
new file mode 100644
index 0000000000..f452ae9f3a
--- /dev/null
+++ b/Task/Almost-prime/REXX/almost-prime-3.rexx
@@ -0,0 +1,36 @@
+include Settings
+
+say version; say 'k-Almost primes'; say
+arg n k m
+say 'Direct approach using Factors'
+numeric digits 16
+if n = '' then
+ n = 10
+if k = '' then
+ k = 5
+/* Maximum number to examine */
+if m = '' then
+ m = 180
+call Time('r')
+/* Collect almost primes */
+ap. = 0
+do i = 2 to m
+ f = Factors(i); ap.f.0 = ap.f.0+1
+ ap = ap.f.0; ap.f.ap = i
+end
+/* Show results */
+do i = 1 to k
+ call Charout ,'k='i': '
+ do j = 1 to n
+ if ap.i.j > 0 then do
+ call Charout ,ap.i.j' '
+ end
+ end
+ say
+end
+say Format(Time('e'),,3) 'seconds'
+exit
+
+include Numbers
+include Functions
+include Abend
diff --git a/Task/Almost-prime/Rust/almost-prime.rust b/Task/Almost-prime/Rust/almost-prime.rs
similarity index 100%
rename from Task/Almost-prime/Rust/almost-prime.rust
rename to Task/Almost-prime/Rust/almost-prime.rs
diff --git a/Task/Amb/Julia/amb-1.julia b/Task/Amb/Julia/amb-1.jl
similarity index 100%
rename from Task/Amb/Julia/amb-1.julia
rename to Task/Amb/Julia/amb-1.jl
diff --git a/Task/Amb/Julia/amb-2.julia b/Task/Amb/Julia/amb-2.jl
similarity index 100%
rename from Task/Amb/Julia/amb-2.julia
rename to Task/Amb/Julia/amb-2.jl
diff --git a/Task/Amb/Kotlin/amb.kotlin b/Task/Amb/Kotlin/amb.kts
similarity index 100%
rename from Task/Amb/Kotlin/amb.kotlin
rename to Task/Amb/Kotlin/amb.kts
diff --git a/Task/Amb/OCaml/amb-1.ocaml b/Task/Amb/OCaml/amb-1.ml
similarity index 100%
rename from Task/Amb/OCaml/amb-1.ocaml
rename to Task/Amb/OCaml/amb-1.ml
diff --git a/Task/Amb/OCaml/amb-2.ocaml b/Task/Amb/OCaml/amb-2.ml
similarity index 100%
rename from Task/Amb/OCaml/amb-2.ocaml
rename to Task/Amb/OCaml/amb-2.ml
diff --git a/Task/Amb/Rust/amb-1.rust b/Task/Amb/Rust/amb-1.rs
similarity index 100%
rename from Task/Amb/Rust/amb-1.rust
rename to Task/Amb/Rust/amb-1.rs
diff --git a/Task/Amb/Rust/amb-2.rust b/Task/Amb/Rust/amb-2.rs
similarity index 100%
rename from Task/Amb/Rust/amb-2.rust
rename to Task/Amb/Rust/amb-2.rs
diff --git a/Task/Amb/Scheme/amb-1.ss b/Task/Amb/Scheme/amb-1.scm
similarity index 100%
rename from Task/Amb/Scheme/amb-1.ss
rename to Task/Amb/Scheme/amb-1.scm
diff --git a/Task/Amb/Scheme/amb-2.ss b/Task/Amb/Scheme/amb-2.scm
similarity index 100%
rename from Task/Amb/Scheme/amb-2.ss
rename to Task/Amb/Scheme/amb-2.scm
diff --git a/Task/Amb/Scheme/amb-3.scm b/Task/Amb/Scheme/amb-3.scm
new file mode 100644
index 0000000000..63d92b8583
--- /dev/null
+++ b/Task/Amb/Scheme/amb-3.scm
@@ -0,0 +1,47 @@
+;; Gauche needs this:
+(use srfi-13) ;; For "string-take-right" & "string-take".
+
+;; Racket would need:
+;; (require srfi/13)
+;; (require srfi/1)
+
+(define %fail-stack '())
+
+(define (%fail!)
+ (if (null? %fail-stack)
+ (error 'amb "Backtracking stack exhausted!")
+ (let ((backtrack (car %fail-stack)))
+ (set! %fail-stack (cdr %fail-stack))
+ (backtrack backtrack))))
+
+(define (amb choices)
+ (let ((cc (call-with-current-continuation values)))
+ (if (null? choices)
+ (%fail!)
+ (let ((choice (car choices)))
+ (set! %fail-stack (cons cc %fail-stack))
+ (set! choices (cdr choices))
+ choice))))
+
+(define (assert! condition)
+ (unless condition (%fail!)))
+
+;;; The list can contain as many lists as desired.
+(define words (list '("the" "that" "a")
+ '("frog" "elephant" "thing")
+ '("walked" "treaded" "grows")
+ '("slowly" "quickly")))
+
+(define (joins? a b)
+ (equal?
+ (string-take-right a 1)
+ (string-take b 1)))
+
+(let ((sentence (map amb words)))
+ (fold
+ (lambda (latest prev)
+ (assert! (joins? prev latest))
+ latest)
+ (car sentence)
+ (cdr sentence))
+ sentence)
diff --git a/Task/Amicable-pairs/CBASIC/amicable-pairs.basic b/Task/Amicable-pairs/CBASIC/amicable-pairs.basic
new file mode 100644
index 0000000000..a8c8adf971
--- /dev/null
+++ b/Task/Amicable-pairs/CBASIC/amicable-pairs.basic
@@ -0,0 +1,33 @@
+search.limit% = 20000
+dim sumf%(search.limit%)
+
+print "Searching up to"; search.limit%; "for amicable pairs:"
+
+rem - create a table of proper divisor sums
+for a% = 1 to search.limit%
+ sumf%(a%) = 1
+next a%
+for a% = 2 to search.limit%
+ b% = a% + a%
+ while (b% > 0) and (b% <= search.limit%)
+ sumf%(b%) = sumf%(b%) + a%
+ b% = b% + a%
+ wend
+next a%
+
+rem - search for pairs
+count% = 0
+a% = 2
+while a% < search.limit%
+ b% = sumf%(a%)
+ rem - protect against invalid array index
+ if b% <= 0 or b% >= search.limit% then b% = 2
+ rem - otherwise, we're good to go
+ if (b% > a%) and (a% = sumf%(b%)) then \
+ print using "##### #####"; a%; b% : \
+ count% = count% + 1
+ a% = a% + 1
+wend
+print count%; "pairs were found"
+
+end
diff --git a/Task/Amicable-pairs/Crystal/amicable-pairs.crystal b/Task/Amicable-pairs/Crystal/amicable-pairs.cr
similarity index 100%
rename from Task/Amicable-pairs/Crystal/amicable-pairs.crystal
rename to Task/Amicable-pairs/Crystal/amicable-pairs.cr
diff --git a/Task/Amicable-pairs/Elixir/amicable-pairs.elixir b/Task/Amicable-pairs/Elixir/amicable-pairs.ex
similarity index 100%
rename from Task/Amicable-pairs/Elixir/amicable-pairs.elixir
rename to Task/Amicable-pairs/Elixir/amicable-pairs.ex
diff --git a/Task/Amicable-pairs/Julia/amicable-pairs-1.julia b/Task/Amicable-pairs/Julia/amicable-pairs-1.jl
similarity index 100%
rename from Task/Amicable-pairs/Julia/amicable-pairs-1.julia
rename to Task/Amicable-pairs/Julia/amicable-pairs-1.jl
diff --git a/Task/Amicable-pairs/Julia/amicable-pairs-2.julia b/Task/Amicable-pairs/Julia/amicable-pairs-2.jl
similarity index 100%
rename from Task/Amicable-pairs/Julia/amicable-pairs-2.julia
rename to Task/Amicable-pairs/Julia/amicable-pairs-2.jl
diff --git a/Task/Amicable-pairs/Kotlin/amicable-pairs.kotlin b/Task/Amicable-pairs/Kotlin/amicable-pairs.kts
similarity index 100%
rename from Task/Amicable-pairs/Kotlin/amicable-pairs.kotlin
rename to Task/Amicable-pairs/Kotlin/amicable-pairs.kts
diff --git a/Task/Amicable-pairs/OCaml/amicable-pairs.ocaml b/Task/Amicable-pairs/OCaml/amicable-pairs.ml
similarity index 100%
rename from Task/Amicable-pairs/OCaml/amicable-pairs.ocaml
rename to Task/Amicable-pairs/OCaml/amicable-pairs.ml
diff --git a/Task/Amicable-pairs/REXX/amicable-pairs-6.rexx b/Task/Amicable-pairs/REXX/amicable-pairs-6.rexx
new file mode 100644
index 0000000000..cec5b774eb
--- /dev/null
+++ b/Task/Amicable-pairs/REXX/amicable-pairs-6.rexx
@@ -0,0 +1,43 @@
+include Settings
+
+say version; say 'Amicable pairs'; say
+arg n
+numeric digits 16
+if n = '' then
+ n = 20000
+show = (n > 0); n = Abs(n)
+/* Get amicable pairs */
+a = Amicables(n)
+say time('e') a 'amicable pairs collected'
+/* Show amical pairs */
+if show then do
+ do i = 1 to a
+ say time('e') amic.amicable.1.i 'and' amic.amicable.2.i 'are an amicable pair'
+ end
+end
+say time('e') 'seconds'
+exit
+
+Amicables:
+/* Amicable number pairs */
+procedure expose glob. amic.
+arg x
+/* Init */
+amic. = 0
+/* Scan for amicable pairs */
+n = 0
+do i = 1 to x
+ s = Sigma(i)-i; glob.sigma.i = s
+ if i = glob.sigma.s then do
+ if s = i then
+ iterate
+ n = n+1
+ amic.amicable.1.n = s; amic.amicable.2.n = i
+ end
+end
+amic.0 = n
+return n
+
+include Numbers
+include Functions
+include Abend
diff --git a/Task/Amicable-pairs/Rust/amicable-pairs-1.rust b/Task/Amicable-pairs/Rust/amicable-pairs-1.rs
similarity index 100%
rename from Task/Amicable-pairs/Rust/amicable-pairs-1.rust
rename to Task/Amicable-pairs/Rust/amicable-pairs-1.rs
diff --git a/Task/Amicable-pairs/Rust/amicable-pairs-2.rust b/Task/Amicable-pairs/Rust/amicable-pairs-2.rs
similarity index 100%
rename from Task/Amicable-pairs/Rust/amicable-pairs-2.rust
rename to Task/Amicable-pairs/Rust/amicable-pairs-2.rs
diff --git a/Task/Amicable-pairs/Scheme/amicable-pairs.ss b/Task/Amicable-pairs/Scheme/amicable-pairs.scm
similarity index 100%
rename from Task/Amicable-pairs/Scheme/amicable-pairs.ss
rename to Task/Amicable-pairs/Scheme/amicable-pairs.scm
diff --git a/Task/Anagrams-Deranged-anagrams/ALGOL-68/anagrams-deranged-anagrams.alg b/Task/Anagrams-Deranged-anagrams/ALGOL-68/anagrams-deranged-anagrams.alg
index 94569e7611..de0c1ca5fb 100644
--- a/Task/Anagrams-Deranged-anagrams/ALGOL-68/anagrams-deranged-anagrams.alg
+++ b/Task/Anagrams-Deranged-anagrams/ALGOL-68/anagrams-deranged-anagrams.alg
@@ -70,7 +70,6 @@ ELSE
END
);
REF AARRAY words := INIT LOC AARRAY;
- STRING word;
INT longest derangement := 0;
STRING longest word := "";
STRING longest anagram := "";
diff --git a/Task/Anagrams-Deranged-anagrams/Delphi/anagrams-deranged-anagrams.delphi b/Task/Anagrams-Deranged-anagrams/Delphi/anagrams-deranged-anagrams.pas
similarity index 100%
rename from Task/Anagrams-Deranged-anagrams/Delphi/anagrams-deranged-anagrams.delphi
rename to Task/Anagrams-Deranged-anagrams/Delphi/anagrams-deranged-anagrams.pas
diff --git a/Task/Anagrams-Deranged-anagrams/Elixir/anagrams-deranged-anagrams.elixir b/Task/Anagrams-Deranged-anagrams/Elixir/anagrams-deranged-anagrams.ex
similarity index 100%
rename from Task/Anagrams-Deranged-anagrams/Elixir/anagrams-deranged-anagrams.elixir
rename to Task/Anagrams-Deranged-anagrams/Elixir/anagrams-deranged-anagrams.ex
diff --git a/Task/Anagrams-Deranged-anagrams/Julia/anagrams-deranged-anagrams.julia b/Task/Anagrams-Deranged-anagrams/Julia/anagrams-deranged-anagrams.jl
similarity index 100%
rename from Task/Anagrams-Deranged-anagrams/Julia/anagrams-deranged-anagrams.julia
rename to Task/Anagrams-Deranged-anagrams/Julia/anagrams-deranged-anagrams.jl
diff --git a/Task/Anagrams-Deranged-anagrams/Kotlin/anagrams-deranged-anagrams.kotlin b/Task/Anagrams-Deranged-anagrams/Kotlin/anagrams-deranged-anagrams.kts
similarity index 100%
rename from Task/Anagrams-Deranged-anagrams/Kotlin/anagrams-deranged-anagrams.kotlin
rename to Task/Anagrams-Deranged-anagrams/Kotlin/anagrams-deranged-anagrams.kts
diff --git a/Task/Anagrams-Deranged-anagrams/OCaml/anagrams-deranged-anagrams.ocaml b/Task/Anagrams-Deranged-anagrams/OCaml/anagrams-deranged-anagrams.ml
similarity index 100%
rename from Task/Anagrams-Deranged-anagrams/OCaml/anagrams-deranged-anagrams.ocaml
rename to Task/Anagrams-Deranged-anagrams/OCaml/anagrams-deranged-anagrams.ml
diff --git a/Task/Anagrams-Deranged-anagrams/Rust/anagrams-deranged-anagrams.rust b/Task/Anagrams-Deranged-anagrams/Rust/anagrams-deranged-anagrams.rs
similarity index 100%
rename from Task/Anagrams-Deranged-anagrams/Rust/anagrams-deranged-anagrams.rust
rename to Task/Anagrams-Deranged-anagrams/Rust/anagrams-deranged-anagrams.rs
diff --git a/Task/Anagrams-Deranged-anagrams/Scheme/anagrams-deranged-anagrams.ss b/Task/Anagrams-Deranged-anagrams/Scheme/anagrams-deranged-anagrams.scm
similarity index 100%
rename from Task/Anagrams-Deranged-anagrams/Scheme/anagrams-deranged-anagrams.ss
rename to Task/Anagrams-Deranged-anagrams/Scheme/anagrams-deranged-anagrams.scm
diff --git a/Task/Anagrams/ALGOL-68/anagrams.alg b/Task/Anagrams/ALGOL-68/anagrams.alg
index 8fe12076cc..d652d3bd06 100644
--- a/Task/Anagrams/ALGOL-68/anagrams.alg
+++ b/Task/Anagrams/ALGOL-68/anagrams.alg
@@ -55,7 +55,6 @@ ELSE
END
);
REF AARRAY words := INIT LOC AARRAY;
- STRING word;
WHILE NOT at eof
DO
STRING word;
diff --git a/Task/Anagrams/Crystal/anagrams.crystal b/Task/Anagrams/Crystal/anagrams.cr
similarity index 100%
rename from Task/Anagrams/Crystal/anagrams.crystal
rename to Task/Anagrams/Crystal/anagrams.cr
diff --git a/Task/Anagrams/Delphi/anagrams.delphi b/Task/Anagrams/Delphi/anagrams.pas
similarity index 100%
rename from Task/Anagrams/Delphi/anagrams.delphi
rename to Task/Anagrams/Delphi/anagrams.pas
diff --git a/Task/Anagrams/Elixir/anagrams-1.elixir b/Task/Anagrams/Elixir/anagrams-1.ex
similarity index 100%
rename from Task/Anagrams/Elixir/anagrams-1.elixir
rename to Task/Anagrams/Elixir/anagrams-1.ex
diff --git a/Task/Anagrams/Elixir/anagrams-2.elixir b/Task/Anagrams/Elixir/anagrams-2.ex
similarity index 100%
rename from Task/Anagrams/Elixir/anagrams-2.elixir
rename to Task/Anagrams/Elixir/anagrams-2.ex
diff --git a/Task/Anagrams/Euphoria/anagrams.euphoria b/Task/Anagrams/Euphoria/anagrams.ex
similarity index 100%
rename from Task/Anagrams/Euphoria/anagrams.euphoria
rename to Task/Anagrams/Euphoria/anagrams.ex
diff --git a/Task/Anagrams/Julia/anagrams.julia b/Task/Anagrams/Julia/anagrams.jl
similarity index 100%
rename from Task/Anagrams/Julia/anagrams.julia
rename to Task/Anagrams/Julia/anagrams.jl
diff --git a/Task/Anagrams/Kotlin/anagrams.kotlin b/Task/Anagrams/Kotlin/anagrams.kts
similarity index 100%
rename from Task/Anagrams/Kotlin/anagrams.kotlin
rename to Task/Anagrams/Kotlin/anagrams.kts
diff --git a/Task/Anagrams/OCaml/anagrams.ocaml b/Task/Anagrams/OCaml/anagrams.ml
similarity index 100%
rename from Task/Anagrams/OCaml/anagrams.ocaml
rename to Task/Anagrams/OCaml/anagrams.ml
diff --git a/Task/Anagrams/Rust/anagrams-1.rust b/Task/Anagrams/Rust/anagrams-1.rs
similarity index 100%
rename from Task/Anagrams/Rust/anagrams-1.rust
rename to Task/Anagrams/Rust/anagrams-1.rs
diff --git a/Task/Anagrams/Rust/anagrams-2.rust b/Task/Anagrams/Rust/anagrams-2.rs
similarity index 100%
rename from Task/Anagrams/Rust/anagrams-2.rust
rename to Task/Anagrams/Rust/anagrams-2.rs
diff --git a/Task/Anagrams/Scheme/anagrams.ss b/Task/Anagrams/Scheme/anagrams.scm
similarity index 100%
rename from Task/Anagrams/Scheme/anagrams.ss
rename to Task/Anagrams/Scheme/anagrams.scm
diff --git a/Task/Anagrams/Ursalang/anagrams.ursa b/Task/Anagrams/Ursalang/anagrams.ursa
new file mode 100644
index 0000000000..54ebff6dac
--- /dev/null
+++ b/Task/Anagrams/Ursalang/anagrams.ursa
@@ -0,0 +1,21 @@
+use js.fetch
+let text = fetch("http://wiki.puzzlers.org/pub/wordlists/unixdict.txt").text()
+let words = text.split("\n")
+
+let anagrams = {}
+for word in words.iter() {
+ let sorted = word.split("").sorted().join("")
+ if anagrams.get(sorted) == null {
+ anagrams.set(sorted, [])
+ }
+ anagrams.get(sorted).push(word)
+}
+
+var most_anagrams = 0
+for ana in anagrams.values() {
+ if ana.len() > most_anagrams {most_anagrams := ana.len()}
+}
+
+for ana in anagrams.values() {
+ if ana.len() == most_anagrams {print(ana)}
+}
diff --git a/Task/Angle-difference-between-two-bearings/Julia/angle-difference-between-two-bearings.julia b/Task/Angle-difference-between-two-bearings/Julia/angle-difference-between-two-bearings.jl
similarity index 100%
rename from Task/Angle-difference-between-two-bearings/Julia/angle-difference-between-two-bearings.julia
rename to Task/Angle-difference-between-two-bearings/Julia/angle-difference-between-two-bearings.jl
diff --git a/Task/Angle-difference-between-two-bearings/Kotlin/angle-difference-between-two-bearings.kotlin b/Task/Angle-difference-between-two-bearings/Kotlin/angle-difference-between-two-bearings.kts
similarity index 100%
rename from Task/Angle-difference-between-two-bearings/Kotlin/angle-difference-between-two-bearings.kotlin
rename to Task/Angle-difference-between-two-bearings/Kotlin/angle-difference-between-two-bearings.kts
diff --git a/Task/Angle-difference-between-two-bearings/OCaml/angle-difference-between-two-bearings.ocaml b/Task/Angle-difference-between-two-bearings/OCaml/angle-difference-between-two-bearings.ml
similarity index 100%
rename from Task/Angle-difference-between-two-bearings/OCaml/angle-difference-between-two-bearings.ocaml
rename to Task/Angle-difference-between-two-bearings/OCaml/angle-difference-between-two-bearings.ml
diff --git a/Task/Angle-difference-between-two-bearings/PascalABC.NET/angle-difference-between-two-bearings.pas b/Task/Angle-difference-between-two-bearings/PascalABC.NET/angle-difference-between-two-bearings.pas
new file mode 100644
index 0000000000..7886d30040
--- /dev/null
+++ b/Task/Angle-difference-between-two-bearings/PascalABC.NET/angle-difference-between-two-bearings.pas
@@ -0,0 +1,16 @@
+function delta(b1, b2: real): real;
+begin
+ result := (b2 - b1) - Trunc((b2 - b1) / 360.0) * 360.0;
+ if result < -180.0 then result += 360.0
+ else if result >= 180.0 then result -= 360.0
+end;
+
+begin
+ var testVectors :=
+ |(20.00, 45.00), (-45.00, 45.00), (-85.00, 90.00),
+ (-95.00, 90.00), (-45.00, 125.00), (-45.00, 145.00),
+ (29.48, -88.64), (-78.33, -159.04), (-70099.74, 29840.67),
+ (-165313.67, 33693.99), (1174.84, -154146.66), (60175.77, 42213.07)|;
+ foreach var vector in testVectors do
+ writeln(vector[0]:10:2, vector[1]:12:2, delta(vector[0], vector[1]):10:2);
+end.
diff --git a/Task/Angle-difference-between-two-bearings/Rust/angle-difference-between-two-bearings.rust b/Task/Angle-difference-between-two-bearings/Rust/angle-difference-between-two-bearings.rs
similarity index 100%
rename from Task/Angle-difference-between-two-bearings/Rust/angle-difference-between-two-bearings.rust
rename to Task/Angle-difference-between-two-bearings/Rust/angle-difference-between-two-bearings.rs
diff --git a/Task/Angle-difference-between-two-bearings/Scheme/angle-difference-between-two-bearings.ss b/Task/Angle-difference-between-two-bearings/Scheme/angle-difference-between-two-bearings.scm
similarity index 100%
rename from Task/Angle-difference-between-two-bearings/Scheme/angle-difference-between-two-bearings.ss
rename to Task/Angle-difference-between-two-bearings/Scheme/angle-difference-between-two-bearings.scm
diff --git a/Task/Angles-geometric-normalization-and-conversion/Ada/angles-geometric-normalization-and-conversion.ada b/Task/Angles-geometric-normalization-and-conversion/Ada/angles-geometric-normalization-and-conversion.ada
new file mode 100644
index 0000000000..b63341ec27
--- /dev/null
+++ b/Task/Angles-geometric-normalization-and-conversion/Ada/angles-geometric-normalization-and-conversion.ada
@@ -0,0 +1,226 @@
+-- Rosetta Code Task written in Ada
+-- Angles (geometric), normalization and conversion
+-- https://rosettacode.org/wiki/Angles_(geometric),_normalization_and_conversion
+-- translation from C (conversion functions) and (loosely) Lua (output table formatting)
+-- July 2024, R. B. E.
+
+-- To Do:
+-- Specific float format/precision rather than generic?
+
+with Ada.Text_IO; use Ada.Text_IO;
+with Ada.Integer_Text_IO; use Ada.Integer_Text_IO;
+with Ada.Float_Text_IO; use Ada.Float_Text_IO;
+with Ada.Strings.Fixed; use Ada.Strings.Fixed;
+with Ada.Numerics;
+
+procedure Angles_Geometric_Normalization_and_Conversion is
+ Pi : constant := Ada.Numerics.Pi;
+ Two_Pi : constant := 2.0 * Ada.Numerics.Pi;
+
+ function Normalize_to_Deg (a : Float) return Float is
+ tmp : Float := a;
+ begin
+-- while (tmp < 0.0) loop
+ while (tmp < -360.0) loop -- task description says to preserve negative input angles
+ tmp := tmp + 360.0;
+ end loop;
+ while (tmp >= 360.0) loop
+ tmp := tmp - 360.0;
+ end loop;
+ return tmp;
+ end Normalize_to_Deg;
+
+ function Normalize_to_Grad (a : Float) return Float is
+ tmp : Float := a;
+ begin
+ while (tmp < 0.0) loop -- task description says to preserve negative input angles (punting)
+ tmp := tmp + 400.0;
+ end loop;
+ while (tmp >= 400.0) loop
+ tmp := tmp - 400.0;
+ end loop;
+ return tmp;
+ end Normalize_to_Grad;
+
+ function Normalize_to_Mil (a : Float) return Float is
+ tmp : Float := a;
+ begin
+ while (tmp < 0.0) loop -- task description says to preserve negative input angles (punting)
+ tmp := tmp + 6400.0;
+ end loop;
+ while (tmp >= 6400.0) loop
+ tmp := tmp - 6400.0;
+ end loop;
+ return tmp;
+ end Normalize_to_Mil;
+
+ function Normalize_to_Rad (a : Float) return Float is
+ tmp : Float := a;
+ begin
+ while (tmp < 0.0) loop -- task description says to preserve negative input angles (punting)
+ tmp := tmp + Two_Pi;
+ end loop;
+ while (tmp >= Two_Pi) loop
+ tmp := tmp - Two_Pi;
+ end loop;
+ return tmp;
+ end Normalize_to_Rad;
+
+ function Deg_to_Grad (a : Float) return Float is
+ tmp : Float := a;
+ begin
+ tmp := a * (10.0 / 9.0);
+ return tmp;
+ end Deg_to_Grad;
+
+ function Deg_to_Mil (a : Float) return Float is
+ tmp : Float := a;
+ begin
+ tmp := a * (160.0 / 9.0);
+ return tmp;
+ end Deg_to_Mil;
+
+ function Deg_to_Rad (a : Float) return Float is
+ tmp : Float := a;
+ begin
+ tmp := a * (Pi / 180.0);
+ return tmp;
+ end Deg_to_Rad;
+
+ function Grad_to_Deg (a : Float) return Float is
+ tmp : Float := a;
+ begin
+ tmp := a * (9.0 / 10.0);
+ return tmp;
+ end Grad_to_Deg;
+
+ function Grad_to_Mil (a : Float) return Float is
+ tmp : Float := a;
+ begin
+ tmp := a * 16.0;
+ return tmp;
+ end Grad_to_Mil;
+
+ function Grad_to_Rad (a : Float) return Float is
+ tmp : Float := a;
+ begin
+ tmp := a * (Pi / 200.0);
+ return tmp;
+ end Grad_to_Rad;
+
+ function Mil_to_Deg (a : Float) return Float is
+ tmp : Float := a;
+ begin
+ tmp := a * (9.0 / 160.0);
+ return tmp;
+ end Mil_to_Deg;
+
+ function Mil_to_Grad (a : Float) return Float is
+ tmp : Float := a;
+ begin
+ tmp := a / 16.0;
+ return tmp;
+ end Mil_to_Grad;
+
+ function Mil_to_Rad (a : Float) return Float is
+ tmp : Float := a;
+ begin
+ tmp := a * (Pi / 3200.0);
+ return tmp;
+ end Mil_to_Rad;
+
+ function Rad_to_Deg (a : Float) return Float is
+ tmp : Float := a;
+ begin
+ tmp := a * (180.0 / Pi);
+ return tmp;
+ end Rad_to_Deg;
+
+ function Rad_to_Grad (a : Float) return Float is
+ tmp : Float := a;
+ begin
+ tmp := a * (200.0 / Pi);
+ return tmp;
+ end Rad_to_Grad;
+
+ function Rad_to_Mil (a : Float) return Float is
+ tmp : Float := a;
+ begin
+ tmp := a * (3200.0 / Pi);
+ return tmp;
+ end Rad_to_Mil;
+
+ Three_Spaces : constant String := 3 * " ";
+
+ type Index is range 1 .. 12;
+ type Test_Values_Array is array (Index) of Float;
+ Test_Values : Test_Values_Array :=
+ (Float (-2), Float (-1), Float (0), Float (1), Float (2),
+ 6.2831853, Float (16), 57.2957795, Float (359),
+ Float (399), Float (6399), Float (1000000));
+
+begin
+ Put_Line (" DEGREES GRADIANS MILS RADIANS");
+ Put_Line (" TEST VALUE Normalized Converted Converted Converted");
+ for I in Index loop
+ Put (Test_Values (I), Exp => 0, Aft => 8, Fore => 8);
+ Put (Three_Spaces);
+ Put (Normalize_to_Deg (Test_Values (I)), Exp => 0, Aft => 8, Fore => 4);
+ Put (Three_Spaces);
+ Put (Deg_to_Grad (Normalize_to_Deg (Test_Values (I))), Exp => 0, Aft => 8, Fore => 4);
+ Put (Three_Spaces);
+ Put (Deg_to_Mil (Normalize_to_Deg (Test_Values (I))), Exp => 0, Aft => 8, Fore => 4);
+ Put (Three_Spaces);
+ Put (Deg_to_Rad (Normalize_to_Deg (Test_Values (I))), Exp => 0, Aft => 8, Fore => 2);
+ New_Line;
+ end loop;
+
+ New_Line;
+ Put_Line (" GRADIANS MILS RADIANS DEGREES");
+ Put_Line (" TEST VALUE Normalized Converted Converted Converted");
+ for I in Index loop
+ Put (Test_Values (I), Exp => 0, Aft => 8, Fore => 8);
+ Put (Three_Spaces);
+ Put (Normalize_to_Grad (Test_Values (I)), Exp => 0, Aft => 8, Fore => 4);
+ Put (Three_Spaces);
+ Put (Grad_to_Mil (Normalize_to_Grad (Test_Values (I))), Exp => 0, Aft => 8, Fore => 4);
+ Put (Three_Spaces);
+ Put (Grad_to_Rad (Normalize_to_Grad (Test_Values (I))), Exp => 0, Aft => 8, Fore => 2);
+ Put (Three_Spaces);
+ Put (Grad_to_Deg (Normalize_to_Grad (Test_Values (I))), Exp => 0, Aft => 8, Fore => 4);
+ New_Line;
+ end loop;
+
+ New_Line;
+ Put_Line (" MILS RADIANS DEGREES GRADIANS");
+ Put_Line (" TEST VALUE Normalized Converted Converted Converted");
+ for I in Index loop
+ Put (Test_Values (I), Exp => 0, Aft => 8, Fore => 8);
+ Put (Three_Spaces);
+ Put (Normalize_to_Mil (Test_Values (I)), Exp => 0, Aft => 8, Fore => 4);
+ Put (Three_Spaces);
+ Put (Mil_to_Rad (Normalize_to_Mil (Test_Values (I))), Exp => 0, Aft => 8, Fore => 2);
+ Put (Three_Spaces);
+ Put (Mil_to_Deg (Normalize_to_Mil (Test_Values (I))), Exp => 0, Aft => 8, Fore => 4);
+ Put (Three_Spaces);
+ Put (Mil_to_Grad (Normalize_to_Mil (Test_Values (I))), Exp => 0, Aft => 8, Fore => 4);
+ New_Line;
+ end loop;
+
+ New_Line;
+ Put_Line (" RADIANS DEGREES GRADIANS MILS");
+ Put_Line (" TEST VALUE Normalized Converted Converted Converted");
+ for I in Index loop
+ Put (Test_Values (I), Exp => 0, Aft => 8, Fore => 8);
+ Put (Three_Spaces);
+ Put (Normalize_to_Rad (Test_Values (I)), Exp => 0, Aft => 8, Fore => 4);
+ Put (Three_Spaces);
+ Put (Rad_to_Deg (Normalize_to_Rad (Test_Values (I))), Exp => 0, Aft => 8, Fore => 4);
+ Put (Three_Spaces);
+ Put (Rad_to_Grad (Normalize_to_Rad (Test_Values (I))), Exp => 0, Aft => 8, Fore => 4);
+ Put (Three_Spaces);
+ Put (Rad_to_Mil (Normalize_to_Rad (Test_Values (I))), Exp => 0, Aft => 8, Fore => 4);
+ New_Line;
+ end loop;
+
+end Angles_Geometric_Normalization_and_Conversion;
diff --git a/Task/Angles-geometric-normalization-and-conversion/Delphi/angles-geometric-normalization-and-conversion.delphi b/Task/Angles-geometric-normalization-and-conversion/Delphi/angles-geometric-normalization-and-conversion.pas
similarity index 100%
rename from Task/Angles-geometric-normalization-and-conversion/Delphi/angles-geometric-normalization-and-conversion.delphi
rename to Task/Angles-geometric-normalization-and-conversion/Delphi/angles-geometric-normalization-and-conversion.pas
diff --git a/Task/Angles-geometric-normalization-and-conversion/Julia/angles-geometric-normalization-and-conversion.julia b/Task/Angles-geometric-normalization-and-conversion/Julia/angles-geometric-normalization-and-conversion.jl
similarity index 100%
rename from Task/Angles-geometric-normalization-and-conversion/Julia/angles-geometric-normalization-and-conversion.julia
rename to Task/Angles-geometric-normalization-and-conversion/Julia/angles-geometric-normalization-and-conversion.jl
diff --git a/Task/Angles-geometric-normalization-and-conversion/Kotlin/angles-geometric-normalization-and-conversion.kotlin b/Task/Angles-geometric-normalization-and-conversion/Kotlin/angles-geometric-normalization-and-conversion.kts
similarity index 100%
rename from Task/Angles-geometric-normalization-and-conversion/Kotlin/angles-geometric-normalization-and-conversion.kotlin
rename to Task/Angles-geometric-normalization-and-conversion/Kotlin/angles-geometric-normalization-and-conversion.kts
diff --git a/Task/Angles-geometric-normalization-and-conversion/PascalABC.NET/angles-geometric-normalization-and-conversion.pas b/Task/Angles-geometric-normalization-and-conversion/PascalABC.NET/angles-geometric-normalization-and-conversion.pas
new file mode 100644
index 0000000000..a0c4a80b2e
--- /dev/null
+++ b/Task/Angles-geometric-normalization-and-conversion/PascalABC.NET/angles-geometric-normalization-and-conversion.pas
@@ -0,0 +1,41 @@
+function fmod(x, y: real): real := x - trunc(x / y) * y;
+
+function d2d(x: real): real := fmod(x, 360);
+function g2g(x: real): real := fmod(x, 400);
+function m2m(x: real): real := fmod(x, 6400);
+function r2r(x: real): real := fmod(x, 2 * Pi);
+function d2g(x: real): real := d2d(x) * 10 / 9;
+function d2m(x: real): real := d2d(x) * 160 / 9;
+function d2r(x: real): real := d2d(x) * Pi / 180;
+function g2d(x: real): real := g2g(x) * 9 / 10;
+function g2m(x: real): real := g2g(x) * 16;
+function g2r(x: real): real := g2g(x) * Pi / 200;
+function m2d(x: real): real := m2m(x) * 9 / 160;
+function m2g(x: real): real := m2m(x) / 16;
+function m2r(x: real): real := m2m(x) * Pi / 3200;
+function r2d(x: real): real := r2r(x) * 180 / Pi;
+function r2g(x: real): real := r2r(x) * 200 / Pi;
+function r2m(x: real): real := r2r(x) * 3200 / Pi;
+
+begin
+ var Values: array of real := (-2, -1, 0, 1, 2, 6.2831853, 16, 57.2957795, 359, 399, 6399, 1000000);
+ writeln(' Degrees Normalized Gradians Mils Radians');
+ writeln('———————————————————————————————————————————————————————————————————————————');
+ foreach var val in Values do
+ writeln(val:15:7, d2d(val):15:7, d2g(val):15:7, d2m(val):15:7, d2r(val):15:7);
+ writeln;
+ writeln( ' Gradians Normalized Degrees Mils Radians');
+ writeln( '———————————————————————————————————————————————————————————————————————————');
+ foreach var val in Values do
+ writeln( val:15:7, g2g(val):15:7, g2d(val):15:7, g2m(val):15:7, g2r(val):15:7);
+ writeln;
+ writeln( ' Mils Normalized Degrees Gradians Radians');
+ writeln( '———————————————————————————————————————————————————————————————————————————');
+ foreach var val in Values do
+ writeln( val:15:7, m2m(val):15:7, m2d(val):15:7, m2g(val):15:7, m2r(val):15:7);
+ writeln;
+ writeln( ' Radians Normalized Degrees Gradians Mils');
+ writeln( '———————————————————————————————————————————————————————————————————————————');
+ foreach var val in Values do
+ writeln( val:15:7, r2r(val):15:7, r2d(val):15:7, r2g(val):15:7, r2m(val):15:7);
+end.
diff --git a/Task/Angles-geometric-normalization-and-conversion/Rust/angles-geometric-normalization-and-conversion.rust b/Task/Angles-geometric-normalization-and-conversion/Rust/angles-geometric-normalization-and-conversion.rs
similarity index 100%
rename from Task/Angles-geometric-normalization-and-conversion/Rust/angles-geometric-normalization-and-conversion.rust
rename to Task/Angles-geometric-normalization-and-conversion/Rust/angles-geometric-normalization-and-conversion.rs
diff --git a/Task/Animate-a-pendulum/AmigaBASIC/animate-a-pendulum.basic b/Task/Animate-a-pendulum/AmigaBASIC/animate-a-pendulum.basic
new file mode 100644
index 0000000000..5547faf805
--- /dev/null
+++ b/Task/Animate-a-pendulum/AmigaBASIC/animate-a-pendulum.basic
@@ -0,0 +1,24 @@
+SCREEN 1,320,256,1,1
+WINDOW 2,"Pendulum (press any key to quit)",,0,1
+PI = 3.1415926535#
+theta = PI/2
+g = 9.81
+l = 1
+speed = 0
+px = 150
+py = 10
+bx = 0
+by = 0
+
+WHILE INKEY$=""
+ LINE (bx-5,by-5)-(bx+5,by+5),0,bf
+ LINE (px,py)-(bx,by),0
+ bx=px+l*140*SIN(theta)
+ by=py-l*140*COS(theta)
+ CIRCLE (bx,by),5,1,,,1
+ LINE (px,py)-(bx,by)
+ accel=g*SIN(theta)/l/100
+ speed=speed+accel/100
+ theta=theta+speed
+WEND
+SCREEN CLOSE 1
diff --git a/Task/Animate-a-pendulum/Delphi/animate-a-pendulum.delphi b/Task/Animate-a-pendulum/Delphi/animate-a-pendulum.pas
similarity index 100%
rename from Task/Animate-a-pendulum/Delphi/animate-a-pendulum.delphi
rename to Task/Animate-a-pendulum/Delphi/animate-a-pendulum.pas
diff --git a/Task/Animate-a-pendulum/Euphoria/animate-a-pendulum.euphoria b/Task/Animate-a-pendulum/Euphoria/animate-a-pendulum.ex
similarity index 100%
rename from Task/Animate-a-pendulum/Euphoria/animate-a-pendulum.euphoria
rename to Task/Animate-a-pendulum/Euphoria/animate-a-pendulum.ex
diff --git a/Task/Animate-a-pendulum/Julia/animate-a-pendulum.julia b/Task/Animate-a-pendulum/Julia/animate-a-pendulum.jl
similarity index 100%
rename from Task/Animate-a-pendulum/Julia/animate-a-pendulum.julia
rename to Task/Animate-a-pendulum/Julia/animate-a-pendulum.jl
diff --git a/Task/Animate-a-pendulum/Kotlin/animate-a-pendulum.kotlin b/Task/Animate-a-pendulum/Kotlin/animate-a-pendulum.kts
similarity index 100%
rename from Task/Animate-a-pendulum/Kotlin/animate-a-pendulum.kotlin
rename to Task/Animate-a-pendulum/Kotlin/animate-a-pendulum.kts
diff --git a/Task/Animate-a-pendulum/Rust/animate-a-pendulum.rust b/Task/Animate-a-pendulum/Rust/animate-a-pendulum.rs
similarity index 100%
rename from Task/Animate-a-pendulum/Rust/animate-a-pendulum.rust
rename to Task/Animate-a-pendulum/Rust/animate-a-pendulum.rs
diff --git a/Task/Animate-a-pendulum/Scheme/animate-a-pendulum-1.ss b/Task/Animate-a-pendulum/Scheme/animate-a-pendulum-1.scm
similarity index 100%
rename from Task/Animate-a-pendulum/Scheme/animate-a-pendulum-1.ss
rename to Task/Animate-a-pendulum/Scheme/animate-a-pendulum-1.scm
diff --git a/Task/Animate-a-pendulum/Scheme/animate-a-pendulum-2.ss b/Task/Animate-a-pendulum/Scheme/animate-a-pendulum-2.scm
similarity index 100%
rename from Task/Animate-a-pendulum/Scheme/animate-a-pendulum-2.ss
rename to Task/Animate-a-pendulum/Scheme/animate-a-pendulum-2.scm
diff --git a/Task/Animation/Delphi/animation-1.delphi b/Task/Animation/Delphi/animation-1.pas
similarity index 100%
rename from Task/Animation/Delphi/animation-1.delphi
rename to Task/Animation/Delphi/animation-1.pas
diff --git a/Task/Animation/Delphi/animation-2.delphi b/Task/Animation/Delphi/animation-2.pas
similarity index 100%
rename from Task/Animation/Delphi/animation-2.delphi
rename to Task/Animation/Delphi/animation-2.pas
diff --git a/Task/Animation/FutureBasic/animation.basic b/Task/Animation/FutureBasic/animation.basic
index 4acbd3f4d7..a070045e08 100644
--- a/Task/Animation/FutureBasic/animation.basic
+++ b/Task/Animation/FutureBasic/animation.basic
@@ -1,5 +1,3 @@
-include "NSLog.incl"
-
_window = 1
_label = 1
@@ -8,12 +6,12 @@ void local fn DoIt
subclass textlabel _label, @"Hello World! ", (140,112,210,45)
ControlSetFont( _label, fn FontLabelFontOfSize( 36 ) )
- ViewSetProperty( _label, @"MoveRight", @(YES) )
+ ViewPropertySetBool( _label, @"MoveRight", YES )
timerbegin , 0.1, YES
CFStringRef string = fn ControlStringValue(_label)
CFStringRef chr
- BOOL moveRight = fn NumberBoolValue(fn ViewProperty( _label, @"MoveRight" ))
+ BOOL moveRight = fn ViewPropertyBool( _label, @"MoveRight" )
if ( moveRight )
chr = right( string, 1 )
string = fn StringWithFormat( @"%@%@",chr,left(string,len(string)-1) )
@@ -30,9 +28,9 @@ void local fn DoDialog( ev as long, tag as long )
case _viewMouseDown
select ( tag )
case _label
- BOOL moveRight = fn NumberBoolValue(fn ViewProperty( _label, @"MoveRight" ))
+ BOOL moveRight = fn ViewPropertyBool( _label, @"MoveRight" )
if ( moveRight ) then moveRight == NO else moveRight = YES
- ViewSetProperty( _label, @"MoveRight", @(moveRight) )
+ ViewPropertySetBool( _label, @"MoveRight", moveRight )
end select
end select
end fn
diff --git a/Task/Animation/Julia/animation-1.julia b/Task/Animation/Julia/animation-1.jl
similarity index 100%
rename from Task/Animation/Julia/animation-1.julia
rename to Task/Animation/Julia/animation-1.jl
diff --git a/Task/Animation/Julia/animation-2.julia b/Task/Animation/Julia/animation-2.jl
similarity index 100%
rename from Task/Animation/Julia/animation-2.julia
rename to Task/Animation/Julia/animation-2.jl
diff --git a/Task/Animation/Kotlin/animation.kotlin b/Task/Animation/Kotlin/animation.kts
similarity index 100%
rename from Task/Animation/Kotlin/animation.kotlin
rename to Task/Animation/Kotlin/animation.kts
diff --git a/Task/Animation/Rust/animation.rust b/Task/Animation/Rust/animation.rs
similarity index 100%
rename from Task/Animation/Rust/animation.rust
rename to Task/Animation/Rust/animation.rs
diff --git a/Task/Anonymous-recursion/Common-Lisp/anonymous-recursion-7.lisp b/Task/Anonymous-recursion/Common-Lisp/anonymous-recursion-7.lisp
new file mode 100644
index 0000000000..c503f6dc2c
--- /dev/null
+++ b/Task/Anonymous-recursion/Common-Lisp/anonymous-recursion-7.lisp
@@ -0,0 +1,6 @@
+(defun fib (n &optional (f1 0) (f2 1))
+ (if (< n 0)
+ (format t "Parameter must be >= 0")
+ (if (zerop n)
+ f1
+ (fib (1- n) f2 (+ f1 f2)))))
diff --git a/Task/Anonymous-recursion/Delphi/anonymous-recursion.delphi b/Task/Anonymous-recursion/Delphi/anonymous-recursion.pas
similarity index 100%
rename from Task/Anonymous-recursion/Delphi/anonymous-recursion.delphi
rename to Task/Anonymous-recursion/Delphi/anonymous-recursion.pas
diff --git a/Task/Anonymous-recursion/EMal/anonymous-recursion.emal b/Task/Anonymous-recursion/EMal/anonymous-recursion.emal
index b8c3bead32..5b415c91a5 100644
--- a/Task/Anonymous-recursion/EMal/anonymous-recursion.emal
+++ b/Task/Anonymous-recursion/EMal/anonymous-recursion.emal
@@ -1,17 +1,14 @@
-fun fibonacci = int by int n
- if n < 0 do
- logLine("Invalid argument: " + n) # logs on standard error
- return -1 ^| it should be better to raise an error,
- | but the task is about recursive functions
- |^
- end
- fun actualFibonacci = int by int n
- return when(n < 2, n, actualFibonacci(n - 1) + actualFibonacci(n - 2))
+fun fibonacci ← int by int n
+ if n < 0
+ logLine("Invalid argument: " + n)
+ return -1 # we could raise an error instead
end
+ fun actualFibonacci ← n mod x = 0) * 2;
+ if n.Sqrt.Round.sqr = n then result -= 1;
+end;
+
+function AntiPrimes(): sequence of integer;
+begin
+ var maxDiv := 0;
+ var i := 1;
+ while True do
+ begin
+ var d := countdiv(i);
+ if d > maxDiv then
+ begin
+ yield i;
+ maxDiv := d;
+ end;
+ i += 1;
+ end;
+end;
+
+begin
+ AntiPrimes.Take(20).Println;
+ println;
+ AntiPrimes.Take(40).Println;
+end.
diff --git a/Task/Anti-primes/REXX/anti-primes-3.rexx b/Task/Anti-primes/REXX/anti-primes-3.rexx
new file mode 100644
index 0000000000..7b39396295
--- /dev/null
+++ b/Task/Anti-primes/REXX/anti-primes-3.rexx
@@ -0,0 +1,43 @@
+include Settings
+
+say version; say 'Anti-prims'; say
+arg n
+numeric digits 16
+if n = '' then
+ n = 10000
+show = (n > 0); n = Abs(n)
+h = Highcomposites(n)
+say h 'anti-primes found below' n
+if show then do
+ do i = 1 to high.0
+ say i high.highcomposite.i
+ end
+end
+say time('e') 'seconds'
+exit
+
+Highcomposites:
+/* Highly composite sequence */
+procedure expose high.
+arg x
+/* Thresholds and increments */
+a = '1 2 6 60 840 55440 720720 61261200 2327925600 321253732800 9999999999999'
+b = '1 2 6 60 420 27720 360360 12252240 232792560 80313433200 9999999999999'
+c = Words(a)-1; m = 0; n = 0
+/* Colllect cf definition */
+do i = 1 to c
+ do j = Word(a,i) by Word(b,i) to Min(x,Word(a,i+1)-1)
+ d = Divisors(j)
+ if d > m then do
+ n = n+1; high.highcomposite.n = j
+ m = d
+ end
+ end
+end
+high.0 = n
+/* Return count */
+return n
+
+include Numbers
+include Functions
+include Abend
diff --git a/Task/Anti-primes/Rust/anti-primes.rust b/Task/Anti-primes/Rust/anti-primes.rs
similarity index 100%
rename from Task/Anti-primes/Rust/anti-primes.rust
rename to Task/Anti-primes/Rust/anti-primes.rs
diff --git a/Task/Append-a-record-to-the-end-of-a-text-file/Ed/append-a-record-to-the-end-of-a-text-file.ed b/Task/Append-a-record-to-the-end-of-a-text-file/Ed/append-a-record-to-the-end-of-a-text-file.ed
new file mode 100644
index 0000000000..596c084db6
--- /dev/null
+++ b/Task/Append-a-record-to-the-end-of-a-text-file/Ed/append-a-record-to-the-end-of-a-text-file.ed
@@ -0,0 +1,9 @@
+H
+r append.input
+,p
+a
+xyz:x:1003:1000:X Yz,Room 1003,(234)555-8913,(234)555-0033,xyz@rosettacode.org:/home/xyz:/bin/bash
+.
+w
+,p
+q
diff --git a/Task/Append-a-record-to-the-end-of-a-text-file/Elixir/append-a-record-to-the-end-of-a-text-file.elixir b/Task/Append-a-record-to-the-end-of-a-text-file/Elixir/append-a-record-to-the-end-of-a-text-file.ex
similarity index 100%
rename from Task/Append-a-record-to-the-end-of-a-text-file/Elixir/append-a-record-to-the-end-of-a-text-file.elixir
rename to Task/Append-a-record-to-the-end-of-a-text-file/Elixir/append-a-record-to-the-end-of-a-text-file.ex
diff --git a/Task/Append-a-record-to-the-end-of-a-text-file/Julia/append-a-record-to-the-end-of-a-text-file.julia b/Task/Append-a-record-to-the-end-of-a-text-file/Julia/append-a-record-to-the-end-of-a-text-file.jl
similarity index 100%
rename from Task/Append-a-record-to-the-end-of-a-text-file/Julia/append-a-record-to-the-end-of-a-text-file.julia
rename to Task/Append-a-record-to-the-end-of-a-text-file/Julia/append-a-record-to-the-end-of-a-text-file.jl
diff --git a/Task/Append-a-record-to-the-end-of-a-text-file/Kotlin/append-a-record-to-the-end-of-a-text-file.kotlin b/Task/Append-a-record-to-the-end-of-a-text-file/Kotlin/append-a-record-to-the-end-of-a-text-file.kts
similarity index 100%
rename from Task/Append-a-record-to-the-end-of-a-text-file/Kotlin/append-a-record-to-the-end-of-a-text-file.kotlin
rename to Task/Append-a-record-to-the-end-of-a-text-file/Kotlin/append-a-record-to-the-end-of-a-text-file.kts
diff --git a/Task/Append-a-record-to-the-end-of-a-text-file/Rust/append-a-record-to-the-end-of-a-text-file.rust b/Task/Append-a-record-to-the-end-of-a-text-file/Rust/append-a-record-to-the-end-of-a-text-file.rs
similarity index 100%
rename from Task/Append-a-record-to-the-end-of-a-text-file/Rust/append-a-record-to-the-end-of-a-text-file.rust
rename to Task/Append-a-record-to-the-end-of-a-text-file/Rust/append-a-record-to-the-end-of-a-text-file.rs
diff --git a/Task/Append-a-record-to-the-end-of-a-text-file/Scheme/append-a-record-to-the-end-of-a-text-file.ss b/Task/Append-a-record-to-the-end-of-a-text-file/Scheme/append-a-record-to-the-end-of-a-text-file.scm
similarity index 100%
rename from Task/Append-a-record-to-the-end-of-a-text-file/Scheme/append-a-record-to-the-end-of-a-text-file.ss
rename to Task/Append-a-record-to-the-end-of-a-text-file/Scheme/append-a-record-to-the-end-of-a-text-file.scm
diff --git a/Task/Apply-a-callback-to-an-array/Crystal/apply-a-callback-to-an-array-1.crystal b/Task/Apply-a-callback-to-an-array/Crystal/apply-a-callback-to-an-array-1.cr
similarity index 100%
rename from Task/Apply-a-callback-to-an-array/Crystal/apply-a-callback-to-an-array-1.crystal
rename to Task/Apply-a-callback-to-an-array/Crystal/apply-a-callback-to-an-array-1.cr
diff --git a/Task/Apply-a-callback-to-an-array/Crystal/apply-a-callback-to-an-array-2.crystal b/Task/Apply-a-callback-to-an-array/Crystal/apply-a-callback-to-an-array-2.cr
similarity index 100%
rename from Task/Apply-a-callback-to-an-array/Crystal/apply-a-callback-to-an-array-2.crystal
rename to Task/Apply-a-callback-to-an-array/Crystal/apply-a-callback-to-an-array-2.cr
diff --git a/Task/Apply-a-callback-to-an-array/Delphi/apply-a-callback-to-an-array.delphi b/Task/Apply-a-callback-to-an-array/Delphi/apply-a-callback-to-an-array.pas
similarity index 100%
rename from Task/Apply-a-callback-to-an-array/Delphi/apply-a-callback-to-an-array.delphi
rename to Task/Apply-a-callback-to-an-array/Delphi/apply-a-callback-to-an-array.pas
diff --git a/Task/Apply-a-callback-to-an-array/Elixir/apply-a-callback-to-an-array.elixir b/Task/Apply-a-callback-to-an-array/Elixir/apply-a-callback-to-an-array.ex
similarity index 100%
rename from Task/Apply-a-callback-to-an-array/Elixir/apply-a-callback-to-an-array.elixir
rename to Task/Apply-a-callback-to-an-array/Elixir/apply-a-callback-to-an-array.ex
diff --git a/Task/Apply-a-callback-to-an-array/Euphoria/apply-a-callback-to-an-array.euphoria b/Task/Apply-a-callback-to-an-array/Euphoria/apply-a-callback-to-an-array.ex
similarity index 100%
rename from Task/Apply-a-callback-to-an-array/Euphoria/apply-a-callback-to-an-array.euphoria
rename to Task/Apply-a-callback-to-an-array/Euphoria/apply-a-callback-to-an-array.ex
diff --git a/Task/Apply-a-callback-to-an-array/Julia/apply-a-callback-to-an-array.julia b/Task/Apply-a-callback-to-an-array/Julia/apply-a-callback-to-an-array.jl
similarity index 100%
rename from Task/Apply-a-callback-to-an-array/Julia/apply-a-callback-to-an-array.julia
rename to Task/Apply-a-callback-to-an-array/Julia/apply-a-callback-to-an-array.jl
diff --git a/Task/Apply-a-callback-to-an-array/Kotlin/apply-a-callback-to-an-array.kotlin b/Task/Apply-a-callback-to-an-array/Kotlin/apply-a-callback-to-an-array.kts
similarity index 100%
rename from Task/Apply-a-callback-to-an-array/Kotlin/apply-a-callback-to-an-array.kotlin
rename to Task/Apply-a-callback-to-an-array/Kotlin/apply-a-callback-to-an-array.kts
diff --git a/Task/Apply-a-callback-to-an-array/OCaml/apply-a-callback-to-an-array-1.ocaml b/Task/Apply-a-callback-to-an-array/OCaml/apply-a-callback-to-an-array-1.ml
similarity index 100%
rename from Task/Apply-a-callback-to-an-array/OCaml/apply-a-callback-to-an-array-1.ocaml
rename to Task/Apply-a-callback-to-an-array/OCaml/apply-a-callback-to-an-array-1.ml
diff --git a/Task/Apply-a-callback-to-an-array/OCaml/apply-a-callback-to-an-array-2.ocaml b/Task/Apply-a-callback-to-an-array/OCaml/apply-a-callback-to-an-array-2.ml
similarity index 100%
rename from Task/Apply-a-callback-to-an-array/OCaml/apply-a-callback-to-an-array-2.ocaml
rename to Task/Apply-a-callback-to-an-array/OCaml/apply-a-callback-to-an-array-2.ml
diff --git a/Task/Apply-a-callback-to-an-array/OCaml/apply-a-callback-to-an-array-3.ocaml b/Task/Apply-a-callback-to-an-array/OCaml/apply-a-callback-to-an-array-3.ml
similarity index 100%
rename from Task/Apply-a-callback-to-an-array/OCaml/apply-a-callback-to-an-array-3.ocaml
rename to Task/Apply-a-callback-to-an-array/OCaml/apply-a-callback-to-an-array-3.ml
diff --git a/Task/Apply-a-callback-to-an-array/OCaml/apply-a-callback-to-an-array-4.ocaml b/Task/Apply-a-callback-to-an-array/OCaml/apply-a-callback-to-an-array-4.ml
similarity index 100%
rename from Task/Apply-a-callback-to-an-array/OCaml/apply-a-callback-to-an-array-4.ocaml
rename to Task/Apply-a-callback-to-an-array/OCaml/apply-a-callback-to-an-array-4.ml
diff --git a/Task/Apply-a-callback-to-an-array/OCaml/apply-a-callback-to-an-array-5.ocaml b/Task/Apply-a-callback-to-an-array/OCaml/apply-a-callback-to-an-array-5.ml
similarity index 100%
rename from Task/Apply-a-callback-to-an-array/OCaml/apply-a-callback-to-an-array-5.ocaml
rename to Task/Apply-a-callback-to-an-array/OCaml/apply-a-callback-to-an-array-5.ml
diff --git a/Task/Apply-a-callback-to-an-array/OCaml/apply-a-callback-to-an-array-6.ocaml b/Task/Apply-a-callback-to-an-array/OCaml/apply-a-callback-to-an-array-6.ml
similarity index 100%
rename from Task/Apply-a-callback-to-an-array/OCaml/apply-a-callback-to-an-array-6.ocaml
rename to Task/Apply-a-callback-to-an-array/OCaml/apply-a-callback-to-an-array-6.ml
diff --git a/Task/Apply-a-callback-to-an-array/OCaml/apply-a-callback-to-an-array-7.ocaml b/Task/Apply-a-callback-to-an-array/OCaml/apply-a-callback-to-an-array-7.ml
similarity index 100%
rename from Task/Apply-a-callback-to-an-array/OCaml/apply-a-callback-to-an-array-7.ocaml
rename to Task/Apply-a-callback-to-an-array/OCaml/apply-a-callback-to-an-array-7.ml
diff --git a/Task/Apply-a-callback-to-an-array/Rust/apply-a-callback-to-an-array.rust b/Task/Apply-a-callback-to-an-array/Rust/apply-a-callback-to-an-array.rs
similarity index 100%
rename from Task/Apply-a-callback-to-an-array/Rust/apply-a-callback-to-an-array.rust
rename to Task/Apply-a-callback-to-an-array/Rust/apply-a-callback-to-an-array.rs
diff --git a/Task/Apply-a-callback-to-an-array/Scheme/apply-a-callback-to-an-array-1.ss b/Task/Apply-a-callback-to-an-array/Scheme/apply-a-callback-to-an-array-1.scm
similarity index 100%
rename from Task/Apply-a-callback-to-an-array/Scheme/apply-a-callback-to-an-array-1.ss
rename to Task/Apply-a-callback-to-an-array/Scheme/apply-a-callback-to-an-array-1.scm
diff --git a/Task/Apply-a-callback-to-an-array/Scheme/apply-a-callback-to-an-array-2.ss b/Task/Apply-a-callback-to-an-array/Scheme/apply-a-callback-to-an-array-2.scm
similarity index 100%
rename from Task/Apply-a-callback-to-an-array/Scheme/apply-a-callback-to-an-array-2.ss
rename to Task/Apply-a-callback-to-an-array/Scheme/apply-a-callback-to-an-array-2.scm
diff --git a/Task/Apply-a-callback-to-an-array/Scheme/apply-a-callback-to-an-array-3.ss b/Task/Apply-a-callback-to-an-array/Scheme/apply-a-callback-to-an-array-3.scm
similarity index 100%
rename from Task/Apply-a-callback-to-an-array/Scheme/apply-a-callback-to-an-array-3.ss
rename to Task/Apply-a-callback-to-an-array/Scheme/apply-a-callback-to-an-array-3.scm
diff --git a/Task/Apply-a-callback-to-an-array/Tailspin/apply-a-callback-to-an-array.tailspin b/Task/Apply-a-callback-to-an-array/Tailspin/apply-a-callback-to-an-array-1.tailspin
similarity index 100%
rename from Task/Apply-a-callback-to-an-array/Tailspin/apply-a-callback-to-an-array.tailspin
rename to Task/Apply-a-callback-to-an-array/Tailspin/apply-a-callback-to-an-array-1.tailspin
diff --git a/Task/Apply-a-callback-to-an-array/Tailspin/apply-a-callback-to-an-array-2.tailspin b/Task/Apply-a-callback-to-an-array/Tailspin/apply-a-callback-to-an-array-2.tailspin
new file mode 100644
index 0000000000..88a5af5f68
--- /dev/null
+++ b/Task/Apply-a-callback-to-an-array/Tailspin/apply-a-callback-to-an-array-2.tailspin
@@ -0,0 +1,14 @@
+numbers is [1,3,7,10];
+
+cube templates
+ $ * $ * $ !
+end cube
+
+-- Using lens transforms
+$numbers(.. as i; -> $ * $i) !
+$numbers(..; -> $ * $) !
+$numbers(..; -> cube) !
+
+-- Using array literal and deconstructor
+[ $numbers... -> $ * $ ] !
+[ $numbers... -> cube ] !
diff --git a/Task/Apply-a-callback-to-an-array/V-(Vlang)/apply-a-callback-to-an-array.v b/Task/Apply-a-callback-to-an-array/V-(Vlang)/apply-a-callback-to-an-array.v
new file mode 100644
index 0000000000..84dd6e2ec5
--- /dev/null
+++ b/Task/Apply-a-callback-to-an-array/V-(Vlang)/apply-a-callback-to-an-array.v
@@ -0,0 +1,5 @@
+fn main() {
+ mut arr := [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
+ new_arr := arr.map(fn (it int) int {return it * it})
+ println(new_arr)
+}
diff --git a/Task/Apply-a-digital-filter-direct-form-II-transposed-/Julia/apply-a-digital-filter-direct-form-ii-transposed-.julia b/Task/Apply-a-digital-filter-direct-form-II-transposed-/Julia/apply-a-digital-filter-direct-form-ii-transposed-.jl
similarity index 100%
rename from Task/Apply-a-digital-filter-direct-form-II-transposed-/Julia/apply-a-digital-filter-direct-form-ii-transposed-.julia
rename to Task/Apply-a-digital-filter-direct-form-II-transposed-/Julia/apply-a-digital-filter-direct-form-ii-transposed-.jl
diff --git a/Task/Apply-a-digital-filter-direct-form-II-transposed-/Kotlin/apply-a-digital-filter-direct-form-ii-transposed-.kotlin b/Task/Apply-a-digital-filter-direct-form-II-transposed-/Kotlin/apply-a-digital-filter-direct-form-ii-transposed-.kts
similarity index 100%
rename from Task/Apply-a-digital-filter-direct-form-II-transposed-/Kotlin/apply-a-digital-filter-direct-form-ii-transposed-.kotlin
rename to Task/Apply-a-digital-filter-direct-form-II-transposed-/Kotlin/apply-a-digital-filter-direct-form-ii-transposed-.kts
diff --git a/Task/Apply-a-digital-filter-direct-form-II-transposed-/Rust/apply-a-digital-filter-direct-form-ii-transposed-.rust b/Task/Apply-a-digital-filter-direct-form-II-transposed-/Rust/apply-a-digital-filter-direct-form-ii-transposed-.rs
similarity index 100%
rename from Task/Apply-a-digital-filter-direct-form-II-transposed-/Rust/apply-a-digital-filter-direct-form-ii-transposed-.rust
rename to Task/Apply-a-digital-filter-direct-form-II-transposed-/Rust/apply-a-digital-filter-direct-form-ii-transposed-.rs
diff --git a/Task/Approximate-equality/Delphi/approximate-equality.delphi b/Task/Approximate-equality/Delphi/approximate-equality.pas
similarity index 100%
rename from Task/Approximate-equality/Delphi/approximate-equality.delphi
rename to Task/Approximate-equality/Delphi/approximate-equality.pas
diff --git a/Task/Approximate-equality/Julia/approximate-equality.julia b/Task/Approximate-equality/Julia/approximate-equality.jl
similarity index 100%
rename from Task/Approximate-equality/Julia/approximate-equality.julia
rename to Task/Approximate-equality/Julia/approximate-equality.jl
diff --git a/Task/Approximate-equality/Kotlin/approximate-equality.kotlin b/Task/Approximate-equality/Kotlin/approximate-equality.kts
similarity index 100%
rename from Task/Approximate-equality/Kotlin/approximate-equality.kotlin
rename to Task/Approximate-equality/Kotlin/approximate-equality.kts
diff --git a/Task/Approximate-equality/OCaml/approximate-equality.ocaml b/Task/Approximate-equality/OCaml/approximate-equality.ml
similarity index 100%
rename from Task/Approximate-equality/OCaml/approximate-equality.ocaml
rename to Task/Approximate-equality/OCaml/approximate-equality.ml
diff --git a/Task/Approximate-equality/PascalABC.NET/approximate-equality.pas b/Task/Approximate-equality/PascalABC.NET/approximate-equality.pas
new file mode 100644
index 0000000000..edd4b79576
--- /dev/null
+++ b/Task/Approximate-equality/PascalABC.NET/approximate-equality.pas
@@ -0,0 +1,13 @@
+function ApproxEqual(x,y,eps: real): boolean := Abs(x - y) < eps;
+
+begin
+ var eps := 1e-18;
+ ApproxEqual(100000000000000.01, 100000000000000.011,eps).Println;
+ ApproxEqual(100.01, 100.011,eps).Println;
+ ApproxEqual(10000000000000.001 / 10000.0, 1000000000.0000001000,eps).Println;
+ ApproxEqual(0.001, 0.0010000001,eps).Println;
+ ApproxEqual(0.000000000000000000000101, 0.0,eps).Println;
+ ApproxEqual(Sqrt(2) * Sqrt(2), 2.0,eps).Println;
+ ApproxEqual(-Sqrt(2) * Sqrt(2), -2.0,eps).Println;
+ ApproxEqual(3.14159265358979323846, 3.14159265358979324,eps).Println ;
+end.
diff --git a/Task/Approximate-equality/Rust/approximate-equality.rust b/Task/Approximate-equality/Rust/approximate-equality.rs
similarity index 100%
rename from Task/Approximate-equality/Rust/approximate-equality.rust
rename to Task/Approximate-equality/Rust/approximate-equality.rs
diff --git a/Task/Arbitrary-precision-integers-included-/Crystal/arbitrary-precision-integers-included-.crystal b/Task/Arbitrary-precision-integers-included-/Crystal/arbitrary-precision-integers-included-.cr
similarity index 100%
rename from Task/Arbitrary-precision-integers-included-/Crystal/arbitrary-precision-integers-included-.crystal
rename to Task/Arbitrary-precision-integers-included-/Crystal/arbitrary-precision-integers-included-.cr
diff --git a/Task/Arbitrary-precision-integers-included-/Delphi/arbitrary-precision-integers-included-.delphi b/Task/Arbitrary-precision-integers-included-/Delphi/arbitrary-precision-integers-included-.pas
similarity index 100%
rename from Task/Arbitrary-precision-integers-included-/Delphi/arbitrary-precision-integers-included-.delphi
rename to Task/Arbitrary-precision-integers-included-/Delphi/arbitrary-precision-integers-included-.pas
diff --git a/Task/Arbitrary-precision-integers-included-/Elixir/arbitrary-precision-integers-included-.elixir b/Task/Arbitrary-precision-integers-included-/Elixir/arbitrary-precision-integers-included-.ex
similarity index 100%
rename from Task/Arbitrary-precision-integers-included-/Elixir/arbitrary-precision-integers-included-.elixir
rename to Task/Arbitrary-precision-integers-included-/Elixir/arbitrary-precision-integers-included-.ex
diff --git a/Task/Arbitrary-precision-integers-included-/Julia/arbitrary-precision-integers-included-.julia b/Task/Arbitrary-precision-integers-included-/Julia/arbitrary-precision-integers-included-.jl
similarity index 100%
rename from Task/Arbitrary-precision-integers-included-/Julia/arbitrary-precision-integers-included-.julia
rename to Task/Arbitrary-precision-integers-included-/Julia/arbitrary-precision-integers-included-.jl
diff --git a/Task/Arbitrary-precision-integers-included-/Kotlin/arbitrary-precision-integers-included-.kotlin b/Task/Arbitrary-precision-integers-included-/Kotlin/arbitrary-precision-integers-included-.kts
similarity index 100%
rename from Task/Arbitrary-precision-integers-included-/Kotlin/arbitrary-precision-integers-included-.kotlin
rename to Task/Arbitrary-precision-integers-included-/Kotlin/arbitrary-precision-integers-included-.kts
diff --git a/Task/Arbitrary-precision-integers-included-/OCaml/arbitrary-precision-integers-included--1.ocaml b/Task/Arbitrary-precision-integers-included-/OCaml/arbitrary-precision-integers-included--1.ml
similarity index 100%
rename from Task/Arbitrary-precision-integers-included-/OCaml/arbitrary-precision-integers-included--1.ocaml
rename to Task/Arbitrary-precision-integers-included-/OCaml/arbitrary-precision-integers-included--1.ml
diff --git a/Task/Arbitrary-precision-integers-included-/OCaml/arbitrary-precision-integers-included--2.ocaml b/Task/Arbitrary-precision-integers-included-/OCaml/arbitrary-precision-integers-included--2.ml
similarity index 100%
rename from Task/Arbitrary-precision-integers-included-/OCaml/arbitrary-precision-integers-included--2.ocaml
rename to Task/Arbitrary-precision-integers-included-/OCaml/arbitrary-precision-integers-included--2.ml
diff --git a/Task/Arbitrary-precision-integers-included-/PascalABC.NET/arbitrary-precision-integers-included-.pas b/Task/Arbitrary-precision-integers-included-/PascalABC.NET/arbitrary-precision-integers-included-.pas
new file mode 100644
index 0000000000..f0bd2a3a3f
--- /dev/null
+++ b/Task/Arbitrary-precision-integers-included-/PascalABC.NET/arbitrary-precision-integers-included-.pas
@@ -0,0 +1,6 @@
+begin
+ var result: string := power(5bi, integer(power(4, power(3, 2)))).tostring;
+ result[1:21].Println;
+ result[result.Length - 19:].Println;
+ result.Length.Println;
+end.
diff --git a/Task/Arbitrary-precision-integers-included-/Rust/arbitrary-precision-integers-included-.rust b/Task/Arbitrary-precision-integers-included-/Rust/arbitrary-precision-integers-included-.rs
similarity index 100%
rename from Task/Arbitrary-precision-integers-included-/Rust/arbitrary-precision-integers-included-.rust
rename to Task/Arbitrary-precision-integers-included-/Rust/arbitrary-precision-integers-included-.rs
diff --git a/Task/Arbitrary-precision-integers-included-/Scheme/arbitrary-precision-integers-included-.ss b/Task/Arbitrary-precision-integers-included-/Scheme/arbitrary-precision-integers-included-.scm
similarity index 100%
rename from Task/Arbitrary-precision-integers-included-/Scheme/arbitrary-precision-integers-included-.ss
rename to Task/Arbitrary-precision-integers-included-/Scheme/arbitrary-precision-integers-included-.scm
diff --git a/Task/Archimedean-spiral/ALGOL-68/archimedean-spiral.alg b/Task/Archimedean-spiral/ALGOL-68/archimedean-spiral.alg
new file mode 100644
index 0000000000..e9b01ac6c2
--- /dev/null
+++ b/Task/Archimedean-spiral/ALGOL-68/archimedean-spiral.alg
@@ -0,0 +1,36 @@
+BEGIN # draw an Archimedian spiral using ASCII art #
+ # Translation of Applesoft Basic via AWK and Algol W #
+ PROC max = ( INT x, y )INT: IF x > y THEN x ELSE y FI;
+ PROC min = ( INT x, y )INT: IF x < y THEN x ELSE y FI;
+ [ 1 : 255, 1 : 255 ]CHAR arr;
+ FOR i FROM 1 LWB arr TO 1 UPB arr DO
+ FOR j FROM 2 LWB arr TO 2 UPB arr DO arr[ i, j ] := " " OD
+ OD;
+ INT x min := 1 UPB arr + 1, y min := 2 UPB arr + 1;
+ INT x max := 1 LWB arr - 1, y max := 2 LWB arr - 1;
+ REAL m = 6 * pi, h = 96, s = 0.02;
+ REAL w = 1.5 * h;
+ REAL t := s;
+ WHILE t <= m DO # build spiral #
+ REAL r = t + 1;
+ INT x = ROUND ( r * cos( t ) + w );
+ INT y = ROUND ( r * sin( t ) + h );
+ IF x >= 1 LWB arr AND y >= 2 LWB arr
+ AND x <= 1 UPB arr AND y <= 2 UPB arr
+ THEN
+ arr[ x, y ] := "*";
+ x min := min( x min, x );
+ x max := max( x max, x );
+ y min := min( y min, y );
+ y max := max( y max, y );
+ FI;
+ t +:= s
+ OD;
+ FOR i FROM x min TO x max DO # print spiral #
+ FOR j FROM y min TO y max DO
+ CHAR c = arr[ i, j ];
+ print( ( c, c ) )
+ OD;
+ print( ( newline ) )
+ OD
+END
diff --git a/Task/Archimedean-spiral/ALGOL-W/archimedean-spiral.alg b/Task/Archimedean-spiral/ALGOL-W/archimedean-spiral.alg
index 2d2ed9ad3b..2c18d32c47 100644
--- a/Task/Archimedean-spiral/ALGOL-W/archimedean-spiral.alg
+++ b/Task/Archimedean-spiral/ALGOL-W/archimedean-spiral.alg
@@ -1,37 +1,33 @@
-begin % draw an Archimedian spiral %
+begin % draw an Archimedian spiral %
% Translation of AWK which was a trnslation of Applesoft Basic program %
integer procedure max ( integer x, y ) ; begin if x > y then x else y end;
integer procedure min ( integer x, y ) ; begin if x < y then x else y end;
- integer x_min, y_min, x_max, y_max, a, b, x, y;
+ integer x_min, y_min, x_max, y_max, x, y;
string(255) array arr ( 1 :: 255 );
real h, w, m, s, t;
+ for i := 1 until 255 do arr( i ) := " ";
x_min := y_min := 9999;
x_max := y_max := 0;
h := 96;
w := h + h / 2;
- a := 1;
- b := 1;
m := 6 * PI;
- s := .02;
+ s := 0.02;
t := s;
- while t <= m do begin % build spiral %
+ while t <= m do begin % build spiral %
real r;
- r := a + b * t;
+ r := t + 1;
x := round(r * cos(t) + w);
y := round(r * sin(t) + h);
- if x <= 0 or y <= 0 then begin end
- else if x >= 280 then begin end
- else if y >= 192 then begin end
- else begin
+ if x > 0 and y > 0 and x < 256 and y < 256 then begin
arr( x )( y // 1 ) := "*";
x_min := min(x_min,x);
x_max := max(x_max,x);
y_min := min(y_min,y);
- y_max := max(y_max,y);
- t := t + s
- end if__various_x_and_y_values__
+ y_max := max(y_max,y)
+ end if_x_and_y_in_range ;
+ t := t + s
end while__t_le_m ;
- for i := x_min until x_max do begin
+ for i := x_min until x_max do begin % print spiral %
for j := y_min until y_max do begin
string(1) c;
c := arr( i )( j // 1 );
diff --git a/Task/Archimedean-spiral/Delphi/archimedean-spiral.delphi b/Task/Archimedean-spiral/Delphi/archimedean-spiral.pas
similarity index 100%
rename from Task/Archimedean-spiral/Delphi/archimedean-spiral.delphi
rename to Task/Archimedean-spiral/Delphi/archimedean-spiral.pas
diff --git a/Task/Archimedean-spiral/Julia/archimedean-spiral.julia b/Task/Archimedean-spiral/Julia/archimedean-spiral.jl
similarity index 100%
rename from Task/Archimedean-spiral/Julia/archimedean-spiral.julia
rename to Task/Archimedean-spiral/Julia/archimedean-spiral.jl
diff --git a/Task/Archimedean-spiral/Kotlin/archimedean-spiral.kotlin b/Task/Archimedean-spiral/Kotlin/archimedean-spiral.kts
similarity index 100%
rename from Task/Archimedean-spiral/Kotlin/archimedean-spiral.kotlin
rename to Task/Archimedean-spiral/Kotlin/archimedean-spiral.kts
diff --git a/Task/Archimedean-spiral/PascalABC.NET/archimedean-spiral.pas b/Task/Archimedean-spiral/PascalABC.NET/archimedean-spiral.pas
new file mode 100644
index 0000000000..4356ab0194
--- /dev/null
+++ b/Task/Archimedean-spiral/PascalABC.NET/archimedean-spiral.pas
@@ -0,0 +1,9 @@
+uses PlotWPF,GraphWPF;
+
+begin
+ Window.SetSize(600,600);
+ var seq := Range(0,20,0.1);
+ var xx := seq.Select(t -> t * Cos(t));
+ var yy := seq.Select(t -> t * Sin(t));
+ LineGraphWPF.Create(xx,yy,Colors.Black);
+end.
diff --git a/Task/Archimedean-spiral/Rust/archimedean-spiral.rust b/Task/Archimedean-spiral/Rust/archimedean-spiral.rs
similarity index 100%
rename from Task/Archimedean-spiral/Rust/archimedean-spiral.rust
rename to Task/Archimedean-spiral/Rust/archimedean-spiral.rs
diff --git a/Task/Archimedean-spiral/Scheme/archimedean-spiral.ss b/Task/Archimedean-spiral/Scheme/archimedean-spiral.scm
similarity index 100%
rename from Task/Archimedean-spiral/Scheme/archimedean-spiral.ss
rename to Task/Archimedean-spiral/Scheme/archimedean-spiral.scm
diff --git a/Task/Arena-storage-pool/Delphi/arena-storage-pool.delphi b/Task/Arena-storage-pool/Delphi/arena-storage-pool.pas
similarity index 100%
rename from Task/Arena-storage-pool/Delphi/arena-storage-pool.delphi
rename to Task/Arena-storage-pool/Delphi/arena-storage-pool.pas
diff --git a/Task/Arena-storage-pool/Julia/arena-storage-pool.julia b/Task/Arena-storage-pool/Julia/arena-storage-pool.jl
similarity index 100%
rename from Task/Arena-storage-pool/Julia/arena-storage-pool.julia
rename to Task/Arena-storage-pool/Julia/arena-storage-pool.jl
diff --git a/Task/Arena-storage-pool/Kotlin/arena-storage-pool.kotlin b/Task/Arena-storage-pool/Kotlin/arena-storage-pool.kts
similarity index 100%
rename from Task/Arena-storage-pool/Kotlin/arena-storage-pool.kotlin
rename to Task/Arena-storage-pool/Kotlin/arena-storage-pool.kts
diff --git a/Task/Arena-storage-pool/Rust/arena-storage-pool.rust b/Task/Arena-storage-pool/Rust/arena-storage-pool.rs
similarity index 100%
rename from Task/Arena-storage-pool/Rust/arena-storage-pool.rust
rename to Task/Arena-storage-pool/Rust/arena-storage-pool.rs
diff --git a/Task/Arithmetic-Complex/Delphi/arithmetic-complex.delphi b/Task/Arithmetic-Complex/Delphi/arithmetic-complex.pas
similarity index 100%
rename from Task/Arithmetic-Complex/Delphi/arithmetic-complex.delphi
rename to Task/Arithmetic-Complex/Delphi/arithmetic-complex.pas
diff --git a/Task/Arithmetic-Complex/EasyLang/arithmetic-complex.easy b/Task/Arithmetic-Complex/EasyLang/arithmetic-complex.easy
index 2e8ba7e31a..4842a3c915 100644
--- a/Task/Arithmetic-Complex/EasyLang/arithmetic-complex.easy
+++ b/Task/Arithmetic-Complex/EasyLang/arithmetic-complex.easy
@@ -1,19 +1,19 @@
-func[] add a[] b[] .
+func[] cadd a[] b[] .
return [ a[1] + b[1] a[2] + b[2] ]
.
-func[] mult a[] b[] .
+func[] cmult a[] b[] .
return [ a[1] * b[1] - a[2] * b[2] a[1] * b[2] + a[2] * b[1] ]
.
-func[] inv a[] .
+func[] cinv a[] .
denom = a[1] * a[1] + a[2] * a[2]
return [ a[1] / denom (-a[2] / denom) ]
.
-func[] neg a[] .
+func[] cneg a[] .
return [ -a[1] (-a[2]) ]
.
a[] = [ 1 1 ]
b[] = [ pi 1.2 ]
-print add a[] b[]
-print mult a[] b[]
-print neg a[]
-print inv a[]
+print cadd a[] b[]
+print cmult a[] b[]
+print cneg a[]
+print cinv a[]
diff --git a/Task/Arithmetic-Complex/Elixir/arithmetic-complex.elixir b/Task/Arithmetic-Complex/Elixir/arithmetic-complex.ex
similarity index 100%
rename from Task/Arithmetic-Complex/Elixir/arithmetic-complex.elixir
rename to Task/Arithmetic-Complex/Elixir/arithmetic-complex.ex
diff --git a/Task/Arithmetic-Complex/Euphoria/arithmetic-complex.euphoria b/Task/Arithmetic-Complex/Euphoria/arithmetic-complex.ex
similarity index 100%
rename from Task/Arithmetic-Complex/Euphoria/arithmetic-complex.euphoria
rename to Task/Arithmetic-Complex/Euphoria/arithmetic-complex.ex
diff --git a/Task/Arithmetic-Complex/Julia/arithmetic-complex.julia b/Task/Arithmetic-Complex/Julia/arithmetic-complex.jl
similarity index 100%
rename from Task/Arithmetic-Complex/Julia/arithmetic-complex.julia
rename to Task/Arithmetic-Complex/Julia/arithmetic-complex.jl
diff --git a/Task/Arithmetic-Complex/Kotlin/arithmetic-complex.kotlin b/Task/Arithmetic-Complex/Kotlin/arithmetic-complex.kts
similarity index 100%
rename from Task/Arithmetic-Complex/Kotlin/arithmetic-complex.kotlin
rename to Task/Arithmetic-Complex/Kotlin/arithmetic-complex.kts
diff --git a/Task/Arithmetic-Complex/OCaml/arithmetic-complex-1.ocaml b/Task/Arithmetic-Complex/OCaml/arithmetic-complex-1.ml
similarity index 100%
rename from Task/Arithmetic-Complex/OCaml/arithmetic-complex-1.ocaml
rename to Task/Arithmetic-Complex/OCaml/arithmetic-complex-1.ml
diff --git a/Task/Arithmetic-Complex/OCaml/arithmetic-complex-2.ocaml b/Task/Arithmetic-Complex/OCaml/arithmetic-complex-2.ml
similarity index 100%
rename from Task/Arithmetic-Complex/OCaml/arithmetic-complex-2.ocaml
rename to Task/Arithmetic-Complex/OCaml/arithmetic-complex-2.ml
diff --git a/Task/Arithmetic-Complex/Rust/arithmetic-complex.rust b/Task/Arithmetic-Complex/Rust/arithmetic-complex.rs
similarity index 100%
rename from Task/Arithmetic-Complex/Rust/arithmetic-complex.rust
rename to Task/Arithmetic-Complex/Rust/arithmetic-complex.rs
diff --git a/Task/Arithmetic-Complex/Scheme/arithmetic-complex.ss b/Task/Arithmetic-Complex/Scheme/arithmetic-complex.scm
similarity index 100%
rename from Task/Arithmetic-Complex/Scheme/arithmetic-complex.ss
rename to Task/Arithmetic-Complex/Scheme/arithmetic-complex.scm
diff --git a/Task/Arithmetic-Integer/Crystal/arithmetic-integer.crystal b/Task/Arithmetic-Integer/Crystal/arithmetic-integer.cr
similarity index 100%
rename from Task/Arithmetic-Integer/Crystal/arithmetic-integer.crystal
rename to Task/Arithmetic-Integer/Crystal/arithmetic-integer.cr
diff --git a/Task/Arithmetic-Integer/Delphi/arithmetic-integer.delphi b/Task/Arithmetic-Integer/Delphi/arithmetic-integer.pas
similarity index 100%
rename from Task/Arithmetic-Integer/Delphi/arithmetic-integer.delphi
rename to Task/Arithmetic-Integer/Delphi/arithmetic-integer.pas
diff --git a/Task/Arithmetic-Integer/EMal/arithmetic-integer.emal b/Task/Arithmetic-Integer/EMal/arithmetic-integer.emal
index ace44f0c7e..1c6296a962 100644
--- a/Task/Arithmetic-Integer/EMal/arithmetic-integer.emal
+++ b/Task/Arithmetic-Integer/EMal/arithmetic-integer.emal
@@ -2,28 +2,26 @@
|its interface can be easily emulated as shown below.
|The performace is worse than using / and % operators.
|^
-fun divmod = Pair by int dividend, int divisor
- Pair result = int%int().named("quotient", "remainder")
- result.quotient = dividend / divisor
- result.remainder = dividend % divisor
- return result
-end
-fun main = int by List args
+fun divmod ← = 1'-15
+ end
+ do Prev_Pi := Pi;
+
+end.
diff --git a/Task/Arithmetic-geometric-mean-Calculate-Pi/Delphi/arithmetic-geometric-mean-calculate-pi.delphi b/Task/Arithmetic-geometric-mean-Calculate-Pi/Delphi/arithmetic-geometric-mean-calculate-pi.pas
similarity index 100%
rename from Task/Arithmetic-geometric-mean-Calculate-Pi/Delphi/arithmetic-geometric-mean-calculate-pi.delphi
rename to Task/Arithmetic-geometric-mean-Calculate-Pi/Delphi/arithmetic-geometric-mean-calculate-pi.pas
diff --git a/Task/Arithmetic-geometric-mean-Calculate-Pi/Julia/arithmetic-geometric-mean-calculate-pi.julia b/Task/Arithmetic-geometric-mean-Calculate-Pi/Julia/arithmetic-geometric-mean-calculate-pi.jl
similarity index 100%
rename from Task/Arithmetic-geometric-mean-Calculate-Pi/Julia/arithmetic-geometric-mean-calculate-pi.julia
rename to Task/Arithmetic-geometric-mean-Calculate-Pi/Julia/arithmetic-geometric-mean-calculate-pi.jl
diff --git a/Task/Arithmetic-geometric-mean-Calculate-Pi/Kotlin/arithmetic-geometric-mean-calculate-pi.kotlin b/Task/Arithmetic-geometric-mean-Calculate-Pi/Kotlin/arithmetic-geometric-mean-calculate-pi.kts
similarity index 100%
rename from Task/Arithmetic-geometric-mean-Calculate-Pi/Kotlin/arithmetic-geometric-mean-calculate-pi.kotlin
rename to Task/Arithmetic-geometric-mean-Calculate-Pi/Kotlin/arithmetic-geometric-mean-calculate-pi.kts
diff --git a/Task/Arithmetic-geometric-mean-Calculate-Pi/OCaml/arithmetic-geometric-mean-calculate-pi.ocaml b/Task/Arithmetic-geometric-mean-Calculate-Pi/OCaml/arithmetic-geometric-mean-calculate-pi.ml
similarity index 100%
rename from Task/Arithmetic-geometric-mean-Calculate-Pi/OCaml/arithmetic-geometric-mean-calculate-pi.ocaml
rename to Task/Arithmetic-geometric-mean-Calculate-Pi/OCaml/arithmetic-geometric-mean-calculate-pi.ml
diff --git a/Task/Arithmetic-geometric-mean-Calculate-Pi/Rust/arithmetic-geometric-mean-calculate-pi-1.rust b/Task/Arithmetic-geometric-mean-Calculate-Pi/Rust/arithmetic-geometric-mean-calculate-pi-1.rs
similarity index 100%
rename from Task/Arithmetic-geometric-mean-Calculate-Pi/Rust/arithmetic-geometric-mean-calculate-pi-1.rust
rename to Task/Arithmetic-geometric-mean-Calculate-Pi/Rust/arithmetic-geometric-mean-calculate-pi-1.rs
diff --git a/Task/Arithmetic-geometric-mean-Calculate-Pi/Rust/arithmetic-geometric-mean-calculate-pi-2.rust b/Task/Arithmetic-geometric-mean-Calculate-Pi/Rust/arithmetic-geometric-mean-calculate-pi-2.rs
similarity index 100%
rename from Task/Arithmetic-geometric-mean-Calculate-Pi/Rust/arithmetic-geometric-mean-calculate-pi-2.rust
rename to Task/Arithmetic-geometric-mean-Calculate-Pi/Rust/arithmetic-geometric-mean-calculate-pi-2.rs
diff --git a/Task/Arithmetic-geometric-mean-Calculate-Pi/XPL0/arithmetic-geometric-mean-calculate-pi.xpl0 b/Task/Arithmetic-geometric-mean-Calculate-Pi/XPL0/arithmetic-geometric-mean-calculate-pi.xpl0
new file mode 100644
index 0000000000..2801e7a321
--- /dev/null
+++ b/Task/Arithmetic-geometric-mean-Calculate-Pi/XPL0/arithmetic-geometric-mean-calculate-pi.xpl0
@@ -0,0 +1,20 @@
+\ Use the Arithmetic-geometric mean to calculate Pi
+real A, B, T, N, Prev_A, Pi, Prev_Pi;
+begin \ AGM_Pi
+A := 1.0;
+B := Sqrt (0.5);
+T := 0.25;
+N := 1.0;
+Prev_Pi := 0.0;
+loop begin
+ Prev_A := A;
+ A := (A + B) / 2.0;
+ B := Sqrt (Prev_A * B);
+ T := T - N * sq(A - Prev_A);
+ N := N + N;
+ Pi := sq(A + B) / (4.0 * T);
+ Format(1, 15); RlOut(0, Pi); CrLf(0);
+ if abs (Prev_Pi - Pi) < 1E-15 then quit;
+ Prev_Pi := Pi;
+ end \ loop
+end \ AGM_Pi;
diff --git a/Task/Arithmetic-geometric-mean/Delphi/arithmetic-geometric-mean.delphi b/Task/Arithmetic-geometric-mean/Delphi/arithmetic-geometric-mean.pas
similarity index 100%
rename from Task/Arithmetic-geometric-mean/Delphi/arithmetic-geometric-mean.delphi
rename to Task/Arithmetic-geometric-mean/Delphi/arithmetic-geometric-mean.pas
diff --git a/Task/Arithmetic-geometric-mean/Elixir/arithmetic-geometric-mean.elixir b/Task/Arithmetic-geometric-mean/Elixir/arithmetic-geometric-mean.ex
similarity index 100%
rename from Task/Arithmetic-geometric-mean/Elixir/arithmetic-geometric-mean.elixir
rename to Task/Arithmetic-geometric-mean/Elixir/arithmetic-geometric-mean.ex
diff --git a/Task/Arithmetic-geometric-mean/Julia/arithmetic-geometric-mean.julia b/Task/Arithmetic-geometric-mean/Julia/arithmetic-geometric-mean.jl
similarity index 100%
rename from Task/Arithmetic-geometric-mean/Julia/arithmetic-geometric-mean.julia
rename to Task/Arithmetic-geometric-mean/Julia/arithmetic-geometric-mean.jl
diff --git a/Task/Arithmetic-geometric-mean/Kotlin/arithmetic-geometric-mean.kotlin b/Task/Arithmetic-geometric-mean/Kotlin/arithmetic-geometric-mean.kts
similarity index 100%
rename from Task/Arithmetic-geometric-mean/Kotlin/arithmetic-geometric-mean.kotlin
rename to Task/Arithmetic-geometric-mean/Kotlin/arithmetic-geometric-mean.kts
diff --git a/Task/Arithmetic-geometric-mean/OCaml/arithmetic-geometric-mean.ocaml b/Task/Arithmetic-geometric-mean/OCaml/arithmetic-geometric-mean.ml
similarity index 100%
rename from Task/Arithmetic-geometric-mean/OCaml/arithmetic-geometric-mean.ocaml
rename to Task/Arithmetic-geometric-mean/OCaml/arithmetic-geometric-mean.ml
diff --git a/Task/Arithmetic-geometric-mean/PascalABC.NET/arithmetic-geometric-mean.pas b/Task/Arithmetic-geometric-mean/PascalABC.NET/arithmetic-geometric-mean.pas
new file mode 100644
index 0000000000..6b5fb0d821
--- /dev/null
+++ b/Task/Arithmetic-geometric-mean/PascalABC.NET/arithmetic-geometric-mean.pas
@@ -0,0 +1,12 @@
+function agm(a,g: real; eps: real := 1e-10): real;
+begin
+ var an := (a + g) / 2;
+ var gn := Sqrt(a * g);
+ while Abs(an - gn) > eps do
+ (an,gn) := ((an + gn) / 2, Sqrt(an * gn));
+ Result := an;
+end;
+
+begin
+ Print(agm(1, 1 / Sqrt(2)))
+end.
diff --git a/Task/Arithmetic-geometric-mean/Rust/arithmetic-geometric-mean.rust b/Task/Arithmetic-geometric-mean/Rust/arithmetic-geometric-mean.rs
similarity index 100%
rename from Task/Arithmetic-geometric-mean/Rust/arithmetic-geometric-mean.rust
rename to Task/Arithmetic-geometric-mean/Rust/arithmetic-geometric-mean.rs
diff --git a/Task/Arithmetic-geometric-mean/Scheme/arithmetic-geometric-mean.ss b/Task/Arithmetic-geometric-mean/Scheme/arithmetic-geometric-mean.scm
similarity index 100%
rename from Task/Arithmetic-geometric-mean/Scheme/arithmetic-geometric-mean.ss
rename to Task/Arithmetic-geometric-mean/Scheme/arithmetic-geometric-mean.scm
diff --git a/Task/Arithmetic-numbers/Delphi/arithmetic-numbers.delphi b/Task/Arithmetic-numbers/Delphi/arithmetic-numbers.pas
similarity index 100%
rename from Task/Arithmetic-numbers/Delphi/arithmetic-numbers.delphi
rename to Task/Arithmetic-numbers/Delphi/arithmetic-numbers.pas
diff --git a/Task/Arithmetic-numbers/Julia/arithmetic-numbers.julia b/Task/Arithmetic-numbers/Julia/arithmetic-numbers.jl
similarity index 100%
rename from Task/Arithmetic-numbers/Julia/arithmetic-numbers.julia
rename to Task/Arithmetic-numbers/Julia/arithmetic-numbers.jl
diff --git a/Task/Arithmetic-numbers/Oberon-07/arithmetic-numbers.oberon b/Task/Arithmetic-numbers/Oberon-07/arithmetic-numbers.oberon
new file mode 100644
index 0000000000..7983418a7d
--- /dev/null
+++ b/Task/Arithmetic-numbers/Oberon-07/arithmetic-numbers.oberon
@@ -0,0 +1,64 @@
+MODULE ArithmeticNumbers;
+IMPORT Out;
+
+CONST
+ Max = 130000;
+
+VAR divSum: ARRAY Max + 1 OF INTEGER;
+ divCount: ARRAY Max + 1 OF CHAR;
+ current, count, composites: INTEGER;
+
+PROCEDURE CalculateDivisorSums;
+ VAR div, num: INTEGER;
+ BEGIN
+ FOR num := 1 TO Max DO
+ divSum[num] := 0;
+ divCount[num] := CHR(0)
+ END;
+
+ FOR div := 1 TO Max DO
+ num := div;
+ WHILE num <= Max DO
+ INC(divSum[num],div);
+ divCount[num] := CHR(ORD(divCount[num]) + 1);
+ INC(num,div)
+ END
+ END
+ END CalculateDivisorSums;
+
+PROCEDURE Next(n: INTEGER): INTEGER;
+ BEGIN
+ REPEAT INC(n) UNTIL (divSum[n] MOD ORD(divCount[n])) = 0;
+ RETURN n
+ END Next;
+
+PROCEDURE Composite(n: INTEGER): BOOLEAN;
+ BEGIN
+ RETURN (n>1) & (divSum[n] # n+1)
+ END Composite;
+
+BEGIN
+ CalculateDivisorSums;
+ Out.String("First 100 arithmetic numbers:");
+ Out.Ln;
+
+ current := 0;
+ FOR count := 1 TO 100000 DO
+ current := Next(current);
+ IF Composite(current) THEN INC(composites) END;
+ IF count <= 100 THEN
+ Out.Int(current, 5);
+ IF count MOD 10 = 0 THEN Out.Ln END
+ END;
+
+ IF (count = 1000) OR (count = 10000) OR (count = 100000) THEN
+ Out.Int(count, 6);
+ Out.String("th: ");
+ Out.Int(current, 6);
+ Out.String(", ");
+ Out.Int(composites, 6);
+ Out.String(" composites");
+ Out.Ln
+ END;
+ END
+END ArithmeticNumbers.
diff --git a/Task/Arithmetic-numbers/REXX/arithmetic-numbers.rexx b/Task/Arithmetic-numbers/REXX/arithmetic-numbers.rexx
new file mode 100644
index 0000000000..296b36d880
--- /dev/null
+++ b/Task/Arithmetic-numbers/REXX/arithmetic-numbers.rexx
@@ -0,0 +1,49 @@
+include Settings
+
+say version; say 'Arithmetic numbers'; say
+numeric digits 9
+a = 0; c = 0
+do i = 1
+/* Is the number arithmetic? */
+ if Arithmetic(i) then do
+ a = a+1
+/* Is the number composite? */
+ if divi.0 > 2 then
+ c = c+1
+/* Output control */
+ if a <= 100 then do
+ if a = 1 then
+ say 'First 100 arithmetic numbers are'
+ call Charout ,Right(i,4)
+ if a//10 = 0 then
+ say
+ if a = 100 then
+ say
+ end
+ if a = 100 | a = 1000 | a = 10000 | a = 100000 | a = 1000000 then do
+ say 'The' a'th arithmetic number is' i
+ say 'Of the first' a 'numbers' c 'are composite'
+ say
+ end
+/* Max 1m, higher takes too long */
+ if a = 1000000 then
+ leave
+ end
+end
+say Format(Time('e'),,3) 'seconds'
+exit
+
+Arithmetic:
+/* Is a number arithmetic? function */
+procedure expose divi.
+arg x
+/* Cf definition */
+s = Sigma(x)
+if Iswhole(s/divi.0) then
+ return 1
+else
+ return 0
+
+include Numbers
+include Functions
+include Abend
diff --git a/Task/Arithmetic-numbers/Rust/arithmetic-numbers.rust b/Task/Arithmetic-numbers/Rust/arithmetic-numbers.rs
similarity index 100%
rename from Task/Arithmetic-numbers/Rust/arithmetic-numbers.rust
rename to Task/Arithmetic-numbers/Rust/arithmetic-numbers.rs
diff --git a/Task/Array-concatenation/Crystal/array-concatenation.crystal b/Task/Array-concatenation/Crystal/array-concatenation.cr
similarity index 100%
rename from Task/Array-concatenation/Crystal/array-concatenation.crystal
rename to Task/Array-concatenation/Crystal/array-concatenation.cr
diff --git a/Task/Array-concatenation/Delphi/array-concatenation-1.delphi b/Task/Array-concatenation/Delphi/array-concatenation-1.pas
similarity index 100%
rename from Task/Array-concatenation/Delphi/array-concatenation-1.delphi
rename to Task/Array-concatenation/Delphi/array-concatenation-1.pas
diff --git a/Task/Array-concatenation/Delphi/array-concatenation-2.delphi b/Task/Array-concatenation/Delphi/array-concatenation-2.pas
similarity index 100%
rename from Task/Array-concatenation/Delphi/array-concatenation-2.delphi
rename to Task/Array-concatenation/Delphi/array-concatenation-2.pas
diff --git a/Task/Array-concatenation/EMal/array-concatenation.emal b/Task/Array-concatenation/EMal/array-concatenation.emal
index 4d5057c1de..b90d471853 100644
--- a/Task/Array-concatenation/EMal/array-concatenation.emal
+++ b/Task/Array-concatenation/EMal/array-concatenation.emal
@@ -2,7 +2,7 @@
|you can expand a list to function arguments
|by prefixing it with the unary plus.
|^
-List a = int[1,2,3]
-List b = int[4,5,6]
-List c = int[+a, +b]
+List a ← int[1, 2, 3]
+List b ← int[4, 5, 6]
+List c ← int[+a, +b]
writeLine(c)
diff --git a/Task/Array-concatenation/Elixir/array-concatenation.elixir b/Task/Array-concatenation/Elixir/array-concatenation.ex
similarity index 100%
rename from Task/Array-concatenation/Elixir/array-concatenation.elixir
rename to Task/Array-concatenation/Elixir/array-concatenation.ex
diff --git a/Task/Array-concatenation/Euphoria/array-concatenation.euphoria b/Task/Array-concatenation/Euphoria/array-concatenation.ex
similarity index 100%
rename from Task/Array-concatenation/Euphoria/array-concatenation.euphoria
rename to Task/Array-concatenation/Euphoria/array-concatenation.ex
diff --git a/Task/Array-concatenation/FutureBasic/array-concatenation.basic b/Task/Array-concatenation/FutureBasic/array-concatenation-1.basic
similarity index 100%
rename from Task/Array-concatenation/FutureBasic/array-concatenation.basic
rename to Task/Array-concatenation/FutureBasic/array-concatenation-1.basic
diff --git a/Task/Array-concatenation/FutureBasic/array-concatenation-2.basic b/Task/Array-concatenation/FutureBasic/array-concatenation-2.basic
new file mode 100644
index 0000000000..c21c846080
--- /dev/null
+++ b/Task/Array-concatenation/FutureBasic/array-concatenation-2.basic
@@ -0,0 +1,10 @@
+void local fn ConcatArrays
+ CFArrayRef array1 = @[@1,@2,@3], array2 = @[@4,@5,@6]
+
+ CFArrayRef array3 = concat(array1,array2) // any number of arguments
+ print array3
+end fn
+
+fn DoIt
+
+HandleEvents
diff --git a/Task/Array-concatenation/Julia/array-concatenation.julia b/Task/Array-concatenation/Julia/array-concatenation.jl
similarity index 100%
rename from Task/Array-concatenation/Julia/array-concatenation.julia
rename to Task/Array-concatenation/Julia/array-concatenation.jl
diff --git a/Task/Array-concatenation/Komodo/array-concatenation.komodo b/Task/Array-concatenation/Komodo/array-concatenation.komodo
new file mode 100644
index 0000000000..a78fe8469b
--- /dev/null
+++ b/Task/Array-concatenation/Komodo/array-concatenation.komodo
@@ -0,0 +1,2 @@
+let concat(a, b) := a + b
+assert(concat([1, 2, 3], [4, 5, 6]) = [1, 2, 3, 4, 5, 6])
diff --git a/Task/Array-concatenation/Kotlin/array-concatenation.kotlin b/Task/Array-concatenation/Kotlin/array-concatenation.kts
similarity index 100%
rename from Task/Array-concatenation/Kotlin/array-concatenation.kotlin
rename to Task/Array-concatenation/Kotlin/array-concatenation.kts
diff --git a/Task/Array-concatenation/Nu/array-concatenation.nu b/Task/Array-concatenation/Nu/array-concatenation-1.nu
similarity index 64%
rename from Task/Array-concatenation/Nu/array-concatenation.nu
rename to Task/Array-concatenation/Nu/array-concatenation-1.nu
index ea26286c22..ff3db9a079 100644
--- a/Task/Array-concatenation/Nu/array-concatenation.nu
+++ b/Task/Array-concatenation/Nu/array-concatenation-1.nu
@@ -1,3 +1,2 @@
let a = [1 2 3]
let b = [4 5 6]
-[$a $b] | flatten
diff --git a/Task/Array-concatenation/Nu/array-concatenation-2.nu b/Task/Array-concatenation/Nu/array-concatenation-2.nu
new file mode 100644
index 0000000000..e25bceaf1e
--- /dev/null
+++ b/Task/Array-concatenation/Nu/array-concatenation-2.nu
@@ -0,0 +1 @@
+$a ++ $b
diff --git a/Task/Array-concatenation/Nu/array-concatenation-3.nu b/Task/Array-concatenation/Nu/array-concatenation-3.nu
new file mode 100644
index 0000000000..d3985d96ef
--- /dev/null
+++ b/Task/Array-concatenation/Nu/array-concatenation-3.nu
@@ -0,0 +1 @@
+[...$a ...$b]
diff --git a/Task/Array-concatenation/Nu/array-concatenation-4.nu b/Task/Array-concatenation/Nu/array-concatenation-4.nu
new file mode 100644
index 0000000000..6e1c359cc0
--- /dev/null
+++ b/Task/Array-concatenation/Nu/array-concatenation-4.nu
@@ -0,0 +1 @@
+$a | append $b
diff --git a/Task/Array-concatenation/Nu/array-concatenation-5.nu b/Task/Array-concatenation/Nu/array-concatenation-5.nu
new file mode 100644
index 0000000000..c3773fc63a
--- /dev/null
+++ b/Task/Array-concatenation/Nu/array-concatenation-5.nu
@@ -0,0 +1 @@
+$b | prepend $a
diff --git a/Task/Array-concatenation/Nu/array-concatenation-6.nu b/Task/Array-concatenation/Nu/array-concatenation-6.nu
new file mode 100644
index 0000000000..bc717107f1
--- /dev/null
+++ b/Task/Array-concatenation/Nu/array-concatenation-6.nu
@@ -0,0 +1 @@
+[$a $b] | flatten
diff --git a/Task/Array-concatenation/OCaml/array-concatenation-1.ocaml b/Task/Array-concatenation/OCaml/array-concatenation-1.ml
similarity index 100%
rename from Task/Array-concatenation/OCaml/array-concatenation-1.ocaml
rename to Task/Array-concatenation/OCaml/array-concatenation-1.ml
diff --git a/Task/Array-concatenation/OCaml/array-concatenation-2.ocaml b/Task/Array-concatenation/OCaml/array-concatenation-2.ml
similarity index 100%
rename from Task/Array-concatenation/OCaml/array-concatenation-2.ocaml
rename to Task/Array-concatenation/OCaml/array-concatenation-2.ml
diff --git a/Task/Array-concatenation/Rust/array-concatenation-1.rust b/Task/Array-concatenation/Rust/array-concatenation-1.rs
similarity index 100%
rename from Task/Array-concatenation/Rust/array-concatenation-1.rust
rename to Task/Array-concatenation/Rust/array-concatenation-1.rs
diff --git a/Task/Array-concatenation/Rust/array-concatenation-2.rust b/Task/Array-concatenation/Rust/array-concatenation-2.rs
similarity index 100%
rename from Task/Array-concatenation/Rust/array-concatenation-2.rust
rename to Task/Array-concatenation/Rust/array-concatenation-2.rs
diff --git a/Task/Array-concatenation/Scheme/array-concatenation-1.ss b/Task/Array-concatenation/Scheme/array-concatenation-1.scm
similarity index 100%
rename from Task/Array-concatenation/Scheme/array-concatenation-1.ss
rename to Task/Array-concatenation/Scheme/array-concatenation-1.scm
diff --git a/Task/Array-concatenation/Scheme/array-concatenation-2.ss b/Task/Array-concatenation/Scheme/array-concatenation-2.scm
similarity index 100%
rename from Task/Array-concatenation/Scheme/array-concatenation-2.ss
rename to Task/Array-concatenation/Scheme/array-concatenation-2.scm
diff --git a/Task/Array-concatenation/Tailspin/array-concatenation.tailspin b/Task/Array-concatenation/Tailspin/array-concatenation-1.tailspin
similarity index 100%
rename from Task/Array-concatenation/Tailspin/array-concatenation.tailspin
rename to Task/Array-concatenation/Tailspin/array-concatenation-1.tailspin
diff --git a/Task/Array-concatenation/Tailspin/array-concatenation-2.tailspin b/Task/Array-concatenation/Tailspin/array-concatenation-2.tailspin
new file mode 100644
index 0000000000..062b6d154b
--- /dev/null
+++ b/Task/Array-concatenation/Tailspin/array-concatenation-2.tailspin
@@ -0,0 +1,3 @@
+a is [1, 2, 3];
+b is [4, 5, 6];
+[$a..., $b...] !
diff --git a/Task/Array-length/00-TASK.txt b/Task/Array-length/00-TASK.txt
index c6106a1db9..d128d8bad4 100644
--- a/Task/Array-length/00-TASK.txt
+++ b/Task/Array-length/00-TASK.txt
@@ -1,5 +1,5 @@
;Task:
-Determine the amount of elements in an array.
+Determine the number of elements in an array.
As an example use an array holding the strings 'apple' and 'orange'.
diff --git a/Task/Array-length/Crystal/array-length.crystal b/Task/Array-length/Crystal/array-length.cr
similarity index 100%
rename from Task/Array-length/Crystal/array-length.crystal
rename to Task/Array-length/Crystal/array-length.cr
diff --git a/Task/Array-length/Delphi/array-length.delphi b/Task/Array-length/Delphi/array-length.pas
similarity index 100%
rename from Task/Array-length/Delphi/array-length.delphi
rename to Task/Array-length/Delphi/array-length.pas
diff --git a/Task/Array-length/Elixir/array-length.elixir b/Task/Array-length/Elixir/array-length.ex
similarity index 100%
rename from Task/Array-length/Elixir/array-length.elixir
rename to Task/Array-length/Elixir/array-length.ex
diff --git a/Task/Array-length/Euphoria/array-length.euphoria b/Task/Array-length/Euphoria/array-length.ex
similarity index 100%
rename from Task/Array-length/Euphoria/array-length.euphoria
rename to Task/Array-length/Euphoria/array-length.ex
diff --git a/Task/Array-length/Jq/array-length-1.jq b/Task/Array-length/Jq/array-length-1.jq
deleted file mode 100644
index 76fba1892d..0000000000
--- a/Task/Array-length/Jq/array-length-1.jq
+++ /dev/null
@@ -1 +0,0 @@
-["apple","orange"] | length
diff --git a/Task/Array-length/Jq/array-length-2.jq b/Task/Array-length/Jq/array-length-2.jq
deleted file mode 100644
index 0cfbf08886..0000000000
--- a/Task/Array-length/Jq/array-length-2.jq
+++ /dev/null
@@ -1 +0,0 @@
-2
diff --git a/Task/Array-length/Jq/array-length.jq b/Task/Array-length/Jq/array-length.jq
new file mode 100644
index 0000000000..f1cd41feba
--- /dev/null
+++ b/Task/Array-length/Jq/array-length.jq
@@ -0,0 +1 @@
+"apple", "orange", "as⃝df̅" | [., length, utf8bytelength]
diff --git a/Task/Array-length/Julia/array-length.julia b/Task/Array-length/Julia/array-length.jl
similarity index 100%
rename from Task/Array-length/Julia/array-length.julia
rename to Task/Array-length/Julia/array-length.jl
diff --git a/Task/Array-length/Kotlin/array-length.kotlin b/Task/Array-length/Kotlin/array-length.kts
similarity index 100%
rename from Task/Array-length/Kotlin/array-length.kotlin
rename to Task/Array-length/Kotlin/array-length.kts
diff --git a/Task/Array-length/OCaml/array-length.ocaml b/Task/Array-length/OCaml/array-length.ml
similarity index 100%
rename from Task/Array-length/OCaml/array-length.ocaml
rename to Task/Array-length/OCaml/array-length.ml
diff --git a/Task/Array-length/OmniMark/array-length.xom b/Task/Array-length/OmniMark/array-length.xom
new file mode 100644
index 0000000000..ffa258ca53
--- /dev/null
+++ b/Task/Array-length/OmniMark/array-length.xom
@@ -0,0 +1,4 @@
+process
+ local stream s variable initial {"apple", "orange"}
+ local integer i initial {number of s}
+ put #main-output 'The number of fruit elements is %d(i).'
diff --git a/Task/Array-length/Rust/array-length.rust b/Task/Array-length/Rust/array-length.rs
similarity index 100%
rename from Task/Array-length/Rust/array-length.rust
rename to Task/Array-length/Rust/array-length.rs
diff --git a/Task/Array-length/Scheme/array-length.ss b/Task/Array-length/Scheme/array-length.scm
similarity index 100%
rename from Task/Array-length/Scheme/array-length.ss
rename to Task/Array-length/Scheme/array-length.scm
diff --git a/Task/Arrays/Crystal/arrays.crystal b/Task/Arrays/Crystal/arrays.cr
similarity index 100%
rename from Task/Arrays/Crystal/arrays.crystal
rename to Task/Arrays/Crystal/arrays.cr
diff --git a/Task/Arrays/Delphi/arrays.delphi b/Task/Arrays/Delphi/arrays.pas
similarity index 100%
rename from Task/Arrays/Delphi/arrays.delphi
rename to Task/Arrays/Delphi/arrays.pas
diff --git a/Task/Arrays/EMal/arrays.emal b/Task/Arrays/EMal/arrays.emal
index 86af39bf20..8ee99d4cdb 100644
--- a/Task/Arrays/EMal/arrays.emal
+++ b/Task/Arrays/EMal/arrays.emal
@@ -1,15 +1,15 @@
^|EMal has dynamic lists.
- |Lists have differen API to change the value in-place or not.
- |SQL like name: insert, append, delete, order alter the current list.
- |There are methods that operate on indexes, other on values.
+ |Lists have different API to change the value in-place or not.
+ |SQL-ish methods like: insert, append, delete, order, alter the current list.
+ |Different methods operate on indexes or on values.
|^
-List a = int[] # a:[]
+List a ← int[] # a:[]
a.append(8) # a:[8]
a.insert(1, 13) # a:[8,13]
a.delete(0) # a:[13]
a.clear() # a:[]
a.of(21, 33) # a:[21,33]
-a[1] = 34 # a:[21,34]
-List b = a.remove(21) # a:[21, 34], b:[34]
-writeLine("a has " + a.length + " items, their values are " + a[0] + ", " + a[1])
-writeLine("b has " + b.length + " item, its value is " + b[0])
+a[1] ← 34 # a:[21,34]
+List b ← a.remove(21) # a:[21, 34], b:[34]
+writeLine("a has ", a.length, " items, their values are ", a[0], ", ", a[1])
+writeLine("b has ", b.length, " item, its value is ", b[0])
diff --git a/Task/Arrays/Elixir/arrays-1.elixir b/Task/Arrays/Elixir/arrays-1.ex
similarity index 100%
rename from Task/Arrays/Elixir/arrays-1.elixir
rename to Task/Arrays/Elixir/arrays-1.ex
diff --git a/Task/Arrays/Elixir/arrays-2.elixir b/Task/Arrays/Elixir/arrays-2.ex
similarity index 100%
rename from Task/Arrays/Elixir/arrays-2.elixir
rename to Task/Arrays/Elixir/arrays-2.ex
diff --git a/Task/Arrays/Elixir/arrays-3.elixir b/Task/Arrays/Elixir/arrays-3.ex
similarity index 100%
rename from Task/Arrays/Elixir/arrays-3.elixir
rename to Task/Arrays/Elixir/arrays-3.ex
diff --git a/Task/Arrays/Elixir/arrays-4.elixir b/Task/Arrays/Elixir/arrays-4.ex
similarity index 100%
rename from Task/Arrays/Elixir/arrays-4.elixir
rename to Task/Arrays/Elixir/arrays-4.ex
diff --git a/Task/Arrays/Elixir/arrays-5.elixir b/Task/Arrays/Elixir/arrays-5.ex
similarity index 100%
rename from Task/Arrays/Elixir/arrays-5.elixir
rename to Task/Arrays/Elixir/arrays-5.ex
diff --git a/Task/Arrays/Elixir/arrays-6.elixir b/Task/Arrays/Elixir/arrays-6.ex
similarity index 100%
rename from Task/Arrays/Elixir/arrays-6.elixir
rename to Task/Arrays/Elixir/arrays-6.ex
diff --git a/Task/Arrays/Elixir/arrays-7.elixir b/Task/Arrays/Elixir/arrays-7.ex
similarity index 100%
rename from Task/Arrays/Elixir/arrays-7.elixir
rename to Task/Arrays/Elixir/arrays-7.ex
diff --git a/Task/Arrays/Euphoria/arrays.euphoria b/Task/Arrays/Euphoria/arrays.ex
similarity index 100%
rename from Task/Arrays/Euphoria/arrays.euphoria
rename to Task/Arrays/Euphoria/arrays.ex
diff --git a/Task/Arrays/Kotlin/arrays.kotlin b/Task/Arrays/Kotlin/arrays.kts
similarity index 100%
rename from Task/Arrays/Kotlin/arrays.kotlin
rename to Task/Arrays/Kotlin/arrays.kts
diff --git a/Task/Arrays/OCaml/arrays.ocaml b/Task/Arrays/OCaml/arrays.ml
similarity index 100%
rename from Task/Arrays/OCaml/arrays.ocaml
rename to Task/Arrays/OCaml/arrays.ml
diff --git a/Task/Arrays/Rust/arrays-1.rust b/Task/Arrays/Rust/arrays-1.rs
similarity index 100%
rename from Task/Arrays/Rust/arrays-1.rust
rename to Task/Arrays/Rust/arrays-1.rs
diff --git a/Task/Arrays/Rust/arrays-2.rust b/Task/Arrays/Rust/arrays-2.rs
similarity index 100%
rename from Task/Arrays/Rust/arrays-2.rust
rename to Task/Arrays/Rust/arrays-2.rs
diff --git a/Task/Arrays/Rust/arrays-3.rust b/Task/Arrays/Rust/arrays-3.rs
similarity index 100%
rename from Task/Arrays/Rust/arrays-3.rust
rename to Task/Arrays/Rust/arrays-3.rs
diff --git a/Task/Arrays/Rust/arrays-4.rust b/Task/Arrays/Rust/arrays-4.rs
similarity index 100%
rename from Task/Arrays/Rust/arrays-4.rust
rename to Task/Arrays/Rust/arrays-4.rs
diff --git a/Task/Arrays/Rust/arrays-5.rust b/Task/Arrays/Rust/arrays-5.rs
similarity index 100%
rename from Task/Arrays/Rust/arrays-5.rust
rename to Task/Arrays/Rust/arrays-5.rs
diff --git a/Task/Arrays/Scheme/arrays.ss b/Task/Arrays/Scheme/arrays.scm
similarity index 100%
rename from Task/Arrays/Scheme/arrays.ss
rename to Task/Arrays/Scheme/arrays.scm
diff --git a/Task/Ascending-primes/ALGOL-68/ascending-primes.alg b/Task/Ascending-primes/ALGOL-68/ascending-primes.alg
index f1bf12caa2..9d9ab8f4dd 100644
--- a/Task/Ascending-primes/ALGOL-68/ascending-primes.alg
+++ b/Task/Ascending-primes/ALGOL-68/ascending-primes.alg
@@ -1,6 +1,6 @@
BEGIN # find all primes with strictly increasing digits #
PR read "primes.incl.a68" PR # include prime utilities #
- PR read "rows.incl.a68" PR # include array utilities #
+ PR read "sort.incl.a68" PR # include sort utilities #
[ 1 : 512 ]INT primes; # there will be at most 512 (2^9) primes #
INT p count := 0; # number of primes found so far #
FOR d1 FROM 0 TO 1 DO
@@ -36,7 +36,7 @@ BEGIN # find all primes with strictly increasing digits #
OD
OD
OD;
- QUICKSORT primes FROMELEMENT 1 TOELEMENT p count; # sort the primes #
+ primes QUICKSORT ELEMENTS( 1, p count ); # sort the primes #
FOR i TO p count DO # display the primes #
print( ( " ", whole( primes[ i ], -8 ) ) );
IF i MOD 10 = 0 THEN print( ( newline ) ) FI
diff --git a/Task/Ascending-primes/Delphi/ascending-primes.delphi b/Task/Ascending-primes/Delphi/ascending-primes.pas
similarity index 100%
rename from Task/Ascending-primes/Delphi/ascending-primes.delphi
rename to Task/Ascending-primes/Delphi/ascending-primes.pas
diff --git a/Task/Ascending-primes/Julia/ascending-primes.julia b/Task/Ascending-primes/Julia/ascending-primes.jl
similarity index 100%
rename from Task/Ascending-primes/Julia/ascending-primes.julia
rename to Task/Ascending-primes/Julia/ascending-primes.jl
diff --git a/Task/Ascending-primes/NewLISP/ascending-primes.l b/Task/Ascending-primes/NewLISP/ascending-primes.l
new file mode 100644
index 0000000000..c89b1d631c
--- /dev/null
+++ b/Task/Ascending-primes/NewLISP/ascending-primes.l
@@ -0,0 +1,17 @@
+(define (prime? n) (= 1 (length (factor (int n)))))
+
+(define (powerset lst)
+ (if lst
+ (let (p (powerset (1 lst)))
+ (append p (map (curry cons (lst 0)) p)))
+ '(())))
+
+(letn (primes
+ (sort (filter prime?
+ (map (fn (xs) (int (apply string (sort xs)) 0))
+ (powerset (sequence 1 9)))))
+ cnt)
+ (dolist (n primes)
+ (print (format "%9d" n))
+ (if (zero? (% (++ cnt) 6)) (println)))
+ (println "\n\nNumber found: " (length primes)))
diff --git a/Task/Ascending-primes/OCaml/ascending-primes.ocaml b/Task/Ascending-primes/OCaml/ascending-primes.ml
similarity index 100%
rename from Task/Ascending-primes/OCaml/ascending-primes.ocaml
rename to Task/Ascending-primes/OCaml/ascending-primes.ml
diff --git a/Task/Ascending-primes/PascalABC.NET/ascending-primes.pas b/Task/Ascending-primes/PascalABC.NET/ascending-primes.pas
new file mode 100644
index 0000000000..4597cde234
--- /dev/null
+++ b/Task/Ascending-primes/PascalABC.NET/ascending-primes.pas
@@ -0,0 +1,10 @@
+##
+uses School;
+
+function AscendingSeq(n: integer): sequence of integer;
+begin
+ for var x := n*10 + n mod 10 + 1 to n*10 + 9 do
+ yield sequence AscendingSeq(x) + x;
+end;
+
+AscendingSeq(0).Order.Where(n -> n.IsPrime).Print;
diff --git a/Task/Assertions/Crystal/assertions.crystal b/Task/Assertions/Crystal/assertions.cr
similarity index 100%
rename from Task/Assertions/Crystal/assertions.crystal
rename to Task/Assertions/Crystal/assertions.cr
diff --git a/Task/Assertions/Delphi/assertions-1.delphi b/Task/Assertions/Delphi/assertions-1.pas
similarity index 100%
rename from Task/Assertions/Delphi/assertions-1.delphi
rename to Task/Assertions/Delphi/assertions-1.pas
diff --git a/Task/Assertions/Delphi/assertions-2.delphi b/Task/Assertions/Delphi/assertions-2.pas
similarity index 100%
rename from Task/Assertions/Delphi/assertions-2.delphi
rename to Task/Assertions/Delphi/assertions-2.pas
diff --git a/Task/Assertions/Delphi/assertions-3.delphi b/Task/Assertions/Delphi/assertions-3.pas
similarity index 100%
rename from Task/Assertions/Delphi/assertions-3.delphi
rename to Task/Assertions/Delphi/assertions-3.pas
diff --git a/Task/Assertions/Elixir/assertions.elixir b/Task/Assertions/Elixir/assertions.ex
similarity index 100%
rename from Task/Assertions/Elixir/assertions.elixir
rename to Task/Assertions/Elixir/assertions.ex
diff --git a/Task/Assertions/Euphoria/assertions.euphoria b/Task/Assertions/Euphoria/assertions.ex
similarity index 100%
rename from Task/Assertions/Euphoria/assertions.euphoria
rename to Task/Assertions/Euphoria/assertions.ex
diff --git a/Task/Assertions/Julia/assertions.julia b/Task/Assertions/Julia/assertions.jl
similarity index 100%
rename from Task/Assertions/Julia/assertions.julia
rename to Task/Assertions/Julia/assertions.jl
diff --git a/Task/Assertions/Kotlin/assertions-1.kotlin b/Task/Assertions/Kotlin/assertions-1.kts
similarity index 100%
rename from Task/Assertions/Kotlin/assertions-1.kotlin
rename to Task/Assertions/Kotlin/assertions-1.kts
diff --git a/Task/Assertions/Kotlin/assertions-2.kotlin b/Task/Assertions/Kotlin/assertions-2.kts
similarity index 100%
rename from Task/Assertions/Kotlin/assertions-2.kotlin
rename to Task/Assertions/Kotlin/assertions-2.kts
diff --git a/Task/Assertions/OCaml/assertions.ocaml b/Task/Assertions/OCaml/assertions.ml
similarity index 100%
rename from Task/Assertions/OCaml/assertions.ocaml
rename to Task/Assertions/OCaml/assertions.ml
diff --git a/Task/Assertions/Rust/assertions.rust b/Task/Assertions/Rust/assertions.rs
similarity index 100%
rename from Task/Assertions/Rust/assertions.rust
rename to Task/Assertions/Rust/assertions.rs
diff --git a/Task/Assertions/Scheme/assertions.ss b/Task/Assertions/Scheme/assertions.scm
similarity index 100%
rename from Task/Assertions/Scheme/assertions.ss
rename to Task/Assertions/Scheme/assertions.scm
diff --git a/Task/Associative-array-Creation/Crystal/associative-array-creation.crystal b/Task/Associative-array-Creation/Crystal/associative-array-creation.cr
similarity index 100%
rename from Task/Associative-array-Creation/Crystal/associative-array-creation.crystal
rename to Task/Associative-array-Creation/Crystal/associative-array-creation.cr
diff --git a/Task/Associative-array-Creation/Delphi/associative-array-creation.delphi b/Task/Associative-array-Creation/Delphi/associative-array-creation.pas
similarity index 100%
rename from Task/Associative-array-Creation/Delphi/associative-array-creation.delphi
rename to Task/Associative-array-Creation/Delphi/associative-array-creation.pas
diff --git a/Task/Associative-array-Creation/EMal/associative-array-creation.emal b/Task/Associative-array-Creation/EMal/associative-array-creation.emal
index fe38da6a41..2922fe586a 100644
--- a/Task/Associative-array-Creation/EMal/associative-array-creation.emal
+++ b/Task/Associative-array-Creation/EMal/associative-array-creation.emal
@@ -1,11 +1,11 @@
-Map empty = Map(int, text) # creates an empty map
+Map empty ← Map(int, text) # creates an empty map
writeLine(empty)
-var longFruit = Map(int, text).of(1, "banana") # creates a map with the pair 1 => "banana"
-longFruit[2] = "melon" # associates a key of 2 with "melon"
+var longFruit ← Map(int, text).of(1, "banana") # creates a map with the pair 1 ⇒ "banana"
+longFruit[2] ← "melon" # associates a key of 2 with "melon"
longFruit.insert(3, "avocado")
writeLine(longFruit) # prints the map
-var shortFruit = int%text[4 => "kiwi", 5 => "apple"] # map creation using arrow notation
+var shortFruit ← int%text[4 ⇒ "kiwi", 5 ⇒ "apple"] # map creation using arrow notation
writeLine(shortFruit[5]) # retrieves the value with a key of 5 and prints it out
writeLine(shortFruit.length) # prints the number of entries
writeLine(shortFruit) # prints the map
-writeLine(text%text["Italy" => "Rome", "France" => "Paris", "Germany" => "Berlin", "Spain" => "Madrid"])
+writeLine(text%text["Italy" ⇒ "Rome", "France" ⇒ "Paris", "Germany" ⇒ "Berlin", "Spain" ⇒ "Madrid"])
diff --git a/Task/Associative-array-Creation/EasyLang/associative-array-creation.easy b/Task/Associative-array-Creation/EasyLang/associative-array-creation.easy
index 1081102416..5753f9d6ac 100644
--- a/Task/Associative-array-Creation/EasyLang/associative-array-creation.easy
+++ b/Task/Associative-array-Creation/EasyLang/associative-array-creation.easy
@@ -15,6 +15,7 @@ proc hashSet ind$ val$ . ar$[][] .
return
.
.
+ ar$[][] &= [ ind$ val$ ]
.
clothing$[][] = [ [ "type" "t-shirt" ] [ "color" "red" ] ]
clothing$[][] &= [ "size" "xl" ]
diff --git a/Task/Associative-array-Creation/Elixir/associative-array-creation-1.elixir b/Task/Associative-array-Creation/Elixir/associative-array-creation-1.ex
similarity index 100%
rename from Task/Associative-array-Creation/Elixir/associative-array-creation-1.elixir
rename to Task/Associative-array-Creation/Elixir/associative-array-creation-1.ex
diff --git a/Task/Associative-array-Creation/Elixir/associative-array-creation-2.elixir b/Task/Associative-array-Creation/Elixir/associative-array-creation-2.ex
similarity index 100%
rename from Task/Associative-array-Creation/Elixir/associative-array-creation-2.elixir
rename to Task/Associative-array-Creation/Elixir/associative-array-creation-2.ex
diff --git a/Task/Associative-array-Creation/Elixir/associative-array-creation-3.elixir b/Task/Associative-array-Creation/Elixir/associative-array-creation-3.ex
similarity index 100%
rename from Task/Associative-array-Creation/Elixir/associative-array-creation-3.elixir
rename to Task/Associative-array-Creation/Elixir/associative-array-creation-3.ex
diff --git a/Task/Associative-array-Creation/Elixir/associative-array-creation-4.elixir b/Task/Associative-array-Creation/Elixir/associative-array-creation-4.ex
similarity index 100%
rename from Task/Associative-array-Creation/Elixir/associative-array-creation-4.elixir
rename to Task/Associative-array-Creation/Elixir/associative-array-creation-4.ex
diff --git a/Task/Associative-array-Creation/FutureBasic/associative-array-creation.basic b/Task/Associative-array-Creation/FutureBasic/associative-array-creation.basic
index 94efc3a554..66566393bd 100644
--- a/Task/Associative-array-Creation/FutureBasic/associative-array-creation.basic
+++ b/Task/Associative-array-Creation/FutureBasic/associative-array-creation.basic
@@ -1,9 +1,9 @@
void local fn DoIt
- CFDictionaryRef dict1 = fn DictionaryWithObjects( @"Alpha", @"A", @"Bravo", @"B", @"Charlie", @"C", @"Delta", @"D", NULL )
+ CFDictionaryRef dict1 = fn DictionaryWithObjects( @"Alpha", @"A", @"Bravo", @"B", @"Charlie", @"C", @"Delta", @"D", NULL ) // must be NULL-terminated
- CFDictionaryRef dict2 = @{@"A":@"Alpha", @"B":@"Bravo", @"C":@"Charlie", @"D":@"Delta"}
+ CFDictionaryRef dict2 = @{@"A":@"Alpha", @"B":@"Bravo", @"C":@"Charlie", @"D":@"Delta"} // shorthand syntax
- CFMutableDictionaryRef dict3 = fn MutableDictionaryWithCapacity(0)
+ CFMutableDictionaryRef dict3 = fn MutableDictionaryNew
MutableDictionarySetObjectForKey( dict3, @"Alpha", @"A" )
MutableDictionarySetObjectForKey( dict3, @"Bravo", @"B" )
MutableDictionarySetObjectForKey( dict3, @"Charlie", @"C" )
diff --git a/Task/Associative-array-Creation/Julia/associative-array-creation.julia b/Task/Associative-array-Creation/Julia/associative-array-creation.jl
similarity index 100%
rename from Task/Associative-array-Creation/Julia/associative-array-creation.julia
rename to Task/Associative-array-Creation/Julia/associative-array-creation.jl
diff --git a/Task/Associative-array-Creation/Kotlin/associative-array-creation.kotlin b/Task/Associative-array-Creation/Kotlin/associative-array-creation.kts
similarity index 100%
rename from Task/Associative-array-Creation/Kotlin/associative-array-creation.kotlin
rename to Task/Associative-array-Creation/Kotlin/associative-array-creation.kts
diff --git a/Task/Associative-array-Creation/OCaml/associative-array-creation-1.ocaml b/Task/Associative-array-Creation/OCaml/associative-array-creation-1.ml
similarity index 100%
rename from Task/Associative-array-Creation/OCaml/associative-array-creation-1.ocaml
rename to Task/Associative-array-Creation/OCaml/associative-array-creation-1.ml
diff --git a/Task/Associative-array-Creation/OCaml/associative-array-creation-2.ocaml b/Task/Associative-array-Creation/OCaml/associative-array-creation-2.ml
similarity index 100%
rename from Task/Associative-array-Creation/OCaml/associative-array-creation-2.ocaml
rename to Task/Associative-array-Creation/OCaml/associative-array-creation-2.ml
diff --git a/Task/Associative-array-Creation/OCaml/associative-array-creation-3.ocaml b/Task/Associative-array-Creation/OCaml/associative-array-creation-3.ml
similarity index 100%
rename from Task/Associative-array-Creation/OCaml/associative-array-creation-3.ocaml
rename to Task/Associative-array-Creation/OCaml/associative-array-creation-3.ml
diff --git a/Task/Associative-array-Creation/OCaml/associative-array-creation-4.ocaml b/Task/Associative-array-Creation/OCaml/associative-array-creation-4.ml
similarity index 100%
rename from Task/Associative-array-Creation/OCaml/associative-array-creation-4.ocaml
rename to Task/Associative-array-Creation/OCaml/associative-array-creation-4.ml
diff --git a/Task/Associative-array-Creation/OCaml/associative-array-creation-5.ocaml b/Task/Associative-array-Creation/OCaml/associative-array-creation-5.ml
similarity index 100%
rename from Task/Associative-array-Creation/OCaml/associative-array-creation-5.ocaml
rename to Task/Associative-array-Creation/OCaml/associative-array-creation-5.ml
diff --git a/Task/Associative-array-Creation/OCaml/associative-array-creation-6.ocaml b/Task/Associative-array-Creation/OCaml/associative-array-creation-6.ml
similarity index 100%
rename from Task/Associative-array-Creation/OCaml/associative-array-creation-6.ocaml
rename to Task/Associative-array-Creation/OCaml/associative-array-creation-6.ml
diff --git a/Task/Associative-array-Creation/OCaml/associative-array-creation-7.ocaml b/Task/Associative-array-Creation/OCaml/associative-array-creation-7.ml
similarity index 100%
rename from Task/Associative-array-Creation/OCaml/associative-array-creation-7.ocaml
rename to Task/Associative-array-Creation/OCaml/associative-array-creation-7.ml
diff --git a/Task/Associative-array-Creation/Rust/associative-array-creation.rust b/Task/Associative-array-Creation/Rust/associative-array-creation.rs
similarity index 100%
rename from Task/Associative-array-Creation/Rust/associative-array-creation.rust
rename to Task/Associative-array-Creation/Rust/associative-array-creation.rs
diff --git a/Task/Associative-array-Creation/Scheme/associative-array-creation-1.ss b/Task/Associative-array-Creation/Scheme/associative-array-creation-1.scm
similarity index 100%
rename from Task/Associative-array-Creation/Scheme/associative-array-creation-1.ss
rename to Task/Associative-array-Creation/Scheme/associative-array-creation-1.scm
diff --git a/Task/Associative-array-Creation/Scheme/associative-array-creation-2.ss b/Task/Associative-array-Creation/Scheme/associative-array-creation-2.scm
similarity index 100%
rename from Task/Associative-array-Creation/Scheme/associative-array-creation-2.ss
rename to Task/Associative-array-Creation/Scheme/associative-array-creation-2.scm
diff --git a/Task/Associative-array-Creation/Scheme/associative-array-creation-3.ss b/Task/Associative-array-Creation/Scheme/associative-array-creation-3.scm
similarity index 100%
rename from Task/Associative-array-Creation/Scheme/associative-array-creation-3.ss
rename to Task/Associative-array-Creation/Scheme/associative-array-creation-3.scm
diff --git a/Task/Associative-array-Creation/Scheme/associative-array-creation-4.ss b/Task/Associative-array-Creation/Scheme/associative-array-creation-4.scm
similarity index 100%
rename from Task/Associative-array-Creation/Scheme/associative-array-creation-4.ss
rename to Task/Associative-array-Creation/Scheme/associative-array-creation-4.scm
diff --git a/Task/Associative-array-Iteration/Crystal/associative-array-iteration.crystal b/Task/Associative-array-Iteration/Crystal/associative-array-iteration.cr
similarity index 100%
rename from Task/Associative-array-Iteration/Crystal/associative-array-iteration.crystal
rename to Task/Associative-array-Iteration/Crystal/associative-array-iteration.cr
diff --git a/Task/Associative-array-Iteration/Delphi/associative-array-iteration.delphi b/Task/Associative-array-Iteration/Delphi/associative-array-iteration.pas
similarity index 100%
rename from Task/Associative-array-Iteration/Delphi/associative-array-iteration.delphi
rename to Task/Associative-array-Iteration/Delphi/associative-array-iteration.pas
diff --git a/Task/Associative-array-Iteration/EMal/associative-array-iteration.emal b/Task/Associative-array-Iteration/EMal/associative-array-iteration.emal
index 62144e0c23..8570ed0331 100644
--- a/Task/Associative-array-Iteration/EMal/associative-array-iteration.emal
+++ b/Task/Associative-array-Iteration/EMal/associative-array-iteration.emal
@@ -1,15 +1,11 @@
-Map map = text%text["Italy" => "Rome", "France" => "Paris"]
+Map map ← text%text["Italy" ⇒ "Rome", "France" ⇒ "Paris"]
map.insert("Germany", "Berlin")
-map["Spain"] = "Madrid"
+map["Spain"] ← "Madrid"
writeLine("== pairs ==")
for each Pair pair in map
writeLine(pair)
end
writeLine("== keys ==")
-for each text key in map.keys()
- writeLine(key)
-end
+for each text key in map.keys() do writeLine(key) end
writeLine("== values ==")
-for each text value in map.values()
- writeLine(value)
-end
+map.values().list( %s" (first elem) (last elem))))
+ (println (format "%s -> %s" elem)))
diff --git a/Task/Associative-array-Iteration/NewLISP/associative-array-iteration-2.l b/Task/Associative-array-Iteration/NewLISP/associative-array-iteration-2.l
new file mode 100644
index 0000000000..48b51cdb16
--- /dev/null
+++ b/Task/Associative-array-Iteration/NewLISP/associative-array-iteration-2.l
@@ -0,0 +1,24 @@
+(macro (ainc! Alist Key Value Function (Deflt 0))
+ (local (E-Message K Val Func)
+ (setq K Key)
+ (setq Func Function)
+ (if (true? Func)
+ (setq Val Value)
+ (begin (setq Func +) (setq Val (or Value 1))))
+ (unless
+ (catch
+ (setf (assoc K Alist)
+ (list ($it 0) (Func Val ($it 1))))
+ 'E-Message)
+ (if (starts-with E-Message "ERR: no reference")
+ (setf Alist (cons (list K (Func Val Deflt)) Alist))
+ (throw-error E-Message)))))
+
+(setq alist '())
+(ainc! alist 'b 22)
+(ainc! alist 'b)
+(ainc! alist 'name "Fred" or)
+(ainc! alist 'letters 'h cons '())
+(ainc! alist 'letters 'o cons)
+
+(println alist)
diff --git a/Task/Associative-array-Iteration/NewLISP/associative-array-iteration-3.l b/Task/Associative-array-Iteration/NewLISP/associative-array-iteration-3.l
new file mode 100644
index 0000000000..b8fa557721
--- /dev/null
+++ b/Task/Associative-array-Iteration/NewLISP/associative-array-iteration-3.l
@@ -0,0 +1,2 @@
+(dolist (e alist)
+ (println (format "key: %-9s val: %s" (map string e))))
diff --git a/Task/Associative-array-Iteration/NewLISP/associative-array-iteration-4.l b/Task/Associative-array-Iteration/NewLISP/associative-array-iteration-4.l
new file mode 100644
index 0000000000..b8af45fe31
--- /dev/null
+++ b/Task/Associative-array-Iteration/NewLISP/associative-array-iteration-4.l
@@ -0,0 +1,2 @@
+(dolist (k (map first alist))
+ (println k))
diff --git a/Task/Associative-array-Iteration/NewLISP/associative-array-iteration-5.l b/Task/Associative-array-Iteration/NewLISP/associative-array-iteration-5.l
new file mode 100644
index 0000000000..3232b0bb41
--- /dev/null
+++ b/Task/Associative-array-Iteration/NewLISP/associative-array-iteration-5.l
@@ -0,0 +1,2 @@
+(dolist (v (map last alist))
+ (println v))
diff --git a/Task/Associative-array-Iteration/OCaml/associative-array-iteration-1.ocaml b/Task/Associative-array-Iteration/OCaml/associative-array-iteration-1.ml
similarity index 100%
rename from Task/Associative-array-Iteration/OCaml/associative-array-iteration-1.ocaml
rename to Task/Associative-array-Iteration/OCaml/associative-array-iteration-1.ml
diff --git a/Task/Associative-array-Iteration/OCaml/associative-array-iteration-2.ocaml b/Task/Associative-array-Iteration/OCaml/associative-array-iteration-2.ml
similarity index 100%
rename from Task/Associative-array-Iteration/OCaml/associative-array-iteration-2.ocaml
rename to Task/Associative-array-Iteration/OCaml/associative-array-iteration-2.ml
diff --git a/Task/Associative-array-Iteration/OCaml/associative-array-iteration-3.ocaml b/Task/Associative-array-Iteration/OCaml/associative-array-iteration-3.ml
similarity index 100%
rename from Task/Associative-array-Iteration/OCaml/associative-array-iteration-3.ocaml
rename to Task/Associative-array-Iteration/OCaml/associative-array-iteration-3.ml
diff --git a/Task/Associative-array-Iteration/Rust/associative-array-iteration.rust b/Task/Associative-array-Iteration/Rust/associative-array-iteration.rs
similarity index 100%
rename from Task/Associative-array-Iteration/Rust/associative-array-iteration.rust
rename to Task/Associative-array-Iteration/Rust/associative-array-iteration.rs
diff --git a/Task/Associative-array-Iteration/Scheme/associative-array-iteration-1.ss b/Task/Associative-array-Iteration/Scheme/associative-array-iteration-1.scm
similarity index 100%
rename from Task/Associative-array-Iteration/Scheme/associative-array-iteration-1.ss
rename to Task/Associative-array-Iteration/Scheme/associative-array-iteration-1.scm
diff --git a/Task/Associative-array-Iteration/Scheme/associative-array-iteration-2.ss b/Task/Associative-array-Iteration/Scheme/associative-array-iteration-2.scm
similarity index 100%
rename from Task/Associative-array-Iteration/Scheme/associative-array-iteration-2.ss
rename to Task/Associative-array-Iteration/Scheme/associative-array-iteration-2.scm
diff --git a/Task/Associative-array-Iteration/Scheme/associative-array-iteration-3.ss b/Task/Associative-array-Iteration/Scheme/associative-array-iteration-3.scm
similarity index 100%
rename from Task/Associative-array-Iteration/Scheme/associative-array-iteration-3.ss
rename to Task/Associative-array-Iteration/Scheme/associative-array-iteration-3.scm
diff --git a/Task/Associative-array-Merging/ALGOL-68/associative-array-merging.alg b/Task/Associative-array-Merging/ALGOL-68/associative-array-merging.alg
index df156a0117..e0e4db606f 100644
--- a/Task/Associative-array-Merging/ALGOL-68/associative-array-merging.alg
+++ b/Task/Associative-array-Merging/ALGOL-68/associative-array-merging.alg
@@ -22,31 +22,33 @@ BEGIN
a
END # UPDATE # ;
-# construct the associative arrays for the task #
-REF AARRAY a := INIT LOC AARRAY;
-REF AARRAY b := INIT LOC AARRAY;
-a // "name" := "Rocket Skates";
-a // "price" := 12.75;
-a // "color" := "yellow";
-b // "price" := 15.25;
-b // "color" := "red";
-b // "year" := 1974;
-# merge the arrays #
-REF AARRAY c := INIT LOC AARRAY;
-c UPDATE a UPDATE b;
-# show the merged array #
-REF AAELEMENT e := FIRST c;
-WHILE e ISNT nil element DO
- print( ( key OF e
- , ": "
- , CASE value OF e
- IN (STRING s): s
- , (INT i): whole( i, 0 )
- , (REAL r): fixed( r, -12, 2 )
- OUT "????"
- ESAC
- , newline
- )
- );
- e := NEXT c
-OD
+BEGIN # tests #
+ # construct the associative arrays for the task #
+ REF AARRAY a := INIT LOC AARRAY;
+ REF AARRAY b := INIT LOC AARRAY;
+ a // "name" := "Rocket Skates";
+ a // "price" := 12.75;
+ a // "color" := "yellow";
+ b // "price" := 15.25;
+ b // "color" := "red";
+ b // "year" := 1974;
+ # merge the arrays #
+ REF AARRAY c := INIT LOC AARRAY;
+ c UPDATE a UPDATE b;
+ # show the merged array #
+ REF AAELEMENT e := FIRST c;
+ WHILE e ISNT nil element DO
+ print( ( key OF e
+ , ": "
+ , CASE value OF e
+ IN (STRING s): s
+ , (INT i): whole( i, 0 )
+ , (REAL r): fixed( r, -12, 2 )
+ OUT "????"
+ ESAC
+ , newline
+ )
+ );
+ e := NEXT c
+ OD
+END
diff --git a/Task/Associative-array-Merging/BASIC256/associative-array-merging.basic b/Task/Associative-array-Merging/BASIC256/associative-array-merging.basic
new file mode 100644
index 0000000000..440d267df8
--- /dev/null
+++ b/Task/Associative-array-Merging/BASIC256/associative-array-merging.basic
@@ -0,0 +1,36 @@
+dim original(3, 2)
+original[0, 0] = "name": original[0, 1] = "Rocket Skates"
+original[1, 0] = "price": original[1, 1] = "12.75"
+original[2, 0] = "color": original[2, 1] = "yellow"
+
+dim update(3, 2)
+update[0, 0] = "price": update[0, 1] = "15.25"
+update[1, 0] = "color": update[1, 1] = "red"
+update[2, 0] = "year": update[2, 1] = "1974"
+
+dim merged(6, 2)
+
+for i = 0 to 2
+ merged[i, 0] = update[i, 0]
+ merged[i, 1] = update[i, 1]
+next i
+
+index = 3
+for i = 0 to 2
+ found = False
+ for j = 0 to 2
+ if original[i, 0] = update[j, 0] then
+ found = True
+ exit for
+ end if
+ next j
+ if not found then
+ merged[index, 0] = original[i, 0]
+ merged[index, 1] = original[i, 1]
+ index += 1
+ end if
+next i
+
+for i = 0 to index - 1
+ print "key: "; merged[i, 0]; ", value: "; merged[i, 1]
+next i
diff --git a/Task/Associative-array-Merging/Chipmunk-Basic/associative-array-merging.basic b/Task/Associative-array-Merging/Chipmunk-Basic/associative-array-merging.basic
new file mode 100644
index 0000000000..ad2e5163aa
--- /dev/null
+++ b/Task/Associative-array-Merging/Chipmunk-Basic/associative-array-merging.basic
@@ -0,0 +1,39 @@
+100 cls
+110 dim original$(3,2)
+120 original$(0,0) = "name"
+130 original$(0,1) = "Rocket Skates"
+140 original$(1,0) = "price"
+150 original$(1,1) = "12.75"
+160 original$(2,0) = "color"
+170 original$(2,1) = "yellow"
+180 dim update$(3,2)
+190 update$(0,0) = "price"
+200 update$(0,1) = "15.25"
+210 update$(1,0) = "color"
+220 update$(1,1) = "red"
+230 update$(2,0) = "year"
+240 update$(2,1) = "1974"
+250 dim merged$(6,2)
+270 for i = 0 to 2
+280 merged$(i,0) = update$(i,0)
+290 merged$(i,1) = update$(i,1)
+300 next i
+320 index = 3
+330 for i = 0 to 2
+340 found = 0
+350 for j = 0 to 2
+360 if original$(i,0) = update$(j,0) then
+370 found = 1
+380 goto 400
+390 endif
+400 next j
+410 if found = 0 then
+420 merged$(index,0) = original$(i,0)
+430 merged$(index,1) = original$(i,1)
+440 index = index+1
+450 endif
+460 next i
+480 for i = 0 to index-1
+490 print "key: ";merged$(i,0);", value: ";merged$(i,1)
+500 next i
+510 end
diff --git a/Task/Associative-array-Merging/Crystal/associative-array-merging.crystal b/Task/Associative-array-Merging/Crystal/associative-array-merging.cr
similarity index 100%
rename from Task/Associative-array-Merging/Crystal/associative-array-merging.crystal
rename to Task/Associative-array-Merging/Crystal/associative-array-merging.cr
diff --git a/Task/Associative-array-Merging/Delphi/associative-array-merging.delphi b/Task/Associative-array-Merging/Delphi/associative-array-merging.pas
similarity index 100%
rename from Task/Associative-array-Merging/Delphi/associative-array-merging.delphi
rename to Task/Associative-array-Merging/Delphi/associative-array-merging.pas
diff --git a/Task/Associative-array-Merging/EasyLang/associative-array-merging.easy b/Task/Associative-array-Merging/EasyLang/associative-array-merging.easy
new file mode 100644
index 0000000000..7c929e84fc
--- /dev/null
+++ b/Task/Associative-array-Merging/EasyLang/associative-array-merging.easy
@@ -0,0 +1,17 @@
+base$[][] = [ [ "name" "Rocket Skates" ] [ "price" 12.75 ] [ "color" "yellow" ] ]
+update$[][] = [ [ "price" 15.25 ] [ "color" "red" ] [ "year" 1974 ] ]
+proc update . a$[][] b$[][] .
+ for b to len b$[][]
+ for a to len a$[][]
+ if a$[a][1] = b$[b][1]
+ a$[a][2] = b$[b][2]
+ break 1
+ .
+ .
+ if a > len a$[][]
+ a$[][] &= b$[b][]
+ .
+ .
+.
+update base$[][] update$[][]
+print base$[][]
diff --git a/Task/Associative-array-Merging/Elixir/associative-array-merging-1.elixir b/Task/Associative-array-Merging/Elixir/associative-array-merging-1.ex
similarity index 100%
rename from Task/Associative-array-Merging/Elixir/associative-array-merging-1.elixir
rename to Task/Associative-array-Merging/Elixir/associative-array-merging-1.ex
diff --git a/Task/Associative-array-Merging/Elixir/associative-array-merging-2.elixir b/Task/Associative-array-Merging/Elixir/associative-array-merging-2.ex
similarity index 100%
rename from Task/Associative-array-Merging/Elixir/associative-array-merging-2.elixir
rename to Task/Associative-array-Merging/Elixir/associative-array-merging-2.ex
diff --git a/Task/Associative-array-Merging/FreeBASIC/associative-array-merging.basic b/Task/Associative-array-Merging/FreeBASIC/associative-array-merging.basic
new file mode 100644
index 0000000000..1b6c9441cf
--- /dev/null
+++ b/Task/Associative-array-Merging/FreeBASIC/associative-array-merging.basic
@@ -0,0 +1,47 @@
+Type Dictionary
+ As String key
+ As String value
+End Type
+
+Sub merge(original() As Dictionary, update() As Dictionary, result() As Dictionary)
+ Dim As Integer i, j, index
+ Dim As Boolean found
+
+ For i = 0 To Ubound(update)
+ result(i) = update(i)
+ Next i
+
+ index = i
+ For i = 0 To Ubound(original)
+ found = False
+ For j = 0 To Ubound(update)
+ If original(i).key = update(j).key Then
+ found = True
+ Exit For
+ End If
+ Next j
+ If Not found Then
+ result(index) = original(i)
+ index += 1
+ End If
+ Next i
+End Sub
+
+Dim As Dictionary original(2)
+original(0).key = "name": original(0).value = "Rocket Skates"
+original(1).key = "price": original(1).value = "12.75"
+original(2).key = "color": original(2).value = "yellow"
+
+Dim As Dictionary update(2)
+update(0).key = "price": update(0).value = "15.25"
+update(1).key = "color": update(1).value = "red"
+update(2).key = "year": update(2).value = "1974"
+
+Dim As Dictionary merged(Ubound(update) + Ubound(original) - 1)
+merge(original(), update(), merged())
+
+For i As Integer = 0 To Ubound(merged)
+ Print "key: "; merged(i).key; ", value: "; merged(i).value
+Next i
+
+Sleep
diff --git a/Task/Associative-array-Merging/FutureBasic/associative-array-merging.basic b/Task/Associative-array-Merging/FutureBasic/associative-array-merging-1.basic
similarity index 100%
rename from Task/Associative-array-Merging/FutureBasic/associative-array-merging.basic
rename to Task/Associative-array-Merging/FutureBasic/associative-array-merging-1.basic
diff --git a/Task/Associative-array-Merging/FutureBasic/associative-array-merging-2.basic b/Task/Associative-array-Merging/FutureBasic/associative-array-merging-2.basic
new file mode 100644
index 0000000000..f70243fc65
--- /dev/null
+++ b/Task/Associative-array-Merging/FutureBasic/associative-array-merging-2.basic
@@ -0,0 +1,10 @@
+void local fn Doit
+ CFDictionaryRef base = @{ @"name":@"Rocket Skates", @"price":@12.75 }
+ CFDictionaryRef update = @{ @"price":@15.25, @"color":@"red", @"year":@1974 }
+ CFDictionaryRef result = concat( base, update )
+ print result
+end fn
+
+fn DoIt
+
+HandleEvents
diff --git a/Task/Associative-array-Merging/GW-BASIC/associative-array-merging.basic b/Task/Associative-array-Merging/GW-BASIC/associative-array-merging.basic
new file mode 100644
index 0000000000..40bdac5c82
--- /dev/null
+++ b/Task/Associative-array-Merging/GW-BASIC/associative-array-merging.basic
@@ -0,0 +1,32 @@
+100 CLS
+110 DIM O$(3,2)
+120 O$(0,0) = "name"
+130 O$(0,1) = "Rocket Skates"
+140 O$(1,0) = "price"
+150 O$(1,1) = "12.75"
+160 O$(2,0) = "color"
+170 O$(2,1) = "yellow"
+180 DIM U$(3,2)
+190 U$(0,0) = "price"
+200 U$(0,1) = "15.25"
+210 U$(1,0) = "color"
+220 U$(1,1) = "red"
+230 U$(2,0) = "year"
+240 U$(2,1) = "1974"
+250 DIM M$(6,2)
+270 FOR I = 0 TO 2
+280 M$(I,0) = U$(I,0)
+290 M$(I,1) = U$(I,1)
+300 NEXT I
+320 INDEX = 3
+330 FOR I = 0 TO 2
+340 FOUND = 0
+350 FOR J = 0 TO 2
+360 IF O$(I,0) = U$(J,0) THEN FOUND = 1 : GOTO 370
+370 NEXT J
+380 IF FOUND = 0 THEN M$(INDEX,0) = O$(I,0) : M$(INDEX,1) = O$(I,1) : INDEX = INDEX+1
+390 NEXT I
+410 FOR I = 0 TO INDEX-1
+420 PRINT "key: ";M$(I,0);", value: ";M$(I,1)
+430 NEXT I
+440 END
diff --git a/Task/Associative-array-Merging/Kotlin/associative-array-merging.kotlin b/Task/Associative-array-Merging/Kotlin/associative-array-merging.kts
similarity index 100%
rename from Task/Associative-array-Merging/Kotlin/associative-array-merging.kotlin
rename to Task/Associative-array-Merging/Kotlin/associative-array-merging.kts
diff --git a/Task/Associative-array-Merging/NewLISP/associative-array-merging-1.l b/Task/Associative-array-Merging/NewLISP/associative-array-merging-1.l
new file mode 100644
index 0000000000..65b0f0907c
--- /dev/null
+++ b/Task/Associative-array-Merging/NewLISP/associative-array-merging-1.l
@@ -0,0 +1,27 @@
+(setq data1 '("name" "Rocket Skates"
+ "price" 12.75
+ "color" "yellow"))
+
+(setq data2 '("price" 15.25
+ "color" "red"
+ "year" 1974))
+
+(define (list->alist lst) (explode lst 2))
+
+(macro (aset! Alist Key Val)
+ (local (E-Message)
+ (unless
+ (catch
+ (setf (assoc Key Alist) (list ($it 0) Val))
+ 'E-Message)
+ (setf Alist (cons (list Key Val) Alist)))))
+
+(define (foo list1 list2)
+ (let (out (list->alist list1))
+ (dolist (a (list->alist list2))
+ (aset! out (a 0) (string (a 1))))
+ (println out "\n")
+ (dolist (a out)
+ (println (format "%-5s %s" a)))))
+
+(foo data1 data2)
diff --git a/Task/Associative-array-Merging/NewLISP/associative-array-merging-2.l b/Task/Associative-array-Merging/NewLISP/associative-array-merging-2.l
new file mode 100644
index 0000000000..4d42efa689
--- /dev/null
+++ b/Task/Associative-array-Merging/NewLISP/associative-array-merging-2.l
@@ -0,0 +1,42 @@
+(setq data1 '("name" "Rocket Skates"
+ "price" 12.75
+ "color" "yellow"))
+
+(setq data2 '("price" 3.20
+ "color" "red"
+ "year" 1974))
+
+(macro (ainc! Alist Key Val Func)
+ (local (E-Message)
+ (unless Func (set 'Func +))
+ (unless
+ (catch
+ (setf (assoc Key Alist)
+ (list ($it 0) (Func (or Val 1) ($it 1))))
+ 'E-Message)
+ (setf Alist (cons (list Key (or Val 1)) Alist)))))
+
+(define (list->alist xs)
+ (collect
+ (and (true? xs)
+ (if (= "color" (xs 0))
+ (list (pop xs) (list (pop xs)))
+ (list (pop xs) (pop xs))))))
+
+(define (bu) (bind (apply unify $args)))
+
+(define (foo list1 list2 , K V)
+ (let (out (list->alist list1))
+ (dolist (a (list->alist list2))
+ (bu '(K V) a)
+ (case K
+ ("price" (ainc! out K V add))
+ ("color" (ainc! out K V append))
+ ;; ainc! can even be used to make a new entry or replace old value.
+ (true (ainc! out K V or))))
+ (println out "\n")
+ (dolist (a out)
+ (bu '(K V) a)
+ (println (format "%-5s " K) V))))
+
+(foo data1 data2)
diff --git a/Task/Associative-array-Merging/Nu/associative-array-merging.nu b/Task/Associative-array-Merging/Nu/associative-array-merging.nu
new file mode 100644
index 0000000000..7ecd59a562
--- /dev/null
+++ b/Task/Associative-array-Merging/Nu/associative-array-merging.nu
@@ -0,0 +1,4 @@
+const base = {name: 'Rocket Skates' price: 12.75 color: 'yellow'}
+const update = {price: 15.25 color: 'red' year: 1974}
+
+$base | merge $update
diff --git a/Task/Associative-array-Merging/OCaml/associative-array-merging-1.ocaml b/Task/Associative-array-Merging/OCaml/associative-array-merging-1.ml
similarity index 100%
rename from Task/Associative-array-Merging/OCaml/associative-array-merging-1.ocaml
rename to Task/Associative-array-Merging/OCaml/associative-array-merging-1.ml
diff --git a/Task/Associative-array-Merging/OCaml/associative-array-merging-2.ocaml b/Task/Associative-array-Merging/OCaml/associative-array-merging-2.ml
similarity index 100%
rename from Task/Associative-array-Merging/OCaml/associative-array-merging-2.ocaml
rename to Task/Associative-array-Merging/OCaml/associative-array-merging-2.ml
diff --git a/Task/Associative-array-Merging/OCaml/associative-array-merging-3.ocaml b/Task/Associative-array-Merging/OCaml/associative-array-merging-3.ml
similarity index 100%
rename from Task/Associative-array-Merging/OCaml/associative-array-merging-3.ocaml
rename to Task/Associative-array-Merging/OCaml/associative-array-merging-3.ml
diff --git a/Task/Associative-array-Merging/OCaml/associative-array-merging-4.ocaml b/Task/Associative-array-Merging/OCaml/associative-array-merging-4.ml
similarity index 100%
rename from Task/Associative-array-Merging/OCaml/associative-array-merging-4.ocaml
rename to Task/Associative-array-Merging/OCaml/associative-array-merging-4.ml
diff --git a/Task/Associative-array-Merging/PascalABC.NET/associative-array-merging.pas b/Task/Associative-array-Merging/PascalABC.NET/associative-array-merging.pas
new file mode 100644
index 0000000000..0cf515f0a5
--- /dev/null
+++ b/Task/Associative-array-Merging/PascalABC.NET/associative-array-merging.pas
@@ -0,0 +1,14 @@
+begin
+ var base := Dict(('name','Rocket Skates'),
+ ('price','12.75'),
+ ('color','yellow'));
+
+ var update := Dict(('price','15.25'),
+ ('color','red'),
+ ('year','1974'));
+
+ var merged := new Dictionary;
+ foreach var kv in base.Concat(update) do
+ merged[kv.Key] := kv.Value;
+ merged.PrintLines
+end.
diff --git a/Task/Associative-array-Merging/QBasic/associative-array-merging.basic b/Task/Associative-array-Merging/QBasic/associative-array-merging.basic
new file mode 100644
index 0000000000..ff49040064
--- /dev/null
+++ b/Task/Associative-array-Merging/QBasic/associative-array-merging.basic
@@ -0,0 +1,47 @@
+DECLARE SUB merge (original() AS ANY, update() AS ANY, result() AS ANY)
+
+TYPE Dictionary
+ keyy AS STRING * 5
+ value AS STRING * 13
+END TYPE
+
+DIM original(2) AS Dictionary
+original(0).keyy = "name": original(0).value = "Rocket Skates"
+original(1).keyy = "price": original(1).value = "12.75"
+original(2).keyy = "color": original(2).value = "yellow"
+
+DIM update(2) AS Dictionary
+update(0).keyy = "price": update(0).value = "15.25"
+update(1).keyy = "color": update(1).value = "red"
+update(2).keyy = "year": update(2).value = "1974"
+
+DIM merged(UBOUND(update) + UBOUND(original) - 1) AS Dictionary
+CALL merge(original(), update(), merged())
+
+FOR i = 0 TO UBOUND(merged)
+ PRINT "keyy: "; merged(i).keyy; ", value: "; merged(i).value
+NEXT i
+END
+
+SUB merge (original() AS Dictionary, update() AS Dictionary, result() AS Dictionary)
+ DIM i AS INTEGER, j AS INTEGER, index AS INTEGER, found AS INTEGER
+
+ FOR i = 0 TO UBOUND(update)
+ result(i) = update(i)
+ NEXT i
+
+ index = i
+ FOR i = 0 TO UBOUND(original)
+ found = 0
+ FOR j = 0 TO UBOUND(update)
+ IF original(i).keyy = update(j).keyy THEN
+ found = 1
+ EXIT FOR
+ END IF
+ NEXT j
+ IF found = 0 THEN
+ result(index) = original(i)
+ index = index + 1
+ END IF
+ NEXT i
+END SUB
diff --git a/Task/Associative-array-Merging/Rust/associative-array-merging.rust b/Task/Associative-array-Merging/Rust/associative-array-merging.rs
similarity index 100%
rename from Task/Associative-array-Merging/Rust/associative-array-merging.rust
rename to Task/Associative-array-Merging/Rust/associative-array-merging.rs
diff --git a/Task/Associative-array-Merging/Scheme/associative-array-merging-1.ss b/Task/Associative-array-Merging/Scheme/associative-array-merging-1.scm
similarity index 100%
rename from Task/Associative-array-Merging/Scheme/associative-array-merging-1.ss
rename to Task/Associative-array-Merging/Scheme/associative-array-merging-1.scm
diff --git a/Task/Associative-array-Merging/Scheme/associative-array-merging-2.ss b/Task/Associative-array-Merging/Scheme/associative-array-merging-2.scm
similarity index 100%
rename from Task/Associative-array-Merging/Scheme/associative-array-merging-2.ss
rename to Task/Associative-array-Merging/Scheme/associative-array-merging-2.scm
diff --git a/Task/Associative-array-Merging/XBasic/associative-array-merging.basic b/Task/Associative-array-Merging/XBasic/associative-array-merging.basic
new file mode 100644
index 0000000000..a4c030f141
--- /dev/null
+++ b/Task/Associative-array-Merging/XBasic/associative-array-merging.basic
@@ -0,0 +1,44 @@
+PROGRAM "Associative array/Merging"
+VERSION "0.0000"
+
+DECLARE FUNCTION Entry ()
+
+FUNCTION Entry ()
+ DIM original$[3, 2]
+ original$[0, 0] = "name": original$[0, 1] = "Rocket Skates"
+ original$[1, 0] = "price": original$[1, 1] = "12.75"
+ original$[2, 0] = "color": original$[2, 1] = "yellow"
+
+ DIM update$[3, 2]
+ update$[0, 0] = "price": update$[0, 1] = "15.25"
+ update$[1, 0] = "color": update$[1, 1] = "red"
+ update$[2, 0] = "year": update$[2, 1] = "1974"
+
+ DIM merged$[6, 2]
+
+ FOR i = 0 TO 2
+ merged$[i, 0] = update$[i, 0]
+ merged$[i, 1] = update$[i, 1]
+ NEXT i
+
+ index = 3
+ FOR i = 0 TO 2
+ found = 0
+ FOR j = 0 TO 2
+ IF original$[i, 0] = update$[j, 0] THEN
+ found = 1
+ EXIT FOR
+ END IF
+ NEXT j
+ IF found = 0 THEN
+ merged$[index, 0] = original$[i, 0]
+ merged$[index, 1] = original$[i, 1]
+ INC index
+ END IF
+ NEXT i
+
+ FOR i = 0 TO index - 1
+ PRINT "key: "; merged$[i, 0]; ", value: "; merged$[i, 1]
+ NEXT i
+END FUNCTION
+END PROGRAM
diff --git a/Task/Associative-array-Merging/Yabasic/associative-array-merging.basic b/Task/Associative-array-Merging/Yabasic/associative-array-merging.basic
new file mode 100644
index 0000000000..a1516e0a06
--- /dev/null
+++ b/Task/Associative-array-Merging/Yabasic/associative-array-merging.basic
@@ -0,0 +1,42 @@
+dim original$(3, 2)
+original$(0, 0) = "name"
+original$(0, 1) = "Rocket Skates"
+original$(1, 0) = "price"
+original$(1, 1) = "12.75"
+original$(2, 0) = "color"
+original$(2, 1) = "yellow"
+
+dim update$(3, 2)
+update$(0, 0) = "price"
+update$(0, 1) = "15.25"
+update$(1, 0) = "color"
+update$(1, 1) = "red"
+update$(2, 0) = "year"
+update$(2, 1) = "1974"
+
+dim merged$(6, 2)
+
+for i = 0 to 2
+ merged$(i, 0) = update$(i, 0)
+ merged$(i, 1) = update$(i, 1)
+next i
+
+index = 3
+for i = 0 to 2
+ found = 0
+ for j = 0 to 2
+ if original$(i, 0) = update$(j, 0) then
+ found = 1
+ break
+ end if
+ next j
+ if found = 0 then
+ merged$(index, 0) = original$(i, 0)
+ merged$(index, 1) = original$(i, 1)
+ index = index + 1
+ end if
+next i
+
+for i = 0 to index - 1
+ print "key: ", merged$(i, 0), ", value: ", merged$(i, 1)
+next i
diff --git a/Task/Atomic-updates/Euphoria/atomic-updates.euphoria b/Task/Atomic-updates/Euphoria/atomic-updates.ex
similarity index 100%
rename from Task/Atomic-updates/Euphoria/atomic-updates.euphoria
rename to Task/Atomic-updates/Euphoria/atomic-updates.ex
diff --git a/Task/Atomic-updates/Julia/atomic-updates.julia b/Task/Atomic-updates/Julia/atomic-updates.jl
similarity index 100%
rename from Task/Atomic-updates/Julia/atomic-updates.julia
rename to Task/Atomic-updates/Julia/atomic-updates.jl
diff --git a/Task/Atomic-updates/Kotlin/atomic-updates.kotlin b/Task/Atomic-updates/Kotlin/atomic-updates.kts
similarity index 100%
rename from Task/Atomic-updates/Kotlin/atomic-updates.kotlin
rename to Task/Atomic-updates/Kotlin/atomic-updates.kts
diff --git a/Task/Atomic-updates/Rust/atomic-updates.rust b/Task/Atomic-updates/Rust/atomic-updates.rs
similarity index 100%
rename from Task/Atomic-updates/Rust/atomic-updates.rust
rename to Task/Atomic-updates/Rust/atomic-updates.rs
diff --git a/Task/Attractive-numbers/Julia/attractive-numbers.julia b/Task/Attractive-numbers/Julia/attractive-numbers.jl
similarity index 100%
rename from Task/Attractive-numbers/Julia/attractive-numbers.julia
rename to Task/Attractive-numbers/Julia/attractive-numbers.jl
diff --git a/Task/Attractive-numbers/Kotlin/attractive-numbers.kotlin b/Task/Attractive-numbers/Kotlin/attractive-numbers.kts
similarity index 100%
rename from Task/Attractive-numbers/Kotlin/attractive-numbers.kotlin
rename to Task/Attractive-numbers/Kotlin/attractive-numbers.kts
diff --git a/Task/Attractive-numbers/Odin/attractive-numbers.odin b/Task/Attractive-numbers/Odin/attractive-numbers.odin
index c151f376a3..a4ab4447b1 100644
--- a/Task/Attractive-numbers/Odin/attractive-numbers.odin
+++ b/Task/Attractive-numbers/Odin/attractive-numbers.odin
@@ -1,4 +1,7 @@
+package main
+
import "core:fmt"
+
main :: proc() {
const_max :: 120
fmt.println("\nAttractive numbers up to and including", const_max, "are: ")
diff --git a/Task/Attractive-numbers/Rust/attractive-numbers.rust b/Task/Attractive-numbers/Rust/attractive-numbers.rs
similarity index 100%
rename from Task/Attractive-numbers/Rust/attractive-numbers.rust
rename to Task/Attractive-numbers/Rust/attractive-numbers.rs
diff --git a/Task/Average-loop-length/Delphi/average-loop-length.delphi b/Task/Average-loop-length/Delphi/average-loop-length.pas
similarity index 100%
rename from Task/Average-loop-length/Delphi/average-loop-length.delphi
rename to Task/Average-loop-length/Delphi/average-loop-length.pas
diff --git a/Task/Average-loop-length/EasyLang/average-loop-length.easy b/Task/Average-loop-length/EasyLang/average-loop-length.easy
index 8440cfd706..664aba7a05 100644
--- a/Task/Average-loop-length/EasyLang/average-loop-length.easy
+++ b/Task/Average-loop-length/EasyLang/average-loop-length.easy
@@ -2,7 +2,7 @@ func average n reps .
for r to reps
f[] = [ ]
for i to n
- f[] &= randint n
+ f[] &= random n
.
seen[] = [ ]
len seen[] n
diff --git a/Task/Average-loop-length/Elixir/average-loop-length.elixir b/Task/Average-loop-length/Elixir/average-loop-length.ex
similarity index 100%
rename from Task/Average-loop-length/Elixir/average-loop-length.elixir
rename to Task/Average-loop-length/Elixir/average-loop-length.ex
diff --git a/Task/Average-loop-length/Julia/average-loop-length.julia b/Task/Average-loop-length/Julia/average-loop-length.jl
similarity index 100%
rename from Task/Average-loop-length/Julia/average-loop-length.julia
rename to Task/Average-loop-length/Julia/average-loop-length.jl
diff --git a/Task/Average-loop-length/Kotlin/average-loop-length.kotlin b/Task/Average-loop-length/Kotlin/average-loop-length.kts
similarity index 100%
rename from Task/Average-loop-length/Kotlin/average-loop-length.kotlin
rename to Task/Average-loop-length/Kotlin/average-loop-length.kts
diff --git a/Task/Average-loop-length/Rust/average-loop-length.rust b/Task/Average-loop-length/Rust/average-loop-length.rs
similarity index 100%
rename from Task/Average-loop-length/Rust/average-loop-length.rust
rename to Task/Average-loop-length/Rust/average-loop-length.rs
diff --git a/Task/Average-loop-length/Scheme/average-loop-length.ss b/Task/Average-loop-length/Scheme/average-loop-length.scm
similarity index 100%
rename from Task/Average-loop-length/Scheme/average-loop-length.ss
rename to Task/Average-loop-length/Scheme/average-loop-length.scm
diff --git a/Task/Average-loop-length/XPL0/average-loop-length.xpl0 b/Task/Average-loop-length/XPL0/average-loop-length.xpl0
new file mode 100644
index 0000000000..d977af9e25
--- /dev/null
+++ b/Task/Average-loop-length/XPL0/average-loop-length.xpl0
@@ -0,0 +1,60 @@
+include xpllib; \for Print
+def MAX_N = 20;
+def TIMES = 1000000;
+
+func real Factorial_(N);
+int N;
+real F;
+int I;
+[F:= 1.;
+for I:= 1 to N do F:= F * float(I);
+return F;
+];
+
+func real Expected(N);
+int N;
+real Sum;
+int I;
+[Sum:= 0.;
+for I:= 1 to N do
+ Sum:= Sum + Factorial_(N) / Pow(float(N), float(I)) / Factorial_(N-I);
+return Sum;
+];
+
+func RandInt(N);
+int N;
+int R, RMax;
+def RAND_MAX = -1>>1;
+[RMax:= RAND_MAX / N * N;
+repeat R:= Ran(RAND_MAX);
+until R < RMax;
+return R / (RAND_MAX / N);
+];
+
+func Test(N, Times);
+int N, Times;
+int I, Count, X, Bits;
+[Count:= 0;
+for I:= 0 to Times-1 do
+ [X:= 1; Bits:= 0;
+ while (Bits & X) = 0 do
+ [Count:= Count+1;
+ Bits:= Bits ! X;
+ X:= 1 << RandInt(N);
+ ];
+ ];
+return Count;
+];
+
+int N, Cnt;
+real Avg, Theory, Diff;
+[\\srand(time(0)); random seeding is automatically done
+Print(" N\tAvg\tExp.\tDiff\n-------------------------------\n");
+for N:= 1 to MAX_N do
+ [Cnt:= Test(N, TIMES);
+ Avg:= float(Cnt) / float(TIMES);
+ Theory:= Expected(N);
+ Diff:= (Avg / Theory - 1.) * 100.;
+ Print("%2d %3.4f %3.4f %2.3f%%\n", N, Avg, Theory, Diff);
+ ];
+]
diff --git a/Task/Average-loop-length/YAMLScript/average-loop-length.ys b/Task/Average-loop-length/YAMLScript/average-loop-length.ys
new file mode 100644
index 0000000000..afb2ab3f81
--- /dev/null
+++ b/Task/Average-loop-length/YAMLScript/average-loop-length.ys
@@ -0,0 +1,41 @@
+!yamlscript/v0
+
+# Use *' (vs. *) to allow arbitrary length arithmetic:
+mul =: value("*'")
+
+# Number of random times to test each n:
+TIMES =: 1000000
+
+defn main(max=20):
+ say: "\tAvg\tExp\tDiff"
+
+ doseq n (1 .. max):
+ anal =: analytical(n):F
+ avg =: avg-cycle-length(n TIMES):F
+ diff =: abs(100 * (1 - (avg / anal)))
+ say:
+ format "%3d\t%.4f\t%.4f\t%.2f%%": n avg anal diff
+
+defn factorial(n):
+ :: n!
+ range(1 n.++): .mul(*)
+
+defn analytical(n):
+ :: Analytical computation
+ 1 .. n:
+ .map(\(factorial(n) / pow(n _) / factorial(n - _)))
+ .sum()
+
+defn single-test-cycle-length(n):
+ :: Single random test of cycle length
+ loop count 0, bits 0, x 1:
+ if bit-and(x bits) == 0:
+ recur: count.++ bit-or(bits x) bit-shift-left(1 rand-int(n))
+ else: count
+
+defn avg-cycle-length(n times):
+ :: Average results of single tests of cycle lengths
+ div _ times:
+ sum:
+ for i (range times):
+ single-test-cycle-length: n
diff --git a/Task/Averages-Arithmetic-mean/00-META.yaml b/Task/Averages-Arithmetic-mean/00-META.yaml
index ccad93d436..784e6c9e3b 100644
--- a/Task/Averages-Arithmetic-mean/00-META.yaml
+++ b/Task/Averages-Arithmetic-mean/00-META.yaml
@@ -1,3 +1,6 @@
---
+category:
+- Arithmetic
+- Simple
from: http://rosettacode.org/wiki/Averages/Arithmetic_mean
note: Probability and statistics
diff --git a/Task/Averages-Arithmetic-mean/Crystal/averages-arithmetic-mean.crystal b/Task/Averages-Arithmetic-mean/Crystal/averages-arithmetic-mean.cr
similarity index 100%
rename from Task/Averages-Arithmetic-mean/Crystal/averages-arithmetic-mean.crystal
rename to Task/Averages-Arithmetic-mean/Crystal/averages-arithmetic-mean.cr
diff --git a/Task/Averages-Arithmetic-mean/Delphi/averages-arithmetic-mean.delphi b/Task/Averages-Arithmetic-mean/Delphi/averages-arithmetic-mean.pas
similarity index 100%
rename from Task/Averages-Arithmetic-mean/Delphi/averages-arithmetic-mean.delphi
rename to Task/Averages-Arithmetic-mean/Delphi/averages-arithmetic-mean.pas
diff --git a/Task/Averages-Arithmetic-mean/EMal/averages-arithmetic-mean.emal b/Task/Averages-Arithmetic-mean/EMal/averages-arithmetic-mean.emal
index 0a8ba0807f..d58912aaa1 100644
--- a/Task/Averages-Arithmetic-mean/EMal/averages-arithmetic-mean.emal
+++ b/Task/Averages-Arithmetic-mean/EMal/averages-arithmetic-mean.emal
@@ -1,11 +1,6 @@
-fun mean = real by some real values
- real sum
- int count
- for each real value in values
- sum += value
- ++count
- end
- return when(count == 0, 0.0, sum / count)
-end
+fun mean ← UPB a THEN []INT() # no data #
ELSE # have data #
[ LWB a : UPB a ]INT sorted data := a;
- QUICKSORT sorted data FROMELEMENT LWB sorted data TOELEMENT UPB sorted data;
+ QUICKSORT sorted data;
INT distinct count = BEGIN # count the number of distinct values #
INT count := 1;
INT value := sorted data[ LWB sorted data ];
@@ -58,6 +59,5 @@ BEGIN # find the mode (most frequent value) of a set of items #
SHOW MODEOF []INT( 7, 13, 5, 13, 7, 2, 7, 10, 13 ) ;print( ( newline ) );
SHOW MODEOF []INT( 5 ) ;print( ( newline ) );
# additional test case #
- SHOW MODEOF []INT( 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9 ) ;print( ( newline )
-
+ SHOW MODEOF []INT( 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9 ) ;print( ( newline ) )
END
diff --git a/Task/Averages-Mode/Delphi/averages-mode.delphi b/Task/Averages-Mode/Delphi/averages-mode.pas
similarity index 100%
rename from Task/Averages-Mode/Delphi/averages-mode.delphi
rename to Task/Averages-Mode/Delphi/averages-mode.pas
diff --git a/Task/Averages-Mode/Elixir/averages-mode.elixir b/Task/Averages-Mode/Elixir/averages-mode.ex
similarity index 100%
rename from Task/Averages-Mode/Elixir/averages-mode.elixir
rename to Task/Averages-Mode/Elixir/averages-mode.ex
diff --git a/Task/Averages-Mode/Euphoria/averages-mode.euphoria b/Task/Averages-Mode/Euphoria/averages-mode.ex
similarity index 100%
rename from Task/Averages-Mode/Euphoria/averages-mode.euphoria
rename to Task/Averages-Mode/Euphoria/averages-mode.ex
diff --git a/Task/Averages-Mode/Julia/averages-mode.julia b/Task/Averages-Mode/Julia/averages-mode.jl
similarity index 100%
rename from Task/Averages-Mode/Julia/averages-mode.julia
rename to Task/Averages-Mode/Julia/averages-mode.jl
diff --git a/Task/Averages-Mode/Kotlin/averages-mode.kotlin b/Task/Averages-Mode/Kotlin/averages-mode.kts
similarity index 100%
rename from Task/Averages-Mode/Kotlin/averages-mode.kotlin
rename to Task/Averages-Mode/Kotlin/averages-mode.kts
diff --git a/Task/Averages-Mode/Nu/averages-mode.nu b/Task/Averages-Mode/Nu/averages-mode.nu
new file mode 100644
index 0000000000..57c4ba0219
--- /dev/null
+++ b/Task/Averages-Mode/Nu/averages-mode.nu
@@ -0,0 +1 @@
+[6 7 9 5 9 8 7] | math mode | grid
diff --git a/Task/Averages-Mode/OCaml/averages-mode.ocaml b/Task/Averages-Mode/OCaml/averages-mode.ml
similarity index 100%
rename from Task/Averages-Mode/OCaml/averages-mode.ocaml
rename to Task/Averages-Mode/OCaml/averages-mode.ml
diff --git a/Task/Averages-Mode/PascalABC.NET/averages-mode.pas b/Task/Averages-Mode/PascalABC.NET/averages-mode.pas
new file mode 100644
index 0000000000..c1ed649d79
--- /dev/null
+++ b/Task/Averages-Mode/PascalABC.NET/averages-mode.pas
@@ -0,0 +1,15 @@
+##
+function modes(s: sequence of T): sequence of T;
+begin
+ var count := s.EachCount;
+ var best := count.Values.Max;
+ result := new List;
+ foreach var k in count do
+ if k.value = best then result := result + k.key;
+end;
+
+modes(|1, 3, 6, 6, 6, 6, 7, 7, 12, 12, 17|).Println;
+modes(|1, 1, 2, 4, 4|).Println;
+modes('sdsvdvddffffs').Println;
+var a := new object[] (1, 'blue', 2, 7.5, 5, 'green', 'red', 5, 2, 'blue', 'white');
+modes(a).Println;
diff --git a/Task/Averages-Mode/Rust/averages-mode.rust b/Task/Averages-Mode/Rust/averages-mode.rs
similarity index 100%
rename from Task/Averages-Mode/Rust/averages-mode.rust
rename to Task/Averages-Mode/Rust/averages-mode.rs
diff --git a/Task/Averages-Mode/Scheme/averages-mode.ss b/Task/Averages-Mode/Scheme/averages-mode.scm
similarity index 100%
rename from Task/Averages-Mode/Scheme/averages-mode.ss
rename to Task/Averages-Mode/Scheme/averages-mode.scm
diff --git a/Task/Averages-Pythagorean-means/Delphi/averages-pythagorean-means.delphi b/Task/Averages-Pythagorean-means/Delphi/averages-pythagorean-means.pas
similarity index 100%
rename from Task/Averages-Pythagorean-means/Delphi/averages-pythagorean-means.delphi
rename to Task/Averages-Pythagorean-means/Delphi/averages-pythagorean-means.pas
diff --git a/Task/Averages-Pythagorean-means/Elixir/averages-pythagorean-means.elixir b/Task/Averages-Pythagorean-means/Elixir/averages-pythagorean-means.ex
similarity index 100%
rename from Task/Averages-Pythagorean-means/Elixir/averages-pythagorean-means.elixir
rename to Task/Averages-Pythagorean-means/Elixir/averages-pythagorean-means.ex
diff --git a/Task/Averages-Pythagorean-means/Euphoria/averages-pythagorean-means.euphoria b/Task/Averages-Pythagorean-means/Euphoria/averages-pythagorean-means.ex
similarity index 100%
rename from Task/Averages-Pythagorean-means/Euphoria/averages-pythagorean-means.euphoria
rename to Task/Averages-Pythagorean-means/Euphoria/averages-pythagorean-means.ex
diff --git a/Task/Averages-Pythagorean-means/Julia/averages-pythagorean-means.julia b/Task/Averages-Pythagorean-means/Julia/averages-pythagorean-means.jl
similarity index 100%
rename from Task/Averages-Pythagorean-means/Julia/averages-pythagorean-means.julia
rename to Task/Averages-Pythagorean-means/Julia/averages-pythagorean-means.jl
diff --git a/Task/Averages-Pythagorean-means/Kotlin/averages-pythagorean-means.kotlin b/Task/Averages-Pythagorean-means/Kotlin/averages-pythagorean-means.kts
similarity index 100%
rename from Task/Averages-Pythagorean-means/Kotlin/averages-pythagorean-means.kotlin
rename to Task/Averages-Pythagorean-means/Kotlin/averages-pythagorean-means.kts
diff --git a/Task/Averages-Pythagorean-means/Nu/averages-pythagorean-means.nu b/Task/Averages-Pythagorean-means/Nu/averages-pythagorean-means.nu
new file mode 100644
index 0000000000..490918059c
--- /dev/null
+++ b/Task/Averages-Pythagorean-means/Nu/averages-pythagorean-means.nu
@@ -0,0 +1,9 @@
+let means = {
+ A: { math avg }
+ G: { ($in | math product) ** (1 / ($in | length)) }
+ H: { each { 1 / $in } | math avg | 1 / $in }
+}
+
+let $set = seq 1 10
+
+$means | items {|i f| {index: $i mean: ($set | do $f)} }
diff --git a/Task/Averages-Pythagorean-means/OCaml/averages-pythagorean-means-1.ocaml b/Task/Averages-Pythagorean-means/OCaml/averages-pythagorean-means-1.ml
similarity index 100%
rename from Task/Averages-Pythagorean-means/OCaml/averages-pythagorean-means-1.ocaml
rename to Task/Averages-Pythagorean-means/OCaml/averages-pythagorean-means-1.ml
diff --git a/Task/Averages-Pythagorean-means/OCaml/averages-pythagorean-means-2.ocaml b/Task/Averages-Pythagorean-means/OCaml/averages-pythagorean-means-2.ml
similarity index 100%
rename from Task/Averages-Pythagorean-means/OCaml/averages-pythagorean-means-2.ocaml
rename to Task/Averages-Pythagorean-means/OCaml/averages-pythagorean-means-2.ml
diff --git a/Task/Averages-Pythagorean-means/PascalABC.NET/averages-pythagorean-means.pas b/Task/Averages-Pythagorean-means/PascalABC.NET/averages-pythagorean-means.pas
new file mode 100644
index 0000000000..8df884ffb1
--- /dev/null
+++ b/Task/Averages-Pythagorean-means/PascalABC.NET/averages-pythagorean-means.pas
@@ -0,0 +1,11 @@
+##
+function gmean(n: sequence of real) :=
+ power(n.aggregate((s, x) -> s * x), 1.0 / n.count);
+
+function hmean(n: sequence of real) :=
+ n.count / n.sum(x -> 1 / x);
+
+var nums := (1..10).Select( x -> real(x));
+nums.average.println;
+gmean(nums).Println;
+hmean(nums).Println;
diff --git a/Task/Averages-Pythagorean-means/Rust/averages-pythagorean-means.rust b/Task/Averages-Pythagorean-means/Rust/averages-pythagorean-means.rs
similarity index 100%
rename from Task/Averages-Pythagorean-means/Rust/averages-pythagorean-means.rust
rename to Task/Averages-Pythagorean-means/Rust/averages-pythagorean-means.rs
diff --git a/Task/Averages-Pythagorean-means/Scheme/averages-pythagorean-means-1.ss b/Task/Averages-Pythagorean-means/Scheme/averages-pythagorean-means-1.scm
similarity index 100%
rename from Task/Averages-Pythagorean-means/Scheme/averages-pythagorean-means-1.ss
rename to Task/Averages-Pythagorean-means/Scheme/averages-pythagorean-means-1.scm
diff --git a/Task/Averages-Pythagorean-means/Scheme/averages-pythagorean-means-2.ss b/Task/Averages-Pythagorean-means/Scheme/averages-pythagorean-means-2.scm
similarity index 100%
rename from Task/Averages-Pythagorean-means/Scheme/averages-pythagorean-means-2.ss
rename to Task/Averages-Pythagorean-means/Scheme/averages-pythagorean-means-2.scm
diff --git a/Task/Averages-Root-mean-square/Crystal/averages-root-mean-square.crystal b/Task/Averages-Root-mean-square/Crystal/averages-root-mean-square.cr
similarity index 100%
rename from Task/Averages-Root-mean-square/Crystal/averages-root-mean-square.crystal
rename to Task/Averages-Root-mean-square/Crystal/averages-root-mean-square.cr
diff --git a/Task/Averages-Root-mean-square/Delphi/averages-root-mean-square.delphi b/Task/Averages-Root-mean-square/Delphi/averages-root-mean-square.pas
similarity index 100%
rename from Task/Averages-Root-mean-square/Delphi/averages-root-mean-square.delphi
rename to Task/Averages-Root-mean-square/Delphi/averages-root-mean-square.pas
diff --git a/Task/Averages-Root-mean-square/Elixir/averages-root-mean-square.elixir b/Task/Averages-Root-mean-square/Elixir/averages-root-mean-square.ex
similarity index 100%
rename from Task/Averages-Root-mean-square/Elixir/averages-root-mean-square.elixir
rename to Task/Averages-Root-mean-square/Elixir/averages-root-mean-square.ex
diff --git a/Task/Averages-Root-mean-square/Euphoria/averages-root-mean-square.euphoria b/Task/Averages-Root-mean-square/Euphoria/averages-root-mean-square.ex
similarity index 100%
rename from Task/Averages-Root-mean-square/Euphoria/averages-root-mean-square.euphoria
rename to Task/Averages-Root-mean-square/Euphoria/averages-root-mean-square.ex
diff --git a/Task/Averages-Root-mean-square/Julia/averages-root-mean-square-1.julia b/Task/Averages-Root-mean-square/Julia/averages-root-mean-square-1.jl
similarity index 100%
rename from Task/Averages-Root-mean-square/Julia/averages-root-mean-square-1.julia
rename to Task/Averages-Root-mean-square/Julia/averages-root-mean-square-1.jl
diff --git a/Task/Averages-Root-mean-square/Julia/averages-root-mean-square-2.julia b/Task/Averages-Root-mean-square/Julia/averages-root-mean-square-2.jl
similarity index 100%
rename from Task/Averages-Root-mean-square/Julia/averages-root-mean-square-2.julia
rename to Task/Averages-Root-mean-square/Julia/averages-root-mean-square-2.jl
diff --git a/Task/Averages-Root-mean-square/Julia/averages-root-mean-square-3.julia b/Task/Averages-Root-mean-square/Julia/averages-root-mean-square-3.jl
similarity index 100%
rename from Task/Averages-Root-mean-square/Julia/averages-root-mean-square-3.julia
rename to Task/Averages-Root-mean-square/Julia/averages-root-mean-square-3.jl
diff --git a/Task/Averages-Root-mean-square/Julia/averages-root-mean-square-4.julia b/Task/Averages-Root-mean-square/Julia/averages-root-mean-square-4.jl
similarity index 100%
rename from Task/Averages-Root-mean-square/Julia/averages-root-mean-square-4.julia
rename to Task/Averages-Root-mean-square/Julia/averages-root-mean-square-4.jl
diff --git a/Task/Averages-Root-mean-square/Julia/averages-root-mean-square-5.julia b/Task/Averages-Root-mean-square/Julia/averages-root-mean-square-5.jl
similarity index 100%
rename from Task/Averages-Root-mean-square/Julia/averages-root-mean-square-5.julia
rename to Task/Averages-Root-mean-square/Julia/averages-root-mean-square-5.jl
diff --git a/Task/Averages-Root-mean-square/Kotlin/averages-root-mean-square.kotlin b/Task/Averages-Root-mean-square/Kotlin/averages-root-mean-square.kts
similarity index 100%
rename from Task/Averages-Root-mean-square/Kotlin/averages-root-mean-square.kotlin
rename to Task/Averages-Root-mean-square/Kotlin/averages-root-mean-square.kts
diff --git a/Task/Averages-Root-mean-square/Nu/averages-root-mean-square.nu b/Task/Averages-Root-mean-square/Nu/averages-root-mean-square.nu
new file mode 100644
index 0000000000..b8deaca5ea
--- /dev/null
+++ b/Task/Averages-Root-mean-square/Nu/averages-root-mean-square.nu
@@ -0,0 +1 @@
+1..10 | each { $in * $in } | math avg | math sqrt
diff --git a/Task/Averages-Root-mean-square/OCaml/averages-root-mean-square.ocaml b/Task/Averages-Root-mean-square/OCaml/averages-root-mean-square.ml
similarity index 100%
rename from Task/Averages-Root-mean-square/OCaml/averages-root-mean-square.ocaml
rename to Task/Averages-Root-mean-square/OCaml/averages-root-mean-square.ml
diff --git a/Task/Averages-Root-mean-square/PascalABC.NET/averages-root-mean-square.pas b/Task/Averages-Root-mean-square/PascalABC.NET/averages-root-mean-square.pas
new file mode 100644
index 0000000000..6f86167d0d
--- /dev/null
+++ b/Task/Averages-Root-mean-square/PascalABC.NET/averages-root-mean-square.pas
@@ -0,0 +1,5 @@
+##
+function rootmeansquare(n: array of integer) :=
+ Sqrt(n.Sum(x -> x * x) / n.Length);
+
+rootmeansquare(Arr(1..10)).Println;
diff --git a/Task/Averages-Root-mean-square/Rust/averages-root-mean-square.rust b/Task/Averages-Root-mean-square/Rust/averages-root-mean-square.rs
similarity index 100%
rename from Task/Averages-Root-mean-square/Rust/averages-root-mean-square.rust
rename to Task/Averages-Root-mean-square/Rust/averages-root-mean-square.rs
diff --git a/Task/Averages-Root-mean-square/Scheme/averages-root-mean-square.ss b/Task/Averages-Root-mean-square/Scheme/averages-root-mean-square.scm
similarity index 100%
rename from Task/Averages-Root-mean-square/Scheme/averages-root-mean-square.ss
rename to Task/Averages-Root-mean-square/Scheme/averages-root-mean-square.scm
diff --git a/Task/Averages-Simple-moving-average/Crystal/averages-simple-moving-average.crystal b/Task/Averages-Simple-moving-average/Crystal/averages-simple-moving-average.cr
similarity index 100%
rename from Task/Averages-Simple-moving-average/Crystal/averages-simple-moving-average.crystal
rename to Task/Averages-Simple-moving-average/Crystal/averages-simple-moving-average.cr
diff --git a/Task/Averages-Simple-moving-average/Delphi/averages-simple-moving-average.delphi b/Task/Averages-Simple-moving-average/Delphi/averages-simple-moving-average.pas
similarity index 100%
rename from Task/Averages-Simple-moving-average/Delphi/averages-simple-moving-average.delphi
rename to Task/Averages-Simple-moving-average/Delphi/averages-simple-moving-average.pas
diff --git a/Task/Averages-Simple-moving-average/Elixir/averages-simple-moving-average-1.elixir b/Task/Averages-Simple-moving-average/Elixir/averages-simple-moving-average-1.ex
similarity index 100%
rename from Task/Averages-Simple-moving-average/Elixir/averages-simple-moving-average-1.elixir
rename to Task/Averages-Simple-moving-average/Elixir/averages-simple-moving-average-1.ex
diff --git a/Task/Averages-Simple-moving-average/Elixir/averages-simple-moving-average-2.elixir b/Task/Averages-Simple-moving-average/Elixir/averages-simple-moving-average-2.ex
similarity index 100%
rename from Task/Averages-Simple-moving-average/Elixir/averages-simple-moving-average-2.elixir
rename to Task/Averages-Simple-moving-average/Elixir/averages-simple-moving-average-2.ex
diff --git a/Task/Averages-Simple-moving-average/Julia/averages-simple-moving-average-1.julia b/Task/Averages-Simple-moving-average/Julia/averages-simple-moving-average-1.jl
similarity index 100%
rename from Task/Averages-Simple-moving-average/Julia/averages-simple-moving-average-1.julia
rename to Task/Averages-Simple-moving-average/Julia/averages-simple-moving-average-1.jl
diff --git a/Task/Averages-Simple-moving-average/Julia/averages-simple-moving-average-2.julia b/Task/Averages-Simple-moving-average/Julia/averages-simple-moving-average-2.jl
similarity index 100%
rename from Task/Averages-Simple-moving-average/Julia/averages-simple-moving-average-2.julia
rename to Task/Averages-Simple-moving-average/Julia/averages-simple-moving-average-2.jl
diff --git a/Task/Averages-Simple-moving-average/Kotlin/averages-simple-moving-average.kotlin b/Task/Averages-Simple-moving-average/Kotlin/averages-simple-moving-average.kts
similarity index 100%
rename from Task/Averages-Simple-moving-average/Kotlin/averages-simple-moving-average.kotlin
rename to Task/Averages-Simple-moving-average/Kotlin/averages-simple-moving-average.kts
diff --git a/Task/Averages-Simple-moving-average/OCaml/averages-simple-moving-average-1.ocaml b/Task/Averages-Simple-moving-average/OCaml/averages-simple-moving-average-1.ml
similarity index 100%
rename from Task/Averages-Simple-moving-average/OCaml/averages-simple-moving-average-1.ocaml
rename to Task/Averages-Simple-moving-average/OCaml/averages-simple-moving-average-1.ml
diff --git a/Task/Averages-Simple-moving-average/OCaml/averages-simple-moving-average-2.ocaml b/Task/Averages-Simple-moving-average/OCaml/averages-simple-moving-average-2.ml
similarity index 100%
rename from Task/Averages-Simple-moving-average/OCaml/averages-simple-moving-average-2.ocaml
rename to Task/Averages-Simple-moving-average/OCaml/averages-simple-moving-average-2.ml
diff --git a/Task/Averages-Simple-moving-average/Rust/averages-simple-moving-average-1.rust b/Task/Averages-Simple-moving-average/Rust/averages-simple-moving-average-1.rs
similarity index 100%
rename from Task/Averages-Simple-moving-average/Rust/averages-simple-moving-average-1.rust
rename to Task/Averages-Simple-moving-average/Rust/averages-simple-moving-average-1.rs
diff --git a/Task/Averages-Simple-moving-average/Rust/averages-simple-moving-average-2.rust b/Task/Averages-Simple-moving-average/Rust/averages-simple-moving-average-2.rs
similarity index 100%
rename from Task/Averages-Simple-moving-average/Rust/averages-simple-moving-average-2.rust
rename to Task/Averages-Simple-moving-average/Rust/averages-simple-moving-average-2.rs
diff --git a/Task/Averages-Simple-moving-average/Scheme/averages-simple-moving-average.ss b/Task/Averages-Simple-moving-average/Scheme/averages-simple-moving-average.scm
similarity index 100%
rename from Task/Averages-Simple-moving-average/Scheme/averages-simple-moving-average.ss
rename to Task/Averages-Simple-moving-average/Scheme/averages-simple-moving-average.scm
diff --git a/Task/B-zier-curves-Intersections/Julia/b-zier-curves-intersections.julia b/Task/B-zier-curves-Intersections/Julia/b-zier-curves-intersections.jl
similarity index 100%
rename from Task/B-zier-curves-Intersections/Julia/b-zier-curves-intersections.julia
rename to Task/B-zier-curves-Intersections/Julia/b-zier-curves-intersections.jl
diff --git a/Task/B-zier-curves-Intersections/Scheme/b-zier-curves-intersections-1.ss b/Task/B-zier-curves-Intersections/Scheme/b-zier-curves-intersections-1.scm
similarity index 100%
rename from Task/B-zier-curves-Intersections/Scheme/b-zier-curves-intersections-1.ss
rename to Task/B-zier-curves-Intersections/Scheme/b-zier-curves-intersections-1.scm
diff --git a/Task/B-zier-curves-Intersections/Scheme/b-zier-curves-intersections-2.ss b/Task/B-zier-curves-Intersections/Scheme/b-zier-curves-intersections-2.scm
similarity index 100%
rename from Task/B-zier-curves-Intersections/Scheme/b-zier-curves-intersections-2.ss
rename to Task/B-zier-curves-Intersections/Scheme/b-zier-curves-intersections-2.scm
diff --git a/Task/Babbage-problem/Elixir/babbage-problem-1.elixir b/Task/Babbage-problem/Elixir/babbage-problem-1.ex
similarity index 100%
rename from Task/Babbage-problem/Elixir/babbage-problem-1.elixir
rename to Task/Babbage-problem/Elixir/babbage-problem-1.ex
diff --git a/Task/Babbage-problem/Elixir/babbage-problem-2.elixir b/Task/Babbage-problem/Elixir/babbage-problem-2.ex
similarity index 100%
rename from Task/Babbage-problem/Elixir/babbage-problem-2.elixir
rename to Task/Babbage-problem/Elixir/babbage-problem-2.ex
diff --git a/Task/Babbage-problem/Julia/babbage-problem.julia b/Task/Babbage-problem/Julia/babbage-problem.jl
similarity index 100%
rename from Task/Babbage-problem/Julia/babbage-problem.julia
rename to Task/Babbage-problem/Julia/babbage-problem.jl
diff --git a/Task/Babbage-problem/Kotlin/babbage-problem.kotlin b/Task/Babbage-problem/Kotlin/babbage-problem.kts
similarity index 100%
rename from Task/Babbage-problem/Kotlin/babbage-problem.kotlin
rename to Task/Babbage-problem/Kotlin/babbage-problem.kts
diff --git a/Task/Babbage-problem/OCaml/babbage-problem.ocaml b/Task/Babbage-problem/OCaml/babbage-problem.ml
similarity index 100%
rename from Task/Babbage-problem/OCaml/babbage-problem.ocaml
rename to Task/Babbage-problem/OCaml/babbage-problem.ml
diff --git a/Task/Babbage-problem/Phix/babbage-problem-1.phix b/Task/Babbage-problem/Phix/babbage-problem-1.phix
index 89c395e500..2cb1f846bd 100644
--- a/Task/Babbage-problem/Phix/babbage-problem-1.phix
+++ b/Task/Babbage-problem/Phix/babbage-problem-1.phix
@@ -1,6 +1,4 @@
-(phixonline)-->
- with javascript_semantics
- for i=2 to 99736 by 2 do
- if remainder(i*i,1000000)=269696 then ?i exit end if
- end for
-
- with javascript_semantics
- procedure solve_babbage_problem() -- (so that return quits 3 loops)
- sequence cands = {0}, -- n-digit candidates (n initially 0)
- nextc = {} -- n+1-digit candidates, aka next ""
- integer p10 = 1, -- power of 10 for adding prefixes
- r10 = 10, -- power of 10 for getting remainder
- cc = 0 -- count of calculations
- for digits=1 to 6 do -- aka 1..length("269696")
- for prefix=0 to 9*p10 by p10 do
- for cand in sq_add(prefix,cands) do
- atom square = cand*cand
- cc += 1
- if remainder(square,r10) = remainder(269696,r10) then
- if digits=6 then
- printf(1,"Solution: %d (%d calcs)\n",{cand,cc})
- return -- leave solve_babbage_problem()
- end if
- nextc &= cand -- add candidate for next iteration
- end if
- end for
- end for
- {cands,nextc} = {nextc,{}}
- printf(1,"%d-digit candidates: %v\n",{digits,cands})
- p10 *= 10
- r10 *= 10
- end for
- end procedure
- solve_babbage_problem()
-
- -- demo\rosetta\Cheryls_Birthday.exw
- with javascript_semantics
- sequence choices = {{5, 15}, {5, 16}, {5, 19}, {6, 17}, {6, 18},
- {7, 14}, {7, 16}, {8, 14}, {8, 15}, {8, 17}}
+-- demo\rosetta\Cheryls_Birthday.exw
+with javascript_semantics
+sequence choices = {{5, 15}, {5, 16}, {5, 19}, {6, 17}, {6, 18},
+ {7, 14}, {7, 16}, {8, 14}, {8, 15}, {8, 17}}
- sequence mwud = repeat(false,12) -- months with unique days
+sequence mwud = repeat(false,12) -- months with unique days
- for step=1 to 4 do
- sequence {months,days} = columnize(choices)
- bool impossible = false
- for i=length(choices) to 1 by -1 do
- integer {m,d} = choices[i]
- switch step do
- case 1: mwud[m] += (sum(sq_eq(days,d))=1)
- case 2: impossible = mwud[m]
- case 3: impossible = (sum(sq_eq(days,d))!=1)
- case 4: impossible = (sum(sq_eq(months,m))!=1)
- end switch
- if impossible then
- choices[i..i] = {}
- end if
- end for
- end for
- ?choices
-
- with javascript_semantics
- enum MONTH, DAY
+with javascript_semantics
+enum MONTH, DAY
- function unique_month(sequence si, months)
- return sum(sq_eq(months,si[MONTH]))=1
- end function
+function unique_month(sequence si, months)
+ return sum(sq_eq(months,si[MONTH]))=1
+end function
- function unique_day(sequence si, days)
- return sum(sq_eq(days,si[DAY]))=1
- end function
+function unique_day(sequence si, days)
+ return sum(sq_eq(days,si[DAY]))=1
+end function
- function month_without_unique_day(sequence si, months_with_unique_day)
- return not find(si[MONTH],months_with_unique_day)
- end function
+function month_without_unique_day(sequence si, months_with_unique_day)
+ return not find(si[MONTH],months_with_unique_day)
+end function
- sequence choices = {{5, 15}, {5, 16}, {5, 19}, {6, 17}, {6, 18},
- {7, 14}, {7, 16}, {8, 14}, {8, 15}, {8, 17}}
+sequence choices = {{5, 15}, {5, 16}, {5, 19}, {6, 17}, {6, 18},
+ {7, 14}, {7, 16}, {8, 14}, {8, 15}, {8, 17}}
- -- Albert knows the month but does not know the day.
- -- So the month cannot be unique within the choices.
- -- However this step would change nothing, hence omit it.
- -- (obvs. non_unique_month() would be as above, but !=1)
- --choices = filter(choices,non_unique_month,vslice(choices,MONTH))
+-- Albert knows the month but does not know the day.
+-- So the month cannot be unique within the choices.
+-- However this step would change nothing, hence omit it.
+-- (obvs. non_unique_month() would be as above, but !=1)
+--choices = filter(choices,non_unique_month,vslice(choices,MONTH))
- -- Albert also knows that Bernard doesn't know the answer.
- -- So the month cannot have a unique day.
- sequence unique_days = filter(choices,unique_day,vslice(choices,DAY))
- sequence months_with_unique_day = unique(vslice(unique_days,MONTH))
+-- Albert also knows that Bernard doesn't know the answer.
+-- So the month cannot have a unique day.
+sequence unique_days = filter(choices,unique_day,vslice(choices,DAY))
+sequence months_with_unique_day = unique(vslice(unique_days,MONTH))
- choices = filter(choices,month_without_unique_day,months_with_unique_day)
+choices = filter(choices,month_without_unique_day,months_with_unique_day)
- -- Bernard now knows the answer.
- -- So the day must be unique within the remaining choices.
- choices = filter(choices,unique_day,vslice(choices,DAY))
+-- Bernard now knows the answer.
+-- So the day must be unique within the remaining choices.
+choices = filter(choices,unique_day,vslice(choices,DAY))
- -- Albert now knows the answer too.
- -- So the month must be unique within the remaining choices.
- choices = filter(choices,unique_month,vslice(choices,MONTH))
+-- Albert now knows the answer too.
+-- So the month must be unique within the remaining choices.
+choices = filter(choices,unique_month,vslice(choices,MONTH))
- if length(choices)!=1 then crash("Something went wrong!") end if
+if length(choices)!=1 then crash("Something went wrong!") end if
- include builtins\timedate.e
- timedate td = repeat(0,6)
- {td[DT_MONTH],td[DT_DAY]} = choices[1]
- printf(1,"Cheryl's birthday is %s\n", {format_timedate(td,"Mmmm ddth")})
-
- with javascript_semantics
- integer count = 0, n = 11*11,
- limit = iff(platform()=JS?10:20)
- atom t0 = time(), t1 = time()
- while count<limit do
- if gcd(n,3*5*7)=1 then
- sequence f = prime_factors(n,true,-1)
- if length(f)>1 then
- string s = sprintf("%d",n)
- bool valid = true
- for i=1 to length(f) do
- if (i=1 or f[i]!=f[i-1])
- and not match(sprintf("%d",f[i]),s) then
- valid = false
- exit
- end if
- end for
- if valid then
- count += 1
- string t = join(apply(f,sprint),"x"),
- e = elapsed(time()-t1)
- printf(1,"%2d: %,10d = %-17s (%s)\n",{count,n,t,e})
- t1 = time()
- end if
- end if
- end if
- n += 2
- end while
- printf(1,"Total time:%s\n",{elapsed(time()-t0)})
-
- with javascript_semantics
- integer count = 0, n = 11*11,
- limit = iff(platform()=JS?10:20)
- atom t0 = time(), t1 = time()
- while count<limit do
- string s = sprintf("%d",n)
- integer l = floor(sqrt(n)), k = n, f = 3
- bool valid = true
- while true do
- if remainder(k,f)=0 then
- if f<10 or not match(sprintf("%d",f),s) then
- valid = false
- exit
- end if
- if f=k then exit end if
- k /= f
- else
- f += 2
- if f>l then
- if k=n or not match(sprintf("%d",k),s) then
- valid = false
- end if
- exit
- end if
- end if
- end while
- if valid then
- count += 1;
- string t = join(apply(prime_factors(n,true,-1),sprint),"x"),
- e = elapsed(time()-t1)
- printf(1,"%2d: %,10d = %-17s (%s)\n",{count,n,t,e})
- t1 = time()
- end if
- n += 2
- end while
- printf(1,"Total time:%s\n",{elapsed(time()-t0)})
-
- string deBruijn = ""
- for n=0 to 99 do
- string a = sprintf("%02d",n)
- integer a1 = a[1],
- a2 = a[2]
- if a2>=a1 then
- deBruijn &= iff(a1=a2?a1:a)
- for m=n+1 to 99 do
- string ms = sprintf("%02d",m)
- if ms[2]>a1 then
- deBruijn &= a&ms
- end if
- end for
- end if
- end for
- deBruijn &= "000"
- printf(1,"de Bruijn sequence length: %d\n\n",length(deBruijn))
- printf(1,"First 130 characters:\n%s\n\n",deBruijn[1..130])
- printf(1,"Last 130 characters:\n%s\n\n",deBruijn[-130..-1])
+string deBruijn = ""
+for n=0 to 99 do
+ string a = sprintf("%02d",n)
+ integer a1 = a[1],
+ a2 = a[2]
+ if a2>=a1 then
+ deBruijn &= iff(a1=a2?a1:a)
+ for m=n+1 to 99 do
+ string ms = sprintf("%02d",m)
+ if ms[2]>a1 then
+ deBruijn &= a&ms
+ end if
+ end for
+ end if
+end for
+deBruijn &= "000"
+printf(1,"de Bruijn sequence length: %d\n\n",length(deBruijn))
+printf(1,"First 130 characters:\n%s\n\n",deBruijn[1..130])
+printf(1,"Last 130 characters:\n%s\n\n",deBruijn[-130..-1])
- function check(string text)
- sequence res = {}
- sequence found = repeat(0,10000)
- integer k
- for i=1 to length(text)-3 do
- k = to_integer(text[i..i+3],-1)+1
- if k!=0 then found[k] += 1 end if
- end for
- for i=1 to 10000 do
- k = found[i]
- if k!=1 then
- string e = sprintf("Pin number %04d ",i-1)
- e &= iff(k=0?"missing":sprintf("occurs %d times",k))
- res = append(res,e)
- end if
- end for
- k = length(res)
- if k=0 then
- res = "No errors found"
- else
- string s = iff(k=1?"":"s")
- res = sprintf("%d error%s found:\n ",{k,s})&join(res,"\n ")
- end if
- return res
- end function
+function check(string text)
+ sequence res = {}
+ sequence found = repeat(0,10000)
+ integer k
+ for i=1 to length(text)-3 do
+ k = to_integer(text[i..i+3],-1)+1
+ if k!=0 then found[k] += 1 end if
+ end for
+ for i=1 to 10000 do
+ k = found[i]
+ if k!=1 then
+ string e = sprintf("Pin number %04d ",i-1)
+ e &= iff(k=0?"missing":sprintf("occurs %d times",k))
+ res = append(res,e)
+ end if
+ end for
+ k = length(res)
+ if k=0 then
+ res = "No errors found"
+ else
+ string s = iff(k=1?"":"s")
+ res = sprintf("%d error%s found:\n ",{k,s})&join(res,"\n ")
+ end if
+ return res
+end function
- printf(1,"Missing 4 digit PINs in this sequence: %s\n", check(deBruijn))
- printf(1,"Missing 4 digit PINs in the reversed sequence: %s\n",check(reverse(deBruijn)))
- printf(1,"4444th digit in the sequence: %c (setting it to .)\n", deBruijn[4444])
- deBruijn[4444] = '.'
- printf(1,"Re-running checks: %s\n",check(deBruijn))
-
- function isNumber(string s)
- return scanf(s,"%f")!={}
- -- Alt: isNumberString(object s) and
- -- return string(s) and scanf(s,"%f")!={}, or even
- -- return string(s) and scanf(substitute(trim(s),",",""),"%f")!={}
- end function
+function isNumber(string s)
+ return scanf(s,"%f")!={}
+-- Alt: isNumberString(object s) and
+-- return string(s) and scanf(s,"%f")!={}, or even
+-- return string(s) and scanf(substitute(trim(s),",",""),"%f")!={}
+end function
- constant tests = {"#a","#A","0xA","0(16)A","#FF","255","0",
- "0.","0.0","000.000","0e0","0e-2000"," ",
- ".14",".05","-5.2","0xf","ten","1B","#1B",
- " 12 ",trim(" 12 "),"1","0o16","0o18",
- "0b10101111_11110000_11110000_00110011",
- "1_000","50e","+123","+ 123","-0b10101",
- "NaN","+.345","12..34","12e3.4","0-2",
- "192.168.0.1","1.2e","1 2","12.34","",
- "beef","#beef","1,000,000","Inf","1/2",
- "1.5e+27","0x10.5","1."}
+constant tests = {"#a","#A","0xA","0(16)A","#FF","255","0",
+ "0.","0.0","000.000","0e0","0e-2000"," ",
+ ".14",".05","-5.2","0xf","ten","1B","#1B",
+ " 12 ",trim(" 12 "),"1","0o16","0o18",
+ "0b10101111_11110000_11110000_00110011",
+ "1_000","50e","+123","+ 123","-0b10101",
+ "NaN","+.345","12..34","12e3.4","0-2",
+ "192.168.0.1","1.2e","1 2","12.34","",
+ "beef","#beef","1,000,000","Inf","1/2",
+ "1.5e+27","0x10.5","1."}
- sequence numeric = {},
- notnumb = {}
- for i=1 to length(tests) do
- string ti = tests[i]
- if isNumber(ti) then
- numeric = append(numeric,ti)
- else
- notnumb = append(notnumb,ti)
- end if
- end for
- puts(1,"numeric: ")
- pp(numeric,{pp_Indent,9})
- puts(1,"\nnot numeric: ")
- pp(notnumb,{pp_Indent,13})
-
- procedure StoreVar(integer N, integer NTyp)
- --
- -- Store a variable, applying any final operator as needed.
- -- If N is zero, PopFactor (ie store in a new temporary variable of
- -- the specified type). Otherwise N should be an index to symtab.
- -- If storeConst is 1, NTyp is ignored/overridden, otherwise it
- -- should usually be the declared or local type of N.
- --
- ...
- end procedure
-
- switch {condition1,condition2} do
- case {true,true}:
- case {true,false}:
- case {false,true}:
- case {false,false}:
- end switch
-
- function if2(bool c1, bool c2)
- return c1*10+c2
- end function
+function if2(bool c1, bool c2)
+ return c1*10+c2
+end function
- switch if2(condition1,condition2) do
- case 11:
- case 10:
- case 01:
- case 00:
- end switch
-
- enum BOTH = 0b11, FIRST = 0b10, SECOND = 0b01, NEITHER = 0b00
+enum BOTH = 0b11, FIRST = 0b10, SECOND = 0b01, NEITHER = 0b00
- function if2(bool c1, bool c2)
- return c1*2+c2
- end function
+function if2(bool c1, bool c2)
+ return c1*2+c2
+end function
- integer r = if2(condition1,condition2)
- if r=BOTH then
- elsif r=FIRST then
- elsif r=SECOND then
- elsif r=NEITHER then
- end if
-
- global constant T_if2 = 5200 tt_stringF("if2",T_if2)
- global constant T_else1 = 5200 tt_stringF("else1",T_else1)
- global constant T_else2 = 5200 tt_stringF("else2",T_else2)
-
- --constant T_endelseelsif = {T_end,T_else,T_elsif,T_case,T_default,T_fallthru,T_fallthrough}
- constant T_endelseelsif = {T_end,T_else,T_else1,T_else2,T_elsif,T_case,T_default,T_fallthru,T_fallthrough}
-
- elsif ttidx=T_if2 then DoIf2()
-
- for N=10 to 20 do
- printf(1,"%d is ",N)
- if2 mod(N,2)=0, mod(N,3)=0 then
- puts(1,"divisible by both two and three.\n")
- else1
- puts(1,"divisible by two, but not by three.\n")
- else2
- puts(1,"divisible by three, but not by two.\n")
- else
- puts(1,"neither divisible by two, nor by three.\n")
- end if2
- end for
-
- with javascript_semantics
- function modpow(atom x, atom n, atom m)
- atom i = n,
- y = 1,
- z = x
- while i do
- if and_bits(i,1) then
- y = mod(y*z,m)
- end if
- z = mod(z*z,m)
- i = floor(i/2)
- end while
- return y
- end function
+with javascript_semantics
+function modpow(atom x, n, m)
+ atom {i,y,z} = {n,1,x}
+ while i do
+ if odd(i) then
+ y = mod(y*z,m)
+ end if
+ z = mod(z*z,m)
+ i = floor(i/2)
+ end while
+ return y
+end function
- function mersenne_factor(integer p)
- if not is_prime(p) then return -1 end if
- atom limit = sqrt(power(2,p))-1
- integer k = 1
- while 1 do
- atom q = 2*p*k + 1
- if q>=limit then exit end if
- if find(mod(q,8),{1,7})
- and is_prime(q)
- and modpow(2,p,q)=1 then
- return q
- end if
- k += 1
- end while
- return 0
- end function
+function mersenne_factor(integer p)
+ if not is_prime(p) then return -1 end if
+ atom limit = sqrt(power(2,p))-1
+ integer k = 1
+ while 1 do
+ atom q = 2*p*k + 1
+ if q>=limit then exit end if
+ if find(mod(q,8),{1,7})
+ and is_prime(q,true)
+ and modpow(2,p,q)=1 then
+ return q
+ end if
+ k += 1
+ end while
+ return 0
+end function
- sequence tests = {11, 23, 29, 37, 41, 43, 47, 53, 59, 67, 71, 73, 79, 83, 97, 929, 937}
- for i=1 to length(tests) do
- integer ti = tests[i]
- printf(1,"A factor of M%d is %d\n",{ti,mersenne_factor(ti)})
- end for
-
- --
- -- demo\rosetta\Functional_coverage_tree.exw
- -- =========================================
- --
- with javascript_semantics
- constant data = """
- NAME_HIERARCHY | WEIGHT | COVERAGE |
- cleaning | | |
- house1 |40 | |
- bedrooms | |0.25 |
- bathrooms | | |
- bathroom1 | |0.5 |
- bathroom2 | | |
- outside_lavatory | |1 |
- attic | |0.75 |
- kitchen | |0.1 |
- living_rooms | | |
- lounge | | |
- dining_room | | |
- conservatory | | |
- playroom | |1 |
- basement | | |
- garage | | |
- garden | |0.8 |
- house2 |60 | |
- upstairs | | |
- bedrooms | | |
- suite_1 | | |
- suite_2 | | |
- bedroom_3 | | |
- bedroom_4 | | |
- bathroom | | |
- toilet | | |
- attics | |0.6 |
- groundfloor | | |
- kitchen | | |
- living_rooms | | |
- lounge | | |
- dining_room | | |
- conservatory | | |
- playroom | | |
- wet_room_&_toilet | | |
- garage | | |
- garden | |0.9 |
- hot_tub_suite | |1 |
- basement | | |
- cellars | |1 |
- wine_cellar | |1 |
- cinema | |0.75 |
- """
- sequence lines = split(data,"\n"),
- pi = {}, -- indents (to locate parents)
- pdx = {}, -- indexes for ""
- children
- string desc, weights, covers
- integer parent, child
- atom weight, coverage, childw = 0
- enum DESC, WEIGHT, COVERAGE, PARENT, CHILDREN, CHILDW
- lines[1] &= " SHARE OF RESIDUE"
- for i=2 to length(lines) do
- -- decode text to useable data, link up parents & children
- {desc,weights,covers} = split(lines[i],"|")
- -- (nb this assumes /totally/ consistent indenting)
- integer indent = length(desc)-length(trim_head(desc)),
- k = find(indent,pi)
- if k=0 then
- pi = append(pi,indent)
- pdx = append(pdx,0)
- k = length(pi)
- end if
- pdx[k] = i
- parent = 0
- if k>1 then
- parent = pdx[k-1]
- -- lines[parent][CHILDREN] &= i
- lines[parent][CHILDREN] = deep_copy(lines[parent][CHILDREN]) & i
- end if
- children = {}
- weight = to_number(trim(weights),1)
- coverage = to_number(trim(covers),0)
- lines[i] = {desc, weight, coverage, parent, children, childw}
- end for
- for i=length(lines) to 2 by -1 do
- -- calculate the parent coverages, and save child weight sums
- children = lines[i][CHILDREN]
- if length(children) then
- coverage = 0
- childw = 0
- for c=1 to length(children) do
- child = children[c]
- atom w = lines[child][WEIGHT]
- coverage += lines[child][COVERAGE]*w
- childw += w
- end for
- lines[i][COVERAGE] = coverage/childw
- lines[i][CHILDW] = childw -- (save for next loop)
- end if
- end for
- for i=length(lines) to 2 by -1 do
- -- calculate the share of residue, and format lines
- child = i
- {desc, weight, coverage, parent} = lines[i]
- atom residue = 1-coverage
- while parent do
- residue *= lines[child][WEIGHT]/lines[parent][CHILDW]
- {child, parent} = {parent, lines[parent][PARENT]}
- end while
- lines[i] = sprintf("%-32s| %6d | %-8g | %g",{desc,weight,coverage,residue})
- end for
- puts(1,join(lines,"\n")&"\n")
- {} = wait_key()
-
- with javascript_semantics
- constant A = {{27,"Jonah"},
- {18,"Alan"},
- {28,"Glory"},
- {18,"Popeye"},
- {28,"Alan"}},
- B = {{"Jonah","Whales"},
- {"Jonah","Spiders"},
- {"Alan", "Ghosts"},
- {"Alan", "Zombies"},
- {"Glory","Buffy"}},
- jA = 2,
- jB = 1,
- MB = new_dict()
- sequence C = {}
- for i=1 to length(B) do
- object key = B[i][jB]
- object data = getd(key,MB)
- if data=0 then
- data = {B[i]}
- else
- data = append(data,B[i])
- end if
- putd(key,data,MB)
- end for
- for i=1 to length(A) do
- object data = getd(A[i][jA],MB)
- if sequence(data) then
- for j=1 to length(data) do
- C = append(C,{A[i],data[j]})
- end for
- end if
- end for
- destroy_dict(MB)
- pp(C,{pp_Nest,1})
-
- with javascript_semantics
- atom t0 = time()
- sequence list = {1},
- offset = repeat(0,32)
- offset[1..2] = 1
-
- function show(integer t, l)
- string res = repeat('?',l)
- integer level = 0
- for i=l to 1 by -1 do
- integer r2 = remainder(t,2)
- res[i] = "[}(]{)"[mod(level-r2,6)+1]
- level += r2*4-2
- t = floor(t/2)
- end for
- if level!=0 then ?9/0 end if
- return res
- end function
-
- procedure listTrees(integer n)
- for i:=offset[n+1]+1 to offset[n+2] do
- printf(1,"%s\n",{show(list[i], n*2)})
- end for
- end procedure
-
- procedure assemble(atom t, integer n, sl, pos, rem)
- --
- -- assemble tree from subtrees
- -- t: assembled parts so far
- -- n: length of tree we want to make
- -- sl: length of subtree we are looking at
- -- pos: offset of subtree we are looking at
- -- rem: remaining length to be put together
- --
- if rem == 0 then
- list = append(list, t*2+1)
- else
- if sl>rem then -- need smaller sub-trees
- sl = rem
- pos = offset[sl+1]
- elsif pos>=offset[sl+2] then
- -- used up sl-trees, try smaller ones
- if sl == 1 then return end if
- pos = offset[sl]
- sl -= 1
- end if
-
- atom u = or_bits(t*power(2,2*sl),list[pos+1])
- assemble(u, n, sl, pos, rem-sl)
- assemble(t, n, sl, pos+1, rem)
- end if
- end procedure
-
- procedure mktrees(integer n)
- if offset[n+2]=0 then
- if n>0 then
- mktrees(n - 1)
- end if
- assemble(0, n, n-1, offset[n], n-1)
- offset[n+2] = length(list)
- end if
- end procedure
-
- procedure main(integer n)
- mktrees(n)
- atom nt = offset[n+2]-offset[n+1],
- td = time()-t0
- string e = iff(td>0.1?" ("&elapsed(td)&")":"")
- printf(1,"Number of %d-trees: %,d%s\n", {n, nt, e})
- if n<=5 then listTrees(n) end if
- end procedure
- for i=0 to iff(platform()=JS?12:20) do
- main(i)
- end for
- " HI" ", max(50, grp*3), '=') /*title*/
+dd='' /*variable holds output grid of GRP hhs.*/
+ do j=LO to HI; dd= dd right( moebius(j), 2) /*process some numbers from LO --> HI.*/
+ if words(dd)==grp then do; say substr(dd, 2); dd='' /*show grid if fully populated,*/
+ end /* and nullify it for more hhs.*/
end /*j*/ /*for small grids, using wordCnt is OK.*/
-if $\=='' then say substr($, 2) /*handle any residual numbers not shown*/
+if dd\=='' then say substr(dd, 2) /*handle any residual numbers not shown*/
+say format(time('e'),,3) 'seconds'
exit /*stick a fork in it, we're all done. */
-/*──────────────────────────────────────────────────────────────────────────────────────*/
-mobius: procedure expose @.; parse arg x /*obtain a integer to be tested for mu.*/
- if x<1 then return '∙' /*special? Then return symbol for null.*/
- #= 0 /*start with a value of zero. */
- do k=1; p= @.k /*get the Kth (pre─generated) prime.*/
+/*--------------------------------------------------------------------------------------*/
+moebius: procedure expose aa.; parse arg x /*obtain a integer to be tested for mu.*/
+ if x<1 then return '*' /*special? Then return symbol for null.*/
+ hh= 0 /*start with a value of zero. */
+ do k=1; p= aa.k /*get the Kth (pre-generated) prime.*/
if p>x then leave /*prime (P) > X? Then we're done. */
- if p*p>x then do; #= #+1; leave /*prime (P**2 > X? Bump # and leave.*/
+ if p*p>x then do; hh= hh+1; leave /*prime (P**2 > X? Bump hh and leave.*/
end
- if x//p==0 then do; #= #+1 /*X divisible by P? Bump mu number. */
+ if x//p==0 then do; hh= hh+1 /*X divisible by P? Bump mu number. */
x= x % p /* Divide by prime. */
if x//p==0 then return 0 /*X÷by P? Then return zero*/
end
- end /*k*/ /*# (below) is almost always small, <9*/
- if #//2==0 then return 1 /*Is # even? Then return postive 1 */
+ end /*k*/ /*hh (below) is almost always small, <9*/
+ if hh//2==0 then return 1 /*Is hh even? Then return postive 1 */
return -1 /* " " odd? " " negative 1. */
-/*──────────────────────────────────────────────────────────────────────────────────────*/
-genP: @.1=2; @.2=3; @.3=5; @.4=7; @.5=11; @.6= 13; nP=6 /*assign low primes; # primes.*/
+/*--------------------------------------------------------------------------------------*/
+genP: aa.1=2; aa.2=3; aa.3=5; aa.4=7; aa.5=11; aa.6= 13; nP=6 /*assign low primes; hh primes.*/
do lim=nP until lim*lim>=HI /*only keep primes up to the sqrt(HI).*/
end /*lim*/
- do j=@.nP+4 by 2 to HI /*only find odd primes from here on. */
- parse var j '' -1 _;if _==5 then iterate /*Is last digit a "5"? Then not prime*/
+ do j=aa.nP+4 by 2 to HI /*only find odd primes from here on. */
+ parse var j '' -1 uu;if uu==5 then iterate /*Is last digit a "5"? Then not prime*/
if j// 3==0 then iterate /*is J divisible by 3? " " " */
if j// 7==0 then iterate /* " " " " 7? " " " */
if j//11==0 then iterate /* " " " " 11? " " " */
if j//13==0 then iterate /* " " " " 13? " " " */
do k=7 while k*k<=j /*divide by some generated odd primes. */
- if j // @.k==0 then iterate j /*Is J divisible by P? Then not prime*/
- end /*k*/ /* [↓] a prime (J) has been found. */
- nP= nP+1; if nP<=HI then @.nP= j /*bump prime count; assign prime to @.*/
+ if j // aa.k==0 then iterate j /*Is J divisible by P? Then not prime*/
+ end /*k*/ /* [?] a prime (J) has been found. */
+ nP= nP+1; if nP<=HI then aa.nP= j /*bump prime count; assign prime to aa.*/
end /*j*/; return
diff --git a/Task/M-bius-function/REXX/m-bius-function-2.rexx b/Task/M-bius-function/REXX/m-bius-function-2.rexx
new file mode 100644
index 0000000000..90b38b4233
--- /dev/null
+++ b/Task/M-bius-function/REXX/m-bius-function-2.rexx
@@ -0,0 +1,40 @@
+include Settings
+
+say version; say 'Moebius sequence'; say
+parse arg LO HI grp . /*obtain optional arguments from the CL*/
+numeric digits 100
+if LO=='' | LO=="," then LO= 0 /*Not specified? Then use the default.*/
+if HI=='' | HI=="," then HI= 199 /* " " " " " " */
+if grp=='' | grp=="," then grp= 20 /* " " " " " " */
+ /* ______ */
+say Center(' The Moebius sequence from ' LO " --> " HI" ", Max(50, grp*3), '=') /*title*/
+dd='' /*variable holds output grid of GRP #s.*/
+ do j=LO to HI; dd= dd Right( Moebius(j), 2) /*process some numbers from LO --> HI.*/
+ if Words(dd)==grp then do; say Substr(dd, 2); dd='' /*show grid if fully populated,*/
+ end /* and nullify it for more #s.*/
+ end /*j*/ /*for small grids, using wordCnt is OK.*/
+if dd\=='' then say Substr(dd, 2) /*handle any residual numbers not shown*/
+say Format(Time('e'),,3) 'seconds'
+exit /*stick a fork in it, we're all done. */
+
+Moebius:
+/* Moebius sequence */
+procedure expose fact. ufac.
+arg x
+/* Special value */
+if x = 0 then
+ return '*'
+/* Using # of (unique) prime factors */
+call Factors(x)
+call Ufactors(x)
+if fact.0 = ufac.0 then
+ if IsEven(fact.factor.0) then
+ return 1
+ else
+ return -1
+else
+ return 0
+
+include Functions
+include Numbers
+include Abend
diff --git a/Task/M-bius-function/Rust/m-bius-function.rust b/Task/M-bius-function/Rust/m-bius-function.rs
similarity index 100%
rename from Task/M-bius-function/Rust/m-bius-function.rust
rename to Task/M-bius-function/Rust/m-bius-function.rs
diff --git a/Task/MAC-vendor-lookup/Delphi/mac-vendor-lookup.delphi b/Task/MAC-vendor-lookup/Delphi/mac-vendor-lookup.pas
similarity index 100%
rename from Task/MAC-vendor-lookup/Delphi/mac-vendor-lookup.delphi
rename to Task/MAC-vendor-lookup/Delphi/mac-vendor-lookup.pas
diff --git a/Task/MAC-vendor-lookup/Julia/mac-vendor-lookup.julia b/Task/MAC-vendor-lookup/Julia/mac-vendor-lookup.jl
similarity index 53%
rename from Task/MAC-vendor-lookup/Julia/mac-vendor-lookup.julia
rename to Task/MAC-vendor-lookup/Julia/mac-vendor-lookup.jl
index 79e31cc0e0..767a6a340b 100644
--- a/Task/MAC-vendor-lookup/Julia/mac-vendor-lookup.julia
+++ b/Task/MAC-vendor-lookup/Julia/mac-vendor-lookup.jl
@@ -1,15 +1,14 @@
-# v0.6.0
-
-using Requests
+import HTTP: get
function getvendor(addr::String)
try
- get("http://api.macvendors.com/$addr") |> readstring
+ String(get("http://api.macvendors.com/$addr").body)
catch e
- nothing
+ "Vendor not found"
end
end
for addr in ["88:53:2E:67:07:BE", "FC:FB:FB:01:FA:21", "D4:F4:6F:C9:EF:8D", "23:45:67"]
println("$addr -> ", getvendor(addr))
+ sleep(0.5) # web site may error if requests are too close together
end
diff --git a/Task/MAC-vendor-lookup/Kotlin/mac-vendor-lookup.kotlin b/Task/MAC-vendor-lookup/Kotlin/mac-vendor-lookup.kts
similarity index 100%
rename from Task/MAC-vendor-lookup/Kotlin/mac-vendor-lookup.kotlin
rename to Task/MAC-vendor-lookup/Kotlin/mac-vendor-lookup.kts
diff --git a/Task/MAC-vendor-lookup/OCaml/mac-vendor-lookup.ocaml b/Task/MAC-vendor-lookup/OCaml/mac-vendor-lookup.ml
similarity index 100%
rename from Task/MAC-vendor-lookup/OCaml/mac-vendor-lookup.ocaml
rename to Task/MAC-vendor-lookup/OCaml/mac-vendor-lookup.ml
diff --git a/Task/MAC-vendor-lookup/Rust/mac-vendor-lookup.rust b/Task/MAC-vendor-lookup/Rust/mac-vendor-lookup.rs
similarity index 100%
rename from Task/MAC-vendor-lookup/Rust/mac-vendor-lookup.rust
rename to Task/MAC-vendor-lookup/Rust/mac-vendor-lookup.rs
diff --git a/Task/MAC-vendor-lookup/Scheme/mac-vendor-lookup.ss b/Task/MAC-vendor-lookup/Scheme/mac-vendor-lookup.scm
similarity index 100%
rename from Task/MAC-vendor-lookup/Scheme/mac-vendor-lookup.ss
rename to Task/MAC-vendor-lookup/Scheme/mac-vendor-lookup.scm
diff --git a/Task/MD4/Delphi/md4.delphi b/Task/MD4/Delphi/md4.pas
similarity index 100%
rename from Task/MD4/Delphi/md4.delphi
rename to Task/MD4/Delphi/md4.pas
diff --git a/Task/MD4/Julia/md4.julia b/Task/MD4/Julia/md4.jl
similarity index 100%
rename from Task/MD4/Julia/md4.julia
rename to Task/MD4/Julia/md4.jl
diff --git a/Task/MD4/Kotlin/md4.kotlin b/Task/MD4/Kotlin/md4.kts
similarity index 100%
rename from Task/MD4/Kotlin/md4.kotlin
rename to Task/MD4/Kotlin/md4.kts
diff --git a/Task/MD4/Rust/md4.rust b/Task/MD4/Rust/md4.rs
similarity index 100%
rename from Task/MD4/Rust/md4.rust
rename to Task/MD4/Rust/md4.rs
diff --git a/Task/MD5-Implementation/C++/md5-implementation.cpp b/Task/MD5-Implementation/C++/md5-implementation.cpp
new file mode 100644
index 0000000000..2d913c1b90
--- /dev/null
+++ b/Task/MD5-Implementation/C++/md5-implementation.cpp
@@ -0,0 +1,128 @@
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+const uint32_t INITIAL_A = 0x67452301;
+const uint32_t INITIAL_B = static_cast(0xEFCDAB89L);
+const uint32_t INITIAL_C = static_cast(0x98BADCFEL);
+const uint32_t INITIAL_D = 0x10325476;
+
+const std::vector SHIFT_AMOUNTS = { 7, 12, 17, 22, 5, 9, 14, 20, 4, 11, 16, 23, 6, 10, 15, 21 };
+
+const std::vector K = { 0xd76aa478, 0xe8c7b756, 0x242070db, 0xc1bdceee,
+ 0xf57c0faf, 0x4787c62a, 0xa8304613, 0xfd469501,
+ 0x698098d8, 0x8b44f7af, 0xffff5bb1, 0x895cd7be,
+ 0x6b901122, 0xfd987193, 0xa679438e, 0x49b40821,
+ 0xf61e2562, 0xc040b340, 0x265e5a51, 0xe9b6c7aa,
+ 0xd62f105d, 0x02441453, 0xd8a1e681, 0xe7d3fbc8,
+ 0x21e1cde6, 0xc33707d6, 0xf4d50d87, 0x455a14ed,
+ 0xa9e3e905, 0xfcefa3f8, 0x676f02d9, 0x8d2a4c8a,
+ 0xfffa3942, 0x8771f681, 0x6d9d6122, 0xfde5380c,
+ 0xa4beea44, 0x4bdecfa9, 0xf6bb4b60, 0xbebfbc70,
+ 0x289b7ec6, 0xeaa127fa, 0xd4ef3085, 0x04881d05,
+ 0xd9d4d039, 0xe6db99e5, 0x1fa27cf8, 0xc4ac5665,
+ 0xf4292244, 0x432aff97, 0xab9423a7, 0xfc93a039,
+ 0x655b59c3, 0x8f0ccc92, 0xffeff47d, 0x85845dd1,
+ 0x6fa87e4f, 0xfe2ce6e0, 0xa3014314, 0x4e0811a1,
+ 0xf7537e82, 0xbd3af235, 0x2ad7d2bb, 0xeb86d391 };
+
+std::string to_hex_string(const std::vector& bytes) {
+ std::string hex_string = "";
+ std::stringstream stream;
+ for ( const int8_t& bb : bytes ) {
+ stream << std::setfill('0') << std::setw(2) << std::hex << ( bb & 0xff );
+ hex_string += stream.str();
+ stream.str("");
+ }
+ return hex_string;
+}
+
+std::vector to_byte_vector(const std::string& text) {
+ std::vector bytes;
+ bytes.reserve(text.size());
+ std::transform(text.begin(), text.end(),
+ std::back_inserter(bytes), [](char ch){ return static_cast(ch); });
+ return bytes;
+}
+
+std::vector computeMD5(const std::vector& message) {
+ uint64_t message_length_bytes = message.size();
+ uint32_t number_blocks = ( ( message_length_bytes + 8 ) >> 6 ) + 1;
+ uint32_t total_length = number_blocks << 6;
+ std::vector padding_bytes(total_length - message_length_bytes);
+ padding_bytes[0] = static_cast(0x80);
+ uint64_t message_length_bits = message_length_bytes << 3;
+ for ( uint32_t i = 0; i < 8; ++i ) {
+ padding_bytes[padding_bytes.size() - 8 + i] = static_cast(message_length_bits);
+ message_length_bits >>= 8;
+ }
+
+ uint32_t a = INITIAL_A;
+ uint32_t b = INITIAL_B;
+ uint32_t c = INITIAL_C;
+ uint32_t d = INITIAL_D;
+
+ std::vector buffer(16);
+ for ( uint32_t i = 0; i < number_blocks; ++i ) {
+ uint32_t index = i << 6;
+ for ( uint32_t j = 0; j < 64; index++, ++j ) {
+ buffer[j >> 2] = ( static_cast( ( index < message_length_bytes ) ? message[index]
+ : padding_bytes[index - message_length_bytes] ) << 24 ) | ( buffer[j >> 2] >> 8 );
+ }
+
+ uint32_t original_A = a;
+ uint32_t original_B = b;
+ uint32_t original_C = c;
+ uint32_t original_D = d;
+
+ for ( uint32_t j = 0; j < 64; ++j ) {
+ uint32_t div16 = j >> 4;
+ uint32_t f = 0;
+ uint32_t buffer_index = j;
+ switch ( div16 ) {
+ case 0: f = ( b & c ) | ( ~b & d ); break;
+ case 1: f = ( b & d ) | ( c & ~d ); buffer_index = ( buffer_index * 5 + 1 ) & 0x0F; break;
+ case 2: f = b ^ c ^ d; buffer_index = ( buffer_index * 3 + 5 ) & 0x0F; break;
+ case 3: f = c ^ ( b | ~d ); buffer_index = ( buffer_index * 7 ) & 0x0F; break;
+ }
+ uint32_t temp = b + std::rotl(
+ a + f + buffer[buffer_index] + K[j], SHIFT_AMOUNTS[( div16 << 2 ) | ( j & 3 )]);
+
+ a = d;
+ d = c;
+ c = b;
+ b = temp;
+ }
+
+ a += original_A;
+ b += original_B;
+ c += original_C;
+ d += original_D;
+ }
+
+ std::vector md5(16);
+ uint32_t count = 0;
+ for ( uint32_t i = 0; i < 4; ++i ) {
+ uint32_t n = ( i == 0 ) ? a : ( ( i == 1 ) ? b : ( ( i == 2 ) ? c : d ) );
+ for ( uint32_t j = 0; j < 4; ++j ) {
+ md5[count++] = static_cast(n);
+ n >>= 8;
+ }
+ }
+ return md5;
+}
+
+int main() {
+ const std::vector tests = { "", "a", "abc", "message digest", "abcdefghijklmnopqrstuvwxyz",
+ "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",
+ "12345678901234567890123456789012345678901234567890123456789012345678901234567890" };
+
+ for ( const std::string& test : tests ) {
+ std::cout << to_hex_string(computeMD5(to_byte_vector(test))) << " <== \"" + test + "\"" << "\n";
+
+ }
+}
diff --git a/Task/MD5-Implementation/Delphi/md5-implementation.delphi b/Task/MD5-Implementation/Delphi/md5-implementation.pas
similarity index 100%
rename from Task/MD5-Implementation/Delphi/md5-implementation.delphi
rename to Task/MD5-Implementation/Delphi/md5-implementation.pas
diff --git a/Task/MD5-Implementation/Julia/md5-implementation.julia b/Task/MD5-Implementation/Julia/md5-implementation.jl
similarity index 100%
rename from Task/MD5-Implementation/Julia/md5-implementation.julia
rename to Task/MD5-Implementation/Julia/md5-implementation.jl
diff --git a/Task/MD5-Implementation/Kotlin/md5-implementation.kotlin b/Task/MD5-Implementation/Kotlin/md5-implementation.kts
similarity index 100%
rename from Task/MD5-Implementation/Kotlin/md5-implementation.kotlin
rename to Task/MD5-Implementation/Kotlin/md5-implementation.kts
diff --git a/Task/MD5-Implementation/Raku/md5-implementation.raku b/Task/MD5-Implementation/Raku/md5-implementation.raku
index 96ff90376b..c6dc59e0e0 100644
--- a/Task/MD5-Implementation/Raku/md5-implementation.raku
+++ b/Task/MD5-Implementation/Raku/md5-implementation.raku
@@ -1,9 +1,8 @@
proto md5($msg) returns Blob is export {*}
multi md5(Str $msg) { md5 $msg.encode }
multi md5(Blob $msg) {
- my buf8 $buf .= new;
- $buf.write-uint32: $buf.elems, $_, LittleEndian for
- reduce -> Blob $blob, blob32 $X {
+ [~] map { buf8.new.write-uint32: 0, $_, LittleEndian },
+ |reduce -> Blob $blob, blob32 $X {
blob32.new: $blob Z+
reduce -> $b, $i {
blob32.new:
@@ -34,7 +33,6 @@ multi md5(Blob $msg) {
$b;
}(buf32.new)
.rotor(16);
- $buf;
}
CHECK {
diff --git a/Task/MD5-Implementation/Rust/md5-implementation.rust b/Task/MD5-Implementation/Rust/md5-implementation.rs
similarity index 100%
rename from Task/MD5-Implementation/Rust/md5-implementation.rust
rename to Task/MD5-Implementation/Rust/md5-implementation.rs
diff --git a/Task/MD5/Crystal/md5.crystal b/Task/MD5/Crystal/md5.cr
similarity index 100%
rename from Task/MD5/Crystal/md5.crystal
rename to Task/MD5/Crystal/md5.cr
diff --git a/Task/MD5/Delphi/md5.delphi b/Task/MD5/Delphi/md5.pas
similarity index 100%
rename from Task/MD5/Delphi/md5.delphi
rename to Task/MD5/Delphi/md5.pas
diff --git a/Task/MD5/Julia/md5.julia b/Task/MD5/Julia/md5.jl
similarity index 100%
rename from Task/MD5/Julia/md5.julia
rename to Task/MD5/Julia/md5.jl
diff --git a/Task/MD5/Kotlin/md5.kotlin b/Task/MD5/Kotlin/md5.kts
similarity index 100%
rename from Task/MD5/Kotlin/md5.kotlin
rename to Task/MD5/Kotlin/md5.kts
diff --git a/Task/MD5/Nu/md5.nu b/Task/MD5/Nu/md5.nu
new file mode 100644
index 0000000000..8e18018790
--- /dev/null
+++ b/Task/MD5/Nu/md5.nu
@@ -0,0 +1,7 @@
+[
+ '' 'a' 'abc' 'message digest'
+ 'abcdefghijklmnopqrstuvwxyz'
+ 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'
+ '12345678901234567890123456789012345678901234567890123456789012345678901234567890'
+]
+| each { hash md5 }
diff --git a/Task/MD5/OCaml/md5.ocaml b/Task/MD5/OCaml/md5.ml
similarity index 100%
rename from Task/MD5/OCaml/md5.ocaml
rename to Task/MD5/OCaml/md5.ml
diff --git a/Task/MD5/Rust/md5-1.rust b/Task/MD5/Rust/md5-1.rs
similarity index 100%
rename from Task/MD5/Rust/md5-1.rust
rename to Task/MD5/Rust/md5-1.rs
diff --git a/Task/MD5/Rust/md5-2.rust b/Task/MD5/Rust/md5-2.rs
similarity index 100%
rename from Task/MD5/Rust/md5-2.rust
rename to Task/MD5/Rust/md5-2.rs
diff --git a/Task/Machine-code/AArch64-Assembly/machine-code.aarch64 b/Task/Machine-code/AArch64-Assembly/machine-code.aarch64
new file mode 100644
index 0000000000..04d63ef750
--- /dev/null
+++ b/Task/Machine-code/AArch64-Assembly/machine-code.aarch64
@@ -0,0 +1,94 @@
+/* ARM assembly AARCH64 Raspberry PI 3B */
+/* program Machine code */
+
+/*******************************************/
+/* Constantes */
+/*******************************************/
+/* for this file see task include a file in language AArch64 assembly*/
+.include "../includeConstantesARM64.inc"
+
+/*******************************************/
+/* macros */
+/*******************************************/
+//.include "../../ficmacros64.inc" // for developper debugging
+
+/*********************************/
+/* Initialized data */
+/*********************************/
+.data
+szMessDebutPgm: .asciz "Program 64 bits start. \n"
+szCarriageReturn: .asciz "\n"
+szMessFinOK: .asciz "Program normal end. \n"
+
+/*********************************/
+/* UnInitialized data */
+/*********************************/
+.bss
+sAreaConv: .skip 24
+.align 4
+
+/*********************************/
+/* code section */
+/*********************************/
+.text
+.global main
+main:
+ ldr x0,qAdrszMessDebutPgm
+ bl affichageMess // start message
+
+ mov x0,#5
+ mov x1,#10
+ bl addition // call function
+
+ ldr x1,qAdrsAreaConv // decimal conversion
+ bl conversion10
+ ldr x0,qAdrsAreaConv // display result
+ bl affichageMess
+ ldr x0,qAdrszCarriageReturn
+ bl affichageMess
+
+ adr x2,bCodeArmText // code machine arm address
+ mov x0,#10
+ mov x1,#20
+ blr x2 // call code machine
+
+ ldr x1,qAdrsAreaConv // decimal conversion
+ bl conversion10
+ ldr x0,qAdrsAreaConv // display result
+ bl affichageMess
+ ldr x0,qAdrszCarriageReturn
+ bl affichageMess
+
+ ldr x0,qAdrszMessFinOK
+ bl affichageMess
+
+100:
+ mov x8,EXIT
+ svc #0 // system call
+qAdrszMessDebutPgm: .quad szMessDebutPgm
+qAdrszMessFinOK: .quad szMessFinOK
+qAdrszCarriageReturn: .quad szCarriageReturn
+qAdrsAreaConv: .quad sAreaConv
+
+/******************************************************************/
+/* add two registers */
+/******************************************************************/
+/* x0 contains value 1 */
+/* x1 contains value 2 */
+
+addition:
+ stp x1,lr,[sp,-16]! // TODO: a completer
+ add x0,x0,x1
+100:
+ ldp x1,lr,[sp],16 // TODO: a completer
+ ret
+ // code machine ARM AARCH 64 bits
+bCodeArmText: .byte 0xE1,0x7B,0xBF,0xA9 // stp x1,lr,[sp,-16]!
+ .byte 0x00,0x00,0x01,0x8B // add x0,x0,x1
+ .byte 0xE1,0x7B,0xC1,0xA8 // ldp x1,lr,[sp],16
+ .byte 0xC0,0x03,0x5F,0xD6 // ret
+/***************************************************/
+/* ROUTINES INCLUDE */
+/***************************************************/
+/* for this file see task include a file in language AArch64 assembly*/
+.include "../includeARM64.inc"
diff --git a/Task/Machine-code/ARM-Assembly/machine-code.arm b/Task/Machine-code/ARM-Assembly/machine-code.arm
new file mode 100644
index 0000000000..caa2f7cf72
--- /dev/null
+++ b/Task/Machine-code/ARM-Assembly/machine-code.arm
@@ -0,0 +1,98 @@
+/* ARM assembly Raspberry PI */
+/* program Machine code */
+
+/* REMARK 1 : this program use routines in a include file
+ see task Include a file language arm assembly
+ for the routine affichageMess conversion10
+ see at end of this program the instruction include */
+
+/*******************************************/
+/* Constantes */
+/*******************************************/
+.include "../constantes.inc"
+
+/*******************************************/
+/* macros */
+/*******************************************/
+//.include "../../ficmacros32.inc" @ for developper debugging
+
+/*********************************/
+/* Initialized data */
+/*********************************/
+.data
+szMessDebutPgm: .asciz "Program 32 bits start. \n"
+szCarriageReturn: .asciz "\n"
+szMessFinOK: .asciz "Program normal end. \n"
+
+ @ code machine ARM 32 bits
+.align 4
+bCodeArm: .byte 0x02,0x40,0x2D,0xE9 @ push {r1,lr}
+ .byte 0x01,0x00,0x80,0xE0 @ add r0,r1
+ .byte 0x02,0x80,0xBD,0xE8 @ pop {r1,pc}
+/*********************************/
+/* UnInitialized data */
+/*********************************/
+.bss
+sAreaConv: .skip 24
+.align 4
+
+/*********************************/
+/* code section */
+/*********************************/
+.text
+.global main
+main:
+ ldr r0,iAdrszMessDebutPgm
+ bl affichageMess @ start message
+
+ mov r0,#5
+ mov r1,#10
+ bl addition @ call function
+
+ ldr r1,iAdrsAreaConv @ decimal conversion
+ bl conversion10
+ ldr r0,iAdrsAreaConv @ display result
+ bl affichageMess
+ ldr r0,iAdrszCarriageReturn
+ bl affichageMess
+
+ ldr r2,iAdrbCodeArm @ code machine arm address
+ mov r0,#10
+ mov r1,#20
+ blx r2 @ call code machine
+
+ ldr r1,iAdrsAreaConv @ decimal conversion
+ bl conversion10
+ ldr r0,iAdrsAreaConv @ display result
+ bl affichageMess
+ ldr r0,iAdrszCarriageReturn
+ bl affichageMess
+
+ ldr r0,iAdrszMessFinOK
+ bl affichageMess
+
+100:
+ mov r7,#EXIT @ program end
+ svc #0 @ system call
+iAdrszMessDebutPgm: .int szMessDebutPgm
+iAdrszMessFinOK: .int szMessFinOK
+iAdrszCarriageReturn: .int szCarriageReturn
+iAdrsAreaConv: .int sAreaConv
+iAdrbCodeArm: .int bCodeArm
+
+/******************************************************************/
+/* add two registers */
+/******************************************************************/
+/* r0 contains value 1 */
+/* r1 contains value 2 */
+
+addition:
+ push {r1,lr} @ save registers
+ add r0,r1
+100:
+ pop {r1,pc}
+
+/***************************************************/
+/* ROUTINES INCLUDE */
+/***************************************************/
+.include "../affichage.inc"
diff --git a/Task/Machine-code/Common-Lisp/machine-code.lisp b/Task/Machine-code/Common-Lisp/machine-code.lisp
index f4ee406189..faf7e0ddb8 100644
--- a/Task/Machine-code/Common-Lisp/machine-code.lisp
+++ b/Task/Machine-code/Common-Lisp/machine-code.lisp
@@ -1,3 +1,49 @@
+;;Update 2024: the previous code is likely not going to work on modern OS, because there is a need to allocate memory with the correct permissions (readable, writable, and executable). We will update with another machine code, equivalent to the function 'ash' in common lisp
+
+89 f8 mov %edi,%eax
+89 f1 mov %esi,%ecx
+d3 e8 shr %cl,%eax
+c3 ret
+
+;;sbcl
+(require :sb-posix)
+
+(defconstant +PROT-READ+ 1)
+(defconstant +PROT-WRITE+ 2)
+(defconstant +PROT-EXEC+ 4)
+(defconstant +MAP-PRIVATE+ 2)
+(defconstant +MAP-ANONYMOUS+ #x20)
+
+(defun allocate-executable-memory (size)
+ (sb-posix:mmap nil
+ size
+ (logior +PROT-READ+ +PROT-WRITE+ +PROT-EXEC+)
+ (logior +MAP-PRIVATE+ +MAP-ANONYMOUS+)
+ -1
+ 0))
+
+;; Example usage:
+(defparameter *shellcode* #(#x89 #xf8 #x89 #xf1 #xd3 #xe8 #xc3))
+(defparameter *mem-ptr* (allocate-executable-memory (length *shellcode*)))
+
+;; Copy shellcode to allocated memory
+(loop for byte across *shellcode*
+ for i from 0
+ do (setf (sb-sys:sap-ref-8 *mem-ptr* i) byte))
+
+;; Create a callable function pointer
+(defparameter *func* (sb-alien:sap-alien *mem-ptr* (sb-alien:function sb-alien:unsigned-int sb-alien:unsigned-int sb-alien:unsigned-int)))
+
+;; Call the function
+(sb-alien:alien-funcall *func* 18 1)
+;; 9
+;;(ash 18 -1) => 9
+
+;; Don't forget to free the memory when done
+;;(sb-posix:munmap *mem-ptr* (length *shellcode*))
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;old contribution starts here
;;Note that by using the 'CFFI' library, one can apply this procedure portably in any lisp implementation;
;; in this code however I chose to demonstrate only the implementation-dependent programs.
diff --git a/Task/Machine-code/Delphi/machine-code.delphi b/Task/Machine-code/Delphi/machine-code.pas
similarity index 100%
rename from Task/Machine-code/Delphi/machine-code.delphi
rename to Task/Machine-code/Delphi/machine-code.pas
diff --git a/Task/Machine-code/Julia/machine-code.julia b/Task/Machine-code/Julia/machine-code.jl
similarity index 100%
rename from Task/Machine-code/Julia/machine-code.julia
rename to Task/Machine-code/Julia/machine-code.jl
diff --git a/Task/Machine-code/Kotlin/machine-code-1.kotlin b/Task/Machine-code/Kotlin/machine-code-1.kts
similarity index 100%
rename from Task/Machine-code/Kotlin/machine-code-1.kotlin
rename to Task/Machine-code/Kotlin/machine-code-1.kts
diff --git a/Task/Machine-code/Kotlin/machine-code-2.kotlin b/Task/Machine-code/Kotlin/machine-code-2.kts
similarity index 100%
rename from Task/Machine-code/Kotlin/machine-code-2.kotlin
rename to Task/Machine-code/Kotlin/machine-code-2.kts
diff --git a/Task/Machine-code/Rust/machine-code.rust b/Task/Machine-code/Rust/machine-code.rs
similarity index 100%
rename from Task/Machine-code/Rust/machine-code.rust
rename to Task/Machine-code/Rust/machine-code.rs
diff --git a/Task/Machine-code/Scheme/machine-code.ss b/Task/Machine-code/Scheme/machine-code.scm
similarity index 100%
rename from Task/Machine-code/Scheme/machine-code.ss
rename to Task/Machine-code/Scheme/machine-code.scm
diff --git a/Task/Mad-Libs/Julia/mad-libs.julia b/Task/Mad-Libs/Julia/mad-libs.jl
similarity index 100%
rename from Task/Mad-Libs/Julia/mad-libs.julia
rename to Task/Mad-Libs/Julia/mad-libs.jl
diff --git a/Task/Mad-Libs/Kotlin/mad-libs.kotlin b/Task/Mad-Libs/Kotlin/mad-libs.kts
similarity index 100%
rename from Task/Mad-Libs/Kotlin/mad-libs.kotlin
rename to Task/Mad-Libs/Kotlin/mad-libs.kts
diff --git a/Task/Mad-Libs/Rust/mad-libs.rust b/Task/Mad-Libs/Rust/mad-libs.rs
similarity index 100%
rename from Task/Mad-Libs/Rust/mad-libs.rust
rename to Task/Mad-Libs/Rust/mad-libs.rs
diff --git a/Task/Magic-8-ball/Delphi/magic-8-ball.delphi b/Task/Magic-8-ball/Delphi/magic-8-ball.pas
similarity index 100%
rename from Task/Magic-8-ball/Delphi/magic-8-ball.delphi
rename to Task/Magic-8-ball/Delphi/magic-8-ball.pas
diff --git a/Task/Magic-8-ball/EasyLang/magic-8-ball.easy b/Task/Magic-8-ball/EasyLang/magic-8-ball.easy
index 7f793ae08f..3c50eb8113 100644
--- a/Task/Magic-8-ball/EasyLang/magic-8-ball.easy
+++ b/Task/Magic-8-ball/EasyLang/magic-8-ball.easy
@@ -4,5 +4,5 @@ repeat
print "What would you like to know? "
q$ = input
until q$ = "q"
- print answers$[randint len answers$[]]
+ print answers$[random len answers$[]]
.
diff --git a/Task/Magic-8-ball/Julia/magic-8-ball.julia b/Task/Magic-8-ball/Julia/magic-8-ball.jl
similarity index 100%
rename from Task/Magic-8-ball/Julia/magic-8-ball.julia
rename to Task/Magic-8-ball/Julia/magic-8-ball.jl
diff --git a/Task/Magic-8-ball/Kotlin/magic-8-ball.kotlin b/Task/Magic-8-ball/Kotlin/magic-8-ball.kts
similarity index 100%
rename from Task/Magic-8-ball/Kotlin/magic-8-ball.kotlin
rename to Task/Magic-8-ball/Kotlin/magic-8-ball.kts
diff --git a/Task/Magic-8-ball/Rust/magic-8-ball.rust b/Task/Magic-8-ball/Rust/magic-8-ball.rs
similarity index 100%
rename from Task/Magic-8-ball/Rust/magic-8-ball.rust
rename to Task/Magic-8-ball/Rust/magic-8-ball.rs
diff --git a/Task/Magic-8-ball/V-(Vlang)/magic-8-ball.v b/Task/Magic-8-ball/V-(Vlang)/magic-8-ball.v
new file mode 100644
index 0000000000..8e4e604cae
--- /dev/null
+++ b/Task/Magic-8-ball/V-(Vlang)/magic-8-ball.v
@@ -0,0 +1,26 @@
+import rand
+import os
+
+const answers = ["It is certain", "It is decidedly so", "Without a doubt",
+ "Yes, definitely", "You may rely on it", "As I see it, yes",
+ "Most likely", "Outlook good", "Signs point to yes", "Yes",
+ "Reply hazy, try again", "Ask again later",
+ "Better not tell you now", "Cannot predict now",
+ "Concentrate and ask again", "Don't bet on it",
+ "My reply is no", "My sources say no", "Outlook not so good",
+ "Very doubtful"]
+
+fn main() {
+ mut str :=""
+ for {
+ str = os.input_opt("Please enter your question or a blank line to quit? \n") or {panic(err)}.str()
+ if str =="" {
+ println("No answer, so exiting!")
+ break
+ }
+ else {
+ rnum := rand.int_in_range(0, answers.len) or {exit(1)}
+ println(answers[rnum])
+ }
+ }
+}
diff --git a/Task/Magic-constant/Delphi/magic-constant.delphi b/Task/Magic-constant/Delphi/magic-constant.pas
similarity index 100%
rename from Task/Magic-constant/Delphi/magic-constant.delphi
rename to Task/Magic-constant/Delphi/magic-constant.pas
diff --git a/Task/Magic-constant/Julia/magic-constant.julia b/Task/Magic-constant/Julia/magic-constant.jl
similarity index 100%
rename from Task/Magic-constant/Julia/magic-constant.julia
rename to Task/Magic-constant/Julia/magic-constant.jl
diff --git a/Task/Magic-squares-of-doubly-even-order/EasyLang/magic-squares-of-doubly-even-order.easy b/Task/Magic-squares-of-doubly-even-order/EasyLang/magic-squares-of-doubly-even-order.easy
new file mode 100644
index 0000000000..c13991f0c6
--- /dev/null
+++ b/Task/Magic-squares-of-doubly-even-order/EasyLang/magic-squares-of-doubly-even-order.easy
@@ -0,0 +1,56 @@
+func[][] mkarr s .
+ len q[][] s
+ for i = 1 to s
+ len q[i][] s
+ .
+ return q[][]
+.
+func[][] mk_oms s .
+ q[][] = mkarr s
+ r = 1
+ c = 1 + s div 2
+ for p = 1 to s * s
+ q[r][c] = p
+ tc = c + 1
+ if tc > s
+ tc = 1
+ .
+ tr = r - 1
+ if tr < 1
+ tr = s
+ .
+ if q[tr][tc] <> 0
+ tc = c
+ tr = r + 1
+ .
+ c = tc
+ r = tr
+ .
+ return q[][]
+.
+func[][] mk_dems s .
+ q[][] = mkarr s
+ tmp[][] = [ [ 1 0 0 1 ] [ 0 1 1 0 ] [ 0 1 1 0 ] [ 1 0 0 1 ] ]
+ tot = s * s
+ for r = 1 to s
+ for c = 1 to s
+ sx = c mod 4
+ if sx < 1
+ sx = 4
+ .
+ sy = r mod 4
+ if sy < 1
+ sy = 4
+ .
+ if tmp[sy][sx] = 1
+ q[r][c] = n + 1
+ else
+ q[r][c] = tot - n
+ .
+ n += 1
+ .
+ .
+ return q[][]
+.
+numfmt 0 2
+print mk_dems 8
diff --git a/Task/Magic-squares-of-doubly-even-order/Elixir/magic-squares-of-doubly-even-order.elixir b/Task/Magic-squares-of-doubly-even-order/Elixir/magic-squares-of-doubly-even-order.ex
similarity index 100%
rename from Task/Magic-squares-of-doubly-even-order/Elixir/magic-squares-of-doubly-even-order.elixir
rename to Task/Magic-squares-of-doubly-even-order/Elixir/magic-squares-of-doubly-even-order.ex
diff --git a/Task/Magic-squares-of-doubly-even-order/Julia/magic-squares-of-doubly-even-order.julia b/Task/Magic-squares-of-doubly-even-order/Julia/magic-squares-of-doubly-even-order.jl
similarity index 100%
rename from Task/Magic-squares-of-doubly-even-order/Julia/magic-squares-of-doubly-even-order.julia
rename to Task/Magic-squares-of-doubly-even-order/Julia/magic-squares-of-doubly-even-order.jl
diff --git a/Task/Magic-squares-of-doubly-even-order/Kotlin/magic-squares-of-doubly-even-order.kotlin b/Task/Magic-squares-of-doubly-even-order/Kotlin/magic-squares-of-doubly-even-order.kts
similarity index 100%
rename from Task/Magic-squares-of-doubly-even-order/Kotlin/magic-squares-of-doubly-even-order.kotlin
rename to Task/Magic-squares-of-doubly-even-order/Kotlin/magic-squares-of-doubly-even-order.kts
diff --git a/Task/Magic-squares-of-doubly-even-order/Rust/magic-squares-of-doubly-even-order.rust b/Task/Magic-squares-of-doubly-even-order/Rust/magic-squares-of-doubly-even-order.rs
similarity index 100%
rename from Task/Magic-squares-of-doubly-even-order/Rust/magic-squares-of-doubly-even-order.rust
rename to Task/Magic-squares-of-doubly-even-order/Rust/magic-squares-of-doubly-even-order.rs
diff --git a/Task/Magic-squares-of-odd-order/Elixir/magic-squares-of-odd-order.elixir b/Task/Magic-squares-of-odd-order/Elixir/magic-squares-of-odd-order.ex
similarity index 100%
rename from Task/Magic-squares-of-odd-order/Elixir/magic-squares-of-odd-order.elixir
rename to Task/Magic-squares-of-odd-order/Elixir/magic-squares-of-odd-order.ex
diff --git a/Task/Magic-squares-of-odd-order/Julia/magic-squares-of-odd-order.julia b/Task/Magic-squares-of-odd-order/Julia/magic-squares-of-odd-order.jl
similarity index 100%
rename from Task/Magic-squares-of-odd-order/Julia/magic-squares-of-odd-order.julia
rename to Task/Magic-squares-of-odd-order/Julia/magic-squares-of-odd-order.jl
diff --git a/Task/Magic-squares-of-odd-order/Kotlin/magic-squares-of-odd-order.kotlin b/Task/Magic-squares-of-odd-order/Kotlin/magic-squares-of-odd-order.kts
similarity index 100%
rename from Task/Magic-squares-of-odd-order/Kotlin/magic-squares-of-odd-order.kotlin
rename to Task/Magic-squares-of-odd-order/Kotlin/magic-squares-of-odd-order.kts
diff --git a/Task/Magic-squares-of-odd-order/Rust/magic-squares-of-odd-order.rust b/Task/Magic-squares-of-odd-order/Rust/magic-squares-of-odd-order.rs
similarity index 100%
rename from Task/Magic-squares-of-odd-order/Rust/magic-squares-of-odd-order.rust
rename to Task/Magic-squares-of-odd-order/Rust/magic-squares-of-odd-order.rs
diff --git a/Task/Magic-squares-of-odd-order/V-(Vlang)/magic-squares-of-odd-order.v b/Task/Magic-squares-of-odd-order/V-(Vlang)/magic-squares-of-odd-order.v
new file mode 100644
index 0000000000..38a0b1e5a4
--- /dev/null
+++ b/Task/Magic-squares-of-odd-order/V-(Vlang)/magic-squares-of-odd-order.v
@@ -0,0 +1,12 @@
+fn main() {
+ mut n, mut x := 9, 0
+ println("the square order is : ${n}" + "\n")
+ for i in 1 .. n + 1 {
+ for j in 1 .. n + 1 {
+ x = (i * 2 - j + n - 1) % n * n + (i * 2 + j - 2) % n + 1
+ print(" ${x:2} ")
+ }
+ println("")
+ }
+ println("\n" + "the magic number is : ${n * (n * n+1) / 2}")
+}
diff --git a/Task/Magic-squares-of-singly-even-order/EasyLang/magic-squares-of-singly-even-order.easy b/Task/Magic-squares-of-singly-even-order/EasyLang/magic-squares-of-singly-even-order.easy
new file mode 100644
index 0000000000..6eaddd19df
--- /dev/null
+++ b/Task/Magic-squares-of-singly-even-order/EasyLang/magic-squares-of-singly-even-order.easy
@@ -0,0 +1,63 @@
+func[][] mkarr s .
+ len q[][] s
+ for i = 1 to s
+ len q[i][] s
+ .
+ return q[][]
+.
+func[][] mk_oms s .
+ q[][] = mkarr s
+ r = 1
+ c = 1 + s div 2
+ for p = 1 to s * s
+ q[r][c] = p
+ tc = c + 1
+ if tc > s
+ tc = 1
+ .
+ tr = r - 1
+ if tr < 1
+ tr = s
+ .
+ if q[tr][tc] <> 0
+ tc = c
+ tr = r + 1
+ .
+ c = tc
+ r = tr
+ .
+ return q[][]
+.
+func[][] mk_sems s .
+ q[][] = mkarr s
+ sh = s div 2
+ q4 = sh * sh
+ q2 = 2 * q4
+ q3 = 3 * q4
+ o[][] = mk_oms sh
+ for r = 1 to sh
+ for c = 1 to sh
+ q1 = o[r][c]
+ q[r][c] = q1
+ q[r + sh][c + sh] = q1 + q4
+ q[r][c + sh] = q1 + q2
+ q[r + sh][c] = q1 + q3
+ .
+ .
+ lc = sh div 2
+ rc = lc - 1
+ for r = 1 to sh
+ for c = 1 to s
+ if c <= lc or c > s - rc or (c = lc + 1 and r = lc + 1)
+ if c <> 1 or r <> lc + 1
+ t = q[r][c]
+ q[r][c] = q[r + sh][c]
+ q[r + sh][c] = t
+ .
+ .
+ .
+ .
+ return q[][]
+.
+numfmt 0 2
+print mk_sems 6
diff --git a/Task/Magic-squares-of-singly-even-order/Elixir/magic-squares-of-singly-even-order.elixir b/Task/Magic-squares-of-singly-even-order/Elixir/magic-squares-of-singly-even-order.ex
similarity index 100%
rename from Task/Magic-squares-of-singly-even-order/Elixir/magic-squares-of-singly-even-order.elixir
rename to Task/Magic-squares-of-singly-even-order/Elixir/magic-squares-of-singly-even-order.ex
diff --git a/Task/Magic-squares-of-singly-even-order/Julia/magic-squares-of-singly-even-order.julia b/Task/Magic-squares-of-singly-even-order/Julia/magic-squares-of-singly-even-order.jl
similarity index 100%
rename from Task/Magic-squares-of-singly-even-order/Julia/magic-squares-of-singly-even-order.julia
rename to Task/Magic-squares-of-singly-even-order/Julia/magic-squares-of-singly-even-order.jl
diff --git a/Task/Magic-squares-of-singly-even-order/Kotlin/magic-squares-of-singly-even-order.kotlin b/Task/Magic-squares-of-singly-even-order/Kotlin/magic-squares-of-singly-even-order.kts
similarity index 100%
rename from Task/Magic-squares-of-singly-even-order/Kotlin/magic-squares-of-singly-even-order.kotlin
rename to Task/Magic-squares-of-singly-even-order/Kotlin/magic-squares-of-singly-even-order.kts
diff --git a/Task/Magic-squares-of-singly-even-order/Rust/magic-squares-of-singly-even-order.rust b/Task/Magic-squares-of-singly-even-order/Rust/magic-squares-of-singly-even-order.rs
similarity index 100%
rename from Task/Magic-squares-of-singly-even-order/Rust/magic-squares-of-singly-even-order.rust
rename to Task/Magic-squares-of-singly-even-order/Rust/magic-squares-of-singly-even-order.rs
diff --git a/Task/Magnanimous-numbers/Delphi/magnanimous-numbers.delphi b/Task/Magnanimous-numbers/Delphi/magnanimous-numbers.pas
similarity index 100%
rename from Task/Magnanimous-numbers/Delphi/magnanimous-numbers.delphi
rename to Task/Magnanimous-numbers/Delphi/magnanimous-numbers.pas
diff --git a/Task/Magnanimous-numbers/Julia/magnanimous-numbers.julia b/Task/Magnanimous-numbers/Julia/magnanimous-numbers.jl
similarity index 100%
rename from Task/Magnanimous-numbers/Julia/magnanimous-numbers.julia
rename to Task/Magnanimous-numbers/Julia/magnanimous-numbers.jl
diff --git a/Task/Magnanimous-numbers/Rust/magnanimous-numbers.rust b/Task/Magnanimous-numbers/Rust/magnanimous-numbers.rs
similarity index 100%
rename from Task/Magnanimous-numbers/Rust/magnanimous-numbers.rust
rename to Task/Magnanimous-numbers/Rust/magnanimous-numbers.rs
diff --git a/Task/Main-step-of-GOST-28147-89/Java/main-step-of-gost-28147-89.java b/Task/Main-step-of-GOST-28147-89/Java/main-step-of-gost-28147-89.java
index ec768fdf8f..da8920981d 100644
--- a/Task/Main-step-of-GOST-28147-89/Java/main-step-of-gost-28147-89.java
+++ b/Task/Main-step-of-GOST-28147-89/Java/main-step-of-gost-28147-89.java
@@ -27,7 +27,8 @@ public final class MainStepGOST28147_89 {
String encryptedBinary = gost.gostAlgorithm(plainTextBinary, Cryptation.ENCRYPT);
// Display the encrypted text bytes and the encrypted text
- List encryptedChars = displayBytesFromBinary("The encrypted text bytes are: ", encryptedBinary);
+ List encryptedChars =
+ displayBytesFromBinary("The encrypted text bytes are: ", encryptedBinary);
String encryptedText = encryptedChars.stream().map(String::valueOf).collect(Collectors.joining());
System.out.println("The encrypted text is: \"" + encryptedText + "\"" + System.lineSeparator());
@@ -35,9 +36,11 @@ public final class MainStepGOST28147_89 {
String decryptedBinary = gost.gostAlgorithm(encryptedBinary, Cryptation.DECRYPT);
// Display the decrypted text bytes and the decrypted text
- List decryptedChars = displayBytesFromBinary("The decrypted text bytes are: ", decryptedBinary);
+ List decryptedChars =
+ displayBytesFromBinary("The decrypted text bytes are: ", decryptedBinary);
byte[] bytes = new byte[decryptedChars.size()];
- IntStream.range(0, decryptedChars.size()).forEach( i -> bytes[i] = (byte) decryptedChars.get(i).charValue() );
+ IntStream.range(0, decryptedChars.size())
+ .forEach( i -> bytes[i] = (byte) decryptedChars.get(i).charValue() );
System.out.println("The decrypted text is: \"" + new String(bytes) + "\"" + System.lineSeparator());
}
diff --git a/Task/Main-step-of-GOST-28147-89/Julia/main-step-of-gost-28147-89.julia b/Task/Main-step-of-GOST-28147-89/Julia/main-step-of-gost-28147-89.jl
similarity index 100%
rename from Task/Main-step-of-GOST-28147-89/Julia/main-step-of-gost-28147-89.julia
rename to Task/Main-step-of-GOST-28147-89/Julia/main-step-of-gost-28147-89.jl
diff --git a/Task/Main-step-of-GOST-28147-89/Kotlin/main-step-of-gost-28147-89.kotlin b/Task/Main-step-of-GOST-28147-89/Kotlin/main-step-of-gost-28147-89.kts
similarity index 100%
rename from Task/Main-step-of-GOST-28147-89/Kotlin/main-step-of-gost-28147-89.kotlin
rename to Task/Main-step-of-GOST-28147-89/Kotlin/main-step-of-gost-28147-89.kts
diff --git a/Task/Main-step-of-GOST-28147-89/Rust/main-step-of-gost-28147-89.rust b/Task/Main-step-of-GOST-28147-89/Rust/main-step-of-gost-28147-89.rs
similarity index 100%
rename from Task/Main-step-of-GOST-28147-89/Rust/main-step-of-gost-28147-89.rust
rename to Task/Main-step-of-GOST-28147-89/Rust/main-step-of-gost-28147-89.rs
diff --git a/Task/Make-directory-path/Delphi/make-directory-path.delphi b/Task/Make-directory-path/Delphi/make-directory-path.pas
similarity index 100%
rename from Task/Make-directory-path/Delphi/make-directory-path.delphi
rename to Task/Make-directory-path/Delphi/make-directory-path.pas
diff --git a/Task/Make-directory-path/Elixir/make-directory-path.elixir b/Task/Make-directory-path/Elixir/make-directory-path.ex
similarity index 100%
rename from Task/Make-directory-path/Elixir/make-directory-path.elixir
rename to Task/Make-directory-path/Elixir/make-directory-path.ex
diff --git a/Task/Make-directory-path/Julia/make-directory-path.julia b/Task/Make-directory-path/Julia/make-directory-path.jl
similarity index 100%
rename from Task/Make-directory-path/Julia/make-directory-path.julia
rename to Task/Make-directory-path/Julia/make-directory-path.jl
diff --git a/Task/Make-directory-path/Kotlin/make-directory-path.kotlin b/Task/Make-directory-path/Kotlin/make-directory-path.kts
similarity index 100%
rename from Task/Make-directory-path/Kotlin/make-directory-path.kotlin
rename to Task/Make-directory-path/Kotlin/make-directory-path.kts
diff --git a/Task/Make-directory-path/OCaml/make-directory-path.ocaml b/Task/Make-directory-path/OCaml/make-directory-path.ml
similarity index 100%
rename from Task/Make-directory-path/OCaml/make-directory-path.ocaml
rename to Task/Make-directory-path/OCaml/make-directory-path.ml
diff --git a/Task/Make-directory-path/Rust/make-directory-path.rust b/Task/Make-directory-path/Rust/make-directory-path.rs
similarity index 100%
rename from Task/Make-directory-path/Rust/make-directory-path.rust
rename to Task/Make-directory-path/Rust/make-directory-path.rs
diff --git a/Task/Man-or-boy-test/Crystal/man-or-boy-test.crystal b/Task/Man-or-boy-test/Crystal/man-or-boy-test.cr
similarity index 100%
rename from Task/Man-or-boy-test/Crystal/man-or-boy-test.crystal
rename to Task/Man-or-boy-test/Crystal/man-or-boy-test.cr
diff --git a/Task/Man-or-boy-test/Delphi/man-or-boy-test.delphi b/Task/Man-or-boy-test/Delphi/man-or-boy-test.pas
similarity index 100%
rename from Task/Man-or-boy-test/Delphi/man-or-boy-test.delphi
rename to Task/Man-or-boy-test/Delphi/man-or-boy-test.pas
diff --git a/Task/Man-or-boy-test/Julia/man-or-boy-test.julia b/Task/Man-or-boy-test/Julia/man-or-boy-test.jl
similarity index 100%
rename from Task/Man-or-boy-test/Julia/man-or-boy-test.julia
rename to Task/Man-or-boy-test/Julia/man-or-boy-test.jl
diff --git a/Task/Man-or-boy-test/Kotlin/man-or-boy-test.kotlin b/Task/Man-or-boy-test/Kotlin/man-or-boy-test.kts
similarity index 100%
rename from Task/Man-or-boy-test/Kotlin/man-or-boy-test.kotlin
rename to Task/Man-or-boy-test/Kotlin/man-or-boy-test.kts
diff --git a/Task/Man-or-boy-test/OCaml/man-or-boy-test.ocaml b/Task/Man-or-boy-test/OCaml/man-or-boy-test.ml
similarity index 100%
rename from Task/Man-or-boy-test/OCaml/man-or-boy-test.ocaml
rename to Task/Man-or-boy-test/OCaml/man-or-boy-test.ml
diff --git a/Task/Man-or-boy-test/Rust/man-or-boy-test-1.rust b/Task/Man-or-boy-test/Rust/man-or-boy-test-1.rs
similarity index 100%
rename from Task/Man-or-boy-test/Rust/man-or-boy-test-1.rust
rename to Task/Man-or-boy-test/Rust/man-or-boy-test-1.rs
diff --git a/Task/Man-or-boy-test/Rust/man-or-boy-test-2.rust b/Task/Man-or-boy-test/Rust/man-or-boy-test-2.rs
similarity index 100%
rename from Task/Man-or-boy-test/Rust/man-or-boy-test-2.rust
rename to Task/Man-or-boy-test/Rust/man-or-boy-test-2.rs
diff --git a/Task/Man-or-boy-test/Rust/man-or-boy-test-3.rust b/Task/Man-or-boy-test/Rust/man-or-boy-test-3.rs
similarity index 100%
rename from Task/Man-or-boy-test/Rust/man-or-boy-test-3.rust
rename to Task/Man-or-boy-test/Rust/man-or-boy-test-3.rs
diff --git a/Task/Man-or-boy-test/Scheme/man-or-boy-test.ss b/Task/Man-or-boy-test/Scheme/man-or-boy-test.scm
similarity index 100%
rename from Task/Man-or-boy-test/Scheme/man-or-boy-test.ss
rename to Task/Man-or-boy-test/Scheme/man-or-boy-test.scm
diff --git a/Task/Man-or-boy-test/Ursalang/man-or-boy-test.ursa b/Task/Man-or-boy-test/Ursalang/man-or-boy-test.ursa
new file mode 100644
index 0000000000..44c42cf055
--- /dev/null
+++ b/Task/Man-or-boy-test/Ursalang/man-or-boy-test.ursa
@@ -0,0 +1,14 @@
+let a = fn(k, x1, x2, x3, x4, x5) {
+ if k <= 0 {
+ x4() + x5()
+ } else {
+ var m = k
+ let b = fn() {
+ m := m - 1
+ a(m, b, x1, x2, x3, x4)
+ }
+ b()
+ }
+}
+
+print(a(10, fn () {1}, fn () {-1}, fn () {-1}, fn () {1}, fn () {0}))
diff --git a/Task/Mandelbrot-set/AArch64-Assembly/mandelbrot-set.aarch64 b/Task/Mandelbrot-set/AArch64-Assembly/mandelbrot-set.aarch64
new file mode 100644
index 0000000000..2ca9c6ab0f
--- /dev/null
+++ b/Task/Mandelbrot-set/AArch64-Assembly/mandelbrot-set.aarch64
@@ -0,0 +1,134 @@
+#include
+.globl main
+.section .text
+
+.macro NEWLINE
+ mov x0, #10
+ stp x9, x10, [sp, #-16]!
+ bl putchar
+ ldp x9, x10, [sp], 16
+.endm
+
+.macro PRINTCHAR p
+ mov x1, \p
+ mov x0, #64
+ sub x0, x0, x1
+ stp x9, x10, [sp, #-16]!
+ bl putchar
+ ldp x9, x10, [sp], 16
+.endm
+
+xsize .req x9
+xsize_w .req w9
+ysize .req x10
+ysize_w .req w10
+
+min_imag .req s8
+max_imag .req s9
+min_real .req s10
+max_real .req s9
+
+imag .req s11
+real .req s12
+
+step_x .req s13
+step_y .req s14
+
+zi .req s15
+zr .req s16
+
+a .req s17
+b .req s18
+
+ftemp_1 .req s19
+ftemp_2 .req s20
+
+y .req x19
+y_w .req w19
+x .req x20
+x_w .req w20
+n .req x21
+limit .req x22
+
+itemp_1 .req x23
+itemp_1w .req w23
+
+/*
+ redefining register names
+ for easier implementation
+*/
+
+main:
+ stp xzr, lr, [sp, #-16]!
+ stp d8, d9, [sp, #-16]!
+ stp d10, d11,[sp, #-16]!
+ stp d12, d13,[sp, #-16]!
+ stp d14, d15,[sp, #-16]!
+ stp x19, x20,[sp, #-16]!
+ stp x21, x22,[sp, #-16]!
+ stp x23, x24,[sp, #-16]!
+
+ mov xsize, #108
+ mov ysize, #72
+ mov limit, #32
+ fmov min_imag, #-1.0
+ fmov max_imag, #1.0
+ fmov min_real, #-2.0
+// fmov max_real #1.0
+
+ fsub step_x, max_real, min_real
+ scvtf ftemp_1, xsize_w
+ fdiv step_x, step_x, ftemp_1
+ fsub step_y, max_imag, min_imag
+ scvtf ftemp_1, ysize_w
+ fdiv step_y, step_y, ftemp_1
+ mov y, #0
+ 1:
+ cmp y, ysize
+ b.eq 20f
+ scvtf ftemp_1, y_w
+ fmadd imag, step_y, ftemp_1, min_imag
+ mov x, #0
+ 2:
+ cmp x, xsize
+ b.eq 15f
+ scvtf ftemp_1, x_w
+ fmadd real, step_y, ftemp_1, min_real
+ fmov zr, real
+ fmov zi, imag
+ mov n, #0
+ 3:
+ cmp n, limit
+ b.eq 10f
+ fmul a, zr, zr
+ fmul b, zi, zi
+ fadd ftemp_1, a, b
+ fmov ftemp_2, #4.0
+ fcmp ftemp_1, ftemp_2
+ b.gt 10f
+ fmul zi, zi, zr
+ fmov ftemp_2, #2.0
+ fmadd zi, zi, ftemp_2, imag
+ fsub zr, a, b
+ fadd zr, zr, real
+ add n, n, #1
+ b 3b
+ 10:
+ add x, x, #1
+ PRINTCHAR n
+ b 2b
+ 15:
+ add y, y, #1
+ NEWLINE
+ b 1b
+ 20:
+
+ ldp x23, x24,[sp], 16
+ ldp x21, x22,[sp], 16
+ ldp x19, x20,[sp], 16
+ ldp d14, d15,[sp], 16
+ ldp d12, d13,[sp], 16
+ ldp d10, d11,[sp], 16
+ ldp d8, d9, [sp], 16
+ ldp xzr, lr, [sp], 16
+ ret
diff --git a/Task/Mandelbrot-set/EasyLang/mandelbrot-set.easy b/Task/Mandelbrot-set/EasyLang/mandelbrot-set.easy
index d11005b78e..d5e23ca019 100644
--- a/Task/Mandelbrot-set/EasyLang/mandelbrot-set.easy
+++ b/Task/Mandelbrot-set/EasyLang/mandelbrot-set.easy
@@ -1,5 +1,3 @@
-# Mandelbrot
-#
res = 4
maxiter = 200
#
diff --git a/Task/Mandelbrot-set/Elixir/mandelbrot-set.elixir b/Task/Mandelbrot-set/Elixir/mandelbrot-set.ex
similarity index 100%
rename from Task/Mandelbrot-set/Elixir/mandelbrot-set.elixir
rename to Task/Mandelbrot-set/Elixir/mandelbrot-set.ex
diff --git a/Task/Mandelbrot-set/J/mandelbrot-set-1.j b/Task/Mandelbrot-set/J/mandelbrot-set-1.j
index 18a1ce4df1..f747810a1f 100644
--- a/Task/Mandelbrot-set/J/mandelbrot-set-1.j
+++ b/Task/Mandelbrot-set/J/mandelbrot-set-1.j
@@ -1 +1 @@
-mcf=. (<: 2:)@|@(] ((*:@] + [)^:((<: 2:)@|@])^:1000) 0:) NB. 1000 iterations test
+mcf=. [: (<: 2:)@| ] ((*:@] + [)^:((<: 2:)@|@])^:1000) 0: NB. 1000 iterations test
diff --git a/Task/Mandelbrot-set/J/mandelbrot-set-3.j b/Task/Mandelbrot-set/J/mandelbrot-set-3.j
index 52740ff704..2ecce89a61 100644
--- a/Task/Mandelbrot-set/J/mandelbrot-set-3.j
+++ b/Task/Mandelbrot-set/J/mandelbrot-set-3.j
@@ -1 +1 @@
- viewmat mcf "0 @ domain (_2j_1 1j1) ; 0.1 NB. Complex interval and resolution
+viewmat mcf "0 @ domain (_2j_1 1j1) ; 0.1 NB. Complex interval and resolution
diff --git a/Task/Mandelbrot-set/Julia/mandelbrot-set-1.julia b/Task/Mandelbrot-set/Julia/mandelbrot-set-1.jl
similarity index 100%
rename from Task/Mandelbrot-set/Julia/mandelbrot-set-1.julia
rename to Task/Mandelbrot-set/Julia/mandelbrot-set-1.jl
diff --git a/Task/Mandelbrot-set/Julia/mandelbrot-set-2.julia b/Task/Mandelbrot-set/Julia/mandelbrot-set-2.jl
similarity index 100%
rename from Task/Mandelbrot-set/Julia/mandelbrot-set-2.julia
rename to Task/Mandelbrot-set/Julia/mandelbrot-set-2.jl
diff --git a/Task/Mandelbrot-set/Julia/mandelbrot-set-3.julia b/Task/Mandelbrot-set/Julia/mandelbrot-set-3.jl
similarity index 100%
rename from Task/Mandelbrot-set/Julia/mandelbrot-set-3.julia
rename to Task/Mandelbrot-set/Julia/mandelbrot-set-3.jl
diff --git a/Task/Mandelbrot-set/Julia/mandelbrot-set-4.julia b/Task/Mandelbrot-set/Julia/mandelbrot-set-4.jl
similarity index 100%
rename from Task/Mandelbrot-set/Julia/mandelbrot-set-4.julia
rename to Task/Mandelbrot-set/Julia/mandelbrot-set-4.jl
diff --git a/Task/Mandelbrot-set/Julia/mandelbrot-set-5.julia b/Task/Mandelbrot-set/Julia/mandelbrot-set-5.jl
similarity index 92%
rename from Task/Mandelbrot-set/Julia/mandelbrot-set-5.julia
rename to Task/Mandelbrot-set/Julia/mandelbrot-set-5.jl
index 92ddc5c85b..8ca557e392 100644
--- a/Task/Mandelbrot-set/Julia/mandelbrot-set-5.julia
+++ b/Task/Mandelbrot-set/Julia/mandelbrot-set-5.jl
@@ -32,7 +32,8 @@ heatmap(D .^ 1.0, c=:bone_1)
savefig("Mandelbrot_normal_map_1.png")
N = abs.(Z) .> 2 # advanced normal map effect using higher derivatives (distance estimation)
-U = Z[N] .* dZ[N] .* ((1 .+ log.(abs.(Z[N]))) .* conj.(dZ[N] .^ 2) .- log.(abs.(Z[N])) .* conj.(Z[N] .* ddZ[N]))
+H, K, L = abs.(Z[N] ./ dZ[N]), abs.(dZ[N] ./ ddZ[N]), log.(abs.(Z[N]))
+U = Z[N] ./ dZ[N] .- (H ./ K) .^ 2 .* L ./ (1 .+ L) .* dZ[N] ./ ddZ[N]
U, v = U ./ abs.(U), exp(direction / 180 * pi * im) # unit normal vectors and light vector
D[N] = max.((real.(U) .* real(v) .+ imag.(U) .* imag(v) .+ height) ./ (1 + height), 0)
diff --git a/Task/Mandelbrot-set/Julia/mandelbrot-set-6.julia b/Task/Mandelbrot-set/Julia/mandelbrot-set-6.jl
similarity index 100%
rename from Task/Mandelbrot-set/Julia/mandelbrot-set-6.julia
rename to Task/Mandelbrot-set/Julia/mandelbrot-set-6.jl
diff --git a/Task/Mandelbrot-set/Julia/mandelbrot-set-7.julia b/Task/Mandelbrot-set/Julia/mandelbrot-set-7.jl
similarity index 100%
rename from Task/Mandelbrot-set/Julia/mandelbrot-set-7.julia
rename to Task/Mandelbrot-set/Julia/mandelbrot-set-7.jl
diff --git a/Task/Mandelbrot-set/Kotlin/mandelbrot-set.kotlin b/Task/Mandelbrot-set/Kotlin/mandelbrot-set.kts
similarity index 100%
rename from Task/Mandelbrot-set/Kotlin/mandelbrot-set.kotlin
rename to Task/Mandelbrot-set/Kotlin/mandelbrot-set.kts
diff --git a/Task/Mandelbrot-set/OCaml/mandelbrot-set.ocaml b/Task/Mandelbrot-set/OCaml/mandelbrot-set.ml
similarity index 100%
rename from Task/Mandelbrot-set/OCaml/mandelbrot-set.ocaml
rename to Task/Mandelbrot-set/OCaml/mandelbrot-set.ml
diff --git a/Task/Mandelbrot-set/Python/mandelbrot-set-5.py b/Task/Mandelbrot-set/Python/mandelbrot-set-5.py
index 80841dd274..e240ab78e6 100644
--- a/Task/Mandelbrot-set/Python/mandelbrot-set-5.py
+++ b/Task/Mandelbrot-set/Python/mandelbrot-set-5.py
@@ -22,7 +22,7 @@ plt.imshow(S ** 0.1, cmap=plt.cm.twilight_shifted, origin="lower")
plt.savefig("Mandelbrot_set_1.png", dpi=200)
N = abs(Z) >= r # normalized iteration count
-T[N] = T[N] - np.log2(np.log(np.abs(Z[N])) / np.log(r))
+T[N] = T[N] - np.log2(np.log(abs(Z[N])) / np.log(r))
plt.imshow(T ** 0.1, cmap=plt.cm.twilight_shifted, origin="lower")
plt.savefig("Mandelbrot_set_2.png", dpi=200)
diff --git a/Task/Mandelbrot-set/Python/mandelbrot-set-6.py b/Task/Mandelbrot-set/Python/mandelbrot-set-6.py
index 36cd656b0d..8173f62c10 100644
--- a/Task/Mandelbrot-set/Python/mandelbrot-set-6.py
+++ b/Task/Mandelbrot-set/Python/mandelbrot-set-6.py
@@ -23,7 +23,7 @@ for k in range(n):
N = abs(Z) >= r # basic normal map effect and stripe average coloring (potential function)
P, Q = S[N] / T[N], (S[N] + np.sin(density * np.angle(Z[N]))) / (T[N] + 1)
-U, V = Z[N] / dZ[N], 1 + (np.log2(np.log(np.abs(Z[N])) / np.log(r)) * (P - Q) + Q) * intensity
+U, V = Z[N] / dZ[N], 1 + (np.log2(np.log(abs(Z[N])) / np.log(r)) * (P - Q) + Q) * intensity
U, v = U / abs(U), np.exp(direction / 180 * np.pi * 1j) # unit normal vectors and light vector
D[N] = np.maximum((U.real * v.real + U.imag * v.imag + V * height) / (1 + height), 0)
@@ -31,7 +31,8 @@ plt.imshow(D ** 1.0, cmap=plt.cm.bone, origin="lower")
plt.savefig("Mandelbrot_normal_map_1.png", dpi=200)
N = abs(Z) > 2 # advanced normal map effect using higher derivatives (distance estimation)
-U = Z[N] * dZ[N] * ((1 + np.log(abs(Z[N]))) * np.conj(dZ[N] ** 2) - np.log(abs(Z[N])) * np.conj(Z[N] * ddZ[N]))
+H, K, L = abs(Z[N] / dZ[N]), abs(dZ[N] / ddZ[N]), np.log(abs(Z[N]))
+U = Z[N] / dZ[N] - (H / K) ** 2 * L / (1 + L) * dZ[N] / ddZ[N]
U, v = U / abs(U), np.exp(direction / 180 * np.pi * 1j) # unit normal vectors and light vector
D[N] = np.maximum((U.real * v.real + U.imag * v.imag + height) / (1 + height), 0)
diff --git a/Task/Mandelbrot-set/Rust/mandelbrot-set.rust b/Task/Mandelbrot-set/Rust/mandelbrot-set.rs
similarity index 100%
rename from Task/Mandelbrot-set/Rust/mandelbrot-set.rust
rename to Task/Mandelbrot-set/Rust/mandelbrot-set.rs
diff --git a/Task/Mandelbrot-set/Scheme/mandelbrot-set-1.ss b/Task/Mandelbrot-set/Scheme/mandelbrot-set-1.scm
similarity index 100%
rename from Task/Mandelbrot-set/Scheme/mandelbrot-set-1.ss
rename to Task/Mandelbrot-set/Scheme/mandelbrot-set-1.scm
diff --git a/Task/Mandelbrot-set/Scheme/mandelbrot-set-2.ss b/Task/Mandelbrot-set/Scheme/mandelbrot-set-2.scm
similarity index 100%
rename from Task/Mandelbrot-set/Scheme/mandelbrot-set-2.ss
rename to Task/Mandelbrot-set/Scheme/mandelbrot-set-2.scm
diff --git a/Task/Map-range/Elixir/map-range.elixir b/Task/Map-range/Elixir/map-range.ex
similarity index 100%
rename from Task/Map-range/Elixir/map-range.elixir
rename to Task/Map-range/Elixir/map-range.ex
diff --git a/Task/Map-range/Euphoria/map-range.euphoria b/Task/Map-range/Euphoria/map-range.ex
similarity index 100%
rename from Task/Map-range/Euphoria/map-range.euphoria
rename to Task/Map-range/Euphoria/map-range.ex
diff --git a/Task/Map-range/Julia/map-range.julia b/Task/Map-range/Julia/map-range.jl
similarity index 100%
rename from Task/Map-range/Julia/map-range.julia
rename to Task/Map-range/Julia/map-range.jl
diff --git a/Task/Map-range/Kotlin/map-range.kotlin b/Task/Map-range/Kotlin/map-range.kts
similarity index 100%
rename from Task/Map-range/Kotlin/map-range.kotlin
rename to Task/Map-range/Kotlin/map-range.kts
diff --git a/Task/Map-range/OCaml/map-range-1.ocaml b/Task/Map-range/OCaml/map-range-1.ml
similarity index 100%
rename from Task/Map-range/OCaml/map-range-1.ocaml
rename to Task/Map-range/OCaml/map-range-1.ml
diff --git a/Task/Map-range/OCaml/map-range-2.ocaml b/Task/Map-range/OCaml/map-range-2.ml
similarity index 100%
rename from Task/Map-range/OCaml/map-range-2.ocaml
rename to Task/Map-range/OCaml/map-range-2.ml
diff --git a/Task/Map-range/Rust/map-range.rust b/Task/Map-range/Rust/map-range.rs
similarity index 100%
rename from Task/Map-range/Rust/map-range.rust
rename to Task/Map-range/Rust/map-range.rs
diff --git a/Task/Mastermind/EasyLang/mastermind.easy b/Task/Mastermind/EasyLang/mastermind.easy
index c7155969ca..0ad14ab4a5 100644
--- a/Task/Mastermind/EasyLang/mastermind.easy
+++ b/Task/Mastermind/EasyLang/mastermind.easy
@@ -1,3 +1,5 @@
+# Mastermind:w90
+#
col[] = [ 802 990 171 229 950 808 ]
len code[] 4
len guess[] 4
@@ -100,7 +102,7 @@ on timer
proc new . .
init_vars
for i to 4
- code[i] = randint 6
+ code[i] = random 6
.
color 531
move 10 10
diff --git a/Task/Mastermind/Julia/mastermind.julia b/Task/Mastermind/Julia/mastermind.jl
similarity index 100%
rename from Task/Mastermind/Julia/mastermind.julia
rename to Task/Mastermind/Julia/mastermind.jl
diff --git a/Task/Mastermind/Kotlin/mastermind.kotlin b/Task/Mastermind/Kotlin/mastermind.kts
similarity index 100%
rename from Task/Mastermind/Kotlin/mastermind.kotlin
rename to Task/Mastermind/Kotlin/mastermind.kts
diff --git a/Task/Mastermind/Rust/mastermind.rust b/Task/Mastermind/Rust/mastermind.rs
similarity index 100%
rename from Task/Mastermind/Rust/mastermind.rust
rename to Task/Mastermind/Rust/mastermind.rs
diff --git a/Task/Matrix-chain-multiplication/EasyLang/matrix-chain-multiplication.easy b/Task/Matrix-chain-multiplication/EasyLang/matrix-chain-multiplication.easy
new file mode 100644
index 0000000000..091dd80778
--- /dev/null
+++ b/Task/Matrix-chain-multiplication/EasyLang/matrix-chain-multiplication.easy
@@ -0,0 +1,41 @@
+global m[][] s[][] dims[] .
+proc mat_chain_order . .
+ n = len dims[] - 1
+ m[][] = [ ] ; len m[][] n
+ s[][] = [ ] ; len s[][] n
+ for i = 1 to n
+ len m[i][] n
+ len s[i][] n
+ .
+ for lng = 2 to n
+ for i = 1 to n - lng + 1
+ j = i + lng - 1
+ m[i][j] = 1 / 0
+ for k = i to j - 1
+ cost = m[i][k] + m[k + 1][j] + dims[i] * dims[k + 1] * dims[j + 1]
+ if cost < m[i][j]
+ m[i][j] = cost
+ s[i][j] = k
+ .
+ .
+ .
+ .
+.
+func$ path a b .
+ if a = b
+ return strchar (64 + a)
+ .
+ return "(" & path a s[a][b] & path (s[a][b] + 1) b & ")"
+.
+proc pr_chain_order . .
+ print "Order : " & path 1 len s[][]
+.
+dims[][] = [ [ 5 6 3 1 ] [ 1 5 25 30 100 70 2 1 100 250 1 1000 2 ] [ 1000 1 500 12 1 700 2500 3 2 5 14 10 ] ]
+for i to len dims[][]
+ dims[] = dims[i][]
+ print "Dims : " & dims[]
+ mat_chain_order
+ pr_chain_order
+ print "Cost : " & m[1][len s[][]]
+ print ""
+.
diff --git a/Task/Matrix-chain-multiplication/Julia/matrix-chain-multiplication-1.julia b/Task/Matrix-chain-multiplication/Julia/matrix-chain-multiplication-1.jl
similarity index 100%
rename from Task/Matrix-chain-multiplication/Julia/matrix-chain-multiplication-1.julia
rename to Task/Matrix-chain-multiplication/Julia/matrix-chain-multiplication-1.jl
diff --git a/Task/Matrix-chain-multiplication/Julia/matrix-chain-multiplication-2.julia b/Task/Matrix-chain-multiplication/Julia/matrix-chain-multiplication-2.jl
similarity index 100%
rename from Task/Matrix-chain-multiplication/Julia/matrix-chain-multiplication-2.julia
rename to Task/Matrix-chain-multiplication/Julia/matrix-chain-multiplication-2.jl
diff --git a/Task/Matrix-chain-multiplication/Kotlin/matrix-chain-multiplication.kotlin b/Task/Matrix-chain-multiplication/Kotlin/matrix-chain-multiplication.kts
similarity index 100%
rename from Task/Matrix-chain-multiplication/Kotlin/matrix-chain-multiplication.kotlin
rename to Task/Matrix-chain-multiplication/Kotlin/matrix-chain-multiplication.kts
diff --git a/Task/Matrix-chain-multiplication/Rust/matrix-chain-multiplication.rust b/Task/Matrix-chain-multiplication/Rust/matrix-chain-multiplication.rs
similarity index 100%
rename from Task/Matrix-chain-multiplication/Rust/matrix-chain-multiplication.rust
rename to Task/Matrix-chain-multiplication/Rust/matrix-chain-multiplication.rs
diff --git a/Task/Matrix-digital-rain/Julia/matrix-digital-rain.julia b/Task/Matrix-digital-rain/Julia/matrix-digital-rain.jl
similarity index 100%
rename from Task/Matrix-digital-rain/Julia/matrix-digital-rain.julia
rename to Task/Matrix-digital-rain/Julia/matrix-digital-rain.jl
diff --git a/Task/Matrix-digital-rain/Rust/matrix-digital-rain-1.rust b/Task/Matrix-digital-rain/Rust/matrix-digital-rain-1.rs
similarity index 100%
rename from Task/Matrix-digital-rain/Rust/matrix-digital-rain-1.rust
rename to Task/Matrix-digital-rain/Rust/matrix-digital-rain-1.rs
diff --git a/Task/Matrix-digital-rain/Rust/matrix-digital-rain-2.rust b/Task/Matrix-digital-rain/Rust/matrix-digital-rain-2.rs
similarity index 100%
rename from Task/Matrix-digital-rain/Rust/matrix-digital-rain-2.rust
rename to Task/Matrix-digital-rain/Rust/matrix-digital-rain-2.rs
diff --git a/Task/Matrix-exponentiation-operator/Delphi/matrix-exponentiation-operator.delphi b/Task/Matrix-exponentiation-operator/Delphi/matrix-exponentiation-operator.pas
similarity index 100%
rename from Task/Matrix-exponentiation-operator/Delphi/matrix-exponentiation-operator.delphi
rename to Task/Matrix-exponentiation-operator/Delphi/matrix-exponentiation-operator.pas
diff --git a/Task/Matrix-exponentiation-operator/EasyLang/matrix-exponentiation-operator.easy b/Task/Matrix-exponentiation-operator/EasyLang/matrix-exponentiation-operator.easy
new file mode 100644
index 0000000000..0153f1a8c5
--- /dev/null
+++ b/Task/Matrix-exponentiation-operator/EasyLang/matrix-exponentiation-operator.easy
@@ -0,0 +1,25 @@
+func[][] mmul m1[][] m2[][] .
+ for i to len m1[][]
+ r[][] &= [ ]
+ for j = 1 to len m2[1][]
+ r[i][] &= 0
+ for k to len m2[][]
+ r[i][j] += m1[i][k] * m2[k][j]
+ .
+ .
+ .
+ return r[][]
+.
+func[][] mexp m[][] e .
+ n = len m[][]
+ len r[][] n
+ for i to n
+ len r[i][] n
+ r[i][i] = 1
+ .
+ for i to e
+ r[][] = mmul r[][] m[][]
+ .
+ return r[][]
+.
+print mexp [ [ 4 3 ] [ 2 1 ] ] 3
diff --git a/Task/Matrix-exponentiation-operator/Julia/matrix-exponentiation-operator.julia b/Task/Matrix-exponentiation-operator/Julia/matrix-exponentiation-operator.jl
similarity index 100%
rename from Task/Matrix-exponentiation-operator/Julia/matrix-exponentiation-operator.julia
rename to Task/Matrix-exponentiation-operator/Julia/matrix-exponentiation-operator.jl
diff --git a/Task/Matrix-exponentiation-operator/Kotlin/matrix-exponentiation-operator.kotlin b/Task/Matrix-exponentiation-operator/Kotlin/matrix-exponentiation-operator.kts
similarity index 100%
rename from Task/Matrix-exponentiation-operator/Kotlin/matrix-exponentiation-operator.kotlin
rename to Task/Matrix-exponentiation-operator/Kotlin/matrix-exponentiation-operator.kts
diff --git a/Task/Matrix-exponentiation-operator/OCaml/matrix-exponentiation-operator-1.ocaml b/Task/Matrix-exponentiation-operator/OCaml/matrix-exponentiation-operator-1.ml
similarity index 100%
rename from Task/Matrix-exponentiation-operator/OCaml/matrix-exponentiation-operator-1.ocaml
rename to Task/Matrix-exponentiation-operator/OCaml/matrix-exponentiation-operator-1.ml
diff --git a/Task/Matrix-exponentiation-operator/OCaml/matrix-exponentiation-operator-2.ocaml b/Task/Matrix-exponentiation-operator/OCaml/matrix-exponentiation-operator-2.ml
similarity index 100%
rename from Task/Matrix-exponentiation-operator/OCaml/matrix-exponentiation-operator-2.ocaml
rename to Task/Matrix-exponentiation-operator/OCaml/matrix-exponentiation-operator-2.ml
diff --git a/Task/Matrix-exponentiation-operator/PascalABC.NET/matrix-exponentiation-operator.pas b/Task/Matrix-exponentiation-operator/PascalABC.NET/matrix-exponentiation-operator.pas
new file mode 100644
index 0000000000..483be0fb87
--- /dev/null
+++ b/Task/Matrix-exponentiation-operator/PascalABC.NET/matrix-exponentiation-operator.pas
@@ -0,0 +1,19 @@
+uses NumLibABC;
+
+function operator **(m: Matrix; exp: integer): Matrix;
+extensionmethod;
+begin
+ Assert(m.ColCount = m.RowCount, 'Matrix must be square.');
+ Assert(exp >= 0, 'Negative exponents not supported');
+ result := Matrix.Diag(m.RowCount, 1);
+ loop exp do result := result * m;
+end;
+
+begin
+ var A := new Matrix(2, 2, 1, 1, 1, 0);
+ 'Original: '.Println;
+ A.Println;
+ A := A ** 10;
+ 'Raised to the power of 10: '.Println;
+ A.Println;
+end.
diff --git a/Task/Matrix-exponentiation-operator/Rust/matrix-exponentiation-operator.rust b/Task/Matrix-exponentiation-operator/Rust/matrix-exponentiation-operator.rs
similarity index 100%
rename from Task/Matrix-exponentiation-operator/Rust/matrix-exponentiation-operator.rust
rename to Task/Matrix-exponentiation-operator/Rust/matrix-exponentiation-operator.rs
diff --git a/Task/Matrix-exponentiation-operator/Scheme/matrix-exponentiation-operator.ss b/Task/Matrix-exponentiation-operator/Scheme/matrix-exponentiation-operator.scm
similarity index 100%
rename from Task/Matrix-exponentiation-operator/Scheme/matrix-exponentiation-operator.ss
rename to Task/Matrix-exponentiation-operator/Scheme/matrix-exponentiation-operator.scm
diff --git a/Task/Matrix-multiplication/Delphi/matrix-multiplication.delphi b/Task/Matrix-multiplication/Delphi/matrix-multiplication.pas
similarity index 100%
rename from Task/Matrix-multiplication/Delphi/matrix-multiplication.delphi
rename to Task/Matrix-multiplication/Delphi/matrix-multiplication.pas
diff --git a/Task/Matrix-multiplication/Elixir/matrix-multiplication.elixir b/Task/Matrix-multiplication/Elixir/matrix-multiplication.ex
similarity index 100%
rename from Task/Matrix-multiplication/Elixir/matrix-multiplication.elixir
rename to Task/Matrix-multiplication/Elixir/matrix-multiplication.ex
diff --git a/Task/Matrix-multiplication/Euphoria/matrix-multiplication.euphoria b/Task/Matrix-multiplication/Euphoria/matrix-multiplication.ex
similarity index 100%
rename from Task/Matrix-multiplication/Euphoria/matrix-multiplication.euphoria
rename to Task/Matrix-multiplication/Euphoria/matrix-multiplication.ex
diff --git a/Task/Matrix-multiplication/Julia/matrix-multiplication.julia b/Task/Matrix-multiplication/Julia/matrix-multiplication.jl
similarity index 100%
rename from Task/Matrix-multiplication/Julia/matrix-multiplication.julia
rename to Task/Matrix-multiplication/Julia/matrix-multiplication.jl
diff --git a/Task/Matrix-multiplication/Kotlin/matrix-multiplication.kotlin b/Task/Matrix-multiplication/Kotlin/matrix-multiplication.kts
similarity index 100%
rename from Task/Matrix-multiplication/Kotlin/matrix-multiplication.kotlin
rename to Task/Matrix-multiplication/Kotlin/matrix-multiplication.kts
diff --git a/Task/Matrix-multiplication/NewLISP/matrix-multiplication-1.l b/Task/Matrix-multiplication/NewLISP/matrix-multiplication-1.l
new file mode 100644
index 0000000000..cb2b35e890
--- /dev/null
+++ b/Task/Matrix-multiplication/NewLISP/matrix-multiplication-1.l
@@ -0,0 +1,6 @@
+(multiply
+ '((1 2) (3 4))
+ '((-3 -8 3) (-2 1 4)))
+
+((-7 -6 11)
+ (-17 -20 25))
diff --git a/Task/Matrix-multiplication/NewLISP/matrix-multiplication-2.l b/Task/Matrix-multiplication/NewLISP/matrix-multiplication-2.l
new file mode 100644
index 0000000000..cc6a293c2e
--- /dev/null
+++ b/Task/Matrix-multiplication/NewLISP/matrix-multiplication-2.l
@@ -0,0 +1,33 @@
+(multiply
+ (array 2 2 '(1 2 3 4))
+ (array 2 3 '(-3 -8 3 -2 1 4)))
+
+((-7 -6 11)
+ (-17 -20 25))
+
+(multiply
+ (array 3 2 '(1 2 3 4 3 6))
+ (array 2 3 '(-3 -8 3 -2 1 4)))
+
+((-7 -6 11)
+ (-17 -20 25)
+ (-21 -18 33))
+
+
+(multiply
+ (array 3 3 '(1 2 3 4 5 6 7 8 9))
+ (array 3 3 '(2 2 2 5 5 5 7 7 7)))
+
+((33 33 33)
+ (75 75 75)
+ (117 117 117))
+
+
+(multiply
+ (array 4 2 '(1 2 3 4 5 6 7 8))
+ (array 2 3 '(1 2 3 4 5 6)))
+
+((9 12 15)
+ (19 26 33)
+ (29 40 51)
+ (39 54 69))
diff --git a/Task/Matrix-multiplication/OCaml/matrix-multiplication-1.ocaml b/Task/Matrix-multiplication/OCaml/matrix-multiplication-1.ml
similarity index 100%
rename from Task/Matrix-multiplication/OCaml/matrix-multiplication-1.ocaml
rename to Task/Matrix-multiplication/OCaml/matrix-multiplication-1.ml
diff --git a/Task/Matrix-multiplication/OCaml/matrix-multiplication-2.ocaml b/Task/Matrix-multiplication/OCaml/matrix-multiplication-2.ml
similarity index 100%
rename from Task/Matrix-multiplication/OCaml/matrix-multiplication-2.ocaml
rename to Task/Matrix-multiplication/OCaml/matrix-multiplication-2.ml
diff --git a/Task/Matrix-multiplication/PascalABC.NET/matrix-multiplication.pas b/Task/Matrix-multiplication/PascalABC.NET/matrix-multiplication.pas
new file mode 100644
index 0000000000..cf84afb6d4
--- /dev/null
+++ b/Task/Matrix-multiplication/PascalABC.NET/matrix-multiplication.pas
@@ -0,0 +1,13 @@
+uses NumLibABC;
+
+begin
+ var A := new Matrix(4, 2, 1, 2, 3, 4, 5, 6, 7, 8);
+ var B := new Matrix(2, 3, 1, 2, 3, 4, 5, 6);
+ var C := A * B;
+ 'Matrix A:'.Println;
+ A.Println(2, 0);
+ 'Matrix B:'.Println;
+ B.Println(2, 0);
+ 'Matrix A * B:'.Println;
+ C.Println(3, 0);
+end.
diff --git a/Task/Matrix-multiplication/Rust/matrix-multiplication.rust b/Task/Matrix-multiplication/Rust/matrix-multiplication.rs
similarity index 100%
rename from Task/Matrix-multiplication/Rust/matrix-multiplication.rust
rename to Task/Matrix-multiplication/Rust/matrix-multiplication.rs
diff --git a/Task/Matrix-multiplication/Scheme/matrix-multiplication.ss b/Task/Matrix-multiplication/Scheme/matrix-multiplication.scm
similarity index 100%
rename from Task/Matrix-multiplication/Scheme/matrix-multiplication.ss
rename to Task/Matrix-multiplication/Scheme/matrix-multiplication.scm
diff --git a/Task/Matrix-transposition/Elixir/matrix-transposition.elixir b/Task/Matrix-transposition/Elixir/matrix-transposition.ex
similarity index 100%
rename from Task/Matrix-transposition/Elixir/matrix-transposition.elixir
rename to Task/Matrix-transposition/Elixir/matrix-transposition.ex
diff --git a/Task/Matrix-transposition/Euphoria/matrix-transposition.euphoria b/Task/Matrix-transposition/Euphoria/matrix-transposition.ex
similarity index 100%
rename from Task/Matrix-transposition/Euphoria/matrix-transposition.euphoria
rename to Task/Matrix-transposition/Euphoria/matrix-transposition.ex
diff --git a/Task/Matrix-transposition/Julia/matrix-transposition.julia b/Task/Matrix-transposition/Julia/matrix-transposition.jl
similarity index 100%
rename from Task/Matrix-transposition/Julia/matrix-transposition.julia
rename to Task/Matrix-transposition/Julia/matrix-transposition.jl
diff --git a/Task/Matrix-transposition/Kotlin/matrix-transposition.kotlin b/Task/Matrix-transposition/Kotlin/matrix-transposition.kts
similarity index 100%
rename from Task/Matrix-transposition/Kotlin/matrix-transposition.kotlin
rename to Task/Matrix-transposition/Kotlin/matrix-transposition.kts
diff --git a/Task/Matrix-transposition/Nu/matrix-transposition.nu b/Task/Matrix-transposition/Nu/matrix-transposition.nu
new file mode 100644
index 0000000000..02163c2401
--- /dev/null
+++ b/Task/Matrix-transposition/Nu/matrix-transposition.nu
@@ -0,0 +1,5 @@
+def 'matrix transpose' [] {
+ each { into record } | values
+}
+
+[[1 5 9] [2 6 10] [3 7 11] [4 8 12]] | matrix transpose | to nuon
diff --git a/Task/Matrix-transposition/OCaml/matrix-transposition-1.ocaml b/Task/Matrix-transposition/OCaml/matrix-transposition-1.ml
similarity index 100%
rename from Task/Matrix-transposition/OCaml/matrix-transposition-1.ocaml
rename to Task/Matrix-transposition/OCaml/matrix-transposition-1.ml
diff --git a/Task/Matrix-transposition/OCaml/matrix-transposition-2.ocaml b/Task/Matrix-transposition/OCaml/matrix-transposition-2.ml
similarity index 100%
rename from Task/Matrix-transposition/OCaml/matrix-transposition-2.ocaml
rename to Task/Matrix-transposition/OCaml/matrix-transposition-2.ml
diff --git a/Task/Matrix-transposition/PascalABC.NET/matrix-transposition.pas b/Task/Matrix-transposition/PascalABC.NET/matrix-transposition.pas
new file mode 100644
index 0000000000..63a2b0d315
--- /dev/null
+++ b/Task/Matrix-transposition/PascalABC.NET/matrix-transposition.pas
@@ -0,0 +1,13 @@
+uses NumLibABC;
+
+begin
+ var A := new Matrix(4, 3,
+ 1, 2, 3,
+ 4, 5, 6,
+ 7, 8, 9,
+ 10, 11, 12);
+ 'Original:'.Println;
+ A.Println(3, 0);
+ 'Transposed:'.Println;
+ A.Transpose.Println(3, 0);
+end.
diff --git a/Task/Matrix-transposition/Rust/matrix-transposition-1.rust b/Task/Matrix-transposition/Rust/matrix-transposition-1.rs
similarity index 100%
rename from Task/Matrix-transposition/Rust/matrix-transposition-1.rust
rename to Task/Matrix-transposition/Rust/matrix-transposition-1.rs
diff --git a/Task/Matrix-transposition/Rust/matrix-transposition-2.rust b/Task/Matrix-transposition/Rust/matrix-transposition-2.rs
similarity index 100%
rename from Task/Matrix-transposition/Rust/matrix-transposition-2.rust
rename to Task/Matrix-transposition/Rust/matrix-transposition-2.rs
diff --git a/Task/Matrix-transposition/SETL/matrix-transposition.setl b/Task/Matrix-transposition/SETL/matrix-transposition.setl
new file mode 100644
index 0000000000..b2cee55b9e
--- /dev/null
+++ b/Task/Matrix-transposition/SETL/matrix-transposition.setl
@@ -0,0 +1,10 @@
+program matrix_transposition;
+ mat := [[1,2,3,4], [5,6,7,8], [9,10,11,12]];
+ print(mat);
+ print(' -> ');
+ print(transpose(mat));
+
+ proc transpose(m);
+ return [[m(y)(x) : y in [1..#m]] : x in [1..#m(1)]];
+ end proc;
+end program;
diff --git a/Task/Matrix-transposition/Scheme/matrix-transposition.ss b/Task/Matrix-transposition/Scheme/matrix-transposition.scm
similarity index 100%
rename from Task/Matrix-transposition/Scheme/matrix-transposition.ss
rename to Task/Matrix-transposition/Scheme/matrix-transposition.scm
diff --git a/Task/Matrix-transposition/Tailspin/matrix-transposition.tailspin b/Task/Matrix-transposition/Tailspin/matrix-transposition-1.tailspin
similarity index 100%
rename from Task/Matrix-transposition/Tailspin/matrix-transposition.tailspin
rename to Task/Matrix-transposition/Tailspin/matrix-transposition-1.tailspin
diff --git a/Task/Matrix-transposition/Tailspin/matrix-transposition-2.tailspin b/Task/Matrix-transposition/Tailspin/matrix-transposition-2.tailspin
new file mode 100644
index 0000000000..f75b08a52f
--- /dev/null
+++ b/Task/Matrix-transposition/Tailspin/matrix-transposition-2.tailspin
@@ -0,0 +1,26 @@
+transpose templates
+ a is $;
+ $a(1; .. as j; -> $a(..; $j)) !
+end transpose
+
+printMatrix templates
+ formatN templates
+ @ set [];
+ $ -> !#
+ '$@ -> $::length~..2 -> ' ';$@(..:-1)...;' !
+ when <|1..> do ..|@ set $ mod 10; $ ~/ 10 -> !#
+ end formatN
+ $... -> '|$($::first) -> formatN;$(~..)... -> ', $ -> formatN;';|
+' !
+end printMatrix
+
+m is [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]];
+'before:
+' !
+$m -> printMatrix !
+
+mT is $m -> transpose;
+'
+transposed:
+' !
+$mT -> printMatrix !
diff --git a/Task/Maximum-triangle-path-sum/Elixir/maximum-triangle-path-sum.elixir b/Task/Maximum-triangle-path-sum/Elixir/maximum-triangle-path-sum.ex
similarity index 100%
rename from Task/Maximum-triangle-path-sum/Elixir/maximum-triangle-path-sum.elixir
rename to Task/Maximum-triangle-path-sum/Elixir/maximum-triangle-path-sum.ex
diff --git a/Task/Maximum-triangle-path-sum/Julia/maximum-triangle-path-sum.julia b/Task/Maximum-triangle-path-sum/Julia/maximum-triangle-path-sum.jl
similarity index 100%
rename from Task/Maximum-triangle-path-sum/Julia/maximum-triangle-path-sum.julia
rename to Task/Maximum-triangle-path-sum/Julia/maximum-triangle-path-sum.jl
diff --git a/Task/Maximum-triangle-path-sum/Kotlin/maximum-triangle-path-sum.kotlin b/Task/Maximum-triangle-path-sum/Kotlin/maximum-triangle-path-sum.kts
similarity index 100%
rename from Task/Maximum-triangle-path-sum/Kotlin/maximum-triangle-path-sum.kotlin
rename to Task/Maximum-triangle-path-sum/Kotlin/maximum-triangle-path-sum.kts
diff --git a/Task/Maximum-triangle-path-sum/Rust/maximum-triangle-path-sum.rust b/Task/Maximum-triangle-path-sum/Rust/maximum-triangle-path-sum.rs
similarity index 100%
rename from Task/Maximum-triangle-path-sum/Rust/maximum-triangle-path-sum.rust
rename to Task/Maximum-triangle-path-sum/Rust/maximum-triangle-path-sum.rs
diff --git a/Task/Mayan-calendar/Julia/mayan-calendar.julia b/Task/Mayan-calendar/Julia/mayan-calendar.jl
similarity index 100%
rename from Task/Mayan-calendar/Julia/mayan-calendar.julia
rename to Task/Mayan-calendar/Julia/mayan-calendar.jl
diff --git a/Task/Mayan-numerals/Julia/mayan-numerals-1.julia b/Task/Mayan-numerals/Julia/mayan-numerals-1.jl
similarity index 100%
rename from Task/Mayan-numerals/Julia/mayan-numerals-1.julia
rename to Task/Mayan-numerals/Julia/mayan-numerals-1.jl
diff --git a/Task/Mayan-numerals/Julia/mayan-numerals-2.julia b/Task/Mayan-numerals/Julia/mayan-numerals-2.jl
similarity index 100%
rename from Task/Mayan-numerals/Julia/mayan-numerals-2.julia
rename to Task/Mayan-numerals/Julia/mayan-numerals-2.jl
diff --git a/Task/Mayan-numerals/Rust/mayan-numerals.rust b/Task/Mayan-numerals/Rust/mayan-numerals.rs
similarity index 100%
rename from Task/Mayan-numerals/Rust/mayan-numerals.rust
rename to Task/Mayan-numerals/Rust/mayan-numerals.rs
diff --git a/Task/Maze-generation/Delphi/maze-generation.delphi b/Task/Maze-generation/Delphi/maze-generation.pas
similarity index 100%
rename from Task/Maze-generation/Delphi/maze-generation.delphi
rename to Task/Maze-generation/Delphi/maze-generation.pas
diff --git a/Task/Maze-generation/EasyLang/maze-generation.easy b/Task/Maze-generation/EasyLang/maze-generation.easy
index 043b229e65..cc5c352028 100644
--- a/Task/Maze-generation/EasyLang/maze-generation.easy
+++ b/Task/Maze-generation/EasyLang/maze-generation.easy
@@ -24,7 +24,7 @@ proc m_maze pos . .
show_maze
d[] = [ 1 2 3 4 ]
for i = 4 downto 1
- d = randint i
+ d = random i
dir = offs[d[d]]
d[d] = d[i]
if m[pos + dir] = 1 and m[pos + 2 * dir] = 1
@@ -44,7 +44,7 @@ proc make_maze . .
m[n * i - n + 1] = 2
m[n * n - n + i] = 2
.
- h = 2 * randint 15 - n + n * 2 * randint 15
+ h = 2 * random 15 - n + n * 2 * random 15
m_maze h
m[endpos] = 0
endpos += n
diff --git a/Task/Maze-generation/Elixir/maze-generation.elixir b/Task/Maze-generation/Elixir/maze-generation.ex
similarity index 100%
rename from Task/Maze-generation/Elixir/maze-generation.elixir
rename to Task/Maze-generation/Elixir/maze-generation.ex
diff --git a/Task/Maze-generation/FutureBasic/maze-generation.basic b/Task/Maze-generation/FutureBasic/maze-generation.basic
index b112b74bdc..4013335896 100644
--- a/Task/Maze-generation/FutureBasic/maze-generation.basic
+++ b/Task/Maze-generation/FutureBasic/maze-generation.basic
@@ -57,7 +57,7 @@ end fn
void local fn DrawMaze
long r, c, x = _mgn, y = _mgn, value
- pen 2,, NSLineCapStyleRound
+ pen 2, fn ColorText, NSLineCapStyleRound
for r = 0 to _rows - 1
for c = 0 to _cols - 1
diff --git a/Task/Maze-generation/Julia/maze-generation-1.julia b/Task/Maze-generation/Julia/maze-generation-1.jl
similarity index 100%
rename from Task/Maze-generation/Julia/maze-generation-1.julia
rename to Task/Maze-generation/Julia/maze-generation-1.jl
diff --git a/Task/Maze-generation/Julia/maze-generation-2.julia b/Task/Maze-generation/Julia/maze-generation-2.jl
similarity index 100%
rename from Task/Maze-generation/Julia/maze-generation-2.julia
rename to Task/Maze-generation/Julia/maze-generation-2.jl
diff --git a/Task/Maze-generation/Kotlin/maze-generation.kotlin b/Task/Maze-generation/Kotlin/maze-generation.kts
similarity index 100%
rename from Task/Maze-generation/Kotlin/maze-generation.kotlin
rename to Task/Maze-generation/Kotlin/maze-generation.kts
diff --git a/Task/Maze-generation/OCaml/maze-generation.ocaml b/Task/Maze-generation/OCaml/maze-generation.ml
similarity index 100%
rename from Task/Maze-generation/OCaml/maze-generation.ocaml
rename to Task/Maze-generation/OCaml/maze-generation.ml
diff --git a/Task/Maze-generation/Rust/maze-generation.rust b/Task/Maze-generation/Rust/maze-generation.rs
similarity index 100%
rename from Task/Maze-generation/Rust/maze-generation.rust
rename to Task/Maze-generation/Rust/maze-generation.rs
diff --git a/Task/Maze-solving/Delphi/maze-solving.delphi b/Task/Maze-solving/Delphi/maze-solving.pas
similarity index 100%
rename from Task/Maze-solving/Delphi/maze-solving.delphi
rename to Task/Maze-solving/Delphi/maze-solving.pas
diff --git a/Task/Maze-solving/EasyLang/maze-solving.easy b/Task/Maze-solving/EasyLang/maze-solving.easy
index 29daa66062..52f27f223c 100644
--- a/Task/Maze-solving/EasyLang/maze-solving.easy
+++ b/Task/Maze-solving/EasyLang/maze-solving.easy
@@ -23,7 +23,7 @@ proc m_maze pos . .
show_maze
d[] = [ 1 2 3 4 ]
for i = 4 downto 1
- d = randint i
+ d = random i
dir = offs[d[d]]
d[d] = d[i]
if m[pos + dir] = 1 and m[pos + 2 * dir] = 1
@@ -43,7 +43,7 @@ proc make_maze . .
m[n * i - n + 1] = 2
m[n * n - n + i] = 2
.
- h = 2 * randint 15 - n + n * 2 * randint 15
+ h = 2 * random 15 - n + n * 2 * random 15
m_maze h
m[endpos] = 0
.
@@ -68,7 +68,7 @@ proc solve dir0 pos . .
found = 1
return
.
- of = randint 4 - 1
+ of = random 4 - 1
for h = 1 to 4
dir = (h + of) mod1 4
posn = pos + offs[dir]
diff --git a/Task/Maze-solving/FreeBASIC/maze-solving.basic b/Task/Maze-solving/FreeBASIC/maze-solving.basic
new file mode 100644
index 0000000000..9971576799
--- /dev/null
+++ b/Task/Maze-solving/FreeBASIC/maze-solving.basic
@@ -0,0 +1,95 @@
+Const MazeWidth = 11
+Const MazeHeight = 9
+Const MazeCell = 50
+
+Dim Shared dstx As Integer = MazeWidth - 1
+Dim Shared dsty As Integer = 0
+
+Screenres MazeWidth * MazeCell, MazeHeight * MazeCell, 32
+Windowtitle "Maze solving"
+
+Sub Cell(Maze() As Integer, Byval x As Integer, Byval y As Integer, Byval w As Integer, Byval h As Integer, Byval s As Integer)
+ Dim As Integer i, p, q, r
+ Maze(x, y) Or= &H40
+ r = Rnd * 4
+ For i = r To r + 3
+ Select Case i Mod 4
+ Case 0: p = x - 1 : q = y
+ Case 1: p = x + 1 : q = y
+ Case 2: p = x : q = y - 1
+ Case 3: p = x : q = y + 1
+ End Select
+ If p >= 0 And p < w And q >= 0 And q < h And Maze(p, q) < &H40 Then
+ If p > x Then Maze(p, q) Or= 1 : Line (p * s, y * s + 4) - (p * s, (y + 1) * s - 4), Rgb(0, 0, 0)
+ If q > y Then Maze(p, q) Or= 2 : Line (x * s + 4, q * s) - ((x + 1) * s - 4, q * s), Rgb(0, 0, 0)
+ If x > p Then Maze(x, y) Or= 1 : Line (x * s, y * s + 4) - (x * s, (y + 1) * s - 4), Rgb(0, 0, 0)
+ If y > q Then Maze(x, y) Or= 2 : Line (x * s + 4, y * s) - ((x + 1) * s - 4, y * s), Rgb(0, 0, 0)
+ Cell Maze(), p, q, w, h, s
+ End If
+ Next
+End Sub
+
+Sub GenerateMaze(Maze() As Integer, Byval w As Integer, Byval h As Integer, Byval s As Integer)
+ Dim As Integer x, y
+ Redim Maze(w, h)
+ For y = 0 To h - 1
+ Line (0, y * s) - (w * s, y * s), Rgb(255, 255, 255)
+ Next
+ For x = 0 To w - 1
+ Line (x * s, 0) - (x * s, h * s), Rgb(255, 255, 255)
+ Next
+ Cell Maze(), Rnd * w, Rnd * h, w, h, s
+End Sub
+
+Sub SolveMaze(Path() As Integer, Maze() As Integer, Byval x As Integer, Byval y As Integer, Byval dstx As Integer, Byval dsty As Integer, Byval s As Integer)
+ Dim As Integer h, i, n, p, q, w
+ w = Ubound(Maze, 1)
+ h = Ubound(Maze, 2)
+ Redim Path(w * h, 1)
+ Maze(x, y) Or= &H80
+ Do
+ For i = 0 To 3
+ Select Case i
+ Case 0: p = x - 1 : q = y
+ Case 1: p = x + 1 : q = y
+ Case 2: p = x : q = y - 1
+ Case 3: p = x : q = y + 1
+ End Select
+ If p >= 0 And p < w And q >= 0 And q < h And Maze(p, q) < &H80 Then
+ If p > x And Maze(p, q) And 1 Then Exit For
+ If q > y And Maze(p, q) And 2 Then Exit For
+ If x > p And Maze(x, y) And 1 Then Exit For
+ If y > q And Maze(x, y) And 2 Then Exit For
+ End If
+ Next
+ If i < 4 Then
+ Maze(p, q) Or= &H80
+ Path(n, 0) = x
+ Path(n, 1) = y
+ Line ((x + 0.5) * s, (y + 0.5) * s) - ((p + 0.5) * s, (q + 0.5) * s), Rgb(255, 0, 0), , &b0001111111111100
+ n += 1
+ Else
+ If n > 0 Then
+ n -= 1
+ p = Path(n, 0)
+ q = Path(n, 1)
+ Line ((x + 0.5) * s, (y + 0.5) * s) - ((p + 0.5) * s, (q + 0.5) * s), Rgb(0, 0, 0)
+ End If
+ End If
+ x = p
+ y = q
+ Sleep 200
+ Loop Until x = dstx And y = dsty Or Inkey <> ""
+ Path(n, 0) = x
+ Path(n, 1) = y
+End Sub
+
+Dim Maze() As Integer
+Dim Path() As Integer
+
+Randomize Timer
+GenerateMaze(Maze(), MazeWidth, MazeHeight, MazeCell)
+SolveMaze(Path(), Maze(), 0, MazeHeight - 1, MazeWidth - 1, 0, MazeCell)
+Windowtitle "Maze solving ** RESOLVED **"
+
+Sleep
diff --git a/Task/Maze-solving/Julia/maze-solving.julia b/Task/Maze-solving/Julia/maze-solving.jl
similarity index 100%
rename from Task/Maze-solving/Julia/maze-solving.julia
rename to Task/Maze-solving/Julia/maze-solving.jl
diff --git a/Task/Maze-solving/Kotlin/maze-solving.kotlin b/Task/Maze-solving/Kotlin/maze-solving.kts
similarity index 100%
rename from Task/Maze-solving/Kotlin/maze-solving.kotlin
rename to Task/Maze-solving/Kotlin/maze-solving.kts
diff --git a/Task/Maze-solving/Rust/maze-solving.rust b/Task/Maze-solving/Rust/maze-solving.rs
similarity index 100%
rename from Task/Maze-solving/Rust/maze-solving.rust
rename to Task/Maze-solving/Rust/maze-solving.rs
diff --git a/Task/McNuggets-problem/Elixir/mcnuggets-problem.elixir b/Task/McNuggets-problem/Elixir/mcnuggets-problem.ex
similarity index 100%
rename from Task/McNuggets-problem/Elixir/mcnuggets-problem.elixir
rename to Task/McNuggets-problem/Elixir/mcnuggets-problem.ex
diff --git a/Task/McNuggets-problem/Julia/mcnuggets-problem.julia b/Task/McNuggets-problem/Julia/mcnuggets-problem.jl
similarity index 100%
rename from Task/McNuggets-problem/Julia/mcnuggets-problem.julia
rename to Task/McNuggets-problem/Julia/mcnuggets-problem.jl
diff --git a/Task/McNuggets-problem/Kotlin/mcnuggets-problem.kotlin b/Task/McNuggets-problem/Kotlin/mcnuggets-problem.kts
similarity index 100%
rename from Task/McNuggets-problem/Kotlin/mcnuggets-problem.kotlin
rename to Task/McNuggets-problem/Kotlin/mcnuggets-problem.kts
diff --git a/Task/McNuggets-problem/Rust/mcnuggets-problem.rust b/Task/McNuggets-problem/Rust/mcnuggets-problem.rs
similarity index 100%
rename from Task/McNuggets-problem/Rust/mcnuggets-problem.rust
rename to Task/McNuggets-problem/Rust/mcnuggets-problem.rs
diff --git a/Task/McNuggets-problem/Tailspin/mcnuggets-problem.tailspin b/Task/McNuggets-problem/Tailspin/mcnuggets-problem-1.tailspin
similarity index 100%
rename from Task/McNuggets-problem/Tailspin/mcnuggets-problem.tailspin
rename to Task/McNuggets-problem/Tailspin/mcnuggets-problem-1.tailspin
diff --git a/Task/McNuggets-problem/Tailspin/mcnuggets-problem-2.tailspin b/Task/McNuggets-problem/Tailspin/mcnuggets-problem-2.tailspin
new file mode 100644
index 0000000000..5d7ba2b4f9
--- /dev/null
+++ b/Task/McNuggets-problem/Tailspin/mcnuggets-problem-2.tailspin
@@ -0,0 +1,10 @@
+largestNonMcNuggetNumber templates
+ @ set { largest: 0, mcNuggetNumbers: [1..$+20 -> 0] };
+ @(mcNuggetNumbers:; [6,9,20]) set 1..3 -> 1;
+ 1..$ -> ! #
+ $@(largest:) !
+ when <|?($@(mcNuggetNumbers:; $) matches <|=0>)> do @(largest:) set $;
+ otherwise @(mcNuggetNumbers:; [$ + 6, $ + 9, $ + 20]) set 1..3 -> 1;
+end largestNonMcNuggetNumber
+
+100 -> largestNonMcNuggetNumber !
diff --git a/Task/Median-filter/Delphi/median-filter.delphi b/Task/Median-filter/Delphi/median-filter.pas
similarity index 100%
rename from Task/Median-filter/Delphi/median-filter.delphi
rename to Task/Median-filter/Delphi/median-filter.pas
diff --git a/Task/Median-filter/Julia/median-filter.julia b/Task/Median-filter/Julia/median-filter.jl
similarity index 100%
rename from Task/Median-filter/Julia/median-filter.julia
rename to Task/Median-filter/Julia/median-filter.jl
diff --git a/Task/Median-filter/Kotlin/median-filter.kotlin b/Task/Median-filter/Kotlin/median-filter.kts
similarity index 100%
rename from Task/Median-filter/Kotlin/median-filter.kotlin
rename to Task/Median-filter/Kotlin/median-filter.kts
diff --git a/Task/Median-filter/OCaml/median-filter-1.ocaml b/Task/Median-filter/OCaml/median-filter-1.ml
similarity index 100%
rename from Task/Median-filter/OCaml/median-filter-1.ocaml
rename to Task/Median-filter/OCaml/median-filter-1.ml
diff --git a/Task/Median-filter/OCaml/median-filter-2.ocaml b/Task/Median-filter/OCaml/median-filter-2.ml
similarity index 100%
rename from Task/Median-filter/OCaml/median-filter-2.ocaml
rename to Task/Median-filter/OCaml/median-filter-2.ml
diff --git a/Task/Meissel-Mertens-constant/ALGOL-W/meissel-mertens-constant.alg b/Task/Meissel-Mertens-constant/ALGOL-W/meissel-mertens-constant.alg
new file mode 100644
index 0000000000..7b15f0668f
--- /dev/null
+++ b/Task/Meissel-Mertens-constant/ALGOL-W/meissel-mertens-constant.alg
@@ -0,0 +1,54 @@
+begin % compute an approximation to the Meissel-Mertens constant %
+ integer MAX_PRIME;
+ MAX_PRIME := 10000000;
+ begin
+ logical array primes ( 0 :: MAX_PRIME );
+ begin % construct a sieve of odd primes %
+ integer i, ip;
+ for i := 1 until MAX_PRIME do primes( i ) := true;
+ ip := 3;
+ i := 1;
+ while i + ip <= MAX_PRIME do begin
+ if primes( i ) then begin
+ for s := i + ip step ip until MAX_PRIME do primes( s ) := false
+ end if_primes__i ;
+ ip := ip + 2;
+ i := i + 1
+ end while_i_plus_ip_le_MAX_PRIME
+ end;
+ begin % sum the reciprocals of the primes %
+ integer pCount, lastP, p, p10;
+ long real sum, eulersConstant;
+ procedure showProgress ;
+ write( s_w := 0, i_w := 8
+ , r_format := "A", r_w := 14, r_d := 12
+ , "after ", pCount, " primes, the approximation is: "
+ , ( sum + eulersConstant ), ", last prime considered: "
+ , i_w := 1
+ , lastP
+ );
+ pCount := 1;
+ lastP := 0;
+ sum := longLn( 0.5 ) + 0.5;
+ p := 1;
+ p10 := 10;
+ % Euler's constant from the wikipedia, truncated for long real %
+ eulersConstant := 0.5772156649015328606 % 0651209008240243104215933593992 %;
+ for i := 1 until MAX_PRIME do begin
+ p := p + 2;
+ if primes( i ) then begin
+ long real rp;
+ rp := 1 / long p;
+ sum := sum + longLn( 1 - rp ) + rp;
+ pCount := pCount + 1;
+ lastP := p;
+ if pCount = p10 then begin
+ showProgress;
+ p10 := if p10 < 1000000 THEN p10 * 10 else p10 + 1000000
+ end if_pCount_eq_p10
+ end if_primes__i
+ end for_i ;
+ showProgress
+ end
+ end
+end.
diff --git a/Task/Meissel-Mertens-constant/C++/meissel-mertens-constant.cpp b/Task/Meissel-Mertens-constant/C++/meissel-mertens-constant.cpp
index 4d668b0a41..de0964343f 100644
--- a/Task/Meissel-Mertens-constant/C++/meissel-mertens-constant.cpp
+++ b/Task/Meissel-Mertens-constant/C++/meissel-mertens-constant.cpp
@@ -26,8 +26,8 @@ std::vector list_prime_reciprocals(const int32_t& limit) {
}
int main() {
- std::vector prime_reciprocals = list_prime_reciprocals(100'000'000);
- const double euler = 0.577'215'664'901'532'861;
+ std::vector prime_reciprocals = list_prime_reciprocals(100000000);
+ const double euler = 0.577215664901532861;
double sum = 0.0;
for ( double reciprocal : prime_reciprocals ) {
sum += reciprocal + log(1.0 - reciprocal);
diff --git a/Task/Meissel-Mertens-constant/Delphi/meissel-mertens-constant.delphi b/Task/Meissel-Mertens-constant/Delphi/meissel-mertens-constant.pas
similarity index 100%
rename from Task/Meissel-Mertens-constant/Delphi/meissel-mertens-constant.delphi
rename to Task/Meissel-Mertens-constant/Delphi/meissel-mertens-constant.pas
diff --git a/Task/Meissel-Mertens-constant/Julia/meissel-mertens-constant.julia b/Task/Meissel-Mertens-constant/Julia/meissel-mertens-constant.jl
similarity index 100%
rename from Task/Meissel-Mertens-constant/Julia/meissel-mertens-constant.julia
rename to Task/Meissel-Mertens-constant/Julia/meissel-mertens-constant.jl
diff --git a/Task/Meissel-Mertens-constant/REXX/meissel-mertens-constant.rexx b/Task/Meissel-Mertens-constant/REXX/meissel-mertens-constant.rexx
new file mode 100644
index 0000000000..42ff9bd545
--- /dev/null
+++ b/Task/Meissel-Mertens-constant/REXX/meissel-mertens-constant.rexx
@@ -0,0 +1,66 @@
+include Settings
+
+say version; say 'Meissel-Mertens constant'; say
+arg n
+if n = '' then
+ n = 16
+numeric digits n
+fact. = 0
+call Time('r'); a = BruteForce(); e = Format(Time('e'),,3)
+say 'BruteForce' a '('e 'seconds)'
+call Time('r'); a = UsingSieve(); e = Format(Time('e'),,3)
+say 'UsingSieve' a '('e 'seconds)'
+call Time('r'); a = Analytic(); e = Format(Time('e'),,3)
+say 'Analytic ' a '('e 'seconds)'
+call Time('r'); a = TrueValue(); e = Format(Time('e'),,3)
+say 'True value' a '('e 'seconds)'
+exit
+
+BruteForce:
+procedure expose glob.
+numeric digits Digits()+2
+y = 0.5-Ln(2)
+do n = 3 by 2 to 1000000
+ if IsPrime(n) then do
+ q = 1/n; t = Ln(1-q)+q; y = y+t
+ end
+end
+y = Euler()+y
+numeric digits Digits()-2
+return y+0
+
+UsingSieve:
+procedure expose glob. prim.
+numeric digits Digits()+2
+n = Primes(1000000); y = 0
+do i = 1 to n
+ q = 1/prim.prime.i; t = Ln(1-q)+q; y = y+t
+end
+y = Euler()+y
+numeric digits Digits()-2
+return y+0
+
+Analytic:
+procedure expose glob. fact.
+numeric digits Digits()+2
+y = 0; v = 0
+do n = 2 to 1000
+ t = Moebius(n) * Ln(Zeta(n)) / n
+ if t <> 0 then do
+ y = y+t
+ if y = v then
+ leave
+ v = y
+ end
+end
+y = Euler()+y
+numeric digits Digits()-2
+return y+0
+
+TrueValue:
+procedure
+return 0.261497212847642783755426838608695859051566648261199206192064213924924510897368209714142631434246651051617+0
+
+include Constants
+include Functions
+include Numbers
diff --git a/Task/Memory-allocation/Julia/memory-allocation.julia b/Task/Memory-allocation/Julia/memory-allocation.jl
similarity index 100%
rename from Task/Memory-allocation/Julia/memory-allocation.julia
rename to Task/Memory-allocation/Julia/memory-allocation.jl
diff --git a/Task/Memory-allocation/Kotlin/memory-allocation.kotlin b/Task/Memory-allocation/Kotlin/memory-allocation.kts
similarity index 100%
rename from Task/Memory-allocation/Kotlin/memory-allocation.kotlin
rename to Task/Memory-allocation/Kotlin/memory-allocation.kts
diff --git a/Task/Memory-allocation/Rust/memory-allocation.rust b/Task/Memory-allocation/Rust/memory-allocation.rs
similarity index 100%
rename from Task/Memory-allocation/Rust/memory-allocation.rust
rename to Task/Memory-allocation/Rust/memory-allocation.rs
diff --git a/Task/Memory-layout-of-a-data-structure/Delphi/memory-layout-of-a-data-structure.delphi b/Task/Memory-layout-of-a-data-structure/Delphi/memory-layout-of-a-data-structure.pas
similarity index 100%
rename from Task/Memory-layout-of-a-data-structure/Delphi/memory-layout-of-a-data-structure.delphi
rename to Task/Memory-layout-of-a-data-structure/Delphi/memory-layout-of-a-data-structure.pas
diff --git a/Task/Memory-layout-of-a-data-structure/Julia/memory-layout-of-a-data-structure.julia b/Task/Memory-layout-of-a-data-structure/Julia/memory-layout-of-a-data-structure.jl
similarity index 100%
rename from Task/Memory-layout-of-a-data-structure/Julia/memory-layout-of-a-data-structure.julia
rename to Task/Memory-layout-of-a-data-structure/Julia/memory-layout-of-a-data-structure.jl
diff --git a/Task/Memory-layout-of-a-data-structure/Kotlin/memory-layout-of-a-data-structure.kotlin b/Task/Memory-layout-of-a-data-structure/Kotlin/memory-layout-of-a-data-structure.kts
similarity index 100%
rename from Task/Memory-layout-of-a-data-structure/Kotlin/memory-layout-of-a-data-structure.kotlin
rename to Task/Memory-layout-of-a-data-structure/Kotlin/memory-layout-of-a-data-structure.kts
diff --git a/Task/Memory-layout-of-a-data-structure/OCaml/memory-layout-of-a-data-structure.ocaml b/Task/Memory-layout-of-a-data-structure/OCaml/memory-layout-of-a-data-structure.ml
similarity index 100%
rename from Task/Memory-layout-of-a-data-structure/OCaml/memory-layout-of-a-data-structure.ocaml
rename to Task/Memory-layout-of-a-data-structure/OCaml/memory-layout-of-a-data-structure.ml
diff --git a/Task/Menu/AArch64-Assembly/menu.aarch64 b/Task/Menu/AArch64-Assembly/menu.aarch64
new file mode 100644
index 0000000000..790529acbc
--- /dev/null
+++ b/Task/Menu/AArch64-Assembly/menu.aarch64
@@ -0,0 +1,258 @@
+/* ARM assembly AARCH64 Raspberry PI 3B */
+/* program menu164.s */
+
+/*******************************************/
+/* Constantes */
+/*******************************************/
+/* for this file see task include a file in language AArch64 assembly*/
+.include "../includeConstantesARM64.inc"
+
+.equ BUFFERSIZE, 2000
+/*******************************************/
+/* Macros */
+/*******************************************/
+//.include "../../ficmacros64.inc" // for developer debugging
+
+
+/*******************************************/
+/* Initialized data */
+/*******************************************/
+.data
+szMessDebutPgm: .asciz "Program 64 bits start. \n"
+szCarriageReturn: .asciz "\n"
+szMessFinOK: .asciz "Program normal end. \n"
+szMessError: .asciz "\nError Buffer too small!!!\n"
+
+szChoose: .asciz "\nMake your choise: "
+szMessErrorNum: .asciz "Error : number do not exists!!\n"
+szMesschoose: .asciz "\nYou have chosen: "
+szLigne1: .asciz "fee fie"
+szLigne2: .asciz "huff and puff"
+szLigne3: .asciz "mirror mirror"
+szLigne4: .asciz "tick tock"
+
+tabMenu: .quad szLigne1
+ .quad szLigne2
+ .quad szLigne3
+ .quad szLigne4
+.equ NBLIGNES, (. - tabMenu ) / 8
+/*******************************************/
+/* UnInitialized data */
+/*******************************************/
+.bss
+.align 4
+sBuffer: .skip BUFFERSIZE
+sBuffex1: .skip BUFFERSIZE
+/*******************************************/
+/* code section */
+/*******************************************/
+.text
+.global main
+main:
+ ldr x0,qAdrszMessDebutPgm
+ bl affichageMess
+1:
+ ldr x0,qAdrtabMenu // display menu
+ ldr x1,qAdrsBuffer
+ bl displayMenu
+ mov x5,x0
+ ldr x0,qAdrszChoose // display string
+ bl affichageMess
+ bl keyboardInput
+ sub x0,x0,#'0' // input control
+ cmp x0,#0
+ ble error
+ cmp x0,x5
+ bge error
+ sub x4,x0,#1 // compute index choose string
+ ldr x0,qAdrszMesschoose
+ bl affichageMess
+ ldr x1,qAdrtabMenu // menu
+ ldr x0,[x1,x4,lsl #3] // load line address
+ bl affichageMess // and display
+ ldr x0,qAdrszCarriageReturn
+ bl affichageMess
+ ldr x0,qAdrszCarriageReturn
+ bl affichageMess
+ b 1b // loop
+error:
+ ldr x0,qAdrszMessErrorNum
+ bl affichageMess
+ b 1b
+
+
+
+ ldr x0,qAdrszMessFinOK
+ bl affichageMess
+ b 100f
+99:
+ ldr x0,qAdrszMessError // error
+ bl affichageMess
+ mov x0, #1
+100: // standard end of the program
+ mov x0, #0 // return code
+ mov x8,EXIT
+ svc 0 // perform system call
+qAdrsBuffer: .quad sBuffer
+qAdrszChoose: .quad szChoose
+qAdrszMessDebutPgm: .quad szMessDebutPgm
+qAdrszMessFinOK: .quad szMessFinOK
+qAdrszCarriageReturn: .quad szCarriageReturn
+qAdrszMessError: .quad szMessError
+qAdrszMessErrorNum: .quad szMessErrorNum
+qAdrszMesschoose: .quad szMesschoose
+/******************************************************************/
+/* display menu */
+/******************************************************************/
+/* r0 contains menu address */
+/* r1 contains buffer address */
+/* r0 return index max */
+displayMenu:
+ stp x1,lr,[sp,-16]! // save registers
+ stp x2,x3,[sp,-16]!
+ stp x4,x5,[sp,-16]!
+ stp x6,x7,[sp,-16]!
+ stp x8,x9,[sp,-16]!
+ mov x8,x0
+ mov x9,x1
+ bl searchMaxSize // compute max size line
+ mov x7,x0 // maxi size
+ mov x5,#0
+1:
+ ldr x6,[x8,x5,lsl #3] // load line address
+ mov x2,#0
+2:
+ mov x0,x6
+ mov x1,x9
+ bl copyString // copy menu line to buffer
+ sub x1,x7,x0 // compute maxi len - string length
+ mov x3,#0
+ mov x2,#' '
+3: // loop to add space in buffer
+ cmp x3,x1
+ bge 4f
+ strb w2,[x9,x0]
+ add x0,x0,#1
+ add x3,x3,#1
+ b 3b
+4:
+ strb w2,[x9,x0] // add one space
+ add x0,x0,#1
+ mov x2,#':'
+ strb w2,[x9,x0] // add : to buffer
+ add x0,x0,#1
+ mov x2,#' '
+ strb w2,[x9,x0] // add one space
+ add x0,x0,#1
+ mov x4,x0
+ add x0,x5,#1 // index
+ add x1,x9,x4
+ bl conversion10 // decimal conversion
+ mov x2,' '
+ add x1,x0,x4
+ strb w2,[x9,x1] // replace zero by space
+ add x1,x1,#1
+ mov x2,#0x0a
+ strb w2,[x9,x1] // add : to buffer
+ add x1,x1,#1
+ mov x2,#0
+ strb w2,[x9,x1] // add 0 final to buffer
+
+ mov x0,x9 // buffer display
+ bl affichageMess
+
+ add x5,x5,#1 // increment indice
+ cmp x5,#NBLIGNES // maxi ?
+ blt 1b
+ add x0,x5,#1 // index max
+
+100:
+ ldp x8,x9,[sp],16
+ ldp x6,x7,[sp],16
+ ldp x4,x5,[sp],16
+ ldp x2,x3,[sp],16
+ ldp x1,lr,[sp],16 // restaur registers
+ ret
+
+/******************************************************************/
+/* search max size of menu lines */
+/******************************************************************/
+/* r0 contains menu address */
+/* r0 return max lenght */
+searchMaxSize:
+ stp x1,lr,[sp,-16]! // save registers
+ stp x2,x3,[sp,-16]!
+ stp x4,x5,[sp,-16]!
+ mov x1,#0
+ mov x5,#0 // max size
+1:
+ ldr x2,[x0,x1,lsl #3] // load line address
+ mov x3,#0 // char indice
+2:
+ ldrb w4,[x2,x3] // load char
+ cmp x4,#0 // end string ?
+ beq 3f
+ add x3,x3,#1
+ b 2b // loop
+3:
+
+ cmp x3,x5 // compare length and size maxi
+ csel x5,x3,x5,gt
+ add x1,x1,#1
+ cmp x1,#NBLIGNES
+ blt 1b
+ mov x0,x5 // return maxi size
+
+100:
+ ldp x4,x5,[sp],16
+ ldp x2,x3,[sp],16
+ ldp x1,lr,[sp],16 // restaur registers
+ ret
+qAdrtabMenu: .quad tabMenu
+/******************************************************************/
+/* copy strings */
+/******************************************************************/
+/* r0 contains string address */
+/* r1 contains address buffer
+/* r0 return max lenght */
+copyString:
+ stp x1,lr,[sp,-16]! // save registers
+ stp x2,x3,[sp,-16]!
+ mov x2,#0
+1:
+ ldrb w3,[x0,x2] // load byte
+ cmp x3,#0 // final zero
+ beq 2f
+ strb w3,[x1,x2] // store byte in buffer
+ add x2,x2,#1
+ b 1b
+2:
+ mov x0,x2 // return buffer position
+100:
+ ldp x2,x3,[sp],16
+ ldp x1,lr,[sp],16 // restaur registers
+ ret
+/******************************************************************/
+/* string entry */
+/******************************************************************/
+/* r0 return the first character of human entry */
+keyboardInput:
+ stp x1,lr,[sp,-16]! // save registers
+ stp x2,x8,[sp,-16]!
+ mov x0,#STDIN // Linux input console
+ ldr x1,qAdrsBuffex1 // buffer address
+ mov x2,#BUFFERSIZE // buffer size
+ mov x8,#READ // request to read datas
+ svc 0 // call system
+ ldr x1,qAdrsBuffex1 // buffer address
+ ldrb w0,[x1] // load first character
+100:
+ ldp x2,x8,[sp],16
+ ldp x1,lr,[sp],16 // restaur registers
+ ret
+qAdrsBuffex1: .quad sBuffex1
+/***************************************************/
+/* ROUTINES INCLUDE */
+/***************************************************/
+/* for this file see task include a file in language AArch64 assembly*/
+.include "../includeARM64.inc"
diff --git a/Task/Menu/ARM-Assembly/menu.arm b/Task/Menu/ARM-Assembly/menu.arm
new file mode 100644
index 0000000000..c7571f5766
--- /dev/null
+++ b/Task/Menu/ARM-Assembly/menu.arm
@@ -0,0 +1,240 @@
+/* ARM assembly Raspberry PI */
+/* program menu1.s */
+/* REMARK 1 : this program use routines in a include file
+ see task Include a file language arm assembly
+ for the routine affichageMess conversion10
+ see at end of this program the instruction include */
+
+/*******************************************/
+/* Constantes */
+/*******************************************/
+.include "../constantes.inc"
+.equ STDIN, 1
+.equ READ, 3
+
+.equ BUFFERSIZE, 2000
+/*******************************************/
+/* Macros */
+/*******************************************/
+//.include "../../ficmacros32.inc" @ for developer debugging
+
+
+/*******************************************/
+/* Initialized data */
+/*******************************************/
+.data
+szMessDebutPgm: .asciz "Program 32 bits start. \n"
+szCarriageReturn: .asciz "\n"
+szMessFinOK: .asciz "Program normal end. \n"
+szMessError: .asciz "\nError Buffer too small!!!\n"
+
+szChoose: .asciz "\nMake your choise: "
+szMessErrorNum: .asciz "Error : number do not exists!!\n"
+szMesschoose: .asciz "\nYou have chosen: "
+szLigne1: .asciz "fee fie"
+szLigne2: .asciz "huff and puff"
+szLigne3: .asciz "mirror mirror"
+szLigne4: .asciz "tick tock"
+
+tabMenu: .int szLigne1
+ .int szLigne2
+ .int szLigne3
+ .int szLigne4
+.equ NBLIGNES, (. - tabMenu ) / 4
+/*******************************************/
+/* UnInitialized data */
+/*******************************************/
+.bss
+.align 4
+sBuffer: .skip BUFFERSIZE
+sBuffer1: .skip BUFFERSIZE
+/*******************************************/
+/* code section */
+/*******************************************/
+.text
+.global main
+main:
+ ldr r0,iAdrszMessDebutPgm
+ bl affichageMess
+1:
+ ldr r0,iAdrtabMenu @ display menu
+ ldr r1,iAdrsBuffer
+ bl displayMenu
+ mov r5,r0
+ ldr r0,iAdrszChoose @ display string
+ bl affichageMess
+ bl keyboardInput
+ //affregtit saisie
+ sub r0,#'0' @ input control
+ cmp r0,#0
+ ble error
+ cmp r0,r5
+ bge error
+ sub r4,r0,#1 @ compute index choose string
+ ldr r0,iAdrszMesschoose
+ bl affichageMess
+ ldr r1,iAdrtabMenu @ menu
+ ldr r0,[r1,r4,lsl #2] @ load line address
+ bl affichageMess @ and display
+ ldr r0,iAdrszCarriageReturn
+ bl affichageMess
+ ldr r0,iAdrszCarriageReturn
+ bl affichageMess
+ b 1b @ loop
+error:
+ ldr r0,iAdrszMessErrorNum
+ bl affichageMess
+ b 1b
+
+
+
+ ldr r0,iAdrszMessFinOK
+ bl affichageMess
+ b 100f
+99:
+ ldr r0,iAdrszMessError @ error
+ bl affichageMess
+ mov r0, #1
+100: @ standard end of the program
+ mov r0, #0 @ return code
+ mov r7, #EXIT @ request to exit program
+ svc 0 @ perform system call
+iAdrsBuffer: .int sBuffer
+iAdrszChoose: .int szChoose
+iAdrszMessDebutPgm: .int szMessDebutPgm
+iAdrszMessFinOK: .int szMessFinOK
+iAdrszCarriageReturn: .int szCarriageReturn
+iAdrszMessError: .int szMessError
+iAdrszMessErrorNum: .int szMessErrorNum
+iAdrszMesschoose: .int szMesschoose
+/******************************************************************/
+/* display menu */
+/******************************************************************/
+/* r0 contains menu address */
+/* r1 contains buffer address */
+/* r0 return index max */
+displayMenu:
+ push {r1-r9,lr} @ save registers
+ mov r8,r0
+ mov r9,r1
+ bl searchMaxSize @ compute max size line
+ mov r7,r0 @ maxi size
+ mov r5,#0
+1:
+ ldr r6,[r8,r5,lsl #2] @ load line address
+ mov r2,#0
+2:
+ mov r0,r6
+ mov r1,r9
+ bl copyString @ copy menu line to buffer
+ sub r1,r7,r0 @ compute maxi len - string length
+ mov r3,#0
+ mov r2,#' '
+3: @ loop to add space in buffer
+ cmp r3,r1
+ bge 4f
+ strb r2,[r9,r0]
+ add r0,r0,#1
+ add r3,r3,#1
+ b 3b
+4:
+ strb r2,[r9,r0] @ add one space
+ add r0,r0,#1
+ mov r2,#':'
+ strb r2,[r9,r0] @ add : to buffer
+ add r0,r0,#1
+ mov r2,#' '
+ strb r2,[r9,r0] @ add one space
+ add r0,r0,#1
+ mov r4,r0
+ add r0,r5,#1 @ index
+ add r1,r9,r4
+ bl conversion10 @ decimal conversion
+ add r1,r0,r4
+ add r1,r1,#1
+ mov r2,#0x0a
+ strb r2,[r9,r1] @ add : to buffer
+ add r1,r1,#1
+ mov r2,#0
+ strb r2,[r9,r1] @ add 0 final to buffer
+
+ mov r0,r9 @ buffer display
+ bl affichageMess
+
+ add r5,r5,#1 @ increment indice
+ cmp r5,#NBLIGNES @ maxi ?
+ blt 1b
+ add r0,r5,#1 @ index max
+
+100:
+ pop {r1-r9,pc} @ restaur registers
+
+/******************************************************************/
+/* search max size of menu lines */
+/******************************************************************/
+/* r0 contains menu address */
+/* r0 return max lenght */
+searchMaxSize:
+ push {r1-r5,lr} @ save registers
+ mov r1,#0
+ mov r5,#0 @ max size
+1:
+ ldr r2,[r0,r1,lsl #2] @ load line address
+ mov r3,#0 @ char indice
+2:
+ ldrb r4,[r2,r3] @ load char
+ cmp r4,#0 @ end string ?
+ beq 3f
+ add r3,r3,#1
+ b 2b @ loop
+3:
+ cmp r3,r5 @ compare length and size maxi
+ movgt r5,r3
+ add r1,r1,#1
+ cmp r1,#NBLIGNES
+ blt 1b
+ mov r0,r5 @ return maxi size
+
+100:
+ pop {r1-r5,pc} @ restaur registers
+iAdrtabMenu: .int tabMenu
+/******************************************************************/
+/* copy strings */
+/******************************************************************/
+/* r0 contains string address */
+/* r1 contains address buffer
+/* r0 return max lenght */
+copyString:
+ push {r1-r3,lr} @ save registers
+ mov r2,#0
+1:
+ ldrb r3,[r0,r2] @ load byte
+ cmp r3,#0 @ final zero
+ beq 2f
+ strb r3,[r1,r2] @ store byte in buffer
+ add r2,r2,#1
+ b 1b
+2:
+ mov r0,r2 @ return buffer position
+100:
+ pop {r1-r3,pc} @ restaur registers
+/******************************************************************/
+/* string entry */
+/******************************************************************/
+/* r0 return the first character of human entry */
+keyboardInput:
+ push {r1-r7,lr} @ save registers
+ mov r0,#STDIN @ Linux input console
+ ldr r1,iAdrsBuffer1 @ buffer address
+ mov r2,#BUFFERSIZE @ buffer size
+ mov r7,#READ @ request to read datas
+ svc 0 @ call system
+ ldr r1,iAdrsBuffer1 @ buffer address
+ ldrb r0,[r1] @ load first character
+100:
+ pop {r1-r7,pc}
+iAdrsBuffer1: .int sBuffer1
+/***************************************************/
+/* ROUTINES INCLUDE */
+/***************************************************/
+.include "../affichage.inc"
diff --git a/Task/Menu/Delphi/menu.delphi b/Task/Menu/Delphi/menu.pas
similarity index 100%
rename from Task/Menu/Delphi/menu.delphi
rename to Task/Menu/Delphi/menu.pas
diff --git a/Task/Menu/Elixir/menu.elixir b/Task/Menu/Elixir/menu.ex
similarity index 100%
rename from Task/Menu/Elixir/menu.elixir
rename to Task/Menu/Elixir/menu.ex
diff --git a/Task/Menu/Euphoria/menu.euphoria b/Task/Menu/Euphoria/menu.ex
similarity index 100%
rename from Task/Menu/Euphoria/menu.euphoria
rename to Task/Menu/Euphoria/menu.ex
diff --git a/Task/Menu/Julia/menu.julia b/Task/Menu/Julia/menu.jl
similarity index 100%
rename from Task/Menu/Julia/menu.julia
rename to Task/Menu/Julia/menu.jl
diff --git a/Task/Menu/Kotlin/menu.kotlin b/Task/Menu/Kotlin/menu.kts
similarity index 100%
rename from Task/Menu/Kotlin/menu.kotlin
rename to Task/Menu/Kotlin/menu.kts
diff --git a/Task/Menu/MUMPS/menu.mumps b/Task/Menu/MUMPS/menu.mumps
deleted file mode 100644
index d11a659a58..0000000000
--- a/Task/Menu/MUMPS/menu.mumps
+++ /dev/null
@@ -1,15 +0,0 @@
-MENU(STRINGS,SEP)
- ;http://rosettacode.org/wiki/Menu
- NEW I,A,MAX
- ;I is a loop variable
- ;A is the string read in from the user
- ;MAX is the number of substrings in the STRINGS list
- ;SET STRINGS="fee fie^huff and puff^mirror mirror^tick tock"
- SET MAX=$LENGTH(STRINGS,SEP)
- QUIT:MAX=0 ""
-WRITEMENU
- FOR I=1:1:MAX WRITE I,": ",$PIECE(STRINGS,SEP,I),!
- READ:30 !,"Choose a string by its index: ",A,!
- IF (A<1)!(A>MAX)!(A\1'=A) GOTO WRITEMENU
- KILL I,MAX
- QUIT $PIECE(STRINGS,SEP,A)
diff --git a/Task/Menu/Modula-2/menu.mod2 b/Task/Menu/Modula-2/menu.mod2
index d06c868b4a..f8d92d8f83 100644
--- a/Task/Menu/Modula-2/menu.mod2
+++ b/Task/Menu/Modula-2/menu.mod2
@@ -1,38 +1,60 @@
MODULE Menu;
FROM InOut IMPORT WriteString, WriteCard, WriteLn, ReadCard;
+FROM STextIO IMPORT ReadChar, SkipLine;
+FROM CharClass IMPORT IsNumeric, IsControl, IsWhiteSpace;
CONST StringLength = 100;
MenuSize = 4;
TYPE String = ARRAY[0..StringLength-1] OF CHAR;
-VAR menu : ARRAY[0..MenuSize] OF String;
- selection, index : CARDINAL;
+PROCEDURE MenuF(): String;
+VAR
+ menu : ARRAY[0..MenuSize] OF String;
+ inp : CHAR;
+ selection, index : CARDINAL;
BEGIN
menu[1] := "fee fie";
menu[2] := "huff and puff";
menu[3] := "mirror mirror";
menu[4] := "tick tock";
+ selection := 0;
+ WHILE selection=0 DO
+ FOR index := 1 TO HIGH(menu) DO
+ WriteString("[");
+ WriteCard( index,1);
+ WriteString( "] ");
+ WriteString( menu[index]);
+ WriteLn;
+ END;(*of FOR*)
- FOR index := 1 TO HIGH(menu) DO
- WriteString("[");
- WriteCard( index,1);
- WriteString( "] ");
- WriteString( menu[index]);
- WriteLn;
- END;(*of FOR*)
+ inp := '';
+ WriteString("Choose what you want : ");
+ ReadChar(inp);
+ SkipLine;
- WriteString("Choose what you want : ");
- ReadCard(selection);
+ IF IsNumeric(inp) THEN
+ CASE inp OF
+ '1' : selection := 1 |
+ '2' : selection := 2 |
+ '3' : selection := 3 |
+ '4' : selection := 4 |
+ ELSE ;
+ selection := 0;
+ END;
- IF (selection <= HIGH(menu)) AND (selection > 0) THEN
- WriteString("You have chosen: ");
- WriteString( menu[selection]);
- WriteLn;
- ELSE
- WriteString("Selection is out of range!");
- WriteLn;
- END (*of IF*)
+ IF (selection <= HIGH(menu)) AND (selection > 0) THEN
+ RETURN menu[selection];
+ END (*of IF*)
+ ELSIF IsWhiteSpace(inp) OR IsControl(inp) THEN
+ RETURN "";
+ END;
+ END;
+END MenuF;
+
+BEGIN
+ WriteString(MenuF());
+ WriteLn;
END Menu.
diff --git a/Task/Menu/OCaml/menu-1.ocaml b/Task/Menu/OCaml/menu-1.ml
similarity index 100%
rename from Task/Menu/OCaml/menu-1.ocaml
rename to Task/Menu/OCaml/menu-1.ml
diff --git a/Task/Menu/OCaml/menu-2.ocaml b/Task/Menu/OCaml/menu-2.ml
similarity index 100%
rename from Task/Menu/OCaml/menu-2.ocaml
rename to Task/Menu/OCaml/menu-2.ml
diff --git a/Task/Menu/Rust/menu.rust b/Task/Menu/Rust/menu.rs
similarity index 100%
rename from Task/Menu/Rust/menu.rust
rename to Task/Menu/Rust/menu.rs
diff --git a/Task/Merge-and-aggregate-datasets/EasyLang/merge-and-aggregate-datasets.easy b/Task/Merge-and-aggregate-datasets/EasyLang/merge-and-aggregate-datasets.easy
new file mode 100644
index 0000000000..51a02cfa7a
--- /dev/null
+++ b/Task/Merge-and-aggregate-datasets/EasyLang/merge-and-aggregate-datasets.easy
@@ -0,0 +1,72 @@
+s$ = input
+repeat
+ s$ = input
+ until s$ = ""
+ pat$[][] &= strsplit s$ ","
+ pat$[$][] &= ""
+.
+proc sort . d$[][] .
+ for i = len d$[][] - 1 downto 1
+ for j = 1 to i
+ if strcmp d$[j][1] d$[j + 1][1] > 0
+ swap d$[j][] d$[j + 1][]
+ .
+ .
+ .
+.
+sort pat$[][]
+n = len pat$[][]
+len sum[] n
+len cnt[] n
+#
+s$ = input
+repeat
+ s$ = input
+ until s$ = ""
+ vis$[] = strsplit s$ ","
+ for i to n
+ if pat$[i][1] = vis$[1]
+ if strcmp vis$[2] pat$[i][3] > 0
+ pat$[i][3] = vis$[2]
+ .
+ sum[i] += number vis$[3]
+ cnt[i] += 1
+ .
+ .
+.
+func$ f s$ n .
+ s$ = " " & s$
+ while len s$ < n
+ s$ &= " "
+ .
+ return s$
+.
+print "PATIENT_ID | LASTNAME | LAST_VISIT | SCORE_SUM | SCORE_AVG"
+for i to n
+ if sum[i] > 0
+ sum$ = f sum[i] 11
+ cnt$ = f sum[i] / cnt[i] 11
+ else
+ sum$ = f "" 11
+ cnt$ = f "" 11
+ .
+ print f pat$[i][1] 11 & "|" & f pat$[i][2] 10 & "|" & f pat$[i][3] 12 & "|" & sum$ & "|" & cnt$
+.
+#
+input_data
+PATIENT_ID,LASTNAME
+1001,Hopper
+4004,Wirth
+3003,Kemeny
+2002,Gosling
+5005,Kurtz
+
+PATIENT_ID,VISIT_DATE,SCORE
+2002,2020-09-10,6.8
+1001,2020-09-17,5.5
+4004,2020-09-24,8.4
+2002,2020-10-08,
+1001,,6.6
+3003,2020-11-12,
+4004,2020-11-05,7.0
+1001,2020-11-19,5.3
diff --git a/Task/Merge-and-aggregate-datasets/Julia/merge-and-aggregate-datasets.julia b/Task/Merge-and-aggregate-datasets/Julia/merge-and-aggregate-datasets.jl
similarity index 100%
rename from Task/Merge-and-aggregate-datasets/Julia/merge-and-aggregate-datasets.julia
rename to Task/Merge-and-aggregate-datasets/Julia/merge-and-aggregate-datasets.jl
diff --git a/Task/Mertens-function/Delphi/mertens-function.delphi b/Task/Mertens-function/Delphi/mertens-function.pas
similarity index 100%
rename from Task/Mertens-function/Delphi/mertens-function.delphi
rename to Task/Mertens-function/Delphi/mertens-function.pas
diff --git a/Task/Mertens-function/Julia/mertens-function.julia b/Task/Mertens-function/Julia/mertens-function.jl
similarity index 100%
rename from Task/Mertens-function/Julia/mertens-function.julia
rename to Task/Mertens-function/Julia/mertens-function.jl
diff --git a/Task/Metallic-ratios/Julia/metallic-ratios.julia b/Task/Metallic-ratios/Julia/metallic-ratios.jl
similarity index 100%
rename from Task/Metallic-ratios/Julia/metallic-ratios.julia
rename to Task/Metallic-ratios/Julia/metallic-ratios.jl
diff --git a/Task/Metallic-ratios/Kotlin/metallic-ratios.kotlin b/Task/Metallic-ratios/Kotlin/metallic-ratios.kts
similarity index 100%
rename from Task/Metallic-ratios/Kotlin/metallic-ratios.kotlin
rename to Task/Metallic-ratios/Kotlin/metallic-ratios.kts
diff --git a/Task/Metaprogramming/ALGOL-68/metaprogramming.alg b/Task/Metaprogramming/ALGOL-68/metaprogramming.alg
index a2dc39d932..6f444bb7c3 100644
--- a/Task/Metaprogramming/ALGOL-68/metaprogramming.alg
+++ b/Task/Metaprogramming/ALGOL-68/metaprogramming.alg
@@ -102,15 +102,10 @@ OP WITH = ( INSPECTTOREPLACE inspected, STRING replace with )REF STRING:
OP DISPLAY = ( STRING s )VOID: write( ( s, newline ) );
-
PRIO REPLACING = 2, WITH = 1;
-
-
-main: (
-
- # test the INSPECT and DISPLAY "verbs" #
+BEGIN # test the INSPECT and DISPLAY "verbs" #
STRING text := "some text";
DISPLAY text;
@@ -125,7 +120,15 @@ main: (
DISPLAY text;
INSPECT text REPLACING LEADING "som" WITH "k";
+ DISPLAY text;
+
+ text := "another test";
+ DISPLAY text;
+
+ INSPECT text REPLACING FIRST "anot" WITH "ABC";
+ DISPLAY text;
+
+ INSPECT text REPLACING LEADING "A" WITH "_";
DISPLAY text
-
-)
+END
diff --git a/Task/Metaprogramming/Julia/metaprogramming.julia b/Task/Metaprogramming/Julia/metaprogramming.jl
similarity index 100%
rename from Task/Metaprogramming/Julia/metaprogramming.julia
rename to Task/Metaprogramming/Julia/metaprogramming.jl
diff --git a/Task/Metaprogramming/Kotlin/metaprogramming.kotlin b/Task/Metaprogramming/Kotlin/metaprogramming.kts
similarity index 100%
rename from Task/Metaprogramming/Kotlin/metaprogramming.kotlin
rename to Task/Metaprogramming/Kotlin/metaprogramming.kts
diff --git a/Task/Metaprogramming/Rust/metaprogramming.rust b/Task/Metaprogramming/Rust/metaprogramming.rs
similarity index 100%
rename from Task/Metaprogramming/Rust/metaprogramming.rust
rename to Task/Metaprogramming/Rust/metaprogramming.rs
diff --git a/Task/Metered-concurrency/Euphoria/metered-concurrency.euphoria b/Task/Metered-concurrency/Euphoria/metered-concurrency.ex
similarity index 100%
rename from Task/Metered-concurrency/Euphoria/metered-concurrency.euphoria
rename to Task/Metered-concurrency/Euphoria/metered-concurrency.ex
diff --git a/Task/Metered-concurrency/Julia/metered-concurrency.julia b/Task/Metered-concurrency/Julia/metered-concurrency.jl
similarity index 100%
rename from Task/Metered-concurrency/Julia/metered-concurrency.julia
rename to Task/Metered-concurrency/Julia/metered-concurrency.jl
diff --git a/Task/Metered-concurrency/Kotlin/metered-concurrency.kotlin b/Task/Metered-concurrency/Kotlin/metered-concurrency.kts
similarity index 100%
rename from Task/Metered-concurrency/Kotlin/metered-concurrency.kotlin
rename to Task/Metered-concurrency/Kotlin/metered-concurrency.kts
diff --git a/Task/Metered-concurrency/Rust/metered-concurrency.rust b/Task/Metered-concurrency/Rust/metered-concurrency.rs
similarity index 100%
rename from Task/Metered-concurrency/Rust/metered-concurrency.rust
rename to Task/Metered-concurrency/Rust/metered-concurrency.rs
diff --git a/Task/Metronome/Delphi/metronome.delphi b/Task/Metronome/Delphi/metronome.pas
similarity index 100%
rename from Task/Metronome/Delphi/metronome.delphi
rename to Task/Metronome/Delphi/metronome.pas
diff --git a/Task/Metronome/Julia/metronome.julia b/Task/Metronome/Julia/metronome.jl
similarity index 100%
rename from Task/Metronome/Julia/metronome.julia
rename to Task/Metronome/Julia/metronome.jl
diff --git a/Task/Metronome/Kotlin/metronome.kotlin b/Task/Metronome/Kotlin/metronome.kts
similarity index 100%
rename from Task/Metronome/Kotlin/metronome.kotlin
rename to Task/Metronome/Kotlin/metronome.kts
diff --git a/Task/Mian-Chowla-sequence/ALGOL-68/mian-chowla-sequence.alg b/Task/Mian-Chowla-sequence/ALGOL-68/mian-chowla-sequence.alg
index 3274d75fbf..37c3eb9683 100644
--- a/Task/Mian-Chowla-sequence/ALGOL-68/mian-chowla-sequence.alg
+++ b/Task/Mian-Chowla-sequence/ALGOL-68/mian-chowla-sequence.alg
@@ -8,7 +8,8 @@ BEGIN
[ max mc ]INT mc;
INT curr size := 0; # initial size of the array #
INT size increment = 10 000; # size to increase the array by #
- REF[]BOOL is sum := HEAP[ 1 : 0 ]BOOL;
+ HEAP[ 1 : 0 ]BOOL empty sum;
+ REF[]BOOL is sum := empty sum;
INT mc count := 1;
FOR i WHILE mc count <= max mc DO
# assume i will be part of the sequence #
diff --git a/Task/Mian-Chowla-sequence/ALGOL-W/mian-chowla-sequence.alg b/Task/Mian-Chowla-sequence/ALGOL-W/mian-chowla-sequence.alg
new file mode 100644
index 0000000000..ff9e1077d4
--- /dev/null
+++ b/Task/Mian-Chowla-sequence/ALGOL-W/mian-chowla-sequence.alg
@@ -0,0 +1,55 @@
+% Find Mian-Chowla numbers: an
+ where: ai = 1,
+ and: an = smallest integer such that ai + aj is unique
+ for all i, j in 1 .. n && i <= j
+%
+begin
+ record HashedSum ( integer hSum; reference(HashedSum) hNext );
+ integer HASH_MOD, MAX_MC;
+ HASH_MOD := 10000;
+ MAX_MC := 100;
+ begin
+ % hash table of sums of the sequence elements encountered so far %
+ reference(HashedSum) array sums ( 0 :: HASH_MOD - 1 );
+ % table of the sequence elements encountered so far %
+ integer array mc ( 1 :: MAX_MC );
+ integer mcCount, i;
+ for i := 0 until HASH_MOD - 1 do sums( i ) := null;
+ mcCount := 1;
+ i := 0;
+ while begin i := i + 1; mcCount <= MAX_MC end do begin
+ logical isUnique;
+ integer mcPos;
+ % assume i will be part of the sequence %
+ mc( mcCount ) := i;
+ % check the sums %
+ isUnique := true;
+ mcPos := 0;
+ while begin mcPos := mcPos + 1; mcPos <= mcCount and isUnique end do begin
+ integer s;
+ reference(HashedSum) hs;
+ % attempt to find the sum in the hash table %
+ s := i + mc( mcPos );
+ hs := sums( s rem HASH_MOD );
+ while hs not = null and s not = hSum(hs) do hs := hNext(hs);
+ isUnique := hs = null
+ end while_isUnique;
+ if isUnique then begin
+ % i is a sequence element - store its sums %
+ for mcPos := 1 until mcCount do begin
+ integer newSum, sumHash;
+ newSum := i + mc( mcPos );
+ sumHash := newSum rem HASH_MOD;
+ sums( sumHash ) := HashedSum( newSum, sums( sumHash ) )
+ end for_mcPos ;
+ mcCount := mcCount + 1
+ end if_isUnique
+ end while_mcCount_le_MAX_MC;
+
+ % print parts of the sequence %
+ write( "Mian Chowla sequence elements 1..30:" );write();
+ for i := 1 until 30 do writeon( i_w := 1, s_w := 0, " ", mc( i ) );
+ write( "Mian Chowla sequence elements 91..100:" );write();
+ for i := 91 until 100 do writeon( i_w := 1, s_w := 0, " ", mc( i ) )
+ end
+end.
diff --git a/Task/Mian-Chowla-sequence/EasyLang/mian-chowla-sequence.easy b/Task/Mian-Chowla-sequence/EasyLang/mian-chowla-sequence.easy
new file mode 100644
index 0000000000..ee9400b53e
--- /dev/null
+++ b/Task/Mian-Chowla-sequence/EasyLang/mian-chowla-sequence.easy
@@ -0,0 +1,37 @@
+func[] mian_chowla n .
+ len mc[] n
+ mc[1] = 1
+ is[] = [ 0 1 ]
+ for i = 2 to n
+ j = mc[i - 1]
+ repeat
+ j += 1
+ mc[i] = j
+ for k = 1 to i
+ sum = mc[k] + j
+ if sum > len is[]
+ len is[] sum + 10000
+ .
+ if is[sum] = 1
+ isnew[] = [ ]
+ break 1
+ .
+ isnew[] &= sum
+ .
+ until len isnew[] > 0
+ .
+ for v in isnew[]
+ is[v] = 1
+ .
+ .
+ return mc[]
+.
+mc[] = mian_chowla 100
+for i to 30
+ write mc[i] & " "
+.
+print ""
+print ""
+for i = 91 to 100
+ write mc[i] & " "
+.
diff --git a/Task/Mian-Chowla-sequence/Julia/mian-chowla-sequence.julia b/Task/Mian-Chowla-sequence/Julia/mian-chowla-sequence.jl
similarity index 100%
rename from Task/Mian-Chowla-sequence/Julia/mian-chowla-sequence.julia
rename to Task/Mian-Chowla-sequence/Julia/mian-chowla-sequence.jl
diff --git a/Task/Mian-Chowla-sequence/Kotlin/mian-chowla-sequence-1.kotlin b/Task/Mian-Chowla-sequence/Kotlin/mian-chowla-sequence-1.kts
similarity index 100%
rename from Task/Mian-Chowla-sequence/Kotlin/mian-chowla-sequence-1.kotlin
rename to Task/Mian-Chowla-sequence/Kotlin/mian-chowla-sequence-1.kts
diff --git a/Task/Mian-Chowla-sequence/Kotlin/mian-chowla-sequence-2.kotlin b/Task/Mian-Chowla-sequence/Kotlin/mian-chowla-sequence-2.kts
similarity index 100%
rename from Task/Mian-Chowla-sequence/Kotlin/mian-chowla-sequence-2.kotlin
rename to Task/Mian-Chowla-sequence/Kotlin/mian-chowla-sequence-2.kts
diff --git a/Task/Middle-three-digits/ALGOL-68/middle-three-digits.alg b/Task/Middle-three-digits/ALGOL-68/middle-three-digits.alg
index 3ee7c8ffdc..44132b4051 100644
--- a/Task/Middle-three-digits/ALGOL-68/middle-three-digits.alg
+++ b/Task/Middle-three-digits/ALGOL-68/middle-three-digits.alg
@@ -1,38 +1,36 @@
-# we define a UNION MODE so that our middle 3 digits PROC can #
-# return either an integer on success or a error message if #
-# the middle 3 digits couldn't be extracted #
-MODE EINT = UNION( INT # success value #, STRING # error message # );
-# PROC to return the middle 3 digits of an integer. #
-# if this is not possible, an error message is returned #
-# instead #
-PROC middle 3 digits = ( INT number ) EINT:
BEGIN
- # convert the absolute value of the number to a string with the #
- # minumum possible number characters #
- STRING digits = whole( ABS number, 0 );
- INT len = UPB digits;
- IF len < 3
- THEN
- # number has less than 3 digits #
- # return an error message #
- "number must have at least three digits"
- ELIF ( len MOD 2 ) = 0
- THEN
- # the number has an even number of digits #
- # return an error message #
- "number must have an odd number of digits"
- ELSE
- # the number is suitable for extraction of the middle 3 digits #
- INT first digit pos = 1 + ( ( len - 3 ) OVER 2 );
- # the result is the integer value of the three digits #
- ( ( ( ABS digits[ first digit pos ] - ABS "0" ) * 100 )
- + ( ( ABS digits[ first digit pos + 1 ] - ABS "0" ) * 10 )
- + ( ( ABS digits[ first digit pos + 2 ] - ABS "0" ) )
- )
- FI
-END; # middle 3 digits #
+ # we define a UNION MODE so that our middle 3 digits PROC can #
+ # return either an integer on success or a error message if #
+ # the middle 3 digits couldn't be extracted #
+ MODE EINT = UNION( INT # success value #, STRING # error message # );
+ # PROC to return the middle 3 digits of an integer. #
+ # if this is not possible, an error message is returned #
+ # instead #
+ PROC middle 3 digits = ( INT number ) EINT:
+ BEGIN
+ # convert the absolute value of the number to a string with the #
+ # minumum possible number characters #
+ STRING digits = whole( ABS number, 0 );
+ INT len = UPB digits;
+ IF len < 3
+ THEN
+ # number has less than 3 digits return an error message #
+ "number must have at least three digits"
+ ELIF len MOD 2 = 0
+ THEN
+ # the number has an even number of digits- return an error message #
+ "number must have an odd number of digits"
+ ELSE
+ # the number is suitable for extraction of the middle 3 digits #
+ INT first digit pos = 1 + ( ( len - 3 ) OVER 2 );
+ # the result is the integer value of the three digits #
+ ( ( ( ABS digits[ first digit pos ] - ABS "0" ) * 100 )
+ + ( ( ABS digits[ first digit pos + 1 ] - ABS "0" ) * 10 )
+ + ( ( ABS digits[ first digit pos + 2 ] - ABS "0" ) )
+ )
+ FI
+ END; # middle 3 digits #
-main: (
# test the middle 3 digits PROC #
[]INT test values = ( 123, 12345, 1234567, 987654321
, 10001, -10001, -123, -100
@@ -60,4 +58,4 @@ main: (
ESAC;
print( ( newline ) )
OD
-)
+END
diff --git a/Task/Middle-three-digits/Elixir/middle-three-digits.elixir b/Task/Middle-three-digits/Elixir/middle-three-digits.ex
similarity index 100%
rename from Task/Middle-three-digits/Elixir/middle-three-digits.elixir
rename to Task/Middle-three-digits/Elixir/middle-three-digits.ex
diff --git a/Task/Middle-three-digits/Julia/middle-three-digits.julia b/Task/Middle-three-digits/Julia/middle-three-digits.jl
similarity index 100%
rename from Task/Middle-three-digits/Julia/middle-three-digits.julia
rename to Task/Middle-three-digits/Julia/middle-three-digits.jl
diff --git a/Task/Middle-three-digits/Kotlin/middle-three-digits.kotlin b/Task/Middle-three-digits/Kotlin/middle-three-digits.kts
similarity index 100%
rename from Task/Middle-three-digits/Kotlin/middle-three-digits.kotlin
rename to Task/Middle-three-digits/Kotlin/middle-three-digits.kts
diff --git a/Task/Middle-three-digits/OCaml/middle-three-digits.ocaml b/Task/Middle-three-digits/OCaml/middle-three-digits.ml
similarity index 100%
rename from Task/Middle-three-digits/OCaml/middle-three-digits.ocaml
rename to Task/Middle-three-digits/OCaml/middle-three-digits.ml
diff --git a/Task/Middle-three-digits/Rust/middle-three-digits.rust b/Task/Middle-three-digits/Rust/middle-three-digits.rs
similarity index 100%
rename from Task/Middle-three-digits/Rust/middle-three-digits.rust
rename to Task/Middle-three-digits/Rust/middle-three-digits.rs
diff --git a/Task/Miller-Rabin-primality-test/Crystal/miller-rabin-primality-test-1.crystal b/Task/Miller-Rabin-primality-test/Crystal/miller-rabin-primality-test-1.cr
similarity index 100%
rename from Task/Miller-Rabin-primality-test/Crystal/miller-rabin-primality-test-1.crystal
rename to Task/Miller-Rabin-primality-test/Crystal/miller-rabin-primality-test-1.cr
diff --git a/Task/Miller-Rabin-primality-test/Crystal/miller-rabin-primality-test-2.crystal b/Task/Miller-Rabin-primality-test/Crystal/miller-rabin-primality-test-2.cr
similarity index 100%
rename from Task/Miller-Rabin-primality-test/Crystal/miller-rabin-primality-test-2.crystal
rename to Task/Miller-Rabin-primality-test/Crystal/miller-rabin-primality-test-2.cr
diff --git a/Task/Miller-Rabin-primality-test/Elixir/miller-rabin-primality-test-1.elixir b/Task/Miller-Rabin-primality-test/Elixir/miller-rabin-primality-test-1.ex
similarity index 100%
rename from Task/Miller-Rabin-primality-test/Elixir/miller-rabin-primality-test-1.elixir
rename to Task/Miller-Rabin-primality-test/Elixir/miller-rabin-primality-test-1.ex
diff --git a/Task/Miller-Rabin-primality-test/Elixir/miller-rabin-primality-test-2.elixir b/Task/Miller-Rabin-primality-test/Elixir/miller-rabin-primality-test-2.ex
similarity index 100%
rename from Task/Miller-Rabin-primality-test/Elixir/miller-rabin-primality-test-2.elixir
rename to Task/Miller-Rabin-primality-test/Elixir/miller-rabin-primality-test-2.ex
diff --git a/Task/Miller-Rabin-primality-test/Julia/miller-rabin-primality-test.julia b/Task/Miller-Rabin-primality-test/Julia/miller-rabin-primality-test.jl
similarity index 100%
rename from Task/Miller-Rabin-primality-test/Julia/miller-rabin-primality-test.julia
rename to Task/Miller-Rabin-primality-test/Julia/miller-rabin-primality-test.jl
diff --git a/Task/Miller-Rabin-primality-test/Kotlin/miller-rabin-primality-test.kotlin b/Task/Miller-Rabin-primality-test/Kotlin/miller-rabin-primality-test.kts
similarity index 100%
rename from Task/Miller-Rabin-primality-test/Kotlin/miller-rabin-primality-test.kotlin
rename to Task/Miller-Rabin-primality-test/Kotlin/miller-rabin-primality-test.kts
diff --git a/Task/Miller-Rabin-primality-test/REXX/miller-rabin-primality-test-2.rexx b/Task/Miller-Rabin-primality-test/REXX/miller-rabin-primality-test-2.rexx
index b7d044c45f..6d47c35bbb 100644
--- a/Task/Miller-Rabin-primality-test/REXX/miller-rabin-primality-test-2.rexx
+++ b/Task/Miller-Rabin-primality-test/REXX/miller-rabin-primality-test-2.rexx
@@ -1,16 +1,17 @@
-parse version version
-say version
-glob. = ''
+include Settings
+
+say version; say 'Miller-Rabin primality test'; say
numeric digits 1000
say '25 numbers of the form 2^n-1, mostly Mersenne primes'
say 'Up to about 25 digits deterministic, above probabilistic'
say
-mm = '2 3 5 7 11 13 17 19 23 31 61 89 97 107 113 127 131 521 607 1279 2203 2281 2293 3217 3221'
+mm = '2 3 5 7 11 13 17 19 23 31 61 89 97 107 113 127 131 521 ',
+|| '607 1279 2203 2281 2293 3217 3221'
do nn = 1 to 25
a = Word(mm,nn); b = 2**a-1; l = Length(b)
- call time('r'); p = Prime(b); e = time('e')
- if l > 25 then
- b = Left(b,12)'...'Right(b,13)
+ call Time('r'); p = IsPrime(b); e = Time('e')
+ if l > 20 then
+ b = Left(b,10)'...'Right(b,10)
select
when p = 0 then
p = 'not'
@@ -19,19 +20,14 @@ do nn = 1 to 25
otherwise
p = 'probable'
end
- say '2^('a'-1)' '=' b '('l' digits) is' p 'prime' '('format(e,,3) 'seconds)'
+ say '2^'a'-1' '=' b '('l' digits) is' p 'prime' '('Format(e,,3) 'seconds)'
end
return
-Prime:
+IsPrime:
/* Is a number prime? */
procedure expose glob.
arg x
-/* Validity */
-if \ Whole(x) then
- return 'X'
-if x < 2 then
- return 'X'
/* Low primes also used as deterministic witnesses */
w1 = ' 2 3 5 7 11 13 17 19 23 29 31 37 41 '
/* Fast values */
@@ -52,8 +48,8 @@ do s = -1 while d//2 = 0
d = d%2
end
/* Thresholds deterministic witnesses */
-w2 = ' 2047 1373653 25326001 3215031751 2152302898747 3474749660383 341550071728321 0 ',
-|| ' 3825123056546413051 0 0 318665857834031151167461 3317044064679887385961981 '
+w2 = '2047 1373653 25326001 3215031751 2152302898747 3474749660383 341550071728321 ',
+|| '0 3825123056546413051 0 0 318665857834031151167461 3317044064679887385961981 '
w = Words(w2)
/* Up to 13 deterministic trials */
if x < Word(w2,w) then do
@@ -72,7 +68,7 @@ else do
end
/* Algorithm using generated witnesses */
do k = 1 to k
- a = Word(w1,k); y = powermod(a,d,x)
+ a = Word(w1,k); y = Powermod(a,d,x)
if y = 1 then
iterate
if y = e then
@@ -89,79 +85,6 @@ do k = 1 to k
end
return 1
-Floor:
-/* Floor */
-procedure expose glob.
-arg x
-/* Formula */
-if Whole(x) then
- return x
-else
- return Trunc(x)-(x<0)
-
-Powermod:
-/* Power modulus function x^y mod z */
-procedure expose glob.
-arg x,y,z
-/* Validity */
-if \ Whole(x) then
- return 'X'
-if \ Whole(x) then
- return 'X'
-if \ Whole(x) then
- return 'X'
-if x < 0 then
- return 'X'
-if y < 0 then
- return 'X'
-if z < 1 then
- return 'X'
-/* Special values */
-if z = 1 then
- return 0
-/* Binary method */
-numeric digits Max(Length(Format(x,,,0)),Length(Format(y,,,0)),2*Length(Format(z,,,0)))
-b = x//z; r = 1
-do while y > 0
- if y//2 then
- r = r*x//z
- x = x*x//z; y = y%2
-end
-return r
-
-Rand:
-/* Random number 12 digits precision */
-procedure expose glob.
-arg x,y
-/* Validity */
-if x <> '' then do
- if \ Whole(x) then
- return 'X'
- if \ Whole(x) then
- return 'X'
- if x >= y then
- return 'X'
-end
-/* Fixed precision */
-p = Digits(); numeric digits 30
-/* Get and save first seed from system Date and Time */
-if glob.rand = '' then do
- a = Date('s'); b = Time('l')
- glob.rand = Substr(b,10,3)||Substr(b,7,2)||Substr(b,4,2)||Substr(b,1,2)||Substr(a,7,2)||Substr(a,5,2)||Substr(a,3,2)
-end
-/* Calculate next random number method HP calculators */
-glob.rand = Right((glob.rand*2851130928467),15)
-/* Uniform deviate [0,1) */
-z = '0.'Left(glob.rand,Length(glob.rand)-3)
-numeric digits 12
-if x = '' then
- return z/1
-else
- return Floor(z*(y+1-x)+x)
-
-Whole:
-/* Is a number integer? */
-procedure expose glob.
-arg x
-/* Formula */
-return Datatype(x,'w')
+include Functions
+include Numbers
+include Abend
diff --git a/Task/Miller-Rabin-primality-test/Rust/miller-rabin-primality-test-1.rust b/Task/Miller-Rabin-primality-test/Rust/miller-rabin-primality-test-1.rs
similarity index 100%
rename from Task/Miller-Rabin-primality-test/Rust/miller-rabin-primality-test-1.rust
rename to Task/Miller-Rabin-primality-test/Rust/miller-rabin-primality-test-1.rs
diff --git a/Task/Miller-Rabin-primality-test/Rust/miller-rabin-primality-test-2.rust b/Task/Miller-Rabin-primality-test/Rust/miller-rabin-primality-test-2.rs
similarity index 100%
rename from Task/Miller-Rabin-primality-test/Rust/miller-rabin-primality-test-2.rust
rename to Task/Miller-Rabin-primality-test/Rust/miller-rabin-primality-test-2.rs
diff --git a/Task/Miller-Rabin-primality-test/Scheme/miller-rabin-primality-test.ss b/Task/Miller-Rabin-primality-test/Scheme/miller-rabin-primality-test.scm
similarity index 100%
rename from Task/Miller-Rabin-primality-test/Scheme/miller-rabin-primality-test.ss
rename to Task/Miller-Rabin-primality-test/Scheme/miller-rabin-primality-test.scm
diff --git a/Task/Miller-Rabin-primality-test/X86-64-Assembly/miller-rabin-primality-test.x86-64 b/Task/Miller-Rabin-primality-test/X86-64-Assembly/miller-rabin-primality-test.x86-64
new file mode 100644
index 0000000000..34b09a65ab
--- /dev/null
+++ b/Task/Miller-Rabin-primality-test/X86-64-Assembly/miller-rabin-primality-test.x86-64
@@ -0,0 +1,383 @@
+; test miller rabin
+; assembly X86 window
+; download and install visual studio 2022 free site mtcrosoft
+; search and open X64 native tools command prompt
+; compil and link program with this command :
+; ml64 .asm /link /ENTRY:main /SUBSYSTEM:console kernel32.lib user32.lib Shell32.lib
+; this program respects the 64-bit calling convention :
+; registers arguments : rcx rdx r8 r9 and stack
+; registers saved : rbx,rbp,rdi,rsi, r12-r15
+; ATTENTION les registres rax,rcx,rdx,r8-r11 peuvent être
+; perdus lors d'un appel de fonction
+;*********************************
+; constantes
+;*********************************
+STD_OUTPUT_HANDLE equ -11
+
+NBLIGNES equ 5
+BUFFERSIZE equ 200
+NBLOOP equ 5 ; loop number change this if necessary
+;*********************************
+; MACROS
+;*********************************
+afficherLib MACRO messa
+local mess1,LGMESS1C
+.data
+ mess1 db messa,10,0
+ LGMESS1C equ $ - mess1
+.code
+ push rax
+ push rcx
+ push rdx
+ push r8
+ push r9
+ push r10
+ push r11
+ mov rcx, offset mess1
+ mov rdx,LGMESS1C
+ call afficherConsole
+ pop r11
+ pop r10
+ pop r9
+ pop r8
+ pop rdx
+ pop rcx
+ pop rax
+ENDM
+
+;*********************************
+; user data
+;*********************************
+.data
+sBuffer db BUFFERSIZE dup (' ')
+szRetourLigne db 10,0
+sZoneConv db 24 dup (' ')
+
+
+align 8
+qgraine dq 123456789
+qNbDep1 dq 0019660dh
+qNbDep2 dq 3c6ef35fh
+hConsole dq 0
+
+;*********************************
+; user code fonction principale
+;*********************************
+.code
+extern WriteFile : proc, GetStdHandle : proc, ExitProcess : proc
+extern GetLastError : proc
+
+main PROC public
+ afficherLib "Program start."
+
+ ;mov rcx,5107
+ ;mov rcx,199
+ ;mov rcx, 1707 ; compose
+ ;mov rcx,-1 ; composé
+ mov rcx,2305843009213693951 ; prime
+ mov rdx,NBLOOP
+ call isPrimeMiller
+ afficherLib "Resultat ="
+ mov rcx,rax
+ mov rdx, offset sZoneConv
+ call conversion10
+ mov rdx,rax ; result length
+ mov rcx, offset sZoneConv
+ call afficherConsole
+ mov rcx, offset szRetourLigne
+ mov rdx,1
+ call afficherConsole
+
+
+finProgramme:
+ afficherLib "Programm end."
+ sub rsp,28h ; stack alignement
+ mov rcx,0 ; return code
+ call ExitProcess
+main ENDP
+
+;***************************************************/
+;* test miller rabin algorithme wikipedia */
+;* unsigned */
+;***************************************************/
+;* rcx contains number */
+;* rdx contains parameter loop number */
+;* rax return 1 if prime 0 if composite */
+isPrimeMiller:
+ push rbx
+ push rdi
+ push r12
+ push r13
+ push r14
+ push r15
+ cmp rcx,0
+ je composite
+ cmp rcx,3
+ jbe primeok
+prime1:
+ bt rcx,0
+ jc prime2
+ afficherLib "pair"
+ mov rax,0
+ jmp finprime
+prime2:
+ afficherLib "impair"
+ mov rdi,rdx ; loop number maxi
+ mov r11,rcx ; number
+ mov r9,rcx
+ dec r9 ; D
+ mov r10,0 ; S
+prime3:
+ shr r9,1 ; D/2
+ inc r10
+ bt r9,0
+ jnc prime3
+ mov rbx ,0 ; loop counter
+ mov r12,r11 ; number
+ sub r12,3
+ mov r13,3
+prime4:
+ mov rcx,r13
+ mov rdx,r9 ; exposant = d
+ mov r8,r11 ; modulo
+ call moduloPui64
+ cmp rax,1
+ je prime8
+ mov r15,r11
+ dec r15 ; N - 1
+ cmp r15,rax
+ je prime8
+ mov r15,r10
+ dec r15 ; s - 1
+prime5:
+ mov rdx,0
+ mul rax ; compute square
+ div r11
+ cmp rdx,1 ; remainder = 1 ?
+ je composite
+ mov r14,r11
+ dec r14
+ cmp r14,rdx
+ je prime8
+ dec r15 ; S - 1
+ jge prime5
+ jmp composite
+
+
+
+prime8:
+ add r13,2
+ cmp r13,r11 ; pour les petits nombres
+ je primeok
+ inc rbx
+ cmp rbx,rdi ; loop maxi ?
+ jl prime4
+primeok:
+ mov rax,1 ; prime
+ jmp finprime
+composite:
+ mov rax,0
+finprime:
+ pop r15
+ pop r14
+ pop r13
+ pop r12
+ pop rdi
+ pop rbx
+ ret
+
+;********************************************************/
+;* Calcul modulo de b puissance e modulo m */
+;* Exemple 4 puissance 13 modulo 497 = 445 */
+;********************************************************/
+;* rcx nombre */
+;* rdx exposant */
+;* r8 modulo */
+moduloPui64:
+ push r12
+ push r11
+ push r10
+ push r9
+ mov rax,0
+ cmp rcx,0
+ je finmod
+ cmp rdx,0
+ je finmod
+ cmp r8,0
+ je finmod
+ mov r10,r8 ; modulo
+ mov r8,rdx ;exposant
+ mov rax,rcx ; number
+ mov r9,1 ; result
+ mov rdx,0
+ div r10
+ mov rax,rdx ; remainder
+ mov r12,rdx
+boucleexp:
+ mov r11,r8
+ shr r11,1
+ jnc expnonnul
+ mov rdx,0
+ mul r9 ; ltiplie par resultat
+ div r10
+ mov r9,rdx ; resultat = reste
+
+expnonnul:
+ mov rax,r12
+ mul r12
+ div r10
+ mov r12,rdx
+ mov rax,rdx
+ shr r8,1
+ cmp r8,0
+ jne boucleexp
+ mov rax,r9
+
+finmod:
+ pop r9
+ pop r10
+ pop r11
+ pop r12
+ ret
+;**************************************
+; console display
+;**************************************
+; rcx : string address
+; rdx : length string
+afficherConsole PROC public
+ push rbx
+ push r12
+ sub rsp,28h ; 40 bytes on stack (shadow variables)
+ mov rbx,rcx ; string address
+ mov r12,rdx ; size string
+
+ cmp QWORD ptr hConsole,0 ; console handle ?
+ jne @B3
+ mov rcx,STD_OUTPUT_HANDLE
+ call GetStdHandle ; load console handle
+ mov hConsole, rax ; save in data
+@B3:
+ mov rcx,hconsole ; handle
+ mov rdx,rbx ; string address
+ mov r8,r12 ; string length
+ mov r9,0 ;
+
+ sub rsp,8 ; stack alignement (one push)
+ push 0
+ sub rsp,20h ; stack for shadow variable
+ call WriteFile ; winapi function
+ add rsp,20h
+ add rsp,10h ; 1 push and alignement
+ add rsp,28h ; stack alignement
+ pop r12
+ pop rbx
+ ret
+afficherConsole ENDP
+;***************************************************
+;conversion to unsigned base 10
+;with removal of unnecessary zeros
+;and left shift
+;****************************************************
+; rcx : value to convert
+; rdx : conversion area address length > 22
+LONGUEUR equ 24
+conversion10:
+ push rbx
+ push rdi
+ mov rdi,rdx ; conversion area address
+ mov BYTE ptr [rdi+LONGUEUR],0 ; 0 final conversion area
+ mov rax,rcx ; value
+ mov rcx,LONGUEUR-1
+ mov rbx ,10
+CA1: ; loop begin
+ mov rdx,0 ; division rax by 10
+ div rbx
+ add rdx,'0' ; remainder conversion ascii
+ mov byte ptr [rdi+rcx],dl
+ dec rcx
+ cmp rax,0 ; end ?
+ jne CA1
+ xor rax,rax
+ inc rcx
+CA5: ; copy loop
+ mov dl,[rdi+rcx] ; load a result character
+ mov byte ptr [rdi+rax],dl ; and store at conversion area begin
+ inc rcx
+ inc rax
+ cmp rcx,LONGUEUR ; loop if not zero final
+ jle CA5
+ pop rdi
+ pop rbx
+ ret
+;**************************************
+; generate random number
+;**************************************
+; rcx number limit
+randomNumber:
+ mov rax,0
+ cmp rcx,0
+ je randfin
+ mov rax, qGraine ; load seed
+ mov r8,qNbDep1
+ mov rdx,qNbDep2
+ mul r8
+ add rax,rdx
+ mov qGraine,rax ; store new seed
+ inc rcx
+ mov rdx,0
+ div rcx
+ mov rax,rdx ; result = remainder
+randfin:
+ ret
+;***************************************************
+; string concatenation
+;**************************************************
+; rcx destination area address
+; rdx destination area length
+; r8 strings number
+; r9 0
+; on stack address and length of each string
+; in order of insertion
+grouperChaines:
+ enter 0,0
+ push rbx
+ push r12
+ push r13
+ cmp r8,0
+ je fingrp
+ mov r12,rdx
+ mov r9,0 ; indice strings
+ mov r10,0 ; number of characters inserted
+bouclezone:
+ mov r13,r8
+ shl r13,1
+ mov rbx,[rbp+8+(r13 * 8)] ; string address
+ mov rax,[rbp+(r13 * 8)] ; sring length
+ mov r11,0
+bouclecopie: ; loop string copy
+ mov dl,byte ptr[rbx+r11]
+ mov byte ptr[rcx+r10],dl
+ inc r11
+ cmp r11,rax
+ jg finbouclecopie
+ inc r10 ;number of characters inserted
+ cmp r10,r12 ; max?
+ jge erreur
+ jmp bouclecopie
+finbouclecopie:
+ dec r8 ; other string
+ jnz bouclezone
+
+ mov rax,r10 ; return size final string
+ jmp fingrp
+erreur:
+ afficherLib "reception area too small"
+ mov rax,0
+fingrp:
+ pop r13
+ pop r12
+ pop rbx
+ leave
+ ret
+
+end
diff --git a/Task/Mind-boggling-card-trick/Crystal/mind-boggling-card-trick.crystal b/Task/Mind-boggling-card-trick/Crystal/mind-boggling-card-trick.cr
similarity index 100%
rename from Task/Mind-boggling-card-trick/Crystal/mind-boggling-card-trick.crystal
rename to Task/Mind-boggling-card-trick/Crystal/mind-boggling-card-trick.cr
diff --git a/Task/Mind-boggling-card-trick/EasyLang/mind-boggling-card-trick.easy b/Task/Mind-boggling-card-trick/EasyLang/mind-boggling-card-trick.easy
index f044bb5cb2..9189088f07 100644
--- a/Task/Mind-boggling-card-trick/EasyLang/mind-boggling-card-trick.easy
+++ b/Task/Mind-boggling-card-trick/EasyLang/mind-boggling-card-trick.easy
@@ -1,6 +1,6 @@
proc shuffle . a[] .
for i = len a[] downto 2
- r = randint i
+ r = random i
swap a[r] a[i]
.
.
@@ -38,7 +38,7 @@ for i to len black[]
.
shuffle rp[]
shuffle bp[]
-n = randint lower len red[] len black[]
+n = random lower len red[] len black[]
len rp[] n
len bp[] n
#
diff --git a/Task/Mind-boggling-card-trick/Julia/mind-boggling-card-trick.julia b/Task/Mind-boggling-card-trick/Julia/mind-boggling-card-trick.jl
similarity index 100%
rename from Task/Mind-boggling-card-trick/Julia/mind-boggling-card-trick.julia
rename to Task/Mind-boggling-card-trick/Julia/mind-boggling-card-trick.jl
diff --git a/Task/Mind-boggling-card-trick/Kotlin/mind-boggling-card-trick.kotlin b/Task/Mind-boggling-card-trick/Kotlin/mind-boggling-card-trick.kts
similarity index 100%
rename from Task/Mind-boggling-card-trick/Kotlin/mind-boggling-card-trick.kotlin
rename to Task/Mind-boggling-card-trick/Kotlin/mind-boggling-card-trick.kts
diff --git a/Task/Mind-boggling-card-trick/Rust/mind-boggling-card-trick.rust b/Task/Mind-boggling-card-trick/Rust/mind-boggling-card-trick.rs
similarity index 100%
rename from Task/Mind-boggling-card-trick/Rust/mind-boggling-card-trick.rust
rename to Task/Mind-boggling-card-trick/Rust/mind-boggling-card-trick.rs
diff --git a/Task/Minesweeper-game/EasyLang/minesweeper-game.easy b/Task/Minesweeper-game/EasyLang/minesweeper-game.easy
index 8d1fc663b8..96d2a19eb8 100644
--- a/Task/Minesweeper-game/EasyLang/minesweeper-game.easy
+++ b/Task/Minesweeper-game/EasyLang/minesweeper-game.easy
@@ -130,8 +130,8 @@ proc start . .
.
n = 8
while n > 0
- c = randint 8 - 1
- r = randint 7 - 1
+ c = random 8 - 1
+ r = random 7 - 1
ind = r * 8 + c + 1
if cell[ind] = 0
n -= 1
diff --git a/Task/Minesweeper-game/Julia/minesweeper-game-1.julia b/Task/Minesweeper-game/Julia/minesweeper-game-1.jl
similarity index 100%
rename from Task/Minesweeper-game/Julia/minesweeper-game-1.julia
rename to Task/Minesweeper-game/Julia/minesweeper-game-1.jl
diff --git a/Task/Minesweeper-game/Julia/minesweeper-game-2.julia b/Task/Minesweeper-game/Julia/minesweeper-game-2.jl
similarity index 100%
rename from Task/Minesweeper-game/Julia/minesweeper-game-2.julia
rename to Task/Minesweeper-game/Julia/minesweeper-game-2.jl
diff --git a/Task/Minesweeper-game/OCaml/minesweeper-game.ocaml b/Task/Minesweeper-game/OCaml/minesweeper-game.ml
similarity index 100%
rename from Task/Minesweeper-game/OCaml/minesweeper-game.ocaml
rename to Task/Minesweeper-game/OCaml/minesweeper-game.ml
diff --git a/Task/Minesweeper-game/Rust/minesweeper-game.rust b/Task/Minesweeper-game/Rust/minesweeper-game.rs
similarity index 100%
rename from Task/Minesweeper-game/Rust/minesweeper-game.rust
rename to Task/Minesweeper-game/Rust/minesweeper-game.rs
diff --git a/Task/Minimal-steps-down-to-1/Julia/minimal-steps-down-to-1.julia b/Task/Minimal-steps-down-to-1/Julia/minimal-steps-down-to-1.jl
similarity index 100%
rename from Task/Minimal-steps-down-to-1/Julia/minimal-steps-down-to-1.julia
rename to Task/Minimal-steps-down-to-1/Julia/minimal-steps-down-to-1.jl
diff --git a/Task/Minimal-steps-down-to-1/Kotlin/minimal-steps-down-to-1.kotlin b/Task/Minimal-steps-down-to-1/Kotlin/minimal-steps-down-to-1.kts
similarity index 100%
rename from Task/Minimal-steps-down-to-1/Kotlin/minimal-steps-down-to-1.kotlin
rename to Task/Minimal-steps-down-to-1/Kotlin/minimal-steps-down-to-1.kts
diff --git a/Task/Minimum-multiple-of-m-where-digital-sum-equals-m/Delphi/minimum-multiple-of-m-where-digital-sum-equals-m.delphi b/Task/Minimum-multiple-of-m-where-digital-sum-equals-m/Delphi/minimum-multiple-of-m-where-digital-sum-equals-m.pas
similarity index 100%
rename from Task/Minimum-multiple-of-m-where-digital-sum-equals-m/Delphi/minimum-multiple-of-m-where-digital-sum-equals-m.delphi
rename to Task/Minimum-multiple-of-m-where-digital-sum-equals-m/Delphi/minimum-multiple-of-m-where-digital-sum-equals-m.pas
diff --git a/Task/Minimum-multiple-of-m-where-digital-sum-equals-m/Julia/minimum-multiple-of-m-where-digital-sum-equals-m.julia b/Task/Minimum-multiple-of-m-where-digital-sum-equals-m/Julia/minimum-multiple-of-m-where-digital-sum-equals-m.jl
similarity index 100%
rename from Task/Minimum-multiple-of-m-where-digital-sum-equals-m/Julia/minimum-multiple-of-m-where-digital-sum-equals-m.julia
rename to Task/Minimum-multiple-of-m-where-digital-sum-equals-m/Julia/minimum-multiple-of-m-where-digital-sum-equals-m.jl
diff --git a/Task/Minimum-positive-multiple-in-base-10-using-only-0-and-1/Julia/minimum-positive-multiple-in-base-10-using-only-0-and-1-1.julia b/Task/Minimum-positive-multiple-in-base-10-using-only-0-and-1/Julia/minimum-positive-multiple-in-base-10-using-only-0-and-1-1.jl
similarity index 100%
rename from Task/Minimum-positive-multiple-in-base-10-using-only-0-and-1/Julia/minimum-positive-multiple-in-base-10-using-only-0-and-1-1.julia
rename to Task/Minimum-positive-multiple-in-base-10-using-only-0-and-1/Julia/minimum-positive-multiple-in-base-10-using-only-0-and-1-1.jl
diff --git a/Task/Minimum-positive-multiple-in-base-10-using-only-0-and-1/Julia/minimum-positive-multiple-in-base-10-using-only-0-and-1-2.julia b/Task/Minimum-positive-multiple-in-base-10-using-only-0-and-1/Julia/minimum-positive-multiple-in-base-10-using-only-0-and-1-2.jl
similarity index 100%
rename from Task/Minimum-positive-multiple-in-base-10-using-only-0-and-1/Julia/minimum-positive-multiple-in-base-10-using-only-0-and-1-2.julia
rename to Task/Minimum-positive-multiple-in-base-10-using-only-0-and-1/Julia/minimum-positive-multiple-in-base-10-using-only-0-and-1-2.jl
diff --git a/Task/Minimum-positive-multiple-in-base-10-using-only-0-and-1/Kotlin/minimum-positive-multiple-in-base-10-using-only-0-and-1.kotlin b/Task/Minimum-positive-multiple-in-base-10-using-only-0-and-1/Kotlin/minimum-positive-multiple-in-base-10-using-only-0-and-1.kts
similarity index 100%
rename from Task/Minimum-positive-multiple-in-base-10-using-only-0-and-1/Kotlin/minimum-positive-multiple-in-base-10-using-only-0-and-1.kotlin
rename to Task/Minimum-positive-multiple-in-base-10-using-only-0-and-1/Kotlin/minimum-positive-multiple-in-base-10-using-only-0-and-1.kts
diff --git a/Task/Minkowski-question-mark-function/Julia/minkowski-question-mark-function.julia b/Task/Minkowski-question-mark-function/Julia/minkowski-question-mark-function.jl
similarity index 100%
rename from Task/Minkowski-question-mark-function/Julia/minkowski-question-mark-function.julia
rename to Task/Minkowski-question-mark-function/Julia/minkowski-question-mark-function.jl
diff --git a/Task/Modified-random-distribution/Julia/modified-random-distribution.julia b/Task/Modified-random-distribution/Julia/modified-random-distribution.jl
similarity index 100%
rename from Task/Modified-random-distribution/Julia/modified-random-distribution.julia
rename to Task/Modified-random-distribution/Julia/modified-random-distribution.jl
diff --git a/Task/Modified-random-distribution/Rust/modified-random-distribution.rust b/Task/Modified-random-distribution/Rust/modified-random-distribution.rs
similarity index 100%
rename from Task/Modified-random-distribution/Rust/modified-random-distribution.rust
rename to Task/Modified-random-distribution/Rust/modified-random-distribution.rs
diff --git a/Task/Modular-arithmetic/ALGOL-68/modular-arithmetic.alg b/Task/Modular-arithmetic/ALGOL-68/modular-arithmetic.alg
index 5b4a08cd14..a945eaf881 100644
--- a/Task/Modular-arithmetic/ALGOL-68/modular-arithmetic.alg
+++ b/Task/Modular-arithmetic/ALGOL-68/modular-arithmetic.alg
@@ -19,4 +19,6 @@ PROC f = ( UNION( LONG LONG INT, MODULARINT ) x )LONG LONG INT:
, ( MODULARINT mx ): v OF ( mx**100 + mx + 1 )
ESAC;
-print( ( whole( f( MODULARINT( 10, 13 ) ), 0 ), newline ) )
+print( ( whole( f( MODULARINT( 10, 13 ) ), 0 ), newline ) );
+# additional test to avoid a warning that the * operator isn't used... #
+print( ( whole( f( MODULARINT( 10, 13 ) * MODULARINT( 10, 13 ) ), 0 ), newline ) )
diff --git a/Task/Modular-arithmetic/Julia/modular-arithmetic.julia b/Task/Modular-arithmetic/Julia/modular-arithmetic.jl
similarity index 100%
rename from Task/Modular-arithmetic/Julia/modular-arithmetic.julia
rename to Task/Modular-arithmetic/Julia/modular-arithmetic.jl
diff --git a/Task/Modular-arithmetic/Kotlin/modular-arithmetic.kotlin b/Task/Modular-arithmetic/Kotlin/modular-arithmetic.kts
similarity index 100%
rename from Task/Modular-arithmetic/Kotlin/modular-arithmetic.kotlin
rename to Task/Modular-arithmetic/Kotlin/modular-arithmetic.kts
diff --git a/Task/Modular-arithmetic/Scheme/modular-arithmetic.ss b/Task/Modular-arithmetic/Scheme/modular-arithmetic.scm
similarity index 100%
rename from Task/Modular-arithmetic/Scheme/modular-arithmetic.ss
rename to Task/Modular-arithmetic/Scheme/modular-arithmetic.scm
diff --git a/Task/Modular-exponentiation/Crystal/modular-exponentiation.crystal b/Task/Modular-exponentiation/Crystal/modular-exponentiation.cr
similarity index 100%
rename from Task/Modular-exponentiation/Crystal/modular-exponentiation.crystal
rename to Task/Modular-exponentiation/Crystal/modular-exponentiation.cr
diff --git a/Task/Modular-exponentiation/Delphi/modular-exponentiation.delphi b/Task/Modular-exponentiation/Delphi/modular-exponentiation.pas
similarity index 100%
rename from Task/Modular-exponentiation/Delphi/modular-exponentiation.delphi
rename to Task/Modular-exponentiation/Delphi/modular-exponentiation.pas
diff --git a/Task/Modular-exponentiation/Julia/modular-exponentiation.julia b/Task/Modular-exponentiation/Julia/modular-exponentiation.jl
similarity index 100%
rename from Task/Modular-exponentiation/Julia/modular-exponentiation.julia
rename to Task/Modular-exponentiation/Julia/modular-exponentiation.jl
diff --git a/Task/Modular-exponentiation/Kotlin/modular-exponentiation.kotlin b/Task/Modular-exponentiation/Kotlin/modular-exponentiation.kts
similarity index 100%
rename from Task/Modular-exponentiation/Kotlin/modular-exponentiation.kotlin
rename to Task/Modular-exponentiation/Kotlin/modular-exponentiation.kts
diff --git a/Task/Modular-exponentiation/OCaml/modular-exponentiation.ocaml b/Task/Modular-exponentiation/OCaml/modular-exponentiation.ml
similarity index 100%
rename from Task/Modular-exponentiation/OCaml/modular-exponentiation.ocaml
rename to Task/Modular-exponentiation/OCaml/modular-exponentiation.ml
diff --git a/Task/Modular-exponentiation/PascalABC.NET/modular-exponentiation.pas b/Task/Modular-exponentiation/PascalABC.NET/modular-exponentiation.pas
new file mode 100644
index 0000000000..7fdf7bc4c8
--- /dev/null
+++ b/Task/Modular-exponentiation/PascalABC.NET/modular-exponentiation.pas
@@ -0,0 +1,16 @@
+// Modular exponentiation. Nigel Galloway:August 22nd., 2024
+type I=System.Numerics.BigInteger;
+var bi:string->I:=n->I.Parse(n);
+function expMod(a:I;b:I;n:I):I;
+ function fN(a:I;b:I;c:I):I;
+ begin
+ result:=if b=0 then c else fN(a*(a mod n),b/bi('2'),(if (b mod 2)=0 then c else c*a mod n));
+ end;
+begin
+ result:=fN(a,b,I.One)
+end;
+begin
+ var a := bi('2988348162058574136915891421498819466320163312926952423791023078876139');
+ var b := bi('2351399303373464486466122544523690094744975233415544072992656881240319');
+ println(expMod(a,b,bi('10')**40).ToString());
+end.
diff --git a/Task/Modular-exponentiation/Rust/modular-exponentiation-1.rust b/Task/Modular-exponentiation/Rust/modular-exponentiation-1.rs
similarity index 100%
rename from Task/Modular-exponentiation/Rust/modular-exponentiation-1.rust
rename to Task/Modular-exponentiation/Rust/modular-exponentiation-1.rs
diff --git a/Task/Modular-exponentiation/Rust/modular-exponentiation-2.rust b/Task/Modular-exponentiation/Rust/modular-exponentiation-2.rs
similarity index 100%
rename from Task/Modular-exponentiation/Rust/modular-exponentiation-2.rust
rename to Task/Modular-exponentiation/Rust/modular-exponentiation-2.rs
diff --git a/Task/Modular-exponentiation/Scheme/modular-exponentiation.ss b/Task/Modular-exponentiation/Scheme/modular-exponentiation.scm
similarity index 100%
rename from Task/Modular-exponentiation/Scheme/modular-exponentiation.ss
rename to Task/Modular-exponentiation/Scheme/modular-exponentiation.scm
diff --git a/Task/Modular-inverse/Applesoft-BASIC/modular-inverse.basic b/Task/Modular-inverse/Applesoft-BASIC/modular-inverse.basic
new file mode 100644
index 0000000000..3c788f75cc
--- /dev/null
+++ b/Task/Modular-inverse/Applesoft-BASIC/modular-inverse.basic
@@ -0,0 +1,18 @@
+ 10 LET E = 42
+ 20 LET T = 2017
+ 30 GOSUB 500" MODULAR INVERSE
+ 40 PRINT M;
+ 50 END
+
+ REM MODULAR INVERSE
+ 500 LET M = 0
+ 510 IF E > = T THEN RETURN
+ 520 LET C = 1
+ 530 FOR B = E TO 1 STEP 0
+ 540 LET S = INT ((T - B) / E) + 1
+ 550 LET B = B + S * E
+ 560 LET C = C + S
+ 570 LET B = B - T
+ 580 NEXT B
+ 590 LET M = C
+ 610 RETURN
diff --git a/Task/Modular-inverse/Crystal/modular-inverse.crystal b/Task/Modular-inverse/Crystal/modular-inverse.cr
similarity index 100%
rename from Task/Modular-inverse/Crystal/modular-inverse.crystal
rename to Task/Modular-inverse/Crystal/modular-inverse.cr
diff --git a/Task/Modular-inverse/Elixir/modular-inverse.elixir b/Task/Modular-inverse/Elixir/modular-inverse.ex
similarity index 100%
rename from Task/Modular-inverse/Elixir/modular-inverse.elixir
rename to Task/Modular-inverse/Elixir/modular-inverse.ex
diff --git a/Task/Modular-inverse/Julia/modular-inverse-1.julia b/Task/Modular-inverse/Julia/modular-inverse-1.jl
similarity index 100%
rename from Task/Modular-inverse/Julia/modular-inverse-1.julia
rename to Task/Modular-inverse/Julia/modular-inverse-1.jl
diff --git a/Task/Modular-inverse/Julia/modular-inverse-2.julia b/Task/Modular-inverse/Julia/modular-inverse-2.jl
similarity index 100%
rename from Task/Modular-inverse/Julia/modular-inverse-2.julia
rename to Task/Modular-inverse/Julia/modular-inverse-2.jl
diff --git a/Task/Modular-inverse/Kotlin/modular-inverse.kotlin b/Task/Modular-inverse/Kotlin/modular-inverse.kts
similarity index 100%
rename from Task/Modular-inverse/Kotlin/modular-inverse.kotlin
rename to Task/Modular-inverse/Kotlin/modular-inverse.kts
diff --git a/Task/Modular-inverse/OCaml/modular-inverse-1.ocaml b/Task/Modular-inverse/OCaml/modular-inverse-1.ml
similarity index 100%
rename from Task/Modular-inverse/OCaml/modular-inverse-1.ocaml
rename to Task/Modular-inverse/OCaml/modular-inverse-1.ml
diff --git a/Task/Modular-inverse/OCaml/modular-inverse-2.ocaml b/Task/Modular-inverse/OCaml/modular-inverse-2.ml
similarity index 100%
rename from Task/Modular-inverse/OCaml/modular-inverse-2.ocaml
rename to Task/Modular-inverse/OCaml/modular-inverse-2.ml
diff --git a/Task/Modular-inverse/Raku/modular-inverse.raku b/Task/Modular-inverse/Raku/modular-inverse.raku
index f544988fbf..fc593866e3 100644
--- a/Task/Modular-inverse/Raku/modular-inverse.raku
+++ b/Task/Modular-inverse/Raku/modular-inverse.raku
@@ -9,3 +9,7 @@ sub inverse($n, :$modulo) {
}
say inverse 42, :modulo(2017)
+
+# or use a built-in routine - https://docs.raku.org/routine/expmod , kudos to trizen++
+
+say expmod(42, -1, 2017);
diff --git a/Task/Modular-inverse/Rust/modular-inverse-1.rust b/Task/Modular-inverse/Rust/modular-inverse-1.rs
similarity index 100%
rename from Task/Modular-inverse/Rust/modular-inverse-1.rust
rename to Task/Modular-inverse/Rust/modular-inverse-1.rs
diff --git a/Task/Modular-inverse/Rust/modular-inverse-2.rust b/Task/Modular-inverse/Rust/modular-inverse-2.rs
similarity index 100%
rename from Task/Modular-inverse/Rust/modular-inverse-2.rust
rename to Task/Modular-inverse/Rust/modular-inverse-2.rs
diff --git a/Task/Modular-inverse/Yabasic/modular-inverse.basic b/Task/Modular-inverse/Yabasic/modular-inverse.basic
new file mode 100644
index 0000000000..5751ef5b2c
--- /dev/null
+++ b/Task/Modular-inverse/Yabasic/modular-inverse.basic
@@ -0,0 +1,19 @@
+print multInv(42, 2017)
+end
+
+sub multInv(a,b)
+ x0 = 0
+ b0 = b
+ multInv = 1
+ if b = 1 return
+ while a > 1
+ q = a / b
+ t = b
+ b = mod (a, b)
+ a = t
+ t = x0
+ x0 = multInv - q * x0
+ multInv = int(t)
+ wend
+ if multInv < 0 return multInv + b0
+end sub
diff --git a/Task/Monads-List-monad/Delphi/monads-list-monad.delphi b/Task/Monads-List-monad/Delphi/monads-list-monad.pas
similarity index 100%
rename from Task/Monads-List-monad/Delphi/monads-list-monad.delphi
rename to Task/Monads-List-monad/Delphi/monads-list-monad.pas
diff --git a/Task/Monads-List-monad/Julia/monads-list-monad.julia b/Task/Monads-List-monad/Julia/monads-list-monad.jl
similarity index 100%
rename from Task/Monads-List-monad/Julia/monads-list-monad.julia
rename to Task/Monads-List-monad/Julia/monads-list-monad.jl
diff --git a/Task/Monads-List-monad/Kotlin/monads-list-monad.kotlin b/Task/Monads-List-monad/Kotlin/monads-list-monad.kts
similarity index 100%
rename from Task/Monads-List-monad/Kotlin/monads-list-monad.kotlin
rename to Task/Monads-List-monad/Kotlin/monads-list-monad.kts
diff --git a/Task/Monads-List-monad/OCaml/monads-list-monad-1.ocaml b/Task/Monads-List-monad/OCaml/monads-list-monad-1.ml
similarity index 100%
rename from Task/Monads-List-monad/OCaml/monads-list-monad-1.ocaml
rename to Task/Monads-List-monad/OCaml/monads-list-monad-1.ml
diff --git a/Task/Monads-List-monad/OCaml/monads-list-monad-2.ocaml b/Task/Monads-List-monad/OCaml/monads-list-monad-2.ml
similarity index 100%
rename from Task/Monads-List-monad/OCaml/monads-list-monad-2.ocaml
rename to Task/Monads-List-monad/OCaml/monads-list-monad-2.ml
diff --git a/Task/Monads-List-monad/OCaml/monads-list-monad-3.ocaml b/Task/Monads-List-monad/OCaml/monads-list-monad-3.ml
similarity index 100%
rename from Task/Monads-List-monad/OCaml/monads-list-monad-3.ocaml
rename to Task/Monads-List-monad/OCaml/monads-list-monad-3.ml
diff --git a/Task/Monads-List-monad/OCaml/monads-list-monad-4.ocaml b/Task/Monads-List-monad/OCaml/monads-list-monad-4.ml
similarity index 100%
rename from Task/Monads-List-monad/OCaml/monads-list-monad-4.ocaml
rename to Task/Monads-List-monad/OCaml/monads-list-monad-4.ml
diff --git a/Task/Monads-Maybe-monad/ALGOL-68/monads-maybe-monad.alg b/Task/Monads-Maybe-monad/ALGOL-68/monads-maybe-monad.alg
index 705e49867d..7fd4b9ea6a 100644
--- a/Task/Monads-Maybe-monad/ALGOL-68/monads-maybe-monad.alg
+++ b/Task/Monads-Maybe-monad/ALGOL-68/monads-maybe-monad.alg
@@ -79,9 +79,9 @@ COMMENT
# Using the bind function, we can nest applications of safe functions, #
# without the compiler choking on unexpectedly wrapped values returned from #
- # other functions of the same kind. #
- REAL root one over four = value OF ( MAYBE( TRUE, 4 ) BIND safe reciprocal BIND safe root );
-
+ # other functions of the same kind. E.g.: #
+# REAL root one over four #
+# = value OF ( MAYBE( TRUE, 4 ) BIND safe reciprocal BIND safe root ); #
# print( ( root one over four, newline ) ); #
# -> 0.5 #
diff --git a/Task/Monads-Maybe-monad/Delphi/monads-maybe-monad.delphi b/Task/Monads-Maybe-monad/Delphi/monads-maybe-monad.pas
similarity index 100%
rename from Task/Monads-Maybe-monad/Delphi/monads-maybe-monad.delphi
rename to Task/Monads-Maybe-monad/Delphi/monads-maybe-monad.pas
diff --git a/Task/Monads-Maybe-monad/J/monads-maybe-monad-1.j b/Task/Monads-Maybe-monad/J/monads-maybe-monad-1.j
new file mode 100644
index 0000000000..6c5b86d50c
--- /dev/null
+++ b/Task/Monads-Maybe-monad/J/monads-maybe-monad-1.j
@@ -0,0 +1,3 @@
+'J N'=. s:'Just';'Nothing'
+unit =. J,&<]
+bind =. {{u@(1{::])^:(N-.@-:])}}
diff --git a/Task/Monads-Maybe-monad/J/monads-maybe-monad-2.j b/Task/Monads-Maybe-monad/J/monads-maybe-monad-2.j
new file mode 100644
index 0000000000..ba5d7e66a2
--- /dev/null
+++ b/Task/Monads-Maybe-monad/J/monads-maybe-monad-2.j
@@ -0,0 +1,3 @@
+fail =. {{unit@:u`(N"_)@.v}} NB. if v —> return Nothing, else apply u
+show =. [: ": (,' '&,)&":&>/
+comp =. [: > {{y}}/@(,<@unit) NB. multi-compose
diff --git a/Task/Monads-Maybe-monad/J/monads-maybe-monad-3.j b/Task/Monads-Maybe-monad/J/monads-maybe-monad-3.j
new file mode 100644
index 0000000000..597e8583ba
--- /dev/null
+++ b/Task/Monads-Maybe-monad/J/monads-maybe-monad-3.j
@@ -0,0 +1,14 @@
+ ^.%:_2 NB. ln ∘ sqrt; gives complex numbers for inputs < 0
+0.346574j1.5708
+ sqrt=. %: fail ([: +./ <&0) NB. return Nothing where result would've been complex
+ ln =. ^. fail ([: +./ <:&0) NB. same
+ show ln bind sqrt bind unit 2 3 4
+`Just 0.346574 0.549306 0.693147
+ show ln bind sqrt bind unit 2 _3 4 NB. short-circuits on input < 0
+`Nothing
+ show@(ln bind)@(sqrt bind)@unit&> 2 _3 4
+`Just 0.346574
+`Nothing
+`Just 0.693147
+ show unit@:*:`ln`sqrt comp 2 3 4
+`Just 0.120113 0.301737 0.480453
diff --git a/Task/Monads-Maybe-monad/J/monads-maybe-monad.j b/Task/Monads-Maybe-monad/J/monads-maybe-monad.j
deleted file mode 100644
index 32a0bcce98..0000000000
--- a/Task/Monads-Maybe-monad/J/monads-maybe-monad.j
+++ /dev/null
@@ -1,27 +0,0 @@
-NB. monad implementation:
-unit=: <
-bind=: (@>)( :: ])
-
-NB. monad utility
-safeVersion=: (<@) ( ::((<_.)"_))
-safeCompose=:dyad define
- dyad def 'x`:6 bind y'/x,unit y
-)
-
-NB. unsafe functions (fail with infinite arguments)
-subtractFromSelf=: -~
-divideBySelf=: %~
-
-NB. wrapped functions:
-safeSubtractFromSelf=: subtractFromSelf safeVersion
-safeDivideBySelf=: divideBySelf safeVersion
-
-NB. task example:
- safeSubtractFromSelf bind safeDivideBySelf 1
-┌─┐
-│0│
-└─┘
- safeSubtractFromSelf bind safeDivideBySelf _
-┌──┐
-│_.│
-└──┘
diff --git a/Task/Monads-Maybe-monad/Julia/monads-maybe-monad.julia b/Task/Monads-Maybe-monad/Julia/monads-maybe-monad.jl
similarity index 100%
rename from Task/Monads-Maybe-monad/Julia/monads-maybe-monad.julia
rename to Task/Monads-Maybe-monad/Julia/monads-maybe-monad.jl
diff --git a/Task/Monads-Maybe-monad/K/monads-maybe-monad.k b/Task/Monads-Maybe-monad/K/monads-maybe-monad.k
new file mode 100644
index 0000000000..7412f06167
--- /dev/null
+++ b/Task/Monads-Maybe-monad/K/monads-maybe-monad.k
@@ -0,0 +1,3 @@
+unit:(::)
+bind:{[k;a]:[a~`N;a;k a]}
+kcomp:{[f;g](bind[g;]@f@)} / (>=>) i.e. kleisli composition
diff --git a/Task/Monads-Maybe-monad/Kotlin/monads-maybe-monad.kotlin b/Task/Monads-Maybe-monad/Kotlin/monads-maybe-monad.kts
similarity index 100%
rename from Task/Monads-Maybe-monad/Kotlin/monads-maybe-monad.kotlin
rename to Task/Monads-Maybe-monad/Kotlin/monads-maybe-monad.kts
diff --git a/Task/Monads-Maybe-monad/OCaml/monads-maybe-monad-1.ocaml b/Task/Monads-Maybe-monad/OCaml/monads-maybe-monad-1.ml
similarity index 100%
rename from Task/Monads-Maybe-monad/OCaml/monads-maybe-monad-1.ocaml
rename to Task/Monads-Maybe-monad/OCaml/monads-maybe-monad-1.ml
diff --git a/Task/Monads-Maybe-monad/OCaml/monads-maybe-monad-2.ocaml b/Task/Monads-Maybe-monad/OCaml/monads-maybe-monad-2.ml
similarity index 100%
rename from Task/Monads-Maybe-monad/OCaml/monads-maybe-monad-2.ocaml
rename to Task/Monads-Maybe-monad/OCaml/monads-maybe-monad-2.ml
diff --git a/Task/Monads-Maybe-monad/OCaml/monads-maybe-monad-3.ocaml b/Task/Monads-Maybe-monad/OCaml/monads-maybe-monad-3.ml
similarity index 100%
rename from Task/Monads-Maybe-monad/OCaml/monads-maybe-monad-3.ocaml
rename to Task/Monads-Maybe-monad/OCaml/monads-maybe-monad-3.ml
diff --git a/Task/Monads-Maybe-monad/Rust/monads-maybe-monad.rust b/Task/Monads-Maybe-monad/Rust/monads-maybe-monad.rs
similarity index 100%
rename from Task/Monads-Maybe-monad/Rust/monads-maybe-monad.rust
rename to Task/Monads-Maybe-monad/Rust/monads-maybe-monad.rs
diff --git a/Task/Monads-Maybe-monad/V-(Vlang)/monads-maybe-monad.v b/Task/Monads-Maybe-monad/V-(Vlang)/monads-maybe-monad.v
new file mode 100644
index 0000000000..2a8dbd087e
--- /dev/null
+++ b/Task/Monads-Maybe-monad/V-(Vlang)/monads-maybe-monad.v
@@ -0,0 +1,17 @@
+type Maybe = f64 | string
+
+fn (m Maybe) div(x f64, y f64) Maybe {
+ mut result := m{}
+ result = x / y
+ if result.str().contains_any_substr(["inf","nan"]) {result = "none"}
+ return result
+}
+
+fn main() {
+ mb := Maybe{}
+ for a in [15, 0, 5] {
+ for b in [5, 0, 0] {
+ println(mb.div(a, b))
+ }
+ }
+}
diff --git a/Task/Monads-Writer-monad/Haskell/monads-writer-monad.hs b/Task/Monads-Writer-monad/Haskell/monads-writer-monad.hs
index 3a90946a00..71b1cc0150 100644
--- a/Task/Monads-Writer-monad/Haskell/monads-writer-monad.hs
+++ b/Task/Monads-Writer-monad/Haskell/monads-writer-monad.hs
@@ -8,6 +8,4 @@ logRoot = loggingVersion sqrt "obtained square root, "
logAddOne = loggingVersion (+1) "added 1, "
logHalf = loggingVersion (/2) "divided by 2, "
-halfOfAddOneOfRoot = logRoot >=> logAddOne >=> logHalf
-
-main = print $ runWriter (halfOfAddOneOfRoot 5)
+main = print . runWriter $ (logRoot >=> logAddOne >=> logHalf) 5
diff --git a/Task/Monads-Writer-monad/J/monads-writer-monad-1.j b/Task/Monads-Writer-monad/J/monads-writer-monad-1.j
index fdbc037761..8bde5af717 100644
--- a/Task/Monads-Writer-monad/J/monads-writer-monad-1.j
+++ b/Task/Monads-Writer-monad/J/monads-writer-monad-1.j
@@ -1,27 +1,4 @@
-root=: %:
-incr=: >:
-half=: -:
-
-tostr=: ,@":
-
-loggingVersion=: conjunction define
- n;~u
-)
-
-Lroot=: root loggingVersion 'obtained square root'
-Lincr=: incr loggingVersion 'added 1'
-Lhalf=: half loggingVersion 'divided by 2'
-
-loggingUnit=: verb define
- y;'Initial value: ',tostr y
-)
-
-loggingBind=: adverb define
- r=. u 0{::y
- v=. 0{:: r
- v;(1{::y),LF,(1{::r),' -> ',tostr v
-)
-
-loggingCompose=: dyad define
- ;(dyad def ' Writer c b)
+unit=: ;'Initial value: ',,@":
+bind=: {{b;w,LF,W,' -> ',,":b['b W'=.u a['a w'=.y}}
+comp=: [: > {{y}}/@(,<) NB. multi-compose
diff --git a/Task/Monads-Writer-monad/J/monads-writer-monad-2.j b/Task/Monads-Writer-monad/J/monads-writer-monad-2.j
index 365dede40a..e35142ea29 100644
--- a/Task/Monads-Writer-monad/J/monads-writer-monad-2.j
+++ b/Task/Monads-Writer-monad/J/monads-writer-monad-2.j
@@ -1,6 +1,9 @@
- 0{::Lhalf`Lincr`Lroot loggingCompose 5
+ wRoot=: %: W 'obtained square root'
+ wIncr=: >: W 'added 1'
+ wHalf=: -: W 'divided by 2'
+ 0{::result=: wHalf`wIncr`wRoot comp unit 5
1.61803
- 1{::Lhalf`Lincr`Lroot loggingCompose 5
+ 1{::result
Initial value: 5
obtained square root -> 2.23607
added 1 -> 3.23607
diff --git a/Task/Monads-Writer-monad/Julia/monads-writer-monad.julia b/Task/Monads-Writer-monad/Julia/monads-writer-monad.jl
similarity index 100%
rename from Task/Monads-Writer-monad/Julia/monads-writer-monad.julia
rename to Task/Monads-Writer-monad/Julia/monads-writer-monad.jl
diff --git a/Task/Monads-Writer-monad/Kotlin/monads-writer-monad.kotlin b/Task/Monads-Writer-monad/Kotlin/monads-writer-monad.kts
similarity index 100%
rename from Task/Monads-Writer-monad/Kotlin/monads-writer-monad.kotlin
rename to Task/Monads-Writer-monad/Kotlin/monads-writer-monad.kts
diff --git a/Task/Monads-Writer-monad/Scheme/monads-writer-monad.ss b/Task/Monads-Writer-monad/Scheme/monads-writer-monad.scm
similarity index 100%
rename from Task/Monads-Writer-monad/Scheme/monads-writer-monad.ss
rename to Task/Monads-Writer-monad/Scheme/monads-writer-monad.scm
diff --git a/Task/Monte-Carlo-methods/Crystal/monte-carlo-methods.crystal b/Task/Monte-Carlo-methods/Crystal/monte-carlo-methods.cr
similarity index 100%
rename from Task/Monte-Carlo-methods/Crystal/monte-carlo-methods.crystal
rename to Task/Monte-Carlo-methods/Crystal/monte-carlo-methods.cr
diff --git a/Task/Monte-Carlo-methods/Delphi/monte-carlo-methods.delphi b/Task/Monte-Carlo-methods/Delphi/monte-carlo-methods.pas
similarity index 100%
rename from Task/Monte-Carlo-methods/Delphi/monte-carlo-methods.delphi
rename to Task/Monte-Carlo-methods/Delphi/monte-carlo-methods.pas
diff --git a/Task/Monte-Carlo-methods/EasyLang/monte-carlo-methods.easy b/Task/Monte-Carlo-methods/EasyLang/monte-carlo-methods.easy
index 0fe197b75a..da447ba3db 100644
--- a/Task/Monte-Carlo-methods/EasyLang/monte-carlo-methods.easy
+++ b/Task/Monte-Carlo-methods/EasyLang/monte-carlo-methods.easy
@@ -6,7 +6,7 @@ func mc n .
hit += 1
.
.
- return 4.0 * hit / n
+ return 4 * hit / n
.
numfmt 4 0
print mc 10000
diff --git a/Task/Monte-Carlo-methods/Elixir/monte-carlo-methods.elixir b/Task/Monte-Carlo-methods/Elixir/monte-carlo-methods.ex
similarity index 100%
rename from Task/Monte-Carlo-methods/Elixir/monte-carlo-methods.elixir
rename to Task/Monte-Carlo-methods/Elixir/monte-carlo-methods.ex
diff --git a/Task/Monte-Carlo-methods/Julia/monte-carlo-methods.julia b/Task/Monte-Carlo-methods/Julia/monte-carlo-methods.jl
similarity index 100%
rename from Task/Monte-Carlo-methods/Julia/monte-carlo-methods.julia
rename to Task/Monte-Carlo-methods/Julia/monte-carlo-methods.jl
diff --git a/Task/Monte-Carlo-methods/Kotlin/monte-carlo-methods.kotlin b/Task/Monte-Carlo-methods/Kotlin/monte-carlo-methods.kts
similarity index 100%
rename from Task/Monte-Carlo-methods/Kotlin/monte-carlo-methods.kotlin
rename to Task/Monte-Carlo-methods/Kotlin/monte-carlo-methods.kts
diff --git a/Task/Monte-Carlo-methods/OCaml/monte-carlo-methods.ocaml b/Task/Monte-Carlo-methods/OCaml/monte-carlo-methods.ml
similarity index 100%
rename from Task/Monte-Carlo-methods/OCaml/monte-carlo-methods.ocaml
rename to Task/Monte-Carlo-methods/OCaml/monte-carlo-methods.ml
diff --git a/Task/Monte-Carlo-methods/PascalABC.NET/monte-carlo-methods.pas b/Task/Monte-Carlo-methods/PascalABC.NET/monte-carlo-methods.pas
new file mode 100644
index 0000000000..935034ae2d
--- /dev/null
+++ b/Task/Monte-Carlo-methods/PascalABC.NET/monte-carlo-methods.pas
@@ -0,0 +1,9 @@
+##
+for var i := 3 to 8 do
+begin
+ var n := integer(10 ** i);
+ var count := 0;
+ loop n do
+ if random.sqr + random.sqr < 1 then count += 1;
+ Writeln(n:10, 4 * count / n:12:8);
+end;
diff --git a/Task/Monte-Carlo-methods/Rust/monte-carlo-methods.rust b/Task/Monte-Carlo-methods/Rust/monte-carlo-methods.rs
similarity index 100%
rename from Task/Monte-Carlo-methods/Rust/monte-carlo-methods.rust
rename to Task/Monte-Carlo-methods/Rust/monte-carlo-methods.rs
diff --git a/Task/Monty-Hall-problem/Applesoft-BASIC/monty-hall-problem.basic b/Task/Monty-Hall-problem/Applesoft-BASIC/monty-hall-problem.basic
new file mode 100644
index 0000000000..fb72fb4b2c
--- /dev/null
+++ b/Task/Monty-Hall-problem/Applesoft-BASIC/monty-hall-problem.basic
@@ -0,0 +1,41 @@
+ 100 DATA 1000,ONE,TWO,THREE,GOAT,CAR,2,STICKER,SWITCHER,", YOU HAVE WON A "," HAS WON THE CAR ",","," OR"
+ 110 READ TIMES,D$(0),D$(1),D$(2),P$(0),P$(1),K,STICKER$,SWITCHER$,CAR$,HAS$,I$(1),I$(2)
+ 120 LET M$ = CHR$ (13)
+ 130 DEF FN R(N) = INT ( RND (1) * N)
+ 140 TEXT
+ 150 FOR GAME = 1 TO TIMES
+ 160 IF K = 1 THEN PRINT M$" CONT";
+ 170 VTAB 1 + (K = 1) * 22
+ 180 HTAB 1
+ 190 IF K = 1 THEN END
+ 200 IF K THEN HOME
+ 210 LET CAR = FN R(3)
+ 220 LET GUESS = FN R(3)
+ 230 FOR LOOP = 0 TO 0
+ 240 LET SHOW = FN R(3)
+ 250 LET LOOP = - (SHOW = GUESS OR SHOW = CAR)
+ 260 NEXT LOOP
+ 270 FOR LOOP = 0 TO 0
+ 280 LET NG = FN R(3)
+ 290 LET LOOP = - (NG = GUESS OR NG = SHOW)
+ 300 NEXT LOOP
+ 310 LET STICK = STICK + (GUESS = CAR)
+ 320 LET SWITCH = SWITCH + (NG = CAR)
+ 330 PRINT "THE MONTY HALL PROBLEM"M$M$" LET'S MAKE A DEAL - GAME # "GAME;M$M$"WHICH DOOR DO YOU THINK THAT THE CAR IS BEHIND?"M$M$"CHOOSE";
+ 340 FOR I = 0 TO 2
+ 350 PRINT I$((I > 0) + (I = 2))" DOOR NUMBER "D$(I);
+ 360 NEXT I
+ 370 PRINT "."M$M$"YOU HAVE CHOSEN DOOR NUMBER "D$(GUESS)".";
+ 380 CALL - 868
+ 390 PRINT M$M$"THERE IS A GOAT BEHIND DOOR "D$(SHOW)". DO ";
+ 400 CALL - 868
+ 410 PRINT M$"YOU WANT TO SWITCH TO DOOR NUMBER "D$(NG)"?";
+ 420 CALL - 868
+ 430 PRINT CHR$ (8)M$M$STICKER$CAR$P$(GUESS = CAR)".";
+ 440 CALL - 868
+ 450 PRINT M$SWITCHER$CAR$P$(NG = CAR)".";
+ 460 CALL - 868
+ 470 PRINT M$M$STICKER$HAS$STICK" TIMES"M$"AND "SWITCHER$HAS$SWITCH;M$"TIMES OUT OF "GAME"."M$
+ 480 LET K = PEEK (49152) > 127
+ 490 LET C = PEEK (49200 - K * 32)
+ 500 NEXT GAME
diff --git a/Task/Monty-Hall-problem/Delphi/monty-hall-problem.delphi b/Task/Monty-Hall-problem/Delphi/monty-hall-problem.pas
similarity index 100%
rename from Task/Monty-Hall-problem/Delphi/monty-hall-problem.delphi
rename to Task/Monty-Hall-problem/Delphi/monty-hall-problem.pas
diff --git a/Task/Monty-Hall-problem/EasyLang/monty-hall-problem.easy b/Task/Monty-Hall-problem/EasyLang/monty-hall-problem.easy
index 58f05bec08..1ee159f97e 100644
--- a/Task/Monty-Hall-problem/EasyLang/monty-hall-problem.easy
+++ b/Task/Monty-Hall-problem/EasyLang/monty-hall-problem.easy
@@ -1,12 +1,12 @@
max = 1000000
for i = 1 to max
- car_door = randint 3
- chosen_door = randint 3
+ car_door = random 3
+ chosen_door = random 3
if car_door <> chosen_door
montys_door = 6 - car_door - chosen_door
else
repeat
- montys_door = randint 3
+ montys_door = random 3
until montys_door <> car_door
.
.
diff --git a/Task/Monty-Hall-problem/Elixir/monty-hall-problem.elixir b/Task/Monty-Hall-problem/Elixir/monty-hall-problem.ex
similarity index 100%
rename from Task/Monty-Hall-problem/Elixir/monty-hall-problem.elixir
rename to Task/Monty-Hall-problem/Elixir/monty-hall-problem.ex
diff --git a/Task/Monty-Hall-problem/Euphoria/monty-hall-problem.euphoria b/Task/Monty-Hall-problem/Euphoria/monty-hall-problem.ex
similarity index 100%
rename from Task/Monty-Hall-problem/Euphoria/monty-hall-problem.euphoria
rename to Task/Monty-Hall-problem/Euphoria/monty-hall-problem.ex
diff --git a/Task/Monty-Hall-problem/Julia/monty-hall-problem-1.julia b/Task/Monty-Hall-problem/Julia/monty-hall-problem-1.jl
similarity index 100%
rename from Task/Monty-Hall-problem/Julia/monty-hall-problem-1.julia
rename to Task/Monty-Hall-problem/Julia/monty-hall-problem-1.jl
diff --git a/Task/Monty-Hall-problem/Julia/monty-hall-problem-2.julia b/Task/Monty-Hall-problem/Julia/monty-hall-problem-2.jl
similarity index 100%
rename from Task/Monty-Hall-problem/Julia/monty-hall-problem-2.julia
rename to Task/Monty-Hall-problem/Julia/monty-hall-problem-2.jl
diff --git a/Task/Monty-Hall-problem/Julia/monty-hall-problem-3.julia b/Task/Monty-Hall-problem/Julia/monty-hall-problem-3.jl
similarity index 100%
rename from Task/Monty-Hall-problem/Julia/monty-hall-problem-3.julia
rename to Task/Monty-Hall-problem/Julia/monty-hall-problem-3.jl
diff --git a/Task/Monty-Hall-problem/Julia/monty-hall-problem-4.julia b/Task/Monty-Hall-problem/Julia/monty-hall-problem-4.jl
similarity index 100%
rename from Task/Monty-Hall-problem/Julia/monty-hall-problem-4.julia
rename to Task/Monty-Hall-problem/Julia/monty-hall-problem-4.jl
diff --git a/Task/Monty-Hall-problem/Kotlin/monty-hall-problem.kotlin b/Task/Monty-Hall-problem/Kotlin/monty-hall-problem.kts
similarity index 100%
rename from Task/Monty-Hall-problem/Kotlin/monty-hall-problem.kotlin
rename to Task/Monty-Hall-problem/Kotlin/monty-hall-problem.kts
diff --git a/Task/Monty-Hall-problem/OCaml/monty-hall-problem.ocaml b/Task/Monty-Hall-problem/OCaml/monty-hall-problem.ml
similarity index 100%
rename from Task/Monty-Hall-problem/OCaml/monty-hall-problem.ocaml
rename to Task/Monty-Hall-problem/OCaml/monty-hall-problem.ml
diff --git a/Task/Monty-Hall-problem/Rust/monty-hall-problem.rust b/Task/Monty-Hall-problem/Rust/monty-hall-problem.rs
similarity index 100%
rename from Task/Monty-Hall-problem/Rust/monty-hall-problem.rust
rename to Task/Monty-Hall-problem/Rust/monty-hall-problem.rs
diff --git a/Task/Monty-Hall-problem/Scheme/monty-hall-problem.ss b/Task/Monty-Hall-problem/Scheme/monty-hall-problem.scm
similarity index 100%
rename from Task/Monty-Hall-problem/Scheme/monty-hall-problem.ss
rename to Task/Monty-Hall-problem/Scheme/monty-hall-problem.scm
diff --git a/Task/Monty-Hall-problem/V-(Vlang)/monty-hall-problem.v b/Task/Monty-Hall-problem/V-(Vlang)/monty-hall-problem.v
index 117c631c7d..862760d2f2 100644
--- a/Task/Monty-Hall-problem/V-(Vlang)/monty-hall-problem.v
+++ b/Task/Monty-Hall-problem/V-(Vlang)/monty-hall-problem.v
@@ -12,7 +12,7 @@ fn main() {
}
stay_wins += doors[guess]
switch_wins += doors[3 - guess - shown]
- for clear in 0..3 {if doors[clear] != 0 {doors[clear] = 0}}
+ for i in 0..3 {doors[i] = 0}
}
println("Simulating ${games} games:")
println("Staying wins ${stay_wins} times at ${(f32(stay_wins) / f32(games) * 100):.2}% of games")
diff --git a/Task/Morse-code/Delphi/morse-code.delphi b/Task/Morse-code/Delphi/morse-code.pas
similarity index 100%
rename from Task/Morse-code/Delphi/morse-code.delphi
rename to Task/Morse-code/Delphi/morse-code.pas
diff --git a/Task/Morse-code/Ed/morse-code.ed b/Task/Morse-code/Ed/morse-code.ed
new file mode 100644
index 0000000000..f9812a17ae
--- /dev/null
+++ b/Task/Morse-code/Ed/morse-code.ed
@@ -0,0 +1,30 @@
+# by Artyom Bologov
+H
+g/[Aa]/s//.- /g
+g/[Bb]/s//-... /g
+g/[Cc]/s//-.-. /g
+g/[Dd]/s//-.. /g
+g/[Ee]/s//. /g
+g/[Ff]/s//..-. /g
+g/[Gg]/s//--. /g
+g/[Hh]/s//.... /g
+g/[Ii]/s//.. /g
+g/[Jj]/s//.--- /g
+g/[Kk]/s//-.- /g
+g/[Ll]/s//.-.. /g
+g/[Mm]/s//-- /g
+g/[Nn]/s//-. /g
+g/[Oo]/s//--- /g
+g/[Pp]/s//.-- /g
+g/[Qq]/s//--.- /g
+g/[Rr]/s//.-. /g
+g/[Ss]/s//... /g
+g/[Tt]/s//- /g
+g/[Uu]/s//..- /g
+g/[Vv]/s//...- /g
+g/[Ww]/s//.-- /g
+g/[Xx]/s//-..- /g
+g/[Yy]/s//-.-- /g
+g/[Zz]/s//--.. /g
+,p
+Q
diff --git a/Task/Morse-code/Elixir/morse-code.elixir b/Task/Morse-code/Elixir/morse-code.ex
similarity index 100%
rename from Task/Morse-code/Elixir/morse-code.elixir
rename to Task/Morse-code/Elixir/morse-code.ex
diff --git a/Task/Morse-code/Julia/morse-code.julia b/Task/Morse-code/Julia/morse-code.jl
similarity index 100%
rename from Task/Morse-code/Julia/morse-code.julia
rename to Task/Morse-code/Julia/morse-code.jl
diff --git a/Task/Morse-code/Kotlin/morse-code.kotlin b/Task/Morse-code/Kotlin/morse-code.kts
similarity index 100%
rename from Task/Morse-code/Kotlin/morse-code.kotlin
rename to Task/Morse-code/Kotlin/morse-code.kts
diff --git a/Task/Morse-code/OCaml/morse-code.ocaml b/Task/Morse-code/OCaml/morse-code.ml
similarity index 100%
rename from Task/Morse-code/OCaml/morse-code.ocaml
rename to Task/Morse-code/OCaml/morse-code.ml
diff --git a/Task/Morse-code/Rust/morse-code-1.rust b/Task/Morse-code/Rust/morse-code-1.rs
similarity index 100%
rename from Task/Morse-code/Rust/morse-code-1.rust
rename to Task/Morse-code/Rust/morse-code-1.rs
diff --git a/Task/Morse-code/Rust/morse-code-2.rust b/Task/Morse-code/Rust/morse-code-2.rs
similarity index 100%
rename from Task/Morse-code/Rust/morse-code-2.rust
rename to Task/Morse-code/Rust/morse-code-2.rs
diff --git a/Task/Morse-code/V-(Vlang)/morse-code.v b/Task/Morse-code/V-(Vlang)/morse-code.v
new file mode 100644
index 0000000000..e0e217e756
--- /dev/null
+++ b/Task/Morse-code/V-(Vlang)/morse-code.v
@@ -0,0 +1,20 @@
+const morse_code = [["a", ".-"], ["b", "-..."], ["c", "-.-."], ["d", "-.."], ["e", "."],
+ ["f", "..-."], ["g", "--."], ["h", "...."], ["i", ".."], ["j", ".---"],
+ ["k", "-.-"], ["l", ".-.."], ["m", "--"], ["n", "-."], ["o", "---"],
+ ["p", ".--."], ["q", "--.-"], ["r", ".-."], ["s", "..."], ["t", "-"],
+ ["u", "..-"], ["v", "...-"], ["w", ".--"], ["x", "-..-"], ["y", "-.--"],
+ ["z", "--.."], ["0", "-----"], ["1", ".----"], ["2", "..---"], ["3", "...--"],
+ ["4", "....-"], ["5", "....."], ["6", "-...."], ["7", "--..."], ["8", "---.."],
+ ["9", "----."]]
+
+fn main() {
+ str := "this is a test text"
+ mut strmorse := ""
+ for n, _ in str {
+ if str[n].ascii_str() ==" " {strmorse += " "}
+ for m, _ in morse_code {
+ if morse_code[m][0] == str[n].ascii_str() {strmorse += morse_code[m][1] + "|"}
+ }
+ }
+ println(strmorse.all_before_last("|"))
+}
diff --git a/Task/Motzkin-numbers/ALGOL-68/motzkin-numbers.alg b/Task/Motzkin-numbers/ALGOL-68/motzkin-numbers.alg
index 3bf9ef4acc..b83f368889 100644
--- a/Task/Motzkin-numbers/ALGOL-68/motzkin-numbers.alg
+++ b/Task/Motzkin-numbers/ALGOL-68/motzkin-numbers.alg
@@ -36,16 +36,17 @@ BEGIN # find some Motzkin numbers #
PROC pad left = ( STRING s, INT n )STRING:
IF INT len = ( UPB s - LWB s ) + 1; len >= n THEN s ELSE ( ( n - len ) * " " ) + s FI;
- # show the Motzkin numbers #
- print( ( " n M[n] Prime?", newline ) );
- print( ( "-----------------------------------", newline ) );
- []LONG LONG INT m = MOTZKIN 41;
- FOR i FROM LWB m TO UPB m DO
- print( ( whole( i, -2 )
- , pad left( commatise( m[ i ] ), 26 )
- , IF is probably prime( m[ i ] ) THEN " prime" ELSE "" FI
- , newline
- )
- )
- OD
+ BEGIN # show the Motzkin numbers #
+ print( ( " n M[n] Prime?", newline ) );
+ print( ( "-----------------------------------", newline ) );
+ []LONG LONG INT m = MOTZKIN 41;
+ FOR i FROM LWB m TO UPB m DO
+ print( ( whole( i, -2 )
+ , pad left( commatise( m[ i ] ), 26 )
+ , IF is probably prime( m[ i ] ) THEN " prime" ELSE "" FI
+ , newline
+ )
+ )
+ OD
+ END
END
diff --git a/Task/Motzkin-numbers/Julia/motzkin-numbers.julia b/Task/Motzkin-numbers/Julia/motzkin-numbers.jl
similarity index 100%
rename from Task/Motzkin-numbers/Julia/motzkin-numbers.julia
rename to Task/Motzkin-numbers/Julia/motzkin-numbers.jl
diff --git a/Task/Motzkin-numbers/Rust/motzkin-numbers.rust b/Task/Motzkin-numbers/Rust/motzkin-numbers.rs
similarity index 100%
rename from Task/Motzkin-numbers/Rust/motzkin-numbers.rust
rename to Task/Motzkin-numbers/Rust/motzkin-numbers.rs
diff --git a/Task/Mouse-position/Delphi/mouse-position-1.delphi b/Task/Mouse-position/Delphi/mouse-position-1.pas
similarity index 100%
rename from Task/Mouse-position/Delphi/mouse-position-1.delphi
rename to Task/Mouse-position/Delphi/mouse-position-1.pas
diff --git a/Task/Mouse-position/Delphi/mouse-position-2.delphi b/Task/Mouse-position/Delphi/mouse-position-2.pas
similarity index 100%
rename from Task/Mouse-position/Delphi/mouse-position-2.delphi
rename to Task/Mouse-position/Delphi/mouse-position-2.pas
diff --git a/Task/Mouse-position/Julia/mouse-position.julia b/Task/Mouse-position/Julia/mouse-position.jl
similarity index 100%
rename from Task/Mouse-position/Julia/mouse-position.julia
rename to Task/Mouse-position/Julia/mouse-position.jl
diff --git a/Task/Mouse-position/Kotlin/mouse-position.kotlin b/Task/Mouse-position/Kotlin/mouse-position.kts
similarity index 100%
rename from Task/Mouse-position/Kotlin/mouse-position.kotlin
rename to Task/Mouse-position/Kotlin/mouse-position.kts
diff --git a/Task/Mouse-position/OCaml/mouse-position.ocaml b/Task/Mouse-position/OCaml/mouse-position.ml
similarity index 100%
rename from Task/Mouse-position/OCaml/mouse-position.ocaml
rename to Task/Mouse-position/OCaml/mouse-position.ml
diff --git a/Task/Mouse-position/Rust/mouse-position.rust b/Task/Mouse-position/Rust/mouse-position.rs
similarity index 100%
rename from Task/Mouse-position/Rust/mouse-position.rust
rename to Task/Mouse-position/Rust/mouse-position.rs
diff --git a/Task/Move-to-front-algorithm/ALGOL-68/move-to-front-algorithm.alg b/Task/Move-to-front-algorithm/ALGOL-68/move-to-front-algorithm.alg
index c1e61c69e7..0e7c19b92d 100644
--- a/Task/Move-to-front-algorithm/ALGOL-68/move-to-front-algorithm.alg
+++ b/Task/Move-to-front-algorithm/ALGOL-68/move-to-front-algorithm.alg
@@ -7,29 +7,21 @@ PROC move to front = ( STRING text, INT text pos )STRING:
text
ELSE
# the character isn't already at the front - construct the new string #
-
INT char pos = LWB text + text pos;
-
( text[ char pos : char pos ]
+ text[ : char pos - 1 ]
+ text[ char pos + 1 : ]
)
-
FI;
-
# encode the string "text", using "initial table" as the starting symbol table#
PROC encode = ( STRING text, STRING initial table )[]INT:
BEGIN
-
[ 1 : ( UPB text - LWB text ) + 1 ]INT result;
-
STRING symbol table := initial table;
-
FOR text pos FROM LWB text TO UPB text
DO
INT symbol pos := 0;
-
result[ text pos ]
:= IF char in string( text[ text pos ], symbol pos, symbol table )
THEN
@@ -41,24 +33,17 @@ BEGIN
# the character isn't in the symbol table #
-1
FI;
-
# modify the symbol table so the latest character is at the front #
symbol table := move to front( symbol table, result[ text pos ] )
-
OD;
-
result
END; # encode #
-
-
# decode "encoded", using "initial table" as the starting symbol table #
PROC decode = ( []INT encoded, STRING initial table )STRING:
BEGIN
-
STRING result := "";
STRING symbol table := initial table;
-
FOR text pos FROM LWB encoded TO UPB encoded
DO
result
@@ -70,24 +55,17 @@ BEGIN
# the character is in the symbol table #
symbol table[ encoded[ text pos ] + LWB symbol table ]
FI;
-
# modify the symbol table so the latest character is at the front #
symbol table := move to front( symbol table, encoded[ text pos ] )
-
OD;
-
result
END; # decode #
-
-
# routine to test the encode and decode routines #
PROC test encode and decode = ( STRING text )VOID:
BEGIN
-
# initial value for the symbol table #
[]CHAR initial table = "abcdefghijklmnopqrstuvwxyz";
-
# procedure to format the encoded value #
PROC format encoded value = ( []INT values )STRING:
BEGIN
@@ -96,13 +74,10 @@ BEGIN
DO
result +:= ( " " + whole( values[ value pos ], 0 ) )
OD;
-
result
END; # format encoded value #
-
[]INT encoded = encode( text, initial table );
STRING decoded = decode( encoded, initial table );
-
print( ( ( text
+ " encodes to ["
+ format encoded value( encoded )
@@ -120,18 +95,11 @@ BEGIN
, newline
)
)
-
END; # test encode and decode #
-
-
-main: (
-
test encode and decode( "broood" )
; test encode and decode( "bananaaa" )
; test encode and decode( "hiphophiphop" )
# ; test encode and decode( "abcdefghijklmnopqrstuvwxyz" ) #
# ; test encode and decode( "zyxwvutsrqponmlkjihgfedcba" ) #
-
-)
diff --git a/Task/Move-to-front-algorithm/Elixir/move-to-front-algorithm.elixir b/Task/Move-to-front-algorithm/Elixir/move-to-front-algorithm.ex
similarity index 100%
rename from Task/Move-to-front-algorithm/Elixir/move-to-front-algorithm.elixir
rename to Task/Move-to-front-algorithm/Elixir/move-to-front-algorithm.ex
diff --git a/Task/Move-to-front-algorithm/Julia/move-to-front-algorithm.julia b/Task/Move-to-front-algorithm/Julia/move-to-front-algorithm.jl
similarity index 100%
rename from Task/Move-to-front-algorithm/Julia/move-to-front-algorithm.julia
rename to Task/Move-to-front-algorithm/Julia/move-to-front-algorithm.jl
diff --git a/Task/Move-to-front-algorithm/Kotlin/move-to-front-algorithm.kotlin b/Task/Move-to-front-algorithm/Kotlin/move-to-front-algorithm.kts
similarity index 100%
rename from Task/Move-to-front-algorithm/Kotlin/move-to-front-algorithm.kotlin
rename to Task/Move-to-front-algorithm/Kotlin/move-to-front-algorithm.kts
diff --git a/Task/Move-to-front-algorithm/Rust/move-to-front-algorithm.rust b/Task/Move-to-front-algorithm/Rust/move-to-front-algorithm.rs
similarity index 100%
rename from Task/Move-to-front-algorithm/Rust/move-to-front-algorithm.rust
rename to Task/Move-to-front-algorithm/Rust/move-to-front-algorithm.rs
diff --git a/Task/Multi-base-primes/Julia/multi-base-primes-1.julia b/Task/Multi-base-primes/Julia/multi-base-primes-1.jl
similarity index 100%
rename from Task/Multi-base-primes/Julia/multi-base-primes-1.julia
rename to Task/Multi-base-primes/Julia/multi-base-primes-1.jl
diff --git a/Task/Multi-base-primes/Julia/multi-base-primes-2.julia b/Task/Multi-base-primes/Julia/multi-base-primes-2.jl
similarity index 100%
rename from Task/Multi-base-primes/Julia/multi-base-primes-2.julia
rename to Task/Multi-base-primes/Julia/multi-base-primes-2.jl
diff --git a/Task/Multi-base-primes/Rust/multi-base-primes-1.rust b/Task/Multi-base-primes/Rust/multi-base-primes-1.rs
similarity index 100%
rename from Task/Multi-base-primes/Rust/multi-base-primes-1.rust
rename to Task/Multi-base-primes/Rust/multi-base-primes-1.rs
diff --git a/Task/Multi-base-primes/Rust/multi-base-primes-2.rust b/Task/Multi-base-primes/Rust/multi-base-primes-2.rs
similarity index 100%
rename from Task/Multi-base-primes/Rust/multi-base-primes-2.rust
rename to Task/Multi-base-primes/Rust/multi-base-primes-2.rs
diff --git a/Task/Multi-dimensional-array/Delphi/multi-dimensional-array.delphi b/Task/Multi-dimensional-array/Delphi/multi-dimensional-array.pas
similarity index 100%
rename from Task/Multi-dimensional-array/Delphi/multi-dimensional-array.delphi
rename to Task/Multi-dimensional-array/Delphi/multi-dimensional-array.pas
diff --git a/Task/Multi-dimensional-array/Julia/multi-dimensional-array.julia b/Task/Multi-dimensional-array/Julia/multi-dimensional-array.jl
similarity index 100%
rename from Task/Multi-dimensional-array/Julia/multi-dimensional-array.julia
rename to Task/Multi-dimensional-array/Julia/multi-dimensional-array.jl
diff --git a/Task/Multi-dimensional-array/Kotlin/multi-dimensional-array.kotlin b/Task/Multi-dimensional-array/Kotlin/multi-dimensional-array.kts
similarity index 100%
rename from Task/Multi-dimensional-array/Kotlin/multi-dimensional-array.kotlin
rename to Task/Multi-dimensional-array/Kotlin/multi-dimensional-array.kts
diff --git a/Task/Multifactorial/Crystal/multifactorial.crystal b/Task/Multifactorial/Crystal/multifactorial.cr
similarity index 100%
rename from Task/Multifactorial/Crystal/multifactorial.crystal
rename to Task/Multifactorial/Crystal/multifactorial.cr
diff --git a/Task/Multifactorial/Delphi/multifactorial.delphi b/Task/Multifactorial/Delphi/multifactorial.pas
similarity index 100%
rename from Task/Multifactorial/Delphi/multifactorial.delphi
rename to Task/Multifactorial/Delphi/multifactorial.pas
diff --git a/Task/Multifactorial/Elixir/multifactorial.elixir b/Task/Multifactorial/Elixir/multifactorial.ex
similarity index 100%
rename from Task/Multifactorial/Elixir/multifactorial.elixir
rename to Task/Multifactorial/Elixir/multifactorial.ex
diff --git a/Task/Multifactorial/Julia/multifactorial.julia b/Task/Multifactorial/Julia/multifactorial.jl
similarity index 100%
rename from Task/Multifactorial/Julia/multifactorial.julia
rename to Task/Multifactorial/Julia/multifactorial.jl
diff --git a/Task/Multifactorial/Kotlin/multifactorial.kotlin b/Task/Multifactorial/Kotlin/multifactorial.kts
similarity index 100%
rename from Task/Multifactorial/Kotlin/multifactorial.kotlin
rename to Task/Multifactorial/Kotlin/multifactorial.kts
diff --git a/Task/Multifactorial/OCaml/multifactorial.ocaml b/Task/Multifactorial/OCaml/multifactorial.ml
similarity index 100%
rename from Task/Multifactorial/OCaml/multifactorial.ocaml
rename to Task/Multifactorial/OCaml/multifactorial.ml
diff --git a/Task/Multifactorial/Rust/multifactorial.rust b/Task/Multifactorial/Rust/multifactorial.rs
similarity index 100%
rename from Task/Multifactorial/Rust/multifactorial.rust
rename to Task/Multifactorial/Rust/multifactorial.rs
diff --git a/Task/Multifactorial/Scheme/multifactorial.ss b/Task/Multifactorial/Scheme/multifactorial.scm
similarity index 100%
rename from Task/Multifactorial/Scheme/multifactorial.ss
rename to Task/Multifactorial/Scheme/multifactorial.scm
diff --git a/Task/Multiple-distinct-objects/Delphi/multiple-distinct-objects-1.delphi b/Task/Multiple-distinct-objects/Delphi/multiple-distinct-objects-1.pas
similarity index 100%
rename from Task/Multiple-distinct-objects/Delphi/multiple-distinct-objects-1.delphi
rename to Task/Multiple-distinct-objects/Delphi/multiple-distinct-objects-1.pas
diff --git a/Task/Multiple-distinct-objects/Delphi/multiple-distinct-objects-2.delphi b/Task/Multiple-distinct-objects/Delphi/multiple-distinct-objects-2.pas
similarity index 100%
rename from Task/Multiple-distinct-objects/Delphi/multiple-distinct-objects-2.delphi
rename to Task/Multiple-distinct-objects/Delphi/multiple-distinct-objects-2.pas
diff --git a/Task/Multiple-distinct-objects/Elixir/multiple-distinct-objects.elixir b/Task/Multiple-distinct-objects/Elixir/multiple-distinct-objects.ex
similarity index 100%
rename from Task/Multiple-distinct-objects/Elixir/multiple-distinct-objects.elixir
rename to Task/Multiple-distinct-objects/Elixir/multiple-distinct-objects.ex
diff --git a/Task/Multiple-distinct-objects/Julia/multiple-distinct-objects-1.julia b/Task/Multiple-distinct-objects/Julia/multiple-distinct-objects-1.jl
similarity index 100%
rename from Task/Multiple-distinct-objects/Julia/multiple-distinct-objects-1.julia
rename to Task/Multiple-distinct-objects/Julia/multiple-distinct-objects-1.jl
diff --git a/Task/Multiple-distinct-objects/Julia/multiple-distinct-objects-2.julia b/Task/Multiple-distinct-objects/Julia/multiple-distinct-objects-2.jl
similarity index 100%
rename from Task/Multiple-distinct-objects/Julia/multiple-distinct-objects-2.julia
rename to Task/Multiple-distinct-objects/Julia/multiple-distinct-objects-2.jl
diff --git a/Task/Multiple-distinct-objects/Kotlin/multiple-distinct-objects.kotlin b/Task/Multiple-distinct-objects/Kotlin/multiple-distinct-objects.kts
similarity index 100%
rename from Task/Multiple-distinct-objects/Kotlin/multiple-distinct-objects.kotlin
rename to Task/Multiple-distinct-objects/Kotlin/multiple-distinct-objects.kts
diff --git a/Task/Multiple-distinct-objects/OCaml/multiple-distinct-objects-1.ocaml b/Task/Multiple-distinct-objects/OCaml/multiple-distinct-objects-1.ml
similarity index 100%
rename from Task/Multiple-distinct-objects/OCaml/multiple-distinct-objects-1.ocaml
rename to Task/Multiple-distinct-objects/OCaml/multiple-distinct-objects-1.ml
diff --git a/Task/Multiple-distinct-objects/OCaml/multiple-distinct-objects-2.ocaml b/Task/Multiple-distinct-objects/OCaml/multiple-distinct-objects-2.ml
similarity index 100%
rename from Task/Multiple-distinct-objects/OCaml/multiple-distinct-objects-2.ocaml
rename to Task/Multiple-distinct-objects/OCaml/multiple-distinct-objects-2.ml
diff --git a/Task/Multiple-distinct-objects/Rust/multiple-distinct-objects.rust b/Task/Multiple-distinct-objects/Rust/multiple-distinct-objects.rs
similarity index 100%
rename from Task/Multiple-distinct-objects/Rust/multiple-distinct-objects.rust
rename to Task/Multiple-distinct-objects/Rust/multiple-distinct-objects.rs
diff --git a/Task/Multiple-regression/Julia/multiple-regression.julia b/Task/Multiple-regression/Julia/multiple-regression.jl
similarity index 100%
rename from Task/Multiple-regression/Julia/multiple-regression.julia
rename to Task/Multiple-regression/Julia/multiple-regression.jl
diff --git a/Task/Multiple-regression/Kotlin/multiple-regression.kotlin b/Task/Multiple-regression/Kotlin/multiple-regression.kts
similarity index 100%
rename from Task/Multiple-regression/Kotlin/multiple-regression.kotlin
rename to Task/Multiple-regression/Kotlin/multiple-regression.kts
diff --git a/Task/Multiplication-tables/Delphi/multiplication-tables.delphi b/Task/Multiplication-tables/Delphi/multiplication-tables.pas
similarity index 100%
rename from Task/Multiplication-tables/Delphi/multiplication-tables.delphi
rename to Task/Multiplication-tables/Delphi/multiplication-tables.pas
diff --git a/Task/Multiplication-tables/Elixir/multiplication-tables.elixir b/Task/Multiplication-tables/Elixir/multiplication-tables.ex
similarity index 100%
rename from Task/Multiplication-tables/Elixir/multiplication-tables.elixir
rename to Task/Multiplication-tables/Elixir/multiplication-tables.ex
diff --git a/Task/Multiplication-tables/Euphoria/multiplication-tables.euphoria b/Task/Multiplication-tables/Euphoria/multiplication-tables.ex
similarity index 100%
rename from Task/Multiplication-tables/Euphoria/multiplication-tables.euphoria
rename to Task/Multiplication-tables/Euphoria/multiplication-tables.ex
diff --git a/Task/Multiplication-tables/JavaScript/multiplication-tables-5.js b/Task/Multiplication-tables/JavaScript/multiplication-tables-5.js
index 075688f2fb..0005ced912 100644
--- a/Task/Multiplication-tables/JavaScript/multiplication-tables-5.js
+++ b/Task/Multiplication-tables/JavaScript/multiplication-tables-5.js
@@ -9,15 +9,13 @@
return [
["x", ...xs],
- ...xs.flatMap(
- x => [
- [x, ...xs.flatMap(
- y => y < x ? (
- [""]
- ) : [`${x * y}`]
- )]
- ]
- )
+ ...xs.flatMap(x => [
+ [x, ...xs.flatMap(
+ y => y < x
+ ? [""]
+ : [`${x * y}`]
+ )]
+ ])
];
};
@@ -32,7 +30,8 @@
"width:33em",
"height:33em",
"table-layout:fixed"
- ].join(";")
+ ]
+ .join(";")
})(
multTable(1)(12)
);
@@ -40,10 +39,12 @@
// ---------------- GENERIC FUNCTIONS ----------------
// enumFromTo :: Int -> Int -> [Int]
- const enumFromTo = m => n =>
- n >= m ? Array.from({
- length: Math.floor(n - m) + 1
- }, (_, i) => m + i) : [];
+ const enumFromTo = m =>
+ // Enumeration of the integers from m to n.
+ n => Array.from(
+ { length: 1 + n - m },
+ (_, i) => m + i
+ );
// ------------------- FORMATTING --------------------
@@ -53,18 +54,21 @@
rows => {
const
style = ["class", "style"].reduce(
- (a, k) => k in opts ? (
- `${a}${k}="${opts[k]}" `
- ) : a, ""
+ (a, k) => k in opts
+ ? `${a}${k}="${opts[k]}" `
+ : a,
+ ""
),
body = rows.map((row, i) => {
const
cells = row.map(
x => `${x}` || " "
- ).join(" || ");
+ )
+ .join(" || ");
return `${i ? "|" : "!"} ${cells}`;
- }).join("\n|-\n");
+ })
+ .join("\n|-\n");
return `{| ${style}\n${body}\n|}`;
};
diff --git a/Task/Multiplication-tables/Julia/multiplication-tables.julia b/Task/Multiplication-tables/Julia/multiplication-tables.jl
similarity index 100%
rename from Task/Multiplication-tables/Julia/multiplication-tables.julia
rename to Task/Multiplication-tables/Julia/multiplication-tables.jl
diff --git a/Task/Multiplication-tables/Kotlin/multiplication-tables-1.kotlin b/Task/Multiplication-tables/Kotlin/multiplication-tables-1.kts
similarity index 100%
rename from Task/Multiplication-tables/Kotlin/multiplication-tables-1.kotlin
rename to Task/Multiplication-tables/Kotlin/multiplication-tables-1.kts
diff --git a/Task/Multiplication-tables/Kotlin/multiplication-tables-2.kotlin b/Task/Multiplication-tables/Kotlin/multiplication-tables-2.kts
similarity index 100%
rename from Task/Multiplication-tables/Kotlin/multiplication-tables-2.kotlin
rename to Task/Multiplication-tables/Kotlin/multiplication-tables-2.kts
diff --git a/Task/Multiplication-tables/Nu/multiplication-tables.nu b/Task/Multiplication-tables/Nu/multiplication-tables.nu
new file mode 100644
index 0000000000..b1cba8fc34
--- /dev/null
+++ b/Task/Multiplication-tables/Nu/multiplication-tables.nu
@@ -0,0 +1,7 @@
+1..12 | each {|x|
+ 1..12 | each {|y|
+ if $x > $y and $y > 1 { '' } else { $x * $y }
+ }
+ | fill -a r -w 4 | str join
+}
+| str join "\n"
diff --git a/Task/Multiplication-tables/OCaml/multiplication-tables.ocaml b/Task/Multiplication-tables/OCaml/multiplication-tables.ml
similarity index 100%
rename from Task/Multiplication-tables/OCaml/multiplication-tables.ocaml
rename to Task/Multiplication-tables/OCaml/multiplication-tables.ml
diff --git a/Task/Multiplication-tables/PascalABC.NET/multiplication-tables.pas b/Task/Multiplication-tables/PascalABC.NET/multiplication-tables.pas
new file mode 100644
index 0000000000..6791ee2e81
--- /dev/null
+++ b/Task/Multiplication-tables/PascalABC.NET/multiplication-tables.pas
@@ -0,0 +1,10 @@
+##
+write(' x|');
+for var i := 1 to 12 do write(i:4);
+writeln(#13, '---+', '-' * 48);
+for var i := 1 to 12 do
+begin
+ write(i:3, '|', ' ' * (4 * i - 4));
+ for var j := i to 12 do write(i * j:4);
+ writeln;
+end;
diff --git a/Task/Multiplication-tables/Rust/multiplication-tables-1.rust b/Task/Multiplication-tables/Rust/multiplication-tables-1.rs
similarity index 100%
rename from Task/Multiplication-tables/Rust/multiplication-tables-1.rust
rename to Task/Multiplication-tables/Rust/multiplication-tables-1.rs
diff --git a/Task/Multiplication-tables/Rust/multiplication-tables-2.rust b/Task/Multiplication-tables/Rust/multiplication-tables-2.rs
similarity index 100%
rename from Task/Multiplication-tables/Rust/multiplication-tables-2.rust
rename to Task/Multiplication-tables/Rust/multiplication-tables-2.rs
diff --git a/Task/Multiplication-tables/Scheme/multiplication-tables.ss b/Task/Multiplication-tables/Scheme/multiplication-tables.scm
similarity index 100%
rename from Task/Multiplication-tables/Scheme/multiplication-tables.ss
rename to Task/Multiplication-tables/Scheme/multiplication-tables.scm
diff --git a/Task/Multiplicative-order/Julia/multiplicative-order.julia b/Task/Multiplicative-order/Julia/multiplicative-order.jl
similarity index 100%
rename from Task/Multiplicative-order/Julia/multiplicative-order.julia
rename to Task/Multiplicative-order/Julia/multiplicative-order.jl
diff --git a/Task/Multiplicative-order/Kotlin/multiplicative-order.kotlin b/Task/Multiplicative-order/Kotlin/multiplicative-order.kts
similarity index 100%
rename from Task/Multiplicative-order/Kotlin/multiplicative-order.kotlin
rename to Task/Multiplicative-order/Kotlin/multiplicative-order.kts
diff --git a/Task/Multisplit/Delphi/multisplit.delphi b/Task/Multisplit/Delphi/multisplit.pas
similarity index 100%
rename from Task/Multisplit/Delphi/multisplit.delphi
rename to Task/Multisplit/Delphi/multisplit.pas
diff --git a/Task/Multisplit/Elixir/multisplit.elixir b/Task/Multisplit/Elixir/multisplit.ex
similarity index 100%
rename from Task/Multisplit/Elixir/multisplit.elixir
rename to Task/Multisplit/Elixir/multisplit.ex
diff --git a/Task/Multisplit/Julia/multisplit.julia b/Task/Multisplit/Julia/multisplit.jl
similarity index 100%
rename from Task/Multisplit/Julia/multisplit.julia
rename to Task/Multisplit/Julia/multisplit.jl
diff --git a/Task/Multisplit/Kotlin/multisplit.kotlin b/Task/Multisplit/Kotlin/multisplit.kts
similarity index 100%
rename from Task/Multisplit/Kotlin/multisplit.kotlin
rename to Task/Multisplit/Kotlin/multisplit.kts
diff --git a/Task/Multisplit/NewLISP/multisplit.l b/Task/Multisplit/NewLISP/multisplit.l
new file mode 100644
index 0000000000..6c32993b5c
--- /dev/null
+++ b/Task/Multisplit/NewLISP/multisplit.l
@@ -0,0 +1,9 @@
+(define (multi-split str seps)
+ (let (parsed
+ (find-all
+ (string {((.*?)(} (join (map string seps) "|") {))|(.+)$})
+ str
+ (if (= "" $3) (list $4) (list $2 $3))))
+ (list parsed (map first parsed))))
+
+(multi-split "a!===b=!=c" '(== != =))
diff --git a/Task/Multisplit/PascalABC.NET/multisplit.pas b/Task/Multisplit/PascalABC.NET/multisplit.pas
new file mode 100644
index 0000000000..b4c2e1bfba
--- /dev/null
+++ b/Task/Multisplit/PascalABC.NET/multisplit.pas
@@ -0,0 +1,2 @@
+// Multisplit. Nigel Galloway: August 16th., 2024
+## print('a!===b=!=c'.Split(|'==','!=','='|,System.StringSplitOptions.None))
diff --git a/Task/Multisplit/Scheme/multisplit.ss b/Task/Multisplit/Scheme/multisplit.scm
similarity index 100%
rename from Task/Multisplit/Scheme/multisplit.ss
rename to Task/Multisplit/Scheme/multisplit.scm
diff --git a/Task/Munchausen-numbers/ALGOL-68/munchausen-numbers-1.alg b/Task/Munchausen-numbers/ALGOL-68/munchausen-numbers-1.alg
index b3320f620c..1ef8d89dfd 100644
--- a/Task/Munchausen-numbers/ALGOL-68/munchausen-numbers-1.alg
+++ b/Task/Munchausen-numbers/ALGOL-68/munchausen-numbers-1.alg
@@ -31,7 +31,7 @@ WHILE d1 < 6 DO
d2 := 0;
d2 part := 0;
d1 +:= 1;
- d1 part +:= 1000;
+ d1 part +:= 1000
FI
FI
FI
diff --git a/Task/Munchausen-numbers/Elixir/munchausen-numbers.elixir b/Task/Munchausen-numbers/Elixir/munchausen-numbers.ex
similarity index 100%
rename from Task/Munchausen-numbers/Elixir/munchausen-numbers.elixir
rename to Task/Munchausen-numbers/Elixir/munchausen-numbers.ex
diff --git a/Task/Munchausen-numbers/Julia/munchausen-numbers.julia b/Task/Munchausen-numbers/Julia/munchausen-numbers.jl
similarity index 100%
rename from Task/Munchausen-numbers/Julia/munchausen-numbers.julia
rename to Task/Munchausen-numbers/Julia/munchausen-numbers.jl
diff --git a/Task/Munchausen-numbers/Kotlin/munchausen-numbers.kotlin b/Task/Munchausen-numbers/Kotlin/munchausen-numbers.kts
similarity index 100%
rename from Task/Munchausen-numbers/Kotlin/munchausen-numbers.kotlin
rename to Task/Munchausen-numbers/Kotlin/munchausen-numbers.kts
diff --git a/Task/Munchausen-numbers/OCaml/munchausen-numbers.ocaml b/Task/Munchausen-numbers/OCaml/munchausen-numbers.ml
similarity index 100%
rename from Task/Munchausen-numbers/OCaml/munchausen-numbers.ocaml
rename to Task/Munchausen-numbers/OCaml/munchausen-numbers.ml
diff --git a/Task/Munchausen-numbers/Rust/munchausen-numbers-1.rust b/Task/Munchausen-numbers/Rust/munchausen-numbers-1.rs
similarity index 100%
rename from Task/Munchausen-numbers/Rust/munchausen-numbers-1.rust
rename to Task/Munchausen-numbers/Rust/munchausen-numbers-1.rs
diff --git a/Task/Munchausen-numbers/Rust/munchausen-numbers-2.rust b/Task/Munchausen-numbers/Rust/munchausen-numbers-2.rs
similarity index 100%
rename from Task/Munchausen-numbers/Rust/munchausen-numbers-2.rust
rename to Task/Munchausen-numbers/Rust/munchausen-numbers-2.rs
diff --git a/Task/Munching-squares/Delphi/munching-squares.delphi b/Task/Munching-squares/Delphi/munching-squares.pas
similarity index 100%
rename from Task/Munching-squares/Delphi/munching-squares.delphi
rename to Task/Munching-squares/Delphi/munching-squares.pas
diff --git a/Task/Munching-squares/EasyLang/munching-squares.easy b/Task/Munching-squares/EasyLang/munching-squares.easy
index 0a94731bac..b888d2e392 100644
--- a/Task/Munching-squares/EasyLang/munching-squares.easy
+++ b/Task/Munching-squares/EasyLang/munching-squares.easy
@@ -1,9 +1,8 @@
sc = 100 / 64
for x range0 64
for y range0 64
- h = bitand bitxor x y 63
- c = h / 63
- color3 c c c
+ h = bitand bitxor x y 63 / 63
+ color3 h h h
move x * sc y * sc
rect sc + 0.1 sc + 0.1
.
diff --git a/Task/Munching-squares/Julia/munching-squares.julia b/Task/Munching-squares/Julia/munching-squares.jl
similarity index 100%
rename from Task/Munching-squares/Julia/munching-squares.julia
rename to Task/Munching-squares/Julia/munching-squares.jl
diff --git a/Task/Munching-squares/Kotlin/munching-squares.kotlin b/Task/Munching-squares/Kotlin/munching-squares.kts
similarity index 100%
rename from Task/Munching-squares/Kotlin/munching-squares.kotlin
rename to Task/Munching-squares/Kotlin/munching-squares.kts
diff --git a/Task/Munching-squares/OCaml/munching-squares.ocaml b/Task/Munching-squares/OCaml/munching-squares.ml
similarity index 100%
rename from Task/Munching-squares/OCaml/munching-squares.ocaml
rename to Task/Munching-squares/OCaml/munching-squares.ml
diff --git a/Task/Munching-squares/Rust/munching-squares.rust b/Task/Munching-squares/Rust/munching-squares.rs
similarity index 100%
rename from Task/Munching-squares/Rust/munching-squares.rust
rename to Task/Munching-squares/Rust/munching-squares.rs
diff --git a/Task/Musical-scale/Delphi/musical-scale.delphi b/Task/Musical-scale/Delphi/musical-scale.pas
similarity index 100%
rename from Task/Musical-scale/Delphi/musical-scale.delphi
rename to Task/Musical-scale/Delphi/musical-scale.pas
diff --git a/Task/Musical-scale/Julia/musical-scale.julia b/Task/Musical-scale/Julia/musical-scale.jl
similarity index 100%
rename from Task/Musical-scale/Julia/musical-scale.julia
rename to Task/Musical-scale/Julia/musical-scale.jl
diff --git a/Task/Musical-scale/Kotlin/musical-scale.kotlin b/Task/Musical-scale/Kotlin/musical-scale.kts
similarity index 100%
rename from Task/Musical-scale/Kotlin/musical-scale.kotlin
rename to Task/Musical-scale/Kotlin/musical-scale.kts
diff --git a/Task/Mutex/Delphi/mutex.delphi b/Task/Mutex/Delphi/mutex.pas
similarity index 100%
rename from Task/Mutex/Delphi/mutex.delphi
rename to Task/Mutex/Delphi/mutex.pas
diff --git a/Task/Mutex/Julia/mutex-1.julia b/Task/Mutex/Julia/mutex-1.jl
similarity index 100%
rename from Task/Mutex/Julia/mutex-1.julia
rename to Task/Mutex/Julia/mutex-1.jl
diff --git a/Task/Mutex/Julia/mutex-2.julia b/Task/Mutex/Julia/mutex-2.jl
similarity index 100%
rename from Task/Mutex/Julia/mutex-2.julia
rename to Task/Mutex/Julia/mutex-2.jl
diff --git a/Task/Mutex/Julia/mutex-3.julia b/Task/Mutex/Julia/mutex-3.jl
similarity index 100%
rename from Task/Mutex/Julia/mutex-3.julia
rename to Task/Mutex/Julia/mutex-3.jl
diff --git a/Task/Mutex/Julia/mutex-4.julia b/Task/Mutex/Julia/mutex-4.jl
similarity index 100%
rename from Task/Mutex/Julia/mutex-4.julia
rename to Task/Mutex/Julia/mutex-4.jl
diff --git a/Task/Mutex/Julia/mutex-5.julia b/Task/Mutex/Julia/mutex-5.jl
similarity index 100%
rename from Task/Mutex/Julia/mutex-5.julia
rename to Task/Mutex/Julia/mutex-5.jl
diff --git a/Task/Mutex/Julia/mutex-6.julia b/Task/Mutex/Julia/mutex-6.jl
similarity index 100%
rename from Task/Mutex/Julia/mutex-6.julia
rename to Task/Mutex/Julia/mutex-6.jl
diff --git a/Task/Mutex/OCaml/mutex.ocaml b/Task/Mutex/OCaml/mutex.ml
similarity index 100%
rename from Task/Mutex/OCaml/mutex.ocaml
rename to Task/Mutex/OCaml/mutex.ml
diff --git a/Task/Mutex/Rust/mutex.rust b/Task/Mutex/Rust/mutex.rs
similarity index 100%
rename from Task/Mutex/Rust/mutex.rust
rename to Task/Mutex/Rust/mutex.rs
diff --git a/Task/Mutual-recursion/Delphi/mutual-recursion.delphi b/Task/Mutual-recursion/Delphi/mutual-recursion.pas
similarity index 100%
rename from Task/Mutual-recursion/Delphi/mutual-recursion.delphi
rename to Task/Mutual-recursion/Delphi/mutual-recursion.pas
diff --git a/Task/Mutual-recursion/Elixir/mutual-recursion.elixir b/Task/Mutual-recursion/Elixir/mutual-recursion.ex
similarity index 100%
rename from Task/Mutual-recursion/Elixir/mutual-recursion.elixir
rename to Task/Mutual-recursion/Elixir/mutual-recursion.ex
diff --git a/Task/Mutual-recursion/Euphoria/mutual-recursion.euphoria b/Task/Mutual-recursion/Euphoria/mutual-recursion.ex
similarity index 100%
rename from Task/Mutual-recursion/Euphoria/mutual-recursion.euphoria
rename to Task/Mutual-recursion/Euphoria/mutual-recursion.ex
diff --git a/Task/Mutual-recursion/J/mutual-recursion-1.j b/Task/Mutual-recursion/J/mutual-recursion-1.j
index 29f97a40e8..c8b6ca40c4 100644
--- a/Task/Mutual-recursion/J/mutual-recursion-1.j
+++ b/Task/Mutual-recursion/J/mutual-recursion-1.j
@@ -1,2 +1,2 @@
-F =: 1:`(- M @ $: @ <:) @.* M."0
-M =: 0:`(- F @ $: @ <:) @.* M."0
+F =: 1:`(- M@$:@<:)@.* M."0
+M =: 0:`(- F@$:@<:)@.* M."0
diff --git a/Task/Mutual-recursion/Julia/mutual-recursion.julia b/Task/Mutual-recursion/Julia/mutual-recursion.jl
similarity index 100%
rename from Task/Mutual-recursion/Julia/mutual-recursion.julia
rename to Task/Mutual-recursion/Julia/mutual-recursion.jl
diff --git a/Task/Mutual-recursion/Kotlin/mutual-recursion.kotlin b/Task/Mutual-recursion/Kotlin/mutual-recursion.kts
similarity index 100%
rename from Task/Mutual-recursion/Kotlin/mutual-recursion.kotlin
rename to Task/Mutual-recursion/Kotlin/mutual-recursion.kts
diff --git a/Task/Mutual-recursion/OCaml/mutual-recursion.ocaml b/Task/Mutual-recursion/OCaml/mutual-recursion.ml
similarity index 100%
rename from Task/Mutual-recursion/OCaml/mutual-recursion.ocaml
rename to Task/Mutual-recursion/OCaml/mutual-recursion.ml
diff --git a/Task/Mutual-recursion/PascalABC.NET/mutual-recursion.pas b/Task/Mutual-recursion/PascalABC.NET/mutual-recursion.pas
new file mode 100644
index 0000000000..30c19f3292
--- /dev/null
+++ b/Task/Mutual-recursion/PascalABC.NET/mutual-recursion.pas
@@ -0,0 +1,7 @@
+##
+function M(n: integer): integer; forward;
+function F(n: integer): integer := n < 1 ? 1 : n - M(F(n - 1));
+function M(n: integer): integer := n < 1 ? 0 : n - F(M(n - 1));
+
+(0..19).select(x -> F(x)).println;
+(0..19).select(x -> M(x)).println;
diff --git a/Task/Mutual-recursion/Rust/mutual-recursion.rust b/Task/Mutual-recursion/Rust/mutual-recursion.rs
similarity index 100%
rename from Task/Mutual-recursion/Rust/mutual-recursion.rust
rename to Task/Mutual-recursion/Rust/mutual-recursion.rs
diff --git a/Task/Mutual-recursion/Scheme/mutual-recursion-1.ss b/Task/Mutual-recursion/Scheme/mutual-recursion-1.scm
similarity index 100%
rename from Task/Mutual-recursion/Scheme/mutual-recursion-1.ss
rename to Task/Mutual-recursion/Scheme/mutual-recursion-1.scm
diff --git a/Task/Mutual-recursion/Scheme/mutual-recursion-2.ss b/Task/Mutual-recursion/Scheme/mutual-recursion-2.scm
similarity index 100%
rename from Task/Mutual-recursion/Scheme/mutual-recursion-2.ss
rename to Task/Mutual-recursion/Scheme/mutual-recursion-2.scm
diff --git a/Task/N-queens-problem/Delphi/n-queens-problem.delphi b/Task/N-queens-problem/Delphi/n-queens-problem.pas
similarity index 100%
rename from Task/N-queens-problem/Delphi/n-queens-problem.delphi
rename to Task/N-queens-problem/Delphi/n-queens-problem.pas
diff --git a/Task/N-queens-problem/Elixir/n-queens-problem.elixir b/Task/N-queens-problem/Elixir/n-queens-problem.ex
similarity index 100%
rename from Task/N-queens-problem/Elixir/n-queens-problem.elixir
rename to Task/N-queens-problem/Elixir/n-queens-problem.ex
diff --git a/Task/N-queens-problem/Julia/n-queens-problem.julia b/Task/N-queens-problem/Julia/n-queens-problem.jl
similarity index 100%
rename from Task/N-queens-problem/Julia/n-queens-problem.julia
rename to Task/N-queens-problem/Julia/n-queens-problem.jl
diff --git a/Task/N-queens-problem/Kotlin/n-queens-problem.kotlin b/Task/N-queens-problem/Kotlin/n-queens-problem.kts
similarity index 100%
rename from Task/N-queens-problem/Kotlin/n-queens-problem.kotlin
rename to Task/N-queens-problem/Kotlin/n-queens-problem.kts
diff --git a/Task/N-queens-problem/OCaml/n-queens-problem-1.ocaml b/Task/N-queens-problem/OCaml/n-queens-problem-1.ml
similarity index 100%
rename from Task/N-queens-problem/OCaml/n-queens-problem-1.ocaml
rename to Task/N-queens-problem/OCaml/n-queens-problem-1.ml
diff --git a/Task/N-queens-problem/OCaml/n-queens-problem-2.ocaml b/Task/N-queens-problem/OCaml/n-queens-problem-2.ml
similarity index 100%
rename from Task/N-queens-problem/OCaml/n-queens-problem-2.ocaml
rename to Task/N-queens-problem/OCaml/n-queens-problem-2.ml
diff --git a/Task/N-queens-problem/Rust/n-queens-problem-1.rust b/Task/N-queens-problem/Rust/n-queens-problem-1.rs
similarity index 100%
rename from Task/N-queens-problem/Rust/n-queens-problem-1.rust
rename to Task/N-queens-problem/Rust/n-queens-problem-1.rs
diff --git a/Task/N-queens-problem/Rust/n-queens-problem-2.rust b/Task/N-queens-problem/Rust/n-queens-problem-2.rs
similarity index 100%
rename from Task/N-queens-problem/Rust/n-queens-problem-2.rust
rename to Task/N-queens-problem/Rust/n-queens-problem-2.rs
diff --git a/Task/N-queens-problem/Rust/n-queens-problem-3.rust b/Task/N-queens-problem/Rust/n-queens-problem-3.rs
similarity index 100%
rename from Task/N-queens-problem/Rust/n-queens-problem-3.rust
rename to Task/N-queens-problem/Rust/n-queens-problem-3.rs
diff --git a/Task/N-queens-problem/Scheme/n-queens-problem.ss b/Task/N-queens-problem/Scheme/n-queens-problem.scm
similarity index 100%
rename from Task/N-queens-problem/Scheme/n-queens-problem.ss
rename to Task/N-queens-problem/Scheme/n-queens-problem.scm
diff --git a/Task/N-queens-problem/Tailspin/n-queens-problem-2.tailspin b/Task/N-queens-problem/Tailspin/n-queens-problem-2.tailspin
index c820a635c1..741791b63f 100644
--- a/Task/N-queens-problem/Tailspin/n-queens-problem-2.tailspin
+++ b/Task/N-queens-problem/Tailspin/n-queens-problem-2.tailspin
@@ -1,48 +1,31 @@
-templates queens
- def n: $;
- templates getRowColumn
- when ($@queens.freeRows($.r::raw) <=0>)> do 0 !
- when ($@queens.freeMaxs($.r::raw + $.c::raw) <=0>)> do 0 !
- when ($@queens.freeMins($.c::raw - $.r::raw + $n) <=0>)> do 0 !
- otherwise 1!
- end getRowColumn
-
- sink setRowColumn
- def p: $;
- @queens.freeRows($p.r::raw): $p.val::raw;
- @queens.freeMaxs($p.c::raw + $p.r::raw): $p.val::raw;
- @queens.freeMins($p.c::raw - $p.r::raw + $n): $p.val::raw;
- end setRowColumn
-
- data done <=1>
-
- templates placeQueen
- def c: $;
- row´1 -> #
- when