根据具体情况填写清单

2023-12-28

我参加了一次面试,面试官给了我一个关于list的问题。

例如,原始列表如下[0,1,0,0,2,0,0,1], the 2应该尽可能地填充列表,除非遇到 1。所以输出将是[0,1,2,2,2,2,2,1].

一个例子:

[0,2,1,0,1,2,0,0]

output:

[2,2,1,0,1,2,2,2]

另一个例子:

[2,0,0,0,1,1,0,1]

output:

[2,2,2,2,1,1,0,1]

如何解决这个问题呢?


您可以使用确定性有限自动机 http://en.wikipedia.org/wiki/Deterministic_finite_automaton有两个状态s_fill and s_keep如下:

fill2 :: [Int] -> [Int]
fill2 xs = s_keep xs []
   where s_keep []     w = reverse w
         s_keep (c:cs) w = if c == 2 then s_fill cs (c:w) else s_keep cs (c:w)
         s_fill []     w = reverse w
         s_fill (c:cs) w = if c == 1 then s_keep cs (c:w)
                          else s_fill cs (2:w)

在该州s_fill, 功能fill2不断填充2到累加器的头部,直到1满足,在这种情况下,DFA 跳转到状态s_keep.

In s_keep, fill2将每个元素本身推回到累加器w until 2遇到,在这种情况下DFA跳转到s_fill.

当剩余列表(s_{keep,fill} 的第一个参数)为空时,递归终止。在这种情况下,该函数返回累加器的相反值,因为头部附近的元素被推得更深,靠近累加器的尾部。

到目前为止,该函数fill2从左到右填2。剩下的工作就是从右到左填充结果(fill2 xs),可以很容易地得到(fill2 xs)如下:

fill2' xs = reverse $ fill2 $reverse $fill2 xs

Output:

*Main> fill2' [0,1,0,0,2,0,0,1]
[0,1,2,2,2,2,2,1]
*Main> fill2' [0,2,1,0,1,2,0,0]
[2,2,1,0,1,2,2,2]
*Main> fill2' [2,0,0,0,1,1,0,1]
[2,2,2,2,1,1,0,1]

and

*Main> fill2' [0,0,1,0,2,0,1]
[0,0,1,2,2,2,1]

--- 代码的原始版本 ---

(感谢 @ØrjanJohansen 指出下面代码原始版本的问题以及填充的初始状态和方向)。

fill2 :: [Int] -> [Int]
fill2 str = s_fill str []
   where s_keep []     w = reverse w
         s_keep (c:cs) w = if c == 2 then s_fill cs (c:w) else s_keep cs (c:w)
         s_fill []     w = reverse w
         s_fill (c:cs) w = if c == 1 then s_keep cs (c:w)
                          else s_fill cs (2:w)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

根据具体情况填写清单 的相关文章

  • 在 Haskell 中增长数组

    我想在 Haskell 中实现以下 命令式 算法 给定一个序列对 e0 s0 e1 s1 e2 s2 en sn 其中 e 和 s 部分不一定是自然数不同的是 在每个时间步都会随机选择该序列的一个元素 例如 ei si 并根据 ei si
  • 这个记忆的斐波那契函数是如何工作的?

    在我正在做的函数式编程课程的当前练习作业中 我们必须制作给定函数的记忆版本 为了解释记忆化 给出以下示例 fiblist fibm x x lt 0 fibm 0 0 fibm 1 1 fibm n fiblist n 1 fiblist
  • 将数据类型设置为 Kind * -> * 这不是函子

    布伦特 约尔吉类型分类百科全书 https www haskell org haskellwiki Typeclassopedia给出以下练习 举一个类型的例子 gt 不能将其制成 的实例Functor 不使用undefined 请告诉我什
  • Haskell:无法预期类型“Integer”与实际类型“Int”

    我已经盯着这段代码有一段时间了 但我无法理解该错误消息 divisors Integer gt Integer divisors n t t lt 1 n mod n t 0 length a gt Integer length 0 len
  • Haskell:是的,没有类型类。为什么是整数?

    我有一个关于 GHCi 如何假定整数类型的问题 我正在阅读 Learn you a Haskell 是 否类型的课程 如果您想阅读全文 这里有一个链接 http learnyouahaskell com making our own typ
  • 规范化且不可变的数据模型

    Haskell如何解决 规范化不可变数据结构 问题 例如 让我们考虑一个表示前女友 男友的数据结构 data Man Man name String exes Woman data Woman Woman name String exes
  • “Eta减少”并不总是在Haskell中举行?

    我发现我可以说 LANGUAGE RankNTypes f1 forall b b gt b gt forall c c gt c f1 f id f HLint 告诉我我可以在这里做 Eta 减少 但是 f2 forall b b gt
  • 以下两个 lambda 函数的空间复杂度

    我正在阅读以下内容 https en wikibooks org wiki Haskell Graph reduction https en wikibooks org wiki Haskell Graph reduction 其内容如下
  • Haskell / GHC - 是否有“警告不完整模式”的中缀标签/编译指示

    我正在寻找一个可以对特定的不完整模式发出警告的编译指示 它会使编译器失败并显示以下 假设的 代码 FAILIF incomplete patterns f Int gt Int f 0 0 我正在尝试使用 Arrows 编写一个 编译器 并
  • 如何在haskell中获取变量名称

    我来到 haskell 时有一些 c 背景知识 想知道是否有类似的 define print a printf s d n a a int a 5 print a 应该打印 a 5 这是 augustss 提到的 TH 解决方案 LANGU
  • 这个对自身单位的列表理解是如何工作的?

    在 haskell IRC 频道中有人问 是否有一种简洁的方法来定义一个列表 其中第 n 个条目是之前所有条目的平方和 我认为这听起来像一个有趣的谜题 递归定义无限列表是我真正需要练习的事情之一 所以我启动了 GHCi 并开始尝试递归定义
  • 在 monad 转换器类型类中使用列表 monad?

    我的目标是创建一个在 ReaderT WriterT 堆栈或 RWS 堆栈中使用列表 monad 的函数 更一般地说 如何在 mtl 类型类 例如 MonadReader MonadWriter 中使用列表 monad 我为什么要尝试这样做
  • 如何通过“cabal build”或“stack build”构建带有图标的项目

    我想构建一个带有图标的可执行文件 通过谷歌搜索 我发现这里的说明 https wiki haskell org Setting an executable icon 但它只能通过编译源文件来工作ghc 如果我想构建一个具有可执行文件的项目c
  • 不同编程语言中的浮点数学

    我知道浮点数学充其量可能是丑陋的 但我想知道是否有人可以解释以下怪癖 在大多数编程语言中 我测试了 0 4 到 0 2 的加法会产生轻微的错误 而 0 4 0 1 0 1 则不会产生错误 两者计算不平等的原因是什么 在各自的编程语言中可以采
  • 如何在不声明新数据的情况下更改类型(String,Int)元组的 Ord 实例?

    我正在尝试对类型列表进行排序 String Int 默认情况下 它按字符串排序 然后按整数排序 如果字符串相等 我希望它是相反的 首先比较整数 然后如果相等则比较字符串 另外 我不想切换到 Int String 我找到了一种通过定义实例来实
  • 如何打乱列表?

    如何从一组数字 1 2 3 直到我击中x 我的计划是重新调整列表 1 2 3 并把它砍在x chopAt 3 2 3 1 2 3 chopAt 3 2 1 3 2 1 3 chopAt 3 3 1 2 3 chopAt chopAt x y
  • 类型级别集结合律的证明

    我试图证明类型级函数Union https hackage haskell org package type level sets 0 8 5 0 docs Data Type Set html t Union是关联的 但我不确定应该如何完
  • 在另一个字符串中查找子字符串的索引 Haskell

    我要创建一个带有两个参数 字符串 的函数 该函数应查看第一个参数是否是第二个参数的子字符串 如果是这种情况 它将返回每个出现的元组 其中包含子字符串的起始索引和子字符串的结尾索引 例如 f String gt String gt Int I
  • 构造微积分中的“Refl”东西?

    在语言中 例如Agda Idris or Haskell对于类型扩展 有一个 键入类似于以下内容的内容 data a b where Refl a a a b意思是a and b是相同的 这样的类型可以定义在结构演算 https en wi
  • 树莓派 2 上的 GHCi?

    我正在开发一些在 raspberry pi 2 上运行的 haskell 项目 以及可以使用 raspbian 7 4 1 中的 apt get 安装的 ghc 版本 但它没有 GHCi 这会阻止一些重要的包 如 Vector 的编译 我看

随机推荐

  • 创建一个正则表达式来验证用户名

    我编写此代码是为了验证用户名是否满足给定条件 有人知道如何将 2 个正则表达式合并为一个吗 代码是c
  • 递归获取目录大小

    是否有一个好的 gem 可以获取递归计算的目录大小 在unix中 我可以使用du 但我想要一个能够吸收操作系统之间差异的库 这似乎有效 Dir glob File join dir map f File size f inject
  • 为什么使用QStringLiteral?

    我最近开始使用 QML 并尝试遵循这个例子 https www youtube com watch v 9BcAYDlpuT8 该视频介绍了如何创建可在 QML 应用程序中显示的 C 模型 在模型的数据成员函数中 使用了一个开关 并且将在
  • 如何使用avg函数?

    我是 php 和 mysql 的新手 我正在尝试使用 avg 函数 但我不知道该怎么做 我正在尝试做这样的事情 mysql connect localhost username password mysql select db databa
  • 如何在不保存检查点的情况下运行 estimator.train

    我正在寻找一种方法来实现学习率搜索 如下所述 https arxiv org pdf 1506 01186 pdf https arxiv org pdf 1506 01186 pdf 我的网络是使用估算器 api 实现的 我想坚持这一点
  • 在mono中,如何控制SSL/TLS密码套件?

    我想将服务器配置为拒绝 DES RC4 MD5 等的协商 单声道 3 4 发行说明 http www mono project com Release Notes Mono 3 4说 网络堆栈现在允许开发人员控制哪些密码套件与 TLS SS
  • 异常代码:0xe0434f4d [重复]

    这个问题在这里已经有答案了 我在尝试运行 Windows 应用程序时遇到以下错误 错误应用程序名称 cribbageDemo exe 版本 1 0 0 0 时间戳 0x4f685fe3 错误模块名称 KERNELBASE dll 版本 6
  • 可扩展列表视图中的 Android 数据绑定

    我有一个非常具体的问题 我正在使用 android 数据绑定库 https developer android com topic libraries data binding index html https developer andr
  • LINQ-实体日期部分[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我有一种方法可以获取 linq to
  • 模拟:ASP.Net MVC 控制器操作与 Web 表单

    ASP Net MVC 控制器操作与 ASP Net Web 表单之间的模拟有区别吗 在同一个 Web 项目中使用完全相同的代码 当从 Web 表单连接到 SQL Server 时 我能够成功模拟 Windows 用户 但不能从控制器操作连
  • 从独立应用程序运行加特林的正确方法是什么

    我需要从主应用程序启动加特林模拟 用例如下 应用程序读取规范 并根据该规范生成测试用例 测试用例被转换为加特林场景 这些场景在加特林模拟中运行 到目前为止 我设法通过 sbt 插件做到这一点 然而 如果我们想在其他上下文中重用我正在开发的工
  • 视图控制器类的出口应该是弱还是强?操作系统应用程序

    这就是我所做的 制作一个干净的 OSX 项目 转到 main xib 并拖动弹出控制器 这在界面生成器上创建了 2 个可见对象 我去了 appDelegate h 文件并做了 属性 assign IBOutlet NSViewControl
  • 如何使用 `boost::spirit` 将语法解析为 `std::set`?

    TL DR 如何解析 a 的结果boost spirit语法转化为std set 完整的问题陈述 作为学习如何使用的练习boost spirit 我正在为 X 500 LDAP 可分辨名称设计一个解析器 语法可以在 BNF 格式中找到RFC
  • 如何有效地合并两个数据集?

    我正在尝试通过一个通用 ID 合并两个相当大的数据集 但不是大得离谱 360 000 X 4 57 000 X 4 我尝试过常规的merge merge data table and sqldf 每次我总是内存不足 cannot alloc
  • 在二维数组中查找可用的“数字”

    我有这个问题需要以最有效的方式解决 我有一个二维数组 其中包含以下内容 凡是 1 的东西都是一堵 墙 这意味着你无法穿过它 2 是您 进入 阵列或地图 如果您愿意 的入口 3是我们需要找到的东西 这是地图的示例 1111111 1 3131
  • 尝试在 Box 中创建文件夹的共享链接时出现访问被拒绝的错误消息

    所以从我的上一个问题 https stackoverflow com questions 22098865 privileges required to return the list of enterprise users in box关
  • 在类 Test 中实例化类 Test 的成员是否是递归?

    这是递归吗 public class Test Test test new Test public static void main String args new Test 版本怎么样实例初始值设定项 http www programcr
  • db4o 从数据库查询对象的最佳实践

    我正在使用两种不同的方式来查询 db4o 中的对象 我想讨论一下 1 在第一个示例中 我创建了一个 ObjectContainer 实例 打开连接 然后关闭它 ObjectContainer db Db4oEmbedded openFile
  • 为什么 VS 2008 不支持 J#,这种语言已经死了吗?

    MS 放弃 J 了吗 目前我们通过 J 程序集与软件集成 有谁知道2010年是否会得到支持 这是回答您问题的链接 http social msdn microsoft com Forums en US visualjsharpgeneral
  • 根据具体情况填写清单

    我参加了一次面试 面试官给了我一个关于list的问题 例如 原始列表如下 0 1 0 0 2 0 0 1 the 2应该尽可能地填充列表 除非遇到 1 所以输出将是 0 1 2 2 2 2 2 1 一个例子 0 2 1 0 1 2 0 0