Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 57 odgovora
  • 17.239 pregleda

Najnovija ↓

Re: Programski jezik Brainfuck 06.08.2004. u 22:50 · pre 270 meseci #41
Pa da, nemam ga, ali ja mislim da imam, zar to nije samo potvrda dijagnoze :).

Znas vec, uostalom zar si ocekivao da neko zdrav se pali ozbiljno na BF :).

Uostalom, za sve progarmerske pekmeze je programski jezik HQ9+ :).
Potpis
CHUPCKO
Re: Programski jezik Brainfuck 07.08.2004. u 21:45 · pre 270 meseci #42
e meni je ovaj bf bas zakon, samo sto od 4 kompajlera/interpretera sto sam koristio, nijedan ne podrzava ugnijezdjene (nested) [], sto onemogucava bilo kakvo ozbiljnije programiranje. chupcko, di si nasao svoj?

enivej, uspijeh napisati ove nebuloze:

hello world: ++++++++[>++++<-]>[>++>+<<-]>++++++++.>[<+>>+<-]<---.+++++++..+++.>>.<<++++++++.--------.+++.------.--------.>++++++++++.

string2lower(da, znam za "bug" i ne, necu ga ispraviti :) : +[>,----------]----------------------<[++++++++++<]>>[++++++++++++++++++++++++++++++++.>]

kako jezik ima jako sugavu redundanciju, predlazem sljedece kodiranje:
Code:

[    -    0
]    -    1
.    -    2
3    -    3
4    -    4
5    -    5
6    -    6
7    -    7
8    -    8
9    -    9
10    -    A
,    -    B
+    -    C
-    -    D
>    -    E
<    -    F

4+ bi bilo recimo ++++, 3> bi bilo >>> etc. 0, 1 i 2 ionako nemaju smisla. na kraju po dva znaka grupiramo u jedan hex bajt, pa se pocetni hello world smanji jedno 4 puta. a i lakse je citati, bar se ne mora brojati koliko se uzastopno elementi ponavljaju, a smisao jezika se ne gubi. slobodno me popljujte ako govorim gluposti, ali ja vec pisem interpreter u bashu, sljaka sve osim onih fakin [ i ]....mrmlj :-)
Re: Programski jezik Brainfuck 07.08.2004. u 22:18 · pre 270 meseci #43
Pa ja napisao svoj "kompajler"

Code:

#include <stdio.h>
#include <stdlib.h>

void error(void)
{
  fprintf(stderr,"Erorr []\n");
  exit(1);
}

void indent(int n)
{
  int i;
  for(i=0;i<=n;i++)
    printf("  ");
}

int main(void)
{
  int c;
  int l=0;
  puts
  (
    "#include <stdio.h>\n"
    "\n"
    "#define MAX 32767\n"
    "\n"
    "char a[MAX];\n"
    "int p=0;\n"
    "\n"
    "void debug(void)\n"
    "{\n"
    "  int i;\n"
    "  fprintf(stderr,\"# %d\",p);\n"
    "  for(i=(p-10<0?0:p-10);i<(p+10>MAX?MAX:p+10);i++)\n"
    "    fprintf(stderr,\" %d:%d\",i,a[i]);\n"
    "  fprintf(stderr,\"\\n\");\n"
    "}\n"
    "\n"
    "void put(char c)\n"
    "{\n"
    "  putchar(c);\n"
    "  fflush(NULL);\n"
    "}\n"
    "\n"
    "char get(void)\n"
    "{\n"
    "  int c;\n"
    "  if((c=getchar())==EOF)\n"
    "    c=0;\n"
    "  return (char)c;\n"
    "}\n"
    "\n"
    "int main(void)\n"
    "{"
  );
  while((c=getchar())!=EOF)
    switch((char)c)
    {
      case '<':
        indent(l);
        puts("p--;");
        break;
      case '>':
        indent(l);
        puts("p++;");
        break;
      case '-':
        indent(l);
        puts("a[p]--;");
        break;
      case '+':
        indent(l);
        puts("a[p]++;");
        break;
      case ',':
        indent(l);
        puts("a[p]=get();");
        break;
      case '.':
        indent(l);
        puts("put(a[p]);");
        break;
      case '[':
        indent(l);
        puts("while(a[p])");
        indent(l);
        puts("{");
        l++;
        break;
      case ']':
        l--;
        if(l<0)
          error();
        indent(l);
        puts("}");
        break;
      case '#':
        indent(l);
        puts("debug();");
        break;
      case '!':
      case ':':
      case ';':
        while((c=getchar())!=EOF && (char)c!='\n');
        break;
    }
  if(l!=0)
    error();
  puts
  (
    "  return 0;\n"
    "}"
  );
  return 0;
}


Sto se tice ekstenzija, mozes puno toga prosirit, ja sam dodao samo # koji radi ispis svih promenljivih.

E sada da li je pametno prosirivati ili ne ?
Potpis
CHUPCKO
Re: Programski jezik Brainfuck 09.08.2004. u 23:05 · pre 270 meseci #44
Urban Mueller je napravio brainfuck iz iskljucivog razloga da napravi kompajler za Amiga
OS 2.0 ispod 240 bajtova, a sto se se tice isljucivo te cinjenice, s obzirom da jezik ima
samo 8 instrukcija, pravi je luksuz koristiti ASCII kodiranje kad se ono moze napraviti u
svega 3 bita. to, naravno, u slucaju da je jezik napravljen u bf samom, ali svejedno me
nista ne sprecava da radim ovakve perverzije (nazvano brainfuck++ :) :
Code:


[22:15:18] pupoljak: ~ # cat sierp
EE8C0DF4CF4CEE1C4EC5F0D0DFA3ECFF1EE0DFFCEE1F0DECECEC3F1E0DFCE1E0EE0DECECFF1E07C0DF6CE1FDAD0DECCF1EA0D11E0DFCFCEE1CF0DEDF1E07C0DF4CE1FAA0D1E14FD0D3EC3F1E0D3EC3F1EE1E0FF0DFCFCEE1F0DE4ECF0DEDF1E0DFCE15F1F0DEECFF14ED0D3FC3E13F1F9CCA0D1FFCF1
[22:15:20] pupoljak: ~ # bfpp -t bfpp -f sierp
                               /\
                              /\/\
                             /\  /\
                            /\/\/\/\
                           /\      /\
                          /\/\    /\/\
                         /\  /\  /\  /\
                        /\/\/\/\/\/\/\/\
                       /\              /\
                      /\/\            /\/\
                     /\  /\          /\  /\
                    /\/\/\/\        /\/\/\/\
                   /\      /\      /\      /\
                  /\/\    /\/\    /\/\    /\/\
                 /\  /\  /\  /\  /\  /\  /\  /\
                /\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
               /\                              /\
              /\/\                            /\/\
             /\  /\                          /\  /\
            /\/\/\/\                        /\/\/\/\
           /\      /\                      /\      /\
          /\/\    /\/\                    /\/\    /\/\
         /\  /\  /\  /\                  /\  /\  /\  /\
        /\/\/\/\/\/\/\/\                /\/\/\/\/\/\/\/\
       /\              /\              /\              /\
      /\/\            /\/\            /\/\            /\/\
     /\  /\          /\  /\          /\  /\          /\  /\
    /\/\/\/\        /\/\/\/\        /\/\/\/\        /\/\/\/\
   /\      /\      /\      /\      /\      /\      /\      /\
  /\/\    /\/\    /\/\    /\/\    /\/\    /\/\    /\/\    /\/\
 /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\
/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
[22:19:10] pupoljak: ~ # bfpp -f sierp -o sierp.bfpp -x -t bfpp
[22:19:17] pupoljak: ~ # ll sierp
-rw-r--r--  1 root root 237 2004-08-09 01:52 sierp
[22:19:20] pupoljak: ~ # ll sierp.bfpp
-rw-r--r--  1 root root 118 2004-08-09 22:20 sierp.bfpp
[22:19:23] pupoljak: ~ # ll damn.b
-rw-r--r--  1 root root 296 2004-08-08 21:40 damn.b

Ovaj zadnji od 296 bajtova jest prva verzija bf trokuta sierpinskog koja se sa 296
bajtova smanjila u bfpp kodiranju na 118, sto tuce onu C verziju koja ima "samo" 133
bajta :) ona optimizirana bf verzija bi bila jos i manja (vjerojatno i ispod 100 bajtova),
ali nju mi se nije dalo transliterirat u bfpp kad ova vec radi. poanta: small is beautiful :)

skripta interpreter u bash-u je dodana kao privitak. ja sam gotov sa bf* do kraja svog mizernog zivota X-)
Re: Programski jezik Brainfuck 10.08.2004. u 10:02 · pre 270 meseci #45
Slatko :) moram priznati :). Doduse podseca me na moj prvi ioccc projekat, to je nasavrseniji kompresor na svetu. On naime sve datoteke bilo koje duzine (vece od 0) smanju za tacno 1 bajt :).
Sto je najbolje i dekompresor je radio.

Naravno u medjuvremenu imao sam i radnu verziju koja bilo koju datoteku skrati na jedan bit.
Doduse dekompresor nije bas zaziveo :(.

Uzgred kada bi koristili cisti 7bitni (ascii i jeste 7-bitni, zar ne) kod koji pakujemo u bajtove, dobili bi ustedu od otrpilike 1/8.

Dakle program od 133 karaktera je 133*7 bitova , sto kada popakujemo u bajtove dolazi:
133*7/8 = 116.375, dakle 117 sto je za jedan bajt krace od kompresovane verzije u brainfucku++ :).
Potpis
CHUPCKO
Re: Programski jezik Brainfuck 10.08.2004. u 11:24 · pre 270 meseci #46
Citat:
chupcko:
Doduse podseca me na moj prvi ioccc projekat, to je nasavrseniji kompresor na svetu. On naime sve datoteke bilo koje duzine (vece od 0) smanju za tacno 1 bajt :).
Sto je najbolje i dekompresor je radio.

Off-topic: zanimljivo deluje, možeš li mi poslati to?

P. S. Šta se dogodi ako skratiš za jedan bajt, pa onda skraćenu verziju još jednom, i tako više puta?
Potpis
Ljubičice crvena, što si plava kô zelena trava.
Re: Programski jezik Brainfuck 10.08.2004. u 11:39 · pre 270 meseci #47
Posto je nemoguce smanjiti sve datoteke za jedan bajt onda mi pada na pamet jedan trik kako to moze da se odradi. Mozemo da skinemo prvi ili poslednji bajt iz fajla i to ubacimo u ime fajla.
Re: Programski jezik Brainfuck 10.08.2004. u 11:42 · pre 270 meseci #48
Da srki, to je resenje :)
Doduse produzava se malo ime datoteke, ali nema veze, bitno je da radi :).

(ipak je to ioccc)
Potpis
CHUPCKO
Re: Programski jezik Brainfuck 10.08.2004. u 23:19 · pre 270 meseci #50
Kao prvo, kod je napisan iskljucivo konceptualno i kao vjezba, a ne da sad tu pametujem sto je manje a sto vece :) a, skracena bfpp verzija bi bila manja od skracene C verzije (uz pretpostavku da si ovu smanjio za 1/4 odnosno 25%, a ovu drugu za 5-6 karaktera... ergo, C sux :)

a ja jednom kad sam bio u krizi, tj. kad nisam imao pristup kompjuteru vise od 3 dana, sam razbijao glavu o kompresijskom engineu koji bi koristio neka svojstva kongruencija, stvaranja booleovih fja iz proizvoljnog niza bitova (dakle diskretnih stanja 0 i 1) i njihov minimalni zapis u nekoj od baza, dakle STVORI neku fju koja ce za (i=0; i<2^g(duljine ulaznog buffera)-1; i++) { f(binarni zapis od i) }. ideja nikad nije zazivjela jer bi mi za minimalizaciju fje za stream od 1K trebalo bar par eona...

ali uvijek me zanimalo, postoje algoritmi od par linija koda koji ispljuju pseudoslucajne brojeve vrlo velikog perioda, kako to da je nemoguce iz jednog velikog broja koji se moze prikazati kao niz "pseudoslucajnih" vrijednosti stvoriti algoritam od par linija koda koji ih generira? jesu li ti brojevi "slucajniji" od onih koji se mogu? kad umrem, mislim da cu pitati gaussa :-)
Re: Programski jezik Brainfuck 11.08.2004. u 09:02 · pre 270 meseci #51
Sala sala, ono oko duzine je sala a i lepo se podesilo da bude krace za jedan bajt :)))).

Pa da, generalno kompresor i jeste generisanje funckije koja racuna neki streem, e sada ako ne vraca original nego malkice modifikovaneo, eto mp3-a :).

Ali eto da ne skrenemo malo sa teme, mozda nije lose napisati brainfuck kompresor u brainfucku :).
Potpis
CHUPCKO
Re: Programski jezik Brainfuck 18.08.2004. u 15:38 · pre 270 meseci #52
Brainfuck nije los ali mislim da je programski jezik Whitespace jos bolji :)
Program napisan u Whitespace-u se sastoji samo od nevidljivih znakova (space, tab, newline).

Autori kazu da ovaj programski jezik ima neke prednosti u odnosu na druge jezike, kao npr. to sto je dobar za spijune. Kazu da je dovoljno za neki top secret program da ga odstampate i obrisete fajl, a nakon toga niko nece znati da je prazan list papira u stvari jako bitan program :)

http://compsoc.dur.ac.uk/whitespace/index.php
Re: Programski jezik Brainfuck 18.08.2004. u 17:55 · pre 270 meseci #53
Jao kako mocno. A najjaci je whitespace interpreter napisan u
whitespaceu. To ne mogu da razumem :)))
Re: Programski jezik Brainfuck 19.08.2004. u 03:20 · pre 270 meseci #54




Ovaj primer "Conway's Life"-a mi se jako svideo.
Prva slika predstavlja "šaru" koja se pretvara u Sierpinskijev trougao.

Odgovori
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme