若是一張圖片價值1000字,你能夠在140個字符中放入多少圖片? php
注意 :那就是你們! 賞金的最後期限就在這裏,通過一番艱難的考慮後,我認爲Boojum的進入只是勉強淘汰Sam Hocevar的 。 一旦我有機會寫下來,我會發布更詳細的筆記。 固然,每一個人都應該隨時繼續提交解決方案並改進人們投票的解決方案。 感謝全部提交和參賽的人; 我很喜歡他們。 這對我來講很是有趣,我但願這對參賽者和觀衆來講都頗有趣。 html
我遇到了一篇關於嘗試將圖像壓縮成Twitter評論的有趣帖子 ,該線程中的不少人(以及Reddit上的一個帖子 )都提出了有關不一樣方法的建議。 因此,我認爲這將是一個很好的編碼挑戰; 讓人們將錢放在嘴邊,並展現他們對編碼的見解如何在有限的空間中提供更多細節。 python
我挑戰你想出一個通用系統,用於將圖像編碼成140個字符的Twitter消息,並將它們再次解碼爲圖像。 您可使用Unicode字符,所以每一個字符的字符數超過8位。 可是,即便容許使用Unicode字符,也須要將圖像壓縮到很是小的空間內; 這確定會是一種有損壓縮,所以必須對每種結果的好看進行主觀判斷。 算法
如下是原做者Quasimondo從他的編碼中得到的結果(圖片根據知識共享署名 - 非商業許可證受權 ): 數據庫
你能作得更好嗎? 安全
U+0000
- U+10FFFF
,不包括非字符( U+FFFE
, U+FFFF
, U+
n FFFE
, U+
n FFFF
,其中n爲1
- 10
十六進制,範圍爲U+FDD0
- U+FDEF
)和代理代碼點( U+D800
- U+DFFF
)。 它能夠以您選擇的任何合理編碼輸出; GNU iconv
支持的任何編碼都被認爲是合理的,您的平臺本機編碼或區域設置編碼多是一個不錯的選擇。 有關詳細信息,請參閱下面的Unicode註釋 爲了用戶界面的一致性,您的程序必須按以下方式運行: ide
encode
或decode
來設置模式。 您的程序必須經過如下一種或多種方式獲取輸入(若是您實現了帶文件名的方法,若是文件名丟失,您也能夠從stdin和stdout讀取和寫入): 單元測試
從標準輸入獲取輸入並在標準輸出上產生輸出。 測試
my-program encode <input.png >output.txt my-program decode <output.txt >output.png
從第二個參數中指定的文件中獲取輸入,並在第三個參數中指定的文件中生成輸出。 字體
my-program encode input.png output.txt my-program decode output.txt output.png
這些基本上是可能被破壞的規則,建議或評分標準:
做爲我在選擇我接受的解決方案時如何對解決方案進行排名的通常指南,讓我說我可能會以25分的比例評估解決方案(這很是粗糙,我不會直接評分任何東西,只是使用這是一個基本準則):
有些人要求提供一些參考圖像。 如下是一些您能夠嘗試的參考圖像; 這裏嵌入了較小的版本,若是您須要,它們都連接到更大版本的圖像:
根據上述標準,我提供了500個表明獎金 (加上StackOverflow推出的50個獎勵 ),用於我最喜歡的解決方案。 固然,我也鼓勵其餘人在這裏投票選出他們最喜歡的解決方案。
這場比賽將持續到賞金用完,即5月30日星期六下午6點左右。我不能說它將結束的確切時間; 它多是從下午5點到7點。 我保證我會查看下午2點提交的全部參賽做品,我會盡力查看下午4點提交的全部參賽做品; 若是在此以後提交解決方案,我可能沒有機會在我作出決定以前給他們一個公平的見解。 此外,您提交的越早,您投票的機會就越大,能夠幫助我選擇最佳解決方案,所以請儘早提交,而不是在截止日期前提交。
到底是什麼容許Unicode字符也存在一些混淆。 可能的Unicode代碼點範圍是U+0000
到U+10FFFF
。 在任何開放的數據交換中,有一些代碼點永遠沒法用做Unicode字符; 這些都是noncharacters和代理代碼點 。 Noncharacters在所定義的Unidode標準5.1.0節16.7爲值U+FFFE
, U+FFFF
, U+
Ñ FFFE
, U+
Ñ FFFF
,其中n爲1
- 10
十六進制和範圍U+FDD0
- U+FDEF
。 這些值旨在用於特定於應用程序的內部使用,而且符合要求的應用程序可能會將這些字符從它們處理的文本中刪除。 代理點代碼點在Unicode標準5.1.0第3.8節中定義爲U+D800
- U+DFFF
,用於編碼UTF-16中基本多語言平面以外的字符; 所以,不可能直接在UTF-16編碼中表示這些代碼點,而且在任何其餘編碼中對它們進行編碼是無效的。 所以,爲了本次比賽的目的,我將容許任何編碼圖像的程序從U+0000
- U+10FFFF
範圍內不超過140個Unicode代碼點的序列,不包括上面定義的全部非字符和代理對。
我更喜歡只使用指定字符的解決方案,甚至更喜歡使用指定字符的聰明子集或使用他們使用的字符集作一些有趣事情的解決方案。 有關指定字符的列表,請參閱Unicode字符數據庫 ; 請注意,某些字符是直接列出的,而有些字符僅列爲範圍的開頭和結尾。 另請注意,代理代碼點列在數據庫中,但如上所述是禁止的。 若是您但願利用字符的某些屬性來使輸出的文本更有趣,則可使用各類字符信息數據庫 ,例如命名代碼塊列表和各類字符屬性 。
因爲Twitter沒有指定他們支持的確切字符集,所以我會對那些實際上不適用於Twitter的解決方案感到寬容,由於某些字符會計算額外的或某些字符被剝離。 優選但不要求全部編碼輸出應該可以經過Twitter或其餘微博服務(例如identi.ca)無損地傳輸。 我已經看到一些文檔聲明Twitter實體編碼<,>和&,所以分別計算爲4個,4個和5個字符,但我沒有本身測試過,他們的JavaScript字符計數器彷佛沒有以那種方式來統計他們。
這種壓縮很好。
http://www.intuac.com/userport/john/apt/
http://img86.imageshack.us/img86/4169/imagey.jpg http://img86.imageshack.us/img86/4169/imagey.jpg
我使用瞭如下批處理文件:
capt mona-lisa-large.pnm out.cc 20 dapt out.cc image.pnm Pause
生成的文件大小爲559個字節。
關於此挑戰的編碼/解碼部分。 base16b.org是我嘗試指定一種標準方法,用於在更高的Unicode平面中安全有效地編碼二進制數據。
一些功能:
對不起,這個答案對於原始比賽來講太晚了。 我獨立於這篇文章開始了這個項目,我在其中發現了一半。
好吧,我已經遲到了,但不過我作了個人項目。
這是一種玩具遺傳算法,它使用半透明的彩色圓圈來重建初始圖像。
特徵:
誤的feautres:
這是一個表明莉娜的例子:犭楊谷杌蒝螦匘匘匱匱匱匱匱刀刀刀刀刀刀刀嚎嚎嚎嚎嚎嚎嚎嚎嚎嚎嚎婊婊婊婊婊婊婊婊婊婊婊襠襠襠襠襠襠襠襠襠襠襠襠襠襠襠襠襠襠襠襠襠襠襠襠襠襠襠襠襠襠襠襠襠襠襠豈掂戇耔攋斘眐奡萛狂昸箆親嬎廙栃兡塅受橯恰應戞優貓僘瑩吱賾卣朸杈腠綍蝘獼屐稱悡詬來噩壓罍尕熚帤厥虤嫐虲兙罨縨炘排叄摳堃從弅慌螎熰標宑簫柢橙拃丨蜊縮昔儻舭勵癳冂囤璟彔榕兠擯侑蒖孂埮槃姠璐哠眛嫡琠枀訜苄暬厇廩焛瀻嚴啘刱墊仔
該代碼位於bitbucket.org的Mercurial存儲庫中。 查看http://bitbucket.org/tkadlubo/circles.lua
想法:你能用字體做爲調色板嗎? 嘗試在一系列向量中打破圖像,試圖用向量集的組合來描述它們(每一個字符本質上是一組向量)。 這是使用字體做爲字典。 例如,我可使用al做爲垂直線,使用 - 做爲水平線? 只是一個想法。
個人解決方案的通常概述是:
我知道你要求代碼,但我真的不想花時間來實際編寫代碼。 我認爲有效的設計至少能夠激勵其餘人編寫代碼。
我認爲我提出的解決方案的主要好處是它正在儘量多地重用現有技術。 嘗試編寫一個好的壓縮算法可能頗有趣,但確保有更好的算法,極可能是由擁有更高數學學位的人編寫的。
另外一個重要的注意事項是,若是肯定utf16是首選編碼,那麼這個解決方案就會崩潰。 壓縮到280字節時,jpegs不能正常工做。 雖然,對於這個特定的問題陳述,可能有比jpg更好的壓縮算法。