biryu2205 / Biryu

0 stars 0 forks source link

Hackerrank Can You Access? #107

Closed biryu2205 closed 6 years ago

biryu2205 commented 6 years ago
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.security.Permission;

public class Solution {

  public static void main(String[] args) throws Exception {
    DoNotTerminate.forbidExit();

    try {
      BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
      int num = Integer.parseInt(br.readLine().trim());
      Object
          o;// Must be used to hold the reference of the instance of the class Solution.Inner.Private
      Class klass1 = Class.forName("Solution$Inner");
      Class klass2 = Class.forName("Solution$Inner$Private");
      Constructor ctor = klass2.getDeclaredConstructor(klass1);
      ctor.setAccessible(true);
      o = ctor.newInstance(klass1.newInstance());
      Method meth = klass2.getDeclaredMethod("powerof2", int.class);
      meth.setAccessible(true);
      System.out.println(String.valueOf(num) + " is " + (String) meth.invoke(o, num));
      System.out.println(
          "An instance of class: " + o.getClass().getCanonicalName() + " has been created");
    }//end of try

    catch (DoNotTerminate.ExitTrappedException e) {
      System.out.println("Unsuccessful Termination!!");
    }
  }//end of main

  static class Inner {
    private class Private {
      private String powerof2(int num) {
        return ((num & num - 1) == 0) ? "power of 2" : "not a power of 2";
      }
    }
  }//end of Inner
}//end of Solution

class DoNotTerminate { //This class prevents exit(0)

  public static class ExitTrappedException extends SecurityException {

    private static final long serialVersionUID = 1L;
  }

  public static void forbidExit() {
    final SecurityManager securityManager = new SecurityManager() {
      @Override
      public void checkPermission(Permission permission) {
        if (permission.getName().contains("exitVM")) {
          throw new ExitTrappedException();
        }
      }
    };
    System.setSecurityManager(securityManager);
  }
}   

Link: - https://www.hackerrank.com/challenges/can-you-access/problem