Это сайт — моя персональная записная книжка. Интересна мне, по большей части, история, своя жизнь и немного программирование.

99 бутылок: РАЯ, MS HTML

44. РАЯ (русский алгоримический язык). Язык, придуманный академиком Ершовым для обучения детей программированию. Все названия на русском языке, что, впрочем, совершенно не отвлекает. Для написания программы я использовал падучую реализацию языка с сайта «Инфомир».

Особо о языке сказать нечего, разве что понравились многословные имена переменных, процедур и функций (можно записывать через пробелы), показалось интересным наличие исполнителей (вроде известной «черепашки») и не понравилось отсутствие конкатенации строк и операции «неравно» (в документации я этого не нашёл).

| Написал Евгений Степанищев aka BOLK
алг
нач
    цел сколько пива

    нц для сколько пива от 99 до 1 шаг -1
        выводим пиво(сколько пива, " on the wall, ") 
        выводим пиво(сколько пива, ".")

        вывод нс, "Take one and pass it around,", нс
        выводим пиво(сколько пива, " on the wall.")
        вывод нс, нс
    кц

    вывод "No more bottles of beer:", нс
    вывод "Go to the store and buy some more:", нс
    вывод "99 bottles of beer." 
кон

алг выводим пиво(цел пива, лит окончание)
нач
    вывод число пива(пива), " bottle"
    если пива > 1 или пива=0
        то вывод "s"
    все
    вывод окончание
кон

алг лит число пива(цел пива)
нач
    если пива=0
        то знач:="No"
        иначе знач:=цел_в_лит(пива)
    все
кон


43. MS HTML. Конечно, HTML не является языком программирования. Но и на этом языке разметки, применяя особенности Internet Explorer, можно написать песню про пиво. Лишнюю строку пришлось «спрятать» за экран. Работает, естественно, только в Internet Explorer.

<!-- Written by Evgeny "BOLK" Stepanischev -->
<style type="text/css">
    .outer { position: absolute; top: -20px }
    body { background: white; margin: 0; padding: 10px }
    body, table { font-size: 11px; font-family: Tahoma }
    table, td, tr { margin: 0; padding: 0; border-collapse: collapse }
</style>

<body>
<xml id="dataOuter">
<row>
    <d><o>9</o></d>
    <d><o>8</o></d>
    <d><o>7</o></d>
    <d><o>6</o></d>
    <d><o>5</o></d>
    <d><o>4</o></d>
    <d><o>3</o></d>
    <d><o>2</o></d>
    <d><o>1</o></d>
</row>
</xml>

<xml id="dataInner">
<row>
    <d><i>9</i></d>
    <d><i>8</i></d>
    <d><i>7</i></d>
    <d><i>6</i></d>
    <d><i>5</i></d>
    <d><i>4</i></d>
    <d><i>3</i></d>
    <d><i>2</i></d>
    <d><i>1</i></d>
    <d><i>0</i></d>
</row>
</xml>

<xml id="dataInnerSingle">
<row>
    <d><i>9</i><s>s</s></d>
    <d><i>8</i><s>s</s></d>
    <d><i>7</i><s>s</s></d>
    <d><i>6</i><s>s</s></d>
    <d><i>5</i><s>s</s></d>
    <d><i>4</i><s>s</s></d>
    <d><i>3</i><s>s</s></d>
    <d><i>2</i><s>s</s></d>
    <d><i>1</i></d>
</row>
</xml>

<div class="outer">
<table datasrc="#dataOuter">
<tr>
<td>

<table datasrc="#dataInner">
<tr>
<td>
<span datafld="o"></span><span datafld="i"></span>&nbsp;beer bottles
of beer on the wall.<br /><br />
<span datafld="o"></span><span datafld="i"></span>&nbsp;beer bottles
of beer on the wall,
<span datafld="o"></span><span datafld="i"></span>&nbsp;bottles of beer.<br />
Take one and pass it around,<br />
</td>
</tr>
</table>

</td>
</tr>
</table>

<table datasrc="#dataInnerSingle">
<tr>
<td>
<span datafld="i"></span>&nbsp;beer
bottle<span datafld="s"></span> of beer on the wall.<br /><br />
<span datafld="i"></span>&nbsp;beer
bottle<span datafld="s"></span> of beer on the wall,
<span datafld="i"></span>&nbsp;bottle<span datafld="s"></span>
of beer.<br />
Take one and pass it around,<br />
</td>
</tr>
</table>

No beer bottle of beer on the wall.<br />
<br />
No more bottles of beer...<br />
Go to the store and buy some more...<br />
99 bottles of beer.
</div>
</body>
10 комментариев
extremus.livejournal.com 2008

Небольшая опечатка: «записывать через проблемы», а не «через пробелы».

Евгений Степанищев (bolknote.ru) 2008

Комментарий для extremus.livejournal.com:

Спасибо, поправил.

kildor (openid.yandex.ru/users/kildor) 2008

Хм..

Макроязык фара. Просто запустить макрос в командной строке (требует плагин FarCMD, и не скажу, будет ли работать в 1.70 релизе)

macro:post ShiftF4 $text «99 bottles of beer in the wall.txt» CtrlEnter
$if (Dialog)
CtrlEnter CtrlA CtrlD
$end
CtrlHome
$MMode 1
%b = 99;
%s = «s»;

$while(%b>0)
  $text %b
  $if (%b==1)
$text « bottles of beer on the wall.»
  $else
$text « bottles of beer on the wall.»
    $end
  Enter Enter
  %b=%b-1;
  sleep(10)
$end

msgbox(«No more bottles of beer on the wall.»,
«No more bottles of beer...\nGo to the store and buy some more...», 1)

kildor (openid.yandex.ru/users/kildor) 2008

И конечно же я всё перепутал.. :-(
Вот более правильный вариант, поющий все строчки..
macro:post ShiftF4 $text «99 bottles of beer in the wall.txt» CtrlEnter
$if (Dialog) CtrlEnter CtrlA CtrlD
$end
CtrlHome
$MMode 1
%b = 99;
%s = «s»;

$while(%b>0)
  $if (%b==1)
    %s=«»;
    $end
  %string = %b+» bottle«+%s+» of beer on the wall, «+%b+» bottle«+%s+ « of beer»;
  $text %string
  Enter
  $text «Take one and pass it around»
  Enter
  %b=%b-1;
  $if (%b!=0)
    %string= %b+» bottle«+%s+» of beer on the wall«;
    $text %string
    Enter Enter
    $end
  sleep(10)
  $end

msgbox(«No more bottles of beer on the wall.»,
«No more bottles of beer...\nGo to the store and buy some more...», 1)

Евгений Степанищев (bolknote.ru) 2008

Спасибо, но я выкладываю только то, чт онаписал сам :)

Евгений Степанищев (bolknote.ru) 2008

Я даже не подозревал, что у «Фара» есть такой богатый макроязык.

kildor (openid.yandex.ru/users/kildor) 2008

Комментарий для Евгения Степанищева:

Ну, значит не судьба ;)
Надо было сказать просто про возможность это сделать.

И да, он там достаточно богат. Некоторые вещи можно сделать на макросах, не вынося это в плагины.

Евгений Степанищев (bolknote.ru) 2008

Офигеть, надо глянуть :)

www.codeblogz.ru 2008

Вы в курсе, что есть такой сайт <a href=» http://99-bottles-of-beer.net/%22%3E99-bottles-of-beer%3C/a%3E​, в котором приводится реализация на 1200 языках?

Евгений Степанищев (bolknote.ru) 2008

Комментарий для www.codeblogz.ru:

Даже когда я только-только это начал таких сайтов было множество. Те языки, на которых я песню не обнаружил, я и взял за основу. Подозреваю, что на том сайте есть и несколько моих текстов, я никогда не отслеживал их заимствование. Другое дело, что сам я ни у кого их не беру.