Ẩn một lời chào Brainf *** trong mã khác


13

Mục tiêu là viết một chương trình (bất cứ thứ gì ngoại trừ bộ não rõ ràng) in ra quy tắc tốt nhất của Barney Stinson :

Mơi luôn luôn tôt hơn.

khi giải thích bình thường, nhưng

Legen ... chờ nó ... dary!

Khi được xử lý với một trình thông dịch Brainfuck.

Có thể các bro phổ biến nhất giành chiến thắng. Bạn có 72 giờ để trở thành huyền thoại.


Không chắc chắn code-golflà thẻ tốt nhất cho thử thách này. IMHO popularity-contestsẽ tốt hơn.
Florent

3
Barney của ai? Khủng long tím? BFF của Fred?

1
@LowerClassOverflowian Làm thế nào tôi gặp nhân vật Mẹ của bạn, xem chỉnh sửa
Thomas Ayoub

4
Ai đó có thể vui lòng tạo thẻ "bro-thi" không?
Pierre Arlaud

1
@Florent nếu thử thách được dự định giành chiến thắng bằng câu trả lời ngắn nhất, tôi không nghĩ bạn nên thử lại nó trong một cuộc thi phổ biến. Samoth, trong trường hợp bạn không biết, trong một cuộc thi về sự nổi tiếng, người chiến thắng được lựa chọn bởi cử tri - câu trả lời có tỷ lệ phiếu bầu cao nhất. Nếu bạn muốn cuộc thi của mình giành chiến thắng bằng câu trả lời với mã ngắn nhất, vui lòng thử lại câu hỏi của bạn dưới dạng golf-code và nếu bạn muốn nó là một cuộc thi phổ biến, vui lòng chỉnh sửa câu hỏi của bạn.
dùng12205

Câu trả lời:


11

C #

Vì vậy, tôi quyết định để có thêm một chút ... sáng tạo với mục nhập của tôi. Mã Brainfuck được nhúng vào C # dưới dạng các toán tử khác nhau (không phải trong các nhận xét hoặc trong các chuỗi được mã hóa cứng), trong khi mã C # hoạt động trên một hiệu trưởng tương tự như cách Brainfuck in các ký tự (có nghĩa là không có các chuỗi được mã hóa cứng và C # tạo ra mỗi chuỗi ký tự riêng lẻ dưới dạng một số nguyên sau đó chuyển nó thành char khi in).

Tôi chắc chắn rằng tôi có thể làm cho điều này thanh lịch hơn, nhưng tôi phải mất đủ thời gian để hoàn thành như vậy.

Mọi thứ đã được thử nghiệm trên trình thông dịch JavaScript Brainfuck này bởi Cal Henderson và với trình biên dịch C # của Visual Studo 2012 (nhắm vào .NET framework v4.0).

using System;

namespace Polyglot
{
    internal static class Program
    {
        private static void Main()
        {
            var a = new short[50];

            short _1 = 72;
            short _2 = 0;
            short _3 = 0;
            short _4 = 0;
            short _5 = 0;
            short _6 = 0;
            short _7 = 97;
            short _8 = 0;
            short _9 = 0;
            short _10 = 0;
            short _11 = 0;
            short _12 = 0;
            short _13 = 0;
            short _14 = 0;
            short _15 = 0;
            short _16 = 46;
            short _19 = 0;
            short _20 = 0;
            short _21 = 0;

            if( 0 >= 0 )
            {
                ++_1;
                ++_1;
                ++_1;
                ++_1;
            }

            a[ -1 < 0 ? 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 : 0 + 1 > 1 ? 0 : 0 ] = 9001;

            if( 7 < 42 )
            {
                ++_1;
                ++_1;
            }

            Console.Write( (char)_1 );

            _2 = 101;
            _1 += 1 + 1 + 1 + 1 + 1;

            _3 = 42 > 7 ? 110 + 9 : 1 + 1;

            a[ -1 < 0 ? 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 : 0 > 0 ? 0 : 0 ] = 9001;

            if( 1 < 2 )
                _4 = 32;

            Console.Write( (char)_2 );

            ++_1;
            _5 = 105;

            Console.Write( (char)_3 );

            --_1;

            _6 = 115;

            Console.Write( (char)_4 );

            ++_1;
            ++_1;
            ++_1;
            _1 += 1 + 1 + 5;

            Console.Write( (char)_5 );

            --_1;
            --_1;

            if( 42 > 41 )
            {
                ++_1;
                ++_1;
                ++_1;
            }

            a[ -1 < 0 ? 0 : 10 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 > 5 ? 0 : 0 ] = 9001;

            if( 42 < 9001 )
                Console.Write( (char)_6 );

            Console.Write( (char)_4 );
            Console.Write( (char)_7 );

            if( 12 > 11 && 11 > 10 )
            {
                _8 = 108;
                _9 = _3;
            }
            else
            {
                ++_1;
                ++_1;
                ++_1;
            }

            a[ -1 < 0 ? 1 + 1 + 1 + 1 + 1 + 1 : 1 > 2 ? 0 : 0 ] = 9001;

            if( _4 < _1 )
            {
                ++_1;
                Console.Write( (char)_8 );
            }
            else if( _4 > _19 && _2 > _20 )
            {
                ++_21;
                ++_21;
                ++_21;
                ++_21;
                ++_21;
                _21 += (short)( _21 + 36 );
            }

            a[ -7 < 9 ? 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 : 4 > 8 ? 9 : 9 ] = (short)( 12 < 10 ? -_4 : _9 );
            Console.Write( (char)_9 );

            if( _4 > _9 )
            {
                ++_1;
                ++_1;
                ++_1;
            }

            a[ -9 < 7 ? 10 - 1 - 1 - 1 - 1 : 6 > 7 ? 0 : 0 ] = _21;

            if( 1 < 0 )
                return;
            else
            {
                ++_1;
                Console.Write( (char)_7 );
            }

            _10 += 5 + 4 + 1 + 2 + 8 + 9 + 1 + 91;
            Console.Write( (char)_10 );

            if( 10 > _4 ) ++_21; else a[ -0 < 0 ? 5 + 6 + 1 + 2 + 3 + 9 : 1 > 2 ? 0 : 9 ] = 50;

            if( _21 <= _4 )
                _11 = 58 + 57;

            Console.Write( (char)_11 );

            if( _2 <= _8 )
                Console.Write( (char)_4 );
            else if( 1 >= 2 )
                return;
            else if( 42 >= _4 )
                _1 += ++_21;
            else
            {
                a[ -99 < --_1 ? --_1 - _1 : 44 > 12 ? 9 : 7 ] = (short)( _2 < _4 ? _21 : 6 );
                throw new Exception();
            }

            switch( _4 )
            {
                case 32:
                    var x = (char)( (short)( _4 + 66 ) );
                    Console.Write( x );
                    break;
                default: break;
            }

            _12 += (short)( ++_12 + ( ++_1 ) + 1 + 1 + 1 );
            Console.Write( (char)_12 );

            _13 += (short)( 39 + 38 + 39 );
            Console.Write( (char)_13 );

            if( _12 < _13 )
                Console.Write( (char)_13 );

            if( _13 >= _4 )
            {
                _14 = (short)( 500 - ( - ( 50 ) ) - ( --_1 ) - 90 - ( -4 ) - 267 );
                Console.Write( (char)_14 );
            }

            switch( _1 )
            {
                case 52:
                    _15 += (short)( ++_1 + ( ++_21 ) );
                    break;
                default:
                    _15 += (short)( 15 + ( ++_1 ) + 2 );
                    break;
            }

            Console.Write( (char)_15 );

            if( _16 <= 3521 && _21 < _4 )
                Console.WriteLine( (char)_16 );

            _16 = (short)( Int16.Parse( "54" ) % 2 );
            _20 = (short)( Int16.Parse( "99" ) / ( _1 > _4 ? 3 : 0 ) );
            _1 = (short)( 02.23 );

            if( _16 > 9 || _20 >= 52 )
                _1 += (short)( ( ++_1 ) + _21 );

            a[ -0 < 0 ? -52 - ( --_20 ) : 1 > 0 ? 1 : 2 ] = (short)( _12 < _19 ? Int16.Parse( "19" ) : 44 );
            _12 -= (short)f( --_19 / 19.467d );

            if( _12 > _14 )
                _19 += (short)( _19 + 1 + _3 + 5 );

            a[ -904 < 409 ? 4 + ( ++_4 ) + 4 : 49 > 50 ? 49 : 50 ] = (short)( 50 < 99 ? _4 + 669.2452 : 0 );

            if( 44 > ++_4 )
                a[ -9 < 6 ? 6 + ( ++_4 ) : 9 > 2 ? 44 : 8 ] = 3;
        }

        private static double f( double x )
        {
            return x < 12 ? x + 13.22 : x < 6 ? x + 90.45 : 5555; 
        }
    }
}

Đây là mã Brainfuck ban đầu tôi đã viết cho thử thách này:

> +++++ +++
[ - < +++++ ++++ > ]
< ++++ .
+++++
> ++
[ - < +++++ +++++ > ]
< . ++ . -- . +++++ ++++ .
----
> +++++ +
[ - < ----- ----- > ]
< ... >>
+++++ +
[ - < +++++ > ]
< ++ . >>
+++++ +++++ ++
[ - < +++++ +++++ > ] <
- . >
+++++ +
[ - < ---- > ] <
++ . +++++ +++ .
> ++
[ - < +++++ > ]
< + . < . >>
+++
[ - < ----- > ] <
+ . +++++ ++++ . +++ .
< . > ----- ---- . +++++ +++++ + .
<< ... > . >>
++++
[ - < ---- > ] < .
--- . >
++++
[ - < ++++ > ]
< + .
> ++
[ - < +++ > ]
< + . < + .

Khi chạy mã C # thông qua trình thông dịch Brainfuck, bạn kết thúc bằng các lệnh sau (chú ý thêm dấu ngoặc vuông ở đầu, chúng là từ khai báo mảng và không làm gì cả, vì ô bên dưới con trỏ bộ nhớ trong mảng sẽ là 0):

[] > +++++ +++
[ - < +++++ ++++ > ]
< ++++ .
+++++
> ++
[ - < +++++ +++++ > ]
< . ++ . -- . +++++ ++++ .
----
> +++++ +
[ - < ----- ----- > ]
< ... >>
+++++ +
[ - < +++++ > ]
< ++ . >>
+++++ +++++ ++
[ - < +++++ +++++ > ] <
- . >
+++++ +
[ - < ---- > ] <
++ . +++++ +++ .
> ++
[ - < +++++ > ]
< + . < . >>
+++
[ - < ----- > ] <
+ . +++++ ++++ . +++ .
< . > ----- ---- . +++++ +++++ + .
<< ... > . >>
++++
[ - < ---- > ] < .
--- . >
++++
[ - < ++++ > ]
< + .
> ++
[ - < +++ > ]
< + . < + .

6

Smalltalk

"adding adding all the time"
"1+1+1+1+1+1+1+1+1+1+1" "is not fine"
"more to come / going far" 
"+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1"
"all that work for a single char"

"happy me / a loop to start" 
"[>++>+++>++++>+++++<<<<-]"
"was it code or just a fart?"
"adding adding / thats not fine"
"+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1"

">>+" 'New is always better.' "shall I " print
">+.++.--.+++++++++.----------.<<----...<+++++++"
"the garbage here gives us no hint"
".>>+++++++++++.>---.++++++++" 

"hurray a change to stop the pain" 
".>---------.<<<<.>>" 
"the author now has in his brain"
"-----------------.>>-----.+++.<<<<.>>>.>++."
"We all agree the time is here"
"<<<...<.>>--.>--------.>--.+++++++.<<<<."
"to finish this and have a beer"

gõ vào một không gian làm việc và nhấn "doIt" hoặc gửi đến BF. BF bị đánh cắp từ các áp phích khác - cảm ơn.


4

Javascript / Brainfuck

Phiên bản Ungolfed vì đây không phải là một cuộc thi đánh gôn:

var outputString='';
'+++++++@++++[>++@/+@@>@/+@+@++>++++++@/+>+@++@/+@@+++++@/>@+@+++++@/+++@+<@/<<<<-]>>>@-.>++.+@/+@@.--.>.<-@/.@<@<++...<-.@/>>>>+++++@++++.<-@/-@-.@+@/+@+@+++++@/.>-@--@/.<<<<.>>>@---.>---@/-@@-@/.@+@++.<<<@/<@.@>>>+++@/.@@>@/+@+@.<<<@/...<@.>>>--@/---.---.>--.+++++++.<<<<+.<'
  .split('/')
  .forEach(function(e) {
    var matched=e.match(/[^@]*@/g);
    if (matched) {
      var asciiCode=0;
      for(var i=0;i<matched.length;i++) {
        asciiCode=matched[i-0].length-1+10*asciiCode;
      }
      outputString+=String.fromCharCode(asciiCode);
    }
  });
  alert(outputString);

Đó là dịp để tôi học BF và điều đó thật thú vị :)
Khó khăn là không bao giờ sử dụng ,như BF diễn giải nó như là đầu vào của người dùng và chắc chắn rằng byte là 0 trước khi sử dụng []để truy cập các phần tử của mảng.
Mã hóa JS khá đơn giản, mỗi chuỗi trước khi /mã hóa một ký tự và mỗi độ dài chuỗi trước khi @xác định mã ASCII theo số thập phân. ( +++++++@++++[>++@= 78= N)

Bạn có thể kiểm tra Brainfuck tại đây: http://copy.sh/brainfuck/


3

Cơ bản ( TIO ) / BF ( TIO )

+5+1/1+5+3@6:2/1+5+5+1@6+2@6:5/1+3@6:5+1/1+5+5+1@6:5+2/1+5+5+2@6:5/1+3@6:5+2/1+5+5@6:5+5+2@6:2/1+5+53[@6>:5+2/1+5+5@6>:4/1+5+5+3@6+>:5+2/1+55+2@6:5/1+3@6>:5+3/1+55@6>:2/1+551@6<<<<<-]>:5+3./1+552-@66>+.:2/1+5+51.@6--.>:5+1/1+5+5+2@6:1/1+5@6+++++.>----...>+++++++.<<+++++++++.<----.++++++++.>---.>>.<<<---.>-----.+++.>>.<<<+++.>++.>...>.<<<-----.---.>--.+++++++.>>+.

(Cập nhật ngày 8/4/17 để tính đến sự thay đổi ngôn ngữ trong Lập phương)

Về cơ bản, điều này chỉ sử dụng càng nhiều ký tự từ chương trình BF càng tốt trong chương trình Lập thể, sau đó dán phần còn lại của chương trình BF vào cuối chương trình. Không có sự chấm dứt bắt buộc với &/ Etrong chương trình Lập phương là cần thiết.


2

Python / BrainF ** k, 362 ký tự

Mã BrainF ** k được lấy từ câu trả lời đã bị xóa của Clément Renaud.

Chỉnh sửa - Ký tự null ban đầu không còn được in.

t='++++++++++_+++++++|^+++++++|+[>++>+++%>++++>+++++<<<<-||]+++++++++++|*+++++++++++++@+>>+.>+||.++.|--.+++++++++.--|^--------.<<----..._<+++++|++.>|>+++++&++++++.>---.+=+++++++|.>---------.<<^<<.>>--||-----|--~-----|---.>>-----~.+++.<<<<.>|>>.*>++.<<<...<.>>--._>|--------|.>-^-.+++++++.<<<<!!!'
print ''.join((chr(93+len(x))if x else' ')for x in t.split('|'))

Sử dụng một mẹo rất đơn giản - các |ký tự đã được thêm vào chương trình BF và khoảng cách giữa chúng mã hóa chuỗi được in bằng Python. Mã Python chủ yếu bị bỏ qua bởi BF.


Bạn có thể in '\ 0' ngay từ đầu không?
VX

@VX, có lẽ không phải vậy. Mã BF được sao chép và tôi nhận thấy rằng .joinđã thêm một ., nhưng không thấy bất kỳ tác hại nào (vì \0là vô hình). Các +là và .splitlà OK - Tôi đã gỡ bỏ các ký tự từ bản gốc.
ugoren
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.