{
    "componentChunkName": "component---src-templates-post-js",
    "path": "/blog/the-rock-paper-scissor-logic",
    "result": {"data":{"markdownRemark":{"html":"<p>How would you go about solving this problem?</p>\n<p><strong><code class=\"language-text\">You have write a method to check wether you win, lose or tie in a game of Rock-Paper-Scissor, based on the choice of you and your opponent.</code></strong><br>\n<strong><code class=\"language-text\">The method should return 2 if you win, 1 if you tie and 0 if you lose.</code></strong><br>\n<strong><code class=\"language-text\">And we can use only two if statements and no 'or' or 'and' operators</code></strong></p>\n<p>Lets use some characters and values to represent the choices and outcomes:<br>\n<code class=\"language-text\">Rock = A</code> | <code class=\"language-text\">Paper = B</code> | <code class=\"language-text\">Scissor = C</code><br>\n<code class=\"language-text\">Win = 6</code> | <code class=\"language-text\">Tie = 3</code> | <code class=\"language-text\">Loss = 0</code></p>\n<p>Here is the program you need to make changes to, replace the places where there's <code class=\"language-text\">...</code> with <strong>only a single line</strong> of your code.</p>\n<div class=\"gatsby-code-title\">RockPaperScissor.java</div>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">RockPaperScissor</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token punctuation\">.</span><span class=\"token punctuation\">.</span><span class=\"token punctuation\">.</span>\n    <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> <span class=\"token keyword\">int</span> <span class=\"token function\">checkWinner</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">char</span> player<span class=\"token punctuation\">,</span> <span class=\"token keyword\">char</span> opponent<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">if</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">.</span><span class=\"token punctuation\">.</span><span class=\"token punctuation\">.</span><span class=\"token punctuation\">)</span> <span class=\"token keyword\">return</span> <span class=\"token number\">3</span><span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">.</span><span class=\"token punctuation\">.</span><span class=\"token punctuation\">.</span>\n        <span class=\"token keyword\">if</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">.</span><span class=\"token punctuation\">.</span><span class=\"token punctuation\">.</span><span class=\"token punctuation\">)</span> <span class=\"token keyword\">return</span> <span class=\"token number\">6</span><span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">return</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>Try to find the solution yourself before you read the next section.</p>\n<hr>\n<details> \n<summary>Need a hint?</summary>\n<div class=\"gatsby-code-title\">RockPaperScissor.java</div>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">RockPaperScissor</span> <span class=\"token punctuation\">{</span>\n<span class=\"gatsby-highlight-code-line\">    <span class=\"token comment\">//Use an array of characters to represent the choices</span></span><span class=\"gatsby-highlight-code-line\">    <span class=\"token keyword\">static</span> <span class=\"token keyword\">char</span><span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span> choices <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span><span class=\"token char\">'C'</span><span class=\"token punctuation\">,</span> <span class=\"token char\">'A'</span><span class=\"token punctuation\">,</span> <span class=\"token char\">'B'</span><span class=\"token punctuation\">,</span> <span class=\"token char\">'C'</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span></span>    <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> <span class=\"token keyword\">int</span> <span class=\"token function\">checkWinner</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">char</span> player<span class=\"token punctuation\">,</span> <span class=\"token keyword\">char</span> opponent<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">if</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">.</span><span class=\"token punctuation\">.</span><span class=\"token punctuation\">.</span><span class=\"token punctuation\">)</span> <span class=\"token keyword\">return</span> <span class=\"token number\">3</span><span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">.</span><span class=\"token punctuation\">.</span><span class=\"token punctuation\">.</span>\n        <span class=\"token keyword\">if</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">.</span><span class=\"token punctuation\">.</span><span class=\"token punctuation\">.</span><span class=\"token punctuation\">)</span> <span class=\"token keyword\">return</span> <span class=\"token number\">6</span><span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">return</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n</details>\n<hr>\n<details> \n<summary>Need one more hint?</summary>\n<p>Look at this pattern<br>\nWhenever the player wins,<br>\nthese are the plays:<br>\n<code class=\"language-text\">player: A beats C :opponent</code><br>\n<code class=\"language-text\">player: B beats A :opponent</code><br>\n<code class=\"language-text\">player: C beats B :opponent</code></p>\n<p>If we organize this a bit differently, we can find a pattern<br>\n<code class=\"language-text\">player choice</code><br>\n<code class=\"language-text\">A</code> <code class=\"language-text\">B</code> <code class=\"language-text\">C</code> <code class=\"language-text\">A</code><br>\n<code class=\"language-text\">C</code> <code class=\"language-text\">A</code> <code class=\"language-text\">B</code> <code class=\"language-text\">C</code> &#x3C;- the array we created<br>\n<code class=\"language-text\">opponent choice</code></p>\n<p>Notice how whenever we win, the opponent's choice is always one value behind of the player's choice in the array.<br>\nie.<br>\nwhen the player choice is <code class=\"language-text\">B</code>, the opponent's choice is <code class=\"language-text\">A</code><br>\nwhen the player choice is <code class=\"language-text\">A</code>, the opponent's choice is <code class=\"language-text\">C</code>, because <code class=\"language-text\">C</code> is one value behind <code class=\"language-text\">A</code> in the array.<br>\nthis is the extra element at the start.</p>\n</details>\n<hr>\n<details> \n<summary>Here's my solution to the problem-</summary>\n<div class=\"gatsby-code-title\">RockPaperScissor.java</div>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">RockPaperScissor</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">static</span> <span class=\"token keyword\">char</span><span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span> choices <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span><span class=\"token char\">'C'</span><span class=\"token punctuation\">,</span> <span class=\"token char\">'A'</span><span class=\"token punctuation\">,</span> <span class=\"token char\">'B'</span><span class=\"token punctuation\">,</span> <span class=\"token char\">'C'</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> <span class=\"token keyword\">int</span> <span class=\"token function\">checkWinner</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">char</span> player<span class=\"token punctuation\">,</span> <span class=\"token keyword\">char</span> opponent<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token comment\">//In case of a tie</span>\n        <span class=\"token keyword\">if</span><span class=\"token punctuation\">(</span>player <span class=\"token operator\">==</span> opponent<span class=\"token punctuation\">)</span> <span class=\"token keyword\">return</span> <span class=\"token number\">3</span><span class=\"token punctuation\">;</span>\n        <span class=\"token comment\">//In case of a win</span>\n        <span class=\"token keyword\">if</span><span class=\"token punctuation\">(</span>choices<span class=\"token punctuation\">[</span>player <span class=\"token operator\">-</span> <span class=\"token char\">'A'</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">==</span> opponent<span class=\"token punctuation\">)</span>  <span class=\"token keyword\">return</span> <span class=\"token number\">6</span><span class=\"token punctuation\">;</span>\n        <span class=\"token comment\">//In case of a loss</span>\n        <span class=\"token keyword\">return</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>Okay, so what did I do here?<br>\nI used the <code class=\"language-text\">choices</code> array to store the choices.<br>\nI used the <code class=\"language-text\">player - 'A' + 1</code> to get the index of the player's choice in the <code class=\"language-text\">choices</code> array.<br>\nHow does that work you ask?<br>\nWell, the ASCII value of <code class=\"language-text\">A</code> is <code class=\"language-text\">65</code> and the ASCII value of <code class=\"language-text\">C</code> is <code class=\"language-text\">67</code>.<br>\nSo, when the player gives a character input from <code class=\"language-text\">A</code> to <code class=\"language-text\">C</code>, we actually have a value from <code class=\"language-text\">65</code> to <code class=\"language-text\">67</code>.<br>\nIn order to find this value in the <code class=\"language-text\">choices</code> array, we need to subtract <code class=\"language-text\">65</code> from the player input.<br>\nSo we get a range from 0-2.<br>\nBut the choices array starts from 1 because of the extra elements on both the ends.<br>\nSo we add <code class=\"language-text\">1</code> to the value.</p>\n<p>Now since we know that we can only win if the opponent's choice is one value behind the player's choice, we can use the <code class=\"language-text\">choices</code> array to check if the player wins or not.<br>\nSo to check for the win, we can simply use <code class=\"language-text\">choices[player - 'A' + 1 - 1] == opponent</code> (simplified to <code class=\"language-text\">choices[player - 'A'] == opponent</code>)</p>\n<p>And that's how you solve this in just three lines of code./\nThanks for reading :))))))</p>\n</details>\n<hr>\n<p>This is from one of the problems in the <a href=\"https://adventofcode.com/2022/day/2\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Advent of Code 2022</a>.</p>","frontmatter":{"title":"The Rock-Paper-Scissor logic","description":"Writing a method to check wether you win, lose or tie in a game of Rock-Paper-Scissor. With only two if statements and no 'or' or 'and' operators.","date":"2022-12-19T00:00:00.000Z","slug":"/blog/the-rock-paper-scissor-logic","tags":["AdventOfCode","Java"]}}},"pageContext":{}},
    "staticQueryHashes": ["1994492073","2009693873","3081057667","3825832676"]}