`

ruby编程题

    博客分类:
  • ruby
阅读更多
学了一段时间ruby后,又学了段时间python,学了python时间后,又想学学ruby了,本来原来打算用python搞个C/S软件的,学了一段时间后才发现根本没有针对python3的类库,wxpython没有,而pyqt那个客户端又有些问题,再加上其本身是收费的,越来越没劲,从而又想学下ruby了,毕竟在web方面,django是赶不上rails的,而且python那个通过缩进来区别代码段用着不是很习惯,所以又改学ruby了。前面的一遍博客已经有一二关的答案了,
http://fansofjava.iteye.com/admin/blogs/660506
所以从第3关开始写,改用ruby实现,其实也是从官方抄的。
One small letter, surrounded by EXACTLY  three big bodyguards on each of its sides.
题目的意思是一个小写字母,两边有且仅有三个大写字母,开始想了下,觉得很TMD的有难度,其实这就是搞web开发久的后果,几乎不会写算法了,因此无从下手,其实这个用正则表达式很简单:

text = open('e:/three.txt').read()
p text.scan(/[^A-Z][A-Z]{3}([a-z])[A-Z]{3}[^A-Z]/).join


ruby有种用法,有些方法后面可以不加括号,即也可以写成join()。

后面的关的确开始难起来了,第四关就有点难了,这关地址为
http://www.pythonchallenge.com/pc/def/linkedlist.php
当点击那张图片时地址变为
http://www.pythonchallenge.com/pc/def/linkedlist.php?nothing=12345
点此页面nothing的值也是需要改变的,这样一个一个继续下去,直到最后出现结果为止,
这个题有点难,本来对ruby都不是很熟悉的人我来说,是不太可能做得出来的,只能看答案了:

require 'open-uri'
nothing = "12345"
1.upto(400) do |n|
 open("http://www.pythonchallenge.com/pc/def/linkedlist.php?nothing=#{nothing}") do |f|
   str = f.read
   if str =~ / next nothing is (\d*)/ then
     newnothing = $1
     puts "#{nothing} -> #{newnothing} \t\t#{str.chomp}"
     nothing = newnothing
   elsif str =~ /Divide by two/ then
     ni = nothing.to_i / 2
     nothing = ni.to_s
   else
     puts str
     raise "Finished!"
   end
 end
end


可以看出,用ruby尚且写了如此多的代码,用java的话不知道得写多少代码。

第四关这个是与python相关的,主要是关于序列化的问题,查看源代码内,发现有个banner.p的文件,把它下载下来,这是一个python序列化后的文件,当然对于python不了解的我来说,也只有在网上找答案:
引用

<!-- peak hell sounds familiar ? -->这个提示, peak hell sounds like pickle,
原来这个banner.p是使用pickle序列化了python的一个对象保存下来的文本, 以前没有接触过pickle,


通过下面代码可以查出序列化前的数据:

import pickle
obj = pickle.load(open("banner.p", "r"))
for line in obj:
    print "".join([k*v for k, v in line])


如果要用ruby,也只能处理转换后的数据,也就是说只能用python来反序列化此数据,反序列化文件后会得到附件内的数据。就可以用ruby转换:

text = open("f:/ruby/banner.rb").read()
puts eval(text.tr('()','[]')).collect{|i|i.collect{|p|p[0]*p[1]}.join}


可以看出,pythonchange内容还是挺丰富的,涉及的范围很广。

第5关就更难了,如果凭空想象,依自已的实力几乎做不出来,经过网上的多方查证,勉强理解这道题的答案来历。这道题 链接:
http://www.pythonchallenge.com/pc/def/channel.html
网页给出的是一张图片,看不出什么,只得照例看源码,后有人提醒:
1.源码的第一行为:<html> <!-- <-- zip -->
2.拉链(zipper)
所以应该有一个zip的文件,于是将channel.html改为channel.zip,果然有个zip的文件可供下载,打开zip文件中的readme.txt 可以看到
welcome to my zipped list.

hint1: start from 90052
hint2: answer is inside the zip

于是一直查找到最后一个文件,查看其内容:
require 'zip/zip'
nothing = 90052
comments = ""
Zip::ZipFile.open("f:/channel.zip", Zip::ZipFile::CREATE) {
     |zFi|
     while nothing > 0
         nNot = zFi.read(nothing.to_s + ".txt")
         nothing = nNot.split("nothing is ")[1].to_i
     end
     p nNot
}


输出结果为:
"Collect the comments."

结果是想收集注释,其实这个东西本人是一点都不了解,也没看见哪里有什么文件注释,关于ruby的zip处理,可见:
http://rubyzip.sourceforge.net/
处理结果:
require 'zip/zip'
nothing = 90052
comments = ""
Zip::ZipFile.open("f:/channel.zip", Zip::ZipFile::CREATE) {
     |zFi|
     while nothing > 0
         nNot = zFi.read(nothing.to_s + ".txt")
         comments += zFi.get_entry(nothing.to_s + ".txt").comment
         nothing = nNot.split("nothing is ")[1].to_i
     end
     puts comments
}


输出结果为:


访问http://www.pythonchallenge.com/pc/def/hockey.html会得到一句话:
it's in the air. look at the letters.

联系上面的那张图片里面的字母,答案就出来了:oxygen,真不容易。

第6关更难了,自己不看答案也是不可能做出来的,说实话,这题必需要求答题人员对语言有相当高的认识才行。我当然还不是那种人,所以只能看答案。
访问:http://www.pythonchallenge.com/pc/def/oxygen.html
这网页里面只有一张图片,其余什么都没有,唯一有点特别的就是图片中间有一条颜色不太一样的条纹,答案就从中产生。这条条纹中每种颜色的长度为7px,总长与宽为629*95,用ruby的话,有关于图片处理的组件rmagick,这个组件功能很强大,在ror中经常看见有人用,不过也有些复杂,所以目前自己还没试用过,正好这也是个机会。
不过用起来才发现还真是复杂,首先是安装,rmagick对windows平台的支持力度还不够吧,不支持ruby1.9.1,在1.8.7上也费了点神才跑起来。步骤是在别人那里看来的:
引用

1 从http://rubyforge.org/projects/rmagick/ 下载rmagick-win32 对应的zip包(RMagick-2.12.0-ImageMagick-6.5.6-8-Q8.zip).
2 解压zip到一个临时目录,在该目录中有一个ImageMagick的安装文件ImageMagick-6.5.6-8-Q8-windows-dll.exe,安装。
3 开一个命令行窗口,cd到解压的临时目录,敲入命令: gem install rmagick.
4.把ImageMagick 的安装路径放到path环境变量里面


这样以后,还需要引入才可以用,结合上面需求,具体代码如下:
require 'rubygems'
require 'RMagick'

image = Magick::ImageList.new("f:/oxygen.png")
#x, y, width, height
pixels = image.get_pixels(0,image.rows/2,image.columns,1)
letters = pixels.map {|pix| pix.red.chr}
clue = ""
letters.inject(0) do |count, char|
  clue += char if count == 0
  (count + 1) % 7
end
/\[(.+)\]/.match(clue)
p $1.split(", ").map {|num| Integer(num).chr}.join


ruby有些地方很怪异,比如Array.map与Array.collect方法作用是一样的,类似的事情还很多,而且早一点的版本根本就没这两个方法,可见起初,ruby api还是相当的不完善。

为什么要引入rubygems这个包目前还不清楚,但是不引入的话会提示找不到文件。当然目前对ruby的理解还在初级阶段,不理解的东西太多了。正因如此,解决此题本人花了相当多的时间,几乎花了半天时间,ruby api的查看目前还没找到比较好的方法也是个问题。

求最大公约数:

def mod(a,b)
  if a<0 || b<0
    return "求模数字需要大于0"
  end
  a,b=b,a if(a<b)
  @yueshu = a%b
  if @yueshu.zero?
    b
  else
    mod(b,@yueshu)
  end
end

p mod(24,2)

  • 大小: 38.9 KB
分享到:
评论

相关推荐

    Ruby面试题和答案(2024年收集更新)

    1、Ruby编程语言是什么? Ruby 是一种动态的、反射性的、通用的、开源的编程语言,专注于简单性和生产力。Ruby 具有 Perl、small talk、Eiffel、Ada 和 Lisp 的混合特性。Ruby 旨在创建一种与命令式语言的功能取得...

    Ruby语言教程&案例&相关项目资源

    这篇文章是一份全面而深入的Ruby语言学习资源指南,旨在为那些想要学习Ruby编程的开发者提供清晰的学习路径和实践机会。通过这篇文章,您将了解到Ruby语言教程、案例以及相关项目资源的丰富内容,从而能够系统地掌握...

    [转] ruby学习一个综合小练习

    NULL 博文链接:https://rich8w.iteye.com/blog/464916

    mars_car_problem.rar_Mars_mars car_火星车 编程题

    这是一个用ruby写的经典火星车问题,其中包含了单元测试代码

    leetcode答案-ruby_leetcode:ruby_leetcode

    leetcode 答案 打卡 每天完成自己的题目后打卡。 Victor 打卡 姓名 日期 打卡 ...Ruby ...做这些题目的不是为了要去应聘...编程题。比如:atoi,strstr,add two num,括号匹配,字符串乘法,通配符匹配,文件路径简化,Text

    初级java笔试题-ugly.automata:生成元胞自动机的算法集合

    初级java笔试题 丑陋的自动机 用于生成元胞自动机的算法集合。 目前仅包含“基本元胞自动机”或 Wolfram 书中的酷图片。 特征 提供一个 Automata::Elementary 类,该类采用规则编号、初始状态以及 #run(steps) 方法...

    高级java工程师笔试题-awesome:惊人的

    高级java工程师笔试题 精彩访谈 技术面试问题列表的精选列表。 如果你想贡献,请阅读 或 。 目录 编程语言/框架/平台 安卓 . AngularJS 角 主干JS C++ C C# 。网 Clojure CSS Cucumber 姜戈 码头工人 EmberJS 二郎 ...

    taoup:Unix编程之道(Ruby驱动的ANSI彩色运程)

    TAO(Unix编程的艺术)(和相关的系统顿悟) 这是一个Ruby驱动的,ANSI彩色的,类似于fortune的程序,用于在适当的时候(例如登录时)拥护智慧。 在每种文化中,我都会遇到一个以“智慧”为题的章节。 然后我确切...

    每日优鲜java笔试题-domtest:回购

    每日优鲜java笔试题Ruby书签 这是一个精选的基本 Ruby 和 Ruby on Rails 资源集合。 该项目旨在维护对初学者和高级 Web 开发人员同样有用的结构良好的参考。 ★ 代表编辑选择。 该列表不打算包括任何与 Ruby 编程...

    java笔试题算法-shiika:一种静态类型的编程语言

    java笔试题算法志贺 Shiika 是一种静态类型的、类似于 Ruby 的编程语言。 自 2000 年以来,Ruby 一直是我的“母语”。我喜欢 Ruby 的是: 容易写 不带括号的方法调用(例如p foo ) 方便的语法,如#{} 、修饰符if等...

    leetcode中国-LeetCode-Notes:学习DS&A

    leetcode中国 Leetcode NoteBook 力扣笔记 This is a collection of my ...这是一个记录我写力扣题和学习算法的笔记 ...编程语言使用: JavaScript 和 Ruby Langguages for notes: English, Chinese 笔记语言:中英

    CodeForces – 1323D Present(思维+数学)

    我觉得太麻烦了就放弃这个题了,补题的时候看了题解,感觉题解已经说的很明白了,在这里再记录一下吧,感觉还是自己太菜了,需要多做题长见识 题解的意思是,可以按位维护,因为异或等位运算,最大的特点就是,每一...

    百度软件测试开发工程师面试题整理

    目录 Chap1 测试基础 ...Chap6编程及代码题 Chap7 计算机基础 1. C/C++ 2. JAVA 3. 多线程: 4. 网络编程 5. Linux: Chap 8 顷目和背景 Chap9 外部工具 1. Selenium 2. Ruby-Watir 3. QTP: 4. LoadRunner

    高级java工程师笔试题-All-Language-Interview-Question-:所有编程语言面试问答详解

    高级java工程师笔试题全语言-面试-问题- 所有编程语言面试问答详解 作者 拉玛尼·希特什 iOS 开发者 Gmail:- 精彩访谈 请阅读 或 如果您想贡献。 目录 编程语言/框架/平台 安卓 AngularJS 角 主干JS C++ C C# 。网...

    Leetcode Top100题目和答案(C#完整版 面试必备).pdf

    力扣(LeetCode) 相比其他编程平台有着很多优势: **各大知名公司面试真题:**对于求职者在这上面训练更具有针对性,目前国内一些公司面试时直接从在这上面出题。 **大中小企业都在使用:**常常会直接或者间接...

    feeling_lucky:你觉得幸运吗?

    感觉很幸运讨厌 NoMethodErrors? 你觉得幸运吗? 这颗宝石将使正确的拼写方法成为过去。 我们现在真的是在未来! 我强烈推荐这个 gem 用于生产环境,为什么拼写错误会避免用户使用你的应用程序?...

    高级java工程师笔试题-Javainterviewquestions:Java面试题

    高级java工程师笔试题目录 编程语言/框架/平台 安卓 AngularJS 角 主干JS C++ C C# 。网 Clojure CSS Cucumber 姜戈 码头工人 EmberJS 二郎 高朗 图Ql HTML 离子 IOS Java JavaScript jQuery 前端构建工具 ...

    程序员算法趣题 原文

    本书是一本解谜式的趣味算法书,从实际...过算法的关键原理讲解,从思维细节入手,发掘启发性算法新解,并辅以Ruby、 JavaScript等不同语言编写的源代码示例,使读者在算法思维与编程实践的分合之 间,切实提高编程能力

    关于PHP常见面试题.pdf

    2. PHP与其他后端语言(如Python、Ruby等)有哪些差异和优势?请说明PHP相对于其他语言的优势。 3. PHP中的变量作用域是什么?请说明在PHP中的变量作用域规则。 4. PHP中如何进行错误处理(Error Handling)?请说明...

Global site tag (gtag.js) - Google Analytics