Data update

This commit is contained in:
Ingy döt Net 2026-04-30 12:34:36 -04:00
parent 4bb20c9b71
commit cbaf4c4b64
12390 changed files with 318560 additions and 27248 deletions

View file

@ -0,0 +1,15 @@
with Ada.Text_IO;
with Ada.Command_Line; use Ada.Command_Line;
procedure SleepSort is
task type PrintTask (num : Integer);
task body PrintTask is begin
delay Duration (num) / 100.0;
Ada.Text_IO.Put(num'Img);
end PrintTask;
type TaskAcc is access PrintTask;
TaskList : array (1 .. Argument_Count) of TaskAcc;
begin
for i in TaskList'Range loop
TaskList(i) := new PrintTask(Integer'Value(Argument(i)));
end loop;
end SleepSort;

View file

@ -0,0 +1,113 @@
format ELF64 executable 3
entry start
; parameters: argc, argv[] on stack
start:
mov r12, [rsp] ; get argc
mov r13, 1 ; skip argv[0]
.getargv:
cmp r13, r12 ; check completion of args
je .wait
mov rdi, [rsp+8+8*r13] ; get argv[n]
inc r13
mov rax, 57 ; sys_fork
syscall
cmp rax, 0 ; continue loop in main process
jnz .getargv
push rdi ; save pointer to sort item text
call atoi_simple ; convert text to integer
test rax, rax ; throw out bad input
js .done
sub rsp, 16 ; stack space for timespec
mov [rsp], rax ; seconds
mov qword [rsp+8], 0 ; nanoseconds
lea rdi, [rsp]
xor rsi, rsi
mov rax, 35 ; sys_nanosleep
syscall
add rsp, 16
pop rdi ; retrieve item text
call strlen_simple
mov rsi, rdi
mov byte [rsi+rax], ' '
mov rdi, 1
mov rdx, rax
inc rdx
mov rax, 1 ; sys_write
syscall
jmp .done
.wait:
dec r12 ; wait for each child process
jz .done
mov rdi, 0 ; any pid
mov rsi, 0
mov rdx, 0
mov r10, 4 ; that has terminated
mov rax, 247 ; sys_waitid
syscall
jmp .wait
.done:
xor rdi, rdi
mov rax, 60 ; sys_exit
syscall
; parameter: rdi = string pointer
; return: rax = integer conversion
atoi_simple:
push rdi
push rsi
xor rax, rax
.convert:
movzx rsi, byte [rdi]
test rsi, rsi ; check for null
jz .done
cmp rsi, '0'
jl .baddigit
cmp rsi, '9'
jg .baddigit
sub rsi, 48 ; get ascii code for digit
imul rax, 10 ; radix 10
add rax, rsi ; add current digit to total
inc rdi
jmp .convert
.baddigit:
mov rax, -1 ; return error code on failed conversion
.done:
pop rsi
pop rdi
ret ; return integer value
; parameter: rdi = string pointer
; return: rax = length
strlen_simple:
xor rax, rax
.compare:
cmp byte [rdi+rax], 0
je .done
inc rax
jmp .compare
.done:
ret

View file

@ -0,0 +1,2 @@
(dolist (i '(3 1 4 1 5 92 65 3 5 89 79 3))
(run-with-timer (* i 0.001) nil 'message "%d" i))

View file

@ -0,0 +1,31 @@
include get.e
integer count
procedure sleeper(integer key)
? key
count -= 1
end procedure
sequence s, val
atom task
s = command_line()
s = s[3..$]
if length(s)=0 then
puts(1,"Nothing to sort.\n")
else
count = 0
for i = 1 to length(s) do
val = value(s[i])
if val[1] = GET_SUCCESS then
task = task_create(routine_id("sleeper"),{val[2]})
task_schedule(task,{val[2],val[2]}/10)
count += 1
end if
end for
while count do
task_yield()
end while
end if

View file

@ -0,0 +1,26 @@
local n = #arg
assert(n >= 2, "There must be at least two arguments passed.")
local list = arg:mapped(|a| -> tonumber(a)):reorder()
if #list != n or !list:checkall(|e| -> math.round(e) == e and e >= 0) then
error("All arguments must be non-negative integers.")
end
local max = list:max()
local cos = table.create(max + 1)
print($"Before: {list:concat(" ")}")
for list as i do
local function sleep_sort(j)
os.sleep(1000)
coroutine.yield(j)
end
cos[i + 1] = coroutine.create(sleep_sort)
end
io.write("After : ")
for i = 0, max do
local co = cos[i + 1]
if co then
local _, v = coroutine.resume(co, i)
io.write($"{v} ")
io.output():flush()
end
end
print()