*
  Мысли   Галерея   Проекты   Тексты  
  Мысли   Галерея   Проекты   Тексты  
Giver: 99 бутылок  (2009-04-14 20:15:19)

Играли каналом в 99 бутылок пива по полному тексту, я писал сначала на схеме, затем на перле, резульатат на схеме — 404 байта, перл - 272. Scheme:

(let* ((& string-append)(b " bottle")(o " of beer")
(w " on the wall")(t ".nTake one down and pass it around, ")(m " more")(q(& b "s" o)))
(define (s . z)(map display z))(define (v n N g)(s t n g w ".nn" N g w ", " n g))
(define (f n e) (v n n q)(if (= n 2)(begin(v 1 1 (& b o))(v "no" "No" (& m q))
(s"nGo to the store and buy some" m ", 99" q w "."))
(f (- n 1) 's)))(s 99 q w ", " 99 q)(f 98 's) 0)

Perl:

$b=$q=" bottles of beer";$b=~tr/s//d;$w=" on the wall";
sub p{print @_}sub v{($n,$g)=@_;p
".nTake one down and pass it around, $n$g$w.nn".uc($n)."$g$w, $n$g"}
p "99$q$w, 99$q";v 98-$_,$q for 0..96;v 1,$b;v "n","o more$q";p
"nGo to the store and buy some more, 99$q$w."

Итого финишировал вторым. Первое место занял парень на dc с результатом 266 байт. Правда потом нашли соревнование взрослых дядь, но текст у них упрощен. Зато лучший результат 165 байт на перле, как и вся десятка лучших, кроме девятой позиции на PHP

UPD: После упорного колупания пёрла удалось вырваться на первое место со счетом 216, а "взрослые дяди", как оказалось, играют по сокращенному тексту, без последнего куплета. Вот что вышло после изменений:

print 99,$q=" bottles of beer",$w=" on the wall",$m=", 99$q",(map{/^1 /&&s/s//;$l=lc;".
Take one down and pass it around, $l$w.

$_$w, $l"}((map-$_.$q,-98..-1),"No more$q")),".
Go to the store and buy some more$m$w."

Попутно уловил баг перла — lc модифицировала $_ при обращении к ней, после пересборки перла баг исчез.


Имя:
Комментарий: