Mercurial > repo
annotate golfscript.rb @ 3024:12ad58b82d89
<nooodl_> fetch http://bpaste.net/raw/C76Falgtu390Rz4jmqW6/
author | HackBot |
---|---|
date | Sat, 01 Jun 2013 19:36:19 +0000 |
parents | dfd73e2917ba |
children |
rev | line source |
---|---|
3023
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
1 #!/usr/bin/ruby |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
2 #(c) Copyright 2008 Darren Smith. All Rights Reserved. |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
3 $lb = [] |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
4 class Gtype |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
5 def go |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
6 $stack<<self |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
7 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
8 def val |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
9 @val |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
10 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
11 |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
12 '+-|&^'.each_byte{|i| |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
13 eval'def %c(rhs) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
14 if rhs.class != self.class |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
15 a,b=coerce(rhs) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
16 a %c b |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
17 else |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
18 factory(@val %c rhs.val) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
19 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
20 end'%([i]*3) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
21 } |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
22 def ==(rhs) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
23 @val==rhs.val |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
24 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
25 def eql?(rhs) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
26 @val==rhs.val |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
27 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
28 def hash |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
29 @val.hash |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
30 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
31 def <=>(rhs) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
32 @val<=>rhs.val |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
33 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
34 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
35 |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
36 class Gint < Gtype |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
37 def initialize(i) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
38 @val = case i |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
39 when true then 1 |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
40 when false then 0 |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
41 else;i |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
42 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
43 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
44 def factory(a) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
45 Gint.new(a) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
46 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
47 def to_gs |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
48 Gstring.new(@val.to_s) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
49 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
50 def to_int #for pack |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
51 @val |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
52 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
53 def ginspect |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
54 to_gs |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
55 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
56 def class_id; 0; end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
57 def coerce(b) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
58 [if b.class == Garray |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
59 Garray.new([self]) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
60 elsif b.class == Gstring |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
61 to_gs |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
62 else #Gblock |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
63 to_gs.to_s.compile |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
64 end,b] |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
65 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
66 |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
67 def ~ |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
68 Gint.new(~@val) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
69 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
70 def notop |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
71 Gint.new(@val == 0) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
72 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
73 '*/%<>'.each_byte{|i| |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
74 eval'def %c(rhs) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
75 Gint.new(@val %c rhs.val) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
76 end'%[i,i] |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
77 } |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
78 def equalop(rhs) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
79 Gint.new(@val == rhs.val) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
80 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
81 def question(b) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
82 Gint.new(@val**b.val) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
83 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
84 def base(a) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
85 if Garray===a |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
86 r=0 |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
87 a.val.each{|i| |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
88 r*=@val |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
89 r+=i.val |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
90 } |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
91 Gint.new(r) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
92 else |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
93 i=a.val.abs |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
94 r=[] |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
95 while i!=0 |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
96 r.unshift Gint.new(i%@val) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
97 i/=@val |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
98 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
99 Garray.new(r) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
100 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
101 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
102 def leftparen |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
103 Gint.new(@val-1) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
104 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
105 def rightparen |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
106 Gint.new(@val+1) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
107 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
108 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
109 |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
110 class Garray < Gtype |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
111 def initialize(a) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
112 @val = a || [] |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
113 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
114 def factory(a) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
115 Garray.new(a) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
116 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
117 def to_gs |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
118 @val.inject(Gstring.new("")){|s,i|s+i.to_gs} |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
119 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
120 def flatten #maybe name to_a ? |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
121 # Garray.new(@val.inject([]){|s,i|s+case i |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
122 # when Gstring then i.val |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
123 # when Gint then [i] |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
124 # when Garray then i.flatten.val |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
125 # when Gblock then i.val |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
126 # end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
127 # }) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
128 # end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
129 #use Peter Taylor's fix to avoid quadratic flatten times |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
130 Garray.new(flatten_append([])) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
131 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
132 def flatten_append(prefix) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
133 @val.inject(prefix){|s,i|case i |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
134 when Gint then s<<i |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
135 when Garray then i.flatten_append(s) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
136 when Gstring then s.concat(i.val) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
137 when Gblock then s.concat(i.val) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
138 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
139 } |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
140 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
141 def ginspect |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
142 Gstring.new('[')+Garray.new(@val.map{|i|i.ginspect})*Gstring.new(' ')+Gstring.new(']') |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
143 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
144 def go |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
145 $stack<<self |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
146 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
147 def class_id; 1; end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
148 def coerce(b) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
149 if b.class == Gint |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
150 b.coerce(self).reverse |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
151 elsif b.class == Gstring |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
152 [Gstring.new(self),b] |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
153 else |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
154 [(self*Gstring.new(' ')).to_s.compile,b] |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
155 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
156 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
157 |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
158 def leftparen |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
159 [factory(@val[1..-1]),@val[0]] |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
160 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
161 def rightparen |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
162 [factory(@val[0..-2]),@val[-1]] |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
163 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
164 def *(b) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
165 if b.class == Gint |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
166 factory(@val*b.val) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
167 else |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
168 return b*self if self.class == Gstring && b.class == Garray |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
169 return self/Gint.new(1)*b if self.class == Gstring |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
170 return b.factory([]) if @val.size<1 |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
171 r=@val.first |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
172 r,x=r.coerce(b) if r.class != b.class #for size 1 |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
173 @val[1..-1].each{|i|r=r+b+i} |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
174 r |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
175 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
176 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
177 def /(b) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
178 if b.class == Gint |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
179 r=[] |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
180 a = b.val < 0 ? @val.reverse : @val |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
181 i = -b = b.val.abs |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
182 r << factory(a[i,b]) while (i+=b)<a.size |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
183 Garray.new(r) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
184 else |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
185 r=[] |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
186 i=b.factory([]) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
187 j=0 |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
188 while j<@val.size |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
189 if @val[j,b.val.size]==b.val |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
190 r<<i |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
191 i=b.factory([]) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
192 j+=b.val.size |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
193 else |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
194 i.val<<@val[j] |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
195 j+=1 |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
196 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
197 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
198 r<<i |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
199 Garray.new(r) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
200 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
201 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
202 def %(b) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
203 if b.class == Gint |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
204 b=b.val |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
205 factory((0..(@val.size-1)/b.abs).inject([]){|s,i| |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
206 s<<@val[b < 0 ? i*b - 1 : i*b] |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
207 }) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
208 else |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
209 self/b-Garray.new([Garray.new([])]) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
210 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
211 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
212 def notop |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
213 Gint.new(@val.empty?) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
214 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
215 def question(b) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
216 Gint.new(@val.index(b)||-1) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
217 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
218 def equalop(b) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
219 if b.class == Gint |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
220 @val[b.val] |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
221 else |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
222 Gint.new(@val==b.val) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
223 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
224 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
225 def <(b) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
226 if b.class == Gint |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
227 factory(@val[0...b.val]) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
228 else |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
229 Gint.new(@val<b.val) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
230 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
231 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
232 def >(b) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
233 if b.class == Gint |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
234 factory(@val[[b.val,-@val.size].max..-1]) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
235 else |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
236 Gint.new(@val>b.val) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
237 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
238 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
239 def sort |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
240 factory(@val.sort) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
241 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
242 def zip |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
243 r=[] |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
244 @val.size.times{|x| |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
245 @val[x].val.size.times{|y| |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
246 (r[y]||=@val[0].factory([])).val<<@val[x].val[y] |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
247 } |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
248 } |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
249 Garray.new(r) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
250 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
251 def ~ |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
252 val |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
253 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
254 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
255 |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
256 class Gstring < Garray |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
257 def initialize(a) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
258 @val=case a |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
259 when NilClass then [] |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
260 when String then a.unpack('C*').map{|i|Gint.new(i)} |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
261 when Array then a |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
262 when Garray then a.flatten.val |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
263 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
264 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
265 def factory(a) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
266 Gstring.new(a) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
267 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
268 def to_gs |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
269 self |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
270 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
271 def ginspect |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
272 factory(to_s.inspect) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
273 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
274 def to_s |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
275 @val.pack('C*') |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
276 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
277 def class_id; 2; end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
278 def coerce(b) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
279 if b.class == Gblock |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
280 [to_s.compile,b] |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
281 else |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
282 b.coerce(self).reverse |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
283 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
284 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
285 def question(b) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
286 if b.class == Gstring |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
287 Gint.new(to_s.index(b.to_s)||-1) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
288 elsif b.class == Garray |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
289 b.question(self) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
290 else |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
291 Gint.new(@val.index(b)||-1) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
292 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
293 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
294 def ~ |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
295 to_s.compile.go |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
296 nil |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
297 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
298 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
299 |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
300 class Gblock < Garray |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
301 def initialize(_a,_b=nil) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
302 @val=Gstring.new(_b).val |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
303 @native = eval("lambda{#{_a}}") |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
304 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
305 def go |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
306 @native.call |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
307 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
308 def factory(b) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
309 Gstring.new(b).to_s.compile |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
310 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
311 def class_id; 3; end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
312 def to_gs |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
313 Gstring.new("{"+Gstring.new(@val).to_s+"}") |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
314 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
315 def ginspect |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
316 to_gs |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
317 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
318 def coerce(b) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
319 b.coerce(self).reverse |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
320 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
321 |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
322 def +(b) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
323 if b.class != self.class |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
324 a,b=coerce(b) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
325 a+b |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
326 else |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
327 Gstring.new(@val+Gstring.new(" ").val+b.val).to_s.compile |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
328 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
329 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
330 def *(b) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
331 if b.class == Gint |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
332 b.val.times{go} |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
333 else |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
334 gpush b.val.first |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
335 (b.val[1..-1]||[]).each{|i|$stack<<i; go} |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
336 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
337 nil |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
338 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
339 def /(b) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
340 if b.class==Garray||b.class==Gstring |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
341 b.val.each{|i|gpush i; go} |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
342 nil |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
343 else #unfold |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
344 r=[] |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
345 loop{ |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
346 $stack<<$stack.last |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
347 go |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
348 break if gpop.notop.val!=0; |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
349 r<<$stack.last |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
350 b.go |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
351 } |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
352 gpop |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
353 Garray.new(r) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
354 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
355 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
356 def %(b) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
357 r=[] |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
358 b.val.each{|i| |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
359 lb=$stack.size |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
360 $stack<<i; go |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
361 r.concat($stack.slice!(lb..$stack.size)) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
362 } |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
363 r=Garray.new(r) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
364 b.class == Gstring ? Gstring.new(r) : r |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
365 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
366 def ~ |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
367 go |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
368 nil |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
369 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
370 def sort |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
371 a=gpop |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
372 a.factory(a.val.sort_by{|i|gpush i; go; gpop}) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
373 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
374 def select(a) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
375 a.factory(a.val.select{|i|gpush i;go; gpop.notop.val==0}) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
376 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
377 def question(b) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
378 b.val.find{|i|gpush i; go; gpop.notop.val==0} |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
379 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
380 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
381 |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
382 class NilClass |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
383 def go |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
384 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
385 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
386 class Array |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
387 def ^(rhs) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
388 self-rhs|rhs-self |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
389 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
390 include Comparable |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
391 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
392 code=gets(nil)||'' |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
393 $_=$stdin.isatty ? '' : $stdin.read |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
394 $stack = [Gstring.new($_)] |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
395 $var_lookup={} |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
396 |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
397 def var(name,val=nil) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
398 eval"#{s="$_#{$var_lookup[name]||=$var_lookup.size}"}||=val" |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
399 s |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
400 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
401 |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
402 $nprocs=0 |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
403 |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
404 class String |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
405 def compile(tokens=scan(/[a-zA-Z_][a-zA-Z0-9_]*|'(?:\\.|[^'])*'?|"(?:\\.|[^"])*"?|-?[0-9]+|#[^\n\r]*|./m)) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
406 orig=tokens.dup |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
407 native="" |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
408 while t=tokens.slice!(0) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
409 native<<case t |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
410 when "{" then "$stack<<"+var("{#{$nprocs+=1}",compile(tokens)) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
411 when "}" then break |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
412 when ":" then var(tokens.slice!(0))+"=$stack.last" |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
413 when /^["']/ then var(t,Gstring.new(eval(t)))+".go" |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
414 when /^-?[0-9]+/ then var(t,Gint.new(t.to_i))+".go" |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
415 else; var(t)+".go" |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
416 end+"\n" |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
417 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
418 source=orig[0,orig.size-tokens.size-(t=="}"?1:0)]*"" |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
419 Gblock.new(native,source) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
420 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
421 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
422 def gpop |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
423 ($lb.size-1).downto(0){|i| |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
424 break if $lb[i]<$stack.size |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
425 $lb[i]-=1 |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
426 } |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
427 $stack.pop |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
428 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
429 def gpush a |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
430 $stack.push(*a) if a |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
431 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
432 |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
433 class String |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
434 def cc |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
435 Gblock.new(self) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
436 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
437 def cc1 |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
438 ('a=gpop;'+self).cc |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
439 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
440 def cc2 |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
441 ('b=gpop;a=gpop;'+self).cc |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
442 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
443 def cc3 |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
444 ('c=gpop;b=gpop;a=gpop;'+self).cc |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
445 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
446 def order |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
447 ('b=gpop;a=gpop;a,b=b,a if a.class_id<b.class_id;'+self).cc |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
448 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
449 end |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
450 |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
451 var'[','$lb<<$stack.size'.cc |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
452 var']','gpush Garray.new($stack.slice!(($lb.pop||0)..-1))'.cc |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
453 var'~','gpush ~a'.cc1 |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
454 var'`','gpush a.ginspect'.cc1 |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
455 var';',''.cc1 |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
456 var'.','$stack<<a<<a'.cc1 |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
457 var'\\','$stack<<b<<a'.cc2 |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
458 var'@','$stack<<b<<c<<a'.cc3 |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
459 var'+','gpush a+b'.cc2 |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
460 var'-','gpush a-b'.cc2 |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
461 var'|','gpush a|b'.cc2 |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
462 var'&','gpush a&b'.cc2 |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
463 var'^','gpush a^b'.cc2 |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
464 var'*','gpush a*b'.order |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
465 var'/','gpush a/b'.order |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
466 var'%','gpush a%b'.order |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
467 var'=','gpush a.equalop(b)'.order |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
468 var'<','gpush a<b'.order |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
469 var'>','gpush a>b'.order |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
470 var'!','gpush a.notop'.cc1 |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
471 var'?','gpush a.question(b)'.order |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
472 var'$','gpush (a.class==Gint ? $stack[~a.val] : a.sort)'.cc1 |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
473 var',','gpush case a |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
474 when Gint then Garray.new([*0...a.val].map{|i|Gint.new(i)}) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
475 when Gblock then a.select(gpop) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
476 when Garray then Gint.new(a.val.size) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
477 end'.cc1 |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
478 var')','gpush a.rightparen'.cc1 |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
479 var'(','gpush a.leftparen'.cc1 |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
480 |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
481 var'rand','gpush Gint.new(rand([1,a.val].max))'.cc1 |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
482 var'abs','gpush Gint.new(a.val.abs)'.cc1 |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
483 var'print','print a.to_gs'.cc1 |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
484 var'if',"#{var'!'}.go;(gpop.val==0?a:b).go".cc2 |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
485 var'do',"loop{a.go; #{var'!'}.go; break if gpop.val!=0}".cc1 |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
486 var'while',"loop{a.go; #{var'!'}.go; break if gpop.val!=0; b.go}".cc2 |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
487 var'until',"loop{a.go; #{var'!'}.go; break if gpop.val==0; b.go}".cc2 |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
488 var'zip','gpush a.zip'.cc1 |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
489 var'base','gpush b.base(a)'.cc2 |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
490 |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
491 '"\n":n; |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
492 {print n print}:puts; |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
493 {`puts}:p; |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
494 {1$if}:and; |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
495 {1$\if}:or; |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
496 {\!!{!}*}:xor; |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
497 '.compile.go |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
498 code.compile.go |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
499 gpush Garray.new($stack) |
dfd73e2917ba
<nooodl_> fetch http://www.golfscript.com/golfscript/golfscript.rb
HackBot
parents:
diff
changeset
|
500 'puts'.compile.go |