首页 > 编程语言 >编程打卡:来玩玩Ruby语言吧2.1!

编程打卡:来玩玩Ruby语言吧2.1!

时间:2023-04-26 15:11:55浏览次数:51  
标签:node end name visit 2.1 打卡 Ruby children

编程打卡:来玩玩Ruby语言吧2.1!

我们前面实现了一个有趣的树类Tree,但它不具有简洁的用户接口,来设置一棵新树,为它写一个初始化方法,接受散列表和数组嵌套的结构。写好之后,你可以这样设置新树:{'grandpa' => { 'dad' => {'child 1' => {}, 'child 2' => {} }, 'uncle' => {'child 3' => {}, 'child 4' => {} } } }

代码实现

class Tree
    attr_accessor :children, :node_name
    def initialize (tree)
        tree.each do
            |name,children|
            @children = children.map{|name,children| Tree.new(name => children)}
            @node_name = name
        end
    end

    def visit_all(&block)
        visit &block
        children.each {|c| c.visit_all &block}
    end

    def visit(&block)
        block.call self
    end
end
ruby_tree = Tree.new({"Ruby" => {"Tim" => {"Dick" => {}},"Doge" => {"Wong" => {"Steve" => {}}}}})

ruby_tree.visit_all {|node| puts node.node_name}

运行结果

Ruby
Tim
Dick
Doge
Wong
Steve

写一个简单的grep程序,把文件中出现某词组的行打印出来,并且显示行号

代码实现

lineNumber = 1
targetWord = ARGV.shift
ARGF.each do
    |s|
    puts "#{lineNumber}: #{s}" if s.include? targetWord
    lineNumber += 1
end

运行结果

ruby main.rb Japanese hello123.txt
176:     Japanese: 私はガラスを食べられます。それは私を傷つけません。

标签:node,end,name,visit,2.1,打卡,Ruby,children
From: https://www.cnblogs.com/sugar-refinery/p/17356147.html

相关文章

  • Natasha V5.2.2.1 稳定版正式发布.
    DotNetCore.Natasha.CSharpv5.2.2.1使用NMSTemplate接管CI的部分功能.取消SourceLink.GitHub的继承性.优化几处内存占用问题.增加隐式using配置文件以支持隐式using引用.当项目开启<ImplicitUsings>enable</ImplicitUsings>时,自动生效.增加初始化PE信息判......
  • 打卡第十二天
    输入一个8位二进制数,将其转换为十进制输出一、1.将二进制数每一位乘以该位的2的次方相加- 二、三、#include<iostream>usingnamespacestd;doublepower(doublex,intn){ doubleq=1.0; while(n--) q*=x; returnq;}intmain(){ intq=0; cout<<"输入数字:"; for(inti......
  • 4.26打卡
    #include<iostream>#include<iomanip>#include<cmath>usingnamespacestd;constdoubleTINY_VALUE=1e-10;doubletsin(doublex){doubleg=0;doublet=x;intn=1;do{g+=t;n++;t=-t*x*x/(2*......
  • 第八天打卡
    #include<iostream>#defineN10usingnamespacestd;intmain(){inta[N],x,i,aa;for(i=0;i<N;i++)scanf("%d",&a[i]);for(i=1;i<=N-1;i++)for(x=0;x<N-i;x++){if(a[x]<a[x+1]){......
  • 打卡9
    特殊a串数列求和给定两个均不超过9的正整数a和n,要求编写程序求a+aa+aaa++⋯+aa⋯a(n个a)之和。输入格式:输入在一行中给出不超过9的正整数a和n。输出格式:在一行中按照“s=对应的和”的格式输出。输入样例:23输出样例:s=246代码:#include<stdio.h>intmain(){inta,n;......
  • 每日打卡输入输出流
    //#include<iostream>//#include<iomanip>//#include<cmath>//usingnamespacestd;//intmain()//{// intd=16;// cout<<hex<<d<<endl;// /*格式输出// 使用控制符控制输出格式// dec设置整数的基数为10// hex设置整数的基数为168// oct设置整数的基数为8......
  • 第十天打卡
    问题:  算法设计;直接根据题意写出代码。源代码:#include<stdio.h>#include<math.h>intmain(){ intx1,x2,x3,x5,x8,y1,y2,y3,y5,y8; doublemax=0.0,result; for(x8=0;x8<=2;x8++) for(x5=0;x5<=(20-8*x8)/5;x5++) for(x3=0;x3<=(20-8*x8-5*x5)/3;x3++) for(x2=0;x2&......
  • 每日打卡
    换钱问题:问题描述:将5元人民币兑换成1元5角和1角的硬币有多少种方法问题分析:不妨设一元硬币x个,5角y个,1角硬币z个,根据面额可知10x+5y+z=50,因为硬币数必须是整数,解较多所以用3个for循环来体现代码:#include<stdio.h> intmain(){      intx,y,z,count=1;      ......
  • 2023.4.25编程一小时打卡
    一、问题描述:格式输出:输入一个整数,以八进制形式输入,分别以十进制和十六进制显示;输出字符串“Iamastudent!”,设置输出位宽为20,使用符号“*”填充;输出浮点数3.1415926,分别以浮点数和二进制形式进行输出,并分别设置小数点后的位数为8,6,4位。 二、解题思路:首先,根据题意定......
  • 第九天打卡
    一、问题描述N个有序整数数列已经放在数组中,利用二分法查找整数M在数组的位置。若找到,则输出下标值;反之,则输出“Notbefound!"。二、设计思路1.利用i,j分别表示数组的第一位与最后一位的下标数,m表示中间下标;2.利用while循环条件i<=j,把需要找的的数与中间值比较,然后替换第......