Skip to main content

4 бэрх

Нүүдэлчдийн эртний тоглоомуудын нэг болох шагайгаар тоглож үзээгүй хүн бараг байхгүй биз. Маниусыг ухаан орж байх үед зах зээл хэмээгч рүү дөнгөж орж байсан болоод ч тэр үү, шагайнаас өөр тоглочихмоор юм ч бараг байдаггүй байсан. Морь уралдуулах, шагай таалцах, шагай шүүрэх, дөрвөн бэрх орхих гээд л мөн ч сайхан тоглоомууд байж билээ.
Гэснээс зарим хоолны газрууд ширээн дээрээ 4 шагай, мэргэлэх хүснэгтийн хамт тавьсан харагддаг. Хүснэгт нь 24 боломжтой байдаг ба заримдаа тохирох хувилбар олдохгүй, самгардах үе бишгүй тохиолддог. Ингэхэд 4 шагайг хаяхад нийтдээ хэдэн янзаар буух вэ? Алгебрын аргаар амархан тооцоолчхож болно л доо. Гэхдээ илүү хялбар аргаар, ө.х random буюу санамсаргүйгээр тоо сонгох аргаар бодъё. 1, 2, 3, 4 нь харгалзан морь, тэмээ, хонь, ямаа байг. Тэгвэл нэлээн хэдэн удаа (бүх боломжоор буухаар) давтаж санамсаргүйгээр 4 тоо сонгоод, уг 4 тоо өмнө сонгогдсон эсэхийг шалгаад, сонгогдоогүй бол боломжийн тоогоо нэмэгдүүлээд явна гэсэн үг. Нийт боломж (давхардсан тоогоор) 4 * 4 * 4 * 4 = 256. Тэгэхээр 1000 удаа давтахад бүх ялгаатай боломж нь олдож л таараа (хүсвэл хэд ч давтаж болно л доо, тэгэх шаардлагагүй). Үүнийг python дээр бичье.
 from random import randint   
  N = 10000   
  total = 0   
  exists = []   
  for i in range(N):   
   p = [randint(1, 4) for _ in range(4)]   
   p.sort()   
   s = ''.join(map(str, p))   
   if s not in exists:   
    exists.append(s)   
    total += 1   
  exists.sort()   
  print('Total:', total)   
  print(exists)   
Хариу
 Total: 35  
 ['1111', '1112', '1113', '1114', '1122', '1123', '1124', '1133', '1134', '1144', '1222', '1223', '1224', '1233', '1234', '1244', '1333', '1334', '1344', '1444', '2222', '2223', '2224', '2233', '2234', '2244', '2333', '2334', '2344', '2444', '3333', '3334', '3344', '3444', '4444']  

Тэгэхээр нийт 35 янзаар буудаг байх нь ээ.
Амьдралд ийм төрлийн боломж, магадлал тооцоолох асуудал багагүй тохиолддог. Зарим нь ухаан хүрэхээргүй төвөгтэй байх тохиолдол ч бий. Тэр болгон толгойгоо гашилгаж, үйлээ үзэж байхаар иймэрхүү байдлаар компьютерээр тооцоолуулах нь асар их цаг хэмнэхээс гадна санамсаргүй алдаа гаргахаас сэргийлнэ. Алгебрын аргаар бодоход яг таг хариу гардаг давуу талтай ч олон удаа давтах тусам бараг л ялгаагүй хариу гарах учраас хэмнэж байгаа цаг хугацаа, биеийн амрыг бодох нь аминд өлзийтэй биз ээ.
4 бэрх буух магадлалыг алгебрын аргаар бодъё.
Нийт боломж: 4 * 4 * 4 * 4 = 256
4 өөр буух боломж: 4 * 3 * 2 * 1 = 24
4 бэрх буух магадлал: 24 / 256 = 0.09375
Харин давтахаар:
 from random import randint  
 T = 10000  
 berh = 0  
 for _ in range(T):  
   l = [randint(1, 4) for _ in range(4)]  
   if len(set(l)) == 4:  
     berh += 1  
 print()  
 print('Total:', berh)  
 print('Probably:', berh / T)  
 print('Percent: ', berh * 100 / T, '%', sep='')  
Хариу
 Total: 9347  
 Probably: 0.09347  
 Percent: 9.347%  
Бараг л ялгаагүй гарч байгаа биз? Давталтын тоогоо нэмэх тусам илүү ойртоно. Энэ мэт түмэн асуултын хариуг маш хялбараар олох боломжоор хангадаг компьютертээ л талархаж амьдаръя даа :)

Comments

Popular posts from this blog

Regular expression-ий түгээмэл хэрэглээ

    Regular expression нь string буюу текстээс тодорхой бүтэц бүхий хэсгийг хайж олох зорилготой загвар (pattern) юм. Regular expression-г regex гэж товчилдог. Бүх программчлалын хэл дээр regex-тэй ажилладаг класс, функцүүд байдаг ба тухайн хэлний онцлогоос хамаарч класс, функц нь элдэв янзаар бичигддэг боловч regex нь яг адилхан, нэг стандартын дагуу бичигдэнэ. Өдөр тутмын амьдралд түгээмэл тохиолддог зарим асуудал(бодлого)-ыг жава дээр regex ашиглаж хэрхэн хялбар шийдэж болохыг жишээгээр тайлбарлая.     Жава дээр Pattern , Matcher класуудын тусламжтайгаар хэрэгжүүлнэ. 1. Регистрийн дугаар шалгах (Эхний хоёр орон кирил том үсэг, араас нь 8 оронтой тоо) Pattern ptrn = Pattern.compile("([А-Я|Ө|Ү]{2})(\\d{8})"); Matcher matcher1 = ptrn.matcher("БИ88042515"); Matcher matcher2 = ptrn.matcher("AB88042515"); System.out.println(String.format("1: %s; 2: %s", matcher1.matches(), matcher2.matches())); Хариу: 1: true; 2: false Pattern...

Тун хэрэгцээтэй Oracle query-үүд

Query-г зөв, оновчтой бичих нь программын гүйцэтгэлийн амин сүнс болохоос гадна код бичих, тест хийх, бааг илрүүлэх үеийн ажлыг ихээхэн хөнгөвчилдөг. Энэ постоороо түгээмэл тулгардаг асуудлуудыг энгийнээр шийдэх хэдэн query-г  хүргэе. Зарим нь өдөр тутмын хар бор кодчилолд төдийлөн хэрэглэгддэгүй ч байж магадгүй. Гэхдээ харж байгаагүй юм хэрэг болдоггүй гэдэг шиг мэдэж аваад, хэрэглээд сурчихвал юм болгонд л хэрэг болохыг үгүйсгэхгүй. 1. DUAL table     Oracle дээр 1 мөр, 1 баганатай DUAL table анхнаасаа үүссэн байдаг ба ямар нэгэн илэрхийллийн үр дүнг select хийхэд ашиглавал тохиромжтой. Ж:  select SYSDATE from dual -- Системийн огоог харах select 18 * 10 from dual -- Илэрхийллийн үр дүнг харах 2. Сарын эхний өдрийг харах SELECT TRUNC (SYSDATE, 'MONTH') "First day of current month" FROM DUAL 3. Сарын сүүлийн өдрийг харах SELECT TRUNC (LAST_DAY (SYSDATE)) "Last day of current month" FROM DUAL 4. Сарын өдрийн тоог харах SELECT CAST ...