In this HackerRank Tower Breakers problem solution, Two players are playing a game of Tower Breakers! Player 1 always moves first, and both players always play optimally. The rules of the game are as follows:
- Initially, there are N towers.
- Each tower is of height M.
- The players move in alternating turns.
- In each turn, a player can choose a tower of height X and reduce its height to Y, where 1 <= Y < X and Y evenly divide X.
If the current player is unable to make a move, they lose the game.
Given the values of N and M, determine which player will win. If the first player wins, return 1. Otherwise, return 2.
Problem solution in Python.
T = int(input()) for t in range(T): n, m = [int(x) for x in input().strip().split()] if m == 1: print(2) else: if n % 2 == 1: print(1) else: print(2)
Problem solution in Java.
import java.io.*; import java.util.*; public class Solution { public static void main(String[] args) { /* Enter your code here. Read input from STDIN. Print output to STDOUT. Your class should be named Solution. */ Scanner in = new Scanner(System.in); int T = in.nextInt(); int N, M; while (T-- > 0) { N = in.nextInt(); M = in.nextInt(); System.out.println((M != 1 && N%2 == 1)? 1 : 2 ); } } }
Problem solution in C++.
#include <cmath> #include <cstdio> #include <vector> #include <iostream> #include <algorithm> using namespace std; int main() { int n,x,y; cin>>n; do{ cin>>x>>y; (y==1||x%2==0)?cout<<"2"<<endl:cout<<"1"<<endl; n--; }while(n>0); /* Enter your code here. Read input from STDIN. Print output to STDOUT */ return 0; }
Problem solution in C.
#include <stdio.h> #include <string.h> #include <math.h> #include <stdlib.h> int main() { int n; scanf("%d", &n); for(int testcase = 0; testcase < n; testcase++) { int num_towers; int height; scanf("%d %d", &num_towers, &height); if(height == 1 || num_towers % 2 == 0) printf("2n"); else printf("1n"); } return 0; }
C# code by me
if(n % 2 == 1 && m > 1)
{
return 1;
}
return 2;
This comment has been removed by the author.
using System.CodeDom.Compiler;
using System.Collections.Generic;
using System.Collections;
using System.ComponentModel;
using System.Diagnostics.CodeAnalysis;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.Serialization;
using System.Text.RegularExpressions;
using System.Text;
using System;
class Result
{
/*
* Complete the 'towerBreakers' function below.
*
* The function is expected to return an INTEGER.
* The function accepts following parameters:
* 1. INTEGER n
* 2. INTEGER m
*/
public static int towerBreakers(int n, int m)
{
if(n % 2 == 1 && m > 1)
{
return 1;
}
return 2;
}
}
class Solution
{
public static void Main(string[] args)
{
TextWriter textWriter = new StreamWriter(@System.Environment.GetEnvironmentVariable("OUTPUT_PATH"), true);
int t = Convert.ToInt32(Console.ReadLine().Trim());
for (int tItr = 0; tItr < t; tItr++)
{
string[] firstMultipleInput = Console.ReadLine().TrimEnd().Split(' ');
int n = Convert.ToInt32(firstMultipleInput[0]);
int m = Convert.ToInt32(firstMultipleInput[1]);
int result = Result.towerBreakers(n, m);
textWriter.WriteLine(result);
}
textWriter.Flush();
textWriter.Close();
}
}
Problem solution in JavaScript
============================
function towerBreakers(n, m) {
if(m==1 || n%2 == 0){
return 2
} else {
return 1
}
}