Data update

This commit is contained in:
Ingy döt Net 2024-10-16 18:07:41 -07:00
parent 81fd053722
commit 52a6ef48dd
10248 changed files with 63654 additions and 6775 deletions

View file

@ -0,0 +1,21 @@
rem - Return binary representation of n as a string
def fn.bin$(n%)
s$ = ""
while n% > 0
if (n% - (n% / 2) * 2) = 0 then \
s$ = "0" + s$ \
else \
s$ = "1" + s$
n% = n% / 2
wend
fn.bin$ = s$
return
fend
rem - exercise the function
print "5 = "; fn.bin$(5)
print "50 = "; fn.bin$(50)
print "9000 = "; fn.bin$(9000)
end

View file

@ -1,5 +1,4 @@
func$ bin num .
b$ = ""
while num > 1
b$ = num mod 2 & b$
num = num div 2

View file

@ -0,0 +1,2 @@
g/^\(i*\)\1i\([^i]\)/s//\11\2/
g/^\(i*\)\1\([^i]\)/s//\10\2/

View file

@ -0,0 +1,90 @@
# by Artyom Bologov
H
# decimal -> unary
g/[^0-9]\{1,\}/s///g
g/^0\{1,\}\([0-9]\)/s//\1/
g/^9\([0-9]*\)\(i*\)/s//\1\2\2\2\2\2\2\2\2\2\2iiiiiiiii/
g/^8\([0-9]*\)\(i*\)/s//\1\2\2\2\2\2\2\2\2\2\2iiiiiiii/
g/^7\([0-9]*\)\(i*\)/s//\1\2\2\2\2\2\2\2\2\2\2iiiiiii/
g/^6\([0-9]*\)\(i*\)/s//\1\2\2\2\2\2\2\2\2\2\2iiiiii/
g/^5\([0-9]*\)\(i*\)/s//\1\2\2\2\2\2\2\2\2\2\2iiiii/
g/^4\([0-9]*\)\(i*\)/s//\1\2\2\2\2\2\2\2\2\2\2iiii/
g/^3\([0-9]*\)\(i*\)/s//\1\2\2\2\2\2\2\2\2\2\2iii/
g/^2\([0-9]*\)\(i*\)/s//\1\2\2\2\2\2\2\2\2\2\2ii/
g/^1\([0-9]*\)\(i*\)/s//\1\2\2\2\2\2\2\2\2\2\2i/
g/^0\([0-9]*\)\(i*\)/s//\1\2\2\2\2\2\2\2\2\2\2/
g/^9\([0-9]*\)\(i*\)/s//\1\2\2\2\2\2\2\2\2\2\2iiiiiiiii/
g/^8\([0-9]*\)\(i*\)/s//\1\2\2\2\2\2\2\2\2\2\2iiiiiiii/
g/^7\([0-9]*\)\(i*\)/s//\1\2\2\2\2\2\2\2\2\2\2iiiiiii/
g/^6\([0-9]*\)\(i*\)/s//\1\2\2\2\2\2\2\2\2\2\2iiiiii/
g/^5\([0-9]*\)\(i*\)/s//\1\2\2\2\2\2\2\2\2\2\2iiiii/
g/^4\([0-9]*\)\(i*\)/s//\1\2\2\2\2\2\2\2\2\2\2iiii/
g/^3\([0-9]*\)\(i*\)/s//\1\2\2\2\2\2\2\2\2\2\2iii/
g/^2\([0-9]*\)\(i*\)/s//\1\2\2\2\2\2\2\2\2\2\2ii/
g/^1\([0-9]*\)\(i*\)/s//\1\2\2\2\2\2\2\2\2\2\2i/
g/^0\([0-9]*\)\(i*\)/s//\1\2\2\2\2\2\2\2\2\2\2/
g/^9\([0-9]*\)\(i*\)/s//\1\2\2\2\2\2\2\2\2\2\2iiiiiiiii/
g/^8\([0-9]*\)\(i*\)/s//\1\2\2\2\2\2\2\2\2\2\2iiiiiiii/
g/^7\([0-9]*\)\(i*\)/s//\1\2\2\2\2\2\2\2\2\2\2iiiiiii/
g/^6\([0-9]*\)\(i*\)/s//\1\2\2\2\2\2\2\2\2\2\2iiiiii/
g/^5\([0-9]*\)\(i*\)/s//\1\2\2\2\2\2\2\2\2\2\2iiiii/
g/^4\([0-9]*\)\(i*\)/s//\1\2\2\2\2\2\2\2\2\2\2iiii/
g/^3\([0-9]*\)\(i*\)/s//\1\2\2\2\2\2\2\2\2\2\2iii/
g/^2\([0-9]*\)\(i*\)/s//\1\2\2\2\2\2\2\2\2\2\2ii/
g/^1\([0-9]*\)\(i*\)/s//\1\2\2\2\2\2\2\2\2\2\2i/
g/^0\([0-9]*\)\(i*\)/s//\1\2\2\2\2\2\2\2\2\2\2/
g/^9\([0-9]*\)\(i*\)/s//\1\2\2\2\2\2\2\2\2\2\2iiiiiiiii/
g/^8\([0-9]*\)\(i*\)/s//\1\2\2\2\2\2\2\2\2\2\2iiiiiiii/
g/^7\([0-9]*\)\(i*\)/s//\1\2\2\2\2\2\2\2\2\2\2iiiiiii/
g/^6\([0-9]*\)\(i*\)/s//\1\2\2\2\2\2\2\2\2\2\2iiiiii/
g/^5\([0-9]*\)\(i*\)/s//\1\2\2\2\2\2\2\2\2\2\2iiiii/
g/^4\([0-9]*\)\(i*\)/s//\1\2\2\2\2\2\2\2\2\2\2iiii/
g/^3\([0-9]*\)\(i*\)/s//\1\2\2\2\2\2\2\2\2\2\2iii/
g/^2\([0-9]*\)\(i*\)/s//\1\2\2\2\2\2\2\2\2\2\2ii/
g/^1\([0-9]*\)\(i*\)/s//\1\2\2\2\2\2\2\2\2\2\2i/
g/^0\([0-9]*\)\(i*\)/s//\1\2\2\2\2\2\2\2\2\2\2/
g/^9\([0-9]*\)\(i*\)/s//\1\2\2\2\2\2\2\2\2\2\2iiiiiiiii/
g/^8\([0-9]*\)\(i*\)/s//\1\2\2\2\2\2\2\2\2\2\2iiiiiiii/
g/^7\([0-9]*\)\(i*\)/s//\1\2\2\2\2\2\2\2\2\2\2iiiiiii/
g/^6\([0-9]*\)\(i*\)/s//\1\2\2\2\2\2\2\2\2\2\2iiiiii/
g/^5\([0-9]*\)\(i*\)/s//\1\2\2\2\2\2\2\2\2\2\2iiiii/
g/^4\([0-9]*\)\(i*\)/s//\1\2\2\2\2\2\2\2\2\2\2iiii/
g/^3\([0-9]*\)\(i*\)/s//\1\2\2\2\2\2\2\2\2\2\2iii/
g/^2\([0-9]*\)\(i*\)/s//\1\2\2\2\2\2\2\2\2\2\2ii/
g/^1\([0-9]*\)\(i*\)/s//\1\2\2\2\2\2\2\2\2\2\2i/
g/^0\([0-9]*\)\(i*\)/s//\1\2\2\2\2\2\2\2\2\2\2/
# actual logic
g/.*/s/$/0/
g/^\(i*\)\1i\([^i]\)/s//\11\2/
g/^\(i*\)\1\([^i]\)/s//\10\2/
g/^\(i*\)\1i\([^i]\)/s//\11\2/
g/^\(i*\)\1\([^i]\)/s//\10\2/
g/^\(i*\)\1i\([^i]\)/s//\11\2/
g/^\(i*\)\1\([^i]\)/s//\10\2/
g/^\(i*\)\1i\([^i]\)/s//\11\2/
g/^\(i*\)\1\([^i]\)/s//\10\2/
g/^\(i*\)\1i\([^i]\)/s//\11\2/
g/^\(i*\)\1\([^i]\)/s//\10\2/
g/^\(i*\)\1i\([^i]\)/s//\11\2/
g/^\(i*\)\1\([^i]\)/s//\10\2/
g/^\(i*\)\1i\([^i]\)/s//\11\2/
g/^\(i*\)\1\([^i]\)/s//\10\2/
g/^\(i*\)\1i\([^i]\)/s//\11\2/
g/^\(i*\)\1\([^i]\)/s//\10\2/
g/^\(i*\)\1i\([^i]\)/s//\11\2/
g/^\(i*\)\1\([^i]\)/s//\10\2/
g/^\(i*\)\1i\([^i]\)/s//\11\2/
g/^\(i*\)\1\([^i]\)/s//\10\2/
g/^\(i*\)\1i\([^i]\)/s//\11\2/
g/^\(i*\)\1\([^i]\)/s//\10\2/
g/^\(i*\)\1i\([^i]\)/s//\11\2/
g/^\(i*\)\1\([^i]\)/s//\10\2/
g/^\(i*\)\1i\([^i]\)/s//\11\2/
g/^\(i*\)\1\([^i]\)/s//\10\2/
g/^\(i*\)\1i\([^i]\)/s//\11\2/
g/^\(i*\)\1\([^i]\)/s//\10\2/
g/^\(i*\)\1i\([^i]\)/s//\11\2/
g/^\(i*\)\1\([^i]\)/s//\10\2/
g/^0*\(1.*\)0$/s//\1/
,p
Q

View file

@ -0,0 +1,3 @@
def bin [x] { $x | (fmt).binary | str substring 2.. }
[0 1 2 5 50 9000] | each { {dec: $in bin: (bin $in)} }

View file

@ -1,2 +1,2 @@
GetBits ← &pf@\n≡&pf ⇌⋯
GetBits 5_50_9000
PrintBits ← &p/$"__"⇌⋯
PrintBits 5_50_9000

View file

@ -0,0 +1,45 @@
format ELF64 executable 9
segment readable
nums: dd 5, 50, 9000, 0 ;numbers to convert, 0 as end of data indicator
segment readable writable
result: times 16 db 0 ;empty string for printing the result later
db 10, 0
segment readable executable
entry start
start:
xor rbx, rbx ;index for nums
mov eax, [nums + 4 * rbx]
mov rcx, 16 ;index for result string
convert:
dec rcx
mov rdi, 1 ;get least significant bit
and rdi, rax
add rdi, '0' ;convert to char
mov [result + rcx], dil ;and put it in result[ecx]
shr rax, 1 ;right shift, 1 bit
test rax, rax ;eax still > 0
jnz convert ;if yes, repeat
mov rax, 4 ;print result
mov rdi, 1
mov rsi, result
mov rdx, 18
syscall
xor rax, rax ;reset string to 0s (not strictly needed,
mov [result], rax ;because we have increasing numbers, and
mov [result + 8], rax ;old chars will be overwritten)
inc rbx ;and repeat if list isn't done
mov eax, [nums + 4 * rbx]
mov rcx, 16
test rax, rax
jnz convert
mov rax, 1 ;exit
xor rdi, rdi
syscall

View file

@ -0,0 +1,150 @@
global _start
bsize equ 72
outbase equ 2 ; 2 to 16
section .text
_start:
pop rcx
dec rcx
or rcx, rcx
jz .exit0
pop rdx
xor rdx, rdx
.cmdloop:
pop rdi
call atoq
mov qword [slot + rdx * 8], rax
inc rdx
cmp rdx, rcx
jne .cmdloop
xor rdx, rdx
.printloop:
mov rdi, qword [slot + rdx * 8]
call printq
inc rdx
cmp rdx, rcx
jne .printloop
.exit0:
mov rax, 60
mov rdi, 0
syscall
atoq:
push r8
push r9
push rdi
push rsi
push rdx
push rcx
xor rcx, rcx
xor rax, rax
xor r8, r8
mov r9, 1
cmp byte[rdi], 0
jz .exit
cmp byte[rdi], '-'
jne .stbegin
mov r9, -1
inc rdi
.stbegin:
cmp byte[rdi], '0'
jl .return
cmp byte[rdi], '9'
jg .return
.stloop:
cmp byte[rdi + r8], '0'
jl .calc0
cmp byte[rdi + r8], '9'
jg .calc0
mov sil, byte[rdi + r8]
sub rsi, '0'
push rsi
inc r8
jmp .stloop
.calc0:
xor rcx, rcx
mov rdi, 10
mov rsi, 1
.calc1:
pop rax
mul rsi
add rcx, rax
dec r8
jz .return
mov rax, rsi
mul rdi
mov rsi, rax
jmp .calc1
.return:
xor rdx, rdx
mov rax, rcx
imul r9
.exit:
pop rcx
pop rdx
pop rsi
pop rdi
pop r9
pop r8
ret
printq:
push r9
push rdi
push rsi
push rdx
push rcx
push rax
mov rax, rdi
mov r9, bsize
dec r9
mov rsi, outbase
sub rsp, bsize
sub rax, 0
jns .stloop
neg rax
.stloop:
xor rdx, rdx
div rsi
mov dl, byte [charset + rdx]
mov byte[rsp + r9], dl
sub rax, 0
jz .negtest
dec r9
jmp .stloop
.negtest:
sub rdi, 0
jns .printit
dec r9
mov byte[rsp + r9], '-'
.printit:
mov rdx, bsize
sub rdx, r9
mov rsi, rsp
add rsi, r9
mov rdi, 1
mov rax, 1
syscall
mov rsi, 0x0a
push rsi
mov rsi, rsp
mov rdx, 1
mov rax, 1
mov rdi, 1
syscall
pop rsi
.restores:
add rsp, bsize
pop rax
pop rcx
pop rdx
pop rsi
pop rdi
pop r9
.return:
ret
section .data
charset: db "0123456789abcdef"
section .bss
slot: resq 16