Advertisement
Guest User

Autist, Haket, Matematik

a guest
Dec 12th, 2017
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.56 KB | None | 0 0
  1. import java.util.ArrayList;
  2. import java.util.Calendar;
  3. import java.util.GregorianCalendar;
  4. import java.util.List;
  5.  
  6. public class Main {
  7.  
  8.     private static List<Integer> same = calcSame();
  9.     private static List<Integer>  sequence = calcSequence();
  10.     private static List<Integer>  years = calcYears();
  11.     private static List<Integer>  dm = calcDayMon();
  12.     private static List<Integer>  md = calcMonDay();
  13.     private static List<Integer> all = calcOther();
  14.  
  15.     public static void main(String[] args) {
  16.         int max = 0;
  17.         int step = 0;
  18.         for(int i = 0; i < 10000; i++){
  19.             int a = autist(i);
  20.             int h = haker(i);
  21.             int m = matematik(i);
  22.             if(max < (a + h + m)){
  23.                 max = (a + h + m);
  24.                 step = i;
  25.             }
  26.             System.out.println("n = " + i + "; max = " + (a + h + m) + "; Autist = " + a + "; Haker = " + h + "; Matematik = " + m);
  27.         }
  28.         System.out.println("Max find number = " + step);
  29.     }
  30.    
  31.     /**
  32.     * Аутыст - перебирает все числа подряд от 0000 до 9999
  33.     */
  34.     public static int autist(int num){
  35.  
  36.         for(int i = 0; i < 10000; i++){
  37.             if(i == num){
  38.                 return i;
  39.             }
  40.         }
  41.         return -1;
  42.     }
  43.  
  44.     /**
  45.     * Матиматик - перебирает числа в последовательности одна-по-возрастанию с 0000,
  46.     * одна-по-убыванию с 9999, одна-по-убыванию с 5000, одна-по-возрастанию с 5001
  47.     */
  48.     public static int matematik(int num){
  49.         int n = 0;
  50.         for(int i = 0, j = 9999, k = 5000, l = 5001; i < 2500 && j > 7500 && k >= 2500 && l <= 7500; i++, j--, k--, l++){
  51.             if(i == num){
  52.                 return n;
  53.             } else {
  54.                 n++;
  55.             }
  56.             if(j == num){
  57.                 return n;
  58.             } else {
  59.                 n++;
  60.             }
  61.             if(k == num){
  62.                 return n;
  63.             } else {
  64.                 n++;
  65.             }
  66.             if(l == num){
  67.                 return n;
  68.             } else {
  69.                 n++;
  70.             }
  71.         }
  72.         return -1;
  73.     }
  74.  
  75.     /**
  76.     * Хакир - сначала перебирает все одинаковые числа и последовательности (0000,1111,1234 etc),
  77.     * затем года рождения начиная с 1900 и по 2017), затем варианты даты в написании день-месяц (2301) и месяц-день (1214),
  78.     * после этого начинает перебирать все оставшиеся комбинации
  79.     * в порядке одну-по-возрастанию и одну-по-убыванию (0001 и 9998 будут первыми)
  80.     */
  81.     public static int haker(int num){
  82.         int i = 0;
  83.         for(Integer s : same){
  84.             if(s == num){
  85.                 return i;
  86.             } else {
  87.                 i++;
  88.             }
  89.         }
  90.         for(Integer s : sequence){
  91.             if(s == num){
  92.                 return i;
  93.             } else {
  94.                 i++;
  95.             }
  96.         }
  97.         for(Integer s : years){
  98.             if(s == num){
  99.                 return i;
  100.             } else {
  101.                 i++;
  102.             }
  103.         }
  104.         for(Integer s : dm){
  105.             if(s == num){
  106.                 return i;
  107.             } else {
  108.                 i++;
  109.             }
  110.         }
  111.         for(Integer s : md){
  112.             if(s == num){
  113.                 return i;
  114.             } else {
  115.                 i++;
  116.             }
  117.         }
  118.  
  119.         for(int j = 0, k = all.size() - 1; j < all.size() - 1 && k > 0; j++, k--){
  120.             if(all.get(j) == num){
  121.                 return i;
  122.             } else {
  123.                 i++;
  124.             }
  125.             if(all.get(k) == num){
  126.                 return i;
  127.             } else {
  128.                 i++;
  129.             }
  130.         }
  131.         return -1;
  132.     }
  133.  
  134.     private static List<Integer> calcMonDay() {
  135.         List<Integer> md = new ArrayList<>();
  136.         Calendar calendar = new GregorianCalendar();
  137.         calendar.set(Calendar.YEAR, 2017);
  138.         for(int i = 0; i < 12; i++){
  139.             calendar.set(Calendar.MONTH, i);
  140.             for(int j = 1; j <= calendar.getActualMaximum(Calendar.DAY_OF_MONTH); j ++){
  141.                 String val = "" + (i+1) + (j < 10 ? "0" + j : j);
  142.                 int v = Integer.valueOf(val);
  143.                 if(!same.contains(v) && !sequence.contains(v) && !years.contains(v)) {
  144.                     md.add(v);
  145.                 }
  146.             }
  147.         }
  148.         return md;
  149.     }
  150.  
  151.     private static List<Integer> calcDayMon() {
  152.         List<Integer> dm = new ArrayList<>();
  153.         Calendar calendar = new GregorianCalendar();
  154.         calendar.set(Calendar.YEAR, 2017);
  155.         for(int i = 0; i < 12; i++){
  156.             calendar.set(Calendar.MONTH, i);
  157.             for(int j = 1; j <= calendar.getActualMaximum(Calendar.DAY_OF_MONTH); j ++){
  158.                 String val = "" + j + ((i+1) < 10 ? "0" + (i+1) : (i+1));
  159.                 int v = Integer.valueOf(val);
  160.                 if(md == null){
  161.                     md = calcMonDay();
  162.                 }
  163.                 if(!md.contains(v) && !same.contains(v) && !sequence.contains(v) && !years.contains(v)) {
  164.                     dm.add(Integer.valueOf(val));
  165.                 }
  166.             }
  167.         }
  168.         return dm;
  169.     }
  170.  
  171.     private static List<Integer> calcYears() {
  172.         List<Integer> years = new ArrayList<>();
  173.         for(int i = 1900; i < 2017; i++){
  174.             years.add(i);
  175.         }
  176.         return years;
  177.     }
  178.  
  179.     private static List<Integer> calcSame() {
  180.         List<Integer> res = new ArrayList<>();
  181.         for(int i = 0; i < 10 ; i++) {
  182.             res.add(1111 * i);
  183.         }
  184.         return res;
  185.     }
  186.  
  187.     private static List<Integer> calcSequence() {
  188.         List<Integer> res = new ArrayList<>();
  189.         for(int i = 0; i < 9 ; i++) {
  190.             res.add(1111 * i + 123);
  191.         }
  192.         return res;
  193.     }
  194.  
  195.  
  196.     private static List<Integer> calcOther() {
  197.         List<Integer> res = new ArrayList<>();
  198.         res.addAll(same);
  199.         res.addAll(sequence);
  200.         res.addAll(years);
  201.         res.addAll(dm);
  202.         res.addAll(md);
  203.         List<Integer> result = new ArrayList<>();
  204.         for(int i = 0; i < 9999; i ++){
  205.             if(res.contains(i)){
  206.  
  207.             } else {
  208.                 result.add(i);
  209.             }
  210.         }
  211.         return result;
  212.     }
  213. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement