2011-04-05 72 views
4

在電影社交網絡中存在一個整齊的序列,其中字符寫入perl腳本以從校園中的聯誼web服務器獲取圖像。他的目標是爲每個聯誼會的每個成員都拍下一張照片,其中至少會有錯過的會員。通常情況下,這只是涉及到從公共目錄或其他小環境中抓取它,例如返回所有成員的空搜索,但他描述了一個非常有趣的設置,並且從未給出解決方案。「社交網絡」編程難題

一個聯誼會的網站允許搜索並返回匹配成員的圖片。但是,如果搜索返回超過20個匹配項,則不顯示任何內容。

假設沒有其他方式來訪問圖片,並沒有列出聯誼會成員的名單,在這種情況下是否有一種優雅的方式獲得至少大多數成員圖片?或者任何方式呢?

編輯:Here's a link從電影到現場,稍微剪下來只顯示編碼部分。

+2

你確實標記了這個問題'perl' _and_' language-agnostic'? – 2011-04-05 17:30:36

+0

我認爲它專門用於perl,但也可以用任何其他腳本語言解決。編輯。 – Sean 2011-04-05 17:31:55

+1

僅供參考,有一個新的SE網站(目前處於測試階段)專門用於編程諸如此類代碼和代碼高爾夫之類的難題。你可能會得到更好的答案:http://codegolf.stackexchange.com/ – Pops 2011-04-05 17:31:57

回答

3

我還沒有看過這部電影,但讓我說出一些假設:

  • 您擁有在名稱進行搜索的搜索領域。
  • 你不知道任何聯誼會成員的名字。
  • 沒有其他方式可以訪問圖片(搜索框除外)。

在這種情況下,我不認爲有一個優雅的答案。這可能是那些電影「我用一種未知語言翻譯古代平板電腦」的片刻之一。我的猜測是你最好的選擇是進行蠻力搜索。

  1. 如果您使用通用名稱(和姓氏)進行搜索,則可以獲得大多數成員。
  2. 如果你有時間和意願,實際蠻力(逐個字母等)將最終填滿由項目錯過了差距1.

編輯: 此外,從理論上講,如果聯誼會足夠大,每個人都被命名爲「簡史密斯」,那就沒有辦法解決了。

+1

令人驚訝的是,它不是那些「按下按鈕來編程」的電影處理程序,這很好。如果我記得正確,他就放棄了這個聯誼會,因爲他不想處理這件事。感謝你的回答。 – Sean 2011-04-05 19:15:43

2
findall(prefix): 
    res = set() 
    for char in alphabet: 
     sresults = search(prefix + char) 
     if len(sresults) == 0 and len(prefix) < ABORT_SIZE: 
      res += findall(prefix + char) 
     else: 
      res += sresults 
    return res 
findall("") 

通知解決方案將需要很長的時間,如果名字的分佈不近似相等的,因爲它會無休止地列舉爲「AB」所有後綴,如果有20人匹配「ABC」和1個符合「ABD」 。您可以修改ABORT_SIZE來平衡時間和完整性。它應該高於log | alphabet |(n),其中n是最終結果的(未知)數目。

1

我想你可以使用一種「詞典攻擊」 - 你知道你可以從美國人口普查局下載所有最後的和/或名字嗎?我的另一種選擇是@phihag提出的。

11

拿起電話,請求校園目錄並將這些姓名填入聯誼會的搜索中,以便一次獲得一個會員。

這畢竟是社交網絡。

+4

+1爲社會工程黑客。 – 2011-04-06 00:03:00

0

我在這裏有這本書「意外的億萬富翁」,它直接從他的LiveJournal引用,並且......沒有發生。你知道編寫腳本的人對代碼一無所知,對吧?

從我正在閱讀的內容中,他使用了一些LWP來蜘蛛'洛厄爾'和'亞當斯',然後他得到了'鄧斯特',這是20結果問題之一,他寫道:「我會晚一點回來」。所以我可以看到,他可能已經放棄了。

他還寫道:「這需要一些嘗試編譯腳本」。