Append numbers at same position in strings: Difference between revisions

From Rosetta Code
Content added Content deleted
(added AWK)
Line 201: Line 201:


=={{header|Python}}==
=={{header|Python}}==
<lang python>from functools import reduce
<lang python>list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]

list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
list2 = [10, 11, 12, 13, 14, 15, 16, 17, 18]
list2 = [10, 11, 12, 13, 14, 15, 16, 17, 18]
list3 = [19, 20, 21, 22, 23, 24, 25, 26, 27]
list3 = [19, 20, 21, 22, 23, 24, 25, 26, 27]


print(list(
print([
reduce(lambda x, y: x + y, [str(n) for n in z]) for z
''.join(str(n) for n in z) for z
in zip(list1, list2, list3)
in zip(list1, list2, list3)
))</lang>
])</lang>
{{out}}
{{out}}
<pre>['11019', '21120', '31221', '41322', '51423', '61524', '71625', '81726', '91827']</pre>
<pre>['11019', '21120', '31221', '41322', '51423', '61524', '71625', '81726', '91827']</pre>

Revision as of 22:12, 12 December 2021

Append numbers at same position in strings 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


Let given three list:
list1 = [1,2,3,4,5,6,7,8,9]
list2 = [10,11,12,13,14,15,16,17,18]
list3 = [19,20,21,22,23,24,25,26,27]
Append numbers at same position in strings.
The result should be:
list = [11019,21120,31221,41322,51423,61524,71625,81726,91827]

Ada

<lang Ada>with Ada.Text_Io; with Ada.Strings.Fixed;

procedure Append_Numbers is

  use Ada.Text_Io, Ada.Strings;
  type List_Type is array (Positive range <>) of Natural;
  procedure Put (List : List_Type) is
  begin
     Put ("[");
     for E of List loop
        Put (Natural'Image (E));
     end loop;
     Put ("]");
  end Put;
  List_1 : constant List_Type := ( 1,  2,  3,  4,  5,  6,  7,  8,  9);
  List_2 : constant List_Type := (10, 11, 12, 13, 14, 15, 16, 17, 18);
  List_3 : constant List_Type := (19, 20, 21, 22, 23, 24, 25, 26, 27);
  List   : List_Type (List_1'Range);

begin

  for A in List'Range loop
     List (A) := Natural'Value
       (Fixed.Trim (Natural'Image (List_1 (A)), Left) &
        Fixed.Trim (Natural'Image (List_2 (A)), Left) &
        Fixed.Trim (Natural'Image (List_3 (A)), Left));
  end loop;
  Put (List);  New_Line;

end Append_Numbers;</lang>

Output:
[ 11019 21120 31221 41322 51423 61524 71625 81726 91827]

ALGOL 68

<lang algol68>BEGIN # form a list of strings by concatenating numbers from 3 lists #

   []INT list1 = (  1,  2,  3,  4,  5,  6,  7,  8,  9 )
       , list2 = ( 10, 11, 12, 13, 14, 15, 16, 17, 18 )
       , list3 = ( 19, 20, 21, 22, 23, 24, 25, 26, 27 )
       ;
   [ LWB list1 : UPB list1 ]STRING result;
   FOR i FROM LWB list1 TO UPB list1 DO
       result[ i ] := whole( list1[ i ], 0 ) + whole( list2[ i ], 0 ) + whole( list3[ i ], 0 )
   OD;
   STRING prefix := "[ ";
   FOR i FROM LWB result TO UPB result DO
       print( ( prefix, result[ i ] ) );
       prefix := ", "
   OD;
   print( ( " ]", newline ) )

END</lang>

Output:
[ 11019, 21120, 31221, 41322, 51423, 61524, 71625, 81726, 91827 ]

AutoHotkey

<lang AutoHotkey>list1 := [1,2,3,4,5,6,7,8,9] list2 := [10,11,12,13,14,15,16,17,18] list3 := [19,20,21,22,23,24,25,26,27] list4 := []

for i, v in list1

   list4.Push(v . list2[i] . list3[i])

for i, v in list4

   result .= v ", "

MsgBox % "[" trim(result, ", ") "]"</lang>

Output:
[11019, 21120, 31221, 41322, 51423, 61524, 71625, 81726, 91827]

AWK

<lang AWK>

  1. syntax: GAWK -f APPEND_NUMBERS_AT_SAME_POSITION_IN_STRINGS.AWK

BEGIN {

   n1 = split("1,2,3,4,5,6,7,8,9",list1,",")
   n2 = split("10,11,12,13,14,15,16,17,18",list2,",")
   n3 = split("19,20,21,22,23,24,25,26,27",list3,",")
   if (n1 != n2 || n1 != n3) {
     print("error: arrays must be same length")
     exit(1)
   }
   for (i=1; i<=n1; i++) {
     list[i] = list1[i] list2[i] list3[i]
     printf("%s ",list[i])
   }
   printf("\n")
   exit(0)

} </lang>

Output:
11019 21120 31221 41322 51423 61524 71625 81726 91827

C

<lang c>#include<stdio.h>

  1. include<stdlib.h>

int main(void) {

   int list[3][9], i;
   for(i=0;i<27;i++) list[i/9][i%9]=1+i;
   for(i=0;i<9;i++) printf( "%d%d%d  ", list[0][i], list[1][i], list[2][i] );
   return 0;

}</lang>

Output:
11019  21120  31221  41322  51423  61524  71625  81726  91827

Factor

Works with: Factor version 0.99 2021-06-02

<lang factor>USING: kernel math.parser math.ranges present prettyprint sequences ;

27 [1,b] 9 cut 9 cut [ [ present ] tri@ 3append dec> ] 3map .</lang>

Output:
{ 11019 21120 31221 41322 51423 61524 71625 81726 91827 }

FreeBASIC

<lang freebasic>dim as integer list1(1 to 9) = {1,2,3,4,5,6,7,8,9} dim as integer list2(1 to 9) = {10,11,12,13,14,15,16,17,18} dim as integer list3(1 to 9) = {19,20,21,22,23,24,25,26,27} dim as integer catlist(1 to 9) dim as string temp

for i as uinteger = 1 to 9

   temp = str(list1(i)) + str(list2(i)) + str(list3(i))
   catlist(i) = val(temp)
   print catlist(i);" ";

next i</lang>

Output:
11019  21120  31221  41322  51423  61524  71625  81726  91827

jq

Works with: jq

Works with gojq, the Go implementation of jq <lang jq>def list1 : [ range(1;10) ]; def list2 : [ range(10; 19)]; def list3 : [ range(19; 28) ];

[list1, list2, list3] | transpose | map( map(tostring) | add | tonumber)</lang>

Output:
[11019,21120,31221,41322,51423,61524,71625,81726,91827]


Julia

<lang julia>list1 = [1,2,3,4,5,6,7,8,9] list2 = [10,11,12,13,14,15,16,17,18] list3 = [19,20,21,22,23,24,25,26,27]

println([prod(string(n) for n in z) for z in zip(list1, list2, list3)]) # ["11019", "21120", "31221", "41322", "51423", "61524", "71625", "81726", "91827"] </lang>

Perl

<lang perl>use strict; use warnings;

my @a = < 1 2 3 4 5 6 7 8 9>; my @b = <10 11 12 13 14 15 16 17 18>; my @c = <19 20 21 22 23 24 25 26 27>; my @d = <1 2 2 2 2 2 2 2 2 >; my @e = < 9 0 1 2 3 4 5 6 7>; my @f = (\@a, \@b, \@d, \@e);

  1. for just the three given lists

print $a[$_] . $b[$_] . $c[$_] . ' ' for 0..$#a; print "\n";

  1. for arbitrary number of lists

for my $i (0 .. $#{$f[0]}) {

   map {print $f[$_][$i] } 0 .. $#f and print ' '

} print "\n";</lang>

Output:
11019 21120 31221 41322 51423 61524 71625 81726 91827
11019 21120 31221 41322 51423 61524 71625 81726 91827

Phix

printf(1,"%V%V\n",repeat(apply(apply(true,vslice,{{sq_mul({tagset(9),tagset(18,10),tagset(27,19)},{1e4,1e2,1})},tagset(9)}),sum),2))
Output:
{11019,21120,31221,41322,51423,61524,71625,81726,91827}{11019,21120,31221,41322,51423,61524,71625,81726,91827}

Python

<lang python>list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9] list2 = [10, 11, 12, 13, 14, 15, 16, 17, 18] list3 = [19, 20, 21, 22, 23, 24, 25, 26, 27]

print([

   .join(str(n) for n in z) for z
   in zip(list1, list2, list3)

])</lang>

Output:
['11019', '21120', '31221', '41322', '51423', '61524', '71625', '81726', '91827']

Raku

Not really seeing why we need to show the result twice but that's what the requirement is... ¯\_(ツ)_/¯ (I find myself making that gesture often in response to Calmosofts tasks.)

<lang perl6>say [[Z~] [1,2,3,4,5,6,7,8,9], [10,11,12,13,14,15,16,17,18], [19,20,21,22,23,24,25,26,27]] xx 2;</lang>

Output:
([11019 21120 31221 41322 51423 61524 71625 81726 91827] [11019 21120 31221 41322 51423 61524 71625 81726 91827])

Ring

<lang ring> load "stdlib.ring" list1 = [1,2,3,4,5,6,7,8,9] list2 = [10,11,12,13,14,15,16,17,18] list3 = [19,20,21,22,23,24,25,26,27] list = []

for n = 1 to len(list1)

   str1 = string(list1[n])
   str2 = string(list2[n])
   str3 = string(list3[n])
   str = str1 + str2 + str3
   add(list,str)

next

showArray(list)

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:
list = [11019,21120,31221,41322,51423,61524,71625,81726,91827][11019,21120,31221,41322,51423,61524,71625,81726,91827]

Wren

<lang ecmascript>var list1 = (1..9).toList var list2 = (10..18).toList var list3 = (19..27).toList var list = (0..8).map { |i| 1e4*list1[i] + 100*list2[i] + list3[i] }.toList System.print(list)</lang>

Output:
[11019, 21120, 31221, 41322, 51423, 61524, 71625, 81726, 91827]

XPL0

<lang XPL0>intI;forI:=1to9do[IntOut(0,I*10000+(I+9)*100+I+18);ChOut(0,^ )]</lang>

Output:
11019 21120 31221 41322 51423 61524 71625 81726 91827