LINUX.ORG.RU
ФорумTalks

Генератор баянов


0

0

Inspired by http://www.linux.org.ru/jump-message.jsp?msgid=2296592&cid=2296606
Так как бесконечный - не айс, набросал такую штуку http://pastebin.org/9461
Не очень красиво, без проверок и прочего говна, но работает =)
Предлагаю контест а-ла 99 бутылок пива - кто нарисует самую красивую
реализацию генератора баянов произвольной длины на любом языке +)

Ответ на: комментарий от CrazyPit

Гм... Красиво =) Надо все же конвертнуть книжку и начать читать...

rebarned
() автор топика

let bayan x | x == 0 = "[::]" | x > 0 = bayan (x - 1) ++ "|" | x < 0 = "|" ++ bayan (x + 1)

Использовать так: putStrLn bayan (-3) ++ bayan (3)

Это напечатает сбалансированный баян длины 3.

kmeaw ★★★
()
Ответ на: комментарий от kmeaw

---
#include <stdio.h>
#include <stdlib.h>
#define accn printf("[::]");

main(int argc, char **argv){
        if(argc < 2)return 1;
        int i = 0;
        accn
        while(i < atoi(argv[1])){
                putchar('|');
                i++;
        }
        accn
}
---

saahriktu ★★★★★
()

: norm  1 max 20 min ;
: [:]   "[:" swap 0 DO '|' s+ loop ":] \r" s+ sys. 100 sleep ;
: [:]>> norm 0 do i 1+ [:] loop ;
: [:]<< norm 0 swap do i [:] -1 +loop ;

: bayans  norm 0 do >r r@ [:]>> r@ [:]<< r> loop ;

10 3 bayans bye

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

где же приверженцы ООП-подхода к конструированию баянов? Нам нужно что-то типа:

Class Bayan implements Garmoshka { int numberOfKeysOnTheLeftSideBlack

....

deadman ★★
()
Ответ на: комментарий от deadman

Приверженцем ООП неявляюсь, но знаю его.
---
#include <iostream>
#include <stdlib.h>

class accordeon
{
        public:
        accordeon(int);
        void putitall();
        private:
        void putkeyz();
        void putharmonics();
        int hk;
};

accordeon::accordeon(int k)
{
        hk = k;
}

void accordeon::putkeyz()
{
        std::cout<<"[::]";
}

void accordeon::putharmonics()
{
        int i;
        while(i < hk){
                std::cout<<"|";
                i++;
        }

void accordeon::putitall()
{
        putkeyz();
        putharmonics();
        putkeyz();
}

main(int argc, char **argv){
        if(argc < 2)return 1;
        accordeon *garmoshka;
        garmoshka = new accordeon(atoi(argv[1]));
        garmoshka->putitall();
        delete garmoshka;
}
---

saahriktu ★★★★★
()
Ответ на: комментарий от saahriktu

при копипасте в методе putharmonics потерял завершающую '}' --- void accordeon::putharmonics() { int i; while(i < hk){ std::cout<<"|"; i++; } } ---

saahriktu ★★★★★
()
Ответ на: комментарий от deadman

>где же приверженцы ООП-подхода к конструированию баянов?

По хорошему тут надо ncurses уже юзать, но я на память методы оттуда
не помню, так что так :D

<?php

define('BAYANS', 20);
define('MAX_BAYAN', 50);
define('MIN_BAYAN', 10);

function cls() { array_map(create_function('$a', 'print chr($a);'), array(27, 91, 72, 27, 91, 50, 74)); } 

class bayan
{
	var $direction;
	var $size;
	var $max_size;
	
	function __construct()
	{
		$this->direction = rand(0, 1);
		$this->max_size = rand(MIN_BAYAN, MAX_BAYAN);
		$this->size = rand(1, $this->max_size);
	}
	
	function out() { echo "[:" . str_repeat("|", $this->size) . ":]\n\r"; }

	function back() { $this->direction = 1 - $this->direction; }

	function up()
	{
		$this->size++;
		$this->out();
		if($this->size >= $this->max_size)
			$this->back();
	}

	function down()
	{
		$this->size--;
		$this->out();
		if($this->size <= 1)
			$this->back();
	}

	function step() { $this->direction ? $this->up() : $this->down(); }
}

$bayans = array();
for($i=0; $i<BAYANS; $i++)
	$bayans[] = new bayan;
	
for(;;)
{
	cls();
	foreach($bayans as $bayan)
		$bayan->step();
	usleep(100000);
}

KRoN73 ★★★★★
()

Очень быстрый баян на Perl.

#!/usr/bin/perl 
$_ = "[::]\r"; $ind = sub {($c, $_) = @_; s/(\:\]) */\|$1/ if ($c < 0); s/(\|\:\])/\:\] / if ($c >= 0); $_}; while (1) {for ($c = -$ARGV[0]; ++$c < $ARGV[0]; $_ = $ind->($c, $_)) {print}};

jr_A
()
Ответ на: комментарий от anonymous

Рекомендую запустить под root - очень познавательно. В своё время было очень забавно наблюдать за этим тредом.

jr_A
()

:(){ :|:& };:

ну, почти боян ;)

beastie ★★★★★
()

веб-баян

<html>
<script>
run = function() {
document.getElementById("bayanbody").innerHTML += "|";
setTimeout('run()', 100);
}
</script>
<body onload="run()">
[::]<span id="bayanbody"></span>[::]
</body>
</html>

Deleted
()
Ответ на: комментарий от Deleted

#!/bin/bash
echo -ne '[::]'
count=10
sleep=$((1000000 / $count))
x=0
y=0
while : ;do
    if [ $y -eq 0 ] ;then
        echo -ne '\b\b|:]'
    else
        for((i=0;i<count-x+2;i++));do echo -ne '\b';done
        echo -ne ':]'
        for((i=0;i<count-x;i++));do echo -n ' ';done
    fi
    usleep $sleep
    if [ $x -eq $count ];then
        y=1
    fi
    [ $y -eq 0 ] && let "x++"     
    if [ $x -eq 0 ];then
        y=0
        for((i=0;i<count+1;i++));do echo -ne '\b';done
    fi

    [ $y -eq 1 ]  && let "x--"
done

TaranSergey
()

Интересно смотреть, как делится народ на тех, кто посмотрел исходную программу, чтобы понять задание и тех, кто просто рисует баяны :D

KRoN73 ★★★★★
()
Ответ на: комментарий от m57

($a,$b)=@ARGV;$c="[".":"x$b."]";print$c."|"x$a."$c\n";

$ perl bayan.pl 5 2
[::]|||||[::]
$ _

Teren
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.