<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: nardiyansah</title>
    <description>The latest articles on DEV Community by nardiyansah (@janatri1398).</description>
    <link>https://dev.to/janatri1398</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F713559%2F2d6de34d-c59e-432d-8aa0-554d9f66e698.jpg</url>
      <title>DEV Community: nardiyansah</title>
      <link>https://dev.to/janatri1398</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/janatri1398"/>
    <language>en</language>
    <item>
      <title>panic: assignment to entry in nil map</title>
      <dc:creator>nardiyansah</dc:creator>
      <pubDate>Sat, 30 Jul 2022 02:54:48 +0000</pubDate>
      <link>https://dev.to/janatri1398/panic-assignment-to-entry-in-nil-map-1jm6</link>
      <guid>https://dev.to/janatri1398/panic-assignment-to-entry-in-nil-map-1jm6</guid>
      <description>&lt;p&gt;Kenapa code ini error ? atau lebih tepatnya panic kalo di Go&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="k"&gt;package&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="s"&gt;"fmt"&lt;/span&gt;

&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

    &lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="n"&gt;m&lt;/span&gt; &lt;span class="k"&gt;map&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;

    &lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;"a"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;

    &lt;span class="n"&gt;fmt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;"a"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;panic: assignment to entry in nil map&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;solusi mengatasi panic diatas adalah menggunakan function make untuk initialize map.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="k"&gt;package&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="s"&gt;"fmt"&lt;/span&gt;

&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

    &lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="n"&gt;m&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;make&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;map&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;"a"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;

    &lt;span class="n"&gt;fmt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;"a"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ketika kita deklarasi suatu map seperti ini di Go.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="n"&gt;m&lt;/span&gt; &lt;span class="k"&gt;map&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;kita membuat nil map. nil map sama seperti empty map panjang elemennya 0 dengan pengecualian kita tidak bisa menambah elemen di nil map.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="k"&gt;map&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;
&lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;make&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;map&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;assert&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Equal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Referensi:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://yourbasic.org/golang/gotcha-assignment-entry-nil-map/"&gt;https://yourbasic.org/golang/gotcha-assignment-entry-nil-map/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://yourbasic.org/golang/maps-explained/"&gt;https://yourbasic.org/golang/maps-explained/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Credit:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cover photo Photo by &lt;a href="https://unsplash.com/@usmanyousaf?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText"&gt;Usman Yousaf&lt;/a&gt; on &lt;a href="https://unsplash.com/s/photos/panic?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText"&gt;Unsplash&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>go</category>
    </item>
    <item>
      <title>Pahami permasalahan sebelum memecahkan</title>
      <dc:creator>nardiyansah</dc:creator>
      <pubDate>Tue, 16 Nov 2021 13:03:09 +0000</pubDate>
      <link>https://dev.to/janatri1398/pahami-permasalahan-sebelum-memecahkan-2169</link>
      <guid>https://dev.to/janatri1398/pahami-permasalahan-sebelum-memecahkan-2169</guid>
      <description>&lt;p&gt;Jadi saya sedang mencoba untuk rutin latihan problem solving menggunakan platform Hackerrank. Kemarin saya sampai di soal &lt;a href="https://www.hackerrank.com/challenges/one-week-preparation-kit-tower-breakers-1/problem"&gt;Tower Breakers&lt;/a&gt;. Soal ini tentang menentukan siapakah diantara 2 pemain yang akan menang. Peraturan permainan adalah di satu sesi permainan akan disediakan &lt;code&gt;n&lt;/code&gt; Tower yang tersusun dari sejumlah &lt;code&gt;m&lt;/code&gt; blok. kedua pemain ini akan secara bergantian mengurangi jumlah blok di Tower dengan persyaratan jumlah blok yang baru adalah pembagi habis jumlah blok saat ini (sisa pembagian 0). Pemain akan menang jika bisa membuat pemain lain tidak bisa mengurangi ketinggian Tower.&lt;/p&gt;

&lt;p&gt;Saya latihan dengan cara coba mengerjakan soal tersebut selama 15 menit, jika masih buntu ide, saya akan coba melihat kolom diskusi. Dalam 15 menit saya dipusingkan dengan bagaimana mensimulasikan langkah setiap pemain (menggunakan looping &lt;code&gt;for&lt;/code&gt; atau &lt;code&gt;while&lt;/code&gt;). Saat waktu 15 menit hampir habis, saya mencoba bereksperimen bagaimana kalau sebenarnya jawabannya tidak perlu &lt;code&gt;looping&lt;/code&gt; ? jadi saya coba jika &lt;code&gt;n * m % 2 == 0&lt;/code&gt; maka player 2 yang menang selain itu player 1 yang menang.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nf"&gt;towerBreakers&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;m&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dan ternyata belum benar. Akhirnya saya menyerah dan coba lihat di kolom diskusi. Menurut saya ini adalah contoh kontribusi di forum diskusi yang baik. Ketimbang kita hanya membagikan kode kita, akan lebih berguna jika kita menjelaskan pendekatan logika kita ketika memecahkan masalah ini.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Tg3VnX8b--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/e0tvz5ftgorjckentczn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Tg3VnX8b--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/e0tvz5ftgorjckentczn.png" alt="Hackerrank Discussion" width="863" height="680"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Setelah itu saya baru sadar, saya mesti memahami dulu apa yang akan dilakukan oleh setiap pemain untuk menang. Disini ada beberapa macam kasus yang bisa memastikan player mana yang menang.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Case 1&lt;/strong&gt; : misalkan hanya ada 1 Tower dan jumlah bloknya lebih dari 1, karena di peraturan pasti player 1 yang akan jalan duluan, jika saya jadi player 1 saya akan langsung membuat tinggi Tower menjadi 1 blok karena ini memastikan saya akan menang (m % 1 pasti 0).&lt;br&gt;
&lt;strong&gt;Case 2&lt;/strong&gt; : misalkan jumlah Tower adalah bilangan genap. Ini sudah bisa dipastikan player 2 yang akan menang, karena dia akan meng-copy setiap langkah dari player 1 sampai player 1 tidak bisa jalan. Jika tower ganjil berarti itu kembali ke case 1 karena tidak ada gunanya player 2 menyalin langkah player 1.&lt;/p&gt;

&lt;p&gt;Berdasarkan case diatas code penyelesaiannya kurang lebih seperti ini.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nf"&gt;towerBreakers&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Setelah saya coba submit ternyata ada case lain yang belum coba kita bayangkan, yaitu case dimana jumlah blok di setiap tower hanya 1. Jika case-nya adalah itu sudah pasti player 2 akan menang karena player 1 langsung tidak bisa jalan di giliran pertama.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--7NyqP-6N--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/50d7yu0myvy866u2sbr5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7NyqP-6N--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/50d7yu0myvy866u2sbr5.png" alt="another case" width="845" height="277"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Setelah memasukkan case terakhir, akhirnya code kita melewati semua test case yang ada.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nf"&gt;towerBreakers&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="n"&gt;m&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dari sini saya belajar kalau kita sebagai programmer tidak hanya sekedar coding saja, tapi kita perlu fokus ke pemecahan masalahnya.&lt;/p&gt;

&lt;p&gt;Credit:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cover image: Photo by &lt;a href="https://unsplash.com/@olav_ahrens?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText"&gt;Olav Ahrens Røtne&lt;/a&gt; on &lt;a href="https://unsplash.com/s/photos/problem-solving?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText"&gt;Unsplash&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>indonesia</category>
      <category>algoritma</category>
    </item>
  </channel>
</rss>
