diff --git a/images/starcharts.svg b/images/starcharts.svg index c4349b3b50acd..7de08ce5bfc6e 100644 --- a/images/starcharts.svg +++ b/images/starcharts.svg @@ -1,4 +1,4 @@ - + \n2018-09-252019-04-172019-11-072020-05-292020-12-192021-07-122022-02-012022-08-242023-03-16Time2019-04-182019-11-102020-06-022020-12-252021-07-182022-02-092022-09-022023-03-27Time02800 \ No newline at end of file +L 919 43 +L 919 43 +L 919 43 +L 919 43 +L 919 43 +L 919 43 +L 919 43 +L 919 42 +L 919 42 +L 919 42 +L 919 42 +L 919 42 +L 919 42 +L 919 42 +L 919 42 +L 919 42 +L 919 42 +L 919 42 +L 919 42 +L 919 42 +L 919 42 +L 919 42 +L 919 42 +L 919 42 +L 919 42 +L 919 42 +L 919 42 +L 919 42 +L 919 42 +L 919 42 +L 919 42 +L 919 42 +L 919 42 +L 919 42 +L 919 42 +L 919 42 +L 919 42 +L 919 42 +L 919 42 +L 919 42 +L 919 42 +L 919 42 +L 919 42 +L 919 42 +L 919 42 +L 919 42 +L 919 42 +L 919 42 +L 919 42 +L 919 42 +L 919 42 +L 919 42 +L 919 42 +L 919 42 +L 919 42 +L 919 42 +L 919 42 +L 919 42 +L 919 42 +L 919 42 +L 919 42 +L 919 42 +L 919 42 +L 919 42 +L 919 42 +L 919 42 +L 919 42 +L 919 42 +L 919 42 +L 919 42 +L 919 42 +L 919 42 +L 919 41 +L 919 41 +L 919 41 +L 919 41 +L 919 41 +L 919 41 +L 919 41 +L 919 41 +L 919 41 +L 919 41 +L 919 41 +L 919 41 +L 919 41 +L 919 41 +L 919 41 +L 919 41 +L 919 41 +L 919 41 +L 919 41 +L 919 41 +L 919 41 +L 919 41 +L 919 41 +L 919 41 +L 919 41 +L 919 41 +L 919 41 +L 919 41 +L 919 41 +L 919 41 +L 919 41 +L 919 41 +L 919 41 +L 919 41 +L 919 41 +L 919 41 +L 919 41 +L 919 41 +L 919 41 +L 919 41 +L 919 41 +L 919 41 +L 919 41 +L 919 41 +L 919 41 +L 919 41 +L 919 41 +L 919 41 +L 919 41 +L 919 41 +L 919 41 +L 919 41 +L 919 41 +L 919 41 +L 919 41 +L 919 41 +L 919 41 +L 919 41 +L 919 41 +L 919 41 +L 919 41 +L 919 41 +L 919 41 +L 919 41 +L 919 40 +L 919 40 +L 919 40 +L 919 40 +L 919 40 +L 919 40 +L 919 40 +L 919 40 +L 919 40 +L 919 40 +L 919 40 +L 919 40 +L 919 40 +L 919 40 +L 919 40 +L 919 40 +L 919 40 +L 919 40 +L 919 40 +L 919 40 +L 919 40 +L 919 40 +L 919 40 +L 919 40 +L 919 40 +L 919 40 +L 919 40 +L 919 40 +L 919 40 +L 919 40 +L 919 40 +L 919 40 +L 919 40 +L 919 40 +L 919 40 +L 919 40 +L 919 40 +L 919 40 +L 919 40 +L 919 40 +L 919 40 +L 919 40 +L 919 40 +L 919 40 +L 919 40 +L 919 40 +L 919 40 +L 919 40 +L 919 40 +L 919 40 +L 919 40 +L 919 40 +L 919 40 +L 919 40 +L 919 40 +L 919 40 +L 919 40 +L 919 40 +L 919 40 +L 919 40 +L 919 40 +L 919 40 +L 919 40 +L 919 40 +L 919 40 +L 919 39 +L 919 39 +L 919 39 +L 919 39 +L 919 39 +L 919 39 +L 919 39 +L 919 39 +L 919 39 +L 919 39 +L 919 39 +L 919 39 +L 919 39 +L 919 39 +L 919 39 +L 919 39 +L 919 39 +L 919 39 +L 919 39 +L 919 39 +L 919 39 +L 919 39 +L 919 39 +L 919 39 +L 919 39 +L 919 39 +L 919 39 +L 919 39 +L 919 39 +L 919 39 +L 919 39 +L 919 39 +L 919 39 +L 919 39 +L 919 39 +L 919 39 +L 919 39 +L 919 39 +L 919 39 +L 919 39 +L 919 39 +L 919 39 +L 919 39 +L 919 39 +L 919 39 +L 919 39 +L 919 39 +L 919 39 +L 919 39 +L 919 39 +L 919 39 +L 919 39 +L 919 39 +L 919 39 +L 919 39 +L 919 39 +L 919 39 +L 919 39 +L 919 39 +L 919 39 +L 919 39 +L 919 39 +L 919 39 +L 919 39 +L 919 39 +L 919 38 +L 919 38 +L 919 38 +L 919 38 +L 919 38 +L 919 38 +L 919 38 +L 919 38 +L 919 38 +L 919 38 +L 919 38 +L 919 38 +L 919 38 +L 919 38 +L 919 38 +L 919 38 +L 919 38 +L 919 38 +L 919 38 +L 919 38 +L 919 38 +L 919 38 +L 919 38 +L 919 38 +L 919 38 +L 919 38 +L 919 38 +L 919 38 +L 919 38 +L 919 38 +L 919 38 +L 920 38 +L 920 38 +L 920 38 +L 920 38 +L 920 38 +L 920 38 +L 920 38 +L 920 38 +L 920 38 +L 920 38 +L 920 38 +L 920 38 +L 920 38 +L 920 38 +L 920 38 +L 920 38 +L 920 38 +L 920 38 +L 920 38 +L 920 38 +L 920 38 +L 920 38 +L 920 38 +L 920 38 +L 920 38 +L 920 38 +L 920 38 +L 920 38 +L 920 38 +L 920 38 +L 920 38 +L 920 38 +L 920 38 +L 920 37 +L 920 37 +L 920 37 +L 920 37 +L 920 37 +L 920 37 +L 920 37 +L 920 37 +L 920 37 +L 920 37 +L 920 37 +L 920 37 +L 920 37 +L 920 37 +L 920 37 +L 920 37 +L 920 37 +L 920 37 +L 920 37 +L 920 37 +L 920 37 +L 920 37 +L 920 37 +L 920 37 +L 920 37 +L 920 37 +L 920 37 +L 920 37 +L 920 37 +L 920 37 +L 920 37 +L 920 37 +L 920 37 +L 920 37 +L 920 37 +L 920 37 +L 920 37 +L 920 37 +L 920 37 +L 920 37 +L 920 37 +L 920 37 +L 920 37 +L 920 37 +L 920 37 +L 920 37 +L 920 37 +L 920 37 +L 920 37 +L 920 37 +L 920 37 +L 920 37 +L 920 37 +L 920 37 +L 920 37 +L 920 37 +L 920 37 +L 920 37 +L 920 37 +L 920 37 +L 920 37 +L 920 37 +L 920 37 +L 920 37 +L 920 37 +L 920 36 +L 920 36 +L 920 36 +L 920 36 +L 920 36 +L 920 36 +L 920 36 +L 920 36 +L 920 36 +L 920 36 +L 920 36 +L 920 36 +L 920 36 +L 920 36 +L 920 36 +L 920 36 +L 920 36 +L 920 36 +L 920 36 +L 920 36 +L 920 36 +L 920 36 +L 920 36 +L 920 36 +L 920 36 +L 920 36 +L 920 36 +L 920 36 +L 920 36 +L 920 36 +L 920 36 +L 920 36 +L 920 36 +L 920 36 +L 920 36 +L 920 36 +L 921 36 +L 921 36 +L 921 36 +L 921 36 +L 921 36 +L 921 36 +L 921 36 +L 921 36 +L 921 36 +L 921 36 +L 921 36 +L 921 36 +L 921 36 +L 921 36 +L 921 36 +L 921 36 +L 921 36 +L 921 36 +L 921 36 +L 921 36 +L 921 36 +L 921 36 +L 921 36 +L 921 36 +L 921 36 +L 921 36 +L 921 36 +L 921 36 +L 921 36 +L 921 35 +L 921 35 +L 921 35 +L 921 35 +L 921 35 +L 921 35 +L 921 35 +L 921 35 +L 921 35 +L 921 35 +L 921 35 +L 921 35 +L 921 35 +L 921 35 +L 921 35 +L 921 35 +L 921 35 +L 921 35 +L 921 35 +L 921 35 +L 921 35 +L 921 35 +L 921 35 +L 921 35 +L 921 35 +L 921 35 +L 921 35 +L 921 35 +L 921 35 +L 921 35 +L 921 35 +L 921 35 +L 921 35 +L 921 35 +L 921 35 +L 921 35 +L 921 35 +L 921 35 +L 921 35 +L 921 35 +L 921 35 +L 921 35 +L 921 35 +L 921 35 +L 921 35 +L 921 35 +L 921 35 +L 921 35 +L 921 35 +L 921 35 +L 921 35 +L 921 35 +L 921 35 +L 921 35 +L 921 35 +L 921 35 +L 921 35 +L 921 35 +L 921 35 +L 921 35 +L 922 35 +L 922 35 +L 922 35 +L 922 35 +L 922 35 +L 922 34 +L 922 34 +L 922 34 +L 922 34 +L 922 34 +L 922 34 +L 922 34 +L 922 34 +L 922 34 +L 922 34 +L 922 34 +L 922 34 +L 922 34 +L 922 34 +L 922 34 +L 922 34 +L 922 34 +L 922 34 +L 922 34 +L 922 34 +L 922 34 +L 922 34 +L 922 34 +L 922 34 +L 922 34 +L 922 34 +L 922 34 +L 922 34 +L 922 34 +L 922 34 +L 922 34 +L 922 34 +L 922 34 +L 922 34 +L 922 34 +L 922 34 +L 922 34 +L 922 34 +L 922 34 +L 922 34 +L 922 34 +L 922 34 +L 922 34 +L 922 34 +L 922 34 +L 922 34 +L 922 34 +L 922 34 +L 922 34 +L 922 34 +L 922 34 +L 922 34 +L 922 34 +L 922 34 +L 922 34 +L 922 34 +L 922 34 +L 922 34 +L 922 34 +L 922 34 +L 922 34 +L 922 34 +L 922 34 +L 922 34 +L 922 33 +L 922 33 +L 922 33 +L 922 33 +L 922 33 +L 922 33 +L 922 33 +L 922 33 +L 922 33 +L 922 33 +L 922 33 +L 922 33 +L 922 33 +L 922 33 +L 922 33 +L 922 33 +L 922 33 +L 922 33 +L 922 33 +L 922 33 +L 922 33 +L 922 33 +L 922 33 +L 923 33 +L 923 33 +L 923 33 +L 923 33 +L 923 33 +L 923 33 +L 923 33 +L 923 33 +L 923 33 +L 923 33 +L 923 33 +L 923 33 +L 923 33 +L 923 33 +L 923 33 +L 923 33 +L 923 33 +L 923 33 +L 923 33 +L 923 33 +L 923 33 +L 923 33 +L 923 33 +L 923 33 +L 923 33 +L 923 33 +L 923 33 +L 923 33 +L 923 33 +L 923 33 +L 923 33 +L 923 33 +L 923 33 +L 923 33 +L 923 33 +L 923 33 +L 923 33 +L 923 33 +L 923 33 +L 923 33 +L 923 33 +L 923 33 +L 923 32 +L 923 32 +L 923 32 +L 923 32 +L 923 32 +L 923 32 +L 923 32 +L 923 32 +L 923 32 +L 923 32 +L 923 32 +L 923 32 +L 923 32 +L 923 32 +L 923 32 +L 923 32 +L 923 32 +L 923 32 +L 923 32 +L 923 32 +L 923 32 +L 923 32 +L 923 32 +L 923 32 +L 923 32 +L 923 32 +L 923 32 +L 923 32 +L 924 32 +L 924 32 +L 924 32 +L 924 32 +L 924 32 +L 924 32 +L 924 32 +L 924 32 +L 924 32 +L 924 32 +L 924 32 +L 924 32 +L 924 32 +L 924 32 +L 924 32 +L 924 32 +L 924 32 +L 924 32 +L 924 32 +L 924 32 +L 924 32 +L 924 32 +L 924 32 +L 924 32 +L 924 32 +L 924 32 +L 924 32 +L 924 32 +L 924 32 +L 924 32 +L 924 32 +L 924 32 +L 924 32 +L 924 32 +L 924 32 +L 924 32 +L 924 32 +L 924 31 +L 924 31 +L 924 31 +L 924 31 +L 924 31 +L 924 31 +L 924 31 +L 924 31 +L 924 31 +L 924 31 +L 924 31 +L 924 31 +L 924 31 +L 924 31 +L 924 31 +L 925 31 +L 925 31 +L 925 31 +L 925 31 +L 925 31 +L 925 31 +L 925 31 +L 925 31 +L 925 31 +L 925 31 +L 925 31 +L 925 31 +L 925 31 +L 925 31 +L 925 31 +L 925 31 +L 925 31 +L 925 31 +L 925 31 +L 925 31 +L 925 31 +L 925 31 +L 925 31 +L 925 31 +L 925 31 +L 925 31 +L 925 31 +L 925 31 +L 925 31 +L 925 31 +L 925 31 +L 925 31 +L 925 31 +L 925 31 +L 925 31 +L 925 31 +L 925 31 +L 925 31 +L 925 31 +L 925 31 +L 925 31 +L 925 31 +L 925 31 +L 925 31 +L 925 31 +L 925 31 +L 925 31 +L 925 31 +L 925 31 +L 925 30 +L 925 30 +L 925 30 +L 925 30 +L 925 30 +L 926 30 +L 926 30 +L 926 30 +L 926 30 +L 926 30 +L 926 30 +L 926 30 +L 926 30 +L 926 30 +L 926 30 +L 926 30 +L 926 30 +L 926 30 +L 926 30 +L 926 30 +L 926 30 +L 926 30 +L 926 30 +L 926 30 +L 926 30 +L 926 30 +L 926 30 +L 926 30 +L 926 30 +L 926 30 +L 927 30 +L 927 30 +L 927 30 +L 927 30 +L 927 30 +L 927 30 +L 927 30 +L 927 30 +L 927 30 +L 927 30 +L 927 30 +L 927 30 +L 927 30 +L 927 30 +L 927 30 +L 927 30 +L 927 30 +L 927 30 +L 927 30 +L 927 30 +L 927 30 +L 927 30 +L 927 30 +L 927 30 +L 927 30 +L 927 30 +L 927 30 +L 927 30 +L 927 30 +L 927 30 +L 927 30 +L 927 30 +L 927 30 +L 927 30 +L 927 30 +L 927 29 +L 927 29 +L 927 29 +L 927 29 +L 927 29 +L 927 29 +L 927 29 +L 927 29 +L 927 29 +L 927 29 +L 927 29 +L 928 29 +L 928 29 +L 928 29 +L 928 29 +L 928 29 +L 928 29 +L 928 29 +L 928 29 +L 928 29 +L 928 29 +L 928 29 +L 928 29 +L 928 29 +L 928 29 +L 928 29 +L 928 29 +L 928 29 +L 928 29 +L 928 29 +L 928 29 +L 928 29 +L 928 29 +L 928 29 +L 928 29 +L 928 29 +L 928 29 +L 928 29 +L 928 29 +L 928 29 +L 928 29 +L 928 29 +L 928 29 +L 928 29 +L 928 29 +L 928 29 +L 928 29 +L 928 29 +L 928 29 +L 928 29 +L 928 29 +L 928 29 +L 928 29 +L 928 29 +L 928 29 +L 928 29 +L 928 29 +L 928 29 +L 928 29 +L 928 29 +L 928 29 +L 928 29 +L 928 29 +L 928 29 +L 928 29 +L 928 28 +L 928 28 +L 928 28 +L 928 28 +L 928 28 +L 928 28 +L 928 28 +L 928 28 +L 928 28 +L 928 28 +L 928 28 +L 928 28 +L 928 28 +L 928 28 +L 928 28 +L 928 28 +L 928 28 +L 928 28 +L 928 28 +L 928 28 +L 928 28 +L 928 28 +L 929 28 +L 929 28 +L 929 28 +L 929 28 +L 929 28 +L 929 28 +L 929 28 +L 929 28 +L 929 28 +L 929 28 +L 929 28 +L 929 28 +L 929 28 +L 929 28 +L 929 28 +L 929 28 +L 929 28 +L 929 28 +L 929 28 +L 929 28 +L 929 28 +L 929 28 +L 929 28 +L 929 28 +L 929 28 +L 929 28 +L 929 28 +L 929 28 +L 929 28 +L 929 28 +L 929 28 +L 929 28 +L 929 28 +L 929 28 +L 929 28 +L 929 28 +L 929 28 +L 929 28 +L 929 28 +L 929 28 +L 929 28 +L 929 28 +L 929 28 +L 929 27 +L 929 27 +L 929 27 +L 929 27 +L 929 27 +L 929 27 +L 929 27 +L 929 27 +L 929 27 +L 929 27 +L 929 27 +L 929 27 +L 929 27 +L 929 27 +L 930 27 +L 930 27 +L 930 27 +L 930 27 +L 930 27 +L 930 27 +L 930 27 +L 930 27 +L 930 27 +L 930 27 +L 930 27 +L 930 27 +L 930 27 +L 930 27 +L 930 27 +L 930 27 +L 930 27 +L 930 27 +L 930 27 +L 930 27 +L 930 27 +L 930 27 +L 930 27 +L 930 27 +L 930 27 +L 930 27 +L 930 27 +L 930 27 +L 930 27 +L 930 27 +L 930 27 +L 930 27 +L 930 27 +L 930 27 +L 930 27 +L 930 27 +L 930 27 +L 930 27 +L 930 27 +L 930 27 +L 930 27 +L 930 27 +L 930 27 +L 930 27 +L 931 27 +L 931 27 +L 931 27 +L 931 27 +L 931 27 +L 931 27 +L 931 26 +L 931 26 +L 931 26 +L 931 26 +L 931 26 +L 931 26 +L 931 26 +L 931 26 +L 931 26 +L 931 26 +L 931 26 +L 931 26 +L 931 26 +L 931 26 +L 931 26 +L 931 26 +L 931 26 +L 931 26 +L 931 26 +L 931 26 +L 931 26 +L 931 26 +L 931 26 +L 931 26 +L 931 26 +L 931 26 +L 931 26 +L 931 26 +L 931 26 +L 931 26 +L 931 26 +L 931 26 +L 931 26 +L 931 26 +L 931 26 +L 931 26 +L 931 26 +L 931 26 +L 931 26 +L 931 26 +L 931 26 +L 931 26 +L 931 26 +L 931 26 +L 931 26 +L 931 26 +L 931 26 +L 931 26 +L 931 26 +L 931 26 +L 931 26 +L 931 26 +L 931 26 +L 931 26 +L 931 26 +L 931 26 +L 931 26 +L 931 26 +L 931 26 +L 931 26 +L 932 26 +L 932 26 +L 932 26 +L 932 26 +L 932 26 +L 932 25 +L 932 25 +L 932 25 +L 932 25 +L 932 25 +L 932 25 +L 932 25 +L 932 25 +L 932 25 +L 932 25 +L 932 25 +L 932 25 +L 932 25 +L 932 25 +L 932 25 +L 932 25 +L 932 25 +L 932 25 +L 932 25 +L 932 25 +L 932 25 +L 932 25 +L 932 25 +L 932 25 +L 932 25 +L 932 25 +L 932 25 +L 932 25 +L 932 25 +L 932 25 +L 932 25 +L 932 25 +L 932 25 +L 932 25 +L 932 25 +L 932 25 +L 932 25 +L 932 25 +L 932 25 +L 932 25 +L 932 25 +L 932 25 +L 932 25 +L 932 25 +L 932 25 +L 932 25 +L 932 25 +L 932 25 +L 932 25 +L 932 25 +L 932 25 +L 932 25 +L 932 25 +L 932 25 +L 932 25 +L 932 25 +L 932 25 +L 932 25 +L 932 25 +L 932 25 +L 932 25 +L 932 25 +L 932 25 +L 932 25 +L 932 25 +L 932 24 +L 933 24 +L 933 24 +L 933 24 +L 933 24 +L 933 24 +L 933 24 +L 933 24 +L 933 24 +L 933 24 +L 933 24 +L 933 24 +L 933 24 +L 933 24 +L 933 24 +L 933 24 +L 933 24 +L 933 24 +L 933 24 +L 933 24 +L 933 24 +L 933 24 +L 933 24 +L 933 24 +L 933 24 +L 933 24 +L 933 24 +L 933 24 +L 933 24 +L 933 24 +L 933 24 +L 933 24 +L 933 24 +L 933 24 +L 933 24 +L 933 24 +L 933 24 +L 933 24 +L 933 24 +L 933 24 +L 933 24 +L 933 24 +L 933 24 +L 933 24 +L 933 24 +L 933 24 +L 933 24 +L 933 24 +L 933 24 +L 933 24 +L 933 24 +L 933 24 +L 933 24 +L 933 24 +L 933 24 +L 933 24 +L 933 24 +L 933 24 +L 934 24 +L 934 24 +L 934 24 +L 934 24 +L 934 24 +L 934 24 +L 934 23 +L 934 23 +L 934 23 +L 934 23 +L 934 23 +L 934 23 +L 934 23 +L 934 23 +L 934 23 +L 934 23 +L 934 23 +L 934 23 +L 934 23 +L 934 23 +L 934 23 +L 934 23 +L 934 23 +L 934 23 +L 934 23 +L 934 23 +L 934 23 +L 934 23 +L 934 23 +L 934 23 +L 934 23 +L 934 23 +L 934 23 +L 934 23 +L 934 23 +L 934 23 +L 934 23 +L 934 23 +L 934 23 +L 934 23 +L 934 23 +L 934 23 +L 934 23 +L 934 23 +L 934 23 +L 934 23 +L 934 23 +L 935 23 +L 935 23 +L 935 23 +L 935 23 +L 935 23 +L 935 23 +L 935 23 +L 935 23 +L 935 23 +L 935 23 +L 935 23 +L 935 23 +L 935 23 +L 935 23 +L 935 23 +L 935 23 +L 935 23 +L 935 23 +L 935 23 +L 935 23 +L 935 23 +L 935 23 +L 935 23 +L 935 23 +L 935 22 +L 935 22 +L 935 22 +L 935 22 +L 935 22 +L 935 22 +L 935 22 +L 935 22 +L 935 22 +L 935 22 +L 935 22 +L 935 22 +L 935 22 +L 935 22 +L 935 22 +L 935 22 +L 936 22 +L 936 22 +L 936 22 +L 936 22 +L 936 22 +L 936 22 +L 936 22 +L 936 22 +L 936 22 +L 936 22 +L 936 22 +L 936 22 +L 936 22 +L 936 22 +L 936 22 +L 936 22 +L 936 22 +L 936 22 +L 936 22 +L 936 22 +L 936 22 +L 936 22 +L 936 22 +L 936 22 +L 936 22 +L 936 22 +L 936 22 +L 937 22 +L 937 22 +L 937 22 +L 937 22 +L 937 22 +L 937 22 +L 937 22 +L 937 22 +L 937 22 +L 937 22 +L 937 22 +L 937 22 +L 937 22 +L 937 22 +L 937 22 +L 937 22 +L 937 22 +L 937 22 +L 937 22 +L 937 22 +L 937 22 +L 937 22 +L 937 21 +L 937 21 +L 937 21 +L 937 21 +L 937 21 +L 938 21 +L 938 21 +L 938 21 +L 938 21 +L 938 21 +L 938 21 +L 938 21 +L 938 21 +L 938 21 +L 938 21 +L 938 21 +L 938 21 +L 938 21 +L 938 21 +L 938 21 +L 938 21 +L 938 21 +L 938 21 +L 938 21 +L 938 21 +L 938 21 +L 938 21 +L 938 21 +L 938 21 +L 939 21 +L 939 21 +L 939 21 +L 939 21 +L 939 21 +L 939 21 +L 939 21 +L 939 21 +L 939 21 +L 939 21 +L 939 21 +L 939 21 +L 939 21 +L 939 21 +L 939 21 +L 939 21 +L 939 21 +L 939 21 +L 939 21 +L 939 21 +L 939 21 +L 939 21 +L 939 21 +L 939 21 +L 939 21 +L 939 21 +L 939 21 +L 939 21 +L 939 21 +L 939 21 +L 940 21 +L 940 21 +L 940 21 +L 940 21 +L 940 21 +L 940 20 +L 940 20 +L 940 20 +L 940 20 +L 940 20 +L 940 20 +L 940 20 +L 940 20 +L 940 20 +L 940 20 +L 940 20 +L 940 20 +L 940 20 +L 940 20 +L 940 20 +L 940 20 +L 940 20 +L 940 20 +L 940 20 +L 941 20 +L 941 20 +L 941 20 +L 941 20 +L 941 20 +L 941 20 +L 941 20 +L 941 20 +L 941 20 +L 941 20 +L 941 20 +L 941 20 +L 941 20 +L 942 20 +L 942 20 +L 942 20 +L 942 20 +L 942 20 +L 942 20 +L 942 20 +L 942 20 +L 942 20 +L 942 20 +L 942 20 +L 942 20 +L 942 20 +L 942 20 +L 943 20 +L 943 20 +L 943 20 +L 943 20 +L 943 20 +L 943 20 +L 943 20 +L 943 20 +L 943 20 +L 943 20 +L 943 20 +L 943 20 +L 943 20 +L 943 20 +L 943 20 +L 943 20 +L 943 20 +L 943 20 +L 943 20 +L 943 19 +L 943 19 +L 943 19 +L 943 19 +L 943 19 +L 943 19 +L 943 19 +L 943 19 +L 943 19 +L 943 19 +L 943 19 +L 943 19 +L 943 19 +L 943 19 +L 943 19 +L 943 19 +L 943 19 +L 943 19 +L 943 19 +L 944 19 +L 944 19 +L 944 19 +L 944 19 +L 944 19 +L 944 19 +L 944 19 +L 944 19 +L 944 19 +L 944 19 +L 944 19 +L 944 19 +L 944 19 +L 944 19 +L 944 19 +L 944 19 +L 944 19 +L 944 19 +L 944 19 +L 944 19 +L 944 19 +L 944 19 +L 944 19 +L 944 19 +L 944 19 +L 944 19 +L 945 19 +L 945 19 +L 945 19 +L 945 19 +L 945 19 +L 945 19 +L 945 19 +L 945 19 +L 945 19 +L 945 19 +L 945 19 +L 945 19 +L 945 19 +L 945 19 +L 945 19 +L 945 19 +L 945 19 +L 945 19 +L 945 19 +L 946 19 +L 946 18 +L 946 18 +L 946 18 +L 946 18 +L 946 18 +L 946 18 +L 946 18 +L 946 18 +L 946 18 +L 946 18 +L 946 18 +L 947 18 +L 947 18 +L 947 18 +L 947 18 +L 947 18 +L 947 18 +L 947 18 +L 947 18 +L 947 18 +L 947 18 +L 947 18 +L 947 18 +L 947 18 +L 947 18 +L 947 18 +L 947 18 +L 947 18 +L 947 18 +L 947 18 +L 947 18 +L 948 18 +L 948 18 +L 948 18 +L 948 18 +L 948 18 +L 948 18 +L 948 18 +L 948 18 +L 948 18 +L 948 18 +L 948 18 +L 948 18 +L 948 18 +L 948 18 +L 948 18 +L 948 18 +L 948 18 +L 948 18 +L 948 18 +L 948 18 +L 948 18 +L 948 18 +L 948 18 +L 948 18 +L 948 18 +L 948 18 +L 948 18 +L 948 18 +L 948 18 +L 948 18 +L 948 18 +L 948 18 +L 948 18 +L 948 18 +L 948 17 +L 948 17 +L 948 17 +L 948 17 +L 948 17 +L 949 17 +L 949 17 +L 949 17 +L 949 17 +L 949 17 +L 949 17 +L 949 17 +L 949 17 +L 949 17 +L 949 17 +L 949 17 +L 949 17 +L 949 17 +L 949 17 +L 949 17 +L 949 17 +L 949 17 +L 950 17 +L 950 17 +L 950 17 +L 950 17 +L 950 17 +L 950 17 +L 950 17 +L 950 17 +L 950 17 +L 950 17 +L 950 17 +L 950 17 +L 950 17 +L 950 17 +L 950 17 +L 950 17 +L 950 17" style="stroke-width:2;stroke:rgba(129,199,239,1.0);fill:none"/> \ No newline at end of file diff --git a/solution/0300-0399/0383.Ransom Note/README.md b/solution/0300-0399/0383.Ransom Note/README.md index e9ca1a0ff63b3..8ae87e69c7f8e 100644 --- a/solution/0300-0399/0383.Ransom Note/README.md +++ b/solution/0300-0399/0383.Ransom Note/README.md @@ -48,7 +48,13 @@ -用一个数组或字典 chars 存放 magazine 中每个字母出现的次数。遍历 ransomNote 中每个字母,判断 chars 是否包含即可。 +**方法一:哈希表或数组** + +我们可以用一个哈希表或长度为 $26$ 的数组 $cnt$ 记录字符串 `magazine` 中所有字符出现的次数。然后遍历字符串 `ransomNote`,对于其中的每个字符 $c$,我们将其从 $cnt$ 的次数减 $1$,如果减 $1$ 之后的次数小于 $0$,说明 $c$ 在 `magazine` 中出现的次数不够,因此无法构成 `ransomNote`,返回 $false$ 即可。 + +否则,遍历结束后,说明 `ransomNote` 中的每个字符都可以在 `magazine` 中找到对应的字符,因此返回 $true$。 + +时间复杂度 $O(m + n)$,空间复杂度 $O(C)$。其中 $m$ 和 $n$ 分别为字符串 `ransomNote` 和 `magazine` 的长度;而 $C$ 为字符集的大小,本题中 $C = 26$。 @@ -59,11 +65,11 @@ ```python class Solution: def canConstruct(self, ransomNote: str, magazine: str) -> bool: - counter = Counter(magazine) + cnt = Counter(magazine) for c in ransomNote: - if counter[c] <= 0: + cnt[c] -= 1 + if cnt[c] < 0: return False - counter[c] -= 1 return True ``` @@ -74,50 +80,34 @@ class Solution: ```java class Solution { public boolean canConstruct(String ransomNote, String magazine) { - int[] counter = new int[26]; - for (char c : magazine.toCharArray()) { - ++counter[c - 'a']; + int[] cnt = new int[26]; + for (int i = 0; i < magazine.length(); ++i) { + ++cnt[magazine.charAt(i) - 'a']; } - for (char c : ransomNote.toCharArray()) { - if (counter[c - 'a'] <= 0) { + for (int i = 0; i < ransomNote.length(); ++i) { + if (--cnt[ransomNote.charAt(i) - 'a'] < 0) { return false; } - --counter[c - 'a']; } return true; } } ``` -### **TypeScript** - -```ts -function canConstruct(ransomNote: string, magazine: string): boolean { - let counter = new Array(26).fill(0); - let base = 'a'.charCodeAt(0); - for (let s of magazine) { - ++counter[s.charCodeAt(0) - base]; - } - for (let s of ransomNote) { - let idx = s.charCodeAt(0) - base; - if (counter[idx] == 0) return false; - --counter[idx]; - } - return true; -} -``` - ### **C++** ```cpp class Solution { public: bool canConstruct(string ransomNote, string magazine) { - vector counter(26); - for (char c : magazine) ++counter[c - 'a']; - for (char c : ransomNote) { - if (counter[c - 'a'] <= 0) return false; - --counter[c - 'a']; + int cnt[26]{}; + for (char& c : magazine) { + ++cnt[c - 'a']; + } + for (char& c : ransomNote) { + if (--cnt[c - 'a'] < 0) { + return false; + } } return true; } @@ -128,18 +118,13 @@ public: ```go func canConstruct(ransomNote string, magazine string) bool { - rc := make([]int, 26) - for _, b := range ransomNote { - rc[b-'a']++ - } - - mc := make([]int, 26) - for _, b := range magazine { - mc[b-'a']++ + cnt := [26]int{} + for _, c := range magazine { + cnt[c-'a']++ } - - for i := 0; i < 26; i++ { - if rc[i] > mc[i] { + for _, c := range ransomNote { + cnt[c-'a']-- + if cnt[c-'a'] < 0 { return false } } @@ -147,6 +132,46 @@ func canConstruct(ransomNote string, magazine string) bool { } ``` +### **TypeScript** + +```ts +function canConstruct(ransomNote: string, magazine: string): boolean { + const cnt = new Array(26).fill(0); + for (const c of magazine) { + ++cnt[c.charCodeAt(0) - 97]; + } + for (const c of ransomNote) { + if (--cnt[c.charCodeAt(0) - 97] < 0) { + return false; + } + } + return true; +} +``` + +### **PHP** + +```php +class Solution { + /** + * @param String $ransomNote + * @param String $magazine + * @return Boolean + */ + function canConstruct($ransomNote, $magazine) { + $arrM = str_split($magazine); + for ($i = 0; $i < strlen($magazine); $i++) { + $hashtable[$arrM[$i]] += 1; + } + for ($j = 0; $j < strlen($ransomNote); $j++) { + if (!isset($hashtable[$ransomNote[$j]]) || $hashtable[$ransomNote[$j]] == 0) return false; + else $hashtable[$ransomNote[$j]] -= 1; + } + return true; + } +} +``` + ### **...** ``` diff --git a/solution/0300-0399/0383.Ransom Note/README_EN.md b/solution/0300-0399/0383.Ransom Note/README_EN.md index 3c22fee9c46da..e582158c5b902 100644 --- a/solution/0300-0399/0383.Ransom Note/README_EN.md +++ b/solution/0300-0399/0383.Ransom Note/README_EN.md @@ -36,11 +36,11 @@ ```python class Solution: def canConstruct(self, ransomNote: str, magazine: str) -> bool: - counter = Counter(magazine) + cnt = Counter(magazine) for c in ransomNote: - if counter[c] <= 0: + cnt[c] -= 1 + if cnt[c] < 0: return False - counter[c] -= 1 return True ``` @@ -49,50 +49,34 @@ class Solution: ```java class Solution { public boolean canConstruct(String ransomNote, String magazine) { - int[] counter = new int[26]; - for (char c : magazine.toCharArray()) { - ++counter[c - 'a']; + int[] cnt = new int[26]; + for (int i = 0; i < magazine.length(); ++i) { + ++cnt[magazine.charAt(i) - 'a']; } - for (char c : ransomNote.toCharArray()) { - if (counter[c - 'a'] <= 0) { + for (int i = 0; i < ransomNote.length(); ++i) { + if (--cnt[ransomNote.charAt(i) - 'a'] < 0) { return false; } - --counter[c - 'a']; } return true; } } ``` -### **TypeScript** - -```ts -function canConstruct(ransomNote: string, magazine: string): boolean { - let counter = new Array(26).fill(0); - let base = 'a'.charCodeAt(0); - for (let s of magazine) { - ++counter[s.charCodeAt(0) - base]; - } - for (let s of ransomNote) { - let idx = s.charCodeAt(0) - base; - if (counter[idx] == 0) return false; - --counter[idx]; - } - return true; -} -``` - ### **C++** ```cpp class Solution { public: bool canConstruct(string ransomNote, string magazine) { - vector counter(26); - for (char c : magazine) ++counter[c - 'a']; - for (char c : ransomNote) { - if (counter[c - 'a'] <= 0) return false; - --counter[c - 'a']; + int cnt[26]{}; + for (char& c : magazine) { + ++cnt[c - 'a']; + } + for (char& c : ransomNote) { + if (--cnt[c - 'a'] < 0) { + return false; + } } return true; } @@ -103,18 +87,13 @@ public: ```go func canConstruct(ransomNote string, magazine string) bool { - rc := make([]int, 26) - for _, b := range ransomNote { - rc[b-'a']++ + cnt := [26]int{} + for _, c := range magazine { + cnt[c-'a']++ } - - mc := make([]int, 26) - for _, b := range magazine { - mc[b-'a']++ - } - - for i := 0; i < 26; i++ { - if rc[i] > mc[i] { + for _, c := range ransomNote { + cnt[c-'a']-- + if cnt[c-'a'] < 0 { return false } } @@ -122,6 +101,46 @@ func canConstruct(ransomNote string, magazine string) bool { } ``` +### **TypeScript** + +```ts +function canConstruct(ransomNote: string, magazine: string): boolean { + const cnt = new Array(26).fill(0); + for (const c of magazine) { + ++cnt[c.charCodeAt(0) - 97]; + } + for (const c of ransomNote) { + if (--cnt[c.charCodeAt(0) - 97] < 0) { + return false; + } + } + return true; +} +``` + +### **PHP** + +```php +class Solution { + /** + * @param String $ransomNote + * @param String $magazine + * @return Boolean + */ + function canConstruct($ransomNote, $magazine) { + $arrM = str_split($magazine); + for ($i = 0; $i < strlen($magazine); $i++) { + $hashtable[$arrM[$i]] += 1; + } + for ($j = 0; $j < strlen($ransomNote); $j++) { + if (!isset($hashtable[$ransomNote[$j]]) || $hashtable[$ransomNote[$j]] == 0) return false; + else $hashtable[$ransomNote[$j]] -= 1; + } + return true; + } +} +``` + ### **...** ``` diff --git a/solution/0300-0399/0383.Ransom Note/Solution.cpp b/solution/0300-0399/0383.Ransom Note/Solution.cpp index fb75586030ee1..1fe31e26b1b36 100644 --- a/solution/0300-0399/0383.Ransom Note/Solution.cpp +++ b/solution/0300-0399/0383.Ransom Note/Solution.cpp @@ -1,11 +1,14 @@ class Solution { public: bool canConstruct(string ransomNote, string magazine) { - vector counter(26); - for (char c : magazine) ++counter[c - 'a']; - for (char c : ransomNote) { - if (counter[c - 'a'] <= 0) return false; - --counter[c - 'a']; + int cnt[26]{}; + for (char& c : magazine) { + ++cnt[c - 'a']; + } + for (char& c : ransomNote) { + if (--cnt[c - 'a'] < 0) { + return false; + } } return true; } diff --git a/solution/0300-0399/0383.Ransom Note/Solution.go b/solution/0300-0399/0383.Ransom Note/Solution.go index 2ca7338c82e6d..5480bad918f69 100644 --- a/solution/0300-0399/0383.Ransom Note/Solution.go +++ b/solution/0300-0399/0383.Ransom Note/Solution.go @@ -1,18 +1,13 @@ func canConstruct(ransomNote string, magazine string) bool { - rc := make([]int, 26) - for _, b := range ransomNote { - rc[b-'a']++ + cnt := [26]int{} + for _, c := range magazine { + cnt[c-'a']++ } - - mc := make([]int, 26) - for _, b := range magazine { - mc[b-'a']++ - } - - for i := 0; i < 26; i++ { - if rc[i] > mc[i] { + for _, c := range ransomNote { + cnt[c-'a']-- + if cnt[c-'a'] < 0 { return false } } return true -} +} \ No newline at end of file diff --git a/solution/0300-0399/0383.Ransom Note/Solution.java b/solution/0300-0399/0383.Ransom Note/Solution.java index 49634a66278cc..77e24ef05b333 100644 --- a/solution/0300-0399/0383.Ransom Note/Solution.java +++ b/solution/0300-0399/0383.Ransom Note/Solution.java @@ -1,14 +1,13 @@ class Solution { public boolean canConstruct(String ransomNote, String magazine) { - int[] counter = new int[26]; - for (char c : magazine.toCharArray()) { - ++counter[c - 'a']; + int[] cnt = new int[26]; + for (int i = 0; i < magazine.length(); ++i) { + ++cnt[magazine.charAt(i) - 'a']; } - for (char c : ransomNote.toCharArray()) { - if (counter[c - 'a'] <= 0) { + for (int i = 0; i < ransomNote.length(); ++i) { + if (--cnt[ransomNote.charAt(i) - 'a'] < 0) { return false; } - --counter[c - 'a']; } return true; } diff --git a/solution/0300-0399/0383.Ransom Note/Solution.php b/solution/0300-0399/0383.Ransom Note/Solution.php new file mode 100644 index 0000000000000..cca007e615ca9 --- /dev/null +++ b/solution/0300-0399/0383.Ransom Note/Solution.php @@ -0,0 +1,18 @@ +class Solution { + /** + * @param String $ransomNote + * @param String $magazine + * @return Boolean + */ + function canConstruct($ransomNote, $magazine) { + $arrM = str_split($magazine); + for ($i = 0; $i < strlen($magazine); $i++) { + $hashtable[$arrM[$i]] += 1; + } + for ($j = 0; $j < strlen($ransomNote); $j++) { + if (!isset($hashtable[$ransomNote[$j]]) || $hashtable[$ransomNote[$j]] == 0) return false; + else $hashtable[$ransomNote[$j]] -= 1; + } + return true; + } +} \ No newline at end of file diff --git a/solution/0300-0399/0383.Ransom Note/Solution.py b/solution/0300-0399/0383.Ransom Note/Solution.py index c8b39da8dc9e1..108d6a5e80a08 100644 --- a/solution/0300-0399/0383.Ransom Note/Solution.py +++ b/solution/0300-0399/0383.Ransom Note/Solution.py @@ -1,8 +1,8 @@ class Solution: def canConstruct(self, ransomNote: str, magazine: str) -> bool: - counter = Counter(magazine) + cnt = Counter(magazine) for c in ransomNote: - if counter[c] <= 0: + cnt[c] -= 1 + if cnt[c] < 0: return False - counter[c] -= 1 return True diff --git a/solution/0300-0399/0383.Ransom Note/Solution.ts b/solution/0300-0399/0383.Ransom Note/Solution.ts index 6115b6b15dd71..66a65595b63e0 100644 --- a/solution/0300-0399/0383.Ransom Note/Solution.ts +++ b/solution/0300-0399/0383.Ransom Note/Solution.ts @@ -1,13 +1,12 @@ function canConstruct(ransomNote: string, magazine: string): boolean { - let counter = new Array(26).fill(0); - let base = 'a'.charCodeAt(0); - for (let s of magazine) { - ++counter[s.charCodeAt(0) - base]; + const cnt = new Array(26).fill(0); + for (const c of magazine) { + ++cnt[c.charCodeAt(0) - 97]; } - for (let s of ransomNote) { - let idx = s.charCodeAt(0) - base; - if (counter[idx] == 0) return false; - --counter[idx]; + for (const c of ransomNote) { + if (--cnt[c.charCodeAt(0) - 97] < 0) { + return false; + } } return true; } diff --git a/solution/0700-0799/0744.Find Smallest Letter Greater Than Target/README.md b/solution/0700-0799/0744.Find Smallest Letter Greater Than Target/README.md index 974a4414f3a81..c7c36973527a1 100644 --- a/solution/0700-0799/0744.Find Smallest Letter Greater Than Target/README.md +++ b/solution/0700-0799/0744.Find Smallest Letter Greater Than Target/README.md @@ -201,6 +201,29 @@ impl Solution { } ``` +### **PHP** + +```php +class Solution { + /** + * @param String[] $letters + * @param String $target + * @return String + */ + function nextGreatestLetter($letters, $target) { + $left = 0; + $right = count($letters); + while ($left <= $right) { + $mid = floor($left + ($right - $left) / 2); + if ($letters[$mid] > $target) $right = $mid - 1; + else $left = $mid + 1; + } + if ($left >= count($letters)) return $letters[0]; + else return $letters[$left]; + } +} +``` + ### **...** ``` diff --git a/solution/0700-0799/0744.Find Smallest Letter Greater Than Target/README_EN.md b/solution/0700-0799/0744.Find Smallest Letter Greater Than Target/README_EN.md index 5e48e0f5e6a7a..8255a3cbbf53c 100644 --- a/solution/0700-0799/0744.Find Smallest Letter Greater Than Target/README_EN.md +++ b/solution/0700-0799/0744.Find Smallest Letter Greater Than Target/README_EN.md @@ -167,6 +167,29 @@ impl Solution { } ``` +### **PHP** + +```php +class Solution { + /** + * @param String[] $letters + * @param String $target + * @return String + */ + function nextGreatestLetter($letters, $target) { + $left = 0; + $right = count($letters); + while ($left <= $right) { + $mid = floor($left + ($right - $left) / 2); + if ($letters[$mid] > $target) $right = $mid - 1; + else $left = $mid + 1; + } + if ($left >= count($letters)) return $letters[0]; + else return $letters[$left]; + } +} +``` + ### **...** ``` diff --git a/solution/0700-0799/0744.Find Smallest Letter Greater Than Target/Solution.php b/solution/0700-0799/0744.Find Smallest Letter Greater Than Target/Solution.php new file mode 100644 index 0000000000000..88134ca3f7158 --- /dev/null +++ b/solution/0700-0799/0744.Find Smallest Letter Greater Than Target/Solution.php @@ -0,0 +1,18 @@ +class Solution { + /** + * @param String[] $letters + * @param String $target + * @return String + */ + function nextGreatestLetter($letters, $target) { + $left = 0; + $right = count($letters); + while ($left <= $right) { + $mid = floor($left + ($right - $left) / 2); + if ($letters[$mid] > $target) $right = $mid - 1; + else $left = $mid + 1; + } + if ($left >= count($letters)) return $letters[0]; + else return $letters[$left]; + } +} \ No newline at end of file