15. 10. 2011. | #1 |
expert
Grand Master
Datum učlanjenja: 11.04.2010
Poruke: 998
Hvala: 141
959 "Hvala" u 153 poruka
|
Substitution Cipher
Vozdra
Mali zadatak, dešifrovati dati input ako su poznate riječi koje su korištene u šifrovanju. Svaki novi red koristi druge zamjene (substituciju). Znači jedan red = jedna pravila itd... Programski jezik nije bitan. Ovo je pre-interview zadatak za Facebook, ja slučajno otvorio, i nemam više pravo tako da just for fun Input: Kôd:
//dict hello there yello bob tom mabel says hi secret the is to smile //secret 45161 01223 x2x 3453 6k x8z yz67zx 5y x4 y352z Kôd:
45161 01223 = there yello x2x 3453 6k = bob says hi x8z yz67zx 5y x4 y352z = the secret is to smile |
15. 10. 2011. | #2 |
VD IT Direktora
Invented the damn thing
Datum učlanjenja: 08.06.2005
Lokacija: Beograd
Poruke: 2.118
Hvala: 503
1.307 "Hvala" u 282 poruka
|
Proklet bio...
Kôd:
dict = [ 'hello', 'there', 'yello', 'bob', 'tom', 'mabel', 'says', 'hi', 'secret', 'the', 'is', 'to', 'smile', ] secrets = [ '45161 01223', 'x2x 3453 6k', 'x8z yz67zx 5y x4 y352z', ] p Hash[secrets.map{|secret| words = secret.split ' ' [secret, dict.permutation(words.length).find{|perm| next unless perm.map(&:length) == words.map(&:length) match = [words, perm] chars = match.map{|e| e.join.chars.to_a} next unless chars.map{|e| e.uniq.length}.inject(&:==) pairs = chars.inject(&:zip) Hash[pairs] == Hash[pairs.map(&:reverse)].invert }.join(' ')] }] #=> {"45161 01223"=>"there yello", "x2x 3453 6k"=>"bob says hi", "x8z yz67zx 5y x4 y352z"=>"the secret is to smile"}
__________________
blog |
3 članova zahvaljuje jablan za poruku: |
15. 10. 2011. | #3 |
Banned
Knowledge base
Datum učlanjenja: 01.07.2005
Poruke: 1.598
Hvala: 206
140 "Hvala" u 89 poruka
|
Moze objasnjenje za nas sa jeftinijim ulaznicama ?
Kada dodjes do dela niza sa stringovima iste duzine, recimo 5, kako se odlucujes sa neki od njih ? |
15. 10. 2011. | #4 |
VD IT Direktora
Invented the damn thing
Datum učlanjenja: 08.06.2005
Lokacija: Beograd
Poruke: 2.118
Hvala: 503
1.307 "Hvala" u 282 poruka
|
Evo malo izmenjene verzije, sa komentarima.
Kôd:
p Hash[secrets.map{|secret| words = secret.split ' ' # niz reci u secret frazi [secret, dict.permutation(words.length).find{|perm| # za sve kombinacije reci iste duzine kao secret fraza match = [words, perm] #=>[["x8z", "yz67zx", "5y", "x4", "y352z"], ["the", "secret", "is", "to", "smile"]] next unless match.map{|e| e.map(&:length)}.inject(&:==) # eliminisemo sve koje nemaju iste duzine reci kao secret fraza chars = match.map{|e| e.join.chars.to_a} # sada ih posmatramo samo kao nizove karaktera #=>[["x", "8", "z", "y", "z", "6", "7", "z", "x", "5", "y", "x", "4", "y", "3", "5", "2", "z"], ["t", "h", "e", "s", "e", "c", "r", "e", "t", "i", "s", "t", "o", "s", "m", "i", "l", "e"]] next unless chars.map{|e| e.uniq.length}.inject(&:==) # eliminisemo sve koji nemaju isti broj razlicitih slova pairs = chars.inject(&:zip) # parovi slova na istim pozicijama #=>[["x", "t"], ["8", "h"], ["z", "e"], ["y", "s"], ["z", "e"], ["6", "c"], ["7", "r"], ["z", "e"], ["x", "t"], ["5", "i"], ["y", "s"], ["x", "t"], ["4", "o"], ["y", "s"], ["3", "m"], ["5", "i"], ["2", "l"], ["z", "e"]] Hash[pairs] == Hash[pairs.map(&:reverse)].invert # ovo je malo trickish, videti u tekstu }.join(' ')] }]
__________________
blog |
3 članova zahvaljuje jablan za poruku: |
15. 10. 2011. | #5 |
expert
Grand Master
Datum učlanjenja: 11.04.2010
Poruke: 998
Hvala: 141
959 "Hvala" u 153 poruka
|
Svaka čast, primljen si, iskreno sam i očekivao da se ti javiš
Naći riječi iste dužine, naći poklapanje karaktera, pretpostaviti da su prva poklapanja tačna, uporediti sa drugim šifrovanim riječima, itd... Napisati sve to poslije 24h rada, fail Zašto imam osjećaj da za ovo u PHP treba dosta više codea? PHP kôd:
|
15. 10. 2011. | #6 |
VD IT Direktora
Invented the damn thing
Datum učlanjenja: 08.06.2005
Lokacija: Beograd
Poruke: 2.118
Hvala: 503
1.307 "Hvala" u 282 poruka
|
Zapravo, trebalo bi da ima i jednostavniji način:
Kôd:
Šifra S: | 4 | 5 | 1 | 6 | 1 | ------------------------------ Fraza P: | t | h | e | r | e | - broj jedinstvenih karaktera u šifri S - broj jedinstvenih karaktera u frazi P - broj jedinstvenih parova karaktera (s,p) isti.
__________________
blog |
15. 10. 2011. | #7 |
VD IT Direktora
Invented the damn thing
Datum učlanjenja: 08.06.2005
Lokacija: Beograd
Poruke: 2.118
Hvala: 503
1.307 "Hvala" u 282 poruka
|
Ako nekog interesuje kako izgleda rešenje u Clojure-u (možda ima gluposti jer mi je prvi program, ako neko ima iskustva neka me ispravi):
http://ideone.com/6EDOI
__________________
blog |
"Hvala" jablan za poruku: |
15. 10. 2011. | #8 |
expert
Grand Master
Datum učlanjenja: 11.04.2010
Poruke: 998
Hvala: 141
959 "Hvala" u 153 poruka
|
Možeš li u PHP?
|
|
|