การสอบปลายภาค: PART C3

เขียนตอบแต่ละข้อเริ่มด้วยเลขข้อในรูปแบบ <เลขข้อ> เช่น
<1>
พิมพ์คำตอบโปรแกรมข้อที่ 1
...
...
และอย่าลืมกด SUBMIT ด้วย (ส่งได้หลายครั้ง จะตรวจครั้งล่าสุด)

<1>
เราสามารถจัดเก็บตารางที่มีแต่เลข 0 กับ 1 ด้วย dict ที่มี
- key 'shape' ที่มี value เป็น
       tuple 2 ช่องเก็บจำนวนแถวและจำนวนคอลัมน์
- key 'data' ที่มี value เป็น dict ที่มี
    - key   เป็นเลขแถว
    - value เป็นลิสต์เก็บเลขคอลัมน์ในแถวนั้นที่มีข้อมูลเป็น 1
    - คำว่าเลขแถวเลขคอลัมน์ คืออินเด็กซ์ของแถวและคอลัมน์
เช่น ตาราง
    0000000
    0001001
    0111110
    0000000
    0000100
    0000000
เก็บด้วย dict
    {
      'shape': (6,7),
      'data': {
                0: [],
                1: [3,6],
                2: [3,1,2,4,5],
                4: [4]
              }
    }
ให้สังเกตว่า แถว 0, 3 และ 5 ไม่มีเลข 1 เลย 
อาจมีหรือไม่มีเลขแถวใน dict ก็ได้

จงเขียนฟังก์ชัน f(x)
- รับ x เป็น dict ที่แทนตารางในลักษณะข้างต้น
- คืนเซตของ tuples (i,j) ต่าง ๆ ที่
  - i น้อยกว่า j
  - i กับ j เป็นเลขแถวของคู่แถวที่ไม่มี 1 อยู่ใน
    คอลัมน์เดียวกันของสองแถวนั้น

เช่น ตาราง
    010
    101
    011
    000
แทนด้วย 
    x = {
          'shape': (4,3),
          'data' : {0:[1], 1:[0,2], 2:[1,2]}
        }
คำสั่ง f(x) จะคืน {(0,1), (0,3), (1,3), (2,3)}