import java.util.Arrays;
import java.util.Calendar;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class AlgorithmProblemsSelect
{
public static void main(String[] args)
{
Map<Integer, String> map = new HashMap<Integer, String>();
map.put(2, "[Medium] Add Two Numbers");
map.put(3, "[Medium] Longest Substring Without Repeating Characters");
map.put(5, "[Medium] Longest Palindromic Substring");
map.put(6, "[Medium] ZigZag Conversion");
map.put(8, "[Medium] String to Integer");
map.put(11, "[Medium] Container With Most Water");
map.put(14, "[Easy] Longest Common Prefix");
map.put(16, "[Medium] 3Sum Closest");
map.put(18, "[Medium] 4Sum");
map.put(19, "[Medium] Remove Nth Node From End of List");
map.put(20, "[Easy] Valid Parentheses");
map.put(23, "[Hard] Merge k Sorted Lists");
map.put(24, "[Medium] Swap Nodes in Pairs");
map.put(29, "[Medium] Divide Two Integers");
map.put(31, "[Medium] Next Permutation");
map.put(33, "[Medium] Search in Rotated Sorted Array");
map.put(34, "[Medium] Find First and Last Position of Element in Sorted Array");
map.put(36, "[Medium] Valid Sudoku");
map.put(39, "[Medium] Combination Sum");
map.put(46, "[Medium] Permutations");
map.put(47, "[Medium] Permutations II");
map.put(49, "[Medium] Group Anagrams");
map.put(53, "[Easy] Maximum Subarray");
map.put(55, "[Medium] Jump Game");
map.put(56, "[Medium] Merge Intervals");
map.put(61, "[Medium] Rotate List");
map.put(62, "[Medium] Unique Paths");
map.put(63, "[Medium] Unique Paths II");
map.put(64, "[Medium] Minimum Path Sum");
map.put(71, "[Medium] Simplify Path");
map.put(73, "[Medium] Set Matrix Zeroes");
map.put(74, "[Medium] Search a 2D Matrix");
map.put(75, "[Medium] Sort Colors");
map.put(80, "[Medium] Remove Duplicates from Sorted Array II");
map.put(81, "[Medium] Search in Rotated Sorted Array II");
map.put(82, "[Medium] Remove Duplicates from Sorted List II");
map.put(83, "[Easy] Remove Duplicates from Sorted List");
map.put(86, "[Medium] Partition List");
map.put(88, "[Easy] Merge Sorted Array");
map.put(92, "[Medium] Reverse Linked List II");
map.put(94, "[Medium] Binary Tree Inorder Traversal");
map.put(100, "[Easy] Same Tree");
map.put(111, "[Easy] Minimum Depth of Binary Tree");
map.put(112, "[Easy] Path Sum");
map.put(114, "[Medium] Flatten Binary Tree to Linked List");
map.put(121, "[Easy] Best Time to Buy and Sell Stock");
map.put(122, "[Easy] Best Time to Buy and Sell Stock II");
map.put(129, "[Medium] Sum Root to Leaf Numbers");
map.put(130, "[Medium] Surrounded Regions");
map.put(137, "[Medium] Single Number II");
map.put(139, "[Medium] Word Break");
map.put(143, "[Medium] Reorder List");
map.put(144, "[Medium] Binary Tree Preorder Traversal");
map.put(146, "[Medium] LRU Cache");
map.put(147, "[Medium] Insertion Sort List");
map.put(150, "[Medium] Evaluate Reverse Polish Notation");
map.put(151, "[Medium] Reverse Words in a String");
map.put(152, "[Medium] Maximum Product Subarray");
map.put(162, "[Medium] Find Peak Element");
map.put(165, "[Medium] Compare Version Numbers");
map.put(179, "[Medium] Largest Number");
map.put(200, "[Medium] Number of Islands");
map.put(201, "[Medium] Bitwise AND of Numbers Range");
map.put(214, "[Hard] Shortest Palindrome");
map.put(228, "[Medium] Summary Ranges");
map.put(238, "[Medium] Product of Array Except Self");
map.put(240, "[Medium] Search a 2D Matrix II");
map.put(260, "[Medium] Single Number III");
map.put(328, "[Medium] Odd Even Linked List");
map.put(334, "[Medium] Increasing Triplet Subsequence");
map.put(338, "[Medium] Counting Bits");
map.put(905, "[Easy] Sort Array By Parity");
map.put(3792, "[Medium] Lian Lian Kan");
Integer[] keys = map.keySet().toArray(new Integer[0]);
int[] easyMediumHard = new int[3];
Set<String> set = new HashSet<String>();
for (String value : map.values())
{
if (value.startsWith("[Ea"))
{
easyMediumHard[0]++;
}
else if (value.startsWith("[Me"))
{
easyMediumHard[1]++;
}
else
{
easyMediumHard[2]++;
}
if (set.contains(value))
{
System.out.println("duplicate: " + value);
}
set.add(value);
}
List<Integer> keysList = Arrays.asList(keys);
Collections.sort(keysList);
System.out.println(keysList);
int setSize = set.size();
System.out.println("Altogether: " + set.size());
System.out.println("Easy: " + easyMediumHard[0]);
System.out.println("Medium: " + easyMediumHard[1]);
System.out.println("Hard: " + easyMediumHard[2]);
Calendar cal = Calendar.getInstance();
int day_of_month = cal.get(Calendar.DAY_OF_MONTH);
int day_of_week = cal.get(Calendar.DAY_OF_WEEK) - 1;
System.out.println(day_of_month);
System.out.println(day_of_week);
if (day_of_week == 0)
day_of_week = 7;
final int prime = 31;
int start = 1;
start = prime * start + day_of_month;
start = prime * start + day_of_week;
start = (start - 1) % setSize;
for (int i = start; i < start + 3; i++)
{
int index = i % setSize;
int key = keysList.get(index);
System.out.println("【" + (index + 1) + "】" + key + ": " + map.get(key));
}
}
}