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> beer bottles
of beer on the wall.<br /><br />
<span datafld="o"></span><span datafld="i"></span> beer bottles
of beer on the wall,
<span datafld="o"></span><span datafld="i"></span> 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> beer
bottle<span datafld="s"></span> of beer on the wall.<br /><br />
<span datafld="i"></span> beer
bottle<span datafld="s"></span> of beer on the wall,
<span datafld="i"></span> 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>
Небольшая опечатка: «записывать через проблемы», а не «через пробелы».
Комментарий для extremus.livejournal.com:
Спасибо, поправил.
Хм..
Макроязык фара. Просто запустить макрос в командной строке (требует плагин 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)
И конечно же я всё перепутал.. :-(
Вот более правильный вариант, поющий все строчки..
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)
Спасибо, но я выкладываю только то, чт онаписал сам :)
Я даже не подозревал, что у «Фара» есть такой богатый макроязык.
Комментарий для Евгения Степанищева:
Ну, значит не судьба ;)
Надо было сказать просто про возможность это сделать.
И да, он там достаточно богат. Некоторые вещи можно сделать на макросах, не вынося это в плагины.
Офигеть, надо глянуть :)
Вы в курсе, что есть такой сайт <a href=» http://99-bottles-of-beer.net/%22%3E99-bottles-of-beer%3C/a%3E, в котором приводится реализация на 1200 языках?
Комментарий для www.codeblogz.ru:
Даже когда я только-только это начал таких сайтов было множество. Те языки, на которых я песню не обнаружил, я и взял за основу. Подозреваю, что на том сайте есть и несколько моих текстов, я никогда не отслеживал их заимствование. Другое дело, что сам я ни у кого их не беру.