You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

开发Raku脚本:查找仅单字符差异的同长单词(可指定差异字符)

Raku脚本:查找词表中单字符差异的单词对

核心功能实现

先将词表按单词长度分组,避免跨长度的无效比较。随后对同长度的单词两两对比,统计字符差异数,筛选出仅存在单字符不同的单词对。

sub find-single-diff-pairs(@words) {
    # 按单词长度分组
    my %groups = @words.classify(*.chars);
    
    my @results;
    for %groups.values -> @same-length {
        # 生成不重复的单词对进行比较
        for 0 ..^ @same-length.end -> $i {
            for $i+1 ..^ @same-length.end -> $j {
                my $word1 = @same-length[$i];
                my $word2 = @same-length[$j];
                # 统计字符差异数量
                my $diff-count = [+] $word1.comb Z!= $word2.comb;
                if $diff-count == 1 {
                    push @results, ($word1, $word2);
                }
            }
        }
    }
    return @results;
}

# 读取词表文件(每行一个单词,自动过滤空行)
my @wordlist = 'wordlist.txt'.IO.lines.grep(*.chars > 0);

# 输出所有符合条件的单词对
for find-single-diff-pairs(@wordlist) -> ($a, $b) {
    say "$a ↔ $b";
}

扩展:指定差异字符对

如果需要限定差异为特定字符组合(如s/t),可以在统计差异数的基础上,额外检查差异位置的字符是否匹配指定的字符对(支持双向匹配,即s→t或t→s)。

修改后的功能函数:

sub find-specific-diff-pairs(@words, Str $diff-pair) {
    my ($c1, $c2) = $diff-pair.split('/');
    my %groups = @words.classify(*.chars);
    
    my @results;
    for %groups.values -> @same-length {
        for 0 ..^ @same-length.end -> $i {
            for $i+1 ..^ @same-length.end -> $j {
                my $word1 = @same-length[$i];
                my $word2 = @same-length[$j];
                # 提取所有字符差异的位置及对应字符
                my @diffs = grep { $_[0] != $_[1] }, $word1.comb Z $word2.comb;
                next unless @diffs.elems == 1;
                my ($char-a, $char-b) = @diffs[0];
                # 检查是否匹配指定的字符差异对
                if ($char-a eq $c1 && $char-b eq $c2) || ($char-a eq $c2 && $char-b eq $c1) {
                    push @results, ($word1, $word2);
                }
            }
        }
    }
    return @results;
}

# 使用示例:筛选仅存在s/t字符差异的单词对
my @matches = find-specific-diff-pairs(@wordlist, 's/t');
for @matches -> ($a, $b) {
    say "$a ↔ $b";
}

使用说明

  1. 准备词表文件wordlist.txt,每行存放一个单词;
  2. 基础版脚本会输出所有单字符差异的单词对;
  3. 指定差异字符时,调用find-specific-diff-pairs函数并传入类似's/t'的字符对参数;
  4. 脚本会自动忽略空行,仅处理非空单词。

内容的提问来源于stack exchange,提问作者Jim Bollinger

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.11 13:32:39