2012-08-30 29 views
2

數學廣場: 贊一個:http://www.ps-heine.de/archives/416如何用PHP創建「Math Square」謎題?

  • 一個數學廣場有從左到右,從上到下來解決。
  • 操作規則的順序不適用。
  • 每個號碼只能按時使用。

我很喜歡小學以來的這些,但不幸的是我找不到任何書。對我以爲我可以嘗試自己做一些事感到失望。

進出口仍處於概念性階段, 但讓我解釋一下步驟的,到目前爲止我已經採取了:

首先我創建一個數組$matrix

  • 它包含矩陣的每一行的數組。
  • 每個行數組包含實際行的列/單元格。
  • 每個單元格都是帶有參數「id」,「type」&「value」的數組。

查看這裏的數組的一個例子: http://pastebin.com/RdBmxvjq

在這個例子中,你已經可以看到運營商。

我有一個函數運算符(),它隨機返回一個運算符「+」,「 - 」,「*」,「/」。

自然地首先包括操作符,並且找到與矩陣一起擬合的數字比反過來容易得多。

在這一點上,我可能已經完成!

現在我只是可以放入隨機數字(當然,所以他們不重複自己),計算行的結果&列,刪除數字,讓我的拼圖完成!

如果沒有劃分運算符!

當然,我們不希望我/最終用戶試圖劃分素數或得到小數作爲結果。

現在我可以繼續循環,「暴力破解」,直到我找到最完美的數字就擺在師簽收前,但這是如此---白開水

我希望有一種方法可以初步確保所有部門導致有意識的好...結果...

任何想法?

編輯:

讓我補充一些隨機的想法我只是有這似乎有點senseful對我說:

首先,當我在拼圖更改號碼將採取上的作用整個難題。所以改變數字,包括所有類型的暴力,都是一個表現殺手(除了這個事實以外)。

所以一個合乎邏輯的結果是首先開始包括數字只在發生分割。

我們可以使用一個數字作爲我們首先通過乘以其他數字來計算的「產品」,以確保該數字不是素數並有一個因子。

但是如果其中一個因素是素數,又會發生分裂,會發生什麼?

如果我們反覆使用一個乘以另一個數字的數字來得到一個非素數因子,這將會減少我們拼圖中數字的變異性,從而使整個事物不太需要。

當我們「逆向工程」時,在謎題中乘法會發生什麼? 他們自動「成爲部門」,問題重新開始。

請讓一些數學家得的打電話給我愚蠢和呈現出令人驚訝簡單的解決方案...

+0

您需要一種查找任何其他整數的整數因子的方法。所以當你遇到一個數字後跟一個分區時,你會使用任何因素而不是任何數字。 我很感興趣,並會嘗試找到一個算法。 – Pinetree

回答

3

試試這個:

$num = integer; // the number before/
$factors = array(1, $num); // allowed numbers after/(1 and $num are always allowed) 

// loop through whole numbers up to the original $num 
for($i = 2; $i < $num ; $i++) { 
    // if $i can devide $num, save it and the other factor 
    if($num % $i == 0) { 

     // if $i is there, we have gone through all factors, no need to loop anymore 
     if(in_array($i, $factors)) { 
      break; 
     } 

     // save $i and $num/$i 
     $factors[] = $i; 
     if($i != $num/$i) { // do not save $i twice 
      $factors[] = $num/$i; 
     } 
    } 
} 

,並使用隨機數從$因素陣列後的數「/」。

關於填補了編號(僞):

R = row, C = collumn 
for(R; R < max rows; R = R+2) { // R+2 to skip sign rows 
    for(C; C < max cols; C = C+2) { // C+2 to skip sign columns 

     if(C-1 ==/&& R-1 ==/&& C >= 2 && R >= 2) { 
      find factors of C - 2; 
      find factors of R - 2; 
      select number from subsection of these (should be at least 1)     
     } 

     else if (C-1 ==/&& C >= 2) { 
      select number from factors of C-2 
     } 

     else if (R-1 ==/&& R >= 2) { 
      select number from factors of R-2 
     } 

     else { 
      select any number (maybe select just non-prime numbers here) 
     } 
    } 
} 

我討厭承認,這是所有的腦力我有今天......我會檢查出來以後,看看是否有任何有趣的發展。