Initial data commit

This commit is contained in:
Ingy döt Net 2023-07-01 11:58:00 -04:00
parent 72d218235f
commit f23f22d71c
199087 changed files with 3378941 additions and 0 deletions

View file

@ -0,0 +1,3 @@
---
from: http://rosettacode.org/wiki/Order_two_numerical_lists
note: Sorting Algorithms

View file

@ -0,0 +1,14 @@
{{Category:Sorting}}
{{Sorting Algorithm}}
Write a function that orders two lists or arrays filled with numbers.
The function should accept two lists as arguments and return <code>true</code> if the first list should be ordered before the second, and <code>false</code> otherwise.
The order is determined by [[wp:Lexicographical order#Ordering of sequences of various lengths|lexicographic order]]: Comparing the first element of each list.
If the first elements are equal, then the second elements should be compared, and so on, until one of the list has no more elements.
If the first list runs out of elements the result is <code>true</code>.
If the second list or both run out of elements the result is <code>false</code>.
<small>Note: further clarification of lexicographical ordering is expounded on the talk page [[Talk:Order_two_numerical_lists#Lexicographic_order|here]] and [[Talk:Order_two_numerical_lists#Is_the_task_statement_consistent.3F|here]].</small>
<br><br>

View file

@ -0,0 +1 @@
[1,2,1,3,2] < [1,2,0,4,4,0,0,0]

View file

@ -0,0 +1,149 @@
/* ARM assembly AARCH64 Raspberry PI 3B */
/* program orderlist64.s */
/*******************************************/
/* Constantes file */
/*******************************************/
/* for this file see task include a file in language AArch64 assembly*/
.include "../includeConstantesARM64.inc"
/*********************************/
/* Initialized data */
/*********************************/
.data
szMessResult1: .asciz "List1 < List2 \n" // message result
szMessResult2: .asciz "List1 => List2 \n" // message result
szCarriageReturn: .asciz "\n"
qTabList1: .quad 1,2,3,4,5
.equ NBELEMENTS1, (. - qTabList1) /8
qTabList2: .quad 1,2,1,5,2,2
.equ NBELEMENTS2, (. - qTabList2) /8
qTabList3: .quad 1,2,3,4,5
.equ NBELEMENTS3, (. - qTabList3) /8
qTabList4: .quad 1,2,3,4,5,6
.equ NBELEMENTS4, (. - qTabList4) /8
/*********************************/
/* UnInitialized data */
/*********************************/
.bss
/*********************************/
/* code section */
/*********************************/
.text
.global main
main: // entry of program
ldr x0,qAdriTabList1
mov x1,NBELEMENTS1
ldr x2,qAdriTabList2
mov x3,NBELEMENTS2
bl listeOrder
cmp x0,0 // false ?
beq 1f // yes
ldr x0,qAdrszMessResult1 // list 1 < list 2
bl affichageMess // display message
b 2f
1:
ldr x0,qAdrszMessResult2
bl affichageMess // display message
2:
ldr x0,qAdriTabList1
mov x1,NBELEMENTS1
ldr x2,qAdriTabList3
mov x3,NBELEMENTS3
bl listeOrder
cmp x0,0 // false ?
beq 3f // yes
ldr x0,qAdrszMessResult1 // list 1 < list 2
bl affichageMess // display message
b 4f
3:
ldr x0,qAdrszMessResult2
bl affichageMess // display message
4:
ldr x0,qAdriTabList1
mov x1,NBELEMENTS1
ldr x2,qAdriTabList4
mov x3,NBELEMENTS4
bl listeOrder
cmp x0,0 // false ?
beq 5f // yes
ldr x0,qAdrszMessResult1 // list 1 < list 2
bl affichageMess // display message
b 6f
5:
ldr x0,qAdrszMessResult2
bl affichageMess // display message
6:
100: // standard end of the program
mov x0,0 // return code
mov x8,EXIT // request to exit program
svc 0 // perform the system call
qAdriTabList1: .quad qTabList1
qAdriTabList2: .quad qTabList2
qAdriTabList3: .quad qTabList3
qAdriTabList4: .quad qTabList4
qAdrszMessResult1: .quad szMessResult1
qAdrszMessResult2: .quad szMessResult2
qAdrszCarriageReturn: .quad szCarriageReturn
/******************************************************************/
/* liste order */
/******************************************************************/
/* x0 contains the address of list 1 */
/* x1 contains list 1 size */
/* x2 contains the address of list 2 */
/* x3 contains list 2 size */
/* x0 returns 1 if list1 < list2 */
/* x0 returns 0 else */
listeOrder:
stp x1,lr,[sp,-16]! // save registers
stp x2,x3,[sp,-16]! // save registers
cbz x1,99f // list 1 size = zero ?
cbz x3,98f // list 2 size = zero ?
mov x4,#0 // index list 1
mov x5,#0 // index list 2
1:
ldr x6,[x0,x4,lsl #3] // load list 1 element
ldr x8,[x2,x5,lsl #3] // load list 2 element
cmp x6,x8 // compar
bgt 4f
beq 2f // list 1 = list 2
add x4,x4,1 // increment index 1
cmp x4,x1 // end list ?
bge 5f
b 1b // else loop
2:
add x4,x4,1 // increment index 1
cmp x4,x1 // end list ?
bge 3f // yes -> verif size
add x5,x5,1 // else increment index 2
cmp x5,x3 // end list 2 ?
bge 4f
b 1b // else loop
3:
cmp x1,x3 // compar size
bge 4f // list 2 < list 1
blt 5f // list 1 < list 2
b 100f
4:
mov x0,#0 // list 1 > list 2
b 100f
5:
mov x0,#1 // list 1 < list 2
b 100f
98: // error
mov x0,-2
b 100f
99: // error
mov x0,-1
100:
ldp x2,x3,[sp],16 // restaur 2 registers
ldp x1,lr,[sp],16 // restaur 2 registers
ret // return to address lr x30
/********************************************************/
/* File Include fonctions */
/********************************************************/
/* for this file see task include a file in language AArch64 assembly */
.include "../includeARM64.inc"

View file

@ -0,0 +1,55 @@
BEGIN # compare lists (rows) of integers #
# returns TRUE if there is an element in a that is < the corresponding #
# element in b and all previous elements are equal; FALSE otherwise #
OP < = ( []INT a, b )BOOL:
IF INT a pos := LWB a;
INT b pos := LWB b;
BOOL equal := TRUE;
WHILE a pos <= UPB a AND b pos <= UPB b AND equal DO
equal := a[ a pos ] = b[ b pos ];
IF equal THEN
a pos +:= 1;
b pos +:= 1
FI
OD;
NOT equal
THEN
# there is an element in a and b that is not equal #
a[ a pos ] < b[ b pos ]
ELSE
# all elements are equal or one list is shorter #
# a is < b if a has fewer elements #
a pos > UPB a AND b pos <= UPB b
FI # < # ;
# tests a < b has the expected result #
PROC test = ( STRING a name, []INT a, STRING b name, []INT b, BOOL expected )VOID:
BEGIN
BOOL result = a < b;
print( ( a name, IF result THEN " < " ELSE " >= " FI, b name
, IF result = expected THEN "" ELSE ", NOT as expected" FI
, newline
)
)
END # test # ;
# test cases as in the BBC basic sample #
[]INT list1 = ( 1, 2, 1, 5, 2 );
[]INT list2 = ( 1, 2, 1, 5, 2, 2 );
[]INT list3 = ( 1, 2, 3, 4, 5 );
[]INT list4 = ( 1, 2, 3, 4, 5 );
test( "list1", list1, "list2", list2, TRUE );
test( "list2", list2, "list3", list3, TRUE );
test( "list3", list3, "list4", list4, FALSE );
# additional test cases #
[]INT list5 = ( 9, 0, 2, 1, 0 );
[]INT list6 = ( 4, 0, 7, 7 );
[]INT list7 = ( 4, 0, 7 );
[]INT list8 = ( );
test( "list5", list5, "list6", list6, FALSE );
test( "list6", list6, "list7", list7, FALSE );
test( "list7", list7, "list8", list8, FALSE );
test( "list8", list8, "list7", list7, TRUE )
END

View file

@ -0,0 +1,70 @@
begin % compare lists (rows) of integers %
% returns TRUE if there is an element in a that is < the corresponding %
% element in b and all previous elements are equal, FALSE otherwise %
% the bounds of a and b should aLb :: aUb and bLb :: bUb %
logical procedure iLT ( integer array a ( * )
; integer value aLb, aUb
; integer array b ( * )
; integer value bLb, bUb
) ;
begin
integer aPos, bPos;
logical equal;
aPos := aLb;
bPos := bLb;
equal := true;
while aPos <= aUb and bPos <= bUb and equal do begin
equal := a( aPos ) = b( bPos );
if equal then begin
aPos := aPOs + 1;
bPos := bPos + 1
end if_equal
end while_more_elements_and_equal ;
if not equal
then % there is an element in a and b that is not equal %
a( aPos ) < b( bPos )
else % all elements are equal or one list is shorter %
% a is < b if a has fewer elements %
aPos > aUb and bPos <= bUb
end iLT ;
% tests a < b has the expected result %
procedure test ( string(5) value aName
; integer array a ( * )
; integer value aLb, aUb
; string(5) value bName
; integer array b ( * )
; integer value bLb, bUb
; logical value expected
) ;
begin
logical isLt;
isLt := iLT( a, aLb, aUb, b, bLb, bUb );
write( aName, if isLt then " < " else " >= ", bName
, if isLt = expected then "" else ", NOT as expected"
)
end test ;
integer array list1, list3, list4 ( 1 :: 5 );
integer array list2 ( 1 :: 6 );
integer array list5 ( 1 :: 5 );
integer array list6 ( 1 :: 4 );
integer array list7 ( 1 :: 3 );
integer array list8 ( 1 :: 1 );
integer aPos;
% test cases as in the BBC basic sample %
aPos := 1; for i := 1, 2, 1, 5, 2 do begin list1( aPos ) := i; aPos := aPos + 1 end;
aPos := 1; for i := 1, 2, 1, 5, 2, 2 do begin list2( aPos ) := i; aPos := aPos + 1 end;
aPos := 1; for i := 1, 2, 3, 4, 5 do begin list3( aPos ) := i; aPos := aPos + 1 end;
aPos := 1; for i := 1, 2, 3, 4, 5 do begin list4( aPos ) := i; aPos := aPos + 1 end;
test( "list1", list1, 1, 5, "list2", list2, 1, 6, true );
test( "list2", list2, 1, 6, "list3", list3, 1, 5, true );
test( "list3", list3, 1, 5, "list4", list4, 1, 5, false );
% additional test cases %
aPos := 1; for i := 9, 0, 2, 1, 0 do begin list5( aPos ) := i; aPos := aPos + 1 end;
aPos := 1; for i := 4, 0, 7, 7 do begin list6( aPos ) := i; aPos := aPos + 1 end;
aPos := 1; for i := 4, 0, 7 do begin list7( aPos ) := i; aPos := aPos + 1 end;
test( "list5", list5, 1, 5, "list6", list6, 1, 4, false );
test( "list6", list6, 1, 4, "list7", list7, 1, 3, false );
test( "list7", list7, 1, 3, "list8", list8, 1, 0, false );
test( "list8", list8, 1, 0, "list7", list7, 1, 3, true )
end.

View file

@ -0,0 +1,154 @@
/* ARM assembly Raspberry PI */
/* program orderlist.s */
/* Constantes */
.equ STDOUT, 1 @ Linux output console
.equ EXIT, 1 @ Linux syscall
.equ WRITE, 4 @ Linux syscall
/*********************************/
/* Initialized data */
/*********************************/
.data
szMessResult1: .asciz "List1 < List2 \n" @ message result
szMessResult2: .asciz "List1 => List2 \n" @ message result
szCarriageReturn: .asciz "\n"
iTabList1: .int 1,2,3,4,5
.equ NBELEMENTS1, (. - iTabList1) /4
iTabList2: .int 1,2,1,5,2,2
.equ NBELEMENTS2, (. - iTabList2) /4
iTabList3: .int 1,2,3,4,5
.equ NBELEMENTS3, (. - iTabList3) /4
iTabList4: .int 1,2,3,4,5,6
.equ NBELEMENTS4, (. - iTabList4) /4
/*********************************/
/* UnInitialized data */
/*********************************/
.bss
/*********************************/
/* code section */
/*********************************/
.text
.global main
main: @ entry of program
ldr r0,iAdriTabList1
mov r1,#NBELEMENTS1
ldr r2,iAdriTabList2
mov r3,#NBELEMENTS2
bl listeOrder
cmp r0,#0 @ false ?
beq 1f @ yes
ldr r0,iAdrszMessResult1 @ list 1 < list 2
bl affichageMess @ display message
b 2f
1:
ldr r0,iAdrszMessResult2
bl affichageMess @ display message
2:
ldr r0,iAdriTabList1
mov r1,#NBELEMENTS1
ldr r2,iAdriTabList3
mov r3,#NBELEMENTS3
bl listeOrder
cmp r0,#0 @ false ?
beq 3f @ yes
ldr r0,iAdrszMessResult1 @ list 1 < list 2
bl affichageMess @ display message
b 4f
3:
ldr r0,iAdrszMessResult2
bl affichageMess @ display message
4:
ldr r0,iAdriTabList1
mov r1,#NBELEMENTS1
ldr r2,iAdriTabList4
mov r3,#NBELEMENTS4
bl listeOrder
cmp r0,#0 @ false ?
beq 5f @ yes
ldr r0,iAdrszMessResult1 @ list 1 < list 2
bl affichageMess @ display message
b 6f
5:
ldr r0,iAdrszMessResult2
bl affichageMess @ display message
6:
100: @ standard end of the program
mov r0, #0 @ return code
mov r7, #EXIT @ request to exit program
svc #0 @ perform the system call
iAdriTabList1: .int iTabList1
iAdriTabList2: .int iTabList2
iAdriTabList3: .int iTabList3
iAdriTabList4: .int iTabList4
iAdrszMessResult1: .int szMessResult1
iAdrszMessResult2: .int szMessResult2
iAdrszCarriageReturn: .int szCarriageReturn
/******************************************************************/
/* display text with size calculation */
/******************************************************************/
/* r0 contains the address of list 1 */
/* r1 contains list 1 size */
/* r2 contains the address of list 2 */
/* r3 contains list 2 size */
/* r0 returns 1 if list1 < list2 */
/* r0 returns 0 else */
listeOrder:
push {r1-r7,lr} @ save registres
cmp r1,#0 @ list 1 size = zero ?
moveq r0,#-1 @ yes -> error
beq 100f
cmp r3,#0 @ list 2 size = zero ?
moveq r0,#-2 @ yes -> error
beq 100f
mov r4,#0 @ index list 1
mov r5,#0 @ index list 2
1:
ldr r6,[r0,r4,lsl #2] @ load list 1 element
ldr r7,[r2,r5,lsl #2] @ load list 2 element
cmp r6,r7 @ compar
movgt r0,#0 @ list 1 > list 2 ?
bgt 100f
beq 2f @ list 1 = list 2
add r4,#1 @ increment index 1
cmp r4,r1 @ end list ?
movge r0,#1 @ yes -> ok list 1 < list 2
bge 100f
b 1b @ else loop
2:
add r4,#1 @ increment index 1
cmp r4,r1 @ end list ?
bge 3f @ yes -> verif size
add r5,#1 @ else increment index 2
cmp r5,r3 @ end list 2 ?
movge r0,#0 @ yes -> list 2 < list 1
bge 100f
b 1b @ else loop
3:
cmp r1,r3 @ compar size
movge r0,#0 @ list 2 < list 1
movlt r0,#1 @ list 1 < list 2
100:
pop {r1-r7,lr} @ restaur registers
bx lr @ return
/******************************************************************/
/* display text with size calculation */
/******************************************************************/
/* r0 contains the address of the message */
affichageMess:
push {r0,r1,r2,r7,lr} @ save registres
mov r2,#0 @ counter length
1: @ loop length calculation
ldrb r1,[r0,r2] @ read octet start position + index
cmp r1,#0 @ if 0 its over
addne r2,r2,#1 @ else add 1 in the length
bne 1b @ and loop
@ so here r2 contains the length of the message
mov r1,r0 @ address message in r1
mov r0,#STDOUT @ code to write to the standard output Linux
mov r7, #WRITE @ code call system "write"
svc #0 @ call systeme
pop {r0,r1,r2,r7,lr} @ restaur registers */
bx lr @ return

View file

@ -0,0 +1,24 @@
# syntax: GAWK -f ORDER_TWO_NUMERICAL_LISTS.AWK
BEGIN {
split("1,2,1,5,2",list1,",")
split("1,2,1,5,2,2",list2,",")
split("1,2,3,4,5",list3,",")
split("1,2,3,4,5",list4,",")
x = compare_array(list1,list2) ? "<" : ">=" ; printf("list1%slist2\n",x)
x = compare_array(list2,list3) ? "<" : ">=" ; printf("list2%slist3\n",x)
x = compare_array(list3,list4) ? "<" : ">=" ; printf("list3%slist4\n",x)
exit(0)
}
function compare_array(arr1,arr2, ans,i) {
ans = 0
for (i=1; i<=length(arr1); i++) {
if (arr1[i] != arr2[i]) {
ans = 1
break
}
}
if (length(arr1) != length(arr2)) {
ans = 1
}
return(ans)
}

View file

@ -0,0 +1,64 @@
INT FUNC Compare(INT ARRAY x INT xLen INT ARRAY y INT yLen)
INT i,len
len=xLen
IF len>yLen THEN
len=yLen
FI
FOR i=0 TO len-1
DO
IF x(i)>y(i) THEN
RETURN (1)
ELSEIF x(i)<y(i) THEN
RETURN (-1)
FI
OD
IF xLen>yLen THEN
RETURN (1)
ELSEIF xLen<yLen THEN
RETURN (-1)
FI
RETURN (0)
BYTE FUNC Less(INT ARRAY x INT xLen INT ARRAY y INT yLen)
IF Compare(x,xLen,y,yLen)<0 THEN
RETURN (1)
FI
RETURN (0)
PROC PrintArray(INT ARRAY x INT len)
INT i
Put('[)
FOR i=0 TO len-1
DO
PrintI(x(i))
IF i<len-1 THEN
Put(' )
FI
OD
Put('])
RETURN
PROC Test(INT ARRAY x INT xLen INT ARRAY y INT yLen)
PrintArray(x,xLen)
IF Less(x,xLen,y,yLen) THEN
Print(" < ")
ELSE
Print(" >= ")
FI
PrintArray(y,yLen) PutE()
RETURN
PROC Main()
INT ARRAY a=[1 2 1 5 2]
INT ARRAY b=[1 2 1 5 2 2]
INT ARRAY c=[1 2 3 4 5]
INT ARRAY d=[1 2 3 4 5]
Test(a,5,b,6)
Test(b,6,a,5)
Test(b,6,c,5)
Test(c,5,b,6)
Test(c,5,d,5)
RETURN

View file

@ -0,0 +1,22 @@
with Ada.Text_IO; use Ada.Text_IO;
procedure Order is
type IntArray is array (Positive range <>) of Integer;
List1 : IntArray := (1, 2, 3, 4, 5);
List2 : IntArray := (1, 2, 1, 5, 2, 2);
List3 : IntArray := (1, 2, 1, 5, 2);
List4 : IntArray := (1, 2, 1, 5, 2);
type Animal is (Rat, Cat, Elephant);
type AnimalArray is array (Positive range <>) of Animal;
List5 : AnimalArray := (Cat, Elephant, Rat, Cat);
List6 : AnimalArray := (Cat, Elephant, Rat);
List7 : AnimalArray := (Cat, Cat, Elephant);
begin
Put_Line (Boolean'Image (List1 > List2)); -- True
Put_Line (Boolean'Image (List2 > List3)); -- True
Put_Line (Boolean'Image (List3 > List4)); -- False, equal
Put_Line (Boolean'Image (List5 > List6)); -- True
Put_Line (Boolean'Image (List6 > List7)); -- True
end Order;

View file

@ -0,0 +1,28 @@
ordl(list a, b)
{
integer i, l, o;
l = min(~a, ~b);
i = 0;
while (i < l) {
if (a[i] != b[i]) {
o = a[i] < b[i];
break;
}
i += 1;
}
i < l ? o : ~a <= ~b;
}
main(void)
{
o_(ordl(list(1, 2), list(1, 2)), "\n");
o_(ordl(list(1e2, 2), list(1e2, 2, 3)), "\n");
o_(ordl(list(1, 2, 3), list(1, 2)), "\n");
o_(ordl(list(.5, 4), list(.5, 2)), "\n");
o_(ordl(list(1, 4, 2, 3), list(1, 4, 2.1, 3)), "\n");
0;
}

View file

@ -0,0 +1,44 @@
-- <= for lists
-- compare :: [a] -> [a] -> Bool
on compare(xs, ys)
if length of xs = 0 then
true
else
if length of ys = 0 then
false
else
set {hx, txs} to uncons(xs)
set {hy, tys} to uncons(ys)
if hx = hy then
compare(txs, tys)
else
hx < hy
end if
end if
end if
end compare
-- TEST
on run
{compare([1, 2, 1, 3, 2], [1, 2, 0, 4, 4, 0, 0, 0]), ¬
compare([1, 2, 0, 4, 4, 0, 0, 0], [1, 2, 1, 3, 2])}
end run
---------------------------------------------------------------------------
-- GENERIC FUNCTION
-- uncons :: [a] -> Maybe (a, [a])
on uncons(xs)
if length of xs > 0 then
{item 1 of xs, rest of xs}
else
missing value
end if
end uncons

View file

@ -0,0 +1,32 @@
on listAComesBeforeListB(a, b)
set aLength to (count a)
set bLength to (count b)
set i to 0
repeat
set i to i + 1
if (i > bLength) then
return false
else if (i > aLength) then
return true
else
set aVal to item i of a
set bVal to item i of b
if (aVal = bVal) then
else
return (bVal > aVal)
end if
end if
end repeat
end listAComesBeforeListB
-- Test code:
set a to {}
repeat (random number 10) times
set end of a to random number 10
end repeat
set b to {}
repeat (random number 10) times
set end of b to random number 10
end repeat
return {a:a, b:b, | a < b |: listAComesBeforeListB(a, b)},

View file

@ -0,0 +1,4 @@
{a:{3, 5, 6, 5, 2, 1, 4}, b:{5, 8, 9, 2, 0, 1, 9, 0, 4, 10}, | a < b |:true}
{a:{10, 9, 5, 8, 8, 4, 3}, b:{5, 10, 8, 9, 10, 8, 7, 8}, | a < b |:false}
{a:{0, 10}, b:{0, 10}, | a < b |:false}
{a:{0, 10}, b:{0, 10, 5}, | a < b |:true}

View file

@ -0,0 +1,13 @@
compareLists: function [a,b][
loop 0..min @[size a, size b] 'i [
if a\[i] < b\[i] -> return true
if a\[i] > b\[i] -> return false
]
return less? size a size b
]
alias.infix '<=> 'compareLists
do [
print [1 2 1 3 2] <=> [1 2 0 4 4 0 0 0]
]

View file

@ -0,0 +1,7 @@
List1 := [1,2,1,3,2]
List2 := [1,2,0,4,4,0,0,0]
MsgBox % order(List1, List2)
order(L1, L2){
return L1.MaxIndex() < L2.MaxIndex()
}

View file

@ -0,0 +1,23 @@
arraybase 1
dim list1(5): dim list2(6): dim list3(5): dim list4(5)
list1 = {1, 2, 1, 5, 2}
list2 = {1, 2, 1, 5, 2, 2}
list3 = {1, 2, 3, 4, 5}
list4 = {1, 2, 3, 4, 5}
if Orden(list1[], list2[]) then print "list1 < list2" else print "list 1>= list2"
if Orden(list2[], list3[]) then print "list2 < list3" else print "list2 >= list3"
if Orden(list3[], list4[]) then print "list3 < list4" else print "list3 >= list4"
end
function Orden(listA[], listB[])
i = 0
l1 = listA[?]
l2 = listB[?]
while (listA[i] = listB[i]) and i < l1 and i < l2
i = i + 1
end while
if listA[?] < listB[?] then return True
if listA[?] > listB[?] then return False
return l1 < l2
end function

View file

@ -0,0 +1,19 @@
DIM list1(4) : list1() = 1, 2, 1, 5, 2
DIM list2(5) : list2() = 1, 2, 1, 5, 2, 2
DIM list3(4) : list3() = 1, 2, 3, 4, 5
DIM list4(4) : list4() = 1, 2, 3, 4, 5
IF FNorder(list1(), list2()) PRINT "list1<list2" ELSE PRINT "list1>=list2"
IF FNorder(list2(), list3()) PRINT "list2<list3" ELSE PRINT "list2>=list3"
IF FNorder(list3(), list4()) PRINT "list3<list4" ELSE PRINT "list3>=list4"
END
DEF FNorder(list1(), list2())
LOCAL i%, l1%, l2%
l1% = DIM(list1(),1) : l2% = DIM(list2(),1)
WHILE list1(i%) = list2(i%) AND i% < l1% AND i% < l2%
i% += 1
ENDWHILE
IF list1(i%) < list2(i%) THEN = TRUE
IF list1(i%) > list2(i%) THEN = FALSE
= l1% < l2%

View file

@ -0,0 +1,24 @@
( 1 2 3 4 5:?List1
& 1 2 1 5 2 2:?List2
& 1 2 1 5 2:?List3
& 1 2 1 5 2:?List4
& Cat Elephant Rat Cat:?List5
& Cat Elephant Rat:?List6
& Cat Cat Elephant:?List7
& ( gt
= first second
. !arg:(?first,?second)
& out
$ ( (.!first)+(.!second)
: ((.!first)+(.!second)|2*(.!first))
& FALSE
| TRUE
)
)
& gt$(!List1,!List2)
& gt$(!List2,!List3)
& gt$(!List3,!List4)
& gt$(!List4,!List5)
& gt$(!List5,!List6)
& gt$(!List6,!List7)
);

View file

@ -0,0 +1,23 @@
#include <iostream>
#include <vector>
int main() {
std::vector<int> a;
a.push_back(1);
a.push_back(2);
a.push_back(1);
a.push_back(3);
a.push_back(2);
std::vector<int> b;
b.push_back(1);
b.push_back(2);
b.push_back(0);
b.push_back(4);
b.push_back(4);
b.push_back(0);
b.push_back(0);
b.push_back(0);
std::cout << std::boolalpha << (a < b) << std::endl; // prints "false"
return 0;
}

View file

@ -0,0 +1,43 @@
namespace RosettaCode.OrderTwoNumericalLists
{
using System;
using System.Collections.Generic;
internal static class Program
{
private static bool IsLessThan(this IEnumerable<int> enumerable,
IEnumerable<int> otherEnumerable)
{
using (
IEnumerator<int> enumerator = enumerable.GetEnumerator(),
otherEnumerator = otherEnumerable.GetEnumerator())
{
while (true)
{
if (!otherEnumerator.MoveNext())
{
return false;
}
if (!enumerator.MoveNext())
{
return true;
}
if (enumerator.Current == otherEnumerator.Current)
{
continue;
}
return enumerator.Current < otherEnumerator.Current;
}
}
}
private static void Main()
{
Console.WriteLine(
new[] {1, 2, 1, 3, 2}.IsLessThan(new[] {1, 2, 0, 4, 4, 0, 0, 0}));
}
}
}

View file

@ -0,0 +1,11 @@
int list_cmp(int *a, int la, int *b, int lb)
{
int i, l = la;
if (l > lb) l = lb;
for (i = 0; i < l; i++) {
if (a[i] == b[i]) continue;
return (a[i] > b[i]) ? 1 : -1;
}
if (la == lb) return 0;
return la > lb ? 1 : -1;
}

View file

@ -0,0 +1 @@
#define list_less_or_eq(a,b,c,d) (list_cmp(a,b,c,d) != 1)

View file

@ -0,0 +1,2 @@
(defn lex? [a b]
(compare a b))

View file

@ -0,0 +1,6 @@
(defun list< (a b)
(cond ((not b) nil)
((not a) t)
((= (first a) (first b))
(list< (rest a) (rest b)))
(t (< (first a) (first b)))))

View file

@ -0,0 +1,3 @@
(defun list< (a b)
(let ((x (find-if-not #'zerop (mapcar #'- a b))))
(if x (minusp x) (< (length a) (length b)))))

View file

@ -0,0 +1,3 @@
void main() {
assert([1,2,1,3,2] >= [1,2,0,4,4,0,0,0]);
}

View file

@ -0,0 +1,35 @@
program Order_two_numerical_lists;
{$APPTYPE CONSOLE}
uses
System.SysUtils,
System.Generics.Defaults;
type
TArray = record
class function LessOrEqual<T>(first, second: TArray<T>): Boolean; static;
end;
class function TArray.LessOrEqual<T>(first, second: TArray<T>): Boolean;
begin
if Length(first) = 0 then
exit(true);
if Length(second) = 0 then
exit(false);
var comp := TComparer<T>.Default.Compare(first[0], second[0]);
if comp = 0 then
exit(LessOrEqual(copy(first, 1, length(first)), copy(second, 1, length(second))));
Result := comp < 0;
end;
begin
writeln(TArray.LessOrEqual<Integer>([1, 2, 3], [2, 3, 4]));
writeln(TArray.LessOrEqual<Integer>([2, 3, 4], [1, 2, 3]));
writeln(TArray.LessOrEqual<Integer>([1, 2], [1, 2, 3]));
writeln(TArray.LessOrEqual<Integer>([1, 2, 3], [1, 2]));
writeln(TArray.LessOrEqual<Char>(['a', 'c', 'b'], ['a', 'b', 'b']));
writeln(TArray.LessOrEqual<string>(['this', 'is', 'a', 'test'], ['this', 'is',
'not', 'a', 'test']));
readln;
end.

View file

@ -0,0 +1,6 @@
[] <. _ = true
_ <. [] = false
(x::xs) <. (y::ys) | x == y = xs <. ys
| else = x < y
[1,2,1,3,2] <. [1,2,0,4,4,0,0,0]

View file

@ -0,0 +1,4 @@
iex(1)> [1,2,3] < [1,2,3,4]
true
iex(2)> [1,2,3] < [1,2,4]
true

View file

@ -0,0 +1,4 @@
5> [1,2,3] < [1,2,3,4].
true
6> [1,2,3] < [1,2,4].
true

View file

@ -0,0 +1,18 @@
let inline cmp x y = if x < y then -1 else if x = y then 0 else 1
let before (s1 : seq<'a>) (s2 : seq<'a>) = (Seq.compareWith cmp s1 s2) < 0
[
([0], []);
([], []);
([], [0]);
([-1], [0]);
([0], [0]);
([0], [-1]);
([0], [0; -1]);
([0], [0; 0]);
([0], [0; 1]);
([0; -1], [0]);
([0; 0], [0]);
([0; 0], [1]);
]
|> List.iter (fun (x, y) -> printf "%A %s %A\n" x (if before x y then "< " else ">=") y)

View file

@ -0,0 +1,22 @@
Dim Shared list1(4) As Integer = {1, 2, 1, 5, 2}
Dim Shared list2(5) As Integer = {1, 2, 1, 5, 2, 2}
Dim Shared list3(4) As Integer = {1, 2, 3, 4, 5}
Dim Shared list4(4) As Integer = {1, 2, 3, 4, 5}
Function Orden(listA() As Integer, listB() As Integer) As Boolean
Dim As Integer i = 0, l1, l2
l1 = Ubound(listA, 1)
l2 = Ubound(listB, 1)
While listA(i) = listB(i) And i < l1 And i < l2
i += 1
Wend
If listA(i) < listB(i) Then Return True
If listA(i) > listB(i) Then Return False
Return l1 < l2
End Function
If Orden(list1(), list2()) Then Print "list1<list2" Else Print "list1>=list2"
If Orden(list2(), list3()) Then Print "list2<list3" Else Print "list2>=list3"
If Orden(list3(), list4()) Then Print "list3<list4" Else Print "list3>=list4"
Sleep

View file

@ -0,0 +1,73 @@
package main
import "fmt"
// If your numbers happen to be in the range of Unicode code points (0 to 0x10ffff), this function
// satisfies the task:
func lessRune(a, b []rune) bool {
return string(a) < string(b) // see also bytes.Compare
}
// Otherwise, the following function satisfies the task for all integer
// and floating point types, by changing the type definition appropriately.
type numericType int
func lessNT(a, b []numericType) bool {
l := len(a)
if len(b) < l {
l = len(b)
}
for i := 0; i < l; i++ {
if a[i] != b[i] {
return a[i] < b[i]
}
}
return l < len(b)
}
var testCases = [][][]numericType{
{{0}, {}},
{{}, {}},
{{}, {0}},
{{-1}, {0}},
{{0}, {0}},
{{0}, {-1}},
{{0}, {0, -1}},
{{0}, {0, 0}},
{{0}, {0, 1}},
{{0, -1}, {0}},
{{0, 0}, {0}},
{{0, 0}, {1}},
}
func main() {
// demonstrate the general function
for _, tc := range testCases {
fmt.Printf("order %6s before %6s : %t\n",
fmt.Sprintf("%v", tc[0]),
fmt.Sprintf("%v", tc[1]),
lessNT(tc[0], tc[1]))
}
fmt.Println()
// demonstrate that the byte specific function gives identical results
// by offsetting test data to a printable range of characters.
for _, tc := range testCases {
a := toByte(tc[0])
b := toByte(tc[1])
fmt.Printf("order %6q before %6q : %t\n",
string(a),
string(b),
lessByte(a, b))
}
}
func toByte(a []numericType) []byte {
b := make([]byte, len(a))
for i, n := range a {
b[i] = 'b' + byte(n)
}
return b
}

View file

@ -0,0 +1,10 @@
class CList extends ArrayList implements Comparable {
CList() { }
CList(Collection c) { super(c) }
int compareTo(Object that) {
assert that instanceof List
def n = [this.size(), that.size()].min()
def comp = [this[0..<n], that[0..<n]].transpose().find { it[0] != it[1] }
comp ? comp[0] <=> comp[1] : this.size() <=> that.size()
}
}

View file

@ -0,0 +1,9 @@
CList a, b; (a, b) = [[], []]; assert ! (a < b)
b = [1] as CList; assert (a < b)
a = [1] as CList; assert ! (a < b)
b = [2] as CList; assert (a < b)
a = [2, -1, 0] as CList; assert ! (a < b)
b = [2, -1] as CList; assert ! (a < b)
b = [2, -1, 0] as CList; assert ! (a < b)
b = [2, -1, 0, -17] as CList; assert (a < b)
a = [2, 8, 0] as CList; assert ! (a < b)

View file

@ -0,0 +1,2 @@
Prelude> [1,2,1,3,2] < [1,2,0,4,4,0,0,0]
False

View file

@ -0,0 +1,11 @@
procedure main()
write( if list_llt([1,2,1,3,2],[1,2,0,4,4,0,0,0]) then "true" else "false" )
end
procedure list_llt(L1,L2) #: returns L2 if L1 lexically lt L2 or fails
every i := 1 to min(*L1,*L2) do
if L1[i] << L2[i] then return L2
else if L1[i] >> L2[i] then fail
if *L1 < *L2 then return L2
end

View file

@ -0,0 +1 @@
before=: -.@(-: /:~)@,&<~

View file

@ -0,0 +1 @@
cmp=: {.@\:@,:&(,&__)

View file

@ -0,0 +1,29 @@
cmp&.>"{~ ('';0;(,0);1;(,1);1 1)
┌─┬─┬─┬─┬─┬─┐
│0│1│1│1│1│1│
├─┼─┼─┼─┼─┼─┤
│0│0│0│1│1│1│
├─┼─┼─┼─┼─┼─┤
│0│0│0│1│1│1│
├─┼─┼─┼─┼─┼─┤
│0│0│0│0│0│1│
├─┼─┼─┼─┼─┼─┤
│0│0│0│0│0│1│
├─┼─┼─┼─┼─┼─┤
│0│0│0│0│0│0│
└─┴─┴─┴─┴─┴─┘
before&.>"{~ (0;1;'';(,0);(,1);1 1)
┌─┬─┬─┬─┬─┬─┐
│0│1│1│1│1│1│
├─┼─┼─┼─┼─┼─┤
│0│0│1│1│1│1│
├─┼─┼─┼─┼─┼─┤
│0│0│0│1│1│1│
├─┼─┼─┼─┼─┼─┤
│0│0│0│0│1│1│
├─┼─┼─┼─┼─┼─┤
│0│0│0│0│0│1│
├─┼─┼─┼─┼─┼─┤
│0│0│0│0│0│0│
└─┴─┴─┴─┴─┴─┘

View file

@ -0,0 +1,34 @@
import java.util.Arrays;
import java.util.List;
public class ListOrder{
public static boolean ordered(double[] first, double[] second){
if(first.length == 0) return true;
if(second.length == 0) return false;
if(first[0] == second[0])
return ordered(Arrays.copyOfRange(first, 1, first.length),
Arrays.copyOfRange(second, 1, second.length));
return first[0] < second[0];
}
public static <T extends Comparable<? super T>> boolean ordered(List<T> first, List<T> second){
int i = 0;
for(; i < first.size() && i < second.size();i++){
int cmp = first.get(i).compareTo(second.get(i));
if(cmp == 0) continue;
if(cmp < 0) return true;
return false;
}
return i == first.size();
}
public static boolean ordered2(double[] first, double[] second){
int i = 0;
for(; i < first.length && i < second.length;i++){
if(first[i] == second[i]) continue;
if(first[i] < second[i]) return true;
return false;
}
return i == first.length;
}
}

View file

@ -0,0 +1,17 @@
(() => {
'use strict';
// <= is already defined for lists in JS
// compare :: [a] -> [a] -> Bool
const compare = (xs, ys) => xs <= ys;
// TEST
return [
compare([1, 2, 1, 3, 2], [1, 2, 0, 4, 4, 0, 0, 0]),
compare([1, 2, 0, 4, 4, 0, 0, 0], [1, 2, 1, 3, 2])
];
// --> [false, true]
})()

View file

@ -0,0 +1 @@
[false, true]

View file

@ -0,0 +1,4 @@
DEFINE order ==
[equal] [false]
[[[[size] dip size <=] [[<=] mapr2 true [and] fold]] [i] map i and]
ifte.

View file

@ -0,0 +1,3 @@
[1,2,3] < [1,2,3,4] # => true
[1,2,3] < [1,2,4] # => true
[1,2,3] < [1,2,3] # => false

View file

@ -0,0 +1,13 @@
function islexless(a::AbstractArray{<:Real}, b::AbstractArray{<:Real})
for (x, y) in zip(a, b)
if x == y continue end
return x < y
end
return length(a) < length(b)
end
using Primes, Combinatorics
tests = [[1, 2, 3], primes(10), 0:2:6, [-Inf, 0.0, Inf], [π, e, φ, catalan], [2015, 5], [-sqrt(50.0), 50.0 ^ 2]]
println("List not sorted:\n - ", join(tests, "\n - "))
sort!(tests; lt=islexless)
println("List sorted:\n - ", join(tests, "\n - "))

View file

@ -0,0 +1,9 @@
include ..\Utilitys.tlhy
( 1 2 3 ) ( 1 2 3 4 ) less ?
( 1 2 3 4 ) ( 1 2 3 ) less ?
( 1 2 4 ) ( 1 2 3 ) less ?
( 1 2 3 ) ( 1 2 3 ) less ?
( 1 2 3 ) ( 1 2 4 ) less ?
"End " input

View file

@ -0,0 +1,28 @@
// version 1.0.6
operator fun <T> List<T>.compareTo(other: List<T>): Int
where T: Comparable<T>, T: Number {
for (i in 0 until this.size) {
if (other.size == i) return 1
when {
this[i] < other[i] -> return -1
this[i] > other[i] -> return 1
}
}
return if (this.size == other.size) 0 else -1
}
fun main(args: Array<String>) {
val lists = listOf(
listOf(1, 2, 3, 4, 5),
listOf(1, 2, 1, 5, 2, 2),
listOf(1, 2, 1, 5, 2),
listOf(1, 2, 1, 5, 2),
listOf(1, 2, 1, 3, 2),
listOf(1, 2, 0, 4, 4, 0, 0, 0),
listOf(1, 2, 0, 4, 4, 1, 0, 0)
)
for (i in 0 until lists.size) println("list${i + 1} : ${lists[i]}")
println()
for (i in 0 until lists.size - 1) println("list${i + 1} > list${i + 2} = ${lists[i] > lists[i + 1]}")
}

View file

@ -0,0 +1,11 @@
local(
first = array(1,2,1,3,2),
second = array(1,2,0,4,4,0,0,0),
)
#first < #second
local(
first = array(1,1,1,3,2),
second = array(1,2,0,4,4,0,0,0),
)
#first < #second

View file

@ -0,0 +1,8 @@
print [1 2] = [1 2]
print [1 2] = [1 2 3]
print [1 3] = [1 2]
print [1 2 3] = [1 2]
make "list1 [1 2 3 4 5 6]
make "list2 [1 2 3 4 5 7]
print :list1 = :list2

View file

@ -0,0 +1,5 @@
true
false
false
false
false

View file

@ -0,0 +1,11 @@
function arraycompare(a, b)
for i = 1, #a do
if b[i] == nil then
return true
end
if a[i] ~= b[i] then
return a[i] < b[1]
end
end
return true
end

View file

@ -0,0 +1,20 @@
function randomarray()
local t = {}
for i = 1, math.random(1, 10) do
t[i] = math.random(1, 10)
end
return t
end
math.randomseed(os.time())
for i = 1, 10 do
local a = randomarray()
local b = randomarray()
print(
string.format("{%s} %s {%s}",
table.concat(a, ', '),
arraycompare(a, b) and "<=" or ">",
table.concat(b, ', ')))
end

View file

@ -0,0 +1,10 @@
orderLists := proc(num1,num2)
local len1, len2,i:
len1,len2 := numelems(num1),numelems(num2):
for i to min(len1,len2) do
if num1[i] <> num2[i] then
return evalb(num1[i]<num2[i]):
end if:
end do:
return evalb(len1 < len2):
end proc:

View file

@ -0,0 +1,8 @@
order[List1_, List2_] := With[{
L1 = List1[[1 ;; Min @@ Length /@ {List1, List2}]],
L2 = List2[[1 ;; Min @@ Length /@ {List1, List2}]]
},
If [Thread[Order[L1, L2]] == 0,
Length[List1] < Length[List2],
Thread[Order[L1, L2]] == 1
]]

View file

@ -0,0 +1,13 @@
"<<"(a,b):=block([n:min(length(a),length(b))],
catch(for i thru n do (if a[i]#b[i] then throw(is(a[i]<b[i]))),
throw(is(length(a)<length(b)))))$
infix("<<")$
[1,2,3] << [1,2,4];
true
[1,2,3] << [1,2];
false
[1,2] << [1,2];
false

View file

@ -0,0 +1,3 @@
:- pred lt(list(int)::in, list(int)::in) is semidet.
lt([], [_|_]).
lt([H1|T1], [H2|T2]) :- H1 =< H2, T1 `lt` T2.

View file

@ -0,0 +1,3 @@
:- pred lt(list(T)::in, list(T)::in) is semidet <= comparable(T).
lt([], [_|_]).
lt([H1|T1], [H2|T2]) :- H1 =< H2, T1 `lt` T2.

View file

@ -0,0 +1,27 @@
:- module comparable.
:- interface.
:- import_module int, float, integer, list.
:- typeclass comparable(T) where [
pred '<'(T::in, T::in) is semidet,
pred '=<'(T::in, T::in) is semidet
].
:- instance comparable(int).
:- instance comparable(float).
:- instance comparable(integer).
:- instance comparable(list(T)) <= comparable(T).
:- implementation.
:- instance comparable(int) where [
pred('<'/2) is int.(<),
pred('=<'/2) is int.(=<)
].
% likewise for float and integer...
:- instance comparable(list(T)) <= comparable(T) where [
pred('<'/2) is lt, % the 'lt' above.
pred('=<'/2) is lte % 'lt' with: lte([], []).
].
% pred lt
% pred lte

View file

@ -0,0 +1,6 @@
:- pred test(list(T), list(T), io, io) <= comparable(T).
:- mode test(in, in, di, uo) is det.
test(A, B) -->
io.write(A), io.write_string(" < "), io.write(B),
io.write_string(" : "), io.write_string(S), io.nl,
{ A < B -> S = "yes" ; S = "no" }.

View file

@ -0,0 +1,10 @@
main :: [sys_message]
main = [Stdout (lay (map show [
order [1,2,1,3,2] [1,2,0,4,4,0,0,0],
order [1,2,0,4,4,0,0,0] [1,2,1,3,2]]))]
order :: [*]->[*]->bool
order as [] = True
order [] as = False
order (a:as) (b:bs) = a < b, if a ~= b
= order as bs, otherwise

View file

@ -0,0 +1,7 @@
proc `<`[T](a, b: openarray[T]): bool =
for i in 0 .. min(a.len, b.len):
if a[i] < b[i]: return true
if a[i] > b[i]: return false
return a.len < b.len
echo([1,2,1,3,2] < [1,2,0,4,4,0,0,0])

View file

@ -0,0 +1,2 @@
# [1;2;1;3;2] < [1;2;0;4;4;0;0;0];;
- : bool = false

View file

@ -0,0 +1,2 @@
# [|1;2;1;3;2|] < [|1;2;0;4;4;0;0;0|];;
- : bool = true

View file

@ -0,0 +1,8 @@
let rec ordered_lists = function
| x1::tl1, x2::tl2 ->
(match compare x1 x2 with
| 0 -> ordered_lists (tl1, tl2)
| 1 -> false
| _ -> true)
| [], _ -> true
| _ -> false

View file

@ -0,0 +1,20 @@
(* copy-paste the code of ordered_lists here *)
let make_num_list p n =
let rec aux acc =
if Random.int p = 0 then acc
else aux (Random.int n :: acc)
in
aux []
let print_num_list lst =
List.iter (Printf.printf " %d") lst;
print_newline()
let () =
Random.self_init();
let lst1 = make_num_list 8 5 in
let lst2 = make_num_list 8 5 in
print_num_list lst1;
print_num_list lst2;
Printf.printf "ordered: %B\n" (ordered_lists (lst1, lst2))

View file

@ -0,0 +1 @@
val ordered_lists : 'a list * 'a list -> bool

View file

@ -0,0 +1,14 @@
(define (lexorder a b)
(cond
((null? b) #false)
((null? a) #true)
((< (car a) (car b)) #true)
((> (car a) (car b)) #false)
(else
(lexorder (cdr a) (cdr b)))))
(print (lexorder '(1 2 3) '(1 2 3 4))) ; => true
(print (lexorder '(1 2 4) '(1 2 3))) ; => false
(print (lexorder '(1 2 3) '(1 2))) ; => false
(print (lexorder '(1 2 3) '(1 2 3))) ; => false
(print (lexorder '(1 2 3) '(1 2 8))) ; => true

View file

@ -0,0 +1 @@
lex(u,v)<1

View file

@ -0,0 +1,22 @@
lists: procedure options (main); /* 8 June 2014 */
declare a(10) fixed initial (1, 2, 3, 4, 5, 8, 9, 10, 16, 17),
b(15) fixed initial (5, 6, 7, 8, 9, 10, 11, 12, 15, 16, 17, 18, 20, 22, 23);
put skip list (compare(a, b));
put skip list (compare(b, a));
put skip list (compare(a, a));
compare: procedure (a, b) returns (bit (1));
declare (a, b)(*) fixed;
declare (i, m, n) fixed binary;
m = hbound(a,1); n = hbound(b,1);
do i = 1 to min(m, n);
return (a(i) < b(i));
end;
return (m < n);
end compare;
end lists;

View file

@ -0,0 +1,38 @@
use strict;
use warnings;
sub orderlists {
my ($firstlist, $secondlist) = @_;
my ($first, $second);
while (@{$firstlist}) {
$first = shift @{$firstlist};
if (@{$secondlist}) {
$second = shift @{$secondlist};
if ($first < $second) {
return 1;
}
if ($first > $second) {
return 0;
}
}
else {
return 0;
}
}
@{$secondlist} ? 1 : 0;
}
foreach my $pair (
[[1, 2, 4], [1, 2, 4]],
[[1, 2, 4], [1, 2, ]],
[[1, 2, ], [1, 2, 4]],
[[55,53,1], [55,62,83]],
[[20,40,51],[20,17,78,34]],
) {
my $first = $pair->[0];
my $second = $pair->[1];
my $before = orderlists([@$first], [@$second]) ? 'true' : 'false';
print "(@$first) comes before (@$second) : $before\n";
}

View file

@ -0,0 +1,8 @@
(phixonline)-->
<span style="color: #008080;">with</span> <span style="color: #008080;">javascript_semantics</span>
<span style="color: #0000FF;">?{</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">2</span><span style="color: #0000FF;">,</span><span style="color: #000000;">3</span><span style="color: #0000FF;">}<{</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">2</span><span style="color: #0000FF;">,</span><span style="color: #000000;">3</span><span style="color: #0000FF;">,</span><span style="color: #000000;">4</span><span style="color: #0000FF;">}</span> <span style="color: #000080;font-style:italic;">-- 1 (true under p2js)</span>
<span style="color: #0000FF;">?{</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">2</span><span style="color: #0000FF;">,</span><span style="color: #000000;">3</span><span style="color: #0000FF;">,</span><span style="color: #000000;">4</span><span style="color: #0000FF;">}<{</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">2</span><span style="color: #0000FF;">,</span><span style="color: #000000;">3</span><span style="color: #0000FF;">}</span> <span style="color: #000080;font-style:italic;">-- 0 (false "")</span>
<span style="color: #0000FF;">?{</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">2</span><span style="color: #0000FF;">,</span><span style="color: #000000;">4</span><span style="color: #0000FF;">}<{</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">2</span><span style="color: #0000FF;">,</span><span style="color: #000000;">3</span><span style="color: #0000FF;">}</span> <span style="color: #000080;font-style:italic;">-- 0 (false "")</span>
<span style="color: #0000FF;">?{</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">2</span><span style="color: #0000FF;">,</span><span style="color: #000000;">3</span><span style="color: #0000FF;">}<{</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">2</span><span style="color: #0000FF;">,</span><span style="color: #000000;">3</span><span style="color: #0000FF;">}</span> <span style="color: #000080;font-style:italic;">-- 0 (false "")</span>
<span style="color: #0000FF;">?{</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">2</span><span style="color: #0000FF;">,</span><span style="color: #000000;">3</span><span style="color: #0000FF;">}<{</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">2</span><span style="color: #0000FF;">,</span><span style="color: #000000;">4</span><span style="color: #0000FF;">}</span> <span style="color: #000080;font-style:italic;">-- 1 (true "")</span>
<!--

View file

@ -0,0 +1,9 @@
include Utilitys.pmt
def ? print nl enddef
( 1 2 3 ) ( 1 2 3 4 ) < ?
( 1 2 3 4 ) ( 1 2 3 ) < ?
( 1 2 4 ) ( 1 2 3 ) < ?
( 1 2 3 ) ( 1 2 3 ) < ?
( 1 2 3 ) ( 1 2 4 ) < ?

View file

@ -0,0 +1,17 @@
go =>
Tests = [
[[1,2,3], [1,2,3]],
[[1,2,3], [1,2,3,4]],
[[1,2,2], [1,2,3]],
[[1,2,4], [1,2,3]],
[1..10 , 1..8],
[[] , []],
[[] , [1]],
[[1] , [] ],
[[-1,2,3,6,5],[-1,2,3,5,6]],
[[-1,2,3,-5,6],[-1,2,3,-6,5]]
],
foreach([L1,L2] in Tests)
printf("%w @< %w: %w\n",L1,L2,cond(L1 @< L2,true,false))
end,
nl.

View file

@ -0,0 +1,2 @@
: (> (1 2 0 4 4 0 0 0) (1 2 1 3 2))
-> NIL

View file

@ -0,0 +1,8 @@
int(0..1) order_array(array a, array b)
{
if (!sizeof(a)) return true;
if (!sizeof(b)) return false;
if (a[0] == b[0])
return order_array(a[1..], b[1..]);
return a[0] < b[0];
}

View file

@ -0,0 +1 @@
(string)a < (string)b;

View file

@ -0,0 +1,9 @@
function order($as,$bs) {
if($as -and $bs) {
$a, $as = $as
$b, $bs = $bs
if($a -eq $b) {order $as $bs}
else{$a -lt $b}
} elseif ($bs) {$true} else {$false}
}
"$(order @(1,2,1,3,2) @(1,2,0,4,4,0,0,0))"

View file

@ -0,0 +1,16 @@
function Test-Order ([int[]]$ReferenceArray, [int[]]$DifferenceArray)
{
for ($i = 0; $i -lt $ReferenceArray.Count; $i++)
{
if ($ReferenceArray[$i] -lt $DifferenceArray[$i])
{
return $true
}
elseif ($ReferenceArray[$i] -gt $DifferenceArray[$i])
{
return $false
}
}
return ($ReferenceArray.Count -lt $DifferenceArray.Count) -or (Compare-Object $ReferenceArray $DifferenceArray) -eq $null
}

View file

@ -0,0 +1,5 @@
Test-Order -ReferenceArray 1, 2, 1, 3, 2 -DifferenceArray 1, 2, 0, 4, 4, 0, 0, 0
Test-Order -ReferenceArray 1, 2, 1, 3, 2 -DifferenceArray 1, 2, 2, 4, 4, 0, 0, 0
Test-Order -ReferenceArray 1, 2, 3 -DifferenceArray 1, 2
Test-Order -ReferenceArray 1, 2 -DifferenceArray 1, 2, 3
Test-Order -ReferenceArray 1, 2 -DifferenceArray 1, 2

View file

@ -0,0 +1,70 @@
DataSection
Array_1:
Data.i 5 ;element count
Data.i 1, 2, 3, 4, 5 ;element data
Array_2:
Data.i 6
Data.i 1, 2, 1, 5, 2, 2
Array_3:
Data.i 5
Data.i 1, 2, 1, 5, 2
Array_4:
Data.i 5
Data.i 1, 2, 1, 5, 2
Array_5:
Data.i 4
Data.i 1, 2, 1, 6
Array_6:
Data.i 5
Data.i 1, 2, 1, 6, 2
EndDataSection
#False = 0
#True = 1
;helper subrountine to initialize a dataset, *dataPtr points to the elementcount followed by the element data
Procedure initArrayData(Array a(1), *dataPtr)
Protected elementCount = PeekI(*dataPtr)
Dim a(elementCount - 1)
For i = 0 To elementCount - 1
*dataPtr + SizeOf(Integer)
a(i) = PeekI(*dataPtr)
Next
EndProcedure
;helper subroutine that returns 'True' or 'False' for a boolean input
Procedure.s booleanText(b)
If b: ProcedureReturn "True": EndIf
ProcedureReturn "False"
EndProcedure
Procedure order(Array a(1), Array b(1))
Protected len_a = ArraySize(a()), len_b = ArraySize(b()), elementIndex
While elementIndex <= len_a And elementIndex <= len_b And a(elementIndex) = b(elementIndex)
elementIndex + 1
Wend
If (elementIndex > len_a And elementIndex <= len_b) Or (elementIndex <= len_b And a(elementIndex) <= b(elementIndex))
ProcedureReturn #True
EndIf
EndProcedure
Dim A_1(0): initArrayData(A_1(), ?Array_1)
Dim A_2(0): initArrayData(A_2(), ?Array_2)
Dim A_3(0): initArrayData(A_3(), ?Array_3)
Dim A_4(0): initArrayData(A_4(), ?Array_4)
Dim A_5(0): initArrayData(A_5(), ?Array_5)
Dim A_6(0): initArrayData(A_6(), ?Array_6)
If OpenConsole()
PrintN(booleanText(order(A_1(), A_2()))) ;False
PrintN(booleanText(order(A_2(), A_3()))) ;False
PrintN(booleanText(order(A_3(), A_4()))) ;False
PrintN(booleanText(order(A_4(), A_5()))) ;True
PrintN(booleanText(order(A_5(), A_6()))) ;True
Print(#crlf$ + #crlf$ + "Press ENTER to exit"): Input()
CloseConsole()
EndIf

View file

@ -0,0 +1,2 @@
>>> [1,2,1,3,2] < [1,2,0,4,4,0,0,0]
False

View file

@ -0,0 +1,11 @@
[ [ over [] = iff false done
dup [] = iff true done
behead rot behead rot
2dup = iff
[ 2drop swap ] again
> ]
unrot 2drop ] is []< ( [ [ --> b )
' [ [ ] [ 1 ] [ 1 1 1 ] [ 1 2 ] [ 1 2 1 ] [ 2 ] [ 2 1 ] [ 2 1 1 ] ]
shuffle sortwith []< echo

View file

@ -0,0 +1,24 @@
/*REXX program determines if a list < previous list, and returns true or false. */
@.=; @.1 = 1 2 1 5 2
@.2 = 1 2 1 5 2 2
@.3 = 1 2 3 4 5
@.4 = 1 2 3 4 5
/* [↓] compare a list to previous list*/
do j=2 while @.j\==''; p= j - 1 /*P: points to previous value in list.*/
if FNorder(@.p, @.j)=='true' then is= " < " /*use a more familiar glyph.*/
else is= "" /* " " " " " */
say
say right('['@.p"]", 40) is '['@.j"]"
end /*i*/
exit /*stick a fork in it, we're all done. */
/*──────────────────────────────────────────────────────────────────────────────────────*/
FNorder: procedure; parse arg x,y
wx= words(x); wy= words(y)
do k=1 for min(wx, wy)
a= word(x, k) /*get a value from X. */
b= word(y, k) /* " " " " Y. */
if a<b then return 'true'
else if a>b then return 'false'
end /*k*/
if wx<wy then return 'true' /*handle case of equal (so far). */
return 'false' /* " " " " " " */

View file

@ -0,0 +1,9 @@
#lang racket
(define (lex<? a b)
(cond ((null? b) #f)
((null? a) #t)
((= (car a) (car b)) (lex<? (cdr a) (cdr b)))
(else (< (car a) (car b)))))
(lex<? '(1 2 3 4 5) '(1 2 3 4 4)) ; -> #f

View file

@ -0,0 +1,17 @@
my @a = <1 2 4>;
my @b = <1 2 4>;
say @a," before ",@b," = ", @a before @b;
@a = <1 2 4>;
@b = <1 2>;
say @a," before ",@b," = ", @a before @b;
@a = <1 2>;
@b = <1 2 4>;
say @a," before ",@b," = ", @a before @b;
for 1..10 {
my @a = flat (^100).roll((2..3).pick);
my @b = flat @a.map: { Bool.pick ?? $_ !! (^100).roll((0..2).pick) }
say @a," before ",@b," = ", @a before @b;
}

View file

@ -0,0 +1,2 @@
rascal>[2,1,3] < [5,2,1,3]
bool: true

View file

@ -0,0 +1,19 @@
list1 = "1, 2, 1, 5, 2"
list2 = "5, 2, 1, 5, 2, 2"
list3 = "1, 2, 3, 4, 5"
list4 = "1, 2, 3, 4, 5"
if order(list1, list2) = 0 see "list1=list2" + nl
but order(list1, list2) < 0 see "list1<list2" + nl
else see "list1>list2" + nl ok
if order(list2, list3) = 0 see "list2=list3" + nl
but order(list2, list3) < 0 see "list2<list3" + nl
else see "list2>list3" + nl ok
if order(list3, list4) = 0 see "list3=list4" + nl
but order(list3, list4) < 0 see "list3<list4" + nl
else see "list3>list4" + nl ok
func order alist, blist
return strcmp(alist, blist)

View file

@ -0,0 +1,2 @@
>> ([1,2,1,3,2] <=> [1,2,0,4,4,0,0,0]) < 0
=> false

View file

@ -0,0 +1 @@
vec![1, 2, 1, 3, 2] < vec![1, 2, 0, 4, 4, 0, 0, 0]

View file

@ -0,0 +1,5 @@
def lessThan1(a: List[Int], b: List[Int]): Boolean =
if (b.isEmpty) false
else if (a.isEmpty) true
else if (a.head != b.head) a.head < b.head
else lessThan1(a.tail, b.tail)

View file

@ -0,0 +1,6 @@
def lessThan2(a: List[Int], b: List[Int]): Boolean = (a, b) match {
case (_, Nil) => false
case (Nil, _) => true
case (a :: _, b :: _) if a != b => a < b
case _ => lessThan2(a.tail, b.tail)
}

View file

@ -0,0 +1,5 @@
def lessThan3(a: List[Int], b: List[Int]): Boolean =
a.zipAll(b, Integer.MIN_VALUE, Integer.MIN_VALUE)
.find{case (a, b) => a != b}
.map{case (a, b) => a < b}
.getOrElse(false)

View file

@ -0,0 +1,14 @@
val tests = List(
(List(1, 2, 3), List(1, 2, 3)) -> false,
(List(3, 2, 1), List(3, 2, 1)) -> false,
(List(1, 2, 3), List(3, 2, 1)) -> true,
(List(3, 2, 1), List(1, 2, 3)) -> false,
(List(1, 2), List(1, 2, 3)) -> true,
(List(1, 2, 3), List(1, 2)) -> false
)
tests.foreach{case test @ ((a, b), c) =>
assert(lessThan1(a, b) == c, test)
assert(lessThan2(a, b) == c, test)
assert(lessThan3(a, b) == c, test)
}

View file

@ -0,0 +1,5 @@
(define (lex<? a b)
(cond ((null? b) #f)
((null? a) #t)
((= (car a) (car b)) (lex<? (cdr a) (cdr b)))
(else (< (car a) (car b)))))

View file

@ -0,0 +1,13 @@
$ include "seed7_05.s7i";
const proc: main is func
begin
writeln([] (1) < [] (1, 2)); # If the first list runs out of elements the result is TRUE.
writeln([] (1, 2) < [] (1)); # If the second list runs out of elements the result is FALSE.
writeln([] (1, 2) < [] (1, 2)); # If both lists run out of elements the result is FALSE.
writeln([] (1, 2, 3) < [] (1, 1, 3)); # The second element is greater than --> FALSE
writeln([] (1, 2, 3) < [] (1, 3, 3)); # The second element is less than --> TRUE
writeln(0 times 0 < [] (1)); # The empty list is less than any nonempty list --> TRUE
writeln([] (1) < 0 times 0); # Any nonempty list is not less than the empty list --> FALSE
writeln(0 times 0 < 0 times 0); # The empty list is not less than the empty list --> FALSE
end func;

View file

@ -0,0 +1,14 @@
func ordered(a, b) {
(a <=> b) < 0
}
for p in [
Pair([1,2,4], [1,2,4]),
Pair([1,2,4], [1,2] ),
Pair([1,2], [1,2,4]),
] {
var a = p.first
var b = p.second
var before = ordered(a, b)
say "#{a} comes before #{b} : #{before}"
}

View file

@ -0,0 +1,2 @@
- List.collate Int.compare ([1,2,1,3,2], [1,2,0,4,4,0,0,0]) = LESS;
val it = false : bool

Some files were not shown because too many files have changed in this diff Show more