Thử thách:
Viết hàm hoặc chương trình chấp nhận danh sách các giá trị boolean và trả về tất cả các phạm vi của True.
Các trường hợp thử nghiệm:
f [F] = []
f [T] = [[0,0]]
f [T,T,F,T] = [[0,1],[3,3]]
f [F,T,T,F,F,T,T,T] = [[1,2],[5,7]]
f [F,T,T,F,F,F,T,T,T,T] = [[1,2],[6,9]]
f [T,T,F,F,F,T,T,T,T,T,T,T,T,T,T,F] = [[0,1],[5,14]]
f [F,F,T,T,F,F,F,F,F,F,F,F,T,T,T,T,T,T,T,T,F,F,F,F,F,F,F,F,F,F,F,F,F,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,T,T] = [[2,3],[12,19],[33,54],[93,94]]
Quy tắc:
- Bạn có thể chọn cách mã hóa đầu vào, ví dụ: danh sách, mảng, chuỗi, v.v.
- Đầu ra phải được mã hóa dưới dạng danh sách giống như danh sách hoặc chuỗi hiển thị như vậy, vì vậy mảng, danh sách, bộ dữ liệu, ma trận, vectơ, v.v.
- Các giá trị boolean phải được mã hóa dưới dạng hằng, nhưng nếu không, bất kỳ chuyển đổi đơn giản nào của T / F sang hằng số mong muốn đều được cho phép
- EDIT: eval hoặc tương tự trong thời gian chạy IS được cho phép.
- Đừng quên giải thích cách đầu vào được chuyển đến chương trình / hàm và cung cấp đầu vào / đầu ra cho các trường hợp thử nghiệm
- Chuyển đổi sang định dạng đầu vào mong muốn không được tính
- Các sơ hở tiêu chuẩn không được phép
- Nếu ngôn ngữ của bạn có chức năng để làm điều này, nó không được phép
- Tôi sẽ không chấp nhận trình của riêng tôi
- EDIT: Định dạng đầu ra là linh hoạt. Nếu không in một danh sách hoặc tương tự, các giá trị phạm vi phải được phân tách bằng một ký tự không phải là số và các phạm vi riêng biệt.
Ghi điểm:
- Điểm được tính bằng byte, trừ khi không phù hợp với ngôn ngữ của bạn (chẳng hạn như codel trong Piet)
- Điểm số thấp nhất sẽ thắng
Có một chút linh hoạt trong đầu vào và đầu ra, nhưng các giải pháp trong đó T / F được thay thế bằng các chức năng làm tất cả công việc đều không được phép.
Gỡ lỗi:
Nếu bạn viết của bạn bằng Haskell hoặc có thể gọi nó từ Haskell, phần sau đây sẽ kiểm tra chức năng / chương trình của bạn:
import Test.QuickCheck
tf = cycle [True,False]
gen l = foldl (++) [] $ map (\i -> [tf!!i | x<-[1..i]]) l
putIn (a,b) l = zipWith (||) l [(a <= p) && (p <= b) | p <- [0..length l]]
putAllIn rs len = foldr putIn [False|i<-[1..len]] rs
main = print $ quickCheck (check functionNameGoesHere)