25 lines
516 B
Plaintext
25 lines
516 B
Plaintext
(import std.Math :sqrt :prime?)
|
|
(import std.List :iota)
|
|
(import std.String :join)
|
|
(import std.Range)
|
|
|
|
(let ascending (fun (n f) {
|
|
(mut nums (iota 1 9))
|
|
(mut i 0)
|
|
(mut matched [])
|
|
|
|
(while (and (< (len matched) n) (< i (len nums))) {
|
|
(let val (@ nums i))
|
|
(if (f val)
|
|
(append! matched val))
|
|
|
|
(mut r (range:range (+ 1 (mod val 10)) 10))
|
|
(set r (range:map r (fun (k) (+ k (* 10 val)))))
|
|
(concat! nums r)
|
|
|
|
(set i (+ 1 i)) })
|
|
|
|
matched }))
|
|
|
|
(print (join (ascending 100 prime?) ", "))
|