blog/c/pexam/garbage_collect/index.html
github-actions[bot] e7e47384d5 deploy: c06941d75a
2023-11-24 17:33:21 +00:00

134 lines
No EOL
33 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!doctype html>
<html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-c docs-version-current docs-doc-page docs-doc-id-pexam/b-garbage_collect" data-has-hydrated="false">
<head>
<meta charset="UTF-8">
<meta name="generator" content="Docusaurus v3.0.0">
<title data-rh="true">Practice exam B | mf</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://blog.mfocko.xyz/c/pexam/garbage_collect/"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-c-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-c-current"><meta data-rh="true" property="og:title" content="Practice exam B | mf"><meta data-rh="true" name="description" content="Garbage everywhere…
"><meta data-rh="true" property="og:description" content="Garbage everywhere…
"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://blog.mfocko.xyz/c/pexam/garbage_collect/"><link data-rh="true" rel="alternate" href="https://blog.mfocko.xyz/c/pexam/garbage_collect/" hreflang="en"><link data-rh="true" rel="alternate" href="https://blog.mfocko.xyz/c/pexam/garbage_collect/" hreflang="x-default"><link data-rh="true" rel="preconnect" href="https://0VXRFPR4QF-dsn.algolia.net" crossorigin="anonymous"><link rel="search" type="application/opensearchdescription+xml" title="mf" href="/opensearch.xml">
<link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="mf RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="mf Atom Feed">
<link rel="alternate" type="application/json" href="/blog/feed.json" title="mf JSON Feed">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css" integrity="sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM" crossorigin="anonymous"><link rel="stylesheet" href="/assets/css/styles.0f577c26.css">
<script src="/assets/js/runtime~main.46e2cf47.js" defer="defer"></script>
<script src="/assets/js/main.1ff5de87.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id="__docusaurus"><div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><b class="navbar__title text--truncate">mf</b></a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Additional FI MU materials</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/algorithms/">Algorithms</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/c/">C</a></li><li><a class="dropdown__link" href="/cpp/">C++</a></li></ul></div><a class="navbar__item navbar__link" href="/contributions/">Contributions</a><a class="navbar__item navbar__link" href="/talks/">Talks</a></div><div class="navbar__items navbar__items--right"><a class="navbar__item navbar__link" href="/blog/">Blog</a><div class="toggle_vylO colorModeToggle_DEke"><button class="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"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="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><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="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><div class="navbarSearchContainer_Bca1"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><svg width="20" height="20" class="DocSearch-Search-Icon" viewBox="0 0 20 20"><path d="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><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"></span></button></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><div class="docsWrapper_hBAB"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docRoot_UBD9"><aside class="theme-doc-sidebar-container docSidebarContainer_YfHR"><div class="sidebarViewport_aRkj"><div class="sidebar_njMd"><nav aria-label="Docs sidebar" class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/c/">Introduction</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist" aria-expanded="false" href="/c/category/bonuses/">Bonuses</a><button aria-label="Expand sidebar category &#x27;Bonuses&#x27;" type="button" class="clean-btn menu__caret"></button></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--active" aria-expanded="true" href="/c/category/practice-exams/">Practice Exams</a><button aria-label="Collapse sidebar category &#x27;Practice Exams&#x27;" type="button" class="clean-btn menu__caret"></button></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/c/pexam/garbage_collect/">Practice exam B</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/c/pexam/cams/">Practice exam C</a></li></ul></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/c/mr/">Submitting merge requests</a></li></ul></nav><button type="button" title="Collapse sidebar" aria-label="Collapse sidebar" class="button button--secondary button--outline collapseSidebarButton_PEFL"><svg width="20" height="20" aria-hidden="true" class="collapseSidebarButtonIcon_kv0_"><g fill="#7a7a7a"><path d="M9.992 10.023c0 .2-.062.399-.172.547l-4.996 7.492a.982.982 0 01-.828.454H1c-.55 0-1-.453-1-1 0-.2.059-.403.168-.551l4.629-6.942L.168 3.078A.939.939 0 010 2.528c0-.548.45-.997 1-.997h2.996c.352 0 .649.18.828.45L9.82 9.472c.11.148.172.347.172.55zm0 0"></path><path d="M19.98 10.023c0 .2-.058.399-.168.547l-4.996 7.492a.987.987 0 01-.828.454h-3c-.547 0-.996-.453-.996-1 0-.2.059-.403.168-.551l4.625-6.942-4.625-6.945a.939.939 0 01-.168-.55 1 1 0 01.996-.997h3c.348 0 .649.18.828.45l4.996 7.492c.11.148.168.347.168.55zm0 0"></path></g></svg></button></div></div></aside><main class="docMainContainer_TBSr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_YNFT"><path d="M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z" fill="currentColor"></path></svg></a></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item"><a class="breadcrumbs__link" itemprop="item" href="/c/category/practice-exams/"><span itemprop="name">Practice Exams</span></a><meta itemprop="position" content="1"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">Practice exam B</span><meta itemprop="position" content="2"></li></ul></nav><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><h1>Garbage Collection</h1>
<div class="theme-admonition theme-admonition-caution admonition_xJq3 alert alert--warning"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 16 16"><path fill-rule="evenodd" d="M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"></path></svg></span>Exam environment</div><div class="admonitionContent_BuS1"><ul>
<li>During the exam you will be provided with a barebone <em>exam session</em> on the
<em>faculty computers</em>.</li>
<li>In browser you are only allowed to have the following tabs open:<!-- -->
<ul>
<li><a href="https://en.cppreference.com" target="_blank" rel="noopener noreferrer">C documentation</a></li>
<li>page containing the assignment</li>
</ul>
</li>
<li>You <strong>are not</strong> allowed to use your own source code, e.g. prepared beforehand
or from the seminars.</li>
<li>You have <strong>5 minutes</strong> to read through the assignment and ask any follow-up
questions should be there something unclear.</li>
<li>You have <strong>60 minutes</strong> to work on the assignment, afterward your work will be
discussed with your seminar tutor.</li>
</ul></div></div>
<p>You have gotten into a trouble during your regular upgrade of your archLinux<sup><a href="#user-content-fn-1" id="user-content-fnref-1" data-footnote-ref="true" aria-describedby="footnote-label">1</a></sup>
installation… You&#x27;ve been carelessly running the upgrades for months and forgot
about clearing up the caches.</p>
<p>Your task is to write a program <code>garbage_collect</code> that will evaluate the shell
history provided as a file and will try to find files or directories that are
suspiciously big and decide which of them should be deleted to free some space.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="format-of-the-shell-history">Format of the shell history<a href="#format-of-the-shell-history" class="hash-link" aria-label="Direct link to Format of the shell history" title="Direct link to Format of the shell history"></a></h2>
<p>You are provided one file consisting of the captured buffer of the terminal. You
can see only two commands being used:</p>
<ol>
<li>
<p><code>cd somewhere</code> that changes the current working directory.</p>
<p>At the beginning you start in the root of the filesystem (i.e. <code>/</code>).</p>
<p>You are <strong>guaranteed</strong> that <code>somewhere</code> is:</p>
<ul>
<li><code>.</code> that is a current working directory (i.e. does nothing),</li>
<li><code>..</code> that moves you up one level (in case you are in <code>/</code>, does nothing), or</li>
<li>is a valid directory in the current working directory.</li>
</ul>
<div class="theme-admonition theme-admonition-caution admonition_xJq3 alert alert--warning"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 16 16"><path fill-rule="evenodd" d="M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"></path></svg></span>caution</div><div class="admonitionContent_BuS1"><p>There are no guarantees or restrictions on the names of the files or
directories!</p></div></div>
</li>
<li>
<p><code>ls</code> that will list files in the current working directory and their
respective sizes. If there is a directory in the current working it has <code>dir</code>
instead of the size.</p>
</li>
</ol>
<div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#000000;--prism-background-color:#ffffff"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#000000;background-color:#ffffff"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#000000"><span class="token plain">$ ls</span><br></span><span class="token-line" style="color:#000000"><span class="token plain">dir a</span><br></span><span class="token-line" style="color:#000000"><span class="token plain">14848514 b.txt</span><br></span><span class="token-line" style="color:#000000"><span class="token plain">8504156 c.dat</span><br></span><span class="token-line" style="color:#000000"><span class="token plain">dir d</span><br></span><span class="token-line" style="color:#000000"><span class="token plain">$ cd a</span><br></span><span class="token-line" style="color:#000000"><span class="token plain">$ cd .</span><br></span><span class="token-line" style="color:#000000"><span class="token plain">$ cd .</span><br></span><span class="token-line" style="color:#000000"><span class="token plain">$ cd .</span><br></span><span class="token-line" style="color:#000000"><span class="token plain">$ ls</span><br></span><span class="token-line" style="color:#000000"><span class="token plain">dir e</span><br></span><span class="token-line" style="color:#000000"><span class="token plain">29116 f</span><br></span><span class="token-line" style="color:#000000"><span class="token plain">2557 g</span><br></span><span class="token-line" style="color:#000000"><span class="token plain">62596 h.lst</span><br></span><span class="token-line" style="color:#000000"><span class="token plain">$ cd e</span><br></span><span class="token-line" style="color:#000000"><span class="token plain">$ ls</span><br></span><span class="token-line" style="color:#000000"><span class="token plain">584 i</span><br></span><span class="token-line" style="color:#000000"><span class="token plain">$ cd ..</span><br></span><span class="token-line" style="color:#000000"><span class="token plain">$ cd ..</span><br></span><span class="token-line" style="color:#000000"><span class="token plain">$ cd d</span><br></span><span class="token-line" style="color:#000000"><span class="token plain">$ ls</span><br></span><span class="token-line" style="color:#000000"><span class="token plain">4060174 j</span><br></span><span class="token-line" style="color:#000000"><span class="token plain">8033020 d.log</span><br></span><span class="token-line" style="color:#000000"><span class="token plain">5626152 d.ext</span><br></span><span class="token-line" style="color:#000000"><span class="token plain">7214296 k</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="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><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>For this input, you will get following file system:</p>
<div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#000000;--prism-background-color:#ffffff"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#000000;background-color:#ffffff"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#000000"><span class="token plain">- / (dir, size=48381165)</span><br></span><span class="token-line" style="color:#000000"><span class="token plain"> - a (dir, size=94853)</span><br></span><span class="token-line" style="color:#000000"><span class="token plain"> - e (dir, size=584)</span><br></span><span class="token-line" style="color:#000000"><span class="token plain"> - i (file, size=584)</span><br></span><span class="token-line" style="color:#000000"><span class="token plain"> - f (file, size=29116)</span><br></span><span class="token-line" style="color:#000000"><span class="token plain"> - g (file, size=2557)</span><br></span><span class="token-line" style="color:#000000"><span class="token plain"> - h.lst (file, size=62596)</span><br></span><span class="token-line" style="color:#000000"><span class="token plain"> - b.txt (file, size=14848514)</span><br></span><span class="token-line" style="color:#000000"><span class="token plain"> - c.dat (file, size=8504156)</span><br></span><span class="token-line" style="color:#000000"><span class="token plain"> - d (dir, size=24933642)</span><br></span><span class="token-line" style="color:#000000"><span class="token plain"> - j (file, size=4060174)</span><br></span><span class="token-line" style="color:#000000"><span class="token plain"> - d.log (file, size=8033020)</span><br></span><span class="token-line" style="color:#000000"><span class="token plain"> - d.ext (file, size=5626152)</span><br></span><span class="token-line" style="color:#000000"><span class="token plain"> - k (file, size=7214296)</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="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><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="format-of-the-output">Format of the output<a href="#format-of-the-output" class="hash-link" aria-label="Direct link to Format of the output" title="Direct link to Format of the output"></a></h2>
<p>Your program should support 2 switches:</p>
<ul>
<li><code>-gt min_size</code> that will print out suspiciously big files.</li>
<li><code>-f total_size min_unused</code> that will print out a file to be deleted.</li>
</ul>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="-gt-min_size"><code>-gt min_size</code><a href="#-gt-min_size" class="hash-link" aria-label="Direct link to -gt-min_size" title="Direct link to -gt-min_size"></a></h3>
<p>With this switch you are provided one additional argument:</p>
<ul>
<li><code>min_size</code> that is the lower bound (inclusive) for size of any file or
directory that is supposed to be listed.</li>
</ul>
<p>When your program is being run with this switch, it is is supposed to print out
all files <strong>and</strong> directories that are bigger than the provided <code>min_size</code>.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="-f-total_size-min_unused"><code>-f total_size min_unused</code><a href="#-f-total_size-min_unused" class="hash-link" aria-label="Direct link to -f-total_size-min_unused" title="Direct link to -f-total_size-min_unused"></a></h3>
<p>With this switch you are provided two additional arguments:</p>
<ul>
<li><code>total_size</code> that is a total size of the filesystem<sup><a href="#user-content-fn-2" id="user-content-fnref-2" data-footnote-ref="true" aria-describedby="footnote-label">2</a></sup>.</li>
<li><code>min_unused</code> that is a minimum of free space required for an upgrade.</li>
</ul>
<p>Your program should find <strong>exactly one</strong> file or a directory that is of the
smallest size, but big enough to free enough space for the upgrade to proceed.</p>
<p>In other words, if that file or directory is deleted, following should hold:</p>
<span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mrow><mi mathvariant="monospace">t</mi><mi mathvariant="monospace">o</mi><mi mathvariant="monospace">t</mi><mi mathvariant="monospace">a</mi><mi mathvariant="monospace">l</mi><mi mathvariant="monospace">_</mi><mi mathvariant="monospace">s</mi><mi mathvariant="monospace">i</mi><mi mathvariant="monospace">z</mi><mi mathvariant="monospace">e</mi></mrow><mo></mo><mrow><mi mathvariant="monospace">u</mi><mi mathvariant="monospace">s</mi><mi mathvariant="monospace">e</mi><mi mathvariant="monospace">d</mi></mrow><mo></mo><mrow><mi mathvariant="monospace">m</mi><mi mathvariant="monospace">i</mi><mi mathvariant="monospace">n</mi><mi mathvariant="monospace">_</mi><mi mathvariant="monospace">u</mi><mi mathvariant="monospace">n</mi><mi mathvariant="monospace">u</mi><mi mathvariant="monospace">s</mi><mi mathvariant="monospace">e</mi><mi mathvariant="monospace">d</mi></mrow></mrow><annotation encoding="application/x-tex">\mathtt{total\_size} - \mathtt{used} \geq \mathtt{min\_unused}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7063em;vertical-align:-0.0951em"></span><span class="mord"><span class="mord mathtt">total_size</span></span><span class="mspace" style="margin-right:0.2222em"></span><span class="mbin"></span><span class="mspace" style="margin-right:0.2222em"></span></span><span class="base"><span class="strut" style="height:0.7719em;vertical-align:-0.136em"></span><span class="mord"><span class="mord mathtt">used</span></span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel"></span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:0.7063em;vertical-align:-0.0951em"></span><span class="mord"><span class="mord mathtt">min_unused</span></span></span></span></span></span>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="example-usage">Example usage<a href="#example-usage" class="hash-link" aria-label="Direct link to Example usage" title="Direct link to Example usage"></a></h2>
<p>You can have a look at the example usage of your program. We can run your
program from the shell like</p>
<p>$ ./garbage_collect shell_history.txt -gt 10000000
24933642 /d
14848514 /b.txt
48381165 /</p>
<p>$ ./garbage_collect shell_history.txt -f 70000000 30000000
24933642 /d</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="requirements-and-notes">Requirements and notes<a href="#requirements-and-notes" class="hash-link" aria-label="Direct link to Requirements and notes" title="Direct link to Requirements and notes"></a></h2>
<ul>
<li>Define <strong>structures</strong> (and <strong>enumerations</strong>, if applicable) for the parsed
information from the files.</li>
<li>For keeping the “records”, use some <strong>dynamic</strong> data structure.<!-- -->
<ul>
<li>Don&#x27;t forget to consider pros and cons of using <em>specific</em> data structures
before going through implementing.</li>
</ul>
</li>
<li>You <strong>are not required</strong> to produce 1:1 output to the provided examples, they
are just a hint to not waste your time tinkering with a user experience.</li>
<li>If any of the operations on the input files should fail,
<strong>you are expected to</strong> handle the situation <em>accordingly</em>.</li>
<li>Failures of any other common functions (e.g. functions used for memory
management) should be handled in <strong>the same way</strong> as they were in the
homeworks and seminars.</li>
<li>Your program <strong>must free</strong> all the resources before exiting.</li>
</ul>
<section data-footnotes="true" class="footnotes"><h2 class="anchor anchorWithStickyNavbar_LWe7 sr-only" id="footnote-label">Footnotes<a href="#footnote-label" class="hash-link" aria-label="Direct link to Footnotes" title="Direct link to Footnotes"></a></h2>
<ol>
<li id="user-content-fn-1">
<p>Also applies to Fedora, but… we use arch btw <!-- -->😉 <a href="#user-content-fnref-1" data-footnote-backref="" aria-label="Back to reference 1" class="data-footnote-backref"></a></p>
</li>
<li id="user-content-fn-2">
<p>duh! <a href="#user-content-fnref-2" data-footnote-backref="" aria-label="Back to reference 2" class="data-footnote-backref"></a></p>
</li>
</ol>
</section></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="theme-doc-footer-edit-meta-row row"><div class="col"><a href="https://github.com/mfocko/blog/tree/main/c/pexam/b-garbage_collect.md" target="_blank" rel="noopener noreferrer" class="theme-edit-this-page"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" class="iconEdit_Z9Sw" aria-hidden="true"><g><path d="m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"></path></g></svg>Edit this page</a></div><div class="col lastUpdated_vwxv"><span class="theme-last-updated">Last updated<!-- --> on <b><time datetime="2023-05-08T00:00:00.000Z">May 8, 2023</time></b></span></div></div></footer></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--prev" href="/c/category/practice-exams/"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Practice Exams</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/c/pexam/cams/"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">Practice exam C</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#format-of-the-shell-history" class="table-of-contents__link toc-highlight">Format of the shell history</a></li><li><a href="#format-of-the-output" class="table-of-contents__link toc-highlight">Format of the output</a><ul><li><a href="#-gt-min_size" class="table-of-contents__link toc-highlight"><code>-gt min_size</code></a></li><li><a href="#-f-total_size-min_unused" class="table-of-contents__link toc-highlight"><code>-f total_size min_unused</code></a></li></ul></li><li><a href="#example-usage" class="table-of-contents__link toc-highlight">Example usage</a></li><li><a href="#requirements-and-notes" class="table-of-contents__link toc-highlight">Requirements and notes</a></li></ul></div></div></div></div></main></div></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Git</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://github.com/mfocko" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://gitlab.com/mfocko" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitLab<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://git.mfocko.xyz/mfocko" target="_blank" rel="noopener noreferrer" class="footer__link-item">Gitea (self-hosted)<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Social #1</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://www.linkedin.com/in/mfocko/" target="_blank" rel="noopener noreferrer" class="footer__link-item">LinkedIn<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://fosstodon.org/@m4tt_314" target="_blank" rel="noopener noreferrer" class="footer__link-item">Fosstodon<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://hachyderm.io/@m4tt_314" target="_blank" rel="noopener noreferrer" class="footer__link-item">Hachyderm.io<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Social #2</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://twitter.com/m4tt_314" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitch.tv/m4tt_314" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitch<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://ko-fi.com/m4tt_314" target="_blank" rel="noopener noreferrer" class="footer__link-item">Ko-fi<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright">Copyright © 2023 Matej Focko.</div></div></div></footer></div>
</body>
</html>