bu soruyu bir soru başlığında özetlemek zordur
GÜNCELLEME Bu sorudan çıkarılan harflere dayalı olarak girişinizden gizlenmiş bir dize oluşturan bir JSFiddle oluşturdum: Buradan erişebilirsiniz , yoksa bir öz daha mı kolay olur?
Kısa bir süre önce bu profilde şuna benzeyen , karmaşık bir JavaScript ile karşılaştım :
javascript:[[]+1/!1][1^1][1>>1]+({}+[])[1<<1^11>>1]+([]+!!-
[])[1<<1]+[/~/+{}][+!1][-~1<<1]+([]+/-/[(!!1+[])[1>>1]+(!!1
+[])[1<<1^1]+(!1+[])[1|1<<1]+(!!1+[])[1^1]])[1^11<<1]+([,][
~1]+[])[1-~1]+[[]+{}][!1.1%1][11111.1%11.1*111e11|!1]+(/1/+
1/[1<1][1%1])[1^11]+[[],[]+{}][1][+1]+(/<</[1]+[])[1/1.1&1]
Sürprizi mahvettiğim için üzgünüm ama bu değerlendirildiğinde şunu döndürüyor:
"I love you" in Chrome
"I lone you" In Firefox
"I lo[e you" in IE10
Parçalanmış haldeyken bunun çalışma yolu, bir dizi mesaj oluşturmak ve bu şekilde harfleri onlardan çıkarmaktır (örnek olarak "I" yi kullanarak):
[]+1/!1
returns
"Infinity"
then
[[]+1/!1]
creates this array:
["Infinity"]
then
[[]+1/!1][1^1]
Takes the first (1^1 == 0) element of that array
"Infinity"
finally
[[]+1/!1][1^1][1>>1]
Takes the first (1>>1 == 0) char of that string
"I"
Oluşturulan diğer dizeler şunları içerir:
({}+[]) -> "[object Object]" (where the space comes from)
([]+!!-[]) -> "false" (used for it's "l")
[/~/+{}][+!1] -> "/~/[object Object]" (this is used for an "o")
(/<</[1]+[]) -> "undefined"
"N" ve "[" yerine bir yedek bulmakla ilgileniyordum ve şunu buldum:
String.fromCharCode(('1'.charCodeAt(0)<<1)+(10<<1))
1'leri ve 0'ları kullanma ruhunda hissettiğim, ancak orijinal kodun daha zarif yönlerinden birini ihlal ediyor ki bu, dizelerle hiçbir ilgisi yokmuş gibi görünüyor. Orijinal gizlenmiş kodla uyumlu bir "v" nin nasıl üretileceği hakkında başka bir fikri olan var mı?
İşte birçok yetenekli JavaScript programcısı bu konuya daha derinlemesine baktıktan sonra bulunan bazı ekstra bilgiler.
Firefox, bu satırdan dolayı "Seni yalnızım" döndürür:
([]+/-/[(!!1+[])[1>>1]+(!!1+[])[1<<1^1]+(!1+[])[1|1<<1]+(!!1+[])[1^1]])[1^11<<1]+
[1^11<<1]
bundan belirli bir karakteri kırpar:
([]+/-/[(!!1+[])[1>>1]+(!!1+[])[1<<1^1]+(!1+[])[1|1<<1]+(!!1+[])[1^1]])
Bunu değerlendiren:
"function test() {
[native code]
}"
Görünüşe göre "V" ye sahip olabiliriz !!!
Chrome, aynı kod şunu döndürdüğü için "Seni seviyorum" u döndürür:
"function test() { [native code] }"
Soru, "gerçek bir programlama sorunu" ile sorgulanabilir bağlantı için kapatılmadan önce, @ Supr , @ Cory ve @ alpha123'lere dayanan özet bir çözüm eklemeyi düşündüm , işte:
alert([[]+1/!1][1^1][1>>1]+({}+[])[1<<1^11>>1]+(
[]+!!-[])[1<<1]+[/~/+{}][+!1][-~1<<1]+[([]+/-/[(
!!1+[])[1>>1]+(!!1+[])[1<<1^1]+(!1+[])[1|1<<1]+(
!!1+[])[1^1]])[1+(1^(11+1+1)<<1)],([]+/-/[(!!1+[
])[1>>1]+(!!1+[])[1<<1^1]+(!1+[])[1|1<<1]+(!!1+[
])[1^1]])[1^11<<1],([]+/-/[(!!1+[])[1>>1]+(!!1+[
])[1<<1^1]+(!1+[])[1|1<<1]+(!!1+[])[1^1]])[1^(11
+1+1)<<1]][((([]+/-/[(!!1+[])[1>>1]+(!!1+[])[1<<
1^1]+(!1+[])[1|1<<1]+(!!1+[])[1^1]])[(1<<1<<1<<1
)+1<<1]==({}+[])[1^1])*1)+((([]+/-/[(!!1+[])[1>>
1]+(!!1+[])[1<<1^1]+(!1+[])[1|1<<1]+(!!1+[])[1^1
]])[(1^11<<1)-1]==({}+[])[1^1])<<1)]+([,][~1]+[]
)[1-~1]+[[]+{}][!1.1%1][11111.1%11.1*111e11|!1]+
(/1/+1/[1<1][1%1])[1^11]+[[],[]+{}][1][+1]+(/<</
[1]+[])[1/1.1&1])
Kodun karmaşıklığı ve ürettiği mesaj göz önüne alındığında, neredeyse JavaScript motorunun onu ne kadar özel hissettirdiğinizi anlatması gibi :)