首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Haskell中的EAN13条形码编码:如何测试?

Haskell中的EAN13条形码编码:如何测试?
EN

Stack Overflow用户
提问于 2017-10-19 00:39:26
回答 2查看 209关注 0票数 2

我正在完成真实世界Haskell。在本章中,作者解释了如何使用EAN13编码实现条码识别。

我复制了这本书在我的回购书中摘录。的大部分代码,当我最终到达检查我的300多行代码是否像预期的那样工作时,我得到了一个坏消息:

代码语言:javascript
运行
AI代码解释
复制
-- Finding the Correct Sequence
*Main> let input = zip (runLengths $ encodeEAN13 "9780132114677") (cycle [Zero, One])
*Main> listToMaybe . solve . candidateDigits $ input
Just [0,2,0,1,0,0,0,0,0,0,0,0,1] -- WRONG Actual
Just [9,7,8,0,1,3,2,1,1,4,6,7,7] -- Expected

自从这本书出版以来,我注意到一些类型的签名发生了变化,例如:

代码语言:javascript
运行
AI代码解释
复制
$ ghci
GHCi, version 7.10.3: http://www.haskell.org/ghc/  :? for help
Prelude> import qualified Data.Map as M
Prelude M> :t M.lookup
M.lookup :: Ord k => k -> M.Map k a -> Maybe a
-- in the book: M.lookup :: (Ord k, Monad m) => k -> M.Map k a -> m a

我试着在GHCi中复制每一个例子,除了最后一个例子,我总是得到与这本书相同的结果。

有谁从这本书中提到过这个话题??

作者并没有解释每一行代码,特别是input变量没有在任何地方定义let input = zip (runLengths $ encodeEAN13 "9780132114677") (cycle [Zero, One])

一些EAN13编码的条形码用于测试?

如果没有人知道这本书,您会有一些EAN13编码条形码的样本,例如:

代码语言:javascript
运行
AI代码解释
复制
*Main M> encodeEAN13 "9780132114677"
"101011101100010010100111001100101000010101011011001100110110011010111001010000100010010001001010000101"

以确保我对函数的测试是正确的?

先谢谢你

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-10-21 08:11:53

您的实现中有两个bug:

首先,在encodeDigits中,您已经编写了splitAt 5,而它应该是splitAt 6。这修复了@注意到的编码错误。

其次,在bestScores中,您已经编写了:

代码语言:javascript
运行
AI代码解释
复制
[(distance d (scaleToOne ps), n) | d <- srl, n <- digits]

当你应该写:

代码语言:javascript
运行
AI代码解释
复制
zip [distance d (scaleToOne ps) | d <- srl] digits

这修复了你的解码错误。

我希望我可以说我使用了我的超人调试技能来发现这些but,但我碰巧有我自己的Barcode.hs副本,从几年前我自己做第12章开始。

票数 4
EN

Stack Overflow用户

发布于 2017-10-20 02:00:54

看上去你的1和0的顺序有三个问题,第一个是你的AEAN-13中心代码似乎在覆盖你第六个角色的开头。它真的应该在B的地方。你有一个额外的4个零和一个额外的结束标记加到你的序列的末尾。

下面是一个生成校验和并列出1和0的工具:

代码语言:javascript
运行
AI代码解释
复制
var arrayCodeEANBin, arrayStructEAN;
arrayCodeEANBin = [ [ '0001101', '0011001', '0010011', '0111101', '0100011', '0110001', '0101111', '0111011', '0110111', '0001011' ], [ '0100111', '0110011', '0011011', '0100001', '0011101', '0111001', '0000101', '0010001', '0001001', '0010111' ], [ '1110010', '1100110', '1101100', '1000010', '1011100', '1001110', '1010000', '1000100', '1001000', '1110100' ] ];
arrayStructEAN = ['000000', '001011', '001101', '001110', '010011', '011001', '011100', '010101', '010110', '011010']

var strRaw = "";
var strText = "";

function funcEAN() { // EAN-13
var intSumOdd = 0, intSumEven = 0, intCheck, i, j, strStruct;
// Compute check digit and add it to raw string
 for (i = 0; i < 12; i += 2) {
  intSumEven += parseInt(strText[i]);
  intSumOdd += parseInt(strText[i+1]);
 }
 intCheck = ((intSumOdd * 3) + intSumEven) % 10;
 if (intCheck > 0) {
 	intCheck = 10 - intCheck;
 }
 strText += intCheck;
// Converts Code EAN array into string of 1's and 0's
 strRaw = "101"
// First six bar sequences
 for (i = 1; i < 7; i += 1) {
   strStruct = arrayStructEAN[strText[0]];
   strRaw += arrayCodeEANBin[strStruct[i-1]][strText[i]];
 }
// Middle sequence
 strRaw += "01010";
// Last six bar sequences, including check digit
 for (i = 0; i < 6; i += 1) {
  strRaw += arrayCodeEANBin[2][strText[i+7]];
 }
 strRaw += "101";
} // End EAN-13


var buttonBarcode = document.getElementById("btnGenBar");
buttonBarcode.onclick = function () {
 strText = document.getElementById("textBarcode").value;
 funcEAN();
 document.getElementById("textRaw").value = strRaw;
 document.getElementById("textRaw").select();
}
代码语言:javascript
运行
AI代码解释
复制
<head>
<title>EAN-13 Barcodes in vanilla JavaScript</title>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" >
</head>
<body>
 <div id="inputForm">
 	Enter Text:&nbsp;<input type="text" id="textBarcode" tabindex=1/>
 	&nbsp;<input type="button" id="btnGenBar" value="Gen 1's and 0's" tabindex=4/>
 </div>
 <p></p>
 <div id="result"></div>
 <p></p>
 <textarea rows="3" cols="110" id="textRaw" tabindex=0></textarea>
<script type="text/javascript" src="./SO_JS-EAN-13.js"></script>
</body>
</html>

如果您想看到实际生成的条形码,我有一个码页。它不添加格式化文本,但条形码扫描。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46825859

复制
相关文章
centos7升级内核从3到4或从3到5
//升级内核,参考https://elrepo.org/linux/kernel/el7/x86_64/RPMS/ 里显示的 elrepo-release的版本进行如下第2步的安装
Windows技术交流
2019/12/25
1.4K0
1284 2 3 5 7的倍数
1284 2 3 5 7的倍数 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题 给出一个数N,求1至N中,有多少个数不是2 3 5 7的倍数。 例如N = 10,只有1不是2 3 5 7的倍数。 Input 输入1个数N(1 <= N <= 10^18)。 Output 输出不是2 3 5 7的倍数的数共有多少。 Input示例 10 Output示例 1 题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!
Angel_Kitty
2018/04/08
9200
centos7内核升级最新BBR内核
CENTOS7作为常用的服务器系统,其正式版的内核都是相当保守的。以下介绍以下升级最新版本的内核方法,目的是为了实现内核的BBR功能,改善CENTOS7的网络功能
Zach
2019/12/30
3.8K0
CentOS 7 升级 Linux 内核
升级 CentOS 内核参考资料 1 升级 CentOS 内核参考资料 2 通过 /proc 虚拟文件系统读取或配置内核 Linux 内核官网 CentOS 官网
全栈程序员站长
2022/09/15
4.1K0
Centos 7 升级系统内核
我们使用 Linux 来表示整个操作系统,但严格地来说,Linux 只是个内核。各种发行版(RedHat、ubuntu、CentOS等)是一个完整功能的系统,它建立在内核之上,具有各种各样的应用程序工具和库。
玖柒的小窝
2021/12/09
1.5K0
5月7日,带您揭秘数据库内核技术
数据库内核技术是数据库的底层技术根基,腾讯云数据库在基础架构领域上一直坚持前沿技术探索与实际落地应用相结合,持续提升产品性能,助力企业国产化升级,推动国产数据库发展行稳致远。 近年来,腾讯云数据库积极拥抱云原生和国产化的趋势,致力于发展自研数据库技术,帮助全行业用户降低上云成本。其中腾讯云TDSQL已被3000多家来自金融、公共服务和电信垂直行业的客户采用,中国十大银行中的六家都应用了该产品。 5月7日19:00-21:40,腾讯云数据库"DB  TALK"系列技术分享会第二期“数据库内核技术探秘”专场即
腾讯云数据库 TencentDB
2022/04/26
8430
5月7日,带您揭秘数据库内核技术
【欧拉计划第 1 题】3 或 5 的倍数 Multiples of 3 or 5
由于暴力解法的算法执行效率很低,需要重复遍历 1000 次,自然效率低下。我们只需要枚举 3 的倍数之和、5 的倍数之和,最后减去它们的最小公倍数之和,便可节省不少时间
攻城狮杰森
2022/06/03
1.3K0
【欧拉计划第 1 题】3 或 5 的倍数 Multiples of 3 or 5
Windows内核开发-3-内核编程基础
这里会深入讲解kernel内核的API、结构体、和一些定义。考察代码在内核驱动中运行的机制。最后把所有知识合在一起写一个有用的驱动。
全栈程序员站长
2022/09/06
1.7K0
Windows内核开发-3-内核编程基础
CentOS7 升级最新内核
yum 方式升级到最新版 导入 elrepo 仓库 rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org yum install https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm 列出可用的内核相关包 # kernel-lt:长期支持版本,用于修复旧版内核的 BUG,这些内核只会修复重大 BUG,并且不会频繁发布版本。 # kernel-ml:最新稳定版本 yum --d
陳斯托洛夫斯記
2022/10/27
2.4K0
CentOS7 升级最新内核
CentOS7修改内核版本
因为研究测试fabric需要安装docker,而docker又对linux内核版本有要求,因此对测试的机器内核升级,以下为整理的内核升级方法步骤,忘指正。
用户4988376
2021/07/21
2K0
centos7 删除无用内核
正常情况有两个启动项,一个是“正常启动”,另一个是“救援模式启动”(rescue)。 如果启动项多于2个,说明当前系统有旧内核未删除。原因是CentOS更新后不会自动删除旧内核。 默认以新内核启动,可以在启动选项中临时选择,也可以修改配置永久指定。
herve
2018/09/20
2.6K0
CentOS 7内核升级操作参考
CentOS(Community Enterprise Operating System)是Linux发行版之一,它由来自于Red Hat Enterprise Linux(RHEL)依照开放源代码规定发布的源代码所编译而成。由于出自同样的源代码,因此有些要求高度稳定性的服务器以CentOS替代商业版的Red Hat Enterprise Linux使用[1]。自从红帽公司单方面宣布终止CentOS的开发后,我们腾讯云的用户也逐步开始将应用迁移到其它操作系统上。由于CentOS 7的维护终止日期在2024年6月30日,距离当前还有一段时间,所以还有少量客户在继续使用着该版本。
dinghailong
2023/01/06
5.5K0
centos7 内核如何升级
需求:由于客户容器化的需要,需要将当前的操作系统升级为5.10.7的版本。 内核升级操作步骤如下: 步骤一:载入公钥、安装elrepo rpm -import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm 步骤二、载入elrepo-kernel元数据 yum --disablerepo=\* --enablerepo
Linux运维技术之路
2022/06/07
2.6K0
PHP7内核剖析.epub
PHP作为最流行的语言之一,自第一个版本发布至今的二十几年里经历了多次重大改进,PHP7版本最大的特色在于其性能上的突破,比PHP5快了一倍。目前PHP7已经得到了广泛应用,越来越多的项目从PHP5迁移到了PHP7。目前,关于PHP内核的资料非常有限,《PHP7内核剖析》以当前最为流行的PHP7版本为基础,系统性地、尽可能详细地介绍PHP语言底层的实现,旨在帮助更多的开发者进一步理解PHP,参与到PHP的实现中,为未来PHP的发展贡献一份力量!全书内容主要包括PHP数据类型的实现、PHP的编译及执行、PHP内存的管理、函数及面向对象的实现、PHP基础语法的实现,以及PHP扩展的开发。《PHP7内核剖析》适用于有一定C语言基础的PHP高级工程师,或者想了解PHP7的内部实现、扩展开发的工程师。
用户3157710
2019/03/20
1.4K0
PHP7内核剖析.epub
centos7 选定默认启动内核,及删除无用内核
(adsbygoogle = window.adsbygoogle || []).push({});
拓荒者
2019/03/11
1.3K0
如何查看linux系统内核版本_centos7内核版本
该命令适用于所有Linux系统,会显示出完整的版本信息,包括Linux系统的名称,如Debian、Ubuntu、CentOS等,和对应的版本号,以及该版本的代号,例如在Debian 8中将会显示代号jessie。
全栈程序员站长
2022/09/25
7.4K0
centos7 选定默认启动内核,及删除无用内核
(adsbygoogle = window.adsbygoogle || []).push({});
拓荒者
2019/05/31
1.2K0
PHP内核之旅-5.强大的数组
一、数组的内部结构 1.底层实现为散列表(HashTable,也称作哈希表) 2.散列表的概念: 是根据关键码值(Key value)而直接进行访问的数据结构。通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。复杂度为O(1)。 文件路径\Zend\zend_types.h _zend_array结构: 1 typedef struct _zend_array zend_array; 2 typedef struct _zend_arra
悟空聊架构
2018/06/26
4750
3.安装PHP5和PHP7
这个路径解压处理虽然不报错,但是没有解压过程,echo查看不报错。==--因为这里没有-v==
py3study
2020/01/08
9690
LAMP(3)安装PHP5、安装PHP7
2.下载包: wget http://cn2.php.net/distributions/php-5.6.30.tar.gz
py3study
2020/01/17
1.1K0

相似问题

音乐下载不在这里

10

为傻瓜创建Ubuntu网络

10

为什么我的化名不在Zsh工作?

20

为什么USB不在非UEFI模式下工作?

20

为什么captchas不在UBUNTU浏览器中工作?

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档