⚠️ Warning: This is a draft ⚠️

This means it might contain formatting issues, incorrect code, conceptual problems, or other severe issues.

If you want to help to improve and eventually enable this page, please fork RosettaGit's repository and open a merge request on GitHub.

'''snusp.l'''

(load "@lib/simul.l")

(de snusp (L)
   (let
      (M (length (maxi length L))
         Grid (grid M (length L)) 
         L 
            (mapcar
               '((I) (need (- M) I " "))
               L ) )
      (println 'L L)
      (mapc
         '((G L)
            (mapc '((This Val) (=: V Val)) G L) )
         Grid
         (apply mapcar (reverse (mapcar chop L)) list) )
      
      # Debug
      #(disp Grid 0 '((This) (align 3 (: V))))         
      
      (let 
         (This
            (or
               (find
                  '((I) I)
                  (mapcar
                     '((I)
                        (find 
                           '((This) (= (: V) '$))
                           I ) )
                  Grid ) )   
               (last (car Grid)) )
            Dir 'east
            S NIL
            D (list 0)
            DH 1 
            DL 1 )
         
         (loop
            (case (: V)
               (>
                  (inc 'DH)
                  (when (> DH DL)
                     (setq D (insert DH D 0))
                     (inc 'DL) ) )
               (<
                  (dec 'DH)
                  (when (< DH 1)
                     (setq D (insert DH D 0))
                     (inc 'DL)
                     (one DH) ) )
               (+ (inc (nth D DH)))
               (- (dec (nth D DH)))
               (. (prin (char (get D DH))))
               (! (setq This (Dir This)))
               (?
                  (when (=0 (get D DH))
                     (setq This (Dir This)) ) )
               ("," (set (nth D DH) (char (key))))
               (@ (push 'S (list This Dir)))
               ("#"
                  (if (car S)
                     (prog1
                        (pop 'S)
                        (setq This (car @)  Dir (cadr @))
                        (setq This (Dir This)) )
                     (off This) ) )
               (/
                  (setq Dir
                     (case Dir
                        (east 'north)
                        (north 'east)
                        (west 'south)
                        (south 'west) ) ) )
               (\\
                  (setq Dir
                     (case Dir
                        (west 'north)
                        (north 'west)
                        (east 'south)
                        (south 'east) ) ) ) )
            (setq This (Dir This))
            (NIL This) ) ) ) )
            
(when (argv)
   (snusp
      (in (car (argv)) (split (till) "^J")) ) )
      
(bye)

'''99.snusp'''


   /=!/
### =====
!/==+++++++++#   +9
   |  |  /=!/=====@/==@@@+@+++++# +48 (itoa)
   |  |  |  |  /==!/==@@@@=++++#  +32 (space)
   |  |  |  |  |   \==@@++\!+++++++++++++\!+++++\ 
   9  9 '9''9' space     'b'            'o'    't'
   
 $@/>@/>@/>@/>@/>
### =====@/>============@/>=
@/>++++++++++     \n  setup
   /
### =================================loop==
>\!=>\!<<<<<<<< /
   \@\@\>cr.@\< ?\<->+++++++++>->+++++++++\       |   |
     ! |     |   \===-
### ==
>=>-==BCD==!\< @\< ?/< ?/# no more beer!
     /=|=====|
### ==========================
/
     | |     \<++t.<<----a.>----k.<++++e.<_.>>++++o.-n.< e.<_.>-d.>+o.>+++w.<-n.<<_.\ 
     | |     /                                                                      /
     | |     \>---a.>n.<+++d.<_.>>++p.<---a.>>----s.s.<<<_.>>-------i.>+t.<<<_.\ 
     | |     /                                                                 /
     | |     \>a.>>--r.<++++++o.>+++u.<-n.<+++d.>>>cr.<-T<+O<--B<<<#
     | !
     \@\<<<_.>>o.-n.<<_.>>>++t.<<+++h.---e.<_.>>>+++w.<<----a.>--l.l.>>CR.<---T<+++O<+B<<<#
       |
       \9.>9.>_.>B.>O.>T.t.<---l.<+++e.>>-s.<<<_.>>+++O.<+f.<_.>----b.+++e.E.>>-R.#

Usage:


mike@tron:~# pil ./snusp.l - 99.snusp +
99 bottles of beer on the wall
   <a lot of strings>
00 bottles of beer on the wall