Skip to content

Commit 7ccb56c

Browse files
authored
Add GolfScript (#687)
* Add GolfScript * Simplify Dockerfile * Bump version, copy to /usr/bin/golfscript * Flags for running GolfScript * I/O notices for GolfScript * CSS fixes * GolfScript code comes from argv * Update Dockerfile
1 parent 79e65f3 commit 7ccb56c

File tree

8 files changed

+104
-2
lines changed

8 files changed

+104
-2
lines changed

config/langs.toml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -373,6 +373,21 @@ func main() {
373373
}
374374
'''
375375

376+
[GolfScript]
377+
size = '24.2 MiB'
378+
version = '2206dbe'
379+
website = 'http://www.golfscript.com/golfscript/'
380+
example = '''
381+
# Printing
382+
"Hello, World!"puts
383+
384+
# Looping
385+
10,{p}/
386+
387+
# The stack is initialized with one element, an array of arguments:
388+
n*
389+
'''
390+
376391
[Haskell]
377392
size = '309 MiB'
378393
version = 'Glasgow Haskell Compiler 9.0.1'

css/golfer/holes.css

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ input.f-sharp:not(:checked) ~ .f-sharp,
6262
input.fish:not(:checked) ~ .fish,
6363
input.fortran:not(:checked) ~ .fortran,
6464
input.go:not(:checked) ~ .go,
65+
input.golfscript:not(:checked) ~ .golfscript,
6566
input.haskell:not(:checked) ~ .haskell,
6667
input.hexagony:not(:checked) ~ .hexagony,
6768
input.j:not(:checked) ~ .j,
@@ -111,7 +112,7 @@ main svg:nth-of-type(2) {
111112

112113
@media (min-width: 95rem) {
113114
/* Increase this number when adding a language. */
114-
main { grid-template-columns: 6fr repeat(40, 1fr) }
115+
main { grid-template-columns: 6fr repeat(41, 1fr) }
115116

116117
main a { height: 1.9rem }
117118

docker/dev.Dockerfile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ COPY --from=codegolf/lang-prolog ["/", "/langs/prolog/rootfs/" ] # 31.7 M
3131
COPY --from=codegolf/lang-pascal ["/", "/langs/pascal/rootfs/" ] # 31.3 MiB
3232
COPY --from=codegolf/lang-lisp ["/", "/langs/lisp/rootfs/" ] # 30.9 MiB
3333
COPY --from=codegolf/lang-ruby ["/", "/langs/ruby/rootfs/" ] # 24.2 MiB
34+
COPY --from=codegolf/lang-golfscript ["/", "/langs/golfscript/rootfs" ] # 24.2 MiB
3435
COPY --from=codegolf/lang-viml ["/", "/langs/viml/rootfs/" ] # 22.3 MiB
3536
COPY --from=codegolf/lang-javascript ["/", "/langs/javascript/rootfs/"] # 21.5 MiB
3637
COPY --from=codegolf/lang-nim ["/", "/langs/nim/rootfs/" ] # 13.5 MiB

docker/live.Dockerfile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ COPY --from=codegolf/lang-prolog ["/", "/langs/prolog/rootfs/" ] # 31.7 M
4444
COPY --from=codegolf/lang-pascal ["/", "/langs/pascal/rootfs/" ] # 31.3 MiB
4545
COPY --from=codegolf/lang-lisp ["/", "/langs/lisp/rootfs/" ] # 30.9 MiB
4646
COPY --from=codegolf/lang-ruby ["/", "/langs/ruby/rootfs/" ] # 24.2 MiB
47+
COPY --from=codegolf/lang-golfscript ["/", "/langs/golfscript/rootfs" ] # 24.2 MiB
4748
COPY --from=codegolf/lang-viml ["/", "/langs/viml/rootfs/" ] # 22.3 MiB
4849
COPY --from=codegolf/lang-javascript ["/", "/langs/javascript/rootfs/"] # 21.5 MiB
4950
COPY --from=codegolf/lang-nim ["/", "/langs/nim/rootfs/" ] # 13.5 MiB

hole/play.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,12 @@ func play(ctx context.Context, holeID, langID, code string, score *Scorecard) {
211211
cmd.Env = []string{"LANG=C.UTF-8", "PATH=/usr/local/bin:/usr/bin:/bin"}
212212
case "fish":
213213
cmd.Args = []string{"/usr/bin/fish", "--no-prng", "-c", code, "-u"}
214+
case "golfscript":
215+
cmd.Args = []string{"/usr/bin/golfscript", "-n", "-e", code}
216+
if holeID == "quine" {
217+
cmd.Args = append(cmd.Args, "-q")
218+
}
219+
cmd.Args = append(cmd.Args, "--")
214220
case "haskell", "php":
215221
cmd.Args = []string{"/usr/bin/" + langID, "--"}
216222
case "hexagony":
@@ -266,7 +272,7 @@ func play(ctx context.Context, holeID, langID, code string, score *Scorecard) {
266272

267273
// Code
268274
switch langID {
269-
case "brainfuck", "elixir", "fish", "javascript", "perl", "sed":
275+
case "brainfuck", "elixir", "fish", "golfscript", "javascript", "perl", "sed":
270276
// For these code is passed as an argument above.
271277
case "k":
272278
code = preprocessKCode(holeID, code)

langs/golfscript/Dockerfile

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
FROM alpine:3.16 as builder
2+
3+
RUN apk add --no-cache build-base curl openssl-dev
4+
5+
ENV VERSION=802e45e
6+
7+
RUN curl -L https://github.com/lynn/golfscript/tarball/$VERSION | tar xz \
8+
&& cd /lynn-golfscript-$VERSION && mv golfscript.rb /
9+
10+
FROM codegolf/lang-ruby
11+
12+
COPY --from=0 /golfscript.rb /usr/bin/golfscript
13+
14+
ENTRYPOINT ["golfscript"]
15+

svg/golfscript.svg

Lines changed: 53 additions & 0 deletions
Loading

views/hole.html

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,16 @@ <h1>
123123
Arguments are available via STDIN, each argument is NULL terminated.
124124
<b>x</b> is a no-op.
125125
</div>
126+
{{ if eq .Data.Hole.ID "quine" }}
127+
<div class="hide info golfscript">
128+
Implicit output is disabled for this hole.
129+
</div>
130+
{{ else }}
131+
<div class="hide info golfscript">
132+
The stack is initialized with an array containing arguments, rather
133+
than the contents of STDIN.
134+
</div>
135+
{{ end }}
126136
<div class="hide info hexagony">
127137
Arguments are available via STDIN, each argument is NULL terminated.
128138
</div>

0 commit comments

Comments
 (0)