package com.interview.bits; /** * Exercise 5.8 150qs */ public class DrawHorizontalLine { public void draw(byte[] screen, int width, int x1, int x2,int y){ int pos1 = y*width + x1; int pos2 = y*width + x2; int start = pos1; while(start <= pos2){ int row = start/8; int col = start%8; screen[row] = (byte)(screen[row] | 1<<col); start++; } printScreen(screen,width); } public void drawFaster(byte[] screen,int width,int x1,int x2,int y){ int pos1 = y*width + x1; int pos2 = y*width + x2; int row1 = pos1/8; int col1= pos1%8; int row2 = pos2/8; int col2= pos2%8; int mask = ~((1<<col1) -1); screen[row1] = (byte)(screen[row1] | mask); mask = ((1<<(col2+1)) -1); screen[row2] = (byte)(screen[row2] | mask); while(row1 + 1 < row2){ screen[row1+1] = (byte)(screen[row1+1] | 0xFF); row1++; } printScreen(screen,width); } private void printScreen(byte[] screen,int width){ int w = width/8; for(int i=0; i < screen.length; i++){ if(i%w == 0){ System.out.println(); } for(int j=0; j < 8; j++){ if((screen[i] & 1<<j) != 0){ System.out.print("*"); }else{ System.out.print("+"); } } } } public static void main(String args[]){ byte[] screen = {0,0,0,0,0,0,0,0,0}; DrawHorizontalLine dwl = new DrawHorizontalLine(); dwl.drawFaster(screen, 24,1 , 22, 1); } }