Xây dựng ngôn ngữ chơi gôn với tôi


30

Rất nhiều người dùng PPCG đã giúp đỡ trong việc tạo ra thử thách này, cả trong trò chuyện và Sandbox, cụ thể là Martin Ender , admBorkBork , Emignauser202729

Cộng đồng của chúng tôi đã thấy cần thiết phải tạo ra một bộ ngôn ngữ được thiết kế dành riêng cho việc chơi gôn, "ngôn ngữ chơi gôn" như chúng tôi gọi. Những ngôn ngữ như vậy đã phát triển từ những GolfScript rực rỡ, giờ đây trở nên lộng lẫy cho đến những ngôn ngữ súc tích bóng bẩy như JellyHusk . Như chúng ta có thể thấy, các ngôn ngữ này liên tục ngày càng ngắn hơn cho một tập hợp các nhiệm vụ. Vì vậy, như các chuyên gia rõ ràng ở đây về các ngôn ngữ chơi gôn, chúng ta nên thiết kế một ngôn ngữ để đánh bại mọi ngôn ngữ khác dám cạnh tranh. Giới thiệu Bugle!

Bugle: Từ viết tắt BuGoL: Bu ilt Go lfing L anguage.

Thử thách này sẽ hoạt động như thế nào

Trong trường hợp bạn không hiểu những gì tôi muốn nói trong phần giới thiệu, thử thách này là một thử thách có , trong đó mỗi chúng ta đóng góp một điều gì đó cho người phiên dịch ngôn ngữ golf mới, cải thiện khả năng cạnh tranh trên PPCG với mỗi câu trả lời.

Tôi sẽ đăng câu trả lời đầu tiên bao gồm cơ sở của thông số / thông dịch ngôn ngữ và tất cả các câu trả lời khác sẽ tiếp tục từ đó. Bài dự thi mới sẽ cung cấp những điều sau:

  • Thay đổi thông số kỹ thuật của ngôn ngữ
  • Một thông dịch viên cập nhật, đáp ứng chính xác những gì được đưa ra trong các thay đổi
  • Điểm cập nhật của ngôn ngữ (chi tiết hơn một chút)

Bạn có thể thay đổi thông số theo một trong ba cách:

  • Bạn có thể thêm một lệnh
  • Bạn có thể thêm hai lệnh mới
  • Bạn có thể chỉnh sửa hành vi của một lệnh hiện có

Về trình thông dịch mới, bạn phải sử dụng phiên bản mới nhất, được viết bằng Python. Nó không phải chơi gôn. Mỗi lệnh được thêm trước đó phải có thể kiểm tra được với trình thông dịch mới nhất, cũng như (các) lệnh mới nhất (lệnh bạn thêm). Bạn cũng không được sử dụng ngôn ngữ gây khó chịu tại bất kỳ thời điểm nào khi cập nhật trình thông dịch, chẳng hạn như trong các bình luận hoặc chuỗi ký tự, v.v.

Các lệnh được thêm vào có thể làm bất cứ điều gì bạn muốn . Các yêu cầu duy nhất là:

  • Nó không tạo ra đầu ra tấn công
  • Nó không giống như một lệnh khác
  • Nó không ngăn cản một trong những thử thách mẫu được hoàn thành

Ngoài ra, nó có thể cụ thể hoặc chung chung như bạn muốn. Nó cũng có thể là bất kỳ nhân vật bạn muốn. Nếu bạn không chắc chắn nếu bổ sung của bạn tạo thành một 'lệnh mới', vui lòng hỏi trong các nhận xét.

Điểm số của ngôn ngữ

Bạn có thể nhận thấy rằng bạn phải bao gồm điểm của ngôn ngữ trong tất cả các bài nộp mới. Điểm số của nó là thứ ngăn cản thử thách này diễn ra mãi mãi và được định nghĩa như sau:

Điểm hiện tại là tổng số byte cần thiết để ngôn ngữ hoàn thành 20 nhiệm vụ dưới đây

Đối với mỗi tác vụ, quy tắc I / O tiêu chuẩn được áp dụng , cũng như các sơ hở tiêu chuẩn .

20 nhiệm vụ:

  1. "Chào thế giới!" - Xuất chuỗiHello, World!
  2. 1, 2, Fizz, 4, Buzz - Xuất ra mỗi số nguyên từ 1 đến 100 (đã bao gồm) trên một dòng riêng biệt, với bội số của 3 được thay thế bởi Fizz, bội số của 5 được thay thế bởi Buzzvà bội số của cả haiFizzBuzz
  3. Tạo số 2014 mà không có bất kỳ số nào trong mã nguồn của bạn - Xuất số 2014 mà không sử dụng bất kỳ ký tự nào 0123456789trong mã nguồn, mà không truy cập các biến ngoài hoặc hạt ngẫu nhiên
  4. Obfuscated Hello World - Output chuỗi Hello, World!, mà không sử dụng bất kỳ ký tự trong ít nhất hai trong số những bộ sau: hlwd, eor0127(case-insensitive)
  5. Hát chúc mừng sinh nhật bằng ngôn ngữ lập trình yêu thích của bạn - Trong ngôn ngữ bạn chọn, hãy xuất ra như sau:

    Happy Birthday to You
    Happy Birthday to You
    Happy Birthday Dear [the name of your favourite programming language]
    Happy Birthday to You
    
  6. Chúng ta không xa lạ gì với môn đánh gôn, bạn biết luật chơi, và tôi cũng vậy - Xuất ra lời bài hát đầy đủ của "Never Gonna Give You Up"

  7. Xuất ra dấu - Cho một số, in -1 nếu âm, 0 nếu là 0 hoặc 1 nếu là dương
  8. Phỏng đoán Collatz (OEIS A006577) - Bắt đầu từ một số nguyên, chia cho 2 nếu nó chẵn hoặc nhân nó với 3 và thêm 1 nếu là số lẻ và lặp lại quy trình cho đến khi bạn đạt 1. Đầu ra phải là số lần lặp đưa bạn đến 1.
  9. Mảng thách thức số 1: Mảng xen kẽ - Đưa ra một mảng các số nguyên, kiểm tra xem tất cả các mục có chỉ số chẵn có bằng nhau không, và tất cả các mục có chỉ số lẻ đều bằng nhau và đưa ra giá trị trung thực hoặc sai
  10. Tôi có phải là một mảng không đáng kể? - Cho một mảng các số nguyên, kiểm tra xem sự khác biệt tuyệt đối giữa các phần tử liên tiếp có nhỏ hơn hoặc bằng 1 hay không và đưa ra giá trị trung thực hoặc sai
  11. Con số này có phải là số nguyên tố không? - Cho một số nguyên dương, viết chương trình đầy đủ để kiểm tra xem đó có phải là số nguyên tố hay không và đưa ra giá trị trung thực hoặc sai lệch tương ứng
  12. Tôi là một palindrom. Bạn có phải? - Đưa ra một chuỗi, kiểm tra xem nó có phải là palindrom hay không, trong khi chương trình / hàm của bạn cũng là palindrom và xuất ra hai giá trị riêng biệt và nhất quán tương ứng
  13. Tính tổng các số theo tiêu chuẩn trong - Lấy một chuỗi các số từ STDIN và xuất tổng của chúng.
  14. Tìm nhân tố - Cho một số nguyên n, xuất sản phẩm của tất cả các số nguyên giữa 1nbao gồm.
  15. Mã ngắn nhất để tạo đầu ra vô hạn - Không có bất kỳ đầu vào nào, tạo ra đầu ra vô hạn, theo lý thuyết, sẽ không bao giờ ngừng xuất ra.
  16. Nướng một lát Pi - Xuất văn bản chính xác này:
()()()()()()
|\3.1415926|
|:\53589793|
\::\2384626|
 \::\433832|
  \::\79502|
   \::\8841|
    \::\971|
     \::\69|
      \::\3|
       \__\|
  1. Tìm số nhỏ nhất không chia N - Cho số nguyên dương N, xuất số nguyên dương nhỏ nhất không chia N.
  2. Đây là chẵn hay lẻ? - Cho một số nguyên N, xuất ra tính chẵn lẻ của nó dưới dạng giá trị trung thực / giả.
  3. Đầu ra có cùng độ dài với mã - Viết mã ngắn nhất có đầu ra có cùng độ dài với mã, trong đó đầu ra không giống với mã.
  4. Golf bạn một quine cho tốt tuyệt vời! - Viết đoạn trích ngắn nhất trong ngôn ngữ của bạn.

Để có hiệu lực, một bài nộp mới phải có bài nộp được đánh gôn cho ít nhất 2 trong số các vấn đề, ít nhất 1 byte cho mỗi bài. Bạn có thể tăng độ dài của các bài nộp khác, nhưng tổng số điểm phải giảm ít nhất 2 cho mỗi câu trả lời. Ngoài ra, vui lòng xem xét bao gồm một liên kết đến các chương trình cập nhật. Các giải pháp cập nhật không được hoạt động khi chạy với phiên bản trước của trình thông dịch.

Cách lấy bánh quy

Tôi có một danh sách 5 thử thách, không bắt buộc phải thử và không ảnh hưởng đến điểm số của bạn, nhưng chỉ đơn giản là những thử thách bổ sung để kiểm tra xem Bugle có đủ khả năng hay không. Vui lòng bao gồm một giải pháp cho bất kỳ số nào trong số này trong câu trả lời của bạn:

  1. Tạo một trình thông dịch tự
  2. Tạo một tải trọng có khả năng
  3. Covfefify một chuỗi
  4. Lập trình siêu tốc: N + N, N × N, N ^ N tất cả trong một
  5. "KNOT" hay "KHÔNG"?

Mô tả không được bao gồm vì chúng không bắt buộc mọi người phải có khả năng cạnh tranh trong thử thách.

Làm thế nào để chiến thắng

Khi điểm số tối thiểu ( chúng tôi tin là 16, mặc dù mọi nỗ lực để chơi golf được hoan nghênh nhiều) đã đạt được, rõ ràng chuỗi đã kết thúc vì các giải pháp không thể có điểm cao hơn. Khi 16 đã đạt được, thử thách vẫn tồn tại trong 1 tháng sau đó, để cho bất kỳ ai có cơ hội chơi golf các giải pháp nữa. Sau khi tháng này trôi qua, thử thách đã kết thúc.

Khi thử thách kết thúc, tôi sẽ chuyển trình thông dịch sang kho lưu trữ GitHub và trải qua các mưu mô thông thường là phát hành ngôn ngữ ổn định. Bạn cũng có thể bắt đầu đăng các giải pháp cho các thách thức trên PPCG tại thời điểm này, bằng cách sử dụng ngôn ngữ đã nói, nhưng vui lòng cố gắng không tràn ngập trang nhất với câu trả lời. Thay vào đó, hãy trải chúng ra trong một khoảng thời gian.

Định dạng

Để làm cho thông tin dễ tìm thấy hơn trong câu trả lời của bạn, vui lòng định dạng thông tin như sau:

# [N]. [Score]

[New command + description]

[Interpreter/link to interpreter]

[Link to programs]

[N]Số câu trả lời của bạn ở đâu (1 cho lần đầu tiên, 2 cho lần thứ hai, v.v.)

Quy tắc

  • Bạn phải đợi 3 giờ giữa khi đăng câu trả lời
  • Bạn không được đăng hai lần liên tiếp, trừ khi không có câu trả lời nào được đăng trong 10 ngày (chính xác là 240 giờ)
  • Bạn không thể loại bỏ các lệnh trước đó.
  • Trình thông dịch của bạn không cần phải chơi gôn và số byte của nó hoàn toàn không liên quan ở đây.
  • Nếu ai đó gợi ý một golf cho các chương trình trong khi câu trả lời của bạn là mới nhất, bạn phải chỉnh sửa trong các golf và cập nhật điểm số của mình.
    • Bạn cũng có thể làm điều này khi câu trả lời của bạn ở giữa chuỗi, miễn là điểm của bạn không trở nên thấp hơn bất kỳ câu trả lời nào sau đó.
  • Vui lòng không trả lời bất kỳ thử thách PPCG nào hiện có bằng ngôn ngữ này, ít nhất là cho đến khi thử thách kết thúc
  • Trình thông dịch được viết bằng Python 3 và nên tiếp tục theo cách đó trong toàn bộ chuỗi. Thay đổi ngôn ngữ bị cấm.
  • Một lần nữa, để có hiệu lực, một bài nộp mới phải có bài nộp được đánh gôn cho ít nhất 2 trong số các vấn đề, ít nhất 1 byte cho mỗi bài.

Băt đâu nao!



1
Cũng có thể hỏi: Bất cứ ai muốn giải thích downvote? Tôi đánh giá cao bất kỳ và tất cả thông tin phản hồi bạn muốn cung cấp.
caird coinheringaahing

2
@Kaldo Chúng tôi không chắc lắm. Quine phải có tối thiểu hai byte, nhưng nếu chương trình trống xuất ra Hello, World!thì đó là 19 byte. Nhưng nếu hành vi của chương trình trống thay đổi, phụ thuộc vào đầu vào, nó có thể bị giảm
caird coinheringaahing

1
@WeijunZhou "Xin vui lòng không trả lời bất kỳ thách thức PPCG nào hiện có bằng ngôn ngữ này, ít nhất là cho đến khi thử thách kết thúc"
caird coinheringaahing

1
@LyricLy Cấu trúc cú pháp (như forvòng lặp) được cho phép và được khuyến khích thêm vào
caird coinheringaahing

Câu trả lời:


3

3. Điểm: 2938 2583 2532 (-51)

Thông dịch viên mới ở đây .

Chủ yếu cho mục đích chơi golf và làm cho đầu ra dễ dàng hơn, tôi đã thêm khả năng nhân đôi stack / deque và cũng để xuất toàn bộ mô hình ở dạng văn bản được hiển thị thay vì dưới dạng số nguyên.

Các giải pháp

1. "Xin chào, thế giới!" - 17 byte (-3)

#"Hello, World!"a

5. Hát chúc mừng sinh nhật bằng ngôn ngữ lập trình yêu thích của bạn - 95 byte (-3)

#"Happy Birthday to You
Happy Birthday to You
Happy Birthday Dear Bugle
Happy Birthday to You"a

6. Chúng ta không xa lạ gì với việc chơi golf, bạn biết các quy tắc và tôi cũng vậy - 1884 byte (-3)

#"We're no strangers to love
You know the rules and so do I
A full commitment's what I'm thinking of
You wouldn't get this from any other guy
I just wanna tell you how I'm feeling
Gotta make you understand

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

We've known each other for so long
Your heart's been aching but
You're too shy to say it
Inside we both know what's been going on
We know the game and we're gonna play it
And if you ask me how I'm feeling
Don't tell me you're too blind to see

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

(Ooh, give you up)
(Ooh, give you up)
(Ooh)
Never gonna give, never gonna give
(Give you up)
(Ooh)
Never gonna give, never gonna give
(Give you up)

We've know each other for so long
Your heart's been aching but
You're too shy to say it
Inside we both know what's been going on
We know the game and we're gonna play it

I just wanna tell you how I'm feeling
Gotta make you understand

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you"a

16. Nướng một lát Pi - 149 byte (-3)

#"()()()()()()
|\3.1415926|
|:\53589793|
\::\2384626|
 \::\433832|
  \::\79502|
   \::\8841|
    \::\971|
     \::\69|
      \::\3|
       \__\|"a

20. Chơi golf cho bạn một câu hỏi hay! - 23 byte (-39)

$"R34RdR36Ra"R34RdR36Ra

Đã thêm tính năng ngôn ngữ

  • a

    • Tất cả: In toàn bộ mô hình dưới dạng văn bản, ví dụ như #"Hello, World!"ainHello, World!
  • d

    • Stack / Deque: Đẩy stack lên trên chính nó.

8

2. Điểm: 2938 2583

Trình thông dịch sửa đổi có ở đây trên TIO .

Chuỗi ký tự là sự bổ sung rõ ràng nhất cho ngôn ngữ, chủ yếu để chống lại thách thức .

Các giải pháp

1. "Xin chào, thế giới!" - 20 byte (-28)

#"Hello, World!"[o>]

Bất kỳ thử thách cũng có thể được hoàn thành bằng cách sử dụng cấu trúc #"<string>"[o>]tạo ra chuỗi đã cho cho đến 0 sau khi đạt được chuỗi.

2. 1, 2, Fizz, 4, Buzz - 419 64 byte (-1332)

$1[1+1s:3s%{}"zziF"oooos;0s]:5s%{}"zzuB"oooos;0s]s{:O}]10o:100-]

Cảm ơn @ user202729 vì đã chơi golf tuyệt vời về điều này.

3. Tạo số 2014 mà không có bất kỳ số nào trong mã nguồn của bạn - 9 byte (-4)

#"ĒĎ"[O>]

Sử dụng hai ký tự 20 và 14 trong bảng mã Bugle.

4. Thế giới Hello bị xáo trộn - 19 byte (-153)

#"Ifmmp!Xpsme"[-o>]

Đạt quy tắc số 1 (không HLWDhlwd) và số 3 (không27 ).

5. Hát chúc mừng sinh nhật bằng ngôn ngữ lập trình yêu thích của bạn - 98 byte (-230)

#"Happy Birthday to You
Happy Birthday to You
Happy Birthday Dear Bugle
Happy Birthday to You"[o>]

6. Chúng ta không xa lạ gì với việc chơi golf, bạn biết các quy tắc và tôi cũng vậy - 1887 byte (-5006)

#"We're no strangers to love
You know the rules and so do I
A full commitment's what I'm thinking of
You wouldn't get this from any other guy
I just wanna tell you how I'm feeling
Gotta make you understand

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

We've known each other for so long
Your heart's been aching but
You're too shy to say it
Inside we both know what's been going on
We know the game and we're gonna play it
And if you ask me how I'm feeling
Don't tell me you're too blind to see

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

(Ooh, give you up)
(Ooh, give you up)
(Ooh)
Never gonna give, never gonna give
(Give you up)
(Ooh)
Never gonna give, never gonna give
(Give you up)

We've know each other for so long
Your heart's been aching but
You're too shy to say it
Inside we both know what's been going on
We know the game and we're gonna play it

I just wanna tell you how I'm feeling
Gotta make you understand

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you"[o>]

16. Nướng một lát Pi - 149 byte (-290)

#"()()()()()()
|\3.1415926|
|:\53589793|
\::\2384626|
 \::\433832|
  \::\79502|
   \::\8841|
    \::\971|
     \::\69|
      \::\3|
       \__\|"[o>]

20. Chơi golf cho bạn một câu hỏi hay! - 62 byte (-12)

#"[>]<o-o+[<]>[o>]<-o;<[<]>[o>]#"[>]<o-o+[<]>[o>]<-o;<[<]>[o>]

Đã thêm tính năng ngôn ngữ

  • "...": Chuỗi chữ.
    • Stack / Deque: Đẩy các điểm mã Bugle của mỗi char lên trên cùng / phía trước stack / deque.
    • Băng / Lưới: Viết các mật mã Bugle của mỗi char lên băng / lưới bên phải, bắt đầu từ ô hiện tại. Không di chuyển con trỏ.
    • \n được xử lý giống như các ký tự khác.
    • Hiện tại không có ký tự thoát, vì vậy bạn không thể ghi "(34) vào bộ nhớ bằng lệnh này. Nó không phải là vấn đề quá lớn, ít nhất là bây giờ, vì tất cả các thách thức được liệt kê ở đây không có "trong đầu ra.

Bất kỳ hoạt động chơi gôn nào cũng luôn được chào đón, đặc biệt là "Không bao giờ từ bỏ bạn" và câu đố. Cụ thể, câu hỏi trên là câu hỏi không cần thiết đầu tiên tôi từng thực hiện, vì vậy tôi tin tưởng mạnh mẽ rằng ai đó có thể đưa ra một cái ngắn hơn.


Có những loại bổ sung mà tôi hy vọng mọi người khác làm, thay vì chỉ thêm các nội dung cho các thử thách cụ thể. +1
caird coinheringaahing

@ user202729 Có lẽ tôi là người đã giới thiệu lỗi này; cảm ơn vì đã sửa nó và giải pháp FizzBuzz.
Bong bóng

3

1. Điểm: 9638

Thông dịch viên cơ sở có thể được tìm thấy ở đây , và các bài nộp ở đây . Nó khá dài, vì vậy tôi đã đưa nó vào GitHub, thay vì chiếm hầu hết bài đăng.

Các giải pháp

Tất cả các giải pháp này là các chương trình Unicode, được chạy bằng -ucờ dòng lệnh, nhưng điểm số được tính như được mã hóa với trang mã của Bugle.

1. "Xin chào, thế giới!" - 48 byte

$72o101o108o108o111o44o32o87o111o114o108o100o33o

Đơn giản chỉ cần ấn sau đó xuất mã ký tự của từng ký tự trong chuỗi.

2. 1, 2, Fizz, 4, Buzz - 1396 byte

$49o10o50o10o70o105o122o122o10o52o10o66o117o122o122o10o70o105o122o122o10o55o10o56o10o70o105o122o122o10o66o117o122o122o10o49o49o10o70o105o122o122o10o49o51o10o49o52o10o70o105o122o122o66o117o122o122o10o49o54o10o49o55o10o70o105o122o122o10o49o57o10o66o117o122o122o10o70o105o122o122o10o50o50o10o50o51o10o70o105o122o122o10o66o117o122o122o10o50o54o10o70o105o122o122o10o50o56o10o50o57o10o70o105o122o122o66o117o122o122o10o51o49o10o51o50o10o70o105o122o122o10o51o52o10o66o117o122o122o10o70o105o122o122o10o51o55o10o51o56o10o70o105o122o122o10o66o117o122o122o10o52o49o10o70o105o122o122o10o52o51o10o52o52o10o70o105o122o122o66o117o122o122o10o52o54o10o52o55o10o70o105o122o122o10o52o57o10o66o117o122o122o10o70o105o122o122o10o53o50o10o53o51o10o70o105o122o122o10o66o117o122o122o10o53o54o10o70o105o122o122o10o53o56o10o53o57o10o70o105o122o122o66o117o122o122o10o54o49o10o54o50o10o70o105o122o122o10o54o52o10o66o117o122o122o10o70o105o122o122o10o54o55o10o54o56o10o70o105o122o122o10o66o117o122o122o10o55o49o10o70o105o122o122o10o55o51o10o55o52o10o70o105o122o122o66o117o122o122o10o55o54o10o55o55o10o70o105o122o122o10o55o57o10o66o117o122o122o10o70o105o122o122o10o56o50o10o56o51o10o70o105o122o122o10o66o117o122o122o10o56o54o10o70o105o122o122o10o56o56o10o56o57o10o70o105o122o122o66o117o122o122o10o57o49o10o57o50o10o70o105o122o122o10o57o52o10o66o117o122o122o10o70o105o122o122o10o57o55o10o57o56o10o70o105o122o122o10o66o117o122o122o

Kỹ thuật tương tự như Hello, World! thí dụ

3. Tạo số 2014 mà không có bất kỳ số nào trong mã nguồn của bạn - 13 byte

#++O--O+O+++O

#sử dụng băng, +tăng ô, Oxuất ra dưới dạng số nguyên và số -giảm

4. Hello World bị xáo trộn - 172 byte

#+++++++++[>++++++++<-]>o<++++[>+++++++<-]>+o+++++++oo+++o>++++[>+++++++++++<-]>o------------o[-]++++++++[>+++++++++++<-]>-o<<<o+++o------o--------o[-]+++[>+++++++++++<-]>o

Sử dụng sự tương đồng vốn có của nó với brainfuck. Đạt quy tắc số 1 và số 3

5. Hát chúc mừng sinh nhật bằng ngôn ngữ lập trình yêu thích của bạn - 328 byte

$72o97o112o112o121o32o66o105o114o116o104o100o97o121o32o116o111o32o89o111o117o10o72o97o112o112o121o32o66o105o114o116o104o100o97o121o32o116o111o32o89o111o117o10o72o97o112o112o121o32o66o105o114o116o104o100o97o121o32o68o101o97o114o32o66o117o103o108o101o10o72o97o112o112o121o32o66o105o114o116o104o100o97o121o32o116o111o32o89o111o117o

Tất cả các thách thức có loại cấu trúc này, tại thời điểm này.

6. Chúng ta không xa lạ gì với việc chơi golf, bạn biết các quy tắc và tôi cũng vậy - 6893 byte

$87o101o39o114o101o32o110o111o32o115o116o114o97o110o103o101o114o115o32o116o111o32o108o111o118o101o10o89o111o117o32o107o110o111o119o32o116o104o101o32o114o117o108o101o115o32o97o110o100o32o115o111o32o100o111o32o73o10o65o32o102o117o108o108o32o99o111o109o109o105o116o109o101o110o116o39o115o32o119o104o97o116o32o73o39o109o32o116o104o105o110o107o105o110o103o32o111o102o10o89o111o117o32o119o111o117o108o100o110o39o116o32o103o101o116o32o116o104o105o115o32o102o114o111o109o32o97o110o121o32o111o116o104o101o114o32o103o117o121o10o73o32o106o117o115o116o32o119o97o110o110o97o32o116o101o108o108o32o121o111o117o32o104o111o119o32o73o39o109o32o102o101o101o108o105o110o103o10o71o111o116o116o97o32o109o97o107o101o32o121o111o117o32o117o110o100o101o114o115o116o97o110o100o10o32o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o32o121o111o117o32o117o112o10o78o101o118o101o114o32o103o111o110o110o97o32o108o101o116o32o121o111o117o32o100o111o119o110o10o78o101o118o101o114o32o103o111o110o110o97o32o114o117o110o32o97o114o111o117o110o100o32o97o110o100o32o100o101o115o101o114o116o32o121o111o117o10o78o101o118o101o114o32o103o111o110o110o97o32o109o97o107o101o32o121o111o117o32o99o114o121o10o78o101o118o101o114o32o103o111o110o110o97o32o115o97o121o32o103o111o111o100o98o121o101o10o78o101o118o101o114o32o103o111o110o110o97o32o116o101o108o108o32o97o32o108o105o101o32o97o110o100o32o104o117o114o116o32o121o111o117o10o32o10o87o101o39o118o101o32o107o110o111o119o110o32o101o97o99o104o32o111o116o104o101o114o32o102o111o114o32o115o111o32o108o111o110o103o10o89o111o117o114o32o104o101o97o114o116o39o115o32o98o101o101o110o32o97o99o104o105o110o103o32o98o117o116o10o89o111o117o39o114o101o32o116o111o111o32o115o104o121o32o116o111o32o115o97o121o32o105o116o10o73o110o115o105o100o101o32o119o101o32o98o111o116o104o32o107o110o111o119o32o119o104o97o116o39o115o32o98o101o101o110o32o103o111o105o110o103o32o111o110o10o87o101o32o107o110o111o119o32o116o104o101o32o103o97o109o101o32o97o110o100o32o119o101o39o114o101o32o103o111o110o110o97o32o112o108o97o121o32o105o116o10o65o110o100o32o105o102o32o121o111o117o32o97o115o107o32o109o101o32o104o111o119o32o73o39o109o32o102o101o101o108o105o110o103o10o68o111o110o39o116o32o116o101o108o108o32o109o101o32o121o111o117o39o114o101o32o116o111o111o32o98o108o105o110o100o32o116o111o32o115o101o101o10o32o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o32o121o111o117o32o117o112o10o78o101o118o101o114o32o103o111o110o110o97o32o108o101o116o32o121o111o117o32o100o111o119o110o10o78o101o118o101o114o32o103o111o110o110o97o32o114o117o110o32o97o114o111o117o110o100o32o97o110o100o32o100o101o115o101o114o116o32o121o111o117o10o78o101o118o101o114o32o103o111o110o110o97o32o109o97o107o101o32o121o111o117o32o99o114o121o10o78o101o118o101o114o32o103o111o110o110o97o32o115o97o121o32o103o111o111o100o98o121o101o10o78o101o118o101o114o32o103o111o110o110o97o32o116o101o108o108o32o97o32o108o105o101o32o97o110o100o32o104o117o114o116o32o121o111o117o10o32o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o32o121o111o117o32o117o112o10o78o101o118o101o114o32o103o111o110o110o97o32o108o101o116o32o121o111o117o32o100o111o119o110o10o78o101o118o101o114o32o103o111o110o110o97o32o114o117o110o32o97o114o111o117o110o100o32o97o110o100o32o100o101o115o101o114o116o32o121o111o117o10o78o101o118o101o114o32o103o111o110o110o97o32o109o97o107o101o32o121o111o117o32o99o114o121o10o78o101o118o101o114o32o103o111o110o110o97o32o115o97o121o32o103o111o111o100o98o121o101o10o78o101o118o101o114o32o103o111o110o110o97o32o116o101o108o108o32o97o32o108o105o101o32o97o110o100o32o104o117o114o116o32o121o111o117o10o32o10o40o79o111o104o44o32o103o105o118o101o32o121o111o117o32o117o112o41o10o40o79o111o104o44o32o103o105o118o101o32o121o111o117o32o117o112o41o10o40o79o111o104o41o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o44o32o110o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o10o40o71o105o118o101o32o121o111o117o32o117o112o41o10o40o79o111o104o41o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o44o32o110o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o10o40o71o105o118o101o32o121o111o117o32o117o112o41o10o32o10o87o101o39o118o101o32o107o110o111o119o32o101o97o99o104o32o111o116o104o101o114o32o102o111o114o32o115o111o32o108o111o110o103o10o89o111o117o114o32o104o101o97o114o116o39o115o32o98o101o101o110o32o97o99o104o105o110o103o32o98o117o116o10o89o111o117o39o114o101o32o116o111o111o32o115o104o121o32o116o111o32o115o97o121o32o105o116o10o73o110o115o105o100o101o32o119o101o32o98o111o116o104o32o107o110o111o119o32o119o104o97o116o39o115o32o98o101o101o110o32o103o111o105o110o103o32o111o110o10o87o101o32o107o110o111o119o32o116o104o101o32o103o97o109o101o32o97o110o100o32o119o101o39o114o101o32o103o111o110o110o97o32o112o108o97o121o32o105o116o10o32o10o73o32o106o117o115o116o32o119o97o110o110o97o32o116o101o108o108o32o121o111o117o32o104o111o119o32o73o39o109o32o102o101o101o108o105o110o103o10o71o111o116o116o97o32o109o97o107o101o32o121o111o117o32o117o110o100o101o114o115o116o97o110o100o10o32o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o32o121o111o117o32o117o112o10o78o101o118o101o114o32o103o111o110o110o97o32o108o101o116o32o121o111o117o32o100o111o119o110o10o78o101o118o101o114o32o103o111o110o110o97o32o114o117o110o32o97o114o111o117o110o100o32o97o110o100o32o100o101o115o101o114o116o32o121o111o117o10o78o101o118o101o114o32o103o111o110o110o97o32o109o97o107o101o32o121o111o117o32o99o114o121o10o78o101o118o101o114o32o103o111o110o110o97o32o115o97o121o32o103o111o111o100o98o121o101o10o78o101o118o101o114o32o103o111o110o110o97o32o116o101o108o108o32o97o32o108o105o101o32o97o110o100o32o104o117o114o116o32o121o111o117o10o32o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o32o121o111o117o32o117o112o10o78o101o118o101o114o32o103o111o110o110o97o32o108o101o116o32o121o111o117o32o100o111o119o110o10o78o101o118o101o114o32o103o111o110o110o97o32o114o117o110o32o97o114o111o117o110o100o32o97o110o100o32o100o101o115o101o114o116o32o121o111o117o10o78o101o118o101o114o32o103o111o110o110o97o32o109o97o107o101o32o121o111o117o32o99o114o121o10o78o101o118o101o114o32o103o111o110o110o97o32o115o97o121o32o103o111o111o100o98o121o101o10o78o101o118o101o114o32o103o111o110o110o97o32o116o101o108o108o32o97o32o108o105o101o32o97o110o100o32o104o117o114o116o32o121o111o117o10o32o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o32o121o111o117o32o117o112o10o78o101o118o101o114o32o103o111o110o110o97o32o108o101o116o32o121o111o117o32o100o111o119o110o10o78o101o118o101o114o32o103o111o110o110o97o32o114o117o110o32o97o114o111o117o110o100o32o97o110o100o32o100o101o115o101o114o116o32o121o111o117o10o78o101o118o101o114o32o103o111o110o110o97o32o109o97o107o101o32o121o111o117o32o99o114o121o10o78o101o118o101o114o32o103o111o110o110o97o32o115o97o121o32o103o111o111o100o98o121o101o10o78o101o118o101o114o32o103o111o110o110o97o32o116o101o108o108o32o97o32o108o105o101o32o97o110o100o32o104o117o114o116o32o121o111o117o

7. Xuất ký hiệu - 18 byte

$?:Zs0=0s-s:1s-++O

Kiểm tra xem đầu vào lớn hơn 0, nhỏ hơn 0 (thay đổi thành năng suất -1thay vì 1) và bằng 0, trước khi lấy tổng của chúng.

8. Phỏng đoán Collatz (OEIS A006577) - 36 byte

#$?:1-[:2s%{3×1+}2s÷]:1s-₀+₁]₀O

Điều này thực hiện vòng lặp trên ngăn xếp, nhưng chuyển sang băng để tăng số đếm mỗi lần lặp.

9. Mảng thách thức số 1: Mảng xen kẽ - 35 byte

#?>?>+>?[[<+<<->>>-]+<[-<<]>[>]?]<O

Đây là một sửa đổi nhỏ trong câu trả lời của Mitch Schwartz cho thách thức hiện tại, hãy ủng hộ điều đó!

10. Tôi có phải là một mảng không đáng kể? - 46 byte

$1 0-?…1[s:sr-:Z1s-2×1+×1s-Z1-L2s-×]1+Z1-O

Tất cả tín dụng dành cho Emigna để thực hiện điều này

11. Con số này có phải là số nguyên tố không? - 31 byte

$?:1s-:[:1s-:];L1s[×L2s-]:×%O

Sử dụng Định lý Wilson và tính toán (n-1)!² % n

12. Tôi là một palindrom. Bạn có phải? - 13 byte

$?:R=:O:=R:?$

Nửa đầu của chương trình, lên đến O, đặt chồng lên như [x, x]nơi xlà một trong hai Truehoặc False. Obật giá trị hàng đầu và đầu ra nó. Phần còn lại của chương trình chỉ đảm bảo rằng không có lỗi được tạo ra. May mắn thay, khi ?gặp phần cuối của tập tin, nó chỉ đẩy'' (chuỗi trống).

13. Tổng các số trên tiêu chuẩn trong - 19 byte

$?:[?:];L0s[+L1s-]O

Điều này có thể được chia thành hai phần: ?:[?:];L0s[+L1s-]. Phần đầu tiên thu thập tất cả các đầu vào cho ngăn xếp. Phần thứ hai đẩy tổng của hai phần tử trên cùng, trong khi độ dài lớn hơn 1.

14. Tìm nhân tố - 25 byte

$?:[:1s-:];L1s-Z[×L1s-]O

Điều này có cấu trúc tương tự như chương trình tính tổng, nhưng thay vì đẩy các đầu vào trung gian, [:1s-:];đẩy phạm vi từ 1 .. nđến ngăn xếp và [×L1s-]lấy sản phẩm.

15. Mã ngắn nhất để tạo đầu ra vô hạn - 5 byte

#+[O]

Sử dụng một vòng lặp while, với 1liên tục dưới con trỏ. Đầu ra 1mãi mãi.

16. Nướng một lát Pi - 439 byte

$40o41o40o41o40o41o40o41o40o41o40o41o10o124o92o51o46o49o52o49o53o57o50o54o124o10o124o58o92o53o51o53o56o57o55o57o51o124o10o92o58o58o92o50o51o56o52o54o50o54o124o10o32o92o58o58o92o52o51o51o56o51o50o124o10o32o32o92o58o58o92o55o57o53o48o50o124o10o32o32o32o92o58o58o92o56o56o52o49o124o10o32o32o32o32o92o58o58o92o57o55o49o124o10o32o32o32o32o32o92o58o58o92o54o57o124o10o32o32o32o32o32o32o92o58o58o92o51o124o10o32o32o32o32o32o32o32o92o95o95o92o124o

17. Tìm số nhỏ nhất không chia N

$?:1:[:rs%0=s1+srr:Rs]1s-O

Điều này sử dụng phân chia thử nghiệm, chấm dứt khi kết quả của modulo không bằng nhau 0.

18. Đây là chẵn hay lẻ? - 5 byte

$2?%O

Modulo đơn giản bằng 2

19. Đầu ra có cùng độ dài với mã - 16 byte

$16:[32+:o33s-:]

Xuất ra 16 ký tự ASCII có thể in đầu tiên theo chiều ngược lại: 0/.-,+*)('&%$#"!

20. Chơi golf cho bạn một câu hỏi hay!

$1[93, 76, 111, 91, 49, 59, 104, 48, 79, 49, 111, 54, 51, 0]
36o1O0h;1[oL]

Tín dụng đến user202729 để thực hiện điều này


Đặc tả ngôn ngữ

Gọi điện thoại

bugle.pyhiện có một loạt các cờ, sau đó tên tệp / mã sẽ được thực thi. Cho đến nay, nó có 4 cờ dòng lệnh:

  • -f/ --filechỉ định rằng mã sẽ được đọc từ một tệp
  • -c/ --cmd/ --cmdlinechỉ định rằng mã được cung cấp thông qua dòng lệnh.

    -c-fkhông thể được sử dụng trong cùng một cuộc gọi

  • -u/ --unicodeyêu cầu trình thông dịch đọc mã với mã hóa Unicode. Mặc định là sử dụng mã hóa của Bugle bên dưới

  • -l/ --lengthxuất độ dài của tệp, tính bằng byte, sang STDERR sau khi thực thi

Cuộc gọi sau đây đã được sử dụng để kiểm tra các bài nộp trên

$ python bugle.py -f -u [file]

Mã trang

Bugle sử dụng 512 ký tự trong trang mã của nó. 0xFFtự này không được sử dụng cho một lệnh , vì nó được sử dụng để chỉ ra rằng giá trị hex tiếp theo trong chỉ mục vào nửa sau của trang mã. Các ký tự được sử dụng là:

ÀÁÂÄÆÃÅĀĄ\t\nĆČÇĎÐ
ÈÉÊËĒĖĚĘÌÍÎÏĪĮĹĽ
 !"#$%&'()*+,-./
0123456789:;<=>?
@ABCDEFGHIJKLMNO
PQRSTUVWXYZ[\]^_
`abcdefghijklmno
pqrstuvwxyz{|}~¶
ŁŃŇÑŊÒÓÔÖŒÕØŌŔŘŚ
ŠŤŦÙÚÛÜŮŪŴÝŶŸŹŽŻ
àáâäæãåāąćčçďðèé
êëēėěęìíîïīįĺľłń
ňñŋòóôöœøōõŕřßśš
ťŧùúûüůūŵýŷÿźžż◊
ΑΆΒΓΔΕΈΖΗΉΘΙΊΚΛΜ
ΝΞΟΌΠΡΣΤΥΎΦΧΨΩΏ
αάβγδεέζηήθιίΐκλ
μνξοόπσςτυύΰφχψω
ώǴḰḾṔẂǵḱḿṕẃḂḞĠḢṀ
ȮṖṠṪẊḃḟġḣṁȯṗṡṫẋ§
ĂĞĬŎŬĴăğĭŏŭĵªº‹›
ƁƇƊƑƓƘⱮƝƤƬƲȤɓƈɗƒ
ɠɦƙɱɲƥʠɼʂƭʋȥ©®ıȷ
ЉЊЕРТЗУИОПШАСДФГ
ХЈКЛЧЋЅЏЦВБНМЂЖљ
њертзуиопшасдфгх
јклчћѕџцвбнмђжÞþ
†∂∆≈≠√∈∉∌∋∩∪¬∧∨⊕
¤₽¥£¢€₩‰¿¡⁇⁈‼⁉‽⸘
…°•”“„’‘≤«·»≥ᴇ∞¦
×⁰¹²³⁴⁵⁶⁷⁸⁹⁺⁻⁼⁽⁾
÷₀₁₂₃₄₅₆₇₈₉₊₋₌₍₎

Hoặc nhìn thấy nó trong định dạng bảng . Lưu ý rằng \t\nđại diện cho tab và dòng mới tương ứng. Cũng lưu ý rằng dòng thứ 16 kết thúc bằng một ký tự không thể in được: và có thể không được hiển thị trên tất cả các trình duyệt.

Ký ức

Trình thông dịch hiện có 5 mô hình bộ nhớ được tích hợp sẵn. Mỗi mô hình bộ nhớ yêu cầu một ký tự để thông báo cho trình thông dịch bắt đầu sử dụng mô hình đó:

  • Cây rơm ($ ): ngăn xếp tiêu chuẩn, hỗ trợ các giá trị được đẩy, bật, v.v.
  • Infinite băng ( #): Một băng, à la brainfuck, mà ban đầu chỉ là0 là s.
  • Lưới vô hạn ( G): Lưới 2d, vô hạn theo cả hai hướng, chỉ chứa 0s
  • Deque ( D): Một deque , như được thực hiện bởi collectionsmô-đun.
  • Đăng ký ( S): Một giá trị duy nhất, có thể được sử dụng để lưu trữ một giá trị.

Lưới cũng có một giá trị duy nhất được lưu trong con trỏ của nó có thể được ghi vào hoặc ghi vào các ô.

Ngoài ra, kích thước băng và lưới và hành vi gói có thể được sửa đổi, bằng cách sử dụng một lệnh gọi khác. Các lệnh khác nhau này lấy một số giá trị nhất định từ mô hình bộ nhớ hiện tại làm tham số tùy chỉnh:

  • Băng ( À): Lấy hai giá trị - size ( int) và gói (bool )
  • Băng ( Á): Lấy một giá trị - kích thước ( int). Kết thúc tốt đẹp ở cuối băng
  • Băng ( Â): Lấy một giá trị - kích thước ( int). Không quấn ở cuối
  • Grid ( Ǵ): Lấy 4 giá trị - x size ( int), y size ( int), x quấn ( bool) và y quấn ( bool)

Loại bộ nhớ đang được sử dụng có thể thay đổi trong chương trình bằng cách sử dụng ₀₁₂₃₄₅₆₇₈₉, loại truy cập nloại bộ nhớ được sử dụng chỉ số 0 ( là loại thứ nhất, thứ hai, v.v.), nhưng, hiện tại, các giá trị không thể hoán đổi giữa các loại bộ nhớ khác nhau.

Phân nhánh

Cho đến nay Bugle có hai lệnh phân nhánh, cả hai đều được kết thúc bằng một ]ký tự:

  • Trong khi ([ ): kiểu brainfuck trong khi các vòng lặp. Chúng bật một giá trị từ ngăn xếp / deque nếu được sử dụng hoặc truy cập vào ô dưới con trỏ trong băng / lưới.

    Ví dụ: #?[-O]đếm từ đầu vào xuống0

  • Nếu / khác ( {}). Thực hiện đơn trong khi các vòng lặp. Nếu giá trị xuất hiện là sai, thì mệnh đề if bị bỏ qua, chuyển sang mệnh đề khác, được phân tách bằng }. Chúng hoạt động giống như trong khi các vòng lặp liên quan đến truy cập bộ nhớ.

    Ví dụ: {0}1]là cổng KHÔNG logic

Chức năng tích hợp sẵn

Các chữ số được hiểu là số nguyên và chỉ được đẩy / ghi vào mô hình bộ nhớ hiện tại.

Rõ ràng, tôi đã trang bị cho Bugle một số chức năng dựng sẵn cơ bản, ít nhất có thể, để cho phép những người khác thêm nhiều hơn khi chuỗi tiến triển. Các lệnh cơ sở như sau:

  • +

    • Stack / Deque: Thêm hai giá trị hàng đầu
    • Băng / Lưới: Tăng ô hiện tại
  • -

    • Stack / Deque: Trừ hai giá trị hàng đầu
    • Băng / Lưới: Giảm ô hiện tại
  • %

    • Stack / Deque: Modulo hai giá trị hàng đầu
  • :

    • Stack / Deque: Sao y giá trị hàng đầu
  • ;

    • Stack / Deque: Pop giá trị hàng đầu
    • Băng / Lưới: Không có ô hiện tại
  • <

    • Băng / Lưới: Di ​​chuyển sang trái một ô
  • =

    • Stack: Hai giá trị trên có bằng nhau không?
    • Lưới: Di ​​chuyển xuống một ô
  • >

    • Băng / Lưới: Di ​​chuyển sang phải một ô
  • ?

    • Stack / Deque: Đánh giá một dòng đầu vào
    • Băng / Lưới: Lấy ký tự đầu vào
  • L

    • Stack / Deque: Đẩy chiều dài của stack / deque
  • O

    • Tất cả: Xuất giá trị hiện tại
  • R

    • Ngăn xếp: Đảo ngược phần tử trên cùng nếu có thể, ngược lại ngăn xếp
  • Z

    • Stack: Yếu tố hàng đầu là tích cực?
  • ^

    • Lưới: Di ​​chuyển lên một ô
  • h

    • Tất cả: In mô hình bộ nhớ đầy đủ
  • o

    • Tất cả: In giá trị hiện tại dưới dạng ký tự
  • r

    • Ngăn xếp: Xoay 3 giá trị hàng đầu
    • Deque: Xoay số nlần deque , trong đó ngiá trị hàng đầu
  • s

    • Stack / Deque: Hoán đổi hai giá trị hàng đầu
    • Stack: Splat giá trị hàng đầu
  • ×

    • Ngăn xếp: Nhân hai giá trị trên cùng
    • Lưới: Viết giá trị con trỏ vào ô hiện tại
  • ÷

    • Ngăn xếp: Chia hai giá trị trên cùng
    • Lưới: Viết ô hiện tại vào giá trị con trỏ
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.