跨界棋盘算法改进

2023-12-28

感谢大卫·卡恩的书,古代密码学成为我的爱好之一,我正在尝试在 Ruby 类中实现来处理旧密码,例如虚无主义密码 http://en.wikipedia.org/wiki/Nihilist_cipher and ADFGVX http://en.wikipedia.org/wiki/ADFGVX。对于这些,一项有用的项目是跨棋盘 http://en.wikipedia.org/wiki/Straddling_checkerboard。我在 Ruby 中有以下实现,欢迎任何改进。

class Key是基类(如果需要,可以是虚拟类)。Key#condensed是一种从给定单词中删除重复字母的方法。

class SKey < Key
  attr_reader :full_key
  attr_reader :alpha, :ralpha

  def initialize(key)
    super(key)
    @alpha = Hash.new
    @ralpha = Hash.new
    @full_key = checkboard()
    gen_rings()
  end

  # === checkboard
  #
  # Shuffle the alphabet a bit to avoid sequential allocation of the
  # code numbers
  #
  # Regular rectangle
  # -----------------
  # Key is ARABESQUE condensed into ARBESQU (len = 7) (height = 4)
  # Let word be ARBESQUCDFGHIJKLMNOPTVWXYZ/-
  #
  # First passes will generate
  #
  # A  RBESQUCDFGHIJKLMNOPTVWXYZ/-   c=0  0 x 6
  # AC  RBESQUDFGHIJKLMNOPTVWXYZ/-   c=6  1 x 6
  # ACK  RBESQUDFGHIJLMNOPTVWXYZ/-   c=12 2 x 6
  # ACKV  RBESQUDFGHIJLMNOPTWXYZ/-   c=18 3 x 6
  # ACKVR  BESQUDFGHIJLMNOPTWXYZ/-   c=0  0 x 5
  # ACKVRD  BESQUFGHIJLMNOPTWXYZ/-   c=5  1 x 5
  # ...
  # ACKVRDLWBFMXEGNYSHOZQIP/UJT-
  #
  # Irregular rectangle
  # -------------------
  # Key is SUBWAY condensed info SUBWAY (len = 6) (height = 5)
  #
  # S  UBWAYCDEFGHIJKLMNOPQRTVXZ/-   c=0  0 x 5
  # SC  UBWAYDEFGHIJKLMNOPQRTVXZ/-   c=5  1 x 5
  # SCI  UBWAYDEFGHJKLMNOPQRTVXZ/-   c=10 2 x 5
  # SCIO  UBWAYDEFGHJKLMNPQRTVXZ/-   c=15 3 x 5
  # SCIOX  UBWAYDEFGHJKLMNPQRTVZ/-   c=20 4 x 5
  # SCIOXU  BWAYDEFGHJKLMNPQRTVZ/-   c=0  0 x 4
  # ...
  # SCIOXUDJPZBEKQ/WFLR-AG  YHMNTV   c=1  1 x 1
  # SCIOXUDJPZBEKQ/WFLR-AGM  YHNTV   c=2  2 x 1
  # SCIOXUDJPZBEKQ/WFLR-AGMT  YHNV   c=3  3 x 1
  # SCIOXUDJPZBEKQ/WFLR-AGMTYHNV
  #
  def checkboard
    word = (@key + BASE).condensed.dup
    len = @key.condensed.length
    height = BASE.length / len


    # Odd rectangle
    #
    if (BASE.length % len) != 0
      height = height + 1
    end

    print "\ncheckboard size is #{len} x #{height}\n"
    res = ""
    (len - 1).downto(0) do |i|
      0.upto(height - 1) do |j|
        if word.length <= (height - 1) then
          return res + word
        else
          c = word.slice!(i * j)
          if not c.nil? then
            res = res + c.chr
          end
        end
      end
    end
    return res
  end 

  # == gen_rings
  #
  # Assign a code number for each letter. Each code number is
  # sequentially allocated from two pools, one with 0..7 and
  # the other with 80..99.
  #
  # Allocation is made on the following criterias
  # - if letter is one of ESANTIRU assign a single code number
  # - else assign of of the two letters ones
  #
  # Generate both the encoding and decoding rings.
  #
  # XXX FIXME Use of 80-99 is hardcoded
  #
  def gen_rings
    ind_u = 0
    ind_d = 80

    word = @full_key.dup
    word.scan(/./) do |c|
      if c =~ /[ESANTIRU]/
        @alpha[c] = ind_u
        @ralpha[ind_u] = c
        ind_u = ind_u + 1
      else
        @alpha[c] = ind_d
        @ralpha[ind_d] = c
        ind_d = ind_d + 1
      end
    end
  end # -- gen_rings

Ruby/Python/Perl 或伪代码对我来说很好。谢谢你的任何想法。


也许你应该尝试重构:我的=>代码 http://refactormycode.com/反而?那里有很多乐于助人的人。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

跨界棋盘算法改进 的相关文章

  • ruby 中的树和图数据结构[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我很难找到在 ruby 中使用的树数据结构 我可以研究一些众所周知的吗 我的要求很简单 我想创建一棵树 或者可能是一个图 并找到一些节点之
  • Ruby:使用默认值定义类级别哈希

    我有一个基本的红宝石课程 class LogEntry end 我想做的是能够用几个值定义一个哈希 如下所示 EntryType error gt 0 warning gt 1 info gt 2 这样我就可以访问这样的值 或类似的值 Lo
  • 该块如何用于整数倍方法?

    我不明白如何n times该行在下面给出的 ruby 代码中工作 特别是逗号的含义以及如何new变量已更新 def fib n raise fib not defined for negative numbers if n lt 0 new
  • 如何将可求和指标压缩为 ruby​​ 表中的唯一标识符

    我正在尝试将可求和指标压缩为 ruby 表中的唯一标识符 我有下表 id1 123 id2 234 id1 345 压缩指标最有效的方法是什么 使其看起来像这样 id1 468 id2 234 我认为其他回答者想太多了 您只需一次操作即可完
  • 在 Rails 中强制内联渲染 PDF 文档

    我正在编写一个从一组 XML 文件生成 PDF 文件的服务 正在正确生成 PDF 但是 每次我单击 查看 PDF 链接时 浏览器都会要求用户下载 PDF 文件 我需要 PDF 内联显示 就像任何常规 HTML 页面一样 我虽然我写的代码是正
  • 对 Rails 3.1 中的特定路由强制使用 SSL

    我需要强制启用 SSL所有路线在我的申请中除了landing index In config application rb 我有 config force ssl true Then in landing controller rb 我有
  • 使用 Devise 和 Rails 从 Twitter Oauth 获取电子邮件

    我已经设置了一个基本的 Rails 应用程序来使用 twitter oauth gem 和设计 并且已经能够登录用户 但是 我的问题是我现在已将我的应用程序列入白名单 并且我想在响应中收到用户的电子邮件 我已遵循 Twitter 端的所有必
  • 如何在 Mac OS X 上使用 ulimit 或每个进程更改 C 或 Ruby 程序的堆栈大小?

    似乎为 C 程序或 Ruby 程序 使用 C 堆栈 设置堆栈大小的推荐方法是使用ulimit在 Bash shell 中 但 ulimit s 8192 ulimit s 16384 bash ulimit stack size canno
  • 如何从 Ruby 模块中仅导入几个函数?

    假设我有一个带有以下方法的模块 function1 function2 function3 我想导入 function1 和 function2 但不导入 function3 有没有办法在红宝石中做到这一点 不确定是否有一种干净的方法来添加
  • 如何计算加权平均值?

    我的语言是PHP 但是算法应该是相当通用的 我有一个关联数组 比方说 评级和评级次数 ratings array 1 gt 1 2 gt 3 3 gt 6 4 gt 3 5 gt 3 这相当于 1 2 2 2 3 3 3 3 3 3 4 4
  • 这个结果背后的逻辑是什么?

    def foo override end p foo bye bye p foo hello world Output override hello 我可以理解如果结果是 override world or even bye bye hel
  • Ruby 模板:如何将变量传递到内联 ERB 中?

    我有一个内联到 Ruby 代码中的 ERB 模板 require erb DATA a gt HELLO b gt WORLD template ERB new lt lt EOF current key is current value
  • 如何在 Rails 3 项目中包含 SSL 证书

    我开发了一个 Rails 3 项目 它使用thin作为服务器 与 Devise 和 Doorkeeper 一起进行身份验证 我想在我的项目中添加 SSL 证书 我看过一些描述如何在 Rails 3 项目中使用 SSL 证书的帖子 但没有一个
  • 如何改进 PHP 分页算法?

    我正在研究 PHP 中的分页算法 我可以猜测它需要改进的空间 所以我想对如何改进它有一些想法 无论是从 UI UX 的角度清理代码本身 还是你能想到的任何其他东西 该算法应输出如下所示的分页 1 2 3 6 7 8 97 98 99 or
  • Ruby/Rails - 访问“查找”表而不对其进行建模?

    这是针对 Ruby on Rails 3 0 x 项目的 我有一个 查找 表 其中包含来自供应商的数据 当我从其他来源导入数据时 我想检查此表 加入 SKU 以获取额外数据 在我的应用程序中为该表创建模型对我来说似乎不合适 我的应用程序永远
  • 如何查看移动设备是否已注册

    我正在使用适用于 Amazon SNS 的 Amazon AWS Ruby SDK 但在已注册的设备方面遇到一些问题 有时 当设备再次注册时 我会收到类似错误AWS SNS Errors InvalidParameter Invalid p
  • 循环中的递归算法复杂度(运行时间)

    我想了解您对如何检测以下递归算法的 T n 运行时间 的意见 Charm 是一种用于发现事务数据库中频繁闭项集的算法 频繁闭项集列表是在一组交易 tids 中多次出现的频繁项 例如面包和牛奶是经常一起购买的物品 它们是通过将索引为 i 的当
  • 在 Ruby 1.8.7 中将带有二进制数据的 YAML 响应转换为 UTF-8

    我正在从 API 中提取响应并接收 response job unit count 1 slug Answers lc tgt ja body tgt binary 5Zue562U lc src en body src Answers j
  • 检查 Ruby 上的浏览​​器控制台输出

    如何检查浏览器控制台是否有错误 例如 我用 Selenium 启动了浏览器 firefox 的 chrome 并且用 Selenium WebDriver 做了一些操作 之后我想知道网络控制台中是否有任何错误 我尝试接受控制台错误 例如 d
  • 缓存感知树的实现

    I have a tree where every node may have 0 to N children 用例是以下查询 给定指向两个节点的指针 这些节点是否位于树的同一分支内 Examples q 2 7 gt true q 5 4

随机推荐

  • sql if语句检查空参数

    我正在尝试传递一个参数 如果该参数为空 我想将县 ID 设置为其自身 如果县 ID 不为空 那么我想带回县协作中所有县的记录 我收到错误的语法错误 关于如何做到这一点有什么想法吗 DECLARE pCountyId as int selec
  • Java中能否限制输入只能输入数字或者只能输入一定数量的数字? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 在 Java 中 您可以将使用扫描仪的输入限制为只能输入某些类型 例如数字或字母 另外 您可以将输入限制为可以输入的一定数量的字符吗
  • Java:将秒输入转换为小时/分钟/秒

    这是一个练习题 摘自Java 软件解决方案 程序设计的基础作者 Lewis Loftus 第 4 版 问题 PP2 6 这是一个link http mimoza marmara edu tr odemir Java 20Software 2
  • R DataFrame 中的集合

    我有一个 csv 看起来像 Deamon Host 1 2 4 aaa 03 Pixe Paradigm 1 3 5 11 us 我需要将其读入数据帧中进行分析 但数据中的第三列由 分隔 并且需要像由 分割的集合或列表 1 e 一样读取 以
  • 为什么受保护的访问修饰符与静态一起使用时与与非静态一起使用时的工作方式不同

    通常 当我们对类中的字段使用 protected 时 由于子类位于不同的包中 因此其子类无法使用基类的引用来访问它 那是真实的 但我发现当 field 添加 static 关键字时 它的行为有所不同 它变得触手可及 这怎么可能 有谁有答案吗
  • JTable 中的日期排序无效

    请看下面的代码 import java awt import java awt event import java text NumberFormat import java text ParseException import java
  • 使用和串流

    我调用 Soap 扩展中的方法来解密和验证 Soap 消息 我有这样的课程 我有一个类 它解密并验证签名 Soap 消息 它在 Soap 扩展类中返回流 方法 DecryptAndVerifySingXml 和 GetGuid 使用类肥皂扩
  • 雅虎电影 API 文档 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在尝试使用新的未发布的 Yahoo Movies API 但找不到任何有关它的官方或非官方文档 有
  • C# 如何检查当前字符串的日期是否是今天?

    我有一个格式为 字符串 通用时间 的日期 请参阅MSDN 链接在这里 http msdn microsoft com en us library ms684436 28VS 85 29 aspx 我需要检查这个日期是否是今天以及是否是 do
  • C 中数组的数组,其中数组的长度不同

    我知道你可以轻松地制作一个固定长度的矩阵 double m 2 但是 我想要一个数组数据结构 其中存储具有不同长度的双精度类型数组 我怎么做 一个例子是 arr1 1 2 3 4 arr2 1 2 锯齿状阵列 https en wikipe
  • 如何在xamarin跨平台应用程序中使用Web Api

    我创建了从 SQL 数据库检索数据的 Web api 我需要在适用于 Android 的 xamrin 和适用于 iOS 的 xamarin 中使用 Web api 截至目前 适用于 Android 的 Xamarin 我不知道如何根据按钮
  • 如何从视图列将分类列总计转换为 XPageTotal 值

    我需要获取根据文档 ID 分类视图的列的总和 我能够使用以下代码获得整列的总和 var myView NotesView database getView totalScore var nav NotesViewNavigator myVi
  • 模拟弹簧控制器验证器

    我想对这个 Spring 控制器方法进行单元测试 Autowired private MyValidator validator public String register HttpServletRequest request Model
  • 我们怎样才能让微软在VS 2010专业版中添加IntelliTrace呢? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 既然 Microsoft 已经发布了 VS 2010 我就进入了产品页面here http www microsoft com visualstudi
  • 通过“添加到购物车”贝宝购买多件商品

    我正在努力通过 添加到购物车 贝宝按钮购买不止一件商品 这是我的代码
  • 如何检测安装了哪些 .NET Framework 版本和服务包?

    有人问了类似的问题here https stackoverflow com questions 198931 how do i tell if net 35 sp1 is installed 但它特定于 NET 3 5 具体来说 我正在寻找
  • 如何解决 java.lang.VerifyError: org/apache/poi/xssf/usermodel/XSSFWorkbook?

    我正在尝试从 asset 文件夹中读取 xlsx 文件 我收到以下异常 05 16 10 12 05 613 E AndroidRuntime 2915 致命异常 主要 05 16 10 12 05 613 E AndroidRuntime
  • iOS 在滚动视图之间拖放

    所以这就是问题所在 我有两个滚动视图 其中一个充满了 10 个奇怪的子视图 基本上就像扑克牌 自定义类视图 我希望能够将其中一些视图拖放到我拥有的空滚动条中 这两个滚动视图之间有许多不同的视图 所以我想显示实际从一个视图拖动并放置在另一个滚
  • spectj 中 .. 和 * 是什么意思

    我的理解是 is 0 Many参数和 是一个参数any姓名 它是否正确 spectj 是否支持类似语法args myArg 这是来自 AspectJ 网站 http www eclipse org aspectj doc next prog
  • 跨界棋盘算法改进

    感谢大卫 卡恩的书 古代密码学成为我的爱好之一 我正在尝试在 Ruby 类中实现来处理旧密码 例如虚无主义密码 http en wikipedia org wiki Nihilist cipher and ADFGVX http en wi