Project1

标题: 【丧心病狂】被玩坏的RMXP之一些计算和判定 [打印本页]

作者: chd114    时间: 2014-7-4 14:44
标题: 【丧心病狂】被玩坏的RMXP之一些计算和判定
本帖最后由 chd114 于 2014-7-4 14:48 编辑

使用方法:按F11插入脚本编辑器MAIN前即可
声明:里面部分计算非楼主所做···所以请不要随意署名
@弗雷德 @P叔 @凌童鞋 @晴兰 ···顺便很无耻地@美丽晨露 @= =@hys111111

@myownroc

@tjjlb
我知道学生党一定会用到的···
RUBY 代码复制
  1. class Numeric
  2.   def mirrornumber # 颠倒数(镜像数)这个是自己起的名字···其实本来想参考必修3做个回文数的但是找不到了就做了个这个···
  3.     if self.abs != self
  4.       raise ArgumentError.new("NaN")
  5.     end
  6.     num=0
  7.     sn=[]
  8.     x=0
  9.     self_array = self.to_s.scan(/./) # 分割每一位上的数字
  10.     for char in self_array # 获取位数
  11.       sn[x]=char.to_i
  12.       x+=1
  13.     end
  14.     for i in 0...sn.size
  15.       num+=sn[sn.size-1-i]*10**(sn.size-1-i)
  16.     end
  17.     return num.truncate == num ? num.truncate : num
  18.   end
  19.  
  20.   def disnumber # 相反数
  21.     num=-self
  22.     return num.truncate == num ? num.truncate : num
  23.   end
  24.   def unnumber # 倒数
  25.     num=1.0/self
  26.     return num.truncate == num ? num.truncate : num
  27.   end
  28.   def prime(y) # 判定质数(y非0时必须用print,否则会p num => nil)
  29.     if self.abs != self
  30.       raise ArgumentError.new("NaN")
  31.     end
  32.     num=nil
  33.     if self==2
  34.       if y==0
  35.         num=1
  36.       else
  37.         num=self.to_s+"是质数"
  38.       end
  39.     end
  40.     if num==nil
  41.       i=2
  42.       r=self%i
  43.       until i>self-1 or r==0
  44.         r=self%i
  45.         i+=1
  46.       end
  47.       if y==0
  48.         if r==0
  49.           num=0
  50.         else
  51.           num=1
  52.         end
  53.       else
  54.         if r==0
  55.           num=self.to_s+"不是质数"
  56.         else
  57.           num=self.to_s+"是质数"
  58.         end
  59.       end
  60.     end
  61.     return num.to_s == num ? num.to_s : num
  62.   end
  63.   def zxgbs(y) # 标准的《九章算术》中先求最大公约数再求最小公倍数
  64.     num=nil
  65.     n=[self,y]
  66.     for i in 0...n.size
  67.       if n[i] <= 0
  68.         raise ArgumentError.new("NaN")
  69.       end
  70.     end
  71.     n=n.sort # 从小到大重新排序
  72.     if num==nil
  73.       i=n[0].cm2(n[1])
  74.       num=n[0]*n[1]/i
  75.     end
  76.     return num.to_s == num ? num.to_s : num
  77.   end
  78.   def cm1(y) # 辗转相除法求最大公约数(部分情况会失控)
  79.     n=[self,y]
  80.     for i in 0...n.size
  81.       if n[i] <= 0
  82.         raise ArgumentError.new("NaN")
  83.       end
  84.     end
  85.     n=n.sort # 从小到大重新排序
  86.     num=n[1]
  87.     i=num%n[0]
  88.     if i=0#余数为0时最大公约数为小的数
  89.       num=n[0]
  90.     else
  91.       while i!=0
  92.         num=n[0]
  93.         n[0]=i
  94.         i=num%n[0]
  95.       end
  96.     end
  97.     return num.to_s == num ? num.to_s : num
  98.   end
  99.   def cm2(y) # 更相损减术求最大公约数
  100.     n=[self,y]
  101.     for i in 0...n.size
  102.       if n[i] <= 0
  103.         raise ArgumentError.new("NaN")
  104.       end
  105.     end
  106.     i=1
  107.     if n[0]%2==0 and n[1]%2==0
  108.       n=[self/2,y/2]
  109.       i+=1
  110.     end
  111.     n=n.sort # 从小到大重新排序
  112.     num=n[1]-n[0]
  113.     if num==n[0] # 差等于减数时最大公约数为减数(差)
  114.       num=n[0]
  115.     else
  116.       while num!=n[0]
  117.         if n[0]>num
  118.           n=[num,n[0]]
  119.         else
  120.           n=[num,n[1]]
  121.         end
  122.         num=n[1]-n[0]
  123.       end
  124.     end
  125.     num*=i
  126.     return num.to_s == num ? num.to_s : num
  127.   end
  128.   # 一元N次N项式
  129.   def dxs1(y) # 逐项求
  130.     num=0
  131.     for i in 1..y.size
  132.       num+=y[i-1]*self**(y.size-i)
  133.     end
  134.     return num.truncate == num ? num.truncate : num
  135.   end
  136.   def dxs2(y) # 秦九韶算法
  137.     num=y[0]
  138.     for i in 1..y.size-1
  139.       num*=self
  140.       num+=y[i]
  141.     end
  142.     return num.truncate == num ? num.truncate : num
  143.   end
  144.   # 等差数列arithmetic_progression
  145.   def ari(x,y) # 等差数列求第y项
  146.     num=self+(y-1)*x
  147.   end
  148.   def arih1(x,y) # 等差数列已知首项self求前y项和
  149.     num=y*self+(y-1)*y*x/2
  150.   end
  151.   def arih2(x,y) # 等差数列已知末项self求前y项和
  152.     num=y*self-(y-1)*y*x/2
  153.   end
  154.   def arih3(x,y) # 等差数列已知首项x和末项y和元素数求和
  155.     num=self*(x+y)/2
  156.   end
  157.   # 等比数列geometric_sequence
  158.   def geo(x,y) # 等比数列求第y项
  159.     num=self*x**(y-1)
  160.     return num.truncate == num ? num.truncate : num
  161.   end
  162.   def geoh1(x,y) # 等比数列求前y项和
  163.     num=self # 获取a1
  164.     for i in 1...y
  165.       num+=x**(i) # 依次加上a2、a3...直到an
  166.     end
  167.     return num.truncate == num ? num.truncate : num
  168.   end
  169.   def geoh2(x,y) # 等比数列已知首项self求前y项和
  170.     num=(self*(1-x**y))/(1-x)
  171.     return num.truncate == num ? num.truncate : num
  172.   end
  173.   def geoh3(x,y) # 等比数列已知首项self和末项y求前y项和
  174.     num=(self-y*x)/(1-x)
  175.     return num.truncate == num ? num.truncate : num
  176.   end
  177.   def factorial # 阶乘
  178.     if self.abs != self
  179.       raise ArgumentError.new("NaN")
  180.     end
  181.     num=self
  182.     fnum=self
  183.     for i in 2...fnum # 乘数取1到阶乘基数本身之间的数
  184.       num*=i
  185.     end
  186.     return num.truncate == num ? num.truncate : num
  187.   end
  188.   def log(y) # 对数函数
  189.     if self.abs != self
  190.       raise ArgumentError.new("NaN")
  191.     end
  192.     x=self
  193.     num=1
  194.     while x!=y
  195.       x/=y
  196.       num+=1
  197.     end
  198.     return num.truncate == num ? num.truncate : num
  199.   end
  200.   def lg # 以10为底的对数函数
  201.     if self.abs != self
  202.       raise ArgumentError.new("NaN")
  203.     end
  204.     x=self
  205.     num=1
  206.     while x!=10
  207.       x/=10
  208.       num+=1
  209.     end
  210.     return num.truncate == num ? num.truncate : num
  211.   end
  212.   def sqr # 平方
  213.     return self ** 2
  214.   end
  215.   def cube # 立方
  216.     return self ** 3
  217.   end
  218.   def powten # 10 的 self 次方
  219.     return 10 ** self
  220.   end
  221.   def enf(y) # 任意次方
  222.     num = self ** y
  223.     return num.truncate == num ? num.truncate : num
  224.   end
  225.   def sqrt # 开平方
  226.     if self.abs != self
  227.       raise ArgumentError.new("NaN")
  228.     end
  229.     num = self ** 0.5
  230.     return num.truncate == num ? num.truncate : num
  231.   end
  232.   def cuberoot # 开立方
  233.     if self.abs != self
  234.       num = (self * (-1)) ** (1 / 3.0)
  235.       return num.truncate == num ? -num.truncate : -num
  236.     end
  237.     num = self ** (1 / 3.0)
  238.     return num.truncate == num ? num.truncate : num
  239.   end
  240.   def root(y) # 开任意次方
  241.     if self.abs != self and y % 2 == 0
  242.       raise ArgumentError.new("NaN")
  243.     end
  244.     if self.abs != self
  245.       num = (self * (-1)) ** (1.0 / y)
  246.       return num.truncate == num ? -num.truncate : -num
  247.     end
  248.     num = self ** (1.0 / y)
  249.     return num.truncate == num ? num.truncate : num
  250.   end
  251. end
  252. class Array
  253.   def average(need_dec = true) # 平均数 (是否使用浮点数)
  254.     if self.include?(nil)
  255.       ary = self.compact
  256.     else
  257.       ary = self
  258.     end
  259.     num = 0
  260.     if ary.size == 0
  261.       raise ZeroDivisionError.new("divided by 0")
  262.     end
  263.     for i in 0...ary.size
  264.       if ary[i].is_a?(Numeric)
  265.         num += ary[i]
  266.       else
  267.         raise TypeError.new("connot convert #{ary[i].class} into Numeric")
  268.       end
  269.     end
  270.     num /= ary.size.to_f
  271.     unless need_dec
  272.       return num.truncate
  273.     end
  274.     return num.truncate == num ? num.truncate : num
  275.   end
  276.   def variance(need_dec = true) # 方差
  277.     if self.include?(nil)
  278.       ary = self.compact
  279.     else
  280.       ary = self
  281.     end
  282.     num = 0
  283.     average=ary.average.to_f
  284.     for i in 0...ary.size
  285.       num+=((ary[i]-average)**2).to_f
  286.     end
  287.     num=(num/ary.size).to_f
  288.   end
  289.   def deviation(need_dec = true) # 标准差
  290.     if self.include?(nil)
  291.       ary = self.compact
  292.     else
  293.       ary = self
  294.     end
  295.     num = 0
  296.     num=((ary.variance.to_f)**0.5).to_f # 标准差是方差的算术平方根
  297.   end
  298.   def range(need_dec = true) # 极差(是否使用浮点数)
  299.     if self.include?(nil)
  300.       ary = self.compact
  301.     else
  302.       ary = self
  303.     end
  304.     num = 0
  305.     if ary.size == 0
  306.       raise ZeroDivisionError.new("divided by 0")
  307.     end
  308.     num = (ary.max-ary.min).to_f
  309.     unless need_dec
  310.       return num.truncate
  311.     end
  312.     return num.truncate == num ? num.truncate : num
  313.   end
  314.   def median(need_dec = true) # 中位数(是否使用浮点数)(需要从小到大排列)
  315.     if self.include?(nil)
  316.       ary = self.compact
  317.     else
  318.       ary = self
  319.     end
  320.     num = 0
  321.     ary=ary.sort # 从小到大重新排序
  322.     if ary.size == 0
  323.       raise ZeroDivisionError.new("divided by 0")
  324.     end
  325.     if ary.size%2==1
  326.       num = ary[ary.size/2].to_f
  327.     elsif ary.size%2==0
  328.       num = (ary[(ary.size-1)/2+1]+ary[(ary.size+1)/2-1])/2.to_f
  329.     end
  330.     unless need_dec
  331.       return num.truncate
  332.     end
  333.     return num.truncate == num ? num.truncate : num
  334.   end
  335.   def mode(need_dec = true) # 众数(是否使用浮点数)
  336.     if self.include?(nil)
  337.       ary = self.compact
  338.     else
  339.       ary = self
  340.     end
  341.     num = 0
  342.     if ary.size == 0
  343.       raise ZeroDivisionError.new("divided by 0")
  344.     end
  345.     modenum=[]
  346.     ary=ary.sort # 从小到大重新排序
  347.     for i in 0...ary.size # 计算每个数出现的次数
  348.       if ary[i].is_a?(Numeric)
  349.         if modenum[ary[i]]==nil
  350.           modenum[ary[i]]=1
  351.         else
  352.           modenum[ary[i]]+=1
  353.         end
  354.       else
  355.         raise TypeError.new("connot convert #{ary[i].class} into Numeric")
  356.       end
  357.     end
  358.     for i in 0...modenum.size # 填充数组nil元素
  359.       if modenum[i]==nil
  360.         modenum[i]=0
  361.       end
  362.     end
  363.     modemax=modenum.max # 找出最大的数
  364.     for i in 0...modenum.size # 找出最大的数的所在位置
  365.       if modemax==modenum[i]
  366.         num=i
  367.       end
  368.     end
  369.     unless need_dec
  370.       return num.truncate
  371.     end
  372.     return num.truncate == num ? num.truncate : num
  373.   end
  374.  
  375. end



另外lg和log函数楼主做的感觉有问题···
作者: fux2    时间: 2014-7-4 16:28
最多100行,不特意缩短行数,完成lz所有功能,这样根本不是在写ruby。
作者: chd114    时间: 2014-7-4 16:30
fux2 发表于 2014-7-4 16:28
最多100行,不特意缩短行数,完成lz所有功能,这样根本不是在写ruby。

什么最多100行···
作者: RyanBern    时间: 2014-7-4 16:30
感觉有些地方有问题,就当是对一些算法的练习吧。其实有些东西Math模块里就有吧应该。

1.有些东西着实不应该定义成Numeric类的普通方法,用起来感觉略微奇怪,比方说等差数列等比数列那个。
2.你这个log是给整数使的?这可不好。那定义在Numeric里面是啥意思呢?对于实数的log算法,我才不告诉你呢~
3.0的阶乘为什么不写进去?
4.求众数个人以为用Hash收集比较好吧。

作者: taroxd    时间: 2014-7-4 16:36
chd114 发表于 2014-7-4 16:30
什么最多100行···

100行代码完成楼主的所有功能
作者: chd114    时间: 2014-7-4 16:38
RyanBern 发表于 2014-7-4 16:30
感觉有些地方有问题,就当是对一些算法的练习吧。其实有些东西Math模块里就有吧应该。

1.有些东西着实不应 ...

就是家里断网的时候练着玩的···然后觉着有些纯新手不知道Math是可以用的就发了···0的阶乘我不清楚···阶乘老实说老师还没教我是自己摸索的···负数没阶乘也是后来才知道
作者: chd114    时间: 2014-7-4 16:40
taroxd 发表于 2014-7-4 16:36
100行代码完成楼主的所有功能

比如哪些可以精简的?
作者: taroxd    时间: 2014-7-4 16:42
chd114 发表于 2014-7-4 16:40
比如哪些可以精简的?

从头到尾没有不能精简的地方
作者: chd114    时间: 2014-7-4 16:42
taroxd 发表于 2014-7-4 16:42
从头到尾没有不能精简的地方

···return num.truncate == num ? num.truncate : num这一句?
作者: taroxd    时间: 2014-7-4 16:44
chd114 发表于 2014-7-4 16:42
···return num.truncate == num ? num.truncate : num这一句?

375行代码中的每一行都可以精简
作者: chd114    时间: 2014-7-4 16:45
taroxd 发表于 2014-7-4 16:44
375行代码中的每一行都可以精简

不会又是正则表达式吧···那个我几乎没怎么用···
作者: taroxd    时间: 2014-7-4 16:48
chd114 发表于 2014-7-4 16:45
不会又是正则表达式吧···那个我几乎没怎么用···

不需要。比如这样
  1. class Integer
  2.   def mirror # 颠倒数
  3.     to_s.reverse.to_i
  4.   end
  5. end
复制代码

作者: chd114    时间: 2014-7-4 17:11
taroxd 发表于 2014-7-4 16:48
不需要。比如这样

所有的都用这样?
作者: taroxd    时间: 2014-7-4 17:11
chd114 发表于 2014-7-4 17:11
所有的都用这样?

几乎所有的都可以一两行代码解决
作者: chd114    时间: 2014-7-4 17:27
taroxd 发表于 2014-7-4 17:11
几乎所有的都可以一两行代码解决

质数那个呢···
作者: taroxd    时间: 2014-7-4 17:40
chd114 发表于 2014-7-4 17:27
质数那个呢···

Ruby里面

require 'prime'

即可
作者: chd114    时间: 2014-7-4 17:53
taroxd 发表于 2014-7-4 17:40
Ruby里面

require 'prime'

绝大部分都是这个情况?可require 'prime'是什么结果呢?如果是,会true?
作者: taroxd    时间: 2014-7-4 17:55
chd114 发表于 2014-7-4 17:53
绝大部分都是这个情况?可require 'prime'是什么结果呢?如果是,会true?


为Integer定义了prime?方法

然后你就可以 2.prime? #=> true 这样了
作者: chd114    时间: 2014-7-4 17:58
taroxd 发表于 2014-7-4 17:55
为Integer定义了prime?方法

然后你就可以 2.prime? #=> true 这样了

呃······那其他的呢···Integer没怎么动过···因为那个似乎很容易弄到冲突···
作者: taroxd    时间: 2014-7-4 18:02
chd114 发表于 2014-7-4 17:58
呃······那其他的呢···Integer没怎么动过···因为那个似乎很容易弄到冲突··· ...

每个都可以精简……
你自己研究去……
作者: chd114    时间: 2014-7-4 18:57
taroxd 发表于 2014-7-4 18:02
每个都可以精简……
你自己研究去……

等差数列等比数列的精简了P出来是什么效果···
作者: taroxd    时间: 2014-7-4 19:01
chd114 发表于 2014-7-4 18:57
等差数列等比数列的精简了P出来是什么效果···

num=去掉
作者: 菜鸟飞呀飞    时间: 2014-7-4 19:19
提示: 作者被禁止或删除 内容自动屏蔽
作者: chd114    时间: 2014-7-4 21:38
fux2 发表于 2014-7-4 16:28
最多100行,不特意缩短行数,完成lz所有功能,这样根本不是在写ruby。

那你那100行是把哪些缩短了= =需要在Interpreter重定义才能用的就算了···
作者: 无脑之人    时间: 2014-7-4 21:44
其实一行就够了,反正有分号【噗
暂且不说造了一堆轮子,暂且不说学生党也用不上这玩意,能不能用正常向的方法写代码啊我去!
过程式编程的程序猿们也会被你气死的啊!
作者: chd114    时间: 2014-7-4 21:46
无脑之人 发表于 2014-7-4 21:44
其实一行就够了,反正有分号【噗
暂且不说造了一堆轮子,暂且不说学生党也用不上这玩意,能不能用正常向的 ...

全部写在一行的话修改不方便= =
作者: RyanBern    时间: 2014-7-4 23:49
我确定,这真的是让你们玩坏了,RMXP玩坏了,计算器也玩坏了。本来是楼主闲来无事用来打发时间的嘛,肯定不会有人用啊,多多熟悉Math就Ok啦。不过,要是重复面向过程的话,也不是这么个过程啊。
作者: chd114    时间: 2014-7-5 06:47
RyanBern 发表于 2014-7-4 23:49
我确定,这真的是让你们玩坏了,RMXP玩坏了,计算器也玩坏了。本来是楼主闲来无事用来打发时间的嘛,肯定不 ...

楼上有人说一行搞定全部···是全部写到一行吗···
作者: myownroc    时间: 2014-7-5 08:17
复习高中数学去……
作者: taroxd    时间: 2014-7-5 08:28
这么想玩数学,拿matlab玩去
作者: chd114    时间: 2014-7-5 12:23
RyanBern 发表于 2014-7-4 23:49
我确定,这真的是让你们玩坏了,RMXP玩坏了,计算器也玩坏了。本来是楼主闲来无事用来打发时间的嘛,肯定不 ...

你们怎么可以这么玩弄我!
作者: myownroc    时间: 2014-7-5 22:49
对于那个质数的判断我就说一点:循环次数self%2还是多,可以更少...有多么少自己想去...
另外如果想拿编程语言玩玩数学题建议用basic
作者: chd114    时间: 2014-7-6 07:26
myownroc 发表于 2014-7-5 22:49
对于那个质数的判断我就说一点:循环次数self%2还是多,可以更少...有多么少自己想去...
另外如果想拿编程语 ...

2是最小的质数···总不能去%1吧 == 你是说用小数?这个我是按照C语言来的···
作者: chd114    时间: 2014-7-6 08:27
taroxd 发表于 2014-7-5 08:28
这么想玩数学,拿matlab玩去
  1. % 这个脚本判断给定a变量是否为质数。  
  2. % 运行这个脚本之前需先要给a变量赋值。  
  3. i=2;  
  4. b=0;  
  5. % 循环部分共计循环a-3次。  
  6. % 循环代码意义:  
  7. % 判断a变量从2开始一直到a-1的数中是否含有能够整除a的数值存在;  
  8. % 若存在则输出判断结果信息并终止循环;  
  9. % 若不存在则继续循环并使i自增1。  
  10. while i<a  
  11.     if rem(a,i)==0 % 第一个if  
  12.         b=rem(a,i);  
  13.         disp('这个数值不是质数');  
  14.         break;  
  15.     end % 第一个if的结束  
  16.     i=i+1;  
  17. end % while语句的结束  
  18. % 直到循环结束后b的值被改变为大于零,则说明  
  19. % 排除1和a变量本身的值外,没有数值能够整除a即  
  20. % 从2到a-1的数值中不含有能够整除a的值存在。  
  21. if b>0 % 第二个if  
  22.     disp('这个数值是质数');      
  23. end % 第二个if的结束  
复制代码
MATLAB的是这种=- =你一行写一个试试···
作者: taroxd    时间: 2014-7-6 08:29
本帖最后由 taroxd 于 2014-7-6 08:39 编辑
chd114 发表于 2014-7-6 08:27
MATLAB的是这种=- =你一行写一个试试···


我说的是Ruby一行,没说matlab一行啊。
  1. (2..self / 2).all? {|i| self % i != 0 }
复制代码
不优化算法的话,就是一行代码的事情,写几十行真搞不懂你在干什么
作者: chd114    时间: 2014-7-6 08:32
taroxd 发表于 2014-7-6 08:29
我说的是Ruby一行,没说matlab一行啊。旧版Ruby:写几十行真搞不懂你在干什么 ...

回复你之前说的用matlab···新版的P出来是质数的话显示什么···
作者: taroxd    时间: 2014-7-6 08:34
本帖最后由 taroxd 于 2014-7-6 08:35 编辑
chd114 发表于 2014-7-6 08:32
回复你之前说的用matlab···新版的P出来是质数的话显示什么···


为什么要p出来……实在想要p出来的话就在前面加个p就好了,显示true/false

要玩数学的话,别拿Ruby,拿matlab玩去。

再强调一遍,继续问下去只会暴露你的智商很低

你不懂数学,不懂代码,不懂Ruby
作者: chd114    时间: 2014-7-6 08:36
taroxd 发表于 2014-7-6 08:34
为什么要p出来……实在想要p出来的话就在前面加个p就好了,显示true/false

要玩数学的话,别拿Ruby,拿m ...

= =如果你的智商高为啥不一开始就把那个一行两行的发出来呢···又不是所有人都会用那个算的···
作者: taroxd    时间: 2014-7-6 08:38
chd114 发表于 2014-7-6 08:36
= =如果你的智商高为啥不一开始就把那个一行两行的发出来呢···又不是所有人都会用那个算的··· ...

我没说我智商高,我只说你智商低

因为没人用,因为别人就算要用也会自己写,所以我没有必要发出来贻笑大方,像你一样。
作者: chd114    时间: 2014-7-6 08:40
taroxd 发表于 2014-7-6 08:38
我没说我智商高,我只说你智商低

因为没人用,因为别人就算要用也会自己写,所以我没有必要发出来贻笑大 ...

大概我不是人= =我正在填的坑的技能设置要用到这些···比如伤害为质数时无视敌人防御、伤害为回文数的时候敌人不能反弹这个伤害···
作者: taroxd    时间: 2014-7-6 08:44
chd114 发表于 2014-7-6 08:40
大概我不是人= =我正在填的坑的技能设置要用到这些···比如伤害为质数时无视敌人防御、伤害为 ...

智商低不是你的错,智商低还很骄傲地炫耀就是你的问题了
作者: chd114    时间: 2014-7-6 08:45
taroxd 发表于 2014-7-6 08:44
智商低不是你的错,智商低还很骄傲地炫耀就是你的问题了

我之前也不知道有那种算法···大概你天生就知道有正则表达式了
作者: taroxd    时间: 2014-7-6 08:47
chd114 发表于 2014-7-6 08:45
我之前也不知道有那种算法···大概你天生就知道有正则表达式了

那个算法是小学毕业就能知道的算法,也没有用到正则表达式。

再次强调,智商低不是你的错,智商低还来炫耀就是你的问题了
作者: chd114    时间: 2014-7-6 08:48
taroxd 发表于 2014-7-6 08:44
智商低不是你的错,智商低还很骄傲地炫耀就是你的问题了
  1. =begin
  2. ===============================================================================
  3.   ■ 使用方法:
  4. -------------------------------------------------------------------------------
  5.   ● number 则返回某个单元名称重复的数量。
  6.     例:[7, 7, 7, 7, 6, 6, 5].number(7)      => 4
  7.   ● aftftn 也是返回重复的数量,但与 number 有所不同。
  8.     例:[7, 7, 7, 7, 6, 6, 5].aftftn(4)      => 2
  9.     也就是说就是数组第几个单元的名称重复的数量。
  10.   ● delete_same 则删除单元里指定名称重复的部分,具有破坏性。
  11.     例:a = [7, 7, 7, 7, 6, 6, 5]
  12.         a.delete_same(7)
  13.         p a                                  => [7, 6, 6, 5]
  14.   ● same? 则返回是否是重复的单元。
  15.     例:a = [7, 7, 7, 7, 6, 6, 5]
  16.         p a.same?(4)                         => false
  17.         p a.same?(3)                         => true
  18.   ● das 和 das! 都是删除数组中所有重复的单元,但是 das 只会返回删除后的数组,das!
  19.      具有破坏性。
  20.     例:a = [7, 7, 7, 7, 6, 6, 5]
  21.         p a.das                              => [7, 6, 5]
  22.         p a                                  => [7, 7, 7, 7, 6, 6, 5]   # 没有变化
  23.         a.das!
  24.         p a                                  => [7, 6, 5]
  25.         # 之后没法再消了,总是返回原来的数组。
  26.   ● aftft 和 index 都是寻找第一个出现的单元,但有所不同。
  27.     例:a = [7, 7, 7, 7, 6, 6, 5]
  28.         p a.aftft(2)                         => 0
  29.     等同于
  30.         p a.index(a[2])                      => 0
  31.   ● dasn 和 dasn! 都是先删除重复的单元再计算出重复单元的数量,但是 dasn 只会返
  32.      回改变后的数组,dasn! 具有破坏性!
  33.     例:a = [7, 7, 7, 7, 6, 6, 5]
  34.         p a.dasn                             => [4, 2, 1]
  35.         p a                                  => [7, 7, 7, 7, 6, 6, 5]   # 没有变化
  36.         a.dasn!
  37.         p a                                  => [4, 2, 1]
  38.         a.dasn!
  39.         p a                                  => [1, 1, 1]
  40.         a.dasn!
  41.         p a                                  => [3]
  42.         a.dasn!
  43.         p a                                  => [1]
  44.         # 之后永远就会出现 [1] 了。
  45.   ● size 可以自行更改了,请看例子:
  46.     例:a = [7, 7, 7, 7, 6, 6, 5]
  47.         p a.size                             => 7
  48.         a.size = 4
  49.         p a                                  => [7, 7, 7, 7]
  50.         p a.size                             => 4
  51.         a.size **= 2
  52.         p a                                  => [7, 7, 7, 7, nil, nil, nil, nil,
  53.                                                  nil, nil, nil, nil, nil, nil,
  54.                                                  nil, nil]
  55.         # size 可以做任何运算。
  56.   ● fill 就是规定长度往后面 push 相应的字串,具有破坏性。
  57.     例:a = [7, 7, 7, 7, 6, 6, 5]
  58.         a.fill(3)
  59.         p a                                  => [7, 7, 7, 7, 6, 6, 5, nil, nil,
  60.                                                  nil]
  61.         a.fill(2, "我们")                    => [7, 7, 7, 7, 6, 6, 5, nil, nil,
  62.                                                  nil, "我们", "我们"]
  63. ===============================================================================
  64. =end
  65. class Array
  66.   def number(nth_name)
  67.     if self.index(nth_name) == nil
  68.       return 0
  69.     end
  70.     num = 1
  71.     for i in 0...self.size
  72.       if self[i] == nth_name and self.index(nth_name) != i
  73.         num += 1
  74.       end
  75.     end
  76.     return num
  77.   end
  78.   def aftftn(index)
  79.     num = 1
  80.     aftft = 0
  81.     for i in 0...self.size
  82.       if self[i] == self[index]
  83.         aftft = i
  84.         break
  85.       end
  86.     end
  87.     for j in 0...self.size
  88.       if self[j] == self[aftft] and aftft != j
  89.         num += 1
  90.       end
  91.     end
  92.     return num
  93.   end
  94.   def delete_same(name)
  95.     if self.number(name) == 0
  96.       return self
  97.     end
  98.     for i in 1..self.number(name)
  99.       for d in 0...self.size
  100.         if self[d] == name and self.index(name) != d
  101.           self.delete_at(d)
  102.           break
  103.         end
  104.       end
  105.     end
  106.     return self
  107.   end
  108.   def same?(index)
  109.     return (self.aftft(index) != index)
  110.   end
  111.   def das # (delete_all_same)
  112.     ary = self.dup
  113.     for j in 0...self.size
  114.       ary.delete_same(self[j])
  115.     end
  116.     return ary
  117.   end
  118.   def das!
  119.     ary = self.dup
  120.     for j in 0...ary.size
  121.       self.delete_same(ary[j])
  122.     end
  123.     return self
  124.   end
  125.   def aftft(index)
  126.     num = nil
  127.     for j in 0...self.size
  128.       if self[index] == self[j]
  129.         num = j
  130.         break
  131.       end
  132.     end
  133.     return num
  134.   end
  135.   def dasn # (delete_all_same_number)
  136.     pushing = []
  137.     ary = self.dup
  138.     a = self.das
  139.     for i in 0...a.size
  140.       pushing[i] = ary.number(a[i])
  141.     end
  142.     return pushing
  143.   end
  144.   def dasn!
  145.     ary = self.dup
  146.     a = self.das
  147.     self.clear
  148.     for i in 0...a.size
  149.       self[i] = ary.number(a[i])
  150.     end
  151.     return self
  152.   end
  153.   def size=(size)
  154.     if self.size == size
  155.       return
  156.     end
  157.     if self.size > size
  158.       s = self.size
  159.       for i in 0..self.size-size
  160.         self.delete_at(s-i)
  161.       end
  162.       return
  163.     end
  164.     for i in self.size...size
  165.       self[i] = nil
  166.     end
  167.   end
  168.   def fill(size, text = nil)
  169.     size.times do
  170.       self.push(text)
  171.     end
  172.   end
  173. end
复制代码
这里还有个脚本···不过不是我写的,我设定的一个群体技能里有判定是给敌人的伤害如果有相同的就去掉相同伤害,然后每个敌人受到不同伤害之和的平均值···按照ruby的语法怎么缩短更好···
作者: taroxd    时间: 2014-7-6 08:51
chd114 发表于 2014-7-6 08:48
这里还有个脚本···不过不是我写的,我设定的一个群体技能里有判定是给敌人的伤害如果有相同的就去掉相 ...

array.uniq!
array.inject(:+) / array.size

ruby版本太低的事情我不管
作者: chd114    时间: 2014-7-6 08:51
taroxd 发表于 2014-7-6 08:51
array.uniq!
array.inject(:+) / array.size

目前用的1.03···如果用1.05呢?
作者: chd114    时间: 2014-7-6 08:52
taroxd 发表于 2014-7-6 08:51
array.uniq!
array.inject(:+) / array.size

好吧看错了···看成RMXP版本了···
作者: taroxd    时间: 2014-7-6 08:54
chd114 发表于 2014-7-6 08:52
好吧看错了···看成RMXP版本了···

Ruby版本太低的话我就懒得弄了,我也不知道哪些东西能用哪些东西不能用
作者: chd114    时间: 2014-7-6 08:57
taroxd 发表于 2014-7-6 08:54
Ruby版本太低的话我就懒得弄了,我也不知道哪些东西能用哪些东西不能用

···能不能用一定要试过才能知道吗···那ruby的东西至少1万条···= =一个个试太儿戏了吧
作者: taroxd    时间: 2014-7-6 08:58
chd114 发表于 2014-7-6 08:57
···能不能用一定要试过才能知道吗···那ruby的东西至少1万条···= =一个个试太儿戏了吧 ...

不能用就是换一种写法的事情,我说你不要再来秀下限了好不好!
作者: chd114    时间: 2014-7-6 08:59
taroxd 发表于 2014-7-6 08:58
不能用就是换一种写法的事情,我说你不要再来秀下限了好不好!

我的意思是说···不能用的一定要试过才会知道吗= =直接看脚本是看不出来的?
作者: taroxd    时间: 2014-7-6 09:00
chd114 发表于 2014-7-6 08:59
我的意思是说···不能用的一定要试过才会知道吗= =直接看脚本是看不出来的? ...

不管能不能用你甜美的都要试啊!不试你写什么代码
作者: chd114    时间: 2014-7-6 09:02
taroxd 发表于 2014-7-6 09:00
不管能不能用你甜美的都要试啊!不试你写什么代码

就是说同一种语法写出来的可能有的能在RMXP里用有的不可以?
作者: taroxd    时间: 2014-7-6 09:03
chd114 发表于 2014-7-6 09:02
就是说同一种语法写出来的可能有的能在RMXP里用有的不可以?

不是,是同一个代码有的都可以有的只能在RMVA用。我习惯写VA的了,所以不知道在XP里面能不能用。
作者: chd114    时间: 2014-7-6 09:05
taroxd 发表于 2014-7-6 09:03
不是,是同一个代码有的都可以有的只能在RMVA用。我习惯写VA的了,所以不知道在XP里面能不能用。 ...

······就是说如果一个语法写的在RMXP里不能用的那么那个语法写的其他的也不能用的意思咯···那就行了···那只要找个复杂点的程序用几个语法写一次运算下就完事
作者: taroxd    时间: 2014-7-6 09:06
chd114 发表于 2014-7-6 09:05
······就是说如果一个语法写的在RMXP里不能用的那么那个语法写的其他的也不能用的意思咯···那就 ...

是的………你看kuerlulu多好心的点评啊
作者: chd114    时间: 2014-7-6 09:10
taroxd 发表于 2014-7-6 09:06
是的………你看kuerlulu多好心的点评啊

···XP的ruby一直都比VA低一个版本?好吧如果是这样难怪你用的是VA···
作者: taroxd    时间: 2014-7-6 09:13
chd114 发表于 2014-7-6 09:10
···XP的ruby一直都比VA低一个版本?好吧如果是这样难怪你用的是VA···

…是的…而且VA的Ruby版本也不新了
作者: chd114    时间: 2014-7-6 09:15
taroxd 发表于 2014-7-6 09:00
不管能不能用你甜美的都要试啊!不试你写什么代码

那1.8-1.9的话有哪些新增语法应该能找到记录吧?嗯?(蹭)
作者: fux2    时间: 2014-7-6 14:56
为何要跟CHD巨巨争,人类是不可能战胜它的。




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1