Minimum numbers of three lists
- Task
Given three lists:
- Numbers1 = [5,45,23,21,67]
- Numbers2 = [43,22,78,46,38]
- Numbers3 = [9,98,12,98,53]
then:
- Select the minimum of Numbers[n], Numbers2[n] and Numbers3[n], where n <= 5 (one based).
- Add minimum to a new list (Numbers).
- 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
<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
<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]
Julia
Computed in the REPL, using matrix functions. <lang julia> julia> Numbers1 = [5,45,23,21,67] 5-element Vector{Int64}:
5 45 23 21 67
julia> Numbers2 = [43,22,78,46,38] 5-element Vector{Int64}:
43 22 78 46 38
julia> Numbers3 = [9,98,12,98,53] 5-element Vector{Int64}:
9 98 12 98 53
julia> mat = hcat(Numbers1, Numbers2, Numbers3) 5×3 Matrix{Int64}:
5 43 9 45 22 98 23 78 12 21 46 98 67 38 53
julia> minimum(mat, dims=2) 5×1 Matrix{Int64}:
5 22 12 21 38
</lang>
Perl
<lang perl>use strict; use warnings; use List::Util 'min';
my @lists = ([5,45,23,21,67], [43,22,78,46,38], [9,98,12,98,53]);
for my $i (0 .. $#{ $lists[0] }) {
print ' ' . min map { $lists[$_][$i] } 0..$#lists;
}</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..."
Num1 = [ 5,45,23,21,67] Num2 = [43,22,78,46,38] Num3 = [ 9,98,12,98,53] n = len(Num1) Nums = list(n)
for i = 1 to n
Nums[i] = string(min([Num1[i], Num2[i], Num3[i]]))
next
? "The minimum numbers of three lists = " + fmtArray(Nums) put "done..."
func fmtArray(ar)
rv = ar[1] for n = 2 to len(ar) rv += "," + ar[n] next return "[" + rv + "]"</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]