首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >脚本创建一个基于已知数值关系的四个字符串

脚本创建一个基于已知数值关系的四个字符串
EN

Stack Overflow用户
提问于 2018-04-04 22:00:59
回答 2查看 48关注 0票数 0

考虑一个包含四个唯一数字(1,2,3,4)的三行输入文件,这样每行表示一个数字相对于另一个数字的位置。

例如,在下面的输入集中,4在2旁边,2在3旁边,1在4旁边。

代码语言:javascript
复制
42
23
14

因此,考虑到一个脚本将如何将所有四个数字组合成一种能够保持每个数字已知关系的方式?

换句话说,有两个答案1423或3241,但如何以编程的方式得出这个答案呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-04-05 08:17:37

强求运气的野蛮人:

代码语言:javascript
复制
for (( ; ; ))
do
  res=($(echo "42
    23
    14" | shuf))     
  if ((${res[0]}%10 == ${res[1]}/10 && ${res[1]}%10 == ${res[2]}/10))
  then
      echo "success: ${res[@]}"
      break 
  fi
  echo "fail: ${res[@]}"
done

fail: 42 14 23
fail: 42 23 14
fail: 42 14 23
success: 14 42 23

对于3个数字,这种方法是可以接受的。

Shuf调整输入行并用数字填充数组res。

然后我们开始跟踪数字和测试,如果第一个数字的最后一个数字与下一个数字的第一个数字匹配,并相应地对第二个和第三个数字进行测试。

如果是这样的话,我们就会发出成功的信息。对于调试,失败消息比无声的没完没了的循环更好。

对于较长的数字链,系统排列可能更好地测试,检查以下两个数字的函数,这可以通过索引或更好的循环将是合适的。

票数 0
EN

Stack Overflow用户

发布于 2018-04-05 09:05:35

不太明智或有效率,但有趣(至少对我来说) :-)

这将使用GNU并行回显所有排列。

代码语言:javascript
复制
parallel echo {1}{2}{3}{4} ::: {1..4} ::: {1..4} ::: {1..4} ::: {1..4}

并在末尾添加一些grepping

代码语言:javascript
复制
parallel echo {1}{2}{3}{4} ::: {1..4} ::: {1..4} ::: {1..4} ::: {1..4} | grep -E "42|24" | grep -E "23|32" | grep -E "14|41"

输出

代码语言:javascript
复制
1423
3241
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49666445

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档