daily pastebin goal
0%
SHARE
TWEET

Untitled

a guest Apr 16th, 2018 48 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import java.awt.*;
  2. import java.awt.event.*;
  3. import java.awt.image.*;
  4. import java.io.*;
  5. import java.util.*;
  6. import java.security.*;
  7. import javax.swing.*;
  8. import javax.imageio.*;
  9.  
  10. public class Tester {
  11.     public BufferedImage visualize() {
  12.         int WIDTH  = BOX_SIZE + 40;
  13.         int HEIGHT = BOX_SIZE + 40;
  14.         BufferedImage bi = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);
  15.         Graphics2D g2 = (Graphics2D)bi.getGraphics();
  16.         g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
  17.         g2.setColor(new Color(0xD3D3D3));
  18.         g2.fillRect(0, 0, WIDTH, HEIGHT);
  19.         g2.setColor(new Color(0xFFFFFF));
  20.         g2.fillRect(20, 20, WIDTH - 40, HEIGHT - 40);
  21.  
  22.         for (int i = 0; i < N; i++) {
  23.             int wt = (dir[i] == 0 ? w[i] : h[i]);
  24.             int ht = (dir[i] == 0 ? h[i] : w[i]);
  25.             Color c = Color.getHSBColor((1.0f / (float)N) * (float)i, 1.0f, 0.95f);
  26.             g2.setColor(c);
  27.             g2.fillRect(20 + posX[i], 1020 - posY[i] - ht, wt, ht);
  28.             g2.setColor(new Color(0x3F3F3F));
  29.             g2.drawRect(20 + posX[i], 1020 - posY[i] - ht, wt, ht);
  30.         }
  31.  
  32.         g2.setStroke(new BasicStroke(2.0f));
  33.         g2.drawLine(20, 1020 - MAX_POSY, 1020, 1020 - MAX_POSY);
  34.  
  35.         //g2.setFont(new Font("Arial", Font.BOLD, 15));
  36.         //FontMetrics fm = g2.getFontMetrics();
  37.         //char[] ch = ("Score = " + MAX_POSY).toCharArray();
  38.         //int x = BOX_SIZE / 2;
  39.         //int y = 1020 - MAX_POSY - 5;
  40.         //g2.drawChars(ch, 0, ch.length, x, y);
  41.         return bi;
  42.     }
  43.     public class Visualizer extends JPanel implements WindowListener {
  44.        
  45.         public void paint(Graphics g) {
  46.  
  47.             try {
  48.                 int WIDTH  = BOX_SIZE + 40;
  49.                 int HEIGHT = BOX_SIZE + 40;
  50.                 g.drawImage(image, 0, 0, WIDTH, HEIGHT, null);
  51.             } catch (Exception e) {
  52.                 e.printStackTrace();
  53.             }
  54.         }
  55.  
  56.         public Visualizer () {
  57.             jf.addWindowListener(this);
  58.         }
  59.  
  60.         public void windowClosing(WindowEvent e) {
  61.             if (proc != null) {
  62.                 try {
  63.                     proc.destroy();
  64.                 } catch (Exception ex) {
  65.                     ex.printStackTrace();
  66.                 }
  67.             }
  68.             System.exit(0);
  69.         }
  70.  
  71.         public void windowActivated(WindowEvent e) { }
  72.         public void windowDeactivated(WindowEvent e) { }
  73.         public void windowOpened(WindowEvent e) { }
  74.         public void windowClosed(WindowEvent e) { }
  75.         public void windowIconified(WindowEvent e) { }
  76.         public void windowDeiconified(WindowEvent e) { }
  77.  
  78.     }
  79.  
  80.     /********************************************************************/
  81.  
  82.     JFrame jf;
  83.     Visualizer v;
  84.     InputStream is;
  85.     OutputStream os;
  86.     Scanner sc;
  87.     BufferedImage image;
  88.  
  89.     static Process proc;
  90.     static String fileName, exec;
  91.     static boolean save, vis;
  92.  
  93.     final int N = 400;
  94.     final int RECT_MAX = 50, RECT_MIN = 5;
  95.     final int BOX_SIZE = 1000;
  96.     int [] h, w;
  97.     int [] dir;
  98.     int [] posX, posY;
  99.     int MAX_POSY;
  100.  
  101.     /********************************************************************/
  102.  
  103.     public void generate (String seedStr) {
  104.  
  105.         try {  
  106.             SecureRandom rnd = SecureRandom.getInstance("SHA1PRNG");
  107.             long seed = Long.parseLong(seedStr);
  108.             rnd.setSeed(seed);
  109.  
  110.             w = new int[N];
  111.             h = new int[N];
  112.             for (int i = 0; i < N; i++) {
  113.                 w[i] = rnd.nextInt(RECT_MAX - RECT_MIN + 1) + RECT_MIN;
  114.                 h[i] = rnd.nextInt(RECT_MAX - RECT_MIN + 1) + RECT_MIN;
  115.             }
  116.         } catch (Exception e) {
  117.             System.err.println("An exception occurred while generating test case.");
  118.             e.printStackTrace();
  119.         }
  120.  
  121.     }
  122.  
  123.     public double runTest (String seed) {
  124.  
  125.         try {
  126.             generate(seed);
  127.             if (proc != null) try {
  128.                 getPermutation();
  129.                 boolean [][] used = new boolean[BOX_SIZE][BOX_SIZE];
  130.                 for (int i = 0; i < N; i++) {
  131.                     int a = (dir[i] == 0 ? w[i] : h[i]);
  132.                     int b = (dir[i] == 0 ? h[i] : w[i]);
  133.                     for (int x = posX[i]; x < posX[i] + a; x++) {
  134.                         for (int y = posY[i]; y < posY[i] + b; y++) {
  135.                             if (used[x][y]) {
  136.                                 System.err.println("There are overlapping rectangles.");
  137.                                 return -1;
  138.                             }
  139.                             if (x < 0 || y < 0 || x >= BOX_SIZE || y >= BOX_SIZE) {
  140.                                 System.err.println("There is a rectangle which does not fit in the box.");
  141.                                 return -1;
  142.                             }
  143.                             used[x][y] = true;
  144.                         }
  145.                     }
  146.                 }
  147.             } catch (Exception e) {
  148.                 System.err.println("Failed to get result.");
  149.                 return -1;
  150.             }
  151.         } catch (Exception e) {
  152.             e.printStackTrace();
  153.             return -1;
  154.         }
  155.  
  156.         MAX_POSY = 0;
  157.         for (int i = 0; i < N; i++) {
  158.             int y = posY[i] + (dir[i] == 0 ? h[i] : w[i]);
  159.             MAX_POSY = Math.max(MAX_POSY, y);
  160.         }
  161.  
  162.         if (vis || save) {
  163.             try {
  164.                 image = visualize();
  165.                 if (save) {
  166.                     ImageIO.write(image, "png", new File(fileName +".png"));
  167.                 }
  168.             } catch (Exception e) {
  169.                 e.printStackTrace();
  170.             }
  171.         }
  172.         if (vis) {
  173.             jf.setSize(BOX_SIZE + 40, BOX_SIZE + 40);
  174.             jf.setVisible(true);
  175.         }
  176.        
  177.         return MAX_POSY;
  178.     }
  179.  
  180.     private void getPermutation () throws IOException {
  181.         StringBuffer sb = new StringBuffer();
  182.         sb.append(N).append('\n');
  183.         for (int i = 0; i < N; ++i) {
  184.             sb.append(w[i]).append(' ');
  185.             sb.append(h[i]).append('\n');
  186.         }
  187.         os.write(sb.toString().getBytes());
  188.         os.flush();
  189.  
  190.         dir  = new int[N];
  191.         posX = new int[N];
  192.         posY = new int[N];
  193.         for (int i = 0; i < N; ++i) {
  194.             dir[i]  = sc.nextInt();
  195.             posX[i] = sc.nextInt();
  196.             posY[i] = sc.nextInt();
  197.         }
  198.     }
  199.  
  200.     public Tester (String seed) {
  201.         if (vis) {
  202.             jf = new JFrame();
  203.             v = new Visualizer();
  204.             jf.getContentPane().add(v);
  205.         }
  206.         if (exec != null) {
  207.             try {
  208.                 Runtime rt = Runtime.getRuntime();
  209.                 proc = rt.exec(exec);
  210.                 os = proc.getOutputStream();
  211.                 is = proc.getInputStream();
  212.                 sc = new Scanner(is);
  213.             } catch (Exception e) {
  214.                 e.printStackTrace();
  215.             }
  216.         }
  217.         System.out.println("Score = " + runTest(seed));
  218.         if (proc != null) {
  219.             try {
  220.                 proc.destroy();
  221.             } catch (Exception e) {
  222.                 e.printStackTrace();
  223.             }
  224.         }
  225.     }
  226.  
  227.     public static void main (String[] args) {
  228.         String seed = "1";
  229.         for (int i = 0; i < args.length; ++i) {
  230.             if (args[i].equals("-seed")) {
  231.                 seed = args[++i];
  232.             } else if (args[i].equals("-exec")) {
  233.                 exec = args[++i];
  234.             } else if (args[i].equals("-vis")) {
  235.                 vis = true;
  236.             } else if (args[i].equals("-save")) {
  237.                 save = true;
  238.             }
  239.         }
  240.         fileName = seed;
  241.         Tester test = new Tester(seed);
  242.     }
  243.  
  244. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top