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:
- 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.
- 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.
- 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
