Soluție HackerRank pentru Game of Stones. Include cerința formatată, exemple, explicația pașilor și cod sursă.

  • Problemă: Game of Stones

Cerinta completa

Two players called [Expresie matematică indisponibilă în copia arhivată] and [Expresie matematică indisponibilă în copia arhivată] are playing a game with a starting number of stones. Player [Expresie matematică indisponibilă în copia arhivată] always plays first, and the two players move in alternating turns. The game’s rules are as follows:

  • In a single move, a player can remove either [Expresie matematică indisponibilă în copia arhivată], [Expresie matematică indisponibilă în copia arhivată], or [Expresie matematică indisponibilă în copia arhivată] stones from the game board.
  • If a player is unable to make a move, that player loses the game.

Given the starting number of stones, find and print the name of the winner. [Expresie matematică indisponibilă în copia arhivată] is named First and [Expresie matematică indisponibilă în copia arhivată] is named Second. Each player plays optimally, meaning they will not make a move that causes them to lose the game if a winning move exists.

For example, if [Expresie matematică indisponibilă în copia arhivată], [Expresie matematică indisponibilă în copia arhivată] can make the following moves:

  • [Expresie matematică indisponibilă în copia arhivată] removes [Expresie matematică indisponibilă în copia arhivată] stones leaving [Expresie matematică indisponibilă în copia arhivată]. [Expresie matematică indisponibilă în copia arhivată] will then remove [Expresie matematică indisponibilă în copia arhivată] stones and win.
  • [Expresie matematică indisponibilă în copia arhivată] removes [Expresie matematică indisponibilă în copia arhivată] stones leaving [Expresie matematică indisponibilă în copia arhivată]. [Expresie matematică indisponibilă în copia arhivată] cannot move and loses.

[Expresie matematică indisponibilă în copia arhivată] would make the second play and win the game.

Function Description

Complete the gameOfStones function in the editor below. It should return a string, either First or Second.

gameOfStones has the following parameter(s):

  • n: an integer that represents the starting number of stones

Input Format

The first line contains an integer [Expresie matematică indisponibilă în copia arhivată], the number of test cases.
Each of the next [Expresie matematică indisponibilă în copia arhivată] lines contains an integer [Expresie matematică indisponibilă în copia arhivată], the number of stones in a test case.

Constraints

  • [Expresie matematică indisponibilă în copia arhivată]

Output Format

On a new line for each test case, print First if the first player is the winner. Otherwise print Second.

Sample Input

8
1
2
3
4
5
6
7
10

Sample Output

Second
First
First
First
First
First
Second
First

Explanation

In the sample, we have [Expresie matematică indisponibilă în copia arhivată] testcases.

If [Expresie matematică indisponibilă în copia arhivată], [Expresie matematică indisponibilă în copia arhivată] can’t make any moves and loses the game.

If [Expresie matematică indisponibilă în copia arhivată], [Expresie matematică indisponibilă în copia arhivată] removes [Expresie matematică indisponibilă în copia arhivată] stones and wins the game.

If [Expresie matematică indisponibilă în copia arhivată], [Expresie matematică indisponibilă în copia arhivată] removes [Expresie matematică indisponibilă în copia arhivată] stones in their first move, leaving [Expresie matematică indisponibilă în copia arhivată] stone on the board and winning the game.

If [Expresie matematică indisponibilă în copia arhivată], [Expresie matematică indisponibilă în copia arhivată] removes [Expresie matematică indisponibilă în copia arhivată] stones in their first move, leaving [Expresie matematică indisponibilă în copia arhivată] stone on the board and winning the game.

If [Expresie matematică indisponibilă în copia arhivată], [Expresie matematică indisponibilă în copia arhivată] removes all [Expresie matematică indisponibilă în copia arhivată] stones from the game board, winning the game.

If [Expresie matematică indisponibilă în copia arhivată], [Expresie matematică indisponibilă în copia arhivată] removes [Expresie matematică indisponibilă în copia arhivată] stones in their first move, leaving [Expresie matematică indisponibilă în copia arhivată] stone on the board and winning the game.

If [Expresie matematică indisponibilă în copia arhivată], [Expresie matematică indisponibilă în copia arhivată] can make any of the following three moves:

  1. Remove [Expresie matematică indisponibilă în copia arhivată] stones, leaving [Expresie matematică indisponibilă în copia arhivată] stones on the board. [Expresie matematică indisponibilă în copia arhivată] then removes [Expresie matematică indisponibilă în copia arhivată] stones, winning the game.
  2. Remove [Expresie matematică indisponibilă în copia arhivată] stones, leaving [Expresie matematică indisponibilă în copia arhivată] stones on the board. [Expresie matematică indisponibilă în copia arhivată] then removes [Expresie matematică indisponibilă în copia arhivată] stones, leaving [Expresie matematică indisponibilă în copia arhivată] stone left on the board and winning the game.
  3. Remove [Expresie matematică indisponibilă în copia arhivată] stones, leaving [Expresie matematică indisponibilă în copia arhivată] stones on the board. [Expresie matematică indisponibilă în copia arhivată] then removes the [Expresie matematică indisponibilă în copia arhivată] remaining stones and wins the game.

All possible moves result in [Expresie matematică indisponibilă în copia arhivată] winning.

If [Expresie matematică indisponibilă în copia arhivată], [Expresie matematică indisponibilă în copia arhivată] can remove either [Expresie matematică indisponibilă în copia arhivată] or [Expresie matematică indisponibilă în copia arhivată] stones to win the game.


Limbajul de programare folosit: java8

Cod:

import java.util.Scanner;

public class Solution {
	static final int LIMIT = 100;
	static final int[] STONES_IN_ONE_MOVE = { 2, 3, 5 };

	static boolean[] firstWins;

	public static void main(String[] args) {
		buildFirstWins();

		Scanner sc = new Scanner(System.in);
		int T = sc.nextInt();
		for (int tc = 0; tc < T; tc++) {
			int n = sc.nextInt();
			System.out.println(firstWins[n] ? "First" : "Second");
		}
		sc.close();
	}

	static void buildFirstWins() {
		firstWins = new boolean[LIMIT + 1];
		for (int i = 0; i < firstWins.length; i++) {
			for (int stone : STONES_IN_ONE_MOVE) {
				if (i >= stone && !firstWins[i - stone]) {
					firstWins[i] = true;
					break;
				}
			}
		}
	}
}

Scor obtinut: 1.0

Submission ID: 464603595

Link challenge: https://www.hackerrank.com/challenges/game-of-stones-1/problem

Game of Stones