|
|
|
ช่วยดูโค้ดให้ทีครับ แบบว่าที่ผมเขียนมา มันวนรอบเยอะเกินไปทำให้ช้า ช่วยตัดตอนให้มันทำงานได้เร็วๆให้ทีได้ไหมครับ ขอบคุณมากครับทุกคน |
|
|
|
|
|
|
|
ฟังก์ชั่น vowelcount เป็นฟังก์ชั่นนับสระครับ
คือ เอาตัวอักษรในอาร์เรย์ a ออกมา 6 ตัวให้มีทุกเหตุการณ์ครับ แล้วถ้าอันไหนซ้ำกันให้เอาออก
สระน้อยกว่า 2 ตัวก็เอาออก
พอได้คำแล้ว ก็เอาที่ได้จากทีแรก มาเพิ่มอีก 2 ตัว จาก aa-zz ครับ แล้วผมจะเอาที่ได้ทั้งหมดไปทำอย่างอื่นอีกที สั่งประมวลผลทั้งคืน ตื่นมายังไม่เสร็จเลยครับ ขอบคุณมากนะครับ
ด้านล่างนี้เป็นโค้ดที่เขียนขึ้นครับ 6 ตัวแรกใช้เวลาไม่ถึงนาทีก็ได้ละครับ พอเพิ่มมาอีก 2 ตัว รอเป็นวันเลย
Code (PHP)
<?
include"connect.php";
function vowelcount($a){
$a1=substr($a,0,1);
$a2=substr($a,1,1);
$a3=substr($a,2,1);
$a4=substr($a,3,1);
$a5=substr($a,4,1);
$a6=substr($a,5,1);
if($a1=="A"||$a1=="E"||$a1=="I"||$a1=="O"||$a1=="U"){
$a1=1;
}else{
$a1=0;
}
if($a2=="A"||$a2=="E"||$a2=="I"||$a2=="O"||$a2=="U"){
$a2=1;
}else{
$a2=0;
}
if($a3=="A"||$a3=="E"||$a3=="I"||$a3=="O"||$a3=="U"){
$a3=1;
}else{
$a3=0;
}
if($a4=="A"||$a4=="E"||$a4=="I"||$a4=="O"||$a4=="U"){
$a4=1;
}else{
$a4=0;
}
if($a5=="A"||$a5=="E"||$a5=="I"||$a5=="O"||$a5=="U"){
$a5=1;
}else{
$a5=0;
}
if($a6=="A"||$a6=="E"||$a6=="I"||$a6=="O"||$a6=="U"){
$a6=1;
}else{
$a6=0;
}
$total=$a1+$a2+$a3+$a4+$a5+$a6;
return $total;
}
$z=0;
$a=array("A","A","B","B","C","C","D","D","E","E","E","F","G","G","H","I","I","K","L","L","M","M","N","N","O","O","P","R","R","S","S","T","T","U","U","V","Y");
$with=array("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z");
for($c1=0;$c1<32;$c1++){
if($a[$c1]==$t){
continue;
}
$t=$a[$c1];
for($c2=1;$c2<33;$c2++){
if($c1>=$c2){
continue;
}
if($a[$c2]==$u){
continue;
}
$u=$a[$c2];
for($c3=2;$c3<34;$c3++){
if($c2>=$c3){
continue;
}
if($a[$c3]==$v){
continue;
}
$v=$a[$c3];
for($c4=3;$c4<35;$c4++){
if($c3>=$c4){
continue;
}
if($a[$c4]==$w){
continue;
}
$w=$a[$c4];
for($c5=4;$c5<36;$c5++){
if($c4>=$c5){
continue;
}
if($a[$c5]==$x){
continue;
}
$x=$a[$c5];
for($c6=5;$c6<37;$c6++){
if($c5>=$c6){
continue;
}
if($y==$a[$c6]){
continue;
}
$b=$a[$c1].$a[$c2].$a[$c3].$a[$c4].$a[$c5].$a[$c6];
if(vowelcount($b)<2){
continue;
}
print"$b<br>";
$y=$a[$c6];
for($i1=0;$i1<26;$i1++){ //ตรงนี้
for($i2=0;$i2<26;$i2++){
$cc=$b.$with[$i1].$with[$i2];
print" = $cc<br>";
}
} // ถึงตรงนี้ครับ ทำให้นานมากมาย
}
}
}
}
}
}
?>
Tag : PHP
|
|
|
|
|
|
Date :
2010-11-06 10:36:41 |
By :
monotakari |
View :
1244 |
Reply :
24 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ดูไม่ออกว่าเอาไว้ทำอะไรครับ
|
|
|
|
|
Date :
2010-11-06 10:49:46 |
By :
:) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ลองยกตัวอย่างงานที่ทำอยู่หน่อยได้ไหมครับ ยังงงๆ กับโปรแกรมอยู่
เอาตัวอักษรในอาร์เรย์ a ออกมา 6 ตัวให้มีทุกเหตุการณ์ <== หมายความว่าอย่างไรครับ มีตัวอย่างไหมครับ
อันไหนซ้ำกันให้เอาออก สระน้อยกว่า 2 ตัวก็เอาออก <== ตรงนี้หมายความว่าอย่างไรครับ เอาอะไรออก ดูจากด้านบนที่ substr มันออกมา ตัวละ 1 อักษรอยู่น่ะครับ เลยงงๆคำถาม + โจทก์
Code (PHP)
$a1=substr($a,0,1);
$a2=substr($a,1,1);
$a3=substr($a,2,1);
$a4=substr($a,3,1);
$a5=substr($a,4,1);
$a6=substr($a,5,1);
if($a1=="A"||$a1=="E"||$a1=="I"||$a1=="O"||$a1=="U"){
$a1=1;
}else{
$a1=0;
}
if($a2=="A"||$a2=="E"||$a2=="I"||$a2=="O"||$a2=="U"){
$a2=1;
}else{
$a2=0;
}
if($a3=="A"||$a3=="E"||$a3=="I"||$a3=="O"||$a3=="U"){
$a3=1;
}else{
$a3=0;
}
if($a4=="A"||$a4=="E"||$a4=="I"||$a4=="O"||$a4=="U"){
$a4=1;
}else{
$a4=0;
}
if($a5=="A"||$a5=="E"||$a5=="I"||$a5=="O"||$a5=="U"){
$a5=1;
}else{
$a5=0;
}
if($a6=="A"||$a6=="E"||$a6=="I"||$a6=="O"||$a6=="U"){
$a6=1;
}else{
$a6=0;
}
$total=$a1+$a2+$a3+$a4+$a5+$a6;
return $total;
}
โค้ดด้านบน เอาไว้ทำอะไรครับ
เปลี่ยนเป็น
Code (PHP)
for ($i=0; $i<=5; $i++) {
$a[] = substr('AEST',$i,1);
$a[$i] = ($a[$i]=='A' || $a[$i]=='E' || $a[$i]=='I' || $a[$i]=='O' || $a[$i]=='U')?1:0;
$total=$total+$a[$i];
}
return $total;
น่าจะสั้นกว่านะครับ
เคล็ดลับให้โปรแกรมทำงานเร็ว ตัวไหนที่เป็น String หรือค่าที่แน่นอนตายตัว ให้ใส่เป็น Single Quote แทนดีกว่าครับ '
เพราะถ้าใช้ Double Quote มันจะต้องไปดูก่อนว่า ไอตัวที่อยู่ข้างในเป็นตัวแปรรึเปล่า แต่ถ้าใช้ ' ไม่ต้องดูเลยเลย เป็นยังไง ก็ออกมาอย่างนั้น
|
ประวัติการแก้ไข 2010-11-06 11:36:18 2010-11-06 11:42:48 2010-11-06 11:43:39
|
|
|
|
Date :
2010-11-06 11:34:49 |
By :
adaaugusta |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ขอบคุณครับคุณกะล่อน อันแรกอะครับ เช็คดูสระครับ ว่ามีสระกี่ตัวใน 1 คำ
ผลลัพธ์ที่ออกมาอะครับ จะได้
AABBCC
AABBCD
AABBCE
AABBCF
AABBCG
AABBCH
AABBCI
AABBCK
AABBCL
AABBCM
AABBCN
AABBCO
AABBCP
AABBCR
AABBCS
AABBCT
AABBCU
AABBCV
AABBCY
AABBDD
AABBDE
AABBDF
AABBDG
AABBDH
AABBDI
AABBDK
AABBDL
AABBDM
AABBDN
AABBDO
AABBDP
AABBDR
AABBDS
AABBDT
.............
.............
.............
ประมาณนี้อะครับ
ตอนนี้กำลังประมวลผลคำศัพท์ภาษาอังกฤษอะครับ เก็บไว้ท่อง
แต่เวลาท่องไม่ได้ท่องแบบนี้หรอกครับ ในฐานข้อมูลผมมีฟิลด์คำศัพท์ แล้วอีกฟิลด์หนึ่งก็ เรียงลำดับตัวอักษรของคำนั้นอะครับ
|
|
|
|
|
Date :
2010-11-06 12:13:25 |
By :
monotakari |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
แล้วส่วนล่าง เอาไว้ทำอะไรเหรอครับ
|
|
|
|
|
Date :
2010-11-06 12:32:14 |
By :
adaaugusta |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ไอ้ for ซ้อนๆกันหลายๆอันรึป่าวครับ
ถ้าเป็นอันนั้นอะครับ คือ for 1 ชั้นแทนตัวอักษรที่ 1 for ชั้นที่ 2 แทนตัวอักษรที่ 2
คือ ถ้าสมมติเป็นตัวเลขนะครับ
เลข 4 ตัว ผมรันจาก
1234 ต่อไป จนถึง 1239 แล้วก็เริ่มใหม่เป็น 1245 1246........1249
จำนวนถัดไปต้องมากกว่าจำนวนข้างหน้าเสมอ ถือเป็นการเรียงลำดับไปด้วยในตัว
ผมอธิบายได้ งง ไปไหมครับ เหอะๆ
อย่างไรก็ดี ผลลัพธ์ผมได้แล้วครับ แต่ถ้าจะเอาแนวคิดที่ผมคิดมา ไปประมวลผลร่วมกับอย่างอื่น มันช้ามากเลยครับ
ผลลัพธ์ออกมามันได้ 6 หมื่นกว่าแถว เอาไปเพิ่มเข้ากับเหตุการณ์ของคำศัพท์ 2 ตัวอักษร อีก 676 เหตุการณ์ เอาไปประมาลผล
กับฐานข้อมูลอีก 4 แสนกว่าเรคอร์ด เป็น 60,000*676*400,000 เยอะมากมายครับ
เคยทำมาแล้วทีนึง แต่คอมพังแล้ว format เครื่องหายหมด ครั้งนั้นที่ทำ เปิดเครื่องเอาไว้หลายวันเลยกว่าจะเสร็จครับ มันรอน่ะรอได้ครับ แต่เครื่องจะพังก่อน เหอะๆ จำไม่ได้ว่าตอนนั้นเขียนโค้ดยังไง ก็เลยต้องทำใหม่อีกที ยังไงก็ขอบคุณคุณกะล่อนด้วยนะครับ
ถ้าไม่สะดวกก็บอกวิธีก็ได้ครับ จะลองดู ขอบคุณครับ
|
ประวัติการแก้ไข 2010-11-06 13:00:31
|
|
|
|
Date :
2010-11-06 12:48:09 |
By :
monotakari |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ยกตัวอย่าง input output ด้วยก็ดีนะ อ่านแล้วก็งงด้วยคน
|
|
|
|
|
Date :
2010-11-06 14:53:12 |
By :
PlaKriM |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
หง่ะ เอาใหม่เลยแล้วกันนะครับ
จากอาร์เรย์
Code (PHP)
$a=array("A","A","B","B","C","C","D","D","E","E","E","F","G","G","H","I","I","K","L","L","M","M","N","N","O","O","P","R","R","S","S","T","T","U","U","V","Y");
คือตอนแรก เบี้ยครอสเวิร์ดมัน มี 100 ตัว แผมเอาที่จำเป็นมาเท่านี้ครับ
จับขึ้นมา 6 ตัวอักษรโดยเรียงลำดับจาก a-z เลยครับ เอาทุกเหตุการณ์ที่สามารถเป็นไปได้
ประมวลผลแล้วคำไหนซ้ำตัดออก สระไม่ถึง 2 ตัว ตัดออก
โดยบรรทัดที่ 2-42 เป็นฟังก์ชั่นนับสระครับว่ามีกี่ตัว บรรทัดที่ 46 เป็นต้นไป เป็นการวนรอบ 6 ครั้ง รอบละ 32
โดยที่การวนรอบชั้นที่ 1 แทนตัวอักษรที่ 1 ครับ วนรอบชั้นที่ 2 แทนตัวอักษรที่ 2 ไปจนกระทั่ง 6 ตัว
บรรทัดที่ 52-54 เช็คไม่ให้ตัวเลขลำดับของอาร์เรย์มากกว่า ลำดับถัดไปครับ บรรทัดที่ 54-57 เป็นการเช็คไม่ให้ตัวอักษรของรอบปัจจุบันซ้ำกับรอบที่แล้วครับ
|
|
|
|
|
Date :
2010-11-06 17:48:09 |
By :
monotakari |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ตัวอย่าง output บางส่วนครับคุณ plakrim
BCENOY
BCENPU
BCENUV
BCENUY
BCEOOP
BCEOOR
BCEOOS
BCEOOT
BCEOOU
BCEOOV
BCEOOY
BCEOPR
BCEOPS
BCEOPT
BCEOPU
BCEOPV
BCEOPY
BCEORR
BCEORS
BCEORT
BCEORU
BCEORV
BCEORY
BCEOSS
BCEOST
BCEOSU
BCEOSV
BCEOSY
BCEOTT
BCEOTU
BCEOTV
BCEOTY
BCEOUU
BCEOUV
BCEOUY
BCEPRU
BCEPUV
BCEPUY
BCERRU
BCERUV
BCERUY
BCESSU
BCESUV
BCESUY
BCETTU
BCETUV
BCETUY
BCEUUV
BCEUUY
BCFGII
BCFGIO
BCFGIU
BCFGOO
BCFGOU
BCFHII
BCFHIO
BCFHIU
BCFHOO
BCFHOU
BCFIIK
BCFIIL
BCFIIM
BCFIIN
BCFIIO
BCFIIP
BCFIIR
BCFIIS
BCFIIT
BCFIIU
BCFIIV
BCFIIY
BCFIKO
BCFIKU
BCFILO
BCFILU
BCFIMO
BCFIMU
BCFINO
BCFINU
BCFIOO
BCFIOP
BCFIOR
BCFIOS
BCFIOT
BCFIOU
BCFIOV
BCFIOY
BCFIPU
BCFIUV
|
|
|
|
|
Date :
2010-11-06 17:58:42 |
By :
monotakari |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ฮ่าๆๆ งงกันไป เดี๋ยวผมลองอธิบายความเข้าใจผมตอนนี้นะครับ ผิดพลาดประการใด ก็แนะด้วยนะครับ งงจริงๆ
$a=array("A","A","B","B","C","C","D","D","E","E","E","F","G","G","H","I","I","K","L","L","M","M","N","N","O","O","P","R","R","S","S","T","T","U","U","V","Y");
ที่ให้มานี่ คือ ค่าที่จะนำมาเลือกออกมา 6 ตัวใช่ไหมครับ
แล้วถ้าใช่ ไอ 6 ตัวที่ว่ามีวิธีการดึงออกมายังไงครับ สุ่มออกมา หรือว่า อย่างไร
เมื่อได้ 6 ตัวข้างต้นแล้ว นำมาเรียงจาก a-z ใช่ไหมครับ
แล้วก็นำ 6 ตัวเมื่อสักครู่ที่ผ่านการเรียงแล้ว มาสลับตำแหน่งแบบต่างๆ (ทุกเหตุการณ์ 6! ถูกไหมครับ)
โดยถ้า ซ้ำให้ตัดออก(อันนี้ผมไม่เข้าใจว่าซ้ำกับอะไร) และถ้าสระน้อยกว่า 2 ตัว ให้ตัดออก ตัดออกนี้หมายถึงตัดเหตุการณ์นั้นออกไปเลยหรืออย่างไรครับ
แล้วที่บอกว่าวนรอบ 32 ครั้งนี่คือ ทำไมต้องวน 32 ครั้งมีที่มาอย่างไรครับ
ถามแค่นี้ก่อนนะครับ อิอิ หนุกดี งงๆ รู้สึกว่าท้าทาย
|
|
|
|
|
Date :
2010-11-06 18:28:31 |
By :
adaaugusta |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ผมจะ สมมติ แทนค่าเป็นตัวเลขนะครับ
1 2 3 4 5 6
1 2 3 4 5 7
1 2 3 4 5 8
1 2 3 4 5 9
1 2 3 4 6 7
1 2 3 4 6 8
1 2 3 4 6 9
1 2 3 4 7 8
1 2 3 4 7 9
1 2 3 4 8 9
1 2 3 5 6 7
1 2 3 5 6 8
1 2 3 5 6 9
1 2 3 5 7 8
1 2 3 5 7 9
1 2 3 5 8 9
ลำดับที่ในอาเรย์ของตัวข้างหน้าจะต้องน้อยกว่าตัวข้างหลังเสมอ
คือที่ วน 32 รอบ เพราะว่า ตัวที่ 1 จะใช้ข้อมูลในอาเรย์ลำดับที่ 0 - 31 = 32 รอบครับ ตัวที่ 2 ใช้ลำดับที่ 1 - 33 ก็ 32 รอบ จนถึงตัวที่ 6 ใช้ข้อมูลในอาเรย์ลำดับที่ 5 - 36 เพราะถ้าจะวนรอบจนถึงตัวที่ 36 ตัวอักษรที่ 1-5 ก็ไม่ได้ใช้อยู่ดี เพราะมัน มากกว่า หรือเท่ากับตำแหน่งของตัวถัดไป
พอจะมองออกรึยังครับ ขอบคุณมากนะครับคุณกะล่อน ที่ติดตามกระทู้ผมตลอด
|
|
|
|
|
Date :
2010-11-06 20:51:30 |
By :
monotakari |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
อืมผมดูความต้องการแล้วที่้ต้องการหาคำศัพท์ วิธีที่เขียนแบบข้างบนนี้ไม่ใช่วิธีที่ดีหรอกครับ
ควรใช้แบบนี้มากกว่าทำงานได้เหมือนกัน
$sql = "select * from tbdictionary";
$result = mysql_query($sql);
$d = array();
while($row = mysql_fetch_assoc($result)){
if (Pattern_Match($row['vocab'])){
echo $row['vocab'];
$d[] = $row['vocab'];
}
}
จากนั้นจะ sort หรือจะอะไร ก็นำข้อมูลที่ได้มา sort อีกครั้งหนึ่ง
|
|
|
|
|
Date :
2010-11-06 21:13:32 |
By :
nobitanian |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ไม่ใช่หาศัพท์ครับ อย่างนั้นเป็นขั้นตอนสุดท้ายครับ
ข้อมูลที่ได้จากการทำครั้งนี้เอาไปเปรียบเทียบกับฐานข้อมูลอีกทีหนึ่ง อันนั้นทำได้ครับ
ขอบคุณมากครับที่แสดงความคิดเห็นครับ
|
|
|
|
|
Date :
2010-11-06 21:27:12 |
By :
monotakari |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
โปรแกรมนี้มีประโยชน์อะไรครับ
|
|
|
|
|
Date :
2010-11-06 21:33:32 |
By :
nobitanian |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
loop ที่เขียนจะเจอคำศัพท์ที่ไม่มีใน dictionary มากมาย
ไม่ทำให้ท่องยากขึ้นหรือครับ
|
|
|
|
|
Date :
2010-11-06 21:58:26 |
By :
nobitanian |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ทำคำศัพท์ไว้ท่อง ผมไม่เข้้าใจอยู่ดีว่ามันจะออกมายังไง บางทีมันอาจจะมีวิธีที่ดีกว่านี้ก็ได้ แต่ผมยังไม่เข้าใจว่าต้องการอะไร
ท่องศัพท์ ทำไมไม่หาโปรแกรมพจนานุกรมมาท่อง
|
|
|
|
|
Date :
2010-11-06 22:07:21 |
By :
PlaKriM |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
คุณ plakrim เคยเล่นครอสเวิร์ดเกมไหมครับ
มันจะมีสูตรสำหรับบิงโกให้ท่องอะครับ นั่นแหละครับ ที่ผมต้องการ ทำเป็นสูตรครับ มันจะง่ายต่อการท่องครับ
|
|
|
|
|
Date :
2010-11-06 22:21:20 |
By :
monotakari |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ก็กำลังทำคำตั้งต้นของสูตรอยู่นี่ไงครับ พอได้คำตั้งต้นแล้ว เอาไป + เข้ากับ aa-zz อีก 676 เหตุการณ์ครับ กลายเป็น ที่กำลังคำนวนนี้ * กับ 676 ซึ่งมันช้ามากมายครับ
|
|
|
|
|
Date :
2010-11-07 01:12:25 |
By :
monotakari |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
สูตรตั้งต้น มันก็พอได้แล้วนะครับ พอเอาไปคำนวนอีกอย่างที่ผมบอก 676 เหตุการณ์ แล้วเอาแต่ละเหตุการไปเปรียบเทียบกับศัพท์ในฐานข้อมูล
ถ้าสูตรตั้งต้น 1 ตัว ที่เป็นปัญหาอยู่ตอนนี้อะครับ สามารถนำไปผสมกับ AA - ZZ 676 ชุดอย่างที่ว่า ได้มากกว่า 50 ชุด ผมถึงจะนับเป็น 1 สูตร แล้ว print คำศัพท์ที่มี ไปเก็บไว้อีกทีอะครับ ยกตัวอย่างนะครับ
AEIRST นี่คือคำตั้งต้นที่คำนวนได้ในขั้นตอนแรกครับ
AD, AH, AM, AN, AP, AS, AT, AV, AW, BD, BK, BL, BM, BN, BR, BT, BV, BY, CD, CG,CH, CL, CM, CN, CP, CR, CS, CT, CU, CZ, DD, DE, DH, DL, DM, DN, DO, DP, DS, DT, DW, EE, EH, EL, EM,EN, EP, ER, ES, ET, EW, EY, FG, FI, FL, FN, GG, GL, GM, GN, GP, GV, HI, HN, HO, HP, HR, HU, HW, HY,IM, IN, IP, IR, IS, IW, IX, IZ, JO, KL, KM, KN, KS, LL, LM, LN, LP, LR, LS, LT, LU, MM, MN, MO, MP,MS, MT, MU, MV, MW, MX, NN, NO, NP, NR, NS, NT, NU, NW, OR, OT, OU, OV, PP, PR, PS, PV, PW, PY, RR,RS, RT, RW, SS, ST, SW, TT, TW, TZ, UZ, VY
เหล่านี้ คือ ตัวอักษรที่สามารถนำไปผสมกับ AEIRST แล้วได้เป็นคำใหม่ขึ้นมาครับ
|
|
|
|
|
Date :
2010-11-07 01:24:49 |
By :
monotakari |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 03
|