การสอบปลายภาค: 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)}
Solution:
def f(x):
  out = set()
  R = x['shape'][0]
  d = x['data']
  for i in range(R):
    for j in range(i+1, R):
      si = sj = set()
      if i in d: si = set(d[i])
      if j in d: sj = set(d[j])
      if len(si & sj) == 0:
        out.add((i,j))
  return out
<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, 2), (1, 2)}
Solution:
def f(x):
  out = set()
  R = x['shape'][0]
  d = x['data']
  for i in range(R):
    for j in range(i+1, R):
      si = sj = set()
      if i in d: si = set(d[i])
      if j in d: sj = set(d[j])
      if len(si & sj) > 0:
        out.add((i,j))
  return out
<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 ที่แทนตารางในลักษณะข้างต้น
- คืน tuple (i,j) ที่
  - i น้อยกว่า j
  - i กับ j เป็นเลขแถวของคู่แถวที่เมื่อรวมพิจารณา
    ทั้งสองแถวจะมีจำนวน 1 มากสุด 
    - ถ้ามี 1 ที่คอลัมน์เดียวกันทั้งสองแถว 
      ให้คิดตัวเดียวในคอลัมน์นั้น
    - ถ้ามีมากสุดหลายคู่แถว ก็คืนสัก 1 คู่

เช่น ตาราง
    01000
    10010
    01100
    00000
แทนด้วย 
    x = {
          'shape': (4,5),
          'data' : {0:[1], 1:[0,3], 2:[1,2]}
        }
คำสั่ง f(x) จะคืน (1, 2)
Solution:
def f(x):
  R = x['shape'][0]
  d = x['data']
  a = []
  for i in range(R):
    for j in range(i+1, R):
      si = sj = set()
      if i in d: si = set(d[i])
      if j in d: sj = set(d[j])
      a.append((len(si | sj), (i,j)))
  return max(a)[1]
<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 ที่แทนตารางในลักษณะข้างต้น
- คืน tuple (i,j) ที่
  - i น้อยกว่า j
  - i กับ j เป็นเลขแถวของคู่แถวที่มี 1 อยู่ในคอลัมน์
    ที่ไม่เหมือนกัน (คือ ถ้ามีในแถวหนึ่งจะไม่มีในอีกแถว)
    เป็นจำนวนมากสุด ถ้ามีมากสุดหลายคู่แถว ก็คืนสัก 1 คู่

เช่น ตาราง
    01000
    10110
    01100
    00000
แทนด้วย 
    x = {
          'shape': (4,5),
          'data' : {0:[1], 1:[0,2,3], 2:[1,2]}
        }
คำสั่ง f(x) จะคืน (0, 1)
Solution:
def f(x):
  R = x['shape'][0]
  d = x['data']
  a = []
  for i in range(R):
    for j in range(i+1, R):
      si = sj = set()
      if i in d: si = set(d[i])
      if j in d: sj = set(d[j])
      a.append((len(si | sj)-len(si&sj), (i,j)))
  return max(a)[1]
<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 อยู่ครบทุกคอลัมน์

เช่น ตาราง
    0100
    1001
    0110
    1011
แทนด้วย 
    x = {
         'shape': (4,4),
         'data' : {0:[1], 1:[0,3], 2:[1,2],
                   3:[0,2,3]}
        }
คำสั่ง f(x) จะคืน {(0, 3), (1, 2), (2, 3)}
Solution:
def f(x):
  out = set()
  R,C = x['shape']
  d = x['data']
  for i in range(R):
    for j in range(i+1, R):
      si = sj = set()
      if i in d: si = set(d[i])
      if j in d: sj = set(d[j])
      if len(si | sj) == C:
        out.add((i,j))
  return out
<1>
เราสามารถจัดเก็บตารางที่มีแต่เลข 0 กับ 1 ด้วย dict ที่มี
- key 'shape' ที่มี value เป็น
       tuple 2 ช่องเก็บจำนวนแถวและจำนวนคอลัมน์
- key 'data' ที่มี value เป็น dict ที่มี
    - key   เป็นเลขแถว
    - value เป็นลิสต์เก็บเลขคอลัมน์ในแถวนั้นที่มีข้อมูลเป็น 0
    - คำว่าเลขแถวเลขคอลัมน์ คืออินเด็กซ์ของแถวและคอลัมน์
เช่น ตาราง
    1111111
    1110110
    1000001
    1111111
    1111011
    1111111
เก็บด้วย dict
    {
      'shape': (6,7),
      'data': {
                0: [],
                1: [3,6],
                2: [3,1,2,4,5],
                4: [4]
              }
    }
ให้สังเกตว่า แถว 0, 3 และ 5 ไม่มีเลข 0 เลย 
อาจมีหรือไม่มีเลขแถวใน dict ก็ได้

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

เช่น ตาราง
    101
    010
    100
    111
แทนด้วย 
    x = {
          'shape': (4,3),
          'data' : {0:[1], 1:[0,2], 2:[1,2]}
        }
คำสั่ง f(x) จะคืน [[0,1], [0,3], [1,3], [2,3]]
Solution:
def f(x):
  out = list()
  R = x['shape'][0]
  d = x['data']
  for i in range(R):
    for j in range(i+1, R):
      si = sj = set()
      if i in d: si = set(d[i])
      if j in d: sj = set(d[j])
      if len(si & sj) == 0:
        out.append([i,j])
  return out
<1>
เราสามารถจัดเก็บตารางที่มีแต่เลข 0 กับ 1 ด้วย dict ที่มี
- key 'shape' ที่มี value เป็น
       tuple 2 ช่องเก็บจำนวนแถวและจำนวนคอลัมน์
- key 'data' ที่มี value เป็น dict ที่มี
    - key   เป็นเลขแถว
    - value เป็นลิสต์เก็บเลขคอลัมน์ในแถวนั้นที่มีข้อมูลเป็น 0
    - คำว่าเลขแถวเลขคอลัมน์ คืออินเด็กซ์ของแถวและคอลัมน์
เช่น ตาราง
    1111111
    1110110
    1000001
    1111111
    1111011
    1111111
เก็บด้วย dict
    {
      'shape': (6,7),
      'data': {
                0: [],
                1: [3,6],
                2: [3,1,2,4,5],
                4: [4]
              }
    }
ให้สังเกตว่า แถว 0, 3 และ 5 ไม่มีเลข 0 เลย 
อาจมีหรือไม่มีเลขแถวใน dict ก็ได้

จงเขียนฟังก์ชัน f(x)
- รับ x เป็น dict ที่แทนตารางในลักษณะข้างต้น
- คืนลิสต์ของลิสต์ [i,j] ต่าง ๆ ที่
  - i น้อยกว่า j
  - i กับ j เป็นเลขแถวของคู่แถวที่มี 0 อยู่ใน
    คอลัมน์เดียวกันอย่างหนึ่งคอลัมน์ของสองแถวนั้น
  - ลำดับของข้อมูลในลิสต์ผลลัพธ์จะเป็นอย่างไรก็ได้

เช่น ตาราง
    101
    010
    100
    111
แทนด้วย 
    x = {
          'shape': (4,3),
          'data' : {0:[1], 1:[0,2], 2:[1,2]}
        }
คำสั่ง f(x) จะคืน [[0, 2], [1, 2]]
Solution:
def f(x):
  out = list()
  R = x['shape'][0]
  d = x['data']
  for i in range(R):
    for j in range(i+1, R):
      si = sj = set()
      if i in d: si = set(d[i])
      if j in d: sj = set(d[j])
      if len(si & sj) > 0:
        out.append([i,j])
  return out
<1>
เราสามารถจัดเก็บตารางที่มีแต่เลข 0 กับ 1 ด้วย dict ที่มี
- key 'shape' ที่มี value เป็น
       tuple 2 ช่องเก็บจำนวนแถวและจำนวนคอลัมน์
- key 'data' ที่มี value เป็น dict ที่มี
    - key   เป็นเลขแถว
    - value เป็นลิสต์เก็บเลขคอลัมน์ในแถวนั้นที่มีข้อมูลเป็น 0
    - คำว่าเลขแถวเลขคอลัมน์ คืออินเด็กซ์ของแถวและคอลัมน์
เช่น ตาราง
    1111111
    1110110
    1000001
    1111111
    1111011
    1111111
เก็บด้วย dict
    {
      'shape': (6,7),
      'data': {
                0: [],
                1: [3,6],
                2: [3,1,2,4,5],
                4: [4]
              }
    }
ให้สังเกตว่า แถว 0, 3 และ 5 ไม่มีเลข 0 เลย 
อาจมีหรือไม่มีเลขแถวใน dict ก็ได้

จงเขียนฟังก์ชัน f(x)
- รับ x เป็น dict ที่แทนตารางในลักษณะข้างต้น
- คืน ลิสต์ [i,j] ที่
  - i น้อยกว่า j
  - i กับ j เป็นเลขแถวของคู่แถวที่เมื่อรวมพิจารณา
    ทั้งสองแถวจะมีจำนวน 0 มากสุด 
    - ถ้ามี 0 ที่คอลัมน์เดียวกันทั้งสองแถว 
      ให้คิดตัวเดียวในคอลัมน์นั้น
    - ถ้ามีมากสุดหลายคู่แถว ก็คืนสัก 1 คู่

เช่น ตาราง
    10111
    01101
    10011
    11111
แทนด้วย 
    x = {
          'shape': (4,5),
          'data' : {0:[1], 1:[0,3], 2:[1,2]}
        }
คำสั่ง f(x) จะคืน [1, 2]
Solution:
def f(x):
  R = x['shape'][0]
  d = x['data']
  a = []
  for i in range(R):
    for j in range(i+1, R):
      si = sj = set()
      if i in d: si = set(d[i])
      if j in d: sj = set(d[j])
      a.append((len(si | sj), [i,j]))
  return max(a)[1]
<1>
เราสามารถจัดเก็บตารางที่มีแต่เลข 0 กับ 1 ด้วย dict ที่มี
- key 'shape' ที่มี value เป็น
       tuple 2 ช่องเก็บจำนวนแถวและจำนวนคอลัมน์
- key 'data' ที่มี value เป็น dict ที่มี
    - key   เป็นเลขแถว
    - value เป็นลิสต์เก็บเลขคอลัมน์ในแถวนั้นที่มีข้อมูลเป็น 0
    - คำว่าเลขแถวเลขคอลัมน์ คืออินเด็กซ์ของแถวและคอลัมน์
เช่น ตาราง
    1111111
    1110110
    1000001
    1111111
    1111011
    1111111
เก็บด้วย dict
    {
      'shape': (6,7),
      'data': {
                0: [],
                1: [3,6],
                2: [3,1,2,4,5],
                4: [4]
              }
    }
ให้สังเกตว่า แถว 0, 3 และ 5 ไม่มีเลข 0 เลย 
อาจมีหรือไม่มีเลขแถวใน dict ก็ได้

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

เช่น ตาราง
    10111
    01001
    10011
    11111
แทนด้วย 
    x = {
          'shape': (4,5),
          'data' : {0:[1], 1:[0,2,3], 2:[1,2]}
        }
คำสั่ง f(x) จะคืน [0, 1]
Solution:
def f(x):
  R = x['shape'][0]
  d = x['data']
  a = []
  for i in range(R):
    for j in range(i+1, R):
      si = sj = set()
      if i in d: si = set(d[i])
      if j in d: sj = set(d[j])
      a.append((len(si | sj)-len(si&sj), [i,j]))
  return max(a)[1]
<1>
เราสามารถจัดเก็บตารางที่มีแต่เลข 0 กับ 1 ด้วย dict ที่มี
- key 'shape' ที่มี value เป็น
       tuple 2 ช่องเก็บจำนวนแถวและจำนวนคอลัมน์
- key 'data' ที่มี value เป็น dict ที่มี
    - key   เป็นเลขแถว
    - value เป็นลิสต์เก็บเลขคอลัมน์ในแถวนั้นที่มีข้อมูลเป็น 0
    - คำว่าเลขแถวเลขคอลัมน์ คืออินเด็กซ์ของแถวและคอลัมน์
เช่น ตาราง
    1111111
    1110110
    1000001
    1111111
    1111011
    1111111
เก็บด้วย dict
    {
      'shape': (6,7),
      'data': {
                0: [],
                1: [3,6],
                2: [3,1,2,4,5],
                4: [4]
              }
    }
ให้สังเกตว่า แถว 0, 3 และ 5 ไม่มีเลข 0 เลย 
อาจมีหรือไม่มีเลขแถวใน dict ก็ได้

จงเขียนฟังก์ชัน f(x)
- รับ x เป็น dict ที่แทนตารางในลักษณะข้างต้น
- คืนลิสต์ของลิสต์ [i,j] ต่าง ๆ ที่
  - i น้อยกว่า j
  - i กับ j เป็นเลขแถวของคู่แถวที่เมื่อพิจารณารวมกัน
    จะมี 0 อยู่ครบทุกคอลัมน์
  - ลำดับของข้อมูลในลิสต์ผลลัพธ์จะเป็นอย่างไรก็ได้

เช่น ตาราง
    1011
    0110
    1001
    0100
แทนด้วย 
    x = {
         'shape': (4,4),
         'data' : {0:[1], 1:[0,3], 2:[1,2],
                   3:[0,2,3]}
        }
คำสั่ง f(x) จะคืน [[0, 3], [1, 2], [2, 3]]
Solution:
def f(x):
  out = list()
  R,C = x['shape']
  d = x['data']
  for i in range(R):
    for j in range(i+1, R):
      si = sj = set()
      if i in d: si = set(d[i])
      if j in d: sj = set(d[j])
      if len(si | sj) == C:
        out.append([i,j])
  return out
<1>
เราสามารถจัดเก็บตารางที่มีแต่เลข 0 กับ 1 ด้วย dict ที่มี
- key 'shape' ที่มี value เป็น
       tuple 2 ช่องเก็บจำนวนแถวและจำนวนคอลัมน์
- key 'data' ที่มี value เป็น dict ที่มี
    - key   เป็นเลขแถว
    - value เป็นลิสต์เก็บเลขคอลัมน์ในแถวนั้นที่มีข้อมูลเป็น 0
    - คำว่าเลขแถวเลขคอลัมน์ คืออินเด็กซ์ของแถวและคอลัมน์
เช่น ตาราง
    1111111
    1110110
    1000001
    1111111
    1111011
    1111111
เก็บด้วย dict
    {
      'shape': (6,7),
      'data': {
                0: [],
                1: [3,6],
                2: [3,1,2,4,5],
                4: [4]
              }
    }
ให้สังเกตว่า แถว 0, 3 และ 5 ไม่มีเลข 0 เลย 
อาจมีหรือไม่มีเลขแถวใน dict ก็ได้

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

เช่น ตาราง
    101
    010
    100
    111
แทนด้วย 
    x = {
          'shape': (4,3),
          'data' : {0:[1], 1:[0,2], 2:[1,2]}
        }
คำสั่ง f(x) จะคืน [(0,1), (0,3), (1,3), (2,3)]
Solution:
def f(x):
  out = list()
  R = x['shape'][0]
  d = x['data']
  for i in range(R):
    for j in range(i+1, R):
      si = sj = set()
      if i in d: si = set(d[i])
      if j in d: sj = set(d[j])
      if len(si & sj) == 0:
        out.append((i,j))
  return out
<1>
เราสามารถจัดเก็บตารางที่มีแต่เลข 0 กับ 1 ด้วย dict ที่มี
- key 'shape' ที่มี value เป็น
       tuple 2 ช่องเก็บจำนวนแถวและจำนวนคอลัมน์
- key 'data' ที่มี value เป็น dict ที่มี
    - key   เป็นเลขแถว
    - value เป็นลิสต์เก็บเลขคอลัมน์ในแถวนั้นที่มีข้อมูลเป็น 0
    - คำว่าเลขแถวเลขคอลัมน์ คืออินเด็กซ์ของแถวและคอลัมน์
เช่น ตาราง
    1111111
    1110110
    1000001
    1111111
    1111011
    1111111
เก็บด้วย dict
    {
      'shape': (6,7),
      'data': {
                0: [],
                1: [3,6],
                2: [3,1,2,4,5],
                4: [4]
              }
    }
ให้สังเกตว่า แถว 0, 3 และ 5 ไม่มีเลข 0 เลย 
อาจมีหรือไม่มีเลขแถวใน dict ก็ได้

จงเขียนฟังก์ชัน f(x)
- รับ x เป็น dict ที่แทนตารางในลักษณะข้างต้น
- คืนลิสต์ของ tuple (i,j) ต่าง ๆ ที่
  - i น้อยกว่า j
  - i กับ j เป็นเลขแถวของคู่แถวที่มี 0 อยู่ใน
    คอลัมน์เดียวกันอย่างหนึ่งคอลัมน์ของสองแถวนั้น
  - ลำดับของข้อมูลในลิสต์ผลลัพธ์จะเป็นอย่างไรก็ได้

เช่น ตาราง
    101
    010
    100
    111
แทนด้วย 
    x = {
          'shape': (4,3),
          'data' : {0:[1], 1:[0,2], 2:[1,2]}
        }
คำสั่ง f(x) จะคืน [(0, 2), (1, 2)]
Solution:
def f(x):
  out = list()
  R = x['shape'][0]
  d = x['data']
  for i in range(R):
    for j in range(i+1, R):
      si = sj = set()
      if i in d: si = set(d[i])
      if j in d: sj = set(d[j])
      if len(si & sj) > 0:
        out.append((i,j))
  return out
<1>
เราสามารถจัดเก็บตารางที่มีแต่เลข 0 กับ 1 ด้วย dict ที่มี
- key 'shape' ที่มี value เป็น
       tuple 2 ช่องเก็บจำนวนแถวและจำนวนคอลัมน์
- key 'data' ที่มี value เป็น dict ที่มี
    - key   เป็นเลขแถว
    - value เป็นลิสต์เก็บเลขคอลัมน์ในแถวนั้นที่มีข้อมูลเป็น 0
    - คำว่าเลขแถวเลขคอลัมน์ คืออินเด็กซ์ของแถวและคอลัมน์
เช่น ตาราง
    1111111
    1110110
    1000001
    1111111
    1111011
    1111111
เก็บด้วย dict
    {
      'shape': (6,7),
      'data': {
                0: [],
                1: [3,6],
                2: [3,1,2,4,5],
                4: [4]
              }
    }
ให้สังเกตว่า แถว 0, 3 และ 5 ไม่มีเลข 0 เลย 
อาจมีหรือไม่มีเลขแถวใน dict ก็ได้

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

เช่น ตาราง
    1011
    0110
    1001
    0100
แทนด้วย 
    x = {
         'shape': (4,4),
         'data' : {0:[1], 1:[0,3], 2:[1,2],
                   3:[0,2,3]}
        }
คำสั่ง f(x) จะคืน [(0, 3), (1, 2), (2, 3)]
Solution:
def f(x):
  out = list()
  R,C = x['shape']
  d = x['data']
  for i in range(R):
    for j in range(i+1, R):
      si = sj = set()
      if i in d: si = set(d[i])
      if j in d: sj = set(d[j])
      if len(si | sj) == C:
        out.append((i,j))
  return out