In this HackerRank Bob and Ben problem solution we have given the values of Mi the number of nodes in the tree and a constant Ki for each tree in the forest, we need to determine who will win the game.
Problem solution in Python.
#!/bin/python3 import os import sys import functools # # Complete the bobAndBen function below. # def bobAndBen(trees): # # Write your code here. # nims = [] for tree in trees: nims.append(grundy(tree[0])) res = functools.reduce(lambda a,b: a^b, nims) if res == 0: return "BEN" return "BOB" def grundy(m): res = 0 if m == 0 or m == 2 else ((m-1) % 2) + 1 return res if __name__ == '__main__': fptr = open(os.environ['OUTPUT_PATH'], 'w') g = int(input()) for g_itr in range(g): n = int(input()) trees = [] for _ in range(n): trees.append(list(map(int, input().rstrip().split()))) result = bobAndBen(trees) fptr.write(result + 'n') fptr.close()
Problem solution in Java.
import java.io.*; import java.util.*; public class Solution { public static void main(String[] args) { Scanner input = new Scanner(System.in); int G = input.nextInt(); for(int g=0; g<G; g++) { int n = input.nextInt(); int p = 0; for(int i=0; i<n; i++) { int m = input.nextInt(); int k = input.nextInt(); if(m%2 == 1) p = p^1; else if(m > 2) p = p^2; } if(p==0) System.out.println("BEN"); else System.out.println("BOB"); } } }
Problem solution in C++.
#include<string> #include<iostream> #include<fstream> #include<stdio.h> #include<string.h> #include<memory.h> #include<math.h> #include<vector> #include<algorithm> #include<map> #include<numeric> #include<deque> #include<set> #include<functional> #include<queue> #include<stack> #include<unordered_set> #include<unordered_map> #define REP(i,s,n) for(int (i)=s; (i)<(int)(n);(i)++) #define RIT(it,c) for(__typeof(c.begin()) it = c.begin();it!=c.end();it++) #define RITT(it,v,c) for(__typeof(c.begin()) it = v;it!=c.end();it++) #define ALL(x) x.begin(), x.end() #define SZ(x) (int)(x).size() #define MSET(m,v) memset(m,v,sizeof(m)) #define auto(c) __typeof(c.begin()) using namespace std; typedef vector<int> vi; typedef pair<int,int>ii; typedef long long LL; typedef pair<ii,int> iiit; int main(){ int T; cin>>T; for(int k=0;k<T;k++){ int n,sum=0; cin>>n; int cnt = n; for(int i=0;i<n;i++){ int m,l; scanf("%d%d",&m,&l); if(m==2) cnt++; sum += m%2; } if((cnt%2==0 && sum%2==0)) cout<<"BEN"<<endl; else cout<<"BOB"<<endl; } }
Problem solution in C.
#include<stdio.h> #include<string.h> #include<math.h> #include<stdlib.h> int main() { int test,t; scanf("%d",&test); for(t=1;t<=test;t++) { int n,i; scanf("%d",&n); int answer=0; for(i=0;i<n;i++) { int m,k; scanf("%d %d",&m,&k); if(m==2) { m=0; } else if(m==3) { m=1; } else if(m>3) { if(m%2==0) { m=2; } else { m=1; } } answer=answer^m; } if(answer==0) { printf("BENn"); } else { printf("BOBn"); } } return 0; }