Vượt qua kích thước cụm


37

Chán nản với độ tin cậy của bộ lưu trữ flash, bạn đã quyết định lưu trữ tất cả các chương trình của mình trên một trong những đĩa mềm 1.440 KiB cũ. Tuy nhiên, sau khi sao chép thậm chí không tới 3.000 chương trình, đĩa đã đầy. Làm thế nào mà thậm chí có thể? Có kỹ năng chơi golf mã như bạn, hầu hết các chương trình của bạn thậm chí không dài 100 byte, vì vậy sẽ còn rất nhiều chỗ ...

Sau khi hỏi về Super User, bạn phát hiện ra rằng bạn đã bị sai bởi kích thước cụm của hệ thống tệp , một âm mưu xấu xa của các nhà thiết kế của FAT12 khiến một phần đáng kể của đĩa mềm của bạn không được sử dụng và buộc bạn phải mua nhiều hơn bạn thực sự cần.

Mua thêm đĩa mềm? Không bao giờ! Kích thước cụm sẽ ít gặp sự cố hơn nếu chúng ta chỉ lưu nhiều chương trình trong một tệp, điều này có thể xảy ra vì các trình biên dịch / trình thông dịch khác nhau sẽ hoạt động khác nhau cho cùng một mã nguồn.

Bài tập

Viết một polyglot phù hợp trong một cụm đơn (512 byte trở xuống) và giải quyết càng nhiều tác vụ sau càng tốt.

  1. Đọc tất cả đầu vào và in nó.

  2. In Xin chào, Thế giới! .

  3. Đọc một dòng / đối số ( tên ) làm đầu vào và in Chúc mừng sinh nhật, [tên]! .

  4. Đọc tất cả các đầu vào và in Tôi yêu các tab! nếu nó chứa một hoặc nhiều bảng điều khiển (0x09) và tôi ghét khoảng trắng! nếu nó không

  5. Đọc hai dòng / đối số và in một giá trị trung thực nếu chuỗi thứ hai là chuỗi con của giá trị thứ nhất và giá trị giả nếu không.

  6. Đọc một dòng / đối số và in một giá trị trung thực nếu các ký tự của nó theo thứ tự tăng dần và giá trị giả nếu không.

  7. Đọc một dòng / đối số và một ký tự và in các chỉ mục của tất cả các lần xuất hiện của ký tự đó.

  8. Đọc một dòng / đối số và in bất kỳ ký tự nào có số lần xuất hiện cao nhất.

  1. Đọc hai số nguyên từ 0 đến 255 và in tổng của chúng.

  2. Đọc một số nguyên duy nhất trong khoảng từ 0 đến 255 và in thương số và phần dư của phép chia cho 7 .

  3. Đọc một số nguyên duy nhất trong khoảng từ 1 đến 255 và in một giá trị trung thực nếu đó là số tổng hợp (không phải 1 cũng không phải số nguyên tố) và giá trị giả nếu không.

  4. Đọc một số nguyên duy nhất trong khoảng từ 1 đến 255 và in một giá trị trung thực nếu nó là lũy thừa 2 và giá trị giả nếu không.

  5. Đọc hai số nguyên từ 0 đến 255 và in số nguyên lớn hơn.

  6. Đọc một số nguyên thập phân từ 0 đến 255 in đại diện thập lục phân của nó.

  7. Đọc một số nguyên duy nhất trong khoảng từ 0 đến 255 và in trọng số Hamming của nó (số lượng 1 bit).

  8. Đọc một số nguyên n duy nhất trong khoảng từ 1 đến 13 và in F n , số Fibonacci thứ n .

    Ví dụ, cho đầu vào 13, in 233.

  1. Đọc một dòng / đối số của đầu vào và đóng khung nó.

    Ví dụ: đối với đầu vào Programming Puzzles & Code Golf, in này:

    +---------------------------------+
    | Programming Puzzles & Code Golf |
    +---------------------------------+
    
  2. Đọc một khối ký tự hình chữ nhật và xoay nó một phần tư theo chiều kim đồng hồ.

    Ví dụ: cho đầu vào

    tye
    xll
    epb
    tma
     id
     sa
    s e
    i r
    hsn
    Tiu
    

    in cái này:

    This  text
    is  simply
    unreadable
    
  3. Đọc một số nguyên từ 1 đến 40 và in một viên kim cương có độ dài cạnh đó.

    Ví dụ: đối với đầu vào 3, in này:

      /\
     /  \
    /    \
    \    /
     \  /
      \/
    
  4. In này:

    ....@@@@....@@@@....@@@@....@@@@
    ....@@@@....@@@@....@@@@....@@@@
    ....@@@@....@@@@....@@@@....@@@@
    @@@@....@@@@....@@@@....@@@@....
    @@@@....@@@@....@@@@....@@@@....
    @@@@....@@@@....@@@@....@@@@....
    ....@@@@....@@@@....@@@@....@@@@
    ....@@@@....@@@@....@@@@....@@@@
    ....@@@@....@@@@....@@@@....@@@@
    @@@@....@@@@....@@@@....@@@@....
    @@@@....@@@@....@@@@....@@@@....
    @@@@....@@@@....@@@@....@@@@....
    ....@@@@....@@@@....@@@@....@@@@
    ....@@@@....@@@@....@@@@....@@@@
    ....@@@@....@@@@....@@@@....@@@@
    @@@@....@@@@....@@@@....@@@@....
    @@@@....@@@@....@@@@....@@@@....
    @@@@....@@@@....@@@@....@@@@....
    ....@@@@....@@@@....@@@@....@@@@
    ....@@@@....@@@@....@@@@....@@@@
    ....@@@@....@@@@....@@@@....@@@@
    @@@@....@@@@....@@@@....@@@@....
    @@@@....@@@@....@@@@....@@@@....
    @@@@....@@@@....@@@@....@@@@....
    

Chấm điểm

Câu trả lời quản lý để kết hợp số lượng chương trình cao nhất trong một tệp phù hợp với một cụm 512 byte đơn sẽ giành chiến thắng. Ties bị phá vỡ bởi số byte (thấp hơn là tốt hơn).

Quy tắc bổ sung

  • Đối với mỗi tác vụ bạn yêu cầu cho điểm của mình, cùng một tệp (byte trên byte) phải tạo thành một chương trình đầy đủ - theo ngôn ngữ bạn chọn - giải quyết nhiệm vụ cụ thể này.

  • Mỗi nhiệm vụ phải được giải quyết bằng một ngôn ngữ khác nhau.

    Ngôn ngữ được tính là khác nhau nếu chúng không phải là phiên bản khác nhau của cùng một ngôn ngữ. Ví dụ: chỉ có một JavaScript, một Python và một TI-BASIC, nhưng C, C ++, Octave và MATLAB là bốn ngôn ngữ khác nhau.

  • Ngôn ngữ được chọn cho mỗi tác vụ phải đáp ứng định nghĩa thông thường của chúng tôi về ngôn ngữ lập trình .

    Ngoài ra, ngôn ngữ phải được xuất bản và thực hiện trước ngày 9 tháng 9 năm 2015.

  • Trình biên dịch / trình thông dịch của bạn có thể không yêu cầu bất kỳ cờ không chuẩn nào để tạo ra hành vi dự kiến.

    Các ngoại lệ cho quy tắc này bao gồm các cờ cần thiết để chỉ định một ngôn ngữ cụ thể, để đọc chương trình từ một tệp (đơn) hoặc để chặn biểu ngữ.

  • Đầu vào cho mỗi tác vụ sẽ bao gồm các ký tự ASCII có thể in (0x20 đến 0x7E) và nguồn cấp dữ liệu (0x0A) và nó sẽ không vượt quá 255 byte.

  • Tất cả các số nguyên có thể được đọc ở dạng thập phân hoặc đơn nguyên, trừ khi có quy định khác trong tác vụ.

  • Hành vi cho đầu vào không hợp lệ là không xác định.

  • Bạn có thể đọc đầu vào từ STDIN (hoặc thay thế gần nhất của nó) hoặc dưới dạng đối số dòng lệnh.

    Nếu một tác vụ yêu cầu đọc hai phần đầu vào, bạn có thể đọc chúng - theo bất kỳ thứ tự nào - được phân tách bằng dấu phân cách một byte mà bạn chọn, dưới dạng đối số dòng lệnh riêng biệt hoặc một đối số từ STDIN và đối số khác là đối số dòng lệnh.

    Nếu một trong các phần đầu vào là một dòng, dấu phân cách duy nhất có thể là một nguồn cấp dữ liệu.

  • In đầu ra sang STDOUT (hoặc thay thế gần nhất). Tất cả đầu ra cho STDERR sẽ bị bỏ qua.

  • Đối với mỗi nhiệm vụ, áp dụng quy tắc tiêu chuẩn .

    Đặc biệt, điều này bao gồm các lỗ hổng bị cấm theo mặc định , ngoại trừ mã hóa cứng đầu ra , được phép rõ ràng cho thử thách này.


1
JavaScript và CoffeeScript có đủ khác nhau để được coi là các ngôn ngữ khác nhau không?
Hạ cấp

Vâng, những người được tính là khác nhau.
Dennis

17
thử thách số 4 của bạn là vô nghĩa> :(
Doorknob

Trích dẫn: Tất cả đầu ra cho STDERR sẽ bị bỏ qua. Điều này có nghĩa là khi chúng ta gọi tập lệnh / chương trình với 2>/dev/nullvà nhận đầu ra chính xác đến thiết bị xuất chuẩn, nó có ổn không? Chỉ để được chắc chắn.
Cabbie407

2
@ Cabbie407 Chính xác. Theo sự đồng thuận về meta , quy tắc này thực sự được áp dụng theo mặc định cho tất cả các thách thức. Tôi chỉ muốn chắc chắn rằng mọi người đều biết về nó.
Dennis

Câu trả lời:


17

12 ngôn ngữ, 418 byte

"1\"# &&+.@\""" "" "
#=
''''
<<s
""'("']0=~2base{+}*}
 ?
 :_7/!\_7%!@
"
R"Happy Birthday, "[?S"!"*"
>0[0>i:0(?v:{)?v0n;\!/
$'main';n1< .95<
 \@-[I love tabs!]o#
  \ >qi---@
( @-[ ]e<''';print hex(
input())#-[I hate spaces!]o#"]];ri:X{_~X+S*'/@S*_'\4$N}%_sW%1>"))?(!?)
'''=#print(([1 1;1 0]^int(readline()))[1,2])
#=
Tr is here.
>Tr, Hello, World!
>X Tr
s
l=gets
a='+-'+?-*~/$/+'-+'
puts a+'
| %s |
'%l+a#=#.91<0#'''#";

Đây là một thử thách thú vị. Thật khó để phù hợp với nhiều ngôn ngữ hơn, nhưng với nhiều byte còn lại, tôi có thể có thể làm thêm một ngôn ngữ nữa.

Làm cho việc sử dụng ngôn ngữ 2D một cách vô cớ. Lưu ý rằng các char trên giữa [ ]trên @-[ ]e<dòng là một tab. Ngoài ra, điều này đòi hỏi \nkết thúc dòng để TRANSCRIPT hoạt động.

Mở đầu (Nhiệm vụ 1 / Mèo)

( 
      )?(!?)

?(!?)chỉ là một bản dịch trực tiếp ,[.,]trong BF. Các ()vòng lặp mở đầu hoạt động giống như []các vòng lặp BF , vì vậy mọi thứ từ (cột ngoài cùng bên trái đến )trước khi chương trình cốt lõi không được thực hiện.

Các quy tắc cú pháp của khúc dạo đầu có nghĩa là các dấu ngoặc đơn cần được khớp (đọc từ trái sang phải theo cột) và chỉ có thể có một dấu ngoặc đơn trên mỗi cột. Ngoài ra, đó là một ngôn ngữ khá dễ dàng để phù hợp.

Đảm bảo NUMERIC_OUTPUTđược đặt thành Falsenếu bạn đang sử dụng trình thông dịch Python.

TRANSCRIPT (Nhiệm vụ 2 / Xin chào thế giới)

Tr is here.
>Tr, Hello, World!
>X Tr

TRANSCRIPT là một esolang theo chủ đề dựa trên tiểu thuyết tương tác. Các dòng không được nhận dạng bởi TRANSCRIPT được bỏ qua, làm cho nó dễ dàng phù hợp.

Tr is here.khai báo một Trbiến chuỗi và dòng thứ hai đặt nội dung của biến đó thành Hello, World!. X Tr( Xđể kiểm tra) sau đó xuất chuỗi.

Mặc dù TRANSCRIPT rất dễ phù hợp, nhưng đó là một ngôn ngữ dài dòng, vì vậy tôi đã thực hiện thử thách dễ dàng nhất.

Phân hạch (Nhiệm vụ 3 / Tin nhắn sinh nhật)

R"Happy Birthday, "[?S"!"*
                   \!/

trong đó in phần đầu tiên, đánh dấu đầu vào bằng một vòng 2D nhỏ, sau đó xuất ra dấu chấm than. Dấu Rhiệu cho thấy một nguyên tử bắt đầu từ đây di chuyển sang phải, điều này rất hữu ích vì chương trình này có thể được di chuyển xung quanh bất cứ nơi nào.

Đường sắt (Nhiệm vụ 4 / Tab)

$'main'
 \@-[I love tabs!]o#
  \ >qi---@
  @-[ ]e<
         -[I hate spaces!]o#

Giống như Phân hạch, Rail là ngôn ngữ 2D có lợi thế là có thể di chuyển khắp mọi nơi. Thực hiện bắt đầu từ $trong những mainchức năng, hướng đông nam.

Đầu tiên chúng ta đi xuống \s, rẽ trái tại -, nhấn [<tab>]mà đẩy một tab. e<sau đó các nhánh dựa trên EOF - nếu EOF, chúng ta đi xuống và in "I hate spaces!"trước khi tạm dừng, nếu không chúng ta sẽ đi lên. Nếu chúng ta đi lên trên, chúng ta đọc char tiếp theo và so sánh nó với tab, một lần nữa phân nhánh - nếu tab, hướng lên và in "I love tabs!"trước khi tạm dừng, khác đi xuống và tiếp tục vòng lặp đầu vào.

Chương trình này khá tốn kém, nhưng vì TRANSCRIPT đã tham gia Hello World, thật khó để chọn và nhiệm vụ phù hợp cho Rail.

> <> (Nhiệm vụ 6 / Tăng dần đầu vào)

"1\"#      \""" "" "


>0[0>i:0(?v:{)?v0n;
       ;n1< .95<


        .91<

In 1nếu tăng nghiêm ngặt, 0nếu không.

> <> là một ngôn ngữ 2D khác và việc thực thi bắt đầu từ trên cùng bên trái. "..."là chế độ chuỗi, đẩy từng ký tự bên trong một lần. Sau chuỗi đầu tiên chúng ta nhấn #, phản ánh IP bên trái, đẩy thêm chuỗi và quấn quanh (> <> là hình xuyến) trước khi đánh \, một chiếc gương phản chiếu chúng ta lên trên.

Ở dưới cùng của chương trình là .91<, dịch chuyển chúng ta đến (9, 1), nơi chương trình cốt lõi là. Sau khi 0[loại bỏ tất cả rác khỏi chuỗi, 0đẩy số 0 để biểu thị lần đọc char cuối cùng và sau đó, nó chỉ đọc từng ký tự một lần, đảm bảo chúng ta vẫn tăng dần.

Có lẽ tốt hơn là chuyển chương trình cốt lõi xuống thay vì dịch chuyển tức thời, nhưng tôi sẽ giải quyết nó sau nếu cần.

Befunge (Nhiệm vụ 9 / Bổ sung)

"1\"# &&+.@

Đã thử nghiệm với thông dịch viên được tìm thấy ở đây . Đây là một chương trình khá đơn giản, với việc bắt đầu đẩy một chuỗi vô dụng và #nhảy qua không gian. Sau đó, nó chỉ là chương trình cốt lõi &&+.@.

Mê cung (Nhiệm vụ 10 / Divmod by 7)

"1
 =
 '
 <
""'("']
 ?
 :_7/!\_7%!@

Thuận tiện, '"là NOP trong Labyrinth hoạt động như một con đường có thể đi bộ trong mê cung. Tôi sẽ bỏ qua điều hướng lộn xộn, nhưng về cơ bản, có rất nhiều bước ngoặt và đi loanh quanh diễn ra trước khi chúng tôi ?bắt đầu, đó là khởi đầu của chương trình cốt lõi.

Chương trình không hoàn toàn trái sang tài khoản cho Prelude (ví dụ: ?đọc đầu vào trong Prelude).

Python 2 (Nhiệm vụ 14 / Hệ thập lục phân)

"1\"# &&+.@\""" "" "
#=
''''
xxx
xxx''';print hex(
input())#xxx
'''
xxx
xxx'''#";

Các xxxđại diện cho các phần không liên quan được nhận xét bởi các chuỗi hoặc bình luận đa dòng. Ở giữa là print hex(input()), progam cốt lõi. Kết quả này dẫn đầu 0x, nhưng tôi cho rằng điều đó ổn (nếu không, thì dù sao nó cũng là một sửa chữa dễ dàng).

Dòng đầu tiên là một chuỗi "1\"# &&+.@\""theo sau bởi hai " "s. Ba chuỗi này được nối bởi trình phân tích cú pháp và không được sử dụng (dòng đầu tiên này hoạt động tương tự cho Ruby và Julia sau này).

GolfScript (Nhiệm vụ 15 / Trọng lượng Hamming)

"1\"# &&+.@\""" "" "
#=
''''
<<s
""'("']0=~2base{+}*}

Dòng đầu tiên đẩy ba chuỗi, và dòng thứ hai là một nhận xét. ''''đẩy thêm hai chuỗi, sau đó <<thực hiện hai so sánh ( sbị bỏ qua). Cuối cùng, ""'("'đẩy hai chuỗi khác.

Tất cả những thứ này là rác sau đó được loại bỏ bằng cách gói nó trong một mảng và lấy phần tử đầu tiên ( ]0=), là đầu vào ban đầu trên ngăn xếp. Sau đó, chúng tôi đánh giá đầu vào với ~, biến thành nhị phân với 2basesau đó tổng hợp các bit với {+}*. Phần tiếp theo }là vô song, và siêu bình luận phần còn lại của chương trình.

Julia (Nhiệm vụ 16, Fibonacci)

"1\"# &&+.@\""" "" "
#=
xxx
xxx=#print(([1 1;1 0]^int(readline()))[1,2])
#=
xxx
xxx=#.91<0#xxx

#=bắt đầu một bình luận đa dòng và =#kết thúc một bình luận đa dòng. Chương trình cốt lõi sử dụng phép lũy thừa ma trận để tính toán các số Fibonacci (lấy từ Rosetta ).

Ruby (khung Nhiệm vụ 17 / ASCII)

"1\"# &&+.@\""" "" "
#=
''''
<<s
xxx
s
l=gets
a='+-'+?-*~/$/+'-+'
puts a+'
| %s |
'%l+a#xxx

Chương trình này giả định rằng đầu vào không kết thúc bằng một dòng mới.

Chúng tôi có một chuỗi vô dụng, một bình luận, một chuỗi vô dụng khác sau đó là một di sản nhận xét hầu hết các chương trình. Sau đó là chương trình cốt lõi, theo sau là một dòng #bình luận.

CJam (Nhiệm vụ 19 / Kim cương)

"1\"# &&+.@\""" "" "
#=
''''
<<s
""'("xxx
"
R"xxx"[?S"!"*"
xxx
xxx"ri:X{_~X+S*'/@S*_'\4$N}%_sW%1>"xxx
xxx
xxx";

Hai chuỗi không gian ở cuối dòng đầu tiên là để thỏa mãn CJam, vì #=là hai toán tử nhị phân. Tôi sẽ không đi sâu vào chi tiết với cái này, nhưng về cơ bản thì nó là một mớ hỗn độn, với chương trình cốt lõi chỉ là

ri:X{_~X+S*'/@S*_'\4$N}%_sW%1>

ở giữa.

Sự khác biệt chính giữa GolfScript và CJam là, trong CJam, một trích dẫn duy nhất 'không bắt đầu và kết thúc chuỗi, mà thay vào đó đẩy nhân vật tiếp theo vào ngăn xếp. Điều này có nghĩa là ở CJam

'("'

đẩy a (sau đó bắt đầu một chuỗi bằng "(char đầu tiên là '), trong khi ở trên chỉ là một chuỗi đơn trong GolfScript.

Hãy thử trực tuyến . 1>được sử dụng thay vì (để tính đến Prelude.


Đây là 12 ngôn ngữ, 373 byte . Một số nhiệm vụ đã di chuyển xung quanh, TRANSCRIPT đã bị xóa (nó làm cho Rail quá đắt) và Scheme (gà) đã được thêm vào. Đây chỉ là sân chơi gôn của tôi để cập nhật kể từ khi cập nhật bài chính mất mãi mãi.

"1\"09!#.&&+.@"" "" "#|"
#=
''''
<<s
11]0=~2base{+}*}
 ?
 :_7/!\_7%!@
"
R"Happy Birthday, "[?S"!"*"
>0[0>i:0(?v:{)?v0n;\!/
$'main';n1< .95<
(-[Hello, World!]o#''';print(input()in input());'''"]];ri:X{_~X+S*'/@S*_'\4$N}%_sW%1>"=#print(([1 1;1 0]^int(readline()))[1,2])#=)?(!?)
s
l=gets
a='+-'+?-*~/$/+'-+'
puts a+'
| %s |
'%l+a# =##'''#";e# |#(print(format"~x"(eval(read))))

Tôi có thể lưu một vài byte cho Julia vì các bình luận đa dòng bị lỗi đã gây ra lỗi cho STDERR.


Công cụ tuyệt vời. Nhiệm vụ của TRANSCRIPT là gì?
Cabbie407

@ Cabbie407 Tôi vẫn đang cố gắng tối ưu hóa ngôn ngữ nào nhận nhiệm vụ nào, nhưng hiện tại TRANSCRIPT đã thực hiện Hello World và Rail đã thay đổi thành nhiệm vụ tab.
Sp3000

Ah, bây giờ tôi có thể thấy nó ;)đang chần chừ thay đổi bất cứ điều gì trong câu trả lời của tôi, vì mô tả dài. lol
Cabbie407

26

7 8 9 10 ngôn ngữ, 398 431 447 507 byte

Đây có lẽ là phù hợp nhất với giải pháp hiện tại.

#if      + 0+0/*^",v  +- '[.,][[" ,yadhtrib yppaH"l?!;offf4+ + +0.0 +aa<*/
a=0--0;b=input();print(sorted(set(b))==list(b));[[""""                 ^ <
print("Hello, World!")--[[vv? +<
#endif/*  >.!0 + +1ffr"!"~< */
#include<stdio.h>/*>:1 +?!^>i:1^*/
int main(){int a=1,b=1,c,i;scanf("%d",&i);if(1//**/1==2
){printf("%x",/*>&:7/.7%.@*/i);}else{for(;--i-1>0;a=b,b=c)c=a +b;printf("%d",b);}}/*]]--"""]];#@;_J + + \+*\-hhlz \+s[\|dzd\|)J "` + +,*.]]]*/SSSTNSSNSNSTNTTTTTSSSTNSNSTNTTTTTTSSTNTTSNSSNNSSSNTTTTNSTNNNN

Dòng cuối cùng chứa mã Whitespace được mã hóa để SE không ăn nó. Để chạy mã, thay thế tất cả Sbằng dấu cách, Tbằng các tab và Nbằng dòng mới.

C89, nhiệm vụ 16

Đây là những gì trình biên dịch nhìn thấy:

int main(){int a=1,b=1,c,i;scanf("%d",&i);if(1/ 1==2
){printf("%x",i);}else{for(;--i-1>0;a=b,b=c)c=a+b;printf("%d",b);}}

Tất cả mọi thứ khác được tước như bình luận hoặc bên trong #if 0.

C ++, nhiệm vụ 14

Tôi đã sử dụng một mẹo bị đánh cắp từ đây để phân biệt giữa C89 và C ++.

int main(){int a=1,b=1,c,i;scanf("%d",&i);if(1
){printf("%x",i);}else{for(;--i-1>0;a=b,b=c)c=a+b;printf("%d",b);}}

Lua, nhiệm vụ 2

Đây là cấu trúc cơ bản.

#comment
a=0--comment
print("Hello, World!")--[[
... multiline comment ...
]]--comment

Brainfuck, nhiệm vụ 1

Tôi chỉ phải đảm bảo không có vòng lặp vô hạn hoặc .,s đi lạc được tìm thấy. Bình luận đa dòng của Lua cũng tăng gấp đôi so với bình luận BF. Tất cả mọi thứ ngoài 2 ký tự đầu tiên là một vòng lặp NOP lớn.

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

Con trăn, nhiệm vụ 6

Một lần nữa, tôi đang sử dụng các tính năng dành riêng cho ngôn ngữ để NOP hoặc nhận xét mã khác.

#comment
a=0--0;b=input();print(sorted(b)==list(b));[["""
... multiline string ...
"""]];#comment

Pyth, nhiệm vụ 17

Pyth là tốt cho điều này. Nó mất đầu tiên #như một while True:vòng lặp thoát âm thầm do lỗi . Vì vậy, tôi chỉ tạo hầu hết mã thành một chuỗi (để tránh ;s kết thúc vòng lặp sớm), sau đó chỉ kết thúc vòng lặp, thoát một đoạn mã khác được tạo bởi nhận xét Python và thực hiện tác vụ. Đây là nó với tất cả các chuỗi không trống được thay thế bằng " string ", nó vẫn tương đương về chức năng:

#if      + 0+0/*^" string " ,yadhtrib yppaH" string """" string "Hello, World!" string "!"  string "%d"  string "%x" string "%d" string """]];#@;_J + + \+*\-hhlz \+s[\|dzd\|)J " string

> <>, nhiệm vụ 3

Điều này là rất thú vị. Việc thực thi nảy xung quanh trong mã, sử dụng các bước nhảy khi cần thiết để vượt qua các chướng ngại vật. Các phần có liên quan:

#                  v            " ,yadhtrib yppaH"l?!;offf4+ + +0.0 +aa<*/
                   i                                                   ^ <
                   !      vv? +<
          >.!0 + +1ffr"!"~<
                   >:1 +?!^>i:1^

Starry , nhiệm vụ 9

Ở đây tôi phải bắt đầu đi vào "loại bỏ tất cả các ký tự ngoại trừ" các ngôn ngữ. Bất cứ điều gì khác tước bỏ, nó trông giống như:

      + +*,  + '., , + + +. +*                  ,  +*  . + + *.* +*  ,,,,**,*..*, +,* + + +* + ` + +,*.*

Mã bỏ qua hầu hết các dấu câu với một bước nhảy để tránh một thời gian khó khăn, chỉ cần sử dụng bắt đầu và kết thúc mã. Mã này có chức năng tương đương với

      + +*,  + + +,*.*

Befunge-98, nhiệm vụ 10

Hoạt động tương tự như> <> một. May mắn thay, #là một tấm gương trong> <> và bỏ qua trong Befunge, vì vậy chúng ta có thể thực hiện các hành vi khác nhau. Ngoài ra, 0/0 == 0.

#if      + 0+0/*^
                >&:7/.7%.@

Khoảng trắng , nhiệm vụ 13

Đây là điều cuối cùng tôi phù hợp. Một vài dòng đầu tiên chỉ đẩy các số 0 lên ngăn xếp, vì chúng chỉ chứa khoảng trắng và dòng mới từ mã "bình thường". Mã được mã hóa; thay thế tất cả Sbằng không gian, Tbằng các tab và Nvới dòng mới.

SSSSSSSSSSSSSSSN
SSSSSSSSSSSSSSSSSSN
SSN
SSSSSN
SN
SSN
SSSSSSSSSSSTN
SSN
SN
STN
TTTTTSSSTN
SN
STN
TTTTTTSSTN
TTSN
SSN
N
SSSN
TTTTN
STN
N
N

9

17 phiên bản khác nhau của Pip, 383 byte (không hợp lệ)

Trong khi câu hỏi này được đặt trong hộp cát, tôi đã lướt qua tất cả các phiên bản của ngôn ngữ Pip của tôi và đưa ra một polyglot sử dụng 17 trong số chúng. Đáng buồn thay, các phiên bản của cùng một ngôn ngữ hiện không được phép bởi các quy tắc thách thức, nhưng với sự cho phép của Dennis và từ chối trách nhiệm tôi vẫn đăng tác phẩm của mình.

Mã thô

I!ga:0m@0:0v:uIN[(oTM0,0i)EN1N1Y1RCkw(hR`1.+0``&2o`)@>3@AB0`u`rZ4AB6({a}V7)BN8AZ9@m]Iv<2W##YqlPByc:((J['.'@]X4)X4RL3)Jnc.:n.RVcc:cRL4|0Iv=3{d:sXaRLaFj,ad@j@j:'\d:(RVdR'\'/).d|0dJ:n}m:'+.'-X#a+2.'+.n."| "Iv=5La{i+:oSio}j:ak:bPv=11?a>1&0INa%(2,a)[((J_M ZRVl)|0)Jnl?lJnlcJnd.n.RVdm.a.RVmih:$+TBa({j@aEQk}FI0,#a).saTB16a>b?abh=1ua//7.s.a%7a+bbINa"Happy Birthday, ".a.'!"Hello, World!"]@v

Chiến lược

Trong Pip, chữ thường là biến. Các chữ cái viết hoa phức tạp hơn: chúng được chia thành các lần chạy nhiều nhất là hai ký tự, có thể là toán tử hoặc biến. Nếu mã thông báo chữ hoa không được xác định cụ thể là biến hoặc toán tử, thì nó được coi là biến không xác định, ước tính là không.

Vì vậy, để phân biệt giữa hai phiên bản Pip, tôi chỉ cần tìm một số toán tử biến hoặc chữ cái được thêm vào trong phiên bản mới hơn của hai phiên bản. Trong cái cũ hơn, nó sẽ là con số không. Mã v:uIN[...]này tập hợp một danh sách lớn chứa một trong những kiểm tra này cho mỗi phiên bản tôi muốn kiểm tra, tìm ra có bao nhiêu nils trong danh sách đó ( ubiến được khởi tạo rõ ràng thành nil) và lưu số trong v(cho "phiên bản") .

Sau một số tính toán khác, có một danh sách lớn khác tính toán kết quả cho 17 nhiệm vụ từ thử thách và sử dụng vđể chọn một nhiệm vụ dựa trên phiên bản này.

Phiên bản và nhiệm vụ

0,15,09,04,04

Chẩn đoán: (oTM0,0i)(đã sửa một lỗi với toán tử Tri Mtrong đó việc cắt 0 ký tự từ mỗi đầu của chuỗi sẽ thay vào đó là chuỗi trống; lập chỉ mục thành chuỗi trống sẽ không

Nhiệm vụ 18: Iv<2W##YqlPBy(thiết lập: đọc tất cả các dòng từ stdin nếu vnhỏ hơn 2) theo sau ((J_M ZRVl)|0)Jn(danh sách ngược các dòng, hoán vị và nối lại thành chuỗi)

0,15,06,06

Chẩn đoán: EN1(thêm ENtoán tử umates)

Nhiệm vụ 1: Iv<2W##YqlPBy(mã thiết lập tương tự như trên) theo sau l?lJnl(tham gia vào dòng mới)

0,15,08,03

Chẩn đoán: 1N1(được thêm Ndưới dạng phiên bản ngắn của INtoán tử)

Nhiệm vụ 20: c:((J['.'@]X4)X4RL3)Jnc.:n.RVcc:cRL4|0(thiết lập: tạo danh sách chứa nửa trên và dưới của bàn cờ và lưu trữ c) theo sau cJn(tham gia vào dòng mới)

0,15,08,01

Chẩn đoán: Y1(thêm Ytoán tử mắt cá chân)

Nhiệm vụ 19: Iv=3{d:sXaRLaFj,ad@j@j:'\d:(RVdR'\'/).d|0dJ:n}(thiết lập: nếu vlà 3, tạo một nửa kim cương trên cùng d) theo sau d.n.RVd(đảo ngược cho nửa dưới và tham gia vào dòng mới)

0,15,06,19,19

Chẩn đoán: RCk(thêm toán tử Random Choice)

Nhiệm vụ 17: m:'+.'-X#a+2.'+.n."| "(thiết lập: xây dựng +----+\n| chuỗi trong m) theo sau m.a.RVm(bọc đầu vào mvà đảo ngược m)

0,15,06.12

Chẩn đoán: k( kbiến preinitialized thành ", "; trước đây nó không được xác định và do đó không)

Nhiệm vụ 16: Iv=5La{i+:oSio}(nếu vlà 5, tạo số Fibonacci trong i) theo sau lài

0.15,06,08 (lưu ý: số phiên bản không được thay đổi cho đến lần cam kết sau)

Chẩn đoán: w( wbiến preinitialized thành `\s+`)

Nhiệm vụ 15: h:$+TBa(chuyển đổi đầu vào thành chữ số nhị phân và tổng; lưu kết quả hcho nhiệm vụ 12 sau)

0,15,05,29

Chẩn đoán: (hR`1.+0``&2o`)@>3@AB0

Phiên bản này được thêm vào &dưới dạng mẫu thay thế cho toàn bộ chuỗi phù hợp trong thay thế regex (lấy cảm hứng từ sed). Đoạn mã trên lấy h( 100) và thay thế nó bằng `&2o`(tức là "1002o"trong các phiên bản mới hơn nhưng đơn giản là "&2o"trong các phiên bản cũ hơn). Sau đó, nó cắt tất cả các ký tự sau phần 3 ( "2o"trong các phiên bản mới hơn, ""trong các phiên bản cũ hơn) và cố gắng lập chỉ mục vào chuỗi đó. Lập chỉ mục thành một chuỗi trống cho nil.

Nhiệm vụ 7: j:ak:b(thiết lập: sao chép các vars cục bộ a, bsang các vars toàn cầu j, kdo đó chúng sẽ có sẵn bên trong một hàm) theo sau ({j@aEQk}FI0,#a).s(bộ lọc cho các chỉ mục trong ađó ký tự tương ứng bằng bvà tham gia vào không gian)

0,15,05,26

Chẩn đoán: `u`(đã thêm Kiểu mẫu; trong các phiên bản trước, backticks bị bỏ qua dưới dạng các ký tự không được nhận dạng và biểu thức ước tính u, không phải là số không)

Nhiệm vụ 14: aTB16(convert To Base 16)

0,15,05.24

Chẩn đoán: rZ4(đã tạo rbiến đặc biệt trả về giá trị ngẫu nhiên trong khoảng từ 0 đến 1 mỗi lần nó được tham chiếu; trước đó nó không được xác định và do đó biểu thức được ước tính là 0)

Nhiệm vụ 13: a>b?ab(biểu thức ternary)

0.15.05.12

Chẩn đoán: rZ4(thêm Ztoán tử ip)

Nhiệm vụ 12: h=1(tổng số bit từ nhiệm vụ 15 phải bằng 1)

0.15.05.11

Chẩn đoán: AB6(thêm ABtoán tử giá trị chất tan)

Nhiệm vụ 11: Pv=11?a>1&0INa%(2,a)[...]@v(nếu vlà 11, đầu ra 1nếu đầu vào lớn hơn 1 và một số nhỏ hơn sẽ chia chính xác, 0nếu không, nếu vcó gì khác, hãy sử dụng vlàm chỉ mục cho danh sách để quyết định đầu ra là gì)

0.15.05.02

Chẩn đoán: ({a}V7)(đã thêm Vtoán tử; khi Vkhông được xác định, điều này đã gửi đối số nil và 7 đến một hàm {a}trả về đối số đầu tiên của nó)

Nhiệm vụ 10: a//7.s.a%7(đầu vào được chia cho 7 và mod 7, được phân tách bằng dấu cách)

0,15.04,26

Chẩn đoán: BN8(thêm Bitwise Nhành egation)

Nhiệm vụ 9: a+b

0,15.04,23

Chẩn đoán: AZ( AZbiến preinitialized thành chữ cái viết hoa)

Nhiệm vụ 5: bINa( INđưa ra số lần xuất hiện)

0.15.04.20

Chẩn đoán: m@0:0theo sau là9@m

Các mbiến được preinitialized đến 1000. Trong này cam kết, các @nhà điều hành đã được cố định để trở lvalues; trước đây, phân công m@0đưa ra một cảnh báo và không làm gì cả. Do đó, post-bugfix, câu lệnh đầu tiên được đặt mthành 0000, là một chỉ mục hợp pháp cho 9; tiền sửa lỗi, mở lại 1000, đó không phải là một chỉ số hợp pháp. (Các chỉ số chưa theo chu kỳ.)

Nhiệm vụ 3: "Happy Birthday, ".a.'!

0,15.04,18

Tất cả các chẩn đoán trước đó dẫn đến một con số không được thêm vào danh sách chẩn đoán.

Nhiệm vụ 2: "Hello, World!"


Hầu hết các mã khác là các chỉnh sửa tôi phải thực hiện để tránh lỗi trong các phiên bản khác nhau. Bài đăng này đã quá dài, vì vậy nếu bạn muốn biết về bất cứ điều gì tôi chưa giải thích, hãy đưa cuộc thảo luận đến phòng chat ngôn ngữ bí truyền .


4

6 ngôn ngữ, 226 byte (229 tùy thuộc vào cách \x1bchấp nhận!)

/&&#[+.#]@>>+[>,]<[<]>>[.>]>\[/;//;#<?die("\x1bc".max($argv[1],$argv[2]));/*
$a=['Hello','World'];//;printf"%s, %s!
",$a[0]||'Happy Birthday',$a[1]||pop;#";$a="\
#";alert(prompt().match("\t")?"I hate tabs!":"I love spaces!");/\]/

Vì vậy, tôi không nghĩ rằng tôi đã lựa chọn ngôn ngữ tốt nhất và tôi tưởng tượng điều này không đặc biệt cạnh tranh nhưng dù sao tôi cũng thấy đây là một thử thách thú vị! Nhìn chung, không có nhiều thử thách hoàn thành, nhưng tôi có thể có thể đưa ra một thử thách trong khoảng trắng hoặc một cái gì đó tương tự, nhưng đây là những gì tôi có cho đến nay:


1. Brainfuck

[+.]>>+[>,]<[<]>>[.>]>[<.[],[][,],,[],[].]

Đã thử nghiệm trên http://copy.sh/brainfuck/http://brainfuck.tk/ .

Sau khi loại bỏ tất cả các ký tự bị bỏ qua, chương trình trên là tất cả những gì chúng ta còn lại, đây chỉ là chương trình mèo mẫu với một số vòng lặp trống bổ sung để bỏ qua các ngôn ngữ khác sử dụng các ký hiệu.

2. Ruby

/&&#[+.#]@>>+[>,]<[<]>>[.>]>\[/;//;
$a=['Hello','World'];//;printf"%s, %s!
",$a[0]||'Happy Birthday',$a[1]||pop;

Sử dụng:

ruby cluster

Trên đây là mã sau khi tất cả các ý kiến ​​được loại bỏ. Dòng đầu tiên là hoàn toàn vô dụng trong Ruby như chúng ta định nghĩa một số biểu thức thông thường để chứa mã Befunge-93 và Brainfuck, sau đó chúng ta tạo một mảng để chứa HelloWorldvà in nó sử dụng printf(để thêm ,!).

3. Perl

/&&#[+.#]@>>+[>,]<[<]>>[.>]>\[/;//;
$a=['Hello','World'];//;printf"%s, %s!
",$a[0]||'Happy Birthday',$a[1]||pop;

Sử dụng:

perl cluster <name>

Rất giống với Ruby, ngoại trừ việc chúng tôi đang lưu trữ một tham chiếu mảng $a, khi chúng tôi cố gắng truy cập $a[0]nó trống, vì vậy chúng tôi có thể thay thế nó bằng văn bản cho thử thách 3 Happy Birthdaypop(hiển thị đối số cuối cùng cho chương trình dòng lệnh ).

4. JavaScript

/&&#[+.#]@>>+[>,]<[<]>>[.>]>\[/;
$a=['Hello','World'];
",$a[0]||'Happy Birthday',$a[1]||pop;#";$a="\
#";alert(prompt().match("\t")?"I hate tabs!":"I love spaces!");/\]/

Cách sử dụng: dán vào bảng điều khiển trình duyệt và chạy.

Giống như Ruby và Perl, dòng đầu tiên về cơ bản tạo ra RegExpcác đối tượng vô dụng , sau đó chúng tôi lưu trữ một mảng vô dụng $avà khởi tạo hai chuỗi vô dụng, một chuỗi chứa mã Ruby / Perl và một chuỗi chứa một dòng mới và #sau đó chúng tôi prompt()cho đầu vào và alert()kết quả mong đợi bởi hầu hết con người cho thử thách 4. Chúng tôi kết thúc với một RegExpđối tượng vô dụng khác để thoát khỏi vòng lặp brainfuck.

9. Befunge-93

/&&#[+.#]@

Đã thử nghiệm trên http://www.quirkster.com/iano/js/befunge.html .

Theo tôi hiểu, /chia ngăn xếp và đẩy kết quả không có hiệu ứng xấu ngoại trừ việc đẩy NaNvào trang web trên, &yêu cầu nhập số nguyên để chúng tôi đọc cả hai số được yêu cầu bởi thử thách 9 trên ngăn xếp, #đảm bảo chúng tôi bỏ qua [có ở đó cho brainfuck, +sau đó thêm hai số trên cùng vào ngăn xếp, .xuất ra chúng, #]cho Brainfuck một lần nữa và @thoát.

13. PHP (chạy trong Bash)

/&&#[+.#]@>>+[>,]<[<]>>[.>]>\[/;//;#<?die("\x1bc".max($argv[1],$argv[2]));

Sử dụng:

php cluster <x> <y>

Trong PHP, bất cứ điều gì không có trong các <?thẻ đều là nguyên văn đầu ra, do đó, điều này xuất ra mã Befunge-93 và brainfuck để chúng tôi die()lập tức nhập mã, xuất ra một màn hình rõ ràng ( \x1bc) sau đó là max()hai đối số đầu tiên.


Bạn có thể đặt ký tự ESCape theo nghĩa đen trong chuỗi ký tự, chỉ cần thêm một ghi chú rằng nó có ( the first character in the first string literal is the byte ASCII 27); điểm số của bạn là 226.
con mèo

@cat Vâng, tôi nghĩ rằng bạn đúng, tôi đã rời khỏi hiện tại, nhưng tôi đã đặt 226 trong tiêu đề. Tôi đã quên mất mình đã tận hưởng thử thách này đến mức nào, có lẽ tôi có thể làm thêm một chút bây giờ và sử dụng ES6 tôi có thể có .match'\x09'(trong đó 'là `) có thể tôi sẽ xem liệu tôi có thể thêm nhiều hơn vào một lúc nào đó không!
Dom Hastings

4

6 ngôn ngữ, 450 404 byte

bash, brainfuck, C, gawk4, JavaScript và Minimal-2D

/*\t/#[R,+/D
/\t/ # UL.-L<script>var s=prompt().split(' ');alert(+s.pop()+ +s.pop())</script>
sed "s/^\(.*\)$/Happy Birthday, &!/;q"&&0
/\t/#*/
#define func
func main(){puts("Hello, World!");}
//{split($0,b,_);for(i in b)a[NR][i]=b[i++]}END{for(;j++<i;print"")for(k=NR;k;)printf a[k--][j]}
#//]++++++++[>+>+>++++++>++++++++<<<<-]>>++>--<<[>>>>>+++[<++++[<<....>....>-]<<<.>>>>-]<<<[>>+<<-]<[[>+<-]<]>>-]

Cập nhật: Đánh gôn xuống một chút. Vẫn không chắc chắn những gì khác để thêm và tôi không chắc các thành viên cạnh tranh sẽ nghĩ như thế nào về tôi khi sử dụng ngôn ngữ của họ cho các nhiệm vụ khác nhau. Cố gắng giải thích thuật toán brainfuck.

Vâng, đây là / là trải nghiệm polyglot đầu tiên của tôi, vì vậy tôi phải học mọi thứ từ đầu. Bắt đầu với awk không phải là ý tưởng thông minh nhất tôi nghĩ, bởi vì nó tương đối không tha thứ. Bởi vì số lượng nhiệm vụ hoàn thành có liên quan, tôi bắt đầu với những nhiệm vụ dễ nhất trước tiên. Không chắc đó là một bước đi thông minh. Đây không phải là quá nhiều golf, bởi vì tôi đã gặp khó khăn khi sáu người này làm việc cùng nhau, nhưng tôi đã làm những gì có thể để giữ cho nó ngắn.

Dưới đây là các ngôn ngữ và những gì họ làm theo thứ tự bảng chữ cái. Tôi sẽ chỉ ra một cách dễ dàng để kiểm tra tất cả chúng xuống. Bởi vì một số trong số này có thể là phiên bản cụ thể, tôi sẽ cung cấp cho bạn số phiên bản của các công cụ tôi đã sử dụng.

bash, nhiệm vụ 3

Vâng, rõ ràng là tôi đã sử dụng sed. Tôi đã cố gắng đưa một kịch bản sed vào đây bằng cách nào đó, nhưng tôi không thể làm cho nó hoạt động được, vì vậy tôi đã đi theo con đường bash. Cách tôi đưa nó, nó nằm trong một bình luận C và awk đánh giá nó False.

sed --version cho sed (GNU sed) 4.2.2

bash --version cho GNU bash, Version 4.3.30(1)-release (x86_64-pc-linux-gnu)

Vì vậy, phần sed đi xuống

sed "s/^\(.*\)$/Happy Birthday, &!/;q"

Nó nhóm đầu vào, dán nó vào một chuỗi mới và in kết quả. Những thứ khá phổ biến.

cân não, nhiệm vụ 20

Tôi đoán điều này luôn dễ dàng để che giấu. Một dòng bắt đầu bằng #//được bỏ qua bởi C và awk. Hoặc ít nhất họ có thể sống với rác rưởi đằng sau đó.

bf cho bf - a Brainfuck interpreter version 20041219

Đây là mã cô đọng. Dòng đầu tiên chỉ là rác từ các ngôn ngữ khác.

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

Tôi sẽ cố gắng giải thích nó hoạt động như thế nào

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

cái này sắp xếp băng và con trỏ đến cái này

0 8 10 46 64 C2 C1
  ^

ô giữ 8 là bộ đếm toàn cầu cho vòng lặp sau đây
là số lần 3 dòng giống nhau được in

[>>>>>+++

đặt C1thành 3, số dòng giống nhau

    [<++++

đặt C2thành 4, số " ....@@@@" trong một dòng (ở đầu)

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

in một dòng giảm hoàn toàn C2trong quy trình
khi C2bằng không, nó in một dòng mới và giảm dần C1.

nếu C1không thì phép màu xảy ra

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

46 được di chuyển phía sau 64
, 10 và bộ đếm toàn cầu được di chuyển sang phải

>>-]

sau đó bộ đếm toàn cầu bị giảm
nếu không có chương trình thoát

C, nhiệm vụ 2

Tôi làm cạn kiệt mọi khả năng nhỏ bé cuối cùng của C ở đây bằng cách in "Xin chào, Thế giới!". Chà, ai đó đã phải làm công việc ...

gcc --version cho gcc (Ubuntu 4.9.2-10ubuntu13) 4.9.2

Mã C thực tế

#define func
func main(){puts("Hello, World!");}
#

Đây #define funclà để làm cho awk ổn với điều này. Nó nghĩ rằng đây là một chức năng awk. Viết tắt cho func là một tính năng gawk.

gawk4, nhiệm vụ 18

Vì tôi đã sử dụng awk cho hầu hết mọi thứ ở đây, tôi quyết định rằng nó phải ở trong này.

awk --version cho GNU Awk 4.1.1, API: 1.1 (GNU MPFR 3.1.2-p11, GNU MP 6.0.0)

awk thấy điều này

/*\t/
/\t/
sed "s/^\(.*\)$/Happy Birthday, &!/;q"&&0
/\t/
func main(){puts("Hello, World!");}
//{split($0,b,_);for(i in b)a[NR][i]=b[i++]}END{for(;j++<i;print"")for(k=NR;k;)printf a[k--][j]}
#

Các mẫu tìm kiếm bao gồm \tđánh giá false. Tôi đã chọn tab ở đây, vì tôi nghĩ rằng nó không thể có trong đầu vào. sedđánh giá để false. "the string"&&0đánh giá thành sai. Chức năng ổn. Chương trình được thực thi nếu một mẫu trống được khớp, nó phù hợp với bất kỳ đầu vào nào.

Nó làm điều này

Đầu vào

cổ xưa
parli
ucfit
srigs

Đầu ra

ăn tối
RCal
ifra
ớt
stic

Bạn phải chắc chắn rằng tất cả các dòng đầu vào có cùng độ dài. Sử dụng không gian để điền vào chúng.

JavaScript, nhiệm vụ 9

Tôi không chắc điều này có hợp pháp không, vì điều này quá dễ dàng. Nếu bạn cung cấp cho tệp chương trình một kết thúc html và mở nó trong trình duyệt (tôi đã sử dụng Firefox 40.0.3 và chrome 45.0.2454,85), nó sẽ nhắc bạn nhập liệu. Bạn phải nhập hai số cách nhau bởi khoảng trắng và nó sẽ cảnh báo tổng của những số đó.

<script>var s=prompt().split(' ');alert(+s.pop()+ +s.pop())</script>

Tối thiểu 2D , nhiệm vụ 1

Điều này là khá dễ dàng để phù hợp với dòng bình luận. Tôi đã sử dụng trình thông dịch , người chạy trong python, để kiểm tra điều này. Nó in đầu vào cho đầu ra. Chương trình trông như thế này

R,+/D
UL.-L

RUDL là phải, lên, xuống và trái. Vì vậy, nó bắt đầu đi đúng, đọc một ký tự từ stdin vào bộ nhớ và thêm một. Dấu gạch chéo bỏ qua lệnh tiếp theo nếu bộ nhớ có giá trị 0. Điều này là để kết thúc điều này. Nếu một ký tự có giá trị -1 được đọc, đầu vào đã kết thúc. Vì vậy, nếu -1 được đọc, nó bỏ qua D và chấm dứt. Nếu một cái gì đó khác được đọc, nó đi xuống bên trái, thêm 1 trở lại bộ nhớ và in ký tự ra thiết bị xuất chuẩn. Sau đó, nó đi bên trái và lên và bắt đầu lại.

Kiểm tra

Tuyên bố miễn trừ trách nhiệm: Tôi sẽ không chịu trách nhiệm cho bất kỳ thiệt hại nào bạn gây ra cho hệ thống của mình với việc này.

Điều này giả sử bạn có bash & co, gawk (ít nhất là phiên bản 4, vì điều này sử dụng các mảng đa chiều), gcc, python, bf như một trình thông dịch Brainfuck và Firefox đã cài đặt.

Để làm cho nó dễ dàng, sao chép nguồn chương trình vào một tệp có tên cluster.html. Làm cho tập tin đó có thể thực thi được cho tác vụ bash. Sao chép và dán trình thông dịch cho Minimal-2d vào một tệp có tên minimal2D.pytrong cùng thư mục. Sau đó sao chép và dán đoạn script sau vào tệp script và đặt nó vào cùng thư mục, làm cho nó có thể thực thi được và chạy nó ... tốt, tôi đang nói chuyện với ai. Nếu bạn đọc nó, có lẽ bạn không cần nhiều lời giải thích và sẽ khiến nó chạy bằng cách nào đó.

#!/bin/bash
# Task  3: bash
echo "Dr. Hfuhruhurr" | ./cluster.html 2>/dev/null;echo
# Task 18: awk 
printf "elaic\nparli\nucfit\nsrigs\n" | awk -f cluster.html 2>/dev/null;echo
# Task  2: C
cp ./cluster.html ./cluster.c;gcc -w -o cluster cluster.c;./cluster;rm cluster cluster.c;echo
# Task  1: Minimal-2D
python minimal2D.py cluster.html <<<"This
has
to be
copied     !!!";echo
# Task 20: brainfuck
bf cluster.html;echo
# Task  9: JavaScript
firefox cluster.html 2>/dev/null
#google-chrome cluster.html 2>/dev/null

Trong đó bạn cũng tìm thấy lệnh để chạy các bài kiểm tra riêng lẻ.

Chúc vui vẻ!


Một trong những brainfuck có một vấn đề; mã có dấu ngoặc không cân bằng và sẽ không chạy chính xác (bạn phải chạy toàn bộ tệp, không chỉ phần có liên quan). Ngoài ra, hình vuông của bàn cờ thực sự là 4x3 thay vì 4 x 4 để trông vuông hơn trong văn bản.
PurkkaKoodari

Cảm ơn đã gợi ý. Vâng, nó chạy tốt ở đây. Tôi luôn chạy toàn bộ tập tin như bạn có thể thấy trong tập lệnh của mình. Không chắc chắn nếu thông dịch viên nên kiểm tra dấu ngoặc trước khi chạy. Của tôi không phiền. Nhưng tôi đã bỏ qua số dòng đó. Phải thay đổi điều đó.
Cabbie407

Vâng, tôi nhìn vào nó một lần nữa và tôi hy vọng tôi đã sửa nó.
Cabbie407
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.