Advertisement
Guest User

Jetbrains Academy- Amazing Numbers Project- Sunny and Square Numbers

a guest
Nov 3rd, 2021
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 16.40 KB | None | 0 0
  1. /******************************************************************************
  2.  
  3.                             Online Java Compiler.
  4.                 Code, Compile, Run and Debug java program online.
  5. Write your code in this editor and press "Run" button to execute it.
  6.  
  7. *******************************************************************************/
  8.  
  9. import java.util.Scanner;
  10. import java.util.Arrays;
  11.  
  12. public class Main {
  13.  
  14.     enum ParameterTypes {
  15.         EVEN,
  16.         ODD,
  17.         BUZZ,
  18.         DUCK,
  19.         PALINDROMIC,
  20.         GAPFUL;
  21.         SPY,
  22.         SQUARE,
  23.         SUNNY
  24.     }  
  25.  
  26.     public static void main(String[] args) {
  27.         System.out.println("Welcome to Amazing Numbers!");
  28.         System.out.println(" ");
  29.         instructions();
  30.         requestPrompt();
  31.     }
  32.  
  33.     public static void instructions() {
  34.         System.out.println("Supported requests:\n" +
  35.                 "- enter a natural number to know its properties;\n" +
  36.                 "- enter two natural numbers to obtain the properties of the list:\n" +
  37.                 "  * the first parameter represents a starting number;\n" +
  38.                 "  * the second parameters show how many consecutive numbers are to be processed;\n" +
  39.                 "- two natural numbers and two properties to search for; \n" +
  40.                 "- separate the parameters with one space;\n" +
  41.                 "- enter 0 to exit.");
  42.     }
  43.  
  44.     public static void requestPrompt() {
  45.         Scanner scanner = new Scanner(System.in);
  46.         System.out.println("Enter a request:");
  47.         String str = scanner.nextLine();
  48.  
  49.         while (!str.equals("0")) {
  50.             String[] strArray = str.split(" ");
  51.  
  52.             if (strArray.length == 4) {
  53.                 numbersWithTwoParameters(strArray);
  54.             }
  55.             else if (strArray.length == 3) {
  56.                 numbersWithOneParameter(strArray);
  57.             }
  58.             else if (strArray.length == 2) {
  59.                 twoNumbers(strArray);
  60.                 }
  61.              else {
  62.                 oneNumber(strArray);
  63.             }
  64.  
  65.             System.out.println("Enter a request:");
  66.             str = scanner.nextLine();
  67.         }
  68.        
  69.         System.out.println("Goodbye!");
  70.    
  71.     }
  72.  
  73.     public static void numbersWithOneParameter(String[] strArray) {
  74.         long naturalNumber = Long.parseLong(strArray[0]);
  75.         long counter = Long.parseLong(strArray[1]);
  76.         String parameter = strArray[2];
  77.  
  78.  
  79.  
  80.         if (naturalNumber < 0) {
  81.             System.out.println("The first parameter should be a natural number or zero.");
  82.         } else if (counter <= 0) {
  83.             System.out.println("second parameter should be a natural number");
  84.         } else if (doesParamExist(parameter) == false)
  85.          {
  86.             System.out.println("The property [" + parameter +  "] is wrong. \n" +
  87.             "Available properties: [BUZZ, DUCK, PALINDROMIC, GAPFUL, SPY, EVEN, ODD]");
  88.         }  else {
  89.             switch (parameter.toLowerCase()) {
  90.                 case "even": {
  91.                     for (int i = 0; i < counter; i++) {
  92.                         while(!evenNumber(naturalNumber)) {
  93.                             naturalNumber++;
  94.                         }
  95.                         printNumberProperties(naturalNumber);
  96.                         naturalNumber++;
  97.                     }
  98.                     break;
  99.                 }
  100.                 case "odd": {
  101.                     for (int i = 0; i < counter; i++) {
  102.                         while(!oddNumber(naturalNumber)) {
  103.                             naturalNumber++;
  104.                         }
  105.                         printNumberProperties(naturalNumber);
  106.                         naturalNumber++;
  107.                     }
  108.                     break;
  109.                 }
  110.                 case "buzz": {
  111.                     for (int i = 0; i < counter; i++) {
  112.                          while(!buzzNumber(naturalNumber)) {
  113.                             naturalNumber++;
  114.                         }
  115.                         printNumberProperties(naturalNumber);
  116.                         naturalNumber++;
  117.                     }
  118.                     break;
  119.                 }
  120.                 case "duck": {
  121.                     for (int i = 0; i < counter; i++) {
  122.                         while(!duckNumber(naturalNumber)) {
  123.                             naturalNumber++;
  124.                         }
  125.                         printNumberProperties(naturalNumber);
  126.                         naturalNumber++;
  127.                     }
  128.                     break;
  129.                 }
  130.                 case "palindromic": {
  131.                     for (int i = 0; i < counter; i++) {
  132.                         while(!palindromicNumber(naturalNumber)) {
  133.                             naturalNumber++;
  134.                         }
  135.                         printNumberProperties(naturalNumber);
  136.                         naturalNumber++;
  137.                     }
  138.                     break;
  139.                 }
  140.                 case "gapful": {
  141.                     for (int i = 0; i < counter; i++) {
  142.                         while(!gapfulNumber(naturalNumber)) {
  143.                             naturalNumber++;
  144.                         }
  145.                         printNumberProperties(naturalNumber);
  146.                         naturalNumber++;
  147.                     }
  148.                     break;
  149.                 }
  150.                 case "spy": {
  151.                     for (int i = 0; i < counter; i++) {
  152.                         while(!spyNumber(naturalNumber)) {
  153.                             naturalNumber++;
  154.                         }
  155.                         printNumberProperties(naturalNumber);
  156.                         naturalNumber++;
  157.                     }
  158.                     break;
  159.                 }
  160.                 case "square" {
  161.                     for (int i = 0; i < counter; i++) {
  162.                         while(!squareNumber(naturalNumber)) {
  163.                             naturalNumber++;
  164.                         }
  165.                         printNumberProperties(naturalNumber);
  166.                         naturalNumber++;
  167.                     }
  168.                     break;
  169.                 }
  170.             }
  171.         }
  172.     }
  173.  
  174.     public static void numbersWithTwoParameters(String[] strArray) {
  175.         long naturalNumber = Long.parseLong(strArray[0]);
  176.         long counter = Long.parseLong(strArray[1]);
  177.         String parameter1 = strArray[2];
  178.         String parameter2 = strArray[3];
  179.  
  180.  
  181.  
  182.         if (naturalNumber < 0) {
  183.             System.out.println("The first parameter should be a natural number or zero.");
  184.         } else if (counter <= 0) {
  185.             System.out.println("second parameter should be a natural number");
  186.         } else if (doesParamExist(parameter1) == false && doesParamExist(parameter2) == true) {
  187.             System.out.println("The property [" + parameter1 +  "] is wrong. \n" +
  188.             "Available properties: [BUZZ, DUCK, PALINDROMIC, GAPFUL, SPY, EVEN, ODD]");
  189.         } else if (doesParamExist(parameter1) == true && doesParamExist(parameter2) == false) {
  190.             System.out.println("The property [" + parameter1 +  "] is wrong. \n" +
  191.             "Available properties: [BUZZ, DUCK, PALINDROMIC, GAPFUL, SPY, EVEN, ODD]");
  192.         } else if (doesParamExist(parameter1) == false && doesParamExist(parameter2) == false) {
  193.             System.out.println("The properties [" + parameter1 + " " + parameter2  "] are wrong. \n" +
  194.             "Available properties: [BUZZ, DUCK, PALINDROMIC, GAPFUL, SPY, EVEN, ODD]");
  195.         } else if (parameter1.toLowerCase() == "odd" && parameter2.toLowerCase() == "even" || parameter2.toLowerCase() == "odd" && parameter1.toLowerCase() == "even" ||
  196.             parameter1.toLowerCase() == "square" && parameter2.toLowerCase() == "sunny" ||  parameter2.toLowerCase() == "square" && parameter1.toLowerCase() == "sunny" ||
  197.             parameter1.toLowerCase() == "spy" && parameter2.toLowerCase() == "duck" || parameter2.toLowerCase() == "spy" && parameter1.toLowerCase() == "duck") {
  198.             System.out.println("The request contains mutually exclusive properties: [SQUARE, SUNNY] \n" +
  199.             "There are no numbers with these properties.")
  200.         }
  201.           else {
  202.            
  203.            
  204.         }
  205.     }
  206.  
  207.     public static void numberProppertiesChecker(String parameter, long naturalNumber, long counter) {
  208.         switch (parameter1.toLowerCase()) {
  209.                 case "even": {
  210.                     for (int i = 0; i < counter; i++) {
  211.                         while(!evenNumber(naturalNumber)) {
  212.                             naturalNumber++;
  213.                         }
  214.                         printNumberProperties(naturalNumber);
  215.                         naturalNumber++;
  216.                     }
  217.                     break;
  218.                 }
  219.                 case "odd": {
  220.                     for (int i = 0; i < counter; i++) {
  221.                         while(!oddNumber(naturalNumber)) {
  222.                             naturalNumber++;
  223.                         }
  224.                         printNumberProperties(naturalNumber);
  225.                         naturalNumber++;
  226.                     }
  227.                     break;
  228.                 }
  229.                 case "buzz": {
  230.                     for (int i = 0; i < counter; i++) {
  231.                          while(!buzzNumber(naturalNumber)) {
  232.                             naturalNumber++;
  233.                         }
  234.                         printNumberProperties(naturalNumber);
  235.                         naturalNumber++;
  236.                     }
  237.                     break;
  238.                 }
  239.                 case "duck": {
  240.                     for (int i = 0; i < counter; i++) {
  241.                         while(!duckNumber(naturalNumber)) {
  242.                             naturalNumber++;
  243.                         }
  244.                         printNumberProperties(naturalNumber);
  245.                         naturalNumber++;
  246.                     }
  247.                     break;
  248.                 }
  249.                 case "palindromic": {
  250.                     for (int i = 0; i < counter; i++) {
  251.                         while(!palindromicNumber(naturalNumber)) {
  252.                             naturalNumber++;
  253.                         }
  254.                         printNumberProperties(naturalNumber);
  255.                         naturalNumber++;
  256.                     }
  257.                     break;
  258.                 }
  259.                 case "gapful": {
  260.                     for (int i = 0; i < counter; i++) {
  261.                         while(!gapfulNumber(naturalNumber)) {
  262.                             naturalNumber++;
  263.                         }
  264.                         printNumberProperties(naturalNumber);
  265.                         naturalNumber++;
  266.                     }
  267.                     break;
  268.                 }
  269.                 case "spy": {
  270.                     for (int i = 0; i < counter; i++) {
  271.                         while(!spyNumber(naturalNumber)) {
  272.                             naturalNumber++;
  273.                         }
  274.                         printNumberProperties(naturalNumber);
  275.                         naturalNumber++;
  276.                     }
  277.                     break;
  278.                 }
  279.             }
  280.         }
  281.  
  282.     public static boolean doesParamExist(String parameter) {
  283.         String[] paramArray = {"even", "odd", "buzz", "duck", "palindromic", "gapful", "spy"};
  284.         boolean check;
  285.         for (String checker : paramArray) {
  286.             if (checker.equals(parameter.toLowerCase())) {
  287.                 return true;
  288.             }
  289.         }
  290.         return false;
  291.     }
  292.  
  293.     public static void twoNumbers(String[] strArray) {
  294.        
  295.         long naturalNumber = Long.parseLong(strArray[0]);
  296.         long counter = Long.parseLong(strArray[1]);
  297.  
  298.         if (naturalNumber < 0) {
  299.             System.out.println("The first parameter should be a natural number or zero.");
  300.         } else if (counter <= 0) {
  301.             System.out.println("second parameter should be a natural number");
  302.         } else {
  303.             for(int i = 0; i < counter; i++) {
  304.                 printNumberProperties(naturalNumber);
  305.                 naturalNumber++;
  306.             }  
  307.         }
  308.     }
  309.  
  310.     public static void oneNumber(String[] strArray) {
  311.         long naturalNumber = Long.parseLong(strArray[0]);
  312.  
  313.         if (naturalNumber < 0) {
  314.             System.out.println("The first parameter should be a natural number or zero.");
  315.         } else {
  316.             System.out.println("Properties of " + naturalNumber);
  317.             System.out.println("even: " + evenNumber(naturalNumber));
  318.             System.out.println("odd: " + oddNumber(naturalNumber));
  319.             System.out.println("buzz: " + buzzNumber(naturalNumber));
  320.             System.out.println("duck: " + duckNumber(naturalNumber));
  321.             System.out.println("palindromic: " + palindromicNumber(naturalNumber));
  322.             System.out.println("gapful: " + gapfulNumber(naturalNumber));
  323.             System.out.println("spy: " + spyNumber(naturalNumber));
  324.         }
  325.     }
  326.  
  327.     public static void printNumberProperties(long naturalNumber) {
  328.             System.out.print(naturalNumber + " is ");
  329.             if (evenNumber(naturalNumber)) System.out.print("even, ");
  330.             if (oddNumber(naturalNumber)) System.out.print("odd, ");
  331.             if (buzzNumber(naturalNumber)) System.out.print("buzz, ");
  332.             if (duckNumber(naturalNumber)) System.out.print("duck, ");
  333.             if (palindromicNumber(naturalNumber)) System.out.print("palindromic, ");
  334.             if (gapfulNumber(naturalNumber)) System.out.print("gapful, ");
  335.             if (spyNumber(naturalNumber)) System.out.print("spy");
  336.             System.out.print("\n");
  337.     }
  338.  
  339.     public static boolean evenNumber(long x) {
  340.         if (x % 2 == 0) {
  341.             return true;
  342.         } else {
  343.             return false;
  344.         }
  345.     }
  346.  
  347.     public static boolean oddNumber(long x) {
  348.         if (x % 2 != 0) {
  349.             return true;
  350.         } else {
  351.             return false;
  352.         }
  353.     }
  354.  
  355.     public static boolean buzzNumber(long x) {
  356.         if (x == 7) {
  357.             return true;
  358.         } else if (x % 7 == 0 && x % 10 != 7) {
  359.             return true;
  360.         } else if (x % 7 == 0 && x % 10 == 7) {
  361.             return true;
  362.         } else if (x % 7 != 0 && x % 10 == 7) {
  363.             return true;
  364.         } else {
  365.             return false;
  366.         }
  367.     }
  368.  
  369.     public static boolean duckNumber(long x) {
  370.         String xString = Long.toString(x);
  371.         if (xString.charAt(0) == 0) {
  372.             return false;
  373.         } else {
  374.             char[] charArray = xString.toCharArray();
  375.  
  376.             for (char i : charArray) {
  377.                 if (i == 48) {
  378.                     return true;
  379.                 }
  380.             }
  381.             return false;
  382.         }
  383.  
  384.     }
  385.  
  386.     public static boolean palindromicNumber(long x) {
  387.  
  388.         String xString = Long.toString(x);
  389.         char[] charArray = xString.toCharArray();
  390.         char[] reversedCharArray = new char[charArray.length];
  391.         int count = 0;
  392.  
  393.         for (int i = charArray.length; i > 0; --i) {
  394.             reversedCharArray[count] = charArray[i - 1];
  395.             ++count;
  396.         }
  397.         return Arrays.equals(charArray, reversedCharArray);
  398.     }
  399.  
  400.     public static boolean gapfulNumber(long x) {
  401.         char[] ch = Long.toString(x).toCharArray();
  402.  
  403.         if (ch.length <= 2) {
  404.             return false;
  405.         }
  406.  
  407.         long ch1 = Character.getNumericValue(ch[0]);
  408.         long ch2 = Character.getNumericValue(ch[ch.length - 1]);
  409.         long x2 = ch1 * 10 + ch2;
  410.  
  411.         return x % x2 == 0;
  412.     }
  413.    
  414.     public static boolean spyNumber(long x) {
  415.         StringBuilder stringBuilder = new StringBuilder();
  416.         stringBuilder.append(x);
  417.         char[] charArr = stringBuilder.toString().toCharArray();
  418.        
  419.         int stringLength = stringBuilder.length();
  420.         int sum = Character.getNumericValue(charArr[0]), product = Character.getNumericValue(charArr[0]);
  421.        
  422.         for(int i = 1; i < charArr.length; i++) {
  423.             sum += Character.getNumericValue(charArr[i]);
  424.             product = product * (Character.getNumericValue(charArr[i]));
  425.         }
  426.  
  427.         return sum == product;
  428.     }
  429.  
  430.     public static boolean squareNumber(long x) {
  431.         double sqrtX = Math.sqrt(x);
  432.         return sqrtX - Math.floor(sqrtX) == 0;
  433.     }
  434.     public static boolean sunnyNumber(long x) {
  435.         double sqrtX = Math.sqrt(x+1);
  436.         return sqrtX - Math.floor(sqrtX) == 0;
  437.     }
  438. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement