`

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-流利说面试题使用任意ruby框架实现一个p2p交易系统

    在Ruby编程语言中,设计和实现一个P2P(peer-to-peer)交易系统是一项具有挑战性的任务,尤其在面试环境中。P2P交易系统的核心在于它允许用户直接互相交易,无需中间人的介入,如银行或其他金融机构。下面我们将深入...

    ruby入门练习题.zip

    这个"ruby入门练习题.zip"文件显然是为了帮助初学者逐步掌握Ruby编程的基础和面向对象的概念。以下是一些关于Ruby语言和面向对象编程的重要知识点: 1. **Ruby的起源与特点**:Ruby由日本人松本行弘在1993年创建,...

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

    标题中的“ruby学习一个综合小练习”表明这是一个关于Ruby编程语言的学习资源,可能是通过一个实际的小项目或练习来帮助学习者提升对Ruby的理解。描述中提到的“博文链接”指向了一个特定的博客文章,虽然没有给出...

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

    ### Ruby编程语言简介 #### 1. Ruby编程语言概述 Ruby是一种动态的、反射性的、通用的、开源的编程语言,其设计初衷在于提供一种既简单又高效的编程体验。Ruby结合了Perl、Smalltalk、Eiffel、Ada以及Lisp等语言的...

    Programming ruby.pdf

    《Programming Ruby》是一本关于Ruby编程语言的经典著作,由Dave Thomas、Andy Hunt和Chad Fowler合著。这本书自2004年初版以来,一直是学习Ruby的首选资源,被誉为“Pickaxe”书,因其封面的图标而得名。Ruby是一种...

    Ruby常见面试题.pdf

    ### Ruby常见面试题详解 #### 1. 什么是Ruby?简要介绍Ruby的特点和主要用途。 **Ruby**是一种面向对象的、动态类型的解释性脚本语言。它由日本程序员松本行弘(Matz)于1995年设计并发布。Ruby的设计理念在于简洁...

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

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

    mars_car_problem.rar_Mars_mars car_火星车 编程题

    《火星车编程题:探索ruby实现的火星车问题》 在编程的世界里,挑战与创新总是并行不悖。本次我们关注的是一个名为“火星车”(Mars Car)的问题,这是一道经典的编程题,旨在考察开发者对于逻辑控制、坐标系统理解...

    Ruby从入门到精通pdf

    Ruby是一种强大的、面向对象的编程语言,以其简洁的语法和注重开发者生产力的设计理念而闻名。"Ruby从入门到精通"的教程旨在帮助新手快速掌握这门语言的核心概念和实际应用。Ruby由日本人松本行弘在1993年创建,它的...

    ruby中文教程,pdf格式,含.rb源代码

    本教程针对中文用户,旨在帮助初学者快速入门并掌握Ruby编程的基础知识。 PDF教程将涵盖以下核心知识点: 1. **Ruby基础**:包括变量(局部变量、实例变量、类变量和全局变量)、常量、数据类型(字符串、数字、...

    [Ruby完全自学手册].邓蔚.扫描版

    函数和方法也是Ruby编程的重要组成部分,邓蔚会介绍如何定义和调用方法,以及块(Block)、 Proc 和 Lambda 的使用。这些特性使得Ruby的代码更加简洁和可读。 在深入探讨Ruby的高级特性时,元编程将被重点关注。...

    《Programming Ruby》中文第2版源代碼下載

    《Programming Ruby》是一本经典的Ruby编程语言教程,中文第二版为中国的程序员提供了深入学习Ruby的宝贵资源。这本书的源代码下载对于读者来说是极其有用的,因为它允许读者在实践中探索和理解书中所阐述的概念。...

    《Ruby从入门到精通》PDF版本下载.txt

    本书旨在帮助初学者快速掌握Ruby编程语言,并逐步提升至高级水平。以下是对书中的核心概念和技术要点的概述: ### 一、Ruby简介 1. **Ruby语言的特点**:Ruby是一种简单、快速、面向对象且易于学习的编程语言。它...

    Ruby语言入门教程(2024版)

    通过实例讲解,帮助读者快速掌握Ruby编程技能,并能够运用到实际的项目开发中。 适用人群:本教程适合没有编程经验的初学者,以及对Ruby语言感兴趣的开发者。无论是想转型成为程序员的职场人士,还是在校学生,都...

    Ruby On Rails中文教材(PDF)

    PDF文档通常包含详细的教程、实例代码和可能的练习题,旨在帮助学习者全面了解和掌握Ruby on Rails的核心概念和技术。 在Rails框架中,关键知识点包括: 1. **Ruby基础知识**:首先,理解Ruby语言的基本语法和特性...

    2016年杭电笔试题第二题解法(Ruby解法)

    根据给定文件的信息,我们可以总结出以下详细的IT知识点: ### 题目背景与解析 ...此外,本题还强调了正则表达式的应用以及如何高效地处理字符串数据,这些都是编程领域中非常实用且重要的技能。

    Ruby语言中文教程

    这些文件可能是练习题或者小型项目,鼓励读者动手操作,增强编程技能。 “locale.zh_gb.properties”文件可能包含与本地化或国际化相关的设置,这对于理解如何在Ruby中处理多语言环境至关重要,特别是在开发多语言...

    Programming.Ruby(第2版)中文版

    《Programming.Ruby(第2版)中文版》是一本深入探讨Ruby编程语言的权威书籍,由Dave Thomas、Andy Hunt和Chad Fowler共同撰写。这本书详细介绍了Ruby语言的各个方面,为初学者和经验丰富的开发者提供了全面的理解和...

Global site tag (gtag.js) - Google Analytics