Data update
This commit is contained in:
parent
5150844a7d
commit
4bb20c9b71
7735 changed files with 38060 additions and 199180 deletions
|
|
@ -1,15 +0,0 @@
|
|||
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;
|
||||
|
|
@ -1,113 +0,0 @@
|
|||
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
|
||||
|
|
@ -17,16 +17,16 @@ extension op
|
|||
|
||||
lock(sync)
|
||||
{
|
||||
console.printLine(n)
|
||||
Console.printLine(n)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public program()
|
||||
public Program()
|
||||
{
|
||||
program_arguments.skipping(1).selectBy(mssgconst toInt<intConvertOp>[1]).toArray().sleepSort();
|
||||
Program_arguments.skipping(1).selectBy(mssgconst toInt<intConvertOp>[1]).toArray().sleepSort();
|
||||
|
||||
console.readChar()
|
||||
Console.readChar()
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,2 +0,0 @@
|
|||
(dolist (i '(3 1 4 1 5 92 65 3 5 89 79 3))
|
||||
(run-with-timer (* i 0.001) nil 'message "%d" i))
|
||||
|
|
@ -1,31 +0,0 @@
|
|||
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
|
||||
|
|
@ -1,29 +1,27 @@
|
|||
(notonline)-->
|
||||
<span style="color: #008080;">without</span> <span style="color: #008080;">js</span> <span style="color: #000080;font-style:italic;">-- (multitasking)</span>
|
||||
<span style="color: #004080;">integer</span> <span style="color: #000000;">count</span>
|
||||
without js -- (multitasking)
|
||||
integer count
|
||||
|
||||
<span style="color: #008080;">procedure</span> <span style="color: #000000;">sleeper</span><span style="color: #0000FF;">(</span><span style="color: #004080;">integer</span> <span style="color: #000000;">key</span><span style="color: #0000FF;">)</span>
|
||||
<span style="color: #0000FF;">?</span> <span style="color: #000000;">key</span> <span style="color: #000080;font-style:italic;">-- (or maybe res &= key)</span>
|
||||
<span style="color: #000000;">count</span> <span style="color: #0000FF;">-=</span> <span style="color: #000000;">1</span>
|
||||
<span style="color: #008080;">end</span> <span style="color: #008080;">procedure</span>
|
||||
procedure sleeper(integer key)
|
||||
? key -- (or maybe res &= key)
|
||||
count -= 1
|
||||
end procedure
|
||||
|
||||
<span style="color: #000080;font-style:italic;">--sequence s = command_line()[3..$]</span>
|
||||
<span style="color: #004080;">sequence</span> <span style="color: #000000;">s</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">split</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"3 1 4 1 5 9 2 6 5"</span><span style="color: #0000FF;">)</span>
|
||||
<span style="color: #008080;">if</span> <span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">s</span><span style="color: #0000FF;">)=</span><span style="color: #000000;">0</span> <span style="color: #008080;">then</span>
|
||||
<span style="color: #7060A8;">puts</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"Nothing to sort.\n"</span><span style="color: #0000FF;">)</span>
|
||||
<span style="color: #008080;">else</span>
|
||||
<span style="color: #000000;">count</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">0</span>
|
||||
<span style="color: #008080;">for</span> <span style="color: #000000;">i</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span> <span style="color: #008080;">to</span> <span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">s</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">do</span>
|
||||
<span style="color: #004080;">object</span> <span style="color: #000000;">si</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">to_number</span><span style="color: #0000FF;">(</span><span style="color: #000000;">s</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">])</span>
|
||||
<span style="color: #008080;">if</span> <span style="color: #004080;">integer</span><span style="color: #0000FF;">(</span><span style="color: #000000;">si</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">then</span>
|
||||
<span style="color: #004080;">atom</span> <span style="color: #000000;">task</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">task_create</span><span style="color: #0000FF;">(</span><span style="color: #000000;">sleeper</span><span style="color: #0000FF;">,{</span><span style="color: #000000;">si</span><span style="color: #0000FF;">})</span>
|
||||
<span style="color: #7060A8;">task_schedule</span><span style="color: #0000FF;">(</span><span style="color: #000000;">task</span><span style="color: #0000FF;">,{</span><span style="color: #000000;">si</span><span style="color: #0000FF;">/</span><span style="color: #000000;">10</span><span style="color: #0000FF;">,</span><span style="color: #000000;">si</span><span style="color: #0000FF;">/</span><span style="color: #000000;">10</span><span style="color: #0000FF;">})</span>
|
||||
<span style="color: #000000;">count</span> <span style="color: #0000FF;">+=</span> <span style="color: #000000;">1</span>
|
||||
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
|
||||
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
|
||||
--sequence s = command_line()[3..$]
|
||||
sequence s = split("3 1 4 1 5 9 2 6 5")
|
||||
if length(s)=0 then
|
||||
puts(1,"Nothing to sort.\n")
|
||||
else
|
||||
count = 0
|
||||
for i=1 to length(s) do
|
||||
object si = to_number(s[i])
|
||||
if integer(si) then
|
||||
atom task = task_create(sleeper,{si})
|
||||
task_schedule(task,{si/10,si/10})
|
||||
count += 1
|
||||
end if
|
||||
end for
|
||||
|
||||
<span style="color: #008080;">while</span> <span style="color: #000000;">count</span> <span style="color: #008080;">do</span>
|
||||
<span style="color: #7060A8;">task_yield</span><span style="color: #0000FF;">()</span>
|
||||
<span style="color: #008080;">end</span> <span style="color: #008080;">while</span>
|
||||
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
|
||||
<!--
|
||||
while count do
|
||||
task_yield()
|
||||
end while
|
||||
end if
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue