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 , Emigna và user202729
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ư Jelly và Husk . 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ó câu trả lời , 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ụ:
- "Chào thế giới!" - Xuất chuỗi
Hello, World!
- 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ởiBuzz
và bội số của cả haiFizzBuzz
- 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
0123456789
trong mã nguồn, mà không truy cập các biến ngoài hoặc hạt ngẫu nhiên - 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
,eor01
và27
(case-insensitive) 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
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"
- 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
- 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.
- 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
- 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
- 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
- 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
- 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.
- 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ữa1
vàn
bao gồm. - 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.
- 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|
\__\|
- 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.
- Đâ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ả.
- Đầ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ã.
- 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:
- Tạo một trình thông dịch tự
- Tạo một tải trọng có khả năng
- Covfefify một chuỗi
- Lập trình siêu tốc: N + N, N × N, N ^ N tất cả trong một
- "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!
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
for
vòng lặp) được cho phép và được khuyến khích thêm vào