เสี่ยงโชค
"โชคร้ายพี่ลืมกลับเลข ไม่งั้นล่ะก็นะ~~~~" เสียงบ่นจากพี่ที่ผมรู้จัก ซึ่งเป็นเหมือนคำพูดติดปากของแกในทุกวันที่ 1 และวันที่ 16 ของทุกเดือน เอาล่ะครับผมว่าหลายคนก็พอที่จะเดาออกว่ามันเป็นคำบ่นเกี่ยวกับเรื่องอะไรใช่ไหมครับ😂 พี่แกเล่นทียาวเป็นหางว่าวเลย🤭
ในใจผมก็คิดไปหลายอย่าง ไม่ว่าจะเป็นสงสารที่แกเฉียดตลอดไม่โดนเต็มๆ สักทีจะมีก็แต่ถูกเขากิน แต่อีกใจก็คิดว่าพี่ไม่น่าเล่นเลยเสียดายตังค์เปอร์เซ็นถูกมันน้อย ผมว่าเล่นหุ้นยังจะดูมีลุ้นมากกว่าเพราะ อย่างน้อยๆ ก็มีข้อมูลให้เราได้เลือกตัดสินใจ
แต่สิ่งนี้ก็เหมือนจะเป็นส่วนหนึ่งของสังคมบ้านเราไปเสียแล้ว และผมก็เชื่อด้วยว่าทั่วโลกก็เล่นกัน สำหรับผมนานๆ ทีก็มีซื้อสลากกินแบ่งรัฐบาลบ้าง เอาไว้ให้ได้ฝันดีก่อนวันประกาศผล เอาไว้คุยกับครอบครัวว่าจะเอาเงินไปทำอะไรบ้าง ให้ได้พอยิ้มกัน
สร้างฟังก์ชั่นแก้ปัญหา
เมื่อผมมองว่ามันเป็นปัญหาที่หลายคนน่าจะเคยเจอเหมือนๆ กัน ผมเลยเอามันมาแปลงเป็นโจทย์เพื่อ exercise ตัวเองสักหน่อย
วันนี้เราจะมาลองสร้าง ฟังก์ชั่นความน่าจะเป็น สำหรับเลขท้าย 2 ตัวและ 3 ตัวกัน โดยจะใช้หลัก ความน่าจะเป็น
ตัวอย่าง สมมุติว่าพี่เขาทำการซื้อเลข 2 ตัว คือ 12 โดยมากแล้วคนส่วนใหญ่จะซื้อเลขกลับด้วย ซึ่งนั่นก็คือ 21 ดังนั้น สรุปได้ว่าเมื่อพี่เขามีเลข 2 ตัวที่ชอบอยู่แล้ว พี่เขาก็มักจะซื้อเลขกลับด้วย ดังนั้นพี่เขาก็จะทำการซื้อเลข 12 และ 21
เข้าใจง่ายใช่ไหมครับ แต่ถ้ามันเป็นเลข 3 ตัวล่ะ และในกรณีที่พี่เขาไม่ได้ซื้อเลขโต๊ด แล้วเลขที่พี่เขาซื้อมันออกรางวัลด้วยเพียงแต่พี่เขาไม่ถูกเพราะเลขที่ออกกับเลขที่พี่เขาซื้อมันสลับตำแหน่งกันล่ะ!! เฮ้อ~ มันก็คงจะวนเข้าลูปเดิมเช่นเคย คือ บ่นว่าเฉียดแค่นิดเดียว แต่ถ้าพี่เขาไล่ซื้อเลขกลับของ เลข 3 ตัวทั้งหมดไปแล้วถึงแม้ว่ามันไม่ถูกมันก็อาจไม่ทำให้พี่เขารู้เสียดาย เพราะอย่างไรเสียพี่แกก็เล่นซื้อยาวเป็นหางว่าวอยู่แล้ว🤭
โจทย์ 👩🏫
ดังนั้น เราก็จะได้โจทย์ในการ exersice คือ จงสร้างฟังก์ชั่นสำหรับกลับเลข 2 สองตัว และเลข 3 ตัว เพื่อหาชุดเลขจากความน่าจะเป็นทั้งหมด เพื่อที่ว่าพี่เขาจะได้ไม่ต้องมานั่งเสียใจทีหลัง เมื่อเลขที่พี่เขาซื้อมันเฉียดแต่ไม่ถูกรางวัล
ตัวอย่าง พี่เขาได้เลย เด็ด 2 ตัว และ 3 ตัว มาจากการไปถูกต้นไม้ศักดิ์สิทมาจากวัดนั่งเทียน จังหวัด เขียนเอา โดยที่เลข 2 ตัวที่ได้มาจากการโรยแป้งและถูต้นไม้ พี่เขาเห็นเป็นเลข 64 และเลข 639 งวดนี้พี่เขาเห็นได้อย่างชัดเจนอย่างที่ไม่เคยเป็นมาก่อน ดังนั้นพี่เขามั่นใจว่าต้องถูกแน่นวล~ แต่ด้วยความที่เราเป็นห่วงพี่ ดังนั้นเราเลยต้องเขียนฟังก์ชั่นเพื่อช่วยกลับเลขที่พี่เขาไปได้มาดังนี้
ต้องขอขอบคุณ Permutations - all possible sets of numbers
<?php
function pc_permute(array $items, array $perms = [ ])
{
if (empty($items)) {
$return = [$perms];
} else {
$return = [];
for ($i = count($items) - 1; $i >= 0; --$i) {
$newitems = $items;
$newperms = $perms;
list($foo) = array_splice($newitems, $i, 1);
array_unshift($newperms, $foo);
$return = array_merge($return, pc_permute($newitems, $newperms));
}
}
return $return;
}
สำหรับโค้ดตัวด้านบนนั้นเป็นฟังก์ชั่นที่เอาไว้สำหรับหา ชุดตัวเลขที่เป็นไปได้ทั้งหมด จากตัวเลขเด็ดที่เราได้มา โดยจะรับค่าในรูปแบบ อาเรย์ ในชื่อ $item
ส่วน $perms
ให้ปล่อยว่างไว้ เพราะมันเอาไว้ใช้สำหรับการเรียงสลับชุดตัวเลขที่เราจะทำการค้นหาความเป็นไปได้
<?php
function all_possibility($number)
{
$digits = pc_permute(str_split($number));
$result = [];
foreach ($digits as $data) {
$result[] = (int) implode("", $data);
}
$result = array_unique($result);
sort($result);
return $result;
}
เราสร้างฟังก์ชั่นอีกฟังก์ชั่นหนึ่งขึ้นมาเพื่อจัดการข้อมูล input และ output และเพื่อให้ง่ายต่อการป้อนข้อมูล เพราะฟังก์ชั่น pc_permute
ของเรานั้นรับค่าเป็น อาเรย์ ในการค้นหาค่าที่เป็นไปได้ทั้งหมดและคืนค่าออกมาในรูปแบบอาเรย์ ที่ย่อยตัวเลขออกเป็นชั้นๆอีกที ถ้าหากสงสัยหรือนึกภาพไม่ออก ก็ลองเอาฟังก์ชั่น pc_permute
ไปรันเพื่อดูผลลัพธ์ก่อนได้ครับ
เท่านี้เราก็จะได้ฟังก์ชั่นหาค่าที่เป็นไปได้จากการสลับตำแหน่งไปมาของเลขเด็ดที่เราได้มาแล้วครับ ฟังก์ชั่นตัวนี้เป็นการหาค่าความน่าจะเป็นทั้งหมดของตัวเลขที่เราป้อนเข้าไป แต่สิ่งที่ผมต้องการคือแค่หาค่าของเลขสามตัว เพราะเลขสองตัวเราก็สามารถกลับเลขได้เองง่ายๆ อยู่แล้วใช่ไหมล่ะครับ แต่ถ้าเป็นเลขสามตัวก็อาจต้องใช้กระดาษหรือเวลาเพิ่มขึ้นหน่อย แต่เมื่อมีฟังก์ชั่นนี้ก็จะทำให้การซื้อเลขของคุณง่ายมากยิ่งขึ้นครับ
ทดสอบกับเลข 2 ตัว ที่พี่เขาไปได้มาจากต้นไม้ศักดิ์สิทธิ์
// เมื่อเราทำการรันเลข 64
all_possibility(64);
// ผลลัพธ์ที่ได้ก็จะเป็น
array:2 [
0 => 46
1 => 64
]
ทดสอบกับเลข 3 ตัว ที่พี่เขาไปได้มาจากต้นไม้ศักดิ์สิทธิ์
// เมื่อเราทำการรันเลข 639
all_possibility(639);
// ผลลัพธ์ที่ได้ก็จะเป็น
array:6 [
0 => 369
1 => 396
2 => 639
3 => 693
4 => 936
5 => 963
]
คราวนี้ถ้าเลขมันออกตามที่พี่เขาซื้อไว้เพียงแต่มันสลับตำแหน่งกัน พี่เขาก็จะได้เต็มๆ (บางคนคงสงสัยว่าทำไมไม่โต๊ด เอาเป็นว่าพี่เขาไม่ชอบซื้อโต๊ดก็แล้วกันครับ) ดังนั้นจึงสรุปได้ว่าพี่เขาอาจไม่ต้องมานั่งเสียใจ และเสียโอกาสในการเป็นเศรษฐีในงวดที่กำลังจะมาถึงนี้นั่นเอง
จบแล้วครับ
Top comments (0)