Hackerrank
May 23, 2014 Leave a comment
I know it is embarassing to post code like this without asymptotic analysis. After taking a strenuous 10 week Machine learning course I am again coding java. This is the Utopia problem which can be solved in one line.
package com.hackerrank; import java.io.*; import java.util.ArrayList; public class Solution { private int noOfTestCases; private ArrayList<Integer> tests = new ArrayList<>(); OutputStream outputStream = System.out; PrintWriter pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(outputStream))); protected void parseStdin(String[] data){ int test = Integer.parseInt( data[0] ); assert( test >= 1 && test <= 10); noOfTestCases = test; for( int i = 1 ; i < data.length ; i ++ ){ int d = Integer.parseInt( data[i] ); assert( d >= 0 && d <= 60); tests.add( d ); } assert( tests.size() == noOfTestCases ); } public ArrayList<String> getInput(BufferedReader br) throws IOException { String line = null; ArrayList<String> arguments = new ArrayList<>(); while( (line = br.readLine()) != null ){ arguments.add(line); } br.close(); return arguments; } public static void main( String... argv ) throws IOException { Solution utopia = new Solution(); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); ArrayList<String> arguments = utopia.getInput( br ); utopia.parseStdin( arguments.toArray(new String[arguments.size()])); utopia.test(); } protected void test() { assert( 0 != noOfTestCases ); assert( tests.size() == noOfTestCases ); for( Integer test : tests) { if( test != 0 ){ if(test % 2 == 0){ growEvenly(test); }else{ growOddly(test); } }else{ pw.println(1); } } pw.close(); } private void growOddly(int test) { int odd = 1; if(test == 1 ){ pw.println(test + 1); }else{ for(int j = 0,k = test - 1 ; j < k; j = j + 2 ){ odd = odd + odd + 1; } pw.println(odd * 2); pw.flush(); } } private void growEvenly(int test) { int even = 1; for(int j = 0,k = test / 2 ; j < k ; j ++){ even = even * 2 + 1; } pw.println(even); pw.flush(); } }
Easymock
I have to expect 4 calls to readLine to accomodate null.
package com.hackerrank; import org.junit.Assert; import org.junit.*; import java.io.BufferedReader; import java.io.IOException; import static org.easymock.EasyMock.createMock; import static org.easymock.EasyMock.expect; import static org.easymock.EasyMock.replay; public class UtopiaTest { String[] argv; Solution solution; @Before public void sendInput() throws IOException { BufferedReader mockInputStream = createMock(BufferedReader.class); expect(mockInputStream.readLine()).andReturn(String.valueOf(2)); expect(mockInputStream.readLine()).andReturn(String.valueOf(0)); expect(mockInputStream.readLine()).andReturn(String.valueOf(1)); expect(mockInputStream.readLine()).andReturn(null); replay(mockInputStream); solution = new Solution(); argv = solution.getInput(mockInputStream).toArray(new String[3]); Assert.assertTrue(argv.length == 3); } @Test public void parse(){ solution = new Solution(); solution.parseStdin( argv ); } @Test public void test(){ solution = new Solution(); solution.parseStdin( argv ); solution.test(); } }