5 ngôn ngữ 11 ký tự = 0,4545
Đã thực hiện thử thách này như một cơ hội để kiểm tra một số ngôn ngữ mới (CJam, Burlesque, zsh, gs2). Lần đầu tiên tôi làm việc với những ngôn ngữ này.
Phương pháp đằng sau việc tạo đầu ra là khác nhau trong gần như mỗi ngôn ngữ. Chỉ có phương pháp CJam và gs2 là giống hệt nhau. Cả 4 phương thức là tạo một phạm vi [1, 100] và cắt nó bằng modulo (CJam và gs2), tạo phạm vi [1, ..., 100] và lọc cho các phần tử là 1 mod 7 (Pyth), tạo phạm vi [1, ..., 100], chia nó thành các khối của len 7 và sử dụng phần tử đầu tiên của mỗi đoạn (Burlesque) và tạo chuỗi trực tiếp (zsh).
Tôi đã cố gắng thiết kế mỗi chương trình theo cách như vậy, rằng nó trông giống như một người nào đó không quen thuộc với ngôn ngữ này.
chỉnh sửa 1: thêm Burlesque, 2 ngôn ngữ trước đó với 10 ký tự = 0,2
chỉnh sửa 2: thêm gs2, 3 ngôn ngữ trước đó với 11 ký tự = 0,2727
chỉnh sửa 3: thêm zsh, 4 ngôn ngữ trước đó với 11 ký tự = 0,3636
Camam
q~\1+,0-\%p
Kiểm tra nó trực tuyến với đầu vào 100 7
.
q~ push the evaluated input (100 7)
\ swap (7 100)
1 push 1 (7 100 1)
+ add last to elements (7 101)
, create the range (7, [0, 1, ..., 100])
0 push 0 (7, [0, 1, ..., 100], 0)
- delete 0 from the range (7, [1, 2, ..., 100])
\ swap ([1, 2, ..., 100], 7)
% use every 7th entry ([1, 8, ..., 99])
p print pretty
Burlesque
jrojcoq-]m[
Bên cạnh zsh, đây là chương trình golf duy nhất. Burlesque là khá tuyệt vời, nó có một loạt các chức năng khác nhau, như thế nào ro
. Đáng buồn thay, không có gì giống như [::a]
toán tử cắt Python .
Không có thông dịch viên trực tuyến, nhưng bạn có thể nhận Burlesque ở đây . Vì Burlesque không hỗ trợ các hàm hoặc IO, bạn phải đặt các giá trị lên ngăn xếp trước, như100 7 jrojcoq-]m[
j Swap (7 100)
ro Range (7 {1 2 ... 100})
j Swap ({1 2 ... 100} 7)
co ChunksOf ({{1 2 .. 7} {8 ... 14} ... {99 100}})
q Create Block ({{1 2 .. 7} {8 ... 14} ... {99 100}} {})
-] head (first element) ({{1 2 .. 7} {8 ... 14} ... {99 100}} {-]})
m[ map the chunks to the head-block
gs2
read-nums dup head inc range tail swap reverse head mod unlines
Đúng, đây chỉ là 11 ký tự. Trong gs2 mỗi byte có một ý nghĩa khác nhau. Nhưng vì viết bằng byte khá khó và không có gì thú vị, bạn cũng có thể viết bằng ghi nhớ, bạn có thể biên dịch thành mã gs2 thực tế. Mã gs2, được thực thi là
W@!'."B !4+
hoặc dưới dạng hex-dump:
57 40 21 27 2e 22 42 20 21 34 2b
Sự thật thú vị: Tôi đã không viết bằng những thứ ghi nhớ, nhưng trực tiếp là số của kết xuất hex.
Bạn có thể kiểm tra nó bằng cách tải xuống trình biên dịch . Biên dịch tệp ghi nhớ bằng python gs2c.py < mnemonics.txt > compiled
hoặc đơn giản là sao chép W@!'."B !4+
vào một tệp có tên compiled
và sau đó thực hiện nó vớiecho 100 7 | python gs2.py compiled
.
Việc ghi nhớ khá tự giải thích, nhưng đây là những gì đang diễn ra trong ngăn xếp.
57 40 21 27 2e 22 42 20 21 34 2b
57 read-nums ([100 7])
40 dup ([100 7] [100 7])
21 head ([100 7] 100)
27 inc ([100 7] 101)
2e range ([100 7] [0 1 ... 100])
22 tail ([100 7] [1 2 ... 100])
42 swap ([1 2 ... 100] [100 7])
20 reverse ([1 2 ... 100] [7 100])
21 head ([1 2 ... 100] 7)
34 mod ([1 8 ... 99])
2b unlines ('1\n8\n...\n99')
everything on the stack gets printed
Btw, 8 byte là có thể, thậm chí có thể ít hơn.
chỉnh sửa: Tôi đã rẽ nhánh gs2, thao tác một lệnh và thực hiện một yêu cầu kéo, đã được hợp nhất. Vì vậy, bây giờ là nhiệm vụ có thể được thực hiện với 6 byte: read-nums extract-array swap range1 mod unlines
, mà dịch để 57 0e 42 2f 34 2b
, mà thậm chí còn tốt hơn so với pyth tối ưu.
zsh
f() seq 1 $2 $1
Điều này xác định một chức năng f
, tạo ra một chuỗi. Để sử dụng nó trên Windows, tôi đã cài đặt shell babun , nơi bạn có thể chỉ cần gõ các lệnh này. Đơn giản chỉ cần viết f() seq 1 $2 $1
và trong dòng tiếp theo f 100 7
.
Đầu tiên tôi đã cố gắng viết điều này bằng Bash, nhưng ở đó bạn phải viết ()
xung quanh khối mã, như thế f() ( seq 1 $2 $1 )
. Vì vậy, tôi chuyển sang zsh thay thế.
Bình
fq1%TeQUhhQ
Điều này thực sự đau đớn, vì tất nhiên tôi thấy golf 7 byte rõ ràng. Bạn có thể kiểm tra nó trực tuyến với đầu vào 100, 7
.
Q = input()
UhhQ the range [0, 1, ..., Q[0]]
f filtered (only use those elements T, which satisfy the equation
q1%TeQ 1 == T % Q[1]
NumberOfLanguages / CodeSize
?