`
bryanzk
  • 浏览: 58521 次
文章分类
社区版块
存档分类
最新评论

Best of Ruby Quiz 笔记之二: LCD numbers

阅读更多

quiz2 LCD 数字

题目意图:输出类似LCD风格的数字,内容由命令行参数决定,并根据"-s"命令行参数指定其大小

思路:
需要的method
1) 转换方法,将正常的数字,转换为LCD风格的数字
2) 缩放方法,缩放LCD风格的数字
3) 处理命令行参数方法,读取输入的数字和给定的"-s"参数

笔记:
1、transpose
arr.transpose -> an_array
假设 arr是一个由数组组成的数组,并调换其行和列
a = [ [1,2], [3,4], [5,6] ]
a.transpose -> [[1,3,5], [2,4,6]]
2、
DIGITS = <<END_DIGITS.split("\n").map { |row| row.split(" # ") }.transpose
 -  #    # -  # -  #    # -  # -  # -  # -  # -
| | #  | #  | #  | #| | #|   #|   #  | #| | #| |
    #    # -  # -  # -  # -  # -  #    # -  # -
| | #  | #|   #  | #  | #  | #| | #  | #| | #  |
 -  #    # -  # -  #    # -  # -  #    # -  # -
END_DIGITS

将上面的字符串进行如下处理后转成数组
1) 按换行符号"\n"拆分为数组
2) 对数组中每个元素按"#"拆分为数组,并置回原数组中
3) 此时的数组形为[ [" -  ", "    "," -  ",...], ["|  | ", ...], [...], ... ] 共5个元素,每个元素都是包含十个元素的数组,
对大数组进行transpose操作后,大数组变为有十个元素,分别是0-9的lcd风格的数字显示。每个元素都是有5个元素的数组,并且这个5个元素构成一个lcd风格的数字显示,5个元素对应5行。

3、row = line.dup
dup obj.dup->other_obj
生成obj的一个浅拷贝--拷贝了obj的实例变量,但是没有拷贝他引用的对象。dup拷贝了obj的tainted (是否受信)状态。同时可参加Object#clone的描述。一般而言,在派生类中clone和dup或许有不同的语义。一般使用clone来复制一个对象以及它的内部状态,而dup通常使用派生对象的类来创建新的实例。

4、scale方法说明
def scale( num, size )
 bigger = [ ]
 num.each do |line|         # 作为参数传进来的num其实就是一个数字的lcd显示,此处针对其5行字符做处理
  row = line.dup        
  row[1, 1] *= size        # row[1,1]指向下标为1,并且取1个长度的元素的组合,这个元素有可能是"-"或空格,
                  # 该元素总是应该随着size变化的
  if row.include? "|"       # 包含"|"的行,需要纵向缩放
   size.times { bigger << row }
  else
   bigger << row         # 不包含"|"的行,只要处理横向缩放,即"-"和空格即可
  end
 end                # 缩放完成
 bigger              # 返回缩放后的数组
end

5、shift
arr.shift->obj 或nil
返回arr的第一个元素,并将它从数组中删除(其他元素左移一个位置)。如果数组为空,返回nil
args = ["-m", "-q", "filename"]
args.shift -> "-m"
args -> ["-q", "filename"]

6、n.each_byte do |c| ……
each_byte 把str中的每个字节传入给定的block

7、zip
enum.zip(<arg>) ->array
enum.zip(<arg>){|arr|block} -> nil
把参数转成数组,然后将enum中的元素和每个参数中对应的元素合并起来。结果是一个和enum具有相同数目元素的数组。其中的每个元素是一个含有n个元素的数组,此处的n比参数个数大1。如果任意一个参数的元素个数小于enum的元素个数,则使用nil。如果带有block,则以每个输出的数组为参数进行调用,否则返回由结果数组组成的数组。

a = [4, 5, 6]
b = [7, 8, 9]
(1..3).zip(a, b)   -> [[1, 4, 7], [2, 5, 8], [3, 6, 8]]
"cat\ndog".zip([1]) -> [["cat\n", 1], ["dog", nil]]
(1..3).zip   -> [[1],[2],[3]]

在LCD_number.rb中,
num = ([""] * (s * 2 + 3)).zip(*num)
将num这个数组的元素做一次行列转换,,转为有s*2+3个元素的数组,每个数组元素包含每行应显示的字符

/Files/bryanzk/LCD_number.rar



bryanzk 2007-07-18 17:00 发表评论
分享到:
评论

相关推荐

    Best of Ruby Quiz

    《Best of Ruby Quiz》是一本聚焦于Ruby编程语言的精选问答集锦,旨在帮助开发者深入理解和掌握Ruby的各种特性。这本书的描述简洁明了,"Best of Ruby Quiz"直接点出了其核心内容——一系列关于Ruby的精彩挑战和问题...

    《Best of Ruby Quiz》

    读者大多可以想出一种办法来解决这些问题,往往还能 通过思考和重构找到第二种优雅的设计,但这本书却给你列出了第三种、第四种真正精巧的解决方案——充分利用Ruby技巧才能得出的解决方案。

    《RUBY QUIZ - The Solitaire Cipher 》

    通过查看提供的文件列表,我们看到有“Pragmatic.Bookshelf.Best.of.Ruby.Quiz.Mar.2006.pdf”,这很可能是《Pragmatic Programmer》出版社出版的一本关于Ruby Quiz的最佳解答合集,其中可能包含了对这个具体挑战的...

    Pragmatic.Bookshelf.Best.of.Ruby.Quiz.Mar.2006

    #### 一、《Pragmatic Bookshelf: Best of Ruby Quiz Mar. 2006》概述 - **书籍标题**:本书名为《Pragmatic Bookshelf: Best of Ruby Quiz Mar. 2006》,是一本专注于Ruby编程语言的经典练习册。 - **书籍内容**:...

    Pragmatic.Bookshelf.Best.of.Ruby.Quiz.Mar.2006.pdf

    《Pragmatic Bookshelf Best of Ruby Quiz Mar 2006》是一本专注于Ruby编程语言的书籍,由Pragmatic Bookshelf出版社出版。这本书的独特之处在于它采用了问答的形式,即"Quiz",来帮助读者深入理解和掌握Ruby的核心...

    Best.of.Ruby.Quiz

    《Best.of.Ruby Quiz》是一本专为Ruby初学者精心编写的英文教程,旨在帮助新手逐步掌握这门强大而优雅的编程语言。Ruby作为一种动态、面向对象的脚本语言,因其简洁的语法和强大的元编程能力,深受开发者的喜爱。...

    ruby_quiz.rar

    "Pragmatic.Bookshelf.Best.of.Ruby.Quiz.Mar.2006.pdf"是这本书的电子版,出版于2006年3月,由Pragmatic Bookshelf出版社发行。 Ruby是一种动态、面向对象的脚本语言,以其简洁、优雅的语法和强大的元编程能力著称...

    BestofRubyQuizFreePdfBook.pdf 英文原版

    Best of Ruby Quiz – Free Pdf Book

    Ruby语言中英文教程.rar

    Best.of.Ruby.Quiz.pdf O'Reilly - Ruby in a Nutshell (2001).chm OReilly.Ruby.Cookbook.Jul.2006.chm Rails Recipes (2006) .pdf Rolling with Ruby on Rails.chm Ruby On Rails Book (Save Ink Version).pdf ...

    MongoDB and Ruby

    ### MongoDB与Ruby:深入探索文档型数据库及其在Ruby中的应用 #### 一、MongoDB简介 MongoDB是一款基于分布式文件存储的开源文档型数据库系统,它由C++编写而成,适用于处理大规模数据集。MongoDB的设计哲学是为了...

    object-array-quiz-lucyk22:由GitHub Classroom创建的object-array-quiz-lucyk22

    object-array-quiz-lucyk22:由GitHub Classroom创建的object-array-quiz-lucyk22

    quiz-modulo12:使用 node.js 和 BD Postgress 创建题库和答案游戏

    测验 node.js 中的项目用于制作测验 连接到 Postgress 数据库 要在本地运行,请在 unix 命令控制台键入:&gt; foreman ... 要在本地运行,Windows 命令控制台键入:&gt; Quiz 在浏览器中: 要在云中运行: 在浏览器中: :

    Rails相关电子书汇总二

    文件名 "Best of Ruby Quiz Volume One.pdf" 暗示了一本书籍,可能是系列中的第一卷,专门收集了关于Ruby编程的智力挑战或问题解答。这种类型的书籍通常会涵盖各种编程技巧、最佳实践以及对语言特性的深入理解,对于...

    quiz-app::performing_arts:Projeto feito com Angular,聋子,重罪,阿尔根斯测验

    :closed_mailbox_with_raised_flag: Contribuindo para o Quiz应用程序 Para contribuir com Weather App,埃斯帕加斯地区: Bifurque esterepositório。 Crie um分支: git checkout -b &lt;nome&gt; 。 faasa ...

    ssd3 practical quiz2

    【标题】"ssd3 practical quiz2"是一个与软件工程相关的实践测验,可能是课程"Software System Development 3"(SSD3)的一部分。这个测验可能涉及了软件开发过程中的实际操作和问题解决,旨在检验学生在项目管理和...

    javascript-quiz:一个用 javascript 编码的 javascript 测验

    "javascript-quiz"项目就是一个利用JavaScript构建的互动式测验,旨在帮助学习者检验和提升他们的JavaScript知识。这个测验可能是通过创建HTML页面来呈现问题,使用JavaScript处理用户交互,并可能结合CSS来实现视觉...

    JavaScript-Quiz-Application-:使用HTML,CSS和JavaScriptJavaScript测验应用程序

    最后,压缩包中的"JavaScript-Quiz-Application--main"可能是一个主文件,它可能包含了整个项目的HTML、CSS和JavaScript代码。通过分析和理解这个文件,你可以看到上述技术是如何协同工作的,从而加深对Web开发的...

    Swifty:A Movie Trivia Quiz移动应用程序:video_game:(2019)

    电影Trivia Quiz移动应用程序(2019) :brain: :video_game: 一个用Swift , Java , PHP和SQL编写的Android和iOS琐事测验移动应用。 它使用Google的Firebase服务处理用户帐户,并最初使用通过PHP scripts的MySQL ...

Global site tag (gtag.js) - Google Analytics