Minimum numbers of three lists: Difference between revisions

From Rosetta Code
Content added Content deleted
(→‎{{header|Raku}}: Added Raku solution)
(Added Algol W)
Line 50: Line 50:
show( min( ( numbers1, numbers2, numbers3 ) ) )
show( min( ( numbers1, numbers2, numbers3 ) ) )
END</lang>
END</lang>
{{out}}
<pre>
5 22 12 21 38
</pre>

=={{header|ALGOL W}}==
<lang algolw>begin % show the minimum elements of three lists %
integer array numbers1, numbers2, numbers3 ( 1 :: 5 );
integer pos;
pos := 1; for v := 5, 45, 23, 21, 67 do begin numbers1( pos ) := v; pos := pos + 1 end;
pos := 1; for v := 43, 22, 78, 46, 38 do begin numbers2( pos ) := v; pos := pos + 1 end;
pos := 1; for v := 9, 98, 12, 98, 53 do begin numbers3( pos ) := v; pos := pos + 1 end;
for i := 1 until 5 do begin
integer m;
m := numbers1( i );
if numbers2( i ) < m then m := numbers2( i );
if numbers3( i ) < m then m := numbers3( i );
writeon( i_w := 1, s_w := 0, " ", m )
end for_i;
end.</lang>
{{out}}
{{out}}
<pre>
<pre>

Revision as of 18:14, 26 October 2021

Minimum numbers of three lists is a draft programming task. It is not yet considered ready to be promoted as a complete task, for reasons that should be found in its talk page.
Task


Given three lists:

  • Numbers1 = [5,45,23,21,67]
  • Numbers2 = [43,22,78,46,38]
  • Numbers3 = [9,98,12,98,53]


then:

  1. Select the minimum of Numbers[n], Numbers2[n] and Numbers3[n], where n <= 5 (one based).
  2. Add minimum to a new list (Numbers).
  3. Show Numbers on this page.



ALGOL 68

Generallising a little... <lang algol68>BEGIN # construct a list of the minimum values of some other lists #

   # lists are represented by arrays in this sample #
   # returns a list composed of the minimum values of the lists in lists #
   #         the lists must all have te same bounds #
   PROC min = ( []REF[]INT lists )[]INT:
        IF   LWB lists > UPB lists
        THEN # no lists #
             []INT()
        ELIF INT l length = ( UPB lists[ LWB lists ] + 1 ) - LWB lists[ LWB lists ];
             l length < 1
        THEN # the lists are empty #
             []INT()
        ELSE # have some elements in the lists #
             [ 1 : l length ]INT result;
             INT r pos  := 0;
             FOR i FROM LWB lists[ LWB lists ] TO UPB lists[ LWB lists ] DO
                 INT l min := lists[ LWB lists ][ i ];
                 FOR j FROM LWB lists + 1 TO UPB lists DO
                     IF l min > lists[ j ][ i ] THEN l min := lists[ j ][ i ] FI
                 OD;
                 result[ r pos +:= 1 ] := l min
             OD;
             result
        FI # min # ;
   # displays a list of numbers #
   PROC show = ( []INT list )VOID:
       FOR i FROM LWB list TO UPB list DO print( ( " ", whole( list[ i ], 0 ) ) ) OD;
   # construct the lists of numbers required by the task #
   REF[]INT numbers1 = HEAP[ 1 : 5 ]INT := (  5, 45, 23, 21, 67 );
   REF[]INT numbers2 = HEAP[ 1 : 5 ]INT := ( 43, 22, 78, 46, 38 );
   REF[]INT numbers3 = HEAP[ 1 : 5 ]INT := (  9, 98, 12, 98, 53 );
   # display the minimum values for each element in the lists #
   show( min( ( numbers1, numbers2, numbers3 ) ) )

END</lang>

Output:
 5 22 12 21 38

ALGOL W

<lang algolw>begin % show the minimum elements of three lists %

   integer array numbers1, numbers2, numbers3 ( 1 :: 5 );
   integer pos;
   pos := 1; for v :=  5, 45, 23, 21, 67 do begin numbers1( pos ) := v; pos := pos + 1 end;
   pos := 1; for v := 43, 22, 78, 46, 38 do begin numbers2( pos ) := v; pos := pos + 1 end;
   pos := 1; for v :=  9, 98, 12, 98, 53 do begin numbers3( pos ) := v; pos := pos + 1 end;
   for i := 1 until 5 do begin
       integer m;
       m := numbers1( i );
       if numbers2( i ) < m then m := numbers2( i );
       if numbers3( i ) < m then m := numbers3( i );
       writeon( i_w := 1, s_w := 0, " ", m )
   end for_i;

end.</lang>

Output:
 5 22 12 21 38

C

<lang c>#include <stdio.h>

int min(int a, int b) {

   if (a < b) return a;
   return b;

}

int main() {

   int n;
   int numbers1[5] = {5, 45, 23, 21, 67};
   int numbers2[5] = {43, 22, 78, 46, 38};
   int numbers3[5] = {9, 98, 12, 98, 53};
   int numbers[5]  = {};
   for (n = 0; n < 5; ++n) {
       numbers[n] = min(min(numbers1[n], numbers2[n]), numbers3[n]);
       printf("%d ", numbers[n]);
   }
   printf("\n");
   return 0;

}</lang>

Output:
5 22 12 21 38 

F#

<lang fsharp> // Minimum numbers of three lists. Nigel Galloway: October 26th., 2021 let N1,N2,N3=[5;45;23;21;67],[43;22;78;46;38],[9;98;12;98;53] printfn "%A" (List.zip3 N1 N2 N3|>List.map(fun(n,g,l)->min (min n g) l)) </lang>

Output:
[5; 22; 12; 21; 38]

Factor

Works with: Factor version 0.99 2021-06-02

<lang factor>USING: arrays sequences prettyprint ;

{ 5 45 23 21 67 } { 43 22 78 46 38 } { 9 98 12 98 53 } 3array flip [ infimum ] map .</lang>

Output:
{ 5 22 12 21 38 }

Go

Library: Go-rcu

<lang go>package main

import (

   "fmt"
   "rcu"

)

func main() {

   numbers1 := [5]int{5, 45, 23, 21, 67}
   numbers2 := [5]int{43, 22, 78, 46, 38}
   numbers3 := [5]int{9, 98, 12, 98, 53}
   numbers := [5]int{}
   for n := 0; n < 5; n++ {
       numbers[n] = rcu.Min(rcu.Min(numbers1[n], numbers2[n]), numbers3[n])
   }
   fmt.Println(numbers)

}</lang>

Output:
[5 22 12 21 38]

Raku

<lang perl6>say [Zmin] (5,45,23,21,67), (43,22,78,46,38), (9,98,12,98,53);</lang>

Output:
(5 22 12 21 38)

Red

<lang rebol>Red [

   Red-version: 0.6.4
   Description: "Find the element-wise minimum of three lists"

]

numbers1: [5 45 23 21 67] numbers2: [43 22 78 46 38] numbers3: [9 98 12 98 53] length: length? numbers1 result: append/dup [] 0 length repeat i length [

   result/:i: min min numbers1/:i numbers2/:i numbers3/:i

] print result</lang>

Output:
5 22 12 21 38

Ring

<lang ring> see "working..." + nl

Numbers = [] Numbers1 = [5,45,23,21,67] Numbers2 = [43,22,78,46,38] Numbers3 = [9,98,12,98,53]

for n = 1 to len(Numbers1)

   Temp = []
   add(Temp,Numbers1[n])
   add(Temp,Numbers2[n])
   add(Temp,Numbers3[n])
   min = min(Temp)
   add(Numbers,min)

next

see "The minimum numbers of three lists = " see showArray(Numbers) see nl + "done..." + nl

func showArray(array)

    txt = ""
    see "["
    for n = 1 to len(array)
        txt = txt + array[n] + ","
    next
    txt = left(txt,len(txt)-1)
    txt = txt + "]"
    see txt 

</lang>

Output:
working...
The minimum numbers of three lists = [5,22,12,21,38]
done...

Wren

<lang ecmascript>var numbers1 = [ 5, 45, 23, 21, 67] var numbers2 = [43, 22, 78, 46, 38] var numbers3 = [ 9, 98, 12, 98, 53] var numbers = List.filled(5, 0) for (n in 0..4) numbers[n] = numbers1[n].min(numbers2[n]).min(numbers3[n]) System.print(numbers)</lang>

Output:
[5, 22, 12, 21, 38]