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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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