Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.ArrayList;
- import java.util.Calendar;
- import java.util.GregorianCalendar;
- import java.util.List;
- public class Main {
- private static List<Integer> same = calcSame();
- private static List<Integer> sequence = calcSequence();
- private static List<Integer> years = calcYears();
- private static List<Integer> dm = calcDayMon();
- private static List<Integer> md = calcMonDay();
- private static List<Integer> all = calcOther();
- public static void main(String[] args) {
- int max = 0;
- int step = 0;
- for(int i = 0; i < 10000; i++){
- int a = autist(i);
- int h = haker(i);
- int m = matematik(i);
- if(max < (a + h + m)){
- max = (a + h + m);
- step = i;
- }
- System.out.println("n = " + i + "; max = " + (a + h + m) + "; Autist = " + a + "; Haker = " + h + "; Matematik = " + m);
- }
- System.out.println("Max find number = " + step);
- }
- /**
- * Аутыст - перебирает все числа подряд от 0000 до 9999
- */
- public static int autist(int num){
- for(int i = 0; i < 10000; i++){
- if(i == num){
- return i;
- }
- }
- return -1;
- }
- /**
- * Матиматик - перебирает числа в последовательности одна-по-возрастанию с 0000,
- * одна-по-убыванию с 9999, одна-по-убыванию с 5000, одна-по-возрастанию с 5001
- */
- public static int matematik(int num){
- int n = 0;
- for(int i = 0, j = 9999, k = 5000, l = 5001; i < 2500 && j > 7500 && k >= 2500 && l <= 7500; i++, j--, k--, l++){
- if(i == num){
- return n;
- } else {
- n++;
- }
- if(j == num){
- return n;
- } else {
- n++;
- }
- if(k == num){
- return n;
- } else {
- n++;
- }
- if(l == num){
- return n;
- } else {
- n++;
- }
- }
- return -1;
- }
- /**
- * Хакир - сначала перебирает все одинаковые числа и последовательности (0000,1111,1234 etc),
- * затем года рождения начиная с 1900 и по 2017), затем варианты даты в написании день-месяц (2301) и месяц-день (1214),
- * после этого начинает перебирать все оставшиеся комбинации
- * в порядке одну-по-возрастанию и одну-по-убыванию (0001 и 9998 будут первыми)
- */
- public static int haker(int num){
- int i = 0;
- for(Integer s : same){
- if(s == num){
- return i;
- } else {
- i++;
- }
- }
- for(Integer s : sequence){
- if(s == num){
- return i;
- } else {
- i++;
- }
- }
- for(Integer s : years){
- if(s == num){
- return i;
- } else {
- i++;
- }
- }
- for(Integer s : dm){
- if(s == num){
- return i;
- } else {
- i++;
- }
- }
- for(Integer s : md){
- if(s == num){
- return i;
- } else {
- i++;
- }
- }
- for(int j = 0, k = all.size() - 1; j < all.size() - 1 && k > 0; j++, k--){
- if(all.get(j) == num){
- return i;
- } else {
- i++;
- }
- if(all.get(k) == num){
- return i;
- } else {
- i++;
- }
- }
- return -1;
- }
- private static List<Integer> calcMonDay() {
- List<Integer> md = new ArrayList<>();
- Calendar calendar = new GregorianCalendar();
- calendar.set(Calendar.YEAR, 2017);
- for(int i = 0; i < 12; i++){
- calendar.set(Calendar.MONTH, i);
- for(int j = 1; j <= calendar.getActualMaximum(Calendar.DAY_OF_MONTH); j ++){
- String val = "" + (i+1) + (j < 10 ? "0" + j : j);
- int v = Integer.valueOf(val);
- if(!same.contains(v) && !sequence.contains(v) && !years.contains(v)) {
- md.add(v);
- }
- }
- }
- return md;
- }
- private static List<Integer> calcDayMon() {
- List<Integer> dm = new ArrayList<>();
- Calendar calendar = new GregorianCalendar();
- calendar.set(Calendar.YEAR, 2017);
- for(int i = 0; i < 12; i++){
- calendar.set(Calendar.MONTH, i);
- for(int j = 1; j <= calendar.getActualMaximum(Calendar.DAY_OF_MONTH); j ++){
- String val = "" + j + ((i+1) < 10 ? "0" + (i+1) : (i+1));
- int v = Integer.valueOf(val);
- if(md == null){
- md = calcMonDay();
- }
- if(!md.contains(v) && !same.contains(v) && !sequence.contains(v) && !years.contains(v)) {
- dm.add(Integer.valueOf(val));
- }
- }
- }
- return dm;
- }
- private static List<Integer> calcYears() {
- List<Integer> years = new ArrayList<>();
- for(int i = 1900; i < 2017; i++){
- years.add(i);
- }
- return years;
- }
- private static List<Integer> calcSame() {
- List<Integer> res = new ArrayList<>();
- for(int i = 0; i < 10 ; i++) {
- res.add(1111 * i);
- }
- return res;
- }
- private static List<Integer> calcSequence() {
- List<Integer> res = new ArrayList<>();
- for(int i = 0; i < 9 ; i++) {
- res.add(1111 * i + 123);
- }
- return res;
- }
- private static List<Integer> calcOther() {
- List<Integer> res = new ArrayList<>();
- res.addAll(same);
- res.addAll(sequence);
- res.addAll(years);
- res.addAll(dm);
- res.addAll(md);
- List<Integer> result = new ArrayList<>();
- for(int i = 0; i < 9999; i ++){
- if(res.contains(i)){
- } else {
- result.add(i);
- }
- }
- return result;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement