diff --git a/.gitignore b/.gitignore
index 26ab3c8d09..ecbdc2385f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,8 @@
/Cache/
/Meta/
/rosettacode.log
+/entry
+/pick
+/random-clojure-task
+/.clj-kondo/
+/.lsp/
diff --git a/Conf/lang.yaml b/Conf/lang.yaml
index 4ccf7202e4..bf92f9a54f 100644
--- a/Conf/lang.yaml
+++ b/Conf/lang.yaml
@@ -24,10 +24,12 @@ Action!: .action
ActionScript: .as
Acurity Architect: .acurity
Ada: .ada
+Adina: .adina
Agda: .agda
Agda2: .agda2
Agena: .agena
AHDL: .ahdl
+AIDED NATURAL LANGUAGE: .aided
Aikido: .aikido
Aime: .aime
Algae: .algae
@@ -51,6 +53,7 @@ Anyways: .anyways
Apex: .apex
APL: .apl
App Inventor: .app
+Apple: .apple
AppleScript: .applescript
Applesoft BASIC: .basic
Application Master: .app
@@ -60,6 +63,8 @@ Arbre: .arbre
Arc: .arc
Arendelle: .arendelle
Argile: .argile
+Aria: .aria
+ArkScript: .ark
ARM Assembly: .arm
ArnoldC: .arnoldc
Arturo: .arturo
@@ -138,6 +143,7 @@ C1R: .c1r
C2: .c2
C3: .c3
CafeOBJ: .cafeobj
+Calcscript: .calc
Caml: .caml
Casio BASIC: .basic
Cat: .cat
@@ -157,6 +163,7 @@ ChucK: .chuck
Cilk++: .cilk++
Cilk: .cilk
Cind: .cind
+CJam: .cjam
Clarion: .clarion
Clay: .clay
Clean: .clean
@@ -180,6 +187,7 @@ Common Lisp: .lisp
Component Pascal: .pas
Computer/zero Assembly: .0asm
ContextFree: .cf
+Convex: .convex
Coq: .coq
Corescript: .core
Cowgol: .cowgol
@@ -216,6 +224,7 @@ Draco: .draco
Dragon: .dragon
DreamBerd: .dreamberd
Dt: .dt
+DuckDB: .duckdb
DUP: .dup
DWScript: .dw
Dyalect: .dyalect
@@ -260,6 +269,7 @@ Evaldraw: .evaldraw
Excel: .excel
Explore: .explore
Extended BrainF***: .ebf
+Extended Color BASIC: .basic
Ezhil: .ezhil
F: .f
Factor: .factor
@@ -297,6 +307,7 @@ Frink: .frink
FRISC Assembly: .frisc
F Sharp: .fs
FTCBASIC: .basic
+FuncSug: .funcsug
FunL: .funl
Furor: .furor
FurryScript: .furryscript
@@ -329,6 +340,7 @@ Gnuplot: .gnuplot
Go!: .go
Go: .go
Goaldi: .goaldi
+Goboscript: .gobo
Golfscript: .golf
Golo: .golo
Goo: .goo
@@ -402,6 +414,7 @@ Julia: .jl
K: .k
Kabap: .kabap
Kamailio Script: .kamailio
+Kantalo: .kantalo
KAP: .kap
Kaya: .kaya
Keg: .keg
@@ -419,6 +432,7 @@ KQL: .kql
Ksh: .ksh
L++: .l++
LabVIEW: .labview
+Labyrinth: .labyrinth
Lambda Prolog: .pro
Lambdatalk: .lambdatalk
Lang: .lang
@@ -518,6 +532,7 @@ ML: .ml
ML/I: .mli
MLite: .mlite
MMIX: .mmix
+Mn: .mn
Modula-2: .mod2
Modula-3: .mod3
Mojo: .mojo
@@ -565,6 +580,7 @@ Nit: .nit
Niue: .niue
Nix: .nix
NLP++: .nlp++
+Nom: .num
NOWUT: .nowut
NQP: .nqp
NS-HUBASIC: .basic
@@ -581,6 +597,7 @@ Objeck: .objeck
ObjectIcon: .oi
Objective-C: .m
Object Pascal: .pas
+Object Pascal Implementations: .pas
OCaml: .ml
Occam: .occam
Octave: .octave
@@ -613,6 +630,7 @@ Pare: .pare
PARI/GP: .parigp
Pascal: .pas
PascalABC.NET: .pas
+Pascal-P: .pas
PASM: .pasm
PDP-11 Assembly: .pdp11
Pebble: .pebble
@@ -630,6 +648,7 @@ Phixmonti: .phixmonti
PHL: .phl
PHP: .php
Picat: .picat
+Pico-8: .pico8
PicoLisp: .l
Pict: .pict
Piet: .piet
@@ -648,6 +667,7 @@ PL/M: .plm
PL/pgSQL: .sql
PL/SQL: .sql
PLUS: .plus
+Pluto: .pluto
PLZ/SYS: .plz
Pointless: .pointless
Polyglot: .polyglot
@@ -711,6 +731,7 @@ ReScript: .re
Retro: .retro
Revolution: .rev
REXX: .rexx
+Rhombus: .rhombus
Rhope: .rhope
Rhovas: .rhovas
Ring: .ring
@@ -812,6 +833,7 @@ SystemVerilog: .v
TailDot: .taildot
Tailspin: .tailspin
TAL: .tal
+TAV: .tav
Tbas: .tbas
Tcl: .tcl
TechBASIC: .basic
@@ -872,6 +894,7 @@ UserRPL: .rpl
UTFool: .utfool
Uxntal: .uxnatl
V: .v
+V (Vlang): .v
Vala: .vala
Vale: .vale
VAX Assembly: .vax
@@ -893,7 +916,7 @@ Vorpal: .vorpal
Vox: .vox
VRML: .vrml
VTL-2: .vtl-2
-V (Vlang): .v
+Vyxal: .vyxal
Waduzitdo: .waduzitdo
Wart: .wart
WDTE: .wdte
diff --git a/Lang/AIDED-NATURAL-LANGUAGE/00-LANG.txt b/Lang/AIDED-NATURAL-LANGUAGE/00-LANG.txt
new file mode 100644
index 0000000000..c25a056976
--- /dev/null
+++ b/Lang/AIDED-NATURAL-LANGUAGE/00-LANG.txt
@@ -0,0 +1 @@
+{{stub}}{{language|Ayrch}}
\ No newline at end of file
diff --git a/Lang/AIDED-NATURAL-LANGUAGE/00-META.yaml b/Lang/AIDED-NATURAL-LANGUAGE/00-META.yaml
new file mode 100644
index 0000000000..8395003e03
--- /dev/null
+++ b/Lang/AIDED-NATURAL-LANGUAGE/00-META.yaml
@@ -0,0 +1,2 @@
+---
+from: http://rosettacode.org/wiki/Category:AIDED_NATURAL_LANGUAGE
diff --git a/Lang/ALGOL-60/Factorial b/Lang/ALGOL-60/Factorial
deleted file mode 120000
index 67b243e1d0..0000000000
--- a/Lang/ALGOL-60/Factorial
+++ /dev/null
@@ -1 +0,0 @@
-../../Task/Factorial/ALGOL-60
\ No newline at end of file
diff --git a/Lang/ALGOL-68/Date-manipulation b/Lang/ALGOL-68/Date-manipulation
new file mode 120000
index 0000000000..700d602cf1
--- /dev/null
+++ b/Lang/ALGOL-68/Date-manipulation
@@ -0,0 +1 @@
+../../Task/Date-manipulation/ALGOL-68
\ No newline at end of file
diff --git a/Lang/ALGOL-68/Distribution-of-0-digits-in-factorial-series b/Lang/ALGOL-68/Distribution-of-0-digits-in-factorial-series
new file mode 120000
index 0000000000..242e3aeb60
--- /dev/null
+++ b/Lang/ALGOL-68/Distribution-of-0-digits-in-factorial-series
@@ -0,0 +1 @@
+../../Task/Distribution-of-0-digits-in-factorial-series/ALGOL-68
\ No newline at end of file
diff --git a/Lang/ALGOL-68/Factorial b/Lang/ALGOL-68/Factorial
deleted file mode 120000
index b406800839..0000000000
--- a/Lang/ALGOL-68/Factorial
+++ /dev/null
@@ -1 +0,0 @@
-../../Task/Factorial/ALGOL-68
\ No newline at end of file
diff --git a/Lang/ALGOL-68/Knapsack-problem-Continuous b/Lang/ALGOL-68/Knapsack-problem-Continuous
new file mode 120000
index 0000000000..f49865cc46
--- /dev/null
+++ b/Lang/ALGOL-68/Knapsack-problem-Continuous
@@ -0,0 +1 @@
+../../Task/Knapsack-problem-Continuous/ALGOL-68
\ No newline at end of file
diff --git a/Lang/ALGOL-68/Word-wheel b/Lang/ALGOL-68/Word-wheel
new file mode 120000
index 0000000000..ab6aaa99f7
--- /dev/null
+++ b/Lang/ALGOL-68/Word-wheel
@@ -0,0 +1 @@
+../../Task/Word-wheel/ALGOL-68
\ No newline at end of file
diff --git a/Lang/ALGOL-W/Factorial b/Lang/ALGOL-W/Factorial
deleted file mode 120000
index 01c77fb141..0000000000
--- a/Lang/ALGOL-W/Factorial
+++ /dev/null
@@ -1 +0,0 @@
-../../Task/Factorial/ALGOL-W
\ No newline at end of file
diff --git a/Lang/ALGOL-W/Knapsack-problem-Continuous b/Lang/ALGOL-W/Knapsack-problem-Continuous
new file mode 120000
index 0000000000..fba28c1695
--- /dev/null
+++ b/Lang/ALGOL-W/Knapsack-problem-Continuous
@@ -0,0 +1 @@
+../../Task/Knapsack-problem-Continuous/ALGOL-W
\ No newline at end of file
diff --git a/Lang/ANSI-BASIC/AKS-test-for-primes b/Lang/ANSI-BASIC/AKS-test-for-primes
new file mode 120000
index 0000000000..4668d2783c
--- /dev/null
+++ b/Lang/ANSI-BASIC/AKS-test-for-primes
@@ -0,0 +1 @@
+../../Task/AKS-test-for-primes/ANSI-BASIC
\ No newline at end of file
diff --git a/Lang/ANSI-BASIC/Old-Russian-measure-of-length b/Lang/ANSI-BASIC/Old-Russian-measure-of-length
new file mode 120000
index 0000000000..81f64cd54c
--- /dev/null
+++ b/Lang/ANSI-BASIC/Old-Russian-measure-of-length
@@ -0,0 +1 @@
+../../Task/Old-Russian-measure-of-length/ANSI-BASIC
\ No newline at end of file
diff --git a/Lang/APL/Monte-Carlo-methods b/Lang/APL/Monte-Carlo-methods
new file mode 120000
index 0000000000..2cf831a11c
--- /dev/null
+++ b/Lang/APL/Monte-Carlo-methods
@@ -0,0 +1 @@
+../../Task/Monte-Carlo-methods/APL
\ No newline at end of file
diff --git a/Lang/ARM-Assembly/00-LANG.txt b/Lang/ARM-Assembly/00-LANG.txt
index 4c41d124d7..273ed5e757 100644
--- a/Lang/ARM-Assembly/00-LANG.txt
+++ b/Lang/ARM-Assembly/00-LANG.txt
@@ -4,9 +4,9 @@ The ARM architecture is widely used on mobile phones and tablets. It falls under
===Instruction Size===
Every instruction that the ARM can execute is 32 bits. While other processors can have variable length instructions, the ARM does not. This means that the ARM doesn't need to parse where an instruction begins and ends, which makes it run very fast. What you might not expect is that this 32-bit instruction size includes both the actual instruction and the operands! Let's take a look at a [[Z80 Assembly]] instruction and compare it to an ARM instruction.
-LD HL,&8040 ;bytecode is 0x21 0x40 0x80
+LD HL,&8040 ;bytecode is 0x21 0x40 0x80
-mov r4,#0x04000000 ;bytecode is 0xE3A04301
+mov r4,#0x04000000 ;bytecode is 0xE3A04301
So where did the 0x04000000 go? It's actually been compressed and fit within those 4 bytes you saw earlier. The ARM is very good at decompressing it, since it's been shrunk to an 8-bit number that can be rotated by an even number of bits. Unfortunately, this compression method is a double-edged sword - some 32-bit numbers can't be compressed this way, and thus many instructions can't work with them!
@@ -18,72 +18,73 @@ Registers are much more flexible than immediate operands. Unlike immediate opera
Getting an address in a register can be achieved with the MOV command, but there are limitations to that which will be explained in detail later. It's more reliable to use ADR which loads a nearby address into a register. This address has to be within a certain distance from the current program counter or it can't be loaded, so it's not a reliable way to load from the heap on many machines. It's mostly intended for loading from nearby read-only data, such as text strings or stored immediates (more on that later). When you type ADR R0,LABEL, the assembler will convert this to MOV R0,PC,#N, where N is the difference between the current program counter value and the label you specified.
LDR can be used in a similar fashion to ADR but there is a subtle distinction between the two. Assume that the section below is assembled starting at memory address 0x04000000:
-DataBlock:
+DataBlock:
.long 0xDEADBEEF ;VASM uses .long for 32-bit data and .word for 16-bit data. Your assembler will probably use .word for 32 bit and
.long 0xFFFFFFFF ; .hword for 16-bit.
MyCode:
adr r0, DataBlock ;loads the value 0x04000000 into R0
-
ldr r1, DataBlock ;loads the value 0xDEADBEEF into R1
-
adr r2, DataBlock+4 ;loads the value 0x04000004 into R2
-
-ldr r3, DataBlock+4 ;loads the value 0xFFFFFFFF into R3
+ldr r3, DataBlock+4 ;loads the value 0xFFFFFFFF into R3
+
As you can see, ADR only gives you the memory location of a value in memory, where LDR loads ''from'' that memory location.
-
===Data Addressing using LDR and STR===
Unlike its "cousin," the Motorola 68000 (which isn't really related but has a somewhat similar design), the ARM cannot directly write immediate values to memory. Those values must be contained in registers first. Unlike the 68000, the ARM has no "address registers." Rather, enclosing a register name in square brackets turns its value into a reference to a memory location. You'll need to load that memory location's numeric "value" as a constant first. Then you can read from it with LDR and write to it with STR. Not only can you read from a given address, you can also adjust how you read from it, and what you do before or after the read.
-RAM_ADDRESS:
+RAM_ADDRESS:
.long 0 ;for simplicity we'll assume that this can actually be written to. Represents a placeholder for 32-bit data.
;Your assembler's syntax may be different.
-
.long 0 ;another placeholder for 32-bit data
MyCode:
adr R2,RAM_Address ;get the address of a nearby place to store values.
MOV R0,#0x12345678 ;the value to store.
-STR R0,[R2] ;store 0x12345678 into the first 32-bit slot.
+STR R0,[R2] ;store 0x12345678 into the first 32-bit slot.
+
This is the basic way to store into memory, but there are other options, such as offsetting and post-increment.
-RAM_ADDRESS:
+RAM_ADDRESS:
.long 0
.long 0 ;we'll store here this time.
MyCode:
adr R2,RAM_Address ;point R2 to the first storage slot
MOV R0,#0x12345678
-STR R0,[R2,#4] ;store into the SECOND slot. R2 still points to the first slot - the #4 is added to R2 only temporarily.
+STR R0,[R2,#4] ;store into the SECOND slot. R2 still points to the first slot - the #4 is added to R2 only temporarily.
+
There's a limit on the size of an immediate value used to offset when loading/storing. You can also use a register as an offset, whose value will be added to the address.
-RAM_AREA:
+RAM_AREA:
.space 64,0 ;64 bytes of ram
;assume that R2 contains the address of "RAM_AREA"
MyCode:
MOV R0,#0x12345678
MOV R1,#20
-STR R0,[R2,R1] ;equivalent of "STR R0,[R2,#20]"
+STR R0,[R2,R1] ;equivalent of "STR R0,[R2,#20]"
+
Now let's say you wanted to actually alter the pointer to R2, so that it remains pointing to where you offset it to after the store or load. That's an option you have - all you have to do is type "!" after the brackets. This is called "pre-increment" or "pre-indexing."
-RAM_ADDRESS:
+RAM_ADDRESS:
.long 0
.long 0 ;we'll store here this time, and we want R2 to still be pointing here after we write to it.
MyCode:
adr R2,RAM_Address ;point R2 to the first storage slot
MOV R0,#0x12345678
-STR R0,[R2,#4]! ;store into the SECOND slot. R2 also points to the second slot now, even after this instruction has concluded.
+STR R0,[R2,#4]! ;store into the SECOND slot. R2 also points to the second slot now, even after this instruction has concluded.
+
Here, the offset is performed ''before'' the storage operation. What if you want to offset afterwards? That would be useful for reading in a data stream. Good news - you can do that simply by having the offset value or register '''outside''' the brackets. This is called "post-increment" or "post-indexing." Unlike pre-indexing, these changes to the pointer are not temporary.
-LDR R0,[R1],#4 ;load the 32-bit value stored at memory location R1 into R0, THEN add 4 to R1. This offset remains even after this
- ; instruction is finished.
+LDR R0,[R1],#4 ;load the 32-bit value stored at memory location R1 into R0, THEN add 4 to R1. This offset remains even after this
+ ; instruction is finished.
+
===Barrel Shifter===
The ARM can add a bit shift or rotate to one of its operands at no additional cost to execution time or bytecode. If the operand being shifted is a register, the value of that register is not actually changed. The shift or rotate only applies during that instruction.
diff --git a/Lang/ASIC/Old-Russian-measure-of-length b/Lang/ASIC/Old-Russian-measure-of-length
new file mode 120000
index 0000000000..e5e809a47d
--- /dev/null
+++ b/Lang/ASIC/Old-Russian-measure-of-length
@@ -0,0 +1 @@
+../../Task/Old-Russian-measure-of-length/ASIC
\ No newline at end of file
diff --git a/Lang/AWK/100-doors b/Lang/AWK/100-doors
deleted file mode 120000
index 99c9a19f16..0000000000
--- a/Lang/AWK/100-doors
+++ /dev/null
@@ -1 +0,0 @@
-../../Task/100-doors/AWK
\ No newline at end of file
diff --git a/Lang/AWK/Factorial-primes b/Lang/AWK/Factorial-primes
new file mode 120000
index 0000000000..7344ad75fd
--- /dev/null
+++ b/Lang/AWK/Factorial-primes
@@ -0,0 +1 @@
+../../Task/Factorial-primes/AWK
\ No newline at end of file
diff --git a/Lang/AWK/Soloways-recurring-rainfall b/Lang/AWK/Soloways-recurring-rainfall
new file mode 120000
index 0000000000..1f850c19b0
--- /dev/null
+++ b/Lang/AWK/Soloways-recurring-rainfall
@@ -0,0 +1 @@
+../../Task/Soloways-recurring-rainfall/AWK
\ No newline at end of file
diff --git a/Lang/Ada/Almkvist-Giullera-formula-for-pi b/Lang/Ada/Almkvist-Giullera-formula-for-pi
new file mode 120000
index 0000000000..66015473cd
--- /dev/null
+++ b/Lang/Ada/Almkvist-Giullera-formula-for-pi
@@ -0,0 +1 @@
+../../Task/Almkvist-Giullera-formula-for-pi/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Biorhythms b/Lang/Ada/Biorhythms
new file mode 120000
index 0000000000..0d82777906
--- /dev/null
+++ b/Lang/Ada/Biorhythms
@@ -0,0 +1 @@
+../../Task/Biorhythms/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Boyer-Moore-string-search b/Lang/Ada/Boyer-Moore-string-search
new file mode 120000
index 0000000000..114c2a5fea
--- /dev/null
+++ b/Lang/Ada/Boyer-Moore-string-search
@@ -0,0 +1 @@
+../../Task/Boyer-Moore-string-search/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Calkin-Wilf-sequence b/Lang/Ada/Calkin-Wilf-sequence
new file mode 120000
index 0000000000..9e4b8cd779
--- /dev/null
+++ b/Lang/Ada/Calkin-Wilf-sequence
@@ -0,0 +1 @@
+../../Task/Calkin-Wilf-sequence/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Camel-case-and-snake-case b/Lang/Ada/Camel-case-and-snake-case
new file mode 120000
index 0000000000..1d95b38233
--- /dev/null
+++ b/Lang/Ada/Camel-case-and-snake-case
@@ -0,0 +1 @@
+../../Task/Camel-case-and-snake-case/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Canonicalize-CIDR b/Lang/Ada/Canonicalize-CIDR
new file mode 120000
index 0000000000..c0c0b338b8
--- /dev/null
+++ b/Lang/Ada/Canonicalize-CIDR
@@ -0,0 +1 @@
+../../Task/Canonicalize-CIDR/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Deepcopy b/Lang/Ada/Deepcopy
new file mode 120000
index 0000000000..4b1e30735d
--- /dev/null
+++ b/Lang/Ada/Deepcopy
@@ -0,0 +1 @@
+../../Task/Deepcopy/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Factorions b/Lang/Ada/Factorions
new file mode 120000
index 0000000000..d9b74415a9
--- /dev/null
+++ b/Lang/Ada/Factorions
@@ -0,0 +1 @@
+../../Task/Factorions/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Find-duplicate-files b/Lang/Ada/Find-duplicate-files
new file mode 120000
index 0000000000..f7ad1ff6fd
--- /dev/null
+++ b/Lang/Ada/Find-duplicate-files
@@ -0,0 +1 @@
+../../Task/Find-duplicate-files/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Harmonic-series b/Lang/Ada/Harmonic-series
new file mode 120000
index 0000000000..97492bcb66
--- /dev/null
+++ b/Lang/Ada/Harmonic-series
@@ -0,0 +1 @@
+../../Task/Harmonic-series/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Knapsack-problem-Bounded b/Lang/Ada/Knapsack-problem-Bounded
new file mode 120000
index 0000000000..1cfbda0d29
--- /dev/null
+++ b/Lang/Ada/Knapsack-problem-Bounded
@@ -0,0 +1 @@
+../../Task/Knapsack-problem-Bounded/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Levenshtein-distance-Alignment b/Lang/Ada/Levenshtein-distance-Alignment
new file mode 120000
index 0000000000..1c6a7ca906
--- /dev/null
+++ b/Lang/Ada/Levenshtein-distance-Alignment
@@ -0,0 +1 @@
+../../Task/Levenshtein-distance-Alignment/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Long-literals-with-continuations b/Lang/Ada/Long-literals-with-continuations
new file mode 120000
index 0000000000..9d6be6cfc8
--- /dev/null
+++ b/Lang/Ada/Long-literals-with-continuations
@@ -0,0 +1 @@
+../../Task/Long-literals-with-continuations/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Longest-increasing-subsequence b/Lang/Ada/Longest-increasing-subsequence
new file mode 120000
index 0000000000..dd360a694d
--- /dev/null
+++ b/Lang/Ada/Longest-increasing-subsequence
@@ -0,0 +1 @@
+../../Task/Longest-increasing-subsequence/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Machine-code b/Lang/Ada/Machine-code
new file mode 120000
index 0000000000..52ae4edc91
--- /dev/null
+++ b/Lang/Ada/Machine-code
@@ -0,0 +1 @@
+../../Task/Machine-code/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Minimal-steps-down-to-1 b/Lang/Ada/Minimal-steps-down-to-1
new file mode 120000
index 0000000000..44f17e189f
--- /dev/null
+++ b/Lang/Ada/Minimal-steps-down-to-1
@@ -0,0 +1 @@
+../../Task/Minimal-steps-down-to-1/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Naming-conventions b/Lang/Ada/Naming-conventions
new file mode 120000
index 0000000000..44f00f1ff1
--- /dev/null
+++ b/Lang/Ada/Naming-conventions
@@ -0,0 +1 @@
+../../Task/Naming-conventions/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Read-a-file-character-by-character-UTF8 b/Lang/Ada/Read-a-file-character-by-character-UTF8
new file mode 120000
index 0000000000..71f788273b
--- /dev/null
+++ b/Lang/Ada/Read-a-file-character-by-character-UTF8
@@ -0,0 +1 @@
+../../Task/Read-a-file-character-by-character-UTF8/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Test-integerness b/Lang/Ada/Test-integerness
new file mode 120000
index 0000000000..8a5462dcb5
--- /dev/null
+++ b/Lang/Ada/Test-integerness
@@ -0,0 +1 @@
+../../Task/Test-integerness/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Total-circles-area b/Lang/Ada/Total-circles-area
new file mode 120000
index 0000000000..781e585826
--- /dev/null
+++ b/Lang/Ada/Total-circles-area
@@ -0,0 +1 @@
+../../Task/Total-circles-area/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Twos-complement b/Lang/Ada/Twos-complement
new file mode 120000
index 0000000000..396d1a76f2
--- /dev/null
+++ b/Lang/Ada/Twos-complement
@@ -0,0 +1 @@
+../../Task/Twos-complement/Ada
\ No newline at end of file
diff --git a/Lang/Ada/Vector b/Lang/Ada/Vector
new file mode 120000
index 0000000000..4cc7975e2f
--- /dev/null
+++ b/Lang/Ada/Vector
@@ -0,0 +1 @@
+../../Task/Vector/Ada
\ No newline at end of file
diff --git a/Lang/Adina/00-LANG.txt b/Lang/Adina/00-LANG.txt
new file mode 100644
index 0000000000..e796807867
--- /dev/null
+++ b/Lang/Adina/00-LANG.txt
@@ -0,0 +1,13 @@
+{{language|Adina}}
+Adina is a programming language, based on Racket and russian language. Unlike Racket it uses indent and operators precedence to describe program syntax. It may be used in english, because all Racket libraries are accessible. One should add "english()" in first string to use standard racket libraries.
+
+Адина, это язык программирования, основанный на Racket и русском языке. В отличие от Racket вместо скобок для синтаксической
+структуры используются отступы и бинарные операторы. Также сделан доступ через квадратные скобки к элементам коллекции и через фигурные к методам объектов.
+
+Документация по адресу: https://docs.racket-lang.org/russian-lang/
+
+==See Also==
+* [[Racket]]
+
+==TODO==
+[[Tasks not implemented in Adina]]
\ No newline at end of file
diff --git a/Lang/Adina/00-META.yaml b/Lang/Adina/00-META.yaml
new file mode 100644
index 0000000000..e1ca8650ca
--- /dev/null
+++ b/Lang/Adina/00-META.yaml
@@ -0,0 +1,2 @@
+---
+from: http://rosettacode.org/wiki/Category:Adina
diff --git a/Lang/Adina/100-doors b/Lang/Adina/100-doors
new file mode 120000
index 0000000000..c96d2d65fc
--- /dev/null
+++ b/Lang/Adina/100-doors
@@ -0,0 +1 @@
+../../Task/100-doors/Adina
\ No newline at end of file
diff --git a/Lang/Adina/Even-or-odd b/Lang/Adina/Even-or-odd
new file mode 120000
index 0000000000..1718b42d76
--- /dev/null
+++ b/Lang/Adina/Even-or-odd
@@ -0,0 +1 @@
+../../Task/Even-or-odd/Adina
\ No newline at end of file
diff --git a/Lang/Adina/Hello-world-Text b/Lang/Adina/Hello-world-Text
new file mode 120000
index 0000000000..f886a7cc4f
--- /dev/null
+++ b/Lang/Adina/Hello-world-Text
@@ -0,0 +1 @@
+../../Task/Hello-world-Text/Adina
\ No newline at end of file
diff --git a/Lang/Adina/Loops-For b/Lang/Adina/Loops-For
new file mode 120000
index 0000000000..c4d6bee093
--- /dev/null
+++ b/Lang/Adina/Loops-For
@@ -0,0 +1 @@
+../../Task/Loops-For/Adina
\ No newline at end of file
diff --git a/Lang/Adina/Tree-traversal b/Lang/Adina/Tree-traversal
new file mode 120000
index 0000000000..fd3896d623
--- /dev/null
+++ b/Lang/Adina/Tree-traversal
@@ -0,0 +1 @@
+../../Task/Tree-traversal/Adina
\ No newline at end of file
diff --git a/Lang/Agena/00-LANG.txt b/Lang/Agena/00-LANG.txt
index c2930ac7a2..c8171cc29e 100644
--- a/Lang/Agena/00-LANG.txt
+++ b/Lang/Agena/00-LANG.txt
@@ -21,4 +21,6 @@ The syntax looks like very simplified [[ALGOL 68]] with elements taken from [[Lu
Agena is based on the [[ANSI]] [[C]] source code of [[Lua]], a popular and widely used Open Source programming language.
== See Also ==
-[[ALGOL 68]]
\ No newline at end of file
+[[ALGOL 68]]
+[[Lua]]
+[[SQL]]
\ No newline at end of file
diff --git a/Lang/Agena/AKS-test-for-primes b/Lang/Agena/AKS-test-for-primes
new file mode 120000
index 0000000000..ab27a842c8
--- /dev/null
+++ b/Lang/Agena/AKS-test-for-primes
@@ -0,0 +1 @@
+../../Task/AKS-test-for-primes/Agena
\ No newline at end of file
diff --git a/Lang/Agena/Abundant-deficient-and-perfect-number-classifications b/Lang/Agena/Abundant-deficient-and-perfect-number-classifications
new file mode 120000
index 0000000000..89450cb83c
--- /dev/null
+++ b/Lang/Agena/Abundant-deficient-and-perfect-number-classifications
@@ -0,0 +1 @@
+../../Task/Abundant-deficient-and-perfect-number-classifications/Agena
\ No newline at end of file
diff --git a/Lang/Agena/Abundant-odd-numbers b/Lang/Agena/Abundant-odd-numbers
new file mode 120000
index 0000000000..a18ccbb662
--- /dev/null
+++ b/Lang/Agena/Abundant-odd-numbers
@@ -0,0 +1 @@
+../../Task/Abundant-odd-numbers/Agena
\ No newline at end of file
diff --git a/Lang/Agena/Arbitrary-precision-integers-included- b/Lang/Agena/Arbitrary-precision-integers-included-
new file mode 120000
index 0000000000..347104998a
--- /dev/null
+++ b/Lang/Agena/Arbitrary-precision-integers-included-
@@ -0,0 +1 @@
+../../Task/Arbitrary-precision-integers-included-/Agena
\ No newline at end of file
diff --git a/Lang/Agena/Attractive-numbers b/Lang/Agena/Attractive-numbers
new file mode 120000
index 0000000000..bc968b5d21
--- /dev/null
+++ b/Lang/Agena/Attractive-numbers
@@ -0,0 +1 @@
+../../Task/Attractive-numbers/Agena
\ No newline at end of file
diff --git a/Lang/Agena/Disarium-numbers b/Lang/Agena/Disarium-numbers
new file mode 120000
index 0000000000..2bace62b71
--- /dev/null
+++ b/Lang/Agena/Disarium-numbers
@@ -0,0 +1 @@
+../../Task/Disarium-numbers/Agena
\ No newline at end of file
diff --git a/Lang/Agena/Factorial b/Lang/Agena/Factorial
new file mode 120000
index 0000000000..21cbc1e46b
--- /dev/null
+++ b/Lang/Agena/Factorial
@@ -0,0 +1 @@
+../../Task/Factorial/Agena
\ No newline at end of file
diff --git a/Lang/Agena/Factorial-primes b/Lang/Agena/Factorial-primes
new file mode 120000
index 0000000000..68796e7224
--- /dev/null
+++ b/Lang/Agena/Factorial-primes
@@ -0,0 +1 @@
+../../Task/Factorial-primes/Agena
\ No newline at end of file
diff --git a/Lang/Agena/Giuga-numbers b/Lang/Agena/Giuga-numbers
new file mode 120000
index 0000000000..273fdf8c7c
--- /dev/null
+++ b/Lang/Agena/Giuga-numbers
@@ -0,0 +1 @@
+../../Task/Giuga-numbers/Agena
\ No newline at end of file
diff --git a/Lang/Agena/Goldbachs-comet b/Lang/Agena/Goldbachs-comet
new file mode 120000
index 0000000000..26b052a294
--- /dev/null
+++ b/Lang/Agena/Goldbachs-comet
@@ -0,0 +1 @@
+../../Task/Goldbachs-comet/Agena
\ No newline at end of file
diff --git a/Lang/Agena/Horners-rule-for-polynomial-evaluation b/Lang/Agena/Horners-rule-for-polynomial-evaluation
new file mode 120000
index 0000000000..cffe37e87c
--- /dev/null
+++ b/Lang/Agena/Horners-rule-for-polynomial-evaluation
@@ -0,0 +1 @@
+../../Task/Horners-rule-for-polynomial-evaluation/Agena
\ No newline at end of file
diff --git a/Lang/Agena/Humble-numbers b/Lang/Agena/Humble-numbers
new file mode 120000
index 0000000000..bdce77fd35
--- /dev/null
+++ b/Lang/Agena/Humble-numbers
@@ -0,0 +1 @@
+../../Task/Humble-numbers/Agena
\ No newline at end of file
diff --git a/Lang/Agena/JSON b/Lang/Agena/JSON
new file mode 120000
index 0000000000..9c20f7b68f
--- /dev/null
+++ b/Lang/Agena/JSON
@@ -0,0 +1 @@
+../../Task/JSON/Agena
\ No newline at end of file
diff --git a/Lang/Agena/Jacobsthal-numbers b/Lang/Agena/Jacobsthal-numbers
new file mode 120000
index 0000000000..740d21ef1a
--- /dev/null
+++ b/Lang/Agena/Jacobsthal-numbers
@@ -0,0 +1 @@
+../../Task/Jacobsthal-numbers/Agena
\ No newline at end of file
diff --git a/Lang/Agena/Jewels-and-stones b/Lang/Agena/Jewels-and-stones
new file mode 120000
index 0000000000..7c03f8ec8f
--- /dev/null
+++ b/Lang/Agena/Jewels-and-stones
@@ -0,0 +1 @@
+../../Task/Jewels-and-stones/Agena
\ No newline at end of file
diff --git a/Lang/Agena/Kaprekar-numbers b/Lang/Agena/Kaprekar-numbers
new file mode 120000
index 0000000000..d665f2f5f5
--- /dev/null
+++ b/Lang/Agena/Kaprekar-numbers
@@ -0,0 +1 @@
+../../Task/Kaprekar-numbers/Agena
\ No newline at end of file
diff --git a/Lang/Agena/Mian-Chowla-sequence b/Lang/Agena/Mian-Chowla-sequence
new file mode 120000
index 0000000000..a6489175a6
--- /dev/null
+++ b/Lang/Agena/Mian-Chowla-sequence
@@ -0,0 +1 @@
+../../Task/Mian-Chowla-sequence/Agena
\ No newline at end of file
diff --git a/Lang/Agena/Pernicious-numbers b/Lang/Agena/Pernicious-numbers
new file mode 120000
index 0000000000..454ce5b94d
--- /dev/null
+++ b/Lang/Agena/Pernicious-numbers
@@ -0,0 +1 @@
+../../Task/Pernicious-numbers/Agena
\ No newline at end of file
diff --git a/Lang/Agena/Pisano-period b/Lang/Agena/Pisano-period
new file mode 120000
index 0000000000..afaae8dce9
--- /dev/null
+++ b/Lang/Agena/Pisano-period
@@ -0,0 +1 @@
+../../Task/Pisano-period/Agena
\ No newline at end of file
diff --git a/Lang/Agena/Primality-by-trial-division b/Lang/Agena/Primality-by-trial-division
new file mode 120000
index 0000000000..621c0609eb
--- /dev/null
+++ b/Lang/Agena/Primality-by-trial-division
@@ -0,0 +1 @@
+../../Task/Primality-by-trial-division/Agena
\ No newline at end of file
diff --git a/Lang/Agena/Sequence-of-primes-by-trial-division b/Lang/Agena/Sequence-of-primes-by-trial-division
new file mode 120000
index 0000000000..d7958a31a1
--- /dev/null
+++ b/Lang/Agena/Sequence-of-primes-by-trial-division
@@ -0,0 +1 @@
+../../Task/Sequence-of-primes-by-trial-division/Agena
\ No newline at end of file
diff --git a/Lang/Agena/Smarandache-prime-digital-sequence b/Lang/Agena/Smarandache-prime-digital-sequence
new file mode 120000
index 0000000000..3a1f0e0805
--- /dev/null
+++ b/Lang/Agena/Smarandache-prime-digital-sequence
@@ -0,0 +1 @@
+../../Task/Smarandache-prime-digital-sequence/Agena
\ No newline at end of file
diff --git a/Lang/Agena/Soloways-recurring-rainfall b/Lang/Agena/Soloways-recurring-rainfall
new file mode 120000
index 0000000000..b391a79582
--- /dev/null
+++ b/Lang/Agena/Soloways-recurring-rainfall
@@ -0,0 +1 @@
+../../Task/Soloways-recurring-rainfall/Agena
\ No newline at end of file
diff --git a/Lang/Agena/Sum-of-elements-below-main-diagonal-of-matrix b/Lang/Agena/Sum-of-elements-below-main-diagonal-of-matrix
new file mode 120000
index 0000000000..6bd7256f3a
--- /dev/null
+++ b/Lang/Agena/Sum-of-elements-below-main-diagonal-of-matrix
@@ -0,0 +1 @@
+../../Task/Sum-of-elements-below-main-diagonal-of-matrix/Agena
\ No newline at end of file
diff --git a/Lang/Agena/Time-a-function b/Lang/Agena/Time-a-function
new file mode 120000
index 0000000000..e5746c4dff
--- /dev/null
+++ b/Lang/Agena/Time-a-function
@@ -0,0 +1 @@
+../../Task/Time-a-function/Agena
\ No newline at end of file
diff --git a/Lang/Agena/Totient-function b/Lang/Agena/Totient-function
new file mode 120000
index 0000000000..d74f15771c
--- /dev/null
+++ b/Lang/Agena/Totient-function
@@ -0,0 +1 @@
+../../Task/Totient-function/Agena
\ No newline at end of file
diff --git a/Lang/Agena/Unprimeable-numbers b/Lang/Agena/Unprimeable-numbers
new file mode 120000
index 0000000000..fc3b30fec4
--- /dev/null
+++ b/Lang/Agena/Unprimeable-numbers
@@ -0,0 +1 @@
+../../Task/Unprimeable-numbers/Agena
\ No newline at end of file
diff --git a/Lang/Agena/Van-Eck-sequence b/Lang/Agena/Van-Eck-sequence
new file mode 120000
index 0000000000..1714aa1507
--- /dev/null
+++ b/Lang/Agena/Van-Eck-sequence
@@ -0,0 +1 @@
+../../Task/Van-Eck-sequence/Agena
\ No newline at end of file
diff --git a/Lang/Agena/Van-der-Corput-sequence b/Lang/Agena/Van-der-Corput-sequence
new file mode 120000
index 0000000000..92bec950df
--- /dev/null
+++ b/Lang/Agena/Van-der-Corput-sequence
@@ -0,0 +1 @@
+../../Task/Van-der-Corput-sequence/Agena
\ No newline at end of file
diff --git a/Lang/Agena/Wagstaff-primes b/Lang/Agena/Wagstaff-primes
new file mode 120000
index 0000000000..b63d3369fa
--- /dev/null
+++ b/Lang/Agena/Wagstaff-primes
@@ -0,0 +1 @@
+../../Task/Wagstaff-primes/Agena
\ No newline at end of file
diff --git a/Lang/Agena/Wieferich-primes b/Lang/Agena/Wieferich-primes
new file mode 120000
index 0000000000..34597fbb1d
--- /dev/null
+++ b/Lang/Agena/Wieferich-primes
@@ -0,0 +1 @@
+../../Task/Wieferich-primes/Agena
\ No newline at end of file
diff --git a/Lang/Agena/Yellowstone-sequence b/Lang/Agena/Yellowstone-sequence
new file mode 120000
index 0000000000..4464a6e815
--- /dev/null
+++ b/Lang/Agena/Yellowstone-sequence
@@ -0,0 +1 @@
+../../Task/Yellowstone-sequence/Agena
\ No newline at end of file
diff --git a/Lang/Apple/00-LANG.txt b/Lang/Apple/00-LANG.txt
new file mode 100644
index 0000000000..e4e452b143
--- /dev/null
+++ b/Lang/Apple/00-LANG.txt
@@ -0,0 +1,12 @@
+{{language|Apple
+|exec=Compiled
+|safety=safe
+|checking=static
+|strength=strong
+|site=https://github.com/vmchale/apple}}
+
+{{language programming paradigm|functional}}
+
+The Apple Array System is a JIT-compiler for a statically typed functional language specialized on arrays.
+
+It is expression-oriented (it has no imports); it is meant to be called from other languages.
\ No newline at end of file
diff --git a/Lang/Apple/00-META.yaml b/Lang/Apple/00-META.yaml
new file mode 100644
index 0000000000..fcdeec5d5c
--- /dev/null
+++ b/Lang/Apple/00-META.yaml
@@ -0,0 +1,2 @@
+---
+from: http://rosettacode.org/wiki/Category:Apple
diff --git a/Lang/Apple/Averages-Arithmetic-mean b/Lang/Apple/Averages-Arithmetic-mean
new file mode 120000
index 0000000000..b4236a6909
--- /dev/null
+++ b/Lang/Apple/Averages-Arithmetic-mean
@@ -0,0 +1 @@
+../../Task/Averages-Arithmetic-mean/Apple
\ No newline at end of file
diff --git a/Lang/Apple/Averages-Pythagorean-means b/Lang/Apple/Averages-Pythagorean-means
new file mode 120000
index 0000000000..50c70e6c0b
--- /dev/null
+++ b/Lang/Apple/Averages-Pythagorean-means
@@ -0,0 +1 @@
+../../Task/Averages-Pythagorean-means/Apple
\ No newline at end of file
diff --git a/Lang/Apple/Catamorphism b/Lang/Apple/Catamorphism
new file mode 120000
index 0000000000..5d06cbf18d
--- /dev/null
+++ b/Lang/Apple/Catamorphism
@@ -0,0 +1 @@
+../../Task/Catamorphism/Apple
\ No newline at end of file
diff --git a/Lang/Apple/Dot-product b/Lang/Apple/Dot-product
new file mode 120000
index 0000000000..084fc21920
--- /dev/null
+++ b/Lang/Apple/Dot-product
@@ -0,0 +1 @@
+../../Task/Dot-product/Apple
\ No newline at end of file
diff --git a/Lang/Apple/Factorial b/Lang/Apple/Factorial
new file mode 120000
index 0000000000..8d659daa6f
--- /dev/null
+++ b/Lang/Apple/Factorial
@@ -0,0 +1 @@
+../../Task/Factorial/Apple
\ No newline at end of file
diff --git a/Lang/Apple/Factors-of-an-integer b/Lang/Apple/Factors-of-an-integer
new file mode 120000
index 0000000000..a965a5d4bd
--- /dev/null
+++ b/Lang/Apple/Factors-of-an-integer
@@ -0,0 +1 @@
+../../Task/Factors-of-an-integer/Apple
\ No newline at end of file
diff --git a/Lang/Apple/Filter b/Lang/Apple/Filter
new file mode 120000
index 0000000000..5dfbcaf92d
--- /dev/null
+++ b/Lang/Apple/Filter
@@ -0,0 +1 @@
+../../Task/Filter/Apple
\ No newline at end of file
diff --git a/Lang/Apple/ISBN13-check-digit b/Lang/Apple/ISBN13-check-digit
new file mode 120000
index 0000000000..b9d843e9fc
--- /dev/null
+++ b/Lang/Apple/ISBN13-check-digit
@@ -0,0 +1 @@
+../../Task/ISBN13-check-digit/Apple
\ No newline at end of file
diff --git a/Lang/Aria/00-LANG.txt b/Lang/Aria/00-LANG.txt
new file mode 100644
index 0000000000..f3d1668eba
--- /dev/null
+++ b/Lang/Aria/00-LANG.txt
@@ -0,0 +1,15 @@
+{{language
+|exec=interpreted
+|site=https://egranata.github.io/aria/
+}}
+
+Aria is a modern, dynamic scripting language. It is meant to be a “sweet spot” language, easy to pick-up and enjoyable to use.
+
+It provides a familiar C-style syntax, with a feature set inspired by well-beloved languages such as Python and Rust. It comes with little ceremony and a focus on getting stuff done.
+
+Aria programs are written as .aria files and passed to the Aria virtual machine, which compiles them down to bytecode and executes them.
+
+The Aria interpreter is written in Rust, 2024 edition.
+
+==Todo==
+[[Tasks_not_implemented_in_Aria]]
\ No newline at end of file
diff --git a/Lang/Aria/00-META.yaml b/Lang/Aria/00-META.yaml
new file mode 100644
index 0000000000..35ebadd91a
--- /dev/null
+++ b/Lang/Aria/00-META.yaml
@@ -0,0 +1,2 @@
+---
+from: http://rosettacode.org/wiki/Category:Aria
diff --git a/Lang/Aria/99-bottles-of-beer b/Lang/Aria/99-bottles-of-beer
new file mode 120000
index 0000000000..c2f486227d
--- /dev/null
+++ b/Lang/Aria/99-bottles-of-beer
@@ -0,0 +1 @@
+../../Task/99-bottles-of-beer/Aria
\ No newline at end of file
diff --git a/Lang/Aria/Hello-world-Text b/Lang/Aria/Hello-world-Text
new file mode 120000
index 0000000000..bb8e1db7a7
--- /dev/null
+++ b/Lang/Aria/Hello-world-Text
@@ -0,0 +1 @@
+../../Task/Hello-world-Text/Aria
\ No newline at end of file
diff --git a/Lang/ArkScript/00-LANG.txt b/Lang/ArkScript/00-LANG.txt
new file mode 100644
index 0000000000..11fc16bd5b
--- /dev/null
+++ b/Lang/ArkScript/00-LANG.txt
@@ -0,0 +1,43 @@
+{{language|ArkScript
+|exec=bytecode
+|site=https://arkscript-lang.dev
+|gc=no
+|parampass=value
+|strength=strong
+|checking=dynamic
+|tags=arkscript}}
+ArkScript is a small, fast, functional and scripting language for C++ projects, inspired by [[Lua]], [[Lisp]], and [[Python]].
+
+The language has been designed to be concise, with only 9 keywords, and two rules to parse it:
+# the first node after an opening paren ( is a "function", the following nodes are arguments
+# the only exception to the previous rule is when defining the argument list of a function
+
+
+(let foo 5)
+(let bar "hello world!")
+
+(let egg (fun (a b c)
+ (+ a (* b c))))
+
+(print (egg 1 foo bar))
+
+
+The language is also
+* small: the core fit under 8000 lines of code ; also small in terms of keywords (only 9)
+* a scripting language: very easy to embed it in your projects. Registering your own functions in the language is made easy
+* portable: a unique bytecode which can be run everywhere the virtual machine is
+* a functional language: every parameter is passed by value, everything is immutable unless specified
+* powerful: provides closures and explicit capture
+* promoting functionalities before performances: expressiveness often brings more productivity, though performances aren't left behind
+* a Lisp inspired language, with fewer parentheses: [...] is expanded to (list ...) and {} to (begin ...)
+* extensible: supports C++ module to use it in the language, adding functionalities
+
+
+===Implementation===
+The compiler and VM are implemented in [[C++]] 20. For more details, see [https://github.com/ArkScript-lang/Ark ArkScript GitHub].
+
+===License===
+ArkScript is released under the Mozilla Public License 2.0.
+
+===Todo===
+[[Tasks not implemented in ArkScript]]
\ No newline at end of file
diff --git a/Lang/ArkScript/00-META.yaml b/Lang/ArkScript/00-META.yaml
new file mode 100644
index 0000000000..0a989734f8
--- /dev/null
+++ b/Lang/ArkScript/00-META.yaml
@@ -0,0 +1,2 @@
+---
+from: http://rosettacode.org/wiki/Category:ArkScript
diff --git a/Lang/ArkScript/100-doors b/Lang/ArkScript/100-doors
new file mode 120000
index 0000000000..733c5ecdec
--- /dev/null
+++ b/Lang/ArkScript/100-doors
@@ -0,0 +1 @@
+../../Task/100-doors/ArkScript
\ No newline at end of file
diff --git a/Lang/ArkScript/99-bottles-of-beer b/Lang/ArkScript/99-bottles-of-beer
new file mode 120000
index 0000000000..44d94215f1
--- /dev/null
+++ b/Lang/ArkScript/99-bottles-of-beer
@@ -0,0 +1 @@
+../../Task/99-bottles-of-beer/ArkScript
\ No newline at end of file
diff --git a/Lang/ArkScript/A+B b/Lang/ArkScript/A+B
new file mode 120000
index 0000000000..482decfa5a
--- /dev/null
+++ b/Lang/ArkScript/A+B
@@ -0,0 +1 @@
+../../Task/A+B/ArkScript
\ No newline at end of file
diff --git a/Lang/ArkScript/Abbreviations-easy b/Lang/ArkScript/Abbreviations-easy
new file mode 120000
index 0000000000..03457b23d1
--- /dev/null
+++ b/Lang/ArkScript/Abbreviations-easy
@@ -0,0 +1 @@
+../../Task/Abbreviations-easy/ArkScript
\ No newline at end of file
diff --git a/Lang/ArkScript/Ackermann-function b/Lang/ArkScript/Ackermann-function
new file mode 120000
index 0000000000..f1f525fde6
--- /dev/null
+++ b/Lang/ArkScript/Ackermann-function
@@ -0,0 +1 @@
+../../Task/Ackermann-function/ArkScript
\ No newline at end of file
diff --git a/Lang/ArkScript/Apply-a-callback-to-an-array b/Lang/ArkScript/Apply-a-callback-to-an-array
new file mode 120000
index 0000000000..da474aa4d7
--- /dev/null
+++ b/Lang/ArkScript/Apply-a-callback-to-an-array
@@ -0,0 +1 @@
+../../Task/Apply-a-callback-to-an-array/ArkScript
\ No newline at end of file
diff --git a/Lang/ArkScript/Arithmetic-Complex b/Lang/ArkScript/Arithmetic-Complex
new file mode 120000
index 0000000000..c21a1d5bf8
--- /dev/null
+++ b/Lang/ArkScript/Arithmetic-Complex
@@ -0,0 +1 @@
+../../Task/Arithmetic-Complex/ArkScript
\ No newline at end of file
diff --git a/Lang/ArkScript/Arithmetic-Integer b/Lang/ArkScript/Arithmetic-Integer
new file mode 120000
index 0000000000..0023796f90
--- /dev/null
+++ b/Lang/ArkScript/Arithmetic-Integer
@@ -0,0 +1 @@
+../../Task/Arithmetic-Integer/ArkScript
\ No newline at end of file
diff --git a/Lang/ArkScript/Array-concatenation b/Lang/ArkScript/Array-concatenation
new file mode 120000
index 0000000000..250e35894f
--- /dev/null
+++ b/Lang/ArkScript/Array-concatenation
@@ -0,0 +1 @@
+../../Task/Array-concatenation/ArkScript
\ No newline at end of file
diff --git a/Lang/ArkScript/Array-length b/Lang/ArkScript/Array-length
new file mode 120000
index 0000000000..f70d67437b
--- /dev/null
+++ b/Lang/ArkScript/Array-length
@@ -0,0 +1 @@
+../../Task/Array-length/ArkScript
\ No newline at end of file
diff --git a/Lang/ArkScript/Ascending-primes b/Lang/ArkScript/Ascending-primes
new file mode 120000
index 0000000000..9fc34de6f6
--- /dev/null
+++ b/Lang/ArkScript/Ascending-primes
@@ -0,0 +1 @@
+../../Task/Ascending-primes/ArkScript
\ No newline at end of file
diff --git a/Lang/ArkScript/Associative-array-Creation b/Lang/ArkScript/Associative-array-Creation
new file mode 120000
index 0000000000..2a5f3a1e53
--- /dev/null
+++ b/Lang/ArkScript/Associative-array-Creation
@@ -0,0 +1 @@
+../../Task/Associative-array-Creation/ArkScript
\ No newline at end of file
diff --git a/Lang/ArkScript/Associative-array-Iteration b/Lang/ArkScript/Associative-array-Iteration
new file mode 120000
index 0000000000..f11b39f9bb
--- /dev/null
+++ b/Lang/ArkScript/Associative-array-Iteration
@@ -0,0 +1 @@
+../../Task/Associative-array-Iteration/ArkScript
\ No newline at end of file
diff --git a/Lang/ArkScript/Balanced-brackets b/Lang/ArkScript/Balanced-brackets
new file mode 120000
index 0000000000..7380d4a234
--- /dev/null
+++ b/Lang/ArkScript/Balanced-brackets
@@ -0,0 +1 @@
+../../Task/Balanced-brackets/ArkScript
\ No newline at end of file
diff --git a/Lang/ArkScript/Boolean-values b/Lang/ArkScript/Boolean-values
new file mode 120000
index 0000000000..5efbe13431
--- /dev/null
+++ b/Lang/ArkScript/Boolean-values
@@ -0,0 +1 @@
+../../Task/Boolean-values/ArkScript
\ No newline at end of file
diff --git a/Lang/ArkScript/Calculating-the-value-of-e b/Lang/ArkScript/Calculating-the-value-of-e
new file mode 120000
index 0000000000..0a0116531f
--- /dev/null
+++ b/Lang/ArkScript/Calculating-the-value-of-e
@@ -0,0 +1 @@
+../../Task/Calculating-the-value-of-e/ArkScript
\ No newline at end of file
diff --git a/Lang/ArkScript/Call-a-function b/Lang/ArkScript/Call-a-function
new file mode 120000
index 0000000000..4d2870d9cb
--- /dev/null
+++ b/Lang/ArkScript/Call-a-function
@@ -0,0 +1 @@
+../../Task/Call-a-function/ArkScript
\ No newline at end of file
diff --git a/Lang/ArkScript/Call-an-object-method b/Lang/ArkScript/Call-an-object-method
new file mode 120000
index 0000000000..9b53aa0595
--- /dev/null
+++ b/Lang/ArkScript/Call-an-object-method
@@ -0,0 +1 @@
+../../Task/Call-an-object-method/ArkScript
\ No newline at end of file
diff --git a/Lang/ArkScript/Catamorphism b/Lang/ArkScript/Catamorphism
new file mode 120000
index 0000000000..f6210b0ec4
--- /dev/null
+++ b/Lang/ArkScript/Catamorphism
@@ -0,0 +1 @@
+../../Task/Catamorphism/ArkScript
\ No newline at end of file
diff --git a/Lang/ArkScript/Check-that-file-exists b/Lang/ArkScript/Check-that-file-exists
new file mode 120000
index 0000000000..7e3651c090
--- /dev/null
+++ b/Lang/ArkScript/Check-that-file-exists
@@ -0,0 +1 @@
+../../Task/Check-that-file-exists/ArkScript
\ No newline at end of file
diff --git a/Lang/ArkScript/Closures-Value-capture b/Lang/ArkScript/Closures-Value-capture
new file mode 120000
index 0000000000..6b30a8d976
--- /dev/null
+++ b/Lang/ArkScript/Closures-Value-capture
@@ -0,0 +1 @@
+../../Task/Closures-Value-capture/ArkScript
\ No newline at end of file
diff --git a/Lang/ArkScript/Comments b/Lang/ArkScript/Comments
new file mode 120000
index 0000000000..360a2acb05
--- /dev/null
+++ b/Lang/ArkScript/Comments
@@ -0,0 +1 @@
+../../Task/Comments/ArkScript
\ No newline at end of file
diff --git a/Lang/ArkScript/Compound-data-type b/Lang/ArkScript/Compound-data-type
new file mode 120000
index 0000000000..a901531424
--- /dev/null
+++ b/Lang/ArkScript/Compound-data-type
@@ -0,0 +1 @@
+../../Task/Compound-data-type/ArkScript
\ No newline at end of file
diff --git a/Lang/ArkScript/Concurrent-computing b/Lang/ArkScript/Concurrent-computing
new file mode 120000
index 0000000000..13a2e9c874
--- /dev/null
+++ b/Lang/ArkScript/Concurrent-computing
@@ -0,0 +1 @@
+../../Task/Concurrent-computing/ArkScript
\ No newline at end of file
diff --git a/Lang/ArkScript/Conditional-structures b/Lang/ArkScript/Conditional-structures
new file mode 120000
index 0000000000..10a922af53
--- /dev/null
+++ b/Lang/ArkScript/Conditional-structures
@@ -0,0 +1 @@
+../../Task/Conditional-structures/ArkScript
\ No newline at end of file
diff --git a/Lang/ArkScript/Conways-Game-of-Life b/Lang/ArkScript/Conways-Game-of-Life
new file mode 120000
index 0000000000..2d495d7699
--- /dev/null
+++ b/Lang/ArkScript/Conways-Game-of-Life
@@ -0,0 +1 @@
+../../Task/Conways-Game-of-Life/ArkScript
\ No newline at end of file
diff --git a/Lang/ArkScript/Copy-a-string b/Lang/ArkScript/Copy-a-string
new file mode 120000
index 0000000000..88194e46fb
--- /dev/null
+++ b/Lang/ArkScript/Copy-a-string
@@ -0,0 +1 @@
+../../Task/Copy-a-string/ArkScript
\ No newline at end of file
diff --git a/Lang/ArkScript/Currying b/Lang/ArkScript/Currying
new file mode 120000
index 0000000000..68a7b93b42
--- /dev/null
+++ b/Lang/ArkScript/Currying
@@ -0,0 +1 @@
+../../Task/Currying/ArkScript
\ No newline at end of file
diff --git a/Lang/ArkScript/Delete-a-file b/Lang/ArkScript/Delete-a-file
new file mode 120000
index 0000000000..d6dbc3ecd5
--- /dev/null
+++ b/Lang/ArkScript/Delete-a-file
@@ -0,0 +1 @@
+../../Task/Delete-a-file/ArkScript
\ No newline at end of file
diff --git a/Lang/ArkScript/Empty-directory b/Lang/ArkScript/Empty-directory
new file mode 120000
index 0000000000..5ade8a3b8b
--- /dev/null
+++ b/Lang/ArkScript/Empty-directory
@@ -0,0 +1 @@
+../../Task/Empty-directory/ArkScript
\ No newline at end of file
diff --git a/Lang/ArkScript/Empty-program b/Lang/ArkScript/Empty-program
new file mode 120000
index 0000000000..d33db3e33c
--- /dev/null
+++ b/Lang/ArkScript/Empty-program
@@ -0,0 +1 @@
+../../Task/Empty-program/ArkScript
\ No newline at end of file
diff --git a/Lang/ArkScript/Empty-string b/Lang/ArkScript/Empty-string
new file mode 120000
index 0000000000..aa29f38546
--- /dev/null
+++ b/Lang/ArkScript/Empty-string
@@ -0,0 +1 @@
+../../Task/Empty-string/ArkScript
\ No newline at end of file
diff --git a/Lang/ArkScript/Enforced-immutability b/Lang/ArkScript/Enforced-immutability
new file mode 120000
index 0000000000..c12069d86c
--- /dev/null
+++ b/Lang/ArkScript/Enforced-immutability
@@ -0,0 +1 @@
+../../Task/Enforced-immutability/ArkScript
\ No newline at end of file
diff --git a/Lang/ArkScript/Even-or-odd b/Lang/ArkScript/Even-or-odd
new file mode 120000
index 0000000000..7aee966d84
--- /dev/null
+++ b/Lang/ArkScript/Even-or-odd
@@ -0,0 +1 @@
+../../Task/Even-or-odd/ArkScript
\ No newline at end of file
diff --git a/Lang/ArkScript/Extend-your-language b/Lang/ArkScript/Extend-your-language
new file mode 120000
index 0000000000..08fabf671d
--- /dev/null
+++ b/Lang/ArkScript/Extend-your-language
@@ -0,0 +1 @@
+../../Task/Extend-your-language/ArkScript
\ No newline at end of file
diff --git a/Lang/ArkScript/Fibonacci-sequence b/Lang/ArkScript/Fibonacci-sequence
new file mode 120000
index 0000000000..46f2bbba10
--- /dev/null
+++ b/Lang/ArkScript/Fibonacci-sequence
@@ -0,0 +1 @@
+../../Task/Fibonacci-sequence/ArkScript
\ No newline at end of file
diff --git a/Lang/ArkScript/FizzBuzz b/Lang/ArkScript/FizzBuzz
new file mode 120000
index 0000000000..2464c5dcce
--- /dev/null
+++ b/Lang/ArkScript/FizzBuzz
@@ -0,0 +1 @@
+../../Task/FizzBuzz/ArkScript
\ No newline at end of file
diff --git a/Lang/ArkScript/Flatten-a-list b/Lang/ArkScript/Flatten-a-list
new file mode 120000
index 0000000000..8540eceb42
--- /dev/null
+++ b/Lang/ArkScript/Flatten-a-list
@@ -0,0 +1 @@
+../../Task/Flatten-a-list/ArkScript
\ No newline at end of file
diff --git a/Lang/ArkScript/Function-definition b/Lang/ArkScript/Function-definition
new file mode 120000
index 0000000000..e750f72eaf
--- /dev/null
+++ b/Lang/ArkScript/Function-definition
@@ -0,0 +1 @@
+../../Task/Function-definition/ArkScript
\ No newline at end of file
diff --git a/Lang/ArkScript/Hello-world-Line-printer b/Lang/ArkScript/Hello-world-Line-printer
new file mode 120000
index 0000000000..205cc44ef5
--- /dev/null
+++ b/Lang/ArkScript/Hello-world-Line-printer
@@ -0,0 +1 @@
+../../Task/Hello-world-Line-printer/ArkScript
\ No newline at end of file
diff --git a/Lang/ArkScript/Hello-world-Newline-omission b/Lang/ArkScript/Hello-world-Newline-omission
new file mode 120000
index 0000000000..e70990b485
--- /dev/null
+++ b/Lang/ArkScript/Hello-world-Newline-omission
@@ -0,0 +1 @@
+../../Task/Hello-world-Newline-omission/ArkScript
\ No newline at end of file
diff --git a/Lang/ArkScript/Hello-world-Text b/Lang/ArkScript/Hello-world-Text
new file mode 120000
index 0000000000..efe7845aa7
--- /dev/null
+++ b/Lang/ArkScript/Hello-world-Text
@@ -0,0 +1 @@
+../../Task/Hello-world-Text/ArkScript
\ No newline at end of file
diff --git a/Lang/ArkScript/Infinity b/Lang/ArkScript/Infinity
new file mode 120000
index 0000000000..e2ef2bf985
--- /dev/null
+++ b/Lang/ArkScript/Infinity
@@ -0,0 +1 @@
+../../Task/Infinity/ArkScript
\ No newline at end of file
diff --git a/Lang/ArkScript/Integer-sequence b/Lang/ArkScript/Integer-sequence
new file mode 120000
index 0000000000..386017d017
--- /dev/null
+++ b/Lang/ArkScript/Integer-sequence
@@ -0,0 +1 @@
+../../Task/Integer-sequence/ArkScript
\ No newline at end of file
diff --git a/Lang/ArkScript/Literals-Floating-point b/Lang/ArkScript/Literals-Floating-point
new file mode 120000
index 0000000000..5bc172fabe
--- /dev/null
+++ b/Lang/ArkScript/Literals-Floating-point
@@ -0,0 +1 @@
+../../Task/Literals-Floating-point/ArkScript
\ No newline at end of file
diff --git a/Lang/ArkScript/Literals-Integer b/Lang/ArkScript/Literals-Integer
new file mode 120000
index 0000000000..b313b7f803
--- /dev/null
+++ b/Lang/ArkScript/Literals-Integer
@@ -0,0 +1 @@
+../../Task/Literals-Integer/ArkScript
\ No newline at end of file
diff --git a/Lang/ArkScript/Literals-String b/Lang/ArkScript/Literals-String
new file mode 120000
index 0000000000..ec507deee1
--- /dev/null
+++ b/Lang/ArkScript/Literals-String
@@ -0,0 +1 @@
+../../Task/Literals-String/ArkScript
\ No newline at end of file
diff --git a/Lang/ArkScript/Logical-operations b/Lang/ArkScript/Logical-operations
new file mode 120000
index 0000000000..aaefe48457
--- /dev/null
+++ b/Lang/ArkScript/Logical-operations
@@ -0,0 +1 @@
+../../Task/Logical-operations/ArkScript
\ No newline at end of file
diff --git a/Lang/ArkScript/Munchausen-numbers b/Lang/ArkScript/Munchausen-numbers
new file mode 120000
index 0000000000..c351968c20
--- /dev/null
+++ b/Lang/ArkScript/Munchausen-numbers
@@ -0,0 +1 @@
+../../Task/Munchausen-numbers/ArkScript
\ No newline at end of file
diff --git a/Lang/ArkScript/N-queens-problem b/Lang/ArkScript/N-queens-problem
new file mode 120000
index 0000000000..e917f9e593
--- /dev/null
+++ b/Lang/ArkScript/N-queens-problem
@@ -0,0 +1 @@
+../../Task/N-queens-problem/ArkScript
\ No newline at end of file
diff --git a/Lang/ArkScript/Null-object b/Lang/ArkScript/Null-object
new file mode 120000
index 0000000000..a698a2ff71
--- /dev/null
+++ b/Lang/ArkScript/Null-object
@@ -0,0 +1 @@
+../../Task/Null-object/ArkScript
\ No newline at end of file
diff --git a/Lang/ArkScript/Program-termination b/Lang/ArkScript/Program-termination
new file mode 120000
index 0000000000..19d9d120f6
--- /dev/null
+++ b/Lang/ArkScript/Program-termination
@@ -0,0 +1 @@
+../../Task/Program-termination/ArkScript
\ No newline at end of file
diff --git a/Lang/ArkScript/Read-entire-file b/Lang/ArkScript/Read-entire-file
new file mode 120000
index 0000000000..e3a1c22530
--- /dev/null
+++ b/Lang/ArkScript/Read-entire-file
@@ -0,0 +1 @@
+../../Task/Read-entire-file/ArkScript
\ No newline at end of file
diff --git a/Lang/ArkScript/Reverse-a-string b/Lang/ArkScript/Reverse-a-string
new file mode 120000
index 0000000000..a3a2ea0c27
--- /dev/null
+++ b/Lang/ArkScript/Reverse-a-string
@@ -0,0 +1 @@
+../../Task/Reverse-a-string/ArkScript
\ No newline at end of file
diff --git a/Lang/ArkScript/Semordnilap b/Lang/ArkScript/Semordnilap
new file mode 120000
index 0000000000..25df93d2d3
--- /dev/null
+++ b/Lang/ArkScript/Semordnilap
@@ -0,0 +1 @@
+../../Task/Semordnilap/ArkScript
\ No newline at end of file
diff --git a/Lang/ArkScript/Shell-one-liner b/Lang/ArkScript/Shell-one-liner
new file mode 120000
index 0000000000..889b436427
--- /dev/null
+++ b/Lang/ArkScript/Shell-one-liner
@@ -0,0 +1 @@
+../../Task/Shell-one-liner/ArkScript
\ No newline at end of file
diff --git a/Lang/ArkScript/Short-circuit-evaluation b/Lang/ArkScript/Short-circuit-evaluation
new file mode 120000
index 0000000000..dcd4ac26ee
--- /dev/null
+++ b/Lang/ArkScript/Short-circuit-evaluation
@@ -0,0 +1 @@
+../../Task/Short-circuit-evaluation/ArkScript
\ No newline at end of file
diff --git a/Lang/ArkScript/Show-ASCII-table b/Lang/ArkScript/Show-ASCII-table
new file mode 120000
index 0000000000..65d6365487
--- /dev/null
+++ b/Lang/ArkScript/Show-ASCII-table
@@ -0,0 +1 @@
+../../Task/Show-ASCII-table/ArkScript
\ No newline at end of file
diff --git a/Lang/ArkScript/Sleep b/Lang/ArkScript/Sleep
new file mode 120000
index 0000000000..cd07cddf41
--- /dev/null
+++ b/Lang/ArkScript/Sleep
@@ -0,0 +1 @@
+../../Task/Sleep/ArkScript
\ No newline at end of file
diff --git a/Lang/ArkScript/Sorting-algorithms-Quicksort b/Lang/ArkScript/Sorting-algorithms-Quicksort
new file mode 120000
index 0000000000..003f3fb633
--- /dev/null
+++ b/Lang/ArkScript/Sorting-algorithms-Quicksort
@@ -0,0 +1 @@
+../../Task/Sorting-algorithms-Quicksort/ArkScript
\ No newline at end of file
diff --git a/Lang/ArkScript/String-append b/Lang/ArkScript/String-append
new file mode 120000
index 0000000000..ade5a20d23
--- /dev/null
+++ b/Lang/ArkScript/String-append
@@ -0,0 +1 @@
+../../Task/String-append/ArkScript
\ No newline at end of file
diff --git a/Lang/ArkScript/String-case b/Lang/ArkScript/String-case
new file mode 120000
index 0000000000..25e27a4618
--- /dev/null
+++ b/Lang/ArkScript/String-case
@@ -0,0 +1 @@
+../../Task/String-case/ArkScript
\ No newline at end of file
diff --git a/Lang/ArkScript/String-concatenation b/Lang/ArkScript/String-concatenation
new file mode 120000
index 0000000000..999b5605f7
--- /dev/null
+++ b/Lang/ArkScript/String-concatenation
@@ -0,0 +1 @@
+../../Task/String-concatenation/ArkScript
\ No newline at end of file
diff --git a/Lang/ArkScript/String-interpolation-included- b/Lang/ArkScript/String-interpolation-included-
new file mode 120000
index 0000000000..33fa86b906
--- /dev/null
+++ b/Lang/ArkScript/String-interpolation-included-
@@ -0,0 +1 @@
+../../Task/String-interpolation-included-/ArkScript
\ No newline at end of file
diff --git a/Lang/ArkScript/String-length b/Lang/ArkScript/String-length
new file mode 120000
index 0000000000..df129dcc11
--- /dev/null
+++ b/Lang/ArkScript/String-length
@@ -0,0 +1 @@
+../../Task/String-length/ArkScript
\ No newline at end of file
diff --git a/Lang/ArkScript/String-matching b/Lang/ArkScript/String-matching
new file mode 120000
index 0000000000..7558bd042a
--- /dev/null
+++ b/Lang/ArkScript/String-matching
@@ -0,0 +1 @@
+../../Task/String-matching/ArkScript
\ No newline at end of file
diff --git a/Lang/ArkScript/String-prepend b/Lang/ArkScript/String-prepend
new file mode 120000
index 0000000000..083b99bbf0
--- /dev/null
+++ b/Lang/ArkScript/String-prepend
@@ -0,0 +1 @@
+../../Task/String-prepend/ArkScript
\ No newline at end of file
diff --git a/Lang/ArkScript/Sum-and-product-of-an-array b/Lang/ArkScript/Sum-and-product-of-an-array
new file mode 120000
index 0000000000..4c22ecff5f
--- /dev/null
+++ b/Lang/ArkScript/Sum-and-product-of-an-array
@@ -0,0 +1 @@
+../../Task/Sum-and-product-of-an-array/ArkScript
\ No newline at end of file
diff --git a/Lang/ArkScript/Sum-digits-of-an-integer b/Lang/ArkScript/Sum-digits-of-an-integer
new file mode 120000
index 0000000000..29e7afd56c
--- /dev/null
+++ b/Lang/ArkScript/Sum-digits-of-an-integer
@@ -0,0 +1 @@
+../../Task/Sum-digits-of-an-integer/ArkScript
\ No newline at end of file
diff --git a/Lang/ArkScript/Sum-of-a-series b/Lang/ArkScript/Sum-of-a-series
new file mode 120000
index 0000000000..f009df3580
--- /dev/null
+++ b/Lang/ArkScript/Sum-of-a-series
@@ -0,0 +1 @@
+../../Task/Sum-of-a-series/ArkScript
\ No newline at end of file
diff --git a/Lang/ArkScript/Sum-of-squares b/Lang/ArkScript/Sum-of-squares
new file mode 120000
index 0000000000..85176ac4bb
--- /dev/null
+++ b/Lang/ArkScript/Sum-of-squares
@@ -0,0 +1 @@
+../../Task/Sum-of-squares/ArkScript
\ No newline at end of file
diff --git a/Lang/ArkScript/User-input-Text b/Lang/ArkScript/User-input-Text
new file mode 120000
index 0000000000..f0daf24108
--- /dev/null
+++ b/Lang/ArkScript/User-input-Text
@@ -0,0 +1 @@
+../../Task/User-input-Text/ArkScript
\ No newline at end of file
diff --git a/Lang/ArkScript/Write-entire-file b/Lang/ArkScript/Write-entire-file
new file mode 120000
index 0000000000..978c98fba7
--- /dev/null
+++ b/Lang/ArkScript/Write-entire-file
@@ -0,0 +1 @@
+../../Task/Write-entire-file/ArkScript
\ No newline at end of file
diff --git a/Lang/AutoLISP/100-doors b/Lang/AutoLISP/100-doors
new file mode 120000
index 0000000000..4d97a8a5d6
--- /dev/null
+++ b/Lang/AutoLISP/100-doors
@@ -0,0 +1 @@
+../../Task/100-doors/AutoLISP
\ No newline at end of file
diff --git a/Lang/AutoLISP/Babbage-problem b/Lang/AutoLISP/Babbage-problem
new file mode 120000
index 0000000000..0ae3941c82
--- /dev/null
+++ b/Lang/AutoLISP/Babbage-problem
@@ -0,0 +1 @@
+../../Task/Babbage-problem/AutoLISP
\ No newline at end of file
diff --git a/Lang/AutoLISP/Balanced-brackets b/Lang/AutoLISP/Balanced-brackets
new file mode 120000
index 0000000000..b752cfc1d6
--- /dev/null
+++ b/Lang/AutoLISP/Balanced-brackets
@@ -0,0 +1 @@
+../../Task/Balanced-brackets/AutoLISP
\ No newline at end of file
diff --git a/Lang/AutoLISP/Entropy b/Lang/AutoLISP/Entropy
new file mode 120000
index 0000000000..bc1dec235f
--- /dev/null
+++ b/Lang/AutoLISP/Entropy
@@ -0,0 +1 @@
+../../Task/Entropy/AutoLISP
\ No newline at end of file
diff --git a/Lang/AutoLISP/Entropy-Narcissist b/Lang/AutoLISP/Entropy-Narcissist
new file mode 120000
index 0000000000..0a143c87ce
--- /dev/null
+++ b/Lang/AutoLISP/Entropy-Narcissist
@@ -0,0 +1 @@
+../../Task/Entropy-Narcissist/AutoLISP
\ No newline at end of file
diff --git a/Lang/AutoLISP/Largest-proper-divisor-of-n b/Lang/AutoLISP/Largest-proper-divisor-of-n
new file mode 120000
index 0000000000..48c08fae1a
--- /dev/null
+++ b/Lang/AutoLISP/Largest-proper-divisor-of-n
@@ -0,0 +1 @@
+../../Task/Largest-proper-divisor-of-n/AutoLISP
\ No newline at end of file
diff --git a/Lang/AutoLISP/The-Twelve-Days-of-Christmas b/Lang/AutoLISP/The-Twelve-Days-of-Christmas
new file mode 120000
index 0000000000..3dd7563b0d
--- /dev/null
+++ b/Lang/AutoLISP/The-Twelve-Days-of-Christmas
@@ -0,0 +1 @@
+../../Task/The-Twelve-Days-of-Christmas/AutoLISP
\ No newline at end of file
diff --git a/Lang/BBC-BASIC/Arbitrary-precision-integers-included- b/Lang/BBC-BASIC/Arbitrary-precision-integers-included-
new file mode 120000
index 0000000000..ca18adffdc
--- /dev/null
+++ b/Lang/BBC-BASIC/Arbitrary-precision-integers-included-
@@ -0,0 +1 @@
+../../Task/Arbitrary-precision-integers-included-/BBC-BASIC
\ No newline at end of file
diff --git a/Lang/BBC-BASIC/Multi-dimensional-array b/Lang/BBC-BASIC/Multi-dimensional-array
new file mode 120000
index 0000000000..4bc7c4a17c
--- /dev/null
+++ b/Lang/BBC-BASIC/Multi-dimensional-array
@@ -0,0 +1 @@
+../../Task/Multi-dimensional-array/BBC-BASIC
\ No newline at end of file
diff --git a/Lang/Ballerina/Comments b/Lang/Ballerina/Comments
new file mode 120000
index 0000000000..6b5d53ddee
--- /dev/null
+++ b/Lang/Ballerina/Comments
@@ -0,0 +1 @@
+../../Task/Comments/Ballerina
\ No newline at end of file
diff --git a/Lang/Bc/Anti-primes b/Lang/Bc/Anti-primes
new file mode 120000
index 0000000000..3d900bc4e9
--- /dev/null
+++ b/Lang/Bc/Anti-primes
@@ -0,0 +1 @@
+../../Task/Anti-primes/Bc
\ No newline at end of file
diff --git a/Lang/Bc/Arithmetic-derivative b/Lang/Bc/Arithmetic-derivative
new file mode 120000
index 0000000000..3ff888839e
--- /dev/null
+++ b/Lang/Bc/Arithmetic-derivative
@@ -0,0 +1 @@
+../../Task/Arithmetic-derivative/Bc
\ No newline at end of file
diff --git a/Lang/Bc/Department-numbers b/Lang/Bc/Department-numbers
new file mode 120000
index 0000000000..0e2c9bd91f
--- /dev/null
+++ b/Lang/Bc/Department-numbers
@@ -0,0 +1 @@
+../../Task/Department-numbers/Bc
\ No newline at end of file
diff --git a/Lang/Bc/Fairshare-between-two-and-more b/Lang/Bc/Fairshare-between-two-and-more
new file mode 120000
index 0000000000..f5c1a3523e
--- /dev/null
+++ b/Lang/Bc/Fairshare-between-two-and-more
@@ -0,0 +1 @@
+../../Task/Fairshare-between-two-and-more/Bc
\ No newline at end of file
diff --git a/Lang/Bc/Variables b/Lang/Bc/Variables
new file mode 120000
index 0000000000..03f47bea63
--- /dev/null
+++ b/Lang/Bc/Variables
@@ -0,0 +1 @@
+../../Task/Variables/Bc
\ No newline at end of file
diff --git a/Lang/Beeswax/00-LANG.txt b/Lang/Beeswax/00-LANG.txt
index bea56d7b6b..c131bf7731 100644
--- a/Lang/Beeswax/00-LANG.txt
+++ b/Lang/Beeswax/00-LANG.txt
@@ -25,7 +25,7 @@ All data in the local and global stacks are unsigned 64-bit integers, output as
== More information ==
-* [[eso:Beeswax|Esoteric languages wiki entry]]
+* [http://esolangs.org/wiki/beeswax Esoteric languages wiki entry]
== Reference implementation, example programs and complete language specification ==
diff --git a/Lang/C-sharp/Camel-case-and-snake-case b/Lang/C-sharp/Camel-case-and-snake-case
new file mode 120000
index 0000000000..0b673ec8ed
--- /dev/null
+++ b/Lang/C-sharp/Camel-case-and-snake-case
@@ -0,0 +1 @@
+../../Task/Camel-case-and-snake-case/C-sharp
\ No newline at end of file
diff --git a/Lang/C-sharp/Cistercian-numerals b/Lang/C-sharp/Cistercian-numerals
new file mode 120000
index 0000000000..d482ff0533
--- /dev/null
+++ b/Lang/C-sharp/Cistercian-numerals
@@ -0,0 +1 @@
+../../Task/Cistercian-numerals/C-sharp
\ No newline at end of file
diff --git a/Lang/C-sharp/M-bius-function b/Lang/C-sharp/M-bius-function
new file mode 120000
index 0000000000..56f84fb14c
--- /dev/null
+++ b/Lang/C-sharp/M-bius-function
@@ -0,0 +1 @@
+../../Task/M-bius-function/C-sharp
\ No newline at end of file
diff --git a/Lang/C-sharp/Vogels-approximation-method b/Lang/C-sharp/Vogels-approximation-method
new file mode 120000
index 0000000000..bb638d067a
--- /dev/null
+++ b/Lang/C-sharp/Vogels-approximation-method
@@ -0,0 +1 @@
+../../Task/Vogels-approximation-method/C-sharp
\ No newline at end of file
diff --git a/Lang/CBASIC/Factorial b/Lang/CBASIC/Factorial
new file mode 120000
index 0000000000..97dfd0b137
--- /dev/null
+++ b/Lang/CBASIC/Factorial
@@ -0,0 +1 @@
+../../Task/Factorial/CBASIC
\ No newline at end of file
diff --git a/Lang/CJam/00-LANG.txt b/Lang/CJam/00-LANG.txt
new file mode 100644
index 0000000000..9d6f8331dc
--- /dev/null
+++ b/Lang/CJam/00-LANG.txt
@@ -0,0 +1,8 @@
+{{language|site=https://sourceforge.net/p/cjam/wiki/Home/}}
+
+[https://sourceforge.net/projects/cjam/ sf repo]
+
+From the [https://sourceforge.net/p/cjam/wiki/Home/ wiki]:
+
+:In order to run a CJam program, [https://sourceforge.net/projects/cjam/files/ download] the latest jar file, e.g. cjam-0.6.5.jar, and run this command:
+:
java -jar cjam-0.6.5.jar file.cjam
\ No newline at end of file
diff --git a/Lang/CJam/00-META.yaml b/Lang/CJam/00-META.yaml
new file mode 100644
index 0000000000..49b8d01361
--- /dev/null
+++ b/Lang/CJam/00-META.yaml
@@ -0,0 +1,2 @@
+---
+from: http://rosettacode.org/wiki/Category:CJam
diff --git a/Lang/COBOL/Soloways-recurring-rainfall b/Lang/COBOL/Soloways-recurring-rainfall
new file mode 120000
index 0000000000..883bf3b2e0
--- /dev/null
+++ b/Lang/COBOL/Soloways-recurring-rainfall
@@ -0,0 +1 @@
+../../Task/Soloways-recurring-rainfall/COBOL
\ No newline at end of file
diff --git a/Lang/Calcscript/00-LANG.txt b/Lang/Calcscript/00-LANG.txt
new file mode 100644
index 0000000000..d2db819bbe
--- /dev/null
+++ b/Lang/Calcscript/00-LANG.txt
@@ -0,0 +1,10 @@
+{{language
+|site=https://gitee.com/jfiewo/calc/
+}}
+Calcscript is a small lisp-like language.
+* It has 3 datatypes: Int, Same, and Invalid.
+* The usual 4 arithmetic operations are supported.
+
+See [https://gitee.com/jfiewo/calc/ the respository] for details.
+{{language programming paradigm|Logic Programming}}
+{{language programming paradigm|Functional}}
\ No newline at end of file
diff --git a/Lang/Calcscript/00-META.yaml b/Lang/Calcscript/00-META.yaml
new file mode 100644
index 0000000000..cee9fc468f
--- /dev/null
+++ b/Lang/Calcscript/00-META.yaml
@@ -0,0 +1,2 @@
+---
+from: http://rosettacode.org/wiki/Category:Calcscript
diff --git a/Lang/Common-Lisp/Wieferich-primes b/Lang/Common-Lisp/Wieferich-primes
new file mode 120000
index 0000000000..91ad6e3ba2
--- /dev/null
+++ b/Lang/Common-Lisp/Wieferich-primes
@@ -0,0 +1 @@
+../../Task/Wieferich-primes/Common-Lisp
\ No newline at end of file
diff --git a/Lang/Component-Pascal/100-doors b/Lang/Component-Pascal/100-doors
deleted file mode 120000
index 76b023254e..0000000000
--- a/Lang/Component-Pascal/100-doors
+++ /dev/null
@@ -1 +0,0 @@
-../../Task/100-doors/Component-Pascal
\ No newline at end of file
diff --git a/Lang/Computer-zero-Assembly/00-LANG.txt b/Lang/Computer-zero-Assembly/00-LANG.txt
index e6ea975211..779b92356f 100644
--- a/Lang/Computer-zero-Assembly/00-LANG.txt
+++ b/Lang/Computer-zero-Assembly/00-LANG.txt
@@ -19,10 +19,10 @@ There are only 32 bytes of memory, and this includes your program code, leaving
==Self-Modifying Code==
With such little RAM available, the biggest tool we have at our disposal for programming is self-modifying code. The CPU makes no distinction between data and instructions, and as such we can store values into memory before that memory is executed, in order to change what the computer will do. Here's an example:
-LDA 4
+LDA 4
STA 2
ADD 3
STP
-SUB 3
+SUB 3
The above snippet of code never actually ADDs anything, since that instruction gets overwritten by SUB 3. And what is SUB 3 subtracting? It's subtracting the value of STP, which can be encoded as any number between 0xE0 and 0xFF. Specifically, the encoding of SUB 3 (i.e. 0b10000011) is decreased by some value between 0xE0 and 0xFF, and since all arithmetic on this CPU is modulo 256 (as is standard for nearly all 8-bit CPUs), there will be roll-over across the FF-00 boundary. Without a hardware carry flag, however, it's difficult to track this overflow.
\ No newline at end of file
diff --git a/Lang/Convex/00-LANG.txt b/Lang/Convex/00-LANG.txt
new file mode 100644
index 0000000000..6676f23dde
--- /dev/null
+++ b/Lang/Convex/00-LANG.txt
@@ -0,0 +1,6 @@
+Convex is a stack-based golfing esolang based on Golfscript and CJam.
+
+{{language|site=https://github.com/ZekNikZ/Convex}}
+
+{{try|Convex|[https://tio.run/#convex Try Convex on tio.run].}}
+{{language_programming_paradigm|Concatenative}}
\ No newline at end of file
diff --git a/Lang/Convex/00-META.yaml b/Lang/Convex/00-META.yaml
new file mode 100644
index 0000000000..b10fffa83e
--- /dev/null
+++ b/Lang/Convex/00-META.yaml
@@ -0,0 +1,2 @@
+---
+from: http://rosettacode.org/wiki/Category:Convex
diff --git a/Lang/Crystal/Department-numbers b/Lang/Crystal/Department-numbers
new file mode 120000
index 0000000000..1e36b398e9
--- /dev/null
+++ b/Lang/Crystal/Department-numbers
@@ -0,0 +1 @@
+../../Task/Department-numbers/Crystal
\ No newline at end of file
diff --git a/Lang/Crystal/Parsing-RPN-calculator-algorithm b/Lang/Crystal/Parsing-RPN-calculator-algorithm
new file mode 120000
index 0000000000..79e0e2ae7e
--- /dev/null
+++ b/Lang/Crystal/Parsing-RPN-calculator-algorithm
@@ -0,0 +1 @@
+../../Task/Parsing-RPN-calculator-algorithm/Crystal
\ No newline at end of file
diff --git a/Lang/Crystal/Rot-13 b/Lang/Crystal/Rot-13
new file mode 120000
index 0000000000..430011bd06
--- /dev/null
+++ b/Lang/Crystal/Rot-13
@@ -0,0 +1 @@
+../../Task/Rot-13/Crystal
\ No newline at end of file
diff --git a/Lang/Crystal/Singly-linked-list-Element-definition b/Lang/Crystal/Singly-linked-list-Element-definition
new file mode 120000
index 0000000000..1c9a4e215c
--- /dev/null
+++ b/Lang/Crystal/Singly-linked-list-Element-definition
@@ -0,0 +1 @@
+../../Task/Singly-linked-list-Element-definition/Crystal
\ No newline at end of file
diff --git a/Lang/Crystal/Singly-linked-list-Element-insertion b/Lang/Crystal/Singly-linked-list-Element-insertion
new file mode 120000
index 0000000000..e0de17b549
--- /dev/null
+++ b/Lang/Crystal/Singly-linked-list-Element-insertion
@@ -0,0 +1 @@
+../../Task/Singly-linked-list-Element-insertion/Crystal
\ No newline at end of file
diff --git a/Lang/Crystal/Soloways-recurring-rainfall b/Lang/Crystal/Soloways-recurring-rainfall
new file mode 120000
index 0000000000..017187c230
--- /dev/null
+++ b/Lang/Crystal/Soloways-recurring-rainfall
@@ -0,0 +1 @@
+../../Task/Soloways-recurring-rainfall/Crystal
\ No newline at end of file
diff --git a/Lang/Crystal/String-interpolation-included- b/Lang/Crystal/String-interpolation-included-
new file mode 120000
index 0000000000..05bff0aabd
--- /dev/null
+++ b/Lang/Crystal/String-interpolation-included-
@@ -0,0 +1 @@
+../../Task/String-interpolation-included-/Crystal
\ No newline at end of file
diff --git a/Lang/Dart/AVL-tree b/Lang/Dart/AVL-tree
new file mode 120000
index 0000000000..00bc5f9c2f
--- /dev/null
+++ b/Lang/Dart/AVL-tree
@@ -0,0 +1 @@
+../../Task/AVL-tree/Dart
\ No newline at end of file
diff --git a/Lang/Dart/Boyer-Moore-string-search b/Lang/Dart/Boyer-Moore-string-search
new file mode 120000
index 0000000000..8b8a6a6060
--- /dev/null
+++ b/Lang/Dart/Boyer-Moore-string-search
@@ -0,0 +1 @@
+../../Task/Boyer-Moore-string-search/Dart
\ No newline at end of file
diff --git a/Lang/Dart/Break-OO-privacy b/Lang/Dart/Break-OO-privacy
new file mode 120000
index 0000000000..e07e79a6ca
--- /dev/null
+++ b/Lang/Dart/Break-OO-privacy
@@ -0,0 +1 @@
+../../Task/Break-OO-privacy/Dart
\ No newline at end of file
diff --git a/Lang/Dart/Continued-fraction b/Lang/Dart/Continued-fraction
new file mode 120000
index 0000000000..ea5b665958
--- /dev/null
+++ b/Lang/Dart/Continued-fraction
@@ -0,0 +1 @@
+../../Task/Continued-fraction/Dart
\ No newline at end of file
diff --git a/Lang/Dart/Continued-fraction-Arithmetic-G-matrix-ng-continued-fraction-n- b/Lang/Dart/Continued-fraction-Arithmetic-G-matrix-ng-continued-fraction-n-
new file mode 120000
index 0000000000..eb55960eb5
--- /dev/null
+++ b/Lang/Dart/Continued-fraction-Arithmetic-G-matrix-ng-continued-fraction-n-
@@ -0,0 +1 @@
+../../Task/Continued-fraction-Arithmetic-G-matrix-ng-continued-fraction-n-/Dart
\ No newline at end of file
diff --git a/Lang/Dart/Dijkstras-algorithm b/Lang/Dart/Dijkstras-algorithm
new file mode 120000
index 0000000000..fc7b73a06b
--- /dev/null
+++ b/Lang/Dart/Dijkstras-algorithm
@@ -0,0 +1 @@
+../../Task/Dijkstras-algorithm/Dart
\ No newline at end of file
diff --git a/Lang/Dart/Floyd-Warshall-algorithm b/Lang/Dart/Floyd-Warshall-algorithm
new file mode 120000
index 0000000000..34dc98809b
--- /dev/null
+++ b/Lang/Dart/Floyd-Warshall-algorithm
@@ -0,0 +1 @@
+../../Task/Floyd-Warshall-algorithm/Dart
\ No newline at end of file
diff --git a/Lang/Dart/Parse-an-IP-Address b/Lang/Dart/Parse-an-IP-Address
new file mode 120000
index 0000000000..bbe41020cb
--- /dev/null
+++ b/Lang/Dart/Parse-an-IP-Address
@@ -0,0 +1 @@
+../../Task/Parse-an-IP-Address/Dart
\ No newline at end of file
diff --git a/Lang/Dart/Tonelli-Shanks-algorithm b/Lang/Dart/Tonelli-Shanks-algorithm
new file mode 120000
index 0000000000..72acd046bd
--- /dev/null
+++ b/Lang/Dart/Tonelli-Shanks-algorithm
@@ -0,0 +1 @@
+../../Task/Tonelli-Shanks-algorithm/Dart
\ No newline at end of file
diff --git a/Lang/Draco/Anti-primes b/Lang/Draco/Anti-primes
new file mode 120000
index 0000000000..e9ba464537
--- /dev/null
+++ b/Lang/Draco/Anti-primes
@@ -0,0 +1 @@
+../../Task/Anti-primes/Draco
\ No newline at end of file
diff --git a/Lang/DuckDB/00-LANG.txt b/Lang/DuckDB/00-LANG.txt
new file mode 100644
index 0000000000..2609130966
--- /dev/null
+++ b/Lang/DuckDB/00-LANG.txt
@@ -0,0 +1,4 @@
+[[DuckDB]] is an open-source, fast in-process analytical database management system based on a feature-rich SQL dialect complemented with deep integrations into client APIs.
+
+[[Category:Programming Languages]]
+[[Category:SQL]]
\ No newline at end of file
diff --git a/Lang/DuckDB/00-META.yaml b/Lang/DuckDB/00-META.yaml
new file mode 100644
index 0000000000..c9eafe7cf5
--- /dev/null
+++ b/Lang/DuckDB/00-META.yaml
@@ -0,0 +1,2 @@
+---
+from: http://rosettacode.org/wiki/Category:DuckDB
diff --git a/Lang/DuckDB/100-doors b/Lang/DuckDB/100-doors
new file mode 120000
index 0000000000..a0ee1f337e
--- /dev/null
+++ b/Lang/DuckDB/100-doors
@@ -0,0 +1 @@
+../../Task/100-doors/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/99-bottles-of-beer b/Lang/DuckDB/99-bottles-of-beer
new file mode 120000
index 0000000000..c5f15cd273
--- /dev/null
+++ b/Lang/DuckDB/99-bottles-of-beer
@@ -0,0 +1 @@
+../../Task/99-bottles-of-beer/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/A+B b/Lang/DuckDB/A+B
new file mode 120000
index 0000000000..ae6220876f
--- /dev/null
+++ b/Lang/DuckDB/A+B
@@ -0,0 +1 @@
+../../Task/A+B/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/ABC-problem b/Lang/DuckDB/ABC-problem
new file mode 120000
index 0000000000..36e60dd0cd
--- /dev/null
+++ b/Lang/DuckDB/ABC-problem
@@ -0,0 +1 @@
+../../Task/ABC-problem/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Anagrams b/Lang/DuckDB/Anagrams
new file mode 120000
index 0000000000..e80c01b2e3
--- /dev/null
+++ b/Lang/DuckDB/Anagrams
@@ -0,0 +1 @@
+../../Task/Anagrams/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Anonymous-recursion b/Lang/DuckDB/Anonymous-recursion
new file mode 120000
index 0000000000..e4448d2542
--- /dev/null
+++ b/Lang/DuckDB/Anonymous-recursion
@@ -0,0 +1 @@
+../../Task/Anonymous-recursion/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Arithmetic-Complex b/Lang/DuckDB/Arithmetic-Complex
new file mode 120000
index 0000000000..7e149e59dc
--- /dev/null
+++ b/Lang/DuckDB/Arithmetic-Complex
@@ -0,0 +1 @@
+../../Task/Arithmetic-Complex/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Arithmetic-Integer b/Lang/DuckDB/Arithmetic-Integer
new file mode 120000
index 0000000000..5bc3696b71
--- /dev/null
+++ b/Lang/DuckDB/Arithmetic-Integer
@@ -0,0 +1 @@
+../../Task/Arithmetic-Integer/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Arithmetic-geometric-mean b/Lang/DuckDB/Arithmetic-geometric-mean
new file mode 120000
index 0000000000..2519d0a8f8
--- /dev/null
+++ b/Lang/DuckDB/Arithmetic-geometric-mean
@@ -0,0 +1 @@
+../../Task/Arithmetic-geometric-mean/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Arithmetic-numbers b/Lang/DuckDB/Arithmetic-numbers
new file mode 120000
index 0000000000..a5e7e075b9
--- /dev/null
+++ b/Lang/DuckDB/Arithmetic-numbers
@@ -0,0 +1 @@
+../../Task/Arithmetic-numbers/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Array-concatenation b/Lang/DuckDB/Array-concatenation
new file mode 120000
index 0000000000..7ef5be0b5a
--- /dev/null
+++ b/Lang/DuckDB/Array-concatenation
@@ -0,0 +1 @@
+../../Task/Array-concatenation/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Array-length b/Lang/DuckDB/Array-length
new file mode 120000
index 0000000000..ebd59786ea
--- /dev/null
+++ b/Lang/DuckDB/Array-length
@@ -0,0 +1 @@
+../../Task/Array-length/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Arrays b/Lang/DuckDB/Arrays
new file mode 120000
index 0000000000..85190ece0f
--- /dev/null
+++ b/Lang/DuckDB/Arrays
@@ -0,0 +1 @@
+../../Task/Arrays/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Associative-array-Creation b/Lang/DuckDB/Associative-array-Creation
new file mode 120000
index 0000000000..ea2505f34f
--- /dev/null
+++ b/Lang/DuckDB/Associative-array-Creation
@@ -0,0 +1 @@
+../../Task/Associative-array-Creation/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Associative-array-Iteration b/Lang/DuckDB/Associative-array-Iteration
new file mode 120000
index 0000000000..c8269906e9
--- /dev/null
+++ b/Lang/DuckDB/Associative-array-Iteration
@@ -0,0 +1 @@
+../../Task/Associative-array-Iteration/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Associative-array-Merging b/Lang/DuckDB/Associative-array-Merging
new file mode 120000
index 0000000000..4e70d9ab01
--- /dev/null
+++ b/Lang/DuckDB/Associative-array-Merging
@@ -0,0 +1 @@
+../../Task/Associative-array-Merging/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Averages-Arithmetic-mean b/Lang/DuckDB/Averages-Arithmetic-mean
new file mode 120000
index 0000000000..7ef12ec4b6
--- /dev/null
+++ b/Lang/DuckDB/Averages-Arithmetic-mean
@@ -0,0 +1 @@
+../../Task/Averages-Arithmetic-mean/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Averages-Mean-angle b/Lang/DuckDB/Averages-Mean-angle
new file mode 120000
index 0000000000..5b1aa18e5e
--- /dev/null
+++ b/Lang/DuckDB/Averages-Mean-angle
@@ -0,0 +1 @@
+../../Task/Averages-Mean-angle/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Averages-Mean-time-of-day b/Lang/DuckDB/Averages-Mean-time-of-day
new file mode 120000
index 0000000000..7971faf640
--- /dev/null
+++ b/Lang/DuckDB/Averages-Mean-time-of-day
@@ -0,0 +1 @@
+../../Task/Averages-Mean-time-of-day/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Averages-Mode b/Lang/DuckDB/Averages-Mode
new file mode 120000
index 0000000000..0ba388e74d
--- /dev/null
+++ b/Lang/DuckDB/Averages-Mode
@@ -0,0 +1 @@
+../../Task/Averages-Mode/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Averages-Pythagorean-means b/Lang/DuckDB/Averages-Pythagorean-means
new file mode 120000
index 0000000000..1a5cb3068d
--- /dev/null
+++ b/Lang/DuckDB/Averages-Pythagorean-means
@@ -0,0 +1 @@
+../../Task/Averages-Pythagorean-means/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Babbage-problem b/Lang/DuckDB/Babbage-problem
new file mode 120000
index 0000000000..7cee7b9a76
--- /dev/null
+++ b/Lang/DuckDB/Babbage-problem
@@ -0,0 +1 @@
+../../Task/Babbage-problem/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Benfords-law b/Lang/DuckDB/Benfords-law
new file mode 120000
index 0000000000..9302673cc0
--- /dev/null
+++ b/Lang/DuckDB/Benfords-law
@@ -0,0 +1 @@
+../../Task/Benfords-law/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Bin-given-limits b/Lang/DuckDB/Bin-given-limits
new file mode 120000
index 0000000000..ba754d6a93
--- /dev/null
+++ b/Lang/DuckDB/Bin-given-limits
@@ -0,0 +1 @@
+../../Task/Bin-given-limits/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Binary-digits b/Lang/DuckDB/Binary-digits
new file mode 120000
index 0000000000..c4e4b4a580
--- /dev/null
+++ b/Lang/DuckDB/Binary-digits
@@ -0,0 +1 @@
+../../Task/Binary-digits/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Bioinformatics-base-count b/Lang/DuckDB/Bioinformatics-base-count
new file mode 120000
index 0000000000..6f72a9bb3a
--- /dev/null
+++ b/Lang/DuckDB/Bioinformatics-base-count
@@ -0,0 +1 @@
+../../Task/Bioinformatics-base-count/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Bitwise-IO b/Lang/DuckDB/Bitwise-IO
new file mode 120000
index 0000000000..d00e607776
--- /dev/null
+++ b/Lang/DuckDB/Bitwise-IO
@@ -0,0 +1 @@
+../../Task/Bitwise-IO/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Bitwise-operations b/Lang/DuckDB/Bitwise-operations
new file mode 120000
index 0000000000..a0841908e6
--- /dev/null
+++ b/Lang/DuckDB/Bitwise-operations
@@ -0,0 +1 @@
+../../Task/Bitwise-operations/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/CSV-data-manipulation b/Lang/DuckDB/CSV-data-manipulation
new file mode 120000
index 0000000000..799ed97795
--- /dev/null
+++ b/Lang/DuckDB/CSV-data-manipulation
@@ -0,0 +1 @@
+../../Task/CSV-data-manipulation/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Call-a-function b/Lang/DuckDB/Call-a-function
new file mode 120000
index 0000000000..bf87fb6ba8
--- /dev/null
+++ b/Lang/DuckDB/Call-a-function
@@ -0,0 +1 @@
+../../Task/Call-a-function/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Cartesian-product-of-two-or-more-lists b/Lang/DuckDB/Cartesian-product-of-two-or-more-lists
new file mode 120000
index 0000000000..f0873100b0
--- /dev/null
+++ b/Lang/DuckDB/Cartesian-product-of-two-or-more-lists
@@ -0,0 +1 @@
+../../Task/Cartesian-product-of-two-or-more-lists/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Case-sensitivity-of-identifiers b/Lang/DuckDB/Case-sensitivity-of-identifiers
new file mode 120000
index 0000000000..2a0900e2e4
--- /dev/null
+++ b/Lang/DuckDB/Case-sensitivity-of-identifiers
@@ -0,0 +1 @@
+../../Task/Case-sensitivity-of-identifiers/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Catalan-numbers b/Lang/DuckDB/Catalan-numbers
new file mode 120000
index 0000000000..5591f12e62
--- /dev/null
+++ b/Lang/DuckDB/Catalan-numbers
@@ -0,0 +1 @@
+../../Task/Catalan-numbers/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Catalan-numbers-Pascals-triangle b/Lang/DuckDB/Catalan-numbers-Pascals-triangle
new file mode 120000
index 0000000000..690dec4614
--- /dev/null
+++ b/Lang/DuckDB/Catalan-numbers-Pascals-triangle
@@ -0,0 +1 @@
+../../Task/Catalan-numbers-Pascals-triangle/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Check-that-file-exists b/Lang/DuckDB/Check-that-file-exists
new file mode 120000
index 0000000000..7a35121080
--- /dev/null
+++ b/Lang/DuckDB/Check-that-file-exists
@@ -0,0 +1 @@
+../../Task/Check-that-file-exists/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Collections b/Lang/DuckDB/Collections
new file mode 120000
index 0000000000..4bd2b4f60a
--- /dev/null
+++ b/Lang/DuckDB/Collections
@@ -0,0 +1 @@
+../../Task/Collections/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Combinations b/Lang/DuckDB/Combinations
new file mode 120000
index 0000000000..61cb39c1bb
--- /dev/null
+++ b/Lang/DuckDB/Combinations
@@ -0,0 +1 @@
+../../Task/Combinations/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Combinations-with-repetitions b/Lang/DuckDB/Combinations-with-repetitions
new file mode 120000
index 0000000000..3781b1dd53
--- /dev/null
+++ b/Lang/DuckDB/Combinations-with-repetitions
@@ -0,0 +1 @@
+../../Task/Combinations-with-repetitions/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Compare-a-list-of-strings b/Lang/DuckDB/Compare-a-list-of-strings
new file mode 120000
index 0000000000..dcf4a9dc8d
--- /dev/null
+++ b/Lang/DuckDB/Compare-a-list-of-strings
@@ -0,0 +1 @@
+../../Task/Compare-a-list-of-strings/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Compare-length-of-two-strings b/Lang/DuckDB/Compare-length-of-two-strings
new file mode 120000
index 0000000000..b29bfdb369
--- /dev/null
+++ b/Lang/DuckDB/Compare-length-of-two-strings
@@ -0,0 +1 @@
+../../Task/Compare-length-of-two-strings/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Compound-data-type b/Lang/DuckDB/Compound-data-type
new file mode 120000
index 0000000000..dc469b307b
--- /dev/null
+++ b/Lang/DuckDB/Compound-data-type
@@ -0,0 +1 @@
+../../Task/Compound-data-type/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Conditional-structures b/Lang/DuckDB/Conditional-structures
new file mode 120000
index 0000000000..19bf4a5caa
--- /dev/null
+++ b/Lang/DuckDB/Conditional-structures
@@ -0,0 +1 @@
+../../Task/Conditional-structures/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Convert-seconds-to-compound-duration b/Lang/DuckDB/Convert-seconds-to-compound-duration
new file mode 120000
index 0000000000..44055a0c42
--- /dev/null
+++ b/Lang/DuckDB/Convert-seconds-to-compound-duration
@@ -0,0 +1 @@
+../../Task/Convert-seconds-to-compound-duration/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Copy-a-string b/Lang/DuckDB/Copy-a-string
new file mode 120000
index 0000000000..d5f908f98d
--- /dev/null
+++ b/Lang/DuckDB/Copy-a-string
@@ -0,0 +1 @@
+../../Task/Copy-a-string/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Count-occurrences-of-a-substring b/Lang/DuckDB/Count-occurrences-of-a-substring
new file mode 120000
index 0000000000..82775de6e5
--- /dev/null
+++ b/Lang/DuckDB/Count-occurrences-of-a-substring
@@ -0,0 +1 @@
+../../Task/Count-occurrences-of-a-substring/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Create-a-two-dimensional-array-at-runtime b/Lang/DuckDB/Create-a-two-dimensional-array-at-runtime
new file mode 120000
index 0000000000..14657f9c21
--- /dev/null
+++ b/Lang/DuckDB/Create-a-two-dimensional-array-at-runtime
@@ -0,0 +1 @@
+../../Task/Create-a-two-dimensional-array-at-runtime/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Cumulative-standard-deviation b/Lang/DuckDB/Cumulative-standard-deviation
new file mode 120000
index 0000000000..f323d6c56e
--- /dev/null
+++ b/Lang/DuckDB/Cumulative-standard-deviation
@@ -0,0 +1 @@
+../../Task/Cumulative-standard-deviation/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Currency b/Lang/DuckDB/Currency
new file mode 120000
index 0000000000..092e5fcb13
--- /dev/null
+++ b/Lang/DuckDB/Currency
@@ -0,0 +1 @@
+../../Task/Currency/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Day-of-the-week b/Lang/DuckDB/Day-of-the-week
new file mode 120000
index 0000000000..467c28db17
--- /dev/null
+++ b/Lang/DuckDB/Day-of-the-week
@@ -0,0 +1 @@
+../../Task/Day-of-the-week/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Define-a-primitive-data-type b/Lang/DuckDB/Define-a-primitive-data-type
new file mode 120000
index 0000000000..f086397ed2
--- /dev/null
+++ b/Lang/DuckDB/Define-a-primitive-data-type
@@ -0,0 +1 @@
+../../Task/Define-a-primitive-data-type/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Detect-division-by-zero b/Lang/DuckDB/Detect-division-by-zero
new file mode 120000
index 0000000000..92508ad1dd
--- /dev/null
+++ b/Lang/DuckDB/Detect-division-by-zero
@@ -0,0 +1 @@
+../../Task/Detect-division-by-zero/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Determinant-and-permanent b/Lang/DuckDB/Determinant-and-permanent
new file mode 120000
index 0000000000..6bccec7e87
--- /dev/null
+++ b/Lang/DuckDB/Determinant-and-permanent
@@ -0,0 +1 @@
+../../Task/Determinant-and-permanent/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Determine-if-a-string-has-all-the-same-characters b/Lang/DuckDB/Determine-if-a-string-has-all-the-same-characters
new file mode 120000
index 0000000000..3a9bd20a7a
--- /dev/null
+++ b/Lang/DuckDB/Determine-if-a-string-has-all-the-same-characters
@@ -0,0 +1 @@
+../../Task/Determine-if-a-string-has-all-the-same-characters/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Determine-if-a-string-has-all-unique-characters b/Lang/DuckDB/Determine-if-a-string-has-all-unique-characters
new file mode 120000
index 0000000000..64885aacf1
--- /dev/null
+++ b/Lang/DuckDB/Determine-if-a-string-has-all-unique-characters
@@ -0,0 +1 @@
+../../Task/Determine-if-a-string-has-all-unique-characters/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Determine-if-a-string-is-collapsible b/Lang/DuckDB/Determine-if-a-string-is-collapsible
new file mode 120000
index 0000000000..0bb2727b9c
--- /dev/null
+++ b/Lang/DuckDB/Determine-if-a-string-is-collapsible
@@ -0,0 +1 @@
+../../Task/Determine-if-a-string-is-collapsible/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Determine-if-a-string-is-numeric b/Lang/DuckDB/Determine-if-a-string-is-numeric
new file mode 120000
index 0000000000..ead16cd478
--- /dev/null
+++ b/Lang/DuckDB/Determine-if-a-string-is-numeric
@@ -0,0 +1 @@
+../../Task/Determine-if-a-string-is-numeric/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Determine-if-a-string-is-squeezable b/Lang/DuckDB/Determine-if-a-string-is-squeezable
new file mode 120000
index 0000000000..57414557b7
--- /dev/null
+++ b/Lang/DuckDB/Determine-if-a-string-is-squeezable
@@ -0,0 +1 @@
+../../Task/Determine-if-a-string-is-squeezable/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Determine-sentence-type b/Lang/DuckDB/Determine-sentence-type
new file mode 120000
index 0000000000..50fb0aaf1b
--- /dev/null
+++ b/Lang/DuckDB/Determine-sentence-type
@@ -0,0 +1 @@
+../../Task/Determine-sentence-type/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Digital-root b/Lang/DuckDB/Digital-root
new file mode 120000
index 0000000000..736b8ccc4f
--- /dev/null
+++ b/Lang/DuckDB/Digital-root
@@ -0,0 +1 @@
+../../Task/Digital-root/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Diversity-prediction-theorem b/Lang/DuckDB/Diversity-prediction-theorem
new file mode 120000
index 0000000000..2c04d6784a
--- /dev/null
+++ b/Lang/DuckDB/Diversity-prediction-theorem
@@ -0,0 +1 @@
+../../Task/Diversity-prediction-theorem/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Documentation b/Lang/DuckDB/Documentation
new file mode 120000
index 0000000000..f9f6aaf2ce
--- /dev/null
+++ b/Lang/DuckDB/Documentation
@@ -0,0 +1 @@
+../../Task/Documentation/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Dot-product b/Lang/DuckDB/Dot-product
new file mode 120000
index 0000000000..b17f0214ea
--- /dev/null
+++ b/Lang/DuckDB/Dot-product
@@ -0,0 +1 @@
+../../Task/Dot-product/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Dynamic-variable-names b/Lang/DuckDB/Dynamic-variable-names
new file mode 120000
index 0000000000..c534bbc61d
--- /dev/null
+++ b/Lang/DuckDB/Dynamic-variable-names
@@ -0,0 +1 @@
+../../Task/Dynamic-variable-names/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Element-wise-operations b/Lang/DuckDB/Element-wise-operations
new file mode 120000
index 0000000000..7d7754f7f7
--- /dev/null
+++ b/Lang/DuckDB/Element-wise-operations
@@ -0,0 +1 @@
+../../Task/Element-wise-operations/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Empty-string b/Lang/DuckDB/Empty-string
new file mode 120000
index 0000000000..67b471da95
--- /dev/null
+++ b/Lang/DuckDB/Empty-string
@@ -0,0 +1 @@
+../../Task/Empty-string/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Entropy b/Lang/DuckDB/Entropy
new file mode 120000
index 0000000000..9c2bc0a9a7
--- /dev/null
+++ b/Lang/DuckDB/Entropy
@@ -0,0 +1 @@
+../../Task/Entropy/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Enumerations b/Lang/DuckDB/Enumerations
new file mode 120000
index 0000000000..0605dce25b
--- /dev/null
+++ b/Lang/DuckDB/Enumerations
@@ -0,0 +1 @@
+../../Task/Enumerations/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Equilibrium-index b/Lang/DuckDB/Equilibrium-index
new file mode 120000
index 0000000000..40fbbe81bb
--- /dev/null
+++ b/Lang/DuckDB/Equilibrium-index
@@ -0,0 +1 @@
+../../Task/Equilibrium-index/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Euler-method b/Lang/DuckDB/Euler-method
new file mode 120000
index 0000000000..61aa9557d0
--- /dev/null
+++ b/Lang/DuckDB/Euler-method
@@ -0,0 +1 @@
+../../Task/Euler-method/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Eulers-constant-0.5772... b/Lang/DuckDB/Eulers-constant-0.5772...
new file mode 120000
index 0000000000..c954937ec2
--- /dev/null
+++ b/Lang/DuckDB/Eulers-constant-0.5772...
@@ -0,0 +1 @@
+../../Task/Eulers-constant-0.5772.../DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Eulers-identity b/Lang/DuckDB/Eulers-identity
new file mode 120000
index 0000000000..58919d8390
--- /dev/null
+++ b/Lang/DuckDB/Eulers-identity
@@ -0,0 +1 @@
+../../Task/Eulers-identity/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Evaluate-binomial-coefficients b/Lang/DuckDB/Evaluate-binomial-coefficients
new file mode 120000
index 0000000000..69d838bb98
--- /dev/null
+++ b/Lang/DuckDB/Evaluate-binomial-coefficients
@@ -0,0 +1 @@
+../../Task/Evaluate-binomial-coefficients/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Even-or-odd b/Lang/DuckDB/Even-or-odd
new file mode 120000
index 0000000000..e428a57303
--- /dev/null
+++ b/Lang/DuckDB/Even-or-odd
@@ -0,0 +1 @@
+../../Task/Even-or-odd/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Exponentiation-order b/Lang/DuckDB/Exponentiation-order
new file mode 120000
index 0000000000..56438a22ee
--- /dev/null
+++ b/Lang/DuckDB/Exponentiation-order
@@ -0,0 +1 @@
+../../Task/Exponentiation-order/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Extreme-floating-point-values b/Lang/DuckDB/Extreme-floating-point-values
new file mode 120000
index 0000000000..617a7e99de
--- /dev/null
+++ b/Lang/DuckDB/Extreme-floating-point-values
@@ -0,0 +1 @@
+../../Task/Extreme-floating-point-values/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Factorial b/Lang/DuckDB/Factorial
new file mode 120000
index 0000000000..24543aba0b
--- /dev/null
+++ b/Lang/DuckDB/Factorial
@@ -0,0 +1 @@
+../../Task/Factorial/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Factors-of-an-integer b/Lang/DuckDB/Factors-of-an-integer
new file mode 120000
index 0000000000..70e5ed8d56
--- /dev/null
+++ b/Lang/DuckDB/Factors-of-an-integer
@@ -0,0 +1 @@
+../../Task/Factors-of-an-integer/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Fairshare-between-two-and-more b/Lang/DuckDB/Fairshare-between-two-and-more
new file mode 120000
index 0000000000..0c62807925
--- /dev/null
+++ b/Lang/DuckDB/Fairshare-between-two-and-more
@@ -0,0 +1 @@
+../../Task/Fairshare-between-two-and-more/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Feigenbaum-constant-calculation b/Lang/DuckDB/Feigenbaum-constant-calculation
new file mode 120000
index 0000000000..6f57f3044b
--- /dev/null
+++ b/Lang/DuckDB/Feigenbaum-constant-calculation
@@ -0,0 +1 @@
+../../Task/Feigenbaum-constant-calculation/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Fibonacci-sequence b/Lang/DuckDB/Fibonacci-sequence
new file mode 120000
index 0000000000..0411dbf9f3
--- /dev/null
+++ b/Lang/DuckDB/Fibonacci-sequence
@@ -0,0 +1 @@
+../../Task/Fibonacci-sequence/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/File-input-output b/Lang/DuckDB/File-input-output
new file mode 120000
index 0000000000..0bb640b9cd
--- /dev/null
+++ b/Lang/DuckDB/File-input-output
@@ -0,0 +1 @@
+../../Task/File-input-output/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Filter b/Lang/DuckDB/Filter
new file mode 120000
index 0000000000..bec860336f
--- /dev/null
+++ b/Lang/DuckDB/Filter
@@ -0,0 +1 @@
+../../Task/Filter/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Find-limit-of-recursion b/Lang/DuckDB/Find-limit-of-recursion
new file mode 120000
index 0000000000..e7eff55309
--- /dev/null
+++ b/Lang/DuckDB/Find-limit-of-recursion
@@ -0,0 +1 @@
+../../Task/Find-limit-of-recursion/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Find-the-last-Sunday-of-each-month b/Lang/DuckDB/Find-the-last-Sunday-of-each-month
new file mode 120000
index 0000000000..39172062a9
--- /dev/null
+++ b/Lang/DuckDB/Find-the-last-Sunday-of-each-month
@@ -0,0 +1 @@
+../../Task/Find-the-last-Sunday-of-each-month/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Five-weekends b/Lang/DuckDB/Five-weekends
new file mode 120000
index 0000000000..4d8ed3ebe3
--- /dev/null
+++ b/Lang/DuckDB/Five-weekends
@@ -0,0 +1 @@
+../../Task/Five-weekends/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Fixed-length-records b/Lang/DuckDB/Fixed-length-records
new file mode 120000
index 0000000000..0b8d72de87
--- /dev/null
+++ b/Lang/DuckDB/Fixed-length-records
@@ -0,0 +1 @@
+../../Task/Fixed-length-records/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Flatten-a-list b/Lang/DuckDB/Flatten-a-list
new file mode 120000
index 0000000000..5bd1c5b0d8
--- /dev/null
+++ b/Lang/DuckDB/Flatten-a-list
@@ -0,0 +1 @@
+../../Task/Flatten-a-list/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Formatted-numeric-output b/Lang/DuckDB/Formatted-numeric-output
new file mode 120000
index 0000000000..789e647161
--- /dev/null
+++ b/Lang/DuckDB/Formatted-numeric-output
@@ -0,0 +1 @@
+../../Task/Formatted-numeric-output/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Forward-difference b/Lang/DuckDB/Forward-difference
new file mode 120000
index 0000000000..6a0d935f36
--- /dev/null
+++ b/Lang/DuckDB/Forward-difference
@@ -0,0 +1 @@
+../../Task/Forward-difference/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Function-definition b/Lang/DuckDB/Function-definition
new file mode 120000
index 0000000000..b39d093883
--- /dev/null
+++ b/Lang/DuckDB/Function-definition
@@ -0,0 +1 @@
+../../Task/Function-definition/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Gamma-function b/Lang/DuckDB/Gamma-function
new file mode 120000
index 0000000000..6fcec68436
--- /dev/null
+++ b/Lang/DuckDB/Gamma-function
@@ -0,0 +1 @@
+../../Task/Gamma-function/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Gapful-numbers b/Lang/DuckDB/Gapful-numbers
new file mode 120000
index 0000000000..875c3e4310
--- /dev/null
+++ b/Lang/DuckDB/Gapful-numbers
@@ -0,0 +1 @@
+../../Task/Gapful-numbers/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Generate-lower-case-ASCII-alphabet b/Lang/DuckDB/Generate-lower-case-ASCII-alphabet
new file mode 120000
index 0000000000..51094f97da
--- /dev/null
+++ b/Lang/DuckDB/Generate-lower-case-ASCII-alphabet
@@ -0,0 +1 @@
+../../Task/Generate-lower-case-ASCII-alphabet/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Generic-swap b/Lang/DuckDB/Generic-swap
new file mode 120000
index 0000000000..b384241f1f
--- /dev/null
+++ b/Lang/DuckDB/Generic-swap
@@ -0,0 +1 @@
+../../Task/Generic-swap/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Golden-ratio-Convergence b/Lang/DuckDB/Golden-ratio-Convergence
new file mode 120000
index 0000000000..0ca8f2458f
--- /dev/null
+++ b/Lang/DuckDB/Golden-ratio-Convergence
@@ -0,0 +1 @@
+../../Task/Golden-ratio-Convergence/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Gotchas b/Lang/DuckDB/Gotchas
new file mode 120000
index 0000000000..16cceb3ff0
--- /dev/null
+++ b/Lang/DuckDB/Gotchas
@@ -0,0 +1 @@
+../../Task/Gotchas/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Greatest-common-divisor b/Lang/DuckDB/Greatest-common-divisor
new file mode 120000
index 0000000000..6fb062c771
--- /dev/null
+++ b/Lang/DuckDB/Greatest-common-divisor
@@ -0,0 +1 @@
+../../Task/Greatest-common-divisor/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Greatest-element-of-a-list b/Lang/DuckDB/Greatest-element-of-a-list
new file mode 120000
index 0000000000..5a2c7a66c9
--- /dev/null
+++ b/Lang/DuckDB/Greatest-element-of-a-list
@@ -0,0 +1 @@
+../../Task/Greatest-element-of-a-list/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Greatest-subsequential-sum b/Lang/DuckDB/Greatest-subsequential-sum
new file mode 120000
index 0000000000..dd3661e978
--- /dev/null
+++ b/Lang/DuckDB/Greatest-subsequential-sum
@@ -0,0 +1 @@
+../../Task/Greatest-subsequential-sum/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/HTTP b/Lang/DuckDB/HTTP
new file mode 120000
index 0000000000..f77a3116ff
--- /dev/null
+++ b/Lang/DuckDB/HTTP
@@ -0,0 +1 @@
+../../Task/HTTP/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/HTTPS b/Lang/DuckDB/HTTPS
new file mode 120000
index 0000000000..694faecb0f
--- /dev/null
+++ b/Lang/DuckDB/HTTPS
@@ -0,0 +1 @@
+../../Task/HTTPS/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/HTTPS-Authenticated b/Lang/DuckDB/HTTPS-Authenticated
new file mode 120000
index 0000000000..c1b123b3b8
--- /dev/null
+++ b/Lang/DuckDB/HTTPS-Authenticated
@@ -0,0 +1 @@
+../../Task/HTTPS-Authenticated/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Hailstone-sequence b/Lang/DuckDB/Hailstone-sequence
new file mode 120000
index 0000000000..8cb9cd3c4d
--- /dev/null
+++ b/Lang/DuckDB/Hailstone-sequence
@@ -0,0 +1 @@
+../../Task/Hailstone-sequence/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Harmonic-series b/Lang/DuckDB/Harmonic-series
new file mode 120000
index 0000000000..d5b23dfe32
--- /dev/null
+++ b/Lang/DuckDB/Harmonic-series
@@ -0,0 +1 @@
+../../Task/Harmonic-series/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Hash-from-two-arrays b/Lang/DuckDB/Hash-from-two-arrays
new file mode 120000
index 0000000000..4fd3efc241
--- /dev/null
+++ b/Lang/DuckDB/Hash-from-two-arrays
@@ -0,0 +1 @@
+../../Task/Hash-from-two-arrays/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Hash-join b/Lang/DuckDB/Hash-join
new file mode 120000
index 0000000000..d89e18cc75
--- /dev/null
+++ b/Lang/DuckDB/Hash-join
@@ -0,0 +1 @@
+../../Task/Hash-join/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Haversine-formula b/Lang/DuckDB/Haversine-formula
new file mode 120000
index 0000000000..102a047e33
--- /dev/null
+++ b/Lang/DuckDB/Haversine-formula
@@ -0,0 +1 @@
+../../Task/Haversine-formula/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Hello-world-Text b/Lang/DuckDB/Hello-world-Text
new file mode 120000
index 0000000000..1af484f405
--- /dev/null
+++ b/Lang/DuckDB/Hello-world-Text
@@ -0,0 +1 @@
+../../Task/Hello-world-Text/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Here-document b/Lang/DuckDB/Here-document
new file mode 120000
index 0000000000..f233028f5b
--- /dev/null
+++ b/Lang/DuckDB/Here-document
@@ -0,0 +1 @@
+../../Task/Here-document/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/ISBN13-check-digit b/Lang/DuckDB/ISBN13-check-digit
new file mode 120000
index 0000000000..ad247e79cf
--- /dev/null
+++ b/Lang/DuckDB/ISBN13-check-digit
@@ -0,0 +1 @@
+../../Task/ISBN13-check-digit/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Identity-matrix b/Lang/DuckDB/Identity-matrix
new file mode 120000
index 0000000000..d8402f7ae8
--- /dev/null
+++ b/Lang/DuckDB/Identity-matrix
@@ -0,0 +1 @@
+../../Task/Identity-matrix/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Idiomatically-determine-all-the-characters-that-can-be-used-for-symbols b/Lang/DuckDB/Idiomatically-determine-all-the-characters-that-can-be-used-for-symbols
new file mode 120000
index 0000000000..90e880a4b1
--- /dev/null
+++ b/Lang/DuckDB/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/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Idiomatically-determine-all-the-lowercase-and-uppercase-letters b/Lang/DuckDB/Idiomatically-determine-all-the-lowercase-and-uppercase-letters
new file mode 120000
index 0000000000..3722271469
--- /dev/null
+++ b/Lang/DuckDB/Idiomatically-determine-all-the-lowercase-and-uppercase-letters
@@ -0,0 +1 @@
+../../Task/Idiomatically-determine-all-the-lowercase-and-uppercase-letters/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Increment-a-numerical-string b/Lang/DuckDB/Increment-a-numerical-string
new file mode 120000
index 0000000000..a9f84c0e8c
--- /dev/null
+++ b/Lang/DuckDB/Increment-a-numerical-string
@@ -0,0 +1 @@
+../../Task/Increment-a-numerical-string/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Infinity b/Lang/DuckDB/Infinity
new file mode 120000
index 0000000000..ed12f74690
--- /dev/null
+++ b/Lang/DuckDB/Infinity
@@ -0,0 +1 @@
+../../Task/Infinity/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Integer-comparison b/Lang/DuckDB/Integer-comparison
new file mode 120000
index 0000000000..c6cacfcd06
--- /dev/null
+++ b/Lang/DuckDB/Integer-comparison
@@ -0,0 +1 @@
+../../Task/Integer-comparison/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Introspection b/Lang/DuckDB/Introspection
new file mode 120000
index 0000000000..c3bb6d896d
--- /dev/null
+++ b/Lang/DuckDB/Introspection
@@ -0,0 +1 @@
+../../Task/Introspection/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Inverted-index b/Lang/DuckDB/Inverted-index
new file mode 120000
index 0000000000..81053e0c15
--- /dev/null
+++ b/Lang/DuckDB/Inverted-index
@@ -0,0 +1 @@
+../../Task/Inverted-index/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Inverted-syntax b/Lang/DuckDB/Inverted-syntax
new file mode 120000
index 0000000000..cadc81e3b6
--- /dev/null
+++ b/Lang/DuckDB/Inverted-syntax
@@ -0,0 +1 @@
+../../Task/Inverted-syntax/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/JSON b/Lang/DuckDB/JSON
new file mode 120000
index 0000000000..e4757a4b09
--- /dev/null
+++ b/Lang/DuckDB/JSON
@@ -0,0 +1 @@
+../../Task/JSON/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Jaro-similarity b/Lang/DuckDB/Jaro-similarity
new file mode 120000
index 0000000000..39c64b8488
--- /dev/null
+++ b/Lang/DuckDB/Jaro-similarity
@@ -0,0 +1 @@
+../../Task/Jaro-similarity/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Knuth-shuffle b/Lang/DuckDB/Knuth-shuffle
new file mode 120000
index 0000000000..7d43c57cbe
--- /dev/null
+++ b/Lang/DuckDB/Knuth-shuffle
@@ -0,0 +1 @@
+../../Task/Knuth-shuffle/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Largest-int-from-concatenated-ints b/Lang/DuckDB/Largest-int-from-concatenated-ints
new file mode 120000
index 0000000000..8e73a50292
--- /dev/null
+++ b/Lang/DuckDB/Largest-int-from-concatenated-ints
@@ -0,0 +1 @@
+../../Task/Largest-int-from-concatenated-ints/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Last-Friday-of-each-month b/Lang/DuckDB/Last-Friday-of-each-month
new file mode 120000
index 0000000000..1236ebdc14
--- /dev/null
+++ b/Lang/DuckDB/Last-Friday-of-each-month
@@ -0,0 +1 @@
+../../Task/Last-Friday-of-each-month/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Leap-year b/Lang/DuckDB/Leap-year
new file mode 120000
index 0000000000..5816394f02
--- /dev/null
+++ b/Lang/DuckDB/Leap-year
@@ -0,0 +1 @@
+../../Task/Leap-year/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Left-factorials b/Lang/DuckDB/Left-factorials
new file mode 120000
index 0000000000..6877bf1f73
--- /dev/null
+++ b/Lang/DuckDB/Left-factorials
@@ -0,0 +1 @@
+../../Task/Left-factorials/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Leonardo-numbers b/Lang/DuckDB/Leonardo-numbers
new file mode 120000
index 0000000000..206ddcfce9
--- /dev/null
+++ b/Lang/DuckDB/Leonardo-numbers
@@ -0,0 +1 @@
+../../Task/Leonardo-numbers/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Letter-frequency b/Lang/DuckDB/Letter-frequency
new file mode 120000
index 0000000000..29228c3e0b
--- /dev/null
+++ b/Lang/DuckDB/Letter-frequency
@@ -0,0 +1 @@
+../../Task/Letter-frequency/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Levenshtein-distance b/Lang/DuckDB/Levenshtein-distance
new file mode 120000
index 0000000000..d0954b60f2
--- /dev/null
+++ b/Lang/DuckDB/Levenshtein-distance
@@ -0,0 +1 @@
+../../Task/Levenshtein-distance/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/List-comprehensions b/Lang/DuckDB/List-comprehensions
new file mode 120000
index 0000000000..72558c43a1
--- /dev/null
+++ b/Lang/DuckDB/List-comprehensions
@@ -0,0 +1 @@
+../../Task/List-comprehensions/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Literals-Integer b/Lang/DuckDB/Literals-Integer
new file mode 120000
index 0000000000..39629959b4
--- /dev/null
+++ b/Lang/DuckDB/Literals-Integer
@@ -0,0 +1 @@
+../../Task/Literals-Integer/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Logical-operations b/Lang/DuckDB/Logical-operations
new file mode 120000
index 0000000000..14d59b0f70
--- /dev/null
+++ b/Lang/DuckDB/Logical-operations
@@ -0,0 +1 @@
+../../Task/Logical-operations/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Longest-increasing-subsequence b/Lang/DuckDB/Longest-increasing-subsequence
new file mode 120000
index 0000000000..35a8443499
--- /dev/null
+++ b/Lang/DuckDB/Longest-increasing-subsequence
@@ -0,0 +1 @@
+../../Task/Longest-increasing-subsequence/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Loops-Break b/Lang/DuckDB/Loops-Break
new file mode 120000
index 0000000000..40b7904e3f
--- /dev/null
+++ b/Lang/DuckDB/Loops-Break
@@ -0,0 +1 @@
+../../Task/Loops-Break/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Loops-Do-while b/Lang/DuckDB/Loops-Do-while
new file mode 120000
index 0000000000..257f84d6ba
--- /dev/null
+++ b/Lang/DuckDB/Loops-Do-while
@@ -0,0 +1 @@
+../../Task/Loops-Do-while/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Loops-Downward-for b/Lang/DuckDB/Loops-Downward-for
new file mode 120000
index 0000000000..5516907335
--- /dev/null
+++ b/Lang/DuckDB/Loops-Downward-for
@@ -0,0 +1 @@
+../../Task/Loops-Downward-for/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Loops-For b/Lang/DuckDB/Loops-For
new file mode 120000
index 0000000000..56dde9a604
--- /dev/null
+++ b/Lang/DuckDB/Loops-For
@@ -0,0 +1 @@
+../../Task/Loops-For/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Loops-For-with-a-specified-step b/Lang/DuckDB/Loops-For-with-a-specified-step
new file mode 120000
index 0000000000..f7e2b536d7
--- /dev/null
+++ b/Lang/DuckDB/Loops-For-with-a-specified-step
@@ -0,0 +1 @@
+../../Task/Loops-For-with-a-specified-step/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Loops-Increment-loop-index-within-loop-body b/Lang/DuckDB/Loops-Increment-loop-index-within-loop-body
new file mode 120000
index 0000000000..d530992462
--- /dev/null
+++ b/Lang/DuckDB/Loops-Increment-loop-index-within-loop-body
@@ -0,0 +1 @@
+../../Task/Loops-Increment-loop-index-within-loop-body/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Loops-N-plus-one-half b/Lang/DuckDB/Loops-N-plus-one-half
new file mode 120000
index 0000000000..f9812bda7e
--- /dev/null
+++ b/Lang/DuckDB/Loops-N-plus-one-half
@@ -0,0 +1 @@
+../../Task/Loops-N-plus-one-half/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Loops-Nested b/Lang/DuckDB/Loops-Nested
new file mode 120000
index 0000000000..8b4afa46b5
--- /dev/null
+++ b/Lang/DuckDB/Loops-Nested
@@ -0,0 +1 @@
+../../Task/Loops-Nested/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Loops-While b/Lang/DuckDB/Loops-While
new file mode 120000
index 0000000000..60343480f3
--- /dev/null
+++ b/Lang/DuckDB/Loops-While
@@ -0,0 +1 @@
+../../Task/Loops-While/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Loops-With-multiple-ranges b/Lang/DuckDB/Loops-With-multiple-ranges
new file mode 120000
index 0000000000..540b734a24
--- /dev/null
+++ b/Lang/DuckDB/Loops-With-multiple-ranges
@@ -0,0 +1 @@
+../../Task/Loops-With-multiple-ranges/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Luhn-test-of-credit-card-numbers b/Lang/DuckDB/Luhn-test-of-credit-card-numbers
new file mode 120000
index 0000000000..397557411e
--- /dev/null
+++ b/Lang/DuckDB/Luhn-test-of-credit-card-numbers
@@ -0,0 +1 @@
+../../Task/Luhn-test-of-credit-card-numbers/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/MD5 b/Lang/DuckDB/MD5
new file mode 120000
index 0000000000..ab453e87da
--- /dev/null
+++ b/Lang/DuckDB/MD5
@@ -0,0 +1 @@
+../../Task/MD5/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Map-range b/Lang/DuckDB/Map-range
new file mode 120000
index 0000000000..6cd697a04b
--- /dev/null
+++ b/Lang/DuckDB/Map-range
@@ -0,0 +1 @@
+../../Task/Map-range/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Matrix-multiplication b/Lang/DuckDB/Matrix-multiplication
new file mode 120000
index 0000000000..2110896869
--- /dev/null
+++ b/Lang/DuckDB/Matrix-multiplication
@@ -0,0 +1 @@
+../../Task/Matrix-multiplication/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Matrix-transposition b/Lang/DuckDB/Matrix-transposition
new file mode 120000
index 0000000000..7e416217b2
--- /dev/null
+++ b/Lang/DuckDB/Matrix-transposition
@@ -0,0 +1 @@
+../../Task/Matrix-transposition/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Merge-and-aggregate-datasets b/Lang/DuckDB/Merge-and-aggregate-datasets
new file mode 120000
index 0000000000..e9d467735b
--- /dev/null
+++ b/Lang/DuckDB/Merge-and-aggregate-datasets
@@ -0,0 +1 @@
+../../Task/Merge-and-aggregate-datasets/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Metallic-ratios b/Lang/DuckDB/Metallic-ratios
new file mode 120000
index 0000000000..56fa981641
--- /dev/null
+++ b/Lang/DuckDB/Metallic-ratios
@@ -0,0 +1 @@
+../../Task/Metallic-ratios/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Middle-three-digits b/Lang/DuckDB/Middle-three-digits
new file mode 120000
index 0000000000..9c32c60a1c
--- /dev/null
+++ b/Lang/DuckDB/Middle-three-digits
@@ -0,0 +1 @@
+../../Task/Middle-three-digits/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Monte-Carlo-methods b/Lang/DuckDB/Monte-Carlo-methods
new file mode 120000
index 0000000000..f27be4f0e8
--- /dev/null
+++ b/Lang/DuckDB/Monte-Carlo-methods
@@ -0,0 +1 @@
+../../Task/Monte-Carlo-methods/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Nested-function b/Lang/DuckDB/Nested-function
new file mode 120000
index 0000000000..6ccb0c0029
--- /dev/null
+++ b/Lang/DuckDB/Nested-function
@@ -0,0 +1 @@
+../../Task/Nested-function/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Nth b/Lang/DuckDB/Nth
new file mode 120000
index 0000000000..6d1fd0295b
--- /dev/null
+++ b/Lang/DuckDB/Nth
@@ -0,0 +1 @@
+../../Task/Nth/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Nth-root b/Lang/DuckDB/Nth-root
new file mode 120000
index 0000000000..bdfee4887c
--- /dev/null
+++ b/Lang/DuckDB/Nth-root
@@ -0,0 +1 @@
+../../Task/Nth-root/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/One-of-n-lines-in-a-file b/Lang/DuckDB/One-of-n-lines-in-a-file
new file mode 120000
index 0000000000..84adf8bb46
--- /dev/null
+++ b/Lang/DuckDB/One-of-n-lines-in-a-file
@@ -0,0 +1 @@
+../../Task/One-of-n-lines-in-a-file/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Order-two-numerical-lists b/Lang/DuckDB/Order-two-numerical-lists
new file mode 120000
index 0000000000..fcd259b6c0
--- /dev/null
+++ b/Lang/DuckDB/Order-two-numerical-lists
@@ -0,0 +1 @@
+../../Task/Order-two-numerical-lists/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Ordered-words b/Lang/DuckDB/Ordered-words
new file mode 120000
index 0000000000..57d12d9c27
--- /dev/null
+++ b/Lang/DuckDB/Ordered-words
@@ -0,0 +1 @@
+../../Task/Ordered-words/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Palindrome-detection b/Lang/DuckDB/Palindrome-detection
new file mode 120000
index 0000000000..a318cb02ae
--- /dev/null
+++ b/Lang/DuckDB/Palindrome-detection
@@ -0,0 +1 @@
+../../Task/Palindrome-detection/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Parameterized-SQL-statement b/Lang/DuckDB/Parameterized-SQL-statement
new file mode 120000
index 0000000000..dded36b01b
--- /dev/null
+++ b/Lang/DuckDB/Parameterized-SQL-statement
@@ -0,0 +1 @@
+../../Task/Parameterized-SQL-statement/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Pascals-triangle b/Lang/DuckDB/Pascals-triangle
new file mode 120000
index 0000000000..e38a99fc2d
--- /dev/null
+++ b/Lang/DuckDB/Pascals-triangle
@@ -0,0 +1 @@
+../../Task/Pascals-triangle/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Permutations b/Lang/DuckDB/Permutations
new file mode 120000
index 0000000000..fa1198c6a6
--- /dev/null
+++ b/Lang/DuckDB/Permutations
@@ -0,0 +1 @@
+../../Task/Permutations/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Permutations-Derangements b/Lang/DuckDB/Permutations-Derangements
new file mode 120000
index 0000000000..b4140ee27e
--- /dev/null
+++ b/Lang/DuckDB/Permutations-Derangements
@@ -0,0 +1 @@
+../../Task/Permutations-Derangements/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Pick-random-element b/Lang/DuckDB/Pick-random-element
new file mode 120000
index 0000000000..4eec54c36e
--- /dev/null
+++ b/Lang/DuckDB/Pick-random-element
@@ -0,0 +1 @@
+../../Task/Pick-random-element/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Primality-by-trial-division b/Lang/DuckDB/Primality-by-trial-division
new file mode 120000
index 0000000000..8e9e10eb1a
--- /dev/null
+++ b/Lang/DuckDB/Primality-by-trial-division
@@ -0,0 +1 @@
+../../Task/Primality-by-trial-division/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Prime-decomposition b/Lang/DuckDB/Prime-decomposition
new file mode 120000
index 0000000000..dbb3b57727
--- /dev/null
+++ b/Lang/DuckDB/Prime-decomposition
@@ -0,0 +1 @@
+../../Task/Prime-decomposition/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Probabilistic-choice b/Lang/DuckDB/Probabilistic-choice
new file mode 120000
index 0000000000..caa9cf57ce
--- /dev/null
+++ b/Lang/DuckDB/Probabilistic-choice
@@ -0,0 +1 @@
+../../Task/Probabilistic-choice/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Proper-divisors b/Lang/DuckDB/Proper-divisors
new file mode 120000
index 0000000000..a8b8cf32ca
--- /dev/null
+++ b/Lang/DuckDB/Proper-divisors
@@ -0,0 +1 @@
+../../Task/Proper-divisors/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Pseudo-random-numbers-Middle-square-method b/Lang/DuckDB/Pseudo-random-numbers-Middle-square-method
new file mode 120000
index 0000000000..3424580b60
--- /dev/null
+++ b/Lang/DuckDB/Pseudo-random-numbers-Middle-square-method
@@ -0,0 +1 @@
+../../Task/Pseudo-random-numbers-Middle-square-method/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Random-numbers b/Lang/DuckDB/Random-numbers
new file mode 120000
index 0000000000..4e7ae21251
--- /dev/null
+++ b/Lang/DuckDB/Random-numbers
@@ -0,0 +1 @@
+../../Task/Random-numbers/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Range-expansion b/Lang/DuckDB/Range-expansion
new file mode 120000
index 0000000000..73f7852f3e
--- /dev/null
+++ b/Lang/DuckDB/Range-expansion
@@ -0,0 +1 @@
+../../Task/Range-expansion/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Range-extraction b/Lang/DuckDB/Range-extraction
new file mode 120000
index 0000000000..70b9fee7f2
--- /dev/null
+++ b/Lang/DuckDB/Range-extraction
@@ -0,0 +1 @@
+../../Task/Range-extraction/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Read-a-file-line-by-line b/Lang/DuckDB/Read-a-file-line-by-line
new file mode 120000
index 0000000000..5698cabe3f
--- /dev/null
+++ b/Lang/DuckDB/Read-a-file-line-by-line
@@ -0,0 +1 @@
+../../Task/Read-a-file-line-by-line/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Reflection-List-methods b/Lang/DuckDB/Reflection-List-methods
new file mode 120000
index 0000000000..e87f71ad29
--- /dev/null
+++ b/Lang/DuckDB/Reflection-List-methods
@@ -0,0 +1 @@
+../../Task/Reflection-List-methods/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Reflection-List-properties b/Lang/DuckDB/Reflection-List-properties
new file mode 120000
index 0000000000..61160f5035
--- /dev/null
+++ b/Lang/DuckDB/Reflection-List-properties
@@ -0,0 +1 @@
+../../Task/Reflection-List-properties/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Remove-duplicate-elements b/Lang/DuckDB/Remove-duplicate-elements
new file mode 120000
index 0000000000..e38927d88b
--- /dev/null
+++ b/Lang/DuckDB/Remove-duplicate-elements
@@ -0,0 +1 @@
+../../Task/Remove-duplicate-elements/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Rep-string b/Lang/DuckDB/Rep-string
new file mode 120000
index 0000000000..ce2543465d
--- /dev/null
+++ b/Lang/DuckDB/Rep-string
@@ -0,0 +1 @@
+../../Task/Rep-string/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Repeat-a-string b/Lang/DuckDB/Repeat-a-string
new file mode 120000
index 0000000000..126fb8a5a7
--- /dev/null
+++ b/Lang/DuckDB/Repeat-a-string
@@ -0,0 +1 @@
+../../Task/Repeat-a-string/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Return-multiple-values b/Lang/DuckDB/Return-multiple-values
new file mode 120000
index 0000000000..44885d997f
--- /dev/null
+++ b/Lang/DuckDB/Return-multiple-values
@@ -0,0 +1 @@
+../../Task/Return-multiple-values/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Reverse-a-string b/Lang/DuckDB/Reverse-a-string
new file mode 120000
index 0000000000..9c2fcefbbf
--- /dev/null
+++ b/Lang/DuckDB/Reverse-a-string
@@ -0,0 +1 @@
+../../Task/Reverse-a-string/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Roots-of-unity b/Lang/DuckDB/Roots-of-unity
new file mode 120000
index 0000000000..fbae972a1d
--- /dev/null
+++ b/Lang/DuckDB/Roots-of-unity
@@ -0,0 +1 @@
+../../Task/Roots-of-unity/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Run-length-encoding b/Lang/DuckDB/Run-length-encoding
new file mode 120000
index 0000000000..798b72b50c
--- /dev/null
+++ b/Lang/DuckDB/Run-length-encoding
@@ -0,0 +1 @@
+../../Task/Run-length-encoding/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Search-a-list-of-records b/Lang/DuckDB/Search-a-list-of-records
new file mode 120000
index 0000000000..8875d845bf
--- /dev/null
+++ b/Lang/DuckDB/Search-a-list-of-records
@@ -0,0 +1 @@
+../../Task/Search-a-list-of-records/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Set b/Lang/DuckDB/Set
new file mode 120000
index 0000000000..7e25aac634
--- /dev/null
+++ b/Lang/DuckDB/Set
@@ -0,0 +1 @@
+../../Task/Set/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Set-consolidation b/Lang/DuckDB/Set-consolidation
new file mode 120000
index 0000000000..46e9513ebb
--- /dev/null
+++ b/Lang/DuckDB/Set-consolidation
@@ -0,0 +1 @@
+../../Task/Set-consolidation/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Show-the-epoch b/Lang/DuckDB/Show-the-epoch
new file mode 120000
index 0000000000..6cd68764f9
--- /dev/null
+++ b/Lang/DuckDB/Show-the-epoch
@@ -0,0 +1 @@
+../../Task/Show-the-epoch/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Sieve-of-Eratosthenes b/Lang/DuckDB/Sieve-of-Eratosthenes
new file mode 120000
index 0000000000..ee6aa1fbd3
--- /dev/null
+++ b/Lang/DuckDB/Sieve-of-Eratosthenes
@@ -0,0 +1 @@
+../../Task/Sieve-of-Eratosthenes/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Sort-an-array-of-composite-structures b/Lang/DuckDB/Sort-an-array-of-composite-structures
new file mode 120000
index 0000000000..35612aed66
--- /dev/null
+++ b/Lang/DuckDB/Sort-an-array-of-composite-structures
@@ -0,0 +1 @@
+../../Task/Sort-an-array-of-composite-structures/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Sort-numbers-lexicographically b/Lang/DuckDB/Sort-numbers-lexicographically
new file mode 120000
index 0000000000..390860d685
--- /dev/null
+++ b/Lang/DuckDB/Sort-numbers-lexicographically
@@ -0,0 +1 @@
+../../Task/Sort-numbers-lexicographically/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Statistics-Basic b/Lang/DuckDB/Statistics-Basic
new file mode 120000
index 0000000000..c3caa99be7
--- /dev/null
+++ b/Lang/DuckDB/Statistics-Basic
@@ -0,0 +1 @@
+../../Task/Statistics-Basic/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/String-append b/Lang/DuckDB/String-append
new file mode 120000
index 0000000000..cc8ce5011e
--- /dev/null
+++ b/Lang/DuckDB/String-append
@@ -0,0 +1 @@
+../../Task/String-append/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/String-case b/Lang/DuckDB/String-case
new file mode 120000
index 0000000000..ab3478758f
--- /dev/null
+++ b/Lang/DuckDB/String-case
@@ -0,0 +1 @@
+../../Task/String-case/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/String-comparison b/Lang/DuckDB/String-comparison
new file mode 120000
index 0000000000..b7a7339e14
--- /dev/null
+++ b/Lang/DuckDB/String-comparison
@@ -0,0 +1 @@
+../../Task/String-comparison/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/String-interpolation-included- b/Lang/DuckDB/String-interpolation-included-
new file mode 120000
index 0000000000..807f8abec4
--- /dev/null
+++ b/Lang/DuckDB/String-interpolation-included-
@@ -0,0 +1 @@
+../../Task/String-interpolation-included-/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/String-length b/Lang/DuckDB/String-length
new file mode 120000
index 0000000000..f49078b058
--- /dev/null
+++ b/Lang/DuckDB/String-length
@@ -0,0 +1 @@
+../../Task/String-length/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/String-matching b/Lang/DuckDB/String-matching
new file mode 120000
index 0000000000..e3f7fa5300
--- /dev/null
+++ b/Lang/DuckDB/String-matching
@@ -0,0 +1 @@
+../../Task/String-matching/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/String-prepend b/Lang/DuckDB/String-prepend
new file mode 120000
index 0000000000..ea6f95610c
--- /dev/null
+++ b/Lang/DuckDB/String-prepend
@@ -0,0 +1 @@
+../../Task/String-prepend/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Strip-a-set-of-characters-from-a-string b/Lang/DuckDB/Strip-a-set-of-characters-from-a-string
new file mode 120000
index 0000000000..77ce9f900d
--- /dev/null
+++ b/Lang/DuckDB/Strip-a-set-of-characters-from-a-string
@@ -0,0 +1 @@
+../../Task/Strip-a-set-of-characters-from-a-string/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Strip-comments-from-a-string b/Lang/DuckDB/Strip-comments-from-a-string
new file mode 120000
index 0000000000..f58b2c006d
--- /dev/null
+++ b/Lang/DuckDB/Strip-comments-from-a-string
@@ -0,0 +1 @@
+../../Task/Strip-comments-from-a-string/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Strip-control-codes-and-extended-characters-from-a-string b/Lang/DuckDB/Strip-control-codes-and-extended-characters-from-a-string
new file mode 120000
index 0000000000..e3de3aa487
--- /dev/null
+++ b/Lang/DuckDB/Strip-control-codes-and-extended-characters-from-a-string
@@ -0,0 +1 @@
+../../Task/Strip-control-codes-and-extended-characters-from-a-string/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Strip-whitespace-from-a-string-Top-and-tail b/Lang/DuckDB/Strip-whitespace-from-a-string-Top-and-tail
new file mode 120000
index 0000000000..93405e661f
--- /dev/null
+++ b/Lang/DuckDB/Strip-whitespace-from-a-string-Top-and-tail
@@ -0,0 +1 @@
+../../Task/Strip-whitespace-from-a-string-Top-and-tail/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Substring b/Lang/DuckDB/Substring
new file mode 120000
index 0000000000..fe9daf5b9c
--- /dev/null
+++ b/Lang/DuckDB/Substring
@@ -0,0 +1 @@
+../../Task/Substring/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Sudoku b/Lang/DuckDB/Sudoku
new file mode 120000
index 0000000000..efc19532bb
--- /dev/null
+++ b/Lang/DuckDB/Sudoku
@@ -0,0 +1 @@
+../../Task/Sudoku/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Sum-and-product-of-an-array b/Lang/DuckDB/Sum-and-product-of-an-array
new file mode 120000
index 0000000000..9db07cfe55
--- /dev/null
+++ b/Lang/DuckDB/Sum-and-product-of-an-array
@@ -0,0 +1 @@
+../../Task/Sum-and-product-of-an-array/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Sum-digits-of-an-integer b/Lang/DuckDB/Sum-digits-of-an-integer
new file mode 120000
index 0000000000..2b4e9e5805
--- /dev/null
+++ b/Lang/DuckDB/Sum-digits-of-an-integer
@@ -0,0 +1 @@
+../../Task/Sum-digits-of-an-integer/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Sum-multiples-of-3-and-5 b/Lang/DuckDB/Sum-multiples-of-3-and-5
new file mode 120000
index 0000000000..06a19cefb7
--- /dev/null
+++ b/Lang/DuckDB/Sum-multiples-of-3-and-5
@@ -0,0 +1 @@
+../../Task/Sum-multiples-of-3-and-5/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Sum-of-a-series b/Lang/DuckDB/Sum-of-a-series
new file mode 120000
index 0000000000..db0f6f79c5
--- /dev/null
+++ b/Lang/DuckDB/Sum-of-a-series
@@ -0,0 +1 @@
+../../Task/Sum-of-a-series/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Sum-of-squares b/Lang/DuckDB/Sum-of-squares
new file mode 120000
index 0000000000..fe3d9a8a52
--- /dev/null
+++ b/Lang/DuckDB/Sum-of-squares
@@ -0,0 +1 @@
+../../Task/Sum-of-squares/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Symmetric-difference b/Lang/DuckDB/Symmetric-difference
new file mode 120000
index 0000000000..f254423d5f
--- /dev/null
+++ b/Lang/DuckDB/Symmetric-difference
@@ -0,0 +1 @@
+../../Task/Symmetric-difference/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Table-creation-Postal-addresses b/Lang/DuckDB/Table-creation-Postal-addresses
new file mode 120000
index 0000000000..174f03f886
--- /dev/null
+++ b/Lang/DuckDB/Table-creation-Postal-addresses
@@ -0,0 +1 @@
+../../Task/Table-creation-Postal-addresses/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Test-integerness b/Lang/DuckDB/Test-integerness
new file mode 120000
index 0000000000..0e9573c924
--- /dev/null
+++ b/Lang/DuckDB/Test-integerness
@@ -0,0 +1 @@
+../../Task/Test-integerness/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Text-processing-2 b/Lang/DuckDB/Text-processing-2
new file mode 120000
index 0000000000..b3c883d2ec
--- /dev/null
+++ b/Lang/DuckDB/Text-processing-2
@@ -0,0 +1 @@
+../../Task/Text-processing-2/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Thue-Morse b/Lang/DuckDB/Thue-Morse
new file mode 120000
index 0000000000..e14a41e488
--- /dev/null
+++ b/Lang/DuckDB/Thue-Morse
@@ -0,0 +1 @@
+../../Task/Thue-Morse/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Time-a-function b/Lang/DuckDB/Time-a-function
new file mode 120000
index 0000000000..d82a288f55
--- /dev/null
+++ b/Lang/DuckDB/Time-a-function
@@ -0,0 +1 @@
+../../Task/Time-a-function/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Tokenize-a-string b/Lang/DuckDB/Tokenize-a-string
new file mode 120000
index 0000000000..ee6d07a4b5
--- /dev/null
+++ b/Lang/DuckDB/Tokenize-a-string
@@ -0,0 +1 @@
+../../Task/Tokenize-a-string/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Top-rank-per-group b/Lang/DuckDB/Top-rank-per-group
new file mode 120000
index 0000000000..ada50a852c
--- /dev/null
+++ b/Lang/DuckDB/Top-rank-per-group
@@ -0,0 +1 @@
+../../Task/Top-rank-per-group/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Trigonometric-functions b/Lang/DuckDB/Trigonometric-functions
new file mode 120000
index 0000000000..58530b66ee
--- /dev/null
+++ b/Lang/DuckDB/Trigonometric-functions
@@ -0,0 +1 @@
+../../Task/Trigonometric-functions/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/URL-decoding b/Lang/DuckDB/URL-decoding
new file mode 120000
index 0000000000..c717460642
--- /dev/null
+++ b/Lang/DuckDB/URL-decoding
@@ -0,0 +1 @@
+../../Task/URL-decoding/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/UTF-8-encode-and-decode b/Lang/DuckDB/UTF-8-encode-and-decode
new file mode 120000
index 0000000000..792323a78c
--- /dev/null
+++ b/Lang/DuckDB/UTF-8-encode-and-decode
@@ -0,0 +1 @@
+../../Task/UTF-8-encode-and-decode/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Unix-ls b/Lang/DuckDB/Unix-ls
new file mode 120000
index 0000000000..85287a21f6
--- /dev/null
+++ b/Lang/DuckDB/Unix-ls
@@ -0,0 +1 @@
+../../Task/Unix-ls/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Variable-size-Get b/Lang/DuckDB/Variable-size-Get
new file mode 120000
index 0000000000..3cff7c631a
--- /dev/null
+++ b/Lang/DuckDB/Variable-size-Get
@@ -0,0 +1 @@
+../../Task/Variable-size-Get/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Variable-size-Set b/Lang/DuckDB/Variable-size-Set
new file mode 120000
index 0000000000..ee4a003cfa
--- /dev/null
+++ b/Lang/DuckDB/Variable-size-Set
@@ -0,0 +1 @@
+../../Task/Variable-size-Set/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Vector-products b/Lang/DuckDB/Vector-products
new file mode 120000
index 0000000000..3347aa5bba
--- /dev/null
+++ b/Lang/DuckDB/Vector-products
@@ -0,0 +1 @@
+../../Task/Vector-products/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Zero-to-the-zero-power b/Lang/DuckDB/Zero-to-the-zero-power
new file mode 120000
index 0000000000..7c7bac0f0b
--- /dev/null
+++ b/Lang/DuckDB/Zero-to-the-zero-power
@@ -0,0 +1 @@
+../../Task/Zero-to-the-zero-power/DuckDB
\ No newline at end of file
diff --git a/Lang/DuckDB/Zig-zag-matrix b/Lang/DuckDB/Zig-zag-matrix
new file mode 120000
index 0000000000..dee409f57f
--- /dev/null
+++ b/Lang/DuckDB/Zig-zag-matrix
@@ -0,0 +1 @@
+../../Task/Zig-zag-matrix/DuckDB
\ No newline at end of file
diff --git a/Lang/EasyLang/AKS-test-for-primes b/Lang/EasyLang/AKS-test-for-primes
new file mode 120000
index 0000000000..fb3fd809a4
--- /dev/null
+++ b/Lang/EasyLang/AKS-test-for-primes
@@ -0,0 +1 @@
+../../Task/AKS-test-for-primes/EasyLang
\ No newline at end of file
diff --git a/Lang/EasyLang/Bitmap-Midpoint-circle-algorithm b/Lang/EasyLang/Bitmap-Midpoint-circle-algorithm
new file mode 120000
index 0000000000..9b995802ee
--- /dev/null
+++ b/Lang/EasyLang/Bitmap-Midpoint-circle-algorithm
@@ -0,0 +1 @@
+../../Task/Bitmap-Midpoint-circle-algorithm/EasyLang
\ No newline at end of file
diff --git a/Lang/EasyLang/Cholesky-decomposition b/Lang/EasyLang/Cholesky-decomposition
new file mode 120000
index 0000000000..3d9b8e35d4
--- /dev/null
+++ b/Lang/EasyLang/Cholesky-decomposition
@@ -0,0 +1 @@
+../../Task/Cholesky-decomposition/EasyLang
\ No newline at end of file
diff --git a/Lang/EasyLang/Currency b/Lang/EasyLang/Currency
new file mode 120000
index 0000000000..a42c848ea8
--- /dev/null
+++ b/Lang/EasyLang/Currency
@@ -0,0 +1 @@
+../../Task/Currency/EasyLang
\ No newline at end of file
diff --git a/Lang/EasyLang/Death-Star b/Lang/EasyLang/Death-Star
new file mode 120000
index 0000000000..71ec2dde3d
--- /dev/null
+++ b/Lang/EasyLang/Death-Star
@@ -0,0 +1 @@
+../../Task/Death-Star/EasyLang
\ No newline at end of file
diff --git a/Lang/EasyLang/Distribution-of-0-digits-in-factorial-series b/Lang/EasyLang/Distribution-of-0-digits-in-factorial-series
new file mode 120000
index 0000000000..10532131de
--- /dev/null
+++ b/Lang/EasyLang/Distribution-of-0-digits-in-factorial-series
@@ -0,0 +1 @@
+../../Task/Distribution-of-0-digits-in-factorial-series/EasyLang
\ No newline at end of file
diff --git a/Lang/EasyLang/Draw-a-sphere b/Lang/EasyLang/Draw-a-sphere
new file mode 120000
index 0000000000..4a92493ec5
--- /dev/null
+++ b/Lang/EasyLang/Draw-a-sphere
@@ -0,0 +1 @@
+../../Task/Draw-a-sphere/EasyLang
\ No newline at end of file
diff --git a/Lang/EasyLang/EKG-sequence-convergence b/Lang/EasyLang/EKG-sequence-convergence
new file mode 120000
index 0000000000..a5d661cade
--- /dev/null
+++ b/Lang/EasyLang/EKG-sequence-convergence
@@ -0,0 +1 @@
+../../Task/EKG-sequence-convergence/EasyLang
\ No newline at end of file
diff --git a/Lang/EasyLang/Earliest-difference-between-prime-gaps b/Lang/EasyLang/Earliest-difference-between-prime-gaps
new file mode 120000
index 0000000000..e8abb13bc1
--- /dev/null
+++ b/Lang/EasyLang/Earliest-difference-between-prime-gaps
@@ -0,0 +1 @@
+../../Task/Earliest-difference-between-prime-gaps/EasyLang
\ No newline at end of file
diff --git a/Lang/EasyLang/Elementary-cellular-automaton-Infinite-length b/Lang/EasyLang/Elementary-cellular-automaton-Infinite-length
new file mode 120000
index 0000000000..440a0e3168
--- /dev/null
+++ b/Lang/EasyLang/Elementary-cellular-automaton-Infinite-length
@@ -0,0 +1 @@
+../../Task/Elementary-cellular-automaton-Infinite-length/EasyLang
\ No newline at end of file
diff --git a/Lang/EasyLang/Erd-s-Selfridge-categorization-of-primes b/Lang/EasyLang/Erd-s-Selfridge-categorization-of-primes
new file mode 120000
index 0000000000..a64dc7d4f0
--- /dev/null
+++ b/Lang/EasyLang/Erd-s-Selfridge-categorization-of-primes
@@ -0,0 +1 @@
+../../Task/Erd-s-Selfridge-categorization-of-primes/EasyLang
\ No newline at end of file
diff --git a/Lang/EasyLang/Faulhabers-formula b/Lang/EasyLang/Faulhabers-formula
new file mode 120000
index 0000000000..a0587d4c22
--- /dev/null
+++ b/Lang/EasyLang/Faulhabers-formula
@@ -0,0 +1 @@
+../../Task/Faulhabers-formula/EasyLang
\ No newline at end of file
diff --git a/Lang/EasyLang/Faulhabers-triangle b/Lang/EasyLang/Faulhabers-triangle
new file mode 120000
index 0000000000..0ced82832c
--- /dev/null
+++ b/Lang/EasyLang/Faulhabers-triangle
@@ -0,0 +1 @@
+../../Task/Faulhabers-triangle/EasyLang
\ No newline at end of file
diff --git a/Lang/EasyLang/Fibonacci-word-fractal b/Lang/EasyLang/Fibonacci-word-fractal
new file mode 120000
index 0000000000..d075c27d88
--- /dev/null
+++ b/Lang/EasyLang/Fibonacci-word-fractal
@@ -0,0 +1 @@
+../../Task/Fibonacci-word-fractal/EasyLang
\ No newline at end of file
diff --git a/Lang/EasyLang/Find-Chess960-starting-position-identifier b/Lang/EasyLang/Find-Chess960-starting-position-identifier
new file mode 120000
index 0000000000..74db5136c0
--- /dev/null
+++ b/Lang/EasyLang/Find-Chess960-starting-position-identifier
@@ -0,0 +1 @@
+../../Task/Find-Chess960-starting-position-identifier/EasyLang
\ No newline at end of file
diff --git a/Lang/EasyLang/Fraction-reduction b/Lang/EasyLang/Fraction-reduction
new file mode 120000
index 0000000000..61af524020
--- /dev/null
+++ b/Lang/EasyLang/Fraction-reduction
@@ -0,0 +1 @@
+../../Task/Fraction-reduction/EasyLang
\ No newline at end of file
diff --git a/Lang/EasyLang/French-Republican-calendar b/Lang/EasyLang/French-Republican-calendar
new file mode 120000
index 0000000000..63cacd897e
--- /dev/null
+++ b/Lang/EasyLang/French-Republican-calendar
@@ -0,0 +1 @@
+../../Task/French-Republican-calendar/EasyLang
\ No newline at end of file
diff --git a/Lang/EasyLang/Function-prototype b/Lang/EasyLang/Function-prototype
new file mode 120000
index 0000000000..d56b3a5da3
--- /dev/null
+++ b/Lang/EasyLang/Function-prototype
@@ -0,0 +1 @@
+../../Task/Function-prototype/EasyLang
\ No newline at end of file
diff --git a/Lang/EasyLang/Hash-from-two-arrays b/Lang/EasyLang/Hash-from-two-arrays
new file mode 120000
index 0000000000..0d148a2df3
--- /dev/null
+++ b/Lang/EasyLang/Hash-from-two-arrays
@@ -0,0 +1 @@
+../../Task/Hash-from-two-arrays/EasyLang
\ No newline at end of file
diff --git a/Lang/EasyLang/Honeycombs b/Lang/EasyLang/Honeycombs
new file mode 120000
index 0000000000..5885102888
--- /dev/null
+++ b/Lang/EasyLang/Honeycombs
@@ -0,0 +1 @@
+../../Task/Honeycombs/EasyLang
\ No newline at end of file
diff --git a/Lang/EasyLang/Hunt-the-Wumpus b/Lang/EasyLang/Hunt-the-Wumpus
new file mode 120000
index 0000000000..8a2489577d
--- /dev/null
+++ b/Lang/EasyLang/Hunt-the-Wumpus
@@ -0,0 +1 @@
+../../Task/Hunt-the-Wumpus/EasyLang
\ No newline at end of file
diff --git a/Lang/EasyLang/Jacobsthal-numbers b/Lang/EasyLang/Jacobsthal-numbers
new file mode 120000
index 0000000000..9469db92c2
--- /dev/null
+++ b/Lang/EasyLang/Jacobsthal-numbers
@@ -0,0 +1 @@
+../../Task/Jacobsthal-numbers/EasyLang
\ No newline at end of file
diff --git a/Lang/EasyLang/Pascals-triangle-Puzzle b/Lang/EasyLang/Pascals-triangle-Puzzle
new file mode 120000
index 0000000000..bb3b35817e
--- /dev/null
+++ b/Lang/EasyLang/Pascals-triangle-Puzzle
@@ -0,0 +1 @@
+../../Task/Pascals-triangle-Puzzle/EasyLang
\ No newline at end of file
diff --git a/Lang/EasyLang/Straddling-checkerboard b/Lang/EasyLang/Straddling-checkerboard
new file mode 120000
index 0000000000..df23fad6e0
--- /dev/null
+++ b/Lang/EasyLang/Straddling-checkerboard
@@ -0,0 +1 @@
+../../Task/Straddling-checkerboard/EasyLang
\ No newline at end of file
diff --git a/Lang/EasyLang/Unicode-strings b/Lang/EasyLang/Unicode-strings
new file mode 120000
index 0000000000..c52bd4da5c
--- /dev/null
+++ b/Lang/EasyLang/Unicode-strings
@@ -0,0 +1 @@
+../../Task/Unicode-strings/EasyLang
\ No newline at end of file
diff --git a/Lang/Eiffel/Loops-For b/Lang/Eiffel/Loops-For
new file mode 120000
index 0000000000..30f93ee824
--- /dev/null
+++ b/Lang/Eiffel/Loops-For
@@ -0,0 +1 @@
+../../Task/Loops-For/Eiffel
\ No newline at end of file
diff --git a/Lang/Eiffel/Loops-Infinite b/Lang/Eiffel/Loops-Infinite
new file mode 120000
index 0000000000..1016f5af23
--- /dev/null
+++ b/Lang/Eiffel/Loops-Infinite
@@ -0,0 +1 @@
+../../Task/Loops-Infinite/Eiffel
\ No newline at end of file
diff --git a/Lang/Elixir/Determinant-and-permanent b/Lang/Elixir/Determinant-and-permanent
new file mode 120000
index 0000000000..91e99770a2
--- /dev/null
+++ b/Lang/Elixir/Determinant-and-permanent
@@ -0,0 +1 @@
+../../Task/Determinant-and-permanent/Elixir
\ No newline at end of file
diff --git a/Lang/Elixir/K-d-tree b/Lang/Elixir/K-d-tree
new file mode 120000
index 0000000000..4a7008abc8
--- /dev/null
+++ b/Lang/Elixir/K-d-tree
@@ -0,0 +1 @@
+../../Task/K-d-tree/Elixir
\ No newline at end of file
diff --git a/Lang/Elixir/Parse-an-IP-Address b/Lang/Elixir/Parse-an-IP-Address
new file mode 120000
index 0000000000..bad8e9a86e
--- /dev/null
+++ b/Lang/Elixir/Parse-an-IP-Address
@@ -0,0 +1 @@
+../../Task/Parse-an-IP-Address/Elixir
\ No newline at end of file
diff --git a/Lang/Erlang/Determinant-and-permanent b/Lang/Erlang/Determinant-and-permanent
new file mode 120000
index 0000000000..1dcba08234
--- /dev/null
+++ b/Lang/Erlang/Determinant-and-permanent
@@ -0,0 +1 @@
+../../Task/Determinant-and-permanent/Erlang
\ No newline at end of file
diff --git a/Lang/Erlang/Floyd-Warshall-algorithm b/Lang/Erlang/Floyd-Warshall-algorithm
new file mode 120000
index 0000000000..ac856e6ffa
--- /dev/null
+++ b/Lang/Erlang/Floyd-Warshall-algorithm
@@ -0,0 +1 @@
+../../Task/Floyd-Warshall-algorithm/Erlang
\ No newline at end of file
diff --git a/Lang/Excel/Jacobi-symbol b/Lang/Excel/Jacobi-symbol
new file mode 120000
index 0000000000..85f7061c07
--- /dev/null
+++ b/Lang/Excel/Jacobi-symbol
@@ -0,0 +1 @@
+../../Task/Jacobi-symbol/Excel
\ No newline at end of file
diff --git a/Lang/Extended-Color-BASIC/00-LANG.txt b/Lang/Extended-Color-BASIC/00-LANG.txt
new file mode 100644
index 0000000000..17efd36e93
--- /dev/null
+++ b/Lang/Extended-Color-BASIC/00-LANG.txt
@@ -0,0 +1,7 @@
+{{language|Extended Color BASIC}}
+
+Microsoft Extended Color BASIC the BASIC interpreter for the Tandy Color Computer and the Dragon Data Motorola 6809 processor based machines.
+
+==See Also==
+* [[wp:Extended Color BASIC|Wikipedia: Extended Color BASIC]]
+* [[Tasks not Implemented in Extended Color BASIC]]
\ No newline at end of file
diff --git a/Lang/Extended-Color-BASIC/00-META.yaml b/Lang/Extended-Color-BASIC/00-META.yaml
new file mode 100644
index 0000000000..57e9e4028d
--- /dev/null
+++ b/Lang/Extended-Color-BASIC/00-META.yaml
@@ -0,0 +1,2 @@
+---
+from: http://rosettacode.org/wiki/Category:Extended_Color_BASIC
diff --git a/Lang/Extended-Color-BASIC/Arrays b/Lang/Extended-Color-BASIC/Arrays
new file mode 120000
index 0000000000..2ca9fdf8eb
--- /dev/null
+++ b/Lang/Extended-Color-BASIC/Arrays
@@ -0,0 +1 @@
+../../Task/Arrays/Extended-Color-BASIC
\ No newline at end of file
diff --git a/Lang/Extended-Color-BASIC/Copy-a-string b/Lang/Extended-Color-BASIC/Copy-a-string
new file mode 120000
index 0000000000..7a931a182a
--- /dev/null
+++ b/Lang/Extended-Color-BASIC/Copy-a-string
@@ -0,0 +1 @@
+../../Task/Copy-a-string/Extended-Color-BASIC
\ No newline at end of file
diff --git a/Lang/Extended-Color-BASIC/Hello-world-Text b/Lang/Extended-Color-BASIC/Hello-world-Text
new file mode 120000
index 0000000000..b5cfbf6b90
--- /dev/null
+++ b/Lang/Extended-Color-BASIC/Hello-world-Text
@@ -0,0 +1 @@
+../../Task/Hello-world-Text/Extended-Color-BASIC
\ No newline at end of file
diff --git a/Lang/Extended-Color-BASIC/Loops-For b/Lang/Extended-Color-BASIC/Loops-For
new file mode 120000
index 0000000000..8719420a7c
--- /dev/null
+++ b/Lang/Extended-Color-BASIC/Loops-For
@@ -0,0 +1 @@
+../../Task/Loops-For/Extended-Color-BASIC
\ No newline at end of file
diff --git a/Lang/Extended-Color-BASIC/Quine b/Lang/Extended-Color-BASIC/Quine
new file mode 120000
index 0000000000..fb6135d264
--- /dev/null
+++ b/Lang/Extended-Color-BASIC/Quine
@@ -0,0 +1 @@
+../../Task/Quine/Extended-Color-BASIC
\ No newline at end of file
diff --git a/Lang/Extended-Color-BASIC/User-input-Text b/Lang/Extended-Color-BASIC/User-input-Text
new file mode 120000
index 0000000000..545233f9b1
--- /dev/null
+++ b/Lang/Extended-Color-BASIC/User-input-Text
@@ -0,0 +1 @@
+../../Task/User-input-Text/Extended-Color-BASIC
\ No newline at end of file
diff --git a/Lang/F-Sharp/Long-multiplication b/Lang/F-Sharp/Long-multiplication
deleted file mode 120000
index a8ece45d37..0000000000
--- a/Lang/F-Sharp/Long-multiplication
+++ /dev/null
@@ -1 +0,0 @@
-../../Task/Long-multiplication/F-Sharp
\ No newline at end of file
diff --git a/Lang/F-Sharp/Multiplicative-order b/Lang/F-Sharp/Multiplicative-order
new file mode 120000
index 0000000000..b2064cc3e0
--- /dev/null
+++ b/Lang/F-Sharp/Multiplicative-order
@@ -0,0 +1 @@
+../../Task/Multiplicative-order/F-Sharp
\ No newline at end of file
diff --git a/Lang/Factor/Best-shuffle b/Lang/Factor/Best-shuffle
new file mode 120000
index 0000000000..a10c8f5d14
--- /dev/null
+++ b/Lang/Factor/Best-shuffle
@@ -0,0 +1 @@
+../../Task/Best-shuffle/Factor
\ No newline at end of file
diff --git a/Lang/Fennel/00-LANG.txt b/Lang/Fennel/00-LANG.txt
index d4313c004b..a3b3fb9075 100644
--- a/Lang/Fennel/00-LANG.txt
+++ b/Lang/Fennel/00-LANG.txt
@@ -10,4 +10,9 @@ According to Fennel website: Fennel is a programming language that brings togeth
Anywhere you can run Lua code, you can run Fennel code.
-See more examples at: [https://fennel-lang.org/ Fennel Website]
\ No newline at end of file
+See more examples at: [https://fennel-lang.org/ Fennel Website]
+
+A useful learning tool is antifennel at [https://git.sr.ht/~technomancy/antifennel https://git.sr.ht/~technomancy/antifennel] that can convert Lua programs to Fennel.
+NB, some Lua features are not supported, particularly , and goto and any new features in Lua 5.5.
+
+As well as [[Lua]] 5.x VMs, Fennel programs can also be run with [[Pluto]], though warnings will probably be generated when Pluto parses the generated Lua.
\ No newline at end of file
diff --git a/Lang/Fennel/Abundant-deficient-and-perfect-number-classifications b/Lang/Fennel/Abundant-deficient-and-perfect-number-classifications
new file mode 120000
index 0000000000..fbb88cf56d
--- /dev/null
+++ b/Lang/Fennel/Abundant-deficient-and-perfect-number-classifications
@@ -0,0 +1 @@
+../../Task/Abundant-deficient-and-perfect-number-classifications/Fennel
\ No newline at end of file
diff --git a/Lang/Fennel/Factorial b/Lang/Fennel/Factorial
new file mode 120000
index 0000000000..ad3ab162af
--- /dev/null
+++ b/Lang/Fennel/Factorial
@@ -0,0 +1 @@
+../../Task/Factorial/Fennel
\ No newline at end of file
diff --git a/Lang/Fennel/Factorial-primes b/Lang/Fennel/Factorial-primes
new file mode 120000
index 0000000000..f7ae7a4fab
--- /dev/null
+++ b/Lang/Fennel/Factorial-primes
@@ -0,0 +1 @@
+../../Task/Factorial-primes/Fennel
\ No newline at end of file
diff --git a/Lang/Fennel/Goldbachs-comet b/Lang/Fennel/Goldbachs-comet
new file mode 120000
index 0000000000..38a9767c12
--- /dev/null
+++ b/Lang/Fennel/Goldbachs-comet
@@ -0,0 +1 @@
+../../Task/Goldbachs-comet/Fennel
\ No newline at end of file
diff --git a/Lang/Fennel/Horners-rule-for-polynomial-evaluation b/Lang/Fennel/Horners-rule-for-polynomial-evaluation
new file mode 120000
index 0000000000..74fe37f151
--- /dev/null
+++ b/Lang/Fennel/Horners-rule-for-polynomial-evaluation
@@ -0,0 +1 @@
+../../Task/Horners-rule-for-polynomial-evaluation/Fennel
\ No newline at end of file
diff --git a/Lang/Fennel/Jacobsthal-numbers b/Lang/Fennel/Jacobsthal-numbers
new file mode 120000
index 0000000000..fcf69f6156
--- /dev/null
+++ b/Lang/Fennel/Jacobsthal-numbers
@@ -0,0 +1 @@
+../../Task/Jacobsthal-numbers/Fennel
\ No newline at end of file
diff --git a/Lang/Fennel/Sum-of-elements-below-main-diagonal-of-matrix b/Lang/Fennel/Sum-of-elements-below-main-diagonal-of-matrix
new file mode 120000
index 0000000000..e6054255ef
--- /dev/null
+++ b/Lang/Fennel/Sum-of-elements-below-main-diagonal-of-matrix
@@ -0,0 +1 @@
+../../Task/Sum-of-elements-below-main-diagonal-of-matrix/Fennel
\ No newline at end of file
diff --git a/Lang/Fennel/Time-a-function b/Lang/Fennel/Time-a-function
new file mode 120000
index 0000000000..e57c2d9bfb
--- /dev/null
+++ b/Lang/Fennel/Time-a-function
@@ -0,0 +1 @@
+../../Task/Time-a-function/Fennel
\ No newline at end of file
diff --git a/Lang/Fennel/Yellowstone-sequence b/Lang/Fennel/Yellowstone-sequence
new file mode 120000
index 0000000000..e160b50754
--- /dev/null
+++ b/Lang/Fennel/Yellowstone-sequence
@@ -0,0 +1 @@
+../../Task/Yellowstone-sequence/Fennel
\ No newline at end of file
diff --git a/Lang/Fortran/Associative-array-Merging b/Lang/Fortran/Associative-array-Merging
new file mode 120000
index 0000000000..862cee9b2b
--- /dev/null
+++ b/Lang/Fortran/Associative-array-Merging
@@ -0,0 +1 @@
+../../Task/Associative-array-Merging/Fortran
\ No newline at end of file
diff --git a/Lang/Fortran/Catalan-numbers-Pascals-triangle b/Lang/Fortran/Catalan-numbers-Pascals-triangle
new file mode 120000
index 0000000000..e33b331d86
--- /dev/null
+++ b/Lang/Fortran/Catalan-numbers-Pascals-triangle
@@ -0,0 +1 @@
+../../Task/Catalan-numbers-Pascals-triangle/Fortran
\ No newline at end of file
diff --git a/Lang/Fortran/Chinese-zodiac b/Lang/Fortran/Chinese-zodiac
new file mode 120000
index 0000000000..87ed14e5e7
--- /dev/null
+++ b/Lang/Fortran/Chinese-zodiac
@@ -0,0 +1 @@
+../../Task/Chinese-zodiac/Fortran
\ No newline at end of file
diff --git a/Lang/Fortran/Cyclotomic-polynomial b/Lang/Fortran/Cyclotomic-polynomial
new file mode 120000
index 0000000000..0c2fd63e5e
--- /dev/null
+++ b/Lang/Fortran/Cyclotomic-polynomial
@@ -0,0 +1 @@
+../../Task/Cyclotomic-polynomial/Fortran
\ No newline at end of file
diff --git a/Lang/Fortran/Disarium-numbers b/Lang/Fortran/Disarium-numbers
new file mode 120000
index 0000000000..4713bf931d
--- /dev/null
+++ b/Lang/Fortran/Disarium-numbers
@@ -0,0 +1 @@
+../../Task/Disarium-numbers/Fortran
\ No newline at end of file
diff --git a/Lang/Fortran/Display-a-linear-combination b/Lang/Fortran/Display-a-linear-combination
new file mode 120000
index 0000000000..4a9784f58d
--- /dev/null
+++ b/Lang/Fortran/Display-a-linear-combination
@@ -0,0 +1 @@
+../../Task/Display-a-linear-combination/Fortran
\ No newline at end of file
diff --git a/Lang/Fortran/EKG-sequence-convergence b/Lang/Fortran/EKG-sequence-convergence
new file mode 120000
index 0000000000..3ba5c0a162
--- /dev/null
+++ b/Lang/Fortran/EKG-sequence-convergence
@@ -0,0 +1 @@
+../../Task/EKG-sequence-convergence/Fortran
\ No newline at end of file
diff --git a/Lang/Fortran/Egyptian-division b/Lang/Fortran/Egyptian-division
new file mode 120000
index 0000000000..bb7a134139
--- /dev/null
+++ b/Lang/Fortran/Egyptian-division
@@ -0,0 +1 @@
+../../Task/Egyptian-division/Fortran
\ No newline at end of file
diff --git a/Lang/Fortran/French-Republican-calendar b/Lang/Fortran/French-Republican-calendar
new file mode 120000
index 0000000000..765942db3d
--- /dev/null
+++ b/Lang/Fortran/French-Republican-calendar
@@ -0,0 +1 @@
+../../Task/French-Republican-calendar/Fortran
\ No newline at end of file
diff --git a/Lang/Fortran/Hofstadter-Figure-Figure-sequences b/Lang/Fortran/Hofstadter-Figure-Figure-sequences
new file mode 120000
index 0000000000..46497cf751
--- /dev/null
+++ b/Lang/Fortran/Hofstadter-Figure-Figure-sequences
@@ -0,0 +1 @@
+../../Task/Hofstadter-Figure-Figure-sequences/Fortran
\ No newline at end of file
diff --git a/Lang/Fortran/Humble-numbers b/Lang/Fortran/Humble-numbers
new file mode 120000
index 0000000000..5aff41aed9
--- /dev/null
+++ b/Lang/Fortran/Humble-numbers
@@ -0,0 +1 @@
+../../Task/Humble-numbers/Fortran
\ No newline at end of file
diff --git a/Lang/Fortran/Jewels-and-stones b/Lang/Fortran/Jewels-and-stones
new file mode 120000
index 0000000000..5375572de2
--- /dev/null
+++ b/Lang/Fortran/Jewels-and-stones
@@ -0,0 +1 @@
+../../Task/Jewels-and-stones/Fortran
\ No newline at end of file
diff --git a/Lang/Fortran/Knapsack-problem-Bounded b/Lang/Fortran/Knapsack-problem-Bounded
new file mode 120000
index 0000000000..9f9870702b
--- /dev/null
+++ b/Lang/Fortran/Knapsack-problem-Bounded
@@ -0,0 +1 @@
+../../Task/Knapsack-problem-Bounded/Fortran
\ No newline at end of file
diff --git a/Lang/Fortran/Knuths-power-tree b/Lang/Fortran/Knuths-power-tree
new file mode 120000
index 0000000000..163172c51f
--- /dev/null
+++ b/Lang/Fortran/Knuths-power-tree
@@ -0,0 +1 @@
+../../Task/Knuths-power-tree/Fortran
\ No newline at end of file
diff --git a/Lang/Fortran/McNuggets-problem b/Lang/Fortran/McNuggets-problem
new file mode 120000
index 0000000000..6e4b8bc9dd
--- /dev/null
+++ b/Lang/Fortran/McNuggets-problem
@@ -0,0 +1 @@
+../../Task/McNuggets-problem/Fortran
\ No newline at end of file
diff --git a/Lang/Fortran/Parse-an-IP-Address b/Lang/Fortran/Parse-an-IP-Address
new file mode 120000
index 0000000000..33994c1cc1
--- /dev/null
+++ b/Lang/Fortran/Parse-an-IP-Address
@@ -0,0 +1 @@
+../../Task/Parse-an-IP-Address/Fortran
\ No newline at end of file
diff --git a/Lang/Fortran/Pascals-triangle-Puzzle b/Lang/Fortran/Pascals-triangle-Puzzle
new file mode 120000
index 0000000000..5cea267339
--- /dev/null
+++ b/Lang/Fortran/Pascals-triangle-Puzzle
@@ -0,0 +1 @@
+../../Task/Pascals-triangle-Puzzle/Fortran
\ No newline at end of file
diff --git a/Lang/Fortran/Sum-of-elements-below-main-diagonal-of-matrix b/Lang/Fortran/Sum-of-elements-below-main-diagonal-of-matrix
new file mode 120000
index 0000000000..a739c37e8e
--- /dev/null
+++ b/Lang/Fortran/Sum-of-elements-below-main-diagonal-of-matrix
@@ -0,0 +1 @@
+../../Task/Sum-of-elements-below-main-diagonal-of-matrix/Fortran
\ No newline at end of file
diff --git a/Lang/Fortran/Totient-function b/Lang/Fortran/Totient-function
new file mode 120000
index 0000000000..2559e22f69
--- /dev/null
+++ b/Lang/Fortran/Totient-function
@@ -0,0 +1 @@
+../../Task/Totient-function/Fortran
\ No newline at end of file
diff --git a/Lang/Fortran/Twos-complement b/Lang/Fortran/Twos-complement
new file mode 120000
index 0000000000..b8e6672d37
--- /dev/null
+++ b/Lang/Fortran/Twos-complement
@@ -0,0 +1 @@
+../../Task/Twos-complement/Fortran
\ No newline at end of file
diff --git a/Lang/Free-Pascal-Lazarus/Abstract-type b/Lang/Free-Pascal-Lazarus/Abstract-type
new file mode 120000
index 0000000000..89db3c6334
--- /dev/null
+++ b/Lang/Free-Pascal-Lazarus/Abstract-type
@@ -0,0 +1 @@
+../../Task/Abstract-type/Free-Pascal-Lazarus
\ No newline at end of file
diff --git a/Lang/Free-Pascal-Lazarus/Cistercian-numerals b/Lang/Free-Pascal-Lazarus/Cistercian-numerals
new file mode 120000
index 0000000000..e09b44b1be
--- /dev/null
+++ b/Lang/Free-Pascal-Lazarus/Cistercian-numerals
@@ -0,0 +1 @@
+../../Task/Cistercian-numerals/Free-Pascal-Lazarus
\ No newline at end of file
diff --git a/Lang/Free-Pascal-Lazarus/Pancake-numbers b/Lang/Free-Pascal-Lazarus/Pancake-numbers
new file mode 120000
index 0000000000..e82c81624b
--- /dev/null
+++ b/Lang/Free-Pascal-Lazarus/Pancake-numbers
@@ -0,0 +1 @@
+../../Task/Pancake-numbers/Free-Pascal-Lazarus
\ No newline at end of file
diff --git a/Lang/FreeBASIC/Babylonian-spiral b/Lang/FreeBASIC/Babylonian-spiral
new file mode 120000
index 0000000000..e141e5d456
--- /dev/null
+++ b/Lang/FreeBASIC/Babylonian-spiral
@@ -0,0 +1 @@
+../../Task/Babylonian-spiral/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/Bitcoin-public-point-to-address b/Lang/FreeBASIC/Bitcoin-public-point-to-address
new file mode 120000
index 0000000000..6ff9b61a5b
--- /dev/null
+++ b/Lang/FreeBASIC/Bitcoin-public-point-to-address
@@ -0,0 +1 @@
+../../Task/Bitcoin-public-point-to-address/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/Catmull-Clark-subdivision-surface b/Lang/FreeBASIC/Catmull-Clark-subdivision-surface
new file mode 120000
index 0000000000..aa2f6e5ed9
--- /dev/null
+++ b/Lang/FreeBASIC/Catmull-Clark-subdivision-surface
@@ -0,0 +1 @@
+../../Task/Catmull-Clark-subdivision-surface/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/Color-quantization b/Lang/FreeBASIC/Color-quantization
new file mode 120000
index 0000000000..ddc5eaabb7
--- /dev/null
+++ b/Lang/FreeBASIC/Color-quantization
@@ -0,0 +1 @@
+../../Task/Color-quantization/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/Dominoes b/Lang/FreeBASIC/Dominoes
new file mode 120000
index 0000000000..46d9dcf5f4
--- /dev/null
+++ b/Lang/FreeBASIC/Dominoes
@@ -0,0 +1 @@
+../../Task/Dominoes/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/Find-duplicate-files b/Lang/FreeBASIC/Find-duplicate-files
new file mode 120000
index 0000000000..f2becdf037
--- /dev/null
+++ b/Lang/FreeBASIC/Find-duplicate-files
@@ -0,0 +1 @@
+../../Task/Find-duplicate-files/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/Find-largest-left-truncatable-prime-in-a-given-base b/Lang/FreeBASIC/Find-largest-left-truncatable-prime-in-a-given-base
new file mode 120000
index 0000000000..90493830d8
--- /dev/null
+++ b/Lang/FreeBASIC/Find-largest-left-truncatable-prime-in-a-given-base
@@ -0,0 +1 @@
+../../Task/Find-largest-left-truncatable-prime-in-a-given-base/FreeBASIC
\ No newline at end of file
diff --git a/Lang/FreeBASIC/Transliterate-English-text-using-the-Greek-alphabet b/Lang/FreeBASIC/Transliterate-English-text-using-the-Greek-alphabet
new file mode 120000
index 0000000000..a3142e6912
--- /dev/null
+++ b/Lang/FreeBASIC/Transliterate-English-text-using-the-Greek-alphabet
@@ -0,0 +1 @@
+../../Task/Transliterate-English-text-using-the-Greek-alphabet/FreeBASIC
\ No newline at end of file
diff --git a/Lang/Frink/Disarium-numbers b/Lang/Frink/Disarium-numbers
new file mode 120000
index 0000000000..30da6e89d2
--- /dev/null
+++ b/Lang/Frink/Disarium-numbers
@@ -0,0 +1 @@
+../../Task/Disarium-numbers/Frink
\ No newline at end of file
diff --git a/Lang/Frink/Happy-numbers b/Lang/Frink/Happy-numbers
new file mode 120000
index 0000000000..e83b081fcc
--- /dev/null
+++ b/Lang/Frink/Happy-numbers
@@ -0,0 +1 @@
+../../Task/Happy-numbers/Frink
\ No newline at end of file
diff --git a/Lang/FuncSug/00-LANG.txt b/Lang/FuncSug/00-LANG.txt
new file mode 100644
index 0000000000..9239e3a1ef
--- /dev/null
+++ b/Lang/FuncSug/00-LANG.txt
@@ -0,0 +1 @@
+{{stub}}{{language|FuncSug}}
\ No newline at end of file
diff --git a/Lang/FuncSug/00-META.yaml b/Lang/FuncSug/00-META.yaml
new file mode 100644
index 0000000000..0613d9bea7
--- /dev/null
+++ b/Lang/FuncSug/00-META.yaml
@@ -0,0 +1,2 @@
+---
+from: http://rosettacode.org/wiki/Category:FuncSug
diff --git a/Lang/FuncSug/GUI-component-interaction b/Lang/FuncSug/GUI-component-interaction
new file mode 120000
index 0000000000..744e9aac1b
--- /dev/null
+++ b/Lang/FuncSug/GUI-component-interaction
@@ -0,0 +1 @@
+../../Task/GUI-component-interaction/FuncSug
\ No newline at end of file
diff --git a/Lang/FuncSug/GUI-enabling-disabling-of-controls b/Lang/FuncSug/GUI-enabling-disabling-of-controls
new file mode 120000
index 0000000000..049595483a
--- /dev/null
+++ b/Lang/FuncSug/GUI-enabling-disabling-of-controls
@@ -0,0 +1 @@
+../../Task/GUI-enabling-disabling-of-controls/FuncSug
\ No newline at end of file
diff --git a/Lang/FuncSug/Hello-world-Text b/Lang/FuncSug/Hello-world-Text
new file mode 120000
index 0000000000..f188530df7
--- /dev/null
+++ b/Lang/FuncSug/Hello-world-Text
@@ -0,0 +1 @@
+../../Task/Hello-world-Text/FuncSug
\ No newline at end of file
diff --git a/Lang/FuncSug/Play-recorded-sounds b/Lang/FuncSug/Play-recorded-sounds
new file mode 120000
index 0000000000..9418947577
--- /dev/null
+++ b/Lang/FuncSug/Play-recorded-sounds
@@ -0,0 +1 @@
+../../Task/Play-recorded-sounds/FuncSug
\ No newline at end of file
diff --git a/Lang/FuncSug/Simple-windowed-application b/Lang/FuncSug/Simple-windowed-application
new file mode 120000
index 0000000000..8eec686bff
--- /dev/null
+++ b/Lang/FuncSug/Simple-windowed-application
@@ -0,0 +1 @@
+../../Task/Simple-windowed-application/FuncSug
\ No newline at end of file
diff --git a/Lang/FuncSug/Simulate-input-Mouse b/Lang/FuncSug/Simulate-input-Mouse
new file mode 120000
index 0000000000..186d49bf08
--- /dev/null
+++ b/Lang/FuncSug/Simulate-input-Mouse
@@ -0,0 +1 @@
+../../Task/Simulate-input-Mouse/FuncSug
\ No newline at end of file
diff --git a/Lang/FuncSug/User-input-Graphical b/Lang/FuncSug/User-input-Graphical
new file mode 120000
index 0000000000..b685a2412e
--- /dev/null
+++ b/Lang/FuncSug/User-input-Graphical
@@ -0,0 +1 @@
+../../Task/User-input-Graphical/FuncSug
\ No newline at end of file
diff --git a/Lang/FutureBasic/Arithmetic-Complex b/Lang/FutureBasic/Arithmetic-Complex
new file mode 120000
index 0000000000..eab72eafe1
--- /dev/null
+++ b/Lang/FutureBasic/Arithmetic-Complex
@@ -0,0 +1 @@
+../../Task/Arithmetic-Complex/FutureBasic
\ No newline at end of file
diff --git a/Lang/FutureBasic/Averages-Mean-time-of-day b/Lang/FutureBasic/Averages-Mean-time-of-day
new file mode 120000
index 0000000000..0caef5a9a0
--- /dev/null
+++ b/Lang/FutureBasic/Averages-Mean-time-of-day
@@ -0,0 +1 @@
+../../Task/Averages-Mean-time-of-day/FutureBasic
\ No newline at end of file
diff --git a/Lang/FutureBasic/Boyer-Moore-string-search b/Lang/FutureBasic/Boyer-Moore-string-search
new file mode 120000
index 0000000000..574c899ddd
--- /dev/null
+++ b/Lang/FutureBasic/Boyer-Moore-string-search
@@ -0,0 +1 @@
+../../Task/Boyer-Moore-string-search/FutureBasic
\ No newline at end of file
diff --git a/Lang/FutureBasic/CRC-32 b/Lang/FutureBasic/CRC-32
new file mode 120000
index 0000000000..8330772d04
--- /dev/null
+++ b/Lang/FutureBasic/CRC-32
@@ -0,0 +1 @@
+../../Task/CRC-32/FutureBasic
\ No newline at end of file
diff --git a/Lang/FutureBasic/Carmichael-3-strong-pseudoprimes b/Lang/FutureBasic/Carmichael-3-strong-pseudoprimes
new file mode 120000
index 0000000000..17664f9781
--- /dev/null
+++ b/Lang/FutureBasic/Carmichael-3-strong-pseudoprimes
@@ -0,0 +1 @@
+../../Task/Carmichael-3-strong-pseudoprimes/FutureBasic
\ No newline at end of file
diff --git a/Lang/FutureBasic/Deal-cards-for-FreeCell b/Lang/FutureBasic/Deal-cards-for-FreeCell
new file mode 120000
index 0000000000..b84bfb771c
--- /dev/null
+++ b/Lang/FutureBasic/Deal-cards-for-FreeCell
@@ -0,0 +1 @@
+../../Task/Deal-cards-for-FreeCell/FutureBasic
\ No newline at end of file
diff --git a/Lang/FutureBasic/Demings-funnel b/Lang/FutureBasic/Demings-funnel
new file mode 120000
index 0000000000..a0b916f84d
--- /dev/null
+++ b/Lang/FutureBasic/Demings-funnel
@@ -0,0 +1 @@
+../../Task/Demings-funnel/FutureBasic
\ No newline at end of file
diff --git a/Lang/FutureBasic/Euler-method b/Lang/FutureBasic/Euler-method
new file mode 120000
index 0000000000..89a7e85a03
--- /dev/null
+++ b/Lang/FutureBasic/Euler-method
@@ -0,0 +1 @@
+../../Task/Euler-method/FutureBasic
\ No newline at end of file
diff --git a/Lang/FutureBasic/Find-limit-of-recursion b/Lang/FutureBasic/Find-limit-of-recursion
new file mode 120000
index 0000000000..cbc1e3a568
--- /dev/null
+++ b/Lang/FutureBasic/Find-limit-of-recursion
@@ -0,0 +1 @@
+../../Task/Find-limit-of-recursion/FutureBasic
\ No newline at end of file
diff --git a/Lang/FutureBasic/Five-weekends b/Lang/FutureBasic/Five-weekends
new file mode 120000
index 0000000000..d11a92b953
--- /dev/null
+++ b/Lang/FutureBasic/Five-weekends
@@ -0,0 +1 @@
+../../Task/Five-weekends/FutureBasic
\ No newline at end of file
diff --git a/Lang/FutureBasic/Gamma-function b/Lang/FutureBasic/Gamma-function
new file mode 120000
index 0000000000..fbf1cf8878
--- /dev/null
+++ b/Lang/FutureBasic/Gamma-function
@@ -0,0 +1 @@
+../../Task/Gamma-function/FutureBasic
\ No newline at end of file
diff --git a/Lang/FutureBasic/Gaussian-elimination b/Lang/FutureBasic/Gaussian-elimination
new file mode 120000
index 0000000000..f8adccdee8
--- /dev/null
+++ b/Lang/FutureBasic/Gaussian-elimination
@@ -0,0 +1 @@
+../../Task/Gaussian-elimination/FutureBasic
\ No newline at end of file
diff --git a/Lang/FutureBasic/Guess-the-number-With-feedback-player- b/Lang/FutureBasic/Guess-the-number-With-feedback-player-
new file mode 120000
index 0000000000..0ee5d26b61
--- /dev/null
+++ b/Lang/FutureBasic/Guess-the-number-With-feedback-player-
@@ -0,0 +1 @@
+../../Task/Guess-the-number-With-feedback-player-/FutureBasic
\ No newline at end of file
diff --git a/Lang/FutureBasic/Hamming-numbers b/Lang/FutureBasic/Hamming-numbers
new file mode 120000
index 0000000000..69b0f1ea7d
--- /dev/null
+++ b/Lang/FutureBasic/Hamming-numbers
@@ -0,0 +1 @@
+../../Task/Hamming-numbers/FutureBasic
\ No newline at end of file
diff --git a/Lang/FutureBasic/Last-letter-first-letter b/Lang/FutureBasic/Last-letter-first-letter
new file mode 120000
index 0000000000..82ed39c3f0
--- /dev/null
+++ b/Lang/FutureBasic/Last-letter-first-letter
@@ -0,0 +1 @@
+../../Task/Last-letter-first-letter/FutureBasic
\ No newline at end of file
diff --git a/Lang/FutureBasic/Mayan-numerals b/Lang/FutureBasic/Mayan-numerals
new file mode 120000
index 0000000000..cbc6204e00
--- /dev/null
+++ b/Lang/FutureBasic/Mayan-numerals
@@ -0,0 +1 @@
+../../Task/Mayan-numerals/FutureBasic
\ No newline at end of file
diff --git a/Lang/FutureBasic/Modular-inverse b/Lang/FutureBasic/Modular-inverse
new file mode 120000
index 0000000000..89556b3bbe
--- /dev/null
+++ b/Lang/FutureBasic/Modular-inverse
@@ -0,0 +1 @@
+../../Task/Modular-inverse/FutureBasic
\ No newline at end of file
diff --git a/Lang/FutureBasic/Monte-Carlo-methods b/Lang/FutureBasic/Monte-Carlo-methods
new file mode 120000
index 0000000000..729102269f
--- /dev/null
+++ b/Lang/FutureBasic/Monte-Carlo-methods
@@ -0,0 +1 @@
+../../Task/Monte-Carlo-methods/FutureBasic
\ No newline at end of file
diff --git a/Lang/FutureBasic/Mutex b/Lang/FutureBasic/Mutex
new file mode 120000
index 0000000000..027130dc63
--- /dev/null
+++ b/Lang/FutureBasic/Mutex
@@ -0,0 +1 @@
+../../Task/Mutex/FutureBasic
\ No newline at end of file
diff --git a/Lang/FutureBasic/Named-parameters b/Lang/FutureBasic/Named-parameters
new file mode 120000
index 0000000000..77a79a818c
--- /dev/null
+++ b/Lang/FutureBasic/Named-parameters
@@ -0,0 +1 @@
+../../Task/Named-parameters/FutureBasic
\ No newline at end of file
diff --git a/Lang/FutureBasic/Perfect-shuffle b/Lang/FutureBasic/Perfect-shuffle
new file mode 120000
index 0000000000..6d2e5e3668
--- /dev/null
+++ b/Lang/FutureBasic/Perfect-shuffle
@@ -0,0 +1 @@
+../../Task/Perfect-shuffle/FutureBasic
\ No newline at end of file
diff --git a/Lang/FutureBasic/Sierpinski-pentagon b/Lang/FutureBasic/Sierpinski-pentagon
new file mode 120000
index 0000000000..1e105b6fb4
--- /dev/null
+++ b/Lang/FutureBasic/Sierpinski-pentagon
@@ -0,0 +1 @@
+../../Task/Sierpinski-pentagon/FutureBasic
\ No newline at end of file
diff --git a/Lang/FutureBasic/Sleep b/Lang/FutureBasic/Sleep
new file mode 120000
index 0000000000..8ce099ff7d
--- /dev/null
+++ b/Lang/FutureBasic/Sleep
@@ -0,0 +1 @@
+../../Task/Sleep/FutureBasic
\ No newline at end of file
diff --git a/Lang/FutureBasic/Sorting-algorithms-Insertion-sort b/Lang/FutureBasic/Sorting-algorithms-Insertion-sort
new file mode 120000
index 0000000000..d1f91f0286
--- /dev/null
+++ b/Lang/FutureBasic/Sorting-algorithms-Insertion-sort
@@ -0,0 +1 @@
+../../Task/Sorting-algorithms-Insertion-sort/FutureBasic
\ No newline at end of file
diff --git a/Lang/FutureBasic/Sorting-algorithms-Sleep-sort b/Lang/FutureBasic/Sorting-algorithms-Sleep-sort
new file mode 120000
index 0000000000..b94b39a51d
--- /dev/null
+++ b/Lang/FutureBasic/Sorting-algorithms-Sleep-sort
@@ -0,0 +1 @@
+../../Task/Sorting-algorithms-Sleep-sort/FutureBasic
\ No newline at end of file
diff --git a/Lang/FutureBasic/Stack-traces b/Lang/FutureBasic/Stack-traces
new file mode 120000
index 0000000000..589e50b2fa
--- /dev/null
+++ b/Lang/FutureBasic/Stack-traces
@@ -0,0 +1 @@
+../../Task/Stack-traces/FutureBasic
\ No newline at end of file
diff --git a/Lang/FutureBasic/String-length b/Lang/FutureBasic/String-length
new file mode 120000
index 0000000000..6df040b0bc
--- /dev/null
+++ b/Lang/FutureBasic/String-length
@@ -0,0 +1 @@
+../../Task/String-length/FutureBasic
\ No newline at end of file
diff --git a/Lang/FutureBasic/Sum-of-a-series b/Lang/FutureBasic/Sum-of-a-series
new file mode 120000
index 0000000000..44687bc461
--- /dev/null
+++ b/Lang/FutureBasic/Sum-of-a-series
@@ -0,0 +1 @@
+../../Task/Sum-of-a-series/FutureBasic
\ No newline at end of file
diff --git a/Lang/FutureBasic/Sum-to-100 b/Lang/FutureBasic/Sum-to-100
new file mode 120000
index 0000000000..5cdb7cf4a8
--- /dev/null
+++ b/Lang/FutureBasic/Sum-to-100
@@ -0,0 +1 @@
+../../Task/Sum-to-100/FutureBasic
\ No newline at end of file
diff --git a/Lang/FutureBasic/Tau-function b/Lang/FutureBasic/Tau-function
new file mode 120000
index 0000000000..4d9cc08c3d
--- /dev/null
+++ b/Lang/FutureBasic/Tau-function
@@ -0,0 +1 @@
+../../Task/Tau-function/FutureBasic
\ No newline at end of file
diff --git a/Lang/FutureBasic/Tau-number b/Lang/FutureBasic/Tau-number
new file mode 120000
index 0000000000..363cfbc636
--- /dev/null
+++ b/Lang/FutureBasic/Tau-number
@@ -0,0 +1 @@
+../../Task/Tau-number/FutureBasic
\ No newline at end of file
diff --git a/Lang/FutureBasic/Word-wrap b/Lang/FutureBasic/Word-wrap
new file mode 120000
index 0000000000..d1cd565464
--- /dev/null
+++ b/Lang/FutureBasic/Word-wrap
@@ -0,0 +1 @@
+../../Task/Word-wrap/FutureBasic
\ No newline at end of file
diff --git a/Lang/FutureBasic/Yellowstone-sequence b/Lang/FutureBasic/Yellowstone-sequence
new file mode 120000
index 0000000000..8a816499f6
--- /dev/null
+++ b/Lang/FutureBasic/Yellowstone-sequence
@@ -0,0 +1 @@
+../../Task/Yellowstone-sequence/FutureBasic
\ No newline at end of file
diff --git a/Lang/FutureBasic/Zebra-puzzle b/Lang/FutureBasic/Zebra-puzzle
new file mode 120000
index 0000000000..68d36dbfcd
--- /dev/null
+++ b/Lang/FutureBasic/Zebra-puzzle
@@ -0,0 +1 @@
+../../Task/Zebra-puzzle/FutureBasic
\ No newline at end of file
diff --git a/Lang/GW-BASIC/Old-Russian-measure-of-length b/Lang/GW-BASIC/Old-Russian-measure-of-length
new file mode 120000
index 0000000000..6121a6a7b1
--- /dev/null
+++ b/Lang/GW-BASIC/Old-Russian-measure-of-length
@@ -0,0 +1 @@
+../../Task/Old-Russian-measure-of-length/GW-BASIC
\ No newline at end of file
diff --git a/Lang/Go/Distance-and-Bearing b/Lang/Go/Distance-and-Bearing
new file mode 120000
index 0000000000..566b8d5b53
--- /dev/null
+++ b/Lang/Go/Distance-and-Bearing
@@ -0,0 +1 @@
+../../Task/Distance-and-Bearing/Go
\ No newline at end of file
diff --git a/Lang/Goboscript/00-LANG.txt b/Lang/Goboscript/00-LANG.txt
new file mode 100644
index 0000000000..4cafdccd97
--- /dev/null
+++ b/Lang/Goboscript/00-LANG.txt
@@ -0,0 +1 @@
+{{stub}}{{language|goboscript}}
\ No newline at end of file
diff --git a/Lang/Goboscript/00-META.yaml b/Lang/Goboscript/00-META.yaml
new file mode 100644
index 0000000000..48464a36ad
--- /dev/null
+++ b/Lang/Goboscript/00-META.yaml
@@ -0,0 +1,2 @@
+---
+from: http://rosettacode.org/wiki/Category:Goboscript
diff --git a/Lang/Haskell/00-LANG.txt b/Lang/Haskell/00-LANG.txt
index fe49ebce44..9b79cdd879 100644
--- a/Lang/Haskell/00-LANG.txt
+++ b/Lang/Haskell/00-LANG.txt
@@ -20,5 +20,5 @@ Linspire GNU/[[Linux]] chose Haskell for system tools development.
==Citations==
* [[wp:Haskell_%28programming_language%29|Wikipedia:Haskell (programming language)]]
-==Todo==
-[[Reports:Tasks_not_implemented_in_Haskell]]
\ No newline at end of file
+==Unimplemented Tasks==
+* [[Tasks_not_implemented_in_Haskell|Haskell Unimplemented]]
\ No newline at end of file
diff --git a/Lang/Haxe/Abstract-type b/Lang/Haxe/Abstract-type
new file mode 120000
index 0000000000..6ff9aba1f6
--- /dev/null
+++ b/Lang/Haxe/Abstract-type
@@ -0,0 +1 @@
+../../Task/Abstract-type/Haxe
\ No newline at end of file
diff --git a/Lang/Haxe/Apply-a-callback-to-an-array b/Lang/Haxe/Apply-a-callback-to-an-array
new file mode 120000
index 0000000000..6fdb21da75
--- /dev/null
+++ b/Lang/Haxe/Apply-a-callback-to-an-array
@@ -0,0 +1 @@
+../../Task/Apply-a-callback-to-an-array/Haxe
\ No newline at end of file
diff --git a/Lang/Haxe/Arrays b/Lang/Haxe/Arrays
new file mode 120000
index 0000000000..bd303e4884
--- /dev/null
+++ b/Lang/Haxe/Arrays
@@ -0,0 +1 @@
+../../Task/Arrays/Haxe
\ No newline at end of file
diff --git a/Lang/Haxe/Associative-array-Creation b/Lang/Haxe/Associative-array-Creation
new file mode 120000
index 0000000000..38347f6de6
--- /dev/null
+++ b/Lang/Haxe/Associative-array-Creation
@@ -0,0 +1 @@
+../../Task/Associative-array-Creation/Haxe
\ No newline at end of file
diff --git a/Lang/Haxe/Associative-array-Iteration b/Lang/Haxe/Associative-array-Iteration
new file mode 120000
index 0000000000..aa7c7951b8
--- /dev/null
+++ b/Lang/Haxe/Associative-array-Iteration
@@ -0,0 +1 @@
+../../Task/Associative-array-Iteration/Haxe
\ No newline at end of file
diff --git a/Lang/Haxe/Binary-digits b/Lang/Haxe/Binary-digits
new file mode 120000
index 0000000000..9bf8952c0d
--- /dev/null
+++ b/Lang/Haxe/Binary-digits
@@ -0,0 +1 @@
+../../Task/Binary-digits/Haxe
\ No newline at end of file
diff --git a/Lang/Haxe/Boolean-values b/Lang/Haxe/Boolean-values
new file mode 120000
index 0000000000..b5ef0e7d8b
--- /dev/null
+++ b/Lang/Haxe/Boolean-values
@@ -0,0 +1 @@
+../../Task/Boolean-values/Haxe
\ No newline at end of file
diff --git a/Lang/Haxe/Call-an-object-method b/Lang/Haxe/Call-an-object-method
new file mode 120000
index 0000000000..953d02b76c
--- /dev/null
+++ b/Lang/Haxe/Call-an-object-method
@@ -0,0 +1 @@
+../../Task/Call-an-object-method/Haxe
\ No newline at end of file
diff --git a/Lang/Haxe/Character-codes b/Lang/Haxe/Character-codes
new file mode 120000
index 0000000000..92ab060a1a
--- /dev/null
+++ b/Lang/Haxe/Character-codes
@@ -0,0 +1 @@
+../../Task/Character-codes/Haxe
\ No newline at end of file
diff --git a/Lang/Haxe/Classes b/Lang/Haxe/Classes
new file mode 120000
index 0000000000..5c922938d4
--- /dev/null
+++ b/Lang/Haxe/Classes
@@ -0,0 +1 @@
+../../Task/Classes/Haxe
\ No newline at end of file
diff --git a/Lang/Icon/00-LANG.txt b/Lang/Icon/00-LANG.txt
index 6d6b15bfc2..16054a3927 100644
--- a/Lang/Icon/00-LANG.txt
+++ b/Lang/Icon/00-LANG.txt
@@ -39,5 +39,7 @@ Several extensions of Icon were developed to improve functionality. Many of the
* [[Icon%2BUnicon/Intro|An introduction to Icon and Unicon for Rosetta Code]]
* [[:Category:Icon/Omit|Unimplementable tasks]]
* [[:Category:Icon_examples_needing_attention|Tasks requiring attention]]
-* [[Reports:Tasks_not_implemented_in_Icon|Tasks not yet implemented]]
-* [[:Category:Icon_Programming_Library|The Icon Programming Library]]
\ No newline at end of file
+* [[:Category:Icon_Programming_Library|The Icon Programming Library]]
+
+==Todo==
+* [[Tasks not implemented in Icon]]
\ No newline at end of file
diff --git a/Lang/Icon/Exponentiation-order b/Lang/Icon/Exponentiation-order
new file mode 120000
index 0000000000..c87e5174b5
--- /dev/null
+++ b/Lang/Icon/Exponentiation-order
@@ -0,0 +1 @@
+../../Task/Exponentiation-order/Icon
\ No newline at end of file
diff --git a/Lang/Icon/Jewels-and-stones b/Lang/Icon/Jewels-and-stones
new file mode 120000
index 0000000000..5dee8d7cee
--- /dev/null
+++ b/Lang/Icon/Jewels-and-stones
@@ -0,0 +1 @@
+../../Task/Jewels-and-stones/Icon
\ No newline at end of file
diff --git a/Lang/Icon/Loops-Wrong-ranges b/Lang/Icon/Loops-Wrong-ranges
new file mode 120000
index 0000000000..0317af2079
--- /dev/null
+++ b/Lang/Icon/Loops-Wrong-ranges
@@ -0,0 +1 @@
+../../Task/Loops-Wrong-ranges/Icon
\ No newline at end of file
diff --git a/Lang/Icon/Search-a-list-of-records b/Lang/Icon/Search-a-list-of-records
new file mode 120000
index 0000000000..b796eca599
--- /dev/null
+++ b/Lang/Icon/Search-a-list-of-records
@@ -0,0 +1 @@
+../../Task/Search-a-list-of-records/Icon
\ No newline at end of file
diff --git a/Lang/Icon/Sort-numbers-lexicographically b/Lang/Icon/Sort-numbers-lexicographically
new file mode 120000
index 0000000000..7c99f7d928
--- /dev/null
+++ b/Lang/Icon/Sort-numbers-lexicographically
@@ -0,0 +1 @@
+../../Task/Sort-numbers-lexicographically/Icon
\ No newline at end of file
diff --git a/Lang/Icon/Tokenize-a-string-with-escaping b/Lang/Icon/Tokenize-a-string-with-escaping
new file mode 120000
index 0000000000..6a5856de9c
--- /dev/null
+++ b/Lang/Icon/Tokenize-a-string-with-escaping
@@ -0,0 +1 @@
+../../Task/Tokenize-a-string-with-escaping/Icon
\ No newline at end of file
diff --git a/Lang/Icon/Tree-from-nesting-levels b/Lang/Icon/Tree-from-nesting-levels
new file mode 120000
index 0000000000..670d6ecf62
--- /dev/null
+++ b/Lang/Icon/Tree-from-nesting-levels
@@ -0,0 +1 @@
+../../Task/Tree-from-nesting-levels/Icon
\ No newline at end of file
diff --git a/Lang/Idris/Comments b/Lang/Idris/Comments
new file mode 120000
index 0000000000..ffaead275c
--- /dev/null
+++ b/Lang/Idris/Comments
@@ -0,0 +1 @@
+../../Task/Comments/Idris
\ No newline at end of file
diff --git a/Lang/Insitux/00-LANG.txt b/Lang/Insitux/00-LANG.txt
index ffe7dc9e9e..b852a0706e 100644
--- a/Lang/Insitux/00-LANG.txt
+++ b/Lang/Insitux/00-LANG.txt
@@ -3,10 +3,8 @@
|hopl=no
|tags=insitux}}
-Insitux (pronounced /ɪnˈsɪtjuːɪks/) is a dynamically-typed functional scripting language inspired by Clojure, originally commissioned in July 2021 for safe and extensible in-game scripting in a popular Roblox game. It has retained compatibility with Roblox by using two sets of "poly-fills" between [https://roblox-ts.com/ roblox-ts] and Node.js / web, meaning it can target Roblox, Node.js, and web with two slightly varying codebases.
+Insitux (pronounced /ɪnˈsɪtjuːɪks/) is a dynamically-typed functional scripting language inspired by Clojure, originally commissioned in July 2021 for safe and extensible in-game scripting in a popular Roblox game. It now targets Node.js/Bun and client-side web.
-Despite its origins it is a capable language, with development focusing on the language itself, its Node.js ecosystem, and to a lesser extent its web ecosystem. This primarily involves adding to the already 200+ built-in operations, which tend to cause existing Insitux programs to shrink in size over time.
-
-Insitux currently does not have a performance focus, and due to its syntactic flexibility, and its engine being transpiled into both JavaScript and [https://luau-lang.org/ Luau], it is difficult to optimise. Eventually Roblox support will be dropped / forked, pivoting mainline Insitux into AOT and JIT JavaScript transpilation.
+Despite its origins it is a capable language, with development focusing on the language itself, its Node.js ecosystem, and to a lesser extent its web ecosystem. This primarily involves adding to the already 200+ built-in operations, which tend to cause existing Insitux programs to shrink in size over time; and improving language performance since dropping Roblox compatibility in 2024.
{{language programming paradigm|functional}}
\ No newline at end of file
diff --git a/Lang/Janet/Comments b/Lang/Janet/Comments
new file mode 120000
index 0000000000..b5297d4f4d
--- /dev/null
+++ b/Lang/Janet/Comments
@@ -0,0 +1 @@
+../../Task/Comments/Janet
\ No newline at end of file
diff --git a/Lang/JavaScript/Aliquot-sequence-classifications b/Lang/JavaScript/Aliquot-sequence-classifications
new file mode 120000
index 0000000000..5043f9bf29
--- /dev/null
+++ b/Lang/JavaScript/Aliquot-sequence-classifications
@@ -0,0 +1 @@
+../../Task/Aliquot-sequence-classifications/JavaScript
\ No newline at end of file
diff --git a/Lang/JavaScript/B-zier-curves-Intersections b/Lang/JavaScript/B-zier-curves-Intersections
new file mode 120000
index 0000000000..e14b622f07
--- /dev/null
+++ b/Lang/JavaScript/B-zier-curves-Intersections
@@ -0,0 +1 @@
+../../Task/B-zier-curves-Intersections/JavaScript
\ No newline at end of file
diff --git a/Lang/JavaScript/Balanced-ternary b/Lang/JavaScript/Balanced-ternary
new file mode 120000
index 0000000000..c71298b653
--- /dev/null
+++ b/Lang/JavaScript/Balanced-ternary
@@ -0,0 +1 @@
+../../Task/Balanced-ternary/JavaScript
\ No newline at end of file
diff --git a/Lang/JavaScript/Bitcoin-public-point-to-address b/Lang/JavaScript/Bitcoin-public-point-to-address
new file mode 120000
index 0000000000..c3f037151b
--- /dev/null
+++ b/Lang/JavaScript/Bitcoin-public-point-to-address
@@ -0,0 +1 @@
+../../Task/Bitcoin-public-point-to-address/JavaScript
\ No newline at end of file
diff --git a/Lang/JavaScript/Break-OO-privacy b/Lang/JavaScript/Break-OO-privacy
new file mode 120000
index 0000000000..085d7969ff
--- /dev/null
+++ b/Lang/JavaScript/Break-OO-privacy
@@ -0,0 +1 @@
+../../Task/Break-OO-privacy/JavaScript
\ No newline at end of file
diff --git a/Lang/JavaScript/Catmull-Clark-subdivision-surface b/Lang/JavaScript/Catmull-Clark-subdivision-surface
new file mode 120000
index 0000000000..40bf4ef0fc
--- /dev/null
+++ b/Lang/JavaScript/Catmull-Clark-subdivision-surface
@@ -0,0 +1 @@
+../../Task/Catmull-Clark-subdivision-surface/JavaScript
\ No newline at end of file
diff --git a/Lang/JavaScript/Checkpoint-synchronization b/Lang/JavaScript/Checkpoint-synchronization
new file mode 120000
index 0000000000..cf18aef6aa
--- /dev/null
+++ b/Lang/JavaScript/Checkpoint-synchronization
@@ -0,0 +1 @@
+../../Task/Checkpoint-synchronization/JavaScript
\ No newline at end of file
diff --git a/Lang/JavaScript/Continued-fraction b/Lang/JavaScript/Continued-fraction
new file mode 120000
index 0000000000..73bc586c57
--- /dev/null
+++ b/Lang/JavaScript/Continued-fraction
@@ -0,0 +1 @@
+../../Task/Continued-fraction/JavaScript
\ No newline at end of file
diff --git a/Lang/JavaScript/Continued-fraction-Arithmetic-G-matrix-ng-continued-fraction-n- b/Lang/JavaScript/Continued-fraction-Arithmetic-G-matrix-ng-continued-fraction-n-
new file mode 120000
index 0000000000..95862446c9
--- /dev/null
+++ b/Lang/JavaScript/Continued-fraction-Arithmetic-G-matrix-ng-continued-fraction-n-
@@ -0,0 +1 @@
+../../Task/Continued-fraction-Arithmetic-G-matrix-ng-continued-fraction-n-/JavaScript
\ No newline at end of file
diff --git a/Lang/JavaScript/Deconvolution-1D b/Lang/JavaScript/Deconvolution-1D
new file mode 120000
index 0000000000..719c208ec2
--- /dev/null
+++ b/Lang/JavaScript/Deconvolution-1D
@@ -0,0 +1 @@
+../../Task/Deconvolution-1D/JavaScript
\ No newline at end of file
diff --git a/Lang/JavaScript/Deconvolution-2D+ b/Lang/JavaScript/Deconvolution-2D+
new file mode 120000
index 0000000000..61f93d9cd6
--- /dev/null
+++ b/Lang/JavaScript/Deconvolution-2D+
@@ -0,0 +1 @@
+../../Task/Deconvolution-2D+/JavaScript
\ No newline at end of file
diff --git a/Lang/JavaScript/MD5 b/Lang/JavaScript/MD5
new file mode 120000
index 0000000000..764b1e5dd2
--- /dev/null
+++ b/Lang/JavaScript/MD5
@@ -0,0 +1 @@
+../../Task/MD5/JavaScript
\ No newline at end of file
diff --git a/Lang/JavaScript/Meissel-Mertens-constant b/Lang/JavaScript/Meissel-Mertens-constant
new file mode 120000
index 0000000000..8dd5c0b197
--- /dev/null
+++ b/Lang/JavaScript/Meissel-Mertens-constant
@@ -0,0 +1 @@
+../../Task/Meissel-Mertens-constant/JavaScript
\ No newline at end of file
diff --git a/Lang/JavaScript/Parse-an-IP-Address b/Lang/JavaScript/Parse-an-IP-Address
new file mode 120000
index 0000000000..5981d2ba9f
--- /dev/null
+++ b/Lang/JavaScript/Parse-an-IP-Address
@@ -0,0 +1 @@
+../../Task/Parse-an-IP-Address/JavaScript
\ No newline at end of file
diff --git a/Lang/JavaScript/Pascals-triangle-Puzzle b/Lang/JavaScript/Pascals-triangle-Puzzle
new file mode 120000
index 0000000000..2acf8cdb4d
--- /dev/null
+++ b/Lang/JavaScript/Pascals-triangle-Puzzle
@@ -0,0 +1 @@
+../../Task/Pascals-triangle-Puzzle/JavaScript
\ No newline at end of file
diff --git a/Lang/JavaScript/Sokoban b/Lang/JavaScript/Sokoban
new file mode 120000
index 0000000000..3ab86467bd
--- /dev/null
+++ b/Lang/JavaScript/Sokoban
@@ -0,0 +1 @@
+../../Task/Sokoban/JavaScript
\ No newline at end of file
diff --git a/Lang/JavaScript/Solve-a-Hopido-puzzle b/Lang/JavaScript/Solve-a-Hopido-puzzle
new file mode 120000
index 0000000000..aea3983b76
--- /dev/null
+++ b/Lang/JavaScript/Solve-a-Hopido-puzzle
@@ -0,0 +1 @@
+../../Task/Solve-a-Hopido-puzzle/JavaScript
\ No newline at end of file
diff --git a/Lang/JavaScript/Superpermutation-minimisation b/Lang/JavaScript/Superpermutation-minimisation
new file mode 120000
index 0000000000..a257c8e7e7
--- /dev/null
+++ b/Lang/JavaScript/Superpermutation-minimisation
@@ -0,0 +1 @@
+../../Task/Superpermutation-minimisation/JavaScript
\ No newline at end of file
diff --git a/Lang/JavaScript/Tarjan b/Lang/JavaScript/Tarjan
new file mode 120000
index 0000000000..c299c7aebb
--- /dev/null
+++ b/Lang/JavaScript/Tarjan
@@ -0,0 +1 @@
+../../Task/Tarjan/JavaScript
\ No newline at end of file
diff --git a/Lang/Julia/OLE-automation b/Lang/Julia/OLE-automation
new file mode 120000
index 0000000000..58b1722653
--- /dev/null
+++ b/Lang/Julia/OLE-automation
@@ -0,0 +1 @@
+../../Task/OLE-automation/Julia
\ No newline at end of file
diff --git a/Lang/Julia/Simulate-input-Keyboard b/Lang/Julia/Simulate-input-Keyboard
new file mode 120000
index 0000000000..79cc3689e4
--- /dev/null
+++ b/Lang/Julia/Simulate-input-Keyboard
@@ -0,0 +1 @@
+../../Task/Simulate-input-Keyboard/Julia
\ No newline at end of file
diff --git a/Lang/Julia/Use-another-language-to-call-a-function b/Lang/Julia/Use-another-language-to-call-a-function
new file mode 120000
index 0000000000..c21a8c88ad
--- /dev/null
+++ b/Lang/Julia/Use-another-language-to-call-a-function
@@ -0,0 +1 @@
+../../Task/Use-another-language-to-call-a-function/Julia
\ No newline at end of file
diff --git a/Lang/Kantalo/00-LANG.txt b/Lang/Kantalo/00-LANG.txt
new file mode 100644
index 0000000000..453580c58d
--- /dev/null
+++ b/Lang/Kantalo/00-LANG.txt
@@ -0,0 +1,40 @@
+{{language|Kantalo
+|version=0.0.2
+|exec=interpreted
+|strength=weak
+|express=explicit
+|checking=dynamic
+|gc=yes
+|tags=Kantalo,Language
+|LCT=yes
+|hopl=no
+|safety=unsafe
+|site=http://kantalo.kesug.com/}}
+
+=={{header|Kantalo}}==
+
+Kantalo is a non-object-oriented programming language, with the aim of making it easier to use.
+
+==Main commands==
+
+Here are some kantalo commands:
+
+
var.save - It is used to define variable.
+
var.import - Import variable outside functions.
+
var.edit - Edit an Existing Variable.
+
terminal.text - Returns a message passed within the argument.
+
terminal.input - Creates a text input.
+
if- Used to create conditions .
+
func - It is used to create functions.
+
execute - Performs functions.
+
+
+Simple Hello world with kantalo:
+
+
+var.save nome = "Alice",
+func saudacao > (
+ terminal.text("Seja bem-vindo(a), -*nome*-!")
+)
+execute saudacao
+
\ No newline at end of file
diff --git a/Lang/Kantalo/00-META.yaml b/Lang/Kantalo/00-META.yaml
new file mode 100644
index 0000000000..c7d465ac08
--- /dev/null
+++ b/Lang/Kantalo/00-META.yaml
@@ -0,0 +1,2 @@
+---
+from: http://rosettacode.org/wiki/Category:Kantalo
diff --git a/Lang/Koka/00-LANG.txt b/Lang/Koka/00-LANG.txt
index 96ea39de13..540a8fe180 100644
--- a/Lang/Koka/00-LANG.txt
+++ b/Lang/Koka/00-LANG.txt
@@ -3,7 +3,7 @@
Releases:
- https://github.com/koka-lang/koka/releases
-Latest: v2.4.2
+Latest: v3.1.3
'''Language Reference'''
diff --git a/Lang/Koka/A+B b/Lang/Koka/A+B
new file mode 120000
index 0000000000..5fcfbb2462
--- /dev/null
+++ b/Lang/Koka/A+B
@@ -0,0 +1 @@
+../../Task/A+B/Koka
\ No newline at end of file
diff --git a/Lang/Koka/Extend-your-language b/Lang/Koka/Extend-your-language
new file mode 120000
index 0000000000..fa9d061610
--- /dev/null
+++ b/Lang/Koka/Extend-your-language
@@ -0,0 +1 @@
+../../Task/Extend-your-language/Koka
\ No newline at end of file
diff --git a/Lang/Koka/Jump-anywhere b/Lang/Koka/Jump-anywhere
new file mode 120000
index 0000000000..39d5f8124d
--- /dev/null
+++ b/Lang/Koka/Jump-anywhere
@@ -0,0 +1 @@
+../../Task/Jump-anywhere/Koka
\ No newline at end of file
diff --git a/Lang/Koka/Letter-frequency b/Lang/Koka/Letter-frequency
new file mode 120000
index 0000000000..35e2486b2e
--- /dev/null
+++ b/Lang/Koka/Letter-frequency
@@ -0,0 +1 @@
+../../Task/Letter-frequency/Koka
\ No newline at end of file
diff --git a/Lang/Koka/Loops-Break b/Lang/Koka/Loops-Break
new file mode 120000
index 0000000000..21d8774db0
--- /dev/null
+++ b/Lang/Koka/Loops-Break
@@ -0,0 +1 @@
+../../Task/Loops-Break/Koka
\ No newline at end of file
diff --git a/Lang/Koka/Monads-Writer-monad b/Lang/Koka/Monads-Writer-monad
new file mode 120000
index 0000000000..21e3e4c596
--- /dev/null
+++ b/Lang/Koka/Monads-Writer-monad
@@ -0,0 +1 @@
+../../Task/Monads-Writer-monad/Koka
\ No newline at end of file
diff --git a/Lang/Kotlin/Boyer-Moore-string-search b/Lang/Kotlin/Boyer-Moore-string-search
new file mode 120000
index 0000000000..985c6560bd
--- /dev/null
+++ b/Lang/Kotlin/Boyer-Moore-string-search
@@ -0,0 +1 @@
+../../Task/Boyer-Moore-string-search/Kotlin
\ No newline at end of file
diff --git a/Lang/Labyrinth/00-LANG.txt b/Lang/Labyrinth/00-LANG.txt
new file mode 100644
index 0000000000..6b7624f3ac
--- /dev/null
+++ b/Lang/Labyrinth/00-LANG.txt
@@ -0,0 +1 @@
+{{stub}}{{language|site=https://github.com/m-ender/labyrinth}}
\ No newline at end of file
diff --git a/Lang/Labyrinth/00-META.yaml b/Lang/Labyrinth/00-META.yaml
new file mode 100644
index 0000000000..2e09fd26db
--- /dev/null
+++ b/Lang/Labyrinth/00-META.yaml
@@ -0,0 +1,2 @@
+---
+from: http://rosettacode.org/wiki/Category:Labyrinth
diff --git a/Lang/Liberty-BASIC/Hunt-the-Wumpus b/Lang/Liberty-BASIC/Hunt-the-Wumpus
new file mode 120000
index 0000000000..4e2d0e150d
--- /dev/null
+++ b/Lang/Liberty-BASIC/Hunt-the-Wumpus
@@ -0,0 +1 @@
+../../Task/Hunt-the-Wumpus/Liberty-BASIC
\ No newline at end of file
diff --git a/Lang/Liberty-BASIC/Minesweeper-game b/Lang/Liberty-BASIC/Minesweeper-game
new file mode 120000
index 0000000000..19abfc9a07
--- /dev/null
+++ b/Lang/Liberty-BASIC/Minesweeper-game
@@ -0,0 +1 @@
+../../Task/Minesweeper-game/Liberty-BASIC
\ No newline at end of file
diff --git a/Lang/Liberty-BASIC/Snake b/Lang/Liberty-BASIC/Snake
new file mode 120000
index 0000000000..20a60d8427
--- /dev/null
+++ b/Lang/Liberty-BASIC/Snake
@@ -0,0 +1 @@
+../../Task/Snake/Liberty-BASIC
\ No newline at end of file
diff --git a/Lang/Logo/Sparkline-in-unicode b/Lang/Logo/Sparkline-in-unicode
new file mode 120000
index 0000000000..d2b466f59a
--- /dev/null
+++ b/Lang/Logo/Sparkline-in-unicode
@@ -0,0 +1 @@
+../../Task/Sparkline-in-unicode/Logo
\ No newline at end of file
diff --git a/Lang/Lua/100-doors b/Lang/Lua/100-doors
deleted file mode 120000
index ce373fa8af..0000000000
--- a/Lang/Lua/100-doors
+++ /dev/null
@@ -1 +0,0 @@
-../../Task/100-doors/Lua
\ No newline at end of file
diff --git a/Lang/Lua/Jacobsthal-numbers b/Lang/Lua/Jacobsthal-numbers
new file mode 120000
index 0000000000..ff787752c3
--- /dev/null
+++ b/Lang/Lua/Jacobsthal-numbers
@@ -0,0 +1 @@
+../../Task/Jacobsthal-numbers/Lua
\ No newline at end of file
diff --git a/Lang/Lua/Knapsack-problem-Bounded b/Lang/Lua/Knapsack-problem-Bounded
new file mode 120000
index 0000000000..edddb60b00
--- /dev/null
+++ b/Lang/Lua/Knapsack-problem-Bounded
@@ -0,0 +1 @@
+../../Task/Knapsack-problem-Bounded/Lua
\ No newline at end of file
diff --git a/Lang/Lua/Sum-of-elements-below-main-diagonal-of-matrix b/Lang/Lua/Sum-of-elements-below-main-diagonal-of-matrix
new file mode 120000
index 0000000000..63a3cd2cf9
--- /dev/null
+++ b/Lang/Lua/Sum-of-elements-below-main-diagonal-of-matrix
@@ -0,0 +1 @@
+../../Task/Sum-of-elements-below-main-diagonal-of-matrix/Lua
\ No newline at end of file
diff --git a/Lang/Lua/Use-another-language-to-call-a-function b/Lang/Lua/Use-another-language-to-call-a-function
new file mode 120000
index 0000000000..05e8f054e4
--- /dev/null
+++ b/Lang/Lua/Use-another-language-to-call-a-function
@@ -0,0 +1 @@
+../../Task/Use-another-language-to-call-a-function/Lua
\ No newline at end of file
diff --git a/Lang/Lua/Wagstaff-primes b/Lang/Lua/Wagstaff-primes
new file mode 120000
index 0000000000..c8cec659a4
--- /dev/null
+++ b/Lang/Lua/Wagstaff-primes
@@ -0,0 +1 @@
+../../Task/Wagstaff-primes/Lua
\ No newline at end of file
diff --git a/Lang/Lua/Wieferich-primes b/Lang/Lua/Wieferich-primes
new file mode 120000
index 0000000000..ac68d34377
--- /dev/null
+++ b/Lang/Lua/Wieferich-primes
@@ -0,0 +1 @@
+../../Task/Wieferich-primes/Lua
\ No newline at end of file
diff --git a/Lang/Mathematica/ASCII-art-diagram-converter b/Lang/Mathematica/ASCII-art-diagram-converter
new file mode 120000
index 0000000000..1006da4cf6
--- /dev/null
+++ b/Lang/Mathematica/ASCII-art-diagram-converter
@@ -0,0 +1 @@
+../../Task/ASCII-art-diagram-converter/Mathematica
\ No newline at end of file
diff --git a/Lang/Mathematica/Camel-case-and-snake-case b/Lang/Mathematica/Camel-case-and-snake-case
new file mode 120000
index 0000000000..6d73876132
--- /dev/null
+++ b/Lang/Mathematica/Camel-case-and-snake-case
@@ -0,0 +1 @@
+../../Task/Camel-case-and-snake-case/Mathematica
\ No newline at end of file
diff --git a/Lang/Mathematica/Erd-s-Nicolas-numbers b/Lang/Mathematica/Erd-s-Nicolas-numbers
new file mode 120000
index 0000000000..d74b7bd3b7
--- /dev/null
+++ b/Lang/Mathematica/Erd-s-Nicolas-numbers
@@ -0,0 +1 @@
+../../Task/Erd-s-Nicolas-numbers/Mathematica
\ No newline at end of file
diff --git a/Lang/Mathematica/Parse-an-IP-Address b/Lang/Mathematica/Parse-an-IP-Address
new file mode 120000
index 0000000000..32b7086e88
--- /dev/null
+++ b/Lang/Mathematica/Parse-an-IP-Address
@@ -0,0 +1 @@
+../../Task/Parse-an-IP-Address/Mathematica
\ No newline at end of file
diff --git a/Lang/Mathematica/Tonelli-Shanks-algorithm b/Lang/Mathematica/Tonelli-Shanks-algorithm
new file mode 120000
index 0000000000..747956daa4
--- /dev/null
+++ b/Lang/Mathematica/Tonelli-Shanks-algorithm
@@ -0,0 +1 @@
+../../Task/Tonelli-Shanks-algorithm/Mathematica
\ No newline at end of file
diff --git a/Lang/Mathematica/Vogels-approximation-method b/Lang/Mathematica/Vogels-approximation-method
new file mode 120000
index 0000000000..2d01457a6e
--- /dev/null
+++ b/Lang/Mathematica/Vogels-approximation-method
@@ -0,0 +1 @@
+../../Task/Vogels-approximation-method/Mathematica
\ No newline at end of file
diff --git a/Lang/Maxima/Array-length b/Lang/Maxima/Array-length
new file mode 120000
index 0000000000..da5c3a4dcd
--- /dev/null
+++ b/Lang/Maxima/Array-length
@@ -0,0 +1 @@
+../../Task/Array-length/Maxima
\ No newline at end of file
diff --git a/Lang/Maxima/Delete-a-file b/Lang/Maxima/Delete-a-file
new file mode 120000
index 0000000000..9515074358
--- /dev/null
+++ b/Lang/Maxima/Delete-a-file
@@ -0,0 +1 @@
+../../Task/Delete-a-file/Maxima
\ No newline at end of file
diff --git a/Lang/Maxima/Hash-from-two-arrays b/Lang/Maxima/Hash-from-two-arrays
new file mode 120000
index 0000000000..b59b47ec09
--- /dev/null
+++ b/Lang/Maxima/Hash-from-two-arrays
@@ -0,0 +1 @@
+../../Task/Hash-from-two-arrays/Maxima
\ No newline at end of file
diff --git a/Lang/Maxima/Real-constants-and-functions b/Lang/Maxima/Real-constants-and-functions
new file mode 120000
index 0000000000..5465f4ddf0
--- /dev/null
+++ b/Lang/Maxima/Real-constants-and-functions
@@ -0,0 +1 @@
+../../Task/Real-constants-and-functions/Maxima
\ No newline at end of file
diff --git a/Lang/Maxima/Regular-expressions b/Lang/Maxima/Regular-expressions
new file mode 120000
index 0000000000..ad80bc2114
--- /dev/null
+++ b/Lang/Maxima/Regular-expressions
@@ -0,0 +1 @@
+../../Task/Regular-expressions/Maxima
\ No newline at end of file
diff --git a/Lang/Maxima/Rename-a-file b/Lang/Maxima/Rename-a-file
new file mode 120000
index 0000000000..875c72e05d
--- /dev/null
+++ b/Lang/Maxima/Rename-a-file
@@ -0,0 +1 @@
+../../Task/Rename-a-file/Maxima
\ No newline at end of file
diff --git a/Lang/Maxima/Sorting-algorithms-Stooge-sort b/Lang/Maxima/Sorting-algorithms-Stooge-sort
new file mode 120000
index 0000000000..df60525c6e
--- /dev/null
+++ b/Lang/Maxima/Sorting-algorithms-Stooge-sort
@@ -0,0 +1 @@
+../../Task/Sorting-algorithms-Stooge-sort/Maxima
\ No newline at end of file
diff --git a/Lang/Maxima/Statistics-Basic b/Lang/Maxima/Statistics-Basic
new file mode 120000
index 0000000000..3aa4fcf62d
--- /dev/null
+++ b/Lang/Maxima/Statistics-Basic
@@ -0,0 +1 @@
+../../Task/Statistics-Basic/Maxima
\ No newline at end of file
diff --git a/Lang/Maxima/Substring-Top-and-tail b/Lang/Maxima/Substring-Top-and-tail
new file mode 120000
index 0000000000..6897859615
--- /dev/null
+++ b/Lang/Maxima/Substring-Top-and-tail
@@ -0,0 +1 @@
+../../Task/Substring-Top-and-tail/Maxima
\ No newline at end of file
diff --git a/Lang/Maxima/Superellipse b/Lang/Maxima/Superellipse
new file mode 120000
index 0000000000..4ecd2801c8
--- /dev/null
+++ b/Lang/Maxima/Superellipse
@@ -0,0 +1 @@
+../../Task/Superellipse/Maxima
\ No newline at end of file
diff --git a/Lang/Maxima/Topic-variable b/Lang/Maxima/Topic-variable
new file mode 120000
index 0000000000..e2a8f808d7
--- /dev/null
+++ b/Lang/Maxima/Topic-variable
@@ -0,0 +1 @@
+../../Task/Topic-variable/Maxima
\ No newline at end of file
diff --git a/Lang/Maxima/Towers-of-Hanoi b/Lang/Maxima/Towers-of-Hanoi
new file mode 120000
index 0000000000..40963f2edb
--- /dev/null
+++ b/Lang/Maxima/Towers-of-Hanoi
@@ -0,0 +1 @@
+../../Task/Towers-of-Hanoi/Maxima
\ No newline at end of file
diff --git a/Lang/Mn/00-LANG.txt b/Lang/Mn/00-LANG.txt
new file mode 100644
index 0000000000..0fd90d2c3a
--- /dev/null
+++ b/Lang/Mn/00-LANG.txt
@@ -0,0 +1,7 @@
+{{stub}}{{language|mn}}
+mn is a minimalistic, concatenative, functional stack language. It is a very simple subset of [[min]].
+
+==Links==
+*[https://h3rald.com/mn/Mn_DeveloperGuide.htm Learn mn]
+
+{{Language programming paradigm|Concatenative}}
\ No newline at end of file
diff --git a/Lang/Mn/00-META.yaml b/Lang/Mn/00-META.yaml
new file mode 100644
index 0000000000..f79f1602c3
--- /dev/null
+++ b/Lang/Mn/00-META.yaml
@@ -0,0 +1,2 @@
+---
+from: http://rosettacode.org/wiki/Category:Mn
diff --git a/Lang/Mn/Factorial b/Lang/Mn/Factorial
new file mode 120000
index 0000000000..4c7a3c3b43
--- /dev/null
+++ b/Lang/Mn/Factorial
@@ -0,0 +1 @@
+../../Task/Factorial/Mn
\ No newline at end of file
diff --git a/Lang/Mn/Loops-While b/Lang/Mn/Loops-While
new file mode 120000
index 0000000000..9e10aebd40
--- /dev/null
+++ b/Lang/Mn/Loops-While
@@ -0,0 +1 @@
+../../Task/Loops-While/Mn
\ No newline at end of file
diff --git a/Lang/Modula-2/AKS-test-for-primes b/Lang/Modula-2/AKS-test-for-primes
new file mode 120000
index 0000000000..f86ed2a172
--- /dev/null
+++ b/Lang/Modula-2/AKS-test-for-primes
@@ -0,0 +1 @@
+../../Task/AKS-test-for-primes/Modula-2
\ No newline at end of file
diff --git a/Lang/Modula-2/Cistercian-numerals b/Lang/Modula-2/Cistercian-numerals
new file mode 120000
index 0000000000..5da4e51fc7
--- /dev/null
+++ b/Lang/Modula-2/Cistercian-numerals
@@ -0,0 +1 @@
+../../Task/Cistercian-numerals/Modula-2
\ No newline at end of file
diff --git a/Lang/Mojo/Hunt-the-Wumpus b/Lang/Mojo/Hunt-the-Wumpus
new file mode 120000
index 0000000000..a79c86df71
--- /dev/null
+++ b/Lang/Mojo/Hunt-the-Wumpus
@@ -0,0 +1 @@
+../../Task/Hunt-the-Wumpus/Mojo
\ No newline at end of file
diff --git a/Lang/Nascom-BASIC/Old-Russian-measure-of-length b/Lang/Nascom-BASIC/Old-Russian-measure-of-length
new file mode 120000
index 0000000000..73ef2957e7
--- /dev/null
+++ b/Lang/Nascom-BASIC/Old-Russian-measure-of-length
@@ -0,0 +1 @@
+../../Task/Old-Russian-measure-of-length/Nascom-BASIC
\ No newline at end of file
diff --git a/Lang/Nom/00-LANG.txt b/Lang/Nom/00-LANG.txt
new file mode 100644
index 0000000000..596e8bc965
--- /dev/null
+++ b/Lang/Nom/00-LANG.txt
@@ -0,0 +1,18 @@
+{{language|Nom}}
+
+Nom is an interpreted and also compiling (via the translation scripts)
+language. Documentation for ''Nom'' can be found at [www.nomlang.org] along
+with the downloadable [http://nomlang.org/download implementation].
+All the source code is also hosted in [https://sourceforge.net sourceforge]
+at https://bumble.sf.net/books/pars/
+
+Nom is based on the PEP (''Parsing Engine for Patterns'') virtual machine,
+which is a text-based virtual machine. The PEP virtual machine is
+documented at [http://nomlang.org/doc/machine/]. Nom was first ''conceived''
+around about 2005 but a good working implementation (the
+[https://bumble.sf.net/books/pars/object/pep.c pep] interpreter) was not
+achieved until approximately 2019.
+
+Nom is, I believe a new approach to recognising/parsing/transforming/transpiling/compiling context-free languages
+since it uses the same standard Unix-style approach of a ''text-stream-filter''
+as with tools like ''sed'' or ''awk''.
\ No newline at end of file
diff --git a/Lang/Nom/00-META.yaml b/Lang/Nom/00-META.yaml
new file mode 100644
index 0000000000..347649abaa
--- /dev/null
+++ b/Lang/Nom/00-META.yaml
@@ -0,0 +1,2 @@
+---
+from: http://rosettacode.org/wiki/Category:Nom
diff --git a/Lang/Nom/Balanced-brackets b/Lang/Nom/Balanced-brackets
new file mode 120000
index 0000000000..53c6847c48
--- /dev/null
+++ b/Lang/Nom/Balanced-brackets
@@ -0,0 +1 @@
+../../Task/Balanced-brackets/Nom
\ No newline at end of file
diff --git a/Lang/Nom/CSV-to-HTML-translation b/Lang/Nom/CSV-to-HTML-translation
new file mode 120000
index 0000000000..efc535b187
--- /dev/null
+++ b/Lang/Nom/CSV-to-HTML-translation
@@ -0,0 +1 @@
+../../Task/CSV-to-HTML-translation/Nom
\ No newline at end of file
diff --git a/Lang/Nom/Determine-if-a-string-is-numeric b/Lang/Nom/Determine-if-a-string-is-numeric
new file mode 120000
index 0000000000..dc0b5a67ea
--- /dev/null
+++ b/Lang/Nom/Determine-if-a-string-is-numeric
@@ -0,0 +1 @@
+../../Task/Determine-if-a-string-is-numeric/Nom
\ No newline at end of file
diff --git a/Lang/Nom/Empty-string b/Lang/Nom/Empty-string
new file mode 120000
index 0000000000..e51cf14c29
--- /dev/null
+++ b/Lang/Nom/Empty-string
@@ -0,0 +1 @@
+../../Task/Empty-string/Nom
\ No newline at end of file
diff --git a/Lang/Nom/Even-or-odd b/Lang/Nom/Even-or-odd
new file mode 120000
index 0000000000..a93a39c338
--- /dev/null
+++ b/Lang/Nom/Even-or-odd
@@ -0,0 +1 @@
+../../Task/Even-or-odd/Nom
\ No newline at end of file
diff --git a/Lang/Nom/Hello-world-Text b/Lang/Nom/Hello-world-Text
new file mode 120000
index 0000000000..6575bd7149
--- /dev/null
+++ b/Lang/Nom/Hello-world-Text
@@ -0,0 +1 @@
+../../Task/Hello-world-Text/Nom
\ No newline at end of file
diff --git a/Lang/Nom/Input-loop b/Lang/Nom/Input-loop
new file mode 120000
index 0000000000..c687c9a3a9
--- /dev/null
+++ b/Lang/Nom/Input-loop
@@ -0,0 +1 @@
+../../Task/Input-loop/Nom
\ No newline at end of file
diff --git a/Lang/Nom/Odd-word-problem b/Lang/Nom/Odd-word-problem
new file mode 120000
index 0000000000..43979a4bb7
--- /dev/null
+++ b/Lang/Nom/Odd-word-problem
@@ -0,0 +1 @@
+../../Task/Odd-word-problem/Nom
\ No newline at end of file
diff --git a/Lang/Nom/Reverse-a-string b/Lang/Nom/Reverse-a-string
new file mode 120000
index 0000000000..38692d6625
--- /dev/null
+++ b/Lang/Nom/Reverse-a-string
@@ -0,0 +1 @@
+../../Task/Reverse-a-string/Nom
\ No newline at end of file
diff --git a/Lang/OCaml/Parse-an-IP-Address b/Lang/OCaml/Parse-an-IP-Address
new file mode 120000
index 0000000000..f01fc56f01
--- /dev/null
+++ b/Lang/OCaml/Parse-an-IP-Address
@@ -0,0 +1 @@
+../../Task/Parse-an-IP-Address/OCaml
\ No newline at end of file
diff --git a/Lang/OCaml/Sorting-algorithms-Sleep-sort b/Lang/OCaml/Sorting-algorithms-Sleep-sort
new file mode 120000
index 0000000000..1cc75210f7
--- /dev/null
+++ b/Lang/OCaml/Sorting-algorithms-Sleep-sort
@@ -0,0 +1 @@
+../../Task/Sorting-algorithms-Sleep-sort/OCaml
\ No newline at end of file
diff --git a/Lang/Objeck/Catalan-numbers-Pascals-triangle b/Lang/Objeck/Catalan-numbers-Pascals-triangle
new file mode 120000
index 0000000000..bc3c684d61
--- /dev/null
+++ b/Lang/Objeck/Catalan-numbers-Pascals-triangle
@@ -0,0 +1 @@
+../../Task/Catalan-numbers-Pascals-triangle/Objeck
\ No newline at end of file
diff --git a/Lang/Objeck/Disarium-numbers b/Lang/Objeck/Disarium-numbers
new file mode 120000
index 0000000000..bc58c40d5c
--- /dev/null
+++ b/Lang/Objeck/Disarium-numbers
@@ -0,0 +1 @@
+../../Task/Disarium-numbers/Objeck
\ No newline at end of file
diff --git a/Lang/Objeck/HTTPS-Client-authenticated b/Lang/Objeck/HTTPS-Client-authenticated
new file mode 120000
index 0000000000..6f56878ef9
--- /dev/null
+++ b/Lang/Objeck/HTTPS-Client-authenticated
@@ -0,0 +1 @@
+../../Task/HTTPS-Client-authenticated/Objeck
\ No newline at end of file
diff --git a/Lang/Objeck/Magic-squares-of-doubly-even-order b/Lang/Objeck/Magic-squares-of-doubly-even-order
new file mode 120000
index 0000000000..526cd66745
--- /dev/null
+++ b/Lang/Objeck/Magic-squares-of-doubly-even-order
@@ -0,0 +1 @@
+../../Task/Magic-squares-of-doubly-even-order/Objeck
\ No newline at end of file
diff --git a/Lang/Objeck/Matrix-multiplication b/Lang/Objeck/Matrix-multiplication
new file mode 120000
index 0000000000..e2801343eb
--- /dev/null
+++ b/Lang/Objeck/Matrix-multiplication
@@ -0,0 +1 @@
+../../Task/Matrix-multiplication/Objeck
\ No newline at end of file
diff --git a/Lang/Object-Pascal-Implementations/00-LANG.txt b/Lang/Object-Pascal-Implementations/00-LANG.txt
new file mode 100644
index 0000000000..74167ef7a7
--- /dev/null
+++ b/Lang/Object-Pascal-Implementations/00-LANG.txt
@@ -0,0 +1,3 @@
+{{language|Object Pascal}}
+{{implementation cat|Object Pascal}}
+{{implementation|Pascal}}
\ No newline at end of file
diff --git a/Lang/Object-Pascal-Implementations/00-META.yaml b/Lang/Object-Pascal-Implementations/00-META.yaml
new file mode 100644
index 0000000000..34f0628a46
--- /dev/null
+++ b/Lang/Object-Pascal-Implementations/00-META.yaml
@@ -0,0 +1,2 @@
+---
+from: http://rosettacode.org/wiki/Category:Object_Pascal_Implementations
diff --git a/Lang/Odin/Comments b/Lang/Odin/Comments
new file mode 120000
index 0000000000..69505856e6
--- /dev/null
+++ b/Lang/Odin/Comments
@@ -0,0 +1 @@
+../../Task/Comments/Odin
\ No newline at end of file
diff --git a/Lang/OoRexx/Prime-decomposition b/Lang/OoRexx/Prime-decomposition
new file mode 120000
index 0000000000..f16b4825fb
--- /dev/null
+++ b/Lang/OoRexx/Prime-decomposition
@@ -0,0 +1 @@
+../../Task/Prime-decomposition/OoRexx
\ No newline at end of file
diff --git a/Lang/OxygenBasic/Josephus-problem b/Lang/OxygenBasic/Josephus-problem
new file mode 120000
index 0000000000..26c79416e6
--- /dev/null
+++ b/Lang/OxygenBasic/Josephus-problem
@@ -0,0 +1 @@
+../../Task/Josephus-problem/OxygenBasic
\ No newline at end of file
diff --git a/Lang/PARI-GP/Pell-numbers b/Lang/PARI-GP/Pell-numbers
new file mode 120000
index 0000000000..6dc31a644a
--- /dev/null
+++ b/Lang/PARI-GP/Pell-numbers
@@ -0,0 +1 @@
+../../Task/Pell-numbers/PARI-GP
\ No newline at end of file
diff --git a/Lang/PARI-GP/Tonelli-Shanks-algorithm b/Lang/PARI-GP/Tonelli-Shanks-algorithm
new file mode 120000
index 0000000000..de551c5a5b
--- /dev/null
+++ b/Lang/PARI-GP/Tonelli-Shanks-algorithm
@@ -0,0 +1 @@
+../../Task/Tonelli-Shanks-algorithm/PARI-GP
\ No newline at end of file
diff --git a/Lang/PHP/AKS-test-for-primes b/Lang/PHP/AKS-test-for-primes
new file mode 120000
index 0000000000..e35d324f89
--- /dev/null
+++ b/Lang/PHP/AKS-test-for-primes
@@ -0,0 +1 @@
+../../Task/AKS-test-for-primes/PHP
\ No newline at end of file
diff --git a/Lang/PL-M/100-doors b/Lang/PL-M/100-doors
deleted file mode 120000
index fb7e956c0e..0000000000
--- a/Lang/PL-M/100-doors
+++ /dev/null
@@ -1 +0,0 @@
-../../Task/100-doors/PL-M
\ No newline at end of file
diff --git a/Lang/Pascal-P/00-LANG.txt b/Lang/Pascal-P/00-LANG.txt
new file mode 100644
index 0000000000..ce87f461ab
--- /dev/null
+++ b/Lang/Pascal-P/00-LANG.txt
@@ -0,0 +1,23 @@
+{{language|Pascal-P
+|exec=bytecode
+|strength=strong
+|safety=safe
+|express=explicit
+|checking=static
+|parampass=both
+|gc=no
+|LCT=yes
+}}{{language programming paradigm|Procedural}}
+
+{{implementation|Pascal}}{{Compiler}}
+
+'''Pascal-P''' is a renowned [[:Category:Pascal|Pascal]] compiler designed to generate [[bytecode]], known as ''p-code'', and interpret the resulting code. The compilers and interpreters of Pascal-P are developed using the Pascal programming language.
+
+Originally developed in Zurich in 1973, the earliest iteration of Pascal-P, known as Pascal-P1, laid the foundation for subsequent versions, including P2, P3, and P4. While versions P1 and P3 are no longer accessible, P2 is still readily available and has notably served as the base for the UCSD system. Furthermore, there exist derivative versions, such as P5 and P6, which have evolved from the core Pascal-P compiler.
+
+Notably, Pascal-P is heralded for its portability, as it is capable of generating code suitable for a hypothetical stack computer system. This feature enhances its versatility and applicability across various platforms and environments. Additionally, Pascal-P has made significant contributions to the realm of education, often being utilized as an educational tool to impart knowledge and foster learning in the field of computer programming.
+
+== External links ==
+* [http://pascal.hansotten.com/niklaus-wirth/px-compilers Px compilers] on [http://pascal.hansotten.com/ Pascal for small machines]
+* [https://sourceforge.net/projects/pascalp4/ Scott Moore's version of P4] The package includes crucial components essential for program execution on the MS-DOS platform - the compiler and the p-code interpreter executables.
+* [https://www.moorecad.com/standardpascal/p4.html The P4 compiler] on [https://www.moorecad.com/ Scott Moore's page]
\ No newline at end of file
diff --git a/Lang/Pascal-P/00-META.yaml b/Lang/Pascal-P/00-META.yaml
new file mode 100644
index 0000000000..5af4159a1f
--- /dev/null
+++ b/Lang/Pascal-P/00-META.yaml
@@ -0,0 +1,2 @@
+---
+from: http://rosettacode.org/wiki/Category:Pascal-P
diff --git a/Lang/Pascal-P/Cistercian-numerals b/Lang/Pascal-P/Cistercian-numerals
new file mode 120000
index 0000000000..3169bb4737
--- /dev/null
+++ b/Lang/Pascal-P/Cistercian-numerals
@@ -0,0 +1 @@
+../../Task/Cistercian-numerals/Pascal-P
\ No newline at end of file
diff --git a/Lang/Pascal-P/FizzBuzz b/Lang/Pascal-P/FizzBuzz
new file mode 120000
index 0000000000..8d0c857c1d
--- /dev/null
+++ b/Lang/Pascal-P/FizzBuzz
@@ -0,0 +1 @@
+../../Task/FizzBuzz/Pascal-P
\ No newline at end of file
diff --git a/Lang/Pascal-P/Leonardo-numbers b/Lang/Pascal-P/Leonardo-numbers
new file mode 120000
index 0000000000..33730eb927
--- /dev/null
+++ b/Lang/Pascal-P/Leonardo-numbers
@@ -0,0 +1 @@
+../../Task/Leonardo-numbers/Pascal-P
\ No newline at end of file
diff --git a/Lang/Pascal-P/Levenshtein-distance b/Lang/Pascal-P/Levenshtein-distance
new file mode 120000
index 0000000000..369c4fda51
--- /dev/null
+++ b/Lang/Pascal-P/Levenshtein-distance
@@ -0,0 +1 @@
+../../Task/Levenshtein-distance/Pascal-P
\ No newline at end of file
diff --git a/Lang/Pascal-P/M-bius-function b/Lang/Pascal-P/M-bius-function
new file mode 120000
index 0000000000..5ac8d7d007
--- /dev/null
+++ b/Lang/Pascal-P/M-bius-function
@@ -0,0 +1 @@
+../../Task/M-bius-function/Pascal-P
\ No newline at end of file
diff --git a/Lang/Pascal-P/Magic-constant b/Lang/Pascal-P/Magic-constant
new file mode 120000
index 0000000000..d71a46b136
--- /dev/null
+++ b/Lang/Pascal-P/Magic-constant
@@ -0,0 +1 @@
+../../Task/Magic-constant/Pascal-P
\ No newline at end of file
diff --git a/Lang/Pascal-P/Map-range b/Lang/Pascal-P/Map-range
new file mode 120000
index 0000000000..ecc77d75f6
--- /dev/null
+++ b/Lang/Pascal-P/Map-range
@@ -0,0 +1 @@
+../../Task/Map-range/Pascal-P
\ No newline at end of file
diff --git a/Lang/Pascal-P/Ramer-Douglas-Peucker-line-simplification b/Lang/Pascal-P/Ramer-Douglas-Peucker-line-simplification
new file mode 120000
index 0000000000..41e4d1e47d
--- /dev/null
+++ b/Lang/Pascal-P/Ramer-Douglas-Peucker-line-simplification
@@ -0,0 +1 @@
+../../Task/Ramer-Douglas-Peucker-line-simplification/Pascal-P
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/15-puzzle-solver b/Lang/PascalABC.NET/15-puzzle-solver
new file mode 120000
index 0000000000..73063f2237
--- /dev/null
+++ b/Lang/PascalABC.NET/15-puzzle-solver
@@ -0,0 +1 @@
+../../Task/15-puzzle-solver/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Abbreviations-easy b/Lang/PascalABC.NET/Abbreviations-easy
new file mode 120000
index 0000000000..ea782fa0b0
--- /dev/null
+++ b/Lang/PascalABC.NET/Abbreviations-easy
@@ -0,0 +1 @@
+../../Task/Abbreviations-easy/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Abbreviations-simple b/Lang/PascalABC.NET/Abbreviations-simple
new file mode 120000
index 0000000000..abc650feac
--- /dev/null
+++ b/Lang/PascalABC.NET/Abbreviations-simple
@@ -0,0 +1 @@
+../../Task/Abbreviations-simple/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Arithmetic-evaluation b/Lang/PascalABC.NET/Arithmetic-evaluation
new file mode 120000
index 0000000000..816270d1cc
--- /dev/null
+++ b/Lang/PascalABC.NET/Arithmetic-evaluation
@@ -0,0 +1 @@
+../../Task/Arithmetic-evaluation/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Bioinformatics-base-count b/Lang/PascalABC.NET/Bioinformatics-base-count
new file mode 120000
index 0000000000..8f0159ab8b
--- /dev/null
+++ b/Lang/PascalABC.NET/Bioinformatics-base-count
@@ -0,0 +1 @@
+../../Task/Bioinformatics-base-count/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Case-sensitivity-of-identifiers b/Lang/PascalABC.NET/Case-sensitivity-of-identifiers
new file mode 120000
index 0000000000..b0fc4ead7c
--- /dev/null
+++ b/Lang/PascalABC.NET/Case-sensitivity-of-identifiers
@@ -0,0 +1 @@
+../../Task/Case-sensitivity-of-identifiers/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/PascalABC.NET/Combinations-with-repetitions b/Lang/PascalABC.NET/Combinations-with-repetitions
new file mode 120000
index 0000000000..f75050c914
--- /dev/null
+++ b/Lang/PascalABC.NET/Combinations-with-repetitions
@@ -0,0 +1 @@
+../../Task/Combinations-with-repetitions/PascalABC.NET
\ No newline at end of file
diff --git a/Lang/Perl/Continued-fraction-Arithmetic-G-matrix-ng-continued-fraction-n- b/Lang/Perl/Continued-fraction-Arithmetic-G-matrix-ng-continued-fraction-n-
new file mode 120000
index 0000000000..bc2932bdb0
--- /dev/null
+++ b/Lang/Perl/Continued-fraction-Arithmetic-G-matrix-ng-continued-fraction-n-
@@ -0,0 +1 @@
+../../Task/Continued-fraction-Arithmetic-G-matrix-ng-continued-fraction-n-/Perl
\ No newline at end of file
diff --git a/Lang/Pico-8/00-LANG.txt b/Lang/Pico-8/00-LANG.txt
new file mode 100644
index 0000000000..017ddd4004
--- /dev/null
+++ b/Lang/Pico-8/00-LANG.txt
@@ -0,0 +1 @@
+{{stub}}{{language|Pico-8}}
\ No newline at end of file
diff --git a/Lang/Pico-8/00-META.yaml b/Lang/Pico-8/00-META.yaml
new file mode 100644
index 0000000000..5d0c380905
--- /dev/null
+++ b/Lang/Pico-8/00-META.yaml
@@ -0,0 +1,2 @@
+---
+from: http://rosettacode.org/wiki/Category:Pico-8
diff --git a/Lang/Pico-8/Hello-world-Text b/Lang/Pico-8/Hello-world-Text
new file mode 120000
index 0000000000..8a6a254eaa
--- /dev/null
+++ b/Lang/Pico-8/Hello-world-Text
@@ -0,0 +1 @@
+../../Task/Hello-world-Text/Pico-8
\ No newline at end of file
diff --git a/Lang/Pluto/00-LANG.txt b/Lang/Pluto/00-LANG.txt
new file mode 100644
index 0000000000..debf9ec69a
--- /dev/null
+++ b/Lang/Pluto/00-LANG.txt
@@ -0,0 +1,41 @@
+{{language|Pluto
+|exec=interpreted
+|strength=strong
+|safety=safe
+|express=implicit
+|checking=dynamic
+|gc=yes
+|hopl=no
+|site=https://pluto-lang.org/}}
+Pluto is a superset of Lua 5.4 with a focus on general-purpose programming. While being remarkably compatible with Lua 5.4 source-code & bytecode, it enhances the standard library & adds more than a dozen highly-desired syntaxes such as switch statements, compound operators, classes, class inheritance, string interpolation, type hinting, enums, and so on.
+
+Pluto aspires to be a version of Lua with a larger feature-set, that is all. Pluto is not a Lua-killer, an attempted successor, or any of that. Many people (rightly so) love Lua precisely because of the design philosophy. And fundamentally, Pluto is a major deviation from Lua's design philosophy. Some may prefer this, some may not.
+
+The language is being developed on [https://github.com/PlutoLang/Pluto github] and pre-built binaries for 64-bit Linux, MacOS and Windows can be downloaded [https://github.com/PlutoLang/Pluto/releases here].
+
+Here is a list of custom libraries used on Rosetta Code:
+{|class="wikitable"
+! No. !! Module name !! No. !! Module name
+|-
+| 1 || [[:Category:Pluto-fmt|fmt]] || 2 || [[:Category:Pluto-math2|math2]]
+|-
+| 3 || [[:Category:Pluto-int|int]] || 4 || [[:Category:Pluto-table2|table2]]
+|-
+| 5 || [[:Category:Pluto-complex|complex]] || 6 || [[:Category:Pluto-rat|rat]]
+|-
+| 7 || [[:Category:Pluto-queue|queue]] || 8 || [[:Category:Pluto-map|map]]
+|-
+| 9 || [[:Category:Pluto-list|list]] || 10 || [[:Category:Pluto-perm|perm]]
+|-
+|11 || [[:Category:Pluto-ansi|ansi]] || 12 || [[:Category:Pluto-io2|io2]]
+|-
+|13 || [[:Category:Pluto-uchar|uchar]] || 14 || [[:Category:Pluto-gchar|gchar]]
+|-
+|}
+
+== To do ==
+[[Tasks not implemented in Pluto]]
+
+== See also ==
+
+[[Lua]]
\ No newline at end of file
diff --git a/Lang/Pluto/00-META.yaml b/Lang/Pluto/00-META.yaml
new file mode 100644
index 0000000000..4169e06d3e
--- /dev/null
+++ b/Lang/Pluto/00-META.yaml
@@ -0,0 +1,2 @@
+---
+from: http://rosettacode.org/wiki/Category:Pluto
diff --git a/Lang/Pluto/99-bottles-of-beer b/Lang/Pluto/99-bottles-of-beer
new file mode 120000
index 0000000000..cc21927564
--- /dev/null
+++ b/Lang/Pluto/99-bottles-of-beer
@@ -0,0 +1 @@
+../../Task/99-bottles-of-beer/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/A+B b/Lang/Pluto/A+B
new file mode 120000
index 0000000000..c26f431720
--- /dev/null
+++ b/Lang/Pluto/A+B
@@ -0,0 +1 @@
+../../Task/A+B/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/ABC-problem b/Lang/Pluto/ABC-problem
new file mode 120000
index 0000000000..13affeffe2
--- /dev/null
+++ b/Lang/Pluto/ABC-problem
@@ -0,0 +1 @@
+../../Task/ABC-problem/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/AKS-test-for-primes b/Lang/Pluto/AKS-test-for-primes
new file mode 120000
index 0000000000..55e9fce3e0
--- /dev/null
+++ b/Lang/Pluto/AKS-test-for-primes
@@ -0,0 +1 @@
+../../Task/AKS-test-for-primes/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Abelian-sandpile-model b/Lang/Pluto/Abelian-sandpile-model
new file mode 120000
index 0000000000..84e194b9d0
--- /dev/null
+++ b/Lang/Pluto/Abelian-sandpile-model
@@ -0,0 +1 @@
+../../Task/Abelian-sandpile-model/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Abelian-sandpile-model-Identity b/Lang/Pluto/Abelian-sandpile-model-Identity
new file mode 120000
index 0000000000..5258fd0a4e
--- /dev/null
+++ b/Lang/Pluto/Abelian-sandpile-model-Identity
@@ -0,0 +1 @@
+../../Task/Abelian-sandpile-model-Identity/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Abstract-type b/Lang/Pluto/Abstract-type
new file mode 120000
index 0000000000..f418e6a876
--- /dev/null
+++ b/Lang/Pluto/Abstract-type
@@ -0,0 +1 @@
+../../Task/Abstract-type/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Abundant-deficient-and-perfect-number-classifications b/Lang/Pluto/Abundant-deficient-and-perfect-number-classifications
new file mode 120000
index 0000000000..f5843a0883
--- /dev/null
+++ b/Lang/Pluto/Abundant-deficient-and-perfect-number-classifications
@@ -0,0 +1 @@
+../../Task/Abundant-deficient-and-perfect-number-classifications/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Abundant-odd-numbers b/Lang/Pluto/Abundant-odd-numbers
new file mode 120000
index 0000000000..18495df602
--- /dev/null
+++ b/Lang/Pluto/Abundant-odd-numbers
@@ -0,0 +1 @@
+../../Task/Abundant-odd-numbers/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Achilles-numbers b/Lang/Pluto/Achilles-numbers
new file mode 120000
index 0000000000..0121ec15f3
--- /dev/null
+++ b/Lang/Pluto/Achilles-numbers
@@ -0,0 +1 @@
+../../Task/Achilles-numbers/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Ackermann-function b/Lang/Pluto/Ackermann-function
new file mode 120000
index 0000000000..b2e9e8bcf4
--- /dev/null
+++ b/Lang/Pluto/Ackermann-function
@@ -0,0 +1 @@
+../../Task/Ackermann-function/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Address-of-a-variable b/Lang/Pluto/Address-of-a-variable
new file mode 120000
index 0000000000..db8c9fa74c
--- /dev/null
+++ b/Lang/Pluto/Address-of-a-variable
@@ -0,0 +1 @@
+../../Task/Address-of-a-variable/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Almost-prime b/Lang/Pluto/Almost-prime
new file mode 120000
index 0000000000..8dfdefc597
--- /dev/null
+++ b/Lang/Pluto/Almost-prime
@@ -0,0 +1 @@
+../../Task/Almost-prime/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Anti-primes b/Lang/Pluto/Anti-primes
new file mode 120000
index 0000000000..62e9118e82
--- /dev/null
+++ b/Lang/Pluto/Anti-primes
@@ -0,0 +1 @@
+../../Task/Anti-primes/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Approximate-equality b/Lang/Pluto/Approximate-equality
new file mode 120000
index 0000000000..65832f9c4c
--- /dev/null
+++ b/Lang/Pluto/Approximate-equality
@@ -0,0 +1 @@
+../../Task/Approximate-equality/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Arbitrary-precision-integers-included- b/Lang/Pluto/Arbitrary-precision-integers-included-
new file mode 120000
index 0000000000..63cf45fedf
--- /dev/null
+++ b/Lang/Pluto/Arbitrary-precision-integers-included-
@@ -0,0 +1 @@
+../../Task/Arbitrary-precision-integers-included-/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Arithmetic-Complex b/Lang/Pluto/Arithmetic-Complex
new file mode 120000
index 0000000000..e8437b9a01
--- /dev/null
+++ b/Lang/Pluto/Arithmetic-Complex
@@ -0,0 +1 @@
+../../Task/Arithmetic-Complex/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Arithmetic-Integer b/Lang/Pluto/Arithmetic-Integer
new file mode 120000
index 0000000000..3b77091442
--- /dev/null
+++ b/Lang/Pluto/Arithmetic-Integer
@@ -0,0 +1 @@
+../../Task/Arithmetic-Integer/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Arithmetic-Rational b/Lang/Pluto/Arithmetic-Rational
new file mode 120000
index 0000000000..497dafd0e0
--- /dev/null
+++ b/Lang/Pluto/Arithmetic-Rational
@@ -0,0 +1 @@
+../../Task/Arithmetic-Rational/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Arithmetic-derivative b/Lang/Pluto/Arithmetic-derivative
new file mode 120000
index 0000000000..9254d1c7e4
--- /dev/null
+++ b/Lang/Pluto/Arithmetic-derivative
@@ -0,0 +1 @@
+../../Task/Arithmetic-derivative/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Arithmetic-geometric-mean b/Lang/Pluto/Arithmetic-geometric-mean
new file mode 120000
index 0000000000..7f7bd49c54
--- /dev/null
+++ b/Lang/Pluto/Arithmetic-geometric-mean
@@ -0,0 +1 @@
+../../Task/Arithmetic-geometric-mean/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Array-concatenation b/Lang/Pluto/Array-concatenation
new file mode 120000
index 0000000000..b151e60e5d
--- /dev/null
+++ b/Lang/Pluto/Array-concatenation
@@ -0,0 +1 @@
+../../Task/Array-concatenation/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Arrays b/Lang/Pluto/Arrays
new file mode 120000
index 0000000000..36aa2a73e2
--- /dev/null
+++ b/Lang/Pluto/Arrays
@@ -0,0 +1 @@
+../../Task/Arrays/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Ascending-primes b/Lang/Pluto/Ascending-primes
new file mode 120000
index 0000000000..b086dde9de
--- /dev/null
+++ b/Lang/Pluto/Ascending-primes
@@ -0,0 +1 @@
+../../Task/Ascending-primes/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Associative-array-Creation b/Lang/Pluto/Associative-array-Creation
new file mode 120000
index 0000000000..dab36a66d3
--- /dev/null
+++ b/Lang/Pluto/Associative-array-Creation
@@ -0,0 +1 @@
+../../Task/Associative-array-Creation/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Associative-array-Iteration b/Lang/Pluto/Associative-array-Iteration
new file mode 120000
index 0000000000..5ced29976c
--- /dev/null
+++ b/Lang/Pluto/Associative-array-Iteration
@@ -0,0 +1 @@
+../../Task/Associative-array-Iteration/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Associative-array-Merging b/Lang/Pluto/Associative-array-Merging
new file mode 120000
index 0000000000..e8bdf6f6ca
--- /dev/null
+++ b/Lang/Pluto/Associative-array-Merging
@@ -0,0 +1 @@
+../../Task/Associative-array-Merging/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Attractive-numbers b/Lang/Pluto/Attractive-numbers
new file mode 120000
index 0000000000..cc6d5fdf22
--- /dev/null
+++ b/Lang/Pluto/Attractive-numbers
@@ -0,0 +1 @@
+../../Task/Attractive-numbers/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Averages-Arithmetic-mean b/Lang/Pluto/Averages-Arithmetic-mean
new file mode 120000
index 0000000000..a80eb1d9ce
--- /dev/null
+++ b/Lang/Pluto/Averages-Arithmetic-mean
@@ -0,0 +1 @@
+../../Task/Averages-Arithmetic-mean/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Averages-Median b/Lang/Pluto/Averages-Median
new file mode 120000
index 0000000000..4877cdaa55
--- /dev/null
+++ b/Lang/Pluto/Averages-Median
@@ -0,0 +1 @@
+../../Task/Averages-Median/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Averages-Pythagorean-means b/Lang/Pluto/Averages-Pythagorean-means
new file mode 120000
index 0000000000..f4cb6461df
--- /dev/null
+++ b/Lang/Pluto/Averages-Pythagorean-means
@@ -0,0 +1 @@
+../../Task/Averages-Pythagorean-means/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Averages-Root-mean-square b/Lang/Pluto/Averages-Root-mean-square
new file mode 120000
index 0000000000..744197c17a
--- /dev/null
+++ b/Lang/Pluto/Averages-Root-mean-square
@@ -0,0 +1 @@
+../../Task/Averages-Root-mean-square/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Balanced-brackets b/Lang/Pluto/Balanced-brackets
new file mode 120000
index 0000000000..e55ebe8e48
--- /dev/null
+++ b/Lang/Pluto/Balanced-brackets
@@ -0,0 +1 @@
+../../Task/Balanced-brackets/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Base64-decode-data b/Lang/Pluto/Base64-decode-data
new file mode 120000
index 0000000000..9e79a215f0
--- /dev/null
+++ b/Lang/Pluto/Base64-decode-data
@@ -0,0 +1 @@
+../../Task/Base64-decode-data/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Bell-numbers b/Lang/Pluto/Bell-numbers
new file mode 120000
index 0000000000..12ebb36a37
--- /dev/null
+++ b/Lang/Pluto/Bell-numbers
@@ -0,0 +1 @@
+../../Task/Bell-numbers/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Bitmap b/Lang/Pluto/Bitmap
new file mode 120000
index 0000000000..2eae4de5c9
--- /dev/null
+++ b/Lang/Pluto/Bitmap
@@ -0,0 +1 @@
+../../Task/Bitmap/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Bitmap-Bresenhams-line-algorithm b/Lang/Pluto/Bitmap-Bresenhams-line-algorithm
new file mode 120000
index 0000000000..648ca4156e
--- /dev/null
+++ b/Lang/Pluto/Bitmap-Bresenhams-line-algorithm
@@ -0,0 +1 @@
+../../Task/Bitmap-Bresenhams-line-algorithm/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Bitmap-Midpoint-circle-algorithm b/Lang/Pluto/Bitmap-Midpoint-circle-algorithm
new file mode 120000
index 0000000000..30e98198c1
--- /dev/null
+++ b/Lang/Pluto/Bitmap-Midpoint-circle-algorithm
@@ -0,0 +1 @@
+../../Task/Bitmap-Midpoint-circle-algorithm/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Bitwise-operations b/Lang/Pluto/Bitwise-operations
new file mode 120000
index 0000000000..7aa2755b89
--- /dev/null
+++ b/Lang/Pluto/Bitwise-operations
@@ -0,0 +1 @@
+../../Task/Bitwise-operations/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/CRC-32 b/Lang/Pluto/CRC-32
new file mode 120000
index 0000000000..a2f9755cc8
--- /dev/null
+++ b/Lang/Pluto/CRC-32
@@ -0,0 +1 @@
+../../Task/CRC-32/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Caesar-cipher b/Lang/Pluto/Caesar-cipher
new file mode 120000
index 0000000000..92165c560f
--- /dev/null
+++ b/Lang/Pluto/Caesar-cipher
@@ -0,0 +1 @@
+../../Task/Caesar-cipher/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Calkin-Wilf-sequence b/Lang/Pluto/Calkin-Wilf-sequence
new file mode 120000
index 0000000000..e7c08bf16e
--- /dev/null
+++ b/Lang/Pluto/Calkin-Wilf-sequence
@@ -0,0 +1 @@
+../../Task/Calkin-Wilf-sequence/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Call-a-foreign-language-function b/Lang/Pluto/Call-a-foreign-language-function
new file mode 120000
index 0000000000..f071bb1596
--- /dev/null
+++ b/Lang/Pluto/Call-a-foreign-language-function
@@ -0,0 +1 @@
+../../Task/Call-a-foreign-language-function/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Call-a-function-in-a-shared-library b/Lang/Pluto/Call-a-function-in-a-shared-library
new file mode 120000
index 0000000000..fb03a37240
--- /dev/null
+++ b/Lang/Pluto/Call-a-function-in-a-shared-library
@@ -0,0 +1 @@
+../../Task/Call-a-function-in-a-shared-library/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Case-sensitivity-of-identifiers b/Lang/Pluto/Case-sensitivity-of-identifiers
new file mode 120000
index 0000000000..e37b951419
--- /dev/null
+++ b/Lang/Pluto/Case-sensitivity-of-identifiers
@@ -0,0 +1 @@
+../../Task/Case-sensitivity-of-identifiers/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Casting-out-nines b/Lang/Pluto/Casting-out-nines
new file mode 120000
index 0000000000..f9d2b5090f
--- /dev/null
+++ b/Lang/Pluto/Casting-out-nines
@@ -0,0 +1 @@
+../../Task/Casting-out-nines/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Collections b/Lang/Pluto/Collections
new file mode 120000
index 0000000000..82a2dd2b4f
--- /dev/null
+++ b/Lang/Pluto/Collections
@@ -0,0 +1 @@
+../../Task/Collections/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Combinations b/Lang/Pluto/Combinations
new file mode 120000
index 0000000000..1554032a2c
--- /dev/null
+++ b/Lang/Pluto/Combinations
@@ -0,0 +1 @@
+../../Task/Combinations/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Combinations-with-repetitions b/Lang/Pluto/Combinations-with-repetitions
new file mode 120000
index 0000000000..27271a521e
--- /dev/null
+++ b/Lang/Pluto/Combinations-with-repetitions
@@ -0,0 +1 @@
+../../Task/Combinations-with-repetitions/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Command-line-arguments b/Lang/Pluto/Command-line-arguments
new file mode 120000
index 0000000000..0f5f02829e
--- /dev/null
+++ b/Lang/Pluto/Command-line-arguments
@@ -0,0 +1 @@
+../../Task/Command-line-arguments/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Comments b/Lang/Pluto/Comments
new file mode 120000
index 0000000000..8d1e636123
--- /dev/null
+++ b/Lang/Pluto/Comments
@@ -0,0 +1 @@
+../../Task/Comments/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Compare-length-of-two-strings b/Lang/Pluto/Compare-length-of-two-strings
new file mode 120000
index 0000000000..a17ca1cb1f
--- /dev/null
+++ b/Lang/Pluto/Compare-length-of-two-strings
@@ -0,0 +1 @@
+../../Task/Compare-length-of-two-strings/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Compiler-lexical-analyzer b/Lang/Pluto/Compiler-lexical-analyzer
new file mode 120000
index 0000000000..0e5b3d7d41
--- /dev/null
+++ b/Lang/Pluto/Compiler-lexical-analyzer
@@ -0,0 +1 @@
+../../Task/Compiler-lexical-analyzer/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Conditional-structures b/Lang/Pluto/Conditional-structures
new file mode 120000
index 0000000000..480797a688
--- /dev/null
+++ b/Lang/Pluto/Conditional-structures
@@ -0,0 +1 @@
+../../Task/Conditional-structures/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Continued-fraction-Arithmetic-Construct-from-rational-number b/Lang/Pluto/Continued-fraction-Arithmetic-Construct-from-rational-number
new file mode 120000
index 0000000000..4207df96c4
--- /dev/null
+++ b/Lang/Pluto/Continued-fraction-Arithmetic-Construct-from-rational-number
@@ -0,0 +1 @@
+../../Task/Continued-fraction-Arithmetic-Construct-from-rational-number/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Convert-decimal-number-to-rational b/Lang/Pluto/Convert-decimal-number-to-rational
new file mode 120000
index 0000000000..67bc18205b
--- /dev/null
+++ b/Lang/Pluto/Convert-decimal-number-to-rational
@@ -0,0 +1 @@
+../../Task/Convert-decimal-number-to-rational/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Count-in-octal b/Lang/Pluto/Count-in-octal
new file mode 120000
index 0000000000..c5624def8e
--- /dev/null
+++ b/Lang/Pluto/Count-in-octal
@@ -0,0 +1 @@
+../../Task/Count-in-octal/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Count-the-coins b/Lang/Pluto/Count-the-coins
new file mode 120000
index 0000000000..7996299523
--- /dev/null
+++ b/Lang/Pluto/Count-the-coins
@@ -0,0 +1 @@
+../../Task/Count-the-coins/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Create-a-file b/Lang/Pluto/Create-a-file
new file mode 120000
index 0000000000..1e22b0b1e3
--- /dev/null
+++ b/Lang/Pluto/Create-a-file
@@ -0,0 +1 @@
+../../Task/Create-a-file/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Currying b/Lang/Pluto/Currying
new file mode 120000
index 0000000000..98e5282551
--- /dev/null
+++ b/Lang/Pluto/Currying
@@ -0,0 +1 @@
+../../Task/Currying/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Delete-a-file b/Lang/Pluto/Delete-a-file
new file mode 120000
index 0000000000..b17ce9999b
--- /dev/null
+++ b/Lang/Pluto/Delete-a-file
@@ -0,0 +1 @@
+../../Task/Delete-a-file/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Descending-primes b/Lang/Pluto/Descending-primes
new file mode 120000
index 0000000000..c35e1667b5
--- /dev/null
+++ b/Lang/Pluto/Descending-primes
@@ -0,0 +1 @@
+../../Task/Descending-primes/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Determine-if-a-string-is-numeric b/Lang/Pluto/Determine-if-a-string-is-numeric
new file mode 120000
index 0000000000..f3177e5d6e
--- /dev/null
+++ b/Lang/Pluto/Determine-if-a-string-is-numeric
@@ -0,0 +1 @@
+../../Task/Determine-if-a-string-is-numeric/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Disarium-numbers b/Lang/Pluto/Disarium-numbers
new file mode 120000
index 0000000000..fd659f8581
--- /dev/null
+++ b/Lang/Pluto/Disarium-numbers
@@ -0,0 +1 @@
+../../Task/Disarium-numbers/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Display-a-linear-combination b/Lang/Pluto/Display-a-linear-combination
new file mode 120000
index 0000000000..b9e618e087
--- /dev/null
+++ b/Lang/Pluto/Display-a-linear-combination
@@ -0,0 +1 @@
+../../Task/Display-a-linear-combination/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Distribution-of-0-digits-in-factorial-series b/Lang/Pluto/Distribution-of-0-digits-in-factorial-series
new file mode 120000
index 0000000000..a06ffa876b
--- /dev/null
+++ b/Lang/Pluto/Distribution-of-0-digits-in-factorial-series
@@ -0,0 +1 @@
+../../Task/Distribution-of-0-digits-in-factorial-series/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Doubly-linked-list-Definition b/Lang/Pluto/Doubly-linked-list-Definition
new file mode 120000
index 0000000000..2c673acc7c
--- /dev/null
+++ b/Lang/Pluto/Doubly-linked-list-Definition
@@ -0,0 +1 @@
+../../Task/Doubly-linked-list-Definition/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Doubly-linked-list-Element-definition b/Lang/Pluto/Doubly-linked-list-Element-definition
new file mode 120000
index 0000000000..7b2f1839e3
--- /dev/null
+++ b/Lang/Pluto/Doubly-linked-list-Element-definition
@@ -0,0 +1 @@
+../../Task/Doubly-linked-list-Element-definition/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Doubly-linked-list-Traversal b/Lang/Pluto/Doubly-linked-list-Traversal
new file mode 120000
index 0000000000..9a9262d67b
--- /dev/null
+++ b/Lang/Pluto/Doubly-linked-list-Traversal
@@ -0,0 +1 @@
+../../Task/Doubly-linked-list-Traversal/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Dutch-national-flag-problem b/Lang/Pluto/Dutch-national-flag-problem
new file mode 120000
index 0000000000..4ca6eb0344
--- /dev/null
+++ b/Lang/Pluto/Dutch-national-flag-problem
@@ -0,0 +1 @@
+../../Task/Dutch-national-flag-problem/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Euler-method b/Lang/Pluto/Euler-method
new file mode 120000
index 0000000000..b7dbfe93a0
--- /dev/null
+++ b/Lang/Pluto/Euler-method
@@ -0,0 +1 @@
+../../Task/Euler-method/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Eulers-identity b/Lang/Pluto/Eulers-identity
new file mode 120000
index 0000000000..97a4ba8ed8
--- /dev/null
+++ b/Lang/Pluto/Eulers-identity
@@ -0,0 +1 @@
+../../Task/Eulers-identity/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Even-or-odd b/Lang/Pluto/Even-or-odd
new file mode 120000
index 0000000000..fc5cc6a785
--- /dev/null
+++ b/Lang/Pluto/Even-or-odd
@@ -0,0 +1 @@
+../../Task/Even-or-odd/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Execute-a-system-command b/Lang/Pluto/Execute-a-system-command
new file mode 120000
index 0000000000..005fc83a4b
--- /dev/null
+++ b/Lang/Pluto/Execute-a-system-command
@@ -0,0 +1 @@
+../../Task/Execute-a-system-command/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Factorial b/Lang/Pluto/Factorial
new file mode 120000
index 0000000000..26b76cb13d
--- /dev/null
+++ b/Lang/Pluto/Factorial
@@ -0,0 +1 @@
+../../Task/Factorial/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Factorial-primes b/Lang/Pluto/Factorial-primes
new file mode 120000
index 0000000000..b57eac84ac
--- /dev/null
+++ b/Lang/Pluto/Factorial-primes
@@ -0,0 +1 @@
+../../Task/Factorial-primes/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Factorions b/Lang/Pluto/Factorions
new file mode 120000
index 0000000000..0d6fdce25f
--- /dev/null
+++ b/Lang/Pluto/Factorions
@@ -0,0 +1 @@
+../../Task/Factorions/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Factors-of-an-integer b/Lang/Pluto/Factors-of-an-integer
new file mode 120000
index 0000000000..cc13f27676
--- /dev/null
+++ b/Lang/Pluto/Factors-of-an-integer
@@ -0,0 +1 @@
+../../Task/Factors-of-an-integer/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Farey-sequence b/Lang/Pluto/Farey-sequence
new file mode 120000
index 0000000000..d29c19b41e
--- /dev/null
+++ b/Lang/Pluto/Farey-sequence
@@ -0,0 +1 @@
+../../Task/Farey-sequence/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Feigenbaum-constant-calculation b/Lang/Pluto/Feigenbaum-constant-calculation
new file mode 120000
index 0000000000..256bf8cb19
--- /dev/null
+++ b/Lang/Pluto/Feigenbaum-constant-calculation
@@ -0,0 +1 @@
+../../Task/Feigenbaum-constant-calculation/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Fibonacci-sequence b/Lang/Pluto/Fibonacci-sequence
new file mode 120000
index 0000000000..efff8e1eb6
--- /dev/null
+++ b/Lang/Pluto/Fibonacci-sequence
@@ -0,0 +1 @@
+../../Task/Fibonacci-sequence/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Filter b/Lang/Pluto/Filter
new file mode 120000
index 0000000000..98b0321ee6
--- /dev/null
+++ b/Lang/Pluto/Filter
@@ -0,0 +1 @@
+../../Task/Filter/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/FizzBuzz b/Lang/Pluto/FizzBuzz
new file mode 120000
index 0000000000..bd54d0d8bb
--- /dev/null
+++ b/Lang/Pluto/FizzBuzz
@@ -0,0 +1 @@
+../../Task/FizzBuzz/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Floyd-Warshall-algorithm b/Lang/Pluto/Floyd-Warshall-algorithm
new file mode 120000
index 0000000000..7df2d45291
--- /dev/null
+++ b/Lang/Pluto/Floyd-Warshall-algorithm
@@ -0,0 +1 @@
+../../Task/Floyd-Warshall-algorithm/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Formatted-numeric-output b/Lang/Pluto/Formatted-numeric-output
new file mode 120000
index 0000000000..ca4bc2e2c0
--- /dev/null
+++ b/Lang/Pluto/Formatted-numeric-output
@@ -0,0 +1 @@
+../../Task/Formatted-numeric-output/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Function-definition b/Lang/Pluto/Function-definition
new file mode 120000
index 0000000000..8c3e064f65
--- /dev/null
+++ b/Lang/Pluto/Function-definition
@@ -0,0 +1 @@
+../../Task/Function-definition/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Gamma-function b/Lang/Pluto/Gamma-function
new file mode 120000
index 0000000000..8b7dee23dc
--- /dev/null
+++ b/Lang/Pluto/Gamma-function
@@ -0,0 +1 @@
+../../Task/Gamma-function/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Generate-lower-case-ASCII-alphabet b/Lang/Pluto/Generate-lower-case-ASCII-alphabet
new file mode 120000
index 0000000000..64f2576fe0
--- /dev/null
+++ b/Lang/Pluto/Generate-lower-case-ASCII-alphabet
@@ -0,0 +1 @@
+../../Task/Generate-lower-case-ASCII-alphabet/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Giuga-numbers b/Lang/Pluto/Giuga-numbers
new file mode 120000
index 0000000000..221b7a2689
--- /dev/null
+++ b/Lang/Pluto/Giuga-numbers
@@ -0,0 +1 @@
+../../Task/Giuga-numbers/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Goldbachs-comet b/Lang/Pluto/Goldbachs-comet
new file mode 120000
index 0000000000..ff1cca329d
--- /dev/null
+++ b/Lang/Pluto/Goldbachs-comet
@@ -0,0 +1 @@
+../../Task/Goldbachs-comet/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Greatest-common-divisor b/Lang/Pluto/Greatest-common-divisor
new file mode 120000
index 0000000000..a4feeee2fd
--- /dev/null
+++ b/Lang/Pluto/Greatest-common-divisor
@@ -0,0 +1 @@
+../../Task/Greatest-common-divisor/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Greatest-element-of-a-list b/Lang/Pluto/Greatest-element-of-a-list
new file mode 120000
index 0000000000..85148f8e2b
--- /dev/null
+++ b/Lang/Pluto/Greatest-element-of-a-list
@@ -0,0 +1 @@
+../../Task/Greatest-element-of-a-list/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Hailstone-sequence b/Lang/Pluto/Hailstone-sequence
new file mode 120000
index 0000000000..0c70c36e8a
--- /dev/null
+++ b/Lang/Pluto/Hailstone-sequence
@@ -0,0 +1 @@
+../../Task/Hailstone-sequence/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Halt-and-catch-fire b/Lang/Pluto/Halt-and-catch-fire
new file mode 120000
index 0000000000..f8e69baccf
--- /dev/null
+++ b/Lang/Pluto/Halt-and-catch-fire
@@ -0,0 +1 @@
+../../Task/Halt-and-catch-fire/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Hash-from-two-arrays b/Lang/Pluto/Hash-from-two-arrays
new file mode 120000
index 0000000000..5612dbf1a3
--- /dev/null
+++ b/Lang/Pluto/Hash-from-two-arrays
@@ -0,0 +1 @@
+../../Task/Hash-from-two-arrays/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Hello-world-Newline-omission b/Lang/Pluto/Hello-world-Newline-omission
new file mode 120000
index 0000000000..5020503885
--- /dev/null
+++ b/Lang/Pluto/Hello-world-Newline-omission
@@ -0,0 +1 @@
+../../Task/Hello-world-Newline-omission/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Hello-world-Standard-error b/Lang/Pluto/Hello-world-Standard-error
new file mode 120000
index 0000000000..2b41d962cc
--- /dev/null
+++ b/Lang/Pluto/Hello-world-Standard-error
@@ -0,0 +1 @@
+../../Task/Hello-world-Standard-error/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Hello-world-Text b/Lang/Pluto/Hello-world-Text
new file mode 120000
index 0000000000..6d5bb1406f
--- /dev/null
+++ b/Lang/Pluto/Hello-world-Text
@@ -0,0 +1 @@
+../../Task/Hello-world-Text/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Higher-order-functions b/Lang/Pluto/Higher-order-functions
new file mode 120000
index 0000000000..532e183ee0
--- /dev/null
+++ b/Lang/Pluto/Higher-order-functions
@@ -0,0 +1 @@
+../../Task/Higher-order-functions/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Horners-rule-for-polynomial-evaluation b/Lang/Pluto/Horners-rule-for-polynomial-evaluation
new file mode 120000
index 0000000000..02512d6f7e
--- /dev/null
+++ b/Lang/Pluto/Horners-rule-for-polynomial-evaluation
@@ -0,0 +1 @@
+../../Task/Horners-rule-for-polynomial-evaluation/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Humble-numbers b/Lang/Pluto/Humble-numbers
new file mode 120000
index 0000000000..f616a12fe9
--- /dev/null
+++ b/Lang/Pluto/Humble-numbers
@@ -0,0 +1 @@
+../../Task/Humble-numbers/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Increment-a-numerical-string b/Lang/Pluto/Increment-a-numerical-string
new file mode 120000
index 0000000000..5413743d7c
--- /dev/null
+++ b/Lang/Pluto/Increment-a-numerical-string
@@ -0,0 +1 @@
+../../Task/Increment-a-numerical-string/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Infinity b/Lang/Pluto/Infinity
new file mode 120000
index 0000000000..cb81bde8e2
--- /dev/null
+++ b/Lang/Pluto/Infinity
@@ -0,0 +1 @@
+../../Task/Infinity/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/JSON b/Lang/Pluto/JSON
new file mode 120000
index 0000000000..bc77142a3f
--- /dev/null
+++ b/Lang/Pluto/JSON
@@ -0,0 +1 @@
+../../Task/JSON/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Jacobsthal-numbers b/Lang/Pluto/Jacobsthal-numbers
new file mode 120000
index 0000000000..310c137dfd
--- /dev/null
+++ b/Lang/Pluto/Jacobsthal-numbers
@@ -0,0 +1 @@
+../../Task/Jacobsthal-numbers/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Jewels-and-stones b/Lang/Pluto/Jewels-and-stones
new file mode 120000
index 0000000000..0d8632e132
--- /dev/null
+++ b/Lang/Pluto/Jewels-and-stones
@@ -0,0 +1 @@
+../../Task/Jewels-and-stones/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Josephus-problem b/Lang/Pluto/Josephus-problem
new file mode 120000
index 0000000000..c17c5c052c
--- /dev/null
+++ b/Lang/Pluto/Josephus-problem
@@ -0,0 +1 @@
+../../Task/Josephus-problem/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Kaprekar-numbers b/Lang/Pluto/Kaprekar-numbers
new file mode 120000
index 0000000000..1c32b1316d
--- /dev/null
+++ b/Lang/Pluto/Kaprekar-numbers
@@ -0,0 +1 @@
+../../Task/Kaprekar-numbers/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Leap-year b/Lang/Pluto/Leap-year
new file mode 120000
index 0000000000..9574544885
--- /dev/null
+++ b/Lang/Pluto/Leap-year
@@ -0,0 +1 @@
+../../Task/Leap-year/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Literals-Floating-point b/Lang/Pluto/Literals-Floating-point
new file mode 120000
index 0000000000..f40aa2eb22
--- /dev/null
+++ b/Lang/Pluto/Literals-Floating-point
@@ -0,0 +1 @@
+../../Task/Literals-Floating-point/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Literals-Integer b/Lang/Pluto/Literals-Integer
new file mode 120000
index 0000000000..2ca0134201
--- /dev/null
+++ b/Lang/Pluto/Literals-Integer
@@ -0,0 +1 @@
+../../Task/Literals-Integer/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Loop-over-multiple-arrays-simultaneously b/Lang/Pluto/Loop-over-multiple-arrays-simultaneously
new file mode 120000
index 0000000000..cebc902b5b
--- /dev/null
+++ b/Lang/Pluto/Loop-over-multiple-arrays-simultaneously
@@ -0,0 +1 @@
+../../Task/Loop-over-multiple-arrays-simultaneously/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Loops-Break b/Lang/Pluto/Loops-Break
new file mode 120000
index 0000000000..2b3657d2de
--- /dev/null
+++ b/Lang/Pluto/Loops-Break
@@ -0,0 +1 @@
+../../Task/Loops-Break/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Loops-Continue b/Lang/Pluto/Loops-Continue
new file mode 120000
index 0000000000..5f41db6125
--- /dev/null
+++ b/Lang/Pluto/Loops-Continue
@@ -0,0 +1 @@
+../../Task/Loops-Continue/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Loops-Do-while b/Lang/Pluto/Loops-Do-while
new file mode 120000
index 0000000000..a265d4decf
--- /dev/null
+++ b/Lang/Pluto/Loops-Do-while
@@ -0,0 +1 @@
+../../Task/Loops-Do-while/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Loops-Downward-for b/Lang/Pluto/Loops-Downward-for
new file mode 120000
index 0000000000..6302a5cc0d
--- /dev/null
+++ b/Lang/Pluto/Loops-Downward-for
@@ -0,0 +1 @@
+../../Task/Loops-Downward-for/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Loops-For b/Lang/Pluto/Loops-For
new file mode 120000
index 0000000000..9f83ae12bd
--- /dev/null
+++ b/Lang/Pluto/Loops-For
@@ -0,0 +1 @@
+../../Task/Loops-For/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Loops-For-with-a-specified-step b/Lang/Pluto/Loops-For-with-a-specified-step
new file mode 120000
index 0000000000..508122a2e3
--- /dev/null
+++ b/Lang/Pluto/Loops-For-with-a-specified-step
@@ -0,0 +1 @@
+../../Task/Loops-For-with-a-specified-step/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Loops-Foreach b/Lang/Pluto/Loops-Foreach
new file mode 120000
index 0000000000..9dbfba413e
--- /dev/null
+++ b/Lang/Pluto/Loops-Foreach
@@ -0,0 +1 @@
+../../Task/Loops-Foreach/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Loops-Increment-loop-index-within-loop-body b/Lang/Pluto/Loops-Increment-loop-index-within-loop-body
new file mode 120000
index 0000000000..f1ce9d6778
--- /dev/null
+++ b/Lang/Pluto/Loops-Increment-loop-index-within-loop-body
@@ -0,0 +1 @@
+../../Task/Loops-Increment-loop-index-within-loop-body/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Loops-Infinite b/Lang/Pluto/Loops-Infinite
new file mode 120000
index 0000000000..50986dd414
--- /dev/null
+++ b/Lang/Pluto/Loops-Infinite
@@ -0,0 +1 @@
+../../Task/Loops-Infinite/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Loops-N-plus-one-half b/Lang/Pluto/Loops-N-plus-one-half
new file mode 120000
index 0000000000..433e3f6336
--- /dev/null
+++ b/Lang/Pluto/Loops-N-plus-one-half
@@ -0,0 +1 @@
+../../Task/Loops-N-plus-one-half/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Loops-Nested b/Lang/Pluto/Loops-Nested
new file mode 120000
index 0000000000..96f4c43c62
--- /dev/null
+++ b/Lang/Pluto/Loops-Nested
@@ -0,0 +1 @@
+../../Task/Loops-Nested/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Loops-While b/Lang/Pluto/Loops-While
new file mode 120000
index 0000000000..3aa5f84aba
--- /dev/null
+++ b/Lang/Pluto/Loops-While
@@ -0,0 +1 @@
+../../Task/Loops-While/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Loops-With-multiple-ranges b/Lang/Pluto/Loops-With-multiple-ranges
new file mode 120000
index 0000000000..b1ef3af096
--- /dev/null
+++ b/Lang/Pluto/Loops-With-multiple-ranges
@@ -0,0 +1 @@
+../../Task/Loops-With-multiple-ranges/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Loops-Wrong-ranges b/Lang/Pluto/Loops-Wrong-ranges
new file mode 120000
index 0000000000..7b8bd4ecb0
--- /dev/null
+++ b/Lang/Pluto/Loops-Wrong-ranges
@@ -0,0 +1 @@
+../../Task/Loops-Wrong-ranges/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Luhn-test-of-credit-card-numbers b/Lang/Pluto/Luhn-test-of-credit-card-numbers
new file mode 120000
index 0000000000..c06ed72be3
--- /dev/null
+++ b/Lang/Pluto/Luhn-test-of-credit-card-numbers
@@ -0,0 +1 @@
+../../Task/Luhn-test-of-credit-card-numbers/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/M-bius-function b/Lang/Pluto/M-bius-function
new file mode 120000
index 0000000000..99da13a437
--- /dev/null
+++ b/Lang/Pluto/M-bius-function
@@ -0,0 +1 @@
+../../Task/M-bius-function/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Machine-code b/Lang/Pluto/Machine-code
new file mode 120000
index 0000000000..82c80d52fd
--- /dev/null
+++ b/Lang/Pluto/Machine-code
@@ -0,0 +1 @@
+../../Task/Machine-code/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Magic-squares-of-doubly-even-order b/Lang/Pluto/Magic-squares-of-doubly-even-order
new file mode 120000
index 0000000000..357d3e5480
--- /dev/null
+++ b/Lang/Pluto/Magic-squares-of-doubly-even-order
@@ -0,0 +1 @@
+../../Task/Magic-squares-of-doubly-even-order/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Magic-squares-of-odd-order b/Lang/Pluto/Magic-squares-of-odd-order
new file mode 120000
index 0000000000..5df4846612
--- /dev/null
+++ b/Lang/Pluto/Magic-squares-of-odd-order
@@ -0,0 +1 @@
+../../Task/Magic-squares-of-odd-order/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Magic-squares-of-singly-even-order b/Lang/Pluto/Magic-squares-of-singly-even-order
new file mode 120000
index 0000000000..2430b82023
--- /dev/null
+++ b/Lang/Pluto/Magic-squares-of-singly-even-order
@@ -0,0 +1 @@
+../../Task/Magic-squares-of-singly-even-order/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Mian-Chowla-sequence b/Lang/Pluto/Mian-Chowla-sequence
new file mode 120000
index 0000000000..f966e85ca5
--- /dev/null
+++ b/Lang/Pluto/Mian-Chowla-sequence
@@ -0,0 +1 @@
+../../Task/Mian-Chowla-sequence/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Modular-inverse b/Lang/Pluto/Modular-inverse
new file mode 120000
index 0000000000..339ad0f426
--- /dev/null
+++ b/Lang/Pluto/Modular-inverse
@@ -0,0 +1 @@
+../../Task/Modular-inverse/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Multiplication-tables b/Lang/Pluto/Multiplication-tables
new file mode 120000
index 0000000000..98a4d7bd3c
--- /dev/null
+++ b/Lang/Pluto/Multiplication-tables
@@ -0,0 +1 @@
+../../Task/Multiplication-tables/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Mutual-recursion b/Lang/Pluto/Mutual-recursion
new file mode 120000
index 0000000000..3866a9925a
--- /dev/null
+++ b/Lang/Pluto/Mutual-recursion
@@ -0,0 +1 @@
+../../Task/Mutual-recursion/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Named-parameters b/Lang/Pluto/Named-parameters
new file mode 120000
index 0000000000..8f0b72ba9b
--- /dev/null
+++ b/Lang/Pluto/Named-parameters
@@ -0,0 +1 @@
+../../Task/Named-parameters/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Narcissistic-decimal-number b/Lang/Pluto/Narcissistic-decimal-number
new file mode 120000
index 0000000000..feead3c3a0
--- /dev/null
+++ b/Lang/Pluto/Narcissistic-decimal-number
@@ -0,0 +1 @@
+../../Task/Narcissistic-decimal-number/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Nested-templated-data b/Lang/Pluto/Nested-templated-data
new file mode 120000
index 0000000000..d56f50a5d8
--- /dev/null
+++ b/Lang/Pluto/Nested-templated-data
@@ -0,0 +1 @@
+../../Task/Nested-templated-data/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Non-decimal-radices-Convert b/Lang/Pluto/Non-decimal-radices-Convert
new file mode 120000
index 0000000000..e1fddc5a20
--- /dev/null
+++ b/Lang/Pluto/Non-decimal-radices-Convert
@@ -0,0 +1 @@
+../../Task/Non-decimal-radices-Convert/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Numerical-integration b/Lang/Pluto/Numerical-integration
new file mode 120000
index 0000000000..e89c1b753a
--- /dev/null
+++ b/Lang/Pluto/Numerical-integration
@@ -0,0 +1 @@
+../../Task/Numerical-integration/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Old-Russian-measure-of-length b/Lang/Pluto/Old-Russian-measure-of-length
new file mode 120000
index 0000000000..9f7493d0af
--- /dev/null
+++ b/Lang/Pluto/Old-Russian-measure-of-length
@@ -0,0 +1 @@
+../../Task/Old-Russian-measure-of-length/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Order-by-pair-comparisons b/Lang/Pluto/Order-by-pair-comparisons
new file mode 120000
index 0000000000..1c7665f6b2
--- /dev/null
+++ b/Lang/Pluto/Order-by-pair-comparisons
@@ -0,0 +1 @@
+../../Task/Order-by-pair-comparisons/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Palindrome-detection b/Lang/Pluto/Palindrome-detection
new file mode 120000
index 0000000000..755083778a
--- /dev/null
+++ b/Lang/Pluto/Palindrome-detection
@@ -0,0 +1 @@
+../../Task/Palindrome-detection/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Pancake-numbers b/Lang/Pluto/Pancake-numbers
new file mode 120000
index 0000000000..129dac7c77
--- /dev/null
+++ b/Lang/Pluto/Pancake-numbers
@@ -0,0 +1 @@
+../../Task/Pancake-numbers/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Parsing-RPN-calculator-algorithm b/Lang/Pluto/Parsing-RPN-calculator-algorithm
new file mode 120000
index 0000000000..f120a8c76e
--- /dev/null
+++ b/Lang/Pluto/Parsing-RPN-calculator-algorithm
@@ -0,0 +1 @@
+../../Task/Parsing-RPN-calculator-algorithm/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Pascals-triangle-Puzzle b/Lang/Pluto/Pascals-triangle-Puzzle
new file mode 120000
index 0000000000..312b0f9b1b
--- /dev/null
+++ b/Lang/Pluto/Pascals-triangle-Puzzle
@@ -0,0 +1 @@
+../../Task/Pascals-triangle-Puzzle/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Perfect-shuffle b/Lang/Pluto/Perfect-shuffle
new file mode 120000
index 0000000000..1dd4b8c882
--- /dev/null
+++ b/Lang/Pluto/Perfect-shuffle
@@ -0,0 +1 @@
+../../Task/Perfect-shuffle/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Permutations b/Lang/Pluto/Permutations
new file mode 120000
index 0000000000..750604fad2
--- /dev/null
+++ b/Lang/Pluto/Permutations
@@ -0,0 +1 @@
+../../Task/Permutations/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Pernicious-numbers b/Lang/Pluto/Pernicious-numbers
new file mode 120000
index 0000000000..29e4a1f27e
--- /dev/null
+++ b/Lang/Pluto/Pernicious-numbers
@@ -0,0 +1 @@
+../../Task/Pernicious-numbers/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Pick-random-element b/Lang/Pluto/Pick-random-element
new file mode 120000
index 0000000000..f181e160e5
--- /dev/null
+++ b/Lang/Pluto/Pick-random-element
@@ -0,0 +1 @@
+../../Task/Pick-random-element/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Pisano-period b/Lang/Pluto/Pisano-period
new file mode 120000
index 0000000000..377c8913e0
--- /dev/null
+++ b/Lang/Pluto/Pisano-period
@@ -0,0 +1 @@
+../../Task/Pisano-period/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Power-set b/Lang/Pluto/Power-set
new file mode 120000
index 0000000000..72362c1ec0
--- /dev/null
+++ b/Lang/Pluto/Power-set
@@ -0,0 +1 @@
+../../Task/Power-set/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Primality-by-trial-division b/Lang/Pluto/Primality-by-trial-division
new file mode 120000
index 0000000000..01622c5c43
--- /dev/null
+++ b/Lang/Pluto/Primality-by-trial-division
@@ -0,0 +1 @@
+../../Task/Primality-by-trial-division/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Priority-queue b/Lang/Pluto/Priority-queue
new file mode 120000
index 0000000000..ad7bed4159
--- /dev/null
+++ b/Lang/Pluto/Priority-queue
@@ -0,0 +1 @@
+../../Task/Priority-queue/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Read-a-file-line-by-line b/Lang/Pluto/Read-a-file-line-by-line
new file mode 120000
index 0000000000..d35b8cfbc4
--- /dev/null
+++ b/Lang/Pluto/Read-a-file-line-by-line
@@ -0,0 +1 @@
+../../Task/Read-a-file-line-by-line/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Rename-a-file b/Lang/Pluto/Rename-a-file
new file mode 120000
index 0000000000..dd234bb854
--- /dev/null
+++ b/Lang/Pluto/Rename-a-file
@@ -0,0 +1 @@
+../../Task/Rename-a-file/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Repeat-a-string b/Lang/Pluto/Repeat-a-string
new file mode 120000
index 0000000000..7cea8b7235
--- /dev/null
+++ b/Lang/Pluto/Repeat-a-string
@@ -0,0 +1 @@
+../../Task/Repeat-a-string/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Reverse-a-string b/Lang/Pluto/Reverse-a-string
new file mode 120000
index 0000000000..dc5b2e2493
--- /dev/null
+++ b/Lang/Pluto/Reverse-a-string
@@ -0,0 +1 @@
+../../Task/Reverse-a-string/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Reverse-words-in-a-string b/Lang/Pluto/Reverse-words-in-a-string
new file mode 120000
index 0000000000..378e6ea4b7
--- /dev/null
+++ b/Lang/Pluto/Reverse-words-in-a-string
@@ -0,0 +1 @@
+../../Task/Reverse-words-in-a-string/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Roman-numerals-Encode b/Lang/Pluto/Roman-numerals-Encode
new file mode 120000
index 0000000000..d12a85d68f
--- /dev/null
+++ b/Lang/Pluto/Roman-numerals-Encode
@@ -0,0 +1 @@
+../../Task/Roman-numerals-Encode/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Roots-of-a-quadratic-function b/Lang/Pluto/Roots-of-a-quadratic-function
new file mode 120000
index 0000000000..8e5bf4c688
--- /dev/null
+++ b/Lang/Pluto/Roots-of-a-quadratic-function
@@ -0,0 +1 @@
+../../Task/Roots-of-a-quadratic-function/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Roots-of-unity b/Lang/Pluto/Roots-of-unity
new file mode 120000
index 0000000000..e0f1ada438
--- /dev/null
+++ b/Lang/Pluto/Roots-of-unity
@@ -0,0 +1 @@
+../../Task/Roots-of-unity/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Rot-13 b/Lang/Pluto/Rot-13
new file mode 120000
index 0000000000..ca2ef70221
--- /dev/null
+++ b/Lang/Pluto/Rot-13
@@ -0,0 +1 @@
+../../Task/Rot-13/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Runge-Kutta-method b/Lang/Pluto/Runge-Kutta-method
new file mode 120000
index 0000000000..1f412f01e7
--- /dev/null
+++ b/Lang/Pluto/Runge-Kutta-method
@@ -0,0 +1 @@
+../../Task/Runge-Kutta-method/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Self-numbers b/Lang/Pluto/Self-numbers
new file mode 120000
index 0000000000..6ddaee76e3
--- /dev/null
+++ b/Lang/Pluto/Self-numbers
@@ -0,0 +1 @@
+../../Task/Self-numbers/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Semordnilap b/Lang/Pluto/Semordnilap
new file mode 120000
index 0000000000..92f96e5b0c
--- /dev/null
+++ b/Lang/Pluto/Semordnilap
@@ -0,0 +1 @@
+../../Task/Semordnilap/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Sequence-of-primes-by-trial-division b/Lang/Pluto/Sequence-of-primes-by-trial-division
new file mode 120000
index 0000000000..0a541cb28c
--- /dev/null
+++ b/Lang/Pluto/Sequence-of-primes-by-trial-division
@@ -0,0 +1 @@
+../../Task/Sequence-of-primes-by-trial-division/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Set b/Lang/Pluto/Set
new file mode 120000
index 0000000000..9bbe04e32f
--- /dev/null
+++ b/Lang/Pluto/Set
@@ -0,0 +1 @@
+../../Task/Set/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Set-consolidation b/Lang/Pluto/Set-consolidation
new file mode 120000
index 0000000000..af203f8560
--- /dev/null
+++ b/Lang/Pluto/Set-consolidation
@@ -0,0 +1 @@
+../../Task/Set-consolidation/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Singly-linked-list-Element-definition b/Lang/Pluto/Singly-linked-list-Element-definition
new file mode 120000
index 0000000000..1f46e7b961
--- /dev/null
+++ b/Lang/Pluto/Singly-linked-list-Element-definition
@@ -0,0 +1 @@
+../../Task/Singly-linked-list-Element-definition/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Singly-linked-list-Element-insertion b/Lang/Pluto/Singly-linked-list-Element-insertion
new file mode 120000
index 0000000000..27b69c63f5
--- /dev/null
+++ b/Lang/Pluto/Singly-linked-list-Element-insertion
@@ -0,0 +1 @@
+../../Task/Singly-linked-list-Element-insertion/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Singly-linked-list-Traversal b/Lang/Pluto/Singly-linked-list-Traversal
new file mode 120000
index 0000000000..a9f1239636
--- /dev/null
+++ b/Lang/Pluto/Singly-linked-list-Traversal
@@ -0,0 +1 @@
+../../Task/Singly-linked-list-Traversal/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Sleep b/Lang/Pluto/Sleep
new file mode 120000
index 0000000000..fe338781ff
--- /dev/null
+++ b/Lang/Pluto/Sleep
@@ -0,0 +1 @@
+../../Task/Sleep/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Smarandache-prime-digital-sequence b/Lang/Pluto/Smarandache-prime-digital-sequence
new file mode 120000
index 0000000000..c1bae0f65e
--- /dev/null
+++ b/Lang/Pluto/Smarandache-prime-digital-sequence
@@ -0,0 +1 @@
+../../Task/Smarandache-prime-digital-sequence/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Soloways-recurring-rainfall b/Lang/Pluto/Soloways-recurring-rainfall
new file mode 120000
index 0000000000..3292890eaf
--- /dev/null
+++ b/Lang/Pluto/Soloways-recurring-rainfall
@@ -0,0 +1 @@
+../../Task/Soloways-recurring-rainfall/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Sort-an-integer-array b/Lang/Pluto/Sort-an-integer-array
new file mode 120000
index 0000000000..43fcfc8222
--- /dev/null
+++ b/Lang/Pluto/Sort-an-integer-array
@@ -0,0 +1 @@
+../../Task/Sort-an-integer-array/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Stack b/Lang/Pluto/Stack
new file mode 120000
index 0000000000..b73a91dd58
--- /dev/null
+++ b/Lang/Pluto/Stack
@@ -0,0 +1 @@
+../../Task/Stack/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/String-interpolation-included- b/Lang/Pluto/String-interpolation-included-
new file mode 120000
index 0000000000..7953b3790b
--- /dev/null
+++ b/Lang/Pluto/String-interpolation-included-
@@ -0,0 +1 @@
+../../Task/String-interpolation-included-/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/String-length b/Lang/Pluto/String-length
new file mode 120000
index 0000000000..9313ae7886
--- /dev/null
+++ b/Lang/Pluto/String-length
@@ -0,0 +1 @@
+../../Task/String-length/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Sum-digits-of-an-integer b/Lang/Pluto/Sum-digits-of-an-integer
new file mode 120000
index 0000000000..0c6a6782ed
--- /dev/null
+++ b/Lang/Pluto/Sum-digits-of-an-integer
@@ -0,0 +1 @@
+../../Task/Sum-digits-of-an-integer/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Sum-of-elements-below-main-diagonal-of-matrix b/Lang/Pluto/Sum-of-elements-below-main-diagonal-of-matrix
new file mode 120000
index 0000000000..45a9f51475
--- /dev/null
+++ b/Lang/Pluto/Sum-of-elements-below-main-diagonal-of-matrix
@@ -0,0 +1 @@
+../../Task/Sum-of-elements-below-main-diagonal-of-matrix/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Symmetric-difference b/Lang/Pluto/Symmetric-difference
new file mode 120000
index 0000000000..09ce1d13b8
--- /dev/null
+++ b/Lang/Pluto/Symmetric-difference
@@ -0,0 +1 @@
+../../Task/Symmetric-difference/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/System-time b/Lang/Pluto/System-time
new file mode 120000
index 0000000000..8575dc8b3a
--- /dev/null
+++ b/Lang/Pluto/System-time
@@ -0,0 +1 @@
+../../Task/System-time/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Tau-function b/Lang/Pluto/Tau-function
new file mode 120000
index 0000000000..03b50006f6
--- /dev/null
+++ b/Lang/Pluto/Tau-function
@@ -0,0 +1 @@
+../../Task/Tau-function/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Tau-number b/Lang/Pluto/Tau-number
new file mode 120000
index 0000000000..532021c510
--- /dev/null
+++ b/Lang/Pluto/Tau-number
@@ -0,0 +1 @@
+../../Task/Tau-number/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Terminal-control-Clear-the-screen b/Lang/Pluto/Terminal-control-Clear-the-screen
new file mode 120000
index 0000000000..edabc9ce73
--- /dev/null
+++ b/Lang/Pluto/Terminal-control-Clear-the-screen
@@ -0,0 +1 @@
+../../Task/Terminal-control-Clear-the-screen/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Terminal-control-Coloured-text b/Lang/Pluto/Terminal-control-Coloured-text
new file mode 120000
index 0000000000..378909157d
--- /dev/null
+++ b/Lang/Pluto/Terminal-control-Coloured-text
@@ -0,0 +1 @@
+../../Task/Terminal-control-Coloured-text/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Terminal-control-Cursor-movement b/Lang/Pluto/Terminal-control-Cursor-movement
new file mode 120000
index 0000000000..bf8c8572a2
--- /dev/null
+++ b/Lang/Pluto/Terminal-control-Cursor-movement
@@ -0,0 +1 @@
+../../Task/Terminal-control-Cursor-movement/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Terminal-control-Cursor-positioning b/Lang/Pluto/Terminal-control-Cursor-positioning
new file mode 120000
index 0000000000..feeca5cd4b
--- /dev/null
+++ b/Lang/Pluto/Terminal-control-Cursor-positioning
@@ -0,0 +1 @@
+../../Task/Terminal-control-Cursor-positioning/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Terminal-control-Dimensions b/Lang/Pluto/Terminal-control-Dimensions
new file mode 120000
index 0000000000..79b01b1a8a
--- /dev/null
+++ b/Lang/Pluto/Terminal-control-Dimensions
@@ -0,0 +1 @@
+../../Task/Terminal-control-Dimensions/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Terminal-control-Display-an-extended-character b/Lang/Pluto/Terminal-control-Display-an-extended-character
new file mode 120000
index 0000000000..d9f4ec60f5
--- /dev/null
+++ b/Lang/Pluto/Terminal-control-Display-an-extended-character
@@ -0,0 +1 @@
+../../Task/Terminal-control-Display-an-extended-character/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Terminal-control-Hiding-the-cursor b/Lang/Pluto/Terminal-control-Hiding-the-cursor
new file mode 120000
index 0000000000..5126fbbc31
--- /dev/null
+++ b/Lang/Pluto/Terminal-control-Hiding-the-cursor
@@ -0,0 +1 @@
+../../Task/Terminal-control-Hiding-the-cursor/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Terminal-control-Inverse-video b/Lang/Pluto/Terminal-control-Inverse-video
new file mode 120000
index 0000000000..a011de6856
--- /dev/null
+++ b/Lang/Pluto/Terminal-control-Inverse-video
@@ -0,0 +1 @@
+../../Task/Terminal-control-Inverse-video/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Terminal-control-Preserve-screen b/Lang/Pluto/Terminal-control-Preserve-screen
new file mode 120000
index 0000000000..4985e385ae
--- /dev/null
+++ b/Lang/Pluto/Terminal-control-Preserve-screen
@@ -0,0 +1 @@
+../../Task/Terminal-control-Preserve-screen/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Terminal-control-Ringing-the-terminal-bell b/Lang/Pluto/Terminal-control-Ringing-the-terminal-bell
new file mode 120000
index 0000000000..c14ff1f9fd
--- /dev/null
+++ b/Lang/Pluto/Terminal-control-Ringing-the-terminal-bell
@@ -0,0 +1 @@
+../../Task/Terminal-control-Ringing-the-terminal-bell/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Terminal-control-Unicode-output b/Lang/Pluto/Terminal-control-Unicode-output
new file mode 120000
index 0000000000..c67e68f15d
--- /dev/null
+++ b/Lang/Pluto/Terminal-control-Unicode-output
@@ -0,0 +1 @@
+../../Task/Terminal-control-Unicode-output/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Test-integerness b/Lang/Pluto/Test-integerness
new file mode 120000
index 0000000000..9a3717f805
--- /dev/null
+++ b/Lang/Pluto/Test-integerness
@@ -0,0 +1 @@
+../../Task/Test-integerness/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Time-a-function b/Lang/Pluto/Time-a-function
new file mode 120000
index 0000000000..1ca7d0a7b7
--- /dev/null
+++ b/Lang/Pluto/Time-a-function
@@ -0,0 +1 @@
+../../Task/Time-a-function/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Total-circles-area b/Lang/Pluto/Total-circles-area
new file mode 120000
index 0000000000..2f856ad28d
--- /dev/null
+++ b/Lang/Pluto/Total-circles-area
@@ -0,0 +1 @@
+../../Task/Total-circles-area/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Totient-function b/Lang/Pluto/Totient-function
new file mode 120000
index 0000000000..73b5eb6381
--- /dev/null
+++ b/Lang/Pluto/Totient-function
@@ -0,0 +1 @@
+../../Task/Totient-function/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Towers-of-Hanoi b/Lang/Pluto/Towers-of-Hanoi
new file mode 120000
index 0000000000..9b1428dcf0
--- /dev/null
+++ b/Lang/Pluto/Towers-of-Hanoi
@@ -0,0 +1 @@
+../../Task/Towers-of-Hanoi/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Trabb-Pardo-Knuth-algorithm b/Lang/Pluto/Trabb-Pardo-Knuth-algorithm
new file mode 120000
index 0000000000..e85f9f54de
--- /dev/null
+++ b/Lang/Pluto/Trabb-Pardo-Knuth-algorithm
@@ -0,0 +1 @@
+../../Task/Trabb-Pardo-Knuth-algorithm/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/UPC b/Lang/Pluto/UPC
new file mode 120000
index 0000000000..477e69b6c6
--- /dev/null
+++ b/Lang/Pluto/UPC
@@ -0,0 +1 @@
+../../Task/UPC/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Unicode-strings b/Lang/Pluto/Unicode-strings
new file mode 120000
index 0000000000..482c486148
--- /dev/null
+++ b/Lang/Pluto/Unicode-strings
@@ -0,0 +1 @@
+../../Task/Unicode-strings/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Unprimeable-numbers b/Lang/Pluto/Unprimeable-numbers
new file mode 120000
index 0000000000..ec55975821
--- /dev/null
+++ b/Lang/Pluto/Unprimeable-numbers
@@ -0,0 +1 @@
+../../Task/Unprimeable-numbers/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/User-input-Text b/Lang/Pluto/User-input-Text
new file mode 120000
index 0000000000..6c3afd2860
--- /dev/null
+++ b/Lang/Pluto/User-input-Text
@@ -0,0 +1 @@
+../../Task/User-input-Text/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Van-Eck-sequence b/Lang/Pluto/Van-Eck-sequence
new file mode 120000
index 0000000000..d053bbc892
--- /dev/null
+++ b/Lang/Pluto/Van-Eck-sequence
@@ -0,0 +1 @@
+../../Task/Van-Eck-sequence/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Van-der-Corput-sequence b/Lang/Pluto/Van-der-Corput-sequence
new file mode 120000
index 0000000000..e6ce56ddef
--- /dev/null
+++ b/Lang/Pluto/Van-der-Corput-sequence
@@ -0,0 +1 @@
+../../Task/Van-der-Corput-sequence/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Variadic-function b/Lang/Pluto/Variadic-function
new file mode 120000
index 0000000000..8d2be144f4
--- /dev/null
+++ b/Lang/Pluto/Variadic-function
@@ -0,0 +1 @@
+../../Task/Variadic-function/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Vector b/Lang/Pluto/Vector
new file mode 120000
index 0000000000..fd56d6c8ab
--- /dev/null
+++ b/Lang/Pluto/Vector
@@ -0,0 +1 @@
+../../Task/Vector/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Vector-products b/Lang/Pluto/Vector-products
new file mode 120000
index 0000000000..83a09bc1a3
--- /dev/null
+++ b/Lang/Pluto/Vector-products
@@ -0,0 +1 @@
+../../Task/Vector-products/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Wagstaff-primes b/Lang/Pluto/Wagstaff-primes
new file mode 120000
index 0000000000..d8a1a2f0da
--- /dev/null
+++ b/Lang/Pluto/Wagstaff-primes
@@ -0,0 +1 @@
+../../Task/Wagstaff-primes/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Wieferich-primes b/Lang/Pluto/Wieferich-primes
new file mode 120000
index 0000000000..453231fbab
--- /dev/null
+++ b/Lang/Pluto/Wieferich-primes
@@ -0,0 +1 @@
+../../Task/Wieferich-primes/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Y-combinator b/Lang/Pluto/Y-combinator
new file mode 120000
index 0000000000..b356912f44
--- /dev/null
+++ b/Lang/Pluto/Y-combinator
@@ -0,0 +1 @@
+../../Task/Y-combinator/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Yellowstone-sequence b/Lang/Pluto/Yellowstone-sequence
new file mode 120000
index 0000000000..f4fb013414
--- /dev/null
+++ b/Lang/Pluto/Yellowstone-sequence
@@ -0,0 +1 @@
+../../Task/Yellowstone-sequence/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Zebra-puzzle b/Lang/Pluto/Zebra-puzzle
new file mode 120000
index 0000000000..d1dee531e9
--- /dev/null
+++ b/Lang/Pluto/Zebra-puzzle
@@ -0,0 +1 @@
+../../Task/Zebra-puzzle/Pluto
\ No newline at end of file
diff --git a/Lang/Pluto/Zero-to-the-zero-power b/Lang/Pluto/Zero-to-the-zero-power
new file mode 120000
index 0000000000..88cbcf1376
--- /dev/null
+++ b/Lang/Pluto/Zero-to-the-zero-power
@@ -0,0 +1 @@
+../../Task/Zero-to-the-zero-power/Pluto
\ No newline at end of file
diff --git a/Lang/PowerShell/AKS-test-for-primes b/Lang/PowerShell/AKS-test-for-primes
new file mode 120000
index 0000000000..d5622ba541
--- /dev/null
+++ b/Lang/PowerShell/AKS-test-for-primes
@@ -0,0 +1 @@
+../../Task/AKS-test-for-primes/PowerShell
\ No newline at end of file
diff --git a/Lang/PowerShell/M-bius-function b/Lang/PowerShell/M-bius-function
new file mode 120000
index 0000000000..a50c276864
--- /dev/null
+++ b/Lang/PowerShell/M-bius-function
@@ -0,0 +1 @@
+../../Task/M-bius-function/PowerShell
\ No newline at end of file
diff --git a/Lang/Prolog/100-prisoners b/Lang/Prolog/100-prisoners
new file mode 120000
index 0000000000..f105600099
--- /dev/null
+++ b/Lang/Prolog/100-prisoners
@@ -0,0 +1 @@
+../../Task/100-prisoners/Prolog
\ No newline at end of file
diff --git a/Lang/Prolog/Boolean-values b/Lang/Prolog/Boolean-values
new file mode 120000
index 0000000000..a4d04329bd
--- /dev/null
+++ b/Lang/Prolog/Boolean-values
@@ -0,0 +1 @@
+../../Task/Boolean-values/Prolog
\ No newline at end of file
diff --git a/Lang/Prolog/Damm-algorithm b/Lang/Prolog/Damm-algorithm
new file mode 120000
index 0000000000..beadc26281
--- /dev/null
+++ b/Lang/Prolog/Damm-algorithm
@@ -0,0 +1 @@
+../../Task/Damm-algorithm/Prolog
\ No newline at end of file
diff --git a/Lang/Prolog/Hello-world-Newline-omission b/Lang/Prolog/Hello-world-Newline-omission
new file mode 120000
index 0000000000..c1a7a16c3a
--- /dev/null
+++ b/Lang/Prolog/Hello-world-Newline-omission
@@ -0,0 +1 @@
+../../Task/Hello-world-Newline-omission/Prolog
\ No newline at end of file
diff --git a/Lang/Prolog/ISBN13-check-digit b/Lang/Prolog/ISBN13-check-digit
new file mode 120000
index 0000000000..a76610ede1
--- /dev/null
+++ b/Lang/Prolog/ISBN13-check-digit
@@ -0,0 +1 @@
+../../Task/ISBN13-check-digit/Prolog
\ No newline at end of file
diff --git a/Lang/Prolog/Integer-comparison b/Lang/Prolog/Integer-comparison
new file mode 120000
index 0000000000..700709dfc3
--- /dev/null
+++ b/Lang/Prolog/Integer-comparison
@@ -0,0 +1 @@
+../../Task/Integer-comparison/Prolog
\ No newline at end of file
diff --git a/Lang/Prolog/Iterated-digits-squaring b/Lang/Prolog/Iterated-digits-squaring
new file mode 120000
index 0000000000..2783b6cb96
--- /dev/null
+++ b/Lang/Prolog/Iterated-digits-squaring
@@ -0,0 +1 @@
+../../Task/Iterated-digits-squaring/Prolog
\ No newline at end of file
diff --git a/Lang/Prolog/Josephus-problem b/Lang/Prolog/Josephus-problem
new file mode 120000
index 0000000000..f88549c05c
--- /dev/null
+++ b/Lang/Prolog/Josephus-problem
@@ -0,0 +1 @@
+../../Task/Josephus-problem/Prolog
\ No newline at end of file
diff --git a/Lang/Prolog/Magic-8-ball b/Lang/Prolog/Magic-8-ball
new file mode 120000
index 0000000000..6daea6349e
--- /dev/null
+++ b/Lang/Prolog/Magic-8-ball
@@ -0,0 +1 @@
+../../Task/Magic-8-ball/Prolog
\ No newline at end of file
diff --git a/Lang/Prolog/Old-Russian-measure-of-length b/Lang/Prolog/Old-Russian-measure-of-length
new file mode 120000
index 0000000000..d1594e7647
--- /dev/null
+++ b/Lang/Prolog/Old-Russian-measure-of-length
@@ -0,0 +1 @@
+../../Task/Old-Russian-measure-of-length/Prolog
\ No newline at end of file
diff --git a/Lang/Prolog/Order-by-pair-comparisons b/Lang/Prolog/Order-by-pair-comparisons
new file mode 120000
index 0000000000..b08bc67036
--- /dev/null
+++ b/Lang/Prolog/Order-by-pair-comparisons
@@ -0,0 +1 @@
+../../Task/Order-by-pair-comparisons/Prolog
\ No newline at end of file
diff --git a/Lang/Prolog/Phrase-reversals b/Lang/Prolog/Phrase-reversals
new file mode 120000
index 0000000000..1afa8eb5f5
--- /dev/null
+++ b/Lang/Prolog/Phrase-reversals
@@ -0,0 +1 @@
+../../Task/Phrase-reversals/Prolog
\ No newline at end of file
diff --git a/Lang/Prolog/Population-count b/Lang/Prolog/Population-count
new file mode 120000
index 0000000000..1ffa420c15
--- /dev/null
+++ b/Lang/Prolog/Population-count
@@ -0,0 +1 @@
+../../Task/Population-count/Prolog
\ No newline at end of file
diff --git a/Lang/Prolog/RPG-attributes-generator b/Lang/Prolog/RPG-attributes-generator
new file mode 120000
index 0000000000..cde5e146a7
--- /dev/null
+++ b/Lang/Prolog/RPG-attributes-generator
@@ -0,0 +1 @@
+../../Task/RPG-attributes-generator/Prolog
\ No newline at end of file
diff --git a/Lang/Prolog/SEDOLs b/Lang/Prolog/SEDOLs
new file mode 120000
index 0000000000..21d9643112
--- /dev/null
+++ b/Lang/Prolog/SEDOLs
@@ -0,0 +1 @@
+../../Task/SEDOLs/Prolog
\ No newline at end of file
diff --git a/Lang/Prolog/Semordnilap b/Lang/Prolog/Semordnilap
new file mode 120000
index 0000000000..c4e2d18fc4
--- /dev/null
+++ b/Lang/Prolog/Semordnilap
@@ -0,0 +1 @@
+../../Task/Semordnilap/Prolog
\ No newline at end of file
diff --git a/Lang/Prolog/Sort-three-variables b/Lang/Prolog/Sort-three-variables
new file mode 120000
index 0000000000..8518a9819c
--- /dev/null
+++ b/Lang/Prolog/Sort-three-variables
@@ -0,0 +1 @@
+../../Task/Sort-three-variables/Prolog
\ No newline at end of file
diff --git a/Lang/Prolog/Stem-and-leaf-plot b/Lang/Prolog/Stem-and-leaf-plot
new file mode 120000
index 0000000000..8a3d5cbab0
--- /dev/null
+++ b/Lang/Prolog/Stem-and-leaf-plot
@@ -0,0 +1 @@
+../../Task/Stem-and-leaf-plot/Prolog
\ No newline at end of file
diff --git a/Lang/Prolog/String-concatenation b/Lang/Prolog/String-concatenation
new file mode 120000
index 0000000000..47d572fb22
--- /dev/null
+++ b/Lang/Prolog/String-concatenation
@@ -0,0 +1 @@
+../../Task/String-concatenation/Prolog
\ No newline at end of file
diff --git a/Lang/Prolog/Thue-Morse b/Lang/Prolog/Thue-Morse
new file mode 120000
index 0000000000..c42ff58a18
--- /dev/null
+++ b/Lang/Prolog/Thue-Morse
@@ -0,0 +1 @@
+../../Task/Thue-Morse/Prolog
\ No newline at end of file
diff --git a/Lang/Prolog/Topswops b/Lang/Prolog/Topswops
new file mode 120000
index 0000000000..20c5cfbba8
--- /dev/null
+++ b/Lang/Prolog/Topswops
@@ -0,0 +1 @@
+../../Task/Topswops/Prolog
\ No newline at end of file
diff --git a/Lang/Prolog/Trabb-Pardo-Knuth-algorithm b/Lang/Prolog/Trabb-Pardo-Knuth-algorithm
new file mode 120000
index 0000000000..dcd294e9ea
--- /dev/null
+++ b/Lang/Prolog/Trabb-Pardo-Knuth-algorithm
@@ -0,0 +1 @@
+../../Task/Trabb-Pardo-Knuth-algorithm/Prolog
\ No newline at end of file
diff --git a/Lang/Prolog/Wireworld b/Lang/Prolog/Wireworld
new file mode 120000
index 0000000000..b45eaa2601
--- /dev/null
+++ b/Lang/Prolog/Wireworld
@@ -0,0 +1 @@
+../../Task/Wireworld/Prolog
\ No newline at end of file
diff --git a/Lang/Prolog/Zero-to-the-zero-power b/Lang/Prolog/Zero-to-the-zero-power
new file mode 120000
index 0000000000..5d3d1cb814
--- /dev/null
+++ b/Lang/Prolog/Zero-to-the-zero-power
@@ -0,0 +1 @@
+../../Task/Zero-to-the-zero-power/Prolog
\ No newline at end of file
diff --git a/Lang/Python/Ruth-Aaron-numbers b/Lang/Python/Ruth-Aaron-numbers
new file mode 120000
index 0000000000..933b3d03bc
--- /dev/null
+++ b/Lang/Python/Ruth-Aaron-numbers
@@ -0,0 +1 @@
+../../Task/Ruth-Aaron-numbers/Python
\ No newline at end of file
diff --git a/Lang/QB64/Trabb-Pardo-Knuth-algorithm b/Lang/QB64/Trabb-Pardo-Knuth-algorithm
new file mode 120000
index 0000000000..bd61960412
--- /dev/null
+++ b/Lang/QB64/Trabb-Pardo-Knuth-algorithm
@@ -0,0 +1 @@
+../../Task/Trabb-Pardo-Knuth-algorithm/QB64
\ No newline at end of file
diff --git a/Lang/R/Angles-geometric-normalization-and-conversion b/Lang/R/Angles-geometric-normalization-and-conversion
new file mode 120000
index 0000000000..d1e56f507e
--- /dev/null
+++ b/Lang/R/Angles-geometric-normalization-and-conversion
@@ -0,0 +1 @@
+../../Task/Angles-geometric-normalization-and-conversion/R
\ No newline at end of file
diff --git a/Lang/R/CUSIP b/Lang/R/CUSIP
new file mode 120000
index 0000000000..e43a376539
--- /dev/null
+++ b/Lang/R/CUSIP
@@ -0,0 +1 @@
+../../Task/CUSIP/R
\ No newline at end of file
diff --git a/Lang/R/Continued-fraction b/Lang/R/Continued-fraction
new file mode 120000
index 0000000000..8e8db83048
--- /dev/null
+++ b/Lang/R/Continued-fraction
@@ -0,0 +1 @@
+../../Task/Continued-fraction/R
\ No newline at end of file
diff --git a/Lang/R/Cramers-rule b/Lang/R/Cramers-rule
new file mode 120000
index 0000000000..839896c59f
--- /dev/null
+++ b/Lang/R/Cramers-rule
@@ -0,0 +1 @@
+../../Task/Cramers-rule/R
\ No newline at end of file
diff --git a/Lang/R/Curzon-numbers b/Lang/R/Curzon-numbers
new file mode 120000
index 0000000000..a381ff9f97
--- /dev/null
+++ b/Lang/R/Curzon-numbers
@@ -0,0 +1 @@
+../../Task/Curzon-numbers/R
\ No newline at end of file
diff --git a/Lang/R/Dijkstras-algorithm b/Lang/R/Dijkstras-algorithm
new file mode 120000
index 0000000000..3bff2fae1d
--- /dev/null
+++ b/Lang/R/Dijkstras-algorithm
@@ -0,0 +1 @@
+../../Task/Dijkstras-algorithm/R
\ No newline at end of file
diff --git a/Lang/R/Execute-HQ9+ b/Lang/R/Execute-HQ9+
new file mode 120000
index 0000000000..0972c0bb4f
--- /dev/null
+++ b/Lang/R/Execute-HQ9+
@@ -0,0 +1 @@
+../../Task/Execute-HQ9+/R
\ No newline at end of file
diff --git a/Lang/R/Factorial-primes b/Lang/R/Factorial-primes
new file mode 120000
index 0000000000..90b75c9d38
--- /dev/null
+++ b/Lang/R/Factorial-primes
@@ -0,0 +1 @@
+../../Task/Factorial-primes/R
\ No newline at end of file
diff --git a/Lang/R/Fibonacci-n-step-number-sequences b/Lang/R/Fibonacci-n-step-number-sequences
new file mode 120000
index 0000000000..1cf227761a
--- /dev/null
+++ b/Lang/R/Fibonacci-n-step-number-sequences
@@ -0,0 +1 @@
+../../Task/Fibonacci-n-step-number-sequences/R
\ No newline at end of file
diff --git a/Lang/R/Flipping-bits-game b/Lang/R/Flipping-bits-game
new file mode 120000
index 0000000000..45f9cba067
--- /dev/null
+++ b/Lang/R/Flipping-bits-game
@@ -0,0 +1 @@
+../../Task/Flipping-bits-game/R
\ No newline at end of file
diff --git a/Lang/R/Floyd-Warshall-algorithm b/Lang/R/Floyd-Warshall-algorithm
new file mode 120000
index 0000000000..f0f7534bc6
--- /dev/null
+++ b/Lang/R/Floyd-Warshall-algorithm
@@ -0,0 +1 @@
+../../Task/Floyd-Warshall-algorithm/R
\ No newline at end of file
diff --git a/Lang/R/Fractran b/Lang/R/Fractran
new file mode 120000
index 0000000000..4684d03d23
--- /dev/null
+++ b/Lang/R/Fractran
@@ -0,0 +1 @@
+../../Task/Fractran/R
\ No newline at end of file
diff --git a/Lang/R/Giuga-numbers b/Lang/R/Giuga-numbers
new file mode 120000
index 0000000000..e45399fcf4
--- /dev/null
+++ b/Lang/R/Giuga-numbers
@@ -0,0 +1 @@
+../../Task/Giuga-numbers/R
\ No newline at end of file
diff --git a/Lang/R/Greedy-algorithm-for-Egyptian-fractions b/Lang/R/Greedy-algorithm-for-Egyptian-fractions
new file mode 120000
index 0000000000..142b97c38d
--- /dev/null
+++ b/Lang/R/Greedy-algorithm-for-Egyptian-fractions
@@ -0,0 +1 @@
+../../Task/Greedy-algorithm-for-Egyptian-fractions/R
\ No newline at end of file
diff --git a/Lang/R/Humble-numbers b/Lang/R/Humble-numbers
new file mode 120000
index 0000000000..66447beec9
--- /dev/null
+++ b/Lang/R/Humble-numbers
@@ -0,0 +1 @@
+../../Task/Humble-numbers/R
\ No newline at end of file
diff --git a/Lang/R/M-bius-function b/Lang/R/M-bius-function
new file mode 120000
index 0000000000..54d202ad87
--- /dev/null
+++ b/Lang/R/M-bius-function
@@ -0,0 +1 @@
+../../Task/M-bius-function/R
\ No newline at end of file
diff --git a/Lang/R/Parse-an-IP-Address b/Lang/R/Parse-an-IP-Address
new file mode 120000
index 0000000000..9f23986592
--- /dev/null
+++ b/Lang/R/Parse-an-IP-Address
@@ -0,0 +1 @@
+../../Task/Parse-an-IP-Address/R
\ No newline at end of file
diff --git a/Lang/R/Rename-a-file b/Lang/R/Rename-a-file
new file mode 120000
index 0000000000..d3214c3f95
--- /dev/null
+++ b/Lang/R/Rename-a-file
@@ -0,0 +1 @@
+../../Task/Rename-a-file/R
\ No newline at end of file
diff --git a/Lang/R/Repunit-primes b/Lang/R/Repunit-primes
new file mode 120000
index 0000000000..9ae6100164
--- /dev/null
+++ b/Lang/R/Repunit-primes
@@ -0,0 +1 @@
+../../Task/Repunit-primes/R
\ No newline at end of file
diff --git a/Lang/R/Retrieve-and-search-chat-history b/Lang/R/Retrieve-and-search-chat-history
new file mode 120000
index 0000000000..6f350b7b8c
--- /dev/null
+++ b/Lang/R/Retrieve-and-search-chat-history
@@ -0,0 +1 @@
+../../Task/Retrieve-and-search-chat-history/R
\ No newline at end of file
diff --git a/Lang/R/Shoelace-formula-for-polygonal-area b/Lang/R/Shoelace-formula-for-polygonal-area
new file mode 120000
index 0000000000..8e6ea3fcc6
--- /dev/null
+++ b/Lang/R/Shoelace-formula-for-polygonal-area
@@ -0,0 +1 @@
+../../Task/Shoelace-formula-for-polygonal-area/R
\ No newline at end of file
diff --git a/Lang/R/Soloways-recurring-rainfall b/Lang/R/Soloways-recurring-rainfall
new file mode 120000
index 0000000000..33b1f84311
--- /dev/null
+++ b/Lang/R/Soloways-recurring-rainfall
@@ -0,0 +1 @@
+../../Task/Soloways-recurring-rainfall/R
\ No newline at end of file
diff --git a/Lang/R/Split-a-character-string-based-on-change-of-character b/Lang/R/Split-a-character-string-based-on-change-of-character
new file mode 120000
index 0000000000..16a92812f1
--- /dev/null
+++ b/Lang/R/Split-a-character-string-based-on-change-of-character
@@ -0,0 +1 @@
+../../Task/Split-a-character-string-based-on-change-of-character/R
\ No newline at end of file
diff --git a/Lang/R/String-interpolation-included- b/Lang/R/String-interpolation-included-
new file mode 120000
index 0000000000..f311002546
--- /dev/null
+++ b/Lang/R/String-interpolation-included-
@@ -0,0 +1 @@
+../../Task/String-interpolation-included-/R
\ No newline at end of file
diff --git a/Lang/R/String-matching b/Lang/R/String-matching
new file mode 120000
index 0000000000..2461134ac0
--- /dev/null
+++ b/Lang/R/String-matching
@@ -0,0 +1 @@
+../../Task/String-matching/R
\ No newline at end of file
diff --git a/Lang/R/Substring-Top-and-tail b/Lang/R/Substring-Top-and-tail
new file mode 120000
index 0000000000..271cd3b15f
--- /dev/null
+++ b/Lang/R/Substring-Top-and-tail
@@ -0,0 +1 @@
+../../Task/Substring-Top-and-tail/R
\ No newline at end of file
diff --git a/Lang/R/The-Name-Game b/Lang/R/The-Name-Game
new file mode 120000
index 0000000000..a5e981bf52
--- /dev/null
+++ b/Lang/R/The-Name-Game
@@ -0,0 +1 @@
+../../Task/The-Name-Game/R
\ No newline at end of file
diff --git a/Lang/R/Tonelli-Shanks-algorithm b/Lang/R/Tonelli-Shanks-algorithm
new file mode 120000
index 0000000000..2ad48c9cd5
--- /dev/null
+++ b/Lang/R/Tonelli-Shanks-algorithm
@@ -0,0 +1 @@
+../../Task/Tonelli-Shanks-algorithm/R
\ No newline at end of file
diff --git a/Lang/R/Wieferich-primes b/Lang/R/Wieferich-primes
new file mode 120000
index 0000000000..1c103bdf36
--- /dev/null
+++ b/Lang/R/Wieferich-primes
@@ -0,0 +1 @@
+../../Task/Wieferich-primes/R
\ No newline at end of file
diff --git a/Lang/R/Write-entire-file b/Lang/R/Write-entire-file
new file mode 120000
index 0000000000..2972bb07fe
--- /dev/null
+++ b/Lang/R/Write-entire-file
@@ -0,0 +1 @@
+../../Task/Write-entire-file/R
\ No newline at end of file
diff --git a/Lang/REBOL/00-LANG.txt b/Lang/REBOL/00-LANG.txt
index 0117c8198c..f5919f4e5a 100644
--- a/Lang/REBOL/00-LANG.txt
+++ b/Lang/REBOL/00-LANG.txt
@@ -1,3 +1,5 @@
{{stub}}{{language|REBOL
|site=http://rebol.com}}
-REBOL stands for Relative Expression Based Object Language.
\ No newline at end of file
+REBOL stands for Relative Expression Based Object Language.
+
+See also: [https://rosettacode.org/wiki/Category:Rebol Category:Rebol]
\ No newline at end of file
diff --git a/Lang/REBOL/9-billion-names-of-God-the-integer b/Lang/REBOL/9-billion-names-of-God-the-integer
new file mode 120000
index 0000000000..d19b039600
--- /dev/null
+++ b/Lang/REBOL/9-billion-names-of-God-the-integer
@@ -0,0 +1 @@
+../../Task/9-billion-names-of-God-the-integer/REBOL
\ No newline at end of file
diff --git a/Lang/REBOL/Ackermann-function b/Lang/REBOL/Ackermann-function
new file mode 120000
index 0000000000..bb556d5ce8
--- /dev/null
+++ b/Lang/REBOL/Ackermann-function
@@ -0,0 +1 @@
+../../Task/Ackermann-function/REBOL
\ No newline at end of file
diff --git a/Lang/REBOL/Loop-over-multiple-arrays-simultaneously b/Lang/REBOL/Loop-over-multiple-arrays-simultaneously
new file mode 120000
index 0000000000..509d196c87
--- /dev/null
+++ b/Lang/REBOL/Loop-over-multiple-arrays-simultaneously
@@ -0,0 +1 @@
+../../Task/Loop-over-multiple-arrays-simultaneously/REBOL
\ No newline at end of file
diff --git a/Lang/REBOL/Loops-Increment-loop-index-within-loop-body b/Lang/REBOL/Loops-Increment-loop-index-within-loop-body
new file mode 120000
index 0000000000..1d1b2df2c6
--- /dev/null
+++ b/Lang/REBOL/Loops-Increment-loop-index-within-loop-body
@@ -0,0 +1 @@
+../../Task/Loops-Increment-loop-index-within-loop-body/REBOL
\ No newline at end of file
diff --git a/Lang/REBOL/Loops-With-multiple-ranges b/Lang/REBOL/Loops-With-multiple-ranges
new file mode 120000
index 0000000000..bd25edb4b9
--- /dev/null
+++ b/Lang/REBOL/Loops-With-multiple-ranges
@@ -0,0 +1 @@
+../../Task/Loops-With-multiple-ranges/REBOL
\ No newline at end of file
diff --git a/Lang/REBOL/Loops-Wrong-ranges b/Lang/REBOL/Loops-Wrong-ranges
new file mode 120000
index 0000000000..a8f17c4209
--- /dev/null
+++ b/Lang/REBOL/Loops-Wrong-ranges
@@ -0,0 +1 @@
+../../Task/Loops-Wrong-ranges/REBOL
\ No newline at end of file
diff --git a/Lang/REBOL/Object-serialization b/Lang/REBOL/Object-serialization
new file mode 120000
index 0000000000..71f73b27eb
--- /dev/null
+++ b/Lang/REBOL/Object-serialization
@@ -0,0 +1 @@
+../../Task/Object-serialization/REBOL
\ No newline at end of file
diff --git a/Lang/REBOL/Polyspiral b/Lang/REBOL/Polyspiral
new file mode 120000
index 0000000000..70a487676d
--- /dev/null
+++ b/Lang/REBOL/Polyspiral
@@ -0,0 +1 @@
+../../Task/Polyspiral/REBOL
\ No newline at end of file
diff --git a/Lang/REBOL/SHA-1 b/Lang/REBOL/SHA-1
new file mode 120000
index 0000000000..b430af646a
--- /dev/null
+++ b/Lang/REBOL/SHA-1
@@ -0,0 +1 @@
+../../Task/SHA-1/REBOL
\ No newline at end of file
diff --git a/Lang/REBOL/SHA-256 b/Lang/REBOL/SHA-256
new file mode 120000
index 0000000000..b5f39ed805
--- /dev/null
+++ b/Lang/REBOL/SHA-256
@@ -0,0 +1 @@
+../../Task/SHA-256/REBOL
\ No newline at end of file
diff --git a/Lang/REBOL/Semordnilap b/Lang/REBOL/Semordnilap
new file mode 120000
index 0000000000..fee60064bb
--- /dev/null
+++ b/Lang/REBOL/Semordnilap
@@ -0,0 +1 @@
+../../Task/Semordnilap/REBOL
\ No newline at end of file
diff --git a/Lang/RISC-V-Assembly/00-LANG.txt b/Lang/RISC-V-Assembly/00-LANG.txt
index f524ed95fb..6a2bfde754 100644
--- a/Lang/RISC-V-Assembly/00-LANG.txt
+++ b/Lang/RISC-V-Assembly/00-LANG.txt
@@ -1,4 +1,76 @@
{{language|RISC-V Assembly}}[https://riscv.org Risc-V] is an open source hardware instruction set architecture based on the principle of a '''R'''educed '''I'''nstruction '''S'''et '''C'''omputer. The project was started by the university of California, Berkeley in 2010. This site refers to the Risc-V assembly language. ([https://en.wikipedia.org/wiki/RISC-V#Software Wikipedia page]), Website: [https://riscv.org https://riscv.org].
+'''Riscv on raspberry pico 2'''
+
+A pico2 with the chip rp2335 contains 2 cores hazard3 with risc v assembly
+it is possible to programm assembly riscv with the sdk C++ and a compiler riscv32-unknown-elf-as.exe
+
+It is also possible to programm without SDK but it is necessary to write functions for init
+the clocks and to communicate for usb connexion.
+
+install under Windows11 (or see documentation raspberry py pico SDK) :
+
+Create main folder (ex : \pico2)
+
+install SDK C++ (see instructions in raspberry pi pico2 SDK documentation)
+
+install toolchaine under \Pico2\tools\bin from
+
+https://github.com/raspberrypi/pico-sdk-tools/releases/download/v2.0.0-2/riscv-toolchain-14-x64-win.zip
+
+
+Create work folder (ex : \pico2\hello)
+
+Create file CMakeLists.txt (see instructions in raspberry pi pico2 SDK documentation)
+
+Create program hello.s with a editor
+
+Copy a file pico_sdk_import.cmake from \pico2\pico-sdk\external
+
+Create a folder build under \pico2\hello
+
+Go to this folder
+
+Compile program with :
+
+ cmake -DPICO_PLATFORM=rp2350-riscv -DPICO_TOOLCHAIN_PATH=E:\Pico2\tools\bin -G "NMake Makefiles" ..
+
+and
+ nmake
+
+copy the file .uf2 to raspberry pico2 (see documentation raspberry pi pico2)
+
+Start serial connexion on host (ex: putty on windows11)
+
+Example CMakeLists.txt :
+
+cmake_minimum_required(VERSION 3.13)
+
+include(pico_sdk_import.cmake)
+
+project(hello C CXX ASM)
+
+set(CMAKE_C_STANDARD 11)
+
+set(CMAKE_CXX_STANDARD 17)
+
+pico_sdk_init()
+
+add_executable(hello
+hello.s # pgm source assembly riscv
+)
+
+target_link_libraries(hello pico_stdlib)
+
+pico_enable_stdio_usb(hello 1)
+
+pico_enable_stdio_uart(hello 0)
+
+pico_add_extra_outputs(hello)
+
+see source program on hello world rosetta code
+
+cmake -DPython3_EXECUTABLE=C:\Users\Vincent\AppData\Local\Microsoft\WindowsApps\python3.10.exe -DPICO_PLATFORM=rp2350-riscv -DPICO_TOOLCHAIN_PATH=E:\Pico2\tools\bin -DPICO_SDK_PATH=..\..\..\pico-sdk -G "NMake Makefiles" ..
+
[[Category:Assembler language]]
[[Category:Assembly]]
\ No newline at end of file
diff --git a/Lang/RISC-V-Assembly/Address-of-a-variable b/Lang/RISC-V-Assembly/Address-of-a-variable
new file mode 120000
index 0000000000..7e7b85f7fc
--- /dev/null
+++ b/Lang/RISC-V-Assembly/Address-of-a-variable
@@ -0,0 +1 @@
+../../Task/Address-of-a-variable/RISC-V-Assembly
\ No newline at end of file
diff --git a/Lang/RISC-V-Assembly/Arithmetic-Integer b/Lang/RISC-V-Assembly/Arithmetic-Integer
new file mode 120000
index 0000000000..41172f4754
--- /dev/null
+++ b/Lang/RISC-V-Assembly/Arithmetic-Integer
@@ -0,0 +1 @@
+../../Task/Arithmetic-Integer/RISC-V-Assembly
\ No newline at end of file
diff --git a/Lang/RISC-V-Assembly/Binary-digits b/Lang/RISC-V-Assembly/Binary-digits
new file mode 120000
index 0000000000..45c4e871d7
--- /dev/null
+++ b/Lang/RISC-V-Assembly/Binary-digits
@@ -0,0 +1 @@
+../../Task/Binary-digits/RISC-V-Assembly
\ No newline at end of file
diff --git a/Lang/RISC-V-Assembly/Hello-world-Newbie b/Lang/RISC-V-Assembly/Hello-world-Newbie
new file mode 120000
index 0000000000..5721ad4125
--- /dev/null
+++ b/Lang/RISC-V-Assembly/Hello-world-Newbie
@@ -0,0 +1 @@
+../../Task/Hello-world-Newbie/RISC-V-Assembly
\ No newline at end of file
diff --git a/Lang/RISC-V-Assembly/Include-a-file b/Lang/RISC-V-Assembly/Include-a-file
new file mode 120000
index 0000000000..2742cb0a60
--- /dev/null
+++ b/Lang/RISC-V-Assembly/Include-a-file
@@ -0,0 +1 @@
+../../Task/Include-a-file/RISC-V-Assembly
\ No newline at end of file
diff --git a/Lang/Raku/Play-recorded-sounds b/Lang/Raku/Play-recorded-sounds
new file mode 120000
index 0000000000..7d18ecbdee
--- /dev/null
+++ b/Lang/Raku/Play-recorded-sounds
@@ -0,0 +1 @@
+../../Task/Play-recorded-sounds/Raku
\ No newline at end of file
diff --git a/Lang/Red/Address-of-a-variable b/Lang/Red/Address-of-a-variable
new file mode 120000
index 0000000000..81b5a1a171
--- /dev/null
+++ b/Lang/Red/Address-of-a-variable
@@ -0,0 +1 @@
+../../Task/Address-of-a-variable/Red
\ No newline at end of file
diff --git a/Lang/Red/Arithmetic-Integer b/Lang/Red/Arithmetic-Integer
new file mode 120000
index 0000000000..cb3f74d046
--- /dev/null
+++ b/Lang/Red/Arithmetic-Integer
@@ -0,0 +1 @@
+../../Task/Arithmetic-Integer/Red
\ No newline at end of file
diff --git a/Lang/Red/Arithmetic-evaluation b/Lang/Red/Arithmetic-evaluation
new file mode 120000
index 0000000000..c6c5c304b5
--- /dev/null
+++ b/Lang/Red/Arithmetic-evaluation
@@ -0,0 +1 @@
+../../Task/Arithmetic-evaluation/Red
\ No newline at end of file
diff --git a/Lang/Red/Calendar b/Lang/Red/Calendar
new file mode 120000
index 0000000000..3283fd5906
--- /dev/null
+++ b/Lang/Red/Calendar
@@ -0,0 +1 @@
+../../Task/Calendar/Red
\ No newline at end of file
diff --git a/Lang/Red/Calendar---for-REAL-programmers b/Lang/Red/Calendar---for-REAL-programmers
new file mode 120000
index 0000000000..e0db1bd24f
--- /dev/null
+++ b/Lang/Red/Calendar---for-REAL-programmers
@@ -0,0 +1 @@
+../../Task/Calendar---for-REAL-programmers/Red
\ No newline at end of file
diff --git a/Lang/Red/Currying b/Lang/Red/Currying
new file mode 120000
index 0000000000..a40d4bf838
--- /dev/null
+++ b/Lang/Red/Currying
@@ -0,0 +1 @@
+../../Task/Currying/Red
\ No newline at end of file
diff --git a/Lang/Red/Five-weekends b/Lang/Red/Five-weekends
new file mode 120000
index 0000000000..4b364097a6
--- /dev/null
+++ b/Lang/Red/Five-weekends
@@ -0,0 +1 @@
+../../Task/Five-weekends/Red
\ No newline at end of file
diff --git a/Lang/Red/Logical-operations b/Lang/Red/Logical-operations
new file mode 120000
index 0000000000..b02eaed36f
--- /dev/null
+++ b/Lang/Red/Logical-operations
@@ -0,0 +1 @@
+../../Task/Logical-operations/Red
\ No newline at end of file
diff --git a/Lang/Red/Parsing-RPN-calculator-algorithm b/Lang/Red/Parsing-RPN-calculator-algorithm
new file mode 120000
index 0000000000..f68a7bf5c6
--- /dev/null
+++ b/Lang/Red/Parsing-RPN-calculator-algorithm
@@ -0,0 +1 @@
+../../Task/Parsing-RPN-calculator-algorithm/Red
\ No newline at end of file
diff --git a/Lang/Red/Parsing-RPN-to-infix-conversion b/Lang/Red/Parsing-RPN-to-infix-conversion
new file mode 120000
index 0000000000..27fb99e707
--- /dev/null
+++ b/Lang/Red/Parsing-RPN-to-infix-conversion
@@ -0,0 +1 @@
+../../Task/Parsing-RPN-to-infix-conversion/Red
\ No newline at end of file
diff --git a/Lang/Red/Parsing-Shunting-yard-algorithm b/Lang/Red/Parsing-Shunting-yard-algorithm
new file mode 120000
index 0000000000..64583c9508
--- /dev/null
+++ b/Lang/Red/Parsing-Shunting-yard-algorithm
@@ -0,0 +1 @@
+../../Task/Parsing-Shunting-yard-algorithm/Red
\ No newline at end of file
diff --git a/Lang/Red/Towers-of-Hanoi b/Lang/Red/Towers-of-Hanoi
new file mode 120000
index 0000000000..112b276dee
--- /dev/null
+++ b/Lang/Red/Towers-of-Hanoi
@@ -0,0 +1 @@
+../../Task/Towers-of-Hanoi/Red
\ No newline at end of file
diff --git a/Lang/Refal/Tokenize-a-string b/Lang/Refal/Tokenize-a-string
new file mode 120000
index 0000000000..f8ac7459de
--- /dev/null
+++ b/Lang/Refal/Tokenize-a-string
@@ -0,0 +1 @@
+../../Task/Tokenize-a-string/Refal
\ No newline at end of file
diff --git a/Lang/Rhombus/00-LANG.txt b/Lang/Rhombus/00-LANG.txt
new file mode 100644
index 0000000000..ef9932595f
--- /dev/null
+++ b/Lang/Rhombus/00-LANG.txt
@@ -0,0 +1,5 @@
+{{language
+|exec=both
+|gc=yes
+|site=https://rhombus-lang.org/
+}}
\ No newline at end of file
diff --git a/Lang/Rhombus/00-META.yaml b/Lang/Rhombus/00-META.yaml
new file mode 100644
index 0000000000..732b96d2eb
--- /dev/null
+++ b/Lang/Rhombus/00-META.yaml
@@ -0,0 +1,2 @@
+---
+from: http://rosettacode.org/wiki/Category:Rhombus
diff --git a/Lang/Rhombus/99-bottles-of-beer b/Lang/Rhombus/99-bottles-of-beer
new file mode 120000
index 0000000000..bcb9ee7049
--- /dev/null
+++ b/Lang/Rhombus/99-bottles-of-beer
@@ -0,0 +1 @@
+../../Task/99-bottles-of-beer/Rhombus
\ No newline at end of file
diff --git a/Lang/Rhombus/Arbitrary-precision-integers-included- b/Lang/Rhombus/Arbitrary-precision-integers-included-
new file mode 120000
index 0000000000..31558e19d7
--- /dev/null
+++ b/Lang/Rhombus/Arbitrary-precision-integers-included-
@@ -0,0 +1 @@
+../../Task/Arbitrary-precision-integers-included-/Rhombus
\ No newline at end of file
diff --git a/Lang/Rhombus/Caesar-cipher b/Lang/Rhombus/Caesar-cipher
new file mode 120000
index 0000000000..dd9f5453ed
--- /dev/null
+++ b/Lang/Rhombus/Caesar-cipher
@@ -0,0 +1 @@
+../../Task/Caesar-cipher/Rhombus
\ No newline at end of file
diff --git a/Lang/Rhombus/Factorial b/Lang/Rhombus/Factorial
new file mode 120000
index 0000000000..92b62c830f
--- /dev/null
+++ b/Lang/Rhombus/Factorial
@@ -0,0 +1 @@
+../../Task/Factorial/Rhombus
\ No newline at end of file
diff --git a/Lang/Rhombus/Fibonacci-sequence b/Lang/Rhombus/Fibonacci-sequence
new file mode 120000
index 0000000000..d496e8a0b2
--- /dev/null
+++ b/Lang/Rhombus/Fibonacci-sequence
@@ -0,0 +1 @@
+../../Task/Fibonacci-sequence/Rhombus
\ No newline at end of file
diff --git a/Lang/Rhombus/FizzBuzz b/Lang/Rhombus/FizzBuzz
new file mode 120000
index 0000000000..5740514b72
--- /dev/null
+++ b/Lang/Rhombus/FizzBuzz
@@ -0,0 +1 @@
+../../Task/FizzBuzz/Rhombus
\ No newline at end of file
diff --git a/Lang/Rhombus/Guess-the-number-With-feedback b/Lang/Rhombus/Guess-the-number-With-feedback
new file mode 120000
index 0000000000..c51dd719ba
--- /dev/null
+++ b/Lang/Rhombus/Guess-the-number-With-feedback
@@ -0,0 +1 @@
+../../Task/Guess-the-number-With-feedback/Rhombus
\ No newline at end of file
diff --git a/Lang/Rhombus/Hello-world-Text b/Lang/Rhombus/Hello-world-Text
new file mode 120000
index 0000000000..11fb03859d
--- /dev/null
+++ b/Lang/Rhombus/Hello-world-Text
@@ -0,0 +1 @@
+../../Task/Hello-world-Text/Rhombus
\ No newline at end of file
diff --git a/Lang/Rhombus/Inheritance-Single b/Lang/Rhombus/Inheritance-Single
new file mode 120000
index 0000000000..2f478862d8
--- /dev/null
+++ b/Lang/Rhombus/Inheritance-Single
@@ -0,0 +1 @@
+../../Task/Inheritance-Single/Rhombus
\ No newline at end of file
diff --git a/Lang/Rhombus/Polymorphism b/Lang/Rhombus/Polymorphism
new file mode 120000
index 0000000000..a5540935b5
--- /dev/null
+++ b/Lang/Rhombus/Polymorphism
@@ -0,0 +1 @@
+../../Task/Polymorphism/Rhombus
\ No newline at end of file
diff --git a/Lang/Rhombus/Rot-13 b/Lang/Rhombus/Rot-13
new file mode 120000
index 0000000000..369226ff2f
--- /dev/null
+++ b/Lang/Rhombus/Rot-13
@@ -0,0 +1 @@
+../../Task/Rot-13/Rhombus
\ No newline at end of file
diff --git a/Lang/Ring/Compare-a-list-of-strings b/Lang/Ring/Compare-a-list-of-strings
new file mode 120000
index 0000000000..308f7db9af
--- /dev/null
+++ b/Lang/Ring/Compare-a-list-of-strings
@@ -0,0 +1 @@
+../../Task/Compare-a-list-of-strings/Ring
\ No newline at end of file
diff --git a/Lang/Ring/Wagstaff-primes b/Lang/Ring/Wagstaff-primes
new file mode 120000
index 0000000000..877433f537
--- /dev/null
+++ b/Lang/Ring/Wagstaff-primes
@@ -0,0 +1 @@
+../../Task/Wagstaff-primes/Ring
\ No newline at end of file
diff --git a/Lang/Run-BASIC/Josephus-problem b/Lang/Run-BASIC/Josephus-problem
new file mode 120000
index 0000000000..d5ce7e543e
--- /dev/null
+++ b/Lang/Run-BASIC/Josephus-problem
@@ -0,0 +1 @@
+../../Task/Josephus-problem/Run-BASIC
\ No newline at end of file
diff --git a/Lang/Rust/Break-OO-privacy b/Lang/Rust/Break-OO-privacy
new file mode 120000
index 0000000000..37b6e0d417
--- /dev/null
+++ b/Lang/Rust/Break-OO-privacy
@@ -0,0 +1 @@
+../../Task/Break-OO-privacy/Rust
\ No newline at end of file
diff --git a/Lang/Rust/Camel-case-and-snake-case b/Lang/Rust/Camel-case-and-snake-case
new file mode 120000
index 0000000000..5c92d90b28
--- /dev/null
+++ b/Lang/Rust/Camel-case-and-snake-case
@@ -0,0 +1 @@
+../../Task/Camel-case-and-snake-case/Rust
\ No newline at end of file
diff --git a/Lang/Rust/Continued-fraction-Arithmetic-G-matrix-ng-continued-fraction-n- b/Lang/Rust/Continued-fraction-Arithmetic-G-matrix-ng-continued-fraction-n-
new file mode 120000
index 0000000000..7e0955d429
--- /dev/null
+++ b/Lang/Rust/Continued-fraction-Arithmetic-G-matrix-ng-continued-fraction-n-
@@ -0,0 +1 @@
+../../Task/Continued-fraction-Arithmetic-G-matrix-ng-continued-fraction-n-/Rust
\ No newline at end of file
diff --git a/Lang/Rust/Cyclops-numbers b/Lang/Rust/Cyclops-numbers
new file mode 120000
index 0000000000..044bb62e43
--- /dev/null
+++ b/Lang/Rust/Cyclops-numbers
@@ -0,0 +1 @@
+../../Task/Cyclops-numbers/Rust
\ No newline at end of file
diff --git a/Lang/Rust/Deconvolution-1D b/Lang/Rust/Deconvolution-1D
new file mode 120000
index 0000000000..d02a914ea3
--- /dev/null
+++ b/Lang/Rust/Deconvolution-1D
@@ -0,0 +1 @@
+../../Task/Deconvolution-1D/Rust
\ No newline at end of file
diff --git a/Lang/Rust/Deconvolution-2D+ b/Lang/Rust/Deconvolution-2D+
new file mode 120000
index 0000000000..4b9cb470ba
--- /dev/null
+++ b/Lang/Rust/Deconvolution-2D+
@@ -0,0 +1 @@
+../../Task/Deconvolution-2D+/Rust
\ No newline at end of file
diff --git a/Lang/Rust/Determine-if-two-triangles-overlap b/Lang/Rust/Determine-if-two-triangles-overlap
new file mode 120000
index 0000000000..2bc1e5e063
--- /dev/null
+++ b/Lang/Rust/Determine-if-two-triangles-overlap
@@ -0,0 +1 @@
+../../Task/Determine-if-two-triangles-overlap/Rust
\ No newline at end of file
diff --git a/Lang/Rust/Duffinian-numbers b/Lang/Rust/Duffinian-numbers
new file mode 120000
index 0000000000..5a84e9b8ff
--- /dev/null
+++ b/Lang/Rust/Duffinian-numbers
@@ -0,0 +1 @@
+../../Task/Duffinian-numbers/Rust
\ No newline at end of file
diff --git a/Lang/Rust/Elliptic-curve-arithmetic b/Lang/Rust/Elliptic-curve-arithmetic
new file mode 120000
index 0000000000..cb1c49b6dd
--- /dev/null
+++ b/Lang/Rust/Elliptic-curve-arithmetic
@@ -0,0 +1 @@
+../../Task/Elliptic-curve-arithmetic/Rust
\ No newline at end of file
diff --git a/Lang/Rust/Faulhabers-triangle b/Lang/Rust/Faulhabers-triangle
new file mode 120000
index 0000000000..49b5537877
--- /dev/null
+++ b/Lang/Rust/Faulhabers-triangle
@@ -0,0 +1 @@
+../../Task/Faulhabers-triangle/Rust
\ No newline at end of file
diff --git a/Lang/Rust/Fractran b/Lang/Rust/Fractran
new file mode 120000
index 0000000000..46ed1ab96e
--- /dev/null
+++ b/Lang/Rust/Fractran
@@ -0,0 +1 @@
+../../Task/Fractran/Rust
\ No newline at end of file
diff --git a/Lang/Rust/Humble-numbers b/Lang/Rust/Humble-numbers
new file mode 120000
index 0000000000..001b631312
--- /dev/null
+++ b/Lang/Rust/Humble-numbers
@@ -0,0 +1 @@
+../../Task/Humble-numbers/Rust
\ No newline at end of file
diff --git a/Lang/Rust/Knapsack-problem-Bounded b/Lang/Rust/Knapsack-problem-Bounded
new file mode 120000
index 0000000000..db57c7551f
--- /dev/null
+++ b/Lang/Rust/Knapsack-problem-Bounded
@@ -0,0 +1 @@
+../../Task/Knapsack-problem-Bounded/Rust
\ No newline at end of file
diff --git a/Lang/Rust/Mayan-calendar b/Lang/Rust/Mayan-calendar
new file mode 120000
index 0000000000..8da8002279
--- /dev/null
+++ b/Lang/Rust/Mayan-calendar
@@ -0,0 +1 @@
+../../Task/Mayan-calendar/Rust
\ No newline at end of file
diff --git a/Lang/Rust/Meissel-Mertens-constant b/Lang/Rust/Meissel-Mertens-constant
new file mode 120000
index 0000000000..30f216e193
--- /dev/null
+++ b/Lang/Rust/Meissel-Mertens-constant
@@ -0,0 +1 @@
+../../Task/Meissel-Mertens-constant/Rust
\ No newline at end of file
diff --git a/Lang/Rust/Modular-arithmetic b/Lang/Rust/Modular-arithmetic
new file mode 120000
index 0000000000..bf3b8fce76
--- /dev/null
+++ b/Lang/Rust/Modular-arithmetic
@@ -0,0 +1 @@
+../../Task/Modular-arithmetic/Rust
\ No newline at end of file
diff --git a/Lang/Rust/Multiple-regression b/Lang/Rust/Multiple-regression
new file mode 120000
index 0000000000..84425ee458
--- /dev/null
+++ b/Lang/Rust/Multiple-regression
@@ -0,0 +1 @@
+../../Task/Multiple-regression/Rust
\ No newline at end of file
diff --git a/Lang/Rust/Ramanujan-primes-twins b/Lang/Rust/Ramanujan-primes-twins
new file mode 120000
index 0000000000..ec360cedbc
--- /dev/null
+++ b/Lang/Rust/Ramanujan-primes-twins
@@ -0,0 +1 @@
+../../Task/Ramanujan-primes-twins/Rust
\ No newline at end of file
diff --git a/Lang/Rust/Singleton b/Lang/Rust/Singleton
new file mode 120000
index 0000000000..480988c162
--- /dev/null
+++ b/Lang/Rust/Singleton
@@ -0,0 +1 @@
+../../Task/Singleton/Rust
\ No newline at end of file
diff --git a/Lang/Rust/Sokoban b/Lang/Rust/Sokoban
new file mode 120000
index 0000000000..57d1bc73b3
--- /dev/null
+++ b/Lang/Rust/Sokoban
@@ -0,0 +1 @@
+../../Task/Sokoban/Rust
\ No newline at end of file
diff --git a/Lang/Rust/Substitution-cipher b/Lang/Rust/Substitution-cipher
new file mode 120000
index 0000000000..aa3ad1011d
--- /dev/null
+++ b/Lang/Rust/Substitution-cipher
@@ -0,0 +1 @@
+../../Task/Substitution-cipher/Rust
\ No newline at end of file
diff --git a/Lang/Rust/Tree-datastructures b/Lang/Rust/Tree-datastructures
new file mode 120000
index 0000000000..37b567712c
--- /dev/null
+++ b/Lang/Rust/Tree-datastructures
@@ -0,0 +1 @@
+../../Task/Tree-datastructures/Rust
\ No newline at end of file
diff --git a/Lang/Rust/UPC b/Lang/Rust/UPC
new file mode 120000
index 0000000000..775faf96be
--- /dev/null
+++ b/Lang/Rust/UPC
@@ -0,0 +1 @@
+../../Task/UPC/Rust
\ No newline at end of file
diff --git a/Lang/Rust/War-card-game b/Lang/Rust/War-card-game
new file mode 120000
index 0000000000..bc45c42250
--- /dev/null
+++ b/Lang/Rust/War-card-game
@@ -0,0 +1 @@
+../../Task/War-card-game/Rust
\ No newline at end of file
diff --git a/Lang/S-BASIC/Sorting-algorithms-Insertion-sort b/Lang/S-BASIC/Sorting-algorithms-Insertion-sort
new file mode 120000
index 0000000000..60391d0e75
--- /dev/null
+++ b/Lang/S-BASIC/Sorting-algorithms-Insertion-sort
@@ -0,0 +1 @@
+../../Task/Sorting-algorithms-Insertion-sort/S-BASIC
\ No newline at end of file
diff --git a/Lang/SETL/Monte-Carlo-methods b/Lang/SETL/Monte-Carlo-methods
new file mode 120000
index 0000000000..da6adaf82b
--- /dev/null
+++ b/Lang/SETL/Monte-Carlo-methods
@@ -0,0 +1 @@
+../../Task/Monte-Carlo-methods/SETL
\ No newline at end of file
diff --git a/Lang/SETL/Tokenize-a-string b/Lang/SETL/Tokenize-a-string
new file mode 120000
index 0000000000..bd55474aef
--- /dev/null
+++ b/Lang/SETL/Tokenize-a-string
@@ -0,0 +1 @@
+../../Task/Tokenize-a-string/SETL
\ No newline at end of file
diff --git a/Lang/Scala/Continued-fraction-Arithmetic-G-matrix-ng-continued-fraction-n- b/Lang/Scala/Continued-fraction-Arithmetic-G-matrix-ng-continued-fraction-n-
new file mode 120000
index 0000000000..03b359aab4
--- /dev/null
+++ b/Lang/Scala/Continued-fraction-Arithmetic-G-matrix-ng-continued-fraction-n-
@@ -0,0 +1 @@
+../../Task/Continued-fraction-Arithmetic-G-matrix-ng-continued-fraction-n-/Scala
\ No newline at end of file
diff --git a/Lang/Scala/Tonelli-Shanks-algorithm b/Lang/Scala/Tonelli-Shanks-algorithm
new file mode 120000
index 0000000000..a29f0a9b6f
--- /dev/null
+++ b/Lang/Scala/Tonelli-Shanks-algorithm
@@ -0,0 +1 @@
+../../Task/Tonelli-Shanks-algorithm/Scala
\ No newline at end of file
diff --git a/Lang/Scala/UPC b/Lang/Scala/UPC
new file mode 120000
index 0000000000..bc3faec2ef
--- /dev/null
+++ b/Lang/Scala/UPC
@@ -0,0 +1 @@
+../../Task/UPC/Scala
\ No newline at end of file
diff --git a/Lang/Scheme/Own-digits-power-sum b/Lang/Scheme/Own-digits-power-sum
new file mode 120000
index 0000000000..0897a09d02
--- /dev/null
+++ b/Lang/Scheme/Own-digits-power-sum
@@ -0,0 +1 @@
+../../Task/Own-digits-power-sum/Scheme
\ No newline at end of file
diff --git a/Lang/Scheme/Pick-random-element b/Lang/Scheme/Pick-random-element
new file mode 120000
index 0000000000..5745ea287d
--- /dev/null
+++ b/Lang/Scheme/Pick-random-element
@@ -0,0 +1 @@
+../../Task/Pick-random-element/Scheme
\ No newline at end of file
diff --git a/Lang/SequenceL/00-LANG.txt b/Lang/SequenceL/00-LANG.txt
index 3c3098bf74..5e5a95101f 100644
--- a/Lang/SequenceL/00-LANG.txt
+++ b/Lang/SequenceL/00-LANG.txt
@@ -3,7 +3,7 @@
|strength=strong
|safety=safe
|checking=static
-|site=http://sequencel.com
+|site=
|tags=sequencel
|hopl=no}}
{{language programming paradigm|Declarative}}
diff --git a/Lang/Swift/AVL-tree b/Lang/Swift/AVL-tree
new file mode 120000
index 0000000000..ff46aae38e
--- /dev/null
+++ b/Lang/Swift/AVL-tree
@@ -0,0 +1 @@
+../../Task/AVL-tree/Swift
\ No newline at end of file
diff --git a/Lang/Swift/Boyer-Moore-string-search b/Lang/Swift/Boyer-Moore-string-search
new file mode 120000
index 0000000000..d0d21c21e5
--- /dev/null
+++ b/Lang/Swift/Boyer-Moore-string-search
@@ -0,0 +1 @@
+../../Task/Boyer-Moore-string-search/Swift
\ No newline at end of file
diff --git a/Lang/Swift/Chaocipher b/Lang/Swift/Chaocipher
new file mode 120000
index 0000000000..6e9ab31392
--- /dev/null
+++ b/Lang/Swift/Chaocipher
@@ -0,0 +1 @@
+../../Task/Chaocipher/Swift
\ No newline at end of file
diff --git a/Lang/Swift/Continued-fraction-Arithmetic-G-matrix-ng-continued-fraction-n- b/Lang/Swift/Continued-fraction-Arithmetic-G-matrix-ng-continued-fraction-n-
new file mode 120000
index 0000000000..bfa2341e33
--- /dev/null
+++ b/Lang/Swift/Continued-fraction-Arithmetic-G-matrix-ng-continued-fraction-n-
@@ -0,0 +1 @@
+../../Task/Continued-fraction-Arithmetic-G-matrix-ng-continued-fraction-n-/Swift
\ No newline at end of file
diff --git a/Lang/Swift/Floyd-Warshall-algorithm b/Lang/Swift/Floyd-Warshall-algorithm
new file mode 120000
index 0000000000..d1366dce22
--- /dev/null
+++ b/Lang/Swift/Floyd-Warshall-algorithm
@@ -0,0 +1 @@
+../../Task/Floyd-Warshall-algorithm/Swift
\ No newline at end of file
diff --git a/Lang/Swift/K-d-tree b/Lang/Swift/K-d-tree
new file mode 120000
index 0000000000..a4758e806b
--- /dev/null
+++ b/Lang/Swift/K-d-tree
@@ -0,0 +1 @@
+../../Task/K-d-tree/Swift
\ No newline at end of file
diff --git a/Lang/Swift/Parse-an-IP-Address b/Lang/Swift/Parse-an-IP-Address
new file mode 120000
index 0000000000..b157f3f9a2
--- /dev/null
+++ b/Lang/Swift/Parse-an-IP-Address
@@ -0,0 +1 @@
+../../Task/Parse-an-IP-Address/Swift
\ No newline at end of file
diff --git a/Lang/TAV/00-LANG.txt b/Lang/TAV/00-LANG.txt
new file mode 100644
index 0000000000..bb9d8890a2
--- /dev/null
+++ b/Lang/TAV/00-LANG.txt
@@ -0,0 +1,46 @@
+{{language|TAV
+|site=https://tavpl.de
+|untyped=yes
+|exec=machine
+|gc=no
+|parampass=reference
+|checking=dynamic
+|safety=safe
+}}
+{{language programming paradigm|Procedural}}
+{{CompileOnline}}
+
+'''TAV''' is the '''terse and verbose'''
+language that borrows from [[Python]], Stage2, [[Genie]] and more.
+
+Its most outstanding feature is the use of templates for function calls instead of the
+traditional function_name(parameter, parameter, ...) form.
+Matched parenthesis are consequently rarely necessary.
+
+Summary of important points:
+
+* C precompiler, should work on any system with a reasonable C compiler
+* Block structuring by indentation, like in Python; line oriented
+* No keywords in the core language, only symbols (i.e. bigraphs)
+* Variables are of any kind (type) dynamically; no declarations necessary
+* Function definition and calls by word sequences with interspersed parameters, often no parenthesis needed
+* Maps (dictionaries) with all kinds of keys (except floating-point numbers)
+* Rows (arrays) if the keys are dense integers, dynamically expanding
+* Arbitrary precision integer numbers
+* Dynamic Unicode strings
+* Fields for extra data in rows and maps
+* Attributes for information about an item
+* Fault items for reliable error handling
+* Reference counting avoids unsolicited delays for garbage-collection
+* Basic support for object-oriented programming (no inheritance)
+* Discretionary type system specified, but not yet tested
+* Publication syntax with common English keywords instead of symbols
+* Bindings to SDL, Cairo and GTK (proof-of-concept level)
+
+Many examples can be run via copy and paste in the Playground.
+
+Because there are no keywords and rarely nested parenthesis (of any kind),
+syntax highlighting is not used.
+
+==Links==
+*[[https://tavpl.de/TAV-Online TAV Online Playground]]
\ No newline at end of file
diff --git a/Lang/TAV/00-META.yaml b/Lang/TAV/00-META.yaml
new file mode 100644
index 0000000000..94650f22a2
--- /dev/null
+++ b/Lang/TAV/00-META.yaml
@@ -0,0 +1,2 @@
+---
+from: http://rosettacode.org/wiki/Category:TAV
diff --git a/Lang/TAV/A+B b/Lang/TAV/A+B
new file mode 120000
index 0000000000..a5e97665e3
--- /dev/null
+++ b/Lang/TAV/A+B
@@ -0,0 +1 @@
+../../Task/A+B/TAV
\ No newline at end of file
diff --git a/Lang/TAV/Ackermann-function b/Lang/TAV/Ackermann-function
new file mode 120000
index 0000000000..237de07217
--- /dev/null
+++ b/Lang/TAV/Ackermann-function
@@ -0,0 +1 @@
+../../Task/Ackermann-function/TAV
\ No newline at end of file
diff --git a/Lang/TAV/Anagrams b/Lang/TAV/Anagrams
new file mode 120000
index 0000000000..335a62bd1c
--- /dev/null
+++ b/Lang/TAV/Anagrams
@@ -0,0 +1 @@
+../../Task/Anagrams/TAV
\ No newline at end of file
diff --git a/Lang/TAV/Arithmetic-Integer b/Lang/TAV/Arithmetic-Integer
new file mode 120000
index 0000000000..b9d994e37f
--- /dev/null
+++ b/Lang/TAV/Arithmetic-Integer
@@ -0,0 +1 @@
+../../Task/Arithmetic-Integer/TAV
\ No newline at end of file
diff --git a/Lang/TAV/Array-concatenation b/Lang/TAV/Array-concatenation
new file mode 120000
index 0000000000..a1b0d9260d
--- /dev/null
+++ b/Lang/TAV/Array-concatenation
@@ -0,0 +1 @@
+../../Task/Array-concatenation/TAV
\ No newline at end of file
diff --git a/Lang/TAV/Array-length b/Lang/TAV/Array-length
new file mode 120000
index 0000000000..0d849f41e8
--- /dev/null
+++ b/Lang/TAV/Array-length
@@ -0,0 +1 @@
+../../Task/Array-length/TAV
\ No newline at end of file
diff --git a/Lang/TAV/Associative-array-Iteration b/Lang/TAV/Associative-array-Iteration
new file mode 120000
index 0000000000..48bdb805ad
--- /dev/null
+++ b/Lang/TAV/Associative-array-Iteration
@@ -0,0 +1 @@
+../../Task/Associative-array-Iteration/TAV
\ No newline at end of file
diff --git a/Lang/TAV/Averages-Root-mean-square b/Lang/TAV/Averages-Root-mean-square
new file mode 120000
index 0000000000..75f73fbdb8
--- /dev/null
+++ b/Lang/TAV/Averages-Root-mean-square
@@ -0,0 +1 @@
+../../Task/Averages-Root-mean-square/TAV
\ No newline at end of file
diff --git a/Lang/TAV/Character-codes b/Lang/TAV/Character-codes
new file mode 120000
index 0000000000..46e37f6e83
--- /dev/null
+++ b/Lang/TAV/Character-codes
@@ -0,0 +1 @@
+../../Task/Character-codes/TAV
\ No newline at end of file
diff --git a/Lang/TAV/Command-line-arguments b/Lang/TAV/Command-line-arguments
new file mode 120000
index 0000000000..72fc191937
--- /dev/null
+++ b/Lang/TAV/Command-line-arguments
@@ -0,0 +1 @@
+../../Task/Command-line-arguments/TAV
\ No newline at end of file
diff --git a/Lang/TAV/Conditional-structures b/Lang/TAV/Conditional-structures
new file mode 120000
index 0000000000..bf797da6e6
--- /dev/null
+++ b/Lang/TAV/Conditional-structures
@@ -0,0 +1 @@
+../../Task/Conditional-structures/TAV
\ No newline at end of file
diff --git a/Lang/TAV/Copy-a-string b/Lang/TAV/Copy-a-string
new file mode 120000
index 0000000000..3ca111af72
--- /dev/null
+++ b/Lang/TAV/Copy-a-string
@@ -0,0 +1 @@
+../../Task/Copy-a-string/TAV
\ No newline at end of file
diff --git a/Lang/TAV/Create-a-two-dimensional-array-at-runtime b/Lang/TAV/Create-a-two-dimensional-array-at-runtime
new file mode 120000
index 0000000000..ec0fae01dd
--- /dev/null
+++ b/Lang/TAV/Create-a-two-dimensional-array-at-runtime
@@ -0,0 +1 @@
+../../Task/Create-a-two-dimensional-array-at-runtime/TAV
\ No newline at end of file
diff --git a/Lang/TAV/Empty-string b/Lang/TAV/Empty-string
new file mode 120000
index 0000000000..c001916e31
--- /dev/null
+++ b/Lang/TAV/Empty-string
@@ -0,0 +1 @@
+../../Task/Empty-string/TAV
\ No newline at end of file
diff --git a/Lang/TAV/Factorial b/Lang/TAV/Factorial
new file mode 120000
index 0000000000..005136367e
--- /dev/null
+++ b/Lang/TAV/Factorial
@@ -0,0 +1 @@
+../../Task/Factorial/TAV
\ No newline at end of file
diff --git a/Lang/TAV/Fibonacci-sequence b/Lang/TAV/Fibonacci-sequence
new file mode 120000
index 0000000000..e65f13e72b
--- /dev/null
+++ b/Lang/TAV/Fibonacci-sequence
@@ -0,0 +1 @@
+../../Task/Fibonacci-sequence/TAV
\ No newline at end of file
diff --git a/Lang/TAV/Formatted-numeric-output b/Lang/TAV/Formatted-numeric-output
new file mode 120000
index 0000000000..efbc60523a
--- /dev/null
+++ b/Lang/TAV/Formatted-numeric-output
@@ -0,0 +1 @@
+../../Task/Formatted-numeric-output/TAV
\ No newline at end of file
diff --git a/Lang/TAV/Greatest-element-of-a-list b/Lang/TAV/Greatest-element-of-a-list
new file mode 120000
index 0000000000..b4f81674a0
--- /dev/null
+++ b/Lang/TAV/Greatest-element-of-a-list
@@ -0,0 +1 @@
+../../Task/Greatest-element-of-a-list/TAV
\ No newline at end of file
diff --git a/Lang/TAV/Guess-the-number-With-feedback b/Lang/TAV/Guess-the-number-With-feedback
new file mode 120000
index 0000000000..5779e4d532
--- /dev/null
+++ b/Lang/TAV/Guess-the-number-With-feedback
@@ -0,0 +1 @@
+../../Task/Guess-the-number-With-feedback/TAV
\ No newline at end of file
diff --git a/Lang/TAV/HTTPS b/Lang/TAV/HTTPS
new file mode 120000
index 0000000000..3b5c7b8988
--- /dev/null
+++ b/Lang/TAV/HTTPS
@@ -0,0 +1 @@
+../../Task/HTTPS/TAV
\ No newline at end of file
diff --git a/Lang/TAV/Halt-and-catch-fire b/Lang/TAV/Halt-and-catch-fire
new file mode 120000
index 0000000000..802c4aa7b1
--- /dev/null
+++ b/Lang/TAV/Halt-and-catch-fire
@@ -0,0 +1 @@
+../../Task/Halt-and-catch-fire/TAV
\ No newline at end of file
diff --git a/Lang/TAV/Hello-world-Graphical b/Lang/TAV/Hello-world-Graphical
new file mode 120000
index 0000000000..5207716bc0
--- /dev/null
+++ b/Lang/TAV/Hello-world-Graphical
@@ -0,0 +1 @@
+../../Task/Hello-world-Graphical/TAV
\ No newline at end of file
diff --git a/Lang/TAV/Hello-world-Text b/Lang/TAV/Hello-world-Text
new file mode 120000
index 0000000000..3fd6788564
--- /dev/null
+++ b/Lang/TAV/Hello-world-Text
@@ -0,0 +1 @@
+../../Task/Hello-world-Text/TAV
\ No newline at end of file
diff --git a/Lang/TAV/Letter-frequency b/Lang/TAV/Letter-frequency
new file mode 120000
index 0000000000..891b699844
--- /dev/null
+++ b/Lang/TAV/Letter-frequency
@@ -0,0 +1 @@
+../../Task/Letter-frequency/TAV
\ No newline at end of file
diff --git a/Lang/TAV/Loop-over-multiple-arrays-simultaneously b/Lang/TAV/Loop-over-multiple-arrays-simultaneously
new file mode 120000
index 0000000000..b6133fd1e3
--- /dev/null
+++ b/Lang/TAV/Loop-over-multiple-arrays-simultaneously
@@ -0,0 +1 @@
+../../Task/Loop-over-multiple-arrays-simultaneously/TAV
\ No newline at end of file
diff --git a/Lang/TAV/Loops-Break b/Lang/TAV/Loops-Break
new file mode 120000
index 0000000000..9576a14c29
--- /dev/null
+++ b/Lang/TAV/Loops-Break
@@ -0,0 +1 @@
+../../Task/Loops-Break/TAV
\ No newline at end of file
diff --git a/Lang/TAV/Loops-Do-while b/Lang/TAV/Loops-Do-while
new file mode 120000
index 0000000000..1fc4e33872
--- /dev/null
+++ b/Lang/TAV/Loops-Do-while
@@ -0,0 +1 @@
+../../Task/Loops-Do-while/TAV
\ No newline at end of file
diff --git a/Lang/TAV/Loops-Downward-for b/Lang/TAV/Loops-Downward-for
new file mode 120000
index 0000000000..414c0842ce
--- /dev/null
+++ b/Lang/TAV/Loops-Downward-for
@@ -0,0 +1 @@
+../../Task/Loops-Downward-for/TAV
\ No newline at end of file
diff --git a/Lang/TAV/Loops-For b/Lang/TAV/Loops-For
new file mode 120000
index 0000000000..b5f2be83c7
--- /dev/null
+++ b/Lang/TAV/Loops-For
@@ -0,0 +1 @@
+../../Task/Loops-For/TAV
\ No newline at end of file
diff --git a/Lang/TAV/Loops-Infinite b/Lang/TAV/Loops-Infinite
new file mode 120000
index 0000000000..6ab04989e3
--- /dev/null
+++ b/Lang/TAV/Loops-Infinite
@@ -0,0 +1 @@
+../../Task/Loops-Infinite/TAV
\ No newline at end of file
diff --git a/Lang/TAV/Loops-N-plus-one-half b/Lang/TAV/Loops-N-plus-one-half
new file mode 120000
index 0000000000..eaeea87dec
--- /dev/null
+++ b/Lang/TAV/Loops-N-plus-one-half
@@ -0,0 +1 @@
+../../Task/Loops-N-plus-one-half/TAV
\ No newline at end of file
diff --git a/Lang/TAV/Loops-While b/Lang/TAV/Loops-While
new file mode 120000
index 0000000000..b408169718
--- /dev/null
+++ b/Lang/TAV/Loops-While
@@ -0,0 +1 @@
+../../Task/Loops-While/TAV
\ No newline at end of file
diff --git a/Lang/TAV/Multiplication-tables b/Lang/TAV/Multiplication-tables
new file mode 120000
index 0000000000..294070cfc4
--- /dev/null
+++ b/Lang/TAV/Multiplication-tables
@@ -0,0 +1 @@
+../../Task/Multiplication-tables/TAV
\ No newline at end of file
diff --git a/Lang/TAV/Ordered-words b/Lang/TAV/Ordered-words
new file mode 120000
index 0000000000..1dd34f0734
--- /dev/null
+++ b/Lang/TAV/Ordered-words
@@ -0,0 +1 @@
+../../Task/Ordered-words/TAV
\ No newline at end of file
diff --git a/Lang/TAV/Permutations b/Lang/TAV/Permutations
new file mode 120000
index 0000000000..c61f5ead43
--- /dev/null
+++ b/Lang/TAV/Permutations
@@ -0,0 +1 @@
+../../Task/Permutations/TAV
\ No newline at end of file
diff --git a/Lang/TAV/Real-constants-and-functions b/Lang/TAV/Real-constants-and-functions
new file mode 120000
index 0000000000..074b803009
--- /dev/null
+++ b/Lang/TAV/Real-constants-and-functions
@@ -0,0 +1 @@
+../../Task/Real-constants-and-functions/TAV
\ No newline at end of file
diff --git a/Lang/TAV/Reverse-a-string b/Lang/TAV/Reverse-a-string
new file mode 120000
index 0000000000..ded0969ffb
--- /dev/null
+++ b/Lang/TAV/Reverse-a-string
@@ -0,0 +1 @@
+../../Task/Reverse-a-string/TAV
\ No newline at end of file
diff --git a/Lang/TAV/Semordnilap b/Lang/TAV/Semordnilap
new file mode 120000
index 0000000000..2269a5f472
--- /dev/null
+++ b/Lang/TAV/Semordnilap
@@ -0,0 +1 @@
+../../Task/Semordnilap/TAV
\ No newline at end of file
diff --git a/Lang/TAV/Simple-windowed-application b/Lang/TAV/Simple-windowed-application
new file mode 120000
index 0000000000..16b1926606
--- /dev/null
+++ b/Lang/TAV/Simple-windowed-application
@@ -0,0 +1 @@
+../../Task/Simple-windowed-application/TAV
\ No newline at end of file
diff --git a/Lang/TAV/Stack b/Lang/TAV/Stack
new file mode 120000
index 0000000000..a05bead248
--- /dev/null
+++ b/Lang/TAV/Stack
@@ -0,0 +1 @@
+../../Task/Stack/TAV
\ No newline at end of file
diff --git a/Lang/TAV/String-length b/Lang/TAV/String-length
new file mode 120000
index 0000000000..6374cb4fac
--- /dev/null
+++ b/Lang/TAV/String-length
@@ -0,0 +1 @@
+../../Task/String-length/TAV
\ No newline at end of file
diff --git a/Lang/TAV/Tic-tac-toe b/Lang/TAV/Tic-tac-toe
new file mode 120000
index 0000000000..c75d3a40ab
--- /dev/null
+++ b/Lang/TAV/Tic-tac-toe
@@ -0,0 +1 @@
+../../Task/Tic-tac-toe/TAV
\ No newline at end of file
diff --git a/Lang/TAV/Tokenize-a-string b/Lang/TAV/Tokenize-a-string
new file mode 120000
index 0000000000..8b4118dfbe
--- /dev/null
+++ b/Lang/TAV/Tokenize-a-string
@@ -0,0 +1 @@
+../../Task/Tokenize-a-string/TAV
\ No newline at end of file
diff --git a/Lang/TAV/Window-creation b/Lang/TAV/Window-creation
new file mode 120000
index 0000000000..83a0431016
--- /dev/null
+++ b/Lang/TAV/Window-creation
@@ -0,0 +1 @@
+../../Task/Window-creation/TAV
\ No newline at end of file
diff --git a/Lang/TAV/Word-frequency b/Lang/TAV/Word-frequency
new file mode 120000
index 0000000000..569f86daf5
--- /dev/null
+++ b/Lang/TAV/Word-frequency
@@ -0,0 +1 @@
+../../Task/Word-frequency/TAV
\ No newline at end of file
diff --git a/Lang/Tcl/M-bius-function b/Lang/Tcl/M-bius-function
new file mode 120000
index 0000000000..1c7ccdef59
--- /dev/null
+++ b/Lang/Tcl/M-bius-function
@@ -0,0 +1 @@
+../../Task/M-bius-function/Tcl
\ No newline at end of file
diff --git a/Lang/Ursalang/Loops-Break b/Lang/Ursalang/Loops-Break
new file mode 120000
index 0000000000..9956e0ecbe
--- /dev/null
+++ b/Lang/Ursalang/Loops-Break
@@ -0,0 +1 @@
+../../Task/Loops-Break/Ursalang
\ No newline at end of file
diff --git a/Lang/Ursalang/Loops-While b/Lang/Ursalang/Loops-While
new file mode 120000
index 0000000000..45dc0e4ade
--- /dev/null
+++ b/Lang/Ursalang/Loops-While
@@ -0,0 +1 @@
+../../Task/Loops-While/Ursalang
\ No newline at end of file
diff --git a/Lang/V-(Vlang)/Compile-time-calculation b/Lang/V-(Vlang)/Compile-time-calculation
new file mode 120000
index 0000000000..1ec9e378fa
--- /dev/null
+++ b/Lang/V-(Vlang)/Compile-time-calculation
@@ -0,0 +1 @@
+../../Task/Compile-time-calculation/V-(Vlang)
\ No newline at end of file
diff --git a/Lang/V-(Vlang)/Inheritance-Multiple b/Lang/V-(Vlang)/Inheritance-Multiple
new file mode 120000
index 0000000000..5c8421d069
--- /dev/null
+++ b/Lang/V-(Vlang)/Inheritance-Multiple
@@ -0,0 +1 @@
+../../Task/Inheritance-Multiple/V-(Vlang)
\ No newline at end of file
diff --git a/Lang/V-(Vlang)/Inheritance-Single b/Lang/V-(Vlang)/Inheritance-Single
new file mode 120000
index 0000000000..e9a1dd6d9f
--- /dev/null
+++ b/Lang/V-(Vlang)/Inheritance-Single
@@ -0,0 +1 @@
+../../Task/Inheritance-Single/V-(Vlang)
\ No newline at end of file
diff --git a/Lang/V-(Vlang)/Metaprogramming b/Lang/V-(Vlang)/Metaprogramming
new file mode 120000
index 0000000000..6b8564d95e
--- /dev/null
+++ b/Lang/V-(Vlang)/Metaprogramming
@@ -0,0 +1 @@
+../../Task/Metaprogramming/V-(Vlang)
\ No newline at end of file
diff --git a/Lang/Vyxal/00-LANG.txt b/Lang/Vyxal/00-LANG.txt
new file mode 100644
index 0000000000..0acceafc9b
--- /dev/null
+++ b/Lang/Vyxal/00-LANG.txt
@@ -0,0 +1,3 @@
+{{language|Vyxal}}
+
+Vyxal is an esoteric golfing language designed to make code golf challenges fun, and to allow code golfers to win said challenges.
\ No newline at end of file
diff --git a/Lang/Vyxal/00-META.yaml b/Lang/Vyxal/00-META.yaml
new file mode 100644
index 0000000000..a5968dda5e
--- /dev/null
+++ b/Lang/Vyxal/00-META.yaml
@@ -0,0 +1,2 @@
+---
+from: http://rosettacode.org/wiki/Category:Vyxal
diff --git a/Lang/Vyxal/Factorial b/Lang/Vyxal/Factorial
new file mode 120000
index 0000000000..1cdfde0f4b
--- /dev/null
+++ b/Lang/Vyxal/Factorial
@@ -0,0 +1 @@
+../../Task/Factorial/Vyxal
\ No newline at end of file
diff --git a/Lang/Vyxal/FizzBuzz b/Lang/Vyxal/FizzBuzz
new file mode 120000
index 0000000000..22964032ea
--- /dev/null
+++ b/Lang/Vyxal/FizzBuzz
@@ -0,0 +1 @@
+../../Task/FizzBuzz/Vyxal
\ No newline at end of file
diff --git a/Lang/XBasic/AKS-test-for-primes b/Lang/XBasic/AKS-test-for-primes
new file mode 120000
index 0000000000..dcd18f7155
--- /dev/null
+++ b/Lang/XBasic/AKS-test-for-primes
@@ -0,0 +1 @@
+../../Task/AKS-test-for-primes/XBasic
\ No newline at end of file
diff --git a/Lang/XBasic/Josephus-problem b/Lang/XBasic/Josephus-problem
new file mode 120000
index 0000000000..425d14bd16
--- /dev/null
+++ b/Lang/XBasic/Josephus-problem
@@ -0,0 +1 @@
+../../Task/Josephus-problem/XBasic
\ No newline at end of file
diff --git a/Lang/XPL0/AKS-test-for-primes b/Lang/XPL0/AKS-test-for-primes
new file mode 120000
index 0000000000..16474e53df
--- /dev/null
+++ b/Lang/XPL0/AKS-test-for-primes
@@ -0,0 +1 @@
+../../Task/AKS-test-for-primes/XPL0
\ No newline at end of file
diff --git a/Lang/XPL0/Cistercian-numerals b/Lang/XPL0/Cistercian-numerals
new file mode 120000
index 0000000000..c2ce89db06
--- /dev/null
+++ b/Lang/XPL0/Cistercian-numerals
@@ -0,0 +1 @@
+../../Task/Cistercian-numerals/XPL0
\ No newline at end of file
diff --git a/Lang/YAMLScript/00-LANG.txt b/Lang/YAMLScript/00-LANG.txt
index a35f9dca7d..53f8a21c4a 100644
--- a/Lang/YAMLScript/00-LANG.txt
+++ b/Lang/YAMLScript/00-LANG.txt
@@ -4,18 +4,23 @@
{{language programming paradigm|hosted}}
{{implementation|Lisp}}
-'''[https://yamlscript.org YS (aka 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 YS programs.
+'''[https://yamlscript.org YS (pronounced "wise", aka 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 YS programs.
You can learn YS for free (with help from experienced mentors) at [https://exercism.org/tracks/yamlscript Exercism].
-YS 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:
+YS 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 libys.so] shared library:
+* [https://www.nuget.org/packages/YAMLScript/ C#]
* [https://clojars.org/org.yamlscript/clj-yamlscript Clojure]
+* [https://shardbox.org/shards/yamlscript Crystal]
* [https://github.com/yaml/yamlscript-go Go]
+* [https://hackage.haskell.org/package/yamlscript Haskell]
* [https://clojars.org/org.yamlscript/yamlscript Java]
* [https://juliahub.com/ui/Packages/General/YAMLScript Julia]
+* [https://luarocks.org/modules/ingy/yamlscript Lua]
* [https://www.npmjs.com/package/@yaml/yamlscript NodeJS]
* [https://metacpan.org/pod/YAMLScript Perl]
+* [https://packagist.org/packages/yaml/yamlscript PHP]
* [https://pypi.org/project/yamlscript/ Python]
* [https://raku.land/zef:ingy/YAMLScript Raku]
* [https://rubygems.org/gems/yamlscript Ruby]
@@ -25,7 +30,7 @@ YS has a compiler/interpreter CLI program called [https://github.com/yaml/
Run this command to install the ys command line YS runner/loader/compiler binary.
- curl -s https://yamlscript.org/install | bash
+ curl https://getys.org/ys | bash
That will install $HOME/.local/bin/ys. If $HOME/.local/bin is not in your PATH, run:
diff --git a/Lang/YAMLScript/Best-shuffle b/Lang/YAMLScript/Best-shuffle
new file mode 120000
index 0000000000..99ffbfc9b1
--- /dev/null
+++ b/Lang/YAMLScript/Best-shuffle
@@ -0,0 +1 @@
+../../Task/Best-shuffle/YAMLScript
\ No newline at end of file
diff --git a/Lang/YAMLScript/Conways-Game-of-Life b/Lang/YAMLScript/Conways-Game-of-Life
new file mode 120000
index 0000000000..3153c05b26
--- /dev/null
+++ b/Lang/YAMLScript/Conways-Game-of-Life
@@ -0,0 +1 @@
+../../Task/Conways-Game-of-Life/YAMLScript
\ No newline at end of file
diff --git a/Lang/YAMLScript/Dragon-curve b/Lang/YAMLScript/Dragon-curve
new file mode 120000
index 0000000000..7f9deedb82
--- /dev/null
+++ b/Lang/YAMLScript/Dragon-curve
@@ -0,0 +1 @@
+../../Task/Dragon-curve/YAMLScript
\ No newline at end of file
diff --git a/Lang/YAMLScript/Even-or-odd b/Lang/YAMLScript/Even-or-odd
new file mode 120000
index 0000000000..95556dd2eb
--- /dev/null
+++ b/Lang/YAMLScript/Even-or-odd
@@ -0,0 +1 @@
+../../Task/Even-or-odd/YAMLScript
\ No newline at end of file
diff --git a/Lang/YAMLScript/Integer-comparison b/Lang/YAMLScript/Integer-comparison
new file mode 120000
index 0000000000..47b0c04990
--- /dev/null
+++ b/Lang/YAMLScript/Integer-comparison
@@ -0,0 +1 @@
+../../Task/Integer-comparison/YAMLScript
\ No newline at end of file
diff --git a/Lang/YAMLScript/JortSort b/Lang/YAMLScript/JortSort
new file mode 120000
index 0000000000..28bb797476
--- /dev/null
+++ b/Lang/YAMLScript/JortSort
@@ -0,0 +1 @@
+../../Task/JortSort/YAMLScript
\ No newline at end of file
diff --git a/Lang/YAMLScript/Knuth-shuffle b/Lang/YAMLScript/Knuth-shuffle
new file mode 120000
index 0000000000..676dc89553
--- /dev/null
+++ b/Lang/YAMLScript/Knuth-shuffle
@@ -0,0 +1 @@
+../../Task/Knuth-shuffle/YAMLScript
\ No newline at end of file
diff --git a/Lang/YAMLScript/Munching-squares b/Lang/YAMLScript/Munching-squares
new file mode 120000
index 0000000000..2b7870226f
--- /dev/null
+++ b/Lang/YAMLScript/Munching-squares
@@ -0,0 +1 @@
+../../Task/Munching-squares/YAMLScript
\ No newline at end of file
diff --git a/Lang/YAMLScript/Next-highest-int-from-digits b/Lang/YAMLScript/Next-highest-int-from-digits
new file mode 120000
index 0000000000..6dd0221650
--- /dev/null
+++ b/Lang/YAMLScript/Next-highest-int-from-digits
@@ -0,0 +1 @@
+../../Task/Next-highest-int-from-digits/YAMLScript
\ No newline at end of file
diff --git a/Lang/YAMLScript/One-dimensional-cellular-automata b/Lang/YAMLScript/One-dimensional-cellular-automata
new file mode 120000
index 0000000000..74c105b72e
--- /dev/null
+++ b/Lang/YAMLScript/One-dimensional-cellular-automata
@@ -0,0 +1 @@
+../../Task/One-dimensional-cellular-automata/YAMLScript
\ No newline at end of file
diff --git a/Lang/YAMLScript/Quickselect-algorithm b/Lang/YAMLScript/Quickselect-algorithm
new file mode 120000
index 0000000000..978322a04a
--- /dev/null
+++ b/Lang/YAMLScript/Quickselect-algorithm
@@ -0,0 +1 @@
+../../Task/Quickselect-algorithm/YAMLScript
\ No newline at end of file
diff --git a/Lang/YAMLScript/Sparkline-in-unicode b/Lang/YAMLScript/Sparkline-in-unicode
new file mode 120000
index 0000000000..ae2a07413c
--- /dev/null
+++ b/Lang/YAMLScript/Sparkline-in-unicode
@@ -0,0 +1 @@
+../../Task/Sparkline-in-unicode/YAMLScript
\ No newline at end of file
diff --git a/Lang/YAMLScript/Terminal-control-Ringing-the-terminal-bell b/Lang/YAMLScript/Terminal-control-Ringing-the-terminal-bell
new file mode 120000
index 0000000000..21baf990a9
--- /dev/null
+++ b/Lang/YAMLScript/Terminal-control-Ringing-the-terminal-bell
@@ -0,0 +1 @@
+../../Task/Terminal-control-Ringing-the-terminal-bell/YAMLScript
\ No newline at end of file
diff --git a/Lang/YAMLScript/Undefined-values b/Lang/YAMLScript/Undefined-values
new file mode 120000
index 0000000000..ff7699a995
--- /dev/null
+++ b/Lang/YAMLScript/Undefined-values
@@ -0,0 +1 @@
+../../Task/Undefined-values/YAMLScript
\ No newline at end of file
diff --git a/Lang/YAMLScript/Van-der-Corput-sequence b/Lang/YAMLScript/Van-der-Corput-sequence
new file mode 120000
index 0000000000..654ffd3cbb
--- /dev/null
+++ b/Lang/YAMLScript/Van-der-Corput-sequence
@@ -0,0 +1 @@
+../../Task/Van-der-Corput-sequence/YAMLScript
\ No newline at end of file
diff --git a/Lang/YAMLScript/Xiaolin-Wus-line-algorithm b/Lang/YAMLScript/Xiaolin-Wus-line-algorithm
new file mode 120000
index 0000000000..be316f6902
--- /dev/null
+++ b/Lang/YAMLScript/Xiaolin-Wus-line-algorithm
@@ -0,0 +1 @@
+../../Task/Xiaolin-Wus-line-algorithm/YAMLScript
\ No newline at end of file
diff --git a/Lang/YAMLScript/Yellowstone-sequence b/Lang/YAMLScript/Yellowstone-sequence
new file mode 120000
index 0000000000..efac2d410f
--- /dev/null
+++ b/Lang/YAMLScript/Yellowstone-sequence
@@ -0,0 +1 @@
+../../Task/Yellowstone-sequence/YAMLScript
\ No newline at end of file
diff --git a/Lang/YAMLScript/Zig-zag-matrix b/Lang/YAMLScript/Zig-zag-matrix
new file mode 120000
index 0000000000..691eda7cd9
--- /dev/null
+++ b/Lang/YAMLScript/Zig-zag-matrix
@@ -0,0 +1 @@
+../../Task/Zig-zag-matrix/YAMLScript
\ No newline at end of file
diff --git a/Lang/Zig/24-game-Solve b/Lang/Zig/24-game-Solve
new file mode 120000
index 0000000000..cf80fe1aa1
--- /dev/null
+++ b/Lang/Zig/24-game-Solve
@@ -0,0 +1 @@
+../../Task/24-game-Solve/Zig
\ No newline at end of file
diff --git a/Lang/Zig/AVL-tree b/Lang/Zig/AVL-tree
new file mode 120000
index 0000000000..05056fdece
--- /dev/null
+++ b/Lang/Zig/AVL-tree
@@ -0,0 +1 @@
+../../Task/AVL-tree/Zig
\ No newline at end of file
diff --git a/Lang/Zig/Abelian-sandpile-model b/Lang/Zig/Abelian-sandpile-model
new file mode 120000
index 0000000000..aff7b1b955
--- /dev/null
+++ b/Lang/Zig/Abelian-sandpile-model
@@ -0,0 +1 @@
+../../Task/Abelian-sandpile-model/Zig
\ No newline at end of file
diff --git a/Lang/Zig/Abelian-sandpile-model-Identity b/Lang/Zig/Abelian-sandpile-model-Identity
new file mode 120000
index 0000000000..5a22dd3380
--- /dev/null
+++ b/Lang/Zig/Abelian-sandpile-model-Identity
@@ -0,0 +1 @@
+../../Task/Abelian-sandpile-model-Identity/Zig
\ No newline at end of file
diff --git a/Lang/Zig/Arrays b/Lang/Zig/Arrays
new file mode 120000
index 0000000000..8271fea84a
--- /dev/null
+++ b/Lang/Zig/Arrays
@@ -0,0 +1 @@
+../../Task/Arrays/Zig
\ No newline at end of file
diff --git a/Lang/Zig/Associative-array-Creation b/Lang/Zig/Associative-array-Creation
new file mode 120000
index 0000000000..9dff0b181f
--- /dev/null
+++ b/Lang/Zig/Associative-array-Creation
@@ -0,0 +1 @@
+../../Task/Associative-array-Creation/Zig
\ No newline at end of file
diff --git a/Lang/Zig/Associative-array-Iteration b/Lang/Zig/Associative-array-Iteration
new file mode 120000
index 0000000000..0120ea3ca0
--- /dev/null
+++ b/Lang/Zig/Associative-array-Iteration
@@ -0,0 +1 @@
+../../Task/Associative-array-Iteration/Zig
\ No newline at end of file
diff --git a/Lang/Zig/Base64-decode-data b/Lang/Zig/Base64-decode-data
new file mode 120000
index 0000000000..9291a91364
--- /dev/null
+++ b/Lang/Zig/Base64-decode-data
@@ -0,0 +1 @@
+../../Task/Base64-decode-data/Zig
\ No newline at end of file
diff --git a/Lang/Zig/Bifid-cipher b/Lang/Zig/Bifid-cipher
new file mode 120000
index 0000000000..c3e619eb90
--- /dev/null
+++ b/Lang/Zig/Bifid-cipher
@@ -0,0 +1 @@
+../../Task/Bifid-cipher/Zig
\ No newline at end of file
diff --git a/Lang/Zig/Boolean-values b/Lang/Zig/Boolean-values
new file mode 120000
index 0000000000..8bbec67819
--- /dev/null
+++ b/Lang/Zig/Boolean-values
@@ -0,0 +1 @@
+../../Task/Boolean-values/Zig
\ No newline at end of file
diff --git a/Lang/Zig/Boyer-Moore-string-search b/Lang/Zig/Boyer-Moore-string-search
new file mode 120000
index 0000000000..9c6dd89c45
--- /dev/null
+++ b/Lang/Zig/Boyer-Moore-string-search
@@ -0,0 +1 @@
+../../Task/Boyer-Moore-string-search/Zig
\ No newline at end of file
diff --git a/Lang/Zig/Break-OO-privacy b/Lang/Zig/Break-OO-privacy
new file mode 120000
index 0000000000..535f70b15b
--- /dev/null
+++ b/Lang/Zig/Break-OO-privacy
@@ -0,0 +1 @@
+../../Task/Break-OO-privacy/Zig
\ No newline at end of file
diff --git a/Lang/Zig/Camel-case-and-snake-case b/Lang/Zig/Camel-case-and-snake-case
new file mode 120000
index 0000000000..ab00dfd34b
--- /dev/null
+++ b/Lang/Zig/Camel-case-and-snake-case
@@ -0,0 +1 @@
+../../Task/Camel-case-and-snake-case/Zig
\ No newline at end of file
diff --git a/Lang/Zig/Cholesky-decomposition b/Lang/Zig/Cholesky-decomposition
new file mode 120000
index 0000000000..7fbe65969f
--- /dev/null
+++ b/Lang/Zig/Cholesky-decomposition
@@ -0,0 +1 @@
+../../Task/Cholesky-decomposition/Zig
\ No newline at end of file
diff --git a/Lang/Zig/Cumulative-standard-deviation b/Lang/Zig/Cumulative-standard-deviation
new file mode 120000
index 0000000000..225e824146
--- /dev/null
+++ b/Lang/Zig/Cumulative-standard-deviation
@@ -0,0 +1 @@
+../../Task/Cumulative-standard-deviation/Zig
\ No newline at end of file
diff --git a/Lang/Zig/Cyclops-numbers b/Lang/Zig/Cyclops-numbers
new file mode 120000
index 0000000000..625d97b345
--- /dev/null
+++ b/Lang/Zig/Cyclops-numbers
@@ -0,0 +1 @@
+../../Task/Cyclops-numbers/Zig
\ No newline at end of file
diff --git a/Lang/Zig/Deconvolution-1D b/Lang/Zig/Deconvolution-1D
new file mode 120000
index 0000000000..26b778762a
--- /dev/null
+++ b/Lang/Zig/Deconvolution-1D
@@ -0,0 +1 @@
+../../Task/Deconvolution-1D/Zig
\ No newline at end of file
diff --git a/Lang/Zig/Determinant-and-permanent b/Lang/Zig/Determinant-and-permanent
new file mode 120000
index 0000000000..6aec06c204
--- /dev/null
+++ b/Lang/Zig/Determinant-and-permanent
@@ -0,0 +1 @@
+../../Task/Determinant-and-permanent/Zig
\ No newline at end of file
diff --git a/Lang/Zig/Eertree b/Lang/Zig/Eertree
new file mode 120000
index 0000000000..297f5d26a6
--- /dev/null
+++ b/Lang/Zig/Eertree
@@ -0,0 +1 @@
+../../Task/Eertree/Zig
\ No newline at end of file
diff --git a/Lang/Zig/Elliptic-Curve-Digital-Signature-Algorithm b/Lang/Zig/Elliptic-Curve-Digital-Signature-Algorithm
new file mode 120000
index 0000000000..8631c5bdb3
--- /dev/null
+++ b/Lang/Zig/Elliptic-Curve-Digital-Signature-Algorithm
@@ -0,0 +1 @@
+../../Task/Elliptic-Curve-Digital-Signature-Algorithm/Zig
\ No newline at end of file
diff --git a/Lang/Zig/Elliptic-curve-arithmetic b/Lang/Zig/Elliptic-curve-arithmetic
new file mode 120000
index 0000000000..6d1206bc71
--- /dev/null
+++ b/Lang/Zig/Elliptic-curve-arithmetic
@@ -0,0 +1 @@
+../../Task/Elliptic-curve-arithmetic/Zig
\ No newline at end of file
diff --git a/Lang/Zig/Evolutionary-algorithm b/Lang/Zig/Evolutionary-algorithm
new file mode 120000
index 0000000000..59ff814ffb
--- /dev/null
+++ b/Lang/Zig/Evolutionary-algorithm
@@ -0,0 +1 @@
+../../Task/Evolutionary-algorithm/Zig
\ No newline at end of file
diff --git a/Lang/Zig/Factors-of-an-integer b/Lang/Zig/Factors-of-an-integer
new file mode 120000
index 0000000000..9bd33985d3
--- /dev/null
+++ b/Lang/Zig/Factors-of-an-integer
@@ -0,0 +1 @@
+../../Task/Factors-of-an-integer/Zig
\ No newline at end of file
diff --git a/Lang/Zig/Farey-sequence b/Lang/Zig/Farey-sequence
new file mode 120000
index 0000000000..44274502d4
--- /dev/null
+++ b/Lang/Zig/Farey-sequence
@@ -0,0 +1 @@
+../../Task/Farey-sequence/Zig
\ No newline at end of file
diff --git a/Lang/Zig/Gray-code b/Lang/Zig/Gray-code
new file mode 120000
index 0000000000..f2147c406a
--- /dev/null
+++ b/Lang/Zig/Gray-code
@@ -0,0 +1 @@
+../../Task/Gray-code/Zig
\ No newline at end of file
diff --git a/Lang/Zig/K-d-tree b/Lang/Zig/K-d-tree
new file mode 120000
index 0000000000..3fd542d0d2
--- /dev/null
+++ b/Lang/Zig/K-d-tree
@@ -0,0 +1 @@
+../../Task/K-d-tree/Zig
\ No newline at end of file
diff --git a/Lang/Zig/Knapsack-problem-0-1 b/Lang/Zig/Knapsack-problem-0-1
new file mode 120000
index 0000000000..95f8fcd9fc
--- /dev/null
+++ b/Lang/Zig/Knapsack-problem-0-1
@@ -0,0 +1 @@
+../../Task/Knapsack-problem-0-1/Zig
\ No newline at end of file
diff --git a/Lang/Zig/Knights-tour b/Lang/Zig/Knights-tour
new file mode 120000
index 0000000000..a8fa50bb64
--- /dev/null
+++ b/Lang/Zig/Knights-tour
@@ -0,0 +1 @@
+../../Task/Knights-tour/Zig
\ No newline at end of file
diff --git a/Lang/Zig/Loops-Nested b/Lang/Zig/Loops-Nested
new file mode 120000
index 0000000000..a78e39957d
--- /dev/null
+++ b/Lang/Zig/Loops-Nested
@@ -0,0 +1 @@
+../../Task/Loops-Nested/Zig
\ No newline at end of file
diff --git a/Lang/Zig/M-bius-function b/Lang/Zig/M-bius-function
new file mode 120000
index 0000000000..b4ad984b09
--- /dev/null
+++ b/Lang/Zig/M-bius-function
@@ -0,0 +1 @@
+../../Task/M-bius-function/Zig
\ No newline at end of file
diff --git a/Lang/Zig/Main-step-of-GOST-28147-89 b/Lang/Zig/Main-step-of-GOST-28147-89
new file mode 120000
index 0000000000..433b294fbc
--- /dev/null
+++ b/Lang/Zig/Main-step-of-GOST-28147-89
@@ -0,0 +1 @@
+../../Task/Main-step-of-GOST-28147-89/Zig
\ No newline at end of file
diff --git a/Lang/Zig/Modular-arithmetic b/Lang/Zig/Modular-arithmetic
new file mode 120000
index 0000000000..a64c6161fe
--- /dev/null
+++ b/Lang/Zig/Modular-arithmetic
@@ -0,0 +1 @@
+../../Task/Modular-arithmetic/Zig
\ No newline at end of file
diff --git a/Lang/Zig/Modular-inverse b/Lang/Zig/Modular-inverse
new file mode 120000
index 0000000000..f96c2102b0
--- /dev/null
+++ b/Lang/Zig/Modular-inverse
@@ -0,0 +1 @@
+../../Task/Modular-inverse/Zig
\ No newline at end of file
diff --git a/Lang/Zig/Parse-an-IP-Address b/Lang/Zig/Parse-an-IP-Address
new file mode 120000
index 0000000000..dcc1d9a064
--- /dev/null
+++ b/Lang/Zig/Parse-an-IP-Address
@@ -0,0 +1 @@
+../../Task/Parse-an-IP-Address/Zig
\ No newline at end of file
diff --git a/Lang/Zig/Permutations-by-swapping b/Lang/Zig/Permutations-by-swapping
new file mode 120000
index 0000000000..5e667cc7e2
--- /dev/null
+++ b/Lang/Zig/Permutations-by-swapping
@@ -0,0 +1 @@
+../../Task/Permutations-by-swapping/Zig
\ No newline at end of file
diff --git a/Lang/Zig/Stern-Brocot-sequence b/Lang/Zig/Stern-Brocot-sequence
new file mode 120000
index 0000000000..4e68e871bc
--- /dev/null
+++ b/Lang/Zig/Stern-Brocot-sequence
@@ -0,0 +1 @@
+../../Task/Stern-Brocot-sequence/Zig
\ No newline at end of file
diff --git a/Lang/Zig/Sudoku b/Lang/Zig/Sudoku
new file mode 120000
index 0000000000..cc0b8be01d
--- /dev/null
+++ b/Lang/Zig/Sudoku
@@ -0,0 +1 @@
+../../Task/Sudoku/Zig
\ No newline at end of file
diff --git a/Lang/Zig/Tarjan b/Lang/Zig/Tarjan
new file mode 120000
index 0000000000..47db828add
--- /dev/null
+++ b/Lang/Zig/Tarjan
@@ -0,0 +1 @@
+../../Task/Tarjan/Zig
\ No newline at end of file
diff --git a/Lang/Zig/Tree-datastructures b/Lang/Zig/Tree-datastructures
new file mode 120000
index 0000000000..2483259e7c
--- /dev/null
+++ b/Lang/Zig/Tree-datastructures
@@ -0,0 +1 @@
+../../Task/Tree-datastructures/Zig
\ No newline at end of file
diff --git a/Lang/Zig/Verhoeff-algorithm b/Lang/Zig/Verhoeff-algorithm
new file mode 120000
index 0000000000..d90fb8e2ca
--- /dev/null
+++ b/Lang/Zig/Verhoeff-algorithm
@@ -0,0 +1 @@
+../../Task/Verhoeff-algorithm/Zig
\ No newline at end of file
diff --git a/Lang/Zig/Vigen-re-cipher-Cryptanalysis b/Lang/Zig/Vigen-re-cipher-Cryptanalysis
new file mode 120000
index 0000000000..7fd7d3aa92
--- /dev/null
+++ b/Lang/Zig/Vigen-re-cipher-Cryptanalysis
@@ -0,0 +1 @@
+../../Task/Vigen-re-cipher-Cryptanalysis/Zig
\ No newline at end of file
diff --git a/Lang/Zig/Vogels-approximation-method b/Lang/Zig/Vogels-approximation-method
new file mode 120000
index 0000000000..af40cfb307
--- /dev/null
+++ b/Lang/Zig/Vogels-approximation-method
@@ -0,0 +1 @@
+../../Task/Vogels-approximation-method/Zig
\ No newline at end of file
diff --git a/Lang/Zig/War-card-game b/Lang/Zig/War-card-game
new file mode 120000
index 0000000000..6bc9afa5bf
--- /dev/null
+++ b/Lang/Zig/War-card-game
@@ -0,0 +1 @@
+../../Task/War-card-game/Zig
\ No newline at end of file
diff --git a/Task/100-doors/AWK/100-doors-1.awk b/Task/100-doors/AWK/100-doors-1.awk
deleted file mode 100644
index 1c2a279c09..0000000000
--- a/Task/100-doors/AWK/100-doors-1.awk
+++ /dev/null
@@ -1,17 +0,0 @@
-BEGIN {
- for(i=1; i <= 100; i++)
- {
- doors[i] = 0 # close the doors
- }
- for(i=1; i <= 100; i++)
- {
- for(j=i; j <= 100; j += i)
- {
- doors[j] = (doors[j]+1) % 2
- }
- }
- for(i=1; i <= 100; i++)
- {
- print i, doors[i] ? "open" : "close"
- }
-}
diff --git a/Task/100-doors/AWK/100-doors-2.awk b/Task/100-doors/AWK/100-doors-2.awk
deleted file mode 100644
index 9344bbec27..0000000000
--- a/Task/100-doors/AWK/100-doors-2.awk
+++ /dev/null
@@ -1,14 +0,0 @@
-BEGIN {
- for(i=1; i <= 100; i++) {
- doors[i] = 0 # close the doors
- }
- for(i=1; i <= 100; i++) {
- if ( int(sqrt(i)) == sqrt(i) ) {
- doors[i] = 1
- }
- }
- for(i=1; i <= 100; i++)
- {
- print i, doors[i] ? "open" : "close"
- }
-}
diff --git a/Task/100-doors/Adina/100-doors-1.adina b/Task/100-doors/Adina/100-doors-1.adina
new file mode 100644
index 0000000000..0e7190c89e
--- /dev/null
+++ b/Task/100-doors/Adina/100-doors-1.adina
@@ -0,0 +1,16 @@
+двери = новый-массив 100 ложь
+
+цикл
+ шаг
+ в-диапазоне 1 101
+ цикл
+ номер
+ в-диапазоне (шаг - 1) 100 шаг
+ двери[номер] := не двери[номер]
+
+цикл
+ номер 100
+ вывести/перенос
+ формат «Дверь ~a ~a»
+ номер + 1
+ двери[номер] ? «открыта» «закрыта»
diff --git a/Task/100-doors/Adina/100-doors-2.adina b/Task/100-doors/Adina/100-doors-2.adina
new file mode 100644
index 0000000000..6286140dc0
--- /dev/null
+++ b/Task/100-doors/Adina/100-doors-2.adina
@@ -0,0 +1,17 @@
+english()
+doors = make-vector 100 #f
+
+for
+ $ step
+ in-range 1 101
+ for
+ $ number
+ in-range (step - 1) 100 step
+ doors[number] := not doors[number]
+
+for
+ $ number 100
+ displayln
+ format "Door ~a ~a"
+ number + 1
+ if doors[number] "open" "closed"
diff --git a/Task/100-doors/ArkScript/100-doors-1.ark b/Task/100-doors/ArkScript/100-doors-1.ark
new file mode 100644
index 0000000000..713e3b360f
--- /dev/null
+++ b/Task/100-doors/ArkScript/100-doors-1.ark
@@ -0,0 +1,21 @@
+(import std.Range :range :forEach)
+(import std.List)
+
+(mut doors (list:fill 100 false))
+(let r (range 0 100))
+
+(forEach r
+ (fun (i) {
+ (mut j i)
+ (while (< j 100) {
+ (@= doors j (not (@ doors j)))
+ (set j (+ j i 1)) })
+ (print doors) }))
+
+(print
+ (list:map
+ (list:filter
+ (list:zipWithIndex doors)
+ (fun (e)
+ (@ e 1)))
+ (fun (e) (@ e 0))))
diff --git a/Task/100-doors/ArkScript/100-doors-2.ark b/Task/100-doors/ArkScript/100-doors-2.ark
new file mode 100644
index 0000000000..b1cb4380b2
--- /dev/null
+++ b/Task/100-doors/ArkScript/100-doors-2.ark
@@ -0,0 +1,4 @@
+[true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true true]
+...
+[true false false true false false false false true false false false false false false true false false false false false false false false true false false false false false false false false false false true false false false false false false false false false false false false true false false false false false false false false false false false false false false true false false false false false false false false false false false false false false false false true false false false false false false false false false false false false false false false false false false true]
+[0 3 8 15 24 35 48 63 80 99]
diff --git a/Task/100-doors/AutoLISP/100-doors.l b/Task/100-doors/AutoLISP/100-doors.l
new file mode 100644
index 0000000000..d4a0ebbe77
--- /dev/null
+++ b/Task/100-doors/AutoLISP/100-doors.l
@@ -0,0 +1,18 @@
+(defun CreateDoors (n / doors)
+ (repeat n
+ (setq doors (cons nil doors))
+ )
+)
+
+(defun Doors (doors / cnt)
+ (setq cnt 0)
+ (mapcar
+ '(lambda (d)
+ (zerop (rem (sqrt (setq cnt (1+ cnt))) 1))
+ )
+ doors
+ )
+)
+
+> (Doors (CreateDoors 100))
+(T nil nil T nil nil nil nil T nil nil nil nil nil nil T nil nil nil nil nil nil nil nil T nil nil nil nil nil nil nil nil nil nil T nil nil nil nil nil nil nil nil nil nil nil nil T nil nil nil nil nil nil nil nil nil nil nil nil nil nil T nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil T nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil T nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil T nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil T nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil T nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil T nil nil nil nil)
diff --git a/Task/100-doors/Component-Pascal/100-doors.pas b/Task/100-doors/Component-Pascal/100-doors.pas
deleted file mode 100644
index 0e11914244..0000000000
--- a/Task/100-doors/Component-Pascal/100-doors.pas
+++ /dev/null
@@ -1,26 +0,0 @@
-MODULE Doors100;
-IMPORT StdLog;
-
-PROCEDURE Do*;
-VAR
- i,j: INTEGER;
- closed: ARRAY 101 OF BOOLEAN;
-BEGIN
- (* initialization of closed to true *)
- FOR i := 0 TO LEN(closed) - 1 DO closed[i] := TRUE END;
- (* process *)
- FOR i := 1 TO LEN(closed) DO;
- j := 1;
- WHILE j < LEN(closed) DO
- IF j MOD i = 0 THEN closed[j] := ~closed[j] END;INC(j)
- END
- END;
- (* print results *)
- i := 1;
- WHILE i < LEN(closed) DO
- IF (i - 1) MOD 10 = 0 THEN StdLog.Ln END;
- IF closed[i] THEN StdLog.String("C ") ELSE StdLog.String("O ") END;
- INC(i)
- END;
-END Do;
-END Doors100.
diff --git a/Task/100-doors/DuckDB/100-doors.duckdb b/Task/100-doors/DuckDB/100-doors.duckdb
new file mode 100644
index 0000000000..aa3716882e
--- /dev/null
+++ b/Task/100-doors/DuckDB/100-doors.duckdb
@@ -0,0 +1,19 @@
+# Show the state of n doors after n iterations
+create or replace function doors(n) as (
+ with recursive cte(ix,d) as (
+ select 0 as ix, list_transform(range(0, n), x -> false) as d
+ union all
+ select ix+1,
+ list_transform(d, (x,i) -> if (i % (ix + 1) = 0, NOT x, x))
+ from cte
+ where ix < n
+ )
+ select last(d order by ix)
+ from cte
+);
+
+# For brevity, we just show the indices of the doors that are open after all
+# have been visited:
+select ix
+from (select unnest(generate_series(1,100)) as ix, unnest(doors(100)) as d)
+where d = true;
diff --git a/Task/100-doors/Haskell/100-doors-3.hs b/Task/100-doors/Haskell/100-doors-3.hs
index 2cea247dfd..3b66096632 100644
--- a/Task/100-doors/Haskell/100-doors-3.hs
+++ b/Task/100-doors/Haskell/100-doors-3.hs
@@ -1,6 +1,9 @@
-gate :: Eq a => [a] -> [a] -> [Door]
-gate (x:xs) (y:ys) | x == y = Open : gate xs ys
-gate (x:xs) ys = Closed : gate xs ys
-gate [] _ = []
+isDoorOpen :: Integral a => a -> Bool
+-- In Haskell, we are too lazy to open and close doors. Instead we
+-- count how many times we would have toggled them, and then check if
+-- that number is odd.
+isDoorOpen doorNumber = odd numToggles
+ where numToggles = length [ 1 | x <- [1..doorNumber], doorNumber `rem` x == 0]
-run n = gate [1..n] [k*k | k <- [1..]]
+main = do
+ print $ "Open doors are " ++ show [x | x <- [0..100], isDoorOpen x]
diff --git a/Task/100-doors/Haskell/100-doors-4.hs b/Task/100-doors/Haskell/100-doors-4.hs
index 44f44aa391..2cea247dfd 100644
--- a/Task/100-doors/Haskell/100-doors-4.hs
+++ b/Task/100-doors/Haskell/100-doors-4.hs
@@ -1 +1,6 @@
-run n = takeWhile (< n) [k*k | k <- [1..]]
+gate :: Eq a => [a] -> [a] -> [Door]
+gate (x:xs) (y:ys) | x == y = Open : gate xs ys
+gate (x:xs) ys = Closed : gate xs ys
+gate [] _ = []
+
+run n = gate [1..n] [k*k | k <- [1..]]
diff --git a/Task/100-doors/Haskell/100-doors-5.hs b/Task/100-doors/Haskell/100-doors-5.hs
new file mode 100644
index 0000000000..44f44aa391
--- /dev/null
+++ b/Task/100-doors/Haskell/100-doors-5.hs
@@ -0,0 +1 @@
+run n = takeWhile (< n) [k*k | k <- [1..]]
diff --git a/Task/100-doors/Lua/100-doors.lua b/Task/100-doors/Lua/100-doors.lua
deleted file mode 100644
index 3183bc7730..0000000000
--- a/Task/100-doors/Lua/100-doors.lua
+++ /dev/null
@@ -1,11 +0,0 @@
-local is_open = {}
-
-for pass = 1,100 do
- for door = pass,100,pass do
- is_open[door] = not is_open[door]
- end
-end
-
-for i,v in next,is_open do
- print ('Door '..i..':',v and 'open' or 'close')
-end
diff --git a/Task/100-doors/PL-M/100-doors.plm b/Task/100-doors/PL-M/100-doors.plm
deleted file mode 100644
index 0013832477..0000000000
--- a/Task/100-doors/PL-M/100-doors.plm
+++ /dev/null
@@ -1,55 +0,0 @@
-100H: /* FIND THE FIRST FEW SQUARES VIA THE UNOPTIMISED DOOR FLIPPING METHOD */
-
- /* BDOS SYSTEM CALL */
- BDOS: PROCEDURE( FN, ARG );
- DECLARE FN BYTE, ARG ADDRESS;
- GO TO 5;
- END BDOS;
-
- /* PRINTS A BYTE AS A CHARACTER */
- PRINT$CHAR: PROCEDURE( CH );
- DECLARE CH BYTE;
- CALL BDOS( 2, CH );
- END PRINT$CHAR;
-
- /* PRINTS A BYTE AS A NUMBER */
- PRINT$BYTE: PROCEDURE( N );
- DECLARE N BYTE;
- DECLARE ( V, D3, D2 ) BYTE;
- V = N;
- D3 = V MOD 10;
- IF ( V := V / 10 ) <> 0 THEN DO;
- D2 = V MOD 10;
- IF ( V := V / 10 ) <> 0 THEN CALL PRINT$CHAR( '0' + V );
- CALL PRINT$CHAR( '0' + D2 );
- END;
- CALL PRINT$CHAR( '0' + D3 );
- END PRINT$BYTE;
-
- DECLARE DOOR$DCL LITERALLY '101';
- DECLARE FALSE LITERALLY '0';
- DECLARE CR LITERALLY '0DH';
- DECLARE LF LITERALLY '0AH';
-
- /* ARRAY OF DOORS - DOOR( I ) IS TRUE IF OPEN, FALSE IF CLOSED */
- DECLARE DOOR( DOOR$DCL ) BYTE;
- DECLARE ( I, J ) BYTE;
-
- /* SET ALL DOORS TO CLOSED */
- DO I = 0 TO LAST( DOOR ); DOOR( I ) = FALSE; END;
- /* REPEATEDLY FLIP THE DOORS */
- DO I = 1 TO LAST( DOOR );
- DO J = I TO LAST( DOOR ) BY I;
- DOOR( J ) = NOT DOOR( J );
- END;
- END;
- /* DISPLAY THE RESULTS */
- DO I = 1 TO LAST( DOOR );
- IF DOOR( I ) THEN DO;
- CALL PRINT$CHAR( ' ' );
- CALL PRINT$BYTE( I );
- END;
- END;
- CALL PRINT$CHAR( CR );
- CALL PRINT$CHAR( LF );
-EOF
diff --git a/Task/100-doors/REBOL/100-doors-2.rebol b/Task/100-doors/REBOL/100-doors-2.rebol
index 73f1f448f3..b8428a69d9 100644
--- a/Task/100-doors/REBOL/100-doors-2.rebol
+++ b/Task/100-doors/REBOL/100-doors-2.rebol
@@ -1,2 +1,26 @@
-doors: array/initial 100 'closed
-repeat i 10 [doors/(i * i): 'open]
+;; Create a bitset with capacity for 100 bits (representing 100 doors)
+;; Each bit represents a door state: 0 = closed, 1 = open
+doors: make bitset! 100
+
+;; Outer loop: Make 100 passes (i = 1 to 100)
+repeat i 100 [
+ ;; Inner loop: Check each door position (j = 1 to 100)
+ repeat j 100 [
+ ;; If door j index is divisible by pass number i (no remainder)
+ if zero? (j // i) [
+ ;; Toggle the door's bit:
+ ;; doors/:j accesses door j in the bitset
+ ;; 'not' flips the bit value (0 -> 1, 1 -> 0)
+ doors/:j: not doors/:j
+ ]
+ ]
+]
+
+;; Final loop: Check which doors are open, print their numbers
+repeat i 100 [
+ ;; If door i's bit is set (open)
+ if doors/:i [
+ ;; Print the door's number and that it is open
+ print ["door" i "is open"]
+ ]
+]
diff --git a/Task/100-doors/REBOL/100-doors-3.rebol b/Task/100-doors/REBOL/100-doors-3.rebol
new file mode 100644
index 0000000000..318cdd4a11
--- /dev/null
+++ b/Task/100-doors/REBOL/100-doors-3.rebol
@@ -0,0 +1,6 @@
+;; Loop variable i from 1 to 10 (since 10^2 = 100, covers doors 1 to 100)
+repeat i 10 [
+ ;; Print that door number (i squared) is open
+ ;; These are exactly the doors with perfect square numbers: 1, 4, 9, ..., 100
+ print ["door" (i * i) "is open"]
+]
diff --git a/Task/100-prisoners/Prolog/100-prisoners.pro b/Task/100-prisoners/Prolog/100-prisoners.pro
new file mode 100644
index 0000000000..375a4acfc8
--- /dev/null
+++ b/Task/100-prisoners/Prolog/100-prisoners.pro
@@ -0,0 +1,43 @@
+:- use_module(library(aggregate)).
+:- use_module(library(lists)).
+:- use_module(library(random)).
+
+random_subset(Length, List, Subset) :-
+ random_permutation(List, Shuffled),
+ length(Subset, Length),
+ prefix(Subset, Shuffled).
+
+random_play :-
+ numlist(1, 100, Prisoners),
+ random_permutation(Prisoners, Drawers),
+ forall(member(Prisoner, Prisoners), (
+ random_subset(50, Drawers, CheckedDrawers),
+ memberchk(Prisoner, CheckedDrawers)
+ )).
+
+optimal_play :-
+ numlist(1, 100, Prisoners),
+ random_permutation(Prisoners, Drawers),
+ forall(member(Prisoner, Prisoners), optimal_play(50, Prisoner, Prisoner, Drawers)).
+
+optimal_play(ChecksRemaining, Prisoner, NumberToCheck, Drawers) :-
+ ChecksRemaining > 0,
+ nth1(NumberToCheck, Drawers, NumberInDrawer),
+ ( NumberInDrawer = Prisoner
+ -> true
+ ; ChecksRemaining0 is ChecksRemaining - 1,
+ optimal_play(ChecksRemaining0, Prisoner, NumberInDrawer, Drawers)
+ ).
+
+:- meta_predicate play_n_times(+, 0, -).
+play_n_times(PlayCount, Play, Percentage) :-
+ aggregate_all(count, ( between(1, PlayCount, _), call(Play) ), Victories),
+ Percentage is Victories / PlayCount * 100.
+
+main(SimulationCount) :-
+ play_n_times(SimulationCount, random_play, RandomPlayPercent),
+ play_n_times(SimulationCount, optimal_play, OptimalPlayPercent),
+ format("Simulation count: ~d\nRandom play wins: ~f% of the simulations.\nOptimal play wins ~f% of the simulations.",
+ [SimulationCount, RandomPlayPercent, OptimalPlayPercent]).
+
+:- main(100_000).
diff --git a/Task/15-puzzle-solver/PascalABC.NET/15-puzzle-solver.pas b/Task/15-puzzle-solver/PascalABC.NET/15-puzzle-solver.pas
new file mode 100644
index 0000000000..36a40f7d75
--- /dev/null
+++ b/Task/15-puzzle-solver/PascalABC.NET/15-puzzle-solver.pas
@@ -0,0 +1,3 @@
+// Игра в 15 PABCWork.NET\Samples\Games\15.pas
+see
+https://rosettacode.org/wiki/15_puzzle_game#PascalABC.NET
diff --git a/Task/2048/EasyLang/2048.easy b/Task/2048/EasyLang/2048.easy
index 410f4010a9..079064a289 100644
--- a/Task/2048/EasyLang/2048.easy
+++ b/Task/2048/EasyLang/2048.easy
@@ -142,7 +142,7 @@ proc handle_mup .
on mouse_up
handle_mup
.
-on key
+on key_down
if stat = 2
if keybkey = " " : init
return
diff --git a/Task/24-game-Solve/Zig/24-game-solve.zig b/Task/24-game-Solve/Zig/24-game-solve.zig
new file mode 100644
index 0000000000..1837c9404d
--- /dev/null
+++ b/Task/24-game-Solve/Zig/24-game-solve.zig
@@ -0,0 +1,273 @@
+const std = @import("std");
+const print = std.debug.print;
+const ArrayList = std.ArrayList;
+const HashMap = std.HashMap;
+const Allocator = std.mem.Allocator;
+
+const Operator = enum {
+ sub,
+ plus,
+ mul,
+ div,
+};
+
+const Factor = struct {
+ content: []const u8,
+ value: i32,
+
+ fn deinit(self: Factor, allocator: Allocator) void {
+ allocator.free(self.content);
+ }
+};
+
+fn apply(allocator: Allocator, op: Operator, left: []const Factor, right: []const Factor) !ArrayList(Factor) {
+ var ret = ArrayList(Factor).init(allocator);
+
+ for (left) |l| {
+ for (right) |r| {
+ switch (op) {
+ .sub => {
+ if (l.value > r.value) {
+ const content = try std.fmt.allocPrint(allocator, "({s} - {s})", .{ l.content, r.content });
+ try ret.append(Factor{
+ .content = content,
+ .value = l.value - r.value,
+ });
+ }
+ },
+ .plus => {
+ const content = try std.fmt.allocPrint(allocator, "({s} + {s})", .{ l.content, r.content });
+ try ret.append(Factor{
+ .content = content,
+ .value = l.value + r.value,
+ });
+ },
+ .mul => {
+ const content = try std.fmt.allocPrint(allocator, "({s} x {s})", .{ l.content, r.content });
+ try ret.append(Factor{
+ .content = content,
+ .value = l.value * r.value,
+ });
+ },
+ .div => {
+ if (l.value >= r.value and r.value > 0 and @rem(l.value, r.value) == 0) {
+ const content = try std.fmt.allocPrint(allocator, "({s} / {s})", .{ l.content, r.content });
+ try ret.append(Factor{
+ .content = content,
+ .value = @divTrunc(l.value, r.value),
+ });
+ }
+ },
+ }
+ }
+ }
+
+ return ret;
+}
+
+fn calc(allocator: Allocator, ops: [3]Operator, numbers: [4]i32) !ArrayList(Factor) {
+ var current_factors = ArrayList(Factor).init(allocator);
+ defer {
+ for (current_factors.items) |factor| {
+ factor.deinit(allocator);
+ }
+ current_factors.deinit();
+ }
+
+ // Initialize with first number
+ const initial_content = try std.fmt.allocPrint(allocator, "{}", .{numbers[0]});
+ try current_factors.append(Factor{
+ .content = initial_content,
+ .value = numbers[0],
+ });
+
+ // Process each operation
+ for (ops, 0..) |op, i| {
+ var next_factors = ArrayList(Factor).init(allocator);
+ defer {
+ for (next_factors.items) |factor| {
+ factor.deinit(allocator);
+ }
+ next_factors.deinit();
+ }
+
+ const mono_content = try std.fmt.allocPrint(allocator, "{}", .{numbers[i + 1]});
+ defer allocator.free(mono_content);
+ const mono_factor = Factor{
+ .content = mono_content,
+ .value = numbers[i + 1],
+ };
+ const mono_slice = &[_]Factor{mono_factor};
+
+ switch (op) {
+ .mul, .plus => {
+ var applied = try apply(allocator, op, current_factors.items, mono_slice);
+ defer applied.deinit();
+ try next_factors.appendSlice(applied.items);
+ },
+ .div, .sub => {
+ var applied1 = try apply(allocator, op, current_factors.items, mono_slice);
+ defer applied1.deinit();
+ try next_factors.appendSlice(applied1.items);
+
+ var applied2 = try apply(allocator, op, mono_slice, current_factors.items);
+ defer applied2.deinit();
+ try next_factors.appendSlice(applied2.items);
+ },
+ }
+
+ // Clear current factors and move next_factors to current_factors
+ for (current_factors.items) |factor| {
+ factor.deinit(allocator);
+ }
+ current_factors.clearRetainingCapacity();
+
+ // Move ownership from next_factors to current_factors
+ try current_factors.appendSlice(next_factors.items);
+ next_factors.clearRetainingCapacity(); // Don't deinit the items, we moved them
+ }
+
+ // Create result and transfer ownership
+ var result = ArrayList(Factor).init(allocator);
+ try result.appendSlice(current_factors.items);
+ current_factors.clearRetainingCapacity(); // Don't deinit, we transferred ownership
+
+ return result;
+}
+
+const OpIter = struct {
+ index: usize,
+
+ const OPTIONS = [_]Operator{ .mul, .sub, .plus, .div };
+
+ fn init() OpIter {
+ return OpIter{ .index = 0 };
+ }
+
+ fn next(self: *OpIter) ?[3]Operator {
+ if (self.index >= 64) {
+ return null;
+ }
+
+ const f1 = OPTIONS[(self.index & (3 << 4)) >> 4];
+ const f2 = OPTIONS[(self.index & (3 << 2)) >> 2];
+ const f3 = OPTIONS[(self.index & (3 << 0)) >> 0];
+
+ self.index += 1;
+ return [3]Operator{ f1, f2, f3 };
+ }
+};
+
+fn orders() [24][4]usize {
+ return [24][4]usize{
+ [4]usize{ 0, 1, 2, 3 },
+ [4]usize{ 0, 1, 3, 2 },
+ [4]usize{ 0, 2, 1, 3 },
+ [4]usize{ 0, 2, 3, 1 },
+ [4]usize{ 0, 3, 1, 2 },
+ [4]usize{ 0, 3, 2, 1 },
+ [4]usize{ 1, 0, 2, 3 },
+ [4]usize{ 1, 0, 3, 2 },
+ [4]usize{ 1, 2, 0, 3 },
+ [4]usize{ 1, 2, 3, 0 },
+ [4]usize{ 1, 3, 0, 2 },
+ [4]usize{ 1, 3, 2, 0 },
+ [4]usize{ 2, 0, 1, 3 },
+ [4]usize{ 2, 0, 3, 1 },
+ [4]usize{ 2, 1, 0, 3 },
+ [4]usize{ 2, 1, 3, 0 },
+ [4]usize{ 2, 3, 0, 1 },
+ [4]usize{ 2, 3, 1, 0 },
+ [4]usize{ 3, 0, 1, 2 },
+ [4]usize{ 3, 0, 2, 1 },
+ [4]usize{ 3, 1, 0, 2 },
+ [4]usize{ 3, 1, 2, 0 },
+ [4]usize{ 3, 2, 0, 1 },
+ [4]usize{ 3, 2, 1, 0 },
+ };
+}
+
+fn applyOrder(numbers: [4]i32, order: [4]usize) [4]i32 {
+ return [4]i32{ numbers[order[0]], numbers[order[1]], numbers[order[2]], numbers[order[3]] };
+}
+
+fn solutions(allocator: Allocator, numbers: [4]i32) !ArrayList(Factor) {
+ var ret = ArrayList(Factor).init(allocator);
+ var hash_set = HashMap([]const u8, void, std.hash_map.StringContext, std.hash_map.default_max_load_percentage).init(allocator);
+ defer {
+ // Free all keys in the hash map
+ var iterator = hash_set.iterator();
+ while (iterator.next()) |entry| {
+ allocator.free(entry.key_ptr.*);
+ }
+ hash_set.deinit();
+ }
+
+ var op_iter = OpIter.init();
+ while (op_iter.next()) |ops| {
+ const all_orders = orders();
+ for (all_orders) |order| {
+ const reordered_numbers = applyOrder(numbers, order);
+ var results = calc(allocator, ops, reordered_numbers) catch continue;
+ defer {
+ for (results.items) |factor| {
+ factor.deinit(allocator);
+ }
+ results.deinit();
+ }
+
+ for (results.items) |factor| {
+ if (factor.value == 24) {
+ // Check if we've seen this content before
+ if (hash_set.contains(factor.content)) {
+ continue;
+ }
+
+ // Add to hash set with a duplicated key
+ const key_copy = try allocator.dupe(u8, factor.content);
+ try hash_set.put(key_copy, {});
+
+ // Add to results with a duplicated content
+ try ret.append(Factor{
+ .content = try allocator.dupe(u8, factor.content),
+ .value = factor.value,
+ });
+ }
+ }
+ }
+ }
+
+ return ret;
+}
+
+pub fn main() !void {
+ var gpa = std.heap.GeneralPurposeAllocator(.{}){};
+ defer _ = gpa.deinit();
+ const allocator = gpa.allocator();
+
+ // Hard-coded input: 5598
+ const nums = [4]i32{ 5, 5, 9, 8 };
+
+ var sols = solutions(allocator, nums) catch {
+ print("Error computing solutions\n", .{});
+ return;
+ };
+ defer {
+ for (sols.items) |factor| {
+ factor.deinit(allocator);
+ }
+ sols.deinit();
+ }
+
+ const len = sols.items.len;
+ if (len == 0) {
+ print("no solution for {}, {}, {}, {}\n", .{ nums[0], nums[1], nums[2], nums[3] });
+ return;
+ }
+
+ print("solutions for {}, {}, {}, {}\n", .{ nums[0], nums[1], nums[2], nums[3] });
+ for (sols.items) |s| {
+ print("{s}\n", .{s.content});
+ }
+ print("{} solutions found\n", .{len});
+}
diff --git a/Task/24-game/FutureBasic/24-game.basic b/Task/24-game/FutureBasic/24-game.basic
index 68da1c6faa..e3cb41f183 100644
--- a/Task/24-game/FutureBasic/24-game.basic
+++ b/Task/24-game/FutureBasic/24-game.basic
@@ -1,4 +1,4 @@
-include resources "24 Game Icon.icns"
+//include resources "24 Game Icon.icns"
#build CompilerOptions @"-Wno-unused-variable"
diff --git a/Task/24-game/Rust/24-game.rs b/Task/24-game/Rust/24-game.rs
index 8e9e7f0ced..149fb0aa62 100644
--- a/Task/24-game/Rust/24-game.rs
+++ b/Task/24-game/Rust/24-game.rs
@@ -43,7 +43,7 @@ fn to_rpn(input: &mut String){
rpn_string.push(top);
}
- println!("you formula results in {}", rpn_string);
+ println!("your formula results in {}", rpn_string);
*input=rpn_string;
}
@@ -72,7 +72,7 @@ fn calculate(input: &String, list : &mut [u32;4]) -> f32{
};
}
}
- println!("you formula results in {}",accumulator);
+ println!("your formula results in {}",accumulator);
accumulator
}
@@ -95,14 +95,14 @@ fn main() {
to_rpn(&mut input);
let result = calculate(&input, &mut list);
- if list.iter().any(|&list| list !=10){
+ if list.iter().any(|&num| num != 10) {
+ println!("you didn't use all the numbers");
+ } else {
println!("and you used all numbers");
match result {
24.0 => println!("you won"),
- _ => println!("but your formulla doesn't result in 24"),
+ _ => println!("but your formula doesn't result in 24"),
}
- }else{
- println!("you didn't use all the numbers");
}
}
diff --git a/Task/9-billion-names-of-God-the-integer/REBOL/9-billion-names-of-god-the-integer.rebol b/Task/9-billion-names-of-God-the-integer/REBOL/9-billion-names-of-god-the-integer.rebol
new file mode 100644
index 0000000000..4c937e4e34
--- /dev/null
+++ b/Task/9-billion-names-of-God-the-integer/REBOL/9-billion-names-of-god-the-integer.rebol
@@ -0,0 +1,101 @@
+Rebol [
+ title: "Rosetta code: 9 billion names of God the integer"
+ file: %9_billion_names_of_God_the_integer.r3
+ url: https://rosettacode.org/wiki/9_billion_names_of_God_the_integer
+ needs: 3.0.0
+ note: {Based on Red language version}
+]
+names-of-god: function/with [
+ row [integer!] "row number (>= 1)"
+ /show "Display intermediate results"
+ /all "When showing, print all intermediate data"
+][
+ ;; Validate input - require row >= 1, otherwise trigger a runtime error
+ assert [row >= 1]
+
+ ;; If /show refinement is used, display results for the given row
+ if show [
+ ;; Ensure nums/:row is computed; if not, recursively compute it
+ unless nums/:row [names-of-god row]
+
+ ;; Loop from 1 to row
+ repeat i row [
+ either all [ ;; If /all refinement is used, display extra details
+ probe reduce [i nums/:i sums/:i] ;; Show index, sequence, and sum
+ ][
+ print nums/:i ;; Otherwise, just print the sequence
+ ]
+ ]
+ ]
+
+ ;; Compute a new row from scratch (if row not already computed)...
+ unless sum: sums/:row [
+ out: clear [] ;; Temporary storage for row's elements
+ half: to integer! row / 2 ;; Middle position of the row
+
+ ;; Ensure all required previous rows exist; generate missing ones
+ if row - 1 > last: length? nums [
+ repeat i row - last - 1 [
+ names-of-god last + i
+ ]
+ ]
+
+ ;; Build the `out` block for this row
+ repeat col row - 1 [
+ ;; Special case: the middle element
+ either col = (half + 1) [
+ append out at nums/(row - 1) half ;; Insert from previous row's middle
+ break ;; Stop building here
+ ][
+ ;; General case: append sum-part of two earlier sequences
+ append out sum-part nums/(row - col) col
+ ]
+ ]
+
+ ;; Compute the sum of the row
+ sum: 0.0
+ forall out [
+ sum: sum + out/1
+ ]
+
+ ;; Cache the computed row and its sum
+ sums/:row: sum
+ nums/:row: copy out
+ clear out
+ ]
+ sums/:row ;; Return sum of the row
+][
+ ;; ===== WITH BLOCK (local helper definitions and persistent state) =====
+
+ ;; Helper function: sum the first `count` elements from the given block `nums`
+ sum-part: function [nums [block!] count [integer!]][
+ out: 0.0
+ loop count [
+ out: out + nums/1
+ if empty? nums: next nums [break] ;; Stop if we've exhausted the block
+ ]
+ ;; If within integer range, convert to integer
+ if out <= 0#7fffffffffffffff [out: to integer! out]
+ out
+ ]
+
+ ;; Persistent storage for each computed row (map! with row → sequence)
+ ;; Start with base cases:
+ ;; row 1 = [1]
+ ;; row 2 = [1 1]
+ nums: make map! [1 [1] 2 [1 1]]
+
+ ;; Persistent storage for row sums (map! with row → sum)
+ ;; Base sums: row 1 sum = 1, row 2 sum = 2
+ sums: make map! [1 1 2 2]
+]
+
+
+
+print "rows: ^/"
+names-of-god/show 25
+
+print "^/sums: ^/"
+probe names-of-god 23
+probe names-of-god 123
+probe names-of-god 1234
diff --git a/Task/99-bottles-of-beer/ALGOL-68/99-bottles-of-beer.alg b/Task/99-bottles-of-beer/ALGOL-68/99-bottles-of-beer.alg
index 5ec893ef5a..194eebdb25 100644
--- a/Task/99-bottles-of-beer/ALGOL-68/99-bottles-of-beer.alg
+++ b/Task/99-bottles-of-beer/ALGOL-68/99-bottles-of-beer.alg
@@ -1,8 +1,10 @@
-main:(
- FOR bottles FROM 99 TO 1 BY -1 DO
- printf(($z-d" bottles of beer on the wall"l$, bottles));
- printf(($z-d" bottles of beer"l$, bottles));
- printf(($"Take one down, pass it around"l$));
- printf(($z-d" bottles of beer on the wall"ll$, bottles-1))
- OD
-)
+FOR bottles FROM 99 BY -1 TO 1 DO
+ STRING bottles now = whole(bottles,0) + " bottle" + IF bottles = 1 THEN "" ELSE "s" FI;
+ STRING bottles left = IF bottles = 1 THEN "No more" ELSE whole(bottles-1,0) FI
+ + " bottle"
+ + IF bottles = 2 THEN "" ELSE "s" FI;
+ print((bottles now," of beer on the wall",newline));
+ print((bottles now," of beer",newline));
+ print(("Take one down, pass it around",newline));
+ print((bottles left," of beer on the wall",newline,newline))
+OD
diff --git a/Task/99-bottles-of-beer/Aria/99-bottles-of-beer.aria b/Task/99-bottles-of-beer/Aria/99-bottles-of-beer.aria
new file mode 100644
index 0000000000..7e36393581
--- /dev/null
+++ b/Task/99-bottles-of-beer/Aria/99-bottles-of-beer.aria
@@ -0,0 +1,48 @@
+struct Lyrics {
+ type func new(n: Int) {
+ assert n > 0;
+ return alloc(This) {
+ .n = n,
+ };
+ }
+
+ func prettyprint() {
+ val suffix_n = this.n == 1 ? "" : "s";
+ val suffix_n_minus_1 = this.n == 2 ? "" : "s";
+ return "{0} bottle{2} of beer on the wall, {0} bottle{2} of beer.\nTake one down and pass it around, {1} bottle{3} of beer on the wall.\n".format(this.n, this.n-1, suffix_n, suffix_n_minus_1);
+ }
+}
+
+struct Song {
+ type func new(n: Int) {
+ assert n > 0;
+ return alloc(This) {
+ .n = n,
+ };
+ }
+
+ func iterator() {
+ return this;
+ }
+
+ func next() {
+ if this.n == 0 {
+ return Box(){.done = true};
+ }
+
+ val n = this.n;
+ this.n -= 1;
+
+ return Box() {
+ .done = false,
+ .value = Lyrics.new(n),
+ };
+ }
+}
+
+func main() {
+ val song = Song.new(99);
+ for verse in song {
+ println(verse);
+ }
+}
diff --git a/Task/99-bottles-of-beer/ArkScript/99-bottles-of-beer.ark b/Task/99-bottles-of-beer/ArkScript/99-bottles-of-beer.ark
new file mode 100644
index 0000000000..d12274823c
--- /dev/null
+++ b/Task/99-bottles-of-beer/ArkScript/99-bottles-of-beer.ark
@@ -0,0 +1,24 @@
+# try and get an argument from the command line invocation
+(let arg
+ (if (>= (len sys:args) 1)
+ (toNumber (@ sys:args 0))
+ nil))
+# if no argument was passed the default value will be 100
+(let i
+ (if (nil? arg)
+ 100
+ arg))
+
+(let explode-bottles (fun (n)
+ (if (> n 1) {
+ (print (string:format "{} Bottles of beer on the wall\n{} bottles of beer\nTake one down, pass it around" n n))
+ (print (string:format "{} Bottles of beer on the wall." (- n 1)))
+ (explode-bottles (- n 1)) })
+(explode-bottles i)
+
+# alternative solution with a loop
+(mut n i)
+(while (> n 1) {
+ (print (string:format "{} Bottles of beer on the wall\n{} bottles of beer\nTake one down, pass it around" n n))
+ (set n (- n 1))
+ (print (string:format "{} Bottles of beer on the wall." n)) })
diff --git a/Task/99-bottles-of-beer/DuckDB/99-bottles-of-beer-1.duckdb b/Task/99-bottles-of-beer/DuckDB/99-bottles-of-beer-1.duckdb
new file mode 100644
index 0000000000..3fe002df2b
--- /dev/null
+++ b/Task/99-bottles-of-beer/DuckDB/99-bottles-of-beer-1.duckdb
@@ -0,0 +1,13 @@
+.header off
+.mode list
+select list_transform( range(99,-1,-1),
+ n ->
+ if (n = 0,
+ 'No more bottles of beer on the wall' || chr(10)
+ || 'no more bottles of beer.' || chr(10)
+ || 'Go to the store, buy some more!' || chr(10)
+ || '99 bottles of beer on the wall.',
+ n || ' bottle' || if ( n = 1, '', 's') || ' of beer on the wall' || chr(10)
+ || n || ' bottle' || if ( n = 1, '', 's') || ' of beer;' || chr(10)
+ || 'Take one down, pass it around' || chr(10) ) )
+ .array_to_string(chr(10)) ;
diff --git a/Task/99-bottles-of-beer/DuckDB/99-bottles-of-beer-2.duckdb b/Task/99-bottles-of-beer/DuckDB/99-bottles-of-beer-2.duckdb
new file mode 100644
index 0000000000..02dd9eb97c
--- /dev/null
+++ b/Task/99-bottles-of-beer/DuckDB/99-bottles-of-beer-2.duckdb
@@ -0,0 +1,21 @@
+.header off
+.mode list
+
+with recursive cte as (
+ select 99 as n, '' as s
+ union all
+ select n-1 as n,
+ if (n = 0,
+ 'No more bottles of beer on the wall' || chr(10)
+ || 'no more bottles of beer.' || chr(10)
+ || 'Go to the store, buy some more!' || chr(10)
+ || '99 bottles of beer on the wall.',
+ n || ' bottle' || if ( n = 1, '', 's') || ' of beer on the wall' || chr(10)
+ || n || ' bottle' || if ( n = 1, '', 's') || ' of beer;' || chr(10)
+ || 'Take one down, pass it around' || chr(10) )
+ from cte
+ where n > -1
+ ) select s
+ from cte
+ where s != ''
+ order by n desc ;
diff --git a/Task/99-bottles-of-beer/Pluto/99-bottles-of-beer.pluto b/Task/99-bottles-of-beer/Pluto/99-bottles-of-beer.pluto
new file mode 100644
index 0000000000..1e20d4e1f4
--- /dev/null
+++ b/Task/99-bottles-of-beer/Pluto/99-bottles-of-beer.pluto
@@ -0,0 +1,12 @@
+function pl(n) return n==1?"":"s" end
+
+function fmt(s)
+ return $"{s} bottle{pl(s)} of beer on the wall, \n" ..
+ $"{s} bottle{pl(s)} of beer. \n" ..
+ $"Take one down, pass it around, \n" ..
+ $"{s-1} bottle{pl(s-1)} of beer on the wall.\n\n"
+end
+
+for i = 99, 1, -1 do
+ print(fmt(i))
+end
diff --git a/Task/99-bottles-of-beer/Rhombus/99-bottles-of-beer.rhombus b/Task/99-bottles-of-beer/Rhombus/99-bottles-of-beer.rhombus
new file mode 100644
index 0000000000..b7564c4ae9
--- /dev/null
+++ b/Task/99-bottles-of-beer/Rhombus/99-bottles-of-beer.rhombus
@@ -0,0 +1,13 @@
+#lang rhombus/static
+
+for (i in 1..100):
+ fun plural(n :: Int):
+ if n == 1:
+ | ""
+ | "s"
+ let bottles = 100 - i
+ println(@str{@(bottles) bottle@(plural(bottles)) of beer on the wall, @(bottles) bottle@(plural(bottles)) of beer.})
+ println(@str{Take one down and pass it around, @(bottles - 1) bottle@(plural(bottles - 1)) of beer on the wall.})
+
+println("No more bottles of beer on the wall, no more bottles of beer.")
+println("Go to the store and buy some more, 99 bottles of beer on the wall.")
diff --git a/Task/A+B/Agena/a+b.agena b/Task/A+B/Agena/a+b.agena
index 5b94875c68..0ac7496582 100644
--- a/Task/A+B/Agena/a+b.agena
+++ b/Task/A+B/Agena/a+b.agena
@@ -1,6 +1,10 @@
scope
local f := trim( io.read() ) split " "; # read a line and split into fields
- local a := tonumber( f[ 1 ] );
- local b := tonumber( f[ 2 ] );
- print( a + b )
-epocs
+ try
+ local a := tonumber( f[ 1 ] );
+ local b := tonumber( f[ 2 ] );
+ print( a + b )
+ catch in ex then
+ print( "Unable to add the numbers: ", tostring( ex ) )
+ yrt
+end
diff --git a/Task/A+B/ArkScript/a+b.ark b/Task/A+B/ArkScript/a+b.ark
new file mode 100644
index 0000000000..71c47670c9
--- /dev/null
+++ b/Task/A+B/ArkScript/a+b.ark
@@ -0,0 +1,9 @@
+(import std.String :split)
+(import std.List :map :reduce)
+
+(let in (input))
+(let numbers (map (split in " ") (fun (t) (toNumber t))))
+(print (reduce numbers (fun (a b)
+ (if (nil? b)
+ a
+ (+ a b)))))
diff --git a/Task/A+B/DuckDB/a+b-1.duckdb b/Task/A+B/DuckDB/a+b-1.duckdb
new file mode 100644
index 0000000000..06fc2868f4
--- /dev/null
+++ b/Task/A+B/DuckDB/a+b-1.duckdb
@@ -0,0 +1,5 @@
+.headers off
+.mode list
+select sum(c::INTEGER)
+from (select unnest(regexp_extract_all(content, '[-0-9]+') ) as c
+ from read_text('rc-a+b.txt') );
diff --git a/Task/A+B/DuckDB/a+b-2.duckdb b/Task/A+B/DuckDB/a+b-2.duckdb
new file mode 100644
index 0000000000..ce4c1aa6c7
--- /dev/null
+++ b/Task/A+B/DuckDB/a+b-2.duckdb
@@ -0,0 +1,2 @@
+select a+b from (select column0 as a, column1 as b
+from read_csv('/dev/stdin', header=false, sep=' '));
diff --git a/Task/A+B/Koka/a+b.koka b/Task/A+B/Koka/a+b.koka
new file mode 100644
index 0000000000..f0f1738e2d
--- /dev/null
+++ b/Task/A+B/Koka/a+b.koka
@@ -0,0 +1,32 @@
+import std/os/readline
+
+// A prompt effect which retries getting input until a valid result is returned.
+effect prompt
+ ctl delimit(): () // Captures the retry resumption
+ final ctl fail(): e // A failed input
+
+// Prompt for input, with retry until successful result
+// - `message` is the original prompt
+// - `err-message` is the error shown on failure
+fun prompt(message: string, err-message: string, action: (string) -> a): a
+ var reattempt := fn() impossible() // We ensure all paths include a delimiter
+ with handler
+ raw ctl delimit()
+ reattempt := (fn() rcontext.resume(())) // set reattempt resumption
+ reattempt() // Initial try
+ final ctl fail()
+ reattempt() // Handle failure by reattempting
+ // Print the initial request message
+ println(message)
+ delimit() // Mark retry point
+ try {
+ action(readline()) // Read the input and apply the action
+ } fn(err)
+ // On an exception, print the error message and retry
+ println(err-message)
+ fail() // reset
+
+fun main()
+ with line <- prompt("Enter two numbers separated by space: ", "Invalid input, please enter two integers.")
+ val [a, b] = line.split(" ")
+ a.parse-int.unjust + b.parse-int.unjust
diff --git a/Task/A+B/Pluto/a+b.pluto b/Task/A+B/Pluto/a+b.pluto
new file mode 100644
index 0000000000..974f2e0a29
--- /dev/null
+++ b/Task/A+B/Pluto/a+b.pluto
@@ -0,0 +1,2 @@
+a, b = io.read("*n", "*n")
+print(a+b)
diff --git a/Task/A+B/TAV/a+b.tav b/Task/A+B/TAV/a+b.tav
new file mode 100644
index 0000000000..29b223afca
--- /dev/null
+++ b/Task/A+B/TAV/a+b.tav
@@ -0,0 +1,6 @@
+main(parms):+
+ ?# lne =: file () give lines \ void is standard input
+ ab =: string lne split by many of #Whitespace
+ a =: string ab[1] as integer
+ b =: string ab[2] as integer
+ print a + b
diff --git a/Task/ABC-problem/DuckDB/abc-problem.duckdb b/Task/ABC-problem/DuckDB/abc-problem.duckdb
new file mode 100644
index 0000000000..0856cd977f
--- /dev/null
+++ b/Task/ABC-problem/DuckDB/abc-problem.duckdb
@@ -0,0 +1,45 @@
+CREATE OR REPLACE FUNCTION matches(block, letter) as (
+ block[1] = letter or block[2] = letter
+);
+
+# permute(lst, n, word) generates sub-permutations, perm (of length n), of the list lst,
+# that satisfy matches(perm[i], word[i]), for i in range(1, n+1).
+# Normally n = length(word).
+# The caller is responsible for ensuring appropriate adjustment of typographical case.
+CREATE OR REPLACE FUNCTION permute(lst, n, word) as table (
+ WITH RECURSIVE permute(perm, remaining) as (
+ -- base case
+ SELECT
+ []::VARCHAR[] as perm,
+ lst::VARCHAR[] as remaining
+ UNION ALL
+ -- recursive case: add one element from remaining to perm and remove it from remaining
+ SELECT
+ (perm || [element]) AS perm,
+ (remaining[1:i-1] || remaining[i+1:]) AS remaining
+ FROM (select *, unnest(remaining) AS element, generate_subscripts(remaining,1) as i
+ FROM permute)
+ WHERE length(perm) < n
+ and matches(element, word[1 + length(perm)])
+ )
+ SELECT perm
+ FROM permute
+ WHERE length(perm) = n
+);
+
+# All solutions
+CREATE OR REPLACE FUNCTION solve(word) as table (
+ from permute(
+ ['BO', 'XK', 'DQ', 'CP', 'NA', 'GT', 'RE', 'TG', 'QD', 'FS',
+ 'JW', 'HU', 'VI', 'AN', 'OB', 'ER', 'FS', 'LY', 'PC', 'ZM'],
+ length(word), upper(word) )
+);
+
+CREATE OR REPLACE FUNCTION one_solution(word) as (
+ from solve(word)
+ limit 1
+);
+
+# Examples
+select word, one_solution(word)
+from (select unnest(['','A','BarK','BOOK','TREAT','COMMON','SQUAD','Confuse','abba']) as word);
diff --git a/Task/ABC-problem/Pluto/abc-problem.pluto b/Task/ABC-problem/Pluto/abc-problem.pluto
new file mode 100644
index 0000000000..243a9a5f79
--- /dev/null
+++ b/Task/ABC-problem/Pluto/abc-problem.pluto
@@ -0,0 +1,25 @@
+function r(word, bl)
+ if word == "" then return true end
+ local c = word:byte(1) | 32
+ for i = 1, #bl do
+ local b = bl[i]
+ if c == b:byte(1) | 32 or c == b:byte(2) | 32 then
+ bl[i] = bl[1]
+ bl[1] = b
+ if r(word:sub(2), bl:slice(2)) then return true end
+ bl[1], bl[i] = bl[i], bl[1]
+ end
+ end
+ return false
+end
+
+local function new_speller(blocks)
+ local bl = blocks:split(" ")
+ return |word| -> r(word, bl)
+end
+
+local sp = new_speller("BO XK DQ CP NA GT RE TG QD FS JW HU VI AN OB ER FS LY PC ZM")
+local words = {"A", "BARK", "BOOK", "TREAT", "COMMON", "SQUAD", "CONFUSE"}
+for words as word do
+ print(string.format("%-7s %s", word, sp(word)))
+end
diff --git a/Task/AKS-test-for-primes/ANSI-BASIC/aks-test-for-primes.basic b/Task/AKS-test-for-primes/ANSI-BASIC/aks-test-for-primes.basic
new file mode 100644
index 0000000000..547da20116
--- /dev/null
+++ b/Task/AKS-test-for-primes/ANSI-BASIC/aks-test-for-primes.basic
@@ -0,0 +1,79 @@
+100 REM AKS test for primes
+110 DECLARE EXTERNAL SUB PascalTriangle
+120 DECLARE EXTERNAL SUB ExpandPoly
+130 DECLARE EXTERNAL FUNCTION IsPrime
+140 FOR N = 0 TO 9
+150 CALL ExpandPoly(N)
+160 NEXT N
+170 FOR N = 2 TO 50
+180 IF IsPrime(N) <> 0 THEN PRINT USING("###"): N;
+190 NEXT N
+200 PRINT
+210 END
+220 REM **
+230 EXTERNAL SUB PascalTriangle(N, PasTri())
+240 REM Calculate t!he N'th line 0.. middle
+250 LET N = INT(N)
+260 LET PasTri(0) = 1
+270 LET J = 1
+280 DO WHILE J <= N
+290 LET J = J + 1
+300 LET K = INT(J / 2)
+310 LET PasTri(K) = PasTri(K - 1)
+320 FOR K = K TO 1 STEP -1
+330 LET PasTri(K) = PasTri(K) + PasTri(K - 1)
+340 NEXT K
+350 LOOP
+360 END SUB
+370 REM **
+380 EXTERNAL FUNCTION IsPrime(N)
+390 LET N = INT(N)
+400 DIM PasTri(0 TO 50)
+410 LET PasTriMax = UBOUND(PasTri)
+420 IF N > PasTriMax THEN
+430 PRINT N; "is out of range"
+440 STOP
+450 END IF
+460 CALL PascalTriangle(N, PasTri)
+470 LET Res = 1
+480 LET I = INT(N / 2)
+490 DO WHILE (Res <> 0) AND (I > 1)
+500 IF (Res <> 0) AND (MOD(PasTri(I), N) = 0) THEN LET Res = 1 ELSE LET Res = 0
+510 LET I = I - 1
+520 LOOP
+530 LET IsPrime = Res
+540 END FUNCTION
+550 REM **
+560 EXTERNAL SUB ExpandPoly(N)
+570 LET N = INT(N)
+580 DIM VZ$(0 TO 1)
+590 LET VZ$(0) = "+"
+600 LET VZ$(1) = "-"
+610 DIM PasTri(0 TO 50)
+620 LET PasTriMax = UBOUND(PasTri)
+630 IF N > PasTriMax THEN
+640 PRINT N; "is out of range"
+650 STOP
+660 END IF
+670 SELECT CASE N
+680 CASE 0
+690 PRINT "(x - 1) ^ 0 = 1"
+700 CASE 1
+710 PRINT "(x - 1) ^ 1 = x - 1"
+720 CASE ELSE
+730 CALL PascalTriangle(N, PasTri)
+740 PRINT "(x - 1) ^"; N; " = x ^"; N;
+750 LET BVZ = 1
+760 FOR J = N - 1 TO INT(N / 2) + 1 STEP -1
+770 PRINT VZ$(BVZ); PasTri(N - J); "* x ^"; J;
+780 LET BVZ = ABS(1 - BVZ)
+790 NEXT J
+800 FOR J = INT(N / 2) TO 2 STEP -1
+810 PRINT VZ$(BVZ); PasTri(J); "* x ^"; J;
+820 LET BVZ = ABS(1 - BVZ)
+830 NEXT J
+840 PRINT VZ$(BVZ); PasTri(1); "* x ";
+850 LET BVZ = ABS(1 - BVZ)
+860 PRINT VZ$(BVZ); PasTri(0)
+870 END SELECT
+880 END SUB
diff --git a/Task/AKS-test-for-primes/Agena/aks-test-for-primes.agena b/Task/AKS-test-for-primes/Agena/aks-test-for-primes.agena
new file mode 100644
index 0000000000..6589095e8f
--- /dev/null
+++ b/Task/AKS-test-for-primes/Agena/aks-test-for-primes.agena
@@ -0,0 +1,89 @@
+# AKS test for primes
+
+constant pas_tri_max := 50;
+
+proc pascal_triangle(n :: posint) is
+# Calculate the n'th line 1.. middle
+# For n = 1, 2, ..
+ create register pas_tri((n + 1) \ 2);
+ # pas_tri[0] always is 1
+ j := 1;
+ case n
+ of 1, 2 then pas_tri[1] := 2
+ else
+ j := 3;
+ pas_tri[1] := 2;
+ while j <= n do
+ j++;
+ k := j \ 2; # middle
+ pas_tri[k] := pas_tri[k - 1];
+ while k >= 2 do
+ pas_tri[k] +:= pas_tri[k - 1];
+ k--
+ od;
+ pas_tri[1] +:= 1
+ od
+ esle
+ esac
+ return pas_tri
+end;
+
+proc is_prime(n :: nonnegint) :: boolean is
+ if n > pas_tri_max then
+ printf("%d is out of range\n", n);
+ os.exit(-1)
+ fi;
+ pas_tri := pascal_triangle(n);
+ res := true;
+ i := n \ 2;
+ while res and (i > 1) do
+ res := res and (pas_tri[i] symmod n = 0);
+ i--
+ od;
+ return res
+end;
+
+proc vz(b :: boolean) is
+ return if b then '-' else '+' fi
+end;
+
+proc expand_poly(n :: nonnegint) is
+ if n > pas_tri_max then
+ printf("%d is out of range\n", n);
+ os.exit(-1)
+ fi;
+ case n
+ of 0 then printf("(x-1)^0 = 1\n");
+ of 1 then printf("(x-1)^1 = x-1\n");
+ else
+ pas_tri := pascal_triangle(n);
+ printf("(x-1)^%d = x^%d", n, n);
+ bvz := true;
+ n_div_2 := n \ 2
+ for j from n - 1 to n_div_2 + 1 by -1 do
+ printf("%s%d*x^%d", vz(bvz), pas_tri[n - j], j);
+ bvz := not bvz
+ od;
+ for j from n_div_2 to 2 by -1 do
+ printf("%s%d*x^%d", vz(bvz), pas_tri[j], j);
+ bvz := not bvz
+ od;
+ printf("%s%d*x", vz(bvz), pas_tri[1]);
+ bvz := not bvz;
+ printf("%s1\n", vz(bvz));
+ esle
+ esac
+end;
+
+scope
+ local n;
+ for n from 0 to 9 do
+ expand_poly(n)
+ od;
+ for n from 2 to pas_tri_max do
+ if is_prime(n) then
+ printf("%3d", n)
+ fi
+ od;
+ printf("\n")
+end
diff --git a/Task/AKS-test-for-primes/EasyLang/aks-test-for-primes.easy b/Task/AKS-test-for-primes/EasyLang/aks-test-for-primes.easy
new file mode 100644
index 0000000000..54fc26429d
--- /dev/null
+++ b/Task/AKS-test-for-primes/EasyLang/aks-test-for-primes.easy
@@ -0,0 +1,43 @@
+func[] coefs n .
+ list[] = [ 1 ]
+ arrbase list[] 0
+ for k = 0 to n : list[] &= list[k] * (n - k) / (k + 1)
+ for k = 1 step 2 to n : list[k] = -list[k]
+ return list[]
+.
+func isprimeaks n .
+ c[] = coefs n
+ c[0] -= 1
+ c[n] += 1
+ for i = 0 to n
+ if c[i] mod n <> 0 : return 0
+ .
+ return 1
+.
+proc pprintcoefs n list[] .
+ for i = 0 to n
+ s$ = ""
+ if i > 0
+ s$ = " + "
+ if list[i] < 0 : s$ = " - "
+ .
+ c$ = abs list[i]
+ e = n - i
+ if c$ = "1" and e > 0 : c$ = ""
+ x$ = ""
+ if e <> 0
+ x$ = "x"
+ if e <> 1 : x$ &= "^" & e
+ .
+ r$ &= s$ & c$ & x$
+ .
+ print "(x-1)^" & n & " : " & r$
+.
+for i = 0 to 7
+ pprintcoefs i coefs i
+.
+print ""
+for i = 2 to 49
+ if isprimeaks i = 1 : write i & " "
+.
+print ""
diff --git a/Task/AKS-test-for-primes/FutureBasic/aks-test-for-primes.basic b/Task/AKS-test-for-primes/FutureBasic/aks-test-for-primes.basic
index c94e8f7494..72bc4196df 100644
--- a/Task/AKS-test-for-primes/FutureBasic/aks-test-for-primes.basic
+++ b/Task/AKS-test-for-primes/FutureBasic/aks-test-for-primes.basic
@@ -1,6 +1,5 @@
// AKS Test for Primes task
// https://rosettacode.org/wiki/AKS_test_for_primes
-// Translated from Yabasic to FutureBASIC
#build ShowMoreWarnings NO
diff --git a/Task/AKS-test-for-primes/Modula-2/aks-test-for-primes.mod2 b/Task/AKS-test-for-primes/Modula-2/aks-test-for-primes.mod2
new file mode 100644
index 0000000000..a138aea166
--- /dev/null
+++ b/Task/AKS-test-for-primes/Modula-2/aks-test-for-primes.mod2
@@ -0,0 +1,119 @@
+MODULE AKSTest;
+(* AKS test for primes *)
+
+FROM STextIO IMPORT
+ WriteLn, WriteString;
+FROM SWholeIO IMPORT
+ WriteInt;
+
+CONST
+ PasTriMax = 33; (* for 32-bit integer type *)
+
+TYPE
+ TPasTri = ARRAY [0 .. PasTriMax] OF CARDINAL;
+
+VAR
+ N: CARDINAL;
+
+PROCEDURE PascalTriangle(N: CARDINAL; VAR PasTri: TPasTri);
+(* Calculate the N'th line 0.. middle *)
+VAR
+ J, K: CARDINAL;
+BEGIN
+ PasTri[0] := 1;
+ J := 1;
+ WHILE J <= N DO
+ J := J + 1;
+ K := J DIV 2;
+ PasTri[K] := PasTri[K - 1];
+ FOR K := K TO 1 BY -1 DO
+ PasTri[K] := PasTri[K] + PasTri[K - 1];
+ END
+ END
+END PascalTriangle;
+
+PROCEDURE IsPrime(N: CARDINAL): BOOLEAN;
+VAR
+ Res : BOOLEAN;
+ I : CARDINAL;
+ PasTri: TPasTri;
+BEGIN
+ IF N > PasTriMax THEN
+ WriteInt(N, 1);
+ WriteString(" is out of range");
+ WriteLn;
+ HALT;
+ END;
+ PascalTriangle(N, PasTri);
+ Res := TRUE;
+ I := N DIV 2;
+ WHILE Res AND (I > 1) DO
+ Res := Res AND (PasTri[I] MOD N = 0);
+ I := I - 1
+ END;
+ RETURN Res;
+END IsPrime;
+
+PROCEDURE ExpandPoly(N: CARDINAL);
+TYPE
+ TVZ = ARRAY BOOLEAN OF CHAR;
+CONST
+ VZ = TVZ {'+', '-'};
+VAR
+ J : CARDINAL;
+ BVZ : BOOLEAN;
+ PasTri: TPasTri;
+BEGIN
+ IF N > PasTriMax THEN
+ WriteInt(N, 1);
+ WriteString(" is out of range");
+ WriteLn;
+ HALT
+ END;
+ CASE N OF
+ | 0:
+ WriteString("(x-1)^0 = 1"); WriteLn;
+ | 1:
+ WriteString("(x-1)^1 = x-1"); WriteLn;
+ ELSE
+ PascalTriangle(N, PasTri);
+ WriteString("(x-1)^");
+ WriteInt(N, 1);
+ WriteString(" = x^");
+ WriteInt(N, 1);
+ BVZ := TRUE;
+ FOR J := N - 1 TO N DIV 2 + 1 BY -1 DO
+ WriteString(VZ[BVZ]);
+ WriteInt(PasTri[N - J], 1);
+ WriteString("*x^");
+ WriteInt(J, 1);
+ BVZ := NOT BVZ
+ END;
+ FOR J := N DIV 2 TO 2 BY -1 DO
+ WriteString(VZ[BVZ]);
+ WriteInt(PasTri[J], 1);
+ WriteString("*x^");
+ WriteInt(J, 1);
+ BVZ := NOT BVZ
+ END;
+ WriteString(VZ[BVZ]);
+ WriteInt(PasTri[1], 1);
+ WriteString("*x");
+ BVZ := NOT BVZ;
+ WriteString(VZ[BVZ]);
+ WriteInt(PasTri[0], 1);
+ WriteLn;
+ END;
+END ExpandPoly;
+
+BEGIN
+ FOR N := 0 TO 9 DO
+ ExpandPoly(N)
+ END;
+ FOR N := 2 TO PasTriMax DO
+ IF IsPrime(N) THEN
+ WriteInt(N, 3)
+ END
+ END;
+ WriteLn;
+END AKSTest.
diff --git a/Task/AKS-test-for-primes/PHP/aks-test-for-primes.php b/Task/AKS-test-for-primes/PHP/aks-test-for-primes.php
new file mode 100644
index 0000000000..9b3e9bbaa4
--- /dev/null
+++ b/Task/AKS-test-for-primes/PHP/aks-test-for-primes.php
@@ -0,0 +1,80 @@
+ PAS_TRI_MAX) {
+ echo $n, " is out of range", PHP_EOL;
+ exit;
+ }
+ switch ($n) {
+ case 0:
+ echo "(x-1)^0 = 1", PHP_EOL;
+ break;
+ case 1:
+ echo "(x-1)^1 = x-1", PHP_EOL;
+ break;
+ default:
+ $pas_tri = [];
+ pascal_triangle($n, $pas_tri);
+ echo "(x-1)^", $n, " = x^", $n;
+ $bvz = true;
+ $n_div_2 = intdiv($n, 2);
+ for ($j = $n - 1; $j > $n_div_2; $j--) {
+ echo vz($bvz), $pas_tri[$n - $j], "*x^", $j;
+ $bvz = !$bvz;
+ }
+ for ($j = $n_div_2; $j >= 2; $j--) {
+ echo vz($bvz), $pas_tri[$j], "*x^", $j;
+ $bvz = !$bvz;
+ }
+ echo vz($bvz), $pas_tri[1], "*x";
+ $bvz = !$bvz;
+ echo vz($bvz), $pas_tri[0], PHP_EOL;
+ }
+}
+
+function pascal_triangle($n, &$pas_tri) {
+// Calculate the $n'th line 0.. middle
+ $pas_tri = array_fill(0, intdiv($n + 1, 2) + 1, 0);
+ $pas_tri[0] = 1;
+ $j = 1;
+ while ($j <= $n) {
+ $j++;
+ $k = intdiv($j, 2);
+ $pas_tri[$k] = $pas_tri[$k - 1];
+ while ($k >= 1) {
+ $pas_tri[$k] += $pas_tri[$k - 1];
+ $k--;
+ }
+ }
+}
+
+function is_prime($n):bool {
+ if ($n > PAS_TRI_MAX) {
+ echo $n, " is out of range", PHP_EOL;
+ exit;
+ }
+ $pas_tri = [];
+ pascal_triangle($n, $pas_tri);
+ $res = true;
+ $i = intdiv($n, 2);
+ while ($res && ($i > 1)) {
+ $res = $res && ($pas_tri[$i] % $n == 0);
+ --$i;
+ }
+ return $res;
+}
+
+for ($n = 0; $n <= 9; $n++)
+ expand_poly($n);
+for ($n = 2; $n <= PAS_TRI_MAX; $n++)
+ if (is_prime($n))
+ echo str_pad($n, 3, " ", STR_PAD_LEFT);
+echo PHP_EOL;
+?>
diff --git a/Task/AKS-test-for-primes/Pluto/aks-test-for-primes.pluto b/Task/AKS-test-for-primes/Pluto/aks-test-for-primes.pluto
new file mode 100644
index 0000000000..382e876965
--- /dev/null
+++ b/Task/AKS-test-for-primes/Pluto/aks-test-for-primes.pluto
@@ -0,0 +1,90 @@
+do -- "AKS test for promes" task - translated from the Algol 68 sample
+
+ local bigint = require "pluto:bigint"
+ local b0, b1 = new bigint( 0 ), new bigint( 1 )
+ --[[
+ Mathematical preliminaries.
+
+ First note that the homogeneous polynomial (a+b)^n is symmetrical
+ (to see this just swap the variables a and b). Therefore its
+ coefficients need be calculated only to that of (ab)^{n/2} for even
+ n or (ab)^{(n-1)/2} for odd n.
+
+ Second, the coefficients are the binomial coefficients C(n,k) where
+ the coefficient of a^k b^(n-k) is C(n,k) = n! / k! (k-1)!. This
+ leads to an immediate and relatively efficient implementation for
+ which we do not need to compute n! before dividing by k! and (k-1)!
+ but, rather cancel common factors as we go along. Further, the
+ well-known symmetry identity C(n,k) = C(n, n-k) allows a
+ significant reduction in computational effort.
+
+ Third, (x-1)^n is the value of (a + b)^n when a=x and b = -1. The
+ powers of -1 alternate between +1 and -1 so we may as well compute
+ (x+1)^n and negate every other coefficient when printing.
+ ]]
+
+ local function choose( n, k )
+ local result = b1
+ local symK = if k >= n//2 then n-k else k end -- Use symmetry
+ if symK > 0 then
+ local iPlus1 = b1
+ local nMinusI = new bigint( n )
+ for _ = 0, symK-1 do
+ result *= nMinusI
+ result /= iPlus1
+ iPlus1 += b1
+ nMinusI -= b1
+ end
+ end
+ return result
+ end
+ local function coefficients( n )
+ local a = {}
+ for i = 0, n//2 do
+ a[i] = choose( n, i )
+ a[n-i] = a[i] -- Use symmetry
+ end
+ return a
+ end
+ --[[
+ First print the polynomials (x-1)^n, remembering to alternate signs
+ and to tidy up the constant term, the x^1 term and the x^n term.
+ This means we must treat (x-1)^0 and (x-1)^1 specially
+ ]]
+ for n = 0,7 do
+ local a = coefficients( n )
+ io.write( "(x-1)^"..n.." = " )
+ switch n do
+ case 0: io.write( tostring( a[0] ) ) break
+ case 1: io.write( "x - "..tostring( a[1] ) ) break
+ default: io.write( "x^"..n )
+ for i = 1,n-2 do
+ local ai = tostring( a[i] )
+ io.write( if i % 2 == 1 then " - " else " + " end..ai.."x^"..(n-i) )
+ end
+ io.write( if ( n - 1 ) % 2 == 1 then " - " else " + " end..tostring( a[n-1] ).."x" )
+ io.write( if n % 2 == 1 then " - " else " + " end..tostring( a[n] ) )
+ end
+ io.write( "\n" )
+ end
+ --[[
+ Finally, for the "AKS" portion of the task, the sign of the
+ coefficient has no effect on its divisibility by p so, once again,
+ we may as well use the positive coefficients. Symmetry clearly
+ reduces the necessary number of tests by a factor of two.
+ ]]
+ local function isPrime( n )
+ local prime = true
+ local bn = new bigint( n )
+ for i = 1,n//2 do
+ prime = choose( n, i ) % bn == b0
+ if not prime then return false end
+ end
+ return true
+ end
+ io.write( "Primes between 1 and 50 are:" )
+ for n = 2,50 do if isPrime(n) then io.write( " "..n ) end end
+ io.write( "\nPrimes between 900 and 1000 are:")
+ for n = 900,1000 do if isPrime(n) then io.write( " "..n ) end end
+ io.write( "\n" )
+end
diff --git a/Task/AKS-test-for-primes/PowerShell/aks-test-for-primes.psh b/Task/AKS-test-for-primes/PowerShell/aks-test-for-primes.psh
new file mode 100644
index 0000000000..c79bcdf5e7
--- /dev/null
+++ b/Task/AKS-test-for-primes/PowerShell/aks-test-for-primes.psh
@@ -0,0 +1,84 @@
+# AKS test for primes
+
+$script:PasTriMax = 61 # for long type of Pascal triangle numbers
+
+function Pascal-Triangle {
+ # Calculate the n'th line 0.. middle
+ param(
+ [int]$N
+ )
+
+ $pasTri = [long[]]::new([math]::Ceiling(($N + 2) / 2))
+ $pasTri[0] = 1
+ [int]$j = 1
+ while ($j -le $N) {
+ $j++
+ [int]$k = [math]::Floor($j / 2)
+ $pasTri[$k] = $pasTri[$k - 1]
+ for (; $k -ge 1; $k--) {
+ $pasTri[$k] += $pasTri[$k - 1]
+ }
+ }
+ # Now: $j -eq ($N + 1), so $k -eq [math]::Floor(($N + 1) / 2)
+ return $pasTri
+}
+
+function Expand-Poly {
+ param ([int]$N)
+
+ if ($N -gt $script:PasTriMax) {
+ throw "$N is out of range"
+ }
+ switch($N) {
+ 0 {Write-Output "(x-1)^0 = 1"}
+ 1 {Write-Output "(x-1)^1 = x-1"}
+ default {
+ $VZ = @('+', '-')
+ $pasTri = Pascal-Triangle($N)
+ [string]$outTri = @()
+ $outTri += "(x-1)^$N = x^$N"
+ [bool]$bVz = $true
+ [int]$nDiv2 = [math]::Floor($N / 2)
+ for ([int]$j = $N - 1; $j -gt $nDiv2; $j--) {
+ $outTri += "$($VZ[$bVz]) $($pasTri[$N - $j])*x^$j"
+ $bVz = -not $bVz
+ }
+ for ([int]$j = $nDiv2; $j -gt 1; $j--) {
+ $outTri += "$($VZ[$bVz]) $($pasTri[$j])*x^$j"
+ $bVz = -not $bVz
+ }
+ $outTri += "$($VZ[$bVz]) $($pasTri[1])*x"
+ $bVz = -not $bVz
+ $outTri += "$($VZ[$bVz]) $($pasTri[0])"
+ Write-Output $outTri
+ }
+ }
+}
+
+function Is-Prime {
+ param([int]$N)
+
+ if ($N -gt $script:PasTriMax) {
+ throw "$N is out of range"
+ }
+ $pasTri = Pascal-Triangle($N)
+ [bool]$res = $true
+ [int]$i = [math]::Floor($N / 2)
+ while ($res -and ($i -gt 1)) {
+ $res = $res -and ($pasTri[$i] % $N -eq 0)
+ $i--
+ }
+ return $res
+}
+
+# Test program
+foreach ($n in 0..9) {
+ Expand-Poly($n)
+}
+[string]$primes = @()
+foreach ($n in 2..$script:PasTriMax) {
+ if (Is-Prime($n)) {
+ $primes += "{0,3}" -f $n
+ }
+}
+Write-Output $primes
diff --git a/Task/AKS-test-for-primes/REXX/aks-test-for-primes-2.rexx b/Task/AKS-test-for-primes/REXX/aks-test-for-primes-2.rexx
index 1942f69672..80afc0c295 100644
--- a/Task/AKS-test-for-primes/REXX/aks-test-for-primes-2.rexx
+++ b/Task/AKS-test-for-primes/REXX/aks-test-for-primes-2.rexx
@@ -1,12 +1,12 @@
--- 22 Mar 2025
+-- 28 Jul 2025
include Settings
+arg p
+if p = '' then
+ p = 10
say 'AKS TEST FOR PRIMES'
say version
say
-arg p
-if p = '' then
- p = 10
numeric digits Max(10,Abs(p)%3)
call Combis p
call Polynomials p
@@ -37,9 +37,9 @@ else
b = 0
p = Abs(p); prim. = 0; n = 0
do i = b to p
- a = Ppow('1 -1',i)
+ a = PowP('1 -1',i)
if i < 11 then
- say '(x-1)^'i '=' Plst2form(Parr2lst())
+ say '(x-1)^'i '=' Lst2FormP(Arr2LstP())
s = 1
do j = 2 to poly.0-1
a = poly.coef.j
@@ -84,8 +84,4 @@ say Format(Time('e'),,3) 'seconds'
say
return
-include Functions
-include Numbers
-include Polynomial
-include Sequences
-include Abend
+include Math
diff --git a/Task/AKS-test-for-primes/XBasic/aks-test-for-primes.basic b/Task/AKS-test-for-primes/XBasic/aks-test-for-primes.basic
new file mode 100644
index 0000000000..ee9baae9d6
--- /dev/null
+++ b/Task/AKS-test-for-primes/XBasic/aks-test-for-primes.basic
@@ -0,0 +1,84 @@
+PROGRAM "akstest"
+' AKS test for primes
+
+DECLARE FUNCTION Entry ()
+INTERNAL FUNCTION ExpandPoly(n@@)
+INTERNAL FUNCTION PascalTriangle(n@@, @pasTri&&[])
+INTERNAL FUNCTION IsPrime(n@@)
+INTERNAL FUNCTION Vz$(b@)
+$$PasTriMax = 33 ' for 32-bit integer type
+
+FUNCTION Entry()
+ FOR n@@ = 0 TO 9
+ ExpandPoly(n@@)
+ NEXT
+ FOR n@@ = 2 TO $$PasTriMax
+ IF IsPrime(n@@) THEN PRINT FORMAT$("###", n@@);
+ NEXT
+ PRINT
+END FUNCTION
+
+FUNCTION ExpandPoly(n@@)
+ DIM pasTri&&[$$PasTriMax]
+ IF n@@ > $$PasTriMax THEN
+ PRINT n@@; " is out of range"
+ QUIT(1)
+ END IF
+ SELECT CASE n@@
+ CASE 0:
+ PRINT "(x - 1) ^ 0 = 1"
+ CASE 1:
+ PRINT "(x - 1) ^ 1 = x - 1"
+ CASE ELSE:
+ PascalTriangle(n@@, @pasTri&&[])
+ PRINT "(x - 1) ^"; n@@; " = x ^"; n@@;
+ bVz@ = $$TRUE
+ FOR j@@ = n@@ - 1 TO n@@ \ 2 + 1 STEP -1
+ PRINT " "; Vz$(bVz@); pasTri&&[n@@ - j@@]; " * x ^"; j@@;
+ bVz@ = NOT bVz@
+ NEXT
+ FOR j@@ = n@@ \ 2 TO 2 STEP -1
+ PRINT " "; Vz$(bVz@); pasTri&&[j@@]; " * x ^"; j@@;
+ bVz@ = NOT bVz@
+ NEXT
+ PRINT " "; Vz$(bVz@); pasTri&&[1]; " * x ";
+ bVz@ = NOT bVz@
+ PRINT Vz$(bVz@); pasTri&&[0]
+ END SELECT
+
+END FUNCTION
+
+FUNCTION PascalTriangle(n@@, @pasTri&&[])
+' Calculate the n@@'th line 0.. middle
+ pasTri&&[0] = 1
+ j@@ = 1
+ DO WHILE j@@ <= n@@
+ INC j@@
+ k@@ = j@@ \ 2
+ pasTri&&[k@@] = pasTri&&[k@@ - 1]
+ FOR k@@ = k@@ TO 1 STEP -1
+ pasTri&&[k@@] = pasTri&&[k@@] + pasTri&&[k@@ - 1]
+ NEXT
+ LOOP
+END FUNCTION
+
+FUNCTION IsPrime(n@@)
+ DIM pasTri&&[$$PasTriMax]
+ IF n@@ > $$PasTriMax THEN
+ PRINT n@@; " is out of range"
+ QUIT(1)
+ END IF
+ PascalTriangle(n@@, @pasTri&&[])
+ res@ = $$TRUE
+ i@@ = n@@ \ 2
+ DO WHILE res@ AND (i@@ > 1)
+ res@ = res@ AND (pasTri&&[i@@] MOD n@@ = 0)
+ DEC i@@
+ LOOP
+ RETURN res@
+END FUNCTION
+
+FUNCTION Vz$(b@)
+ IF b@ THEN RETURN "-" ELSE RETURN "+"
+END FUNCTION
+END PROGRAM
diff --git a/Task/AKS-test-for-primes/XPL0/aks-test-for-primes.xpl0 b/Task/AKS-test-for-primes/XPL0/aks-test-for-primes.xpl0
new file mode 100644
index 0000000000..a60bd11dec
--- /dev/null
+++ b/Task/AKS-test-for-primes/XPL0/aks-test-for-primes.xpl0
@@ -0,0 +1,105 @@
+\AKS test for primes
+code Rem=2, ChOut=8, CrLf=9, Text=12, IntOut=11;
+code real RlOut=48, Float=49, Format=52;
+define PasTriMax = 33; \for 32-bit integer type
+integer N;
+
+ procedure PascalTriangle(N, PasTri);
+ \Calculate the N'th line 0.. middle
+ integer N, PasTri;
+ integer J, K;
+ begin
+ PasTri(0):= 1;
+ J:= 1;
+ while J <= N do
+ begin
+ J:= J + 1;
+ K:= J / 2;
+ PasTri(K):= PasTri(K - 1);
+ for K:= K downto 1 do PasTri(K):= PasTri(K) + PasTri(K - 1)
+ end \while
+ end;
+
+ function integer IsPrime(N);
+ integer N;
+ integer Res, I, PasTri(PasTriMax + 1);
+ begin
+ if N > PasTriMax then
+ begin
+ IntOut(0, N);
+ Text(0, " is out of range");
+ CrLf(0);
+ exit;
+ end;
+ PascalTriangle(N, PasTri);
+ Res:= true;
+ I:= N / 2;
+ while Res & (I > 1) do
+ begin
+ Res:= Res & (Rem(PasTri(I) / N) = 0);
+ I:= I - 1
+ end;
+ return Res;
+ end;
+
+ procedure ExpandPoly(N);
+ integer N;
+ integer J, BVZ, PasTri(PasTriMax + 1);
+
+ procedure VZOut(D, B);
+ integer D, B;
+ begin
+ if B then ChOut(D, ^-) else ChOut(D, ^+)
+ end;
+
+ begin
+ if N > PasTriMax then
+ begin
+ IntOut(0, N);
+ Text(0, " is out of range");
+ CrLf(0);
+ exit
+ end;
+ case N of
+ 0: [Text(0, "(x-1)^^0 = 1"); CrLf(0)];
+ 1: [Text(0, "(x-1)^^1 = x-1"); CrLf(0)]
+ other
+ begin
+ PascalTriangle(N, PasTri);
+ Text(0, "(x-1)^^");
+ IntOut(0, N);
+ Text(0, " = x^^");
+ IntOut(0, N);
+ BVZ:= true;
+ for J:= N - 1 downto N / 2 + 1 do
+ begin
+ VZOut(0, BVZ);
+ IntOut(0, PasTri(N - J));
+ Text(0, "*x^^");
+ IntOut(0, J);
+ BVZ:= ~BVZ;
+ end;
+ for J:= N / 2 downto 2 do
+ begin
+ VZOut(0, BVZ);
+ IntOut(0, PasTri(J));
+ Text(0, "*x^^");
+ IntOut(0, J);
+ BVZ:= ~BVZ
+ end;
+ VZOut(0, BVZ);
+ IntOut(0, PasTri(1));
+ Text(0, "*x");
+ BVZ:= ~BVZ;
+ VZOut(0, BVZ);
+ IntOut(0, PasTri(0));
+ CrLf(0);
+ end \case other
+ end;
+
+begin
+for N:= 0 to 9 do ExpandPoly(N);
+for N:= 2 to PasTriMax do
+ if IsPrime(N) then [Format(3,0); RlOut(0, Float(N))];
+CrLf(0);
+end
diff --git a/Task/ASCII-art-diagram-converter/Mathematica/ascii-art-diagram-converter.math b/Task/ASCII-art-diagram-converter/Mathematica/ascii-art-diagram-converter.math
new file mode 100644
index 0000000000..d8537d0ef8
--- /dev/null
+++ b/Task/ASCII-art-diagram-converter/Mathematica/ascii-art-diagram-converter.math
@@ -0,0 +1,86 @@
+diagram = "
+ +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+ | ID |
+ +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+ |QR| Opcode |AA|TC|RD|RA| Z | RCODE |
+ +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+ | QDCOUNT |
+ +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+ | ANCOUNT |
+ +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+ | NSCOUNT |
+ +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+ | ARCOUNT |
+ +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+";
+
+testhexdata = "78477bbf5496e12e1bf169a4";
+
+(* Define BitField as an Association instead of a struct *)
+createBitField[name_, bits_, fieldstart_, fieldend_] :=
+ <|"name" -> name, "bits" -> bits, "fieldstart" -> fieldstart, "fieldend" -> fieldend|>;
+
+diagramToStruct[txt_] := Module[{bitfields = {}, lines, nbits, fieldpos, bitaccum,
+ bitsize, bitlabel, bitstart, bitend},
+ lines = StringTrim /@ StringSplit[txt, "\n"];
+
+ Do[
+ nbits = StringCount[lines[[row]], "+"] - 1;
+ fieldpos = StringPosition[lines[[row + 1]], "|"][[All, 1]];
+ bitaccum = Floor[row/2] * nbits;
+
+ Do[
+ endfield = fieldpos[[i + 1]];
+ bitsize = Floor[(endfield - field)/3];
+ bitlabel = StringTrim[StringTake[lines[[row + 1]], {field + 1, endfield - 1}]];
+ bitstart = Floor[(field - 1)/3] + bitaccum;
+ bitend = bitstart + bitsize - 1;
+ AppendTo[bitfields, createBitField[bitlabel, bitsize, bitstart, bitend]],
+
+ {i, 1, Length[fieldpos] - 1}, {field, {fieldpos[[i]]}}
+ ],
+
+ {row, 1, Length[lines] - 1, 2}
+ ];
+
+ bitfields
+];
+
+(* Convert a hex byte to binary string with padding *)
+binByte[c_] := IntegerString[FromDigits[c, 16], 2, 8];
+
+(* Convert entire hex string to binary *)
+hexToBinary[s_] := StringJoin[
+ binByte /@ (StringTake[s, {#, # + 1}] & /@ Range[1, StringLength[s] - 1, 2])
+];
+
+validator[binstring_, fields_] :=
+ StringLength[binstring] == Total[#["bits"] & /@ fields];
+
+bitReader[bitfields_, hexdata_] := Module[{b, pat},
+ Print["\nEvaluation of hex data ", hexdata, " as bitfields:"];
+ Print["Name Size Bits\n------- ---- ----------------"];
+
+ b = hexToBinary[hexdata];
+ Assert[validator[b, bitfields]];
+
+ Do[
+ pat = StringTake[b, {bf["fieldstart"] + 1, bf["fieldend"] + 1}];
+ Print[StringPadRight[bf["name"], 9],
+ StringPadRight[ToString[bf["bits"]], 6],
+ StringPadLeft[pat, 16]],
+ {bf, bitfields}
+ ]
+];
+
+decoded = diagramToStruct[diagram];
+
+Print["Diagram as bit fields:\nName Bits Start End\n------ ---- ----- ---"];
+Do[
+ Print[StringPadRight[bf["name"], 8],
+ StringPadRight[ToString[bf["bits"]], 6],
+ StringPadRight[ToString[bf["fieldstart"]], 6],
+ StringPadLeft[ToString[bf["fieldend"]], 4]],
+ {bf, decoded}
+];
+
+bitReader[decoded, testhexdata];
diff --git a/Task/AVL-tree/Dart/avl-tree.dart b/Task/AVL-tree/Dart/avl-tree.dart
new file mode 100644
index 0000000000..fb761a2aec
--- /dev/null
+++ b/Task/AVL-tree/Dart/avl-tree.dart
@@ -0,0 +1,221 @@
+class Node {
+ int key;
+ int balance = 0;
+ int height = 0;
+ Node? left;
+ Node? right;
+ Node? parent;
+
+ Node(this.key, this.parent);
+}
+
+
+
+
+class AVLTree {
+ Node? root;
+
+ bool insert(int key) {
+ if (root == null) {
+ root = Node(key, null);
+ return true;
+ }
+
+ Node? n = root;
+ while (true) {
+ if (n!.key == key) return false;
+
+ Node parent = n;
+
+ bool goLeft = n.key > key;
+ n = goLeft ? n.left : n.right;
+
+ if (n == null) {
+ if (goLeft) {
+ parent.left = Node(key, parent);
+ } else {
+ parent.right = Node(key, parent);
+ }
+ rebalance(parent);
+ break;
+ }
+ }
+ return true;
+ }
+
+ void _delete(Node node) {
+ if (node.left == null && node.right == null) {
+ if (node.parent == null) {
+ root = null;
+ } else {
+ Node parent = node.parent!;
+ if (parent.left == node) {
+ parent.left = null;
+ } else {
+ parent.right = null;
+ }
+ rebalance(parent);
+ }
+ return;
+ }
+
+ if (node.left != null) {
+ Node child = node.left!;
+ while (child.right != null) child = child.right!;
+ node.key = child.key;
+ _delete(child);
+ } else {
+ Node child = node.right!;
+ while (child.left != null) child = child.left!;
+ node.key = child.key;
+ _delete(child);
+ }
+ }
+
+ void delete(int delKey) {
+ if (root == null) return;
+
+ Node? child = root;
+ while (child != null) {
+ Node node = child;
+ child = delKey >= node.key ? node.right : node.left;
+ if (delKey == node.key) {
+ _delete(node);
+ return;
+ }
+ }
+ }
+
+ void rebalance(Node n) {
+ setBalance(n);
+
+ if (n.balance == -2) {
+ if (height(n.left!.left) >= height(n.left!.right)) {
+ n = rotateRight(n);
+ } else {
+ n = rotateLeftThenRight(n);
+ }
+ } else if (n.balance == 2) {
+ if (height(n.right!.right) >= height(n.right!.left)) {
+ n = rotateLeft(n);
+ } else {
+ n = rotateRightThenLeft(n);
+ }
+ }
+
+ if (n.parent != null) {
+ rebalance(n.parent!);
+ } else {
+ root = n;
+ }
+ }
+
+ Node rotateLeft(Node a) {
+ Node b = a.right!;
+ b.parent = a.parent;
+
+ a.right = b.left;
+
+ if (a.right != null) a.right!.parent = a;
+
+ b.left = a;
+ a.parent = b;
+
+ if (b.parent != null) {
+ if (b.parent!.right == a) {
+ b.parent!.right = b;
+ } else {
+ b.parent!.left = b;
+ }
+ }
+
+ setBalance(a, b);
+
+ return b;
+ }
+
+ Node rotateRight(Node a) {
+ Node b = a.left!;
+ b.parent = a.parent;
+
+ a.left = b.right;
+
+ if (a.left != null) a.left!.parent = a;
+
+ b.right = a;
+ a.parent = b;
+
+ if (b.parent != null) {
+ if (b.parent!.right == a) {
+ b.parent!.right = b;
+ } else {
+ b.parent!.left = b;
+ }
+ }
+
+ setBalance(a, b);
+
+ return b;
+ }
+
+ Node rotateLeftThenRight(Node n) {
+ n.left = rotateLeft(n.left!);
+ return rotateRight(n);
+ }
+
+ Node rotateRightThenLeft(Node n) {
+ n.right = rotateRight(n.right!);
+ return rotateLeft(n);
+ }
+
+ int height(Node? n) {
+ if (n == null) return -1;
+ return n.height;
+ }
+
+ void setBalance(Node n, [Node? n2]) {
+ reheight(n);
+ n.balance = height(n.right) - height(n.left);
+
+ if (n2 != null) {
+ reheight(n2);
+ n2.balance = height(n2.right) - height(n2.left);
+ }
+ }
+
+ void printBalance() {
+ _printBalance(root);
+ }
+
+ void _printBalance(Node? n) {
+ if (n != null) {
+ _printBalance(n.left);
+ print('${n.balance} ');
+ _printBalance(n.right);
+ }
+ }
+
+ void reheight(Node node) {
+ if (node != null) {
+ node.height = 1 + (height(node.left) > height(node.right)
+ ? height(node.left)
+ : height(node.right));
+ }
+ }
+
+ static void main() {
+ AVLTree tree = AVLTree();
+
+ print('Inserting values 1 to 10');
+ for (int i = 1; i < 10; i++) {
+ tree.insert(i);
+ }
+
+ print('Printing balance: ');
+ tree.printBalance();
+ }
+}
+
+void main() {
+ AVLTree.main();
+}
diff --git a/Task/AVL-tree/Swift/avl-tree.swift b/Task/AVL-tree/Swift/avl-tree.swift
new file mode 100644
index 0000000000..06db507617
--- /dev/null
+++ b/Task/AVL-tree/Swift/avl-tree.swift
@@ -0,0 +1,243 @@
+import Foundation
+
+// MARK: - AVL Tree ---------------------------------------------------------
+
+final class AVLTree {
+ // ---------- Node ------------------------------------------------------
+ private class Node {
+ var key: Int
+ var balance: Int = 0
+ var height: Int = 0
+
+ var left: Node?
+ var right: Node?
+ weak var parent: Node? // weak to avoid retain cycles
+
+ init(key: Int, parent: Node?) {
+ self.key = key
+ self.parent = parent
+ }
+ }
+
+ // ---------- Root -------------------------------------------------------
+ private var root: Node?
+
+ // ---------- Public API -------------------------------------------------
+
+ /// Inserts `key`. Returns `true` if the key was added, `false` if it already existed.
+ @discardableResult
+ func insert(_ key: Int) -> Bool {
+ // empty tree → new root
+ guard let rootNode = root else {
+ root = Node(key: key, parent: nil)
+ return true
+ }
+
+ var n: Node? = rootNode
+ while let cur = n {
+ if cur.key == key { return false } // duplicate
+
+ let goLeft = key < cur.key
+ let parent = cur
+ n = goLeft ? cur.left : cur.right
+
+ // we have found the empty spot → insert
+ if n == nil {
+ let newNode = Node(key: key, parent: parent)
+ if goLeft {
+ parent.left = newNode
+ } else {
+ parent.right = newNode
+ }
+ rebalance(parent) // fix AVL balance upwards
+ break
+ }
+ }
+ return true
+ }
+
+ /// Deletes `key` if it exists. Does nothing when the key is not present.
+ func delete(_ key: Int) {
+ var current = root
+ while let node = current {
+ if key == node.key {
+ delete(node) // internal helper that really removes the node
+ return
+ }
+ current = (key < node.key) ? node.left : node.right
+ }
+ // key not found → nothing to do
+ }
+
+ /// Prints the balance factor of every node in‑order.
+ func printBalance() {
+ printBalance(node: root)
+ }
+
+ // ---------- Private helpers -------------------------------------------
+
+ /// Removes `node` from the tree (used by the public `delete(_:)` above).
+ private func delete(_ node: Node) {
+ // ----- 1️⃣ leaf node ------------------------------------------------
+ if node.left == nil && node.right == nil {
+ if let parent = node.parent {
+ if parent.left === node { parent.left = nil }
+ else { parent.right = nil }
+ rebalance(parent)
+ } else {
+ root = nil // tree becomes empty
+ }
+ return
+ }
+
+ // ----- 2️⃣ node has a left subtree → replace with predecessor -----
+ if let left = node.left {
+ var predecessor = left
+ while let r = predecessor.right { predecessor = r }
+ node.key = predecessor.key
+ delete(predecessor)
+ }
+ // ----- 3️⃣ otherwise it has a right subtree → replace with successor
+ else if let right = node.right {
+ var successor = right
+ while let l = successor.left { successor = l }
+ node.key = successor.key
+ delete(successor)
+ }
+ }
+
+ /// Walks upward from `n`, fixing heights, balances and performing rotations.
+ private func rebalance(_ n: Node) {
+ setBalance(of: n)
+
+ var node = n
+ if node.balance == -2 {
+ // left heavy
+ if height(of: node.left?.left) >= height(of: node.left?.right) {
+ node = rotateRight(node)
+ } else {
+ node = rotateLeftThenRight(node)
+ }
+ } else if node.balance == 2 {
+ // right heavy
+ if height(of: node.right?.right) >= height(of: node.right?.left) {
+ node = rotateLeft(node)
+ } else {
+ node = rotateRightThenLeft(node)
+ }
+ }
+
+ // continue upwards – or make this node the new root
+ if let parent = node.parent {
+ rebalance(parent)
+ } else {
+ root = node
+ }
+ }
+
+ // ---------- Rotations -------------------------------------------------
+
+ private func rotateLeft(_ a: Node) -> Node {
+ guard let b = a.right else { return a } // safety guard
+
+ // detach b from a
+ b.parent = a.parent
+ a.right = b.left
+ a.right?.parent = a
+
+ // attach a under b
+ b.left = a
+ a.parent = b
+
+ // reconnect b with the rest of the tree
+ if let p = b.parent {
+ if p.left === a {
+ p.left = b
+ } else {
+ p.right = b
+ }
+ }
+
+ setBalance(of: a, b)
+ return b
+ }
+
+ private func rotateRight(_ a: Node) -> Node {
+ guard let b = a.left else { return a } // safety guard
+
+ b.parent = a.parent
+ a.left = b.right
+ a.left?.parent = a
+
+ b.right = a
+ a.parent = b
+
+ if let p = b.parent {
+ if p.left === a {
+ p.left = b
+ } else {
+ p.right = b
+ }
+ }
+
+ setBalance(of: a, b)
+ return b
+ }
+
+ private func rotateLeftThenRight(_ n: Node) -> Node {
+ if let left = n.left {
+ n.left = rotateLeft(left)
+ }
+ return rotateRight(n)
+ }
+
+ private func rotateRightThenLeft(_ n: Node) -> Node {
+ if let right = n.right {
+ n.right = rotateRight(right)
+ }
+ return rotateLeft(n)
+ }
+
+ // ---------- Height / Balance helpers ----------------------------------
+
+ /// Height of a node – `-1` for `nil` (matches the Java implementation).
+ private func height(of node: Node?) -> Int {
+ node?.height ?? -1
+ }
+
+ /// Re‑computes stored height of `node`.
+ private func reheight(_ node: Node?) {
+ guard let node = node else { return }
+ node.height = 1 + max(height(of: node.left), height(of: node.right))
+ }
+
+ /// Updates both `height` and `balance` for every supplied node.
+ private func setBalance(of nodes: Node...) {
+ for n in nodes {
+ reheight(n)
+ n.balance = height(of: n.right) - height(of: n.left)
+ }
+ }
+
+ // ---------- Printing ---------------------------------------------------
+
+ private func printBalance(node: Node?) {
+ guard let node = node else { return }
+ printBalance(node: node.left)
+ print("\(node.balance) ", terminator: "")
+ printBalance(node: node.right)
+ }
+}
+
+// MARK: - Demo -------------------------------------------------------------
+
+let tree = AVLTree()
+
+print("Inserting values 1 to 10")
+for i in 1...10 {
+ _ = tree.insert(i)
+}
+
+print("Printing balance: ", terminator: "")
+tree.printBalance()
+print() // newline
diff --git a/Task/AVL-tree/Zig/avl-tree.zig b/Task/AVL-tree/Zig/avl-tree.zig
new file mode 100644
index 0000000000..3dddf5315b
--- /dev/null
+++ b/Task/AVL-tree/Zig/avl-tree.zig
@@ -0,0 +1,268 @@
+const std = @import("std");
+const math = std.math;
+const stdout = std.io.getStdOut().writer();
+const Allocator = std.mem.Allocator;
+
+// AVL node
+fn AVLnode(comptime T: type) type {
+ return struct {
+ const Self = @This();
+
+ key: T,
+ balance: i32,
+ left: ?*Self,
+ right: ?*Self,
+ parent: ?*Self,
+
+ fn init(k: T, p: ?*Self) Self {
+ return Self{
+ .key = k,
+ .balance = 0,
+ .parent = p,
+ .left = null,
+ .right = null,
+ };
+ }
+
+ fn deinit(self: *Self, allocator: Allocator) void {
+ if (self.left) |left| {
+ left.deinit(allocator);
+ allocator.destroy(left);
+ }
+ if (self.right) |right| {
+ right.deinit(allocator);
+ allocator.destroy(right);
+ }
+ }
+ };
+}
+
+// AVL tree
+fn AVLtree(comptime T: type) type {
+ return struct {
+ const Self = @This();
+ const Node = AVLnode(T);
+
+ root: ?*Node,
+ allocator: Allocator,
+
+ fn init(allocator: Allocator) Self {
+ return Self{
+ .root = null,
+ .allocator = allocator,
+ };
+ }
+
+ fn deinit(self: *Self) void {
+ if (self.root) |root| {
+ root.deinit(self.allocator);
+ self.allocator.destroy(root);
+ }
+ }
+
+ fn rotateLeft(self: *Self, a: *Node) *Node {
+ var b = a.right.?;
+ b.parent = a.parent;
+ a.right = b.left;
+
+ if (a.right != null) {
+ a.right.?.parent = a;
+ }
+
+ b.left = a;
+ a.parent = b;
+
+ if (b.parent) |parent| {
+ if (parent.right == a) {
+ parent.right = b;
+ } else {
+ parent.left = b;
+ }
+ }
+
+ self.setBalance(a);
+ self.setBalance(b);
+ return b;
+ }
+
+ fn rotateRight(self: *Self, a: *Node) *Node {
+ var b = a.left.?;
+ b.parent = a.parent;
+ a.left = b.right;
+
+ if (a.left != null) {
+ a.left.?.parent = a;
+ }
+
+ b.right = a;
+ a.parent = b;
+
+ if (b.parent) |parent| {
+ if (parent.right == a) {
+ parent.right = b;
+ } else {
+ parent.left = b;
+ }
+ }
+
+ self.setBalance(a);
+ self.setBalance(b);
+ return b;
+ }
+
+ fn rotateLeftThenRight(self: *Self, n: *Node) *Node {
+ n.left = self.rotateLeft(n.left.?);
+ return self.rotateRight(n);
+ }
+
+ fn rotateRightThenLeft(self: *Self, n: *Node) *Node {
+ n.right = self.rotateRight(n.right.?);
+ return self.rotateLeft(n);
+ }
+
+ fn height(self: *Self, n: ?*Node) i32 {
+ if (n == null)
+ return -1;
+ return 1 + @max(self.height(n.?.left), self.height(n.?.right));
+ }
+
+ fn setBalance(self: *Self, n: *Node) void {
+ n.balance = self.height(n.right) - self.height(n.left);
+ }
+
+ fn rebalance(self: *Self, _n: *Node) void {
+ var n=_n;
+ self.setBalance(n);
+
+ if (n.balance == -2) {
+ if (self.height(n.left.?.left) >= self.height(n.left.?.right)) {
+ n = self.rotateRight(n);
+ } else {
+ n = self.rotateLeftThenRight(n);
+ }
+ } else if (n.balance == 2) {
+ if (self.height(n.right.?.right) >= self.height(n.right.?.left)) {
+ n = self.rotateLeft(n);
+ } else {
+ n = self.rotateRightThenLeft(n);
+ }
+ }
+
+ if (n.parent != null) {
+ self.rebalance(n.parent.?);
+ } else {
+ self.root = n;
+ }
+ }
+
+ fn insert(self: *Self, key: T) !bool {
+ if (self.root == null) {
+ const node = try self.allocator.create(Node);
+ node.* = Node.init(key, null);
+ self.root = node;
+ } else {
+ var n = self.root.?;
+ var parent: *Node = undefined;
+
+ while (true) {
+ if (n.key == key)
+ return false;
+
+ parent = n;
+
+ const goLeft = n.key > key;
+ if (goLeft) {
+ if (n.left) |left| {
+ n = left;
+ } else {
+ const node = try self.allocator.create(Node);
+ node.* = Node.init(key, parent);
+ parent.left = node;
+ self.rebalance(parent);
+ break;
+ }
+ } else {
+ if (n.right) |right| {
+ n = right;
+ } else {
+ const node = try self.allocator.create(Node);
+ node.* = Node.init(key, parent);
+ parent.right = node;
+ self.rebalance(parent);
+ break;
+ }
+ }
+ }
+ }
+
+ return true;
+ }
+
+ fn deleteKey(self: *Self, delKey: T) void {
+ if (self.root == null)
+ return;
+
+ var n = self.root.?;
+ var parent = self.root.?;
+ var delNode: ?*Node = null;
+ var child: ?*Node = self.root;
+
+ while (child != null) {
+ parent = n;
+ n = child.?;
+ child = if (delKey >= n.key) n.right else n.left;
+ if (delKey == n.key)
+ delNode = n;
+ }
+
+ if (delNode) |node| {
+ node.key = n.key;
+
+ child = if (n.left != null) n.left else n.right;
+
+ if (self.root.?.key == delKey) {
+ self.root = child;
+ } else {
+ if (parent.left == n) {
+ parent.left = child;
+ } else {
+ parent.right = child;
+ }
+
+ self.rebalance(parent);
+ }
+ }
+ }
+
+ fn printBalance(self: *Self, n: ?*Node) !void {
+ if (n != null) {
+ try self.printBalance(n.?.left);
+ try stdout.print("{} ", .{n.?.balance});
+ try self.printBalance(n.?.right);
+ }
+ }
+
+ fn printBalanceRoot(self: *Self) !void {
+ try self.printBalance(self.root);
+ try stdout.print("\n", .{});
+ }
+ };
+}
+
+pub fn main() !void {
+ var gpa = std.heap.GeneralPurposeAllocator(.{}){};
+ defer _ = gpa.deinit();
+ const allocator = gpa.allocator();
+
+ var t = AVLtree(i32).init(allocator);
+ defer t.deinit();
+
+ try stdout.print("Inserting integer values 1 to 10\n", .{});
+ var i: i32 = 1;
+ while (i <= 10) : (i += 1) {
+ _ = try t.insert(i);
+ }
+
+ try stdout.print("Printing balance: ", .{});
+ try t.printBalanceRoot();
+}
diff --git a/Task/Abbreviations-easy/ArkScript/abbreviations-easy.ark b/Task/Abbreviations-easy/ArkScript/abbreviations-easy.ark
new file mode 100644
index 0000000000..da2282ce34
--- /dev/null
+++ b/Task/Abbreviations-easy/ArkScript/abbreviations-easy.ark
@@ -0,0 +1,54 @@
+(let commands "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")
+
+(let user_words "riG rePEAT copies put mo rest types fup. 6 poweRin")
+
+(import std.List)
+(import std.String)
+
+(let abbrev_length (fun (word)
+ (len
+ (list:takeWhile
+ word
+ (fun (char) {
+ (let ord (string:ord char))
+ (and (<= 65 ord) (<= ord 90)) })))))
+
+(let extract_cmds (fun (text)
+ (list:filter (string:split text " ") (fun (elem) (not (empty? elem))))))
+
+(let cmds_with_abbrev_len
+ (list:map
+ (extract_cmds commands)
+ (fun (cmd)
+ [cmd (abbrev_length cmd)] )))
+
+(let find_abbrev (fun (word) {
+ (let wlen (len word))
+ (let lower (string:toLower word))
+
+ (list:map
+ (list:filter
+ cmds_with_abbrev_len
+ (fun (cmd_with_len) {
+ (let cmd (string:toLower (head cmd_with_len)))
+ (let min_len (@ cmd_with_len 1))
+
+ (and
+ (<= min_len wlen)
+ (<= wlen (len cmd))
+ (= lower (string:slice cmd 0 wlen))) }))
+ (fun (cmd_with_len) (head cmd_with_len))) }))
+
+(let user_inputs (extract_cmds user_words))
+
+(assert
+ (=
+ ["RIGHT" "REPEAT" "*error*" "PUT" "MOVE" "RESTORE" "*error*" "*error*" "*error*" "POWERINPUT"]
+ (list:map
+ user_inputs
+ (fun (str) {
+ (let abbrevs (find_abbrev str))
+ (if (empty? abbrevs)
+ "*error*"
+ (string:toUpper (head abbrevs))) })))
+ "commands were correctly deciphered")
diff --git a/Task/Abbreviations-easy/PascalABC.NET/abbreviations-easy.pas b/Task/Abbreviations-easy/PascalABC.NET/abbreviations-easy.pas
new file mode 100644
index 0000000000..cd4a089f62
--- /dev/null
+++ b/Task/Abbreviations-easy/PascalABC.NET/abbreviations-easy.pas
@@ -0,0 +1,26 @@
+begin
+ var commands :=
+ '''
+ 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
+ '''.ToWords(AllDelimiters);
+
+ var countDict := commands.Each(word -> word.TakeWhile(c -> c.IsUpper).Count);
+
+ var correctedLine := 'riG rePEAT copies put mo rest types fup. 6 poweRin'
+ .ToWords
+ .Select(word ->
+ commands.FirstOrDefault(
+ cmd -> cmd.ToLower.StartsWith(word.ToLower) and
+ (word.Length >= countDict[cmd])
+ )?.ToUpper ?? '*error*'
+ )
+ .JoinToString;
+
+ Print(correctedLine);
+end.
diff --git a/Task/Abbreviations-simple/PascalABC.NET/abbreviations-simple.pas b/Task/Abbreviations-simple/PascalABC.NET/abbreviations-simple.pas
new file mode 100644
index 0000000000..db47a4c235
--- /dev/null
+++ b/Task/Abbreviations-simple/PascalABC.NET/abbreviations-simple.pas
@@ -0,0 +1,51 @@
+{$zerobasedstrings on}
+
+begin
+ var commandData :=
+ '''
+ 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
+ '''.ToWords(AllDelimiters);
+
+ var abbrDict := Dict('' to '');
+
+ var i := 0;
+ while i < commandData.Length do
+ begin
+ var cmd := commandData[i];
+ i += 1;
+
+ // Если следующего элемента нет или он не число, используем длину команды
+ var minLen := cmd.Length;
+ if (i < commandData.Length) and commandData[i].All(char.IsDigit) then
+ begin
+ minLen := commandData[i].ToInteger;
+ i += 1;
+ end;
+
+ var cmdLower := cmd.ToLower;
+ for var len := minLen to cmd.Length do
+ begin
+ var abbr := cmdLower[:len];
+ abbrDict[abbr] := cmd.ToUpper;
+ end;
+ end;
+
+ var testStr := 'riG rePEAT copies put mo rest types fup. 6 poweRin';
+ Writeln(' Input: ', testStr);
+ Writeln('Output: ', testStr.ToWords()
+ .Select(w -> abbrDict.Get(w.Trim.ToLower,'*error*'))
+ .JoinToString);
+
+ testStr := '';
+ Writeln(' Input: ', testStr);
+ Writeln('Output: ', testStr.ToWords()
+ .Select(w -> abbrDict.Get(w.Trim.ToLower,'*error*'))
+ .JoinToString);
+end.
diff --git a/Task/Abelian-sandpile-model-Identity/Pluto/abelian-sandpile-model-identity.pluto b/Task/Abelian-sandpile-model-Identity/Pluto/abelian-sandpile-model-identity.pluto
new file mode 100644
index 0000000000..867e535547
--- /dev/null
+++ b/Task/Abelian-sandpile-model-Identity/Pluto/abelian-sandpile-model-identity.pluto
@@ -0,0 +1,79 @@
+class Sandpile
+ -- 'a' is a list of 9 integers in row order.
+ function __construct(public a)
+ self.neighbors = {
+ {2, 4}, {1, 3, 5}, {2, 6}, {1, 5, 7}, {2, 4, 6, 8},
+ {3, 5, 9}, {4, 8}, {5, 7, 9}, {6, 8}
+ }
+ end
+
+ function __add(other)
+ local b = {}
+ for i = 1, 9 do
+ b:insert(self.a[i] + other.a[i])
+ end
+ return new Sandpile(b)
+ end
+
+ function is_stable()
+ return self.a:checkall(|i| -> i <= 3)
+ end
+
+ -- Just topples once so we can observe intermediate results.
+ function topple()
+ for i = 1, 9 do
+ if self.a[i] > 3 then
+ self.a[i] -= 4
+ for self.neighbors[i] as j do ++self.a[j] end
+ return
+ end
+ end
+ end
+
+ function to_string()
+ local s = ""
+ for i = 1, 3 do
+ for j = 1, 3 do s ..= $"{self.a[3*(i - 1) + j]} " end
+ s ..= "\n"
+ end
+ return s
+ end
+end
+
+print("Avalanche of topplings:\n")
+local s0 = new Sandpile({4, 3, 3, 3, 1, 2, 0, 2, 3})
+print(s0:to_string())
+while !s0:is_stable() do
+ s0:topple()
+ print(s0:to_string())
+end
+
+print("Commutative additions:\n")
+local s1 = new Sandpile({1, 2, 0, 2, 1, 1, 0, 1, 3})
+local s2 = new Sandpile({2, 1, 3, 1, 0, 1, 0, 1, 0})
+local s3_a = s1 + s2
+while !s3_a:is_stable() do s3_a:topple() end
+local s3_b = s2 + s1
+while !s3_b:is_stable() do s3_b:topple() end
+local s1s = s1:to_string()
+local s2s = s2:to_string()
+local s3_as = s3_a:to_string()
+local s3_bs = s3_b:to_string()
+print(string.format("%s\nplus\n\n%s\nequals\n\n%s", s1s, s2s, s3_as))
+print(string.format("and\n\n%s\nplus\n\n%s\nalso equals\n\n%s", s2s, s1s, s3_bs))
+
+print("Addition of identity sandpile:\n")
+local s3 = new Sandpile({3, 3, 3, 3, 3, 3, 3, 3, 3})
+local s3_id = new Sandpile({2, 1, 2, 1, 0, 1, 2, 1, 2})
+local s4 = s3 + s3_id
+while !s4:is_stable() do s4:topple() end
+local s3s = s3:to_string()
+local s3_ids = s3_id:to_string()
+local s4s = s4:to_string()
+print(string.format("%s\nplus\n\n%s\nequals\n\n%s", s3s, s3_ids, s4s))
+
+print("Addition of identities:\n")
+local s5 = s3_id + s3_id
+while !s5:is_stable() do s5:topple() end
+local s5s = s5:to_string()
+print(string.format("%s\nplus\n\n%s\nequals\n\n%s", s3_ids, s3_ids, s5s))
diff --git a/Task/Abelian-sandpile-model-Identity/Zig/abelian-sandpile-model-identity.zig b/Task/Abelian-sandpile-model-Identity/Zig/abelian-sandpile-model-identity.zig
new file mode 100644
index 0000000000..e889527ece
--- /dev/null
+++ b/Task/Abelian-sandpile-model-Identity/Zig/abelian-sandpile-model-identity.zig
@@ -0,0 +1,126 @@
+const std = @import("std");
+
+const Box = struct {
+ piles: [3][3]u8,
+
+ fn init(piles: [3][3]u8) Box {
+ var a = Box{ .piles = piles };
+
+ for (a.piles) |row| {
+ for (row) |pile| {
+ if (pile >= 4) {
+ return a.avalanche();
+ }
+ }
+ }
+ return a;
+ }
+
+ fn avalanche(self: *const Box) Box {
+ var a = self.*;
+ for (self.piles, 0..) |row, i| {
+ for (row, 0..) |pile, j| {
+ if (pile >= 4) {
+ if (i > 0) {
+ a.piles[i - 1][j] += 1;
+ }
+ if (i < 2) {
+ a.piles[i + 1][j] += 1;
+ }
+ if (j > 0) {
+ a.piles[i][j - 1] += 1;
+ }
+ if (j < 2) {
+ a.piles[i][j + 1] += 1;
+ }
+ a.piles[i][j] -= 4;
+ }
+ }
+ }
+ return Box.init(a.piles);
+ }
+
+ fn add(self: *const Box, other: *const Box) Box {
+ var b = Box{
+ .piles = [_][3]u8{[_]u8{0} ** 3} ** 3,
+ };
+ for (0..3) |row| {
+ for (0..3) |col| {
+ b.piles[row][col] = self.piles[row][col] + other.piles[row][col];
+ }
+ }
+ return Box.init(b.piles);
+ }
+};
+
+pub fn main() !void {
+ const stdout = std.io.getStdOut().writer();
+
+ try stdout.print("The piles demonstration avalanche starts as:\n{any}\n{any}\n{any}\n", .{
+ [_]u8{ 4, 3, 3 },
+ [_]u8{ 3, 1, 2 },
+ [_]u8{ 0, 2, 3 },
+ });
+
+ const s0 = Box.init([_][3]u8{
+ [_]u8{ 4, 3, 3 },
+ [_]u8{ 3, 1, 2 },
+ [_]u8{ 0, 2, 3 },
+ });
+
+ try stdout.print("And ends as:\n{any}\n{any}\n{any}\n", .{
+ s0.piles[0],
+ s0.piles[1],
+ s0.piles[2],
+ });
+
+ const s1 = Box.init([_][3]u8{
+ [_]u8{ 1, 2, 0 },
+ [_]u8{ 2, 1, 1 },
+ [_]u8{ 0, 1, 3 },
+ });
+
+ const s2 = Box.init([_][3]u8{
+ [_]u8{ 2, 1, 3 },
+ [_]u8{ 1, 0, 1 },
+ [_]u8{ 0, 1, 0 },
+ });
+
+ const s1_2 = s1.add(&s2);
+ const s2_1 = s2.add(&s1);
+
+ try stdout.print("The piles in s1 + s2 are:\n{any}\n{any}\n{any}\n", .{
+ s1_2.piles[0],
+ s1_2.piles[1],
+ s1_2.piles[2],
+ });
+
+ try stdout.print("The piles in s2 + s1 are:\n{any}\n{any}\n{any}\n", .{
+ s2_1.piles[0],
+ s2_1.piles[1],
+ s2_1.piles[2],
+ });
+
+ const s3 = Box.init([_][3]u8{[_]u8{3} ** 3} ** 3);
+ const s3_id = Box.init([_][3]u8{
+ [_]u8{ 2, 1, 2 },
+ [_]u8{ 1, 0, 1 },
+ [_]u8{ 2, 1, 2 },
+ });
+
+ const s4 = s3.add(&s3_id);
+
+ try stdout.print("The piles in s3 + s3_id are:\n{any}\n{any}\n{any}\n", .{
+ s4.piles[0],
+ s4.piles[1],
+ s4.piles[2],
+ });
+
+ const s5 = s3_id.add(&s3_id);
+
+ try stdout.print("The piles in s3_id + s3_id are:\n{any}\n{any}\n{any}\n", .{
+ s5.piles[0],
+ s5.piles[1],
+ s5.piles[2],
+ });
+}
diff --git a/Task/Abelian-sandpile-model/Julia/abelian-sandpile-model.jl b/Task/Abelian-sandpile-model/Julia/abelian-sandpile-model.jl
index fc19b42b8a..35866a7ca1 100644
--- a/Task/Abelian-sandpile-model/Julia/abelian-sandpile-model.jl
+++ b/Task/Abelian-sandpile-model/Julia/abelian-sandpile-model.jl
@@ -1,24 +1,25 @@
-module AbelSand
+""" From code by Hayk Aleksanyan, see also github.com/hayk314/Sandpiles """
-# supports output functionality for the results of the sandpile simulations
-# outputs the final grid in CSV format, as well as an image file
+""" supports output functionality for the results of the sandpile simulations
+ outputs the final grid in CSV format, as well as an image file
+"""
+module AbelSand
using CSV, DataFrames, Images
-function TrimZeros(A)
- # given an array A trims any zero rows/columns from its borders
- # returns a 4 tuple of integers, i1, i2, j1, j2, where the trimmed array corresponds to A[i1:i2, j1:j2]
- # A can be either numeric or a boolean array
-
+""" given an array A trims any zero rows/columns from its borders
+ returns a 4 tuple of integers, i1, i2, j1, j2, where the trimmed array corresponds to A[i1:i2, j1:j2]
+ A can be either numeric or a boolean array
+"""
+function trimzeros(A)
i1, j1 = 1, 1
i2, j2 = size(A)
-
zz = typeof(A[1, 1])(0) # comparison of a value takes into account the type as well
# i1 is the first row which has non zero element
- for i = 1:size(A, 1)
+ for i in axes(A, 1)
q = false
- for k = 1:size(A, 2)
+ for k in axes(A, 2)
if A[i, k] != zz
q = true
i1 = i
@@ -32,26 +33,24 @@ function TrimZeros(A)
end
# i2 is the first from below row with non zero element
- for i in size(A, 1):-1:1
+ for i in reverse(axes(A, 1))
q = false
- for k = 1:size(A, 2)
+ for k in axes(A, 2)
if A[i, k] != zz
q = true
i2 = i
break
end
end
-
if q == true
break
end
end
# j1 is the first column with non zero element
-
- for j = 1:size(A, 2)
+ for j in axes(A, 2)
q = false
- for k = 1:size(A, 1)
+ for k in axes(A, 1)
if A[k, j] != zz
j1 = j
q = true
@@ -65,18 +64,17 @@ function TrimZeros(A)
end
# j2 is the last column with non zero element
-
- for j in size(A, 2):-1:1
- q=false
- for k=1:size(A,1)
+ for j in reverse(axes(A, 2))
+ q = false
+ for k in axes(A, 1)
if A[k, j] != zz
j2 = j
- q=true
+ q = true
break
end
end
- if q==true
+ if q == true
break
end
end
@@ -84,129 +82,124 @@ function TrimZeros(A)
return i1, i2, j1, j2
end
-function addLayerofZeros(A, extraLayer)
- # adds layer of zeros from all corners to the given array A
-
- if extraLayer <= 0
- return A
- end
+""" adds layer of zeros from all corners to the given array A """
+function addlayerofzeros!(A, extraLayer)
+ extraLayer <= 0 && return A
N, M = size(A)
-
-
- Z = zeros( typeof(A[1,1]), N + 2*extraLayer, M + 2*extraLayer)
- Z[(extraLayer+1):(N + extraLayer ), (extraLayer+1):(M+extraLayer)] = A
+ Z = zeros(typeof(A[1, 1]), N + 2 * extraLayer, M + 2 * extraLayer)
+ Z[(extraLayer+1):(N+extraLayer), (extraLayer+1):(M+extraLayer)] = A
return Z
-
end
-function printIntoFile(A, extraLayer, strFileName, TrimSmallValues = false)
- # exports a 2d matrix A into a csv file
- # @extraLayer is an integers adding layer of 0-s sorrounding the output matrix
-
- # trimming off very small values; tiny values affect the performance of CSV export
+""" exports a 2d matrix A into a csv file, adjusting the size of the output matrix
+ @extraLayer is an integers adding layer of 0-s sorrounding the output matrix
+ trimming off very small values; tiny values affect the performance of CSV export
+"""
+function outputCSV!(A, extraLayer, strFileName, TrimSmallValues = false)
if TrimSmallValues == true
- A = map(x -> if (abs(x - floor(x)) < 0.01) floor(x) else x end, A)
+ A = map(x -> if (abs(x - floor(x)) < 0.01)
+ floor(x)
+ else
+ x
+ end, A)
end
- i1, i2, j1, j2 = TrimZeros( A )
+ i1, i2, j1, j2 = trimzeros(A)
A = A[i1:i2, j1:j2]
-
- A = addLayerofZeros(A, extraLayer)
-
- CSV.write(string(strFileName,".csv"), DataFrame(A), writeheader = false)
+ A = addlayerofzeros!(A, extraLayer)
+ CSV.write(string(strFileName, ".csv"), DataFrame(A, :auto), writeheader = false)
return A
-
end
-function Array_magnifier(A, cell_mag, border_mag)
- # A is the main array; @cell_mag is the magnifying size of the cell,
- # @border_mag is the magnifying size of the border between lattice cells
-
- # creates a new array where each cell of the original array A appears magnified by size = cell_mag
-
-
+""" creates a new array A1 where each cell of the original array A appears magnified by size @cell_mag
+ A is the input array; @cell_mag is the magnifying size of the cell,
+ @border_mag is the magnifying size of the border between lattice cells
+"""
+function arraymagnifier(A, cell_mag, border_mag)
total_factor = cell_mag + border_mag
+ A1 = zeros(typeof(A[1, 1]), total_factor * size(A, 1), total_factor * size(A, 2))
+ for i ∈ axes(A, 1), j ∈ axes(A, 2), u ∈ ((i-1)*total_factor+1):(i*total_factor),
+ v ∈ ((j-1)*total_factor+1):(j*total_factor)
- A1 = zeros(typeof(A[1, 1]), total_factor*size(A, 1), total_factor*size(A, 2))
-
- for i = 1:size(A,1), j = 1:size(A,2), u = ((i-1)*total_factor+1):(i*total_factor),
- v = ((j-1)*total_factor+1):(j*total_factor)
- if(( u - (i - 1) * total_factor <= cell_mag) && (v - (j - 1) * total_factor <= cell_mag))
+ if ((u - (i - 1) * total_factor <= cell_mag) && (v - (j - 1) * total_factor <= cell_mag))
A1[u, v] = A[i, j]
end
end
return A1
-
end
-function saveAsGrayImage(A, fileName, cell_mag, border_mag, TrimSmallValues = false)
- # given a 2d matrix A, we save it as a gray image after magnifying by the given factors
- A1 = Array_magnifier(A, cell_mag, border_mag)
- A1 = A1/maximum(maximum(A1))
+""" given a 2d matrix A, we save it as a gray image after magnifying by the given factors """
+function savegrayimage(A, fileName, cell_mag, border_mag, TrimSmallValues = false)
+ A1 = arraymagnifier(A, cell_mag, border_mag)
+ A1 = A1 / maximum(maximum(A1))
# trimming very small values from A1 to improve performance
if TrimSmallValues == true
- A1 = map(x -> if ( x < 0.01) 0.0 else round(x, digits = 2) end, A1)
+ A1 = map(x -> if (x < 0.01)
+ 0.0
+ else
+ round(x, digits = 2)
+ end, A1)
end
- save(string(fileName, ".png") , colorview(Gray, A1))
+ save(string(fileName, ".png"), colorview(Gray, A1))
end
-function saveAsRGBImage(A, fileName, color_codes, cell_mag, border_mag)
- # color_codes is a dictionary, where key is a value in A and value is an RGB triplet
- # given a 2d array A, and color codes (mapping from values in A to RGB triples), save A
- # into fileName as png image after applying the magnifying factors
-
- A1 = Array_magnifier(A, cell_mag, border_mag)
+""" color_codes is a dictionary, where key is a value in A and value is an RGB triplet
+ given a 2d array A, and color codes (mapping from values in A to RGB triples), save A
+ into fileName as png image after applying the magnifying factors
+"""
+function saveRGBimage(A, fileName, color_codes, cell_mag, border_mag)
+ A1 = arraymagnifier(A, cell_mag, border_mag)
color_mat = zeros(UInt8, (3, size(A1, 1), size(A1, 2)))
- for i = 1:size(A1,1)
- for j = 1:size(A1,2)
- color_mat[:, i, j] = get(color_codes, A1[i, j] , [0, 0, 0])
+ for i in axes(A1, 1)
+ for j in axes(A1, 2)
+ color_mat[:, i, j] = get(color_codes, A1[i, j], [0, 0, 0])
end
end
- save(string(fileName, ".png") , colorview(RGB, color_mat/255))
+ save(string(fileName, ".png"), colorview(RGB, color_mat / 255))
end
const N_size = 700 # the radius of the lattice Z^2, the actual size becomes (2*N+1)x(2*N+1)
const dx = [1, 0, -1, 0] # for a given (x,y) in Z^2, (x + dx, y + dy) for all (dx,dy) covers the neighborhood of (x,y)
const dy = [0, 1, 0, -1]
+""" represents a 2D lattice coordinate """
struct L_coord
- # represents a lattice coordinate
x::Int
y::Int
end
-function FindCoordinate(Z::Array{L_coord,1}, a::Int, b::Int)
- # in the given array Z of coordinates finds the (first) index of the tuple (a,b)
- # if no match, returns -1
-
- for i=1:length(Z)
+""" Finds the (first) index of the tuple (a,b) in the given array Z of coordinates
+ if no match, returns -1
+"""
+function findcoordinate(Z::Array{L_coord, 1}, a::Int, b::Int)
+ for i ∈ 1:length(Z)
if (Z[i].x == a) && (Z[i].y == b)
return i
end
end
-
return -1
end
-function move(N)
- # the main function moving the pile sand grains of size N at the origin of Z^2 until the sandpile becomes stable
-
+""" Moves the pile's sand grains of size N stacked all at the origin of Z^2
+ until the sandpile settled to stable configuration.
+ Returns the final lattice Z_lat and the odometer Odometer
+"""
+function settle(N)
Z_lat = zeros(UInt8, 2 * N_size + 1, 2 * N_size + 1) # models the integer lattice Z^2, we will have at most 4 sands on each vertex
V_sites = falses(2 * N_size + 1, 2 * N_size + 1) # all sites which are visited by the sandpile process, are being marked here
Odometer = zeros(UInt64, 2 * N_size + 1, 2 * N_size + 1) # stores the values of the odometer function
-
walking = L_coord[] # the coordinates of sites which need to move
- V_sites[N_size + 1, N_size + 1] = true
+ V_sites[N_size+1, N_size+1] = true
# i1, ... j2 -> show the boundaries of the box which is visited by the sandpile process
i1, i2, j1, j2 = N_size + 1, N_size + 1, N_size + 1, N_size + 1
@@ -217,12 +210,12 @@ function move(N)
while n > 0
n -= 1
- Z_lat[N_size + 1, N_size + 1] += 1
- if (Z_lat[N_size + 1, N_size + 1] >= 4)
+ Z_lat[N_size+1, N_size+1] += 1
+ if (Z_lat[N_size+1, N_size+1] >= 4)
push!(walking, L_coord(N_size + 1, N_size + 1))
end
- while(length(walking) > 0)
+ while (length(walking) > 0)
w = pop!(walking)
x = w.x
y = w.y
@@ -230,12 +223,12 @@ function move(N)
Z_lat[x, y] -= 4
Odometer[x, y] += 4
- for k = 1:4
- Z_lat[x + dx[k], y + dy[k]] += 1
- V_sites[x + dx[k], y + dy[k]] = true
- if Z_lat[x + dx[k], y + dy[k]] >= 4
- if FindCoordinate(walking, x + dx[k] , y + dy[k]) == -1
- push!(walking, L_coord( x + dx[k], y + dy[k]))
+ for k ∈ 1:4
+ Z_lat[x+dx[k], y+dy[k]] += 1
+ V_sites[x+dx[k], y+dy[k]] = true
+ if Z_lat[x+dx[k], y+dy[k]] >= 4
+ if findcoordinate(walking, x + dx[k], y + dy[k]) == -1
+ push!(walking, L_coord(x + dx[k], y + dy[k]))
end
end
end
@@ -247,29 +240,24 @@ function move(N)
end
- end #end of the main while
+ end # of the outer while
t2 = time_ns()
- println("The final boundaries are:: ", (i2 - i1 + 1),"x",(j2 - j1 + 1), "\n")
- print("time elapsed: " , (t2 - t1) / 1.0e9, "\n")
+ println("The final boundaries are:: ", (i2 - i1 + 1), "x", (j2 - j1 + 1), "\n")
+ print("time elapsed: ", (t2 - t1) / 1.0e9, "\n")
- Z_lat = printIntoFile(Z_lat, 0, string("Abel_Z_", N))
- Odometer = printIntoFile(Odometer, 1, string("Abel_OD_", N))
+ Z_lat = outputCSV!(Z_lat, 0, string("Abel_Z_", N))
+ Odometer = outputCSV!(Odometer, 1, string("Abel_OD_", N))
- saveAsGrayImage(Z_lat, string("Abel_Z_", N), 20, 0)
- color_code = Dict(1=>[255, 128, 255], 2=>[255, 0, 0],3 => [0, 128, 255])
- saveAsRGBImage(Z_lat, string("Abel_Z_color_", N), color_code, 20, 0)
+ savegrayimage(Z_lat, string("Abel_Z_", N), 20, 0)
+ color_code = Dict(1 => [255, 128, 255], 2 => [255, 0, 0], 3 => [0, 128, 255])
+ saveRGBimage(Z_lat, string("Abel_Z_color_", N), color_code, 20, 0)
- # for the total elapsed time, it's better to use the @time macros on the main call
-
- return Z_lat, Odometer # these are trimmed in output module
-
-end # end of function move
-
-
-end # module
+ return Z_lat, Odometer
+end
+end # of the module
using .AbelSand
-Z_lat, Odometer = AbelSand.move(100000)
+Z_lat, Odometer = AbelSand.settle(100000)
diff --git a/Task/Abelian-sandpile-model/Pluto/abelian-sandpile-model.pluto b/Task/Abelian-sandpile-model/Pluto/abelian-sandpile-model.pluto
new file mode 100644
index 0000000000..0a161fb42c
--- /dev/null
+++ b/Task/Abelian-sandpile-model/Pluto/abelian-sandpile-model.pluto
@@ -0,0 +1,80 @@
+class Sandpile
+ -- 'a' is a list of integers in row order.
+ function __construct(a)
+ local count = #a
+ self.rows = math.floor(math.sqrt(count))
+ if self.rows * self.rows != count then
+ print("The matrix of values must be square.")
+ os.exit(1)
+ end
+ self.a = a
+ self.neighbors = {}
+ for i = 1, count do
+ self.neighbors[i] = {}
+ if (i - 1) % self.rows > 0 then self.neighbors[i]:insert(i - 1) end
+ if i % self.rows > 0 then self.neighbors[i]:insert(i + 1) end
+ if i - self.rows >= 1 then self.neighbors[i]:insert(i - self.rows) end
+ if i + self.rows < count + 1 then self.neighbors[i]:insert(i + self.rows) end
+ end
+ end
+
+ function is_stable()
+ return self.a:checkall(|i| -> i <= 3)
+ end
+
+ -- Topples until stable.
+ function topple()
+ while !self:is_stable() do
+ for i = 1, #self.a do
+ if self.a[i] > 3 then
+ self.a[i] -= 4
+ for self.neighbors[i] as j do ++self.a[j] end
+ end
+ end
+ end
+ end
+
+ function to_string()
+ local s = ""
+ for i = 1, self.rows do
+ for j = 1, self.rows do
+ s ..= string.format("%2d ", self.a[self.rows * (i - 1) + j])
+ end
+ s ..="\n"
+ end
+ return s
+ end
+end
+
+local function print_across(str1, str2)
+ local r1 = str1:split("\n")
+ local r2 = str2:split("\n")
+ local rows = #r1 - 1
+ local cr = rows // 2 + 1
+ for i = 1, rows do
+ local symbol = (i == cr) ? "->" : " "
+ print(string.format("%s %s %s", r1[i], symbol, r2[i]))
+ end
+ print()
+end
+
+local a1, a2, a3, a4 = {}, {}, {}, {}
+for i = 1, 25 do
+ a1[i] = 0
+ a2[i] = 0
+ a3[i] = 0
+end
+for i = 1, 100 do
+ a4[i] = 0
+end
+a1[13] = 4
+a2[13] = 6
+a3[13] = 16
+a4[56] = 64
+for {a1, a2, a3, a4} as a do
+ local s = new Sandpile(a)
+ local str1 = s:to_string()
+ s:topple()
+ local str2 = s:to_string()
+ print_across(str1, str2)
+end
diff --git a/Task/Abelian-sandpile-model/Zig/abelian-sandpile-model.zig b/Task/Abelian-sandpile-model/Zig/abelian-sandpile-model.zig
new file mode 100644
index 0000000000..e930714042
--- /dev/null
+++ b/Task/Abelian-sandpile-model/Zig/abelian-sandpile-model.zig
@@ -0,0 +1,136 @@
+const std = @import("std");
+
+/// It loops over the current state of the sandpile and updates it on-the-fly.
+fn advance(field: [][]usize, boundary: *[4]usize) bool {
+ // This variable is used to check whether we changed anything in the array. If no, the loop terminates.
+ var done = false;
+
+ var y = boundary[0];
+ while (y < boundary[2]) : (y += 1) {
+ var x = boundary[1];
+ while (x < boundary[3]) : (x += 1) {
+ if (field[y][x] >= 4) {
+ // This part was heavily inspired by the Pascal version. We subtract 4 as many times as we can
+ // and distribute it to the neighbors. Also, in case we have outgrown the current boundary, we
+ // update it to once again contain the entire sandpile.
+
+ // The amount that gets added to the neighbors is the amount here divided by four and (implicitly) floored.
+ // The remaining sand is just current modulo 4.
+ const rem: usize = field[y][x] / 4;
+ field[y][x] = field[y][x] % 4;
+
+ if (y > 0) {
+ field[y - 1][x] += rem;
+ if (y == boundary[0]) {
+ boundary[0] -= 1;
+ }
+ }
+ if (x > 0) {
+ field[y][x - 1] += rem;
+ if (x == boundary[1]) {
+ boundary[1] -= 1;
+ }
+ }
+ if (y + 1 < field.len) {
+ field[y + 1][x] += rem;
+ if (y == boundary[2] - 1) {
+ boundary[2] += 1;
+ }
+ }
+ if (x + 1 < field.len) {
+ field[y][x + 1] += rem;
+ if (x == boundary[3] - 1) {
+ boundary[3] += 1;
+ }
+ }
+
+ done = true;
+ }
+ }
+ }
+
+ return done;
+}
+
+/// This function can be used to display the sandpile in the console window.
+fn display(field: [][]usize) void {
+ for (field) |row| {
+ for (row) |cell| {
+ const c: u8 = switch (cell) {
+ 0 => ' ',
+ 1 => '.',
+ 2 => 'o',
+ 3 => 'O',
+ else => '#',
+ };
+ std.debug.print("{c}", .{c});
+ }
+ std.debug.print("\n", .{});
+ }
+}
+
+/// This function writes the end result to a file called "output.ppm".
+fn write_pile(pile: [][]usize, allocator: std.mem.Allocator) !void {
+ // We first create the file (or erase its contents if it already existed).
+ const file = try std.fs.cwd().createFile("output.ppm", .{});
+ defer file.close();
+
+ // Then we add the image signature, which is "P3 [width of image] [height of image][maximum value of color]".
+ try std.fmt.format(file.writer(), "P3\n{d} {d}\n255\n", .{ pile.len, pile.len });
+
+ for (pile) |row| {
+ var line = std.ArrayList(u8).init(allocator);
+ defer line.deinit();
+
+ // We map each value in the field to a color.
+ for (row) |elem| {
+ const color = switch (elem) {
+ 0 => "100 40 15 ",
+ 1 => "117 87 30 ",
+ 2 => "181 134 47 ",
+ 3 => "245 182 66 ",
+ else => unreachable,
+ };
+ try line.appendSlice(color);
+ }
+
+ try std.fmt.format(file.writer(), "{s}\n", .{line.items});
+ }
+}
+
+pub fn main() !void {
+ var gpa = std.heap.GeneralPurposeAllocator(.{}){};
+ defer _ = gpa.deinit();
+ const allocator = gpa.allocator();
+
+ // This is how big the final image will be. Currently the end result would be a 16x16 picture.
+ const field_size: usize = 16;
+
+ // Create the 2D array
+ var playfield = try allocator.alloc([]usize, field_size);
+ defer {
+ for (playfield) |row| {
+ allocator.free(row);
+ }
+ allocator.free(playfield);
+ }
+
+ for (playfield, 0..) |_, i| {
+ playfield[i] = try allocator.alloc(usize, field_size);
+ @memset(playfield[i], 0);
+ }
+
+ // We put the initial sand in the exact middle of the field.
+ // This isn't necessary per se, but it ensures that sand can fully topple.
+ var boundary = [4]usize{ field_size / 2 - 1, field_size / 2 - 1, field_size / 2, field_size / 2 };
+ playfield[field_size / 2 - 1][field_size / 2 - 1] = 16;
+
+ // This is the main loop. We update the field until it returns false, signalling that the pile reached its
+ // final state.
+ while (advance(playfield, &boundary)) {}
+
+ // Once this happens, we simply display the result. Uncomment the line below to write it to a file.
+ // Calling display with large field sizes is not recommended as it can easily become too large for the console.
+ display(playfield);
+ // try write_pile(playfield, allocator);
+}
diff --git a/Task/Abstract-type/Free-Pascal-Lazarus/abstract-type-1.pas b/Task/Abstract-type/Free-Pascal-Lazarus/abstract-type-1.pas
new file mode 100644
index 0000000000..503c7d46f7
--- /dev/null
+++ b/Task/Abstract-type/Free-Pascal-Lazarus/abstract-type-1.pas
@@ -0,0 +1,60 @@
+program abstracts;
+// this code also compiles in delphi
+{$ifdef fpc}{$mode objfpc}{$endif}
+type
+ // Pure Abstract Class. In cs theory also known as an interface,
+ // because it has no implementation
+ TAbstractClass = class abstract
+ protected
+ function noise:string;virtual;abstract;
+ end;
+ // classic inheritance
+ Tdog = class(TAbstractClass)
+ public
+ function noise:string;override;
+ end;
+
+ Tcat = class(TAbstractClass)
+ public
+ function noise:string;override;
+ end;
+
+ // unrelated class that matches the interface of TAbstractClass, the VMT.
+ Tbird = class
+ strict private
+ FField:string;
+ function noise:string;virtual;
+ property field:string read FField write FField;
+ end;
+
+ function Tdog.Noise:string;
+ begin
+ Result := 'Woof';
+ end;
+
+ function Tcat.Noise:string;
+ begin
+ Result := 'Miauw';
+ end;
+
+ function TBird.Noise:string;
+ begin
+ Result := 'Tjirpp';
+ end;
+
+var
+ cat, dog: TAbstractClass;
+ bird:Tbird;
+begin
+ cat := Tcat.Create;
+ dog := Tdog.Create;
+ bird := TBird.Create;
+ writeln(cat.noise,dog.noise);
+ // even this works, because the layout is the same
+ // This is similar to C++, where pure abstract classes are interfaces.
+ writeln(TAbstractClass(bird).noise);
+ bird.free;
+ dog.free;
+ cat.free;
+ readln;
+end.
diff --git a/Task/Abstract-type/Free-Pascal-Lazarus/abstract-type-2.pas b/Task/Abstract-type/Free-Pascal-Lazarus/abstract-type-2.pas
new file mode 100644
index 0000000000..255d8ba86d
--- /dev/null
+++ b/Task/Abstract-type/Free-Pascal-Lazarus/abstract-type-2.pas
@@ -0,0 +1,32 @@
+program justasabstract;
+{$ifdef fpc}{$mode objfpc}{$endif}
+type
+ IAnimalInterface = interface
+ ['{BD40E312-36AD-4F8B-A3EF-727F2474E494}']
+ function noise:string;
+ function move:string;
+ end;
+
+ Tbird = class(TInterfacedObject,IAnimalInterface)
+ strict private
+ function noise:string;virtual;
+ function move:string;virtual;
+ end;
+
+ function TBird.Noise:string;
+ begin
+ Result := 'Tjirpp';
+ end;
+
+ function TBird.move:string;
+ begin
+ Result := 'I fly';
+ end;
+
+var
+ bird:IAnimalInterface; // as interface, this unhides the strict private methods too.
+begin
+ bird := TBird.Create;
+ writeln(bird.noise);
+ writeln(bird.move);
+end.
diff --git a/Task/Abstract-type/Haxe/abstract-type-1.haxe b/Task/Abstract-type/Haxe/abstract-type-1.haxe
new file mode 100644
index 0000000000..91134488e5
--- /dev/null
+++ b/Task/Abstract-type/Haxe/abstract-type-1.haxe
@@ -0,0 +1,44 @@
+interface Vocal {
+ public function speak():String;
+}
+
+interface Gravitational {
+ public function getWeight():Int;
+}
+
+abstract class Dog implements Vocal implements Gravitational {
+ public function speak():String {
+ return "Woof";
+ }
+
+ public function new() {}
+}
+
+class Chihuahua extends Dog {
+ public function getWeight():Int {
+ return 5;
+ }
+}
+
+class GreatDane extends Dog {
+ public function getWeight():Int {
+ return 150;
+ }
+}
+
+class Main {
+ static public function main():Void {
+ var dogs:Array = [];
+
+ var david = new Chihuahua();
+ var goliath = new GreatDane();
+
+ dogs.push(david);
+ dogs.push(goliath);
+
+ for (dog in dogs) {
+ trace(dog.speak());
+ trace(dog.getWeight());
+ }
+ }
+}
diff --git a/Task/Abstract-type/Haskell/abstract-type-6.hs b/Task/Abstract-type/Haxe/abstract-type-2.haxe
similarity index 100%
rename from Task/Abstract-type/Haskell/abstract-type-6.hs
rename to Task/Abstract-type/Haxe/abstract-type-2.haxe
diff --git a/Task/Abstract-type/Pluto/abstract-type.pluto b/Task/Abstract-type/Pluto/abstract-type.pluto
new file mode 100644
index 0000000000..23e2c80efd
--- /dev/null
+++ b/Task/Abstract-type/Pluto/abstract-type.pluto
@@ -0,0 +1,34 @@
+class Beast
+ function __construct()
+ error("Instantiation not allowed as class is abstract.")
+ end
+
+ function kind() end
+ function name() end
+ function cry() end
+
+ function print()
+ print($'{self:name()}, who\'s a {self:kind()}, cries: "{self:cry()}".')
+ end
+end
+
+class Dog extends Beast
+ function __construct(private kind, private name) end
+
+ function kind() return self.kind end
+ function name() return self.name end
+ function cry() return "Woof" end
+end
+
+class Cat extends Beast
+ function __construct(private kind, private name) end
+
+ function kind() return self.kind end
+ function name() return self.name end
+ function cry() return "Meow" end
+end
+
+local d = new Dog("labrador", "Max")
+local c = new Cat("siamese", "Sammy")
+d:print()
+c:print()
diff --git a/Task/Abstract-type/REBOL/abstract-type.rebol b/Task/Abstract-type/REBOL/abstract-type.rebol
index 353bba0dd1..184d2223f1 100644
--- a/Task/Abstract-type/REBOL/abstract-type.rebol
+++ b/Task/Abstract-type/REBOL/abstract-type.rebol
@@ -40,5 +40,5 @@ s: make shape [] s/draw ; Nothing happens.
print "A box:"
b: make box [pen: "O" size: 5] b/draw
-print [crlf "A rectangle:"]
+print "^/A rectangle:"
r: make rectangle [size: 32x5] r/draw
diff --git a/Task/Abundant-deficient-and-perfect-number-classifications/Agena/abundant-deficient-and-perfect-number-classifications.agena b/Task/Abundant-deficient-and-perfect-number-classifications/Agena/abundant-deficient-and-perfect-number-classifications.agena
new file mode 100644
index 0000000000..0e13d96df2
--- /dev/null
+++ b/Task/Abundant-deficient-and-perfect-number-classifications/Agena/abundant-deficient-and-perfect-number-classifications.agena
@@ -0,0 +1,21 @@
+scope # count abundant, perfect and deficient numbers up to 20 000
+ # construct a table of proper divisor sums
+ local constant MAX_NUMBER, constant pds := 20_000, seq();
+ pds[ 1 ] := 0;
+ for i from 2 to MAX_NUMBER do pds[ i ] := 1 od;
+ for i from 2 to MAX_NUMBER do
+ for j from i + i to MAX_NUMBER by i do pds[ j ] +:= i od;
+ od;
+ # classify the numbers and count each type
+ local aCount, dCount, pCount := 0, 0, 0;
+ for i to MAX_NUMBER do
+ local constant dSum := pds[ i ];
+ if dSum > i then aCount +:= 1
+ elif dSum < i then dCount +:= 1
+ else pCount +:= 1
+ fi
+ od;
+ printf( "Abundant numbers up to %.0m: %8.0m\n", MAX_NUMBER, aCount );
+ printf( "Perfect numbers up to %.0m: %8.0m\n", MAX_NUMBER, pCount );
+ printf( "Deficient numbers up to %.0m: %8.0m\n", MAX_NUMBER, dCount )
+end
diff --git a/Task/Abundant-deficient-and-perfect-number-classifications/Fennel/abundant-deficient-and-perfect-number-classifications.fennel b/Task/Abundant-deficient-and-perfect-number-classifications/Fennel/abundant-deficient-and-perfect-number-classifications.fennel
new file mode 100644
index 0000000000..04ca0eabc8
--- /dev/null
+++ b/Task/Abundant-deficient-and-perfect-number-classifications/Fennel/abundant-deficient-and-perfect-number-classifications.fennel
@@ -0,0 +1,21 @@
+(do ;;; count abundant, perfect and deficient numbers up to 20 000
+ ; construct a table of proper divisor sums
+ (local (max-number pds) (values 20_000 []))
+ (tset pds 1 0)
+ (for [i 2 max-number] (tset pds i 1))
+ (for [i 2 max-number]
+ (for [j (+ i i) max-number i] (tset pds j (+ i (. pds j))))
+ )
+ ; classify the numbers and count each type
+ (var (aCount dCount pCount) (values 0 0 0))
+ (for [i 1 max-number]
+ (local dSum (. pds i))
+ (if (> dSum i) (set aCount (+ aCount 1))
+ (< dSum i) (set dCount (+ dCount 1))
+ (set pCount (+ pCount 1))
+ )
+ )
+ (io.write (string.format "Abundant numbers up to %d: %8d\n" max-number aCount))
+ (io.write (string.format "Perfect numbers up to %d: %8d\n" max-number pCount))
+ (io.write (string.format "Deficient numbers up to %d: %8d\n" max-number dCount))
+)
diff --git a/Task/Abundant-deficient-and-perfect-number-classifications/Pluto/abundant-deficient-and-perfect-number-classifications.pluto b/Task/Abundant-deficient-and-perfect-number-classifications/Pluto/abundant-deficient-and-perfect-number-classifications.pluto
new file mode 100644
index 0000000000..31fc30e8c2
--- /dev/null
+++ b/Task/Abundant-deficient-and-perfect-number-classifications/Pluto/abundant-deficient-and-perfect-number-classifications.pluto
@@ -0,0 +1,26 @@
+do -- count abundant, perfect and deficient numbers up to 20 000
+
+ local fmt = require( "fmt" ) -- RC Pluto formatting library
+
+ -- construct a table of proper divisor sums
+ local maxNumber , pds = 20_000, {}
+ pds[ 1 ] = 0
+ for i = 2, maxNumber do pds[ i ] = 1 end
+ for i = 2, maxNumber do
+ for j = i + i, maxNumber, i do pds[ j ] += i end
+ end
+
+ -- classify the numbers and count each type
+ local aCount, dCount, pCount = 0, 0, 0
+ for i = 1, maxNumber do
+ local dSum = pds[ i ]
+ if dSum > i then aCount += 1
+ elseif dSum < i then dCount += 1
+ else pCount += 1
+ end
+ end
+ local formattedMax = string.formatint( maxNumber )
+ fmt.write( "Abundant numbers up to %s: %8s\n", formattedMax, string.formatint( aCount ) )
+ fmt.write( "Perfect numbers up to %s: %8s\n", formattedMax, string.formatint( pCount ) )
+ fmt.write( "Deficient numbers up to %s: %8s\n", formattedMax, string.formatint( dCount ) )
+end
diff --git a/Task/Abundant-deficient-and-perfect-number-classifications/Prolog/abundant-deficient-and-perfect-number-classifications.pro b/Task/Abundant-deficient-and-perfect-number-classifications/Prolog/abundant-deficient-and-perfect-number-classifications.pro
index b0a87e05b3..26bfe44194 100644
--- a/Task/Abundant-deficient-and-perfect-number-classifications/Prolog/abundant-deficient-and-perfect-number-classifications.pro
+++ b/Task/Abundant-deficient-and-perfect-number-classifications/Prolog/abundant-deficient-and-perfect-number-classifications.pro
@@ -3,18 +3,19 @@ proper_divisors(N, [1|L]) :-
FSQRTN is floor(sqrt(N)),
proper_divisors(2, FSQRTN, N, L).
-proper_divisors(M, FSQRTN, _, []) :-
- M > FSQRTN,
- !.
-proper_divisors(M, FSQRTN, N, L) :-
- N mod M =:= 0, !,
- MO is N//M, % must be integer
- L = [M,MO|L1], % both proper divisors
- M1 is M+1,
- proper_divisors(M1, FSQRTN, N, L1).
-proper_divisors(M, FSQRTN, N, L) :-
- M1 is M+1,
- proper_divisors(M1, FSQRTN, N, L).
+proper_divisors(M, FSQRTN, N, [MS|L]) :-
+ between(M, FSQRTN, D1),
+ N mod D1 =:= 0, !,
+ D2 is N//D1, % must be integer
+ ( D1 < D2
+ ->
+ MS is D1 + D2, % already sum here
+ M2 is D1 + 1,
+ proper_divisors(M2, FSQRTN, N, L)
+ ;
+ MS is D1, L = [] % D1 only once
+ ).
+proper_divisors(_, _FSQRTN, _, []) :- !.
dpa(1, [1], [], []) :-
!.
diff --git a/Task/Abundant-odd-numbers/ALGOL-68/abundant-odd-numbers.alg b/Task/Abundant-odd-numbers/ALGOL-68/abundant-odd-numbers.alg
index 4bc494606d..cc24a232e3 100644
--- a/Task/Abundant-odd-numbers/ALGOL-68/abundant-odd-numbers.alg
+++ b/Task/Abundant-odd-numbers/ALGOL-68/abundant-odd-numbers.alg
@@ -1,7 +1,5 @@
-BEGIN
- # find some abundant odd numbers - numbers where the sum of the proper #
- # divisors is bigger than the number #
- # itself #
+BEGIN # find some abundant odd numbers - numbers wose the proper divisor sum #
+ # is bigger than the number itself #
# returns the sum of the proper divisors of n #
PROC divisor sum = ( INT n )INT:
@@ -41,34 +39,20 @@ BEGIN
# 1000th odd abundant number #
WHILE a count < 1 000 DO
IF ( d sum := divisor sum( odd number ) ) > odd number THEN
- a count := a count + 1
+ a count +:= 1
FI;
odd number +:= 2
OD;
- print( ( "1000th abundant odd number:"
- , newline
- , " "
- , whole( odd number - 2, 0 )
- , " proper divisor sum: "
- , whole( d sum, 0 )
- , newline
- )
- );
+ print( ( "1000th abundant odd number:", newline, " " ) );
+ print( ( whole( odd number - 2, 0 ), " proper divisor sum: ", whole( d sum, 0 ), newline ) );
# first odd abundant number > one billion #
odd number := 1 000 000 001;
BOOL found := FALSE;
WHILE NOT found DO
IF ( d sum := divisor sum( odd number ) ) > odd number THEN
found := TRUE;
- print( ( "First abundant odd number > 1 000 000 000:"
- , newline
- , " "
- , whole( odd number, 0 )
- , " proper divisor sum: "
- , whole( d sum, 0 )
- , newline
- )
- )
+ print( ( "First abundant odd number > 1 000 000 000:", newline, " " ) );
+ print( ( whole( odd number, 0 ), " proper divisor sum: ", whole( d sum, 0 ), newline ) )
FI;
odd number +:= 2
OD
diff --git a/Task/Abundant-odd-numbers/Agena/abundant-odd-numbers.agena b/Task/Abundant-odd-numbers/Agena/abundant-odd-numbers.agena
new file mode 100644
index 0000000000..498c14b6a4
--- /dev/null
+++ b/Task/Abundant-odd-numbers/Agena/abundant-odd-numbers.agena
@@ -0,0 +1,52 @@
+scope # find some abundant snumbers
+ # - numbers whose proper divisor sum is bigger than the number itself
+
+ # returns the sum of the proper divisors of n
+ local constant divisor_sum := proc( n :: number ) :: number is
+ local sum := 1;
+ for d from 2 to entier sqrt( n ) do
+ if n mod d = 0 then
+ sum +:= d;
+ other_d := n \ d;
+ if other_d <> d then
+ sum +:= other_d
+ fi
+ fi
+ od;
+ return sum
+ end;
+ scope # find the numbers required by the task
+ # first 25 odd abundant numbers
+ local odd_number, a_count, d_sum := 1, 0, 0;
+ print( "The first 25 abundant odd numbers:" );
+ while a_count < 25 do
+ d_sum := divisor_sum( odd_number );
+ if d_sum > odd_number then
+ a_count +:= 1;
+ printf( "%6d proper divisor sum: %d\n", odd_number, d_sum );
+ fi;
+ odd_number +:= 2
+ od;
+ # 1000th odd abundant number
+ while a_count < 1_000 do
+ d_sum := divisor_sum( odd_number );
+ if d_sum > odd_number then
+ a_count +:= 1
+ fi;
+ odd_number +:= 2
+ od;
+ printf( "1000th abundant odd number:\n %d proper divisor sum: %d\n", odd_number, d_sum );
+ # first odd abundant number > one billion
+ odd_number := 1_000_000_001;
+ local found := false;
+ while not found do
+ d_sum := divisor_sum( odd_number );
+ if d_sum > odd_number then
+ found := true;
+ print( "First abundant odd_number > 1 000 000 000:" );
+ printf( " %d proper divisor sum: %d\n", odd_number, d_sum );
+ fi;
+ odd_number +:= 2
+ od
+ end
+end
diff --git a/Task/Abundant-odd-numbers/Pluto/abundant-odd-numbers.pluto b/Task/Abundant-odd-numbers/Pluto/abundant-odd-numbers.pluto
new file mode 100644
index 0000000000..2147c9f991
--- /dev/null
+++ b/Task/Abundant-odd-numbers/Pluto/abundant-odd-numbers.pluto
@@ -0,0 +1,35 @@
+local int = require "int"
+local fmt = require "fmt"
+require "table2"
+
+local function abundant_odd(search_from, count_from, count_to, print_one)
+ local count = count_from
+ local n = search_from
+ while count < count_to do
+ local divs = int.divisors(n, true)
+ local tot = #divs > 0 ? (divs:sum()) : 0
+ if tot > n then
+ ++count
+ if !print_one or count >= count_to then
+ local s = fmt.swrite(divs, " + ", "")
+ if !print_one then
+ fmt.print("%2d. %5d < %s = %d", count, n, s, tot)
+ else
+ fmt.print("%d < %s = %d", n, s, tot)
+ end
+ end
+ end
+ n += 2
+ end
+ return n
+end
+
+local MAX = 25
+print($"The first {MAX} abundant odd numbers are:")
+local n = abundant_odd(1, 0, 25, false)
+
+print("\nThe one thousandth abundant odd number is:")
+abundant_odd(n, 25, 1000, true)
+
+print("\nThe first abundant odd number above one billion is:")
+abundant_odd(1e9 + 1, 0, 1, true)
diff --git a/Task/Accumulator-factory/REBOL/accumulator-factory.rebol b/Task/Accumulator-factory/REBOL/accumulator-factory-1.rebol
similarity index 70%
rename from Task/Accumulator-factory/REBOL/accumulator-factory.rebol
rename to Task/Accumulator-factory/REBOL/accumulator-factory-1.rebol
index 35b5392daf..0738505b60 100644
--- a/Task/Accumulator-factory/REBOL/accumulator-factory.rebol
+++ b/Task/Accumulator-factory/REBOL/accumulator-factory-1.rebol
@@ -6,3 +6,6 @@ make-acc-gen: func [start-val] [
]
]
]
+gen: make-acc-gen 1
+print gen 5 ;== 6
+print gen 2.3 ;== 8.3
diff --git a/Task/Accumulator-factory/REBOL/accumulator-factory-2.rebol b/Task/Accumulator-factory/REBOL/accumulator-factory-2.rebol
new file mode 100644
index 0000000000..02468d5450
--- /dev/null
+++ b/Task/Accumulator-factory/REBOL/accumulator-factory-2.rebol
@@ -0,0 +1,25 @@
+;; Define a generator function 'gen' with an optional refinement '/init'
+;; - 'value' is a required number passed to the function
+;; - '/init' is an optional refinement for initialization
+gen: function/with [value [number!] /init] [
+
+ ;; If '/init' refinement is used, initialize state and exit immediately
+ if init [
+ state: value ;; Set the initial state to the provided value
+ exit ;; Exit, so nothing else in the function is run
+ ]
+
+ ;; If not initializing, add 'value' to 'state'
+ state: state + value
+
+ ;; The function returns the new state each call
+][state: 0] ;; 'state' is a local variable, initialized once per definition (persistent closure)
+
+;; Initialize the 'state' value of gen to 1 by calling it with '/init'
+gen/init 1
+
+;; Call gen with 5: Adds 5 to state and prints the result (should print 6)
+print gen 5
+
+;; Call gen with 2.3: Adds 2.3 to state and prints the result (should print 8.3)
+print gen 2.3
diff --git a/Task/Achilles-numbers/Pluto/achilles-numbers.pluto b/Task/Achilles-numbers/Pluto/achilles-numbers.pluto
new file mode 100644
index 0000000000..f28f017194
--- /dev/null
+++ b/Task/Achilles-numbers/Pluto/achilles-numbers.pluto
@@ -0,0 +1,63 @@
+local int = require "int"
+local fmt = require "fmt"
+
+$define MAX_DIGITS = 15
+
+local pps = {}
+
+local function get_perfect_powers(max_exp)
+ local upper = 10 ^ max_exp
+ for i = 2.0, int.sqrt(upper) do
+ local p = i
+ while true do
+ p *= i
+ if p >= upper then break end
+ pps[p] = true
+ end
+ end
+end
+
+local function get_achilles(min_exp, max_exp)
+ local lower = 10 ^ min_exp
+ local upper = 10 ^ max_exp
+ local achilles = {} -- avoids duplicates
+ for b = 1.0, int.cbrt(upper) do
+ local b3 = b * b * b
+ for a = 1.0, int.sqrt(upper) do
+ local p = b3 * a * a
+ if p >= upper then break end
+ if p >= lower then
+ if !pps[p] then achilles[p] = true end
+ end
+ end
+ end
+ return achilles
+end
+
+get_perfect_powers(MAX_DIGITS)
+local achilles_set = get_achilles(1, 5) -- enough for first 2 parts
+local achilles = achilles_set:keys()
+achilles:sort()
+
+print("First 50 Achilles numbers:")
+fmt.tprint("%4d", achilles:slice(1, 50), 10)
+
+print("\nFirst 30 strong Achilles numbers:")
+local strong_achilles = {}
+local count = 0
+local n = 1
+while count < 30 do
+ local tot = int.totient(achilles[n])
+ if achilles_set[tot] then
+ strong_achilles:insert(achilles[n])
+ ++count
+ end
+ ++n
+end
+fmt.tprint("%5d", strong_achilles, 10)
+
+print("\nNumber of Achilles numbers with:")
+for d = 2, MAX_DIGITS do
+ local ac = get_achilles(d - 1, d):size()
+ fmt.print("%2d digits: %d", d, ac)
+end
diff --git a/Task/Ackermann-function/ArkScript/ackermann-function.ark b/Task/Ackermann-function/ArkScript/ackermann-function.ark
new file mode 100644
index 0000000000..c662b841df
--- /dev/null
+++ b/Task/Ackermann-function/ArkScript/ackermann-function.ark
@@ -0,0 +1,8 @@
+(let ackermann (fun (m n) {
+ (if (> m 0)
+ (if (= 0 n)
+ (ackermann (- m 1) 1)
+ (ackermann (- m 1) (ackermann m (- n 1))))
+ (+ 1 n)) }))
+
+(assert (= 509 (ackermann 3 6)) "(ackermann 3 6) == 509")
diff --git a/Task/Ackermann-function/Pluto/ackermann-function.pluto b/Task/Ackermann-function/Pluto/ackermann-function.pluto
new file mode 100644
index 0000000000..91075937c7
--- /dev/null
+++ b/Task/Ackermann-function/Pluto/ackermann-function.pluto
@@ -0,0 +1,13 @@
+function ack(m,n)
+ if m==0 then
+ return n+1
+ elseif n == 0 then
+ return ack(m-1,1)
+ else return ack(m-1,ack(m,n-1)) end
+end
+
+for i = 0,3 do
+ for j = 0,8 do
+ print($"A({i},{j})={ack(i,j)}")
+ end
+end
diff --git a/Task/Ackermann-function/REBOL/ackermann-function-1.rebol b/Task/Ackermann-function/REBOL/ackermann-function-1.rebol
new file mode 100644
index 0000000000..52928c349e
--- /dev/null
+++ b/Task/Ackermann-function/REBOL/ackermann-function-1.rebol
@@ -0,0 +1,7 @@
+ackermann: func [m n] [
+ case [
+ m = 0 [n + 1]
+ n = 0 [ackermann m - 1 1]
+ true [ackermann m - 1 ackermann m n - 1]
+ ]
+]
diff --git a/Task/Ackermann-function/REBOL/ackermann-function-2.rebol b/Task/Ackermann-function/REBOL/ackermann-function-2.rebol
new file mode 100644
index 0000000000..c6e294cb60
--- /dev/null
+++ b/Task/Ackermann-function/REBOL/ackermann-function-2.rebol
@@ -0,0 +1,16 @@
+ackermann: func [
+ m [integer!]
+ n [integer!]
+] [
+ ;; Small-m closed forms
+ case [
+ m = 0 [n + 1]
+ m = 1 [n + 2]
+ m = 2 [(2 * n) + 3]
+ m = 3 [
+ ;; 2^(n+3) - 3
+ (to integer! power 2 (n + 3)) - 3
+ ]
+ ;; m >= 4 causes stack overflow
+ ]
+]
diff --git a/Task/Ackermann-function/TAV/ackermann-function.tav b/Task/Ackermann-function/TAV/ackermann-function.tav
new file mode 100644
index 0000000000..f81000b3c8
--- /dev/null
+++ b/Task/Ackermann-function/TAV/ackermann-function.tav
@@ -0,0 +1,11 @@
+ackermann (n) (m) :
+ ? n = 0
+ :> m+1
+ ? m = 0
+ :> ackermann (n-1) 1
+ :> ackermann (n-1) ackermann n (m-1) \ = ackermann (n-1) (ackermann n (m-1))
+\ test it
+main(params):+
+ p1 =: string params[1] as integer else 3
+ p2 =: string params[2] as integer else 5
+ print "ackermann(" _ p1 _ "," _ p2 _ ") = " _ ackermann p1 p2
diff --git a/Task/Address-of-a-variable/Pluto/address-of-a-variable.pluto b/Task/Address-of-a-variable/Pluto/address-of-a-variable.pluto
new file mode 100644
index 0000000000..7230dc3a18
--- /dev/null
+++ b/Task/Address-of-a-variable/Pluto/address-of-a-variable.pluto
@@ -0,0 +1,6 @@
+local s = ""
+local t = {}
+local function f() end
+local n = 1
+local b = true
+print(string.format("%p\t%p\t%p\t%p\t%p", s, t, f, n, b))
diff --git a/Task/Address-of-a-variable/REXX/address-of-a-variable.rexx b/Task/Address-of-a-variable/REXX/address-of-a-variable.rexx
index 21c8179c31..355580acf3 100644
--- a/Task/Address-of-a-variable/REXX/address-of-a-variable.rexx
+++ b/Task/Address-of-a-variable/REXX/address-of-a-variable.rexx
@@ -1 +1,18 @@
-zzz = storage(xxx)
+-- 7 Aug 2025
+include Settings
+
+say 'ADDRESS OF A VARIABLE'
+say version
+say
+if Pos('Regina',version) > 0 then
+ call Library
+call Primes 10
+call SysDumpVariables
+exit
+
+Library:
+call RxFuncAdd 'SysLoadFuncs','RegUtil','SysLoadFuncs'
+call SysLoadFuncs
+return
+
+include Math
diff --git a/Task/Address-of-a-variable/RISC-V-Assembly/address-of-a-variable.asm b/Task/Address-of-a-variable/RISC-V-Assembly/address-of-a-variable.asm
new file mode 100644
index 0000000000..9a7e83e30b
--- /dev/null
+++ b/Task/Address-of-a-variable/RISC-V-Assembly/address-of-a-variable.asm
@@ -0,0 +1,128 @@
+# riscv assembly raspberry pico2 rp2350
+# program adrvariable.s
+# connexion putty com3
+/*********************************************/
+/* CONSTANTES */
+/********************************************/
+/* for this file see risc-v task include a file */
+.include "../../constantesRiscv.inc"
+
+/*******************************************/
+/* INITIALED DATAS */
+/*******************************************/
+.data
+szMessStart: .asciz "Program riscv start.\r\n"
+szCariageReturn: .asciz "\r\n"
+.align 2
+tabValues: .int 1,2,3,4
+
+/*******************************************/
+/* UNINITIALED DATA */
+/*******************************************/
+.bss
+.align 2
+sConvArea: .skip 24
+ivalue1: .skip 4
+
+/**********************************************/
+/* SECTION CODE */
+/**********************************************/
+.text
+.global main
+
+main:
+ call stdio_init_all # général init
+1: # start loop connexion
+ li a0,0 # raz argument register
+ call tud_cdc_n_connected # waiting for USB connection
+ beqz a0,1b # return code = zero ?
+
+ la a0,szMessStart # message address
+ call writeString # display message
+
+ la t1,ivalue1 # variable address
+ lw a0,(t1) # load word value
+ call displayResult
+ la t1,ivalue1 # variable address
+ li t0,12345 # new value
+ sw t0,(t1) # store word value
+ la t1,ivalue1 # variable address
+ lw a0,(t1) # load value for control
+ call displayResult
+ la t1,tabValues # load array address
+ lw a0,8(t1) # load value at byte 8 of array
+ call displayResult
+ la t1,tabValues # load array address
+ li t2,3 # init index value
+ slli t2,t2,2 # multiply index by 5 (integer size)
+ add t2,t2,t1 # add offset to array address
+ lw a0,(t2) # load value of index
+ call displayResult
+
+ call getchar
+100: # final loop
+ j 100b
+
+/**********************************************/
+/* displayResult */
+/**********************************************/
+/* a0 value */
+.equ LGZONECONV, 20
+displayResult:
+ addi sp, sp, -4 # reserve stack
+ sw ra, 0(sp)
+ la a1,sConvArea # conversion result address
+ call conversion10 # conversion decimal
+ la a0,sConvArea # message address
+ call writeString # display message
+ la a0,szCariageReturn
+ call writeString
+100:
+ lw ra, 0(sp)
+ addi sp, sp, 4
+ ret
+
+/**********************************************/
+/* decimal conversion */
+/**********************************************/
+/* a0 value */
+/* a1 conversion array address */
+.equ LGZONECONV, 20
+conversion10:
+ addi sp, sp, -4
+ sw ra, 0(sp)
+ li t1,LGZONECONV
+ li t2,10 # divisor
+1:
+ rem t4,a0,t2 # division remainder by 10
+ addi t4,t4,48 # convert to decimal
+ add t5,a1,t1 # store character position
+ sb t4,(t5) # store byte
+ div a0,a0,t2 # compute quotient
+ beq a0,x0,2f # compare to 0
+ addi t1,t1,-1 # decrement store position
+ bgt t1,x0,1b # and loop if position is ok
+2:
+ li t2,0 # raz indice
+ li t3,LGZONECONV
+3: # loop to transfer result at begining conversion area
+ add t5,a1,t1 # compute start position
+ lb t4,(t5) # load byte
+ add t5,a1,t2 # compute new position
+ sb t4,(t5) # and store byte
+ addi t2,t2,1 # increment indice
+ addi t1,t1,1
+ ble t1,t3,3b # and loop if indice <= area size
+ add t5,a1,t2 # increment final position
+ sb x0,(t5) # and store byte final zero
+ mv a0,t2 # return size conversion
+
+100:
+ lw ra, 0(sp)
+ addi sp, sp, 4
+ ret
+/************************************/
+/* file include Fonctions */
+/***********************************/
+/* for this file see risc-v task include a file */
+.include "../../includeFunctions.s"
diff --git a/Task/Address-of-a-variable/Red/address-of-a-variable.red b/Task/Address-of-a-variable/Red/address-of-a-variable.red
new file mode 100644
index 0000000000..f23545f25f
--- /dev/null
+++ b/Task/Address-of-a-variable/Red/address-of-a-variable.red
@@ -0,0 +1,17 @@
+Red/System []
+
+print ["pointer test:" newline]
+
+a: 100
+print ["a is an integer variable, value: " a newline]
+
+p: declare pointer! [integer!]
+p: :a
+print ["p is the address of a: " p newline]
+print ["p/value refer to the value pointed to by p: " p/value newline]
+
+q: declare pointer! [integer!]
+q: p + 1
+print ["q is p + 1: " q " q/value is (uninitialized): " q/value newline]
+
+print ["q - p: " (q - p) newline]
diff --git a/Task/Align-columns/ALGOL-68/align-columns.alg b/Task/Align-columns/ALGOL-68/align-columns.alg
index ae3186556c..056358ac56 100644
--- a/Task/Align-columns/ALGOL-68/align-columns.alg
+++ b/Task/Align-columns/ALGOL-68/align-columns.alg
@@ -27,37 +27,38 @@ make term(text in file, "$");
on physical file end(text in file, (REF FILE skip)BOOL: stop iteration);
on logical file end(text in file, (REF FILE skip)BOOL: stop iteration);
+BOOL at eol := FALSE;
+on line end(text in file, (REF FILE skip)BOOL: at eol := TRUE);
FOR row DO
- on line end(text in file, (REF FILE skip)BOOL: stop iteration);
- FOR col DO
- STRING tok;
+ at eol := FALSE;
+ FOR col WHILE NOT at eol DO
+ STRING tok := "";
getf(text in file, ($gx$,tok));
- IF row > 1 UPB page THEN page := flex page(page, row, 2 UPB page) FI;
- IF col > 2 UPB page THEN page := flex page(page, 1 UPB page, col) FI;
- page[row,col]:=tok
- OD;
- stop iteration:
- SKIP
+ IF tok NE "" OR NOT at eol THEN
+ IF row > 1 UPB page THEN page := flex page(page, row, 2 UPB page) FI;
+ IF col > 2 UPB page THEN page := flex page(page, 1 UPB page, col) FI;
+ page[row,col]:=tok
+ FI
+ OD
OD;
stop iteration:
SKIP;
BEGIN
- PROC aligner = (PAGE in page, PROC (STRING,INT)STRING aligner)VOID:(
- PAGE page := in page;
- [2 UPB page]INT max width;
+ PROC aligner = (PAGE in page, PROC (STRING,INT)STRING alignf)VOID:(
+ PAGE al page := in page;
FOR col TO 2 UPB page DO
- INT max len:=0; FOR row TO UPB page DO IF UPB page[row,col]>max len THEN max len:=UPB page[row,col] FI OD;
- FOR row TO UPB page DO page[row,col] := aligner(page[row,col], maxlen) OD
+ INT max len:=0; FOR row TO UPB al page DO IF UPB al page[row,col]>max len THEN max len:=UPB al page[row,col] FI OD;
+ FOR row TO UPB al page DO al page[row,col] := alignf(page[row,col], maxlen) OD
OD;
- printf(($n(UPB page)(n(2 UPB page -1)(gx)gl)$,page))
+ printf(($n(UPB page)(n(2 UPB page -1)(gx)gl)$,al page))
);
PROC left = (STRING in, INT len)STRING: in + " "*(len - UPB in),
right = (STRING in, INT len)STRING: " "*(len - UPB in) + in,
centre = (STRING in, INT len)STRING: ( INT pad=len-UPB in; pad%2*" "+ in + (pad-pad%2)*" " );
- []STRUCT(STRING name, PROC(STRING,INT)STRING align) aligners = (("Left",left), ("Left",right), ("Centre",centre));
+ []STRUCT(STRING name, PROC(STRING,INT)STRING align) aligners = (("Left",left), ("right",right), ("Centre",centre));
FOR index TO UPB aligners DO
print((new line, "# ",name OF aligners[index]," Column-aligned output:",new line));
diff --git a/Task/Aliquot-sequence-classifications/JavaScript/aliquot-sequence-classifications.js b/Task/Aliquot-sequence-classifications/JavaScript/aliquot-sequence-classifications.js
new file mode 100644
index 0000000000..bd6d59798d
--- /dev/null
+++ b/Task/Aliquot-sequence-classifications/JavaScript/aliquot-sequence-classifications.js
@@ -0,0 +1,81 @@
+// See https://en.wikipedia.org/wiki/Divisor_function
+function divisorSum(n) {
+ let total = 1n;
+ let power = 2n;
+ // Deal with powers of 2 first
+ for (; n % 2n === 0n; power *= 2n, n /= 2n) {
+ total += power;
+ }
+ // Odd prime factors up to the square root
+ for (let p = 3n; p * p <= n; p += 2n) {
+ let sum = 1n;
+ for (power = p; n % p === 0n; power *= p, n /= p) {
+ sum += power;
+ }
+ total *= sum;
+ }
+ // If n > 1 then it's prime
+ if (n > 1n) {
+ total *= n + 1n;
+ }
+ return total;
+}
+
+// See https://en.wikipedia.org/wiki/Aliquot_sequence
+function classifyAliquotSequence(n) {
+ const limit = 16;
+ const terms = new Array(limit);
+ terms[0] = n;
+ let classification = "non-terminating";
+ let length = 1;
+
+ for (let i = 1; i < limit; ++i) {
+ ++length;
+ terms[i] = divisorSum(terms[i - 1]) - terms[i - 1];
+
+ if (terms[i] === n) {
+ classification =
+ (i === 1 ? "perfect" : (i === 2 ? "amicable" : "sociable"));
+ break;
+ }
+
+ let j = 1;
+ for (; j < i; ++j) {
+ if (terms[i] === terms[i - j]) {
+ break;
+ }
+ }
+
+ if (j < i) {
+ classification = (j === 1 ? "aspiring" : "cyclic");
+ break;
+ }
+
+ if (terms[i] === 0n) {
+ classification = "terminating";
+ break;
+ }
+ }
+
+ let output = `${n}: ${classification}, sequence: ${terms[0]}`;
+ for (let i = 1; i < length && terms[i] !== terms[i - 1]; ++i) {
+ output += ` ${terms[i]}`;
+ }
+ console.log(output);
+}
+
+function main() {
+ for (let i = 1n; i <= 10n; ++i) {
+ classifyAliquotSequence(i);
+ }
+
+ const specialNumbers = [11n, 12n, 28n, 496n, 220n, 1184n, 12496n, 1264460n, 790n, 909n, 562n, 1064n, 1488n];
+ for (const i of specialNumbers) {
+ classifyAliquotSequence(i);
+ }
+
+ classifyAliquotSequence(15355717786080n);
+ classifyAliquotSequence(153557177860800n);
+}
+
+main();
diff --git a/Task/Almkvist-Giullera-formula-for-pi/Ada/almkvist-giullera-formula-for-pi.ada b/Task/Almkvist-Giullera-formula-for-pi/Ada/almkvist-giullera-formula-for-pi.ada
new file mode 100644
index 0000000000..400094aff2
--- /dev/null
+++ b/Task/Almkvist-Giullera-formula-for-pi/Ada/almkvist-giullera-formula-for-pi.ada
@@ -0,0 +1,94 @@
+-- Big_Reals is an Ada 2022 unit
+with Ada.Numerics.Big_Numbers.Big_Reals;
+with Ada.Text_IO;
+
+use Ada.Numerics.Big_Numbers.Big_Reals;
+
+procedure Almkvist_Giullera is
+
+ function "+" (B : Big_Real; A : Integer) return Big_Real is (B + To_Real (A));
+ function "*" (A : Integer; B : Big_Real) return Big_Real is (To_Real (A) * B);
+ B0 : constant Big_Real := To_Real (0);
+ B1 : constant Big_Real := B0 + 1;
+
+ function Factorial (N : Big_Real) return Big_Real
+ is
+ I : Big_Real := N;
+ F : Big_Real := B1;
+ begin
+ while I > B1 loop
+ F := F * I;
+ I := I - B1;
+ end loop;
+
+ return F;
+ end Factorial;
+
+ function F (N : Big_Real) return Big_Real renames Factorial;
+ procedure Put_Line (S : String) renames Ada.Text_IO.Put_Line;
+
+ function Integer_Term (N : Big_Real) return Big_Real is
+ (32 * F (6 * N) / (3 * F (N) ** 6) * (532 * N ** 2 + 126 * N + 9));
+
+ procedure Show_Integer_Terms (N : Positive) is
+ begin
+ for I in 0 .. N - 1 loop
+ Put_Line ("Almkvist-Giullera integer term "
+ & I'Image & " is "
+ & To_String (Integer_Term (To_Real (I)), Aft => 0));
+ end loop;
+ end Show_Integer_Terms;
+
+ -- Use Newton's Method
+ function Sqrt (N : Big_Real; Precision : Positive) return Big_Real is
+ Diff : Big_Real := To_Real (10) ** (-Precision);
+ Estimate : Big_Real := B0;
+ Next : Big_Real := N;
+ begin
+ while abs (Next - Estimate) > Diff loop
+ Estimate := Next;
+ Next := Estimate - (Estimate ** 2 - N) / (2 * Estimate);
+ -- Nasty hack to limit precision. Otherwise there is a storage error.
+ Next := From_String (To_String (Next, Aft => Precision + 2));
+ end loop;
+
+ return Estimate;
+ end Sqrt;
+
+ function Estimate_Pi (N : Integer; Precision : Positive) return Big_Real is
+ Sum : Big_Real := B0;
+ begin
+ for I in 0 .. N loop
+ Sum := Sum + Integer_Term (To_Real (I)) / To_Real (10) ** (6 * I + 3);
+ Sum := From_String (To_String (Sum, Aft => Precision + 2));
+ end loop;
+
+ return B1 / Sqrt (Sum, Precision + 2);
+ end Estimate_Pi;
+
+ function Compute_Pi (Precision : Positive) return Big_Real is
+ Diff : constant Big_Real := To_Real (10) ** (-Precision);
+ Pi_Estimate : Big_Real := B0;
+ Next : Big_Real := B1;
+ N : Integer := 1;
+ begin
+ while abs (Next - Pi_Estimate) > Diff loop
+ N := N * 2;
+ Pi_Estimate := Next;
+ Next := Estimate_Pi (N, Precision);
+ end loop;
+
+ return Pi_Estimate;
+ end Compute_Pi;
+
+ procedure Show_Pi (Precision : Positive) is
+ Pi : constant Big_Real := Compute_Pi (Precision);
+ begin
+ Put_Line ("Pi to " & Precision'Image & " places is "
+ & To_String (Pi, Aft => Precision));
+ end Show_Pi;
+
+begin
+ Show_Integer_Terms (10);
+ Show_Pi (70);
+end almkvist_giullera;
diff --git a/Task/Almost-prime/Icon/almost-prime-1.icon b/Task/Almost-prime/Icon/almost-prime-1.icon
index 297458b93a..3b44419065 100644
--- a/Task/Almost-prime/Icon/almost-prime-1.icon
+++ b/Task/Almost-prime/Icon/almost-prime-1.icon
@@ -6,5 +6,5 @@ procedure main()
end
procedure genKap(k)
- suspend (k = *factors(n := seq(q)), n)
+ suspend (k = *factors(n := seq()), n)
end
diff --git a/Task/Almost-prime/Pluto/almost-prime.pluto b/Task/Almost-prime/Pluto/almost-prime.pluto
new file mode 100644
index 0000000000..042adee1e9
--- /dev/null
+++ b/Task/Almost-prime/Pluto/almost-prime.pluto
@@ -0,0 +1,26 @@
+local function k_prime(n, k)
+ local nf = 0
+ for i = 2, n do
+ while n % i == 0 do
+ if nf == k then return false end
+ ++nf
+ n //= i
+ end
+ end
+ return nf == k
+end
+
+local function gen(k, n)
+ local r = {}
+ local m = 2
+ for i = 1, n do
+ while !k_prime(m, k) do ++m end
+ r[i] = m
+ ++m
+ end
+ return r
+end
+
+for k = 1, 5 do
+ print($"{k}: {gen(k, 10):concat(", ")}")
+end
diff --git a/Task/Amb/Ada/amb.ada b/Task/Amb/Ada/amb-1.ada
similarity index 100%
rename from Task/Amb/Ada/amb.ada
rename to Task/Amb/Ada/amb-1.ada
diff --git a/Task/Amb/Ada/amb-2.ada b/Task/Amb/Ada/amb-2.ada
new file mode 100644
index 0000000000..d2fd093f18
--- /dev/null
+++ b/Task/Amb/Ada/amb-2.ada
@@ -0,0 +1,78 @@
+-- MacOS, GNAT, gnat-aarch64-darwin-15.1.0-2
+with Ada.Strings.Unbounded; use Ada.Strings.Unbounded;
+with Ada.Text_IO; use Ada.Text_IO;
+
+procedure Test_Amb is
+ type Alternatives is array (Positive range <>) of Unbounded_String;
+
+ type Amb (Count : Positive) is record
+ This : Positive := 1;
+ Left : access Amb;
+ List : Alternatives (1..Count);
+ end record;
+
+ function "/" (L, R : String) return Amb;
+ function "/" (L : Amb; R : String) return Amb;
+ function "=" (L, R : Amb) return Boolean;
+ function Image (L : Amb) return String;
+ procedure Join (L : access Amb; R : in out Amb);
+ procedure Failure (L : in out Amb);
+
+ function Image (L : Amb) return String is
+ begin
+ return To_String (L.List (L.This));
+ end Image;
+
+ function "/" (L, R : String) return Amb is
+ Result : Amb (2);
+ begin
+ Append (Result.List (1), L);
+ Append (Result.List (2), R);
+ return Result;
+ end "/";
+
+ function "/" (L : Amb; R : String) return Amb is
+ Result : Amb (L.Count + 1);
+ begin
+ Result.List (1..L.Count) := L.List ;
+ Append (Result.List (Result.Count), R);
+ return Result;
+ end "/";
+
+ function "=" (L, R : Amb) return Boolean is
+ Left : Unbounded_String renames L.List (L.This);
+ begin
+ return Element (Left, Length (Left)) = Element (R.List (R.This), 1);
+ end "=";
+
+ procedure Failure (L : in out Amb) is
+ begin
+ loop
+ if L.This < L.Count then
+ L.This := L.This + 1;
+ else
+ L.This := 1;
+ Failure (L.Left.all);
+ end if;
+ exit when L.Left = null or else L.Left.all = L;
+ end loop;
+ end Failure;
+
+ procedure Join (L : access Amb; R : in out Amb) is
+ begin
+ R.Left := L;
+ while L.all /= R loop
+ Failure (R);
+ end loop;
+ end Join;
+
+ W_1 : aliased Amb := "the" / "that" / "a";
+ W_2 : aliased Amb := "frog" / "elephant" / "thing";
+ W_3 : aliased Amb := "walked" / "treaded" / "grows";
+ W_4 : aliased Amb := "slowly" / "quickly";
+begin
+ Join (W_1'Access, W_2);
+ Join (W_2'Access, W_3);
+ Join (W_3'Access, W_4);
+ Put_Line (Image (W_1) & ' ' & Image (W_2) & ' ' & Image (W_3) & ' ' & Image (W_4));
+end Test_Amb;
diff --git a/Task/Amicable-pairs/PL-I-80/amicable-pairs-1.pli b/Task/Amicable-pairs/PL-I-80/amicable-pairs-1.pli
deleted file mode 100644
index 0ce9c61830..0000000000
--- a/Task/Amicable-pairs/PL-I-80/amicable-pairs-1.pli
+++ /dev/null
@@ -1,47 +0,0 @@
-amicable: procedure options (main);
-
- %replace
- search_limit by 20000;
-
- dcl (a, b, found) fixed bin;
-
- put skip list ('Searching for amicable pairs up to ');
- put edit (search_limit) (f(5));
- found = 0;
- do a = 2 to search_limit;
- b = sumf(a);
- if (b > a) then
- do;
- if (sumf(b) = a) then
- do;
- found = found + 1;
- put skip edit (a,b) (f(7));
- end;
- end;
- end;
- put skip list (found, ' pairs were found');
- stop;
-
-
-/* return sum of the proper divisors of n */
-sumf:
- procedure(n) returns (fixed bin);
-
- dcl (n, sum, f1, f2) fixed bin;
-
- sum = 1; /* 1 is a proper divisor of every number */
- f1 = 2;
- do while ((f1 * f1) < n);
- if mod(n, f1) = 0 then
- do;
- sum = sum + f1;
- f2 = n / f1;
- /* don't double count identical co-factors! */
- if f2 > f1 then sum = sum + f2;
- end;
- f1 = f1 + 1;
- end;
- return (sum);
-end sumf;
-
-end amicable;
diff --git a/Task/Amicable-pairs/PL-I-80/amicable-pairs-2.pli b/Task/Amicable-pairs/PL-I-80/amicable-pairs.pli
similarity index 89%
rename from Task/Amicable-pairs/PL-I-80/amicable-pairs-2.pli
rename to Task/Amicable-pairs/PL-I-80/amicable-pairs.pli
index c8263a3816..49d0c5315a 100644
--- a/Task/Amicable-pairs/PL-I-80/amicable-pairs-2.pli
+++ b/Task/Amicable-pairs/PL-I-80/amicable-pairs.pli
@@ -3,7 +3,7 @@ amicable: procedure options (main);
%replace
search_limit by 20000;
- dcl sumf( 1 : search_limit ) fixed bin;
+ dcl sumf(1 : search_limit) fixed bin;
dcl (a, b, found) fixed bin;
put skip list ('Searching for amicable pairs up to ');
@@ -12,7 +12,7 @@ amicable: procedure options (main);
do a = 1 to search_limit; sumf( a ) = 1; end;
do a = 2 to search_limit;
do b = a + a to search_limit by a;
- sumf( b ) = sumf( b ) + a;
+ sumf(b) = sumf(b) + a;
end;
end;
diff --git a/Task/Anagrams/DuckDB/anagrams.duckdb b/Task/Anagrams/DuckDB/anagrams.duckdb
new file mode 100644
index 0000000000..aaa0f5aad8
--- /dev/null
+++ b/Task/Anagrams/DuckDB/anagrams.duckdb
@@ -0,0 +1,20 @@
+# The MAP giving the frequency counts of characters in the given string
+create or replace function spectrum(str) as (
+ select histogram(c)
+ from (select unnest(regexp_extract_all(str,'.')) as c)
+);
+
+# Find the anagram groups having the most members.
+# Each group is sorted, and the groups are sorted by first word in the group.
+with words as (from read_csv('unixdict.txt', header=false) _(word)),
+ histograms as (select word, spectrum(word) as h from words),
+ groups as (select h, count(h) as c from histograms group by h order by c desc),
+ mx as (select max(c) as mx from groups),
+ maximals as (select h from groups, mx where c = mx.mx),
+ results as (select (select array_agg(word).list_sort()
+ from histograms
+ where histograms.h = maximals.h ) as anagrams
+ from maximals)
+ select anagrams
+ from results
+ order by anagrams[1] ;
diff --git a/Task/Anagrams/TAV/anagrams.tav b/Task/Anagrams/TAV/anagrams.tav
new file mode 100644
index 0000000000..6b940f7f6e
--- /dev/null
+++ b/Task/Anagrams/TAV/anagrams.tav
@@ -0,0 +1,38 @@
+\( Find anagrams (words with the same set of letters)
+ Words are the lines of an input file.
+ Sorting the letters of the word gives the key for a map
+ having a list (row) of all words so far.
+\)
+\+ stdlib
+main(parms):+
+ parms[1] =~ 'unixdict.txt' \ default input file
+ wordmap =: get words from parms[1]
+ maxw =: wordmap.maxlen
+ ?# idx =: map wordmap give keys ascending
+ words =: wordmap{idx}
+ ? maxw = words.count
+ print words::join values by ', '
+
+\ read the file (infn) and return a map
+get words from (infn):
+ res =: new map \ create the result map
+ res.maxlen =: 0
+ ?# line =: file infn give lines \ or: infn::give lines
+ add line to res
+ :> res
+
+\ add a word to the map
+add (word) to (amap):
+ idx =: sort characters of word::case to upper
+ row =: amap{idx} \ get indexed words
+ ? row = () \ new entry if void
+ row =: new row
+ amap{idx} =: row
+ row[] =: word \ add new entry
+ amap.maxlen =: maximum of amap.maxlen, row.count
+
+\ Sort the characters of a string
+sort characters of (s):
+ sr =: string s as character row
+ row sr sort ascending
+ :> row sr join values as string \ without separator
diff --git a/Task/Angles-geometric-normalization-and-conversion/R/angles-geometric-normalization-and-conversion.r b/Task/Angles-geometric-normalization-and-conversion/R/angles-geometric-normalization-and-conversion.r
new file mode 100644
index 0000000000..b5d7f17fa3
--- /dev/null
+++ b/Task/Angles-geometric-normalization-and-conversion/R/angles-geometric-normalization-and-conversion.r
@@ -0,0 +1,23 @@
+test_angles <- c(-2,-1,0,1,2,6.2831853,16,57.2957795,359,399,6399,1000000)
+
+d2d <- function(a) sign(a)*(abs(a)%%360)
+g2g <- function(a) sign(a)*(abs(a)%%400)
+m2m <- function(a) sign(a)*(abs(a)%%6400)
+r2r <- function(a) sign(a)*(abs(a)%%(2*pi))
+
+normalised <- as.data.frame(sapply(c(d2d,g2g,m2m,r2r), function(f) f(test_angles)))
+unitnames <- c("deg","grad","mil","rad")
+colnames(normalised) <- sapply(unitnames, function(s) paste0(s, "_norm"))
+
+d2x <- function(a, unit) switch(unit, "grad"=a*10/9, "mil"=a*160/9, "rad"=a*pi/180)
+g2x <- function(a, unit) switch(unit, "deg"=a*9/10, "mil"=a*16, "rad"=a*pi/200)
+m2x <- function(a, unit) switch(unit, "deg"=a*9/160, "grad"=a/16, "rad"=a*pi/3200)
+r2x <- function(a, unit) switch(unit, "deg"=a*180/pi, "grad"=a*200/pi, "mil"=a*3200/pi)
+
+deg_conv <- sapply(unitnames[-1], function(unit) d2x(d2d(test_angles), unit))
+grad_conv <- sapply(unitnames[-2], function(unit) g2x(g2g(test_angles), unit))
+mil_conv <- sapply(unitnames[-3], function(unit) m2x(m2m(test_angles), unit))
+rad_conv <- sapply(unitnames[-4], function(unit) r2x(r2r(test_angles), unit))
+
+conv_list <- list(deg_conv, grad_conv, mil_conv, rad_conv)
+setNames(lapply(1:4, function(n) cbind(test_angles, normalised[n], conv_list[[n]])), unitnames)
diff --git a/Task/Anonymous-recursion/DuckDB/anonymous-recursion.duckdb b/Task/Anonymous-recursion/DuckDB/anonymous-recursion.duckdb
new file mode 100644
index 0000000000..3127c641c3
--- /dev/null
+++ b/Task/Anonymous-recursion/DuckDB/anonymous-recursion.duckdb
@@ -0,0 +1,11 @@
+create or replace function fib(n) as (
+ if ( n < 0, error('negative arguments not allowed'),
+ (with recursive fib(i,e,f) as (
+ select 1, 1, 1
+ union all
+ select i+1, e+f, e from fib
+ where i <= n)
+ select last(f order by i)
+ from fib)
+ )
+);
diff --git a/Task/Anti-primes/Bc/anti-primes.bc b/Task/Anti-primes/Bc/anti-primes.bc
new file mode 100644
index 0000000000..d282deaa5d
--- /dev/null
+++ b/Task/Anti-primes/Bc/anti-primes.bc
@@ -0,0 +1,18 @@
+define factors(n) {
+ auto c
+ for(i=1;i<=n;i++) {
+ if(n%i==0) c+=1
+ }
+ return c
+}
+
+max = 0
+n = 1
+for(c=20; c > 0;) {
+ if(factors(n) > max) {
+ print n," "
+ max = factors(n)
+ c -= 1
+ }
+ n += 1
+}
diff --git a/Task/Anti-primes/Draco/anti-primes.draco b/Task/Anti-primes/Draco/anti-primes.draco
new file mode 100644
index 0000000000..8b2db07dee
--- /dev/null
+++ b/Task/Anti-primes/Draco/anti-primes.draco
@@ -0,0 +1,29 @@
+proc factors(word n) word:
+ word count, fac;
+ count := 1;
+ for fac from 1 upto n/2 do
+ if n % fac = 0 then
+ count := count + 1
+ fi
+ od;
+ count
+corp
+
+proc antiprimes(word amount) void:
+ word maxf, n, f;
+ maxf := 0;
+ n := 1;
+ while amount > 0 do
+ f := factors(n);
+ if f > maxf then
+ write(n, " ");
+ maxf := f;
+ amount := amount - 1
+ fi;
+ n := n + 1
+ od
+corp
+
+proc main() void:
+ antiprimes(20)
+corp
diff --git a/Task/Anti-primes/Lua/anti-primes-2.lua b/Task/Anti-primes/Lua/anti-primes-2.lua
index a849a48fa0..a3ca9023e3 100644
--- a/Task/Anti-primes/Lua/anti-primes-2.lua
+++ b/Task/Anti-primes/Lua/anti-primes-2.lua
@@ -26,4 +26,4 @@ function antiprimes(goal)
end
-- display the antiprimes
-oo.write( table.concat( antiprimes( 20 ), " " ) )
+io.write( table.concat( antiprimes( 20 ), " " ) )
diff --git a/Task/Anti-primes/Pluto/anti-primes.pluto b/Task/Anti-primes/Pluto/anti-primes.pluto
new file mode 100644
index 0000000000..3b7ee59a36
--- /dev/null
+++ b/Task/Anti-primes/Pluto/anti-primes.pluto
@@ -0,0 +1,32 @@
+do -- Find the first 20 antiprimes.
+
+ local fmt = require( "fmt" )
+
+ -- returns a table of the first goal antiprimes
+ function antiprimes(goal)
+ local maxNumber = 0
+ local ndc = {} -- table of divisor counts - initially empty
+ local list, number, mostFactors = {}, 1, 0
+ while #list < goal do
+ if number > #ndc then
+ -- need a bigger table of divisor counts
+ maxNumber = maxNumber + 5000
+ ndc = {}
+ for i = 1, maxNumber do ndc[ i ] = 1 end
+ for i = 2, maxNumber do
+ for j = i, maxNumber, i do ++ ndc[ j ] end
+ end
+ end
+ local factors = ndc[ number ]
+ if factors > mostFactors then
+ table.insert( list, number )
+ mostFactors = factors
+ end
+ ++ number
+ end
+ return list
+ end
+
+ -- display the antiprimes
+ fmt.lprint( antiprimes( 20 ), " ", "" )
+end
diff --git a/Task/Apply-a-callback-to-an-array/ArkScript/apply-a-callback-to-an-array.ark b/Task/Apply-a-callback-to-an-array/ArkScript/apply-a-callback-to-an-array.ark
new file mode 100644
index 0000000000..a264075a30
--- /dev/null
+++ b/Task/Apply-a-callback-to-an-array/ArkScript/apply-a-callback-to-an-array.ark
@@ -0,0 +1,8 @@
+(import std.List :map)
+
+(let array [1 2 3 4 5 6 7 8 9 10])
+(let mapped (map array (fun (i) (* i i))))
+
+(assert
+ (= mapped [1 4 9 16 25 36 49 64 81 100])
+ "mapped is a list of squares")
diff --git a/Task/Apply-a-callback-to-an-array/Haxe/apply-a-callback-to-an-array.haxe b/Task/Apply-a-callback-to-an-array/Haxe/apply-a-callback-to-an-array.haxe
new file mode 100644
index 0000000000..da0f9b93f7
--- /dev/null
+++ b/Task/Apply-a-callback-to-an-array/Haxe/apply-a-callback-to-an-array.haxe
@@ -0,0 +1,10 @@
+class Main {
+ static function main() {
+ var numbers = [1, 2, 3, 4, 5];
+
+ var squared = (i) -> i * i;
+
+ trace(numbers);
+ trace(numbers.map(squared));
+ }
+}
diff --git a/Task/Approximate-equality/Pluto/approximate-equality.pluto b/Task/Approximate-equality/Pluto/approximate-equality.pluto
new file mode 100644
index 0000000000..a40474d82c
--- /dev/null
+++ b/Task/Approximate-equality/Pluto/approximate-equality.pluto
@@ -0,0 +1,16 @@
+local tol = 1e-16
+local sqrt2 = math.sqrt(2.0)
+local pairs = {
+ {100000000000000.01, 100000000000000.011},
+ {100.01, 100.011},
+ {10000000000000.001 / 10000.0, 1000000000.0000001000},
+ {0.001, 0.0010000001},
+ {0.000000000000000000000101, 0.0},
+ {sqrt2 * sqrt2, 2.0},
+ {-sqrt2 * sqrt2, -2.0},
+ {3.14159265358979323846, 3.14159265358979324}
+}
+print($"Approximate equality of test cases for a tolerance of {tol}:")
+for i, pair in pairs do
+ print($" {i} -> {math.abs(pair[1] - pair[2]) < tol}")
+end
diff --git a/Task/Arbitrary-precision-integers-included-/Agena/arbitrary-precision-integers-included-.agena b/Task/Arbitrary-precision-integers-included-/Agena/arbitrary-precision-integers-included-.agena
new file mode 100644
index 0000000000..f0b25b2245
--- /dev/null
+++ b/Task/Arbitrary-precision-integers-included-/Agena/arbitrary-precision-integers-included-.agena
@@ -0,0 +1,25 @@
+scope # calculate 5^4^3^2 using Mike's Arbitrary Precision Math library
+ import mapm; # explicit import needed for: Linux, Mac OS X, Windows and Solaris
+
+ # returns a string containing 5^4^3^2 as calculated by mapm
+ local constant calc5up4up3up2 := proc() is
+ return mapm.xtostring( mapm.xround( mapm.xnumber( 5 ) ^ mapm.xnumber( 4 ^ ( 3 ^ 2 ) ) ) )
+ end;
+
+ # do the calculation with default precision
+ local p := calc5up4up3up2();
+
+ # find the number of digits before the point
+ local d := size( p );
+ local point := "." in p;
+ if point <> null then d := point - 1 fi;
+
+ # redo the calculation with the actual number of required digits ( plus a bit extra )
+ mapm.xdigits( d + 30 );
+ p := calc5up4up3up2();
+ d := size( p );
+ point := "." in p;
+ if point <> null then d := point - 1 fi;
+
+ io.write( "5^4^3^2 has ", d, " digits: ", p[ 1 to 20 ], "...", p[ d - 19 to d ], "\n" )
+end
diff --git a/Task/Arbitrary-precision-integers-included-/BBC-BASIC/arbitrary-precision-integers-included-.basic b/Task/Arbitrary-precision-integers-included-/BBC-BASIC/arbitrary-precision-integers-included-.basic
new file mode 100644
index 0000000000..9b470db7e7
--- /dev/null
+++ b/Task/Arbitrary-precision-integers-included-/BBC-BASIC/arbitrary-precision-integers-included-.basic
@@ -0,0 +1,11 @@
+ 10 INSTALL @lib$ + "bigint"
+ 20 t1 = TIME
+ 30 x = FNbignew(200000)
+ 40 PROCbigval(x, "5")
+ 50 PROCbigpow(x, x, 4^(3^2))
+ 60 x$ = FNbigstr(x)
+ 70 t2 = TIME
+ 80 PRINT "First twenty digits: " LEFT$(x$, 20)
+ 90 PRINT " Last twenty digits: " RIGHT$(x$, 20)
+ 100 PRINT "Total number of digits: "; LEN(x$)
+ 110 PRINT "Approximate run time: "; (t2 - t1) / 100 " seconds"
diff --git a/Task/Arbitrary-precision-integers-included-/Bracmat/arbitrary-precision-integers-included-.bracmat b/Task/Arbitrary-precision-integers-included-/Bracmat/arbitrary-precision-integers-included-.bracmat
index 0cf1eaa821..8b4ca42a92 100644
--- a/Task/Arbitrary-precision-integers-included-/Bracmat/arbitrary-precision-integers-included-.bracmat
+++ b/Task/Arbitrary-precision-integers-included-/Bracmat/arbitrary-precision-integers-included-.bracmat
@@ -1,4 +1,4 @@
{?} @(5^4^3^2:?first [20 ? [-21 ?last [?length)&str$(!first "..." !last "\nlength " !length)
{!} 62060698786608744707...92256259918212890625
length 183231
- S 2,46 sec
+ S 0,11 sec (4372.4475)
diff --git a/Task/Arbitrary-precision-integers-included-/Nim/arbitrary-precision-integers-included-.nim b/Task/Arbitrary-precision-integers-included-/Nim/arbitrary-precision-integers-included-.nim
index 73c032ed08..e7e928169e 100644
--- a/Task/Arbitrary-precision-integers-included-/Nim/arbitrary-precision-integers-included-.nim
+++ b/Task/Arbitrary-precision-integers-included-/Nim/arbitrary-precision-integers-included-.nim
@@ -1,6 +1,8 @@
+# Solution for https://rosettacode.org/wiki/Arbitrary-precision_integers_(included)
import bigints
+import std/math
-var x = 5.pow 4.pow 3.pow 2
+var x = 5.initBigInt.pow 4 ^ (3 ^ 2)
var s = $x
echo s[0..19]
diff --git a/Task/Arbitrary-precision-integers-included-/Pluto/arbitrary-precision-integers-included-.pluto b/Task/Arbitrary-precision-integers-included-/Pluto/arbitrary-precision-integers-included-.pluto
new file mode 100644
index 0000000000..4a5147f062
--- /dev/null
+++ b/Task/Arbitrary-precision-integers-included-/Pluto/arbitrary-precision-integers-included-.pluto
@@ -0,0 +1,10 @@
+local bigint = require "bigint"
+local fmt = require "fmt"
+local p = bigint.new(3) ^ bigint.new(2)
+p = bigint.new(4) ^ p
+p = bigint.new(5) ^ p
+
+local s = p:tostring()
+fmt.print("5 ^ 4 ^ 3 ^ 2 has %s digits.\n", fmt.int(#s))
+print("The first twenty and last twenty are: ")
+print(fmt.abridge(s, 20))
diff --git a/Task/Arbitrary-precision-integers-included-/Rhombus/arbitrary-precision-integers-included-.rhombus b/Task/Arbitrary-precision-integers-included-/Rhombus/arbitrary-precision-integers-included-.rhombus
new file mode 100644
index 0000000000..f8e88ba5fa
--- /dev/null
+++ b/Task/Arbitrary-precision-integers-included-/Rhombus/arbitrary-precision-integers-included-.rhombus
@@ -0,0 +1,5 @@
+def bignum : 5**4**3**2
+def num_length : to_string(bignum).length()
+num_length
+to_string(bignum).substring(..20)
+to_string(bignum).substring(num_length-20..num_length)
diff --git a/Task/Archimedean-spiral/EasyLang/archimedean-spiral.easy b/Task/Archimedean-spiral/EasyLang/archimedean-spiral.easy
index 4fc2177a04..f286d38628 100644
--- a/Task/Archimedean-spiral/EasyLang/archimedean-spiral.easy
+++ b/Task/Archimedean-spiral/EasyLang/archimedean-spiral.easy
@@ -2,11 +2,9 @@ glinewidth 0.4
x0 = 50
y0 = 50
while r < 50
- xp = x
- yp = y
x = r * cos t + x0
y = r * sin t + y0
- if r > 0 : gline xp yp x y
+ glineto x y
r += 0.05
t += 3
.
diff --git a/Task/Arithmetic-Complex/ArkScript/arithmetic-complex.ark b/Task/Arithmetic-Complex/ArkScript/arithmetic-complex.ark
new file mode 100644
index 0000000000..96b3a3957f
--- /dev/null
+++ b/Task/Arithmetic-Complex/ArkScript/arithmetic-complex.ark
@@ -0,0 +1,30 @@
+(import std.Math)
+
+(let a (math:complex 1 1))
+(let b (math:complex 3.75 1.25))
+
+(assert
+ (=
+ (math:complex-add a b)
+ (math:complex 4.75 2.25))
+ "complex add")
+(assert
+ (=
+ (math:complex-mul a b)
+ (math:complex 2.5 5))
+ "complex mul")
+(assert
+ (=
+ (math:complex-mul (math:complex -1 0) a)
+ (math:complex -1 -1))
+ "complex negation")
+(assert
+ (=
+ (math:complex-div (math:complex 1 0) a)
+ (math:complex 0.5 -0.5))
+ "complex inversion")
+(assert
+ (=
+ (math:complex-conjugate a)
+ (math:complex 1 -1))
+ "complex conjugate")
diff --git a/Task/Arithmetic-Complex/DuckDB/arithmetic-complex.duckdb b/Task/Arithmetic-Complex/DuckDB/arithmetic-complex.duckdb
new file mode 100644
index 0000000000..6f63ed0faa
--- /dev/null
+++ b/Task/Arithmetic-Complex/DuckDB/arithmetic-complex.duckdb
@@ -0,0 +1,86 @@
+CREATE TYPE COMPLEX AS STRUCT(r REAL, i REAL);
+
+CREATE OR REPLACE FUNCTION isreal(a) AS (
+ if (try_cast(a as REAL), true, false)
+);
+
+CREATE OR REPLACE FUNCTION tocomplex(a) AS (
+ coalesce( try_cast(a as COMPLEX), {r: a, i:0.0 }::COMPLEX )
+);
+
+CREATE OR REPLACE FUNCTION complex_add_(a, b) AS (
+ {r: a.r + b.r, i:a.i + b.i}
+);
+
+CREATE OR REPLACE FUNCTION complex_add(a, b) AS (
+ complex_add_(tocomplex(a), tocomplex(b))
+);
+
+CREATE OR REPLACE FUNCTION complex_mul_(a, b) AS (
+ {r: a.r * b.r - a.i * b.i, i:a.r * b.i + a.i * b.r}
+);
+
+CREATE OR REPLACE FUNCTION complex_mul(a, b) AS (
+ complex_mul_(tocomplex(a), tocomplex(b))
+);
+
+CREATE OR REPLACE FUNCTION complex_mag(a) AS (
+ case when isreal(a)
+ then abs(a::REAL)
+ else sqrt( (a::COMPLEX).r ^ 2 + (a::COMPLEX).i ^2)
+ end
+);
+
+CREATE OR REPLACE FUNCTION complex_conj(a) AS (
+ case when isreal(a)
+ then {r: a::REAL, i: 0.0}
+ else {r: (a::COMPLEX).r, i: - (a::COMPLEX).i}
+ end
+);
+
+CREATE OR REPLACE FUNCTION complex_mag_squared(x) AS (
+ case when isreal(x)
+ then x::REAL*x::REAL
+ else (x::COMPLEX).r ^ 2 + (x::COMPLEX).i ^ 2
+ end
+);
+
+# Oddly, the a.r notation cannot currently be used here
+CREATE OR REPLACE FUNCTION complex_div_(a, b) AS (
+ WITH denom AS (select complex_mag_squared(b) as denom,
+ a['r'] as ar, a['i'] as ai, b['r'] as br, b['i'] as bi
+ )
+ SELECT {r: (ar * br + ai * bi) / denom,
+ i: (ai * br - ar * bi) / denom }
+ FROM denom
+);
+
+CREATE OR REPLACE FUNCTION complex_div(a, b) AS (
+ complex_div_(tocomplex(a), tocomplex(b))
+);
+
+CREATE OR REPLACE FUNCTION complex_exp_(z) AS (
+ complex_mul_( {r: exp(z.r), i: 0.0}, {r: cos(z.i), i:sin(z.i) })
+);
+
+CREATE OR REPLACE FUNCTION complex_exp(z) AS (
+ if( isreal(z),
+ {r:exp(z::REAL), i:0.0},
+ complex_exp_( tocomplex(z) ) )
+);
+
+## Examples
+.mode line
+CREATE OR REPLACE FUNCTION test(x,y) as table (
+ select x as "x",
+ y as "y",
+ complex_add(x,y) as "add",
+ complex_mul(x,y) as "mul",
+ complex_div(1, x) as "1/x",
+ complex_conj(x) as "conj(x)",
+ complex_div(x,y).complex_mul(y) as "(x/y)*y"
+);
+
+from test({r:1,i:1}, {r:0,i:1} );
+
+select complex_exp( {r:0, i:pi()} ) as "e^iπ";
diff --git a/Task/Arithmetic-Complex/FutureBasic/arithmetic-complex.basic b/Task/Arithmetic-Complex/FutureBasic/arithmetic-complex.basic
new file mode 100644
index 0000000000..e54a45e971
--- /dev/null
+++ b/Task/Arithmetic-Complex/FutureBasic/arithmetic-complex.basic
@@ -0,0 +1,71 @@
+//
+// Arithmetic/Complex
+// Using FutureBasic 7.0.34
+// August 2025, R.W
+
+include "Tlbx complex.incl"
+// through this include file, FB supports the following
+// double complex functions (as of August 2025).
+// Float and long double complex might be
+// available in later versions
+
+//fn creal, cimag, cabs, carg, conj, cproj
+//fn csqrt, cexp, clog, cpow
+//fn csin, ccos, ctan
+//fn casin, cacos, catan
+//fn csinh, ccosh, ctanh
+//fn casinh,cacosh,catanh
+
+// Below is redefining "I" to Cj since I don't want to lose the
+// ability to use "i" as my favorite FOR NEXT / loop variable
+BeginCDeclaration
+#define Cj I
+EndC
+system double Cj
+
+local fn PrintComplexNumber( z as double_complex )
+ double y
+ print @fn creal( z ) " ";
+ y = fn cimag( z )
+ if ( y >= 0.0 ) then print @"+"; : else print @"-";
+ print @abs( y ) "i"
+end fn
+
+window 1,@"Arithmetic/Complex"
+
+double_complex z1, z2, z3, z4, z5, z6
+double_complex z7, z8, z9, zs, zn
+
+z1 = 1.5 + 3 * Cj //1.5 + 3i
+z2 = 1.5 + 1.5 * Cj //1.5 + 1.5i
+
+// Operations using C99 operators
+z3 = z1 + z2 // addition
+z4 = z1 - z2 // subtraction
+z5 = z1 * z2 // multiplication
+z6 = z1 / z2 // division
+//----------------
+z7 = fn conj(z1) // conjugate
+z8 = fn cpow(z1,z2) // power ^
+z9 = fn cabs(z1) // norm | magnitude
+zs = fn csqrt(z1) // square root
+zn = -(z1) // negate
+
+// Extract real/imag parts using creal/cimag
+print @
+print @" z1 + z2 = "; fn creal(z3); " + "; fn cimag(z3); "i"
+print @" z1 - z2 = "; fn creal(z4); " + "; fn cimag(z4); "i"
+print @" z1 * z2 = "; fn creal(z5); " + "; fn cimag(z5); "i"
+print @" z1 / z2 = "; fn creal(z6); " + "; fn cimag(z6); "i"
+print @" Conj z1 = "; fn creal(z7); " "; fn cimag(z7); "i"
+print @" Abs z1 = "; fn creal(z9)
+print @" z1 ^ z2 = ";
+fn PrintComplexNumber(z8)
+print @" cSqrt z1= ";
+fn PrintComplexNumber(zs)
+print @" -(z1) = ";
+fn PrintComplexNumber(zn)
+print @" z1 real = "; fn creal(z1)
+print @" z1 imag = "; fn cimag(z1)
+
+HandleEvents
diff --git a/Task/Arithmetic-Complex/Pluto/arithmetic-complex.pluto b/Task/Arithmetic-Complex/Pluto/arithmetic-complex.pluto
new file mode 100644
index 0000000000..f2f68b630f
--- /dev/null
+++ b/Task/Arithmetic-Complex/Pluto/arithmetic-complex.pluto
@@ -0,0 +1,15 @@
+require "complex"
+local fmt = require "fmt"
+
+local x = new complex(1, 3)
+local y = new complex(5, 2)
+
+fmt.print("x = %s", x)
+fmt.print("y = %s", y)
+fmt.print("x + y = %s", x + y)
+fmt.print("x - y = %s", x - y)
+fmt.print("x * y = %s", x * y)
+fmt.print("x / y = %s", x / y)
+fmt.print("-x = %s", -x)
+fmt.print("1 / x = %s", x:inverse())
+fmt.print("x* = %s", x:conj())
diff --git a/Task/Arithmetic-Complex/REXX/arithmetic-complex.rexx b/Task/Arithmetic-Complex/REXX/arithmetic-complex.rexx
index 7c72a01f37..e174652042 100644
--- a/Task/Arithmetic-Complex/REXX/arithmetic-complex.rexx
+++ b/Task/Arithmetic-Complex/REXX/arithmetic-complex.rexx
@@ -1,4 +1,4 @@
--- 19 May 2025
+-- 7 Aug 2025
include Settings
say 'COMPLEX ARITHMETIC'
@@ -6,48 +6,45 @@ say version
say
a = '1 2'; b = '3 4'; c = '5 6'; d = '7 8'; i = I()
say 'VALUES'
-say 'a =' crec2form(a)
-say 'b =' crec2form(b)
-say 'c =' crec2form(c)
-say 'd =' crec2form(d)
+say 'a =' Rec2FormC(a)
+say 'b =' Rec2FormC(b)
+say 'c =' Rec2FormC(c)
+say 'd =' Rec2FormC(d)
say
say 'BASICS'
-say 'i*i =' crec2form(Csquare(i()))
-say 'a+b =' crec2form(Cadd(a,b))
-say 'a-b =' crec2form(Csub(a,b))
-say 'a*b =' crec2form(Cmul(a,b))
-say 'a/b =' crec2form(Cdiv(a,b))
-say 'a^2 =' crec2form(Csquare(a,2))
-say 'a^5 =' crec2form(Cpow(a,5))
-say '-a =' crec2form(Cneg(a))
-say '1/a =' crec2form(Cinv(a))
-say 'a+b+c+d =' crec2form(Cadd(a,b,c,d))
-say 'a-b-c-d =' crec2form(Csub(a,b,c,d))
-say 'a*b*c*d =' crec2form(Cmul(a,b,c,d))
-say 'a/b/c/d =' crec2form(Cnormal(Cdiv(a,b,c,d)))
+say 'i*i =' Rec2FormC(SquareC(i()))
+say 'a+b =' Rec2FormC(AddC(a,b))
+say 'a-b =' Rec2FormC(SubC(a,b))
+say 'a*b =' Rec2FormC(MulC(a,b))
+say 'a/b =' Rec2FormC(DivC(a,b))
+say 'a^2 =' Rec2FormC(SquareC(a,2))
+say 'a^5 =' Rec2FormC(PowC(a,5))
+say '-a =' Rec2FormC(NegC(a))
+say '1/a =' Rec2FormC(InvC(a))
+say 'a+b+c+d =' Rec2FormC(AddC(a,b,c,d))
+say 'a-b-c-d =' Rec2FormC(SubC(a,b,c,d))
+say 'a*b*c*d =' Rec2FormC(MulC(a,b,c,d))
+say 'a/b/c/d =' Rec2FormC(Normal(DivC(a,b,c,d)))
say
say 'FORMULA'
say 'a^2-2ab+3c-4ad^4+5 =' ,
-crec2form(Cadd(Csquare(a),Cmul(-2,a,b),Cmul(3,c),Cmul(-4,a,Cpower(d,4)),5))
+Rec2FormC(AddC(SquareC(a),MulC(-2,a,b),MulC(3,c),MulC(-4,a,PowerC(d,4)),5))
say
say 'BONUS'
-say 'Argument(a) =' Carg(a)+0
-say 'Conjugate(a) =' crec2form(Cconj(a))
-say 'Imag(a) =' Cim(a)
-say 'Modulus(a) =' Cmod(a)+0
-say 'Polar(a) =' Cpol2form(Cnormal(Crec2pol(a)))
-say 'Real(a) =' Cre(a)
+say 'Argument(a) =' ArgC(a)+0
+say 'Conjugate(a) =' Rec2FormC(ConjC(a))
+say 'Imag(a) =' ImC(a)
+say 'Modulus(a) =' ModC(a)+0
+say 'Polar(a) =' Pol2FormC(Normal(Rec2PolC(a)))
+say 'Real(a) =' ReC(a)
say
say 'MORE'
-say 'Arcsin(a) =' crec2form(Cnormal(Carcsin(a)))
-say 'Exp(a) =' crec2form(Cnormal(Cexp(a)))
-say 'Ln(a) =' crec2form(Cnormal(Cln(a)))
-say 'Sin(a) =' crec2form(Cnormal(Csin(a)))
-say 'Sqrt(a) =' crec2form(Cnormal(Csqrt(a)))
-say 'i^i =' crec2form(Cnormal(Cpower(i,i)))
+say 'Arcsin(a) =' Rec2FormC(Normal(ArcSinC(a)))
+say 'Exp(a) =' Rec2FormC(Normal(ExpC(a)))
+say 'Ln(a) =' Rec2FormC(Normal(LnC(a)))
+say 'Sin(a) =' Rec2FormC(Normal(SinC(a)))
+say 'Sqrt(a) =' Rec2FormC(Normal(SqRtC(a)))
+say 'i^i =' Rec2FormC(Normal(PowerC(i,i)))
exit
-include Complex
-include Functions
-include Constants
-include Abend
+include Math
diff --git a/Task/Arithmetic-Integer/ArkScript/arithmetic-integer.ark b/Task/Arithmetic-Integer/ArkScript/arithmetic-integer.ark
new file mode 100644
index 0000000000..1fa6546301
--- /dev/null
+++ b/Task/Arithmetic-Integer/ArkScript/arithmetic-integer.ark
@@ -0,0 +1,10 @@
+(let a 4)
+(let b 5)
+
+(assert (= (+ a b) 9) "sum")
+(assert (= (- a b) -1) "difference")
+(assert (= (- b a) 1) "difference")
+(assert (= (* a b) 20) "product")
+(assert (= (/ a b) 0.8) "quotient")
+(assert (= (mod a b) 4) "remainder(a, b)")
+(assert (= (mod b a) 1) "remainder(b, a)")
diff --git a/Task/Arithmetic-Integer/DuckDB/arithmetic-integer.duckdb b/Task/Arithmetic-Integer/DuckDB/arithmetic-integer.duckdb
new file mode 100644
index 0000000000..bdde026f71
--- /dev/null
+++ b/Task/Arithmetic-Integer/DuckDB/arithmetic-integer.duckdb
@@ -0,0 +1,3 @@
+SELECT x, y, (x+y), (x-y), (x*y), x // y, mod(x,y), exp(x)
+ FROM read_csv_auto('rc-arithmetic-integer.txt', header=false,
+ columns={'x': 'HUGEINT', 'y': 'HUGEINT'}) ;
diff --git a/Task/Arithmetic-Integer/Elena/arithmetic-integer.elena b/Task/Arithmetic-Integer/Elena/arithmetic-integer.elena
index d0e5d67143..71357b0182 100644
--- a/Task/Arithmetic-Integer/Elena/arithmetic-integer.elena
+++ b/Task/Arithmetic-Integer/Elena/arithmetic-integer.elena
@@ -3,13 +3,13 @@ import extensions;
public program()
{
- var a := console.loadLineTo(new Integer());
- var b := console.loadLineTo(new Integer());
+ var a := Console.loadLineTo(new Integer());
+ var b := Console.loadLineTo(new Integer());
- console.printLine(a," + ",b," = ",a + b);
- console.printLine(a," - ",b," = ",a - b);
- console.printLine(a," * ",b," = ",a * b);
- console.printLine(a," / ",b," = ",a / b); // truncates towards 0
- console.printLine(a," % ",b," = ",a.mod(b)); // matches sign of first operand
- console.printLine(a," ^ ",b," = ",a ^ b);
+ Console.printLine(a," + ",b," = ",a + b);
+ Console.printLine(a," - ",b," = ",a - b);
+ Console.printLine(a," * ",b," = ",a * b);
+ Console.printLine(a," / ",b," = ",a / b); // truncates towards 0
+ Console.printLine(a," % ",b," = ",a.mod(b)); // matches sign of first operand
+ Console.printLine(a," ^ ",b," = ",a ^ b);
}
diff --git a/Task/Arithmetic-Integer/Haxe/arithmetic-integer.haxe b/Task/Arithmetic-Integer/Haxe/arithmetic-integer.haxe
index d18971aa92..513ff1c6ea 100644
--- a/Task/Arithmetic-Integer/Haxe/arithmetic-integer.haxe
+++ b/Task/Arithmetic-Integer/Haxe/arithmetic-integer.haxe
@@ -1,13 +1,16 @@
-class BasicIntegerArithmetic {
- public static function main() {
- var args =Sys.args();
- if (args.length < 2) return;
- var a = Std.parseFloat(args[0]);
- var b = Std.parseFloat(args[1]);
- trace("a+b = " + (a+b));
- trace("a-b = " + (a-b));
- trace("a*b = " + (a*b));
- trace("a/b = " + (a/b));
- trace("a%b = " + (a%b));
+class Main {
+ static public function main():Void {
+ var input_a = Sys.stdin().readLine();
+ var input_b = Sys.stdin().readLine();
+
+ var a = Std.parseInt(input_a);
+ var b = Std.parseInt(input_b);
+
+ trace(a + b);
+ trace(a - b);
+ trace(a * b);
+ trace(Std.int(a / b));
+ trace(a % b);
+ trace(Math.pow(a, b));
}
}
diff --git a/Task/Arithmetic-Integer/Pascal/arithmetic-integer.pas b/Task/Arithmetic-Integer/Pascal/arithmetic-integer.pas
index 0f5806a811..28040742b4 100644
--- a/Task/Arithmetic-Integer/Pascal/arithmetic-integer.pas
+++ b/Task/Arithmetic-Integer/Pascal/arithmetic-integer.pas
@@ -1,5 +1,7 @@
program arithmetic(input, output)
-
+{$IFDEF FPC}
+ uses math;
+{$ENDIF}
var
a, b: integer;
diff --git a/Task/Arithmetic-Integer/Pluto/arithmetic-integer.pluto b/Task/Arithmetic-Integer/Pluto/arithmetic-integer.pluto
new file mode 100644
index 0000000000..5e35d1e3bc
--- /dev/null
+++ b/Task/Arithmetic-Integer/Pluto/arithmetic-integer.pluto
@@ -0,0 +1,13 @@
+local function divmod(a, b) return { a // b, a % b } end
+
+io.write("Input the first integer : ")
+local a = io.read("n")
+io.write("Input the second integer: ")
+local b = io.read("n")
+print($"sum: {a + b}")
+print($"difference {a - b}")
+print($"product {a * b}")
+print($"quotient {a // b}")
+print($"remainder {a % b}")
+print($"exponentation {math.tointeger(a ^ b)}")
+print($"divmod {divmod(a, b):concat(", ")}")
diff --git a/Task/Arithmetic-Integer/RISC-V-Assembly/arithmetic-integer.asm b/Task/Arithmetic-Integer/RISC-V-Assembly/arithmetic-integer.asm
new file mode 100644
index 0000000000..a65eff3a1e
--- /dev/null
+++ b/Task/Arithmetic-Integer/RISC-V-Assembly/arithmetic-integer.asm
@@ -0,0 +1,146 @@
+# riscv assembly raspberry pico2 rp2350
+# program arith.s
+# connexion putty com3
+/*********************************************/
+/* CONSTANTES */
+/********************************************/
+/* for this file see risc-v task include a file */
+.include "../../constantesRiscv.inc"
+
+/*******************************************/
+/* INITIALED DATAS */
+/*******************************************/
+.data
+szMessStart: .asciz "Program riscv start.\r\n"
+szCariageReturn: .asciz "\r\n"
+szMessAdd: .asciz "Addition result :\r\n"
+szMessSub: .asciz "Substraction result :\r\n"
+szMessMul: .asciz "Multiplication result :\r\n"
+szMessDiv: .asciz "Division result :\r\n"
+szMessRem: .asciz "Division remainder :\r\n"
+.align 2
+#tabValues: .int 1,2,3,4
+
+/*******************************************/
+/* UNINITIALED DATA */
+/*******************************************/
+.bss
+.align 2
+sConvArea: .skip 24
+
+/**********************************************/
+/* SECTION CODE */
+/**********************************************/
+.text
+.global main
+
+main:
+ call stdio_init_all # général init
+1: # start loop connexion
+ li a0,0 # raz argument register
+ call tud_cdc_n_connected # waiting for USB connection
+ beqz a0,1b # return code = zero ?
+
+ la a0,szMessStart # message address
+ call writeString # display message
+
+ la a0,szMessAdd # addition
+ call writeString # display message
+ li t0,10
+ addi a0,t0,1 # add immediat number
+ call displayResult
+ li s0,15
+ li s1,8
+ add a0,s0,s1 # register add
+ call displayResult
+
+ la a0,szMessSub # subtraction
+ call writeString # display message
+ addi a0,s0,-6 # substract immediat number
+ call displayResult
+ sub a0,s0,s1 # substract register s1 to s0
+ call displayResult
+
+ la a0,szMessMul # multiplication
+ call writeString # display message
+ mul a0,s0,s1 # multiplication register
+ call displayResult
+ li s0,12345678
+ li s1,23456789
+ mul a0,s0,s1 # multiplication register
+ call displayResult
+ mulh a0,s0,s1 # Multiply signed (32) by signed (32), return upper 32 bits of the 64-bit result.
+ call displayResult
+ mulhsu a0,s0,s1 # Multiply signed (32) by unsigned (32), return upper 32 bits of the 64-bit result.
+ call displayResult
+ mulhu a0,s0,s1 # Multiply unsigned (32) by unsigned (32), return upper 32 bits of the 64-bit result.
+ call displayResult
+
+ la a0,szMessDiv # division
+ call writeString # display message
+ li s0,-25
+ li s1,8
+ div a0,s0,s1 # divide signed
+ call displayResultS
+ li s0,-25
+ li s1,8
+ divu a0,s0,s1 # Divide (unsigned)
+ call displayResult
+
+ la a0,szMessRem # division
+ call writeString # display message
+ li s0,-10
+ li s1,8
+ rem a0,s0,s1 # Remainder (signed).
+ call displayResultS
+ li s0,-10
+ li s1,8
+ remu a0,s0,s1 # Remainder (unsigned).
+ call displayResult
+
+ call getchar
+100: # final loop
+ j 100b
+
+/**********************************************/
+/* display result unsigned */
+/**********************************************/
+/* a0 value */
+.equ LGZONECONV, 20
+displayResult:
+ addi sp, sp, -4 # reserve stack
+ sw ra, 0(sp)
+ la a1,sConvArea # conversion result address
+ call conversion10 # conversion decimal
+ la a0,sConvArea # message address
+ call writeString # display message
+ la a0,szCariageReturn
+ call writeString
+100:
+ lw ra, 0(sp)
+ addi sp, sp, 4
+ ret
+/**********************************************/
+/* displayResult signed */
+/**********************************************/
+/* a0 value */
+.equ LGZONECONV, 20
+displayResultS:
+ addi sp, sp, -4 # reserve stack
+ sw ra, 0(sp)
+ la a1,sConvArea # conversion result address
+ call conversion10S # conversion decimal
+ la a0,sConvArea # message address
+ call writeString # display message
+ la a0,szCariageReturn
+ call writeString
+100:
+ lw ra, 0(sp)
+ addi sp, sp, 4
+ ret
+
+/************************************/
+/* file include Fonctions */
+/***********************************/
+/* for this file see risc-v task include a file */
+.include "../../includeFunctions.s"
diff --git a/Task/Arithmetic-Integer/Red/arithmetic-integer.red b/Task/Arithmetic-Integer/Red/arithmetic-integer.red
new file mode 100644
index 0000000000..91d6bce211
--- /dev/null
+++ b/Task/Arithmetic-Integer/Red/arithmetic-integer.red
@@ -0,0 +1,42 @@
+Red [ "Arithmetic / Integers" ]
+
+;-- Modulo and // in Red are Euclidean modulo, so the correct integer (Euclidean) division must satisfy:
+; a = b * div(a,b) + mod(a,b)
+; with 0 <= mod(a,b) < |b|
+; This is a custom operator to accompany the built-in Euclidean modulo
+ediv: make op! function [a b] [
+ either b > 0
+ [ to-integer round/floor a / b ] ;b > 0: floor toward -inf
+ [ to-integer round/ceiling a / b ] ;b < 0: ceiling toward +inf
+]
+; Python-style divmod:
+edivmod: make op! function [a b] [ compose [(a ediv b) (a // b)] ]
+
+;-- C-style truncated integer division:
+quot: make op! function [a b] [ to-integer a / b ] ;truncated toward zero
+; Haskell-style quotrem:
+quotrem: make op! function [a b] [ compose [(a quot b) (a % b)] ]; reduce [a quot b a % b] ] ; rounds -> 0
+
+while [(s: ask "^/Enter two integer separated with space (q = quit): ") <> "q"] [
+ s: load rejoin ["[" s "]"] a: s/1 b: s/2
+
+ print ["Sum :" a "+" b " = " a + b]
+ print ["Difference :" a "-" b " = " a - b]
+ print ["Product :" a "*" b " = " a * b]
+
+ print "^/Red's Euclidean Division:"
+ print ["eDiv :" a "eDiv " b " = " a eDiv b]
+ print ["modulo : modulo" a b " = " modulo a b] ;non-negative
+ print ["// :" a "//" b " = " a // b] ;operator form
+ print ["eDivMod :" a "eDivMod" b "= " mold a eDivMod b]
+ print rejoin ["Check: ("a" eDiv " b") * "b" + ("a" // "b") = "a" ? " (a eDiv b) * b + (a // b) = a]
+
+ print "^/Red's C-style truncated integer division:"
+ print ["quot :" a "quot" b " = " a quot b]
+ print ["remainder : remainder" a b " = " remainder a b] ;sign as dividend
+ print ["% :" a "%" b " = " a % b] ;operator form
+ print ["quotRem :" a "quotRem" b " = " mold a quotRem b]
+ print rejoin ["Check: ("a" quot " b") * "b" + ("a" % "b") = "a" ? " (a quot b) * b + (a % b) = a]
+
+ print ["^/Exponentiation :" a "**" b " = " a ** b]
+]
diff --git a/Task/Arithmetic-Integer/TAV/arithmetic-integer.tav b/Task/Arithmetic-Integer/TAV/arithmetic-integer.tav
new file mode 100644
index 0000000000..3077c59f4c
--- /dev/null
+++ b/Task/Arithmetic-Integer/TAV/arithmetic-integer.tav
@@ -0,0 +1,11 @@
+ a, b =: 6, 4
+ print 'a + b =', a + b
+ print 'a - b =', a - b
+ print 'a * b =', a * b
+ print 'a // b =', a // b \ integer division is %%
+ print 'a %% b =', a %% b \ usual modulus
+ print 'a ^ b =', a ^ b
+ qr =: a // b, a %% b \ operator /% rarely used, not implemented
+ print 'a /% b =', join qr by ','
+ r =: a / b \ rational result
+ print r, r.num, r.den \ number, numerator, denominator
diff --git a/Task/Arithmetic-Integer/Zig/arithmetic-integer.zig b/Task/Arithmetic-Integer/Zig/arithmetic-integer.zig
index 564d8cc2b4..17f6f7d217 100644
--- a/Task/Arithmetic-Integer/Zig/arithmetic-integer.zig
+++ b/Task/Arithmetic-Integer/Zig/arithmetic-integer.zig
@@ -1,23 +1,26 @@
const std = @import("std");
pub fn main() !void {
- var buf: [1024]u8 = undefined;
- const reader = std.io.getStdIn().reader();
const stdout = std.io.getStdOut().writer();
- try stdout.writeAll("Enter two integers separated by a space: ");
- const input = try reader.readUntilDelimiter(&buf, '\n');
- const text = std.mem.trimRight(u8, input, "\r\n");
+ const stdin = std.io.getStdIn().reader();
+ var buff = [_]u8{0} ** 1024;
- var it = std.mem.tokenizeScalar(u8, text, ' ');
+ try stdout.print("Value of a: ", .{});
+ const input_a: ?[]u8 = try stdin.readUntilDelimiterOrEof(buff[0..], '\n');
+ const trimmed_a = std.mem.trimEnd(u8, input_a.?, "\r"); // for Windows
+ const a = try std.fmt.parseInt(i32, trimmed_a, 10);
- const a = try std.fmt.parseInt(i64, it.next().?, 10);
- const b = try std.fmt.parseInt(i64, it.next().?, 10);
+ try stdout.print("Value of b: ", .{});
+ const input_b: ?[]u8 = try stdin.readUntilDelimiterOrEof(buff[0..], '\n');
+ const trimmed_b = std.mem.trimEnd(u8, input_b.?, "\r"); // for Windows
+ const b = try std.fmt.parseInt(i32, trimmed_b, 10);
- try stdout.print("Values: a {d} b {d}\n", .{a, b});
- try stdout.print("Sum: a + b = {d}\n", .{a + b});
- try stdout.print("Difference: a - b = {d}\n", .{a - b});
- try stdout.print("Product: a * b = {d}\n", .{a * b});
- try stdout.print("Integer quotient: a / b = {d}\n", .{@divTrunc(a, b)}); //truncates towards 0
- try stdout.print("Remainder: a % b = {d}\n", .{@rem(a, b)}); // same sign as first operand
- try stdout.print("Exponentiation: math.pow = {d}\n", .{std.math.pow(i64, a, b)}); //no exponentiation operator
+ try stdout.print("a + b = {d}\n", .{a + b});
+ try stdout.print("a - b = {d}\n", .{a - b});
+ try stdout.print("a * b = {d}\n", .{a * b});
+ try stdout.print("a / b (floor) = {d}\n", .{@divFloor(a, b)});
+ try stdout.print("a / b (trunk) = {d}\n", .{@divTrunc(a, b)});
+ try stdout.print("a % b (mod) = {d}\n", .{@mod(a, b)});
+ try stdout.print("a % b (rem) = {d}\n", .{@rem(a, b)});
+ try stdout.print("a ^ b = {d}\n", .{std.math.pow(i32, a, b)});
}
diff --git a/Task/Arithmetic-Rational/Pluto/arithmetic-rational.pluto b/Task/Arithmetic-Rational/Pluto/arithmetic-rational.pluto
new file mode 100644
index 0000000000..cdf2393f77
--- /dev/null
+++ b/Task/Arithmetic-Rational/Pluto/arithmetic-rational.pluto
@@ -0,0 +1,12 @@
+local int = require "int"
+require "rat"
+
+local one = rat.of(1)
+print("The following numbers (less than 2^19) are perfect:")
+for i = 2, (1 << 19) - 1 do
+ local sum = rat.of(1, i)
+ local divs = int.divisors(i, true)
+ divs:remove(1)
+ for divs as j do sum += rat.of(1, j) end
+ if sum == one then print($" {i}") end
+end
diff --git a/Task/Arithmetic-Rational/REXX/arithmetic-rational.rexx b/Task/Arithmetic-Rational/REXX/arithmetic-rational.rexx
index a7f3438a50..bde84235e2 100644
--- a/Task/Arithmetic-Rational/REXX/arithmetic-rational.rexx
+++ b/Task/Arithmetic-Rational/REXX/arithmetic-rational.rexx
@@ -1,64 +1,63 @@
+-- 28 Jul 2025
include Settings
-say 'RATIONAL ARITHMETIC - 2 Mar 2025'
+say 'RATIONAL ARITHMETIC'
say version
say
a = '1 2'; b = '-3 4'; c = '5 -6'; d = '-7 -8'; e = 3; f = 1.666666666
say 'VALUES'
-say 'a =' Rlst2form(a)
-say 'b =' Rlst2form(b)
-say 'c =' Rlst2form(c)
-say 'd =' Rlst2form(d)
+say 'a =' Lst2FormQ(a)
+say 'b =' Lst2FormQ(b)
+say 'c =' Lst2FormQ(c)
+say 'd =' Lst2FormQ(d)
say 'e =' e
say 'f =' f
say
say 'BASICS'
-say 'a+b =' Rlst2form(Radd(a,b))
-say 'a+b+c+d =' Rlst2form(Radd(a,b,c,d))
-say 'a-b =' Rlst2form(Rsub(a,b))
-say 'a-b-c-d =' Rlst2form(Rsub(a,b,c,d))
-say 'a*b =' Rlst2form(Rmul(a,b))
-say 'a*b*c*d =' Rlst2form(Rmul(a,b,c,d))
-say 'a/b =' Rlst2form(Rdiv(a,b))
-say 'a/b/c/d =' Rlst2form(Rdiv(a,b,c,d))
-say '-a =' Rlst2form(Rneg(a))
-say '1/a =' Rlst2form(Rinv(a))
+say 'a+b =' Lst2FormQ(AddQ(a,b))
+say 'a+b+c+d =' Lst2FormQ(AddQ(a,b,c,d))
+say 'a-b =' Lst2FormQ(SubQ(a,b))
+say 'a-b-c-d =' Lst2FormQ(SubQ(a,b,c,d))
+say 'a*b =' Lst2FormQ(MulQ(a,b))
+say 'a*b*c*d =' Lst2FormQ(MulQ(a,b,c,d))
+say 'a/b =' Lst2FormQ(DivQ(a,b))
+say 'a/b/c/d =' Lst2FormQ(DivQ(a,b,c,d))
+say '-a =' Lst2FormQ(NegQ(a))
+say '1/a =' Lst2FormQ(InvQ(a))
say
-say 'COMPARE'
-say 'a=b =' Rge(a,b)
-say 'a>b =' Rgt(a,b)
-say 'a<>b =' Rne(a,b)
+say 'Compare'
+say 'a=b =' GeQ(a,b)
+say 'a>b =' GtQ(a,b)
+say 'a<>b =' NeQ(a,b)
say
say 'BONUS'
-say 'Abs(c) =' Rlst2form(Rabs(c))
-say 'Float(b) =' Rfloat(b)
-say 'Neg(d) =' Rlst2form(Rneg(d))
-say 'Power(a,e) =' Rlst2form(Rpow(a,e))
-say 'Rational(f) =' Rlst2form(Rrat(f))
+say 'Abs(c) =' Lst2FormQ(AbsQ(c))
+say 'Float(b) =' FloatQ(b)
+say 'Neg(d) =' Lst2FormQ(NegQ(d))
+say 'Power(a,e) =' Lst2FormQ(PowQ(a,e))
+say 'Rational(f) =' Lst2FormQ(RatQ(f))
say
say 'FORMULA'
say 'a^2-2ab+3c-4ad^4+5 = ',
-Rlst2form(Radd(Rpow(a,2),Rmul(-2,a,b),Rmul(3,c),Rmul(-4,a,Rpow(d,4)),5))
+Lst2FormQ(AddQ(PowQ(a,2),MulQ(-2,a,b),MulQ(3,c),MulQ(-4,a,PowQ(d,4)),5))
say
-say 'PERFECT NUMBERS'
-call time('r')
+say 'Perfect numbers'
+call Time('r')
numeric digits 20
do c = 6 to 2**19
s = 1 c; m = Isqrt(c)
do f = 2 to m
if c//f = 0 then do
- s = Radd(s,1 f,1 c/f)
+ s = AddQ(s,1 f,1 c/f)
end
end
- if Req(s,1) then
+ if EqQ(s,1) then
say c 'is a perfect number'
end
-say time('e')/1's'
+say Time('e')/1's'
exit
-include Rational
-include Functions
-include Abend
+include Math
diff --git a/Task/Arithmetic-derivative/Bc/arithmetic-derivative.bc b/Task/Arithmetic-derivative/Bc/arithmetic-derivative.bc
new file mode 100644
index 0000000000..2fd8905b3f
--- /dev/null
+++ b/Task/Arithmetic-derivative/Bc/arithmetic-derivative.bc
@@ -0,0 +1,25 @@
+define d(n) {
+ auto f
+ if(n<0) return -d(-n)
+ if(n<2) return 0
+ s = 0
+ r = n
+ for(f=2;f<=r;f++) {
+ while(r%f==0){
+ r /= f
+ s += n / f
+ }
+ }
+ return s
+}
+
+define padl(n,f) {
+ for(i=0;i
- $40 { // (
+ $40 : { // (
^ weak self.newBracket().gotoStarting()
}
- ! {
+ ! : {
^ weak self.newToken().append(ch).gotoToken()
}
}
@@ -108,22 +108,22 @@ singleton tokenState
eval(ch)
{
ch =>
- $41 { // )
+ $41 : { // )
^ weak self.closeBracket().gotoToken()
}
- $42 { // *
+ $42 : { // *
^ weak self.newProduct().gotoOperator()
}
- $43 { // +
+ $43 : { // +
^ weak self.newSummary().gotoOperator()
}
- $45 { // -
+ $45 : { // -
^ weak self.newDifference().gotoOperator()
}
- $47 { // /
+ $47 : { // /
^ weak self.newFraction().gotoOperator()
}
- ! {
+ ! : {
^ weak self.append(ch)
}
}
@@ -134,13 +134,13 @@ singleton startState
eval(ch)
{
ch =>
- $40 { // (
+ $40 : { // (
^ weak self.newBracket().gotoStarting()
}
- $45 { // -
+ $45 : { // -
^ weak self.newToken().append("0").newDifference().gotoOperator()
}
- ! {
+ ! : {
^ weak self.newToken().append(ch).gotoToken()
}
}
@@ -148,11 +148,11 @@ singleton startState
class Scope
{
- object _state;
- int _level;
- object _parser;
- object _token;
- object _expression;
+ object _state;
+ int _level;
+ object _parser;
+ object? _token;
+ object _expression;
constructor new(parser)
{
@@ -327,15 +327,15 @@ public program()
var text := new StringWriter();
var parser := new Parser();
- while (console.readLine().writeTo(text).Length > 0)
+ while (Console.readLine().writeTo(text).Length > 0)
{
try
{
- console.printLine("=",parser.run(text))
+ Console.printLine("=",parser.run(text))
}
catch(Exception e)
{
- console.writeLine("Invalid Expression")
+ Console.writeLine("Invalid Expression")
};
text.clear()
diff --git a/Task/Arithmetic-evaluation/PascalABC.NET/arithmetic-evaluation.pas b/Task/Arithmetic-evaluation/PascalABC.NET/arithmetic-evaluation.pas
new file mode 100644
index 0000000000..b19c2a67d1
--- /dev/null
+++ b/Task/Arithmetic-evaluation/PascalABC.NET/arithmetic-evaluation.pas
@@ -0,0 +1,127 @@
+type
+ IExprNode = interface
+ function Evaluate: real;
+ end;
+
+ NumberNode = auto class(IExprNode)
+ public
+ value: real;
+ function Evaluate: real := value;
+ end;
+
+ BinaryOpNode = auto class(IExprNode)
+ public
+ op: char;
+ left, right: IExprNode;
+
+ function Evaluate: real;
+ begin
+ case op of
+ '+': Result := left.Evaluate + right.Evaluate;
+ '-': Result := left.Evaluate - right.Evaluate;
+ '*': Result := left.Evaluate * right.Evaluate;
+ '/': Result := left.Evaluate / right.Evaluate;
+ else
+ raise new Exception($'Unknown operator {op}');
+ end;
+ end;
+ end;
+
+ ExpressionParser = class
+ s: string;
+ pos: integer;
+
+ constructor Create(input: string);
+ begin
+ s := input;
+ pos := 1;
+ end;
+
+ function NextChar: char :=
+ if pos <= s.Length then s[pos] else #0;
+
+ procedure SkipSpaces :=
+ while NextChar = ' ' do pos += 1;
+
+ function ParseNumber: IExprNode;
+ begin
+ SkipSpaces;
+ var start := pos;
+ while NextChar.IsDigit do pos += 1;
+ if NextChar = '.' then
+ begin
+ pos += 1;
+ while NextChar.IsDigit do pos += 1;
+ end;
+ var value := s[start:pos].ToReal;
+ Result := new NumberNode(value);
+ end;
+
+ function ParseFactor: IExprNode;
+ begin
+ SkipSpaces;
+ if NextChar = '(' then
+ begin
+ pos += 1;
+ Result := ParseExpr;
+ SkipSpaces;
+ if NextChar = ')' then
+ pos += 1
+ else raise new Exception('Expected )');
+ end
+ else
+ Result := ParseNumber;
+ end;
+
+ function ParseTerm: IExprNode;
+ begin
+ Result := ParseFactor;
+ while true do
+ begin
+ SkipSpaces;
+ var ch := NextChar;
+ if (ch = '*') or (ch = '/') then
+ begin
+ pos += 1;
+ Result := new BinaryOpNode(ch, Result, ParseFactor);
+ end
+ else break;
+ end;
+ end;
+
+ function ParseExpr: IExprNode;
+ begin
+ Result := ParseTerm;
+ while true do
+ begin
+ SkipSpaces;
+ var ch := NextChar;
+ if (ch = '+') or (ch = '-') then
+ begin
+ pos += 1;
+ Result := new BinaryOpNode(ch, Result, ParseTerm);
+ end
+ else break;
+ end;
+ end;
+
+ function Parse: IExprNode := ParseExpr;
+
+ end;
+
+begin
+ var inputs := [
+ '2+3*(4-1)',
+ '10 + 2 / 3',
+ '(7+3)*(2+2)',
+ '8*(5+(2-3))',
+ '1/3',
+ '2.5 + 4.1 * (3 - 1.1/2)'];
+
+ foreach var expr in inputs do
+ begin
+ var parser := new ExpressionParser(expr);
+ var tree := parser.Parse;
+ Println($'{expr} = {tree.Evaluate:0.###}');
+ end;
+end.
diff --git a/Task/Arithmetic-evaluation/Perl/arithmetic-evaluation.pl b/Task/Arithmetic-evaluation/Perl/arithmetic-evaluation-1.pl
similarity index 100%
rename from Task/Arithmetic-evaluation/Perl/arithmetic-evaluation.pl
rename to Task/Arithmetic-evaluation/Perl/arithmetic-evaluation-1.pl
diff --git a/Task/Arithmetic-evaluation/Perl/arithmetic-evaluation-2.pl b/Task/Arithmetic-evaluation/Perl/arithmetic-evaluation-2.pl
new file mode 100644
index 0000000000..47161a8da0
--- /dev/null
+++ b/Task/Arithmetic-evaluation/Perl/arithmetic-evaluation-2.pl
@@ -0,0 +1,49 @@
+#!/usr/bin/perl
+
+use strict; # https://rosettacode.org/wiki/Arithmetic_evaluation
+use warnings;
+
+sub node { bless [ splice @_, 1 ], shift }
+sub error { die s/\G.*//sr =~ tr/\t/ /cr, "^ @_ !\n" }
+sub want { /\G$_[1]/gc ? shift : error pop }
+
+sub expr
+ {
+ /\G\h+/gc;
+ my $ast =
+ /\G\d+/gc ? node NUMBER => $& :
+ /\G\(/gc ? want expr(0), qr/\)/, 'Missing Right Paren' :
+ error 'Operand Expected';
+ /\G\h+/gc, $ast =
+ $_[0] <= 0 && /\G\+/gc ? node ADD => $ast, expr(1) :
+ $_[0] <= 0 && /\G\-/gc ? node SUBTRACT => $ast, expr(1) :
+ $_[0] <= 1 && /\G\*/gc ? node MULTIPLY => $ast, expr(2) :
+ $_[0] <= 1 && /\G\//gc ? node DIVIDE => $ast, expr(2) :
+ return $ast while 1;
+ }
+
+sub ADD::value { $_[0][0]->value + $_[0][1]->value }
+sub SUBTRACT::value { $_[0][0]->value - $_[0][1]->value }
+sub MULTIPLY::value { $_[0][0]->value * $_[0][1]->value }
+sub DIVIDE::value { $_[0][0]->value / $_[0][1]->value }
+sub NUMBER::value { $_[0][0] }
+
+sub NUMBER::show { "$_[0][0]\n" }
+sub UNIVERSAL::show
+ { ref($_[0]) . "\n" . join('', map $_->show, @{$_[0]}) =~ s/^/ /gmr }
+
+while( )
+ {
+ eval
+ {
+ print;
+ my $ast = want expr(0), "\n", 'Incomplete Parse';
+ print $ast->show, "value of ast = ", $ast->value, "\n\n";
+ } or print "$@\n";
+ }
+
+__DATA__
+(1+3)*7
+2 * 3 + 4 * 5
+2 + 3 * 4 + 5
+2 + 3 ** 4 + 5
diff --git a/Task/Arithmetic-evaluation/Red/arithmetic-evaluation.red b/Task/Arithmetic-evaluation/Red/arithmetic-evaluation.red
new file mode 100644
index 0000000000..d672f8909b
--- /dev/null
+++ b/Task/Arithmetic-evaluation/Red/arithmetic-evaluation.red
@@ -0,0 +1,113 @@
+Red [ "Arithmetic Evaluator - Hinjo, August 2025"
+ {Using a Modified Shunting-Yard algorithm to produce S-Expression as the AST
+ and a simple S-Expression evaluator (recursive).}
+]
+
+s-expr: function [expr [string!] /trace] [
+ output: copy [] ops: copy []
+ prec: #["+" 2 "-" 2 "*" 3 "/" 3 "^^" 4]
+ asc: #["+" "L" "-" "L" "*" "L" "/" "L" "^^" "R"]
+
+ stats: function [t] [
+ if not trace [exit]
+ print [t "|" pad act 25 "|" pad (mold output) 45 pad/left (reverse form ops) 15]
+ ]
+
+ make-node: function [op] [
+ right: take/last output
+ left: take/last output
+ node: load rejoin ["[" op " " mold left " " mold right "]"]
+ node
+ ]
+
+ tokens: split expr " "
+ while [not empty? tokens] [
+ tok: first tokens tokens: next tokens
+ case [
+ find "0123456789" tok [
+ act: "1.Push number as value"
+ append output load tok
+ stats tok
+ ]
+ tok = "(" [
+ act: "2.Push ( to ops"
+ append ops tok
+ stats tok
+ ]
+ tok = ")" [
+ while [(last ops) <> "("] [
+ act: "3.Pop op, build node"
+ append/only output make-node take/last ops
+ stats tok
+ ]
+ act: "4.Discard ("
+ take/last ops
+ stats tok
+ ]
+ find "+-*/^^" tok [
+
+ popping: func [][
+ if empty? ops [return false]
+ if none? last ops [return false]
+ last-op: last ops
+ if last-op = ")" [return false]
+ if none? prec/:last-op [return false]
+ return (prec/:last-op > prec/:tok)
+ or ((prec/:last-op = prec/:tok)
+ and (asc/:tok = "L"))
+ ]
+
+ while [popping] [
+ act: "5.Pop op, build node"
+ append/only output make-node take/last ops
+ stats tok
+ ]
+ act: "6.Push current op"
+ append ops tok
+ stats tok
+ ]
+ ]
+ ]
+ act: "7.Final flush ops"
+ stats " "
+ while [not empty? ops] [
+ act: "8.Pop op, build node"
+ append/only output make-node take/last ops
+ stats " "
+ ]
+ output/1
+]
+
+; basic s-expression evaluator
+s-eval: function [expr][
+ either block? expr [
+ op: expr/1
+ a: s-eval expr/2
+ b: s-eval expr/3
+ case [
+ op = '+ [a + b]
+ op = '- [a - b]
+ op = '* [a * b]
+ op = '/ [a / b]
+ op = '^ [a ** b]
+ true [do make error! rejoin ["Unknown operator: " mold op]]
+ ]
+ ][
+ expr ; base case: just a number
+ ]
+]
+
+print "Simple test:"
+s: "1 + 2" se: s-expr s print [pad s 40 " ==> " pad (mold se) 45 " = " s-eval se]
+s: "1 + 2 * 3" se: s-expr s print [pad s 40 " ==> " pad (mold se) 45 " = " s-eval se]
+s: "( 1 + 2 ) * 3" se: s-expr s print [pad s 40 " ==> " pad (mold se) 45 " = " s-eval se]
+s: "( 1 + 2 * 3 ) / 2" se: s-expr s print [pad s 40 " ==> " pad (mold se) 45 " = " s-eval se]
+
+print "^/Complex ones:"
+s: "3 + 4 * 2 / ( 1 - 5 ) ^^ 2 ^^ 3" se: s-expr s print [pad s 40 " ==> " pad (mold se) 45 " = " s-eval se]
+s: "( 1 + 2 * 3 ) ^^ 2 / 6 ^^ 2 ^^ 3 - 1" se: s-expr s print [pad s 40 " ==> " pad (mold se) 45 " = " s-eval se]
+
+print "^/Some test for input and output with trace:"
+print ["^/" s: "3 + 4 * 2 / ( 1 - 5 ) ^^ 2 ^^ 3"] se: s-expr/trace s print [s " ==> " mold se " = " s-eval se]
+print ["^/" s: "( ( 1 + 2 ) ^^ ( 3 + 4 ) ) ^^ ( 5 + 6 )"] se: s-expr/trace s print [s " ==> " mold se " = " s-eval se]
+print ["^/" s: "1 + 2 * 3 / 4 + 5"] se: s-expr/trace s print [s " ==> " mold se " = " s-eval se]
diff --git a/Task/Arithmetic-geometric-mean/ALGOL-68/arithmetic-geometric-mean.alg b/Task/Arithmetic-geometric-mean/ALGOL-68/arithmetic-geometric-mean.alg
index f41fbacd2a..18ca866f48 100644
--- a/Task/Arithmetic-geometric-mean/ALGOL-68/arithmetic-geometric-mean.alg
+++ b/Task/Arithmetic-geometric-mean/ALGOL-68/arithmetic-geometric-mean.alg
@@ -19,5 +19,5 @@ BEGIN
a
FI
END;
- printf (($l(-35,33)l$, agm (LONG 1.0, LONG 1.0 / long sqrt (LONG 2.0))))
+ printf (($lg(-35,33)l$, agm (LONG 1.0, LONG 1.0 / long sqrt (LONG 2.0))))
END
diff --git a/Task/Arithmetic-geometric-mean/DuckDB/arithmetic-geometric-mean-1.duckdb b/Task/Arithmetic-geometric-mean/DuckDB/arithmetic-geometric-mean-1.duckdb
new file mode 100644
index 0000000000..92b0794da3
--- /dev/null
+++ b/Task/Arithmetic-geometric-mean/DuckDB/arithmetic-geometric-mean-1.duckdb
@@ -0,0 +1,12 @@
+with recursive
+ rec(rn, a, g, diff) as (
+ select 1, 1.0, 1/sqrt(2), 1 - 1/sqrt(2)
+ union all
+ select rn + 1, (a + g)/2, sqrt(a * g), (a + g)/2 - sqrt(a * g)
+ from rec
+ where diff > 1e-15
+ )
+select *
+from rec
+where diff <= 1e-15
+;
diff --git a/Task/Arithmetic-geometric-mean/DuckDB/arithmetic-geometric-mean-2.duckdb b/Task/Arithmetic-geometric-mean/DuckDB/arithmetic-geometric-mean-2.duckdb
new file mode 100644
index 0000000000..3c8c0277bd
--- /dev/null
+++ b/Task/Arithmetic-geometric-mean/DuckDB/arithmetic-geometric-mean-2.duckdb
@@ -0,0 +1,14 @@
+create or replace function agm(a0, g0) as (
+with recursive
+ rec as (
+ select a0::DOUBLE as a, g0::DOUBLE as g, a - g as diff
+ union all
+ select a, g, (a - g) as diff
+ from ( select ((a + g)/2) as a, sqrt(a * g) as g, diff
+ from rec )
+ where diff > 1e-15 )
+ select (a + g)/2
+ from rec
+ where diff <= 1e-15
+ limit 1
+);
diff --git a/Task/Arithmetic-geometric-mean/Pluto/arithmetic-geometric-mean.pluto b/Task/Arithmetic-geometric-mean/Pluto/arithmetic-geometric-mean.pluto
new file mode 100644
index 0000000000..cc3914b6c2
--- /dev/null
+++ b/Task/Arithmetic-geometric-mean/Pluto/arithmetic-geometric-mean.pluto
@@ -0,0 +1,10 @@
+$define EPS = 1e-14
+
+local function agm(a, g)
+ while math.abs(a - g) > math.abs(a) * EPS do
+ a, g = (a + g) / 2, math.sqrt(a * g)
+ end
+ return a
+end
+
+print(agm(1.0, 1.0 /math.sqrt(2)))
diff --git a/Task/Arithmetic-numbers/DuckDB/arithmetic-numbers.duckdb b/Task/Arithmetic-numbers/DuckDB/arithmetic-numbers.duckdb
new file mode 100644
index 0000000000..4aea7d6141
--- /dev/null
+++ b/Task/Arithmetic-numbers/DuckDB/arithmetic-numbers.duckdb
@@ -0,0 +1,70 @@
+### Preliminaries
+# If x is NULL then raise an error condition:
+create or replace function try(x, ErrorMessage) as (
+ if( x IS NULL, error( ErrorMessage ), x )
+);
+
+create or replace function proper_divisors(n) as table (
+ select 1 where n > 1
+ union all
+ select distinct i
+ from (select unnest( [ j, n // j]) as i
+ from range(2, 1 + sqrt(n).floor()::BIGINT) as t(j)
+ where (n % j) == 0)
+);
+
+create or replace function composite(n) as (
+ select count(*) == 2 as n from (from proper_divisors(n) limit 2)
+);
+
+create or replace function average_is_integral(lst) as (
+ list_sum(lst) % length(lst) = 0
+);
+
+create or replace function list_of_proper_divisors(n) as (
+ select coalesce(array_agg(i), []) as divisors from proper_divisors(n) t(i)
+);
+
+
+### Arithmetic numbers
+# A table of the arithmetic numbers in range(1, mx)
+create or replace function arithmetic_numbers(mx) as table (
+ select n
+ from range(1, mx) t(n)
+ where average_is_integral(list_of_proper_divisors(n) || [n])
+ order by n -- needed
+);
+
+# A table (n, composite) of the arithmetic numbers in range(1, mx) showing also whether each is composite
+create or replace function describe_arithmetic_numbers(mx) as table (
+ select n, length(lst) > 1 as composite
+ from
+ (select n, list_of_proper_divisors(n) as lst
+ from range(1, mx) t(n)
+ where average_is_integral(lst || [n])
+ order by n -- needed
+ )
+);
+
+# Return a struct {nth, composites} giving the nth arithmetic number
+# and the number of composites less than or equal to that number.
+# If the heuristic fails, an error is raised.
+create or replace function describe_nth_arithmetic_number(nth) as (
+ with cte as (from describe_arithmetic_numbers(nth * 2) limit nth)
+ select try(
+ (select { nth: (select last(n) from cte),
+ composites: (select count(*) from cte where composite = true)}
+ where nth = (select count(*) from cte)),
+ 'heuristic failure')
+);
+
+# Return a list of the first `number` arithmetic numbers using a
+# heuristic cautiously
+create or replace function arithmetic_numbers_list(number) as (
+ with cte as (from describe_arithmetic_numbers(number * 2 ) limit number),
+ m as (select count(*) as m from cte)
+ select try(
+ if (m = number, (select array_agg(n) from cte), null),
+ 'heuristic failure' )
+ from m
+);
diff --git a/Task/Array-concatenation/ArkScript/array-concatenation.ark b/Task/Array-concatenation/ArkScript/array-concatenation.ark
new file mode 100644
index 0000000000..41ea61f667
--- /dev/null
+++ b/Task/Array-concatenation/ArkScript/array-concatenation.ark
@@ -0,0 +1,4 @@
+(let a [1 2 3])
+(let b [4 5 6])
+
+(assert (= (concat a b) [1 2 3 4 5 6]) "array concatenation")
diff --git a/Task/Array-concatenation/DuckDB/array-concatenation.duckdb b/Task/Array-concatenation/DuckDB/array-concatenation.duckdb
new file mode 100644
index 0000000000..1502edf1f9
--- /dev/null
+++ b/Task/Array-concatenation/DuckDB/array-concatenation.duckdb
@@ -0,0 +1,4 @@
+# Concatenate two JSON arrays to produce an instance of JSON[]
+create or replace function jsonarray2list(j) as (
+ select list_transform(range(0, json_array_length(j)::BIGINT), i -> (j -> i))
+);
diff --git a/Task/Array-concatenation/Elena/array-concatenation.elena b/Task/Array-concatenation/Elena/array-concatenation.elena
index 4d412e7dbb..41d210bd59 100644
--- a/Task/Array-concatenation/Elena/array-concatenation.elena
+++ b/Task/Array-concatenation/Elena/array-concatenation.elena
@@ -5,7 +5,7 @@ public program()
var a := new int[]{1,2,3};
var b := new int[]{4,5};
- console.printLine(
+ Console.printLine(
"(",a.asEnumerable(),") + (",b.asEnumerable(),
") = (",(a + b).asEnumerable(),")").readChar();
}
diff --git a/Task/Array-concatenation/Pluto/array-concatenation.pluto b/Task/Array-concatenation/Pluto/array-concatenation.pluto
new file mode 100644
index 0000000000..e110f3faff
--- /dev/null
+++ b/Task/Array-concatenation/Pluto/array-concatenation.pluto
@@ -0,0 +1,12 @@
+local array1 = {1, 2, 3}
+local array2 = {4, 5, 6}
+
+-- Concatenate to a new array.
+local array3 = {}
+table.move(array1, 1, #array1, 1, array3)
+table.move(array2, 1, #array2, #array3 + 1, array3)
+print(array3:concat(", "))
+
+-- Merge second into first array.
+table.move(array2, 1, #array2, #array1 + 1, array1)
+print(array1:concat(", "))
diff --git a/Task/Array-concatenation/TAV/array-concatenation.tav b/Task/Array-concatenation/TAV/array-concatenation.tav
new file mode 100644
index 0000000000..b9f873d11c
--- /dev/null
+++ b/Task/Array-concatenation/TAV/array-concatenation.tav
@@ -0,0 +1,3 @@
+ a1 =: tuple 1, 2, 3 as row
+ row a1 append 4, 5, 6 \ append tuple elements to a row
+ print join a1
diff --git a/Task/Array-length/ArkScript/array-length.ark b/Task/Array-length/ArkScript/array-length.ark
new file mode 100644
index 0000000000..1cd019c302
--- /dev/null
+++ b/Task/Array-length/ArkScript/array-length.ark
@@ -0,0 +1,2 @@
+(assert (= (len []) 0) "len of empty array is 0")
+(assert (= (len [1 2 3 4]) 4) "len of array is 4")
diff --git a/Task/Array-length/DuckDB/array-length.duckdb b/Task/Array-length/DuckDB/array-length.duckdb
new file mode 100644
index 0000000000..dde1b2e9f1
--- /dev/null
+++ b/Task/Array-length/DuckDB/array-length.duckdb
@@ -0,0 +1 @@
+select length( ['apple', 'orange' ] ) as length;
diff --git a/Task/Array-length/M2000-Interpreter/array-length.m2000 b/Task/Array-length/M2000-Interpreter/array-length.m2000
index 55bd640ccf..d3bf86ac9d 100644
--- a/Task/Array-length/M2000-Interpreter/array-length.m2000
+++ b/Task/Array-length/M2000-Interpreter/array-length.m2000
@@ -1,38 +1,3 @@
\\ A is a pointer to array
A=("Apple", "Orange")
Print Len(A)=2 ' True
-Print Dimension(A, 0) ' LBound (0 or 1), here 0
-Print Dimension(A) ' No of Dimensions 1
-Print Dimension(A, 1) ' for 1 dimension array this is also Length=2
-\\ A$( ) is an Array (not a pointer to array)
-Dim Base 1, A$(2)
-A$(1)="Apple", "Orange"
-Print Dimension(A$(), 0) ' LBound (0 or 1), here 1
-Print Dimension(A$()) ' No of Dimensions 1
-Print Dimension(A$(), 1) ' for 1 dimension array this is also Length=2
-Link A to B$() ' B$() is a reference to A
-Print B$(0)=A$(1)
-Print B$(1)=A$(2)
-Dim C$()
-\\ C$() get a copy of B$()
-C$()=B$()
-Print C$() ' prints Apple Orange
-\\ An array can link to a new name as reference, and can change major type
-\\ here A$() get A() so we can read/store numbers and read/store strings in same array
-\\ using two names
-Link A$() to A()
-\\ An array pointer can point to another array
-A=A()
-Print Dimension(A, 0) ' LBound (0 or 1), here 1 (was 0)
-\\ Because B$() is reference of A:
-Print Dimension(B$(), 0) ' LBound (0 or 1), here 1 (was 0)
-Print B$(1)=A$(1)
-Print B$(2)=A$(2)
-Print Dimension(C$(), 0) ' LBound (0 or 1), here 0
-\\ change base preserve items
-Dim Base 1, C$(Dimension(C$(), 1))
-Print Dimension(C$(), 0) ' LBound (0 or 1), here 1 (was 0)
-Print C$() ' prints Apple Orange
-Print Len(C$()) ' Len return all items of an array - can be 0
-Dim K(1,1,1,1,1,1) ' Maximum 10 dimensions
-Print Len(K()=1 ' True
diff --git a/Task/Array-length/Maxima/array-length.maxima b/Task/Array-length/Maxima/array-length.maxima
new file mode 100644
index 0000000000..56cfb97fe9
--- /dev/null
+++ b/Task/Array-length/Maxima/array-length.maxima
@@ -0,0 +1,4 @@
+length(["apple","orange"]);
+fruits: matrix(["apple","orange"],["banana","pear"])$
+length(fruits);
+length(list_matrix_entries(fruits));
diff --git a/Task/Array-length/TAV/array-length.tav b/Task/Array-length/TAV/array-length.tav
new file mode 100644
index 0000000000..a54c8b0a26
--- /dev/null
+++ b/Task/Array-length/TAV/array-length.tav
@@ -0,0 +1 @@
+print ('apple', 'orange').Count
diff --git a/Task/Array-length/Tcl/array-length-1.tcl b/Task/Array-length/Tcl/array-length-1.tcl
new file mode 100644
index 0000000000..1fe942888c
--- /dev/null
+++ b/Task/Array-length/Tcl/array-length-1.tcl
@@ -0,0 +1 @@
+set mylist { item1 item2 item3 }
diff --git a/Task/Array-length/Tcl/array-length-2.tcl b/Task/Array-length/Tcl/array-length-2.tcl
new file mode 100644
index 0000000000..2abd436f52
--- /dev/null
+++ b/Task/Array-length/Tcl/array-length-2.tcl
@@ -0,0 +1 @@
+set furniture "chair table lamp sofa bed desk"
diff --git a/Task/Array-length/Tcl/array-length-3.tcl b/Task/Array-length/Tcl/array-length-3.tcl
new file mode 100644
index 0000000000..36b3b6edee
--- /dev/null
+++ b/Task/Array-length/Tcl/array-length-3.tcl
@@ -0,0 +1,5 @@
+set paths [split "/sbin:/bin:/usr/bin:/usr/local/bin:$home/bin" ":"]
+
+foreach p $paths {
+ puts "$p"
+}
diff --git a/Task/Array-length/Tcl/array-length-4.tcl b/Task/Array-length/Tcl/array-length-4.tcl
new file mode 100644
index 0000000000..3ed1cddf82
--- /dev/null
+++ b/Task/Array-length/Tcl/array-length-4.tcl
@@ -0,0 +1,2 @@
+set A {}
+set B [list]
diff --git a/Task/Array-length/Tcl/array-length-5.tcl b/Task/Array-length/Tcl/array-length-5.tcl
new file mode 100644
index 0000000000..b1f7c4fab0
--- /dev/null
+++ b/Task/Array-length/Tcl/array-length-5.tcl
@@ -0,0 +1 @@
+ set var 5 ;# ($var is the string "5", or the integer 5 , or a list with one item {5} )
diff --git a/Task/Array-length/Tcl/array-length-6.tcl b/Task/Array-length/Tcl/array-length-6.tcl
new file mode 100644
index 0000000000..e6250e3fd2
--- /dev/null
+++ b/Task/Array-length/Tcl/array-length-6.tcl
@@ -0,0 +1,5 @@
+set len [llength "Apples Oranges"] ;# 2
+set len [llength {Apples Oranges}] ;# 2
+set fruit { apples oranges cherries bananas}
+set len [llength $fruit]
+puts stdout "($len) : $fruit"
diff --git a/Task/Array-length/Tcl/array-length-7.tcl b/Task/Array-length/Tcl/array-length-7.tcl
new file mode 100644
index 0000000000..2042a29d9f
--- /dev/null
+++ b/Task/Array-length/Tcl/array-length-7.tcl
@@ -0,0 +1,10 @@
+# The ''lindex'' command returns a single item at a given index of a list
+
+set c [lindex $fruit 2] ;# "cherries" (0-based index)
+
+# The ''lrange'' command returns a given range of items from a list, as a new list.
+
+set A [lrange $fruit 0 2] ;# {apples oranges cherries} (list)
+
+# An empty list is not necessarily an empty string:
+set var { } ;# $var => " ", but [llength $var] => 0
diff --git a/Task/Array-length/Tcl/array-length.tcl b/Task/Array-length/Tcl/array-length.tcl
deleted file mode 100644
index 5b7cf51645..0000000000
--- a/Task/Array-length/Tcl/array-length.tcl
+++ /dev/null
@@ -1,13 +0,0 @@
-;# not recommended:
-set mylistA {apple orange} ;# actually a string
-set mylistA "Apple Orange" ;# same - this works only for simple cases
-
-set lenA [llength $mylistA]
-puts "$mylistA : $lenA"
-
-# better: to build a list, use 'list' and/or 'lappend':
-set mylistB [list apple orange "red wine" {green frog}]
-lappend mylistB "blue bird"
-
-set lenB [llength $mylistB]
-puts "$mylistB : $lenB"
diff --git a/Task/Arrays/BBC-BASIC/arrays.basic b/Task/Arrays/BBC-BASIC/arrays.basic
index 508e04a217..eaf82c4ae8 100644
--- a/Task/Arrays/BBC-BASIC/arrays.basic
+++ b/Task/Arrays/BBC-BASIC/arrays.basic
@@ -15,3 +15,8 @@
PRINT array(2) TAB(16) array(3) TAB(32) array(4)
PRINT array%(2) TAB(16) array%(3) TAB(32) array%(4)
PRINT array$(2) TAB(16) array$(3) TAB(32) array$(4)
+
+ REM Some versions of BBC BASIC support array slicing:
+ array(2 TO 4) = source(1 TO 3)
+ array(3 TO 5) = 2, 4, -1
+ array(3 TO 5) = array(4 TO 6)
diff --git a/Task/Arrays/DuckDB/arrays.duckdb b/Task/Arrays/DuckDB/arrays.duckdb
new file mode 100644
index 0000000000..b580ce44c0
--- /dev/null
+++ b/Task/Arrays/DuckDB/arrays.duckdb
@@ -0,0 +1,9 @@
+# Insert `value` after row i (using IO=1) in a one-column table named t (a string).
+create or replace function insert_after(i, value, t) as table (
+ (FROM query_table(t) LIMIT i)
+ union all
+ select value
+ union all (FROM query_table(t) OFFSET i)
+);
+
+from insert_after_row(1, 100, 't');
diff --git a/Task/Arrays/Elena/arrays-5.elena b/Task/Arrays/Elena/arrays-5.elena
index 9b69e70cb8..ae97e67492 100644
--- a/Task/Arrays/Elena/arrays-5.elena
+++ b/Task/Arrays/Elena/arrays-5.elena
@@ -1,3 +1,3 @@
- system'console.writeLine(array[0]);
- system'console.writeLine(stackAllocatedArray[1]);
- system'console.writeLine(dynamicArray[2]);
+ system'Console.writeLine(array[0]);
+ system'Console.writeLine(stackAllocatedArray[1]);
+ system'Console.writeLine(dynamicArray[2]);
diff --git a/Task/Arrays/Extended-Color-BASIC/arrays.basic b/Task/Arrays/Extended-Color-BASIC/arrays.basic
new file mode 100644
index 0000000000..0f32fa7335
--- /dev/null
+++ b/Task/Arrays/Extended-Color-BASIC/arrays.basic
@@ -0,0 +1,4 @@
+10 DIM A(10), B$(10)
+20 A(1) = 42
+30 B$(10) = "TOWEL"
+40 PRINT A(1), B$(10)
diff --git a/Task/Arrays/Haxe/arrays.haxe b/Task/Arrays/Haxe/arrays.haxe
new file mode 100644
index 0000000000..8fccc28c0e
--- /dev/null
+++ b/Task/Arrays/Haxe/arrays.haxe
@@ -0,0 +1,22 @@
+class Main {
+ static public function main():Void {
+ // Array (dynamic length)
+ var a = new Array();
+ for (i in 1...4)
+ a.push(i);
+ // alt: var a = [1, 2, 3];
+ // alt2: var a = [for (i in 1...4)];
+
+ for (i in 0...a.length)
+ trace(a[i]);
+
+ // Vector (fixed-length)
+ var v = new haxe.ds.Vector(3);
+ v[0] = 1;
+ v[1] = 2;
+ v[2] = 3;
+
+ for (i in 0...v.length)
+ trace(v[i]);
+ }
+}
diff --git a/Task/Arrays/Pluto/arrays.pluto b/Task/Arrays/Pluto/arrays.pluto
new file mode 100644
index 0000000000..c7544909c7
--- /dev/null
+++ b/Task/Arrays/Pluto/arrays.pluto
@@ -0,0 +1,8 @@
+local array = {}
+array:insert(42)
+array:insert(43)
+print(array:concat(", ")) -- 42, 43
+print(array[1]) -- 42, since indexing starts at 1
+print(#array) -- 2, since # is the length operator
+array:clear()
+print(#array) -- 0
diff --git a/Task/Arrays/REXX/arrays.rexx b/Task/Arrays/REXX/arrays.rexx
index 74e20f3ddc..6f758adf93 100644
--- a/Task/Arrays/REXX/arrays.rexx
+++ b/Task/Arrays/REXX/arrays.rexx
@@ -1,56 +1,59 @@
--- 1 Jun 2025
+-- 7 Aug 2025
include Settings
say 'ARRAYS'
say version
say
-say 'A simple array...'
-do i = 1 to 100
+if Pos('Regina',version) > 0 then
+ call Library
+say 'Simple array...'
+do i = 1 to 10
a.i=i*i
end
-say 'Square of' 5 'is' a.5
-say 'Square of' 55 'is' a.55
+say 'Square of' 3 'is' a.3
+say 'Square of' 7 'is' a.7
say
say 'Mimic indexing...'
-say 'Square of' 5 'is' a(5)
-say 'Square of' 55 'is' a(55)
+say 'Square of' 3 'is' a(3)
+say 'Square of' 7 'is' a(7)
say
say 'A default value...'
b. = 'Out of range'
-do i = 1 to 100
+do i = 1 to 10
b.i=1/i
end
-say 'Inverse of' 5 'is' b.5
-say 'Inverse of' 55 'is' b.55
-say 'Inverse of' 555 'is' b.555
+say 'Inverse of' 3 'is' b.3
+say 'Inverse of' 7 'is' b.7
+say 'Inverse of' 11 'is' b.11
say
-say 'An other index range...'
-do i = -100 to 100
+say 'Index zero...'
+do i = 1 to 10
c.i=i*i*i
end
-j=-55; say 'Cube of' j 'is' c.j
-j=-5; say 'Cube of' j 'is' c.j
-j=5; say 'Cube of' j 'is' c.j
-j=55; say 'Cube of' j 'is' c.j
+c.0=10
+j=0; say 'Number of rows is' c.j
+j=3; say 'Cube of' j 'is' c.j
+j=7; say 'Cube of' j 'is' c.j
say
-say 'A sparse array...'
-d.='Not calculated'
-do i = 2 by 2 to 100
+say 'Sparse array...'
+d.=0
+do i = 3 by 3 to 9
d.i=-i
end
-say 'Negative of' 55 'is' d.55
-say 'Negative of' 56 'is' d.56
+say 'Negative of' 3 'is' d.3
+say 'Negative of' 7 'is' d.7
say
-say 'Special indices...'
-e.cat='civet'; say 'e.cat =' e.cat
-a1='dog'; e.a1='pitbull'
-a2=a1; say 'e.'a2 '=' e.a2
-a1='x.y.z'; e.a1='periods'
-a2=a1; say 'e.'a2 '=' e.a2
-a1='x y z'; e.a1='spaces'
-a2=a1; say 'e.'a2 '=' e.a2
-a1='└┴┬├─┼'; e.a1='specials'
-a2=a1; say 'e.'a2 '=' e.a2
+say 'More dimensions...'
+e.=0
+do i = 1 to 3
+ do j = 1 to 3
+ e.i.j=i*j
+ end
+end
+say '1x2 is' e.1.2
+say '3x2 is' e.3.2
+say
+call SysDumpVariables
say
say 'Element has no value...'
signal off novalue
@@ -64,4 +67,11 @@ procedure expose a.
arg xx
return a.xx
+Library:
+say 'Library...'
+call RxFuncAdd 'SysLoadFuncs','RegUtil','SysLoadFuncs'
+call SysLoadFuncs
+say
+return
+
include Abend
diff --git a/Task/Arrays/Unicon/arrays-1.unicon b/Task/Arrays/Unicon/arrays-1.unicon
new file mode 100644
index 0000000000..36bcabe0b8
--- /dev/null
+++ b/Task/Arrays/Unicon/arrays-1.unicon
@@ -0,0 +1 @@
+l := [: !&input :] # build a list of the lines read from standard input
diff --git a/Task/Arrays/Unicon/arrays-2.unicon b/Task/Arrays/Unicon/arrays-2.unicon
new file mode 100644
index 0000000000..b375465980
--- /dev/null
+++ b/Task/Arrays/Unicon/arrays-2.unicon
@@ -0,0 +1,6 @@
+procedure main()
+ L := [: 1 to 5:]
+ delete(L,4)
+ insert(L,2,"hello")
+ every write(!L)
+end
diff --git a/Task/Arrays/Unicon/arrays-3.unicon b/Task/Arrays/Unicon/arrays-3.unicon
new file mode 100644
index 0000000000..856291bbb5
--- /dev/null
+++ b/Task/Arrays/Unicon/arrays-3.unicon
@@ -0,0 +1,3 @@
+ L := list(5,0)
+ i := 0
+ every !L := (i+:=1)
diff --git a/Task/Arrays/Zig/arrays-1.zig b/Task/Arrays/Zig/arrays-1.zig
new file mode 100644
index 0000000000..43a97f2473
--- /dev/null
+++ b/Task/Arrays/Zig/arrays-1.zig
@@ -0,0 +1,32 @@
+const std = @import("std");
+
+pub fn main() !void {
+ const stdout = std.io.getStdOut().writer();
+
+ // array literal
+ const array1 = [9]i32{ 0, 1, 1, 2, 3, 5, 7, 12, 21 };
+
+ // infer the size of the array
+ const array2 = [_]i32{ 0, 1, 1, 2, 3, 5, 7, 12, 21 };
+
+ // alternative initialization using result location
+ const array3: [9]i32 = .{ 0, 1, 1, 2, 3, 5, 7, 12, 21 };
+
+ // initialize an array with zeros using array multiplication
+ var array4 = [_]i32{0} ** 5; // array length: 5
+
+ // assign elements to an array (must be declared as a variable)
+ array4[0] = -12;
+ array4[2] = 345;
+ array4[4] = -6;
+
+ // retieve elements from an array
+ try stdout.print("{d}, ", .{array4[0]});
+ try stdout.print("{d}, ", .{array4[1]});
+ try stdout.print("{d}, ", .{array4[2]});
+ try stdout.print("{d}, ", .{array4[3]});
+ try stdout.print("{d}\n", .{array4[4]});
+
+ // unused constants must be discarded
+ _ = array1; _ = array2; _ = array3;
+}
diff --git a/Task/Arrays/Zig/arrays-2.zig b/Task/Arrays/Zig/arrays-2.zig
new file mode 100644
index 0000000000..474029db3b
--- /dev/null
+++ b/Task/Arrays/Zig/arrays-2.zig
@@ -0,0 +1,21 @@
+const std = @import("std");
+
+pub fn main() !void {
+ const stdout = std.io.getStdOut().writer();
+ var gpa = std.heap.GeneralPurposeAllocator(.{}){};
+ const allocator = gpa.allocator();
+
+ // ArrayLists are initialized in the heap
+ var array = std.ArrayList(i32).init(allocator);
+ defer array.deinit();
+
+ // pushing elements to an ArrayList
+ try array.append(-12);
+ try array.append(345);
+ try array.append(-7);
+
+ // retrieving elements from an ArrayList
+ try stdout.print("{d}, ", .{array.items[0]});
+ try stdout.print("{d}, ", .{array.items[1]});
+ try stdout.print("{d}\n", .{array.items[2]});
+}
diff --git a/Task/Ascending-primes/ArkScript/ascending-primes.ark b/Task/Ascending-primes/ArkScript/ascending-primes.ark
new file mode 100644
index 0000000000..c5d1ce07ea
--- /dev/null
+++ b/Task/Ascending-primes/ArkScript/ascending-primes.ark
@@ -0,0 +1,24 @@
+(import std.Math :sqrt :prime?)
+(import std.List :iota)
+(import std.String :join)
+(import std.Range)
+
+(let ascending (fun (n f) {
+ (mut nums (iota 1 9))
+ (mut i 0)
+ (mut matched [])
+
+ (while (and (< (len matched) n) (< i (len nums))) {
+ (let val (@ nums i))
+ (if (f val)
+ (append! matched val))
+
+ (mut r (range:range (+ 1 (mod val 10)) 10))
+ (set r (range:map r (fun (k) (+ k (* 10 val)))))
+ (concat! nums r)
+
+ (set i (+ 1 i)) })
+
+ matched }))
+
+(print (join (ascending 100 prime?) ", "))
diff --git a/Task/Ascending-primes/Pluto/ascending-primes.pluto b/Task/Ascending-primes/Pluto/ascending-primes.pluto
new file mode 100644
index 0000000000..828f567f2f
--- /dev/null
+++ b/Task/Ascending-primes/Pluto/ascending-primes.pluto
@@ -0,0 +1,24 @@
+require "map"
+local int = require "int"
+local fmt = require "fmt"
+
+local asc_primes = new set() -- avoids duplicates
+
+local function generate(first, cand, digits)
+ if digits == 0 then
+ if int.isprime(cand) then asc_primes:add(cand) end
+ return
+ end
+ local i = first
+ while i <= 9 do
+ local next = cand * 10 + i
+ generate(i + 1, next, digits - 1)
+ ++i
+ end
+end
+
+for digits = 1, 9 do generate(1, 0, digits) end
+asc_primes = asc_primes:keys()
+asc_primes:sort()
+print($"There are {#asc_primes} ascending primes, namely:")
+fmt.tprint("%8d", asc_primes, 5)
diff --git a/Task/Associative-array-Creation/ArkScript/associative-array-creation.ark b/Task/Associative-array-Creation/ArkScript/associative-array-creation.ark
new file mode 100644
index 0000000000..32ff7c770a
--- /dev/null
+++ b/Task/Associative-array-Creation/ArkScript/associative-array-creation.ark
@@ -0,0 +1,6 @@
+(import std.Dict)
+
+(let d (dict "key" "value" 5 12))
+
+(print (dict:get d 5))
+(print (dict:get d "key"))
diff --git a/Task/Associative-array-Creation/DuckDB/associative-array-creation-1.duckdb b/Task/Associative-array-Creation/DuckDB/associative-array-creation-1.duckdb
new file mode 100644
index 0000000000..1446b4df06
--- /dev/null
+++ b/Task/Associative-array-Creation/DuckDB/associative-array-creation-1.duckdb
@@ -0,0 +1,6 @@
+# Create a table to associate a key with 0 or more values
+CREATE TABLE associative_array (KEY_COLUMN VARCHAR(10), VALUE_COLUMN VARCHAR(100));
+# Insert a Key Value pair
+INSERT INTO associative_array (KEY_COLUMN, VALUE_COLUMN) VALUES ('KEY', 'VALUE');
+# Retrieve a key value pair
+SELECT aa.value_column FROM associative_array aa where aa.key_column = 'KEY';
diff --git a/Task/Associative-array-Creation/DuckDB/associative-array-creation-2.duckdb b/Task/Associative-array-Creation/DuckDB/associative-array-creation-2.duckdb
new file mode 100644
index 0000000000..b88868f2bd
--- /dev/null
+++ b/Task/Associative-array-Creation/DuckDB/associative-array-creation-2.duckdb
@@ -0,0 +1,5 @@
+CREATE TABLE associative_array (KEY_COLUMN VARCHAR, VALUE_COLUMN VARCHAR);
+# Insert a Key Value pair
+INSERT INTO associative_array VALUES ('KEY', 'VALUE');
+# Retrieve a key value pair
+SELECT aa.value_column FROM associative_array aa where aa.key_column = 'KEY';
diff --git a/Task/Associative-array-Creation/DuckDB/associative-array-creation-3.duckdb b/Task/Associative-array-Creation/DuckDB/associative-array-creation-3.duckdb
new file mode 100644
index 0000000000..ce18cbb28a
--- /dev/null
+++ b/Task/Associative-array-Creation/DuckDB/associative-array-creation-3.duckdb
@@ -0,0 +1 @@
+CREATE TABLE aa (KEY_COLUMN VARCHAR UNIQUE NOT NULL, VALUE_COLUMN VARCHAR NOT NULL);
diff --git a/Task/Associative-array-Creation/DuckDB/associative-array-creation-4.duckdb b/Task/Associative-array-Creation/DuckDB/associative-array-creation-4.duckdb
new file mode 100644
index 0000000000..8c2a94853a
--- /dev/null
+++ b/Task/Associative-array-Creation/DuckDB/associative-array-creation-4.duckdb
@@ -0,0 +1,3 @@
+INSERT into aa VALUES ('k', 1), ('l', 2);
+from aa;
+INSERT into aa VALUES ('k', 3);
diff --git a/Task/Associative-array-Creation/DuckDB/associative-array-creation-5.duckdb b/Task/Associative-array-Creation/DuckDB/associative-array-creation-5.duckdb
new file mode 100644
index 0000000000..04cd514a5c
--- /dev/null
+++ b/Task/Associative-array-Creation/DuckDB/associative-array-creation-5.duckdb
@@ -0,0 +1 @@
+SELECT aa FROM aa LIMIT 1;
diff --git a/Task/Associative-array-Creation/DuckDB/associative-array-creation-6.duckdb b/Task/Associative-array-Creation/DuckDB/associative-array-creation-6.duckdb
new file mode 100644
index 0000000000..3e09d635b1
--- /dev/null
+++ b/Task/Associative-array-Creation/DuckDB/associative-array-creation-6.duckdb
@@ -0,0 +1 @@
+select unnest({'KEY_COLUMN': 'k', 'VALUE_COLUMN': 1});
diff --git a/Task/Associative-array-Creation/DuckDB/associative-array-creation-7.duckdb b/Task/Associative-array-Creation/DuckDB/associative-array-creation-7.duckdb
new file mode 100644
index 0000000000..7e94667264
--- /dev/null
+++ b/Task/Associative-array-Creation/DuckDB/associative-array-creation-7.duckdb
@@ -0,0 +1 @@
+SELECT info.* FROM (SELECT {'a': 1, 'b': 2 } as info);
diff --git a/Task/Associative-array-Creation/DuckDB/associative-array-creation-8.duckdb b/Task/Associative-array-Creation/DuckDB/associative-array-creation-8.duckdb
new file mode 100644
index 0000000000..c16b5ea5fd
--- /dev/null
+++ b/Task/Associative-array-Creation/DuckDB/associative-array-creation-8.duckdb
@@ -0,0 +1 @@
+SELECT '{"a": 1, "A": 2}'::JSON as j;
diff --git a/Task/Associative-array-Creation/Haxe/associative-array-creation.haxe b/Task/Associative-array-Creation/Haxe/associative-array-creation.haxe
new file mode 100644
index 0000000000..3c680e9c0a
--- /dev/null
+++ b/Task/Associative-array-Creation/Haxe/associative-array-creation.haxe
@@ -0,0 +1,7 @@
+class Main {
+ static public function main() {
+ var map = [1 => "one", 2 => "two"];
+ trace(map);
+ $type(map);
+ }
+}
diff --git a/Task/Associative-array-Creation/Pluto/associative-array-creation.pluto b/Task/Associative-array-Creation/Pluto/associative-array-creation.pluto
new file mode 100644
index 0000000000..2fe4836919
--- /dev/null
+++ b/Task/Associative-array-Creation/Pluto/associative-array-creation.pluto
@@ -0,0 +1,25 @@
+-- Create a map of key, value pairs.
+local planets = {
+ Mercury = 1,
+ Venus = 2,
+ Earth = 3,
+ Mars = 4,
+ Jupiter = 5,
+ Saturn = 6,
+ Uranus = 7,
+ Neptune = 8,
+ Pluto = 9
+}
+
+-- Print it
+-- Note that order is not guaranteed.
+for k, v in planets do print(k, v) end
+print()
+
+-- Create a new one by inverting the key, value pairs.
+local planets2 = planets:invert()
+
+-- Print it.
+-- Now treated as an array with indices 1 to 9
+-- which guarantees order.
+for k, v in planets2 do print($"{k} {v}") end
diff --git a/Task/Associative-array-Creation/REXX/associative-array-creation-1.rexx b/Task/Associative-array-Creation/REXX/associative-array-creation-1.rexx
deleted file mode 100644
index 908c889146..0000000000
--- a/Task/Associative-array-Creation/REXX/associative-array-creation-1.rexx
+++ /dev/null
@@ -1,10 +0,0 @@
-/* Rexx */
-
-key0 = '0'
-key1 = 'key0'
-
-stem. = '.' /* Initialize the associative array 'stem' to '.' */
-stem.key1 = 'value0' /* Set a specific key/value pair */
-
-Say 'stem.key0= 'stem.key /* Display a value for a key that wasn't set */
-Say 'stem.key1= 'stem.key1 /* Display a value for a key that was set */
diff --git a/Task/Associative-array-Creation/REXX/associative-array-creation-2.rexx b/Task/Associative-array-Creation/REXX/associative-array-creation-2.rexx
deleted file mode 100644
index 6eef996e50..0000000000
--- a/Task/Associative-array-Creation/REXX/associative-array-creation-2.rexx
+++ /dev/null
@@ -1,27 +0,0 @@
-/*REXX program shows how to set/display values for an associative array.*/
-/*┌────────────────────────────────────────────────────────────────────┐
- │ The (below) two REXX statements aren't really necessary, but it │
- │ shows how to define any and all entries in a associative array so │
- │ that if a "key" is used that isn't defined, it can be displayed to │
- │ indicate such, or its value can be checked to determine if a │
- │ particular associative array element has been set (defined). │
- └────────────────────────────────────────────────────────────────────┘*/
-stateC.=' [not defined yet] ' /*sets any/all state capitols. */
-stateN.=' [not defined yet] ' /*sets any/all state names. */
-/*┌────────────────────────────────────────────────────────────────────┐
- │ In REXX, when a "key" is used, it's normally stored (internally) │
- │ as uppercase characters (as in the examples below). Actually, any │
- │ characters can be used, including blank(s) and non-displayable │
- │ characters (including '00'x, 'ff'x, commas, periods, quotes, ...).│
- └────────────────────────────────────────────────────────────────────┘*/
-stateC.ca='Sacramento'; stateN.ca='California'
-stateC.nd='Bismarck' ; stateN.nd='North Dakota'
-stateC.mn='St. Paul' ; stateN.mn='Minnesota'
-stateC.dc='Washington'; stateN.dc='District of Columbia'
-stateC.ri='Providence'; stateN.ri='Rhode Island and Providence Plantations'
-
-say 'capital of California is' stateC.ca
-say 'capital of Oklahoma is' stateC.ok
-yyy='RI'
-say 'capital of' stateN.yyy "is" stateC.yyy
- /*stick a fork in it, we're done.*/
diff --git a/Task/Associative-array-Creation/REXX/associative-array-creation.rexx b/Task/Associative-array-Creation/REXX/associative-array-creation.rexx
new file mode 100644
index 0000000000..9aaddc689a
--- /dev/null
+++ b/Task/Associative-array-Creation/REXX/associative-array-creation.rexx
@@ -0,0 +1,54 @@
+-- 8 Aug 2025
+include Settings
+
+say 'ASSOCIATIVE ARRAY: CREATION'
+say version
+say
+say 'Basic examples...'
+cap.='Unknown'
+cap.be='Brussels'
+cap.fr='Paris'
+cap.uk='London'
+call Capital 'BE'
+call Capital 'UK'
+call Capital 'NO'
+day.='Unknown'; week.=day.
+day.jan.2=2; week.jan.2=1
+day.mar.17=76; week.mar.17=12
+day.aug.7=219; week.aug.7=32
+call Calendar 'JAN',2
+call Calendar 'AUG',7
+call Calendar 'MAY',16
+say
+say 'Keys can have any value...'
+a.cat='civet'; say 'a.cat =' a.cat
+a1='dog'; a.a1='pitbull'
+a2=a1; say 'a.'a2 '=' a.a2
+a1='x.y.z'; a.a1='periods'
+a2=a1; say 'a.'a2 '=' a.a2
+a1='x y z'; a.a1='spaces'
+a2=a1; say 'a.'a2 '=' a.a2
+a1='ÀÁÂÃÄÅ'; a.a1='special characters'
+a2=a1; say 'a.'a2 '=' a.a2
+say
+if Pos('Regina',version) > 0 then
+ call Library
+call SysDumpVariables
+exit
+
+Capital:
+arg country
+say 'The capital of' country 'is' cap.country
+return
+
+Calendar:
+arg mm,dd
+say mm dd 'is day no' day.mm.dd 'and week no' week.mm.dd
+return
+
+Library:
+call RxFuncAdd 'SysLoadFuncs','RegUtil','SysLoadFuncs'
+call SysLoadFuncs
+return
+
+include Abend
diff --git a/Task/Associative-array-Creation/UNIX-Shell/associative-array-creation-2.sh b/Task/Associative-array-Creation/UNIX-Shell/associative-array-creation-2.sh
deleted file mode 100644
index 895c6026b1..0000000000
--- a/Task/Associative-array-Creation/UNIX-Shell/associative-array-creation-2.sh
+++ /dev/null
@@ -1 +0,0 @@
-declare -A hash
diff --git a/Task/Associative-array-Creation/UNIX-Shell/associative-array-creation-1.sh b/Task/Associative-array-Creation/UNIX-Shell/associative-array-creation.sh
similarity index 100%
rename from Task/Associative-array-Creation/UNIX-Shell/associative-array-creation-1.sh
rename to Task/Associative-array-Creation/UNIX-Shell/associative-array-creation.sh
diff --git a/Task/Associative-array-Creation/Zig/associative-array-creation-1.zig b/Task/Associative-array-Creation/Zig/associative-array-creation-1.zig
new file mode 100644
index 0000000000..bd95d38c80
--- /dev/null
+++ b/Task/Associative-array-Creation/Zig/associative-array-creation-1.zig
@@ -0,0 +1,18 @@
+const std = @import("std");
+
+pub fn main() !void {
+ const stdout = std.io.getStdOut().writer();
+ var gpa = std.heap.GeneralPurposeAllocator(.{}){};
+ const allocator = gpa.allocator();
+
+ var hash_map = std.StringHashMap(f64).init(allocator);
+ defer hash_map.deinit();
+
+ try hash_map.put("pi", 3.14159265);
+ try hash_map.put("e", 2.71828183);
+ try hash_map.put("phi", 1.61803399);
+
+ try stdout.print("{d}\n", .{hash_map.get("pi").?});
+ try stdout.print("{d}\n", .{hash_map.get("e").?});
+ try stdout.print("{d}\n", .{hash_map.get("phi").?});
+}
diff --git a/Task/Associative-array-Creation/Zig/associative-array-creation-2.zig b/Task/Associative-array-Creation/Zig/associative-array-creation-2.zig
new file mode 100644
index 0000000000..b969bddec4
--- /dev/null
+++ b/Task/Associative-array-Creation/Zig/associative-array-creation-2.zig
@@ -0,0 +1,23 @@
+const std = @import("std");
+
+const Entity = struct {
+ name: []const u8,
+ hp: i32,
+};
+
+pub fn main() !void {
+ const stdout = std.io.getStdOut().writer();
+ var gpa = std.heap.GeneralPurposeAllocator(.{}){};
+ const allocator = gpa.allocator();
+
+ var hash_map = std.AutoHashMap(u32, Entity).init(allocator);
+ defer hash_map.deinit();
+
+ try hash_map.put(123, .{ .name = "Zombie", .hp = 20 });
+ try hash_map.put(456, .{ .name = "Bat", .hp = 6 });
+ try hash_map.put(789, .{ .name = "Pig", .hp = 10 });
+
+ try stdout.print("{s:6}: HP = {d:3}\n", hash_map.get(123).?);
+ try stdout.print("{s:6}: HP = {d:3}\n", hash_map.get(456).?);
+ try stdout.print("{s:6}: HP = {d:3}\n", hash_map.get(789).?);
+}
diff --git a/Task/Associative-array-Iteration/ArkScript/associative-array-iteration.ark b/Task/Associative-array-Iteration/ArkScript/associative-array-iteration.ark
new file mode 100644
index 0000000000..91c6a4bc56
--- /dev/null
+++ b/Task/Associative-array-Iteration/ArkScript/associative-array-iteration.ark
@@ -0,0 +1,9 @@
+(import std.Dict)
+
+(let d (dict
+ "key1" "value1"
+ "key2" "value2"))
+
+(print (dict:entries d))
+(print (dict:keys d))
+(print (dict:values d))
diff --git a/Task/Associative-array-Iteration/DuckDB/associative-array-iteration.duckdb b/Task/Associative-array-Iteration/DuckDB/associative-array-iteration.duckdb
new file mode 100644
index 0000000000..0b25cd2111
--- /dev/null
+++ b/Task/Associative-array-Iteration/DuckDB/associative-array-iteration.duckdb
@@ -0,0 +1,108 @@
+### MAPs
+
+# Since the keys of a JSON object must be strings, we'll use as an
+# example of a MAP one which has integer keys:
+
+D create or replace macro amap() as (SELECT MAP( [1,2,3], ['hello', 'world', '!']));
+D select amap() "A Map";
+┌─────────────────────────┐
+│ A Map │
+│ map(integer, varchar) │
+├─────────────────────────┤
+│ {1=hello, 2=world, 3=!} │
+└─────────────────────────┘
+
+# Iterating over the keys:
+
+D select unnest(map_keys(amap())) as key;
+┌───────┐
+│ key │
+│ int32 │
+├───────┤
+│ 1 │
+│ 2 │
+│ 3 │
+└───────┘
+
+# Iterating over the values:
+D select unnest(map_values(amap())) as value;
+┌─────────┐
+│ value │
+│ varchar │
+├─────────┤
+│ hello │
+│ world │
+│ ! │
+└─────────┘
+
+# One way to generate the key-value pairs is as follows:
+D select unnest(map_keys(amap())) as key, unnest(map_values(amap())) as value;
+┌───────┬─────────┐
+│ key │ value │
+│ int32 │ varchar │
+├───────┼─────────┤
+│ 1 │ hello │
+│ 2 │ world │
+│ 3 │ ! │
+└───────┴─────────┘
+
+# ... or avoiding calling amap() twice:
+
+D select unnest(map_keys(m)) as key, unnest(map_values(m)) as value
+ from (select amap() m);
+┌───────┬─────────┐
+│ key │ value │
+│ int32 │ varchar │
+├───────┼─────────┤
+│ 1 │ hello │
+│ 2 │ world │
+│ 3 │ ! │
+└───────┴─────────┘
+
+### JSON objects
+
+# For simplicity, we'll the JSON entity `amap()::JSON` as an example object:
+
+D select amap()::JSON as j;
+┌───────────────────────────────────┐
+│ j │
+│ json │
+├───────────────────────────────────┤
+│ {"1":"hello","2":"world","3":"!"} │
+└───────────────────────────────────┘
+
+# To find the keys of a JSON object as a list,
+# whence one can use iteration over lists:
+
+D select json_keys(amap()::JSON) as keys;
+┌───────────┐
+│ keys │
+│ varchar[] │
+├───────────┤
+│ [1, 2, 3] │
+└───────────┘
+
+# Similarly, to find the values in a JSON object as a list:
+
+D select list_transform( json_keys(j), k -> (j->>k) ) as list
+ from (select amap()::JSON as j);
+┌───────────────────┐
+│ list │
+│ varchar[] │
+├───────────────────┤
+│ [hello, world, !] │
+└───────────────────┘
+
+# Show the key-value pairs as a table:
+D select unnest(json_keys(j)) as key,
+ unnest(list_transform(json_keys(j), k -> (j->>k))) as value
+ from (select amap()::JSON as j);
+
+┌─────────┬─────────┐
+│ key │ value │
+│ varchar │ varchar │
+├─────────┼─────────┤
+│ 1 │ hello │
+│ 2 │ world │
+│ 3 │ ! │
+└─────────┴─────────┘
diff --git a/Task/Associative-array-Iteration/Elena/associative-array-iteration-1.elena b/Task/Associative-array-Iteration/Elena/associative-array-iteration-1.elena
deleted file mode 100644
index 1190fcb3c7..0000000000
--- a/Task/Associative-array-Iteration/Elena/associative-array-iteration-1.elena
+++ /dev/null
@@ -1,18 +0,0 @@
-import system'collections;
-import system'routines;
-import extensions;
-
-public program()
-{
- // 1. Create
- var map := Dictionary.new();
- map["key"] := "foox";
- map["key"] := "foo";
- map["key2"]:= "foo2";
- map["key3"]:= "foo3";
- map["key4"]:= "foo4";
-
- // Enumerate
- map.forEach:
- (keyValue){ console.printLine(keyValue.Key," : ",keyValue.Value) }
-}
diff --git a/Task/Associative-array-Iteration/Elena/associative-array-iteration-2.elena b/Task/Associative-array-Iteration/Elena/associative-array-iteration.elena
similarity index 100%
rename from Task/Associative-array-Iteration/Elena/associative-array-iteration-2.elena
rename to Task/Associative-array-Iteration/Elena/associative-array-iteration.elena
diff --git a/Task/Associative-array-Iteration/Haxe/associative-array-iteration.haxe b/Task/Associative-array-Iteration/Haxe/associative-array-iteration.haxe
new file mode 100644
index 0000000000..ff94ad47ff
--- /dev/null
+++ b/Task/Associative-array-Iteration/Haxe/associative-array-iteration.haxe
@@ -0,0 +1,18 @@
+class Main {
+ static public function main() {
+ var map = [1 => "one", 2 => "two"];
+
+ // key and value
+ for (key => value in map) {
+ trace(key + " " + value);
+ }
+
+ // keys only
+ for (key in map.keys())
+ trace(key);
+
+ // values only
+ for (value in map)
+ trace(value);
+ }
+}
diff --git a/Task/Associative-array-Iteration/Pluto/associative-array-iteration.pluto b/Task/Associative-array-Iteration/Pluto/associative-array-iteration.pluto
new file mode 100644
index 0000000000..89f8ff1597
--- /dev/null
+++ b/Task/Associative-array-Iteration/Pluto/associative-array-iteration.pluto
@@ -0,0 +1,19 @@
+-- Create a new map with four entries.
+local capitals = {
+ Greece = "Athens",
+ Sweden = "Stockholm",
+ Peru = "Lima",
+ Uruguay = "Monevideo"
+}
+
+-- Iterate through the map and print out the key/value pairs.
+for k, v in capitals do print(k, v) end
+print()
+
+-- Iterate though the map and print out just the keys.
+for capitals:keys() as k do print(k) end
+print()
+
+-- Iterate though the map and print out just the values.
+for capitals:values() as v do print(v) end
+print()
diff --git a/Task/Associative-array-Iteration/REXX/associative-array-iteration.rexx b/Task/Associative-array-Iteration/REXX/associative-array-iteration.rexx
index 5fbb924302..3e3f1bf670 100644
--- a/Task/Associative-array-Iteration/REXX/associative-array-iteration.rexx
+++ b/Task/Associative-array-Iteration/REXX/associative-array-iteration.rexx
@@ -1,58 +1,72 @@
-/*REXX program demonstrates how to set and display values for an associative array. */
-/*╔════════════════════════════════════════════════════════════════════════════════════╗
- ║ The (below) two REXX statements aren't really necessary, but it shows how to ║
- ║ define any and all entries in a associative array so that if a "key" is used that ║
- ║ isn't defined, it can be displayed to indicate such, or its value can be checked ║
- ║ to determine if a particular associative array element has been set (defined). ║
- ╚════════════════════════════════════════════════════════════════════════════════════╝*/
-stateF.= ' [not defined yet] ' /*sets any/all state former capitals.*/
-stateN.= ' [not defined yet] ' /*sets any/all state names. */
-w = 0 /*the maximum length of a state name.*/
-stateL =
-/*╔════════════════════════════════════════════════════════════════════════════════════╗
- ║ The list of states (empty as of now). It's convenient to have them in alphabetic ║
- ║ order; they'll be listed in the order as they are in the REXX program below). ║
- ║ In REXX, when a key is used (for a stemmed array, as they are called in REXX), ║
- ║ and the key isn't assigned a value, the key's name is stored (internally) as ║
- ║ uppercase (Latin) characters (as in the examples below. If the key has a ║
- ║ a value, the key's value is used as is (i.e.: no upper translation is performed).║
- ║ Actually, any characters can be used, including blank(s) and non─displayable ║
- ║ characters (including '00'x, 'ff'x, commas, periods, quotes, ···). ║
- ╚════════════════════════════════════════════════════════════════════════════════════╝*/
-call setSC 'al', "Alabama" , 'Tuscaloosa'
-call setSC 'ca', "California" , 'Benicia'
-call setSC 'co', "Colorado" , 'Denver City'
-call setSC 'ct', "Connecticut" , 'Hartford and New Haven (jointly)'
-call setSC 'de', "Delaware" , 'New-Castle'
-call setSC 'ga', "Georgia" , 'Milledgeville'
-call setSC 'il', "Illinois" , 'Vandalia'
-call setSC 'in', "Indiana" , 'Corydon'
-call setSC 'ia', "Iowa" , 'Iowa City'
-call setSC 'la', "Louisiana" , 'New Orleans'
-call setSC 'me', "Maine" , 'Portland'
-call setSC 'mi', "Michigan" , 'Detroit'
-call setSC 'ms', "Mississippi" , 'Natchez'
-call setSC 'mo', "Missouri" , 'Saint Charles'
-call setSC 'mt', "Montana" , 'Virginia City'
-call setSC 'ne', "Nebraska" , 'Lancaster'
-call setSC 'nh', "New Hampshire" , 'Exeter'
-call setSC 'ny', "New York" , 'New York'
-call setSC 'nc', "North Carolina" , 'Fayetteville'
-call setSC 'oh', "Ohio" , 'Chillicothe'
-call setSC 'ok', "Oklahoma" , 'Guthrie'
-call setSC 'pa', "Pennsylvania" , 'Lancaster'
-call setSC 'sc', "South Carolina" , 'Charlestown'
-call setSC 'tn', "Tennessee" , 'Murfreesboro'
-call setSC 'vt', "Vermont" , 'Windsor'
+-- 8 Aug 2025
+include Settings
- do j=1 for words(stateL) /*show all capitals that were defined. */
- $= word(stateL, j) /*get the next (USA) state in the list.*/
- say 'the former capital of ('$") " left(stateN.$, w) " was " stateC.$
- end /*j*/ /* [↑] show states that were defined.*/
-exit /*stick a fork in it, we're all done. */
-/*──────────────────────────────────────────────────────────────────────────────────────*/
-setSC: parse arg code,name,cap; upper code /*get code, name & cap.; uppercase code*/
- stateL= stateL code /*keep a list of all the US state codes*/
- stateN.code= name; w= max(w,length(name)) /*define the state's name; max width. */
- stateC.code= cap /* " " " code to the capital*/
- return /*return to invoker, SETSC is finished.*/
+say 'ASSOCIATIVE ARRAY: ITERATION'
+say version
+say
+list=''; arra.=''; w=0
+-- States with former capitals: key, name, capital
+call SetStateCap 'al','Alabama','Tuscaloosa'
+call SetStateCap 'ca','California','Benicia'
+call SetStateCap 'co','Colorado','Denver City'
+call SetStateCap 'ct','Connecticut','Hartford and New Haven'
+call SetStateCap 'de','Delaware','New-Castle'
+call SetStateCap 'ga','Georgia','Milledgeville'
+call SetStateCap 'il','Illinois','Vandalia'
+call SetStateCap 'in','Indiana','Corydon'
+call SetStateCap 'ia','Iowa','Iowa City'
+call SetStateCap 'la','Louisiana','New Orleans'
+call SetStateCap 'me','Maine','Portland'
+call SetStateCap 'mi','Michigan','Detroit'
+call SetStateCap 'ms','Mississippi','Natchez'
+call SetStateCap 'mo','Missouri','Saint Charles'
+call SetStateCap 'mt','Montana','Virginia City'
+call SetStateCap 'ne','Nebraska','Lancaster'
+call SetStateCap 'nh','New Hampshire','Exeter'
+call SetStateCap 'ny','New York','New York'
+call SetStateCap 'nc','North Carolina','Fayetteville'
+call SetStateCap 'oh','Ohio','Chillicothe'
+call SetStateCap 'ok','Oklahoma','Guthrie'
+call SetStateCap 'pa','Pennsylvania','Lancaster'
+call SetStateCap 'sc','South Carolina','Charlestown'
+call SetStateCap 'tn','Tennessee','Murfreesboro'
+call SetStateCap 'vt','Vermont','Windsor'
+arra.0=w
+-- Loop through list
+say 'Using a list...'
+do w = 1 to words(list)
+ a=Word(list,w)
+ say 'The former capital of' stna.a '('a')' 'was' stca.a
+end
+say
+-- Loop through aux array...'
+say 'Using an array...'
+do w = 1 to arra.0
+ a=arra.w
+ say 'The former capital of' stna.a '('a')' 'was' stca.a
+end
+say
+-- Show all vars
+say 'Variables...'
+if pos('Regina',version) > 0 then
+ call Library
+call SysDumpVariables
+exit
+
+SetStateCap:
+parse arg code,name,cap
+code=Upper(code)
+-- Next row in associative array
+stna.code=name; stca.code=cap
+-- Track keys in a list
+list=list code
+-- Track keys in an array
+w=w+1; arra.w=code
+return
+
+Library:
+call RxFuncAdd 'SysLoadFuncs','RegUtil','SysLoadFuncs'
+call SysLoadFuncs
+return
+
+include Abend
diff --git a/Task/Associative-array-Iteration/TAV/associative-array-iteration.tav b/Task/Associative-array-Iteration/TAV/associative-array-iteration.tav
new file mode 100644
index 0000000000..623ffbb902
--- /dev/null
+++ b/Task/Associative-array-Iteration/TAV/associative-array-iteration.tav
@@ -0,0 +1,24 @@
+main(params):+
+ mm =: 'a' -> 1, 'b' -> 2, 'c' -> 3
+ mm =: tuple mm as map
+ \ iterate over the pairs, order undefined
+ ?# t =: map mm give pairs
+ print t.1 _ '->' _ t.2 _ ' ' nonl
+ print ''
+ \ iterate over the keys
+ ?# k =: map mm give keys
+ print k, ' ' nonl
+ print ''
+ x =: mm{'c'} \ changes order by access
+ \ iterate over the values only
+ ?# v =: map mm give values
+ print v, ' ' nonl
+ print ''
+ \ ordered keys:
+ ?# k =: map mm give keys ascending
+ print k, ' ' nonl
+ print ''
+ \ ordered keys:
+ ?# k =: map mm give keys descending
+ print k _ '->' _ mm{k} _ ' ' nonl
+ print ''
diff --git a/Task/Associative-array-Iteration/Tcl/associative-array-iteration-1.tcl b/Task/Associative-array-Iteration/Tcl/associative-array-iteration-1.tcl
index 191b6d0205..33e625a459 100644
--- a/Task/Associative-array-Iteration/Tcl/associative-array-iteration-1.tcl
+++ b/Task/Associative-array-Iteration/Tcl/associative-array-iteration-1.tcl
@@ -1,16 +1,7 @@
-array set myAry {
- # list items here...
+array set family {
+ surname Miller
+ father John
+ mother Helen
+ daughter [list Jane Karen]
+ son Donald
}
-
-# Iterate over keys and values
-foreach {key value} [array get myAry] {
- puts "$key -> $value"
-}
-
-# Iterate over just keys
-foreach key [array names myAry] {
- puts "key = $key"
-}
-
-# There is nothing for directly iterating over just the values
-# Use the keys+values version and ignore the keys
diff --git a/Task/Associative-array-Iteration/Tcl/associative-array-iteration-2.tcl b/Task/Associative-array-Iteration/Tcl/associative-array-iteration-2.tcl
index 0c64d363c4..16bf134315 100644
--- a/Task/Associative-array-Iteration/Tcl/associative-array-iteration-2.tcl
+++ b/Task/Associative-array-Iteration/Tcl/associative-array-iteration-2.tcl
@@ -1,16 +1,3 @@
-set myDict [dict create ...]; # Make the dictionary
-
-# Iterate over keys and values
-dict for {key value} $myDict {
- puts "$key -> $value"
-}
-
-# Iterate over keys
-foreach key [dict keys $myDict] {
- puts "key = $key"
-}
-
-# Iterate over values
-foreach value [dict values $myDict] {
- puts "value = $value"
-}
+# "John Miller"
+set dad "$family(father) $family(lastname)"
+set second_daughter [lindex $family(daughter) 1]
diff --git a/Task/Associative-array-Iteration/Tcl/associative-array-iteration-3.tcl b/Task/Associative-array-Iteration/Tcl/associative-array-iteration-3.tcl
new file mode 100644
index 0000000000..68b3bbd537
--- /dev/null
+++ b/Task/Associative-array-Iteration/Tcl/associative-array-iteration-3.tcl
@@ -0,0 +1,2 @@
+set l [array get family]
+# {surname Miller father John mother Helen daughter {Jane Karen} son Donald}
diff --git a/Task/Associative-array-Iteration/Tcl/associative-array-iteration-4.tcl b/Task/Associative-array-Iteration/Tcl/associative-array-iteration-4.tcl
new file mode 100644
index 0000000000..191b6d0205
--- /dev/null
+++ b/Task/Associative-array-Iteration/Tcl/associative-array-iteration-4.tcl
@@ -0,0 +1,16 @@
+array set myAry {
+ # list items here...
+}
+
+# Iterate over keys and values
+foreach {key value} [array get myAry] {
+ puts "$key -> $value"
+}
+
+# Iterate over just keys
+foreach key [array names myAry] {
+ puts "key = $key"
+}
+
+# There is nothing for directly iterating over just the values
+# Use the keys+values version and ignore the keys
diff --git a/Task/Associative-array-Iteration/Tcl/associative-array-iteration-5.tcl b/Task/Associative-array-Iteration/Tcl/associative-array-iteration-5.tcl
new file mode 100644
index 0000000000..0c64d363c4
--- /dev/null
+++ b/Task/Associative-array-Iteration/Tcl/associative-array-iteration-5.tcl
@@ -0,0 +1,16 @@
+set myDict [dict create ...]; # Make the dictionary
+
+# Iterate over keys and values
+dict for {key value} $myDict {
+ puts "$key -> $value"
+}
+
+# Iterate over keys
+foreach key [dict keys $myDict] {
+ puts "key = $key"
+}
+
+# Iterate over values
+foreach value [dict values $myDict] {
+ puts "value = $value"
+}
diff --git a/Task/Associative-array-Iteration/Zig/associative-array-iteration-1.zig b/Task/Associative-array-Iteration/Zig/associative-array-iteration-1.zig
new file mode 100644
index 0000000000..90daa4bc29
--- /dev/null
+++ b/Task/Associative-array-Iteration/Zig/associative-array-iteration-1.zig
@@ -0,0 +1,30 @@
+const std = @import("std");
+
+pub fn main() !void {
+ const stdout = std.io.getStdOut().writer();
+ var gpa = std.heap.GeneralPurposeAllocator(.{}){};
+ const allocator = gpa.allocator();
+
+ var hash_map = std.StringArrayHashMap(f32).init(allocator);
+ defer hash_map.deinit();
+
+ try hash_map.put("B3", 246.94);
+ try hash_map.put("C4", 261.63);
+ try hash_map.put("C#4", 277.18);
+
+ for (hash_map.keys()) |key| {
+ try stdout.print("{s}\n", .{key});
+ }
+
+ for (hash_map.values()) |value| {
+ try stdout.print("{d}\n", .{value});
+ }
+
+ var iter = hash_map.iterator();
+ while (iter.next()) |entry| {
+ const key = entry.key_ptr.*;
+ const value = entry.value_ptr.*;
+
+ try stdout.print("{s}, {d}\n", .{key, value});
+ }
+}
diff --git a/Task/Associative-array-Iteration/Zig/associative-array-iteration-2.zig b/Task/Associative-array-Iteration/Zig/associative-array-iteration-2.zig
new file mode 100644
index 0000000000..be3b2677d1
--- /dev/null
+++ b/Task/Associative-array-Iteration/Zig/associative-array-iteration-2.zig
@@ -0,0 +1,30 @@
+const std = @import("std");
+
+pub fn main() !void {
+ const stdout = std.io.getStdOut().writer();
+ var gpa = std.heap.GeneralPurposeAllocator(.{}){};
+ const allocator = gpa.allocator();
+
+ var hash_map = std.AutoArrayHashMap(u8, []const u8).init(allocator);
+ defer hash_map.deinit();
+
+ try hash_map.put('A', "Alpha");
+ try hash_map.put('B', "Bravo");
+ try hash_map.put('C', "Charlie");
+
+ for (hash_map.keys()) |key| {
+ try stdout.print("{c}\n", .{key});
+ }
+
+ for (hash_map.values()) |value| {
+ try stdout.print("{s}\n", .{value});
+ }
+
+ var iter = hash_map.iterator();
+ while (iter.next()) |entry| {
+ const key = entry.key_ptr.*;
+ const value = entry.value_ptr.*;
+
+ try stdout.print("{c}, {s}\n", .{key, value});
+ }
+}
diff --git a/Task/Associative-array-Merging/DuckDB/associative-array-merging-1.duckdb b/Task/Associative-array-Merging/DuckDB/associative-array-merging-1.duckdb
new file mode 100644
index 0000000000..be9c95b7eb
--- /dev/null
+++ b/Task/Associative-array-Merging/DuckDB/associative-array-merging-1.duckdb
@@ -0,0 +1,4 @@
+set variable base= { 'name': 'Rocket Skates', 'price': 12.75, 'color':'yellow'}::JSON;
+set variable update = { 'price': 15.25, 'color': 'red', 'year': 1974 }::JSON;
+
+select json_merge_patch(getvariable('base'),getvariable('update')) as add;
diff --git a/Task/Associative-array-Merging/DuckDB/associative-array-merging-2.duckdb b/Task/Associative-array-Merging/DuckDB/associative-array-merging-2.duckdb
new file mode 100644
index 0000000000..3dd23a19a1
--- /dev/null
+++ b/Task/Associative-array-Merging/DuckDB/associative-array-merging-2.duckdb
@@ -0,0 +1,11 @@
+create or replace function map_merge_patch(a,b) as (
+ with keys_t as (
+ select (map_keys(a) + map_keys(b)).list_distinct() as keys
+ ),
+ values_t as (
+ select list_transform(keys, key -> coalesce(b[key][1],a[key][1])) as values
+ from keys_t)
+ select MAP(keys, values) from keys_t, values_t
+);
+
+select map_merge_patch( MAP([1,2],[1,2]), MAP([1,3],[10,30])) as add;
diff --git a/Task/Associative-array-Merging/DuckDB/associative-array-merging-3.duckdb b/Task/Associative-array-Merging/DuckDB/associative-array-merging-3.duckdb
new file mode 100644
index 0000000000..60dfac34ba
--- /dev/null
+++ b/Task/Associative-array-Merging/DuckDB/associative-array-merging-3.duckdb
@@ -0,0 +1,11 @@
+create or replace function struct_merge_patch(base, update) as (
+
+ with cte as (
+ from (select unnest(update))
+ positional join
+ (select COLUMNS(x -> x not in json_keys(update::JSON)) from (select unnest(base)))
+ )
+ select cte from cte
+);
+
+select struct_merge_patch( getvariable('base'), getvariable('update')) as merged;
diff --git a/Task/Associative-array-Merging/Fortran/associative-array-merging.f b/Task/Associative-array-Merging/Fortran/associative-array-merging.f
new file mode 100644
index 0000000000..294f442506
--- /dev/null
+++ b/Task/Associative-array-Merging/Fortran/associative-array-merging.f
@@ -0,0 +1,94 @@
+module assoc_array_mod
+ implicit none
+ private
+ public :: KeyValue, merge_assoc_arrays
+
+ ! Derived type for key-value pairs
+ type :: KeyValue
+ character(len=:), allocatable :: key
+ character(len=:), allocatable :: value
+ end type KeyValue
+
+contains
+
+ ! Function to merge two associative arrays
+ function merge_assoc_arrays(base, update) result(merged)
+ type(KeyValue), intent(in) :: base(:), update(:)
+ type(KeyValue), allocatable :: merged(:)
+ type(KeyValue), allocatable :: temp(:)
+ integer :: base_size, update_size, i, j, k, merged_size
+ logical :: key_exists
+
+ base_size = size(base)
+ update_size = size(update)
+
+ ! Allocate temporary array to hold all possible keys (worst case: no overlap)
+ allocate(temp(base_size + update_size))
+ merged_size = 0
+
+ ! Add all keys from update array (update takes precedence)
+ do i = 1, update_size
+ merged_size = merged_size + 1
+ temp(merged_size)%key = update(i)%key
+ temp(merged_size)%value = update(i)%value
+ end do
+
+ ! Add keys from base array that are not in update
+ do i = 1, base_size
+ key_exists = .false.
+ do j = 1, update_size
+ if (base(i)%key == update(j)%key) then
+ key_exists = .true.
+ exit
+ end if
+ end do
+ if (.not. key_exists) then
+ merged_size = merged_size + 1
+ temp(merged_size)%key = base(i)%key
+ temp(merged_size)%value = base(i)%value
+ end if
+ end do
+
+ ! Allocate merged array with exact size
+ allocate(merged(merged_size))
+ do i = 1, merged_size
+ merged(i)%key = temp(i)%key
+ merged(i)%value = temp(i)%value
+ end do
+
+ ! Clean up temporary array
+ deallocate(temp)
+ end function merge_assoc_arrays
+
+end module assoc_array_mod
+
+program main
+ use assoc_array_mod
+ implicit none
+ type(KeyValue), allocatable :: base(:), update(:), merged(:)
+ integer :: i
+
+ ! Initialize base associative array
+ allocate(base(3))
+ base(1) = KeyValue("name", "Rocket Skates")
+ base(2) = KeyValue("price", "12.75")
+ base(3) = KeyValue("color", "yellow")
+
+ ! Initialize update associative array
+ allocate(update(3))
+ update(1) = KeyValue("price", "15.25")
+ update(2) = KeyValue("color", "red")
+ update(3) = KeyValue("year", "1974")
+
+ ! Merge the arrays
+ merged = merge_assoc_arrays(base, update)
+
+ ! Print the merged array
+ print *, "Merged associative array:"
+ do i = 1, size(merged)
+ print *, "Key: ", merged(i)%key, ", Value: ", merged(i)%value
+ end do
+
+ ! Clean up
+ deallocate(base, update, merged)
+end program main
diff --git a/Task/Associative-array-Merging/Pluto/associative-array-merging.pluto b/Task/Associative-array-Merging/Pluto/associative-array-merging.pluto
new file mode 100644
index 0000000000..cfa921a360
--- /dev/null
+++ b/Task/Associative-array-Merging/Pluto/associative-array-merging.pluto
@@ -0,0 +1,11 @@
+local function merge_maps(m1, m2)
+ local m3 = {}
+ for m1:keys() as key do m3[key] = m1[key] end
+ for m2:keys() as key do m3[key] = m2[key] end
+ return m3
+end
+
+local base = {name = "Rocket Skates", price = 12.75, color = "yellow"}
+local update = {price = 15.25, color = "red", year = 1974}
+local merged = merge_maps(base, update)
+for k, v in merged do print(k, v) end
diff --git a/Task/Associative-array-Merging/REXX/associative-array-merging.rexx b/Task/Associative-array-Merging/REXX/associative-array-merging.rexx
index d13ae1dcfd..40cf80021f 100644
--- a/Task/Associative-array-Merging/REXX/associative-array-merging.rexx
+++ b/Task/Associative-array-Merging/REXX/associative-array-merging.rexx
@@ -1,33 +1,78 @@
-/*REXX program merges two associative arrays (requiring an external list of indices). */
-$.= /*define default value(s) for arrays. */
-@.wAAn= 21; @.wKey= 7; @.wVal= 7 /*max widths of: AAname, keys, values.*/
-call defAA 'base', "name Rocket Skates", 'price 12.75', "color yellow"
-call defAA 'update', "price 15.25", "color red", 'year 1974'
-call show 'base'
-call show 'update'
-call show 'new'
-exit /*stick a fork in it, we're all done. */
-/*──────────────────────────────────────────────────────────────────────────────────────*/
-defAA: procedure expose $. @.; parse arg AAn; new= 'new' /*get AA name; set NEW.*/
- do j=2 to arg(); parse value arg(j) with key val /*obtain key and value.*/
- $.AAn.key= val /*assign a value to a key for AAn. */
- if wordpos(key, $.AAN.?keys)==0 then $.AAn.?keys= $.AAn.?keys key
- /* [↑] add to key list if not in list.*/
- $.new.key= val /*assign a value to a key for "new".*/
- if wordpos(key, $.new.?keys)==0 then $.new.?keys= $.new.?keys key
- /* [↑] add to key list if not in list.*/
- @.wKey= max(@.wKey, length(key) ) /*find max width of a name of a key. */
- @.wVal= max(@.wVal, length(val) ) /* " " " " " " " " value.*/
- @.wAA = max(@.wAAn, length(AAn) ) /* " " " " " " " array.*/
- end /*j*/
- return
-/*──────────────────────────────────────────────────────────────────────────────────────*/
-show: procedure expose $. @.; parse arg AAn; say; _= '═' /*set title char.*/
- do j=1 for words($.AAn.?keys) /*process keys. */
- if j==1 then say center('associate array', @.wAAn, _) ,
- center("key" , @.wKey, _) ,
- center('value' , @.wVal + 2, _)
- key= word($.AAn.?keys, j) /*get the name of a key.*/
- say center(AAn, @.wAAn) right(key, @.wKey) $.AAn.key /*show some information.*/
- end /*j*/
- return
+-- 8 Aug 2025
+include Settings
+
+say 'ASSOCIATIVE ARRAY: MERGE'
+say version
+say
+call CreateBase
+call ShowBase 'Original'
+call CreateUpdate
+call ShowUpdate
+call MergeBaseUpdate
+call ShowBase 'Merged'
+exit
+
+CreateBase:
+base=''; base.=''
+call ProcBase 'name','Rocket Skates'
+call ProcBase 'price',12.75
+call ProcBase 'color','Yellow'
+return
+
+ShowBase:
+parse arg xx
+sep=Copies('-',20)
+say 'Base array' xx
+say sep
+say 'Key value'
+say sep
+do i = 1 to Words(base)
+ key=Word(base,i)
+ say Left(key,6) base.key
+end
+say sep
+say
+return
+
+CreateUpdate:
+upda=''; upda.=''
+call ProcUpdate 'price',15.25
+call ProcUpdate 'color','Red'
+call ProcUpdate 'year',1974
+return
+
+ShowUpdate:
+say 'Update array'
+say sep
+say 'Key value'
+say sep
+do i = 1 to Words(upda)
+ key=Word(upda,i)
+ say Left(key,6) upda.key
+end
+say sep
+say
+return
+
+MergeBaseUpdate:
+do w = 1 to Words(upda)
+ key=Word(upda,w); val=upda.key
+ call ProcBase key,val
+end
+return
+
+ProcBase:
+parse arg k,v
+if WordPos(k,base) = 0 then
+ base=base k
+base.k=v
+return
+
+ProcUpdate:
+parse arg k,v
+if WordPos(k,upda) = 0 then
+ upda=upda k
+upda.k=v
+return
+
+include Abend
diff --git a/Task/Attractive-numbers/Agena/attractive-numbers.agena b/Task/Attractive-numbers/Agena/attractive-numbers.agena
new file mode 100644
index 0000000000..01fe38dcca
--- /dev/null
+++ b/Task/Attractive-numbers/Agena/attractive-numbers.agena
@@ -0,0 +1,28 @@
+scope # find some attractive numbers - numbers whose prime factor counts are prime, n must be > 1
+
+ local constant maxNumber := 120; # maximum number we will consider
+
+ printf( "The attractve numbers up to %d\n", maxNumber );
+ local aCount := 0;
+ for i from 2 to maxNumber do
+ local v, fCount := i, 0;
+ while v mod 2 = 0 do
+ fCount +:= 1;
+ v \:= 2
+ od;
+ for j from 3 to maxNumber by 2 while v > 1 do
+ while v > 1 and v mod j = 0 do
+ fCount +:= 1;
+ v \:= j
+ od
+ od;
+ if fCount > 0 then
+ if numtheory.isprime( fCount ) then
+ printf( " %3d", i );
+ aCount +:= 1;
+ if aCount mod 20 = 0 then print() fi
+ fi
+ fi
+ od;
+ printf( "\nFound %d attractive numbers\n", aCount )
+end
diff --git a/Task/Attractive-numbers/Lua/attractive-numbers.lua b/Task/Attractive-numbers/Lua/attractive-numbers.lua
index 19f47fc858..fa18744307 100644
--- a/Task/Attractive-numbers/Lua/attractive-numbers.lua
+++ b/Task/Attractive-numbers/Lua/attractive-numbers.lua
@@ -11,11 +11,10 @@ end
-- Compute the prime factors of n
function factors (n)
- local facList, divisor, count = {}, 1
+ local facList, divisor = {}, 1
if n < 2 then return facList end
while not isPrime(n) do
while not isPrime(divisor) do divisor = divisor + 1 end
- count = 0
while n % divisor == 0 do
n = n / divisor
table.insert(facList, divisor)
@@ -28,6 +27,10 @@ function factors (n)
end
-- Main procedure
+local count = 0
for i = 1, 120 do
- if isPrime(#factors(i)) then io.write(i .. "\t") end
+ if isPrime(#factors(i)) then
+ count = count - 1
+ io.write( string.format("%6d", i), ( count % 12 == 0 and "\n" or "" ))
+ end
end
diff --git a/Task/Attractive-numbers/Pluto/attractive-numbers.pluto b/Task/Attractive-numbers/Pluto/attractive-numbers.pluto
new file mode 100644
index 0000000000..fad6286fed
--- /dev/null
+++ b/Task/Attractive-numbers/Pluto/attractive-numbers.pluto
@@ -0,0 +1,40 @@
+do -- find some attractive numbers - numbers whose prime factor count is prime
+
+ -- Returns true if x is prime, and false otherwise
+ function isPrime (x)
+ if x < 2 then return false end
+ if x < 4 then return true end
+ if x % 2 == 0 then return false end
+ for d = 3, math.sqrt(x), 2 do
+ if x % d == 0 then return false end
+ end
+ return true
+ end
+
+ -- Compute the prime factors of n
+ function factors (n)
+ local facList, divisor = {}, 1
+ if n > 1 then
+ while not isPrime(n) do
+ while not isPrime(divisor) do ++ divisor end
+ while n % divisor == 0 do
+ n //= divisor
+ facList:insert(divisor)
+ end
+ ++ divisor
+ if n == 1 then return facList end
+ end
+ facList:insert(n)
+ end
+ return facList
+ end
+
+ -- Main procedure
+ local count = 0
+ for i = 1, 120 do
+ if isPrime(#factors(i)) then
+ ++ count
+ io.write( string.format( "%6d", i ), if count % 12 == 0 then "\n" else "" end )
+ end
+ end
+end
diff --git a/Task/Averages-Arithmetic-mean/Apple/averages-arithmetic-mean.apple b/Task/Averages-Arithmetic-mean/Apple/averages-arithmetic-mean.apple
new file mode 100644
index 0000000000..02cf4807c8
--- /dev/null
+++ b/Task/Averages-Arithmetic-mean/Apple/averages-arithmetic-mean.apple
@@ -0,0 +1,2 @@
+ > [(+)/x%ℝ(:x)] ⟨3,1,4,1,5,9⟩
+3.833333333333333
diff --git a/Task/Averages-Arithmetic-mean/DuckDB/averages-arithmetic-mean.duckdb b/Task/Averages-Arithmetic-mean/DuckDB/averages-arithmetic-mean.duckdb
new file mode 100644
index 0000000000..f401cf4302
--- /dev/null
+++ b/Task/Averages-Arithmetic-mean/DuckDB/averages-arithmetic-mean.duckdb
@@ -0,0 +1,3 @@
+create or replace function average(lst) as (
+ list_sum(lst) / length(lst)
+);
diff --git a/Task/Averages-Arithmetic-mean/Elena/averages-arithmetic-mean.elena b/Task/Averages-Arithmetic-mean/Elena/averages-arithmetic-mean.elena
index 11d1006f7a..7d2af43a0a 100644
--- a/Task/Averages-Arithmetic-mean/Elena/averages-arithmetic-mean.elena
+++ b/Task/Averages-Arithmetic-mean/Elena/averages-arithmetic-mean.elena
@@ -21,8 +21,8 @@ extension op
public program()
{
- var array := new int[]{1, 2, 3, 4, 5, 6, 7, 8};
- console.printLine(
- "Arithmetic mean of {",array.asEnumerable(),"} is ",
- array.average()).readChar()
+ var array := new int[]{1, 2, 3, 4, 5, 6, 7, 8};
+ Console.printLine(
+ "Arithmetic mean of {",array.asEnumerable(),"} is ",
+ array.average()).readChar()
}
diff --git a/Task/Averages-Arithmetic-mean/Pluto/averages-arithmetic-mean.pluto b/Task/Averages-Arithmetic-mean/Pluto/averages-arithmetic-mean.pluto
new file mode 100644
index 0000000000..65b6a14afc
--- /dev/null
+++ b/Task/Averages-Arithmetic-mean/Pluto/averages-arithmetic-mean.pluto
@@ -0,0 +1,4 @@
+local function arithmetic_mean(a) return a:reduce(|sum, i| -> sum + i) / #a end
+
+local arrays = { {1, 2, 3, 4, 5}, {} }
+for arrays as a do print(arithmetic_mean(a)) end
diff --git a/Task/Averages-Mean-angle/DuckDB/averages-mean-angle.duckdb b/Task/Averages-Mean-angle/DuckDB/averages-mean-angle.duckdb
new file mode 100644
index 0000000000..305fe03554
--- /dev/null
+++ b/Task/Averages-Mean-angle/DuckDB/averages-mean-angle.duckdb
@@ -0,0 +1,13 @@
+# Mean of given list of angles in degrees, to 7 decimal places
+create or replace function mean_angle(lst) as (
+ with angles as (select unnest(lst) as angle),
+ radians as (select (angle * pi() / 180) as alpha from angles),
+ trig as (select sin(alpha) as s, cos(alpha) as c from radians)
+
+ select round(atan2( sum(s) / length(lst), sum(c) / length(lst) ) * 180 / pi(), 7) from trig
+);
+
+select angles, mean_angle(angles) as mean from values
+ ([350, 10]),
+ ([90,180,270,360]),
+ ([10, 20, 30]) t(angles);
diff --git a/Task/Averages-Mean-time-of-day/DuckDB/averages-mean-time-of-day.duckdb b/Task/Averages-Mean-time-of-day/DuckDB/averages-mean-time-of-day.duckdb
new file mode 100644
index 0000000000..cfcd6745d2
--- /dev/null
+++ b/Task/Averages-Mean-time-of-day/DuckDB/averages-mean-time-of-day.duckdb
@@ -0,0 +1,17 @@
+create or replace function mean_time(t1, t2) as (
+ select if (diff >= 0, t1::TIME + INTERVAL (diff/2) seconds,
+ t1::TIME + INTERVAL ((86400 + diff)/2) seconds)
+ from
+ ( select datediff('seconds', t1::TIME, t2::TIME) as diff )
+);
+
+## Examples:
+select times[1], times[2], mean_time(times[1], times[2]) as mean
+from values
+ ( ['0:0:0', '12:0:0' ] ),
+ ( ['0:0:0', '24:0:0' ] ),
+ ( ['1:0:0', '1:0:0' ] ),
+ ( ['20:0:0', '4:0:0' ] ),
+ ( ['20:0:0', '4:0:2' ] ),
+ ( ['23:0:0', '23:0:0'] )
+t(times);
diff --git a/Task/Averages-Mean-time-of-day/FutureBasic/averages-mean-time-of-day.basic b/Task/Averages-Mean-time-of-day/FutureBasic/averages-mean-time-of-day.basic
new file mode 100644
index 0000000000..4e0717b789
--- /dev/null
+++ b/Task/Averages-Mean-time-of-day/FutureBasic/averages-mean-time-of-day.basic
@@ -0,0 +1,70 @@
+//
+// Averages/Mean time of day
+// FutureBasic 7.0.34, August 2025 R.W
+//
+_angles = 1 //tag for MDA array
+
+// Our test data times
+CFStringRef tm(4) = {@"Times",@"23:00:17", @"23:40:20", @"00:12:45", @"00:17:19"}
+
+// get average of angle sum
+local fn MeanAngle( tag as Int ) as double
+ long count
+ double sinSum, cosSum
+ count = mda_count tag //count total including zeroeth element
+ sinSum = 0.0: cosSum = 0.0
+ for long i = 1 to count - 1 //remove zero
+ sinSum += sin(mda tag(i) * PI / 180.0)
+ cosSum += cos(mda tag(i) * PI / 180.0)
+ next
+end fn = fn atan2(sinSum / count, cosSum / count) * 180.0 / PI
+
+// Get seconds from time t format = "hh:mm:ss"
+local fn timeToSecs(t As CFStringRef) as Int
+ Int hours, mins, secs
+ hours = IntVal(Left(t, 2))
+ mins = IntVal(Mid(t, 3, 2))
+ secs = IntVal(Right(t, 2))
+end fn = 3600 * hours + 60 * mins + secs
+
+// 1 second = 360/(24 * 3600) = 1/240th of a degree
+local fn timeToDegrees(t as CFStringRef) as Double
+ Int secs
+ secs = fn timeToSecs(t)
+end fn = secs/240.0
+
+// convert degrees to time string
+local fn degreesToTime(d As Double) as CFStringRef
+ Int hours, mins, secs
+ CFStringRef result,h,m,s, tmp
+ result = @"":h=@"":m=@"":s=@"":tmp = @""
+ If d < 0 Then d = d + 360.0
+ secs = d * 240.0
+ hours = fix(secs / 3600)
+ tmp = mid(str(hours),1)
+ if hours < 10 then h = concat(@"0",tmp) else h = tmp
+ mins = secs % 3600
+ secs = mins % 60
+ tmp = mid(str(secs),1)
+ if secs < 10 then s = concat(@"0",tmp) else s = tmp
+ mins = fix(mins / 60)
+ tmp = mid(str(mins),1)
+ if mins < 10 then m = concat(@"0",tmp) else m = tmp
+ result = concat(result,h,@":",m,@":",s)
+end fn = result
+
+
+window 1
+
+// load MDA array with time to degrees
+// from test data
+for Int x = 1 to 4
+ mda _angles(x) = fn timeToDegrees(tm(x))
+next x
+
+double mean
+mean = fn meanAngle(_angles)
+print
+print " Average time is: "; fn degreesToTime(mean)
+
+handleEvents
diff --git a/Task/Averages-Median/Elena/averages-median.elena b/Task/Averages-Median/Elena/averages-median.elena
index 8dd0572594..c5e03aa82e 100644
--- a/Task/Averages-Median/Elena/averages-median.elena
+++ b/Task/Averages-Median/Elena/averages-median.elena
@@ -33,8 +33,8 @@ public program()
var a1 := new real[]{4.1r, 5.6r, 7.2r, 1.7r, 9.3r, 4.4r, 3.2r};
var a2 := new real[]{4.1r, 7.2r, 1.7r, 9.3r, 4.4r, 3.2r};
- console.printLine("median of (",a1.asEnumerable(),") is ",a1.Median);
- console.printLine("median of (",a2.asEnumerable(),") is ",a2.Median);
+ Console.printLine("median of (",a1.asEnumerable(),") is ",a1.Median);
+ Console.printLine("median of (",a2.asEnumerable(),") is ",a2.Median);
- console.readChar()
+ Console.readChar()
}
diff --git a/Task/Averages-Median/Pluto/averages-median.pluto b/Task/Averages-Median/Pluto/averages-median.pluto
new file mode 100644
index 0000000000..76d20aff94
--- /dev/null
+++ b/Task/Averages-Median/Pluto/averages-median.pluto
@@ -0,0 +1,17 @@
+local function median(a)
+ local len = #a
+ if len == 0 then return nil end
+ local b = a:sorted()
+ local hlen = len // 2
+ if len % 2 == 1 then return b[hlen + 1] end
+ return (b[hlen] + b[hlen + 1]) / 2.0
+end
+
+local arrays = {
+ {4, 2, 5, 3, 1},
+ {9, 6, 8, 7},
+ {2},
+ {}
+}
+
+for arrays as a do print(median(a)) end
diff --git a/Task/Averages-Mode/DuckDB/averages-mode-1.duckdb b/Task/Averages-Mode/DuckDB/averages-mode-1.duckdb
new file mode 100644
index 0000000000..b8f3ef6eda
--- /dev/null
+++ b/Task/Averages-Mode/DuckDB/averages-mode-1.duckdb
@@ -0,0 +1,10 @@
+# lst should be a DuckDB list
+create or replace function mode(lst) as (
+ with cte as (
+ SELECT number, COUNT(*) as frequency
+ FROM (SELECT unnest(lst) as number)
+ GROUP BY number
+ ORDER BY frequency DESC
+ LIMIT 1)
+ (select number from cte) -- signal that the result is scalar
+ );
diff --git a/Task/Averages-Mode/DuckDB/averages-mode-2.duckdb b/Task/Averages-Mode/DuckDB/averages-mode-2.duckdb
new file mode 100644
index 0000000000..2787f7d621
--- /dev/null
+++ b/Task/Averages-Mode/DuckDB/averages-mode-2.duckdb
@@ -0,0 +1 @@
+select [1, 2, 2, 3, 3, 3, 4] as list, mode(list) as mode;
diff --git a/Task/Averages-Mode/DuckDB/averages-mode-3.duckdb b/Task/Averages-Mode/DuckDB/averages-mode-3.duckdb
new file mode 100644
index 0000000000..8158bc7e74
--- /dev/null
+++ b/Task/Averages-Mode/DuckDB/averages-mode-3.duckdb
@@ -0,0 +1,10 @@
+create or replace function modal_values(lst) as table (
+ with cte as (
+ SELECT number, COUNT(*) as frequency
+ FROM (SELECT unnest(lst) as number)
+ GROUP BY number )
+ select number
+ from cte
+ where frequency = (SELECT MAX(frequency) FROM cte)
+ order by number
+ );
diff --git a/Task/Averages-Mode/DuckDB/averages-mode-4.duckdb b/Task/Averages-Mode/DuckDB/averages-mode-4.duckdb
new file mode 100644
index 0000000000..104e77bdbb
--- /dev/null
+++ b/Task/Averages-Mode/DuckDB/averages-mode-4.duckdb
@@ -0,0 +1 @@
+select median(n) as mode from modal_values( [1,1,1,2,2,2,3]) t(n);
diff --git a/Task/Averages-Mode/DuckDB/averages-mode-5.duckdb b/Task/Averages-Mode/DuckDB/averages-mode-5.duckdb
new file mode 100644
index 0000000000..095bcb6299
--- /dev/null
+++ b/Task/Averages-Mode/DuckDB/averages-mode-5.duckdb
@@ -0,0 +1,15 @@
+# Find the mode of a column named values in the named table
+# by taking the median() of the modal values
+create or replace function mode_of_column(TableName) as (
+ with cte as (
+ SELECT value, COUNT(*) as frequency
+ FROM query_table(TableName)
+ GROUP BY value
+ ),
+ modal_values as (
+ SELECT value
+ from cte
+ where frequency = (SELECT MAX(frequency) FROM cte)
+ order by value
+ ) select median(value) from modal_values
+);
diff --git a/Task/Averages-Mode/DuckDB/averages-mode-6.duckdb b/Task/Averages-Mode/DuckDB/averages-mode-6.duckdb
new file mode 100644
index 0000000000..819c128044
--- /dev/null
+++ b/Task/Averages-Mode/DuckDB/averages-mode-6.duckdb
@@ -0,0 +1,2 @@
+with cte as (select val as value from averages)
+ select mode_of_column('cte') as 'mode of val';
diff --git a/Task/Averages-Mode/Elena/averages-mode.elena b/Task/Averages-Mode/Elena/averages-mode.elena
index f1fca32540..e0992d1b2f 100644
--- a/Task/Averages-Mode/Elena/averages-mode.elena
+++ b/Task/Averages-Mode/Elena/averages-mode.elena
@@ -29,7 +29,7 @@ public program()
var array2 := new int[]{1, 3, 6, 6, 6, 6, 7, 7, 12, 12, 17};
var array3 := new object[]{1, "blue", 2, 7.5r, 5, "green", "red", 5, 2, "blue", "white"};
- console
+ Console
.printLine("mode of (",array1.asEnumerable(),") is (",array1.Mode,")")
.printLine("mode of (",array2.asEnumerable(),") is (",array2.Mode,")")
.printLine("mode of (",array3.asEnumerable(),") is (",array3.Mode,")")
diff --git a/Task/Averages-Pythagorean-means/Apple/averages-pythagorean-means.apple b/Task/Averages-Pythagorean-means/Apple/averages-pythagorean-means.apple
new file mode 100644
index 0000000000..a3ff60c36b
--- /dev/null
+++ b/Task/Averages-Pythagorean-means/Apple/averages-pythagorean-means.apple
@@ -0,0 +1,12 @@
+ > :store a [(+)/x%ℝ(:x)]
+ > :store g [((*)/x)**(⅟(ℝ(:x)))]
+ > :store h [⅟((+)/((1%)')x)]
+
+ > :store x frange 1 10 10
+
+ > a x
+5.5
+ > g x
+4.528728688116765
+ > h x
+0.34141715214740553
diff --git a/Task/Averages-Pythagorean-means/DuckDB/averages-pythagorean-means.duckdb b/Task/Averages-Pythagorean-means/DuckDB/averages-pythagorean-means.duckdb
new file mode 100644
index 0000000000..b75db190c5
--- /dev/null
+++ b/Task/Averages-Pythagorean-means/DuckDB/averages-pythagorean-means.duckdb
@@ -0,0 +1,11 @@
+create or replace function average(lst) as (
+ list_sum(lst) / length(lst)
+);
+
+create or replace function list_geometric_mean(lst) as (
+ list_product( list_transform(lst, x -> pow(x, 1/length(lst))) )
+);
+
+create or replace function list_harmonic_mean(lst) as (
+ length(lst) / list_sum( list_transform(lst, x -> 1/x))
+);
diff --git a/Task/Averages-Pythagorean-means/Pluto/averages-pythagorean-means.pluto b/Task/Averages-Pythagorean-means/Pluto/averages-pythagorean-means.pluto
new file mode 100644
index 0000000000..903b1e2788
--- /dev/null
+++ b/Task/Averages-Pythagorean-means/Pluto/averages-pythagorean-means.pluto
@@ -0,0 +1,11 @@
+local rng = range(1, 10)
+local count = #rng
+local A = rng:reduce(|acc, x| -> acc + x ) / count
+local G = rng:reduce(|prod, x| -> prod * x, 1) ^ (1 / count)
+local H = rng:reduce(|acc, x| -> acc + 1 / x) ^ (-1) * count
+
+print($"For the numbers \{{rng:min()}, {rng:max()}}:")
+print($" Arithmetic mean = {A}")
+print($" Geometric mean = {G}")
+print($" Harmonic mean = {H}")
+print($" A >= G >= H = {A >= G >= H}")
diff --git a/Task/Averages-Root-mean-square/EasyLang/averages-root-mean-square.easy b/Task/Averages-Root-mean-square/EasyLang/averages-root-mean-square.easy
index 50fec25962..744f7e1009 100644
--- a/Task/Averages-Root-mean-square/EasyLang/averages-root-mean-square.easy
+++ b/Task/Averages-Root-mean-square/EasyLang/averages-root-mean-square.easy
@@ -1,8 +1,5 @@
func rms v[] .
- for v in v[]
- sum += v * v
- .
+ for v in v[] : sum += v * v
return sqrt (sum / len v[])
.
-v[] = [ 1 2 3 4 5 6 7 8 9 10 ]
-print rms v[]
+print rms [ 1 2 3 4 5 6 7 8 9 10 ]
diff --git a/Task/Averages-Root-mean-square/Elena/averages-root-mean-square.elena b/Task/Averages-Root-mean-square/Elena/averages-root-mean-square.elena
index 66c1f5e9b3..d4ec3261bc 100644
--- a/Task/Averages-Root-mean-square/Elena/averages-root-mean-square.elena
+++ b/Task/Averages-Root-mean-square/Elena/averages-root-mean-square.elena
@@ -10,5 +10,5 @@ extension op
public program()
{
- console.printLine(new Range(1, 10).RootMeanSquare)
+ Console.printLine(new Range(1, 10).RootMeanSquare)
}
diff --git a/Task/Averages-Root-mean-square/Pluto/averages-root-mean-square.pluto b/Task/Averages-Root-mean-square/Pluto/averages-root-mean-square.pluto
new file mode 100644
index 0000000000..d54e29247b
--- /dev/null
+++ b/Task/Averages-Root-mean-square/Pluto/averages-root-mean-square.pluto
@@ -0,0 +1,7 @@
+local function rms(a)
+ local len = #a
+ if len == 0 then return nil end
+ return math.sqrt(a:reduce(|acc, i| -> acc + i * i) / len)
+end
+
+print(rms(range(1, 10)))
diff --git a/Task/Averages-Root-mean-square/TAV/averages-root-mean-square.tav b/Task/Averages-Root-mean-square/TAV/averages-root-mean-square.tav
new file mode 100644
index 0000000000..9e44a48dcc
--- /dev/null
+++ b/Task/Averages-Root-mean-square/TAV/averages-root-mean-square.tav
@@ -0,0 +1,10 @@
+main (parms):+
+ t =: new tuple from 1 upto 10
+ print t, '->', vector t norm
+
+\ input can be tuple, row or map (class function used)
+vector (@) norm:
+ sq =: 0.0
+ ?# v =: @::give values
+ sq =+ v * v
+ :> float (sq / @.Count) sqrt
diff --git a/Task/Averages-Simple-moving-average/Elena/averages-simple-moving-average.elena b/Task/Averages-Simple-moving-average/Elena/averages-simple-moving-average.elena
index c1663edc5a..8db130292f 100644
--- a/Task/Averages-Simple-moving-average/Elena/averages-simple-moving-average.elena
+++ b/Task/Averages-Simple-moving-average/Elena/averages-simple-moving-average.elena
@@ -19,8 +19,8 @@ class SMA
var count := theList.Length;
count =>
- 0 { ^0.0r }
- ! {
+ 0 : { ^0.0r }
+ ! : {
if (count > thePeriod)
{
theList.removeAt(0);
@@ -35,22 +35,20 @@ class SMA
}
}
-// --- Program ---
-
public program()
{
var SMA3 := SMA.new(3);
var SMA5 := SMA.new(5);
for (int i := 1; i <= 5; i += 1) {
- console.printPaddingRight(30, "sma3 + ", i, " = ", SMA3.append(i));
- console.printLine("sma5 + ", i, " = ", SMA5.append(i))
+ Console.printPaddingRight(30, "sma3 + ", i, " = ", SMA3.append(i));
+ Console.printLine("sma5 + ", i, " = ", SMA5.append(i))
};
for (int i := 5; i >= 1; i -= 1) {
- console.printPaddingRight(30, "sma3 + ", i, " = ", SMA3.append(i));
- console.printLine("sma5 + ", i, " = ", SMA5.append(i))
+ Console.printPaddingRight(30, "sma3 + ", i, " = ", SMA3.append(i));
+ Console.printLine("sma5 + ", i, " = ", SMA5.append(i))
};
- console.readChar()
+ Console.readChar()
}
diff --git a/Task/B-zier-curves-Intersections/JavaScript/b-zier-curves-intersections.js b/Task/B-zier-curves-Intersections/JavaScript/b-zier-curves-intersections.js
new file mode 100644
index 0000000000..035f0c110f
--- /dev/null
+++ b/Task/B-zier-curves-Intersections/JavaScript/b-zier-curves-intersections.js
@@ -0,0 +1,162 @@
+class Point {
+ constructor(x, y) {
+ this.x = x;
+ this.y = y;
+ }
+}
+
+class QuadSpline {
+ constructor(c0, c1, c2) {
+ this.c0 = c0;
+ this.c1 = c1;
+ this.c2 = c2;
+ }
+}
+
+class QuadCurve {
+ constructor(x, y) {
+ this.x = x;
+ this.y = y;
+ }
+}
+
+// Subdivision by de Casteljau's algorithm.
+function subdivideQuadSpline(q, t, u, v) {
+ const s = 1.0 - t;
+ const c0 = q.c0;
+ const c1 = q.c1;
+ const c2 = q.c2;
+ u.c0 = c0;
+ v.c2 = c2;
+ u.c1 = s * c0 + t * c1;
+ v.c1 = s * c1 + t * c2;
+ u.c2 = s * u.c1 + t * v.c1;
+ v.c0 = u.c2;
+}
+
+function subdivideQuadCurve(q, t, u, v) {
+ subdivideQuadSpline(q.x, t, u.x, v.x);
+ subdivideQuadSpline(q.y, t, u.y, v.y);
+}
+
+// It is assumed that xa0 <= xa1, ya0 <= ya1, xb0 <= xb1, and yb0 <= yb1.
+function rectsOverlap(xa0, ya0, xa1, ya1, xb0, yb0, xb1, yb1) {
+ return (xb0 <= xa1 && xa0 <= xb1 && yb0 <= ya1 && ya0 <= yb1);
+}
+
+function max3(x, y, z) { return Math.max(Math.max(x, y), z); }
+function min3(x, y, z) { return Math.min(Math.min(x, y), z); }
+
+// This accepts the point as an intersection if the boxes are small enough.
+function testIntersect(p, q, tol) {
+ const pxmin = min3(p.x.c0, p.x.c1, p.x.c2);
+ const pymin = min3(p.y.c0, p.y.c1, p.y.c2);
+ const pxmax = max3(p.x.c0, p.x.c1, p.x.c2);
+ const pymax = max3(p.y.c0, p.y.c1, p.y.c2);
+
+ const qxmin = min3(q.x.c0, q.x.c1, q.x.c2);
+ const qymin = min3(q.y.c0, q.y.c1, q.y.c2);
+ const qxmax = max3(q.x.c0, q.x.c1, q.x.c2);
+ const qymax = max3(q.y.c0, q.y.c1, q.y.c2);
+
+ let exclude = true;
+ let accept = false;
+ let intersect = new Point(0, 0);
+
+ if (rectsOverlap(pxmin, pymin, pxmax, pymax, qxmin, qymin, qxmax, qymax)) {
+ exclude = false;
+ const xmin = Math.max(pxmin, qxmin);
+ const xmax = Math.min(pxmax, qxmax);
+
+ if (xmax < xmin) {
+ throw new Error(`Assertion failure: ${xmax} < ${xmin}`);
+ }
+
+ if (xmax - xmin <= tol) {
+ const ymin = Math.max(pymin, qymin);
+ const ymax = Math.min(pymax, qymax);
+
+ if (ymax < ymin) {
+ throw new Error(`Assertion failure: ${ymax} < ${ymin}`);
+ }
+
+ if (ymax - ymin <= tol) {
+ accept = true;
+ intersect.x = 0.5 * xmin + 0.5 * xmax;
+ intersect.y = 0.5 * ymin + 0.5 * ymax;
+ }
+ }
+ }
+
+ return { exclude, accept, intersect };
+}
+
+function seemsToBeDuplicate(intersects, xy, spacing) {
+ let seemsToBeDup = false;
+ let i = 0;
+
+ while (!seemsToBeDup && i !== intersects.length) {
+ const pt = intersects[i];
+ seemsToBeDup = Math.abs(pt.x - xy.x) < spacing && Math.abs(pt.y - xy.y) < spacing;
+ i++;
+ }
+
+ return seemsToBeDup;
+}
+
+function findIntersects(p, q, tol, spacing) {
+ const intersects = [];
+ const workload = [{ p, q }];
+
+ // Quit looking after having emptied the workload.
+ while (workload.length > 0) {
+ const work = workload.pop();
+ const { exclude, accept, intersect } = testIntersect(work.p, work.q, tol);
+
+ if (accept) {
+ // To avoid detecting the same intersection twice, require some
+ // space between intersections.
+ if (!seemsToBeDuplicate(intersects, intersect, spacing)) {
+ intersects.push(intersect);
+ }
+ } else if (!exclude) {
+ const p0 = new QuadCurve(new QuadSpline(0, 0, 0), new QuadSpline(0, 0, 0));
+ const p1 = new QuadCurve(new QuadSpline(0, 0, 0), new QuadSpline(0, 0, 0));
+ const q0 = new QuadCurve(new QuadSpline(0, 0, 0), new QuadSpline(0, 0, 0));
+ const q1 = new QuadCurve(new QuadSpline(0, 0, 0), new QuadSpline(0, 0, 0));
+
+ subdivideQuadCurve(work.p, 0.5, p0, p1);
+ subdivideQuadCurve(work.q, 0.5, q0, q1);
+
+ workload.push({ p: p1, q: q1 });
+ workload.push({ p: p1, q: q0 });
+ workload.push({ p: p0, q: q1 });
+ workload.push({ p: p0, q: q0 });
+ }
+ }
+
+ return intersects;
+}
+
+function main() {
+ const p = new QuadCurve(
+ new QuadSpline(-1.0, 0.0, 1.0),
+ new QuadSpline(0.0, 10.0, 0.0)
+ );
+
+ const q = new QuadCurve(
+ new QuadSpline(2.0, -8.0, 2.0),
+ new QuadSpline(1.0, 2.0, 3.0)
+ );
+
+ const tol = 0.0000001;
+ const spacing = tol * 10;
+
+ const intersects = findIntersects(p, q, tol, spacing);
+
+ for (const intersect of intersects) {
+ console.log(`(${intersect.x}, ${intersect.y})`);
+ }
+}
+
+main();
diff --git a/Task/Babbage-problem/AutoLISP/babbage-problem.l b/Task/Babbage-problem/AutoLISP/babbage-problem.l
new file mode 100644
index 0000000000..9636fbb3f5
--- /dev/null
+++ b/Task/Babbage-problem/AutoLISP/babbage-problem.l
@@ -0,0 +1,54 @@
+;; Let's Create a tool [a function] that helps us check positive integers
+;; to see which one's square is the first one that ends in ...269696
+;; It should be noted that a function can be used many times repetitively
+;; so let's create that function which will be used many times.
+
+;; First, define the function, give it a name and parameters; it will look like:
+;; (defun [function_name] ([input_parameter] / [local_variables])
+(defun SquareEndsWith269696? (number / )
+ ;; Let's have the computer Square the number (whichever number was passed to the function)
+ (setq number (* number number))
+ ;; Now let's convert that number to a string
+ (setq numberString (itoa number))
+ ;; Is the length of the numberString greater than or equal to 6 digits?
+ (if (>= (strlen numberString) 6)
+ ;; If it was greater than or equal to 6, we will check the last 6 characters to see if they are equal to "269696"
+ ;; If this equality check is successful, then we have found our number, and will return a successful function check!
+ (eq "269696" (substr numberString (- (strlen numberString) 5)))
+ ;; Otherwise, an unsuccessful function check will be returned
+ )
+)
+
+;; Second, we will create a function that only needs to be used once, they do not always need to be used many times
+;; Let's use your name as the initiator/name for this function
+(defun c:BABBAGE ( / integer SquareFound)
+ ;; Once we have initiated the function, let's create our first integer to check
+ (setq integer 1)
+ ;; Now, let's perform a loop do perform an action many times within the function
+ ;; We do not want our loop to run infinitely, so let's create a True/False variable to identify if our task is complete
+ (setq SquareFound nil)
+ ;; ok, let's use the loop and True/False variable to continually check if we have found our correct integer
+ (while (not SquareFound)
+ ;; Now within the loop, let's use our First function to check if we have the correct integer
+ ;; We will save the new result of our check over our existing True/False variable
+ (setq SquareFound (SquareEndsWith269696? integer))
+ ;; If the square was not found...
+ (if (not SquareFound)
+ ;; ...increase our integer number by 1
+ (setq integer (1+ integer))
+ )
+ ;; Once the integer is found, our loop will end and the code will continue forward
+ ;; Otherwise, it will start back at "(while ..."
+ )
+ ;; If we have made it this far, then our integer has been found!
+ ;; let's show everyone what the integer is
+ (prompt
+ (strcat
+ "\nThe smallest integer has been found!"
+ "\nInteger: " (itoa integer) ;; <-- we are converting the integer to a string
+ "\nSquared: " (itoa (* integer integer)) ;; <-- let's show everyone the squared number to prove it
+ )
+ )
+ ;; All done, this last line is not required, but makes the ending cleaner
+ (princ)
+)
diff --git a/Task/Babbage-problem/DuckDB/babbage-problem-1.duckdb b/Task/Babbage-problem/DuckDB/babbage-problem-1.duckdb
new file mode 100644
index 0000000000..3a634060d8
--- /dev/null
+++ b/Task/Babbage-problem/DuckDB/babbage-problem-1.duckdb
@@ -0,0 +1,3 @@
+select * from generate_series(500,1000000) t(n)
+where (n * n) % 1000000 == 269696
+limit 1;
diff --git a/Task/Babbage-problem/DuckDB/babbage-problem-2.duckdb b/Task/Babbage-problem/DuckDB/babbage-problem-2.duckdb
new file mode 100644
index 0000000000..807ff512ff
--- /dev/null
+++ b/Task/Babbage-problem/DuckDB/babbage-problem-2.duckdb
@@ -0,0 +1,9 @@
+with recursive integers
+as
+ (select 1::uint64 as n
+ UNION ALL
+ select n+1 from integers)
+
+select n from integers
+where (n * n) % 1000000 == 269696
+limit 1;
diff --git a/Task/Babbage-problem/Elena/babbage-problem.elena b/Task/Babbage-problem/Elena/babbage-problem.elena
index c7c4a77da2..4721be5221 100644
--- a/Task/Babbage-problem/Elena/babbage-problem.elena
+++ b/Task/Babbage-problem/Elena/babbage-problem.elena
@@ -10,5 +10,5 @@ public program()
n += 1
};
- console.printLine(n)
+ Console.printLine(n)
}
diff --git a/Task/Babylonian-spiral/EasyLang/babylonian-spiral.easy b/Task/Babylonian-spiral/EasyLang/babylonian-spiral.easy
index 888e9c378e..98fc8c6b2a 100644
--- a/Task/Babylonian-spiral/EasyLang/babylonian-spiral.easy
+++ b/Task/Babylonian-spiral/EasyLang/babylonian-spiral.easy
@@ -1,14 +1,3 @@
-fastfunc findj a norm .
- j = floor sqrt norm + 1
- repeat
- b = j * j
- if a + b < norm : return -1
- if a + b = norm : return j
- until j = 0
- j -= 1
- .
- return -1
-.
proc babylon_spiral nsteps &pts[][] .
pts[][] = [ [ 0 0 ] [ 0 1 ] ]
norm = 1
@@ -21,16 +10,19 @@ proc babylon_spiral nsteps &pts[][] .
for i = 0 to nsteps
a = i * i
if a > norm div 2 : break 1
- j = findj a norm
- if j <> -1
- cands[][] &= [ i, j ]
- cands[][] &= [ -i, j ]
- cands[][] &= [ i, -j ]
- cands[][] &= [ -i, -j ]
- cands[][] &= [ j, i ]
- cands[][] &= [ -j, i ]
- cands[][] &= [ j, -i ]
- cands[][] &= [ -j, -i ]
+ for j = floor sqrt norm + 1 downto 0
+ b = j * j
+ if a + b < norm : break 1
+ if a + b = norm
+ cands[][] &= [ i, j ]
+ cands[][] &= [ -i, j ]
+ cands[][] &= [ i, -j ]
+ cands[][] &= [ -i, -j ]
+ cands[][] &= [ j, i ]
+ cands[][] &= [ -j, i ]
+ cands[][] &= [ j, -i ]
+ cands[][] &= [ -j, -i ]
+ .
.
.
.
@@ -63,8 +55,9 @@ scy = 100 / (maxy - miny) * 0.96
ty = -miny * scy + 2
tx = -minx * scx + 2
glinewidth 0.1
-for i to len pts[][] - 1
- gline 0 ty 100 ty
- gline tx 0 tx 100
- gline pts[i][1] * scx + tx, pts[i][2] * scy + ty, pts[i + 1][1] * scx + tx, pts[i + 1][2] * scy + ty
+gline 0 ty 100 ty
+gline tx 0 tx 100
+gpenup
+for i to len pts[][]
+ glineto pts[i][1] * scx + tx, pts[i][2] * scy + ty
.
diff --git a/Task/Babylonian-spiral/FreeBASIC/babylonian-spiral.basic b/Task/Babylonian-spiral/FreeBASIC/babylonian-spiral.basic
new file mode 100644
index 0000000000..2312460831
--- /dev/null
+++ b/Task/Babylonian-spiral/FreeBASIC/babylonian-spiral.basic
@@ -0,0 +1,92 @@
+Const PI = 4 * Atn(1)
+Const TAU = 8 * Atn(1)
+
+Type Punto
+ x As Integer
+ y As Integer
+End Type
+
+Sub InitSquares(squares() As Integer, nsteps As Integer)
+ For i As Integer = 0 To nsteps - 1
+ squares(i) = i * i
+ Next
+End Sub
+
+Sub BabylonianSpiral(points() As Punto, nsteps As Integer)
+ Dim As Integer squares(nsteps)
+ InitSquares(squares(), nsteps)
+
+ points(0).x = 0 : points(0).y = 0
+ points(1).x = 0 : points(1).y = 1
+
+ Dim As Integer norm = 1, i, j, k, a, b
+ Dim As Double theta, value, minvalue
+ Dim As Punto minimum
+
+ For paso As Integer = 0 To nsteps - 3
+ Dim As Punto prev = points(paso + 1)
+ theta = Atan2(prev.y, prev.x)
+
+ Dim As Integer ncandidates = 0
+ Dim As Punto candidates(100)
+
+ Do
+ norm += 1
+ For i = 0 To nsteps - 1
+ a = squares(i)
+ If a > norm / 2 Then Exit For
+ For j = Int(Sqr(norm)) + 1 To 0 Step -1
+ If j < 0 Then Exit For
+ b = squares(j)
+ If a + b < norm Then Exit For
+ If a + b = norm Then
+ Dim As Punto next_points(0 To 7)
+ next_points(0).x = i : next_points(0).y = j
+ next_points(1).x = -i : next_points(1).y = j
+ next_points(2).x = i : next_points(2).y = -j
+ next_points(3).x = -i : next_points(3).y = -j
+ next_points(4).x = j : next_points(4).y = i
+ next_points(5).x = -j : next_points(5).y = i
+ next_points(6).x = j : next_points(6).y = -i
+ next_points(7).x = -j : next_points(7).y = -i
+
+ For k = 0 To 7
+ candidates(ncandidates) = next_points(k)
+ ncandidates += 1
+ Next
+ End If
+ Next
+ Next
+ Loop While ncandidates = 0
+
+ minvalue = TAU
+ For k = 0 To ncandidates - 1
+ value = (theta - Atan2(candidates(k).y, candidates(k).x) + TAU)
+ value = value - Int(value / TAU) * TAU
+ If value < minvalue Then
+ minvalue = value
+ minimum = candidates(k)
+ End If
+ Next
+
+ points(paso + 2) = minimum
+ Next
+
+ For i = 0 To nsteps - 2
+ points(i + 1).x = points(i).x + points(i + 1).x
+ points(i + 1).y = points(i).y + points(i + 1).y
+ Next
+End Sub
+
+' Main program
+Dim As Integer nsteps = 40
+Dim As Punto points(0 To nsteps - 1)
+BabylonianSpiral(points(), nsteps)
+
+Print !"The first 40 points of the Babylonian spiral are:\n"
+For i As Integer = 0 To nsteps - 1
+ Print Using "(###_,###) "; points(i).x; points(i).y;
+ If (i + 1) Mod 10 = 0 Then Print
+Next
+
+Sleep
diff --git a/Task/Balanced-brackets/ArkScript/balanced-brackets.ark b/Task/Balanced-brackets/ArkScript/balanced-brackets.ark
new file mode 100644
index 0000000000..1eb2101bb5
--- /dev/null
+++ b/Task/Balanced-brackets/ArkScript/balanced-brackets.ark
@@ -0,0 +1,24 @@
+(import std.List)
+
+(let gen_string (fun (length) {
+ (mut output "")
+ (while (< (len output) length) {
+ (set output (+ output (@ "[]" (random 0 1)))) })
+ output }))
+
+(let balanced? (fun (str) {
+ (mut i 0)
+ (=
+ (len str)
+ (len
+ (list:takeWhile str (fun (char) {
+ (if (= "[" char)
+ (set i (+ i 1))
+ (set i (- i 1)))
+ (>= i 0) }))))}))
+
+(list:forEach
+ (list:iota 0 5)
+ (fun (_) {
+ (let str (gen_string (random 2 8)))
+ (print (string:format "{:<8}: {:^6}" str (if (balanced? str) "OK" "NOT OK"))) }))
diff --git a/Task/Balanced-brackets/AutoLISP/balanced-brackets.l b/Task/Balanced-brackets/AutoLISP/balanced-brackets.l
new file mode 100644
index 0000000000..90ed32a229
--- /dev/null
+++ b/Task/Balanced-brackets/AutoLISP/balanced-brackets.l
@@ -0,0 +1,12 @@
+(defun BalancedBrackets (str / cntOpen curr)
+ (setq cntOpen 0)
+ (setq str (vl-string->list str))
+ (while (and (>= cntOpen 0) str)
+ (setq curr (car str) str (cdr str))
+ (cond
+ ((= 91 curr) (setq cntOpen (1+ cntOpen)))
+ ((= 93 curr) (setq cntOpen (1- cntOpen)))
+ )
+ )
+ (and (null str) (zerop cntOpen))
+)
diff --git a/Task/Balanced-brackets/Elena/balanced-brackets.elena b/Task/Balanced-brackets/Elena/balanced-brackets.elena
index 4636698372..c09c6651e8 100644
--- a/Task/Balanced-brackets/Elena/balanced-brackets.elena
+++ b/Task/Balanced-brackets/Elena/balanced-brackets.elena
@@ -1,7 +1,3 @@
-// Generate a string with N opening brackets ("[") and N closing brackets ("]"), in some arbitrary order.
-// Determine whether the generated string is balanced; that is, whether it consists entirely of pairs of opening/closing brackets (in that order),
-// none of which mis-nest.
-
import system'routines;
import extensions;
import extensions'text;
@@ -10,7 +6,7 @@ randomBrackets(len)
{
if (0 == len)
{
- ^emptyString
+ ^ EmptyString
}
else
{
@@ -43,8 +39,8 @@ public program()
{
var str := randomBrackets(len);
- console.printLine("""",str,"""",str.isBalanced ? " is balanced" : " is not balanced")
+ Console.printLine("""",str,"""",str.isBalanced ? " is balanced" : " is not balanced")
};
- console.readChar()
+ Console.readChar()
}
diff --git a/Task/Balanced-brackets/Nom/balanced-brackets.num b/Task/Balanced-brackets/Nom/balanced-brackets.num
new file mode 100644
index 0000000000..eba2a9f889
--- /dev/null
+++ b/Task/Balanced-brackets/Nom/balanced-brackets.num
@@ -0,0 +1,19 @@
+read;
+"[","]" { add "*"; push; }
+[:space:] { clear; }
+!"" {
+ clear; add "Sorry, only brackets [] allowed in this!\n";
+ print; quit;
+}
+parse>
+pop; pop;
+"[*]*","ob*ob*" { clear; add "ob*"; push; .reparse }
+pop;
+"[*ob*]*" { clear; add "ob*"; push; .reparse }
+
+(eof) {
+ "ob*" { clear; add "brackets look balanced!\n"; print; quit; }
+ clear; add "brackets not balanced.\n"; print; quit;
+}
+
+push; push; push;
diff --git a/Task/Balanced-brackets/Pluto/balanced-brackets.pluto b/Task/Balanced-brackets/Pluto/balanced-brackets.pluto
new file mode 100644
index 0000000000..a38471fe49
--- /dev/null
+++ b/Task/Balanced-brackets/Pluto/balanced-brackets.pluto
@@ -0,0 +1,36 @@
+local function is_balanced(s)
+ if s == "" then
+ return true
+ end
+ local counter_left = 0 -- number of left brackets so far unmatched
+ for i = 1, #s do
+ local c = s[i]
+ if c == "[" then
+ counter_left += 1
+ elseif counter_left > 0 do
+ counter_left -= 1
+ else
+ return false
+ end
+ end
+ return counter_left == 0
+end
+
+print("Checking examples in task description:")
+local brackets = {"", "[]", "][", "[][]", "][][", "[[][]]", "[]][[]"}
+for brackets as b do
+ local res = is_balanced(b)
+ local bb = (b != "") ? b : "(empty)"
+ print(string.format("%-8s %s", bb, res ? "OK" : "NOT OK"))
+end
+
+print("\nChecking 7 random strings of brackets of length 8:")
+math.randomseed(os.time())
+for i = 1, 7 do
+ local b = ""
+ for j = 1, 8 do
+ b ..= (math.random(0, 1) == 0) ? "[" : "]"
+ end
+ local res = is_balanced(b)
+ print(string.format("%s %s", b, res ? "OK" : "NOT OK"))
+end
diff --git a/Task/Balanced-ternary/JavaScript/balanced-ternary.js b/Task/Balanced-ternary/JavaScript/balanced-ternary.js
new file mode 100644
index 0000000000..29ae058c1c
--- /dev/null
+++ b/Task/Balanced-ternary/JavaScript/balanced-ternary.js
@@ -0,0 +1,203 @@
+class BTernary {
+ constructor(input) {
+ if (typeof input === 'string') {
+ let i = 0;
+ while (i < input.length && input.charAt(i) === '0') {
+ i++;
+ }
+ this.value = input.substring(i);
+ } else if (typeof input === 'number') {
+ this.value = this.convertToBT(input);
+ }
+ }
+
+ convertToBT(v) {
+ if (v < 0) {
+ return this.flip(this.convertToBT(-v));
+ }
+ if (v === 0) {
+ return "";
+ }
+ const rem = this.mod3(v);
+ if (rem === 0) {
+ return this.convertToBT(Math.floor(v / 3)) + "0";
+ }
+ if (rem === 1) {
+ return this.convertToBT(Math.floor(v / 3)) + "+";
+ }
+ if (rem === 2) {
+ return this.convertToBT(Math.floor((v + 1) / 3)) + "-";
+ }
+ return "You can't see me";
+ }
+
+ flip(s) {
+ let flip = "";
+ for (let i = 0; i < s.length; i++) {
+ if (s.charAt(i) === '+') {
+ flip += '-';
+ } else if (s.charAt(i) === '-') {
+ flip += '+';
+ } else {
+ flip += '0';
+ }
+ }
+ return flip;
+ }
+
+ mod3(v) {
+ if (v > 0) {
+ return v % 3;
+ }
+ v = v % 3;
+ return (v + 3) % 3;
+ }
+
+ intValue() {
+ let sum = 0;
+ const s = this.value;
+ for (let i = 0; i < s.length; i++) {
+ const c = s.charAt(s.length - i - 1);
+ let dig = 0;
+ if (c === '+') {
+ dig = 1;
+ } else if (c === '-') {
+ dig = -1;
+ }
+ sum += dig * Math.pow(3, i);
+ }
+ return sum;
+ }
+
+ add(that) {
+ let a = this.value;
+ let b = that.value;
+
+ const longer = a.length > b.length ? a : b;
+ let shorter = a.length > b.length ? b : a;
+
+ while (shorter.length < longer.length) {
+ shorter = '0' + shorter;
+ }
+
+ a = longer;
+ b = shorter;
+
+ let carry = '0';
+ let sum = "";
+ for (let i = 0; i < a.length; i++) {
+ const place = a.length - i - 1;
+ const digisum = this.addDigitsWithCarry(a.charAt(place), b.charAt(place), carry);
+ if (digisum.length !== 1) {
+ carry = digisum.charAt(0);
+ } else {
+ carry = '0';
+ }
+ sum = digisum.charAt(digisum.length - 1) + sum;
+ }
+ sum = carry + sum;
+
+ return new BTernary(sum);
+ }
+
+ addDigitsWithCarry(a, b, carry) {
+ const sum1 = this.addDigits(a, b);
+ const sum2 = this.addDigits(sum1.charAt(sum1.length - 1), carry);
+
+ if (sum1.length === 1) {
+ return sum2;
+ }
+ if (sum2.length === 1) {
+ return sum1.charAt(0) + sum2;
+ }
+ return sum1.charAt(0) + "";
+ }
+
+ addDigits(a, b) {
+ let sum = "";
+ if (a === '0') {
+ sum = b + "";
+ } else if (b === '0') {
+ sum = a + "";
+ } else if (a === '+') {
+ if (b === '+') {
+ sum = "+-";
+ } else {
+ sum = "0";
+ }
+ } else {
+ if (b === '+') {
+ sum = "0";
+ } else {
+ sum = "-+";
+ }
+ }
+ return sum;
+ }
+
+ neg() {
+ return new BTernary(this.flip(this.value));
+ }
+
+ sub(that) {
+ return this.add(that.neg());
+ }
+
+ mul(that) {
+ const one = new BTernary(1);
+ const zero = new BTernary(0);
+ let mul = new BTernary(0);
+
+ let flipflag = 0;
+ if (that.compareTo(zero) === -1) {
+ that = that.neg();
+ flipflag = 1;
+ }
+
+ for (let i = new BTernary(1); i.compareTo(that) < 1; i = i.add(one)) {
+ mul = mul.add(this);
+ }
+
+ if (flipflag === 1) {
+ mul = mul.neg();
+ }
+ return mul;
+ }
+
+ equals(that) {
+ return this.value === that.value;
+ }
+
+ compareTo(that) {
+ if (this.intValue() > that.intValue()) {
+ return 1;
+ } else if (this.equals(that)) {
+ return 0;
+ }
+ return -1;
+ }
+
+ toString() {
+ return this.value;
+ }
+}
+
+// Main execution
+function main() {
+ const a = new BTernary("+-0++0+");
+ const b = new BTernary(-436);
+ const c = new BTernary("+-++-");
+
+ console.log("a=" + a.intValue());
+ console.log("b=" + b.intValue());
+ console.log("c=" + c.intValue());
+ console.log();
+
+ // result = a * (b - c)
+ const result = a.mul(b.sub(c));
+
+ console.log("result= " + result + " " + result.intValue());
+}
+
+// Run the main function
+main();
diff --git a/Task/Base64-decode-data/Pluto/base64-decode-data.pluto b/Task/Base64-decode-data/Pluto/base64-decode-data.pluto
new file mode 100644
index 0000000000..b8359fd691
--- /dev/null
+++ b/Task/Base64-decode-data/Pluto/base64-decode-data.pluto
@@ -0,0 +1,4 @@
+local base64 = require("base64")
+
+local s = "VG8gZXJyIGlzIGh1bWFuLCBidXQgdG8gcmVhbGx5IGZvdWwgdGhpbmdzIHVwIHlvdSBuZWVkIGEgY29tcHV0ZXIuCiAgICAtLSBQYXVsIFIuIEVocmxpY2g="
+print(base64.decode(s))
diff --git a/Task/Base64-decode-data/Zig/base64-decode-data.zig b/Task/Base64-decode-data/Zig/base64-decode-data.zig
new file mode 100644
index 0000000000..cad232e18b
--- /dev/null
+++ b/Task/Base64-decode-data/Zig/base64-decode-data.zig
@@ -0,0 +1,86 @@
+const std = @import("std");
+const print = std.debug.print;
+const ArrayList = std.ArrayList;
+const Allocator = std.mem.Allocator;
+
+const INPUT = "VG8gZXJyIGlzIGh1bWFuLCBidXQgdG8gcmVhbGx5IGZvdWwgdGhpbmdzIHVwIHlvdSBuZWVkIGEgY29tcHV0ZXIuCiAgICAtLVBhdWwgUi5FaHJsaWNo";
+const UPPERCASE_OFFSET: i8 = -65;
+const LOWERCASE_OFFSET: i8 = 26 - 97;
+const NUM_OFFSET: i8 = 52 - 48;
+
+pub fn main() !void {
+ var gpa = std.heap.GeneralPurposeAllocator(.{}){};
+ defer _ = gpa.deinit();
+ const allocator = gpa.allocator();
+
+ print("Input: {s}\n", .{INPUT});
+
+ // Create a dynamic array to collect binary strings
+ var binary_strings = ArrayList([]const u8).init(allocator);
+ defer {
+ for (binary_strings.items) |item| {
+ allocator.free(item);
+ }
+ binary_strings.deinit();
+ }
+
+ // Process each character and convert to binary
+ for (INPUT) |ch| {
+ if (ch == '=') continue; // Filter '=' chars
+
+ // Map char values using Base64 Characters Table
+ const ascii: i8 = @intCast(ch);
+ const convert: u8 = switch (ch) {
+ '0'...'9' => @intCast(ascii + NUM_OFFSET),
+ 'a'...'z' => @intCast(ascii + LOWERCASE_OFFSET),
+ 'A'...'Z' => @intCast(ascii + UPPERCASE_OFFSET),
+ '+' => 62,
+ '/' => 63,
+ else => {
+ print("Not a valid base64 encoded string\n", .{});
+ return;
+ },
+ };
+
+ // Convert to binary format (6 bits for base64)
+ const binary_str = try std.fmt.allocPrint(allocator, "{b:0>6}", .{convert});
+ try binary_strings.append(binary_str);
+ }
+
+ // Concatenate all binary strings
+ var total_len: usize = 0;
+ for (binary_strings.items) |item| {
+ total_len += item.len;
+ }
+
+ const concatenated = try allocator.alloc(u8, total_len);
+ defer allocator.free(concatenated);
+
+ var pos: usize = 0;
+ for (binary_strings.items) |item| {
+ @memcpy(concatenated[pos..pos + item.len], item);
+ pos += item.len;
+ }
+
+ // Split into 8-character chunks and convert to bytes
+ var result_bytes = ArrayList(u8).init(allocator);
+ defer result_bytes.deinit();
+
+ var i: usize = 0;
+ while (i + 8 <= concatenated.len) : (i += 8) {
+ const chunk = concatenated[i..i + 8];
+ const byte_value = std.fmt.parseInt(u8, chunk, 2) catch |err| {
+ print("Error parsing binary: {}\n", .{err});
+ return;
+ };
+ try result_bytes.append(byte_value);
+ }
+
+ // Convert to UTF-8 string and print
+ const result_str = result_bytes.items;
+ if (std.unicode.utf8ValidateSlice(result_str)) {
+ print("Output: {s}\n", .{result_str});
+ } else {
+ print("Invalid UTF-8 sequence\n", .{});
+ }
+}
diff --git a/Task/Bell-numbers/Pluto/bell-numbers.pluto b/Task/Bell-numbers/Pluto/bell-numbers.pluto
new file mode 100644
index 0000000000..5cabc1baca
--- /dev/null
+++ b/Task/Bell-numbers/Pluto/bell-numbers.pluto
@@ -0,0 +1,32 @@
+local bigint = require "bigint"
+local fmt = require "fmt"
+
+local function bell_triangle(n)
+ local zero = bigint.new(0)
+ local tri = {}
+ for i = 1, n do
+ tri[i] = {}
+ for j = 1, i - 1 do tri[i][j] = zero end
+ end
+ tri[2][1] = bigint.new(1)
+ for i = 3, n do
+ tri[i][1] = tri[i - 1][i - 2]
+ for j = 2, i - 1 do
+ tri[i][j] = tri[i][j - 1] + tri[i - 1][j - 1]
+ end
+ end
+ return tri
+end
+
+local bt = bell_triangle(51)
+print("First fifteen and fiftieth Bell numbers:")
+for i = 2, 16 do
+ local s = bt[i][1]:tostring()
+ fmt.print("%2d: %s", i - 1, fmt.int(s))
+end
+local s50 = bt[51][1]:tostring()
+fmt.print("%2d: %s", 50, fmt.int(s50))
+print("\nThe first ten rows of Bell's triangle:")
+for i = 2, 11 do
+ fmt.tprint("%7s", bt[i]:map(|j| -> fmt.int(j:tostring())), #bt[i])
+end
diff --git a/Task/Benfords-law/DuckDB/benfords-law.duckdb b/Task/Benfords-law/DuckDB/benfords-law.duckdb
new file mode 100644
index 0000000000..ec7d41aaa2
--- /dev/null
+++ b/Task/Benfords-law/DuckDB/benfords-law.duckdb
@@ -0,0 +1,22 @@
+with recursive fib (n1, n2) as (
+ select
+ 1::double, 1::double
+ union all
+ select n2, n1+n2
+ from fib
+ ),
+lastdigits as (
+ select format('{}', n1)[1]::int as digit
+ from fib
+ limit 1000 -- N.B.
+ ),
+counts as (
+ select digit, count() as actual
+ from lastdigits group by digit
+ ),
+total as (
+ select count() as total from lastdigits
+ )
+select digit, actual, (total * log(10, 1 + (1 / digit))) as expected
+ from counts, total
+ order by digit;
diff --git a/Task/Bernoulli-numbers/R/bernoulli-numbers.r b/Task/Bernoulli-numbers/R/bernoulli-numbers.r
index e6c84acce2..71e908ffcf 100644
--- a/Task/Bernoulli-numbers/R/bernoulli-numbers.r
+++ b/Task/Bernoulli-numbers/R/bernoulli-numbers.r
@@ -1,8 +1,6 @@
-library(pracma)
+library(gmp)
-for (idx in c(1,2*0:30)) {
- b <- bernoulli(idx)
- d <- as.character(denominator(b))
- n <- as.character(numerator(b))
- cat("B(",idx,") = ",n,"/",d,"\n", sep = "")
-}
+indices <- c(0,1,2*(1:30))
+bnums <- sapply(indices, BernoulliQ)
+names(bnums) <- paste0("B(", indices, ")")
+print(bnums, initLine=FALSE)
diff --git a/Task/Bernoulli-numbers/REXX/bernoulli-numbers.rexx b/Task/Bernoulli-numbers/REXX/bernoulli-numbers.rexx
index a1673236bf..83184fac1f 100644
--- a/Task/Bernoulli-numbers/REXX/bernoulli-numbers.rexx
+++ b/Task/Bernoulli-numbers/REXX/bernoulli-numbers.rexx
@@ -1,55 +1,129 @@
-/*REXX program calculates N number of Bernoulli numbers expressed as vulgar fractions.*/
-parse arg N .; if N=='' | N=="," then N= 60 /*Not specified? Then use the default.*/
-numeric digits max(9, n*2) /*increase the decimal digits if needed*/
-w= max(length(N), 4); Nw= N + w + N % 4 /*used for aligning (output) fractions.*/
-say 'B(n)' center("Bernoulli numbers expressed as vulgar fractions", max(78-w, Nw) )
-say copies('─',w) copies("─", max(78-w,Nw+2*w)) /*display 2nd line of title, separators*/
-!.= .; do #=0 to N /*process the numbers from 0 ──► N. */
- b= bern(#); if b==0 then iterate /*calculate Bernoulli number, skip if 0*/
- indent= max(0, nW - pos('/', b) ) /*calculate the alignment (indentation)*/
- say right(#, w) left('', indent) b /*display the indented Bernoulli number*/
- end /*#*/ /* [↑] align the Bernoulli fractions. */
-exit 0 /*stick a fork in it, we're all done. */
-/*──────────────────────────────────────────────────────────────────────────────────────*/
-bern: parse arg x; if x==0 then return '1/1' /*handle the special case of zero. */
- if x==1 then return '-1/2' /* " " " " " one. */
- if x//2 then return 0 /* " " " " " odds > 1.*/
- do j=2 to x by 2; jp= j+1 /*process the positive integers up to X*/
- sn= 1 - j /*define the numerator. */
- sd= 2 /* " " denominator. */
- do k=2 to j-1 by 2 /*calculate a SN/SD sequence. */
- parse var @.k bn '/' ad /*get a previously calculated fraction.*/
- an= comb(jp, k) * bn /*use COMBination for the next term. */
- $lcm= LCM(sd, ad) /*use Least Common Denominator function*/
- sn= $lcm % sd * sn; sd= $lcm /*calculate the current numerator. */
- an= $lcm % ad * an /* " " next " */
- sn= sn + an /* " " current " */
- end /*k*/ /* [↑] calculate the SN/SD sequence.*/
- sn= -sn /*flip the sign for the numerator. */
- sd= sd * jp /*calculate the denominator. */
- if sn\==1 then do; _= GCD(sn, sd) /*get the Greatest Common Denominator.*/
- sn= sn%_; sd= sd%_ /*reduce the numerator and denominator.*/
- end /* [↑] done with the reduction(s). */
- @.j= sn'/'sd /*save the result for the next round. */
- end /*j*/ /* [↑] done calculating Bernoulli #'s.*/
- return sn'/'sd
-/*──────────────────────────────────────────────────────────────────────────────────────*/
-comb: procedure expose !.; parse arg x,y; if x==y then return 1
- if !.C.x.y\==. then return !.C.x.y /*combination computed before?*/
- if x-y < y then y= x-y /*x-y < y? Then use a new Y.*/
- z= perm(x, y); do j=2 for y-1; z= z % j
- end /*j*/
- !.C.x.y= z; return z /*assign memoization & return.*/
-/*──────────────────────────────────────────────────────────────────────────────────────*/
-GCD: procedure; parse arg x,y; x= abs(x)
- do until y==0; parse value x//y y with y x; end; return x
-/*──────────────────────────────────────────────────────────────────────────────────────*/
-LCM: procedure; parse arg x,y /*X=ABS(X); Y=ABS(Y) not needed for Bernoulli #s.*/
- /*IF Y==0 THEN RETURN 0 " " " " " */
- $= x * y /*calculate part of the LCM here. */
- do until y==0; parse value x//y y with y x
- end /*until*/ /* [↑] this is a short & fast GCD*/
- return $ % x /*divide the pre─calculated value.*/
-/*──────────────────────────────────────────────────────────────────────────────────────*/
-perm: procedure expose !.; parse arg x,y; if !.P.x.y\==. then return !.P.x.y
- z= 1; do j=x-y+1 to x; z= z*j; end; !.P.x.y= z; return z
+-- 30 Jul 2025
+include Settings
+numeric digits 16
+arg xx
+if xx = '' then
+ xx=60
+ss=(xx>0); xx=Abs(xx)
+
+say 'BERNOULLI NUMBERS'
+say version
+say
+
+call Time('r')
+call Rational1 xx
+if ss then
+ call ShowFractions xx
+call Timer
+
+call Time('r')
+call Rational2 xx
+if ss then
+ call ShowFractions xx
+call Timer
+
+call Time('r')
+call Decimal1 xx
+if ss then
+ call ShowDecimals xx
+call Timer
+
+call Time('r')
+call Decimal2 xx
+if ss then
+ call ShowDecimals xx
+call Timer
+exit
+
+Rational1:
+procedure expose Memo. Bern.
+arg xx
+say 'Rational arithmetic'
+say 'cf Generating function'
+numeric digits Max(Digits(),3*xx)
+Bern.=0; Bern.0='1 1'; Bern.1='-1 2'
+do n = 2 by 2 to xx
+ s=0
+ do k = 0 to n-1
+ s=Addq(s,Scaleq(Bern.k,Comb(n+1,k)))
+ end k
+ Bern.n=Mulq(Negq(s),Invq(n+1))
+end n
+return
+
+Rational2:
+procedure expose Memo. Bern.
+arg xx
+say 'Numerator and denominator calculations'
+say 'cf Double sum formula optimized'
+numeric digits Max(Digits(),3*xx)
+Bern.=0; Bern.0='1 1'; Bern.1='-1 2'
+do j = 2 by 2 to xx
+ jp=j+1; sn=1-j; sd=2
+ do k = 2 by 2 to j-1
+ bn=bn.k; ad=ad.k; an=Comb(jp,k)*bn; tl=Lcm(sd,ad)
+ sn=tl%sd*sn; sd=tl; an=tl%ad*an; sn=sn+an
+ end k
+ sn=-sn; sd=sd*jp; bn.j=sn; ad.j=sd; g=Gcd(Abs(sn),sd)
+ Bern.j=sn/g sd/g
+end j
+return
+
+ShowFractions:
+procedure expose Bern.
+arg xx
+w=Length(Word(Bern.xx,1))+2
+say ' Bn' Right('Num',w) '/' Left('Den',10) 'Decimal'
+do i = 0 to xx
+ if Bern.i <> 0 then do
+ parse var Bern.i num den
+ say Right(i,3) Right(num,w) '/' Left(den,10) Digit(num/den,16)
+ end
+end i
+return
+
+Decimal1:
+procedure expose Bern. Memo.
+arg xx
+say 'Floating point calculations'
+say 'cf Generating function'
+numeric digits Max(Digits(),2*xx)
+Bern.=0; Bern.0=1; Bern.1='-0.5'
+do n = 2 by 2 to xx
+ s=0
+ do k = 0 to n-1
+ s=s+Bern.k*Comb(n+1,k)
+ end k
+ Bern.n=-s/(n+1)
+end n
+return xx
+
+Decimal2:
+procedure expose Bern. Memo.
+arg xx
+say 'Floating point calculations'
+say 'cf Akiyama-Tanigawa'
+numeric digits Max(Digits(),3*xx)
+Bern.=0; Bern.0=1; Bern.1=-0.5
+do i = 2 by 2 to xx
+ do m = 0 to i
+ a.m=1/(m+1)
+ do j = m by -1 to 1
+ j1=j-1; a.j1=j*(a.j1-a.j)
+ end
+ end m
+ Bern.i=a.0
+end i
+return xx
+
+ShowDecimals:
+procedure expose Bern.
+arg xx
+say ' Bn' 'Decimal'
+do i = 0 to xx
+ if Bern.i <> 0 then
+ say Right(i,3) Digit(Bern.i,16)
+end i
+return
+
+include Math
diff --git a/Task/Best-shuffle/Elena/best-shuffle.elena b/Task/Best-shuffle/Elena/best-shuffle.elena
index 99e99cba05..2cbdf0b886 100644
--- a/Task/Best-shuffle/Elena/best-shuffle.elena
+++ b/Task/Best-shuffle/Elena/best-shuffle.elena
@@ -41,8 +41,8 @@ public program()
{
var shuffled_s := s.Shuffled;
- console.printLine("The best shuffle of ",s," is ",shuffled_s,"(",shuffled_s.score(s),")")
+ Console.printLine("The best shuffle of ",s," is ",shuffled_s,"(",shuffled_s.score(s),")")
};
- console.readChar()
+ Console.readChar()
}
diff --git a/Task/Best-shuffle/Factor/best-shuffle.factor b/Task/Best-shuffle/Factor/best-shuffle.factor
new file mode 100644
index 0000000000..ac380801c1
--- /dev/null
+++ b/Task/Best-shuffle/Factor/best-shuffle.factor
@@ -0,0 +1,26 @@
+USING: arrays combinators.short-circuit formatting kernel random
+sequences sequences.extras ;
+
+:: best-shuffle ( str -- str' )
+ str clone :> new-str
+ str length :> n
+ n >array randomize :> range1
+ n >array randomize :> range2
+
+ range1 [| i |
+ range2 [| j |
+ {
+ [ i j = ]
+ [ i new-str nth j new-str nth = ]
+ [ i str nth j new-str nth = ]
+ [ i new-str nth j str nth = ]
+ } 0|| [
+ i j new-str exchange
+ ] unless
+ ] each
+ ] each
+
+ new-str ;
+
+: best-shuffle. ( str -- )
+ dup best-shuffle 2dup [ = ] 2count "%s, %s, (%d)\n" printf ;
diff --git a/Task/Best-shuffle/YAMLScript/best-shuffle.ys b/Task/Best-shuffle/YAMLScript/best-shuffle.ys
new file mode 100644
index 0000000000..2874ddd1dd
--- /dev/null
+++ b/Task/Best-shuffle/YAMLScript/best-shuffle.ys
@@ -0,0 +1,44 @@
+!YS-v0
+
+defn main(input):
+ say: read-string(input)
+ .map(best-shuffle):vec
+
+defn best-shuffle(s):
+ ref =: s:group-indices:cycles
+ prm =: concat.apply(map(partial(rotate 1) ref))
+ ref =: concat(ref*)
+
+ map(vector ref prm):
+ .sort-by(first _)
+ .map(second)
+ .map(partial(get s))
+ .str(*)
+ .call(\([s _ s.score(_)]) _)
+
+defn score(before after):
+ map(== before after)
+ .filter(true?).#
+
+defn group-indices(s):
+ map-indexed(vector s)
+ .merge-vecs({}):vals
+ .sort-by(count _):reverse
+
+defn cycles(coll):
+ n =: coll.0.#
+ cycle =: range(n):cycle
+ coll =: concat(coll*)
+ map(vector coll cycle):
+ .merge-vecs([])
+
+defn rotate(n coll):
+ c =: coll.#
+ n =: (c + n) % c
+ concat coll.drop(n): coll.take(n)
+
+defn merge-vecs(vecs init):
+ reduce _ init vecs:
+ fn(counts [index x]):
+ assoc counts x:
+ counts.$x.or([]).conj(index)
diff --git a/Task/Bifid-cipher/Zig/bifid-cipher.zig b/Task/Bifid-cipher/Zig/bifid-cipher.zig
new file mode 100644
index 0000000000..1647e357f2
--- /dev/null
+++ b/Task/Bifid-cipher/Zig/bifid-cipher.zig
@@ -0,0 +1,164 @@
+const std = @import("std");
+
+const Point = struct {
+ row: i32,
+ col: i32,
+};
+
+const Bifid = struct {
+ grid: [][]u8,
+ coordinates: std.AutoHashMap(u8, Point),
+ n: i32,
+ allocator: std.mem.Allocator,
+
+ pub fn init(allocator: std.mem.Allocator, n: i32, text: []const u8) !*Bifid {
+ if (text.len != @as(usize, @intCast(n * n))) {
+ return error.IncorrectLength;
+ }
+
+ var self = try allocator.create(Bifid);
+ self.* = .{
+ .grid = try allocator.alloc([]u8, @intCast(n)),
+ .coordinates = std.AutoHashMap(u8, Point).init(allocator),
+ .n = n,
+ .allocator = allocator,
+ };
+
+ for (0..@intCast(n)) |i| {
+ self.grid[i] = try allocator.alloc(u8, @intCast(n));
+ }
+
+ var row: i32 = 0;
+ var col: i32 = 0;
+
+ for (text) |ch| {
+ self.grid[@intCast(row)][@intCast(col)] = ch;
+ try self.coordinates.put(ch, .{ .row = row, .col = col });
+
+ col += 1;
+ if (col == n) {
+ col = 0;
+ row += 1;
+ }
+ }
+
+ if (n == 5) {
+ // Handle I/J as the same letter in traditional 5x5 grid
+ if (self.coordinates.get('I')) |i_coords| {
+ try self.coordinates.put('J', i_coords);
+ }
+ }
+
+ return self;
+ }
+
+ pub fn deinit(self: *Bifid) void {
+ for (self.grid) |row| {
+ self.allocator.free(row);
+ }
+ self.allocator.free(self.grid);
+ self.coordinates.deinit();
+ self.allocator.destroy(self);
+ }
+
+ pub fn encrypt(self: *const Bifid, text: []const u8, allocator: std.mem.Allocator) ![]u8 {
+ var row_one = std.ArrayList(i32).init(allocator);
+ defer row_one.deinit();
+ var row_two = std.ArrayList(i32).init(allocator);
+ defer row_two.deinit();
+
+ for (text) |ch| {
+ if (self.coordinates.get(ch)) |coordinate| {
+ try row_one.append(coordinate.row);
+ try row_two.append(coordinate.col);
+ }
+ }
+
+ // Extend row_one with all elements from row_two
+ for (row_two.items) |col| {
+ try row_one.append(col);
+ }
+
+ var result = std.ArrayList(u8).init(allocator);
+ var i: usize = 0;
+ while (i < row_one.items.len - 1) : (i += 2) {
+ const r = @as(usize, @intCast(row_one.items[i]));
+ const c = @as(usize, @intCast(row_one.items[i + 1]));
+ try result.append(self.grid[r][c]);
+ }
+
+ return result.toOwnedSlice();
+ }
+
+ pub fn decrypt(self: *const Bifid, text: []const u8, allocator: std.mem.Allocator) ![]u8 {
+ var row = std.ArrayList(i32).init(allocator);
+ defer row.deinit();
+
+ for (text) |ch| {
+ if (self.coordinates.get(ch)) |coordinate| {
+ try row.append(coordinate.row);
+ try row.append(coordinate.col);
+ }
+ }
+
+ const middle = row.items.len / 2;
+
+ var result = std.ArrayList(u8).init(allocator);
+
+ for (0..middle) |i| {
+ const r = @as(usize, @intCast(row.items[i]));
+ const c = @as(usize, @intCast(row.items[i + middle]));
+ try result.append(self.grid[r][c]);
+ }
+
+ return result.toOwnedSlice();
+ }
+
+ pub fn display(self: *const Bifid) void {
+ for (self.grid) |row| {
+ for (row) |ch| {
+ std.debug.print("{c} ", .{ch});
+ }
+ std.debug.print("\n", .{});
+ }
+ }
+};
+
+fn runTest(bifid: *const Bifid, message: []const u8, allocator: std.mem.Allocator) !void {
+ std.debug.print("Using Polybius square:\n", .{});
+ bifid.display();
+ std.debug.print("Message: {s}\n", .{message});
+
+ const encrypted = try bifid.encrypt(message, allocator);
+ defer allocator.free(encrypted);
+ std.debug.print("Encrypted: {s}\n", .{encrypted});
+
+ const decrypted = try bifid.decrypt(encrypted, allocator);
+ defer allocator.free(decrypted);
+ std.debug.print("Decrypted: {s}\n\n", .{decrypted});
+}
+
+pub fn main() !void {
+ var gpa = std.heap.GeneralPurposeAllocator(.{}){};
+ defer _ = gpa.deinit();
+ const allocator = gpa.allocator();
+
+ const message1 = "ATTACKATDAWN";
+ const message2 = "FLEEATONCE";
+ const message3 = "THEINVASIONWILLSTARTONTHEFIRSTOFJANUARY";
+
+ const bifid1 = try Bifid.init(allocator, 5, "ABCDEFGHIKLMNOPQRSTUVWXYZ");
+ defer bifid1.deinit();
+
+ const bifid2 = try Bifid.init(allocator, 5, "BGWKZQPNDSIOAXEFCLUMTHYVR");
+ defer bifid2.deinit();
+
+ try runTest(bifid1, message1, allocator);
+ try runTest(bifid2, message2, allocator);
+ try runTest(bifid2, message1, allocator);
+ try runTest(bifid1, message2, allocator);
+
+ const bifid3 = try Bifid.init(allocator, 6, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789");
+ defer bifid3.deinit();
+ try runTest(bifid3, message3, allocator);
+}
diff --git a/Task/Bin-given-limits/DuckDB/bin-given-limits-1.duckdb b/Task/Bin-given-limits/DuckDB/bin-given-limits-1.duckdb
new file mode 100644
index 0000000000..3ac65257db
--- /dev/null
+++ b/Task/Bin-given-limits/DuckDB/bin-given-limits-1.duckdb
@@ -0,0 +1,24 @@
+# Return 'inf'::DOUBLE if the value is too large
+# Assume limits is sorted
+create or replace function classify(x, limits) as (
+ with recursive cte as (
+ select 0 as i, null as found
+ union all
+ select i+1, if(x < limits[1+i], limits[1+i], null) as found
+ from cte
+ where found is null and i < length(limits)
+ )
+ select coalesce(last(found order by i), 'inf'::DOUBLE) from cte
+);
+
+create or replace function bins(data, limits) as table (
+ select value, classify(value, limits)
+ from unnest(data) _(value)
+);
+
+set variable limits = [23, 37, 43, 53, 67, 83];
+set variable data = [95,21,94,12,99,4,70,75,83,93,52,80,57,5,53,86,65,17,92,83,71,61,54,58,47,
+ 16, 8, 9,32,84,7,87,46,19,30,37,96,6,98,40,79,97,45,64,60,29,49,36,43,55];
+
+select histogram(boundary)
+from bins(getvariable('data'), getvariable('limits') ) t(value, boundary);
diff --git a/Task/Bin-given-limits/DuckDB/bin-given-limits-2.duckdb b/Task/Bin-given-limits/DuckDB/bin-given-limits-2.duckdb
new file mode 100644
index 0000000000..dcd69d9fe2
--- /dev/null
+++ b/Task/Bin-given-limits/DuckDB/bin-given-limits-2.duckdb
@@ -0,0 +1,14 @@
+# "pretty print" the histogram as a table
+create or replace function pp(data, limits) as table (
+ with hist as (
+ select histogram(boundary) as h
+ from bins(data, limits) t(value, boundary)
+ ),
+ upper as (select h['inf'::DOUBLE][1] as upper from hist)
+ select '< ' || x::VARCHAR as bin, (select coalesce(h[x][1],0) from hist) as frequency
+ from unnest(limits) _(x)
+ union all
+ select '< inf', upper from upper
+);
+
+from pp(getvariable('data'), getvariable('limits'));
diff --git a/Task/Binary-digits/DuckDB/binary-digits-1.duckdb b/Task/Binary-digits/DuckDB/binary-digits-1.duckdb
new file mode 100644
index 0000000000..b0439c7cc0
--- /dev/null
+++ b/Task/Binary-digits/DuckDB/binary-digits-1.duckdb
@@ -0,0 +1,2 @@
+SELECT n, format('{:b}', n)
+FROM (select unnest(range(0, 6) || [50, 9000]) as n);
diff --git a/Task/Binary-digits/DuckDB/binary-digits-2.duckdb b/Task/Binary-digits/DuckDB/binary-digits-2.duckdb
new file mode 100644
index 0000000000..943b003cac
--- /dev/null
+++ b/Task/Binary-digits/DuckDB/binary-digits-2.duckdb
@@ -0,0 +1,22 @@
+# n is assumed to be a non-negative integer
+CREATE OR REPLACE FUNCTION binary_digits(n) as (
+ WITH RECURSIVE cte(num, str) as (
+ -- Base case
+ SELECT n, ''
+ UNION ALL
+ -- Recursive case: divide by 2 and build the binary string
+ SELECT num // 2, (num % 2) || str
+ FROM cte
+ WHERE num > 0
+ )
+ SELECT CASE WHEN str = '' THEN '0' ELSE str END
+ FROM cte
+ WHERE num = 0
+ LIMIT 1
+);
+
+select n, binary_digits(n)
+from (select unnest(range(0, 6) || [50, 9000]) as n);
+
+.maxwidth 200
+select n, binary_digits(n) from (select 123456789123456789123456789123456789 as n)
diff --git a/Task/Binary-digits/Elena/binary-digits.elena b/Task/Binary-digits/Elena/binary-digits.elena
index dbab2c5f2b..163e2ca4b3 100644
--- a/Task/Binary-digits/Elena/binary-digits.elena
+++ b/Task/Binary-digits/Elena/binary-digits.elena
@@ -5,6 +5,6 @@ public program()
{
new int[]{5,50,9000}.forEach::(n)
{
- console.printLine(n.toString(2))
+ Console.printLine(n.toString(2))
}
}
diff --git a/Task/Binary-digits/Haxe/binary-digits.haxe b/Task/Binary-digits/Haxe/binary-digits.haxe
new file mode 100644
index 0000000000..f732d3f6e8
--- /dev/null
+++ b/Task/Binary-digits/Haxe/binary-digits.haxe
@@ -0,0 +1,15 @@
+class Main {
+ static public function main() {
+ var integers = [5, 50, 9000];
+
+ for (i in integers) {
+ var bin = "";
+ while (i > 1) {
+ bin = (i % 2) + bin;
+ i = Std.int(i / 2);
+ }
+ bin = i + bin;
+ trace(bin);
+ }
+ }
+}
diff --git a/Task/Binary-digits/Icon/binary-digits.icon b/Task/Binary-digits/Icon/binary-digits-1.icon
similarity index 100%
rename from Task/Binary-digits/Icon/binary-digits.icon
rename to Task/Binary-digits/Icon/binary-digits-1.icon
diff --git a/Task/Binary-digits/Icon/binary-digits-2.icon b/Task/Binary-digits/Icon/binary-digits-2.icon
new file mode 100644
index 0000000000..54b725932a
--- /dev/null
+++ b/Task/Binary-digits/Icon/binary-digits-2.icon
@@ -0,0 +1,12 @@
+procedure main()
+ every write(bstring(0|5|50|255|1285|9000))
+end
+
+procedure bstring(i)
+ s := ""
+ repeat{
+ s := string(iand(i,1)) || s
+ if (i := ishift(i,-1)) = 0 then break
+ }
+ return s
+end
diff --git a/Task/Binary-digits/RISC-V-Assembly/binary-digits.asm b/Task/Binary-digits/RISC-V-Assembly/binary-digits.asm
new file mode 100644
index 0000000000..4c9a8b927b
--- /dev/null
+++ b/Task/Binary-digits/RISC-V-Assembly/binary-digits.asm
@@ -0,0 +1,185 @@
+ # riscv assembly raspberry pico2 rp2350
+# program binaryDigits.s
+# For construction see the riscv main page
+# Exec by connexion putty com3
+/*********************************************/
+/* CONSTANTES */
+/********************************************/
+.equ LENGTHDEC, 12
+.equ LENGTHBIN, 33
+/*******************************************/
+/* INITIALED DATAS */
+/*******************************************/
+.data
+szMessStart: .asciz "Program riscv start.\r\n"
+
+szMessAffdeb: .asciz "Decimal value : "
+szMessAfffin: .asciz " binary value : "
+szCarriageReturn: .asciz " \r\n"
+/*******************************************/
+/* UNINITIALED DATA */
+/*******************************************/
+.bss
+sConvDec: .skip LENGTHDEC
+sConvBin: .skip LENGTHBIN
+.align 2
+/**********************************************/
+/* SECTION CODE */
+/**********************************************/
+.text
+.global main
+
+main:
+ call stdio_init_all # général init
+1: # start loop connexion
+ li a0,0 # raz argument register
+ call tud_cdc_n_connected # connexion usb by function sdk c++
+ beqz a0,1b # return code = zero ? loop
+
+ la a0,szMessStart # message address
+ call writeString # display string
+ li a0,50
+ call conversion
+ li a0,-1
+ call conversion
+ li a0,1
+ call conversion
+ li a0,1<<30
+ call conversion
+ call getchar
+100: # final loop
+ j 100b
+/************************************/
+/* conversion and display */
+/***********************************/
+/* a0 value */
+conversion:
+ addi sp, sp, -8
+ sw ra, 0(sp) # save registers
+ sw s0, 4(sp)
+ mv s0,a0
+ la a0,szMessAffdeb
+ call writeString # display message
+ mv a0,s0
+ la a1,sConvDec
+ call conversion10S
+ call writeString # display
+ la a0,szMessAfffin
+ call writeString # display message
+ mv a0,s0
+ la a1,sConvBin
+ call conversion2
+ la a0,sConvBin
+ call writeString # display message
+ la a0,szCarriageReturn
+ call writeString # display newline
+
+100:
+ lw ra, 0(sp) # restaur registers
+ lw s0, 4(sp)
+ addi sp, sp, 8
+ ret
+/************************************/
+/* binary conversion */
+/***********************************/
+/* a0 value */
+/* a1 result area address */
+/* size mini 33 character */
+conversion2: # INFO: conversion2
+ addi sp, sp, -8 # save registres
+ sw ra, 0(sp)
+ li t2,0
+ li t1,0
+1:
+ slt t3,a0,x0 # if negative bit 31 is 1
+
+ slli a0,a0,1 # shift left one bit
+ add t0,a1,t1 # compute indice to store char in area
+ addi t3,t3,'0' # conversion byte to ascii char
+ sb t3,(t0) # store char in area
+ addi t1,t1,1 # next position
+ li t0,7 # for add a space separation
+ beq t2,t0,4f
+ li t0,15 # for add a space
+ beq t2,t0,4f
+ li t0,23 # for add a space
+ beq t2,t0,4f
+ j 5f
+
+4: # store space
+ li t3,' '
+ add t0,a1,t1
+ sb t3,(t0)
+ addi t1,t1,1
+5:
+ addi t2,t2,1 # increment bit indice
+ li t0,32 # maxi ?
+ blt t2,t0,1b # and loop
+
+ add t0,a1,t1
+ sb x0,(t0) # final zero
+100:
+ lw ra, 0(sp)
+ addi sp, sp, 8
+ ret
+/***************************************************/
+/* register conversion in décimal signed */
+/***************************************************/
+/* a0 value */
+/* a1 result area address size mini 12c */
+/* a0 return result start address */
+/* a1 return characters number in area */
+conversion10S: # INFO: conversion10S
+ addi sp, sp, -8 # save registers
+ sw ra, 0(sp)
+ mv t5,a1 # begin store area
+ li t6,'+'
+ bge a0,x0,1f # positive number ?
+ li t6,'-' # negative
+ sub a0,x0,a0 # inversion
+1:
+ li t4,LENGTHDEC # area size
+ add t2,t4,t5
+ sb x0,(t2) # final zero
+ addi t4,t4,-1 # position précedente
+ li t1,10
+2:
+ remu t3,a0,t1 # reminder division by 10
+ addi t3,t3,48 # conversion ascii
+ add t2,t4,t5 # compute store indice
+ sb t3,(t2)
+ addi t4,t4,-1 # position précedente
+ divu a0,a0,t1 # division by 10
+ bne a0,x0,2b
+ # store signe in current position
+ add t2,t4,t5
+ sb t6,(t2)
+3:
+ add a0,t4,t5 # return store area begin address
+ li t0,LENGTHDEC # and size
+ sub a1,t0,t4
+
+100:
+ lw ra, 0(sp) # restaur registers
+ addi sp, sp, 8
+ ret
+/************************************/
+/* string write on connexion usb */
+/***********************************/
+/* a0 String address */
+writeString: # INFO: writeString
+ addi sp, sp, -8 # save registers on stack
+ sw ra, 0(sp)
+ sw s0, 4(sp)
+ mv s0,a0 # save address
+1:
+ lbu a0,(s0) # load one character
+ beqz a0,100f # end if zero
+ call __wrap_putchar # character write
+ add s0,s0,1 # increment address
+ j 1b # and loop
+100:
+ lw ra, 0(sp) # restaur registers
+ lw s0, 4(sp)
+ addi sp, sp, 8
+ ret
diff --git a/Task/Bioinformatics-base-count/DuckDB/bioinformatics-base-count.duckdb b/Task/Bioinformatics-base-count/DuckDB/bioinformatics-base-count.duckdb
new file mode 100644
index 0000000000..a774d42bcc
--- /dev/null
+++ b/Task/Bioinformatics-base-count/DuckDB/bioinformatics-base-count.duckdb
@@ -0,0 +1,18 @@
+# Filter the contents of the file into a table (id, c) of uppercase letters
+create or replace table bases as (
+ select row_number() OVER () as id, c
+ from (select unnest(regexp_extract_all(content, '[A-Z]') ) as c
+ from read_text('rc-bioinformatics-base-count.txt') )
+);
+
+.print DNA sequence:
+with tbl as (select (id - 1 - mod(id - 1, 50)) as "offset", c from bases)
+ select "offset", string_agg(c, '') as sequence
+ from tbl
+ group by "offset"
+ order by "offset" ;
+
+.print
+.print Distribution of bases:
+select histogram(c), count(*) as N
+from bases ;
diff --git a/Task/Bioinformatics-base-count/PascalABC.NET/bioinformatics-base-count.pas b/Task/Bioinformatics-base-count/PascalABC.NET/bioinformatics-base-count.pas
new file mode 100644
index 0000000000..ddf4a8fef6
--- /dev/null
+++ b/Task/Bioinformatics-base-count/PascalABC.NET/bioinformatics-base-count.pas
@@ -0,0 +1,14 @@
+## var DNA := '''
+CGTAAAAAATTACAACGTCCTTTGGCTATCTCTTAAACTCCTGCTAAATG
+CTCGTGCTTTCCAATTATGTAAGCGTTCCGAGACGGGGTGGTCGATTCTG
+AGGACAAAGGTCAAGATGGAGCGCATCGAACGCAATAAGGATCATTTGAT
+GGGACGTTTCGTCGACAAAGTCTTGTTTCGAGAGTAACGGCTACCGTCTT
+CGATTCTGCTTATAACACTATGTTCTTATGAAATGGATGTTCTGAGTTGG
+TCAGTCCCAATGTGCGGGGTTTCTTTTAGTACGTCGGGAGTGGTATTATA
+TTTAATTTTTCTATATAGCGATCTGTATTTAAGCAATTCATTTAGGTTAT
+CGCCGCGATGCTCGGTTCGGACCGCCAAGCATCTGGCTCCACTGCTAGTG
+TCCTAAATTTGAATGGCAAACACAAATAAGATTTAGCAATTCGTGTAGAC
+GACCGGGGACTTGCATGATGGGAGCAGCTTTGTTAAACTACGAACGTAAT
+''';DNA:=DNA.Remove(#13,#10);
+var t:=DNA.EachCount.OrderBy(x->x.key).Println.Sum(x->x.value);
+Print('total,',t);
diff --git a/Task/Biorhythms/Ada/biorhythms.ada b/Task/Biorhythms/Ada/biorhythms.ada
new file mode 100644
index 0000000000..8f1fb796b8
--- /dev/null
+++ b/Task/Biorhythms/Ada/biorhythms.ada
@@ -0,0 +1,65 @@
+with Ada.Calendar;
+with Ada.Calendar.Arithmetic;
+with Ada.Calendar.Formatting;
+with Ada.Command_Line;
+with Ada.Numerics;
+with Ada.Numerics.Elementary_Functions;
+with Ada.Text_IO;
+
+use Ada.Calendar;
+use Ada.Calendar.Arithmetic;
+use Ada.Calendar.Formatting;
+use Ada.Command_Line;
+use Ada.Numerics;
+use Ada.Numerics.Elementary_Functions;
+use Ada.Text_IO;
+
+procedure Biorhythms is
+ Birth_Date : Time := Value (Argument (1) & " 00:00:00");
+ Target_Date : Time := Value (Argument (2) & " 00:00:00");
+ Days : Day_Count := Target_Date - Birth_Date;
+
+ -- There's not much point having types for these for such a short
+ -- problem, but in a big program this would be useful to prevent
+ -- accidentally assigning wrong values.
+ type Physical_Type is mod 23;
+ type Emotional_Type is mod 28;
+ type Mental_Type is mod 33;
+ type Biorhythm_Type is
+ record
+ Physical : Physical_Type;
+ Emotional : Emotional_Type;
+ Mental : Mental_Type;
+ end record;
+
+ function To_Biorhythm (D : Day_Count) return Biorhythm_Type is
+ (
+ Physical_Type (D mod Physical_Type'Modulus),
+ Emotional_Type (D mod Emotional_Type'Modulus),
+ Mental_Type (D mod Mental_Type'Modulus)
+ );
+
+ Biorhythm : Biorhythm_Type := To_Biorhythm (Days);
+
+ package Float_IO is new Ada.Text_IO.Float_IO (Float);
+ use Float_IO;
+
+ function To_Percent (F : Float) return Float is
+ (100.0 * Sin (2.0 * Pi * F));
+
+ procedure Report_Biorhythm (B : Biorhythm_Type) is
+ PFrac : Float := Float (B.Physical) / Float (Physical_Type'Modulus);
+ EFrac : Float := Float (B.Emotional) / Float (Emotional_Type'Modulus);
+ MFrac : Float := Float (B.Mental) / Float (Mental_Type'Modulus);
+ Physical : Float := To_Percent (PFrac);
+ Emotional : Float := To_Percent (EFrac);
+ Mental : Float := To_Percent (MFrac);
+ begin
+ Put_Line ("Age in days: " & Days'Image);
+ Put ("Physical cycle: "); Put (Physical, 3, 1, 0); Put ("%"); New_Line;
+ Put ("Emotional cycle: "); Put (Emotional, 3, 1, 0); Put ("%"); New_Line;
+ Put ("Mental cycle: "); Put (Mental, 3, 1, 0); Put ("%"); New_Line;
+ end Report_Biorhythm;
+begin
+ Report_Biorhythm (Biorhythm);
+end Biorhythms;
diff --git a/Task/Biorhythms/EasyLang/biorhythms.easy b/Task/Biorhythms/EasyLang/biorhythms.easy
index 8f9bf9a6c9..cebda43194 100644
--- a/Task/Biorhythms/EasyLang/biorhythms.easy
+++ b/Task/Biorhythms/EasyLang/biorhythms.easy
@@ -27,10 +27,10 @@ proc cycle now cyc t$ col .
gcolor col
gtext 4 cyc * 1.2 - 20 t$
glinewidth 0.5
+ gpenup
for d = now - 20 to now + 20
- yp = y
y = 50 + 20 * sin (360 * d / cyc)
- if x > 0 : gline (x - 2.5) yp x y
+ glineto x y
x += 2.5
.
.
diff --git a/Task/Bitcoin-public-point-to-address/FreeBASIC/bitcoin-public-point-to-address.basic b/Task/Bitcoin-public-point-to-address/FreeBASIC/bitcoin-public-point-to-address.basic
new file mode 100644
index 0000000000..902427a908
--- /dev/null
+++ b/Task/Bitcoin-public-point-to-address/FreeBASIC/bitcoin-public-point-to-address.basic
@@ -0,0 +1,142 @@
+#include "SHA_256.bas"
+#include "RIPEMD_160.bas"
+
+Const BITCOIN_SPECIAL_VALUE As String = "04"
+Const BITCOIN_VERSION_NUMBER As String = "00"
+
+Dim Shared base_map(255) As Integer
+
+Sub init_base_map()
+ Dim As Integer i
+ For i = 0 To 255
+ base_map(i) = -1
+ Next
+ For i = 0 To 9
+ base_map(Asc("0") + i) = i
+ Next
+ For i = 0 To 5
+ base_map(Asc("a") + i) = 10 + i
+ base_map(Asc("A") + i) = 10 + i
+ Next
+ For i = 6 To 15
+ base_map(Asc("a") + i) = 10 + i
+ base_map(Asc("A") + i) = 10 + i
+ Next
+End Sub
+
+Sub hex_to_bytes(text As String, bytes() As Integer)
+ Dim As Integer first_digit, second_digit
+ Dim As Integer n = Len(text) \ 2
+ Redim bytes(n - 1)
+
+ For i As Integer = 0 To n - 1
+ first_digit = base_map(Asc(Mid(text, 2 * i + 1, 1)))
+ second_digit = base_map(Asc(Mid(text, 2 * i + 2, 1)))
+ bytes(i) = (first_digit Shl 4) + second_digit
+ Next
+End Sub
+
+Function vector_to_ascii_string(bytes() As Integer) As String
+ Dim As String result = ""
+
+ For i As Integer = 0 To Ubound(bytes)
+ result &= Chr(bytes(i))
+ Next
+
+ Return result
+End Function
+
+Sub compute_message_bytes(text As String, out_bytes() As Integer)
+ Dim As Integer bytes_1()
+ hex_to_bytes(text, bytes_1())
+
+ Dim As String ascii_1 = vector_to_ascii_string(bytes_1())
+ Dim As String hexSHA_256 = SHA_256(ascii_1)
+ Dim As Integer bytes_2()
+ hex_to_bytes(hexSHA_256, bytes_2())
+
+ Dim As String ascii_2 = vector_to_ascii_string(bytes_2())
+ Dim As String hexRIPEMD_160 = BITCOIN_VERSION_NUMBER & RIPEMD_160(ascii_2)
+ hex_to_bytes(hexRIPEMD_160, out_bytes())
+End Sub
+
+Sub compute_checksum(bytes() As Integer, out_checksum() As Integer)
+ Dim As String ascii_1 = vector_to_ascii_string(bytes())
+ Dim As String hex_1 = SHA_256(ascii_1)
+ Dim As Integer bytes_1()
+ hex_to_bytes(hex_1, bytes_1())
+
+ Dim As String ascii_2 = vector_to_ascii_string(bytes_1())
+ Dim As String hex_2 = SHA_256(ascii_2)
+ Dim As Integer bytes_2()
+ hex_to_bytes(hex_2, bytes_2())
+ Redim out_checksum(3)
+
+ For i As Integer = 0 To 3
+ out_checksum(i) = bytes_2(i)
+ Next
+End Sub
+
+Function encode_base_58(bytes() As Integer) As String
+ Const As String ALPHABET = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"
+ Const As Integer ALPHABET_SIZE = 58
+ Dim As String result = String(34, " ")
+ Dim As Integer i, j, n, c
+ Dim As Integer temp()
+
+ Redim As Integer bytes_copy(Ubound(bytes))
+ For i = 0 To Ubound(bytes)
+ bytes_copy(i) = bytes(i)
+ Next
+
+ For n = Len(result) - 1 To 0 Step -1
+ c = 0
+ For i = 0 To Ubound(bytes_copy)
+ c = c * 256 + bytes_copy(i)
+ bytes_copy(i) = c \ ALPHABET_SIZE
+ c Mod= ALPHABET_SIZE
+ Next
+ Mid(result, n + 1, 1) = Mid(ALPHABET, c + 1, 1)
+ Next
+
+ ' Quitar los '1' iniciales extra
+ While Left(result, 2) = "11"
+ result = Mid(result, 2)
+ Wend
+ Return result
+End Function
+
+Function encode_address(x As String, y As String) As String
+ Dim As String public_point = BITCOIN_SPECIAL_VALUE & x & y
+ If Len(public_point) <> 130 Then
+ Print "Invalid public point string"
+ Exit Function
+ End If
+ Dim As Integer message_bytes()
+ compute_message_bytes(public_point, message_bytes())
+
+ Dim As Integer checksum()
+ compute_checksum(message_bytes(), checksum())
+
+ Dim As Integer i
+ Dim As Integer full_bytes()
+ Redim full_bytes(Ubound(message_bytes) + 4)
+ For i = 0 To Ubound(message_bytes)
+ full_bytes(i) = message_bytes(i)
+ Next
+ For i = 0 To 3
+ full_bytes(Ubound(message_bytes) + 1 + i) = checksum(i)
+ Next
+
+ Return encode_base_58(full_bytes())
+End Function
+
+' Test Program
+init_base_map()
+
+Dim As String x = "50863AD64A87AE8A2FE83C1AF1A8403CB53F53E486D8511DAD8A04887E5B2352"
+Dim As String y = "2CD470243453A299FA9E77237716103ABC11A1DF38855ED6F2EE187E9C582BA6"
+
+Print encode_address(x, y)
+
+Sleep
diff --git a/Task/Bitcoin-public-point-to-address/JavaScript/bitcoin-public-point-to-address.js b/Task/Bitcoin-public-point-to-address/JavaScript/bitcoin-public-point-to-address.js
new file mode 100644
index 0000000000..1076901568
--- /dev/null
+++ b/Task/Bitcoin-public-point-to-address/JavaScript/bitcoin-public-point-to-address.js
@@ -0,0 +1,52 @@
+const crypto = require('crypto');
+
+const digits58 = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';
+
+function b58(n) {
+ if (n === 0n) return '';
+ return b58(n / 58n) + digits58[Number(n % 58n)];
+}
+
+function publicPointToAddress(x, y) {
+ // Convert hex strings to buffers
+ const xBuffer = Buffer.from(x, 'hex');
+ const yBuffer = Buffer.from(y, 'hex');
+
+ // Create uncompressed public key format (0x04 + x + y)
+ const publicKey = Buffer.concat([Buffer.from([0x04]), xBuffer, yBuffer]);
+
+ // SHA256 hash
+ const sha256Hash = crypto.createHash('sha256').update(publicKey).digest();
+
+ // RIPEMD160 hash
+ const ripemd160Hash = crypto.createHash('ripemd160').update(sha256Hash).digest();
+
+ // Add version byte (0x00 for mainnet)
+ const versionedHash = Buffer.concat([Buffer.from([0x00]), ripemd160Hash]);
+
+ // Double SHA256 for checksum
+ const checksum = crypto.createHash('sha256')
+ .update(crypto.createHash('sha256').update(versionedHash).digest())
+ .digest()
+ .slice(0, 4);
+
+ // Combine versioned hash with checksum
+ const addressBytes = Buffer.concat([versionedHash, checksum]);
+
+ // Convert to BigInt for base58 encoding
+ let n = 0n;
+ for (let i = 0; i < addressBytes.length; i++) {
+ n = (n << 8n) | BigInt(addressBytes[i]);
+ }
+
+ return b58(n);
+}
+
+// Test with the provided values
+if (require.main === module) {
+ const address = publicPointToAddress(
+ '50863AD64A87AE8A2FE83C1AF1A8403CB53F53E486D8511DAD8A04887E5B2352',
+ '2CD470243453A299FA9E77237716103ABC11A1DF38855ED6F2EE187E9C582BA6'
+ );
+ console.log(address);
+}
diff --git a/Task/Bitmap-B-zier-curves-Quadratic/EasyLang/bitmap-b-zier-curves-quadratic.easy b/Task/Bitmap-B-zier-curves-Quadratic/EasyLang/bitmap-b-zier-curves-quadratic.easy
index 3aaf5eda4f..4d1203c99e 100644
--- a/Task/Bitmap-B-zier-curves-Quadratic/EasyLang/bitmap-b-zier-curves-quadratic.easy
+++ b/Task/Bitmap-B-zier-curves-Quadratic/EasyLang/bitmap-b-zier-curves-quadratic.easy
@@ -1,18 +1,16 @@
sysconf topleft
proc quadraticbezier x1 y1 x2 y2 x3 y3 nseg .
+ gpenup
for i = 0 to nseg
t = i / nseg
t1 = 1 - t
a = t1 * t1
b = 2 * t * t1
c = t * t
- px = x
- py = y
x = a * x1 + b * x2 + c * x3 + 0.5
y = a * y1 + b * y2 + c * y3 + 0.5
- if i > 0 : gline px py x y
+ glineto x y
.
.
glinewidth 0.5
-gclear
quadraticbezier 1 1 30 37 59 1 100
diff --git a/Task/Bitmap-Bresenhams-line-algorithm/Pluto/bitmap-bresenhams-line-algorithm.pluto b/Task/Bitmap-Bresenhams-line-algorithm/Pluto/bitmap-bresenhams-line-algorithm.pluto
new file mode 100644
index 0000000000..8ab23127e7
--- /dev/null
+++ b/Task/Bitmap-Bresenhams-line-algorithm/Pluto/bitmap-bresenhams-line-algorithm.pluto
@@ -0,0 +1,27 @@
+local canvas = require "canvas"
+
+local function line(c, x0, y0, x1, y1, col)
+ local dx = math.abs(x1 - x0)
+ local dy = math.abs(y1 - y0)
+ local sx = (x0 < x1) ? 1 : -1
+ local sy = (y0 < y1) ? 1 : -1
+ local err = (dx > dy ? dx : - dy) // 2
+ while true do
+ c:set(x0, y0, col)
+ if x0 == x1 and y0 == y1 then break end
+ local e2 = err
+ if e2 > -dx then
+ err -= dy
+ x0 += sx
+ end
+ if e2 < dy then
+ err += dx
+ y0 += sy
+ end
+ end
+end
+
+local c = canvas.new(400, 400)
+c:fill(0xffffff) -- white background
+line(c, 0, 0, 399, 399, 0x0000ff) -- draw a red diagonal
+io.contents("mybmp.bmp", c:tobmp()) -- save to a bitmap file
diff --git a/Task/Bitmap-Midpoint-circle-algorithm/EasyLang/bitmap-midpoint-circle-algorithm.easy b/Task/Bitmap-Midpoint-circle-algorithm/EasyLang/bitmap-midpoint-circle-algorithm.easy
new file mode 100644
index 0000000000..2e0418ae0b
--- /dev/null
+++ b/Task/Bitmap-Midpoint-circle-algorithm/EasyLang/bitmap-midpoint-circle-algorithm.easy
@@ -0,0 +1,27 @@
+proc pix x y .
+ grect x / 5 y / 5 0.25 0.25
+.
+proc circ x0 y0 r .
+ t1 = r div 16
+ x = r
+ while x >= y
+ pix x0 - x, y0 + y
+ pix x0 - x, y0 - y
+ pix x0 - y, y0 + x
+ pix x0 - y, y0 - x
+ pix x0 + x, y0 + y
+ pix x0 + x, y0 - y
+ pix x0 + y, y0 + x
+ pix x0 + y, y0 - x
+ y += 1
+ t1 += y
+ t2 = t1 - x
+ if t2 >= 0
+ t1 = t2
+ x -= 1
+ .
+ .
+.
+for r = 20 step 20 to 240
+ circ 250 250 r
+.
diff --git a/Task/Bitmap-Midpoint-circle-algorithm/Julia/bitmap-midpoint-circle-algorithm.jl b/Task/Bitmap-Midpoint-circle-algorithm/Julia/bitmap-midpoint-circle-algorithm.jl
index 5b1e33d063..1295233abb 100644
--- a/Task/Bitmap-Midpoint-circle-algorithm/Julia/bitmap-midpoint-circle-algorithm.jl
+++ b/Task/Bitmap-Midpoint-circle-algorithm/Julia/bitmap-midpoint-circle-algorithm.jl
@@ -1,3 +1,5 @@
+using Images, ImageView
+
function drawcircle!(img::Matrix{T}, col::T, x0::Int, y0::Int, radius::Int) where T
x = radius - 1
y = 0
@@ -24,8 +26,6 @@ function drawcircle!(img::Matrix{T}, col::T, x0::Int, y0::Int, radius::Int) wher
return img
end
-# Test
-using Images
-
img = fill(Gray(255.0), 25, 25);
drawcircle!(img, Gray(0.0), 12, 12, 12)
+imshow(img)
diff --git a/Task/Bitmap-Midpoint-circle-algorithm/Pluto/bitmap-midpoint-circle-algorithm.pluto b/Task/Bitmap-Midpoint-circle-algorithm/Pluto/bitmap-midpoint-circle-algorithm.pluto
new file mode 100644
index 0000000000..c0d4f3ed9c
--- /dev/null
+++ b/Task/Bitmap-Midpoint-circle-algorithm/Pluto/bitmap-midpoint-circle-algorithm.pluto
@@ -0,0 +1,33 @@
+local canvas = require "canvas"
+
+local function trunc(x) return x >= 0 ? math.floor(x) : math.ceil(x) end
+
+local function circle(c, cx, cy, r, col)
+ local d = trunc((5 - r * 4) / 4)
+ local x = 0
+ local y = r
+ repeat
+ c:set(cx + x, cy + y, col)
+ c:set(cx + x, cy - y, col)
+ c:set(cx - x, cy + y, col)
+ c:set(cx - x, cy - y, col)
+ c:set(cx + y, cy + x, col)
+ c:set(cx + y, cy - x, col)
+ c:set(cx - y, cy + x, col)
+ c:set(cx - y, cy - x, col)
+ if d < 0 then
+ d += 2 * x + 1
+ else
+ d += 2 * (x - y) + 1
+ y -= 1
+ end
+ ++x
+ until x > y
+end
+
+local c = canvas.new(400, 400)
+c:fill(0xffffff) -- white background
+
+-- Draw a blue circle with centre at (200, 200) and radius 100.
+circle(c, 200, 200, 100, 0xff0000)
+io.contents("mybmp.bmp", c:tobmp()) -- save to a bitmap file
diff --git a/Task/Bitmap/Pluto/bitmap.pluto b/Task/Bitmap/Pluto/bitmap.pluto
new file mode 100644
index 0000000000..8901f27d06
--- /dev/null
+++ b/Task/Bitmap/Pluto/bitmap.pluto
@@ -0,0 +1,23 @@
+local canvas = require "canvas"
+
+-- Create a new canvas object: 400 pixels wide and 400 pixels high.
+local c = canvas.new(400, 400)
+
+-- Color the whole canvas blue.
+c:fill(0xff0000)
+
+-- Draw a red square in the middle.
+for i = 1, 51 do
+ for j = 1, 51 do
+ c:set(174 + i, 174 + j, 0x0000ff)
+ end
+end
+
+-- Print to the terminal the color (as an integer) of a pixel.
+print(c:get(200, 200)) -- 255
+
+-- Convert the canvas to a BMP image.
+local image = c:tobmp()
+
+-- Save the image to a file.
+io.contents("mybmp.bmp", image)
diff --git a/Task/Bitwise-IO/DuckDB/bitwise-io-1.duckdb b/Task/Bitwise-IO/DuckDB/bitwise-io-1.duckdb
new file mode 100644
index 0000000000..df8d7f60c4
--- /dev/null
+++ b/Task/Bitwise-IO/DuckDB/bitwise-io-1.duckdb
@@ -0,0 +1,8 @@
+# s should be a bitstring.
+# Right-pad s with 0s so that the length of the output string is a multiple of 8.
+CREATE OR REPLACE FUNCTION print_bits(s) as (
+ format('{:0<{}}', s, (ceil(length(s) / 8) * 8)::INT)
+);
+
+# Example:
+select print_bits('101'::BITSTRING);
diff --git a/Task/Bitwise-IO/DuckDB/bitwise-io-2.duckdb b/Task/Bitwise-IO/DuckDB/bitwise-io-2.duckdb
new file mode 100644
index 0000000000..57ab55eb4d
--- /dev/null
+++ b/Task/Bitwise-IO/DuckDB/bitwise-io-2.duckdb
@@ -0,0 +1,13 @@
+# "Compress" a string by printing it as a bitstring without the left-most bit of each byte
+CREATE OR REPLACE FUNCTION sevenbits(str) as (
+ select string_agg(format('{}', ascii(s)::BITSTRING)[-7:], '')
+ from (select unnest(regexp_extract_all(str, '.')) as s)
+);
+
+# Undo sevenbits()
+CREATE OR REPLACE FUNCTION from_sevenbits(str) as (
+ select string_agg(chr(s::BIT::INT), '')
+ from (select unnest(regexp_extract_all(str, '.......')) as s)
+);
+
+select from_sevenbits(sevenbits('abracadabra'));
diff --git a/Task/Bitwise-operations/ALGOL-68/bitwise-operations-1.alg b/Task/Bitwise-operations/ALGOL-68/bitwise-operations-1.alg
index 7fdf9b8d88..ea11b79d5f 100644
--- a/Task/Bitwise-operations/ALGOL-68/bitwise-operations-1.alg
+++ b/Task/Bitwise-operations/ALGOL-68/bitwise-operations-1.alg
@@ -1,8 +1,13 @@
-main:(
+BEGIN
+
+ BITS all bits mask = NOT 16r0;
+ LONG BITS long bits mask = LENG all bits mask;
PRIO SLC = 8, SRC = 8; # SLC and SRC are not built in, define and overload them here #
OP SLC = (BITS b, INT rotate) BITS: b SHL rotate OR b SHR ( bits width - rotate );
- OP SRC = (BITS b, INT rotate) BITS: b SHR rotate OR b SHL ( bits width - rotate );
+ OP SRC = (BITS b, INT rotate) BITS: b SHR rotate OR SHORTEN ( long bits mask
+ AND ( LENG b SHL ( bits width - rotate ) )
+ );
# SRC and SRL are non-standard, but versions are built in to ALGOL 68R's standard prelude #
PRIO XOR = 2;
@@ -10,7 +15,10 @@ main:(
# XOR is non-standard, but a version is built in to ALGOL 68G's standard prelude #
# ALGOL 68 has 5 different ways of representing a BINary BITS - Bases: 2, 4, 8, 16 and flip/flop #
- FORMAT b5 = $"2r"2r32d," 4r"4r16d," 8r"8r11d," 16r"16r8d," "gl$;
+ FORMAT b5 = IF bits width > 32
+ THEN $"2r"2r64d," 4r"4r32d,l" 8r"8r22d," 16r"16r16d,l" "gl$
+ ELSE $"2r"2r32d," 4r"4r16d," 8r"8r11d," 16r"16r8d,l" "gl$
+ FI;
OP BBBBB = (BITS b)[]BITS: (b,b,b,b,b);
PROC bitwise = (BITS a, BITS b, INT shift)VOID:
@@ -61,4 +69,4 @@ CO
bitwise(8r377,8r252,5);
bitwise(16rff,16raa,5)
END CO
-)
+END
diff --git a/Task/Bitwise-operations/DuckDB/bitwise-operations-1.duckdb b/Task/Bitwise-operations/DuckDB/bitwise-operations-1.duckdb
new file mode 100644
index 0000000000..d81bf307e5
--- /dev/null
+++ b/Task/Bitwise-operations/DuckDB/bitwise-operations-1.duckdb
@@ -0,0 +1,5 @@
+create or replace function task(a,b) as table (
+ select a, b, a&b, a|b, xor(a, b), ~a, a << b, a >> b
+);
+
+from task(10, 2);
diff --git a/Task/Bitwise-operations/DuckDB/bitwise-operations-2.duckdb b/Task/Bitwise-operations/DuckDB/bitwise-operations-2.duckdb
new file mode 100644
index 0000000000..2e48fb4dd1
--- /dev/null
+++ b/Task/Bitwise-operations/DuckDB/bitwise-operations-2.duckdb
@@ -0,0 +1,5 @@
+select 10 as v,
+ ~(v::BITSTRING),
+ ~(v::INT) as "~INT",
+ ~(v::BIGINT) as "~BIGINT",
+ ~(10::UINTEGER) as "~UINTEGER";
diff --git a/Task/Bitwise-operations/Elena/bitwise-operations.elena b/Task/Bitwise-operations/Elena/bitwise-operations.elena
index 941e955022..7c1422857a 100644
--- a/Task/Bitwise-operations/Elena/bitwise-operations.elena
+++ b/Task/Bitwise-operations/Elena/bitwise-operations.elena
@@ -2,18 +2,18 @@ import extensions;
extension testOp
{
- bitwiseTest(y)
- {
- console.printLine(self," and ",y," = ",self & y);
- console.printLine(self," or ",y," = ",self | y);
- console.printLine(self," xor ",y," = ",self ^ y);
- console.printLine("not ",self," = ",self.BInverted);
- console.printLine(self," shr ",y," = ",self.shiftRight(y));
- console.printLine(self," shl ",y," = ",self.shiftLeft(y));
- }
+ bitwiseTest(y)
+ {
+ Console.printLine(self," and ",y," = ",self.band(y));
+ Console.printLine(self," or ",y," = ",self.bor(y));
+ Console.printLine(self," xor ",y," = ",self.bxor(y));
+ Console.printLine("not ",self," = ",self.BInverted);
+ Console.printLine(self," shr ",y," = ",self.shiftRight(y));
+ Console.printLine(self," shl ",y," = ",self.shiftLeft(y));
+ }
}
public program()
{
- console.loadLineTo(new Integer()).bitwiseTest(console.loadLineTo(new Integer()))
+ Console.loadLineTo(new Integer()).bitwiseTest(Console.loadLineTo(new Integer()))
}
diff --git a/Task/Bitwise-operations/Icon/bitwise-operations.icon b/Task/Bitwise-operations/Icon/bitwise-operations.icon
index 4bcace1afa..92610583bb 100644
--- a/Task/Bitwise-operations/Icon/bitwise-operations.icon
+++ b/Task/Bitwise-operations/Icon/bitwise-operations.icon
@@ -1,3 +1,5 @@
+link bitint # for int2bit
+
procedure main()
bitdemo(255,2)
bitdemo(-15,3)
diff --git a/Task/Bitwise-operations/Pluto/bitwise-operations.pluto b/Task/Bitwise-operations/Pluto/bitwise-operations.pluto
new file mode 100644
index 0000000000..a42f1b211c
--- /dev/null
+++ b/Task/Bitwise-operations/Pluto/bitwise-operations.pluto
@@ -0,0 +1,20 @@
+-- Rotate left and right are not built-in but we use the
+-- same 32-bit substitutes as in the Lua 5.3+ example.
+local function rl(x, y) return ((x << y) & 0xffffffff) | (x >> (32 - y)) end
+
+local function rr(x, y) return (x >> y) | ((x << (32 - y)) & 0xffffffff) end
+
+local function bitwise(x, y)
+ print($" x = {x}")
+ print($" y = {y}")
+ print($" x & y = {x & y}")
+ print($" x | y = {x | y}")
+ print($" x ~ y = {x ~ y}")
+ print($"~x = {~x}")
+ print($" x << y = {x << y}")
+ print($" x >> y = {x >> y}")
+ print($" x rl y = {rl(x, y)}")
+ print($" x rr y = {rr(x, y)}")
+end
+
+bitwise(10, 2)
diff --git a/Task/Boolean-values/ArkScript/boolean-values.ark b/Task/Boolean-values/ArkScript/boolean-values.ark
new file mode 100644
index 0000000000..d92c5993bd
--- /dev/null
+++ b/Task/Boolean-values/ArkScript/boolean-values.ark
@@ -0,0 +1,14 @@
+(let test (fun (v) {
+ (puts v ": ")
+ (if v (print true) (print false)) }))
+
+
+(test 1)
+(test 0)
+(test true)
+(test false)
+(test "hello")
+(test "")
+(test [1 2 3])
+(test [])
+(test nil)
diff --git a/Task/Boolean-values/Haxe/boolean-values.haxe b/Task/Boolean-values/Haxe/boolean-values.haxe
new file mode 100644
index 0000000000..c2f8a2ed4c
--- /dev/null
+++ b/Task/Boolean-values/Haxe/boolean-values.haxe
@@ -0,0 +1,8 @@
+class Main {
+ static public function main():Void {
+ var t = true;
+ var f = false;
+ $type(t);
+ $type(f);
+ }
+}
diff --git a/Task/Boolean-values/Prolog/boolean-values.pro b/Task/Boolean-values/Prolog/boolean-values.pro
new file mode 100644
index 0000000000..361f023ab6
--- /dev/null
+++ b/Task/Boolean-values/Prolog/boolean-values.pro
@@ -0,0 +1,2 @@
+?- ( Bool = true ; Bool = false ),
+ ( Bool -> bool_is_true ; bool_is_false ).
diff --git a/Task/Boolean-values/Zig/boolean-values.zig b/Task/Boolean-values/Zig/boolean-values.zig
new file mode 100644
index 0000000000..f7b10d4ab0
--- /dev/null
+++ b/Task/Boolean-values/Zig/boolean-values.zig
@@ -0,0 +1,15 @@
+const std = @import("std");
+
+pub fn main() !void {
+ const stdout = std.io.getStdOut().writer();
+
+ const bool1: bool = true;
+ const bool2: bool = false;
+ const bool3 = 2 + 2 == 4;
+ const bool4 = 2 + 2 == 5;
+
+ try stdout.print("{any}\n", .{bool1});
+ try stdout.print("{any}\n", .{bool2});
+ try stdout.print("{any} {any}\n", .{@TypeOf(bool3), bool3});
+ try stdout.print("{any} {any}\n", .{@TypeOf(bool4), bool4});
+}
diff --git a/Task/Boyer-Moore-string-search/Ada/boyer-moore-string-search.ada b/Task/Boyer-Moore-string-search/Ada/boyer-moore-string-search.ada
new file mode 100644
index 0000000000..3c23105aee
--- /dev/null
+++ b/Task/Boyer-Moore-string-search/Ada/boyer-moore-string-search.ada
@@ -0,0 +1,63 @@
+with Ada.Text_IO;
+
+with GNATColl.Boyer_Moore;
+
+procedure Boyermoore is
+
+ procedure Search_All (Needle : in String;
+ Haystack : in String)
+ is
+ use Ada.Text_IO;
+ use GNATColl.Boyer_Moore;
+
+ Found : String (Haystack'Range) := (others => ' ');
+ Count : Natural := 0;
+ Motif : Pattern;
+ First : Positive := Haystack'First;
+ Position : Integer;
+ begin
+ Put_Line ("Needle : " & Needle);
+ Put_Line ("Haystack: " & Haystack);
+ Put ("Found : ");
+
+ Compile (Motif => Motif,
+ From_String => Needle,
+ Case_Sensitive => True);
+ loop
+ Position := Search (Motif => Motif,
+ In_String => Haystack (First .. Haystack'Last));
+ exit when Position = -1;
+
+ Count := Count + 1;
+ Found (Position .. Position + Needle'Length - 1) := (others => '^');
+ First := Position + 1;
+ end loop;
+
+ Free (Motif);
+
+ if Count = 0 then
+ Put_Line ("");
+ else
+ Put_Line (Found);
+ end if;
+ New_Line;
+ end Search_All;
+
+ Text_1 : constant String := "InhisbookseriesTheArtofComputerProgrammingpublishedbyAddisonWesleyDKnuthusesanimaginarycomputertheMIXanditsassociatedmachinecodeandassemblylanguagestoillustratetheconceptsandalgorithmsastheyarepresented";
+
+ Text_2 : constant String := "Nearby farms grew a half acre of alfalfa on the dairy's behalf, with bales of all that alfalfa exchanged for milk.";
+
+ Text_3 : constant String := "GCTAGCTCTACGAGTCTA";
+ Text_4 : constant String := "GGCTATAATGCGTA";
+ Text_5 : constant String := "there would have been a time for such a word";
+ Text_6 : constant String := "needle need noodle needle";
+
+begin
+ Search_All ("put", Text_1);
+ Search_All ("and", Text_1);
+ Search_All ("alfalfa", Text_2);
+ Search_All ("TCTA", Text_3);
+ Search_All ("TAATAAA", Text_4);
+ Search_All ("word", Text_5);
+ Search_All ("needle", Text_6);
+end Boyermoore;
diff --git a/Task/Boyer-Moore-string-search/Dart/boyer-moore-string-search.dart b/Task/Boyer-Moore-string-search/Dart/boyer-moore-string-search.dart
new file mode 100644
index 0000000000..24e59c3692
--- /dev/null
+++ b/Task/Boyer-Moore-string-search/Dart/boyer-moore-string-search.dart
@@ -0,0 +1,80 @@
+import 'dart:convert'; // for jsonEncode (used to mimic std::quoted)
+import 'dart:io';
+
+/// Prints a list of integers in the form `[1, 2, 3]`.
+void display(List numbers) {
+ final joined = numbers.join(', ');
+ print('[$joined]');
+}
+
+/// Returns the first index of `needle` inside `haystack`,
+/// or -1 if `needle` cannot be found.
+int stringSearchSingle(String haystack, String needle) {
+ final idx = haystack.indexOf(needle);
+ return idx >= 0 ? idx : -1;
+}
+
+/// Returns **all** non‑overlapping start indexes of `needle` inside `haystack`.
+List stringSearch(String haystack, String needle) {
+ final List result = [];
+
+ int start = 0; // where we continue searching from
+ int index = 0; // result of the latest search
+
+ // Keep searching while we still find matches and we haven’t run off the end.
+ while (start < haystack.length && (index = stringSearchSingle(
+ haystack.substring(start), needle)) >= 0) {
+ final absoluteIdx = start + index;
+ result.add(absoluteIdx);
+ // Move past the match we just found so the next search starts after it.
+ start = absoluteIdx + needle.length;
+ }
+
+ return result;
+}
+
+void main() {
+ // ---------------------------------------------------------------------------
+ // 1️⃣ The data (identical to the C++ version)
+ // ---------------------------------------------------------------------------
+ const List texts = [
+ "GCTAGCTCTACGAGTCTA",
+ "GGCTATAATGCGTA",
+ "there would have been a time for such a word",
+ "needle need noodle needle",
+ "DKnuthusesandprogramsanimaginarycomputertheMIXanditsassociatedmachinecodeandassemblylanguages",
+ "Nearby farms grew an acre of alfalfa on the dairy's behalf, with bales of that alfalfa exchanged for milk."
+ ];
+
+ const List patterns = [
+ "TCTA",
+ "TAATAAA",
+ "word",
+ "needle",
+ "and",
+ "alfalfa"
+ ];
+
+ // ---------------------------------------------------------------------------
+ // 2️⃣ Print the original texts (mirrors the first loop in C++).
+ // ---------------------------------------------------------------------------
+ for (var i = 0; i < texts.length; ++i) {
+ print('text${i + 1} = ${texts[i]}');
+ }
+ print(''); // blank line like the C++ program
+
+ // ---------------------------------------------------------------------------
+ // 3️⃣ Search each pattern in its corresponding text and print the results.
+ // ---------------------------------------------------------------------------
+ for (var i = 0; i < texts.length; ++i) {
+ final List indexes = stringSearch(texts[i], patterns[i]);
+
+ // `jsonEncode` adds double quotes around a string and escapes characters,
+ // which behaves like `std::quoted` in C++.
+ final quotedPattern = jsonEncode(patterns[i]);
+
+ stdout.write(
+ 'Found $quotedPattern in \'text${i + 1}\' at indexes ');
+ display(indexes);
+ }
+}
diff --git a/Task/Boyer-Moore-string-search/FutureBasic/boyer-moore-string-search.basic b/Task/Boyer-Moore-string-search/FutureBasic/boyer-moore-string-search.basic
new file mode 100644
index 0000000000..6062c467ce
--- /dev/null
+++ b/Task/Boyer-Moore-string-search/FutureBasic/boyer-moore-string-search.basic
@@ -0,0 +1,55 @@
+include "NSLog.incl"
+
+NSInteger local fn String_Search_Single( haystack as CFStringRef, needle as CFStringRef )
+ CFRange range = fn StringRangeOfString( haystack, needle )
+ return range.location
+end fn = 0
+
+CFArrayRef local fn String_Search( haystack as CFStringRef, needle as CFStringRef )
+ CFMutableArrayRef result = fn MutableArrayNew
+ NSUInteger start = 0
+ NSInteger index = 0
+
+ while ( index >= 0 && start < len(haystack) )
+ CFStringRef haystackReduced = fn StringSubstringFromIndex( haystack, start )
+ index = fn String_Search_Single( haystackReduced, needle )
+ if ( index != NSNotFound )
+ MutableArrayAddObject( result, @(start + index) )
+ start += index + len(needle)
+ else
+ break
+ end if
+ wend
+ return result
+end fn = 0
+
+void local fn FindNeedlesInHaystacks
+ NSUInteger i
+
+ CFArrayRef texts = @[
+ @"GCTAGCTCTACGAGTCTA",
+ @"GGCTATAATGCGTA",
+ @"there would have been a time for such a word",
+ @"needle need noodle needle",
+ @"DKnuthusesandprogramsanimaginarycomputertheMIXanditsassociatedmachinecodeandassemblylanguages",
+ @"Nearby farms grew an acre of alfalfa on the dairy's behalf, with bales of that alfalfa exchanged for milk."
+ ]
+
+ CFArrayRef patterns = @[@"TCTA", @"TAATAAA", @"word", @"needle", @"and", @"alfalfa"]
+
+ for i = 0 to fn ArrayCount(texts) - 1
+ NSLog( @"text%lu = %@", (unsigned long)(i + 1), texts[i] )
+ next
+
+ NSLog( @"" )
+
+ for i = 0 to fn ArrayCount(texts) - 1
+ CFArrayRef indexes = fn String_Search( texts[i], patterns[i] )
+ NSLog( @"Found \"%@\" in 'text%lu' at indexes \b", patterns[i], (unsigned long)(i + 1) )
+ NSLog( @"[%@]", fn ArrayComponentsJoinedByString( indexes, @", " ) )
+ next
+end fn
+
+fn FindNeedlesInHaystacks
+
+HandleEvents
diff --git a/Task/Boyer-Moore-string-search/Kotlin/boyer-moore-string-search.kts b/Task/Boyer-Moore-string-search/Kotlin/boyer-moore-string-search.kts
new file mode 100644
index 0000000000..e7cf98b9ac
--- /dev/null
+++ b/Task/Boyer-Moore-string-search/Kotlin/boyer-moore-string-search.kts
@@ -0,0 +1,50 @@
+fun display(numbers: List) {
+ println("[${numbers.joinToString(", ")}]")
+}
+
+fun stringSearchSingle(haystack: String, needle: String): Int {
+ val index = haystack.indexOf(needle)
+ return if (index != -1) index else -1
+}
+
+fun stringSearch(haystack: String, needle: String): List {
+ val result = mutableListOf()
+ var start = 0
+ var index = 0
+
+ while (index >= 0 && start < haystack.length) {
+ val haystackReduced = haystack.substring(start)
+ index = stringSearchSingle(haystackReduced, needle)
+
+ if (index >= 0) {
+ result.add(start + index)
+ start += index + needle.length
+ }
+ }
+
+ return result
+}
+
+fun main() {
+ val texts = listOf(
+ "GCTAGCTCTACGAGTCTA",
+ "GGCTATAATGCGTA",
+ "there would have been a time for such a word",
+ "needle need noodle needle",
+ "DKnuthusesandprogramsanimaginarycomputertheMIXanditsassociatedmachinecodeandassemblylanguages",
+ "Nearby farms grew an acre of alfalfa on the dairy's behalf, with bales of that alfalfa exchanged for milk."
+ )
+
+ val patterns = listOf("TCTA", "TAATAAA", "word", "needle", "and", "alfalfa")
+
+ texts.forEachIndexed { i, text ->
+ println("text${i + 1} = $text")
+ }
+ println()
+
+ texts.forEachIndexed { i, text ->
+ val indexes = stringSearch(text, patterns[i])
+ print("Found \"${patterns[i]}\" in 'text${i + 1}' at indexes ")
+ display(indexes)
+ }
+}
diff --git a/Task/Boyer-Moore-string-search/Swift/boyer-moore-string-search.swift b/Task/Boyer-Moore-string-search/Swift/boyer-moore-string-search.swift
new file mode 100644
index 0000000000..76d2327ef7
--- /dev/null
+++ b/Task/Boyer-Moore-string-search/Swift/boyer-moore-string-search.swift
@@ -0,0 +1,59 @@
+import Foundation
+
+func display(_ numbers: [Int32]) {
+ let numbersStr = numbers.map { String($0) }.joined(separator: ", ")
+ print("[\(numbersStr)]")
+}
+
+func stringSearchSingle(_ haystack: String, _ needle: String) -> Int32 {
+ guard let range = haystack.range(of: needle) else {
+ return -1
+ }
+ return Int32(haystack.distance(from: haystack.startIndex, to: range.lowerBound))
+}
+
+func stringSearch(_ haystack: String, _ needle: String) -> [Int32] {
+ var result: [Int32] = []
+ var start = 0
+ var index: Int32 = 0
+
+ while index >= 0 && start < haystack.count {
+ let startIndex = haystack.index(haystack.startIndex, offsetBy: start)
+ let haystackReduced = String(haystack[startIndex...])
+ index = stringSearchSingle(haystackReduced, needle)
+
+ if index >= 0 {
+ result.append(Int32(start) + index)
+ start += Int(index) + needle.count
+ }
+ }
+
+ return result
+}
+
+func main() {
+ let texts = [
+ "GCTAGCTCTACGAGTCTA",
+ "GGCTATAATGCGTA",
+ "there would have been a time for such a word",
+ "needle need noodle needle",
+ "DKnuthusesandprogramsanimaginarycomputertheMIXanditsassociatedmachinecodeandassemblylanguages",
+ "Nearby farms grew an acre of alfalfa on the dairy's behalf, with bales of that alfalfa exchanged for milk."
+ ]
+
+ let patterns = ["TCTA", "TAATAAA", "word", "needle", "and", "alfalfa"]
+
+ for (i, text) in texts.enumerated() {
+ print("text\(i + 1) = \(text)")
+ }
+ print()
+
+ for (i, text) in texts.enumerated() {
+ let indexes = stringSearch(text, patterns[i])
+ print("Found \"\(patterns[i])\" in 'text\(i + 1)' at indexes ", terminator: "")
+ display(indexes)
+ }
+}
+
+// Call main function
+main()
diff --git a/Task/Boyer-Moore-string-search/Zig/boyer-moore-string-search.zig b/Task/Boyer-Moore-string-search/Zig/boyer-moore-string-search.zig
new file mode 100644
index 0000000000..29a4cd7704
--- /dev/null
+++ b/Task/Boyer-Moore-string-search/Zig/boyer-moore-string-search.zig
@@ -0,0 +1,71 @@
+const std = @import("std");
+const print = std.debug.print;
+const ArrayList = std.ArrayList;
+const Allocator = std.mem.Allocator;
+
+fn display(numbers: []const i32) void {
+ print("[", .{});
+ for (numbers, 0..) |num, i| {
+ if (i > 0) {
+ print(", ", .{});
+ }
+ print("{}", .{num});
+ }
+ print("]\n", .{});
+}
+
+fn stringSearchSingle(haystack: []const u8, needle: []const u8) i32 {
+ if (std.mem.indexOf(u8, haystack, needle)) |index| {
+ return @intCast(index);
+ }
+ return -1;
+}
+
+fn stringSearch(allocator: Allocator, haystack: []const u8, needle: []const u8) !ArrayList(i32) {
+ var result = ArrayList(i32).init(allocator);
+ var start: usize = 0;
+
+ while (start < haystack.len) {
+ const haystack_reduced = haystack[start..];
+ const index = stringSearchSingle(haystack_reduced, needle);
+
+ if (index >= 0) {
+ try result.append(@as(i32, @intCast(start)) + index);
+ start += @as(usize, @intCast(index)) + needle.len;
+ } else {
+ break;
+ }
+ }
+
+ return result;
+}
+
+pub fn main() !void {
+ var gpa = std.heap.GeneralPurposeAllocator(.{}){};
+ defer _ = gpa.deinit();
+ const allocator = gpa.allocator();
+
+ const texts = [_][]const u8{
+ "GCTAGCTCTACGAGTCTA",
+ "GGCTATAATGCGTA",
+ "there would have been a time for such a word",
+ "needle need noodle needle",
+ "DKnuthusesandprogramsanimaginarycomputertheMIXanditsassociatedmachinecodeandassemblylanguages",
+ "Nearby farms grew an acre of alfalfa on the dairy's behalf, with bales of that alfalfa exchanged for milk."
+ };
+
+ const patterns = [_][]const u8{"TCTA", "TAATAAA", "word", "needle", "and", "alfalfa"};
+
+ for (texts, 0..) |text, i| {
+ print("text{} = {s}\n", .{ i + 1, text });
+ }
+ print("\n" ,.{});
+
+ for (texts, 0..) |text, i| {
+ var indexes = try stringSearch(allocator, text, patterns[i]);
+ defer indexes.deinit();
+
+ print("Found \"{s}\" in 'text{}' at indexes ", .{ patterns[i], i + 1 });
+ display(indexes.items);
+ }
+}
diff --git a/Task/Break-OO-privacy/Dart/break-oo-privacy.dart b/Task/Break-OO-privacy/Dart/break-oo-privacy.dart
new file mode 100644
index 0000000000..d9db598356
--- /dev/null
+++ b/Task/Break-OO-privacy/Dart/break-oo-privacy.dart
@@ -0,0 +1,38 @@
+class CFactory {
+ int _count = 0;
+
+ CFactory();
+
+ int get count => _count;
+
+ CWidget getWidget() {
+ return CWidget._(this);
+ }
+}
+
+class CWidget {
+ final CFactory _parent;
+
+ // Private constructor - only accessible from CFactory
+ CWidget._(this._parent) {
+ _parent._count++;
+ print('Widget spawning. There are now ${_parent._count} Widgets instantiated.');
+ }
+
+ void dispose() {
+ _parent._count--;
+ print('Widget dying. There are now ${_parent._count} Widgets instantiated.');
+ }
+}
+
+void main() {
+ final factory = CFactory();
+
+ final widget1 = factory.getWidget();
+ final widget2 = factory.getWidget();
+ widget1.dispose();
+
+ final widget3 = factory.getWidget();
+ widget3.dispose();
+ widget2.dispose();
+}
diff --git a/Task/Break-OO-privacy/JavaScript/break-oo-privacy.js b/Task/Break-OO-privacy/JavaScript/break-oo-privacy.js
new file mode 100644
index 0000000000..12953361a7
--- /dev/null
+++ b/Task/Break-OO-privacy/JavaScript/break-oo-privacy.js
@@ -0,0 +1,54 @@
+class CFactory {
+ constructor() {
+ this.m_uiCount = 0;
+ }
+
+ // Destructor equivalent - not needed in JS due to garbage collection
+ // but included for completeness
+ destroy() {
+ // Could perform cleanup here if needed
+ }
+
+ getWidget() {
+ // Create a new CWidget, tell it we're its parent
+ return new CWidget(this);
+ }
+}
+
+class CWidget {
+ constructor(parent) {
+ if (!parent || !(parent instanceof CFactory)) {
+ throw new Error("CWidget requires a CFactory parent");
+ }
+
+ this.m_parent = parent;
+ ++this.m_parent.m_uiCount;
+
+ console.log(`Widget spawning. There are now ${this.m_parent.m_uiCount} Widgets instantiated.`);
+ }
+
+ // Destructor equivalent
+ destroy() {
+ --this.m_parent.m_uiCount;
+ console.log(`Widget dying. There are now ${this.m_parent.m_uiCount} Widgets instantiated.`);
+ }
+}
+
+// Main function equivalent
+function main() {
+ const factory = new CFactory();
+
+ const pWidget1 = factory.getWidget();
+ const pWidget2 = factory.getWidget();
+ pWidget1.destroy(); // Equivalent to delete pWidget1
+
+ const pWidget3 = factory.getWidget();
+ pWidget3.destroy(); // Equivalent to delete pWidget3
+ pWidget2.destroy(); // Equivalent to delete pWidget2
+
+ // Optional: cleanup factory
+ factory.destroy();
+}
+
+// Run the main function
+main();
diff --git a/Task/Break-OO-privacy/Rust/break-oo-privacy.rs b/Task/Break-OO-privacy/Rust/break-oo-privacy.rs
new file mode 100644
index 0000000000..be583ca5e9
--- /dev/null
+++ b/Task/Break-OO-privacy/Rust/break-oo-privacy.rs
@@ -0,0 +1,62 @@
+use std::cell::RefCell;
+use std::rc::{Rc, Weak};
+
+pub struct Factory {
+ count: RefCell,
+}
+
+pub struct Widget {
+ parent: Weak,
+}
+
+impl Factory {
+ pub fn new() -> Rc {
+ Rc::new(Factory {
+ count: RefCell::new(0),
+ })
+ }
+
+ pub fn get_widget(self: &Rc) -> Widget {
+ Widget::new(Rc::downgrade(self))
+ }
+
+ fn increment_count(&self) {
+ *self.count.borrow_mut() += 1;
+ println!("Widget spawning. There are now {} Widgets instantiated.", self.count.borrow());
+ }
+
+ fn decrement_count(&self) {
+ *self.count.borrow_mut() -= 1;
+ println!("Widget dying. There are now {} Widgets instantiated.", self.count.borrow());
+ }
+}
+
+impl Widget {
+ fn new(parent: Weak) -> Self {
+ if let Some(factory) = parent.upgrade() {
+ factory.increment_count();
+ }
+
+ Widget { parent }
+ }
+}
+
+impl Drop for Widget {
+ fn drop(&mut self) {
+ if let Some(factory) = self.parent.upgrade() {
+ factory.decrement_count();
+ }
+ }
+}
+
+fn main() {
+ let factory = Factory::new();
+
+ let widget1 = factory.get_widget();
+ let widget2 = factory.get_widget();
+ drop(widget1);
+
+ let widget3 = factory.get_widget();
+ drop(widget3);
+ drop(widget2);
+}
diff --git a/Task/Break-OO-privacy/Zig/break-oo-privacy.zig b/Task/Break-OO-privacy/Zig/break-oo-privacy.zig
new file mode 100644
index 0000000000..9542d4d37c
--- /dev/null
+++ b/Task/Break-OO-privacy/Zig/break-oo-privacy.zig
@@ -0,0 +1,88 @@
+const std = @import("std");
+const print = std.debug.print;
+const Allocator = std.mem.Allocator;
+
+const Factory = struct {
+ count: u32,
+ allocator: Allocator,
+ ref_count: u32,
+
+ const Self = @This();
+
+ pub fn create(allocator: Allocator) !*Self {
+ const factory = try allocator.create(Self);
+ factory.* = Self{
+ .count = 0,
+ .allocator = allocator,
+ .ref_count = 1,
+ };
+ return factory;
+ }
+
+ pub fn retain(self: *Self) *Self {
+ self.ref_count += 1;
+ return self;
+ }
+
+ pub fn release(self: *Self) void {
+ self.ref_count -= 1;
+ if (self.ref_count == 0) {
+ self.allocator.destroy(self);
+ }
+ }
+
+ pub fn getWidget(self: *Self) !Widget {
+ return Widget.create(self);
+ }
+
+ fn incrementCount(self: *Self) void {
+ self.count += 1;
+ print("Widget spawning. There are now {} Widgets instantiated.\n", .{self.count});
+ }
+
+ fn decrementCount(self: *Self) void {
+ self.count -= 1;
+ print("Widget dying. There are now {} Widgets instantiated.\n", .{self.count});
+ }
+};
+
+const Widget = struct {
+ parent: ?*Factory,
+
+ const Self = @This();
+
+ pub fn create(parent: *Factory) Self {
+ _ = parent.retain(); // Increment parent's reference count
+ parent.incrementCount();
+
+ return Self{
+ .parent = parent,
+ };
+ }
+
+ pub fn deinit(self: *Self) void {
+ if (self.parent) |parent| {
+ parent.decrementCount();
+ parent.release();
+ self.parent = null;
+ }
+ }
+};
+
+pub fn main() !void {
+ var gpa = std.heap.GeneralPurposeAllocator(.{}){};
+ defer _ = gpa.deinit();
+ const allocator = gpa.allocator();
+
+ const factory = try Factory.create(allocator);
+ defer factory.release();
+
+ var widget1 = try factory.getWidget();
+ var widget2 = try factory.getWidget();
+
+ widget1.deinit();
+
+ var widget3 = try factory.getWidget();
+ widget3.deinit();
+ widget2.deinit();
+}
diff --git a/Task/Brownian-tree/EasyLang/brownian-tree.easy b/Task/Brownian-tree/EasyLang/brownian-tree.easy
index 821e4bcf89..b5012e14d2 100644
--- a/Task/Brownian-tree/EasyLang/brownian-tree.easy
+++ b/Task/Brownian-tree/EasyLang/brownian-tree.easy
@@ -1,30 +1,30 @@
-gcolor3 0 1 1
len f[] 200 * 200
-grect 50 50 0.5 0.5
-f[100 * 200 + 100] = 1
-n = 9000
+func get x y .
+ return f[y * 200 + x + 1]
+.
+proc set x y .
+ grect x / 2 y / 2 0.5 0.5
+ f[y * 200 + x + 1] = 1
+.
+gcolor 599
+set 100 100
+n = 6000
while i < n
repeat
x = random 200 - 1
y = random 200 - 1
- until f[y * 200 + x + 1] <> 1
+ until get x y <> 1
.
while 1 = 1
xo = x
yo = y
x += random 3 - 2
y += random 3 - 2
- if x < 0 or y < 0 or x >= 200 or y >= 200
- break 1
- .
- if f[y * 200 + x + 1] = 1
- grect xo / 2 yo / 2 0.5 0.5
- f[yo * 200 + xo + 1] = 1
+ if x < 0 or y < 0 or x >= 200 or y >= 200 : break 1
+ if get x y = 1
+ set xo yo
i += 1
- if i mod 16 = 0
- gcolor3 0.2 + i / n 1 1
- sleep 0
- .
+ if i mod 100 = 0 : sleep 0
break 1
.
.
diff --git a/Task/Bulls-and-cows/Elena/bulls-and-cows.elena b/Task/Bulls-and-cows/Elena/bulls-and-cows.elena
index c21e80a79d..1d02177dd7 100644
--- a/Task/Bulls-and-cows/Elena/bulls-and-cows.elena
+++ b/Task/Bulls-and-cows/Elena/bulls-and-cows.elena
@@ -17,7 +17,7 @@ class GameMaster
ask()
{
- var row := console.print("Your Guess #",_attempt," ?").readLine();
+ var row := Console.print("Your Guess #",_attempt," ?").readLine();
^ row.toArray()
}
@@ -40,7 +40,7 @@ class GameMaster
var number := ch.toString().toInt();
// check range
- ifnot (number > 0 && number < 10)
+ if:not (number > 0 && number < 10)
{ InvalidArgumentException.raise() };
// check duplicates
@@ -68,12 +68,12 @@ class GameMaster
};
bulls =>
- -1 { console.printLine("Not a valid guess."); ^ true }
- 4 { console.printLine("Congratulations! You have won!"); ^ false }
- ! {
+ -1 : { Console.printLine("Not a valid guess."); ^ true }
+ 4 : { Console.printLine("Congratulations! You have won!"); ^ false }
+ ! : {
_attempt.append(1);
- console.printLine("Your Score is ",bulls," bulls and ",cows," cows");
+ Console.printLine("Your Score is ",bulls," bulls and ",cows," cows");
^ true
}
@@ -88,5 +88,5 @@ public program()
process.doWhile();
- console.readChar()
+ Console.readChar()
}
diff --git a/Task/Bulls-and-cows/J/bulls-and-cows-1.j b/Task/Bulls-and-cows/J/bulls-and-cows-1.j
index 3384f1c33b..a39d72af95 100644
--- a/Task/Bulls-and-cows/J/bulls-and-cows-1.j
+++ b/Task/Bulls-and-cows/J/bulls-and-cows-1.j
@@ -1,5 +1,5 @@
output=. ['Bulls: '&,:@'Cows: 'echo@,.":@,.
valid =. *./@e.&Num_j_*.4=#
-guess =. 0 ".&> [: > $:^:(-.@valid)@(1!:1@1)@echo@'Guess:'t.0
+guess =. 0 ".&> $:^:(-.@valid)@(1!:1@1)@echo@'Guess:'{{x u y}}
game =. [ $:^:(4 0-.@-:]) [ (+/@:= output@, e. +/@:*. ~:) guess
moo =. 'You win!'[ (1+4?9:) game ]
diff --git a/Task/CRC-32/FutureBasic/crc-32.basic b/Task/CRC-32/FutureBasic/crc-32.basic
new file mode 100644
index 0000000000..3ca9fab1e9
--- /dev/null
+++ b/Task/CRC-32/FutureBasic/crc-32.basic
@@ -0,0 +1,46 @@
+//
+// CRC_32 Checksum
+//
+// FutureBasic 7.0.34, August 2025 R.W
+//----------------------------------------------
+
+// Get CRC_32 checksum from a CFstring
+// using the standard bits reversed 0x04C11DB7
+
+// Verified accuracy using the site
+// https://codeshack.io/crc32-checksum-generator/
+
+local fn getCRC_32 (textStr As CFStringRef) As UInt32
+ UInt32 i, j, crc, byte
+ crc = 0xFFFFFFFF
+
+ for i = 0 to len(textStr) -1
+ byte = ucc(textStr, i)
+ crc = crc XOR byte
+ for j = 0 to 7
+ if ( crc AND 1 )
+ crc = (crc >> 1) XOR 0xEDB88320
+ else
+ crc = crc >> 1
+ end if
+ next
+ next
+ crc = crc XOR 0xFFFFFFFF
+end fn = crc
+
+
+window 1,@"CRC checksum"
+
+CFStringRef testString
+testString = @"The quick brown fox jumps over the lazy dog"
+
+UInt32 checksum
+checksum = fn getCRC_32(testString)
+
+print
+print @" ";testString
+print @" has a checksum of ";hex(checksum)
+
+handleEvents
+
+//
diff --git a/Task/CRC-32/Pluto/crc-32.pluto b/Task/CRC-32/Pluto/crc-32.pluto
new file mode 100644
index 0000000000..310616ad92
--- /dev/null
+++ b/Task/CRC-32/Pluto/crc-32.pluto
@@ -0,0 +1,5 @@
+local crypto = require "crypto"
+local fmt = require "fmt"
+
+local str = "The quick brown fox jumps over the lazy dog"
+print(fmt.hex(crypto.crc32(str)))
diff --git a/Task/CRC-32/R/crc-32.r b/Task/CRC-32/R/crc-32.r
index a8bdc5c253..36236927d7 100644
--- a/Task/CRC-32/R/crc-32.r
+++ b/Task/CRC-32/R/crc-32.r
@@ -1 +1,2 @@
+library(digest)
digest("The quick brown fox jumps over the lazy dog","crc32", serialize=F)
diff --git a/Task/CSV-data-manipulation/DuckDB/csv-data-manipulation-1.duckdb b/Task/CSV-data-manipulation/DuckDB/csv-data-manipulation-1.duckdb
new file mode 100644
index 0000000000..dd05c0680d
--- /dev/null
+++ b/Task/CSV-data-manipulation/DuckDB/csv-data-manipulation-1.duckdb
@@ -0,0 +1,5 @@
+create or replace table csv as
+from read_csv_auto('rc-csv-data-manipulation.csv');
+
+# View the first row of the table:
+from csv limit 1;
diff --git a/Task/CSV-data-manipulation/DuckDB/csv-data-manipulation-2.duckdb b/Task/CSV-data-manipulation/DuckDB/csv-data-manipulation-2.duckdb
new file mode 100644
index 0000000000..5078ee97a4
--- /dev/null
+++ b/Task/CSV-data-manipulation/DuckDB/csv-data-manipulation-2.duckdb
@@ -0,0 +1,4 @@
+copy
+ (select *, (C1 + C2 + C3 + C4 + C5) as sum
+ from csv)
+ to 'junk.csv';
diff --git a/Task/CSV-data-manipulation/DuckDB/csv-data-manipulation-3.duckdb b/Task/CSV-data-manipulation/DuckDB/csv-data-manipulation-3.duckdb
new file mode 100644
index 0000000000..b3c1bedcf5
--- /dev/null
+++ b/Task/CSV-data-manipulation/DuckDB/csv-data-manipulation-3.duckdb
@@ -0,0 +1,6 @@
+ALTER TABLE csv ADD COLUMN sum integer;
+
+UPDATE csv
+SET sum = C1 + C2 + C3 + C4 + C5;
+
+copy csv to 'junk2.csv';
diff --git a/Task/CSV-to-HTML-translation/Nom/csv-to-html-translation-1.num b/Task/CSV-to-HTML-translation/Nom/csv-to-html-translation-1.num
new file mode 100644
index 0000000000..c250b2c016
--- /dev/null
+++ b/Task/CSV-to-HTML-translation/Nom/csv-to-html-translation-1.num
@@ -0,0 +1,85 @@
+#*
+(this is a multiline comment in Nom)
+
+GRAMMAR OR PARSE TOKENS
+ nl* - new line, end of line
+ field* - one csv field
+ fieldset* - a number of fields
+ record* - one record (line) or a set of csv fields
+ recordset* -
+*#
+
+ # using the empty recordset trick
+ begin {
+ add "recordset*"; push;
+ }
+ read;
+ # ignore whitespace outside of quotes
+ " " { while [ ]; clear; .restart }
+ "\n" { put; clear; add "nl*"; push; .reparse }
+ '"' {
+ until '"'; clip; clop; unescape '"';
+ whilenot [\n,];
+ replace "&" "&"; replace "<" "<"; replace ">" ">";
+ put; clear; add "