编程C,C ++,Java,PHP,Ruby,图灵,VB
计算机科学加拿大 
编程C,C ++,Java,PHP,Ruby,图灵,VB  

用户名:   Password: 
 登记登记   
 反馈请。
指数 -> 编程,Ruby. -> 红宝石的帮助
转到页面 1, 2  下一页
查看上一个主题 可打印的版本下载主题订阅本主题私人信息刷新页面 查看下一个主题
作者 信息
Tokenherbz.




邮政发布: 2010年12月8日星期三7:26 PM  帖子主题:请提供反馈。

对于Ruby来说是非常新的,我不确定使用某些循环以及Compact Code等时的最佳方法等。

我要上传一个包含我所做的挑战的照片,以及我的代码给你给我喂回来的。

任何提示或乐于助人都会很棒,我想学习正确的方式和书籍/等,只有我到目前为止,熟练的程序员意见是另一种有价值的学习来源。

第一:挑战: http://i.imgur.com/ieyDP.jpg

第二:代码(请原谅真正的长名称变量,我被带走了!)

红宝石:

Number1 = 0 #numbers用户将进入
Number2 = 0
in_number_max_cycle_length =. 0 #Number1和Number2之间最大循环的值

#will尝试使其分解在其中输入的数字和内部
#will计算它抛出的周期数,并且将返回此值
#向用户编号的数字_cyle。
defbreak_down_number... (number_,cycle_length__) #cycle_length适用于用户号码(SET TO ZERO)
  如果 数字_ % 2 ==. 0 #number是偶数
    number_ = number_ / 2 #divide它是2
  别的 #奇数
    number_ = (数字_ * 3) + 1 #Times到3并添加1
  结尾
  cycle_length_ += 1 每次打破数字时,每次循环1到长度
  如果 Number_!= 1 #如果没有分解为1但是那么
    break_down_number(number_,cycle_length__) #Algorithm继续
  别的
    返回 (cycle_length_ + 1) #add 1到cycle_length包含最后一个值
  结尾
结尾

#GESS用户数字范围为1到999,999
直到 number1 <= 999_999 2号 <= 999_999 number1 >= 1 2号 >= 1
  put “请输入2个数字从1到999,999。”
  number1 = 得到.Chomp..to_i.
  number2 = 得到.Chomp..to_i. #make字符串ints
  put
结尾

#we从1号到2号到2,检查其循环长度的每个数字
#如果它较大,那么它更新并保留了max_length ...
1号。取决于(2号) {| x |
  如果break_down_number..(X,0) >in_number_max_cycle_length
   in_number_max_cycle_length = break_down_number.(X,0)
  结尾
}

#完全作为挑战的输出显示......
put “#{number1}#{number2}#{介于_number_max_cycle_length}”
赞助
赞助
赞助
赞助
虫子




邮政发布: 2010年12月08日星期三:下午9:04  发布主题:RE:反馈请。

您的break_down_number方法可以减少公平的位。
红宝石:

defbreak_down_number..(number_,cycle_length.)
    number_ = number_%2 ? number_*3+1 : number/2
    cycle_length += 1
    如果 号码!= 1
        break_down_number(number_,cycle_length__)
    结尾
    cycle_length_ += 1
结尾


我可能有一个语法错误或两个,我没有打扰这个问题。

每当你有类似的东西
代码:

如果那么
   var = something
别的
   var = something_else.
万一

它是(在我看来)更好地使用? :结构,即
代码:

var.. = whatever ? something : something_else
Jcollins1991.




邮政发布: 2010年12月8日星期三:下午9:15  发布主题:RE:反馈请。

我建议用一阵循环写作它,我不确定Ruby如何用尾部递归。
托尼




邮政发布: 2010年12月08日星期三:下午9:26  发布主题:RE:反馈请。

代码:

如果编号!= 1
        break_down_number(number_,cycle_length__)
    end

也可以写成
代码:

break_down_number..(number_,cycle_length__) unless number == 1
最新来自compsci.ca/blog: Tony's 编程博客。 DWite - A. 编程竞赛.
WTD.




邮政发布: 2010年12月08日星期三11:47 PM  发布主题:RE:反馈请。

为什么不将其实现为Fixnum类上的方法?

代码:
类Filemum.
   def algorithm
      c = 1
      n = self
      while n != 1
         if n.even?
            n /= 2
         else
            n = n * 3 + 1
         end
         c += 1
      end
      c
   end
结尾
托尼




邮政发布: 2010年12月9日星期四晚上12:22  发布主题:RE:反馈请。

现在我有更多的时间来看待这个:

- 无需初始化变量
- 内部变量的典型公约是_name而不是name_
- 返回不需要表达式括号
- 问题所说的问题是输入有效的,所以检查不需要,但如果您必须 - 检查范围也有效
代码:

>> (1..999_999).include?(42)
=> true

- 从性能角度来看,您正在评估两次[Break_Down_Number(x,0)](在条件下一次,并且再次实际保存该值)。此外,相同的X将始终产生相同的序列,因此可以使用动态编程短路进行大量工作。

我的解决方案(因为阅读代码对于编写代码至关重要):
红宝石:

@结果= {1 => 1}

def max_cycle_for(n)
   尽管(@结果[n].?)
      @results[n] = max_cycle_for(n 2 ==. 0 ?不/ 2 : n * 3 + 1) + 1
   结尾
   @results[n]
结尾

num1 = 得到.to_i.
num2 = 得到.to_i.
put “#{num_1}#{num_2}#{(num_1..num_2).Collect {| a | max_cycle_for.(a)}.max}"
最新来自compsci.ca/blog: Tony's 编程博客。 DWite - A. 编程竞赛.
Tokenherbz.




邮政发布: 2010年12月09日星期四上午6:45  发布主题:RE:反馈请。

谢谢你们每个人的回馈。

虫子: 我喜欢如何最大限度地减少那些陈述,并将这样做。我想知道,它也与elsif一起工作吗?或者我应该用案例吗?或案例最适合别人的唯一?我读到的情况是它真的很有帮助或最适合在真正的情况下使用,如果结构,但我确信它可以用于小组。但它并没有说出理想的情况是使用它们是什么......在学习Ruby和编码时我想学习正确的方式,所以我稍后没有差的编程习惯。

WTD. :我甚至没有在Ruby课上阅读,但我会在适当的时候看看。我觉得我有理路让Ruby基础知之甚少。谢谢你。我很好奇,虽然,你是否将其添加到实际的FileNum类?......用于在所有程序中使用?

托尼 :真棒。我会扔掉我的Ruby读取,因为我不知道该代码如何工作。 1快速举例是
代码:
@结果 (1 => 1)
[/颜色]
虫子




邮政发布: 2010年12月09日星期四上午10:46  发布主题:RE:反馈请。

条件结构仅支持二进制条件。

这基本上是,
<condition> ? <如果条件为真,则运行> : <run if false>

所以,如果/ else结构只有。

除非有3个或更多不相关的值,或者我需要根据输入运行不同的函数,除非有3个或更多不相关的值,我通常不会使用案例。这是一个基本的计算器 - 没有任何有效的方法(我认为)在没有案例或大的情况下为其操作分配*,/,+和 - 字符,如果

此外,我不太确定,但我认为Ruby评估零作为错误,也是真的,所以而不是<var>== 0你可以做!<var>.
赞助
赞助
赞助
赞助
Jcollins1991.




邮政发布: 2010年12月9日星期四11:38  帖子主题:RE:RE:反馈请。

Incemoid @ Thu 2010年12月9日上午10:46写道:
条件结构仅支持二进制条件。

这基本上是,
<condition> ? <如果条件为真,则运行> : <run if false>

所以,如果/ else结构只有。

除非有3个或更多不相关的值,或者我需要根据输入运行不同的函数,除非有3个或更多不相关的值,我通常不会使用案例。这是一个基本的计算器 - 没有任何有效的方法(我认为)在没有案例或大的情况下为其操作分配*,/,+和 - 字符,如果

此外,我不太确定,但我认为Ruby评估零作为错误,也是真的,所以而不是<var>== 0你可以做!<var>.


红宝石中唯一的虚假事情是'nil'和'false'

编辑:虽然,你可以做0.zero?以其他语言获得0的虚假
WTD.




邮政发布: 2010年12月09日11:49 AM  发布主题:RE:反馈请。

是的。零是一个完美的叫喊的号码,绝不是假的。
托尼




邮政发布: 2010年12月09日1:51 PM  发布主题:RE:反馈请。

结果是哈希 - http://ruby-doc.org/core/classes/Hash.html

它存储已计算的所有值,用于将来计算。这个想法是动态编程的核心(不良命名,它更多的是“具有存储的值表的编程”)。尝试在每个调用max_cycle_for后查看内部存储的内容。

{1 => 1} is the base base. We know that the max cycle for n=1 is 1, per definition, so we initialize to this pair so that recursive loops terminate.
最新来自compsci.ca/blog: Tony's 编程博客。 DWite - A. 编程竞赛.
WTD.




邮政发布: 2010年12月09日星期四下午1:52  发布主题:RE:反馈请。

动态编程是通过记住你以前的位置尽可能少的工作。
Tokenherbz.




邮政发布: 2010年12月11日星期六下午2:15  发布主题:RE:反馈请。

另一个编程挑战需要反馈! :我觉得有改进,但我会让你的,专家来决定。

这是挑战: http://i.imgur.com/SZ8Dh.jpg
但是,我继续改变一些事情:我制作了一些东西:你可以调整代码内的网格大小,并调整该网格的矿山百分比。矿山也是随机产生的。

拜托,非常关键,并告诉我这是如何邋的 微笑
我把if放在循环和底部,如果我无法弄清楚如何紧凑任何方式。我给了它很多想法,这是我可以想出的最好的。

红宝石:

行, COLUMNS = 5, 5 #Change编辑MinesWeePer网格尺寸
mine_percentage = 0.10 #0.10 = 10%  // 0.50 = 50% (确保其零。百分
mine_tile. = 大批.新的() {大批.新的(){“。”}} #2D数组没有矿山
Mines =. (MINE_PERCENTEGE * (行 * COLUMNS)).圆形的 #rounded的网格中的矿山
矿山。时代{|矿业| mine_tile.[兰特()][兰特()] = “*”} #init随机矿山

#用矿山和空格出来的网格
行.时代{|行|列。时代{|列|打印ine_tile[][]}
  put}
put

#使用代表它附近的地雷数量的数字
#抛出行,每行它会扔掉列(2D array).
#it​​找到矿山"*"然后它在矿井周围运行一个盒子,使它为1
#每次瓷砖击中时。 我添加了,如果要确保框检查不会
#走出阵列范围。
行.时代 {|行|列。时代{|列| 如果mine_tile..[][] ==. “*”
      ((行 - 1) <= 0 ? 0 : (行 - 1)).取决于((行+ 1) >= (行 - 1) ? (行 - 1) : (行+ 1)){| Solving_row |
        ((列 - 1) <= 0 ? 0 : (列 - 1)).取决于((列+ 1) >= (列 - 1) ? (列 - 1) : (列+ 1)){| Solving_column |
          如果mine_tile..[solve_row.][solve_column.] != “*”
            如果mine_tile..[solve_row.][solve_column.] ==. “。”
              mine_tile[solve_row.][solve_column.] = 1
            别的
              mine_tile[solve_row.][solve_column.] + = 1
            结尾
          结尾
        }
      }
    结尾
  }
}
#prints在解决之后用矿区的网格
行.时代{|行|列。时代{|列|打印ine_tile[][]}
  put}
托尼




邮政发布: 2010年12月11日下午4:44  发布主题:RE:反馈请。

代码:

Mines.Ips {|地雷| mine_tile [兰德(ROWS)][rand(COLUMNS)] = "*"} #init random mines

你不需要|矿业|如果你不打算用它。
代码:

3. {PUTS."ruby"}

此外,严格来说,有机会用矿井填充相同的位置。意思是,在100%mine_percentage,仍然可以有空的空间。

代码:

行.times{|rows| COLUMNS.times{|columns|

有时它更容易阅读Do-End块
代码:

行.times do |row|
   Columns.Ips Do |列|
      print ...
   end
结尾


代码:

((rows - 1) <= 0 ? 0 : (rows - 1)).upto((rows + 1) >= (ROWS - 1) ? (ROWS - 1) : (rows + 1))

避免此类检查的一个诀窍是在阵列周围有一个缓冲区,以便您可以安全地超出界限。 (另一个人将以特殊的方式对待边缘,并使用那些作为缓冲区来安全地与其他一切合作)。
最新来自compsci.ca/blog: Tony's 编程博客。 DWite - A. 编程竞赛.
Tokenherbz.




邮政发布: 2010年12月11日5:21 PM  发布主题:RE:反馈请。

所以阵列从-1到5开始。

0,1,2,3,4是使用的数组元素。
-1,5是nil?

我会尝试一下,我喜欢那个想法。
从上一个显示帖子:   
   指数 -> 编程,Ruby. -> 红宝石的帮助
查看上一个主题 告诉一个朋友可打印的版本下载主题订阅本主题私人信息刷新页面 查看下一个主题

12  [ 17 Posts ]
转到页面 1, 2  下一页
跳到:   


Style:  
搜索: