#Haskell, 298
Haskell, 298
main=interact g
g s|all(`elem`"HQ9+")s=s>>=(%s)|0<1="Source code contains invalid characters"
'H'%_="hello World!"
'Q'%s=s
'9'%_=drop 32$d 99
_%_=""
k=" bottles of beer on the wall"
d 0="No more"++k++"."
d n|a<-shows n k=[a,".\n\n",a,",\n",take 18a,".\ntake one down, pass it around\n",d$n-1]>>=id
this is quite straightforward. %
returns a command's output (given the source cod for use on Q
). d
returns the 99 bottles song with a junk line at the start for golfing reasons.
everything is wrapped in an interact (you might want to use g
instead of main
when testing)