September Morn Update
This commit is contained in:
parent
4e2d22a71d
commit
aac6731f2c
6856 changed files with 141342 additions and 21127 deletions
|
|
@ -1,11 +1,13 @@
|
|||
with ada.text_io;use ada.text_io;
|
||||
wwith ada.text_io;use ada.text_io;
|
||||
procedure binary is
|
||||
-- the digits in base 2
|
||||
bit : array (0..1) of string (1..1) := ("0","1");
|
||||
-- the conversion function itself
|
||||
function bin_image (n : Natural) return string is (if n<2 then bit (n) else bin_image (n/2)&bit(n mod 2));
|
||||
-- the values we want to test
|
||||
bit : array (0..1) of character := ('0','1');
|
||||
|
||||
function bin_image (n : Natural) return string is
|
||||
(if n < 2 then (1 => bit (n)) else bin_image (n / 2) & bit (n mod 2));
|
||||
|
||||
test_values : array (1..3) of Natural := (5,50,9000);
|
||||
begin
|
||||
for test of test_values loop put_line ("Output for"&test'img&" is "&bin_image (test)); end loop;
|
||||
for test of test_values loop
|
||||
put_line ("Output for" & test'img & " is " & bin_image (test));
|
||||
end loop;
|
||||
end binary;
|
||||
|
|
|
|||
|
|
@ -1,16 +1,10 @@
|
|||
FOR num% = 0 TO 16
|
||||
PRINT FN_tobase(num%, 2, 0)
|
||||
NEXT
|
||||
END
|
||||
# DecToBin.bas
|
||||
# BASIC256 1.1.4.0
|
||||
|
||||
REM Convert N% to string in base B% with minimum M% digits:
|
||||
DEF FN_tobase(N%,B%,M%)
|
||||
LOCAL D%,A$
|
||||
REPEAT
|
||||
D% = N%MODB%
|
||||
N% DIV= B%
|
||||
IF D%<0 D% += B%:N% -= 1
|
||||
A$ = CHR$(48 + D% - 7*(D%>9)) + A$
|
||||
M% -= 1
|
||||
UNTIL (N%=FALSE OR N%=TRUE) AND M%<=0
|
||||
=A$
|
||||
|
||||
dim a(3) #dimension a 3 element array (a)
|
||||
a = {5, 50, 9000}
|
||||
|
||||
for i = 0 to 2
|
||||
print a[i] + chr(9) + toRadix(a[i],2) # radix (decimal, base2)
|
||||
next i
|
||||
|
|
|
|||
|
|
@ -1,12 +1,16 @@
|
|||
PRINT FNbinary(5)
|
||||
PRINT FNbinary(50)
|
||||
PRINT FNbinary(9000)
|
||||
END
|
||||
FOR num% = 0 TO 16
|
||||
PRINT FN_tobase(num%, 2, 0)
|
||||
NEXT
|
||||
END
|
||||
|
||||
DEF FNbinary(N%)
|
||||
LOCAL A$
|
||||
REPEAT
|
||||
A$ = STR$(N% AND 1) + A$
|
||||
N% = N% >>> 1 : REM BBC Basic prior to V5 can use N% = N% DIV 2
|
||||
UNTIL N% = 0
|
||||
=A$
|
||||
REM Convert N% to string in base B% with minimum M% digits:
|
||||
DEF FN_tobase(N%,B%,M%)
|
||||
LOCAL D%,A$
|
||||
REPEAT
|
||||
D% = N%MODB%
|
||||
N% DIV= B%
|
||||
IF D%<0 D% += B%:N% -= 1
|
||||
A$ = CHR$(48 + D% - 7*(D%>9)) + A$
|
||||
M% -= 1
|
||||
UNTIL (N%=FALSE OR N%=TRUE) AND M%<=0
|
||||
=A$
|
||||
|
|
|
|||
|
|
@ -1,14 +1,12 @@
|
|||
10 N = 5 : GOSUB 100
|
||||
20 N = 50 : GOSUB 100
|
||||
30 N = 9000 : GOSUB 100
|
||||
40 END
|
||||
90 REM *** SUBROUTINE: CONVERT DECIMAL TO BINARY
|
||||
100 N2 = ABS(INT(N))
|
||||
110 B$ = ""
|
||||
120 FOR N1 = N2 TO 0 STEP 0
|
||||
130 : N2 = INT(N1 / 2)
|
||||
140 : B$ = STR$(N1 - N2 * 2) + B$
|
||||
150 : N1 = N2
|
||||
160 NEXT N1
|
||||
170 PRINT B$
|
||||
180 RETURN
|
||||
PRINT FNbinary(5)
|
||||
PRINT FNbinary(50)
|
||||
PRINT FNbinary(9000)
|
||||
END
|
||||
|
||||
DEF FNbinary(N%)
|
||||
LOCAL A$
|
||||
REPEAT
|
||||
A$ = STR$(N% AND 1) + A$
|
||||
N% = N% >>> 1 : REM BBC Basic prior to V5 can use N% = N% DIV 2
|
||||
UNTIL N% = 0
|
||||
=A$
|
||||
|
|
|
|||
14
Task/Binary-digits/BASIC/binary-digits-5.basic
Normal file
14
Task/Binary-digits/BASIC/binary-digits-5.basic
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
10 N = 5 : GOSUB 100
|
||||
20 N = 50 : GOSUB 100
|
||||
30 N = 9000 : GOSUB 100
|
||||
40 END
|
||||
90 REM *** SUBROUTINE: CONVERT DECIMAL TO BINARY
|
||||
100 N2 = ABS(INT(N))
|
||||
110 B$ = ""
|
||||
120 FOR N1 = N2 TO 0 STEP 0
|
||||
130 : N2 = INT(N1 / 2)
|
||||
140 : B$ = STR$(N1 - N2 * 2) + B$
|
||||
150 : N1 = N2
|
||||
160 NEXT N1
|
||||
170 PRINT B$
|
||||
180 RETURN
|
||||
8
Task/Binary-digits/BASIC/binary-digits-6.basic
Normal file
8
Task/Binary-digits/BASIC/binary-digits-6.basic
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
10 PRINT BIN$(50)
|
||||
100 DEF BIN$(N)
|
||||
110 LET N=ABS(INT(N)):LET B$=""
|
||||
120 DO
|
||||
140 LET B$=STR$(MOD(N,2))&B$:LET N=INT(N/2)
|
||||
150 LOOP WHILE N>0
|
||||
160 LET BIN$=B$
|
||||
170 END DEF
|
||||
3
Task/Binary-digits/Crystal/binary-digits-1.crystal
Normal file
3
Task/Binary-digits/Crystal/binary-digits-1.crystal
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
[5,50,9000].each do |n|
|
||||
puts "%b" % n
|
||||
end
|
||||
1
Task/Binary-digits/Crystal/binary-digits-2.crystal
Normal file
1
Task/Binary-digits/Crystal/binary-digits-2.crystal
Normal file
|
|
@ -0,0 +1 @@
|
|||
{5,50,9000}.each { |n| puts n.to_s(2) }
|
||||
|
|
@ -1,10 +1,10 @@
|
|||
import system'routines.
|
||||
import extensions.
|
||||
import system'routines;
|
||||
import extensions;
|
||||
|
||||
public program
|
||||
[
|
||||
(5,50,9000) forEach(:n)
|
||||
[
|
||||
console printLine(n toLiteral(2)).
|
||||
].
|
||||
]
|
||||
public program()
|
||||
{
|
||||
new int[]{5,50,9000}.forEach:(n)
|
||||
{
|
||||
console.printLine(n.toString(2))
|
||||
}
|
||||
}
|
||||
|
|
|
|||
23
Task/Binary-digits/Free-Pascal/binary-digits.free
Normal file
23
Task/Binary-digits/Free-Pascal/binary-digits.free
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
program binaryDigits(input, output, stdErr);
|
||||
{$mode ISO}
|
||||
|
||||
function binaryNumber(const value: nativeUInt): shortString;
|
||||
const
|
||||
one = '1';
|
||||
var
|
||||
representation: shortString;
|
||||
begin
|
||||
representation := binStr(value, bitSizeOf(value));
|
||||
// strip leading zeroes, if any; NB: mod has to be ISO compliant
|
||||
delete(representation, 1, (pos(one, representation)-1) mod bitSizeOf(value));
|
||||
// traditional Pascal fashion:
|
||||
// assign result to the (implicitely existent) variable
|
||||
// that is named like the function’s name
|
||||
binaryNumber := representation;
|
||||
end;
|
||||
|
||||
begin
|
||||
writeLn(binaryNumber(5));
|
||||
writeLn(binaryNumber(50));
|
||||
writeLn(binaryNumber(9000));
|
||||
end.
|
||||
|
|
@ -1,9 +1,11 @@
|
|||
using Printf
|
||||
|
||||
for n in (0, 5, 50, 9000)
|
||||
@printf("%6i → %s\n", n, bin(n))
|
||||
@printf("%6i → %s\n", n, string(n, base=2))
|
||||
end
|
||||
|
||||
# with pad
|
||||
println("\nwith pad")
|
||||
for n in (0, 5, 50, 9000)
|
||||
@printf("%6i → %s\n", n, bin(n, 20))
|
||||
@printf("%6i → %s\n", n, string(n, base=2, pad=20))
|
||||
end
|
||||
|
|
|
|||
180
Task/Binary-digits/LLVM/binary-digits.llvm
Normal file
180
Task/Binary-digits/LLVM/binary-digits.llvm
Normal file
|
|
@ -0,0 +1,180 @@
|
|||
; ModuleID = 'binary.c'
|
||||
; source_filename = "binary.c"
|
||||
; target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128"
|
||||
; target triple = "x86_64-pc-windows-msvc19.21.27702"
|
||||
|
||||
; This is not strictly LLVM, as it uses the C library function "printf".
|
||||
; LLVM does not provide a way to print values, so the alternative would be
|
||||
; to just load the string into memory, and that would be boring.
|
||||
|
||||
; Additional comments have been inserted, as well as changes made from the output produced by clang such as putting more meaningful labels for the jumps
|
||||
|
||||
$"\01??_C@_03OFAPEBGM@?$CFs?6?$AA@" = comdat any
|
||||
|
||||
;--- String constant defintions
|
||||
@"\01??_C@_03OFAPEBGM@?$CFs?6?$AA@" = linkonce_odr unnamed_addr constant [4 x i8] c"%s\0A\00", comdat, align 1
|
||||
|
||||
;--- The declaration for the external C printf function.
|
||||
declare i32 @printf(i8*, ...)
|
||||
|
||||
;--- The declaration for the external C log10 function.
|
||||
declare double @log10(double) #1
|
||||
|
||||
;--- The declaration for the external C malloc function.
|
||||
declare noalias i8* @malloc(i64) #2
|
||||
|
||||
;--- The declaration for the external C free function.
|
||||
declare void @free(i8*) #2
|
||||
|
||||
;----------------------------------------------------------
|
||||
;-- Function that allocates a string with a binary representation of a number
|
||||
define i8* @bin(i32) #0 {
|
||||
;-- uint32_t x (local copy)
|
||||
%2 = alloca i32, align 4
|
||||
;-- size_t bits
|
||||
%3 = alloca i64, align 8
|
||||
;-- intermediate value
|
||||
%4 = alloca i8*, align 8
|
||||
;-- size_t i
|
||||
%5 = alloca i64, align 8
|
||||
store i32 %0, i32* %2, align 4
|
||||
;-- x == 0, start determinig what value to initially store in bits
|
||||
%6 = load i32, i32* %2, align 4
|
||||
%7 = icmp eq i32 %6, 0
|
||||
br i1 %7, label %just_one, label %calculate_logs
|
||||
|
||||
just_one:
|
||||
br label %assign_bits
|
||||
|
||||
calculate_logs:
|
||||
;-- log10((double) x)/log10(2) + 1
|
||||
%8 = load i32, i32* %2, align 4
|
||||
%9 = uitofp i32 %8 to double
|
||||
;-- log10((double) x)
|
||||
%10 = call double @log10(double %9) #3
|
||||
;-- log10(2)
|
||||
%11 = call double @log10(double 2.000000e+00) #3
|
||||
;-- remainder of calculation
|
||||
%12 = fdiv double %10, %11
|
||||
%13 = fadd double %12, 1.000000e+00
|
||||
br label %assign_bits
|
||||
|
||||
assign_bits:
|
||||
;-- bits = (x == 0) ? 1 : log10((double) x)/log10(2) + 1;
|
||||
;-- phi basically selects what the value to assign should be based on which basic block came before
|
||||
%14 = phi double [ 1.000000e+00, %just_one ], [ %13, %calculate_logs ]
|
||||
%15 = fptoui double %14 to i64
|
||||
store i64 %15, i64* %3, align 8
|
||||
;-- char *ret = malloc((bits + 1) * sizeof (char));
|
||||
%16 = load i64, i64* %3, align 8
|
||||
%17 = add i64 %16, 1
|
||||
%18 = mul i64 %17, 1
|
||||
%19 = call noalias i8* @malloc(i64 %18)
|
||||
store i8* %19, i8** %4, align 8
|
||||
store i64 0, i64* %5, align 8
|
||||
br label %loop
|
||||
|
||||
loop:
|
||||
;-- i < bits;
|
||||
%20 = load i64, i64* %5, align 8
|
||||
%21 = load i64, i64* %3, align 8
|
||||
%22 = icmp ult i64 %20, %21
|
||||
br i1 %22, label %loop_body, label %exit
|
||||
|
||||
loop_body:
|
||||
;-- ret[bits - i - 1] = (x & 1) ? '1' : '0';
|
||||
%23 = load i32, i32* %2, align 4
|
||||
%24 = and i32 %23, 1
|
||||
%25 = icmp ne i32 %24, 0
|
||||
%26 = zext i1 %25 to i64
|
||||
%27 = select i1 %25, i32 49, i32 48
|
||||
%28 = trunc i32 %27 to i8
|
||||
%29 = load i8*, i8** %4, align 8
|
||||
%30 = load i64, i64* %3, align 8
|
||||
%31 = load i64, i64* %5, align 8
|
||||
%32 = sub i64 %30, %31
|
||||
%33 = sub i64 %32, 1
|
||||
%34 = getelementptr inbounds i8, i8* %29, i64 %33
|
||||
store i8 %28, i8* %34, align 1
|
||||
;-- x >>= 1;
|
||||
%35 = load i32, i32* %2, align 4
|
||||
%36 = lshr i32 %35, 1
|
||||
store i32 %36, i32* %2, align 4
|
||||
br label %loop_increment
|
||||
|
||||
loop_increment:
|
||||
;-- i++;
|
||||
%37 = load i64, i64* %5, align 8
|
||||
%38 = add i64 %37, 1
|
||||
store i64 %38, i64* %5, align 8
|
||||
br label %loop
|
||||
|
||||
exit:
|
||||
;-- ret[bits] = '\0';
|
||||
%39 = load i8*, i8** %4, align 8
|
||||
%40 = load i64, i64* %3, align 8
|
||||
%41 = getelementptr inbounds i8, i8* %39, i64 %40
|
||||
store i8 0, i8* %41, align 1
|
||||
;-- return ret;
|
||||
%42 = load i8*, i8** %4, align 8
|
||||
ret i8* %42
|
||||
}
|
||||
|
||||
;----------------------------------------------------------
|
||||
;-- Entry point into the program
|
||||
define i32 @main() #0 {
|
||||
;-- 32-bit zero for the return
|
||||
%1 = alloca i32, align 4
|
||||
;-- size_t i, for tracking the loop index
|
||||
%2 = alloca i64, align 8
|
||||
;-- char* for the result of the bin call
|
||||
%3 = alloca i8*, align 8
|
||||
;-- initialize
|
||||
store i32 0, i32* %1, align 4
|
||||
store i64 0, i64* %2, align 8
|
||||
br label %loop
|
||||
|
||||
loop:
|
||||
;-- while (i < 20)
|
||||
%4 = load i64, i64* %2, align 8
|
||||
%5 = icmp ult i64 %4, 20
|
||||
br i1 %5, label %loop_body, label %exit
|
||||
|
||||
loop_body:
|
||||
;-- char *binstr = bin(i);
|
||||
%6 = load i64, i64* %2, align 8
|
||||
%7 = trunc i64 %6 to i32
|
||||
%8 = call i8* @bin(i32 %7)
|
||||
store i8* %8, i8** %3, align 8
|
||||
;-- printf("%s\n", binstr);
|
||||
%9 = load i8*, i8** %3, align 8
|
||||
%10 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @"\01??_C@_03OFAPEBGM@?$CFs?6?$AA@", i32 0, i32 0), i8* %9)
|
||||
;-- free(binstr);
|
||||
%11 = load i8*, i8** %3, align 8
|
||||
call void @free(i8* %11)
|
||||
br label %loop_increment
|
||||
|
||||
loop_increment:
|
||||
;-- i++
|
||||
%12 = load i64, i64* %2, align 8
|
||||
%13 = add i64 %12, 1
|
||||
store i64 %13, i64* %2, align 8
|
||||
br label %loop
|
||||
|
||||
exit:
|
||||
;-- return 0 (implicit)
|
||||
%14 = load i32, i32* %1, align 4
|
||||
ret i32 %14
|
||||
}
|
||||
|
||||
attributes #0 = { noinline nounwind optnone uwtable "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" }
|
||||
attributes #1 = { nounwind "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" }
|
||||
attributes #2 = { "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" }
|
||||
attributes #3 = { nounwind }
|
||||
|
||||
!llvm.module.flags = !{!0, !1}
|
||||
!llvm.ident = !{!2}
|
||||
|
||||
!0 = !{i32 1, !"wchar_size", i32 2}
|
||||
!1 = !{i32 7, !"PIC Level", i32 2}
|
||||
!2 = !{!"clang version 6.0.1 (tags/RELEASE_601/final)"}
|
||||
22
Task/Binary-digits/MAXScript/binary-digits.max
Normal file
22
Task/Binary-digits/MAXScript/binary-digits.max
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
-- MAXScript: Output decimal numbers from 0 to 16 as Binary : N.H. 2019
|
||||
for k = 0 to 16 do
|
||||
(
|
||||
temp = ""
|
||||
binString = ""
|
||||
b = k
|
||||
-- While loop wont execute for zero so force string to zero
|
||||
if b == 0 then temp = "0"
|
||||
while b > 0 do
|
||||
(
|
||||
rem = b
|
||||
b = b / 2
|
||||
If ((mod rem 2) as Integer) == 0 then temp = temp + "0"
|
||||
else temp = temp + "1"
|
||||
)
|
||||
-- Reverse the binary string
|
||||
for r = temp.count to 1 by -1 do
|
||||
(
|
||||
binString = binString + temp[r]
|
||||
)
|
||||
print binString
|
||||
)
|
||||
3
Task/Binary-digits/Processing/binary-digits-1
Normal file
3
Task/Binary-digits/Processing/binary-digits-1
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
println(Integer.toBinaryString(5)); // 101
|
||||
println(Integer.toBinaryString(50)); // 110010
|
||||
println(Integer.toBinaryString(9000)); // 10001100101000
|
||||
3
Task/Binary-digits/Processing/binary-digits-2
Normal file
3
Task/Binary-digits/Processing/binary-digits-2
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
println(binary(5)); // 00000000000101
|
||||
println(binary(50)); // 00000000110010
|
||||
println(binary(9000)); // 10001100101000
|
||||
|
|
@ -1,18 +1,18 @@
|
|||
>>> for i in range(16): print(bin(i))
|
||||
>>> for i in range(16): print(bin(i)[2:])
|
||||
|
||||
0b0
|
||||
0b1
|
||||
0b10
|
||||
0b11
|
||||
0b100
|
||||
0b101
|
||||
0b110
|
||||
0b111
|
||||
0b1000
|
||||
0b1001
|
||||
0b1010
|
||||
0b1011
|
||||
0b1100
|
||||
0b1101
|
||||
0b1110
|
||||
0b1111
|
||||
0
|
||||
1
|
||||
10
|
||||
11
|
||||
100
|
||||
101
|
||||
110
|
||||
111
|
||||
1000
|
||||
1001
|
||||
1010
|
||||
1011
|
||||
1100
|
||||
1101
|
||||
1110
|
||||
1111
|
||||
|
|
|
|||
90
Task/Binary-digits/Python/binary-digits-4.py
Normal file
90
Task/Binary-digits/Python/binary-digits-4.py
Normal file
|
|
@ -0,0 +1,90 @@
|
|||
'''Binary strings for integers'''
|
||||
|
||||
|
||||
# showBinary :: Int -> String
|
||||
def showBinary(n):
|
||||
'''Binary string representation of an integer.'''
|
||||
def binaryChar(n):
|
||||
return '1' if n != 0 else '0'
|
||||
return showIntAtBase(2)(binaryChar)(n)('')
|
||||
|
||||
|
||||
# TEST ----------------------------------------------------
|
||||
|
||||
# main :: IO()
|
||||
def main():
|
||||
'''Test'''
|
||||
|
||||
print('Mapping showBinary over integer list:')
|
||||
print(unlines(map(
|
||||
showBinary,
|
||||
[5, 50, 9000]
|
||||
)))
|
||||
|
||||
print(tabulated(
|
||||
'\nUsing showBinary as a display function:'
|
||||
)(str)(showBinary)(
|
||||
lambda x: x
|
||||
)([5, 50, 9000]))
|
||||
|
||||
|
||||
# GENERIC -------------------------------------------------
|
||||
|
||||
# compose (<<<) :: (b -> c) -> (a -> b) -> a -> c
|
||||
def compose(g):
|
||||
'''Right to left function composition.'''
|
||||
return lambda f: lambda x: g(f(x))
|
||||
|
||||
|
||||
# enumFromTo :: (Int, Int) -> [Int]
|
||||
def enumFromTo(m):
|
||||
'''Integer enumeration from m to n.'''
|
||||
return lambda n: list(range(m, 1 + n))
|
||||
|
||||
|
||||
# showIntAtBase :: Int -> (Int -> String) -> Int -> String -> String
|
||||
def showIntAtBase(base):
|
||||
'''String representing a non-negative integer
|
||||
using the base specified by the first argument,
|
||||
and the character representation specified by the second.
|
||||
The final argument is a (possibly empty) string to which
|
||||
the numeric string will be prepended.'''
|
||||
def wrap(toChr, n, rs):
|
||||
def go(nd, r):
|
||||
n, d = nd
|
||||
r_ = toChr(d) + r
|
||||
return go(divmod(n, base), r_) if 0 != n else r_
|
||||
return 'unsupported base' if 1 >= base else (
|
||||
'negative number' if 0 > n else (
|
||||
go(divmod(n, base), rs))
|
||||
)
|
||||
return lambda toChr: lambda n: lambda rs: (
|
||||
wrap(toChr, n, rs)
|
||||
)
|
||||
|
||||
|
||||
# tabulated :: String -> (a -> String) ->
|
||||
# (b -> String) ->
|
||||
# (a -> b) -> [a] -> String
|
||||
def tabulated(s):
|
||||
'''Heading -> x display function -> fx display function ->
|
||||
f -> value list -> tabular string.'''
|
||||
def go(xShow, fxShow, f, xs):
|
||||
w = max(map(compose(len)(xShow), xs))
|
||||
return s + '\n' + '\n'.join(
|
||||
xShow(x).rjust(w, ' ') + ' -> ' + fxShow(f(x)) for x in xs
|
||||
)
|
||||
return lambda xShow: lambda fxShow: lambda f: lambda xs: go(
|
||||
xShow, fxShow, f, xs
|
||||
)
|
||||
|
||||
|
||||
# unlines :: [String] -> String
|
||||
def unlines(xs):
|
||||
'''A single string derived by the intercalation
|
||||
of a list of strings with the newline character.'''
|
||||
return '\n'.join(xs)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
121
Task/Binary-digits/Python/binary-digits-5.py
Normal file
121
Task/Binary-digits/Python/binary-digits-5.py
Normal file
|
|
@ -0,0 +1,121 @@
|
|||
'''Decomposition of an integer to a string of booleans.'''
|
||||
|
||||
|
||||
# boolsFromInt :: Int -> [Bool]
|
||||
def boolsFromInt(n):
|
||||
'''List of booleans derived by binary
|
||||
decomposition of an integer.'''
|
||||
def go(x):
|
||||
(q, r) = divmod(x, 2)
|
||||
return Just((q, bool(r))) if x else Nothing()
|
||||
return unfoldl(go)(n)
|
||||
|
||||
|
||||
# stringFromBools :: [Bool] -> String
|
||||
def stringFromBools(xs):
|
||||
'''Binary string representation of a
|
||||
list of boolean values.'''
|
||||
def oneOrZero(x):
|
||||
return '1' if x else '0'
|
||||
return ''.join(map(oneOrZero, xs))
|
||||
|
||||
|
||||
# TEST ----------------------------------------------------
|
||||
# main :: IO()
|
||||
def main():
|
||||
'''Test'''
|
||||
|
||||
binary = compose(stringFromBools)(boolsFromInt)
|
||||
|
||||
print('Mapping a composed function:')
|
||||
print(unlines(map(
|
||||
binary,
|
||||
[5, 50, 9000]
|
||||
)))
|
||||
|
||||
print(
|
||||
tabulated(
|
||||
'\n\nTabulating a string display from binary data:'
|
||||
)(str)(stringFromBools)(
|
||||
boolsFromInt
|
||||
)([5, 50, 9000])
|
||||
)
|
||||
|
||||
|
||||
# GENERIC -------------------------------------------------
|
||||
|
||||
# Just :: a -> Maybe a
|
||||
def Just(x):
|
||||
'''Constructor for an inhabited Maybe (option type) value.'''
|
||||
return {'type': 'Maybe', 'Nothing': False, 'Just': x}
|
||||
|
||||
|
||||
# Nothing :: Maybe a
|
||||
def Nothing():
|
||||
'''Constructor for an empty Maybe (option type) value.'''
|
||||
return {'type': 'Maybe', 'Nothing': True}
|
||||
|
||||
|
||||
# compose (<<<) :: (b -> c) -> (a -> b) -> a -> c
|
||||
def compose(g):
|
||||
'''Right to left function composition.'''
|
||||
return lambda f: lambda x: g(f(x))
|
||||
|
||||
|
||||
# enumFromTo :: (Int, Int) -> [Int]
|
||||
def enumFromTo(m):
|
||||
'''Integer enumeration from m to n.'''
|
||||
return lambda n: list(range(m, 1 + n))
|
||||
|
||||
|
||||
# tabulated :: String -> (a -> String) ->
|
||||
# (b -> String) ->
|
||||
# (a -> b) -> [a] -> String
|
||||
def tabulated(s):
|
||||
'''Heading -> x display function -> fx display function ->
|
||||
f -> value list -> tabular string.'''
|
||||
def go(xShow, fxShow, f, xs):
|
||||
w = max(map(compose(len)(xShow), xs))
|
||||
return s + '\n' + '\n'.join(
|
||||
xShow(x).rjust(w, ' ') + ' -> ' + fxShow(f(x)) for x in xs
|
||||
)
|
||||
return lambda xShow: lambda fxShow: lambda f: lambda xs: go(
|
||||
xShow, fxShow, f, xs
|
||||
)
|
||||
|
||||
|
||||
# unfoldl(lambda x: Just(((x - 1), x)) if 0 != x else Nothing())(10)
|
||||
# -> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
|
||||
# unfoldl :: (b -> Maybe (b, a)) -> b -> [a]
|
||||
def unfoldl(f):
|
||||
'''Dual to reduce or foldl.
|
||||
Where these reduce a list to a summary value, unfoldl
|
||||
builds a list from a seed value.
|
||||
Where f returns Just(a, b), a is appended to the list,
|
||||
and the residual b is used as the argument for the next
|
||||
application of f.
|
||||
When f returns Nothing, the completed list is returned.'''
|
||||
def go(v):
|
||||
xr = v, v
|
||||
xs = []
|
||||
while True:
|
||||
mb = f(xr[0])
|
||||
if mb.get('Nothing'):
|
||||
return xs
|
||||
else:
|
||||
xr = mb.get('Just')
|
||||
xs.insert(0, xr[1])
|
||||
return xs
|
||||
return lambda x: go(x)
|
||||
|
||||
|
||||
# unlines :: [String] -> String
|
||||
def unlines(xs):
|
||||
'''A single string derived by the intercalation
|
||||
of a list of strings with the newline character.'''
|
||||
return '\n'.join(xs)
|
||||
|
||||
|
||||
# MAIN -------------------------------------------------
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
10
Task/Binary-digits/R/binary-digits.r
Normal file
10
Task/Binary-digits/R/binary-digits.r
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
dec2bin <- function(num) {
|
||||
ifelse(num == 0,
|
||||
0,
|
||||
sub("^0+","",paste(rev(as.integer(intToBits(num))), collapse = ""))
|
||||
)
|
||||
}
|
||||
|
||||
for (anumber in c(0, 5, 50, 9000)) {
|
||||
cat(dec2bin(anumber),"\n")
|
||||
}
|
||||
|
|
@ -10,5 +10,5 @@
|
|||
do j=1 while @.j\=='' /*compute until a NULL value is found.*/
|
||||
y=strip( x2b( d2x( @.j )), 'L', 0) /*force removal of all leading zeroes.*/
|
||||
if y=='' then y=0 /*handle the special case of 0 (zero).*/
|
||||
say right(@.j,20) 'decimal, and in binary:' y /*display the number to the terminal. */
|
||||
say y /*display binary number to the terminal*/
|
||||
end /*j*/ /*stick a fork in it, we're all done. */
|
||||
|
|
|
|||
15
Task/Binary-digits/Simula/binary-digits.simula
Normal file
15
Task/Binary-digits/Simula/binary-digits.simula
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
BEGIN
|
||||
|
||||
PROCEDURE OUTINTBIN(N); INTEGER N;
|
||||
BEGIN
|
||||
IF N > 1 THEN OUTINTBIN(N//2);
|
||||
OUTINT(MOD(N,2),1);
|
||||
END OUTINTBIN;
|
||||
|
||||
INTEGER SAMPLE;
|
||||
FOR SAMPLE := 5, 50, 9000 DO BEGIN
|
||||
OUTINTBIN(SAMPLE);
|
||||
OUTIMAGE;
|
||||
END;
|
||||
|
||||
END
|
||||
|
|
@ -1,5 +1,7 @@
|
|||
Sub Main()
|
||||
Console.WriteLine("5: " & Convert.ToString(5, 2))
|
||||
Console.WriteLine("50: " & Convert.ToString(50, 2))
|
||||
Console.WriteLine("9000: " & Convert.ToString(9000, 2))
|
||||
End Sub
|
||||
Module Program
|
||||
Sub Main
|
||||
For Each number In {5, 50, 9000}
|
||||
Console.WriteLine(Convert.ToString(number, 2))
|
||||
Next
|
||||
End Sub
|
||||
End Module
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@ End Function
|
|||
|
||||
'testing:
|
||||
Public Sub Main()
|
||||
Debug.Print "5: " & Bin(5)
|
||||
Debug.Print "50: " & Bin(50)
|
||||
Debug.Print "9000: " & Bin(9000)
|
||||
Debug.Print Bin(5)
|
||||
Debug.Print Bin(50)
|
||||
Debug.Print Bin(9000)
|
||||
End Sub
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue