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

<1>
เราสามารถจัดเก็บตารางที่มีแต่เลข 0 กับ 1 ด้วย dict ที่มี
- key 'shape' ที่มี value เป็น
       tuple 2 ช่องเก็บจำนวนแถวและจำนวนคอลัมน์
- key 'data' ที่มี value เป็น dict ที่มี
      - key   เป็นเลขแถว
      - value เป็นลิสต์เก็บเลขคอลัมน์ในแถวนั้นที่มีข้อมูลเป็น 1
      - คำว่า เลขแถว เลขคอลัมน์ ก็คือ 
        index ของแถวและคอลัมน์
เช่น ตาราง
    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 = []
  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 เป็นลิสต์เก็บเลขคอลัมน์ในแถวนั้นที่มีข้อมูลเป็น 1
      - คำว่า เลขแถว เลขคอลัมน์ ก็คือ 
        index ของแถวและคอลัมน์
เช่น ตาราง
    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 = []
  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 เป็นลิสต์เก็บเลขคอลัมน์ในแถวนั้นที่มีข้อมูลเป็น 1
      - คำว่า เลขแถว เลขคอลัมน์ ก็คือ 
        index ของแถวและคอลัมน์
เช่น ตาราง
    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 ที่คอลัมน์เดียวกันทั้ง 2 แถว คืด 1 ตัวเดียว
    - ถ้ามีมากสุดหลายคู่ ก็คืนสัก 1 คู่

เช่น ตาราง
    0100
    1001
    0110
    0000
แทนด้วย 
    x = {
          'shape': (4,4),
          'data' : {0:[1], 1:[0,3], 2:[1,2]}
        }
คำสั่ง f(x) จะคืน (1,2)
Solution:
def f(x):
  out = []
  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
      - คำว่า เลขแถว เลขคอลัมน์ ก็คือ 
        index ของแถวและคอลัมน์
เช่น ตาราง
    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 คู่

เช่น ตาราง
    0100
    1011
    0110
    0000
แทนด้วย 
    x = {
          'shape': (4,4),
          'data' : {0:[1], 1:[0,2,3], 2:[1,2]}
        }
คำสั่ง f(x) จะคืน (1,2)
Solution:
def f(x):
  out = []
  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
      - คำว่า เลขแถว เลขคอลัมน์ ก็คือ 
        index ของแถวและคอลัมน์
เช่น ตาราง
    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 = []
  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