What is This?

An AJAX service which runs a given script. The result is returned as JSONP.

http://api.dan.co.jp/lleval.cgi?c=callback&s=source

When l=language is ommited, #! is used.

JS code below illustrates how to use it.

(function(d){

LLEval = function(src, dst, ll){
    runJSON(ll || 'll', function(json){
        dst.innerHTML = '';
        dst.appendChild(json2dl(json));
    }, src.value, ll);
};
runJSON = function(name, func, src, ll){
    if (! this['JSONP']) JSONP = {};
    JSONP[name] = func;
    (function(uri){
        var s = d.createElement('script');
        s.charset = 'UTF-8';
        s.src = uri + '&s=' + encodeURIComponent(src);
        if (ll) s.src += '&l=' + encodeURIComponent(ll)
        s.id = s.src;
        d.body.appendChild(s);
    })('http://api.dan.co.jp/lleval.cgi?c=JSONP.' + name, src, ll);
};

var appendText = function(e, t){
    e.appendChild(d.createTextNode(t));
};

json2dl = function(json){
    var keys = [];
    for (var k in json) keys[keys.length] = k;
    keys.sort();
    var dl = d.createElement('dl');
    dl.style.width = '100%';
    for (var i = 0, l = keys.length; i < l; i++){
        var k = keys[i]; var v = json[k];
        var dt = d.createElement('dt');
        appendText(dt, k);
        dl.appendChild(dt);
        var dd = d.createElement('dd');
        appendText(dd, v);
        if (keys[i].match(/^std/)){
            dd.style.fontFamily = 'monospace';
            dd.style.whiteSpace = 'pre';
        }
        dl.appendChild(dd);
    }
    return dl;
};

})(document);

To get a list of languages suppoted, access

http://api.dan.co.jp/lleval.cgi?q=1
askLanguages = function(dst){
    if (! this['JSONP']) JSONP = {};
    JSONP['q'] = function(json){
        dst.innerHTML = '';
        dst.appendChild(json2dl(json));
    };
    (function(d, uri){
        var s = d.createElement('script');
        s.charset = 'UTF-8';
        s.src = uri + '&q=1';
        s.id = s.src;
        d.body.appendChild(s);
    })(document, 'http://api.dan.co.jp/lleval.cgi?c=JSONP.q');
};

Caveat

NO WARRANTY

Whatsoever.

Enjoy!

Dan the LL Monger

Note on specific languages

Perl 5

Best Supported. As a matter of fact this service is written in perl. Not only core modules but also popular modules like LWP are available

print $_ % 15
  ? $_ % 5
      ? $_ % 3
          ? $_
          : 'Fizz'
      : "Buzz"
  : q{FizzBuzz}, "\n"
  for ( 1 .. 30 );                                                              

Perl 6 (rakudo)

Very slow. So slow I gave two seconds.

[1..30].map({
    $_ % 15 ?? $_ % 5 ?? $_ % 3 ?? $_ !! 'Fizz' !! 'Buzz' !! 'FizzBuzz'
}).join("\n").say;

BASIC (bwbasic)

bwbasic does not support shebang but this service does (kinda).

10 FOR N=1 TO 30
20 LET F$ = ""
30 IF N MOD 3 = 0 THEN LET F$ = "Fizz"
40 IF N MOD 5 = 0 THEN LET F$ = F$ + "Buzz"
50 IF F$ = "" THEN LET F$ = N
60 PRINT F$
70 NEXT N
80 QUIT

Emacs Lisp

You need to specify #!/usr/bin/emacs --script if you want to use shebang.

(print (mapcar (lambda (num)
    (cond
     ((= (% num 15) 0) "FizzBuzz")
     ((= (% num  3) 0) "Fizz")
     ((= (% num  5) 0) "Buzz")
     (t num)))
  '( 1  2  3  4  5  6  7  8  9 10
    11 12 13 14 15 16 17 18 19 20
    21 22 23 24 25 26 27 28 29 30)))

Common Lisp (ecl)

You need to specify #!/usr/bin/ecl -shell if you want to use shebang.

(print (loop for i from 1 to 30
 collect
 (cond
  ((= 0 (mod i 15)) "FizzBuzz")
  ((= 0 (mod i 3)) "Fizz")
  ((= 0 (mod i 5)) "Buzz")
  (t i))))

Scheme (gauche)

(use srfi-1)
(for-each 
 print
 (map
  (lambda (x) 
    (cond 
     ((= (modulo x 15) 0) "FizzBuzz")
     ((= (modulo x 5) 0) "Buzz")
     ((= (modulo x 3) 0) "Fizz")
     (else x)))
  (iota 30 1)))

Haskell (runhugs)

main = mapM_ (putStrLn . fizzbuzz) [1..30]

fizzbuzz n
   = if or $ map (\s->length s /= 0) [fizz, buzz] 
        then fizz ++ buzz 
        else show n
     where fizz = if mod n 3 == 0 then "Fizz" else ""
           buzz = if mod n 5 == 0 then "Buzz" else ""

IO

Range
1 to(30) map(i,
  if(i % 15 == 0, "FizzBuzz",
    if(i % 3 == 0, "Fizz",
      if(i % 5 == 0, "Buzz",
        i)))) println

JavaScript (spidermonkey)

for (var i = 0; i <= 30; i++){
    print (
        i % 15
            ? i % 5
                ? i % 3
                    ? i : 'Fizz'
                : 'Buzz'
            : 'FizzBuzz'
    );
}

Lua

function fizzbuzz(n)
  if n % 15 == 0 then
    return "FizzBuzz"
  elseif n % 3 == 0 then
    return "Fizz"
  elseif n % 5 == 0 then
    return "Buzz"
  else
    return n
  end
end

for i=1,30 do
  print(fizzbuzz(i))
end

OCaml

let fizzbuzz n =
  let fizz = if n mod 3 == 0 then "Fizz" else "" in
  let buzz = if n mod 5 == 0 then "Buzz" else "" in
  if [] != List.filter (fun s -> String.length s != 0) [fizz;buzz]
     then fizz ^ buzz
     else string_of_int n

let puts s = print_string( s ^ "\n");;

for i = 1 to 30 do
  puts (fizzbuzz i)
done;;

PHP

<?php
  for ($i=1;  $i <= 30; $i++){
    echo $i % 15 ? 
      ( $i % 5 ? 
        ( $i % 3 ? $i : "Fizz" ) 
      : "Buzz")
    : "FizzBuzz";
    echo "\n";
  }
?>

Python

def fizzbuzz(n): 
    for i in range(1, n+1): 
        if   i % 15 == 0: yield 'FizzBuzz' 
        elif i %  5 == 0: yield 'Buzz' 
        elif i %  3 == 0: yield 'Fizz' 
        else:             yield i

for x in fizzbuzz(30): print x

Ruby

1.upto(30) do |i|
  s = [ [:Fizz][ i % 3 ], [:Buzz][ i % 5 ] ] * '';
  puts s[1] ? s : i
end

PostScript (ghostscript)

gs does not support shebang but this service does (kinda).

1 1 30 
{ dup 15 mod 0 eq {(FizzBuzz)}
{ dup 3 mod 0 eq {(Fizz)} 
{ dup 5 mod 0 eq {(Buzz)}
if} ifelse } ifelse = clear }
for 

Tcl

for {set i 1} {$i <= 30} {incr i} {
    if {![expr $i % 3] && ![expr $i % 5]} {
        puts "FizzBuzz"
    } elseif {![expr $i % 3]} {
        puts "Fizz"
    } elseif {![expr $i % 5]} {
        puts "Buzz"
    } else {
        puts $i
    }
}