Sort primes from list to a list

From Rosetta Code
Revision as of 15:56, 23 January 2022 by Thundergnat (talk | contribs) (→‎{{header|Raku}}: numerically or lexicographically?)
Sort primes from list to a list 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 list:
Primes = [2,43,81,122,63,13,7,95,103]
Show on this page the ascending ordered list of primes from given list.

ALGOL 68

Library: ALGOL 68-rows

<lang algol68>BEGIN # extract the elements of a list that are prime and sort them #

   PR read "primes.incl.a68" PR    # include prime utilities       #
   PR read "rows.incl.a68"   PR    # include row (array) utilities #
   # list of numbers required by the task #
   []INT list = (  2, 43, 81, 122, 63, 13, 7, 95, 103 );
   [ 1 : UPB list ]INT prime list;
   # count the nunber of primes in list and assign the primes to prime list #
   INT p count := 0;
   FOR i TO UPB list DO
       IF is probably prime( list[ i ] ) THEN
           # have a prime #
           prime list[ p count +:= 1 ] := list[ i ]
       FI
   OD;
   print( ( "prime elements of: " ) );
   SHOW list;
   print( ( newline, "              are: " ) );
   SHOW ( QUICKSORT prime list FROMELEMENT 1 TOELEMENT p count )[ 1 : p count ]

END</lang>

Output:
Prime elements of:  2 43 81 122 63 13 7 95 103
              are:  2 7 13 43 103

Perl

<lang perl>#!/usr/bin/perl

use strict; # https://rosettacode.org/wiki/Sort_primes_from_list_to_a_list use warnings; use ntheory qw( is_prime ); use List::AllUtils qw( nsort_by );

print "@{[ nsort_by {$_} grep is_prime($_), 2,43,81,122,63,13,7,95,103 ]}\n";</lang>

Output:
2 7 13 43 103

Phix

You could also use unique() instead of sort(), since that (by default) performs a sort() internally anyway. It wouldn't be any slower, might even be better, also it does not really make much difference here whether you filter() before or after the sort(), though of course some more expensive filtering operations might be faster given fewer items.

with javascript_semantics
pp(sort(filter({2,43,81,122,63,13,7,95,103},is_prime)))
Output:
{2,7,13,43,103}

Python

<lang python> print("working...") print("Primes are:")

def isprime(m):

   for i in range(2,int(m**0.5)+1):
       if m%i==0:
           return False
   return True

Primes = [2,43,81,122,63,13,7,95,103] Temp = []

for n in range(len(Primes)): if isprime(Primes[n]): Temp.append(Primes[n])

Temp.sort() print(Temp) print("done...") </lang>

Output:
working...
Primes are:
[2, 7, 13, 43, 103]
done...


Raku

<lang perl6>put <2 43 81 122 63 13 7 95 103>.grep( &is-prime ).sort</lang>

Output:
2 7 13 43 103

Of course "sort ascending" is a little ambiguous. That ^^^ is numerically. This vvv is lexicographically. <lang perl6>put <2 43 81 122 63 13 7 95 103>.grep( &is-prime ).sort: ~*</lang>

Output:
103 13 2 43 7

Ring

<lang ring> load "stdlibcore.ring" ? "working"

Primes = [2,43,81,122,63,13,7,95,103] Temp = []

for n = 1 to len(Primes)

    if isprime(Primes[n])
       add(Temp,Primes[n])
    ok

next

Temp = sort(Temp) showarray(Temp) ? "done..."

func showArray(array)

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

</lang>

Output:
working
Primes are:
[2,7,13,43,103]
done...

Wren

Library: Wren-math

<lang ecmascript>import "./math" for Int

var lst = [2, 43, 81, 122, 63, 13, 7, 95, 103] System.print(lst.where { |e| Int.isPrime(e) }.toList.sort())</lang>

Output:
[2, 7, 13, 43, 103]

XPL0

<lang XPL0>include xpllib; int Primes, Smallest, I, SI; def Len=9, Inf=1000; [Primes:= [2,43,81,122,63,13,7,95,103]; repeat Smallest:= Inf;

       for I:= 0 to Len-1 do
           if Primes(I) < Smallest then
               [Smallest:= Primes(I);  SI:= I];
       Primes(SI):= Inf;       \cross off
       if IsPrime(Smallest) then
           [IntOut(0, Smallest);  ChOut(0, ^ )];

until Smallest = Inf; ]</lang>

Output:
2 7 13 43 103