楼主: 冷峻逸

[原创发布] Ruby提问区

[复制链接]

…あたしは天

梦石
0
星屑
2308
在线时间
4033 小时
注册时间
2010-10-4
回帖
10548

开拓者贵宾

发表于 2015-8-6 07:34:47 | 显示全部楼层
本帖最后由 taroxd 于 2015-8-6 09:24 编辑

LZ写一个这样的程序吧:
输入一段Ruby代码和这段代码的input,如果这段代码执行后会死循环,输出 true。如果这段代码能正常停止,输出 false。

点评

你都写不出来我怎么可能写出来  发表于 2015-8-6 14:03
然而我那是在卖萌,不是ZB(逃  发表于 2015-8-6 11:52
你吐槽的逼格不够  发表于 2015-8-6 11:39
你吐槽的逼格不够  发表于 2015-8-6 11:38
这种情况下,不是interrupt就是too deep吧  发表于 2015-8-6 11:35
回复

使用道具 举报

梦石
0
星屑
9557
在线时间
5074 小时
注册时间
2013-6-21
回帖
3459

开拓者贵宾剧作品鉴家

发表于 2015-8-6 08:34:20 | 显示全部楼层
楼上的太难了
LZ写一个这样的程序吧:
输入一段Ruby代码,如果这段代码里面的end不多也不少,输出true,否则输出false。

点评

require 'ripper'  发表于 2015-8-6 09:04
LBQ
意思就是我们得开parser(  发表于 2015-8-6 08:46
回复

使用道具 举报

梦石
10
星屑
39550
在线时间
1919 小时
注册时间
2010-11-14
回帖
3214

R考场第七期纪念奖

发表于 2015-8-6 09:01:50 | 显示全部楼层
新难题「版主们的リクエスト」
_(:3」∠)_
用头画头像,用脚写脚本
回复

使用道具 举报

送快递的水表员

梦石
10
星屑
5259
在线时间
3304 小时
注册时间
2012-6-27
回帖
7028

开拓者贵宾

发表于 2015-8-6 10:35:29 | 显示全部楼层
楼上的都太难了
来个有实际意义的吧:输入一个具体的数学算式(例如18 / 4 或 (4/3) * 2),先判断结果是否是整数或有限小数,是的话直接输出结果,反之输出为最简分数。

点评

你的整个要求Ruby的mathn库基本上都做好了  发表于 2015-8-6 15:00
看错了= =【我记得分解因数ruby不是有一个算法的吗  发表于 2015-8-6 14:58
有限小数和 finite? 没关系吧。另外这些都是Ruby已经有的轮子...  发表于 2015-8-6 14:45
1,分解成质数之积如何写,光拿文字说就行我还说直接约分不就完了;2,finite?判断数值是否有穷。  发表于 2015-8-6 14:34
有限小数的判定不会  发表于 2015-8-6 14:02
回复

使用道具 举报

寒

梦石
0
星屑
1049
在线时间
1391 小时
注册时间
2010-8-9
回帖
3301
发表于 2015-8-6 12:02:56 | 显示全部楼层
本帖最后由 寒冷魔王 于 2015-8-6 12:08 编辑

楼上的都太难了,顺便围观状元卖萌

好吧,就问一个简单的问题
ruby的Array似乎是不连续的。
每次索引求值(包括each)都会产生额外消耗。
[pre lang="C"]VALUE
rb_ary_each(VALUE array)
{
    long i;
    volatile VALUE ary = array;

    RETURN_SIZED_ENUMERATOR(ary, 0, 0, ary_enum_length);
    for (i=0; i<RARRAY_LEN(ary); i++) {
        rb_yield(RARRAY_AREF(ary, i));
    }
    return ary;
}[/pre]
包括Struct(而且速度还不如Array)
因此才有了Table(RGSS)

于是求助——
怎样在不借助外部的情况下,在Ruby内产生一个连续内存空间的数据结构?
使之可以迅速访问,不产生较多额外消耗?

点评

原来如此,谢兰兰大人!  发表于 2015-8-6 19:11
这个我发现了A,原因是B的B,你装歪了  发表于 2015-8-6 19:00
不要乱猜,低效率是消息分派系统的特点  发表于 2015-8-6 18:58
那么Array的低效率何如,表示十分不解  发表于 2015-8-6 18:25
#define RARRAY_AREF(a, i) (RARRAY_CONST_PTR(a)[i]) 嗯好吧,连续的  发表于 2015-8-6 15:27
回复

使用道具 举报

…あたしは天

梦石
0
星屑
2308
在线时间
4033 小时
注册时间
2010-10-4
回帖
10548

开拓者贵宾

发表于 2015-8-6 18:57:31 | 显示全部楼层
本帖最后由 taroxd 于 2015-8-6 19:47 编辑
寒冷魔王 发表于 2015-8-6 12:02
楼上的都太难了,顺便围观状元卖萌

好吧,就问一个简单的问题


送你个不管越界不检查参数的无责任数组(比原生Ruby Array慢,我会乱说?):

[pre lang="C" file="my_array.c"]#include <ruby.h>

struct my_array {
  size_t size;
  VALUE *ptr;
};

static void
my_array_free(void *p) {
  struct my_array *ptr = p;

  if (ptr->size > 0)
    free(ptr->ptr);
}

static VALUE
my_array_alloc(VALUE klass) {
  VALUE obj;
  struct my_array *ptr;

  obj = Data_Make_Struct(klass, struct my_array, NULL, my_array_free, ptr);

  ptr->size = 0;
  ptr->ptr  = NULL;

  return obj;
}

static VALUE
my_array_init(VALUE self, VALUE size) {
  struct my_array *ptr;
  size_t requested = NUM2SIZET(size);

  Data_Get_Struct(self, struct my_array, ptr);

  ptr->ptr = (VALUE *)malloc(requested * sizeof(VALUE));
  ptr->size = requested;

  return self;
}

static VALUE
my_array_size(VALUE self) {
  struct my_array *ptr;

  Data_Get_Struct(self, struct my_array, ptr);

  return SIZET2NUM(ptr->size);
}

static VALUE
my_array_get(VALUE self, VALUE index) {
  struct my_array *ptr;

  Data_Get_Struct(self, struct my_array, ptr);

  return (ptr->ptr)[NUM2LONG(index)];

}

static VALUE
my_array_set(VALUE self, VALUE index, VALUE value) {
  struct my_array *ptr;

  Data_Get_Struct(self, struct my_array, ptr);

  (ptr->ptr)[NUM2LONG(index)] = value;
  return value;
}

#ifdef __cplusplus
extern "C" {
#endif
__declspec(dllexport)
void
Init_my_array(void) {
  VALUE cMyArray;

  cMyArray = rb_const_get(rb_cObject, rb_intern("MyArray"));

  rb_define_alloc_func(cMyArray, my_array_alloc);
  rb_define_method(cMyArray, "initialize", my_array_init, 1);
  rb_define_method(cMyArray, "size", my_array_size, 0);
  rb_define_method(cMyArray, "[]", my_array_get, 1);
  rb_define_method(cMyArray, "[]=", my_array_set, 2);
}
#ifdef __cplusplus
}
#endif
[/pre]

[pre lang="ruby"]class MyArray; end

require_relative 'my_array'

a = MyArray.new(2)
a[0] = 1
p a[0][/pre]

点评

你看,RGSS都能够直接Win32API.new了,咱还有什么不满的?咱们应该感激人家。  发表于 2015-8-6 19:53
1. 没黑CRuby,这只是一个C扩展 2. 所以我十分怨念 RGSS不能 require so库  发表于 2015-8-6 19:45
刚刚网断了:( 这不仅仅是黑Ruby了,连CRuby都黑了。好帅!那样的话,顺便把这个打进RGSS如何?  发表于 2015-8-6 19:29

评分

参与人数 1星屑 +5 收起 理由
寒冷魔王 + 5 塞糖,状元加油

查看全部评分

回复

使用道具 举报

梦石
0
星屑
9292
在线时间
2504 小时
注册时间
2011-5-20
回帖
14521

开拓者

发表于 2015-8-6 19:05:59 | 显示全部楼层
taroxd 发表于 2015-8-6 01:57
送你个不管越界不检查参数的无责任数组:

#include

水的好,楼主选择死亡(楼主已经死亡)

点评

上古水神在这里膜拜远古水神!  发表于 2015-8-6 19:16
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部