[#319108] Iterator objects and lazy evaluation — Yuh-Ruey Chen <maian330@...>

Two questions:

14 messages 2008/11/01

[#319117] Poor performance of Ruby 1.8.7 when installed with MacPorts — abc <arcadiorubiogarcia@...>

Hi,

15 messages 2008/11/01

[#319176] Ruby for Philosophers — Sebastian Torena <citizenkant@...>

Hi there,

14 messages 2008/11/02

[#319196] ruby1.9: lazy versions of Enumerator#select and friends? — Brian Candler <b.candler@...>

I've been having a play with Enumerators in ruby 1.9, in particular

12 messages 2008/11/02

[#319239] Rake task for building latex? — Stefano Crocco <stefano.crocco@...>

Does anyone know whether there's a rake task to build latex files, including

10 messages 2008/11/03

[#319319] Ruby's take on S.O.L.I.D. — Mike Lopke <reglopke@...>

I'm curious about everyone's take on Bob Martin's S.O.L.I.D. design

16 messages 2008/11/03

[#319401] Combination of numbers in an array that add up to x — Hae Lee <hae.lee.subscription@...>

Objective: Find list of values in an array that adds up to a specific

17 messages 2008/11/04

[#319404] Showing a spinner ? — Aldric Giacomoni <aldric@...>

How do I show a spinner on the command line interface when a ruby script

13 messages 2008/11/04

[#319440] What would you like to know about JRuby? — Charles Oliver Nutter <charles.nutter@...>

Tom Enebo and I are putting together our JRuby presentation for

22 messages 2008/11/04

[#319532] What's the Best Way to Mimic an HTTP Request? — Daniel Miessler <daniel@...>

I'm trying to write a tool that will take a domain as an argument and

10 messages 2008/11/05

[#319546] Ruby has a Face that it wears on its feet — "Jayson Williams" <williams.jayson@...>

In my opinion, Ruby's official face should be Shoes. Shoes gives Ruby

17 messages 2008/11/05
[#319553] Re: Ruby has a Face that it wears on its feet — "Martin DeMello" <martindemello@...> 2008/11/05

On Wed, Nov 5, 2008 at 11:17 AM, Jayson Williams

[#319576] how to quickly find a string towards the end of a large io object — bwv549 <jtprince@...>

How do I scan starting at the end of a big io object to find a string

12 messages 2008/11/06

[#319702] Sudoku Generator (#182) — Matthew Moss <matt@...>

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

14 messages 2008/11/07

[#319769] implementing mvc - using observer pattern - beginner to OOP — Adam Akhtar <adamtemporary@...>

Hi I started making a simple command line todo list application as a way

10 messages 2008/11/08

[#319770] what's easiest way to compare a Float & BigDecimal (i.e. like a equals mechanism) — "Greg Hauptmann" <greg.hauptmann.ruby@...>

Hi,

8 messages 2008/11/08

[#319835] Moving large amount of files, 1.750.000+ — Sebastian Newstream <abeansits@...>

Hello fellow Rubyists!

15 messages 2008/11/09
[#319837] Re: Moving large amount of files, 1.750.000+ — Robert Klemme <shortcutter@...> 2008/11/09

On 09.11.2008 18:04, Sebastian Newstream wrote:

[#319861] Notepad++ (no debug output, using XP) — Ed Hardy <asm.sol@...>

Notepad++ seems to be a great editor for Ruby, in XP Windows. However,

13 messages 2008/11/10

[#319902] Problem with object methods? — Carter Davis <theshakrah@...>

I recently made an object for a game I'm making. It uses the constructor

16 messages 2008/11/10
[#319908] Re: Problem with object methods? — Hugh Sasse <hgs@...> 2008/11/10

[#319911] Re: Problem with object methods? — Carter Davis <theshakrah@...> 2008/11/10

Okay, I made an example.

[#320057] Convert text string i.e 'Peter' into integer ID — Justus Ohlhaver <ohlhaver@...>

Hello,

23 messages 2008/11/12

[#320101] Issue with block and getting to local variables — Tarek Other <cashew250@...>

Ok I'm new to ruby and want to do the following, I want to define a

12 messages 2008/11/12

[#320103] Need tutoring on using a path environment variable — dkmd_nielsen <donn@...>

I don't know what to do. I have an environment variable, PW_PATH,

11 messages 2008/11/12

[#320135] '#' characters are breaking my regexp — Max Williams <toastkid.williams@...>

I'm trying to build a regexp that includes music notes, eg Bb or C#.

14 messages 2008/11/13

[#320202] Highline - question with multiple choices — szimek <szimek@...>

Hi,

14 messages 2008/11/14
[#320208] Re: Highline - question with multiple choices — James Gray <james@...> 2008/11/14

On Nov 14, 2008, at 4:23 AM, szimek wrote:

[#320270] Re: Highline - question with multiple choices — szimek <szimek@...> 2008/11/15

On 14 Lis, 14:52, James Gray <ja...@grayproductions.net> wrote:

[#320213] Unit Conversion (#183) — Matthew Moss <matt@...>

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

37 messages 2008/11/14

[#320280] IO#lineno= doesn't work the way I expected — Chad Perrin <perrin@...>

I'm working on something that operates on each line of a file

22 messages 2008/11/15
[#320283] Re: IO#lineno= doesn't work the way I expected — Tim Hunter <TimHunter@...> 2008/11/15

Chad Perrin wrote:

[#320286] Re: IO#lineno= doesn't work the way I expected — Chad Perrin <perrin@...> 2008/11/15

On Sun, Nov 16, 2008 at 02:27:45AM +0900, Tim Hunter wrote:

[#320287] Re: IO#lineno= doesn't work the way I expected — "Michael Guterl" <mguterl@...> 2008/11/15

On Sat, Nov 15, 2008 at 2:08 PM, Chad Perrin <perrin@apotheon.com> wrote:

[#320288] Re: IO#lineno= doesn't work the way I expected — "Michael Guterl" <mguterl@...> 2008/11/15

On Sat, Nov 15, 2008 at 2:54 PM, Michael Guterl <mguterl@gmail.com> wrote:

[#320359] Why does tmail stop my CGI script form working? — Chad Perrin <perrin@...>

I decided to try TMail for the back end of a new contact page on a

14 messages 2008/11/17

[#320370] How can I overload a method in Ruby — Zhao Yi <youhaodeyi@...>

This is my class definition:

19 messages 2008/11/17

[#320417] How to extract links of a particular class type — "Sita Rami Reddy" <sitaramireddy@...>

I have a web page which has n number of links.

11 messages 2008/11/17

[#320446] function to select only certain key/value pairs from hash? — Aryk Grosz <tennisbum2002@...>

Whenever Im coding I usually come across having to create a new hash

14 messages 2008/11/17

[#320482] I don't like specs, should I change my point of view ? — Zouplaz <user@...>

Hello, I'm not trolling. I don't like specs (RSpec) : everytime I had a

18 messages 2008/11/18

[#320500] Should is the new Must? — Trans <transfire@...>

Why did 'should' become the going nomenclature of BDD framworks?

21 messages 2008/11/18

[#320553] Syntax question from a newbie to Ruby — David Spitzer <davidspitzer@...>

I am just learning Ruby and I can not seem to see why the first example

12 messages 2008/11/18

[#320655] build hash by iterating — Jason Lillywhite <jason.lillywhite@...>

I am building a hash this way:

15 messages 2008/11/19

[#320665] Question about host, gethostbyname and getaddress — Vladimir Fekete <fekete@...>

Hi *,

11 messages 2008/11/19

[#320709] ANN: One-Click Ruby Installer 186-27 Release Candidate 2 — Luis Lavena <luislavena@...>

Hello Ruby for Windows users!

11 messages 2008/11/19

[#320811] Found a ruby bug in the URI class, what do I do? — Ben Johnson <bjohnson@...>

I'm pretty sure this is a bug, and it seem so obvious that I'm thinking

9 messages 2008/11/20

[#320908] Befunge (#184) — Matthew Moss <matt@...>

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

28 messages 2008/11/22
[#321031] Re: [QUIZ] Befunge (#184) — Matthew Moss <matt@...> 2008/11/24

Hopefully the quiz isn't intimidating... It's a fairly simple language

[#321006] Can you run a command line script with arguments, without typing 'ruby' first? — "Jayson Williams" <williams.jayson@...>

Hi All,

29 messages 2008/11/24
[#321008] Re: Can you run a command line script with arguments, without typing 'ruby' first? — "Diogo Lisboa" <diogoslisboa@...> 2008/11/24

chmod a+x my_script (restrict permissions if you want)

[#321022] Re: Can you run a command line script with arguments, without typing 'ruby' first? — "Jayson Williams" <williams.jayson@...> 2008/11/24

I am using win os, so the shabang thing isn't an option for me. I put

[#321023] Re: Can you run a command line script with arguments, without typing 'ruby' first? — "Glen Holcomb" <damnbigman@...> 2008/11/24

On Mon, Nov 24, 2008 at 2:12 PM, Jayson Williams

[#321024] Re: Can you run a command line script with arguments, without typing 'ruby' first? — "Glen Holcomb" <damnbigman@...> 2008/11/24

On Mon, Nov 24, 2008 at 2:21 PM, Glen Holcomb <damnbigman@gmail.com> wrote:

[#321027] Re: Can you run a command line script with arguments, without typing 'ruby' first? — "Jayson Williams" <williams.jayson@...> 2008/11/24

The associations are correct. I reset them just to be sure though. I

[#321095] Re: Can you run a command line script with arguments, without typing 'ruby' first? — Daniel Schömer <daniel.schoemer@...> 2008/11/25

Jayson Williams wrote:

[#321037] Chris Pine tutorial assistance chapter 7 sort data without use of .sort method — jgheal@...

I'm learning to progam and came accross Chris Pine's Ruby Tutorial.

12 messages 2008/11/24

[#321039] Good math/stats libraries for Ruby? — Kenneth McDonald <kenneth.m.mcdonald@...>

There seem to be lots of small stats/math libraries for Ruby, but none

10 messages 2008/11/24

[#321166] time to back peddle? (Ruby 1.8.7) — Trans <transfire@...>

I just updated my Ubuntu system and was a bit surprised to find:

16 messages 2008/11/26

[#321179] How to get a reference to a block (when no explicit block parameter is used?) — Kenneth McDonald <kenneth.m.mcdonald@...>

In a function, I can find out if a block was given using block_given?,

8 messages 2008/11/26

[#321246] Performance issues with large files -- ruby vs. python :) — sa 125 <s_ayalon@...>

Hi all -

16 messages 2008/11/27
[#321248] Re: Performance issues with large files -- ruby vs. python :) — Florian Gilcher <flo@...> 2008/11/27

>

[#321271] Ruby's duck typing — "stephan.zimmer" <stephan.zimmer@...>

I would like to represent certain data by a list; to this end I let

17 messages 2008/11/27

[#321287] Programming Noob Chris Pine Tutorial sorting without use of array.sort method — whisperjim <jgheal@...>

I'm working through the following tutorial http://pine.fm/LearnToProgram/

10 messages 2008/11/27

[#321297] eRuby/erb outside of Rails — Jonny Noog <jonnynoog@...>

Hello,

18 messages 2008/11/28

[#321387] best gui toolkit — Warren Dulnuan <rr3800@...>

What is the best GUI toolkit for Ruby?

32 messages 2008/11/29

[#321421] Anyone scraping dynamic AJAX sites? — Becca Girl <cschall@...>

Hello.

12 messages 2008/11/30

[#321428] Enumerable#select used to return actual values — Mike Austin <"mike[nospam]"@...>

I'm pretty sure select used to use the actual value of the called block,

36 messages 2008/11/30
[#321432] Re: Enumerable#select used to return actual values — Robert Klemme <shortcutter@...> 2008/11/30

On 30.11.2008 04:46, Mike Austin wrote:

[#321906] Re: Enumerable#select used to return actual values — Mark Thomas <mark@...> 2008/12/04

On Nov 29, 10:46m, Mike Austin <"mike[nospam]"@mike-austin.com>

[#321912] Re: Enumerable#select used to return actual values — Trans <transfire@...> 2008/12/04

Re: [QUIZ] Befunge (#184)

From: "Adam Shelly" <adam.shelly@...>
Date: 2008-11-27 02:10:38 UTC
List: ruby-talk #321204
On Sat, Nov 22, 2008 at 8:55 AM, Matthew Moss <matt@moss.name> wrote:
> ## Befunge (#184)
> Your task for these two weeks is to write a [Befunge-93][1] interpreter.

My program follows. I tried to make it as self-documenting as
possible.  It's supposed to be a complete implementation, but it
crashes on life.bf, so I think I'm missing something.  I created a
rudimentary debugger to help figure it out - start it with `ruby -d
befunge.rb progfile`.  Unfortunately I couldn't track it down.

-Adam
-----------------------------
#befunge.rb
# a befunge interpreter for Ruby Quiz #184
# requires Ruby 1.8
# -Adam Shelly

module Befunge
    LineLen =80
    NumLines=25

  class VirtualMachine
    #the Program Counter
    class PC
      attr_reader :x,:y
      MOTION = {?>=>[1,0], ?<=>[-1,0], ?^=>[0,-1], ?v=>[0,1]}
      def initialize
        reset
      end
      def reset
        @x=@y=0
        set_dir ?>
      end
      def set_dir d
        d=MOTION.keys[rand(4)] if d==??
        @dir=d
      end
      def advance
        @x=(x+MOTION[@dir][0])%LineLen
        @y=(y+MOTION[@dir][1])%NumLines
      end
      def addr
        [@x,@y]
      end
      def to_s
        "[#{@x},#{@y}]:#{@dir.chr}"
      end
    end
  #new
    def initialize ostream = $stdout
      @stack = Array.new
      @pc = PC.new
      @stopped=@string_mode = false
      @break_at={}
      define_opcodes
      set_output ostream
    end
  #the language definition
    def define_opcodes
      @opcodes = {
      ?\s=>[:NOP, lambda{ }], #no-op
      ?+ =>[:ADD, lambda{ push(pop+pop)             }],
      ?* =>[:MUL, lambda{ push(pop*pop)             }],
      ?- =>[:SUB, lambda{ a=pop;push(pop-a)         }],
      ?/ =>[:DIV, lambda{ a=pop;push(pop/a)         }],
      ?% =>[:MOD, lambda{ a=pop;push(pop%a)         }],
      ?! =>[:NOT, lambda{ push(pop==0? 1: 0)        }],
      ?` =>[:GT , lambda{ push(pop>=pop ? 0: 1)     }],
      ?> =>[:RT , lambda{ @pc.set_dir ?>            }],
      ?< =>[:LF , lambda{ @pc.set_dir ?<            }],
      ?^ =>[:UP , lambda{ @pc.set_dir ?^            }],
      ?v =>[:DN , lambda{ @pc.set_dir ?v            }],
      ?? =>[:RND, lambda{ @pc.set_dir ??            }],
      ?_ =>[:IFH, lambda{ @pc.set_dir(pop==0??>:?<) }],
      ?| =>[:IFV, lambda{ @pc.set_dir(pop==0??v:?^) }],
      ?" =>[:STR, lambda{ @string_mode=!@string_mode}],
      ?: =>[:DUP, lambda{ push(a=pop);push a        }],
      ?\\=>[:SWP, lambda{ a,b=pop,pop;push a;push b }],
      ?$ =>[:POP, lambda{ pop                       }],
      ?. =>[:PRN, lambda{ @output<< pop.to_i.to_s   }],
      ?, =>[:PRC, lambda{ @output<< (pop%256).chr   }],
      ?# =>[:JMP, lambda{ @pc.advance               }],
      ?p =>[:PUT, lambda{ put(pop,pop,pop)          }],
      ?g =>[:GET, lambda{ push get(pop,pop)         }],
      ?& =>[:QN , lambda{ push query(:NUM)          }],
      ?~ =>[:QC , lambda{ push query(:CHAR)         }],
      ?@ =>[:STP, lambda{ @stopped=true             }]
      }
      (?0..?9).each{|v|@opcodes[v]=[:VAL,lambda{push v-?0}]}
    end
  #program control
    def load_program istream
      @mem = istream.readlines
      @mem.map!{|l| l.chomp.ljust(LineLen)}
      (NumLines-@mem.size).times { @mem<<' '*LineLen}
      raise "Program too big" if @mem.size>NumLines ||
@mem.find{|l|l.size>LineLen}
      @pc.reset
    end
    def run
      raise "No Program Loaded" unless @mem
      @stopped = false
      step until @stopped||@break_at[@pc.addr]
    end
    def step
      execute current_instruction
      advance_pc if !@stopped
    end
  #debug support
    def set_output ostream
      @output = ostream
    end
    def show_debug
      $stdout.write @mem
      $stdout.print '='*LineLen+"\nPC = #{@pc.to_s.ljust(12)}",
           "op = #{current_instruction.chr} ( #{getopcode.to_s.ljust(4)}) ",
           "Stack[#{@stack.nitems}]: [
#{(@stack[-[@stack.size,8].min,8].reverse||[])*' '} ]\n",
           '='*LineLen,"\n"
    end
    def set_breakpoint addr
      @break_at[addr]=true
    end
    def clear_breakpoints
      @break_at.clear
    end
private
  #status
    def current_instruction
      @mem[@pc.y][@pc.x]
    end
    def getopcode
      return :STR if @string_mode
      (@opcodes[current_instruction]||[:UNK])[0]
    end
  #code execution
    def execute op
      if @string_mode && op!=?"
        push op
      else begin
        inst=@opcodes[op]
        inst[1].call if inst
      rescue ZeroDivisionError
        push query(:ZDIV)
      rescue => err
        puts err
        show_debug
        @stopped=true
      end;end
    end
    def advance_pc
      if getopcode!=:STP
        @pc.advance
        @pc.advance while getopcode==:NOP && !@break_at[@pc.addr]
      end
    end
  #machine operations
    def push v
      @stack.push v
    end
    def pop
      @stack.pop||0
    end
    def put x,y,v
      @mem[x%LineLen][y%NumLines]=v%256
    end
    def get x,y
      @mem[x%LineLen][y%NumLines]
    end
    def query type
      print "\n#{type.to_s}?> "
      r = $stdin.gets||"\0"
      return r[0] if type==:CHAR
      r.to_i
    end
  end

  class Debugger
    def initialize vm
      @vm = vm
      @vm.set_output @linebuf=''
    end
    def run
      @vm.show_debug
      loop do
        print "DBG??"
        cmd = $stdin.gets||'q'
        case cmd.chomp.downcase[0]
          when ?q then break
          when ?s,?\s,nil
            @vm.step
            @vm.show_debug
          when ?r
            @vm.run
            @vm.show_debug
          when ?b
            @vm.set_breakpoint cmd.split[1,2].map{|n|n.to_i}
          when ?c
            @vm.clear_breakpoints
          else
            puts "DEBUG COMMANDS: (s)tep, (r)un, (b)reak x,y, (c)lear
breakpoints"
            puts "(you entered #{cmd.chomp.downcase})"
        end
        puts @linebuf,'-'*Befunge::LineLen
        @linebuf=@linebuf[-1,1] if @linebuf[-2]==?\n
      end
    end
  end
end

if __FILE__ == $0
  vm = Befunge::VirtualMachine.new
  raise "Usage: #{$0} filename" unless File.exists? ARGV[0]
  File.open(ARGV[0]){|f|vm.load_program f}
  if $DEBUG
    Befunge::Debugger.new(vm).run
  else
    vm.run
  end
end

In This Thread