luishenriique

day 7

Dec 16th, 2015
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 16.82 KB | None | 0 0
  1. package whatever;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.HashMap;
  5. import java.util.List;
  6. import java.util.Map;
  7.  
  8. public class Whatever {
  9.  
  10.     public static void main(String[] args) {
  11.         List<String> queue = new ArrayList<>();
  12.         Map<String, Integer> map = new HashMap<>();
  13.         for (String line : getInput().split("\n")) {
  14.             queue.add(line);
  15.         }
  16.         for (int i = 0; i < queue.size(); i++) {
  17.             String line = queue.get(i);
  18.             String[] ss = line.split(" -> ");
  19.             if (ss[0].contains("AND")) {
  20.                 String[] vars = ss[0].split(" AND ");
  21.                 if ((!isNumeric(vars[0]) && !map.containsKey(vars[0])) || (!isNumeric(vars[1]) && !map.containsKey(vars[1]))) {
  22.                     queue.add(line);
  23.                     continue;
  24.                 }
  25.                 int v1 = isNumeric(vars[0]) ? Integer.valueOf(vars[0]) : map.get(vars[0]);
  26.                 int v2 = isNumeric(vars[1]) ? Integer.valueOf(vars[1]) : map.get(vars[1]);
  27.                 int val = v1 & v2;
  28.                 map.put(ss[1], val);
  29.                 System.out.println(ss[1] + ": " + val);
  30.             } else if (ss[0].contains("OR")) {
  31.                 String[] vars = ss[0].split(" OR ");
  32.                 if ((!isNumeric(vars[0]) && !map.containsKey(vars[0])) || (!isNumeric(vars[1]) && !map.containsKey(vars[1]))) {
  33.                     queue.add(line);
  34.                     continue;
  35.                 }
  36.                 int v1 = isNumeric(vars[0]) ? Integer.valueOf(vars[0]) : map.get(vars[0]);
  37.                 int v2 = isNumeric(vars[1]) ? Integer.valueOf(vars[1]) : map.get(vars[1]);
  38.                 int val = v1 | v2;
  39.                 map.put(ss[1], val);
  40.                 System.out.println(ss[1] + ": " + val);
  41.             } else if (ss[0].contains("LSHIFT")) {
  42.                 String[] vars = ss[0].split(" LSHIFT ");
  43.                 if ((!isNumeric(vars[0]) && !map.containsKey(vars[0])) || (!isNumeric(vars[1]) && !map.containsKey(vars[1]))) {
  44.                     queue.add(line);
  45.                     continue;
  46.                 }
  47.                 int v1 = isNumeric(vars[0]) ? Integer.valueOf(vars[0]) : map.get(vars[0]);
  48.                 int v2 = Integer.valueOf(vars[1]);
  49.                 int val = v1 << v2;
  50.                 map.put(ss[1], val);
  51.                 System.out.println(ss[1] + ": " + val);
  52.             } else if (ss[0].contains("RSHIFT")) {
  53.                 String[] vars = ss[0].split(" RSHIFT ");
  54.                 if ((!isNumeric(vars[0]) && !map.containsKey(vars[0])) || (!isNumeric(vars[1]) && !map.containsKey(vars[1]))) {
  55.                     queue.add(line);
  56.                     continue;
  57.                 }
  58.                 int v1 = isNumeric(vars[0]) ? Integer.valueOf(vars[0]) : map.get(vars[0]);
  59.                 int v2 = Integer.valueOf(vars[1]);
  60.                 int val = v1 >> v2;
  61.                 map.put(ss[1], val);
  62.                 System.out.println(ss[1] + ": " + val);
  63.             } else if (ss[0].contains("NOT")) {
  64.                 String[] vars = ss[0].split("NOT ");
  65.                 if (!isNumeric(vars[1]) && !map.containsKey(vars[1])) {
  66.                     queue.add(line);
  67.                     continue;
  68.                 }
  69.                 int v1 = isNumeric(vars[1]) ? Integer.valueOf(vars[1]) : map.get(vars[1]);
  70.                 int val = ~v1;
  71.                 map.put(ss[1], val);
  72.                 System.out.println(ss[1] + ": " + val);
  73.             } else {
  74.                 if (!isNumeric(ss[0]) && !map.containsKey(ss[0])) {
  75.                     queue.add(line);
  76.                     continue;
  77.                 }
  78.                 System.out.print(ss[1] + ": ");
  79.                 int val = isNumeric(ss[0]) ? Integer.valueOf(ss[0]) : map.get(ss[0]);
  80.                 System.out.println(val);
  81.                 map.put(ss[1], val);
  82.             }
  83.         }
  84.     }
  85.  
  86.     private static boolean isNumeric(String str) {
  87.         return str.matches("-?\\d+(\\.\\d+)?");  //match a number with optional '-' and decimal.
  88.     }
  89.  
  90.     private static String getInput() {
  91.         return "af AND ah -> ai\n"
  92.                 + "NOT lk -> ll\n"
  93.                 + "hz RSHIFT 1 -> is\n"
  94.                 + "NOT go -> gp\n"
  95.                 + "du OR dt -> dv\n"
  96.                 + "x RSHIFT 5 -> aa\n"
  97.                 + "at OR az -> ba\n"
  98.                 + "eo LSHIFT 15 -> es\n"
  99.                 + "ci OR ct -> cu\n"
  100.                 + "b RSHIFT 5 -> f\n"
  101.                 + "fm OR fn -> fo\n"
  102.                 + "NOT ag -> ah\n"
  103.                 + "v OR w -> x\n"
  104.                 + "g AND i -> j\n"
  105.                 + "an LSHIFT 15 -> ar\n"
  106.                 + "1 AND cx -> cy\n"
  107.                 + "jq AND jw -> jy\n"
  108.                 + "iu RSHIFT 5 -> ix\n"
  109.                 + "gl AND gm -> go\n"
  110.                 + "NOT bw -> bx\n"
  111.                 + "jp RSHIFT 3 -> jr\n"
  112.                 + "hg AND hh -> hj\n"
  113.                 + "bv AND bx -> by\n"
  114.                 + "er OR es -> et\n"
  115.                 + "kl OR kr -> ks\n"
  116.                 + "et RSHIFT 1 -> fm\n"
  117.                 + "e AND f -> h\n"
  118.                 + "u LSHIFT 1 -> ao\n"
  119.                 + "he RSHIFT 1 -> hx\n"
  120.                 + "eg AND ei -> ej\n"
  121.                 + "bo AND bu -> bw\n"
  122.                 + "dz OR ef -> eg\n"
  123.                 + "dy RSHIFT 3 -> ea\n"
  124.                 + "gl OR gm -> gn\n"
  125.                 + "da LSHIFT 1 -> du\n"
  126.                 + "au OR av -> aw\n"
  127.                 + "gj OR gu -> gv\n"
  128.                 + "eu OR fa -> fb\n"
  129.                 + "lg OR lm -> ln\n"
  130.                 + "e OR f -> g\n"
  131.                 + "NOT dm -> dn\n"
  132.                 + "NOT l -> m\n"
  133.                 + "aq OR ar -> as\n"
  134.                 + "gj RSHIFT 5 -> gm\n"
  135.                 + "hm AND ho -> hp\n"
  136.                 + "ge LSHIFT 15 -> gi\n"
  137.                 + "jp RSHIFT 1 -> ki\n"
  138.                 + "hg OR hh -> hi\n"
  139.                 + "lc LSHIFT 1 -> lw\n"
  140.                 + "km OR kn -> ko\n"
  141.                 + "eq LSHIFT 1 -> fk\n"
  142.                 + "1 AND am -> an\n"
  143.                 + "gj RSHIFT 1 -> hc\n"
  144.                 + "aj AND al -> am\n"
  145.                 + "gj AND gu -> gw\n"
  146.                 + "ko AND kq -> kr\n"
  147.                 + "ha OR gz -> hb\n"
  148.                 + "bn OR by -> bz\n"
  149.                 + "iv OR jb -> jc\n"
  150.                 + "NOT ac -> ad\n"
  151.                 + "bo OR bu -> bv\n"
  152.                 + "d AND j -> l\n"
  153.                 + "bk LSHIFT 1 -> ce\n"
  154.                 + "de OR dk -> dl\n"
  155.                 + "dd RSHIFT 1 -> dw\n"
  156.                 + "hz AND ik -> im\n"
  157.                 + "NOT jd -> je\n"
  158.                 + "fo RSHIFT 2 -> fp\n"
  159.                 + "hb LSHIFT 1 -> hv\n"
  160.                 + "lf RSHIFT 2 -> lg\n"
  161.                 + "gj RSHIFT 3 -> gl\n"
  162.                 + "ki OR kj -> kk\n"
  163.                 + "NOT ak -> al\n"
  164.                 + "ld OR le -> lf\n"
  165.                 + "ci RSHIFT 3 -> ck\n"
  166.                 + "1 AND cc -> cd\n"
  167.                 + "NOT kx -> ky\n"
  168.                 + "fp OR fv -> fw\n"
  169.                 + "ev AND ew -> ey\n"
  170.                 + "dt LSHIFT 15 -> dx\n"
  171.                 + "NOT ax -> ay\n"
  172.                 + "bp AND bq -> bs\n"
  173.                 + "NOT ii -> ij\n"
  174.                 + "ci AND ct -> cv\n"
  175.                 + "iq OR ip -> ir\n"
  176.                 + "x RSHIFT 2 -> y\n"
  177.                 + "fq OR fr -> fs\n"
  178.                 + "bn RSHIFT 5 -> bq\n"
  179.                 + "0 -> c\n"
  180.                 + "14146 -> b\n"
  181.                 + "d OR j -> k\n"
  182.                 + "z OR aa -> ab\n"
  183.                 + "gf OR ge -> gg\n"
  184.                 + "df OR dg -> dh\n"
  185.                 + "NOT hj -> hk\n"
  186.                 + "NOT di -> dj\n"
  187.                 + "fj LSHIFT 15 -> fn\n"
  188.                 + "lf RSHIFT 1 -> ly\n"
  189.                 + "b AND n -> p\n"
  190.                 + "jq OR jw -> jx\n"
  191.                 + "gn AND gp -> gq\n"
  192.                 + "x RSHIFT 1 -> aq\n"
  193.                 + "ex AND ez -> fa\n"
  194.                 + "NOT fc -> fd\n"
  195.                 + "bj OR bi -> bk\n"
  196.                 + "as RSHIFT 5 -> av\n"
  197.                 + "hu LSHIFT 15 -> hy\n"
  198.                 + "NOT gs -> gt\n"
  199.                 + "fs AND fu -> fv\n"
  200.                 + "dh AND dj -> dk\n"
  201.                 + "bz AND cb -> cc\n"
  202.                 + "dy RSHIFT 1 -> er\n"
  203.                 + "hc OR hd -> he\n"
  204.                 + "fo OR fz -> ga\n"
  205.                 + "t OR s -> u\n"
  206.                 + "b RSHIFT 2 -> d\n"
  207.                 + "NOT jy -> jz\n"
  208.                 + "hz RSHIFT 2 -> ia\n"
  209.                 + "kk AND kv -> kx\n"
  210.                 + "ga AND gc -> gd\n"
  211.                 + "fl LSHIFT 1 -> gf\n"
  212.                 + "bn AND by -> ca\n"
  213.                 + "NOT hr -> hs\n"
  214.                 + "NOT bs -> bt\n"
  215.                 + "lf RSHIFT 3 -> lh\n"
  216.                 + "au AND av -> ax\n"
  217.                 + "1 AND gd -> ge\n"
  218.                 + "jr OR js -> jt\n"
  219.                 + "fw AND fy -> fz\n"
  220.                 + "NOT iz -> ja\n"
  221.                 + "c LSHIFT 1 -> t\n"
  222.                 + "dy RSHIFT 5 -> eb\n"
  223.                 + "bp OR bq -> br\n"
  224.                 + "NOT h -> i\n"
  225.                 + "1 AND ds -> dt\n"
  226.                 + "ab AND ad -> ae\n"
  227.                 + "ap LSHIFT 1 -> bj\n"
  228.                 + "br AND bt -> bu\n"
  229.                 + "NOT ca -> cb\n"
  230.                 + "NOT el -> em\n"
  231.                 + "s LSHIFT 15 -> w\n"
  232.                 + "gk OR gq -> gr\n"
  233.                 + "ff AND fh -> fi\n"
  234.                 + "kf LSHIFT 15 -> kj\n"
  235.                 + "fp AND fv -> fx\n"
  236.                 + "lh OR li -> lj\n"
  237.                 + "bn RSHIFT 3 -> bp\n"
  238.                 + "jp OR ka -> kb\n"
  239.                 + "lw OR lv -> lx\n"
  240.                 + "iy AND ja -> jb\n"
  241.                 + "dy OR ej -> ek\n"
  242.                 + "1 AND bh -> bi\n"
  243.                 + "NOT kt -> ku\n"
  244.                 + "ao OR an -> ap\n"
  245.                 + "ia AND ig -> ii\n"
  246.                 + "NOT ey -> ez\n"
  247.                 + "bn RSHIFT 1 -> cg\n"
  248.                 + "fk OR fj -> fl\n"
  249.                 + "ce OR cd -> cf\n"
  250.                 + "eu AND fa -> fc\n"
  251.                 + "kg OR kf -> kh\n"
  252.                 + "jr AND js -> ju\n"
  253.                 + "iu RSHIFT 3 -> iw\n"
  254.                 + "df AND dg -> di\n"
  255.                 + "dl AND dn -> do\n"
  256.                 + "la LSHIFT 15 -> le\n"
  257.                 + "fo RSHIFT 1 -> gh\n"
  258.                 + "NOT gw -> gx\n"
  259.                 + "NOT gb -> gc\n"
  260.                 + "ir LSHIFT 1 -> jl\n"
  261.                 + "x AND ai -> ak\n"
  262.                 + "he RSHIFT 5 -> hh\n"
  263.                 + "1 AND lu -> lv\n"
  264.                 + "NOT ft -> fu\n"
  265.                 + "gh OR gi -> gj\n"
  266.                 + "lf RSHIFT 5 -> li\n"
  267.                 + "x RSHIFT 3 -> z\n"
  268.                 + "b RSHIFT 3 -> e\n"
  269.                 + "he RSHIFT 2 -> hf\n"
  270.                 + "NOT fx -> fy\n"
  271.                 + "jt AND jv -> jw\n"
  272.                 + "hx OR hy -> hz\n"
  273.                 + "jp AND ka -> kc\n"
  274.                 + "fb AND fd -> fe\n"
  275.                 + "hz OR ik -> il\n"
  276.                 + "ci RSHIFT 1 -> db\n"
  277.                 + "fo AND fz -> gb\n"
  278.                 + "fq AND fr -> ft\n"
  279.                 + "gj RSHIFT 2 -> gk\n"
  280.                 + "cg OR ch -> ci\n"
  281.                 + "cd LSHIFT 15 -> ch\n"
  282.                 + "jm LSHIFT 1 -> kg\n"
  283.                 + "ih AND ij -> ik\n"
  284.                 + "fo RSHIFT 3 -> fq\n"
  285.                 + "fo RSHIFT 5 -> fr\n"
  286.                 + "1 AND fi -> fj\n"
  287.                 + "1 AND kz -> la\n"
  288.                 + "iu AND jf -> jh\n"
  289.                 + "cq AND cs -> ct\n"
  290.                 + "dv LSHIFT 1 -> ep\n"
  291.                 + "hf OR hl -> hm\n"
  292.                 + "km AND kn -> kp\n"
  293.                 + "de AND dk -> dm\n"
  294.                 + "dd RSHIFT 5 -> dg\n"
  295.                 + "NOT lo -> lp\n"
  296.                 + "NOT ju -> jv\n"
  297.                 + "NOT fg -> fh\n"
  298.                 + "cm AND co -> cp\n"
  299.                 + "ea AND eb -> ed\n"
  300.                 + "dd RSHIFT 3 -> df\n"
  301.                 + "gr AND gt -> gu\n"
  302.                 + "ep OR eo -> eq\n"
  303.                 + "cj AND cp -> cr\n"
  304.                 + "lf OR lq -> lr\n"
  305.                 + "gg LSHIFT 1 -> ha\n"
  306.                 + "et RSHIFT 2 -> eu\n"
  307.                 + "NOT jh -> ji\n"
  308.                 + "ek AND em -> en\n"
  309.                 + "jk LSHIFT 15 -> jo\n"
  310.                 + "ia OR ig -> ih\n"
  311.                 + "gv AND gx -> gy\n"
  312.                 + "et AND fe -> fg\n"
  313.                 + "lh AND li -> lk\n"
  314.                 + "1 AND io -> ip\n"
  315.                 + "kb AND kd -> ke\n"
  316.                 + "kk RSHIFT 5 -> kn\n"
  317.                 + "id AND if -> ig\n"
  318.                 + "NOT ls -> lt\n"
  319.                 + "dw OR dx -> dy\n"
  320.                 + "dd AND do -> dq\n"
  321.                 + "lf AND lq -> ls\n"
  322.                 + "NOT kc -> kd\n"
  323.                 + "dy AND ej -> el\n"
  324.                 + "1 AND ke -> kf\n"
  325.                 + "et OR fe -> ff\n"
  326.                 + "hz RSHIFT 5 -> ic\n"
  327.                 + "dd OR do -> dp\n"
  328.                 + "cj OR cp -> cq\n"
  329.                 + "NOT dq -> dr\n"
  330.                 + "kk RSHIFT 1 -> ld\n"
  331.                 + "jg AND ji -> jj\n"
  332.                 + "he OR hp -> hq\n"
  333.                 + "hi AND hk -> hl\n"
  334.                 + "dp AND dr -> ds\n"
  335.                 + "dz AND ef -> eh\n"
  336.                 + "hz RSHIFT 3 -> ib\n"
  337.                 + "db OR dc -> dd\n"
  338.                 + "hw LSHIFT 1 -> iq\n"
  339.                 + "he AND hp -> hr\n"
  340.                 + "NOT cr -> cs\n"
  341.                 + "lg AND lm -> lo\n"
  342.                 + "hv OR hu -> hw\n"
  343.                 + "il AND in -> io\n"
  344.                 + "NOT eh -> ei\n"
  345.                 + "gz LSHIFT 15 -> hd\n"
  346.                 + "gk AND gq -> gs\n"
  347.                 + "1 AND en -> eo\n"
  348.                 + "NOT kp -> kq\n"
  349.                 + "et RSHIFT 5 -> ew\n"
  350.                 + "lj AND ll -> lm\n"
  351.                 + "he RSHIFT 3 -> hg\n"
  352.                 + "et RSHIFT 3 -> ev\n"
  353.                 + "as AND bd -> bf\n"
  354.                 + "cu AND cw -> cx\n"
  355.                 + "jx AND jz -> ka\n"
  356.                 + "b OR n -> o\n"
  357.                 + "be AND bg -> bh\n"
  358.                 + "1 AND ht -> hu\n"
  359.                 + "1 AND gy -> gz\n"
  360.                 + "NOT hn -> ho\n"
  361.                 + "ck OR cl -> cm\n"
  362.                 + "ec AND ee -> ef\n"
  363.                 + "lv LSHIFT 15 -> lz\n"
  364.                 + "ks AND ku -> kv\n"
  365.                 + "NOT ie -> if\n"
  366.                 + "hf AND hl -> hn\n"
  367.                 + "1 AND r -> s\n"
  368.                 + "ib AND ic -> ie\n"
  369.                 + "hq AND hs -> ht\n"
  370.                 + "y AND ae -> ag\n"
  371.                 + "NOT ed -> ee\n"
  372.                 + "bi LSHIFT 15 -> bm\n"
  373.                 + "dy RSHIFT 2 -> dz\n"
  374.                 + "ci RSHIFT 2 -> cj\n"
  375.                 + "NOT bf -> bg\n"
  376.                 + "NOT im -> in\n"
  377.                 + "ev OR ew -> ex\n"
  378.                 + "ib OR ic -> id\n"
  379.                 + "bn RSHIFT 2 -> bo\n"
  380.                 + "dd RSHIFT 2 -> de\n"
  381.                 + "bl OR bm -> bn\n"
  382.                 + "as RSHIFT 1 -> bl\n"
  383.                 + "ea OR eb -> ec\n"
  384.                 + "ln AND lp -> lq\n"
  385.                 + "kk RSHIFT 3 -> km\n"
  386.                 + "is OR it -> iu\n"
  387.                 + "iu RSHIFT 2 -> iv\n"
  388.                 + "as OR bd -> be\n"
  389.                 + "ip LSHIFT 15 -> it\n"
  390.                 + "iw OR ix -> iy\n"
  391.                 + "kk RSHIFT 2 -> kl\n"
  392.                 + "NOT bb -> bc\n"
  393.                 + "ci RSHIFT 5 -> cl\n"
  394.                 + "ly OR lz -> ma\n"
  395.                 + "z AND aa -> ac\n"
  396.                 + "iu RSHIFT 1 -> jn\n"
  397.                 + "cy LSHIFT 15 -> dc\n"
  398.                 + "cf LSHIFT 1 -> cz\n"
  399.                 + "as RSHIFT 3 -> au\n"
  400.                 + "cz OR cy -> da\n"
  401.                 + "kw AND ky -> kz\n"
  402.                 + "lx -> a\n"
  403.                 + "iw AND ix -> iz\n"
  404.                 + "lr AND lt -> lu\n"
  405.                 + "jp RSHIFT 5 -> js\n"
  406.                 + "aw AND ay -> az\n"
  407.                 + "jc AND je -> jf\n"
  408.                 + "lb OR la -> lc\n"
  409.                 + "NOT cn -> co\n"
  410.                 + "kh LSHIFT 1 -> lb\n"
  411.                 + "1 AND jj -> jk\n"
  412.                 + "y OR ae -> af\n"
  413.                 + "ck AND cl -> cn\n"
  414.                 + "kk OR kv -> kw\n"
  415.                 + "NOT cv -> cw\n"
  416.                 + "kl AND kr -> kt\n"
  417.                 + "iu OR jf -> jg\n"
  418.                 + "at AND az -> bb\n"
  419.                 + "jp RSHIFT 2 -> jq\n"
  420.                 + "iv AND jb -> jd\n"
  421.                 + "jn OR jo -> jp\n"
  422.                 + "x OR ai -> aj\n"
  423.                 + "ba AND bc -> bd\n"
  424.                 + "jl OR jk -> jm\n"
  425.                 + "b RSHIFT 1 -> v\n"
  426.                 + "o AND q -> r\n"
  427.                 + "NOT p -> q\n"
  428.                 + "k AND m -> n\n"
  429.                 + "as RSHIFT 2 -> at";
  430.     }
  431.  
  432. }
Advertisement
Add Comment
Please, Sign In to add comment