2010-08-06 29 views
7

Đối với người lãnh đạo, Brainfuck là một ngôn ngữ Turing hoàn tất chỉ với 8 lệnh, tất cả đều có tương đương chữ trong C:cấu trúc thực hiện kiểm soát trong Brainfuck

bf c 
---------------------- 
>  ++ptr; 
<  --ptr; 
+  ++*ptr; 
-  --*ptr; 
.  putchar(*ptr); 
,  *ptr=getchar(); 
[  while (*ptr) { 
]  } 

Trên bất kỳ distro Linux mà có một bộ quản lý gói, bạn nên tìm và cài đặt gói beef, một thông dịch viên Brainfuck để bạn có thể chơi cùng ở nhà.

Như bạn thấy ở trên, Brainfuck có nhưng một cấu trúc điều khiển, […] mà dịch để C như:

while (*ptr) { … } 

nào cung cấp cho bạn tất cả sự kiểm soát của IF VAR = 0 THEN GOTO 10 từ BASIC. Sau đây sẽ gọi getchar() cho đến khi nó trả 0:

, # *ptr = getchar(); 
[ # while (*ptr) { 
    >, # *(++ptr) = getchar(); 
] # } 

Nhưng nếu tôi chỉ muốn đọc một char newline \n? Sau khi có một số khó khăn gói bộ não của tôi xung quanh như thế nào điều này có thể được điều chỉnh để làm việc như một đơn giản if tôi đã đưa ra như sau:

,   # *ptr = getchar();  /* store input        */ 
---------- # *ptr -= 10;   /* test for \n by subtracting 10 before loop */ 
[   # while (*ptr) {   /* if *ptr == 0, last char read was \n  */ 
    ++++++++++ # *ptr += 10;   /* wasn't \n, add 10 back to val under ptr */ 
    >,   # *(++ptr) = getchar(); 
    ---------- # *ptr -= 10; 
]   # } 

(Nếu ai có một cách tốt hơn để làm điều này, xin vui lòng cho tôi biết)

Bây giờ, hãy nói rằng tôi muốn thử nghiệm thoát khỏi vòng lặp đó trên \r ngoài \n. Làm thế nào tôi có thể thử nghiệm cho một trong hai, cho rằng tôi chỉ có một cơ hội để thoát ra khỏi vòng lặp? Mục tiêu của tôi là có thể mô phỏng switch, lồng nhau if s hoặc if/else if s.

+1

Có thể có _no_ câu hỏi nghiêm túc về một ngôn ngữ chết não như vậy. Trong thực tế, đó là những gì nó _should_ được gọi là: Braindead :-) – paxdiablo

+4

Bạn thưa bạn, là một người đàn ông dũng cảm. – Pierreten

+1

@SCMadsen Đây là "Hello World": '++++++++++ [> +++++++> ++++++++++> +++> + <<<<-]> ++. > +. +++++++ .. +++.> ++. << +++++++++++++++.>. +++ .------ . +>>.> – NullUserException

Trả lời

3

Tôi chưa xem liên kết, nhưng tôi cho rằng AShelly's answer có thể hữu ích hơn ... tuy nhiên, không dám để ngón tay của tôi loại bỏ một số Brainfuck trước đây, tôi đã quyết định tốt của một thời gian như bất kỳ và đã có thể có được những điều sau đây, mà tôi nghĩ rằng hoạt động.

Phần thứ hai chỉ để in những gì đã được phần đầu chụp. Ngoài ra, tôi sẽ không nói dối, bộ não của tôi thực sự cảm thấy hoàn toàn "fucked" sau khi đã cố gắng để làm việc này ra ... Một ngôn ngữ rất aptly đặt tên, heh.

+ 
[ 
    >, 
    ---------- 
    [ 
     --- 
     [ 
      +++++++++++++ 
      >> 
     ] 
    ] 

    < 
    [ 
     >> 
    ] 
    < 
] 

++++++++++++ 
[ 
    < 
] 

> 
[ 
    .> 
] 
+0

Cảm ơn ví dụ! –

3

Xem this page để biết mô tả cách bắt đầu với cấu trúc kiểm soát BF đơn và xác định chuỗi các chuỗi ngày càng phức tạp thể hiện các hoạt động phức tạp hơn.

4

Here những thuật toán để thực hiện hoạt động hợp lý nhưng phức tạp cơ bản cho não F * ck :)

Các vấn đề liên quan