-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathsearch.xml
3480 lines (3463 loc) · 484 KB
/
search.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<?xml version="1.0" encoding="utf-8"?>
<search>
<entry>
<title>APCS 2024 1 月場</title>
<url>/APCS-2024-01/</url>
<content><![CDATA[<h1 id="說明"><a class="markdownIt-Anchor" href="#說明"></a> 說明</h1>
<p>第 4 題還在研究~</p>
<h2 id="1-遊戲選角"><a class="markdownIt-Anchor" href="#1-遊戲選角"></a> 1. 遊戲選角</h2>
<details class="note default"><summary><p>展開程式碼</p>
</summary>
<figure class="highlight cpp"><table><tr><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string"><bits/stdc++.h></span></span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> ouo ios_base::sync_with_stdio(false), cin.tie(0)</span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> ll long long</span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> db double</span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> std;</span><br><span class="line"></span><br><span class="line"><span class="type">int</span> n;</span><br><span class="line"></span><br><span class="line"><span class="keyword">struct</span> <span class="title class_">p</span> {</span><br><span class="line"> <span class="type">int</span> a;</span><br><span class="line"> <span class="type">int</span> d;</span><br><span class="line"> <span class="type">int</span> ability;</span><br><span class="line">};</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">bool</span> <span class="title">cmp</span><span class="params">(p a, p b)</span> </span>{</span><br><span class="line"> <span class="keyword">return</span> a.ability > b.ability;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span> </span>{</span><br><span class="line"> ouo;</span><br><span class="line"></span><br><span class="line"> cin >> n;</span><br><span class="line"> p player[n];</span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i < n; i++) {</span><br><span class="line"> cin >> player[i].a >> player[i].d;</span><br><span class="line"> player[i].ability = player[i].a * player[i].a + player[i].d * player[i].d;</span><br><span class="line"> }</span><br><span class="line"> <span class="built_in">sort</span>(player, player + n, cmp);</span><br><span class="line"> cout << player[<span class="number">1</span>].a << <span class="string">" "</span> << player[<span class="number">1</span>].d;</span><br><span class="line"></span><br><span class="line"> <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
</details>
<h2 id="2-蜜蜂觀察"><a class="markdownIt-Anchor" href="#2-蜜蜂觀察"></a> 2. 蜜蜂觀察</h2>
<details class="note default"><summary><p>展開程式碼</p>
</summary>
<figure class="highlight cpp"><table><tr><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string"><bits/stdc++.h></span></span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> ouo ios_base::sync_with_stdio(false), cin.tie(0)</span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> ll long long</span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> db double</span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> std;</span><br><span class="line"></span><br><span class="line"><span class="type">int</span> m, n, k;</span><br><span class="line"><span class="type">int</span> amount = <span class="number">0</span>;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span> </span>{</span><br><span class="line"> cin >> m >> n >> k;</span><br><span class="line"></span><br><span class="line"> string arr[m];</span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i < m; i++) {</span><br><span class="line"> cin >> arr[i];</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> <span class="type">int</span> p_x = m - <span class="number">1</span>, p_y = <span class="number">0</span>;</span><br><span class="line"></span><br><span class="line"> <span class="type">bool</span> alpha[<span class="number">2</span>][<span class="number">26</span>] = {<span class="literal">false</span>};</span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> t = <span class="number">0</span>; t < k; t++) {</span><br><span class="line"> <span class="type">int</span> d = <span class="number">-1</span>;</span><br><span class="line"> cin >> d;</span><br><span class="line"> <span class="type">int</span> d_x = <span class="number">0</span>, d_y = <span class="number">0</span>;</span><br><span class="line"> <span class="keyword">switch</span> (d) {</span><br><span class="line"> <span class="keyword">case</span> <span class="number">0</span>:</span><br><span class="line"> d_x -= <span class="number">1</span>;</span><br><span class="line"> <span class="keyword">break</span>;</span><br><span class="line"> <span class="keyword">case</span> <span class="number">1</span>:</span><br><span class="line"> d_y += <span class="number">1</span>;</span><br><span class="line"> <span class="keyword">break</span>;</span><br><span class="line"> <span class="keyword">case</span> <span class="number">2</span>:</span><br><span class="line"> d_x += <span class="number">1</span>;</span><br><span class="line"> d_y += <span class="number">1</span>;</span><br><span class="line"> <span class="keyword">break</span>;</span><br><span class="line"> <span class="keyword">case</span> <span class="number">3</span>:</span><br><span class="line"> d_x += <span class="number">1</span>;</span><br><span class="line"> <span class="keyword">break</span>;</span><br><span class="line"> <span class="keyword">case</span> <span class="number">4</span>:</span><br><span class="line"> d_y -= <span class="number">1</span>;</span><br><span class="line"> <span class="keyword">break</span>;</span><br><span class="line"> <span class="keyword">case</span> <span class="number">5</span>:</span><br><span class="line"> d_x -= <span class="number">1</span>;</span><br><span class="line"> d_y -= <span class="number">1</span>;</span><br><span class="line"> <span class="keyword">break</span>;</span><br><span class="line"> <span class="keyword">default</span>:</span><br><span class="line"> <span class="keyword">break</span>;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">if</span> (p_x + d_x < m && p_x + d_x >= <span class="number">0</span> && p_y + d_y < n && p_y + d_y >= <span class="number">0</span>) {</span><br><span class="line"> p_x += d_x;</span><br><span class="line"> p_y += d_y;</span><br><span class="line"> }</span><br><span class="line"> cout << arr[p_x][p_y];</span><br><span class="line"></span><br><span class="line"> <span class="keyword">if</span> (arr[p_x][p_y] >= <span class="string">'a'</span> && arr[p_x][p_y] <= <span class="string">'z'</span>) {</span><br><span class="line"> alpha[<span class="number">0</span>][arr[p_x][p_y] - <span class="string">'a'</span>] = <span class="literal">true</span>;</span><br><span class="line"> } <span class="keyword">else</span> <span class="keyword">if</span> (arr[p_x][p_y] >= <span class="string">'A'</span> && arr[p_x][p_y] <= <span class="string">'Z'</span>) {</span><br><span class="line"> alpha[<span class="number">1</span>][arr[p_x][p_y] - <span class="string">'A'</span>] = <span class="literal">true</span>;</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i < <span class="number">2</span>; i++) {</span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> j = <span class="number">0</span>; j < <span class="number">26</span>; j++) {</span><br><span class="line"> <span class="keyword">if</span> (alpha[i][j] == <span class="literal">true</span>) amount++;</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> cout << <span class="string">"\n"</span></span><br><span class="line"> << amount;</span><br><span class="line"> <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
</details>
<h2 id="3-邏輯電路"><a class="markdownIt-Anchor" href="#3-邏輯電路"></a> 3. 邏輯電路</h2>
<p>參考 <span class="exturl" data-url="aHR0cHM6Ly9oYWNrbWQuaW8vQFlvdXRvbmcwODI2L3pqX205OTM=">@Youtong0826<i class="fa fa-external-link-alt"></i></span> 的思路,原本只有做 DFS 的部分但會超時,所以改成用 DP 紀錄已經跑過的邏輯閘。</p>
<details class="note default"><summary><p>展開程式碼</p>
</summary>
<figure class="highlight cpp"><table><tr><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string"><bits/stdc++.h></span></span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> ouo ios_base::sync_with_stdio(false), cin.tie(0)</span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> ll long long</span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> db double</span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> std;</span><br><span class="line"></span><br><span class="line"><span class="keyword">struct</span> <span class="title class_">node</span> {</span><br><span class="line"> <span class="type">int</span> type; <span class="comment">// 1: AND, 2: OR, 3: XOR, 4: NOT</span></span><br><span class="line"> <span class="type">int</span> result;</span><br><span class="line">};</span><br><span class="line"></span><br><span class="line"><span class="type">int</span> p, q, r, m;</span><br><span class="line">vector<node> vc;</span><br><span class="line">vector<<span class="type">bool</span>> visited;</span><br><span class="line">vector<<span class="type">int</span>> ans;</span><br><span class="line">vector<vector<<span class="type">int</span>>> g;</span><br><span class="line">vector<pair<<span class="type">int</span>, <span class="type">int</span>>> dp;</span><br><span class="line"></span><br><span class="line"><span class="comment">// pair<int, int> = {result, delay}</span></span><br><span class="line"><span class="function">pair<<span class="type">int</span>, <span class="type">int</span>> <span class="title">dfs</span><span class="params">(<span class="type">int</span> idx)</span> </span>{</span><br><span class="line"> <span class="keyword">if</span> (idx <= p) {</span><br><span class="line"> visited[idx] = <span class="literal">true</span>;</span><br><span class="line"> <span class="keyword">return</span> dp[idx] = {vc[idx].result, <span class="number">0</span>};</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> <span class="comment">// 輸出節點必只有一個輸入端</span></span><br><span class="line"> <span class="keyword">if</span> (idx > p + q && idx <= p + q + r) <span class="keyword">return</span> <span class="built_in">dfs</span>(g[idx][<span class="number">0</span>]);</span><br><span class="line"></span><br><span class="line"> <span class="keyword">if</span> (visited[idx]) <span class="keyword">return</span> dp[idx];</span><br><span class="line"></span><br><span class="line"> <span class="comment">// do</span></span><br><span class="line"> visited[idx] = <span class="literal">true</span>;</span><br><span class="line"> <span class="keyword">auto</span> a = <span class="built_in">dfs</span>(g[idx][<span class="number">0</span>]); <span class="comment">// 先取得第一個輸入端</span></span><br><span class="line"></span><br><span class="line"> <span class="keyword">if</span> (vc[idx].type == <span class="number">4</span>) <span class="keyword">return</span> dp[idx] = {!a.first, a.second + <span class="number">1</span>};</span><br><span class="line"></span><br><span class="line"> <span class="keyword">auto</span> b = <span class="built_in">dfs</span>(g[idx][<span class="number">1</span>]);</span><br><span class="line"></span><br><span class="line"> <span class="keyword">if</span> (vc[idx].type == <span class="number">1</span>) <span class="keyword">return</span> dp[idx] = {(a.first && b.first), <span class="built_in">max</span>(a.second, b.second) + <span class="number">1</span>};</span><br><span class="line"> <span class="keyword">if</span> (vc[idx].type == <span class="number">2</span>) <span class="keyword">return</span> dp[idx] = {(a.first || b.first), <span class="built_in">max</span>(a.second, b.second) + <span class="number">1</span>};</span><br><span class="line"> <span class="keyword">if</span> (vc[idx].type == <span class="number">3</span>) <span class="keyword">return</span> dp[idx] = {(a.first != b.first), <span class="built_in">max</span>(a.second, b.second) + <span class="number">1</span>};</span><br><span class="line"> <span class="keyword">return</span> {vc[idx].result, <span class="number">0</span>};</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span> </span>{</span><br><span class="line"> ouo;</span><br><span class="line"> cin >> p >> q >> r >> m;</span><br><span class="line"></span><br><span class="line"> <span class="comment">// init</span></span><br><span class="line"> vc.<span class="built_in">resize</span>(p + q + r + <span class="number">1</span>);</span><br><span class="line"> visited.<span class="built_in">assign</span>(p + q + r + <span class="number">1</span>, <span class="literal">false</span>);</span><br><span class="line"> g.<span class="built_in">assign</span>(p + q + r + <span class="number">1</span>, {});</span><br><span class="line"> dp.<span class="built_in">resize</span>(p + q + r + <span class="number">1</span>);</span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">1</span>; i <= p + q; i++) {</span><br><span class="line"> vc[i].result = <span class="number">0</span>;</span><br><span class="line"> vc[i].type = <span class="number">-1</span>;</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> <span class="comment">// in</span></span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">1</span>; i <= p; i++) {</span><br><span class="line"> cin >> vc[i].result;</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> <span class="comment">// logic</span></span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">1</span>; i <= q; i++) {</span><br><span class="line"> cin >> vc[p + i].type;</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> <span class="comment">// graph</span></span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">1</span>; i <= m; i++) {</span><br><span class="line"> <span class="type">int</span> a, b;</span><br><span class="line"> cin >> a >> b;</span><br><span class="line"> g[b].<span class="built_in">push_back</span>(a);</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> <span class="type">int</span> delay = <span class="number">-1</span>;</span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> i = p + q + <span class="number">1</span>; i <= p + q + r; i++) {</span><br><span class="line"> <span class="keyword">auto</span> f = <span class="built_in">dfs</span>(i);</span><br><span class="line"> ans.<span class="built_in">push_back</span>(f.first);</span><br><span class="line"> delay = <span class="built_in">max</span>(delay, f.second);</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> cout << delay << <span class="string">"\n"</span>;</span><br><span class="line"> <span class="keyword">for</span> (<span class="keyword">auto</span> i : ans) cout << i << <span class="string">" "</span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
</details>
]]></content>
<categories>
<category>APCS</category>
</categories>
<tags>
<tag>APCS</tag>
</tags>
</entry>
<entry>
<title>【筆記】APCS 2022 年 6 月場</title>
<url>/APCS-2022-01/</url>
<content><![CDATA[<p>這是我第一次去考 APCS(誰叫你之前都忘記報),當天考觀念時肚子真的痛得要命,直到中午才去宣洩…我的考場在台北大學三峽校區,令我意外的是男女比沒有到很重,但是大佬倒是挺多的。考實作題時,不知道是不是緊張,就是一直在 debug…最後是寫到第三題寫了一點就結束了。我那天超孤單😢,我朋友給我請假…說他抽考沒讀,我也沒讀啊🤬。反正最後考了 4 / 3 還蠻理想的。</p>
<h2 id="數字遊戲易"><a class="markdownIt-Anchor" href="#數字遊戲易"></a> 數字遊戲(易)</h2>
<p>ZJ 連結:<span class="exturl" data-url="aHR0cHM6Ly96ZXJvanVkZ2UudHcvU2hvd1Byb2JsZW0/cHJvYmxlbWlkPWkzOTk=">https://zerojudge.tw/ShowProblem?problemid=i399<i class="fa fa-external-link-alt"></i></span></p>
<p>輸入:3 個 1 ~ 9 的數字</p>
<p>輸出:先輸出數值出現最多的次數,再輸出三個數,且去除重複,由大到小。</p>
<p>想法:既要去掉重複又要排序,我的第一想法就是使用 set。set 是一個容器,它具有資料的唯一性,也就是不可重複,且容器內也會排序,跟 map 一樣。第一筆輸出我會用 4 - set 長度,這樣恰好是重複的個數,再用反向迭代器輸出 set 容器即可。</p>
<p>實作:</p>
<figure class="highlight cpp"><table><tr><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string"><iostream></span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string"><set></span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> std;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span> </span>{</span><br><span class="line"> ios_base::<span class="built_in">sync_with_stdio</span>(<span class="literal">false</span>);</span><br><span class="line"> cin.<span class="built_in">tie</span>(<span class="number">0</span>);</span><br><span class="line"></span><br><span class="line"> <span class="type">int</span> data[<span class="number">3</span>];</span><br><span class="line"> cin >> data[<span class="number">0</span>] >> data[<span class="number">1</span>] >> data[<span class="number">2</span>];</span><br><span class="line"> <span class="function">set<<span class="type">int</span>> <span class="title">myset</span><span class="params">(data, data + <span class="number">3</span>)</span></span>;</span><br><span class="line"></span><br><span class="line"> cout << <span class="number">4</span> - myset.<span class="built_in">size</span>();</span><br><span class="line"> <span class="keyword">for</span> (<span class="keyword">auto</span> it = myset.<span class="built_in">rbegin</span>(); it != myset.<span class="built_in">rend</span>(); ++it) {</span><br><span class="line"> cout << <span class="string">" "</span> << *it;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<h2 id="字串解碼中"><a class="markdownIt-Anchor" href="#字串解碼中"></a> 字串解碼(中)</h2>
<p>想法:就…純粹的暴力解吧…,還有注意題目需求,這題要你解密,不是加密(我朋友不小心…)</p>
<p>實作:未更新(懶)</p>
]]></content>
<tags>
<tag>APCS</tag>
<tag>筆記</tag>
</tags>
</entry>
<entry>
<title>TOI 練習賽 202404 新手組</title>
<url>/TOIP-202404-beginner/</url>
<content><![CDATA[<h1 id="說明"><a class="markdownIt-Anchor" href="#說明"></a> 說明</h1>
<p>這次 TOIP 只涉及到一維陣列,暴力解就行了。</p>
<h1 id="解題"><a class="markdownIt-Anchor" href="#解題"></a> 解題</h1>
<h2 id="1-電影院cinema"><a class="markdownIt-Anchor" href="#1-電影院cinema"></a> 1. 電影院(Cinema)</h2>
<details class="note default"><summary><p>展開程式碼</p>
</summary>
<figure class="highlight cpp"><table><tr><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string"><bits/stdc++.h></span></span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> ouo ios_base::sync_with_stdio(false), cin.tie(0)</span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> ll long long</span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> db double</span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> std;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span> </span>{</span><br><span class="line"> <span class="type">int</span> n;</span><br><span class="line"> cin >> n;</span><br><span class="line"> <span class="type">int</span> arr[n];</span><br><span class="line"> <span class="type">int</span> hr, min;</span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i < n; i++) {</span><br><span class="line"> cin >> hr >> min;</span><br><span class="line"> arr[i] = hr * <span class="number">60</span> + min;</span><br><span class="line"> }</span><br><span class="line"> <span class="built_in">sort</span>(arr, arr + n);</span><br><span class="line"></span><br><span class="line"> cin >> hr >> min;</span><br><span class="line"> <span class="type">int</span> now = hr * <span class="number">60</span> + min;</span><br><span class="line"></span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i < n; i++) {</span><br><span class="line"> <span class="keyword">if</span> (arr[i] >= now + <span class="number">20</span>) {</span><br><span class="line"> cout << ((arr[i] / <span class="number">60</span> / <span class="number">10</span> == <span class="number">0</span>) ? <span class="string">"0"</span> : <span class="string">""</span>) </span><br><span class="line"> << arr[i] / <span class="number">60</span> << <span class="string">" "</span> </span><br><span class="line"> << ((arr[i] % <span class="number">60</span> / <span class="number">10</span> == <span class="number">0</span>) ? <span class="string">"0"</span> : <span class="string">""</span>)</span><br><span class="line"> << arr[i] % <span class="number">60</span> << <span class="string">"\n"</span>;</span><br><span class="line"> <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> cout << <span class="string">"Too Late\n"</span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
</details>
<h2 id="2-撲克poker"><a class="markdownIt-Anchor" href="#2-撲克poker"></a> 2. 撲克(Poker)</h2>
<details class="note default"><summary><p>展開程式碼</p>
</summary>
<figure class="highlight cpp"><table><tr><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string"><bits/stdc++.h></span></span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> ouo ios_base::sync_with_stdio(false), cin.tie(0)</span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> ll long long</span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> db double</span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> std;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span> </span>{</span><br><span class="line"> <span class="type">int</span> n, mx = <span class="number">-1</span>;</span><br><span class="line"> cin >> n;</span><br><span class="line"> <span class="type">int</span> arr[<span class="number">52</span> + <span class="number">1</span>] = {<span class="number">0</span>};</span><br><span class="line"></span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i < n; i++) {</span><br><span class="line"> <span class="type">int</span> tmp;</span><br><span class="line"> cin >> tmp;</span><br><span class="line"> arr[tmp]++;</span><br><span class="line"> mx = <span class="built_in">max</span>(mx, arr[tmp]);</span><br><span class="line"> }</span><br><span class="line"> <span class="type">int</span> mn = INT_MAX;</span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">1</span>; i <= <span class="number">52</span>; i++) mn = <span class="built_in">min</span>(mn, arr[i]);</span><br><span class="line"></span><br><span class="line"> cout << mn << <span class="string">" "</span> << (mx - mn) * <span class="number">52</span> - (n - mn * <span class="number">52</span>);</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
</details>
<h2 id="3-熱門商品commodity"><a class="markdownIt-Anchor" href="#3-熱門商品commodity"></a> 3. 熱門商品(Commodity)</h2>
<details class="note default"><summary><p>展開程式碼</p>
</summary>
<figure class="highlight cpp"><table><tr><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string"><bits/stdc++.h></span></span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> ouo ios_base::sync_with_stdio(false), cin.tie(0)</span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> ll long long</span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> db double</span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> std;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span> </span>{</span><br><span class="line"> <span class="type">int</span> k, n;</span><br><span class="line"> cin >> k >> n;</span><br><span class="line"> <span class="type">int</span> arr[k];</span><br><span class="line"> <span class="type">int</span> goods[<span class="number">1005</span>] = {<span class="number">0</span>};</span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i < k; i++) {</span><br><span class="line"> cin >> arr[i];</span><br><span class="line"> goods[arr[i]]++;</span><br><span class="line"> }</span><br><span class="line"> <span class="type">int</span> mx = <span class="number">0</span>, favorite = <span class="number">-1</span>;</span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i < k; i++) {</span><br><span class="line"> <span class="keyword">if</span> (goods[arr[i]] > mx) {</span><br><span class="line"> mx = goods[arr[i]];</span><br><span class="line"> favorite = arr[i];</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> <span class="type">int</span> shop[n];</span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i < n; i++) cin >> shop[i];</span><br><span class="line"></span><br><span class="line"> <span class="type">int</span> mn = INT_MAX, flag = <span class="number">-1</span>;</span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i < n; i++) {</span><br><span class="line"> <span class="type">int</span> val = <span class="number">0</span>;</span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> q = <span class="number">0</span>; q < shop[i]; q++) {</span><br><span class="line"> <span class="type">int</span> quetion;</span><br><span class="line"> cin >> quetion;</span><br><span class="line"> val += goods[quetion];</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">if</span> (val < mn) {</span><br><span class="line"> mn = val;</span><br><span class="line"> flag = i;</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> <span class="comment">// ans</span></span><br><span class="line"> cout << favorite << <span class="string">" "</span> << flag + <span class="number">1</span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
</details>
]]></content>
<categories>
<category>TOIP</category>
</categories>
<tags>
<tag>TOI</tag>
<tag>TOIP</tag>
<tag>新手組</tag>
</tags>
</entry>
<entry>
<title>TOI 練習賽 202404 潛力組</title>
<url>/TOIP-202404-pro/</url>
<content><![CDATA[<h2 id="說明"><a class="markdownIt-Anchor" href="#說明"></a> 說明</h2>
<p>這次 TOIP 第一題考到了<a href="https://huangmayor0905.github.io/cs/algo/differential-evolution/">差分</a>的概念,並運用在二維陣列裡。第二、三題都在考 DP 的運用。</p>
<span id="more"></span>
<h2 id="解題"><a class="markdownIt-Anchor" href="#解題"></a> 解題</h2>
<h3 id="1-降雨量統計rainfall"><a class="markdownIt-Anchor" href="#1-降雨量統計rainfall"></a> 1. 降雨量統計(Rainfall)</h3>
<details class="note default"><summary><p>展開程式碼</p>
</summary>
<figure class="highlight cpp"><table><tr><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string"><bits/stdc++.h></span></span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> ouo ios_base::sync_with_stdio(false), cin.tie(0)</span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> ll long long</span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> db double</span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> std;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span> </span>{</span><br><span class="line"> ouo;</span><br><span class="line"> <span class="type">int</span> r, c;</span><br><span class="line"> cin >> r >> c;</span><br><span class="line"> <span class="type">int</span> g[r + <span class="number">1</span>][c + <span class="number">1</span>];</span><br><span class="line"> <span class="built_in">memset</span>(g, <span class="number">0</span>, <span class="built_in">sizeof</span>(g));</span><br><span class="line"> <span class="type">int</span> q;</span><br><span class="line"> cin >> q;</span><br><span class="line"> <span class="type">int</span> arr[<span class="number">5</span>];</span><br><span class="line"></span><br><span class="line"> <span class="comment">// 做差分陣列</span></span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i < q; i++) {</span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> j = <span class="number">0</span>; j < <span class="number">5</span>; j++) cin >> arr[j];</span><br><span class="line"></span><br><span class="line"> g[arr[<span class="number">0</span>]][arr[<span class="number">1</span>]] += arr[<span class="number">4</span>];</span><br><span class="line"> g[arr[<span class="number">0</span>]][arr[<span class="number">3</span>]] -= arr[<span class="number">4</span>];</span><br><span class="line"> g[arr[<span class="number">2</span>]][arr[<span class="number">1</span>]] -= arr[<span class="number">4</span>];</span><br><span class="line"> g[arr[<span class="number">2</span>]][arr[<span class="number">3</span>]] += arr[<span class="number">4</span>];</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> <span class="comment">// 先輸出第一行</span></span><br><span class="line"> <span class="type">int</span> presum = <span class="number">0</span>;</span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i < c; i++) {</span><br><span class="line"> presum += g[<span class="number">0</span>][i];</span><br><span class="line"> g[<span class="number">0</span>][i] = presum;</span><br><span class="line"> cout << g[<span class="number">0</span>][i] << <span class="string">' '</span>;</span><br><span class="line"> }</span><br><span class="line"> cout << <span class="string">'\n'</span>;</span><br><span class="line"></span><br><span class="line"> <span class="comment">// 處理後續前綴</span></span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">1</span>; i < r; i++) {</span><br><span class="line"> presum = <span class="number">0</span>;</span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> j = <span class="number">0</span>; j < c; j++) {</span><br><span class="line"> presum += g[i][j];</span><br><span class="line"> g[i][j] = presum + g[i - <span class="number">1</span>][j];</span><br><span class="line"> cout << g[i][j] << <span class="string">' '</span>;</span><br><span class="line"> }</span><br><span class="line"> cout << <span class="string">'\n'</span>;</span><br><span class="line"> }</span><br><span class="line">}</span><br><span class="line"></span><br></pre></td></tr></table></figure>
</details>
<h3 id="2-切割板材plate"><a class="markdownIt-Anchor" href="#2-切割板材plate"></a> 2. 切割板材(Plate)</h3>
<p>尚未解題</p>
<h3 id="3-搭船渡河-boat"><a class="markdownIt-Anchor" href="#3-搭船渡河-boat"></a> 3. 搭船渡河 (Boat)</h3>
<p>尚未解題</p>
]]></content>
<categories>
<category>TOIP</category>
</categories>
<tags>
<tag>TOI</tag>
<tag>TOIP</tag>
<tag>潛力組</tag>
<tag>差分</tag>
</tags>
</entry>
<entry>
<title>【心得】少有人走的路:心智成熟的旅程</title>
<url>/The-Road-Less-Traveled/</url>
<content><![CDATA[<p>這本書在講的是自律、愛、心智成長、信仰、恩典等各個問題。主要在於心智的成長</p>
<h3 id="自律"><a class="markdownIt-Anchor" href="#自律"></a> 自律</h3>
<p>作者要求我們要做到 推遲滿足感、承擔責任、忠於事實、保持平衡 並細心理解其中道理。</p>
<p>我們其實早已得知何為推遲滿足感,又或稱延遲享受。最早可推至小時候,那時的我們總能聽到大人說:「去寫完功課再去玩手機」「完成家事後,才能看電視」「被完單字才能睡覺」這都是先苦後樂的道理,而自律就是基於這個道理去執行的。我很常聽到:「要怎麼自律?」其實我也不清楚,我只知道,自律使人充滿幹勁,他會義無反顧的完成他的任務。自從我有了平板、手機的四年級起,我就開始每天玩著諸如此類的 3C 產品,甚至連電視也不跟爸媽搶著看了。說實話,這樣的行為,早已打破了自律。自律是從小就該培養的東西,而父母正是傳遞自律的途徑。在出生不到一歲嬰兒的意識裡,不存在爸媽的形象,只知道這兩個人會不斷的出現在自己眼中,然後供給自己生活所需。因此父母是我們一生的依賴,我們從小就在他們身上學到所有行為,包含吵架方式、打掃方式、溝通方式等處理事務的能力。所以自律也不例外,它是需要被培養的,它能使我們面對問題。</p>
<blockquote>
<p>解決人生問題的首要方案,乃是自律,缺少了這一環,你不可能解決任何麻煩和困難。局部的自律只能解決局部的問題,完整的自律才能解決所有的問題。<br />
《少有人走的路》Page 18</p>
</blockquote>
<p>而它關聯性較強的無非是爸媽的愛,爸媽的愛告訴我們:有他們在,我可以不怕前方恐懼,進而得到勇氣,因為我們知道我們是被愛的,所以不怕被拋棄、遺棄,充滿著安全感。這安全感能讓我們面對問題、正視問題。</p>
<p>倘若沒有了愛,那我們面對世界會變得恐懼、不敢面對,導致常常逃避問題,把問題把在一旁,時常提醒自己要解決它,但都是以不想弄、懶得弄、今天好累不想做、之後有時間再弄作為結尾。</p>
<blockquote>
<p>美國開國先哲本傑明.富蘭克林說過:「惟有痛苦才會帶來教益。」面對問題,聰明者不因害怕痛苦而選擇逃避,而是迎上前去,直至將其戰勝為止。<br />
《少有人走的路》Page 19</p>
</blockquote>
<p>作者還提到人生的意義是甚麼,也正如他所說:許多人應該都答不太出來。或許人生的意義就是遇到問題,然後解決問題,再遇到新的問題,繼續解決它,反覆無常,使我們意識裡得到了許多感悟並從問題中成長,或許這就是人生的意義吧。</p>
<p>而作者特別將沒辦法自律多推究給父母親。通常爸媽面對孩子的不斷詢問後的反應總是不耐煩的說:「你再吵,我就不要你了」這種威脅會不斷出現在孩子的回憶裡,不斷重演,也包括我的過去,爸媽的責怪、罵聲,總能讓我重回當下的陰影裡揮之不去。但幸虧於那些慘不忍睹的記憶,我告誡自己:我不要成為和自己父母一樣的大人。至此之後,我總是一個人在房間度過自己和自己相處的時光,作業、課本似乎一動也沒動,因為我腦中出現太多畫面,根本沒有機會去想我還有甚麼事情沒做,就算想起自己還有一堆課業要顧,但每每還是沒辦法有那動力去學習,不斷的困住自己。</p>
<blockquote>
<p>父母同樣是指揮官,其使命和管理企業一樣複雜。正像軍隊指揮官那樣,大多數父母面對孩子的問題束手無策,連續數月乃至數年都無任何舉措,只可一味拖延。<br />
《少有人走的路》Page 37</p>
</blockquote>
<p>我不怪罪於父母,他們的養育我感恩在心。若父母都不自律,我為甚麼還要與父母親計較,我若有能力自律,我大可不必大吵一架之後,委屈自己還打破家庭的平靜,說實話我不知道甚麼是錯甚麼是對,所謂的叛逆又是什麼,是我們的頂嘴還是與大人之間的爭吵,難道大人都是對的,我們都是錯的,或許並非如此。所以我再次告訴自己:要學會與自己和解,才能與家人和解,到現在我仍過意不去,明明是因為幫你抬瓶汽水,我覺得重所以才嘆口氣,你卻要說我:「你這甚麼態度!」現在才覺得我父親挺可笑的…未釐清事實真相,就血口噴人,我為何要受這委屈呢?我當時若有我現在的想法那有多好啊!我多恨我父親啊!所以即使爸媽沒有自律,我也要變的自律,才有辦法洗掉那些慘痛的經歷。這不是說大話,這位心理學作者接觸過的病人,即變成年了,也沒有能力自律,我同意它所說的。</p>
<p>所以作者希望我們能學會的四個要素</p>
<ol>
<li>推遲滿足感</li>
<li>承擔責任</li>
<li>忠於事實</li>
<li>保持平衡</li>
</ol>
<p>我也大都能理解了。</p>
]]></content>
<tags>
<tag>心得</tag>
</tags>
</entry>
<entry>
<title>【經驗】逢甲資工系 APCS 組面試經驗</title>
<url>/FCU-CSIE-APCS-interview/</url>
<content><![CDATA[<h1 id="前言"><a class="markdownIt-Anchor" href="#前言"></a> 前言</h1>
<p>其實面試不用緊張,照你們平常跟老師的講話方式就好。目前我面的學校,教授們都很 Nice,我本人就慢熟,但我的高中有模擬面試,有模擬面試就去試試看,體驗一下那種感覺,然後說實話不用太壓抑自己,把想說的說出來即可,教授特喜歡這種有想法的人。</p>
<span id="more"></span>
<h1 id="面試過程"><a class="markdownIt-Anchor" href="#面試過程"></a> 面試過程</h1>
<p>以下是大致過程,可能有漏問題,但是應該不會影響到整體面試內容。</p>
<p>三對一個人面試,從左至右,教授編號為(A)到(C)用英文字母表示表示</p>
<hr />
<ol>
<li>B 教授:請自我介紹 1 分鐘(自介後就輕鬆聊)</li>
</ol>
<hr />
<ol start="2">
<li>B 教授:我從學習歷程問我你有一點很特別,就是可以選了一個 C 語言,你可以說一下為什麼選擇 C 嗎?</li>
</ol>
<ul>
<li>我:因為 APCS 的觀念題是用 C 語言,我希望可以藉由多元選修來增強 APCS 的觀念題。</li>
<li>B 教授:那有沒有覺得 C 比較難寫?</li>
<li>我:有,但主要是 C 跟 C++ 的寫法都蠻像的,只差在輸出寫法不同。</li>
<li>全部:然後就大家就 Blablabla 嘻嘻哈哈</li>
</ul>
<hr />
<ol start="3">
<li>C 教授:可以說明一下工程應用這門課在幹嘛嗎?</li>
</ol>
<ul>
<li>我:(我沒聽清楚)可以請教授在問一次問題嗎</li>
<li>C 教授:就是你有一個工程課在幹嘛,因為你拿了 99 分,可以說明一下嗎?</li>
<li>我:(前面有點吱吱嗚嗚然後才想到 -_-)喔!在那門課主要是在畫草圖,學習如何建模,然後</li>
<li>A or B 教授:那是用什麼軟體呢?</li>
<li>我:是用網頁上的 Onshape</li>
<li>教授:嗯~(各教授點頭)</li>
</ul>
<hr />
<ol start="4">
<li>B 教授:從這邊的資料,我看到你都是填 APCS 組想元智、淡江等等,想問你如果都上的話你會想進哪間?</li>
</ol>
<ul>
<li>我:我會選擇逢甲,因為在 SITCON 計算機年會中,我有看到逢甲學長在上面演講,也想加入逢甲的黑客社學習以及交流技術。</li>
<li>B 教授:那那入取你的時候,其他的學校就不用考慮了</li>
<li>教授:依舊嘻嘻哈哈</li>
</ul>
<hr />
<ol start="5">
<li>A 教授:那你有什麼想問的問題嗎?</li>
</ol>
<ul>
<li>我:因為我希望可以成為網頁工程師,目前只接觸過 HTML、CSS 和 JavaScript,想問教授我可以往哪個方面學習?</li>
<li>A 教授:其實如果會寫網頁的話,就要注意資安,要確保你的網頁是沒有漏洞的,BlaBlaBla</li>
<li>C 教授:還要看你的網頁的內容阿,架構阿等等等,BlaBlaBla。</li>
</ul>
<hr />
<ol start="6">
<li>A 教授:那還有什麼問題嗎?</li>
</ol>
<ul>
<li>我:嗯…沒有了</li>
<li>B 教授:好,那就到這邊吧,可以請同學出去了。</li>
<li>我:嗯好,謝謝教授們。(走出會議廳點頭示意並關門)</li>
</ul>
]]></content>
<tags>
<tag>逢甲</tag>
<tag>資工</tag>
</tags>
</entry>
<entry>
<title>作者使用的 C++ 編譯器</title>
<url>/cpp-compiler/</url>
<content><![CDATA[<h2 id="線上"><a class="markdownIt-Anchor" href="#線上"></a> 線上</h2>
<ol>
<li><span class="exturl" data-url="aHR0cHM6Ly9yZXBsaXQuY29tL34=">Repl.it<i class="fa fa-external-link-alt"></i></span><br />
<strong>優點</strong>:線上編譯,可以在不同地方不同電腦上寫 code ,可隨時新增不同程式語言的專案。打好的 code 可以直接複製網址給其他人(放心,其他人更改不了你的 code )。<br />
<strong>缺點</strong>:帳號的存放大小有限,不過對方變性就已經不錯了。以及部分功能需付費。<em>雖不用按下你的 ctrl + s ,但是如果網站剛好卡住就沒辦法隨時存檔。 (作者曾經歷過…)</em></li>
</ol>
<h2 id="應用程式"><a class="markdownIt-Anchor" href="#應用程式"></a> 應用程式</h2>
<ol>
<li>
<p><span class="exturl" data-url="aHR0cHM6Ly9jb2RlLnZpc3VhbHN0dWRpby5jb20v">Visual Studio Code<i class="fa fa-external-link-alt"></i></span><br />
<strong>優點</strong>:可自行下載延伸模組,自由度較高<br />
<strong>缺點</strong>:也許是作者還不夠理解,新手可能對這個有點難因為還有環境的配置,作者的同學也編譯不了 C++,不過作者本人有成功,但就是在這上面研究許久…</p>
</li>
<li>
<p><span class="exturl" data-url="aHR0cHM6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvbWluZ3ctdzY0L2ZpbGVzL21pbmd3LXc2NC9taW5ndy13NjQtcmVsZWFzZS8=">MinGW<i class="fa fa-external-link-alt"></i></span><br />
<strong>特點</strong>:提供一個可執行 gcc 程式開發環境,整合了許多 windows 下可運行的標頭檔案和檔案庫,為 c++ 的開發提供了良好基礎支援,他不是一種編輯器,是一個提供環境做編譯的程式,非常重要。</p>
</li>
<li>
<p><span class="exturl" data-url="aHR0cHM6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvb3J3ZWxsZGV2Y3BwLw==">Dev-C++<i class="fa fa-external-link-alt"></i></span><br />
<strong>特點</strong>:使用 MinGW32/gcc 編譯器,可高亮度語法顯示,以減少編輯錯誤。</p>
</li>
<li>
<p><span class="exturl" data-url="aHR0cHM6Ly93d3cuY29kZWJsb2Nrcy5vcmcvZG93bmxvYWRzL2JpbmFyaWVzLw==">Code Blocks<i class="fa fa-external-link-alt"></i></span><br />
<strong>特點</strong>:也是使用 MinGW 做編譯的,擴充性強大,也適合開發應用程式。</p>
</li>
</ol>
<h2 id="結語"><a class="markdownIt-Anchor" href="#結語"></a> 結語</h2>
<p>作者目前使用的是 <span class="exturl" data-url="aHR0cDovL1JlcGwuaXQ=">Repl.it<i class="fa fa-external-link-alt"></i></span> 和 VScode,其他編輯器我也只有在學校電腦上使用,所以還不知道他們的特性。線上的編譯器和延伸模組多到用不完的編輯器真的很好用,包括我撰寫的這篇文章也是用 VScode 編輯出來的,他的延伸模組之後也會出一篇來推薦幾個好用的,提供大家使用。</p>
]]></content>
<tags>
<tag>C/C++</tag>
<tag>編譯器/編輯器</tag>
</tags>
</entry>
<entry>
<title>【教學】EP 2 - Discord.py 之 Cog 篇</title>
<url>/discord-bot-02/</url>
<content><![CDATA[<div class="note info"><p>在閱讀此篇文章前,作者建議:您已有程式的基礎底子,並且此篇著重於程式碼的部分,其餘皆為概略步驟。</p>
</div>
<div class="note warning"><p>請注意文章日期的時效性</p>
</div>
<h2 id="為何要使用-cog-寫法"><a class="markdownIt-Anchor" href="#為何要使用-cog-寫法"></a> 為何要使用 Cog 寫法</h2>
<p>在使用這種寫法前,我是既不熟悉 Python 語法,以及其特色(其實是忘記了),所以好一段時間放棄了用 Python 寫。但現在稍微略懂之後,才發現這種寫法有很多好處:</p>
<ol>
<li>好維護</li>
<li>事件函式與前綴指令不會衝突</li>
<li>前綴指令不用一直重新啟動 Bot</li>
<li>指令可分類</li>
</ol>
<p>總之,其實只需要修改幾行程式碼,就可以讓你的整體結構更清晰易懂,還不快點使用這種寫法。你可以在 <span class="exturl" data-url="aHR0cHM6Ly9kaXNjb3JkcHkucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL2V4dC9jb21tYW5kcy9jb2dzLmh0bWw=">discord.py Cogs 官方文檔<i class="fa fa-external-link-alt"></i></span> 中找到更多詳細解說。</p>
<span id="more"></span>
<h2 id="cog-架構"><a class="markdownIt-Anchor" href="#cog-架構"></a> Cog 架構</h2>
<p>請將你的檔案目錄修改成如下:</p>
<figure class="highlight txt"><table><tr><td class="code"><pre><span class="line">DiscordBot</span><br><span class="line">| bot.py</span><br><span class="line">|</span><br><span class="line">└─cogs</span><br><span class="line"> event.py</span><br><span class="line"> main.py</span><br></pre></td></tr></table></figure>
<p>也就是請在主目錄下,創建一個 <code>cogs</code> 資料夾,以及在其之中分別創建 <code>event.py</code> 及 <code>main.py</code>。</p>
<ul>
<li><code>main.py</code>:主要在寫你的前綴指令(或是斜線指令)</li>
<li><code>event.py</code>:主要在寫事件觸發函式</li>
</ul>
<p>等等,已經有指令、有事件偵測了,那 <code>bot.py</code> 要幹嘛?</p>
<ul>
<li><code>bot.py</code>:主要提供 load、unload、reload 的指令,可以讓 Bot 不掉線,也能修改程式,並讓 Bot 收到最新的指令。</li>
</ul>
<h2 id="cog-實作"><a class="markdownIt-Anchor" href="#cog-實作"></a> Cog 實作</h2>
<h3 id="bot-檔內容"><a class="markdownIt-Anchor" href="#bot-檔內容"></a> Bot 檔內容</h3>
<div class="note warning no-icon"><p>💡小技巧:可以使用 <code>前綴指令+help</code> 來查看可使用的指令</p>
</div>
<h4 id="load-載入"><a class="markdownIt-Anchor" href="#load-載入"></a> Load 載入</h4>
<p>用於將新的程式檔案載入,或是之前未載入的檔案載入。</p>
<figure class="highlight py"><table><tr><td class="code"><pre><span class="line"><span class="meta">@bot.command()</span></span><br><span class="line"><span class="keyword">async</span> <span class="keyword">def</span> <span class="title function_">load</span>(<span class="params">ctx, extension</span>):</span><br><span class="line"> <span class="keyword">await</span> bot.load_extension(<span class="string">f"cogs.<span class="subst">{extension}</span>"</span>)</span><br><span class="line"> <span class="keyword">await</span> ctx.send(<span class="string">f"Loaded <span class="subst">{extension}</span> done."</span>)</span><br></pre></td></tr></table></figure>
<h4 id="unload-卸載"><a class="markdownIt-Anchor" href="#unload-卸載"></a> Unload 卸載</h4>
<p>用於若程式碼有問題,可以先卸載避免機器人出錯</p>
<figure class="highlight py"><table><tr><td class="code"><pre><span class="line"><span class="meta">@bot.command()</span></span><br><span class="line"><span class="keyword">async</span> <span class="keyword">def</span> <span class="title function_">unload</span>(<span class="params">ctx, extension</span>):</span><br><span class="line"> <span class="keyword">await</span> bot.unload_extension(<span class="string">f"cogs.<span class="subst">{extension}</span>"</span>)</span><br><span class="line"> <span class="keyword">await</span> ctx.send(<span class="string">f"UnLoaded <span class="subst">{extension}</span> done."</span>)</span><br></pre></td></tr></table></figure>
<h4 id="reload-重新載入"><a class="markdownIt-Anchor" href="#reload-重新載入"></a> Reload 重新載入</h4>
<p>用於更新了某個指令檔案</p>
<figure class="highlight py"><table><tr><td class="code"><pre><span class="line"><span class="meta">@bot.command()</span></span><br><span class="line"><span class="keyword">async</span> <span class="keyword">def</span> <span class="title function_">reload</span>(<span class="params">ctx, extension</span>):</span><br><span class="line"> <span class="keyword">await</span> bot.reload_extension(<span class="string">f"cogs.<span class="subst">{extension}</span>"</span>)</span><br><span class="line"> <span class="keyword">await</span> ctx.send(<span class="string">f"ReLoaded <span class="subst">{extension}</span> done."</span>)</span><br></pre></td></tr></table></figure>
<h4 id="完整程式碼"><a class="markdownIt-Anchor" href="#完整程式碼"></a> 完整程式碼</h4>
<figure class="highlight py"><figcaption><span>bot.py</span></figcaption><table><tr><td class="code"><pre><span class="line"><span class="keyword">import</span> os </span><br><span class="line"><span class="keyword">import</span> asyncio</span><br><span class="line"><span class="keyword">import</span> discord</span><br><span class="line"><span class="keyword">from</span> discord.ext <span class="keyword">import</span> commands</span><br><span class="line"></span><br><span class="line">intents = discord.Intents.<span class="built_in">all</span>()</span><br><span class="line">bot = commands.Bot(command_prefix = <span class="string">"="</span>, intents = intents)</span><br><span class="line"></span><br><span class="line"><span class="meta">@bot.event</span></span><br><span class="line"><span class="keyword">async</span> <span class="keyword">def</span> <span class="title function_">on_ready</span>():</span><br><span class="line"> <span class="built_in">print</span>(<span class="string">f"目前登入身份 --> <span class="subst">{bot.user}</span>"</span>)</span><br><span class="line"></span><br><span class="line"><span class="meta">@bot.command()</span></span><br><span class="line"><span class="keyword">async</span> <span class="keyword">def</span> <span class="title function_">load</span>(<span class="params">ctx, extension</span>):</span><br><span class="line"> <span class="keyword">await</span> bot.load_extension(<span class="string">f"cogs.<span class="subst">{extension}</span>"</span>)</span><br><span class="line"> <span class="keyword">await</span> ctx.send(<span class="string">f"Loaded <span class="subst">{extension}</span> done."</span>)</span><br><span class="line"></span><br><span class="line"><span class="meta">@bot.command()</span></span><br><span class="line"><span class="keyword">async</span> <span class="keyword">def</span> <span class="title function_">unload</span>(<span class="params">ctx, extension</span>):</span><br><span class="line"> <span class="keyword">await</span> bot.unload_extension(<span class="string">f"cogs.<span class="subst">{extension}</span>"</span>)</span><br><span class="line"> <span class="keyword">await</span> ctx.send(<span class="string">f"UnLoaded <span class="subst">{extension}</span> done."</span>)</span><br><span class="line"></span><br><span class="line"><span class="meta">@bot.command()</span></span><br><span class="line"><span class="keyword">async</span> <span class="keyword">def</span> <span class="title function_">reload</span>(<span class="params">ctx, extension</span>):</span><br><span class="line"> <span class="keyword">await</span> bot.reload_extension(<span class="string">f"cogs.<span class="subst">{extension}</span>"</span>)</span><br><span class="line"> <span class="keyword">await</span> ctx.send(<span class="string">f"ReLoaded <span class="subst">{extension}</span> done."</span>)</span><br><span class="line"></span><br><span class="line"><span class="keyword">async</span> <span class="keyword">def</span> <span class="title function_">load_extensions</span>():</span><br><span class="line"> <span class="keyword">for</span> filename <span class="keyword">in</span> os.listdir(<span class="string">"./cogs"</span>):</span><br><span class="line"> <span class="keyword">if</span> filename.endswith(<span class="string">".py"</span>):</span><br><span class="line"> <span class="keyword">await</span> bot.load_extension(<span class="string">f"cogs.<span class="subst">{filename[:-<span class="number">3</span>]}</span>"</span>)</span><br><span class="line"></span><br><span class="line"><span class="keyword">async</span> <span class="keyword">def</span> <span class="title function_">main</span>():</span><br><span class="line"> <span class="keyword">async</span> <span class="keyword">with</span> bot:</span><br><span class="line"> <span class="keyword">await</span> load_extensions()</span><br><span class="line"> <span class="keyword">await</span> bot.start(<span class="string">"機器人的TOKEN"</span>)</span><br><span class="line"></span><br><span class="line"><span class="keyword">if</span> __name__ == <span class="string">"__main__"</span>:</span><br><span class="line"> asyncio.run(main())</span><br></pre></td></tr></table></figure>
<h3 id="main-檔內容"><a class="markdownIt-Anchor" href="#main-檔內容"></a> Main 檔內容</h3>
<p><code>main.py</code> 通常用於存取指令(其實你想放甚麼都行,但主要以易理解的方式撰寫)。但使用 Cog 寫法的話,要注意以下幾點:</p>
<div class="note info"><h4 id="注意事項"><a class="markdownIt-Anchor" href="#注意事項"></a> 注意事項</h4>
<ol>
<li><code>@bot.event</code> 要改成 <code>@commands.Cog.listener()</code></li>
<li><code>@bot.command()</code> 要改成 <code>@commands.command()</code></li>
<li>原指令用 bot 在 Cog 寫法下,都要變成 <code>self.bot</code></li>
<li>每個指令的第一個參數要是 <code>self</code></li>
</ol>
</div>
<h4 id="基本架構"><a class="markdownIt-Anchor" href="#基本架構"></a> 基本架構</h4>
<figure class="highlight py"><table><tr><td class="code"><pre><span class="line"><span class="keyword">import</span> discord</span><br><span class="line"><span class="keyword">from</span> discord.ext <span class="keyword">import</span> commands</span><br><span class="line"></span><br><span class="line"><span class="keyword">class</span> <span class="title class_">Main</span>(commands.Cog):</span><br><span class="line"> <span class="keyword">def</span> <span class="title function_">__init__</span>(<span class="params">self, bot: commands.Bot</span>):</span><br><span class="line"> <span class="variable language_">self</span>.bot = bot</span><br><span class="line"> </span><br><span class="line"> <span class="comment"># ...</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 這裡 setup 函式表示將 class Main 的指令加到 bot.py 中,</span></span><br><span class="line"><span class="comment"># 因此在 bot.py 中你會看到為何要 load_extensions() 在先,</span></span><br><span class="line"><span class="comment"># 而 bot.start("TOKEN") 在後。</span></span><br><span class="line"><span class="keyword">async</span> <span class="keyword">def</span> <span class="title function_">setup</span>(<span class="params">bot</span>):</span><br><span class="line"> <span class="keyword">await</span> bot.add_cog(Main(bot))</span><br></pre></td></tr></table></figure>
<h4 id="範例"><a class="markdownIt-Anchor" href="#範例"></a> 範例</h4>
<p>以 ping 指令當作範例,當我們輸入 <code>=ping</code> 時,它就會回答當前機器人的延遲「The Bot Latency: <code>215ms</code>」<br />
下方的範例,可以看到符合了注意事項的第二到四點。</p>
<figure class="highlight py"><table><tr><td class="code"><pre><span class="line"><span class="keyword">import</span> discord</span><br><span class="line"><span class="keyword">from</span> discord.ext <span class="keyword">import</span> commands</span><br><span class="line"></span><br><span class="line"><span class="keyword">class</span> <span class="title class_">Main</span>(commands.Cog):</span><br><span class="line"> <span class="keyword">def</span> <span class="title function_">__init__</span>(<span class="params">self, bot: commands.Bot</span>):</span><br><span class="line"> <span class="variable language_">self</span>.bot = bot</span><br><span class="line"> </span><br><span class="line"> <span class="comment"># ping</span></span><br><span class="line"><span class="meta"> @commands.command()</span></span><br><span class="line"> <span class="keyword">async</span> <span class="keyword">def</span> <span class="title function_">ping</span>(<span class="params">self, ctx</span>):</span><br><span class="line"> <span class="keyword">await</span> ctx.send(<span class="string">f"The Bot Latency: `<span class="subst">{<span class="built_in">round</span>(self.bot.latency * <span class="number">1000</span>)}</span>ms`"</span>)</span><br><span class="line"> </span><br><span class="line"> <span class="comment"># 其他指令...</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">async</span> <span class="keyword">def</span> <span class="title function_">setup</span>(<span class="params">bot</span>):</span><br><span class="line"> <span class="keyword">await</span> bot.add_cog(Main(bot))</span><br></pre></td></tr></table></figure>
<h3 id="event-檔內容"><a class="markdownIt-Anchor" href="#event-檔內容"></a> Event 檔內容</h3>
<p>這裡其實就跟 <span class="exturl" data-url="aHR0cDovL21haW4ucHk=">main.py<i class="fa fa-external-link-alt"></i></span> 的寫法一樣,所以就不多加贅述直接寫範例。</p>
<h4 id="範例-2"><a class="markdownIt-Anchor" href="#範例-2"></a> 範例</h4>
<figure class="highlight py"><table><tr><td class="code"><pre><span class="line"><span class="keyword">import</span> discord</span><br><span class="line"><span class="keyword">from</span> discord.ext <span class="keyword">import</span> commands</span><br><span class="line"></span><br><span class="line"><span class="keyword">class</span> <span class="title class_">Event</span>(commands.Cog):</span><br><span class="line"> <span class="keyword">def</span> <span class="title function_">__init__</span>(<span class="params">self, bot: commands.Bot</span>):</span><br><span class="line"> <span class="variable language_">self</span>.bot = bot</span><br><span class="line"> </span><br><span class="line"> <span class="comment"># welcome guild</span></span><br><span class="line"><span class="meta"> @commands.Cog.listener()</span></span><br><span class="line"> <span class="keyword">async</span> <span class="keyword">def</span> <span class="title function_">on_member_join</span>(<span class="params">self, member</span>):</span><br><span class="line"> wel_channel = <span class="variable language_">self</span>.bot.get_channel(你的歡迎頻道 ID) <span class="comment"># 將字串修改為歡迎頻道 ID(整數型態)</span></span><br><span class="line"> <span class="keyword">await</span> wel_channel.send(<span class="string">f"歡迎 <span class="subst">{member.mention}</span> 加入!"</span>)</span><br><span class="line"></span><br><span class="line"> <span class="comment"># leave guild</span></span><br><span class="line"><span class="meta"> @commands.Cog.listener()</span></span><br><span class="line"> <span class="keyword">async</span> <span class="keyword">def</span> <span class="title function_">on_member_remove</span>(<span class="params">self, member</span>):</span><br><span class="line"> leave_channel = <span class="variable language_">self</span>.bot.get_channel(你的離開頻道 ID) <span class="comment"># 將字串修改為離開頻道 ID(整數型態)</span></span><br><span class="line"> <span class="keyword">await</span> leave_channel.send(<span class="string">f"<span class="subst">{member.mention}</span> 期待我們再次相遇"</span>)</span><br><span class="line"></span><br><span class="line"> <span class="comment"># message listener</span></span><br><span class="line"><span class="meta"> @commands.Cog.listener()</span></span><br><span class="line"> <span class="keyword">async</span> <span class="keyword">def</span> <span class="title function_">on_message</span>(<span class="params">self, msg</span>):</span><br><span class="line"> <span class="comment"># 防止機器人自己觸發</span></span><br><span class="line"> <span class="keyword">if</span> msg.author == <span class="variable language_">self</span>.bot.user:</span><br><span class="line"> <span class="keyword">return</span></span><br><span class="line"> <span class="keyword">if</span> msg.content == <span class="string">"qq"</span> <span class="keyword">or</span> msg.content == <span class="string">"QQ"</span>:</span><br><span class="line"> <span class="keyword">await</span> msg.channel.send(<span class="string">"幫 QQ"</span>)</span><br><span class="line"></span><br><span class="line"><span class="keyword">async</span> <span class="keyword">def</span> <span class="title function_">setup</span>(<span class="params">bot</span>):</span><br><span class="line"> <span class="keyword">await</span> bot.add_cog(Event(bot))</span><br></pre></td></tr></table></figure>
<h2 id="參考網站"><a class="markdownIt-Anchor" href="#參考網站"></a> 參考網站</h2>
<ul>
<li><span class="exturl" data-url="aHR0cHM6Ly9kaXNjb3JkcHkucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL2V4dC9jb21tYW5kcy9jb2dzLmh0bWw=">discord.py Cogs 官方文檔<i class="fa fa-external-link-alt"></i></span></li>
<li><span class="exturl" data-url="aHR0cHM6Ly9oYWNrbWQuaW8vQHNtYWxsc2hhd245NS9weXRob25fZGlzY29yZF9ib3RfY29n">Python Discord Bot 進階教學 — Cog 篇<i class="fa fa-external-link-alt"></i></span></li>
<li><span class="exturl" data-url="aHR0cHM6Ly93d3cueW91dHViZS5jb20vQFByb2xhZG9u">YouTube 頻道 Proladon<i class="fa fa-external-link-alt"></i></span></li>
</ul>
]]></content>
<tags>
<tag>教學</tag>
<tag>Python</tag>
<tag>Disocrd</tag>
<tag>Bot</tag>
<tag>discord.py</tag>
<tag>Cogs</tag>
<tag>Class</tag>
</tags>
</entry>
<entry>
<title>【測試】需密碼文章</title>
<url>/hexo-encrypt-test/</url>
<content><![CDATA[<div class="hbe hbe-container" id="hexo-blog-encrypt" data-wpm="抱歉,這組密碼似乎有些錯誤,請再試試。" data-whm="抱歉,這篇文章不能被校驗,不過您還是能看看解密後的內容。">
<script id="hbeData" type="hbeData" data-hmacdigest="c5f962a59016e1a6ecfe828b27d27df2e5f89b624e75c40addf0dd3622642acb">bd25ed9264b080267271e137e33d0ce1276c06c30ad3349bc1fd0ac9ef1064dce1362436ca4a0a173a8501aa56c1212bbb76dd99a1a7ec98efdab7ba17bd4d9a</script>
<div class="hbe hbe-content">
<div class="hbe hbe-input hbe-input-default">
<input class="hbe hbe-input-field hbe-input-field-default" type="password" id="hbePass">
<label class="hbe hbe-input-label hbe-input-label-default" for="hbePass">
<span class="hbe hbe-input-label-content hbe-input-label-content-default">密碼是 test</span>
</label>
</div>
</div>
</div>
<script data-pjax src="/lib/hbe.js"></script><link href="/css/hbe.style.css" rel="stylesheet" type="text/css">]]></content>
<tags>
<tag>test</tag>
</tags>
</entry>
<entry>
<title>【教學】EP 1 - 用 Python 架自己的 Discord Bot 吧</title>
<url>/discord-bot-01/</url>
<content><![CDATA[<div class="note info"><p>在閱讀此篇文章前,作者建議:您已有程式的基礎底子,並且此篇著重於程式碼的部分,其餘皆為概略步驟。</p>
</div>
<div class="note warning"><p>請注意文章日期的時效性</p>
</div>
<h2 id="為何自架"><a class="markdownIt-Anchor" href="#為何自架"></a> 為何自架?</h2>
<ol>
<li>因為興趣(?</li>
<li>市面上太多太多需要付費使用的 Discord Bot</li>
<li>自架的可調性高</li>
<li>可以順便當作自己的小作品</li>
</ol>
<h2 id="從何開始"><a class="markdownIt-Anchor" href="#從何開始"></a> 從何開始?</h2>
<p>這邊建議尋找 YouTube 影片學著做或其他文章。</p>
<h3 id="安裝-python"><a class="markdownIt-Anchor" href="#安裝-python"></a> 安裝 Python</h3>
<ol>
<li>你得先安裝好 <span class="exturl" data-url="aHR0cHM6Ly93d3cucHl0aG9uLm9yZy9kb3dubG9hZHMv">Python<i class="fa fa-external-link-alt"></i></span> 的環境,安裝時,記得 PyPI 也要勾選到,它可以提供許多 Python 實用的套件。</li>
<li>安裝完後,請先新建一份資料夾,這個就是你的專案,我命名:<code>DiscordBot</code>。</li>
</ol>
<h3 id="安裝-visual-studio-code"><a class="markdownIt-Anchor" href="#安裝-visual-studio-code"></a> 安裝 Visual Studio Code</h3>
<p>這是一個文字編輯器,用來編輯檔案。也可以使用其他文字編輯器,但我推薦使用 VS Code。</p>
<ol>
<li>安裝後,請在 Marketplace(延伸模組)中,再搜尋:<span class="exturl" data-url="aHR0cHM6Ly9tYXJrZXRwbGFjZS52aXN1YWxzdHVkaW8uY29tL2l0ZW1zP2l0ZW1OYW1lPW1zLXB5dGhvbi5weXRob24=">Python<i class="fa fa-external-link-alt"></i></span> 和其他你想裝的延伸模組。</li>
</ol>
<h2 id="建立自己的機器人"><a class="markdownIt-Anchor" href="#建立自己的機器人"></a> 建立自己的機器人</h2>
<ol>
<li>請到 <span class="exturl" data-url="aHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2FwcGxpY2F0aW9ucw==">Discord Developer Portal<i class="fa fa-external-link-alt"></i></span> 建立機器人,也就是按下【New Application】。</li>
<li>接著你可以開始先對它做基本的修飾:Name(剛才命名過了)、Description、App Icon(就是頭像)</li>
<li>在左側導覽列進入【Bot】,找尋細項:【TOKEN】,並把它複製起來(記著它)。</li>
</ol>
<div class="note warning"><p>請勿把機器人的 TOKEN 洩漏在其他地方,例如:你可能會想部署到你的 GitHub Repo,或者其他地方。<br />
因為當你洩漏了,其他人就有可能操控它。</p>
<p>當然,你也可以試看看會發生什麼事(其實就只是 DC 會通知你 TOKEN 外洩,請重新生成一個 TOKEN)</p>
</div>
<ol>
<li>接著在左側導覽列進入【OAuth2】,找尋:【OAuth2 URL Generator】,勾選【SCOPES】中的 bot 和【BOT PERMISSIONS】中的 Administrator。</li>
<li>接著進入下方所生成的連結,邀請到你的伺服器就可以看到你的機器人已加入你的伺服器啦!</li>
</ol>
<h2 id="開始寫自己的機器人吧"><a class="markdownIt-Anchor" href="#開始寫自己的機器人吧"></a> 開始寫自己的機器人吧</h2>
<ol>
<li>
<p>先在終端機安裝 Python 的 <span class="exturl" data-url="aHR0cDovL0Rpc2NvcmQucHk=">Discord.py<i class="fa fa-external-link-alt"></i></span> 套件,輸入:<code>pip install discord.py</code></p>
</li>
<li>
<p>在你的資料夾中創建一個 <code>bot.py</code>,內容如下,也歡迎去參考<span class="exturl" data-url="aHR0cHM6Ly9kaXNjb3JkcHkucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL3F1aWNrc3RhcnQuaHRtbA==">官方文檔<i class="fa fa-external-link-alt"></i></span></p>
<figure class="highlight py"><table><tr><td class="code"><pre><span class="line"><span class="keyword">import</span> discord <span class="comment"># 導入discord</span></span><br><span class="line"></span><br><span class="line">intents = discord.Intents.default()</span><br><span class="line">intents.message_content = <span class="literal">True</span></span><br><span class="line">client = discord.Client(intents = intents)</span><br><span class="line"></span><br><span class="line"><span class="comment"># 調用 event 函式庫 -> 也就是事件</span></span><br><span class="line"><span class="meta">@client.event</span></span><br><span class="line"><span class="comment"># on_ready 表示啟動成功時</span></span><br><span class="line"><span class="keyword">async</span> <span class="keyword">def</span> <span class="title function_">on_ready</span>():</span><br><span class="line"> <span class="built_in">print</span>(<span class="string">f"目前登入身份 --> <span class="subst">{client.user}</span>"</span>)</span><br><span class="line"></span><br><span class="line"><span class="meta">@client.event</span></span><br><span class="line"><span class="comment"># 當頻道有新訊息</span></span><br><span class="line"><span class="keyword">async</span> <span class="keyword">def</span> <span class="title function_">on_message</span>(<span class="params">message</span>):</span><br><span class="line"> <span class="comment"># 排除機器人本身的訊息,避免無限循環</span></span><br><span class="line"> <span class="keyword">if</span> message.author == client.user:</span><br><span class="line"> <span class="keyword">return</span></span><br><span class="line"> <span class="comment"># 新訊息包含 Hello,回覆 Hello, world!</span></span><br><span class="line"> <span class="keyword">if</span> message.content == <span class="string">"Hello"</span>:</span><br><span class="line"> <span class="keyword">await</span> message.channel.send(<span class="string">"Hello, world!"</span>)</span><br><span class="line"></span><br><span class="line">client.run(<span class="string">"機器人的TOKEN"</span>) <span class="comment"># 請把字串改成機器人的 TOKEN</span></span><br></pre></td></tr></table></figure>
</li>
<li>
<p>存好檔後,就可以執行它啦。可以測試在頻道打出 Hello,它就會回應你 Hello, world!</p>
</li>
</ol>
<p>這部分是透過事件偵測,來觸發機器人的回應。如果要讓機器人使用前綴指令,可以參考下方程式碼。</p>
<figure class="highlight py"><table><tr><td class="code"><pre><span class="line"><span class="comment"># 導入 Discord.py 模組</span></span><br><span class="line"><span class="keyword">import</span> discord</span><br><span class="line"><span class="comment"># 導入 commands 指令模組</span></span><br><span class="line"><span class="keyword">from</span> discord.ext <span class="keyword">import</span> commands</span><br><span class="line"></span><br><span class="line"><span class="comment"># intents是要求機器人的權限</span></span><br><span class="line">intents = discord.Intents.<span class="built_in">all</span>()</span><br><span class="line">bot = commands.Bot(command_prefix = <span class="string">"="</span>, intents = intents)</span><br><span class="line"></span><br><span class="line"><span class="meta">@bot.event</span></span><br><span class="line"><span class="comment"># 當機器人完成啟動</span></span><br><span class="line"><span class="keyword">async</span> <span class="keyword">def</span> <span class="title function_">on_ready</span>():</span><br><span class="line"> <span class="built_in">print</span>(<span class="string">f"目前登入身份 --> <span class="subst">{bot.user}</span>"</span>)</span><br><span class="line"></span><br><span class="line"><span class="meta">@bot.command()</span></span><br><span class="line"><span class="comment"># 輸入 $Hello 呼叫指令</span></span><br><span class="line"><span class="keyword">async</span> <span class="keyword">def</span> <span class="title function_">Hello</span>(<span class="params">ctx</span>):</span><br><span class="line"> <span class="comment"># 回覆 Hello, world!</span></span><br><span class="line"> <span class="keyword">await</span> ctx.send(<span class="string">"Hello, world!"</span>)</span><br><span class="line"></span><br><span class="line">bot.run(<span class="string">"機器人的TOKEN"</span>)</span><br></pre></td></tr></table></figure>
<p>接著試著打 <code>$Hello</code>,它就會回應 Hello, world!</p>
<p>但如果你想讓這兩段程式碼合併,你會發現它無法正常執行,這是因為 on_message 與 command 相互牴觸,所以之後將再額外講解 Cog 寫法,它可以有效的解決前綴指令與事件觸發的牴觸問題,並且在維護上將會變得更容易維護。</p>
<h2 id="參考網站"><a class="markdownIt-Anchor" href="#參考網站"></a> 參考網站</h2>
<ul>
<li><span class="exturl" data-url="aHR0cHM6Ly9kaXNjb3JkcHkucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL2luZGV4Lmh0bWw=">discord.py 官方文檔<i class="fa fa-external-link-alt"></i></span></li>
<li><span class="exturl" data-url="aHR0cHM6Ly9oYWNrbWQuaW8vQHNtYWxsc2hhd245NS9weXRob25fZGlzY29yZF9ib3RfYmFzZQ==">Python Discord Bot 基礎教學<i class="fa fa-external-link-alt"></i></span></li>
<li><span class="exturl" data-url="aHR0cHM6Ly93d3cueW91dHViZS5jb20vQFByb2xhZG9u">YouTube 頻道 Proladon<i class="fa fa-external-link-alt"></i></span></li>
</ul>
]]></content>
<tags>
<tag>教學</tag>
<tag>Python</tag>
<tag>Disocrd</tag>
<tag>Bot</tag>
<tag>discord.py</tag>
</tags>
</entry>
<entry>
<title>【筆記】前序式、中序式與後序式</title>
<url>/infix-postfix/</url>
<content><![CDATA[<h2 id="電腦怎麼進行四則運算"><a class="markdownIt-Anchor" href="#電腦怎麼進行四則運算"></a> 電腦怎麼進行四則運算?</h2>
<p>電腦其實很笨,所以計算機在做運算時,只會依你的命令順序做運算。</p>
<p>比如題目為 3 + 2 * 4</p>
<p>若照著順序按,得到的答案是 20。但以四則運算來說這很明顯已經錯了,答案應該為 11。</p>
<p>那前中後序的差別就是運算子的先後順序,可電腦有更好的方法進行四則運算,那就是後(前)序式。</p>
<p>後序式如:3 2 4 * +</p>
<p>數字在前,而運算子在後。在中序轉後序時,運算子會在過程中有比對先後順序,而非直接把運算式按順序放置後方。</p>
<figure class="highlight text"><table><tr><td class="code"><pre><span class="line">運算子 數字 數字 // 前序</span><br><span class="line">數字 運算子 數字 // 中序</span><br><span class="line">數字 數字 運算子 // 後序</span><br></pre></td></tr></table></figure>
<p>所以如果要讓電腦看得懂四則運算的規則必須要讓電腦知道每個符號的有先順序<br />
如:<br />
<code>*</code> <code>/</code> 大於 <code>+</code> <code>-</code><br />
<code>(</code> <code>)</code> 大於 <code>*</code> <code>/</code></p>
<h2 id="中序式轉後序式"><a class="markdownIt-Anchor" href="#中序式轉後序式"></a> 中序式轉後序式</h2>
<p>若遇到數字則直接輸出或放入字串,遇到運算子就判斷後放進 stack 裡。<br />
若 <code>stack.top()</code> 的運算子權重小於讀取的運算子,如:<code>+</code> <code>-</code> 小於 <code>*</code> <code>/</code> 直接 <code>stack.push(運算子)</code>,<br />
若 <code>stack.top()</code> 的運算子權重大於讀取的運算子,如:<code>*</code> <code>/</code> 大於 <code>+</code> <code>-</code> 則先輸出或放入字串 <code>stack.top()</code>,再 <code>stack.pop()</code>,最後才 <code>stack.push(運算子)</code>。<br />
若符號是 <code>(</code> 則直接放入,繼續進行程式直到遇到 <code>)</code>,才把 stack 到 <code>(</code> 裡的符號輸出或放入字串,記得最後也要把 <code>(</code> pop 掉。</p>
<table>
<thead>
<tr>
<th>中序式元素</th>
<th>stack</th>
<th>後序式</th>
</tr>
</thead>
<tbody>
<tr>
<td>(</td>
<td>(</td>
<td>無</td>
</tr>
<tr>
<td>3</td>
<td>(</td>
<td>3</td>
</tr>
<tr>
<td>+</td>
<td>(+</td>
<td>3</td>
</tr>
<tr>
<td>2</td>
<td>(+</td>
<td>32</td>
</tr>
<tr>
<td>)</td>
<td></td>
<td>32+</td>
</tr>
<tr>
<td>*</td>
<td>*</td>
<td>32+</td>
</tr>
<tr>
<td>(</td>
<td>*(</td>
<td>32+</td>
</tr>
<tr>
<td>4</td>
<td>*(</td>
<td>32+4</td>
</tr>
<tr>
<td>-</td>
<td>*(-</td>
<td>32+4</td>
</tr>
<tr>
<td>1</td>
<td>*(-</td>
<td>32+41</td>
</tr>
<tr>
<td>)</td>
<td>*</td>
<td>32+41-</td>
</tr>
<tr>
<td></td>
<td></td>
<td>32+41-*</td>
</tr>
</tbody>
</table>
<figure class="highlight cpp"><table><tr><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string"><iostream></span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string"><stack></span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string"><string></span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> std;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">order</span><span class="params">(<span class="type">char</span> sy)</span> </span>{</span><br><span class="line"> <span class="keyword">if</span> (sy == <span class="string">'+'</span> || sy == <span class="string">'-'</span>) {</span><br><span class="line"> <span class="keyword">return</span> <span class="number">1</span>;</span><br><span class="line"> } <span class="keyword">else</span> <span class="keyword">if</span> (sy == <span class="string">'*'</span> || sy == <span class="string">'/'</span>) {</span><br><span class="line"> <span class="keyword">return</span> <span class="number">2</span>;</span><br><span class="line"> } <span class="keyword">else</span> {</span><br><span class="line"> <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line"> }</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span> </span>{</span><br><span class="line"> string str;</span><br><span class="line"></span><br><span class="line"> <span class="keyword">while</span> (cin >> str) {</span><br><span class="line"> stack<<span class="type">char</span>> symbol; <span class="comment">// stack 放運算子</span></span><br><span class="line"> string postfix = <span class="string">""</span>; <span class="comment">// 後序式</span></span><br><span class="line"></span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; str[i] != <span class="string">'\0'</span>; i++) {</span><br><span class="line"> <span class="keyword">if</span> (str[i] == <span class="string">'('</span>) { <span class="comment">// 符號處理</span></span><br><span class="line"> symbol.<span class="built_in">push</span>(<span class="string">'('</span>);</span><br><span class="line"> } <span class="keyword">else</span> <span class="keyword">if</span> (str[i] == <span class="string">'+'</span> || str[i] == <span class="string">'-'</span> || str[i] == <span class="string">'*'</span> || str[i] == <span class="string">'/'</span>) {</span><br><span class="line"> <span class="keyword">if</span> (symbol.<span class="built_in">empty</span>()) {</span><br><span class="line"> symbol.<span class="built_in">push</span>(str[i]);</span><br><span class="line"> } <span class="keyword">else</span> {</span><br><span class="line"> <span class="type">int</span> a = <span class="built_in">order</span>(symbol.<span class="built_in">top</span>()), b = <span class="built_in">order</span>(str[i]);</span><br><span class="line"> <span class="comment">// 若 a 是 *, b 是 -, 則權重大的先放進後序式</span></span><br><span class="line"> <span class="keyword">while</span> (a >= b) {</span><br><span class="line"> postfix.<span class="built_in">push_back</span>(symbol.<span class="built_in">top</span>());</span><br><span class="line"> symbol.<span class="built_in">pop</span>();</span><br><span class="line"> <span class="keyword">if</span> (symbol.<span class="built_in">empty</span>()) <span class="keyword">break</span>;</span><br><span class="line"> }</span><br><span class="line"> symbol.<span class="built_in">push</span>(str[i]);</span><br><span class="line"> }</span><br><span class="line"> } <span class="keyword">else</span> <span class="keyword">if</span> (str[i] == <span class="string">')'</span>) {</span><br><span class="line"> <span class="keyword">while</span> (symbol.<span class="built_in">top</span>() != <span class="string">'('</span>) {</span><br><span class="line"> postfix.<span class="built_in">push_back</span>(symbol.<span class="built_in">top</span>());</span><br><span class="line"> symbol.<span class="built_in">pop</span>();</span><br><span class="line"> }</span><br><span class="line"> symbol.<span class="built_in">pop</span>();</span><br><span class="line"> } <span class="keyword">else</span> { <span class="comment">// 數字處裡</span></span><br><span class="line"> postfix.<span class="built_in">push_back</span>(str[i]);</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> <span class="comment">// 將未拿出的符號提出</span></span><br><span class="line"> <span class="keyword">while</span> (!symbol.<span class="built_in">empty</span>()) {</span><br><span class="line"> postfix.<span class="built_in">push_back</span>(symbol.<span class="built_in">top</span>());</span><br><span class="line"> symbol.<span class="built_in">pop</span>();</span><br><span class="line"> }</span><br><span class="line"> <span class="comment">// 後序式輸出</span></span><br><span class="line"> cout << postfix << <span class="string">"\n"</span>;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
]]></content>
<categories>
<category>筆記</category>
</categories>
<tags>
<tag>筆記</tag>
<tag>C++</tag>
</tags>
</entry>
<entry>
<title>【筆記】Linux 指令</title>
<url>/learning-linux-command/</url>
<content><![CDATA[<h1 id="linux-指令"><a class="markdownIt-Anchor" href="#linux-指令"></a> Linux 指令</h1>
<h3 id="base64-加密解密"><a class="markdownIt-Anchor" href="#base64-加密解密"></a> base64 – 加密/解密</h3>
<p>可配合回傳來解 base64 過的字串</p>
<details class="note info"><summary><p>選項</p>
</summary>
<ul>
<li><code>-d</code>:解密(Decode)</li>
<li><code>-e</code>:加密(Encode)</li>
</ul>
</details>
<figure class="highlight bash"><table><tr><td class="code"><pre><span class="line"><span class="built_in">echo</span> <span class="string">"cGljb0NURntNRTc0RDQ3QV9ISUREM05fZDhjMzgxZmR9Cg=="</span> | <span class="built_in">base64</span> -d</span><br></pre></td></tr></table></figure>
<figure class="highlight autohotkey"><table><tr><td class="code"><pre><span class="line">picoCTF{ME74D47<span class="built_in">A_HIDD3N</span>_d8c381fd}</span><br></pre></td></tr></table></figure>
<h3 id="binwalk-分析檔案"><a class="markdownIt-Anchor" href="#binwalk-分析檔案"></a> binwalk – 分析檔案</h3>
<h3 id="bvi"><a class="markdownIt-Anchor" href="#bvi"></a> bvi</h3>
<p>輸入 <code>:q</code> 退出 bvi</p>
<h3 id="cat-串接或輸出檔案內容"><a class="markdownIt-Anchor" href="#cat-串接或輸出檔案內容"></a> cat – 串接或輸出檔案內容</h3>
<figure class="highlight stata"><table><tr><td class="code"><pre><span class="line"><span class="keyword">cat</span> [選項] <<span class="keyword">file</span>></span><br></pre></td></tr></table></figure>
<details class="note info"><summary><p>選項</p>
</summary>
<ul>
<li><code>-n</code>:編號行數</li>
<li><code>-E</code>:行尾輸出錢字號</li>
</ul>
</details>
<h3 id="chmod-控制使用者對檔案的權限"><a class="markdownIt-Anchor" href="#chmod-控制使用者對檔案的權限"></a> chmod – 控制使用者對檔案的權限</h3>
<p>權限數字</p>
<figure class="highlight css"><table><tr><td class="code"><pre><span class="line">rwxrwxr-<span class="attribute">x</span></span><br></pre></td></tr></table></figure>
<p>以三個三個為一組,每個字代表二進制,並相加就是數字了</p>
<p><code>rwx</code>, <code>rwx</code>, <code>r-x</code></p>
<p><code>4+2+1</code>, <code>4+2+1</code>, <code>4+0+1</code></p>
<p>代表著 775</p>
<h3 id="cp-複製目錄複製檔案"><a class="markdownIt-Anchor" href="#cp-複製目錄複製檔案"></a> cp – 複製目錄/複製檔案</h3>
<h3 id="curl-用來分析網頁行為及研究跳轉和參數等等"><a class="markdownIt-Anchor" href="#curl-用來分析網頁行為及研究跳轉和參數等等"></a> curl – 用來分析網頁行為及研究跳轉和參數等等</h3>
<figure class="highlight bash"><table><tr><td class="code"><pre><span class="line">curl [選項] <URL></span><br></pre></td></tr></table></figure>
<details class="note info"><summary><p>選項</p>
</summary>
<ul>
<li><code>-I</code>:僅查看 Header 內容</li>
</ul>
</details>
<h3 id="exiftool"><a class="markdownIt-Anchor" href="#exiftool"></a> exiftool</h3>
<p>Linux 的 ExifTool 是一個功能強大的命令列工具,用於 讀取、寫入和編輯圖像和音訊檔案中的元數據。它支援非常廣泛的檔案格式,包括:</p>
<ul>
<li>圖像格式:JPEG、TIFF、PNG、GIF、BMP、PSD、RAW 等</li>
<li>音訊格式:MP3、WAV、FLAC、M4A、OGG 等</li>
<li>其他格式:PDF、HTML、Word 文檔、Excel 文件等</li>
</ul>
<figure class="highlight bash"><table><tr><td class="code"><pre><span class="line">exiftool <file></span><br></pre></td></tr></table></figure>
<details class="note info"><summary><p>範例輸出</p>
</summary>
<figure class="highlight apache"><table><tr><td class="code"><pre><span class="line"><span class="attribute">ExifTool</span> Version Number : <span class="number">12</span>.<span class="number">40</span></span><br><span class="line"><span class="attribute">File</span> Name : ukn_reality.jpg</span><br><span class="line"><span class="attribute">Directory</span> : .</span><br><span class="line"><span class="attribute">File</span> Size : <span class="number">2</span>.<span class="number">2</span> MiB</span><br><span class="line"><span class="attribute">File</span> Modification Date/Time : <span class="number">2024</span>:<span class="number">03</span>:<span class="number">12</span> <span class="number">00</span>:<span class="number">05</span>:<span class="number">57</span>+<span class="number">00</span>:<span class="number">00</span></span><br><span class="line"><span class="attribute">File</span> Access Date/Time : <span class="number">2024</span>:<span class="number">03</span>:<span class="number">12</span> <span class="number">00</span>:<span class="number">05</span>:<span class="number">57</span>+<span class="number">00</span>:<span class="number">00</span></span><br><span class="line"><span class="attribute">File</span> Inode Change Date/Time : <span class="number">2024</span>:<span class="number">09</span>:<span class="number">17</span> <span class="number">14</span>:<span class="number">29</span>:<span class="number">19</span>+<span class="number">00</span>:<span class="number">00</span></span><br><span class="line"><span class="attribute">File</span> Permissions : -rw-r--r--</span><br><span class="line"><span class="attribute">File</span> Type : JPEG</span><br><span class="line"><span class="attribute">File</span> Type Extension : jpg</span><br><span class="line"><span class="attribute">MIME</span> Type : image/jpeg</span><br><span class="line"><span class="attribute">JFIF</span> Version : <span class="number">1</span>.<span class="number">01</span></span><br><span class="line"><span class="attribute">Resolution</span> Unit : inches</span><br><span class="line"><span class="attribute">X</span> Resolution : <span class="number">72</span></span><br><span class="line"><span class="attribute">Y</span> Resolution : <span class="number">72</span></span><br><span class="line"><span class="attribute">XMP</span> Toolkit : Image::ExifTool <span class="number">11</span>.<span class="number">88</span></span><br><span class="line"><span class="attribute">Attribution</span> URL : cGljb0NURntNRTc0RDQ3QV9ISUREM05fZDhjMzgxZmR9Cg==</span><br><span class="line"><span class="attribute">Image</span> Width : <span class="number">4308</span></span><br><span class="line"><span class="attribute">Image</span> Height : <span class="number">2875</span></span><br><span class="line"><span class="attribute">Encoding</span> Process : Baseline DCT, Huffman coding</span><br><span class="line"><span class="attribute">Bits</span> Per Sample : <span class="number">8</span></span><br><span class="line"><span class="attribute">Color</span> Components : <span class="number">3</span></span><br><span class="line"><span class="attribute">Y</span> Cb Cr Sub Sampling : YCbCr4:<span class="number">2</span>:<span class="number">0</span> (<span class="number">2</span> <span class="number">2</span>)</span><br><span class="line"><span class="attribute">Image</span> Size : <span class="number">4308</span>x2875</span><br><span class="line"><span class="attribute">Megapixels</span> : <span class="number">12</span>.<span class="number">4</span></span><br></pre></td></tr></table></figure>
</details>
<h3 id="file"><a class="markdownIt-Anchor" href="#file"></a> file</h3>
<h3 id="find-找檔案-目錄-名稱-天數"><a class="markdownIt-Anchor" href="#find-找檔案-目錄-名稱-天數"></a> find – 找檔案、目錄、名稱、天數</h3>
<blockquote>
<p>find找檔案、目錄、名稱、天數…<span class="exturl" data-url="aHR0cHM6Ly9tZWRpdW0uY29tL0BEeWxhbi5XYW5nL2xpbnV4JUU0JUI4JThCZmluZCVFNiU4QyU4NyVFNCVCQiVBNCVFNyU5QSU4NCVFNyVBRCU4NiVFOCVBOCU5OC1hYTczM2ZkZjY0ZWU=">參考<i class="fa fa-external-link-alt"></i></span></p>
</blockquote>
<details class="note info"><summary><p>選項</p>
</summary>
<ul>
<li><code>-mtime</code> : 搜尋檔案的修改時間(天)</li>
<li><code>-mmin</code> : 搜尋檔案的修改時間(分鐘)</li>
<li><code>-ctime</code> : 搜尋檔案的建立時間(天)</li>
<li><code>-cmin</code> : 搜尋檔案的建立時間(分鐘)</li>
<li><code>-atime</code> : 搜尋檔案的最後開啟時間(天)</li>
<li><code>-amin</code> : 搜尋檔案的最後開啟時間(分鐘)</li>
<li><code>-size</code> : 搜尋檔案的大小</li>
<li><code>-name</code> : 搜尋檔案名稱(有分大小寫)</li>
<li><code>-iname</code> : 搜尋檔案名稱(不分大小寫)</li>
<li><code>-type f</code> : 只搜尋“檔案”</li>
<li><code>-type d</code> : 只搜尋“目錄”</li>
<li><code>-exec <cmd> {} \;</code> : 把搜尋結果導向指令來執行</li>
<li><code>-user</code> : 搜尋特定使用者的檔案或目錄</li>
<li><code>-o</code> : 邏輯運算為「或」的意思</li>
<li><code>-print</code> : 將結果印出於螢幕</li>
</ul>
</details>
<p>配合 grep 就可以查找某個檔案裡的內容</p>
<p>Example:</p>
<figure class="highlight bash"><table><tr><td class="code"><pre><span class="line">find ./ | grep -rIl <span class="string">"picoCTF"</span></span><br></pre></td></tr></table></figure>
<h3 id="grep"><a class="markdownIt-Anchor" href="#grep"></a> grep</h3>
<figure class="highlight bash"><table><tr><td class="code"><pre><span class="line">grep [選項] <span class="string">"搜尋字串"</span> 檔案</span><br></pre></td></tr></table></figure>
<details class="note info"><summary><p>選項</p>
</summary>
<ul>
<li><code>-i</code>:忽略大小寫進行搜尋。</li>
<li><code>-v</code>:反向搜尋,顯示不包含字串的行。</li>
<li><code>-r</code>:遞迴搜尋目錄中的所有文件。</li>
<li><code>-n</code>:顯示匹配行的行號。</li>
<li><code>-l</code>:只顯示包含匹配字串的文件名稱。</li>
<li><code>-C [數字]</code>:顯示上下文,包含匹配行之前和之後的數行。</li>
</ul>
</details>
<h3 id="ln"><a class="markdownIt-Anchor" href="#ln"></a> ln</h3>
<h3 id="man"><a class="markdownIt-Anchor" href="#man"></a> man</h3>
<h3 id="mkdir-建立目錄"><a class="markdownIt-Anchor" href="#mkdir-建立目錄"></a> mkdir – 建立目錄</h3>
<figure class="highlight bash"><table><tr><td class="code"><pre><span class="line"><span class="built_in">mkdir</span> <folder_name></span><br></pre></td></tr></table></figure>
<h3 id="mv"><a class="markdownIt-Anchor" href="#mv"></a> mv</h3>
<h3 id="ncnetcat指令"><a class="markdownIt-Anchor" href="#ncnetcat指令"></a> nc(Netcat)指令</h3>
<h3 id="rm-刪除檔案"><a class="markdownIt-Anchor" href="#rm-刪除檔案"></a> rm – 刪除檔案</h3>
<p>刪除該目錄下的所有檔案</p>
<figure class="highlight bash"><table><tr><td class="code"><pre><span class="line"><span class="built_in">rm</span> -r *</span><br></pre></td></tr></table></figure>
<h3 id="rmdir-刪除目錄"><a class="markdownIt-Anchor" href="#rmdir-刪除目錄"></a> rmdir – 刪除目錄</h3>
<h3 id="screen"><a class="markdownIt-Anchor" href="#screen"></a> screen</h3>
<p>進入 screen shell</p>
<figure class="highlight shell"><table><tr><td class="code"><pre><span class="line">screen</span><br></pre></td></tr></table></figure>
<p>刪除 screen</p>
<figure class="highlight shell"><table><tr><td class="code"><pre><span class="line">screen -S "ID/名稱" -X quit</span><br></pre></td></tr></table></figure>
<p>卸離目前 screen</p>
<p><code>ctrl</code> + <code>a</code> + <code>d</code></p>
<h3 id="stat-檔案資訊"><a class="markdownIt-Anchor" href="#stat-檔案資訊"></a> stat – 檔案資訊</h3>
<h3 id="strings"><a class="markdownIt-Anchor" href="#strings"></a> strings</h3>
<blockquote>
<p>主要用來從二進制文件或非純文字檔案中提取出可讀的文字 [name=ChatGPT]</p>
</blockquote>
<figure class="highlight bash"><table><tr><td class="code"><pre><span class="line">strings <file_name></span><br></pre></td></tr></table></figure>
<p>可搭配 <code>grep</code> 指令,來尋找特定字串</p>
<figure class="highlight bash"><table><tr><td class="code"><pre><span class="line">strings <file_name> | grep <span class="string">"特定字串"</span></span><br></pre></td></tr></table></figure>
<h3 id="touch-建立檔案"><a class="markdownIt-Anchor" href="#touch-建立檔案"></a> touch – 建立檔案</h3>
<h3 id="unzip-解壓縮指令"><a class="markdownIt-Anchor" href="#unzip-解壓縮指令"></a> unzip – 解壓縮指令</h3>
<figure class="highlight bash"><table><tr><td class="code"><pre><span class="line">unzip <.zip></span><br></pre></td></tr></table></figure>
<h3 id="vim"><a class="markdownIt-Anchor" href="#vim"></a> vim</h3>
<ul>
<li>按 <code>i</code> 進入編輯模式,在案 <code>ESC</code> 退出編輯模式</li>
<li>輸入 <code>:wq</code> 退出 vim</li>
</ul>
<h3 id="wget-從網路上檔案下載檔案到-linux"><a class="markdownIt-Anchor" href="#wget-從網路上檔案下載檔案到-linux"></a> wget – 從網路上檔案下載檔案到 Linux</h3>
<details class="note info"><summary><p>選項</p>
</summary>
<ul>
<li><code>-n</code>:在每一行之前加上檔案中的相對行號。</li>
<li><code>-r</code>:遞迴地搜尋目錄。</li>
</ul>
</details>
<ul>
<li><code>--user-agent</code>:修改 UA 以達到模仿瀏覽器瀏覽效果</li>
</ul>
<h4 id="下載整個網站砍站offline-browsing"><a class="markdownIt-Anchor" href="#下載整個網站砍站offline-browsing"></a> 下載整個網站(砍站)(Offline Browsing)</h4>
<p>使用選項 <code>--mirror</code> 範例:</p>
<figure class="highlight bash"><table><tr><td class="code"><pre><span class="line">wget --mirror -p --convert-links -P ./my_folder http://edition.cnn.com/</span><br></pre></td></tr></table></figure>
<ul>
<li><code>--mirror</code>:下載整個網站。</li>
<li><code>-p</code>:自動下載顯示網頁所需要的所有相關檔案。</li>
<li><code>--convert-links</code>:自動將下載網頁中的超連結,轉換為本地的連結。</li>
<li><code>-P ./my_folder</code>:將下載的檔案放在 ./my_folder 目錄下。</li>
</ul>
]]></content>
<tags>
<tag>筆記</tag>
<tag>Linux</tag>
<tag>指令</tag>
</tags>
</entry>
<entry>
<title>用 Hexo 在 GitHub 架站吧</title>
<url>/make-a-blog-with-hexo/</url>
<content><![CDATA[<h1 id="blog-是什麼"><a class="markdownIt-Anchor" href="#blog-是什麼"></a> Blog 是什麼?</h1>
<blockquote>
<p>是一種線上日記型式的個人網站,藉由張貼文章、圖片或影片來記錄生活、抒發情感或分享資訊。部落格上的文章通常根據張貼時間,以倒序方式由新到舊排列。<br />
by <span class="exturl" data-url="aHR0cHM6Ly96aC5tLndpa2lwZWRpYS5vcmcvd2lraS8lRTclQjYlQjIlRTglQUElOEM=">維基百科<i class="fa fa-external-link-alt"></i></span></p>
</blockquote>
<h1 id="為何要寫-blog"><a class="markdownIt-Anchor" href="#為何要寫-blog"></a> 為何要寫 Blog?</h1>
<p>部落格可以為自己記錄成長軌跡,不只是日常稱活的趣事,也可以是科普文章,主題由自己策劃,選擇自己喜歡或擅長的領域,發布一篇文章,使更多人看到。別人既可以從文章中得到娛樂與知識,自己也可以得到寫作的提升,以及規劃文章的能力和選擇客群的能力。</p>
<h1 id="如何用-hexo-在-github-架站呢"><a class="markdownIt-Anchor" href="#如何用-hexo-在-github-架站呢"></a> 如何用 Hexo 在 GitHub 架站呢?</h1>
<h2 id="什麼是-hexo"><a class="markdownIt-Anchor" href="#什麼是-hexo"></a> 什麼是 Hexo?</h2>
<p>進入 <span class="exturl" data-url="aHR0cHM6Ly9oZXhvLmlvL3poLXR3Lw==">Hexo 官網<i class="fa fa-external-link-alt"></i></span> 後,中間的大字足以描述什麼是 Hexo。</p>
<blockquote>
<p>快速、簡單且強大的網誌框架<br />
by Hexo</p>
</blockquote>
<p>沒錯!它是一個可以幫你快速搭建部落格網頁的工具。</p>
<h2 id="什麼是-github"><a class="markdownIt-Anchor" href="#什麼是-github"></a> 什麼是 GitHub?</h2>
<p>GitHub 是一個商業網站,是目前全球最大的 Git Server。你可以在上面分享你的程式碼、結交相同志趣的朋友、貢獻自己的程式碼將一個專案做的越來越好。當然別人也可以給你回饋,有如一個程式碼的社群,而且上面的環境很乾淨。<br />
同時,這個網站也是開發者最好的履歷,因為做過的專案、寫過的 code、做了什麼貢獻、有什麼勳章,都可以一目瞭然。</p>
<p>Git 與 GitHub 差別在哪?</p>
<p>Git 是工具,GitHub 是網站。<br />
Git 是一個版本控制系統,簡單來說就是一個可以把檔案的狀態作為更新歷史記錄保存起來,<br />
而 GitHub 就是一個提供 Git Server 的網站平台。</p>
<p>所以現在就來用 Hexo 做做看自己的網站吧!</p>
<h2 id="創建-github-帳號-設置專案"><a class="markdownIt-Anchor" href="#創建-github-帳號-設置專案"></a> 創建 GitHub 帳號 + 設置專案</h2>
<p>進入 <span class="exturl" data-url="aHR0cHM6Ly9naXRodWIuY29tLw==">GitHub 官網<i class="fa fa-external-link-alt"></i></span> 後,註冊 <code>Sign up</code> 並登入 <code>Sign in</code><br />
<img src="https://raw.githubusercontent.com/huangmayor0905/image-hosting/main/img/image.png" alt="" /></p>
<p>進到 GitHub 首頁應該長這樣<br />
<img src="https://raw.githubusercontent.com/huangmayor0905/image-hosting/main/img/github-homepage.png" alt="" /></p>
<p>右上角有個加號點下去之後,選擇 <code>New repository</code>,進入後的畫面如下<br />
<img src="https://raw.githubusercontent.com/huangmayor0905/image-hosting/main/img/new_repo.png" alt="" /></p>
<p>於 <code>Repository name</code> 那一欄填上 <code>使用者名稱.github.io</code>。忘記使用者名稱的話,其實就在左側一欄。<br />
<img src="https://raw.githubusercontent.com/huangmayor0905/image-hosting/main/img/new-repository.png" alt="" /></p>
<p>接著就按下綠色的創建鍵 <code>Create repository</code> 即可。</p>
<p>進入專案後,點擊 <code>setting</code> 選項。<br />
<img src="https://raw.githubusercontent.com/huangmayor0905/image-hosting/main/img/github-io-setting.png" alt="" /></p>
<p>並設置主題,後續會更改,可以不用考慮太多,選擇其一即可。<br />
<img src="https://raw.githubusercontent.com/huangmayor0905/image-hosting/main/img/github-io-theme.png" alt="" /><br />
<img src="https://raw.githubusercontent.com/huangmayor0905/image-hosting/main/img/choose-theme.png" alt="" /></p>
<p>你完成了你的網站啦!!!網址為:<code>https://使用者名稱.github.io/</code>,不過剛創建的網站可能要稍後才會顯示。</p>
<h2 id="選定好部落格的位置"><a class="markdownIt-Anchor" href="#選定好部落格的位置"></a> 選定好部落格的位置</h2>
<p>由於我們會存文章在電腦裡面,所以先選好位置。<br />
我的部落格位置是</p>
<figure class="highlight text"><table><tr><td class="code"><pre><span class="line">D 槽</span><br><span class="line">└── Blog // 直接新建一個資料夾放你的 Hexo 文件</span><br></pre></td></tr></table></figure>
<h2 id="hexo-登場"><a class="markdownIt-Anchor" href="#hexo-登場"></a> Hexo 登場!</h2>
<p>我們的主角是 Hexo,當然,也有其他的部落格工具可以使用,如:Hugo, Gatsby, Vuepress, Jekyll… 等。<br />
Hexo 的主題多,且擴充的外掛也很多,所以才使用它當我們的工具,但缺點是當文章足夠多時,上傳速度會明顯比 Hugo 慢很多(超多),不過看在主題好看的誘惑下,我還是選擇了 Hexo。<br />
接下來,來配置 Hexo 環境吧!</p>
<h3 id="前置安裝"><a class="markdownIt-Anchor" href="#前置安裝"></a> 前置安裝</h3>
<p>在使用 Hexo 之前,請先下載:</p>
<ol>
<li><span class="exturl" data-url="aHR0cHM6Ly9ub2RlanMub3JnL2VuLw==">Node.js<i class="fa fa-external-link-alt"></i></span></li>
</ol>
<p>我們選擇穩定的版本,Hexo 官方有提醒至少要大於 10.0 的版本,我們選左邊的 16.15.0,直接安裝即可。<br />
<img src="https://raw.githubusercontent.com/huangmayor0905/image-hosting/main/img/node-download.png" alt="" /></p>
<ol start="2">
<li><span class="exturl" data-url="aHR0cHM6Ly9naXQtc2NtLmNvbS8=">Git<i class="fa fa-external-link-alt"></i></span></li>
</ol>
<p>也是直接安裝即可。<br />
<img src="https://raw.githubusercontent.com/huangmayor0905/image-hosting/main/img/git-download.png" alt="" /></p>
<ol start="3">
<li><span class="exturl" data-url="aHR0cHM6Ly9jb2RlLnZpc3VhbHN0dWRpby5jb20v">Visual Studio Code<i class="fa fa-external-link-alt"></i></span></li>
</ol>
<p>這是一個具有很多外掛的文字編輯器,一樣也是直接安裝即可。<br />
<img src="https://raw.githubusercontent.com/huangmayor0905/image-hosting/main/img/vscode-download.png" alt="" /></p>
<h3 id="初始設置"><a class="markdownIt-Anchor" href="#初始設置"></a> 初始設置</h3>
<p>接著我們來當駭客(誤)<br />
我們開啟 <code>Blog</code> 位置的終端機。輸入 cmd<br />
<img src="https://raw.githubusercontent.com/huangmayor0905/image-hosting/main/img/hexo-blog.png" alt="" /></p>
<p>在 cmd 裡輸入下面指令。</p>
<figure class="highlight bash"><table><tr><td class="code"><pre><span class="line">npm install hexo-cli -g</span><br></pre></td></tr></table></figure>
<p>等待下載後,輸入 <code>hexo -v</code> 也就是 <code>hexo version</code> (想也知道你們會選 hexo -v)</p>
<figure class="highlight bash"><table><tr><td class="code"><pre><span class="line">hexo -v</span><br></pre></td></tr></table></figure>
<p>有出現各項版本就確定安裝好了!<br />
<img src="https://raw.githubusercontent.com/huangmayor0905/image-hosting/main/img/hexo-v.png" alt="" /></p>
<p>接著配置 Hexo 相關初始套件,輸入下方指令。一行一行複製,<code><資料夾名稱></code> 記得改掉,我建置的名稱是 MyBlog。</p>
<figure class="highlight bash"><table><tr><td class="code"><pre><span class="line">hexo init <資料夾名稱></span><br><span class="line"><span class="built_in">cd</span> <資料夾名稱></span><br><span class="line">npm install</span><br><span class="line">npm install hexo-deployer-git --save</span><br></pre></td></tr></table></figure>
<p>第 1 行:新建一個資料夾<br />
第 2 行:選擇資料夾並進入該資料夾<br />
第 3 行:安裝 Hexo 相關初始套件<br />
第 4 行:安裝 Git 部屬套件</p>
<p>你常用的資料應該有</p>
<figure class="highlight text"><table><tr><td class="code"><pre><span class="line">D 槽</span><br><span class="line">└── Blog</span><br><span class="line"> └── MyBlog</span><br><span class="line"> ├── package.json # 各項模組版本</span><br><span class="line"> ├── scaffolds # post, page 和 draft 模板</span><br><span class="line"> ├── source # 資源(資料)</span><br><span class="line"> | └── _posts # 文章資料夾,你所有的文章都在這</span><br><span class="line"> ├── themes # 主題(後續會教如何使用其他主題)</span><br><span class="line"> └── _config.yml # 部落格配置</span><br></pre></td></tr></table></figure>
<p>這樣你就完成 Hexo 的配置了。有沒有覺得自己超棒 (●’◡’●)</p>
<h2 id="設置-blog-相關訊息"><a class="markdownIt-Anchor" href="#設置-blog-相關訊息"></a> 設置 Blog 相關訊息</h2>
<p>接下來就要用到 VS code 啦~<br />
右鍵 D:/Blog/MyBlog,選擇 <code>以 code 開啟</code> 圖標示 VS code 的那個選項,就可以開始編輯屬於自己的部落格啦。<br />
<img src="https://raw.githubusercontent.com/huangmayor0905/image-hosting/main/img/open-by-code.png" alt="" /></p>
<p>在 6 ~ 12 行編輯部落格訊息</p>
<figure class="highlight yml"><table><tr><td class="code"><pre><span class="line"><span class="attr">title:</span> <span class="string">Blog</span> <span class="string">test</span> <span class="comment"># 部落格標題</span></span><br><span class="line"><span class="attr">subtitle:</span> <span class="string">'這是一個簡單的部落格'</span> <span class="comment"># 副標題,以單引好包起來</span></span><br><span class="line"><span class="attr">description:</span> <span class="string">''</span> <span class="comment"># 描述,以單引號包起來</span></span><br><span class="line"><span class="attr">keywords:</span> <span class="comment"># 關鍵詞,直接輸入字詞,以半形逗點隔開</span></span><br><span class="line"><span class="attr">author:</span> <span class="comment"># 作者</span></span><br><span class="line"><span class="attr">language:</span> <span class="string">zh-TW</span> <span class="comment"># 語言</span></span><br><span class="line"><span class="attr">timezone:</span> <span class="string">''</span> <span class="comment"># 空白以使用系統時間</span></span><br></pre></td></tr></table></figure>
<p>在 16 行編輯網站網址</p>
<figure class="highlight yml"><table><tr><td class="code"><pre><span class="line"><span class="attr">url:</span> <span class="string">https://username.github.io/</span></span><br></pre></td></tr></table></figure>
<p>接著設定部屬訊息,這通常在最下面</p>
<figure class="highlight yml"><table><tr><td class="code"><pre><span class="line"><span class="attr">deploy:</span></span><br><span class="line"> <span class="attr">type:</span> <span class="string">git</span></span><br><span class="line"> <span class="attr">repo:</span> <span class="string">https://github.com/username/username.github.io.git</span></span><br><span class="line"> <span class="attr">branch:</span> <span class="string">master</span></span><br></pre></td></tr></table></figure>
<p>接著部屬看看,組合技:</p>
<figure class="highlight bash"><table><tr><td class="code"><pre><span class="line">hexo cl</span><br><span class="line">hexo g</span><br><span class="line">hexo d</span><br></pre></td></tr></table></figure>
<p>終於完成了,文章有任何問題,或是不清楚的地方歡迎留言</p>
]]></content>
<categories>
<category>Hexo 部落格</category>
</categories>
<tags>
<tag>Hexo</tag>
<tag>GitHub</tag>
<tag>部落格</tag>
</tags>
</entry>
<entry>
<title>【小作品】Minesweeper</title>
<url>/minesweeper/</url>
<content><![CDATA[<h2 id="簡述"><a class="markdownIt-Anchor" href="#簡述"></a> 簡述</h2>
<p>高中生涯就快告一段落了,在畢業前一週閒閒沒事,一直在想除了解題還可以幹嘛,所以更早之前做了一個地震報告的靜態網頁,現在又搞了一個踩地雷╰(*°▽°*)╯</p>
<p>主要會練習到:</p>
<ol>
<li>圖論的 <a href="https://huangmayor0905.github.io/cs/graph/bfs/">BFS</a> or DFS</li>
<li>C++ 時間戳轉當地時間</li>
<li>讀檔、寫檔(iofstream)</li>
</ol>
<span id="more"></span>
<h2 id="解說"><a class="markdownIt-Anchor" href="#解說"></a> 解說</h2>
<p>好,其實我覺得我的程式碼沒有很乾淨,都是為了分區塊才寫成函式,然後我也不太會寫 class 物件,所以就硬寫。目前比較不人性化的一點就是它是用終端機在玩,所以只能輸入座標來開格子,而且如果要插旗子的話又要叫使用者調模式,變得很難玩,所以我只讓使用者開格子。啊也建議只玩簡單,因為困難的格子有 16*30 格 (?</p>
<p>還有一點不好的地方是,如過第一手就是炸彈,我沒有做重新洗炸彈位置的機制。</p>
<div class="tabs" id="程式碼主要區塊解說"><ul class="nav-tabs"><li class="tab active"><a href="#程式碼主要區塊解說-1">difficalty</a></li><li class="tab"><a href="#程式碼主要區塊解說-2">playingGame</a></li><li class="tab"><a href="#程式碼主要區塊解說-3">writeFile</a></li><li class="tab"><a href="#程式碼主要區塊解說-4">showHistory</a></li></ul><div class="tab-content"><div class="tab-pane active" id="程式碼主要區塊解說-1"><p>控制遊戲難度,在個別遊戲難度上將地圖大小和炸彈數做調整。(其實不是,就是呼叫 playingGame 這個 function 而已)</p></div><div class="tab-pane" id="程式碼主要區塊解說-2"><p>這段在寫遊戲階段,我是用 BFS 來開格子,遇到周圍有炸彈就停止往下搜尋。</p></div><div class="tab-pane" id="程式碼主要區塊解說-3"><p>這裡用到寫檔的技巧,將耗時、遊戲時間、難度都寫進去,這樣就可以記錄歷史遊戲。</p></div><div class="tab-pane" id="程式碼主要區塊解說-4"><p>這裡用到讀檔,還有轉換時間戳的方式。將獨到的數字放進結構是 history 的 vector 容器裡並排序排名,cmp 也是為此排序所寫的。</p></div></div></div>
<p>剩下的變數就隨便啦,就是一些地圖大小、炸彈數和搜尋方向的變數。</p>
<h2 id="程式碼"><a class="markdownIt-Anchor" href="#程式碼"></a> 程式碼</h2>
<p>給大家看又臭又長的程式碼,也可以到我的 <span class="exturl" data-url="aHR0cHM6Ly9naXRodWIuY29tL2h1YW5nbWF5b3IwOTA1L0NQUC1nYW1lL2Jsb2IvbWFpbi9NaW5lc3dlZXBlci9tYWluLmNwcA==">GitHub 的 repo<i class="fa fa-external-link-alt"></i></span> 上看。</p>
<figure class="highlight cpp"><table><tr><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string"><bits/stdc++.h></span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> std;</span><br><span class="line"></span><br><span class="line"><span class="keyword">struct</span> <span class="title class_">history</span> {</span><br><span class="line"> <span class="type">int</span> t;</span><br><span class="line"> <span class="type">int</span> mode;</span><br><span class="line"> ll date;</span><br><span class="line">};</span><br><span class="line"></span><br><span class="line"><span class="keyword">struct</span> <span class="title class_">timeFormater</span> {</span><br><span class="line"> <span class="type">int</span> y;</span><br><span class="line"> <span class="type">int</span> m;</span><br><span class="line"> <span class="type">int</span> d;</span><br><span class="line"> <span class="type">int</span> hour;</span><br><span class="line"> <span class="type">int</span> min;</span><br><span class="line"> <span class="type">int</span> sec;</span><br><span class="line">};</span><br><span class="line"></span><br><span class="line"><span class="type">int</span> dir[<span class="number">8</span>][<span class="number">2</span>] = {</span><br><span class="line"> {<span class="number">-1</span>, <span class="number">-1</span>},</span><br><span class="line"> {<span class="number">-1</span>, <span class="number">0</span>},</span><br><span class="line"> {<span class="number">-1</span>, <span class="number">1</span>},</span><br><span class="line"> {<span class="number">0</span>, <span class="number">-1</span>},</span><br><span class="line"> {<span class="number">0</span>, <span class="number">1</span>},</span><br><span class="line"> {<span class="number">1</span>, <span class="number">-1</span>},</span><br><span class="line"> {<span class="number">1</span>, <span class="number">0</span>},</span><br><span class="line"> {<span class="number">1</span>, <span class="number">1</span>}};</span><br><span class="line"></span><br><span class="line"><span class="type">int</span> r = <span class="number">8</span>;</span><br><span class="line"><span class="type">int</span> c = <span class="number">8</span>;</span><br><span class="line"><span class="type">int</span> cntMine = <span class="number">10</span>;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">bool</span> <span class="title">cmp</span><span class="params">(history a, history b)</span> </span>{</span><br><span class="line"> <span class="keyword">if</span> (a.mode == b.mode) <span class="keyword">return</span> a.t < b.t;</span><br><span class="line"> <span class="keyword">return</span> a.mode < b.mode;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">clearScreen</span><span class="params">()</span></span>;</span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">printMenu</span><span class="params">()</span></span>;</span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">difficalty</span><span class="params">()</span></span>;</span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">playingGame</span><span class="params">(<span class="type">int</span> row, <span class="type">int</span> col, <span class="type">int</span> mine, <span class="type">int</span> mode)</span></span>;</span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">writeFile</span><span class="params">(<span class="type">int</span> st, <span class="type">int</span> et, <span class="type">int</span> m)</span></span>;</span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">showHistory</span><span class="params">()</span></span>;</span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">printArray</span><span class="params">(vector<vector<<span class="type">char</span>>> arr)</span></span>;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span> </span>{</span><br><span class="line"> <span class="built_in">srand</span>(<span class="built_in">time</span>(<span class="literal">NULL</span>));</span><br><span class="line"></span><br><span class="line"> <span class="keyword">while</span> (<span class="literal">true</span>) {</span><br><span class="line"> <span class="built_in">printMenu</span>();</span><br><span class="line"></span><br><span class="line"> <span class="type">int</span> option;</span><br><span class="line"> cin >> option;</span><br><span class="line"> <span class="keyword">if</span> (option == <span class="number">1</span>) {</span><br><span class="line"> <span class="built_in">difficalty</span>();</span><br><span class="line"> } <span class="keyword">else</span> <span class="keyword">if</span> (option == <span class="number">2</span>) {</span><br><span class="line"> <span class="built_in">showHistory</span>();</span><br><span class="line"> } <span class="keyword">else</span> <span class="keyword">if</span> (option == <span class="number">3</span>) {</span><br><span class="line"> <span class="keyword">break</span>;</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">clearScreen</span><span class="params">()</span> </span>{</span><br><span class="line"> <span class="built_in">system</span>(<span class="string">"cls"</span>);</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">printMenu</span><span class="params">()</span> </span>{</span><br><span class="line"> <span class="built_in">clearScreen</span>();</span><br><span class="line"> cout << <span class="string">"\n\n\n"</span></span><br><span class="line"> << <span class="string">" 1. Play "</span> << <span class="string">'\n'</span></span><br><span class="line"> << <span class="string">" 2. History "</span> << <span class="string">'\n'</span></span><br><span class="line"> << <span class="string">" 3. Exit "</span> << <span class="string">'\n'</span></span><br><span class="line"> << <span class="string">"\n\n\n"</span>;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">difficalty</span><span class="params">()</span> </span>{</span><br><span class="line"> <span class="built_in">clearScreen</span>();</span><br><span class="line"> cout << <span class="string">"\n\n\n"</span></span><br><span class="line"> << <span class="string">" 1. Eazy "</span> << <span class="string">'\n'</span></span><br><span class="line"> << <span class="string">" 2. Normal "</span> << <span class="string">'\n'</span></span><br><span class="line"> << <span class="string">" 3. Hard "</span> << <span class="string">'\n'</span></span><br><span class="line"> << <span class="string">"\n\n\n"</span>;</span><br><span class="line"> <span class="type">int</span> option;</span><br><span class="line"> cin >> option;</span><br><span class="line"></span><br><span class="line"> <span class="keyword">if</span> (option == <span class="number">1</span>) {</span><br><span class="line"> <span class="built_in">playingGame</span>(<span class="number">8</span>, <span class="number">8</span>, <span class="number">10</span>, <span class="number">1</span>);</span><br><span class="line"> } <span class="keyword">else</span> <span class="keyword">if</span> (option == <span class="number">2</span>) {</span><br><span class="line"> <span class="built_in">playingGame</span>(<span class="number">16</span>, <span class="number">16</span>, <span class="number">40</span>, <span class="number">2</span>);</span><br><span class="line"> } <span class="keyword">else</span> <span class="keyword">if</span> (option == <span class="number">3</span>) {</span><br><span class="line"> <span class="built_in">playingGame</span>(<span class="number">16</span>, <span class="number">30</span>, <span class="number">99</span>, <span class="number">3</span>);</span><br><span class="line"> }</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">playingGame</span><span class="params">(<span class="type">int</span> row, <span class="type">int</span> col, <span class="type">int</span> mine, <span class="type">int</span> mode)</span> </span>{</span><br><span class="line"> <span class="comment">// init</span></span><br><span class="line"> <span class="built_in">clearScreen</span>();</span><br><span class="line"></span><br><span class="line"> r = row;</span><br><span class="line"> c = col;</span><br><span class="line"> cntMine = mine;</span><br><span class="line"></span><br><span class="line"> vector<vector<<span class="type">int</span>>> grid;</span><br><span class="line"> vector<vector<<span class="type">char</span>>> gameMap;</span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i < r; i++) {</span><br><span class="line"> grid.<span class="built_in">push_back</span>({});</span><br><span class="line"> gameMap.<span class="built_in">push_back</span>({});</span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> j = <span class="number">0</span>; j < c; j++) {</span><br><span class="line"> grid[i].<span class="built_in">push_back</span>(<span class="number">0</span>);</span><br><span class="line"> gameMap[i].<span class="built_in">push_back</span>(<span class="string">'#'</span>);</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> set<pair<<span class="type">int</span>, <span class="type">int</span>>> Mine;</span><br><span class="line"> <span class="keyword">while</span> (Mine.<span class="built_in">size</span>() != cntMine) {</span><br><span class="line"> <span class="type">int</span> x = <span class="built_in">rand</span>() % r;</span><br><span class="line"> <span class="type">int</span> y = <span class="built_in">rand</span>() % c;</span><br><span class="line"> <span class="keyword">if</span> (Mine.<span class="built_in">find</span>({x, y}) == Mine.<span class="built_in">end</span>()) {</span><br><span class="line"> Mine.<span class="built_in">insert</span>({x, y});</span><br><span class="line"> grid[x][y] = <span class="number">1</span>;</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> <span class="type">int</span> x, y;</span><br><span class="line"> <span class="type">int</span> cntUnopened = r * c - cntMine;</span><br><span class="line"> <span class="type">time_t</span> startTime = <span class="built_in">time</span>(<span class="number">0</span>);</span><br><span class="line"></span><br><span class="line"> <span class="keyword">while</span> (cntUnopened != <span class="number">0</span>) {</span><br><span class="line"> <span class="built_in">clearScreen</span>();</span><br><span class="line"> <span class="built_in">printArray</span>(gameMap);</span><br><span class="line"> cout << <span class="string">"Input the coordinate (e.g. 3 5): "</span>;</span><br><span class="line"> cin >> x >> y;</span><br><span class="line"> <span class="keyword">if</span> (x < <span class="number">1</span> || x > r || y < <span class="number">1</span> || y > c) {</span><br><span class="line"> cout << <span class="string">"超過範圍,請重新輸入\n"</span>;</span><br><span class="line"> <span class="built_in">system</span>(<span class="string">"pause"</span>);</span><br><span class="line"> <span class="keyword">continue</span>;</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> queue<pair<<span class="type">int</span>, <span class="type">int</span>>> que;</span><br><span class="line"> que.<span class="built_in">push</span>({x - <span class="number">1</span>, y - <span class="number">1</span>});</span><br><span class="line"> <span class="keyword">while</span> (!que.<span class="built_in">empty</span>()) {</span><br><span class="line"> <span class="keyword">auto</span> now = que.<span class="built_in">front</span>();</span><br><span class="line"> que.<span class="built_in">pop</span>();</span><br><span class="line"></span><br><span class="line"> <span class="keyword">if</span> (grid[now.first][now.second] == <span class="number">1</span>) {</span><br><span class="line"> cout << <span class="string">"BOOM!\n"</span>;</span><br><span class="line"> <span class="built_in">system</span>(<span class="string">"pause"</span>);</span><br><span class="line"> <span class="keyword">return</span>;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">if</span> (grid[now.first][now.second] == <span class="number">-1</span>) <span class="keyword">continue</span>;</span><br><span class="line"></span><br><span class="line"> grid[now.first][now.second] = <span class="number">-1</span>;</span><br><span class="line"> cntUnopened--;</span><br><span class="line"></span><br><span class="line"> <span class="comment">// check for mine;</span></span><br><span class="line"> <span class="type">int</span> cntNearMine = <span class="number">0</span>;</span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> k = <span class="number">0</span>; k < <span class="number">8</span>; k++) {</span><br><span class="line"> <span class="type">int</span> nx = now.first + dir[k][<span class="number">0</span>];</span><br><span class="line"> <span class="type">int</span> ny = now.second + dir[k][<span class="number">1</span>];</span><br><span class="line"></span><br><span class="line"> <span class="keyword">if</span> (nx >= <span class="number">0</span> && nx < r && ny >= <span class="number">0</span> && ny < c) {</span><br><span class="line"> <span class="keyword">if</span> (grid[nx][ny] == <span class="number">1</span>) cntNearMine++;</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">if</span> (cntNearMine != <span class="number">0</span>) {</span><br><span class="line"> gameMap[now.first][now.second] = <span class="string">'0'</span> + cntNearMine;</span><br><span class="line"> <span class="keyword">continue</span>;</span><br><span class="line"> } <span class="keyword">else</span> {</span><br><span class="line"> gameMap[now.first][now.second] = <span class="string">'_'</span>;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> k = <span class="number">0</span>; k < <span class="number">8</span>; k++) {</span><br><span class="line"> <span class="type">int</span> nx = now.first + dir[k][<span class="number">0</span>];</span><br><span class="line"> <span class="type">int</span> ny = now.second + dir[k][<span class="number">1</span>];</span><br><span class="line"> <span class="keyword">if</span> (nx >= <span class="number">0</span> && nx < r && ny >= <span class="number">0</span> && ny < c) {</span><br><span class="line"> <span class="keyword">if</span> (grid[nx][ny] == <span class="number">0</span>) {</span><br><span class="line"> que.<span class="built_in">push</span>({nx, ny});</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> <span class="type">time_t</span> endTime = <span class="built_in">time</span>(<span class="number">0</span>);</span><br><span class="line"> <span class="built_in">writeFile</span>(startTime, endTime, mode);</span><br><span class="line"> cout << <span class="string">"You win!\n"</span>;</span><br><span class="line"> <span class="built_in">system</span>(<span class="string">"pause"</span>);</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">writeFile</span><span class="params">(<span class="type">int</span> st, <span class="type">int</span> et, <span class="type">int</span> m)</span> </span>{</span><br><span class="line"> ofstream out;</span><br><span class="line"> out.<span class="built_in">open</span>(<span class="string">"history.txt"</span>, ios::app);</span><br><span class="line"> <span class="keyword">if</span> (out.<span class="built_in">fail</span>()) {</span><br><span class="line"> cout << <span class="string">"output file opening failed\n"</span>;</span><br><span class="line"> <span class="keyword">return</span>;</span><br><span class="line"> }</span><br><span class="line"> out << et - st << <span class="string">' '</span> << st << <span class="string">' '</span> << m << endl;</span><br><span class="line"> out.<span class="built_in">close</span>();</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">showHistory</span><span class="params">()</span> </span>{</span><br><span class="line"> <span class="built_in">clearScreen</span>();</span><br><span class="line"> ifstream in;</span><br><span class="line"> in.<span class="built_in">open</span>(<span class="string">"history.txt"</span>);</span><br><span class="line"> <span class="keyword">if</span> (in.<span class="built_in">fail</span>()) {</span><br><span class="line"> cout << <span class="string">"input file opening failed\n"</span>;</span><br><span class="line"> <span class="keyword">return</span>;</span><br><span class="line"> }</span><br><span class="line"> string str;</span><br><span class="line"> vector<history> rank;</span><br><span class="line"> history tmp;</span><br><span class="line"> <span class="keyword">while</span> (in >> tmp.t >> tmp.date >> tmp.mode) rank.<span class="built_in">push_back</span>(tmp);</span><br><span class="line"> <span class="built_in">sort</span>(rank.<span class="built_in">begin</span>(), rank.<span class="built_in">end</span>(), cmp);</span><br><span class="line"></span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i < rank.<span class="built_in">size</span>(); i++) {</span><br><span class="line"> <span class="comment">// mode</span></span><br><span class="line"> <span class="keyword">switch</span> (rank[i].mode) {</span><br><span class="line"> <span class="keyword">case</span> <span class="number">1</span>:</span><br><span class="line"> cout << <span class="string">" 模式:簡單 \n"</span>;</span><br><span class="line"> <span class="keyword">break</span>;</span><br><span class="line"> <span class="keyword">case</span> <span class="number">2</span>:</span><br><span class="line"> cout << <span class="string">" 模式:普通 \n"</span>;</span><br><span class="line"> <span class="keyword">break</span>;</span><br><span class="line"> <span class="keyword">case</span> <span class="number">3</span>:</span><br><span class="line"> cout << <span class="string">" 模式:困難 \n"</span>;</span><br><span class="line"> <span class="keyword">break</span>;</span><br><span class="line"> <span class="keyword">default</span>:</span><br><span class="line"> <span class="keyword">break</span>;</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> <span class="comment">// time</span></span><br><span class="line"> cout << <span class="string">" 耗時:"</span> << rank[i].t << <span class="string">'\n'</span>;</span><br><span class="line"></span><br><span class="line"> <span class="comment">// date</span></span><br><span class="line"> <span class="type">time_t</span> gameTime = rank[i].date;</span><br><span class="line"> tm* t = <span class="built_in">localtime</span>(&gameTime);</span><br><span class="line"> cout << <span class="string">" 時間:"</span>;</span><br><span class="line"> cout << t->tm_year + <span class="number">1900</span> << <span class="string">'/'</span></span><br><span class="line"> << t->tm_mon + <span class="number">1</span> << <span class="string">'/'</span></span><br><span class="line"> << t->tm_mday << <span class="string">' '</span></span><br><span class="line"> << t->tm_hour << <span class="string">':'</span></span><br><span class="line"> << t->tm_min << <span class="string">':'</span></span><br><span class="line"> << t->tm_sec << <span class="string">'\n'</span>;</span><br><span class="line"> cout << <span class="string">"------------------------------\n"</span>;</span><br><span class="line"> }</span><br><span class="line"> in.<span class="built_in">close</span>();</span><br><span class="line"> <span class="built_in">system</span>(<span class="string">"pause"</span>);</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">printArray</span><span class="params">(vector<vector<<span class="type">char</span>>> arr)</span> </span>{</span><br><span class="line"> cout << <span class="string">" "</span>;</span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> j = <span class="number">0</span>; j < arr[<span class="number">0</span>].<span class="built_in">size</span>(); j++) cout << (j + <span class="number">1</span>) % <span class="number">10</span> << <span class="string">' '</span>;</span><br><span class="line"> cout << <span class="string">'\n'</span>;</span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i < arr.<span class="built_in">size</span>(); i++) {</span><br><span class="line"> cout << (i + <span class="number">1</span>) % <span class="number">10</span> << <span class="string">' '</span>;</span><br><span class="line"> <span class="keyword">for</span> (<span class="type">int</span> j = <span class="number">0</span>; j < arr[i].<span class="built_in">size</span>(); j++) {</span><br><span class="line"> cout << arr[i][j] << <span class="string">' '</span>;</span><br><span class="line"> }</span><br><span class="line"> cout << <span class="string">'\n'</span>;</span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
]]></content>
<categories>
<category>小作品</category>
</categories>
<tags>
<tag>小作品</tag>
<tag>踩地雷</tag>
<tag>Minesweeper</tag>
<tag>BFS</tag>
<tag>檔案讀寫</tag>
<tag>時間戳</tag>
</tags>
</entry>
<entry>
<title>【C++】 認識 Hello World</title>
<url>/meeting-hello-world/</url>
<content><![CDATA[<h1 id="第一個程式認識-hello-world"><a class="markdownIt-Anchor" href="#第一個程式認識-hello-world"></a> 第一個程式,認識 Hello world</h1>
<h2 id="前言"><a class="markdownIt-Anchor" href="#前言"></a> 前言</h2>
<p>說到程式語言,Hello World 想必是程式入門時最常見的詞,它是什麼時候出現的,那為甚麼會被廣泛流傳呢?</p>
<p>首先,大部分人認為是《C 程序設計語言》此書作者之一,Brian Kernighan 在 1973 年出版的《程式語言 B 教程導論》裡首次提到。以下是當時首次提到 Hello World 的程式碼:</p>
<figure class="highlight javascript"><table><tr><td class="code"><pre><span class="line"><span class="title function_">main</span>(<span class="params"></span>){</span><br><span class="line"> extrn a,b,c;</span><br><span class="line"> <span class="title function_">putchar</span>(a); <span class="title function_">putchar</span>(b); <span class="title function_">putchar</span>(c); <span class="title function_">putchar</span>(<span class="string">'!*n'</span>);</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line">a <span class="string">'hell'</span>;</span><br><span class="line">b <span class="string">'o, w'</span>;</span><br><span class="line">c <span class="string">'orld'</span>;</span><br></pre></td></tr></table></figure>
<p>但不幸的是他受訪時,他無法準確的講述原因跟時間。「我只記得,我好像看過一幅漫畫,講述一枚雞蛋和一隻小雞的故事,在那副漫畫中,小雞說了一句:『Hello World』。」他是這樣說的。</p>
<p>結論,Hello World 的起源應該是 Brian Kernighan 小時候曾看過的漫畫。</p>
<hr />
<h2 id="用-c-實作吧"><a class="markdownIt-Anchor" href="#用-c-實作吧"></a> 用 C++ 實作吧!</h2>
<p>說了這小小的故事,其實 Hello World 也代表著程式的運行無礙,那我們也可以開始動手做看看 C++ 世界裡的 Hello World 啦!</p>
<ol>
<li>你可以使用 <span class="exturl" data-url="aHR0cHM6Ly9yZXBsaXQuY29tLw==">Repl<i class="fa fa-external-link-alt"></i></span> 線上的編譯器,註冊後,按下右上角的加號,在 Template 那一欄打上 C++,並選擇好 C++ 的環境模板。</li>
<li>在右邊 Title 欄打上這個程式專案的名稱,若是練習通常我會打上今天的日期,如:20220326,除非是特別的專案才會特別取名,如果不取名,你的專案會在左邊的側邊欄 My Repls 的 Unnamed。</li>
</ol>
<figure class="highlight cpp"><figcaption><span>程式範例</span></figcaption><table><tr><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string"><iostream></span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> std;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span> </span>{</span><br><span class="line"> cout << <span class="string">"hello world!"</span>;</span><br><span class="line"> <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p>首先我們可以觀察看看,C++ 有人麼特別之處?如:句尾的共同處、有大括弧、小括弧等。那作者我就開始一一介紹吧!</p>
<ol>
<li>
<p>標頭檔:程式裡 <code>#include <iostream></code> 就像是工具箱,它可以叫出你想用的工具,在這裡,我們使用 <code>cout</code> ,所以每當我們使用輸出時,就會使用到這個 <code><iostream></code> 標頭檔。</p>
</li>
<li>
<p>命名空間: <code>using namespace std;</code> 叫做命名空間,它的用處就像是你在學校裡,可能會有同名的人,所以我們會叫「某班的」誰誰誰,這個「某班的」,就是我們的 std 。若我們不先在程式裡輸入這行,程式碼就要在 cout 前面多打 std:: ,這樣就會變得更複雜。所以為了方便,我們習慣在程式一開始就先打 <code>using namespace std;</code> 。簡單來說,工具也會被重複命名到,然而我們只需要用到其中一個,所以直接在程式上打 <code>using namespace std;</code> 可以免去不斷撰寫的麻煩。</p>
</li>
<li>
<p>main 函式:我們也可以說它是主程式,用來執行你撰寫的程式。我們會在一對大括號內撰寫。int 是變數型態,表整數(integer)之意,在函式前的變數型態與回傳值有關,如下兩行的 <code>return 0;</code> 。</p>
</li>
<li>
<p>輸出 cout:用來輸出箭頭後方箭頭後的字串、變數和值。</p>
</li>
<li>
<p>return 0:表示回傳值為 0,也就是程式正常結束,但現在的編譯器都會在編譯時偷偷幫你補上這行,不過!還是要多多保持多打這行的習慣會比較好。</p>
</li>
</ol>
<h2 id="參考資料"><a class="markdownIt-Anchor" href="#參考資料"></a> 參考資料:</h2>
<p><span class="exturl" data-url="aHR0cDovL2Jsb2cuZnVqaWppLmNvbS90aGUtaGlzdG9yeS1vZi1oZWxsby13b3JsZC8=">Hello World 程序的起源与历史<i class="fa fa-external-link-alt"></i></span></p>
]]></content>
<tags>
<tag>C/C++</tag>
</tags>
</entry>
<entry>
<title>【工具】用 Spicetify 自訂自己的 Spotify 吧!</title>
<url>/spicetify/</url>
<content><![CDATA[<h2 id="為什麼要自訂主題"><a class="markdownIt-Anchor" href="#為什麼要自訂主題"></a> 為什麼要自訂主題?</h2>
<p>你是否厭倦了醜到不行的電腦版 Spotify(?)還有醜到不行的動態字幕(?)那你應該來嘗試自己自訂 Spotify。</p>
<span id="more"></span>
<h2 id="什麼是-spicetify"><a class="markdownIt-Anchor" href="#什麼是-spicetify"></a> 什麼是 Spicetify?</h2>
<p><s>辣辣的 Spotify(?)</s></p>
<p>Spicetify 是一款多功能開源軟體。透過指令或者他們提供的 Spicetify Marketplace 來使用。主要功能有:</p>
<ol>
<li>Extensions(擴充功能)</li>
<li>Themes(主題)</li>
<li>Snippets(片段微調)</li>
<li>Apps(額外的應用程式)</li>
</ol>
<p>熟悉的話,你只能嘗試跟著他們 GitHub 寫的配置訊息來做安裝或者修改。但若你已經對於網頁開發有一定理解的話(那你應該不用看我文章(沒)),那你可以嘗試製作自己的主題,或者擴充功能。</p>
<p>以下將介紹如何安裝 Spicetify。</p>
<h2 id="如何安裝-spicetify"><a class="markdownIt-Anchor" href="#如何安裝-spicetify"></a> 如何安裝 Spicetify</h2>
<p>Spicetify 可適用於 Windows、macOS 和 Linux。以下介紹 Windows 的安裝方式。其餘二者可以參考 <span class="exturl" data-url="aHR0cHM6Ly9zcGljZXRpZnkuYXBwL2RvY3MvZ2V0dGluZy1zdGFydGVkLw==">Spicetify Docs<i class="fa fa-external-link-alt"></i></span> 。</p>
<h3 id="step-1-安裝原版-spotify"><a class="markdownIt-Anchor" href="#step-1-安裝原版-spotify"></a> Step 1. 安裝原版 Spotify</h3>
<p>若你已安裝,請忽略此步驟。</p>
<p><span class="exturl" data-url="aHR0cHM6Ly93d3cuc3BvdGlmeS5jb20vdHcvZG93bmxvYWQvd2luZG93cy8=">Spotify 下載頁面<i class="fa fa-external-link-alt"></i></span></p>
<p>請按「直接從 Spotify 下載」若使用從 Microsoft Store 下載我不知道會怎樣(應該是不行),而且「直接從 Spotify 下載」會比較快。</p>
<p>然後記得登入自己的帳號。</p>
<h3 id="step-2-安裝-spicetify"><a class="markdownIt-Anchor" href="#step-2-安裝-spicetify"></a> Step 2. 安裝 Spicetify</h3>
<p>請使用 PowerShell 以系統管理員身分執行以下命令</p>
<figure class="highlight bash"><table><tr><td class="code"><pre><span class="line">iwr -useb https://raw.githubusercontent.com/spicetify/cli/main/install.ps1 | iex</span><br></pre></td></tr></table></figure>
<p>不知道 PowerShell 怎麼開,可以在「搜尋」搜 PowerShell 找到。</p>
<p>安裝過程中可能會詢問你是否要安裝 Spicetify Marketplace 請輸入 Y 或者 Enter 繼續安裝,安裝 Spicetify Marketplace 可以很方便地去安裝你想要的擴充功能和主題。</p>
<p>接著為確保 Spicetify 已經安裝成功,請在 PowerShell 嘗試輸入</p>
<figure class="highlight bash"><table><tr><td class="code"><pre><span class="line">spicetify -v</span><br></pre></td></tr></table></figure>
<p>若有出現版本號,就代表你安裝成功了。</p>
<p>再輸入以下命令以套用 Spicetify</p>
<figure class="highlight bash"><table><tr><td class="code"><pre><span class="line">spicetify apply</span><br></pre></td></tr></table></figure>
<p>稍等過後,就會看見你的 Spotify 左上角有個購物車,那個就是剛剛下載的 Marketplace,點開來後你會看見許多的擴充功能、主題等等。以下推薦幾個不錯的擴充和主題。</p>
<h2 id="spicetify-推薦擴充和主題"><a class="markdownIt-Anchor" href="#spicetify-推薦擴充和主題"></a> Spicetify 推薦擴充和主題</h2>
<h3 id="擴充推薦"><a class="markdownIt-Anchor" href="#擴充推薦"></a> 擴充推薦</h3>
<h4 id="adblock"><a class="markdownIt-Anchor" href="#adblock"></a> Adblock</h4>
<p>擋廣告用的,如果你沒有 Premium 這個必裝。</p>
<h4 id="playbar-clock"><a class="markdownIt-Anchor" href="#playbar-clock"></a> Playbar Clock</h4>
<p>提供了時間在播放時間軸下方,當你的電腦工具列是隱藏的時候很好用。</p>
<h4 id="auto-skip-videos"><a class="markdownIt-Anchor" href="#auto-skip-videos"></a> Auto Skip Videos</h4>
<p>可以避免遇到播放不了的音樂(可能是地區或著 Spotify’s policy)直接跳過,不過我記得好像本來就會跳過。</p>
<h4 id="full-screen"><a class="markdownIt-Anchor" href="#full-screen"></a> Full Screen</h4>
<p>如果你不喜歡原版的全螢幕模式,可以試試看這個,但是要記得額外裝 <code>lyrics-plus</code> <a href="#lyrics-plus">點我傳送錨點</a> 才可以看到動態字幕喔。</p>
<h3 id="主題推薦"><a class="markdownIt-Anchor" href="#主題推薦"></a> 主題推薦</h3>
<h4 id="sleek"><a class="markdownIt-Anchor" href="#sleek"></a> Sleek</h4>
<p>Sleek 主題內包含了許多的顏色配置,看你喜歡哪個就使用它。目前我推 Nord。</p>
<p><img src="https://raw.githubusercontent.com/huangmayor0905/image-hosting/main/img/Spicetify-theme.png" alt="" /></p>
<h3 id="片段微調推薦"><a class="markdownIt-Anchor" href="#片段微調推薦"></a> 片段微調推薦</h3>
<h4 id="pointers"><a class="markdownIt-Anchor" href="#pointers"></a> Pointers</h4>
<p>對,原版的 Spotify 很多地方的滑鼠游標沒有做好,所以裝上它有助於整體體驗。</p>
<h4 id="hide-lyrics-button"><a class="markdownIt-Anchor" href="#hide-lyrics-button"></a> Hide lyrics button</h4>
<p>之所以要隱藏,是因為原版字幕很醜,下面會介紹安裝<a href="#lyrics-plus">好看的字幕</a>。若你想保留原版字幕就不要使用這個片段微調。</p>
<h3 id="額外配置可選"><a class="markdownIt-Anchor" href="#額外配置可選"></a> 額外配置(可選)</h3>
<h4 id="lyrics-plus"><a class="markdownIt-Anchor" href="#lyrics-plus"></a> Lyrics Plus</h4>
<p>再次在 PowerShell 輸入以下指令,重啟 Spotify 就會在左上角看見它了</p>
<figure class="highlight bash"><table><tr><td class="code"><pre><span class="line">spicetify config custom_apps lyrics-plus</span><br><span class="line">spicetify apply</span><br></pre></td></tr></table></figure>
<h2 id="歡迎向我索取我的配置"><a class="markdownIt-Anchor" href="#歡迎向我索取我的配置"></a> 歡迎向我索取我的配置</h2>
]]></content>
<categories>
<category>工具</category>
</categories>
<tags>
<tag>教學</tag>
<tag>工具</tag>
<tag>Spicetify</tag>
<tag>Spotify</tag>
</tags>
</entry>
<entry>
<title>【心得】被討厭的勇氣</title>
<url>/the-Courage-to-Be-Disliked/</url>
<content><![CDATA[]]></content>
<categories>
<category>心得</category>
</categories>
<tags>
<tag>心得</tag>
<tag>被討厭的勇氣</tag>
</tags>
</entry>
<entry>
<title>tag plugins 測試文章</title>
<url>/tag-plugins-test/</url>
<content><![CDATA[<div class="note "><h4 id="header"><a class="markdownIt-Anchor" href="#header"></a> Header</h4>
<p>(without define class style)</p>
</div>
<div class="note default"><h4 id="default-header"><a class="markdownIt-Anchor" href="#default-header"></a> Default Header</h4>
<p>Welcome to <span class="exturl" data-url="aHR0cHM6Ly9oZXhvLmlv">Hexo!<i class="fa fa-external-link-alt"></i></span></p>
</div>
<div class="note primary"><h4 id="primary-header"><a class="markdownIt-Anchor" href="#primary-header"></a> Primary Header</h4>
<p><strong>Welcome</strong> to <span class="exturl" data-url="aHR0cHM6Ly9oZXhvLmlv">Hexo!<i class="fa fa-external-link-alt"></i></span></p>
</div>
<div class="note info"><h4 id="info-header"><a class="markdownIt-Anchor" href="#info-header"></a> Info Header</h4>
<p><strong>Welcome</strong> to <span class="exturl" data-url="aHR0cHM6Ly9oZXhvLmlv">Hexo!<i class="fa fa-external-link-alt"></i></span></p>
</div>
<div class="note success"><h4 id="success-header"><a class="markdownIt-Anchor" href="#success-header"></a> Success Header</h4>
<p><strong>Welcome</strong> to <span class="exturl" data-url="aHR0cHM6Ly9oZXhvLmlv">Hexo!<i class="fa fa-external-link-alt"></i></span></p>
</div>
<div class="note warning"><h4 id="warning-header"><a class="markdownIt-Anchor" href="#warning-header"></a> Warning Header</h4>
<p><strong>Welcome</strong> to <span class="exturl" data-url="aHR0cHM6Ly9oZXhvLmlv">Hexo!<i class="fa fa-external-link-alt"></i></span></p>
</div>
<div class="note danger"><h4 id="danger-header"><a class="markdownIt-Anchor" href="#danger-header"></a> Danger Header</h4>
<p><strong>Welcome</strong> to <span class="exturl" data-url="aHR0cHM6Ly9oZXhvLmlv">Hexo!<i class="fa fa-external-link-alt"></i></span></p>
</div>
<div class="note info no-icon"><h4 id="no-icon-note"><a class="markdownIt-Anchor" href="#no-icon-note"></a> No icon note</h4>
<p>Note <strong>without</strong> icon: <code>note info no-icon</code></p>
</div>
<details class="note primary"><summary><p>This is a summary</p>
</summary>
<h4 id="details-and-summary"><a class="markdownIt-Anchor" href="#details-and-summary"></a> Details and summary</h4>
<p>Note with summary: <code>note primary This is a summary</code></p>
</details>
]]></content>
<tags>
<tag>test</tag>
</tags>
</entry>
<entry>
<title>這是我的第一篇文章</title>
<url>/test-artical/</url>
<content><![CDATA[<p>hi~ 我是國國,身為高一的我想要深入探索程式世界,也歡迎大家與我分享、交流。</p>