小编Lar*_*een的帖子

在 Raku 中使用惰性列表获取第一个 10 位素数

我正在尝试使用惰性列表获取第一个 10 位素数。这是我根据(已经给出的)计算素数的代码得出的结论:

my @primes = 2,3,5, {first * %% none(@_), (@_[*-1] ... Inf)} ...  -> $s {$s.chars == 10};

say @primes[@primes.elems-1];
Run Code Online (Sandbox Code Playgroud)

该代码的问题在于完成时间太长。

有没有什么快速的方法可以得到第一个 10 位质数?

primes lazy-evaluation raku

8
推荐指数
1
解决办法
110
查看次数

在 Raku 中查找列表中第一个出现的 1 位数字

我有许多不同长度的列表。每个列表都以一些数字开头,这些数字是多位数字,但以重复出现的一位数字结尾。例如:

my @d = <751932 512775 64440 59994 9992 3799 423 2 2 2 2>;
my @e = <3750 3177 4536 4545 686 3 3 3>;
Run Code Online (Sandbox Code Playgroud)

我想在不构建任何循环的情况下找到 1 位数字(@d7 和@e5)第一次出现的位置。理想情况下,lambda(或任何其他实用的东西)应该使用条件迭代列表,例如$_.chars == 1,一旦条件满足,它应该停止并返回位置。与其返回位置,不如返回列表直到一位数;欢迎更改和即兴创作。怎么做?

list raku

8
推荐指数
1
解决办法
76
查看次数

在 Raku 中将数字重新排列为非英文字母顺序

我正在尝试将数字重新排列为非英文字母顺序。

my @numDE = < null eins zwei drei  vier fünf sechs sieben acht  neun >;
# english   < zero one  two  three four five six   seven  eight nine >;

my %numrank; # The lookup hash: number => its_alphabetical_order

for @numDE.sort.kv -> $k,$v {%numrank{%(@numDE.kv.reverse){"$v"}} = "$k"};

my %temp; # number => reassigned order value  
%temp{"$_"}= %numrank{"$_"} for "2378".comb; # 2378 sample input
say %temp.sort(*.values); # this prints:
# (8 => 0 3 => 1 7 => 7 2 => 9) …
Run Code Online (Sandbox Code Playgroud)

hash raku

8
推荐指数
1
解决办法
144
查看次数

sub 将 Nil 附加到 Raku 的末尾

my sub e($r) { printf("%d, ", $_) for 1..$r}
say e(5);
Run Code Online (Sandbox Code Playgroud)

返回1, 2, 3, 4, 5, Nil,即sub和/或say始终在末尾添加Nil

我第一次尝试使用 rakudo 版本 2020.02。我现在尝试使用最新版本 2020.12.1 并且Nil仍然存在。如何摆脱它?

raku

8
推荐指数
1
解决办法
77
查看次数

在硬币变化类型的问题中将递归函数重构为迭代

在一coin-change类问题中,我试图将递归函数重构为迭代。给定一组coin_types,该函数递归地coinr找到支付给定金额 的最小硬币数量sum

# Any coin_type could be used more than once or it may not be used at all

sub coinr ($sum, @coin_types) { # As this is for learning basic programming 
    my $result = $sum;          # No memoization (dynamic programming) is used
    if $sum == @coin_types.any { return 1 }
    else { for @coin_types.grep(* <= $sum) -> $coin_type {
        my $current = 1 + coinr($sum - $coin_type, @coin_types);
        $result = $current …
Run Code Online (Sandbox Code Playgroud)

iteration recursion coin-change raku

8
推荐指数
1
解决办法
91
查看次数

在Raku中简洁地打印数学系列

数学级数,例如以此处表示为数组的连续序列:

my @seq = my $a=0, {++$a} ... *;
for @seq[^10].kv {state $f=0; ($^k < 4 or $^k > 7) ?? say "a$^k =  "  ~ $^v !! (say "..." if $f ne 1; $f=1) };
Run Code Online (Sandbox Code Playgroud)

印刷品:

a0 =  0
a1 =  1
a2 =  2
...

a8 =  8
a9 =  9
Run Code Online (Sandbox Code Playgroud)

我的问题:1-是否有一种简单的方法可以只删除第一个元素,即a0 = 0从打印输出中删除?

2-可以使此代码更惯用吗?

谢谢。

sequence raku

7
推荐指数
3
解决办法
117
查看次数

在 Raku 中获得 Bag 收藏中价值最高的物品

my $coll=bag <1 2 2 3 2 4 4 2 2>;
say $coll; # => Bag(1, 2(5), 3, 4(2))
Run Code Online (Sandbox Code Playgroud)

如何2(5)从这个 Bag 集合中获取具有最大价值的项目(键)?

(可选)有没有办法告诉 Bag 只计算那些连续的元素而忽略所有不连续的元素,以便结果是Bag(2(4), 4(2))

raku

7
推荐指数
1
解决办法
96
查看次数

检查列表的所有元素是否在 Raku 中都是素数

my @g = (1,2,3,4);
say reduce {is-prime}, @g; # ==> gives error
say reduce {is-prime *}, @g; #==> gives error
say reduce {is-prime}, (1,2,3,4); # ==> gives error
say so is-prime @g.all; # ==> gives error
Run Code Online (Sandbox Code Playgroud)

如何检查列表中的所有元素是否在 Raku 中都是素数?

mapreduce raku

7
推荐指数
4
解决办法
224
查看次数

访问对列表数组中的值

my @products = (
    (name => "samsung s6" , price => "600"),
    (name => "samsung s7" , price => "700"));

# for @products -> $x { say $x{"name"} ~ ": USD" ~ $x{"price"} };

# Desired output:
#
# samsung s6: USD600
# samsung s7: USD700

# Real output: An error:
#
# "Type List does not support associative indexing."
Run Code Online (Sandbox Code Playgroud)

我还想使用该.kv方法进行迭代, $key并且$val像这样:

for @products -> $x.kv -> $key,$val  { say $x{$key} ~ " " ~ …
Run Code Online (Sandbox Code Playgroud)

hashmap raku

7
推荐指数
2
解决办法
114
查看次数

通过在 Raku 中对它们的值进行分组来打印散列元素

我会记录一个字母在一个单词中出现的次数,例如“embeddedss”

my %x := {e => 3, m => 1, b => 1, d => 3, s => 2};
Run Code Online (Sandbox Code Playgroud)

我想通过像这样对它们的值进行分组来打印元素:

# e and d 3 times
# m and b 1 times
# s 2 times
Run Code Online (Sandbox Code Playgroud)

如何实际做到这一点,即不构建循环(如果有的话)?

可选在打印散列之前,我想将其转换并分配为临时数据结构,例如( <3 e d>, <1 m b>, <2 s> )然后打印它。最实用的数据结构和打印方式是什么?

hash raku

7
推荐指数
1
解决办法
118
查看次数