Thử thách
Tìm một biểu thức, dài tối đa 100 byte, với chữ ký loại dài nhất.
Quy tắc
- Bất kỳ ngôn ngữ gõ tĩnh nào với kiểu suy luận đều được cho phép
- Loại phải không mơ hồ, nhưng mặt khác có thể bao gồm các loại mà không có trường hợp được xác định. Ví dụ
Num [a]
vàEq [a]
được cho phép, ngay cả khi không có ví dụ xác định - Không có nhập khẩu nào ngoài mức tối thiểu cần thiết để biên dịch chương trình với STDIN / STDOUT
- Các loại vô hạn không được phép
- Nếu một câu trả lời có nhiều hơn một biểu thức, chỉ một câu có thể đóng góp vào điểm số. Ví dụ: mặc dù chữ ký loại sáng tác là
(.) :: (b -> c) -> (a -> b) -> a -> c
, có điểm 20, nhưng câu trả lời với 25 bản sao(.)\n
sẽ có điểm 20, không phải 500 - Biểu thức phải có nhiều nhất là 100 byte
- Điểm số là số lượng ký tự trong chữ ký loại, không bao gồm tên của hàm và bất kỳ khoảng trắng nào. Ví dụ:
f :: (a -> b) -> a -> b
sẽ có điểm 12 - Điểm số cao nhất sẽ thắng!
Ví dụ
Mặc dù các ngôn ngữ khác được cho phép, các ví dụ sau có trong Haskell:
Score: 112
map.map.map.map.map.map.map.map.map.map.map.map.map.map.map.map.map.map.map.map.map.map.map.map.map
f :: (a -> b)
-> [[[[[[[[[[[[[[[[[[[[[[[[[a]]]]]]]]]]]]]]]]]]]]]]]]]
-> [[[[[[[[[[[[[[[[[[[[[[[[[b]]]]]]]]]]]]]]]]]]]]]]]]]
Score: 240
(.).(.).(.).(.).(.).(.).(.).(.).(.).(.).(.).(.).(.).(.).(.).(.).(.).(.).(.).(.).(.).(.).(.).(.).(.)
f :: (b->c)->(a->a1->a2->a3->a4->a5->a6->a7->a8->a9->a10->a11->a12->a13->a14->a15->a16->a17->a18->a19->a20->a21->a22->a23->a24->b)->a1->a2->a3->a4->a5->a6->a7->a8->a9->a10->a11->a12->a13->a14->a15->a16->a17->a18->a19->a20->a21->a22->a23->a24->c
Score: 313
foldl$foldl$foldl$foldl$foldl$foldl$foldl$foldl$foldl$foldl$foldl$foldl$foldl$foldl$foldl$foldl(.)
f :: (Foldable t, Foldable t1, Foldable t2, Foldable t3, Foldable t4,
Foldable t5, Foldable t6, Foldable t7, Foldable t8, Foldable t9,
Foldable t10, Foldable t11, Foldable t12, Foldable t13,
Foldable t14, Foldable t15) =>
(b -> c)
-> t (t1 (t2 (t3 (t4 (t5 (t6 (t7 (t8 (t9 (t10 (t11 (t12 (t13 (t14 (t15 (b
-> b))))))))))))))))
-> b
-> c
Score: 538
lex.show.foldl1.mapM.traverse.sum.mapM.sum.traverse.(.).mapM.scanl.zipWith3((.traverse).(.traverse))
(Num
(a -> ([[c]] -> t3 [[a1 -> f b]]) -> [[c]] -> t3 [[a1 -> f b]]),
Num
(([[c]] -> t3 [[a1 -> f b]])
-> t1 (t2 ([[c]] -> t3 [[a1 -> f b]]))
-> [[c]]
-> t3 [[a1 -> f b]]),
Show
(t (t1 (t2 ([[c]] -> t3 [[a1 -> f b]])))
-> t1 (t2 ([[c]] -> t3 [[a1 -> f b]]))),
Applicative f, Foldable t,
Foldable ((->) (t1 (t2 ([[c]] -> t3 [[a1 -> f b]])) -> a)),
Foldable
((->) (([[c]] -> t3 [[a1 -> f b]]) -> a -> t3 [a1 -> f b])),
Traversable t1, Traversable t2, Traversable t3, Traversable t4,
Traversable t5,
Traversable ((->) (t1 (t2 ([[c]] -> t3 [[a1 -> f b]])))),
Traversable ((->) ([[c]] -> t3 [[a1 -> f b]]))) =>
[(t5 (t4 a1) -> f (t5 (t4 b))) -> c -> a1 -> f b]
-> [(String, String)]