<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <id>tag:plblog.danieljanus.pl,2019:category:rns</id>
  <title>Daniel Janus – RNŚ</title>
  <link href="http://plblog.danieljanus.pl/category/rns/"/>
  <updated>2020-10-02T00:00:00Z</updated>
  <author>
    <name>Daniel Janus</name>
    <uri>http://danieljanus.pl</uri>
    <email>dj@danieljanus.pl</email>
  </author>
  <entry>
    <id>tag:plblog.danieljanus.pl,2020-10-02:post:nowy-swiat</id>
    <title>Rozwiązanie zagadki Radia Nowy Świat</title>
    <link href="http://plblog.danieljanus.pl/nowy-swiat/"/>
    <updated>2020-10-02T00:00:00Z</updated>
    <content type="html">&lt;div&gt;&lt;p&gt;Dziś na zamkniętej grupie fejsbukowej dla Patronów &lt;a href="https://nowyswiat.online"&gt;Radia Nowy Świat&lt;/a&gt; pojawiła się zagadka-szyfr.&lt;/p&gt;&lt;img src="/img/blog/rns.jpg"&gt;
&lt;p&gt;Wrzucam rozwiązanie na bloga, bo tak wygodniej i mogę wstawić więcej obrazków, gdzie chcę. Jeśli chcesz, Czytelniku, pogłówkować we własnym zakresie – nie czytaj dalej.&lt;/p&gt;&lt;p&gt;Jeśli interesuje Cię rozwiązanie (i tok myślowy, który mnie do niego zaprowadził), przewiń stronę…&lt;/p&gt;&lt;div style="height: 1000px"&gt;&lt;/div&gt;
&lt;p&gt;Pierwsza myśl: ta wiadomość naprawdę składa się z takich liter. Sprawdzam “na oko”: jest dużo &lt;code&gt;A&lt;/code&gt;, a mało &lt;code&gt;Ź&lt;/code&gt;, czyli tak, jakbyśmy się spodziewali w losowym polskim tekście. Próbuję czytać kolumnami, od tyłu, ruchem konika szachowego – bezskutecznie!&lt;/p&gt;&lt;p&gt;To może przyjrzyjmy się uważniej frekwencji. Akurat mam pod ręką REPL-a Clojurowego:&lt;/p&gt;&lt;pre&gt;&lt;code class="hljs clojure"&gt;(&lt;span class="hljs-keyword"&gt;def&lt;/span&gt; &lt;span class="hljs-title"&gt;rn&lt;/span&gt;ś &lt;span class="hljs-string"&gt;&amp;quot;ABCĆĄEĘIODFÓUYAGĄHJKEĘLŁIMNŃOPÓUYRSAĄŚETĘWZIOÓŹUYŻBACĄEĆĘDFIGHJOÓUKYLŁMAĄNŃEĘIPROSŚÓTWZŹUŻBYCĆADĄEFĘGHJKILŁOÓUMYANĄEŃĘIOÓPRSUŚYAĄTEWĘZIOÓŹŻUBYCĆADFGĄEĘIOHJÓUYKLAŁĄEMĘNI&amp;quot;&lt;/span&gt;)
&lt;span class="hljs-comment"&gt;;=&amp;gt; #&amp;#x27;rnś&lt;/span&gt;

(&lt;span class="hljs-name"&gt;frequencies&lt;/span&gt; rnś)
&lt;span class="hljs-comment"&gt;;=&amp;gt; {\A 10, \Ą 10, \B 4, \C 4,  \Ć 4, \D 4, \E 10, \Ę 10,&lt;/span&gt;
&lt;span class="hljs-comment"&gt;;=&amp;gt;  \F 4,  \G 4,  \H 4, \I 10, \J 4, \K 4, \L 4,  \Ł 4,&lt;/span&gt;
&lt;span class="hljs-comment"&gt;;=&amp;gt;  \M 4,  \N 4,  \Ń 3, \O 9,  \Ó 9, \P 3, \R 3,  \S 3,&lt;/span&gt;
&lt;span class="hljs-comment"&gt;;=&amp;gt;  \Ś 3,  \T 3,  \U 9, \W 3,  \Y 9, \Ź 3, \Z 3,  \Ż 3}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Ha, jednak nie. To wygląda bardzo ciekawie: wszystkie samogłoski występują po 10 lub 9 razy, a wszystkie spółgłoski – po 4 lub 3 razy. W takim razie jest bardzo mało prawdopodobne, że znaczenie mają litery jako takie.&lt;/p&gt;&lt;p&gt;Przyglądam się bliżej: to nie jest przypadek, że tekst zaszyfrowany zaczyna się od &lt;code&gt;ABCĆ&lt;/code&gt;. Gdyby skreślić wszystkie spółgłoski, to zostaniemy z &lt;code&gt;AĄEĘIOÓÓUY&lt;/code&gt;… I analogicznie, gdyby skreślić samogłoski, to dostajemy &lt;code&gt;BCĆDFGH&lt;/code&gt;…&lt;/p&gt;&lt;p&gt;Wobec tego to nie litery niosą informację w tym tekście, tylko przeplot spółgłosek i samogłosek. Zobaczmy, jak to wygląda:&lt;/p&gt;&lt;pre&gt;&lt;code class="hljs clojure"&gt;(&lt;span class="hljs-keyword"&gt;def&lt;/span&gt; &lt;span class="hljs-title"&gt;vowel?&lt;/span&gt; (&lt;span class="hljs-name"&gt;&lt;span class="hljs-built_in"&gt;comp&lt;/span&gt;&lt;/span&gt; boolean #{&lt;span class="hljs-character"&gt;\A&lt;/span&gt; &lt;span class="hljs-character"&gt;\Ą&lt;/span&gt; &lt;span class="hljs-character"&gt;\E&lt;/span&gt; &lt;span class="hljs-character"&gt;\Ę&lt;/span&gt; &lt;span class="hljs-character"&gt;\I&lt;/span&gt; &lt;span class="hljs-character"&gt;\O&lt;/span&gt; &lt;span class="hljs-character"&gt;\Ó&lt;/span&gt; &lt;span class="hljs-character"&gt;\U&lt;/span&gt; &lt;span class="hljs-character"&gt;\Y&lt;/span&gt;}))
&lt;span class="hljs-comment"&gt;;=&amp;gt; #&amp;#x27;vowel?&lt;/span&gt;

(&lt;span class="hljs-name"&gt;&lt;span class="hljs-built_in"&gt;map&lt;/span&gt;&lt;/span&gt; (&lt;span class="hljs-name"&gt;&lt;span class="hljs-built_in"&gt;comp&lt;/span&gt;&lt;/span&gt; {&lt;span class="hljs-literal"&gt;false&lt;/span&gt; &lt;span class="hljs-number"&gt;0&lt;/span&gt;&lt;span class="hljs-punctuation"&gt;,&lt;/span&gt; &lt;span class="hljs-literal"&gt;true&lt;/span&gt; &lt;span class="hljs-number"&gt;1&lt;/span&gt;} vowel?) rnś)
&lt;span class="hljs-comment"&gt;;=&amp;gt; (1 0 0 0 1 1 1 1 1 0 0 1 1 1 1 0 1 0 0 0 1 1 0 0&lt;/span&gt;
&lt;span class="hljs-comment"&gt;;=&amp;gt;  1 0 0 0 1 0 1 1 1 0 0 1 1 0 1 0 1 0 0 1 1 1 0 1&lt;/span&gt;
&lt;span class="hljs-comment"&gt;;=&amp;gt;  1 0 0 1 0 1 1 0 1 0 0 1 0 0 0 1 1 1 0 1 0 0 0 1&lt;/span&gt;
&lt;span class="hljs-comment"&gt;;=&amp;gt;  1 0 0 1 1 1 0 0 1 0 0 1 0 0 0 0 1 0 0 1 0 0 1 0&lt;/span&gt;
&lt;span class="hljs-comment"&gt;;=&amp;gt;  1 1 0 1 0 0 0 0 1 0 0 1 1 1 0 1 1 0 1 1 0 1 1 1&lt;/span&gt;
&lt;span class="hljs-comment"&gt;;=&amp;gt;  1 0 0 0 1 0 1 1 1 0 1 0 1 0 1 1 1 0 0 1 0 1 0 0&lt;/span&gt;
&lt;span class="hljs-comment"&gt;;=&amp;gt;  1 0 0 0 1 1 1 1 1 0 0 1 1 1 0 0 1 0 1 1 0 1 0 1)&lt;/span&gt;

(&lt;span class="hljs-name"&gt;frequencies&lt;/span&gt; (&lt;span class="hljs-name"&gt;&lt;span class="hljs-built_in"&gt;map&lt;/span&gt;&lt;/span&gt; vowel? rnś))
&lt;span class="hljs-comment"&gt;;=&amp;gt; {true 86, false 82}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Tak, to wygląda lepiej. 86 samogłosek i 82 spółgłoski. Tylko co to za kod? Morse? Może spółgłoski to kropki, a samogłoski – kreski? Próbuję online-owych dekoderów. Kod Morse’a bez odstępów jest niejednoznaczny, więc przewijam się przez różne opcje. Nic nie pasuje. Gdyby kreski i kropki ustawić odwrotnie, też nie działa.&lt;/p&gt;&lt;p&gt;To może to jest ASCII? Przyglądam się bliżej: jest prawie regułą, że co ósmy znak to samogłoska. W takim razie gdyby samogłoski odpowiadały zerom, a spółgłoski jedynkom, i gdyby pogrupować je po 8 (tak jak na obrazku), to…&lt;/p&gt;&lt;pre&gt;&lt;code class="hljs clojure"&gt;(&lt;span class="hljs-keyword"&gt;defn&lt;/span&gt; &lt;span class="hljs-title"&gt;to-number&lt;/span&gt; [x] (&lt;span class="hljs-name"&gt;&lt;span class="hljs-built_in"&gt;apply&lt;/span&gt;&lt;/span&gt; + (&lt;span class="hljs-name"&gt;&lt;span class="hljs-built_in"&gt;map&lt;/span&gt;&lt;/span&gt; * (&lt;span class="hljs-name"&gt;&lt;span class="hljs-built_in"&gt;reverse&lt;/span&gt;&lt;/span&gt; x) (&lt;span class="hljs-name"&gt;&lt;span class="hljs-built_in"&gt;iterate&lt;/span&gt;&lt;/span&gt; #(&lt;span class="hljs-name"&gt;&lt;span class="hljs-built_in"&gt;+&lt;/span&gt;&lt;/span&gt; % %) &lt;span class="hljs-number"&gt;1&lt;/span&gt;))))
&lt;span class="hljs-comment"&gt;;=&amp;gt; to-number&lt;/span&gt;

(&lt;span class="hljs-name"&gt;&lt;span class="hljs-built_in"&gt;map&lt;/span&gt;&lt;/span&gt; to-number (&lt;span class="hljs-name"&gt;&lt;span class="hljs-built_in"&gt;partition&lt;/span&gt;&lt;/span&gt; &lt;span class="hljs-number"&gt;8&lt;/span&gt; (&lt;span class="hljs-name"&gt;&lt;span class="hljs-built_in"&gt;map&lt;/span&gt;&lt;/span&gt; #(&lt;span class="hljs-name"&gt;&lt;span class="hljs-built_in"&gt;if&lt;/span&gt;&lt;/span&gt; (&lt;span class="hljs-name"&gt;vowel?&lt;/span&gt; %) &lt;span class="hljs-number"&gt;0&lt;/span&gt; &lt;span class="hljs-number"&gt;1&lt;/span&gt;) rnś)))
&lt;span class="hljs-comment"&gt;;=&amp;gt; (112 97 115 116 101 98 105 110 46 99 111 109&lt;/span&gt;
&lt;span class="hljs-comment"&gt;;=&amp;gt;  47 98 72 116 84 107 112 99 74)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Ha! Ciepło, ciepło!&lt;/p&gt;&lt;pre&gt;&lt;code class="hljs clojure"&gt;(&lt;span class="hljs-name"&gt;&lt;span class="hljs-built_in"&gt;apply&lt;/span&gt;&lt;/span&gt; str (&lt;span class="hljs-name"&gt;&lt;span class="hljs-built_in"&gt;map&lt;/span&gt;&lt;/span&gt; char *1))
&lt;span class="hljs-comment"&gt;;=&amp;gt; &amp;quot;pastebin.com/bHtTkpcJ&amp;quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Gorąco! Jest adres strony!&lt;/p&gt;&lt;p&gt;Wchodzimy na tego pastebina i…&lt;/p&gt;&lt;pre&gt;&lt;code&gt;ALILMRD = SLWDWASWY SLWDWADZLWSLĄY PLĘĆ ALILNOÓE SLDWASWY
DZLWELĘYOMŚCLW YTSLĘCT SLWDWASWY DEMDZLWŚCLM
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Miliard ŻE CO plęć tysięcy? To są jakieś liczby, napisane przez kogoś, kto sepleni. Albo zamienia litery miejscami. Można by zgadnąć, według jakiego klucza, ale on akurat jest podany w tytule strony. I na obrazku. MALINOWE BUTY.&lt;/p&gt;&lt;p&gt;To teraz sięgnijmy po &lt;code&gt;tr&lt;/code&gt;, shellową zamieniarkę znaków:&lt;/p&gt;&lt;pre&gt;&lt;code class="hljs shell"&gt;tr &amp;#x27;MALINOWE BUTY&amp;#x27; &amp;#x27;AMILONEW UBYT&amp;#x27; &amp;lt; plik.txt
MILIARD = SIEDEMSET SIEDEMDZIESIĄT PIĘĆ MILIONÓW
SIDEMSET DZIEWIĘTNAŚCIE TYSIĘCY SIEDEMSET DWADZIEŚCIA
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;I to już? To ma być rozwiązanie zagadki? Jaki miliard? Jakie 775719720? Pal sześć literówkę, ale przecież się nie równa!&lt;/p&gt;&lt;p&gt;Wrzucam to na grupę. I dostaję ostateczną podpowiedź od pani Oliwii.&lt;/p&gt;&lt;img src="/img/blog/rns2.png"&gt;
&lt;p&gt;Z minusem wychodzi 224280280. I to jest rozwiązanie: &lt;a href="https://nowyswiat.online"&gt;skądinąd&lt;/a&gt; znany numer telefonu.&lt;/p&gt;&lt;p&gt;Dzwońcie tam, gdy Wam smutno albo źle w życiu. A jeszcze lepiej &lt;a href="https://patronite.pl/radionowyswiat"&gt;zostańcie patronami&lt;/a&gt;, to też będziecie mogli rozwiązywać zagadki!&lt;/p&gt;&lt;/div&gt;</content>
  </entry>
</feed>
