Add tasks for all the new languages

This commit is contained in:
Tina Müller 2016-12-05 23:44:36 +01:00
parent 9dc3c2bb62
commit bba7bfd280
13208 changed files with 134745 additions and 0 deletions

View file

@ -0,0 +1,106 @@
' FB 1.05.0 Win64
' As it would be too expensive to actually remove elements from the array
' we instead set an element to 0 if it has been removed.
Sub ludic(n As Integer, lu() As Integer)
If n < 1 Then Return
Redim lu(1 To n)
lu(1) = 1
If n = 1 Then Return
Dim As Integer count = 1, count2
Dim As Integer i, j, k = 1
Dim As Integer ub = 22000 '' big enough to deal with up to 2005 ludic numbers
Dim a(2 To ub) As Integer
For i = 2 To ub : a(i) = i : Next
Do
k += 1
For i = k to ub
If a(i) > 0 Then
count += 1
lu(count) = a(i)
If n = count Then Return
a(i) = 0
k = i
Exit For
End If
Next
count2 = 0
j = k + 1
While j <= ub
If a(j) > 0 Then
count2 +=1
If count2 = k Then
a(j) = 0
count2 = 0
End If
End If
j += 1
Wend
Loop
End Sub
Dim i As Integer
Dim lu() As Integer
ludic(2005, lu())
Print "The first 25 Ludic numbers are :"
For i = 1 To 25
Print Using "###"; lu(i);
Print " ";
Next
Print
Dim As Integer Count = 0
For i = 1 To 1000
If lu(i) <= 1000 Then
count += 1
Else
Exit For
End If
Next
Print
Print "There are"; count; " Ludic numbers <= 1000"
Print
Print "The 2000th to 2005th Ludics are :"
For i = 2000 To 2005
Print lu(i); " ";
Next
Print : Print
Print "The Ludic triplets below 250 are : "
Dim As Integer j, k, ldc
Dim b As Boolean
For i = 1 To 248
ldc = lu(i)
If ldc >= 244 Then Exit For
b = False
For j = i + 1 To 249
If lu(j) = ldc + 2 Then
b = True
k = j
Exit For
ElseIf lu(j) > ldc + 2 Then
Exit For
End If
Next j
If b = False Then Continue For
For j = k + 1 To 250
If lu(j) = ldc + 6 Then
Print "("; Str(ldc); ","; ldc + 2; ","; ldc + 6; ")"
Exit For
ElseIf lu(j) > ldc + 6 Then
Exit For
End If
Next j
Next i
Erase lu
Print
Print "Press any key to quit"
Sleep

View file

@ -0,0 +1,23 @@
: ludic(n)
| ludics l p |
ListBuffer newSize(n) seqFrom(2, n) over addAll ->l
ListBuffer newSize(n) dup add(1) dup ->ludics
while(l notEmpty) [
l removeFirst dup ludics add ->p
l size p / p * while(dup 1 > ) [ dup l removeAt drop p - ] drop
] ;
: ludics
| l i |
ludic(22000) ->l
"First 25 : " print l left(25) println
"Below 1000 : " print l filter(#[ 1000 < ]) size println
"2000 to 2005 : " print l extract(2000, 2005) println
250 loop: i [
l include(i) ifFalse: [ continue ]
l include(i 2 +) ifFalse: [ continue ]
l include(i 6 +) ifFalse: [ continue ]
i print ", " print i 2 + print ", " print i 6 + println
] ;

View file

@ -0,0 +1,24 @@
func ludics_upto(nmax=100000) {
Enumerator({ |collect|
collect(1)
var arr = @(2..nmax)
while (arr) {
collect(var n = arr[0])
arr.range.by(n).each {|i| arr[i] = nil}
arr.compact!
}
})
}
func ludics_first(n) {
ludics_upto(n * n.log2).first(n)
}
say("First 25 Ludic numbers: ", ludics_first(25).join(' '))
say("Ludics below 1000: ", ludics_upto(1000).len)
say("Ludic numbers 2000 to 2005: ", ludics_first(2005).last(6).join(' '))
var a = ludics_upto(250).to_a
say("Ludic triples below 250: ", a.grep{|x| a.contains_all([x+2, x+6]) } \
.map {|x| '(' + [x, x+2, x+6].join(' ') + ')' } \
.join(' '))