2024-04-28 20:28:32 发布
网友
我有删除空格的莫尔斯电码串,所有长度相等。你知道吗
比如说..--.---..
..--.---..
我想在单独的行上生成所有可能的解决方案。你知道吗
即. . - - . - - - . .、.. - - .- --. .、..- -.- - -. .等
. . - - . - - - . .
.. - - .- --. .
..- -.- - -. .
什么是一个好的,有效的方法来做这件事?我对这种事很反感,我很难堪。你知道吗
如果您想在纯bash中完成它,它可能会变得很棘手。我们的想法是利用支架扩展,这将照顾到所有的可能性。你知道吗
$ a='.. ' $ [[ $a =~ ${a//?/(.)} ]] && b=${BASH_REMATCH[*]:1} && eval printf "%s\\\n" ${b// /\{,\" \"\}})
它是如何工作的?
这个想法本质上是转变
'.. '
进入
.{," "}.{," "}-{," "}-
让bash使用brace扩展来生成所有的组合。你知道吗
bash测试将尝试匹配类似于(.)(.)(.)(.)的正则表达式${a//?/(.)}。它将所有匹配项存储在变量BASH_REMATCH
(.)(.)(.)(.)
${a//?/(.)}
BASH_REMATCH
b=${BASH_REMATCH[*]:1}索引为0的BASH_REMATCH元素是字符串中与整个正则表达式匹配的部分。索引为BASH_REMATCH的n元素是字符串中与第n个带圆括号的子表达式匹配的部分。因此,除第一部分外,我们只对所有部分感兴趣:
b=${BASH_REMATCH[*]:1}
n
$ [[ $a =~ ${a//?/(.)} ]] && echo ${BASH_REMATCH[*]} .. . . - - $ [[ $a =~ ${a//?/(.)} ]] && echo ${BASH_REMATCH[*]:1} . . - -
${b// /\{,\" \"\}}用{," "}替换所有空格。这将允许我们使用大括号展开,我们需要用eval进行计算
${b// /\{,\" \"\}}
{," "}
eval
$ a='.. ' $ [[ $a =~ ${a//?/(.)} ]] $ b=${BASH_REMATCH[*]:1} $ echo "${b// /\{,\" \"\}}" .\{," "\}.\{," "\}-\{," "\}-
这是awk里的一个。当我看到这个问题并决定尝试一些东西时,我正在玩awk二进制转换。它从i=0到2(长度(morse)-1)-1,将i转换为二进制,并用空格替换所有1,用空值替换0,例如:
morse=-.- length(morse)=3 -> 2^(3-1)-1=3 runs 0..3 0==00 -> -0.0- -> -.- 1==01 -> -0.1- -> -. - 2==10 -> -1.0- -> - .- 3==11 -> -1.1- -> - . -
脚本:
$ echo -..- | awk ' function tobin(d,l) { r="" while(d) { r=d%2r d=int(d/2) } return sprintf("%0" l "d",r) } { n=split($0,a,"") for(i=0;i<=2^(length-1)-1;i++) { split(tobin(i,length-1),b,"") for(j=1;j<=n;j++) printf "%s%s",a[j],(b[j]?" ":(j==n?ORS:"")) } }'
输出:
-..- -.. - -. .- -. . - - ..- - .. - - . .- - . . -
如果您想在纯bash中完成它,它可能会变得很棘手。我们的想法是利用支架扩展,这将照顾到所有的可能性。你知道吗
它是如何工作的?
这个想法本质上是转变
进入
让bash使用brace扩展来生成所有的组合。你知道吗
bash测试将尝试匹配类似于
(.)(.)(.)(.)
的正则表达式${a//?/(.)}
。它将所有匹配项存储在变量BASH_REMATCH
b=${BASH_REMATCH[*]:1}
索引为0的BASH_REMATCH
元素是字符串中与整个正则表达式匹配的部分。索引为BASH_REMATCH
的n
元素是字符串中与第n个带圆括号的子表达式匹配的部分。因此,除第一部分外,我们只对所有部分感兴趣:${b// /\{,\" \"\}}
用{," "}
替换所有空格。这将允许我们使用大括号展开,我们需要用eval
进行计算这是awk里的一个。当我看到这个问题并决定尝试一些东西时,我正在玩awk二进制转换。它从i=0到2(长度(morse)-1)-1,将i转换为二进制,并用空格替换所有1,用空值替换0,例如:
脚本:
输出:
相关问题 更多 >
编程相关推荐