ท้าทาย:
เขียนฟังก์ชั่นหรือโปรแกรมที่ยอมรับรายการค่าบูลีนและส่งกลับช่วงทั้งหมดของ True
กรณีทดสอบ:
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]]
กฎ:
- คุณสามารถเลือกวิธีการป้อนข้อมูลที่เข้ารหัสเช่นรายการอาร์เรย์สตริง ฯลฯ
- ผลลัพธ์จะต้องถูกเข้ารหัสเป็น list-like ของ list-ชอบหรือสตริงที่แสดงเช่นอาร์เรย์ดังนั้นรายการ list, tuples, เมทริกซ์, เวกเตอร์เป็นต้น
- ค่าบูลีนต้องเข้ารหัสเป็นค่าคงที่ แต่ไม่เช่นนั้นการแปลง T / F อย่างง่ายไปเป็นค่าคงที่ที่ต้องการจะได้รับอนุญาต
- แก้ไข: evalหรือคล้ายกันในระหว่างการอนุญาตให้ใช้งานจริง
- อย่าลืมที่จะอธิบายว่าอินพุตถูกส่งผ่านไปยังโปรแกรม / ฟังก์ชั่นและให้อินพุต / เอาต์พุตสำหรับกรณีทดสอบ
- การแปลงเป็นรูปแบบอินพุตที่ต้องการจะไม่ถูกนับ
- ช่องโหว่มาตรฐานไม่ได้รับอนุญาต
- หากภาษาของคุณมีฟังก์ชั่นในการทำเช่นนี้มันไม่ได้รับอนุญาต
- ฉันจะไม่ยอมรับข้อเสนอของฉันเอง
- แก้ไข: รูปแบบผลลัพธ์มีความยืดหยุ่น หากไม่พิมพ์รายการหรือคล้ายกันค่าช่วงจะต้องคั่นด้วยอักขระที่ไม่ใช่ตัวเลขและช่วงแยกเช่นกัน
เกณฑ์การให้คะแนน:
- คะแนนเป็นไบต์เว้นแต่ว่าไม่เหมาะกับภาษาของคุณ (เช่น codels ใน Piet)
- คะแนนต่ำสุดชนะ
มีความยืดหยุ่นเล็กน้อยในอินพุตและเอาต์พุต แต่โซลูชันที่ T / F ถูกแทนที่ด้วยฟังก์ชันที่ไม่อนุญาตให้ทำงานทั้งหมด
แก้จุดบกพร่อง:
หากคุณเขียนของคุณใน Haskell หรือสามารถโทรจาก Haskell ต่อไปนี้จะตรวจสอบการทำงานของคุณ / โปรแกรม:
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)