<divrole="region"aria-label="Skip to main content"><aclass="skipToContent_fXgn"href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><navaria-label="Main"class="navbar navbar--fixed-top"><divclass="navbar__inner"><divclass="navbar__items"><buttonaria-label="Toggle navigation bar"aria-expanded="false"class="navbar__toggle clean-btn"type="button"><svgwidth="30"height="30"viewBox="0 0 30 30"aria-hidden="true"><pathstroke="currentColor"stroke-linecap="round"stroke-miterlimit="10"stroke-width="2"d="M4 7h22M4 15h22M4 23h22"></path></svg></button><aclass="navbar__brand"href="/"><bclass="navbar__title text--truncate">mf</b></a><divclass="navbar__item dropdown dropdown--hoverable"><ahref="#"aria-haspopup="true"aria-expanded="false"role="button"class="navbar__link">Additional FI MU materials</a><ulclass="dropdown__menu"><li><aclass="dropdown__link"href="/ib002/">IB002: Algorithms</a></li><li><aaria-current="page"class="dropdown__link dropdown__link--active"href="/pb071/">PB071: C</a></li><li><aclass="dropdown__link"href="/pb161/">PB161: C++</a></li></ul></div><aclass="navbar__item navbar__link"href="/contributions">Contributions</a><aclass="navbar__item navbar__link"href="/talks">Talks</a></div><divclass="navbar__items navbar__items--right"><aclass="navbar__item navbar__link"href="/blog">Blog</a><divclass="toggle_vylO colorModeToggle_DEke"><buttonclass="clean-btn toggleButton_gllP toggleButtonDisabled_aARS"type="button"disabled=""title="Switch between dark and light mode (currently light mode)"aria-label="Switch between dark and light mode (currently light mode)"aria-live="polite"><svgviewBox="0 0 24 24"width="24"height="24"class="lightToggleIcon_pyhR"><pathfill="currentColor"d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svgviewBox="0 0 24 24"width="24"height="24"class="darkToggleIcon_wfgR"><pathfill="currentColor"d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><divclass="searchBox_ZlJk"><buttontype="button"class="DocSearch DocSearch-Button"aria-label="Search"><spanclass="DocSearch-Button-Container"><svgwidth="20"height="20"class="DocSearch-Search-Icon"viewBox="0 0 20 20"><pathd="M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z"stroke="currentColor"fill="none"fill-rule="evenodd"stroke-linecap="round"stroke-linejoin="round"></path></svg><spanclass="DocSearch-Button-Placeholder">Search</span></span><spanclass="DocSearch-Button-Keys"></span></button></div></div></div><divrole="presentation"class="navbar-sidebar__backdrop"></div></nav><divid="__docusaurus_skipToContent_fallback"class="main-wrappermainWrapper_
implementing a very special cipher.</p><h3class="anchor anchorWithStickyNavbar_LWe7"id="task-no-1-reverse-05-k">Task no. 1: Reverse (0.5 K₡)<ahref="#task-no-1-reverse-05-k"class="hash-link"aria-label="Direct link to Task no. 1: Reverse (0.5 K₡)"title="Direct link to Task no. 1: Reverse (0.5 K₡)"></a></h3><p>Write a function <code>char* reverse(const char* text)</code> that returns copy of the input
used for encrypting (or decrypting).</p><p>Your task is to write two functions:</p><ul><li><code>char* vigenere_encrypt(const char* key, const char* text)</code> for encrypting</li><li><code>char* vigenere_decrypt(const char* key, const char* text)</code> for decrypting</li></ul><p>In both of those you should return uppercase characters.</p><p>Meaning of the parameters you are given:</p><ul><li><code>key</code> - String that represents key that is used for <!---->*<!---->crypting. It consists of
one word and can have only characters of the alphabet. Does not matter if they
are uppercase or lowercase.</li><li><code>text</code> - String that is to be <!---->*<!---->crypted.</li></ul><p>Function returns address of the encrypted (or decrypted) string. Or <code>NULL</code> in case
you can gain 0.5 K₡.</p><p>Usage of <code>true</code>/<code>false</code> to decide path in code is prohibited. It leads to merging
of both functions into one. Point of this part is to discover a way to do this
generically in such way that there are no separate paths for one or the other. One
function with no branching for both of them, parametrization is your friend :)</p><h3class="anchor anchorWithStickyNavbar_LWe7"id="task-no-3-bit-madness-05-k">Task no. 3: Bit madness (0.5 K₡)<ahref="#task-no-3-bit-madness-05-k"class="hash-link"aria-label="Direct link to Task no. 3: Bit madness (0.5 K₡)"title="Direct link to Task no. 3: Bit madness (0.5 K₡)"></a></h3><p>This is a state of the art crypto. Please do not share :)</p><p>For encrypting:</p><ol><li>Split the character that is to be encrypted in halves (4 and 4 bits each).</li><li>Bits in 1st half are to be split into pairs. Swap bits in those pairs.</li><li>Then use the 4 bits that you created in the 2nd step for <code>XOR</code> with the other
4 bits.</li></ol><p>This simple and ingenious principle will be illustrated on the following example.
String we want to encrypt is <code>Hello world!</code>. We need to encrypt each letter separately,
so we will demonstrate on letter <code>H</code>:</p><ol><li><p>Letter <code>H</code> is represented in ASCII as <code>72</code>.</p><p><code>72</code> represented in binary is: <code>01001000</code>. So first 4 bits are: <code>0100</code> and last
4 bits are <code>1000</code>.</p></li><li><p>First half of bits (<code>0100</code>) consists of 2 pairs (<code>01</code> and <code>00</code>) which we swap
(<code>01 ~> 10</code> and <code>00 ~> 00</code>). That way we get <code>1000</code>.</p></li><li><p>That half is used for xor with the other 4 bits:</p><divclass="codeBlockContainer_Ckt0 theme-code-block"style="--prism-color:#000000;--prism-background-color:#ffffff"><divclass="codeBlockContent_biex"><pretabindex="0"class="prism-code language-text codeBlock_bY9V thin-scrollbar"><codeclass="codeBlockLines_e6Vv"><spanclass="token-line"style="color:#000000"><spanclass="token plain"> 1000 // second half</span><br></span><spanclass="token-line"style="color:#000000"><spanclass="token plain">XOR 1000 // first half after 2nd step</span><br></span><spanclass="token-line"style="color:#000000"><spanclass="token plain">--------</span><br></span><spanclass="token-line"style="color:#000000"><spanclass="token plain"> 0000</span><br></span></code></pre><divclass="buttonGroup__atx"><buttontype="button"aria-label="Copy code to clipboard"title="Copy"class="clean-btn"><spanclass="copyButtonIcons_eSgA"aria-hidden="true"><svgviewBox="0 0 24 24"class="copyButtonIcon_y97N"><pathfill="currentColor"d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svgviewBox="0 0 24 24"class="copyButtonSuccessIcon_LjdS"><pathfill="currentColor"d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></li><li><p>Now we combine both halves (first one is <code>1000</code>, which we got from the 2nd step
and second one is <code>0000</code>, which we got from the 3rd step) and get <code>10000000</code>,
present <ahref="/pb071/mr">here</a>. For setting assignee my xlogin is <code>xfocko</code>.</p><p>In case you do not want to experiment on GitLab, send me the source code via email,