From 2f674dc80f0382f1c3178f435714960734dc9d3c Mon Sep 17 00:00:00 2001 From: Nguyễn Gia Phong Date: Sat, 6 Jun 2020 21:33:13 +0700 Subject: Reorganize stuff from secondary school --- tht/B/QG-2014/DIC.DAT | 8 - tht/B/QG-2014/GIAODIEM.TXT | 10 -- tht/B/QG-2014/README.md | 188 ----------------------- tht/B/QG-2014/XEPHINH1.TXT | 6 - tht/B/QG-2014/XEPHINH2.TXT | 8 - tht/B/QG-2014/XEPHINH3.TXT | 7 - tht/B/QG-2014/XEPHINH4.TXT | 15 -- tht/B/QG-2014/XEPHINH5.TXT | 15 -- tht/B/QG-2014/dic.pp | 96 ------------ tht/B/QG-2014/giaodiem.c | 29 ---- tht/B/QG-2014/giaodiem_img/example.png | Bin 19933 -> 0 bytes tht/B/QG-2014/giaodiem_img/piece1.png | Bin 28315 -> 0 bytes tht/B/QG-2014/giaodiem_img/piece2.png | Bin 28719 -> 0 bytes tht/B/QG-2014/giaodiem_img/piece3.png | Bin 26048 -> 0 bytes tht/B/QG-2014/guess.pas | 106 ------------- tht/B/QG-2014/sample.pas | 21 --- tht/B/QG-2014/xephinh.pas | 270 --------------------------------- 17 files changed, 779 deletions(-) delete mode 100644 tht/B/QG-2014/DIC.DAT delete mode 100644 tht/B/QG-2014/GIAODIEM.TXT delete mode 100644 tht/B/QG-2014/README.md delete mode 100644 tht/B/QG-2014/XEPHINH1.TXT delete mode 100644 tht/B/QG-2014/XEPHINH2.TXT delete mode 100644 tht/B/QG-2014/XEPHINH3.TXT delete mode 100644 tht/B/QG-2014/XEPHINH4.TXT delete mode 100644 tht/B/QG-2014/XEPHINH5.TXT delete mode 100644 tht/B/QG-2014/dic.pp delete mode 100644 tht/B/QG-2014/giaodiem.c delete mode 100644 tht/B/QG-2014/giaodiem_img/example.png delete mode 100644 tht/B/QG-2014/giaodiem_img/piece1.png delete mode 100644 tht/B/QG-2014/giaodiem_img/piece2.png delete mode 100644 tht/B/QG-2014/giaodiem_img/piece3.png delete mode 100644 tht/B/QG-2014/guess.pas delete mode 100644 tht/B/QG-2014/sample.pas delete mode 100644 tht/B/QG-2014/xephinh.pas (limited to 'tht/B/QG-2014') diff --git a/tht/B/QG-2014/DIC.DAT b/tht/B/QG-2014/DIC.DAT deleted file mode 100644 index af9c850..0000000 --- a/tht/B/QG-2014/DIC.DAT +++ /dev/null @@ -1,8 +0,0 @@ -cat -can -mic -man -tiger -tac -hello -world diff --git a/tht/B/QG-2014/GIAODIEM.TXT b/tht/B/QG-2014/GIAODIEM.TXT deleted file mode 100644 index ba0199e..0000000 --- a/tht/B/QG-2014/GIAODIEM.TXT +++ /dev/null @@ -1,10 +0,0 @@ -1 -35 -210 -330 -1744 -210 -358 -1001 -1312 -1007 diff --git a/tht/B/QG-2014/README.md b/tht/B/QG-2014/README.md deleted file mode 100644 index 567e309..0000000 --- a/tht/B/QG-2014/README.md +++ /dev/null @@ -1,188 +0,0 @@ -# ĐỀ THI BẢNG B – TRUNG HỌC CƠ SỞ - -HỘI THI TIN HỌC TRẺ TOÀN QUỐC LẦN THỨ XX – 2016 - -Thời gian làm bài 150 phút, không kể thời gian phát đề - -## Tổng quan bài thi - -| Tên bài | Giới hạn thời gian | Số điểm | -| --------- | :----------------: | :-----: | -| Giao điểm | Không có | 20 | -| Xếp hình | Không có | 40 | -| Từ điển | 2 giây | 40 | - -## Giao điểm - -Mùa hè 2014, những người ngoài hành tinh đã có một chuyến viếng thăm trái đất. -Họ đến bằng đĩa bay và đã chọn một cánh đồng của Việt Nam để hạ cánh. Đĩa bay -có dạng hình tròn với N chân đế nên mỗi đĩa bay đã để lại trên cánh đồng một -đường tròn với có N điểm trên đường tròn đó. Khi đĩa bay hạ xuống, các chân đế -của một đĩa bay đã phát tia lazer để kết nối với nhau để lại các đường cháy -trên cánh đồng. Ngay sáng hôm sau các nhà khoa học đã đến và dự đinh sẽ cắm tại -mỗi giao điểm của các đường cháy bên trong mỗi đường tròn một lá cờ. Họ cũng -phát hiện ra rằng, trong mỗi đường tròn không có 3 đường cháy nào cắt nhau tại -cùng một điểm (trừ các điểm chân đế của đĩa bay). Vấn đề đặt ra là với mỗi -đường tròn, họ đã phải sử dụng bao nhiêu lá cờ. Các bạn hãy tính giúp các nhà -khoa học nhé, đó chính là một con số quan trọng trong quá trình nghiên cứu sự -hiện diện của người ngoài trái đất tại Việt Nam. - -Ví dụ, với hình dưới là đĩa bay có 5 chân đế tương ứng với N=5. Các đường cháy -để lại giao nhau tại 5 điểm. - -![](http://www.bryanray.name/wordpress/wp-content/uploads/pentacle.png) - -Các bạn sẽ nhận được một báo cáo gồm có 10 dòng tương ứng với 10 số N khác nhau -là số lượng chân đế trên 10 chiếc đĩa bay khác nhau. Bạn cần tạo file -`GIAODIEM.TXT` gồm 10 dòng, mỗi dòng ghi một số nguyên duy nhất là kết quả tìm -được, chính là số lá cờ cần sử dụng để cắm tại các giao điểm bên trong hình -tròn. Vì số lá cờ sẽ là rất lớn nên các nhà khoa học chỉ cần các bạn đưa ra -phần dư của số lượng lá cờ cho 2014. - -| Test | N | -| ---- | ---------------: | -| 1 | 4 | -| 2 | 7 | -| 3 | 10 | -| 4 | 11 | -| 5 | 7777 | -| 6 | 88888 | -| 7 | 1234567890 | -| 8 | 9999999999 | -| 9 | 12345678912345 | -| 10 | 2014201420142014 | - -## Xếp hình - -Trong quá trình nghiên cứu trên cánh đồng, các nhà khoa học còn phát hiện ra -một điều thú vị khác. Người ngoài hành tinh đã để lại một số hộp quà. Mỗi hộp -quà chứa một bộ ghép hình với một bảng nền có kích thước M×N ô vuông 1×1. Trong -hộp có một số miếng ghép thuộc ba loại dưới đây với số lượng khác nhau: - -![](giaodiem_img/piece1.png) -![](giaodiem_img/piece2.png) -![](giaodiem_img/piece3.png) - -Người ngoài hành tinh để lại lời nhắn rằng họ sẽ trở lại nếu các bạn xếp được -các miếng ghép không chồng lên nhau và phủ kín bảng nền. Các bạn có thể xoay -hoặc lật mặt các miếng ghép. Các bạn trong hội thi năm nay hãy giúp các nhà -nghiên cứu nhé. - -Các bạn sẽ nhận được các số M, N, A, B, C của 5 hộp quà trong bảng sau: - -| Hộp quà | M | N | A | B | C | -| :-----: | --- | --- | --- | --- | --- | -| 1 | 6 | 5 | 4 | 2 | 2 | -| 2 | 8 | 12 | 8 | 18 | 0 | -| 3 | 7 | 13 | 12 | 5 | 7 | -| 4 | 15 | 10 | 20 | 10 | 10 | -| 5 | 15 | 30 | 0 | 50 | 50 | - -Các số trên một dòng tương ứng là kích thước M×N của hình chữ nhật , A là số -miếng ghép loại 1, B là số miếng ghép loại 2 và C là số miếng ghép loại 3 của -các hộp quà. Các bạn cần đưa ra 5 file output tương ứng với từng hộp quà là -`XEPHINH1.TXT`, `XEPHINH2.TXT`, `XEPHINH3.TXT`, `XEPHINH4.TXT`, `XEPHINH5.TXT`. -Ở mỗi file output các bạn cần mô tả 1 cách xếp hình là một ma trận 2 chiều M×N -trên M dòng, mỗi dòng N số nguyên dương, các số trên một dòng cách nhau bởi một -dấu cách. Mỗi miếng ghép khi được sử dụng cần được đánh số thứ tự khác nhau sao -cho không có 2 miếng ghép nào có cùng một số thứ tự. Số ở dòng i cột j là một -số nguyên dương mô tả số thứ tự của hình phủ nó. - -Ví dụ: ta có bảng nền kích thước 3× 7 và 3 miếng ghép loại 1, 3 miếng ghép loại -2, 0 miếng ghép loại 3 thì ta có thể ghép như sau: - -![](giaodiem_img/example.png) - -Có thể mô tả lại bằng ma trận ở file output tương ứng với hình bên phải như sau: - - 1 2 3 4 4 4 6 - 1 2 3 3 3 4 6 - 1 2 5 5 5 6 6 - -Hoặc cách đánh số thứ tự vùng khác như sau: - - 6 4 1 2 2 2 5 - 6 4 1 1 1 2 5 - 4 6 3 3 3 5 5 - -Cả 2 cách trên đều được chấp nhận. - -## Từ điển - -Biết được việc các thí sinh thi Tin học trẻ giải được bài `XEPHINH`, người -ngoài hành tinh rất yêu quý đất nước Việt Nam. Họ quyết định trở lại để đến -thăm chúng ta. Tuy nhiên vì ngôn ngữ bất đồng nên các em không hiểu những người -ngoài hành tinh muốn nói gì. Vì vậy các em phải mang theo từ điển của mình ra -để cho họ xem. Sau đó các em sẽ đoán xem là họ muốn nói đến từ nào trong từ -điển. Từ điển cũng chỉ gồm 26 chữ cái thường từ *a* đến *z*. Tuy nhiên vì không -thể giải thích được với nhau nên hiện tại bước đầu giao tiếp vẫn là đoán từ và -các câu hỏi để đoán từ phải vô cùng đơn giản. - -Người ngoài hành tinh chỉ có thể hiểu các câu hỏi sau: - -1. Có bao nhiêu kí tự C trong từ đó? -2. Kí tự tại vị trí X là kí tự gì? - -Nhiệm vụ của các bạn là viết một chương trình `GUESS.PAS`, sử dụng các hàm -trong thư viện `DIC.PP` để thực hiện khảo sát từ điển trong file dữ liệu vào -`DIC.DAT` và đưa ra từ mà người ngoài hành tinh muốn nói là từ gì. File -`DIC.DAT` được cung cấp cho các bạn mô tả từ điển chỉ gồm danh sách các từ đôi -một khác nhau. Trong đó mỗi từ nằm trên một dòng và chỉ gồm các chữ cái in -thường từ *a* đến *z*. Số lượng từ trong file `DIC.DAT` tối đa là -106 từ và mỗi từ dài tối đa 50 kí tự. - -Chương trình `GUESS.PAS` của bạn phải khai báo sử dụng thư viện `DIC.PP` bằng cú pháp: - - Uses dic; - -Các hàm và thủ tục được cung cấp trong thư viện `DIC.PP`: - -* `function count_char(C: char): longint;` - * Trả về số lượng kí tự C trong từ cần tìm. - * Chi phí sử dụng hàm `count_char()` 1 lần là 1 đơn vị. - -* `function get_char_at_pos(X: longint): char;` - * Trả về kí tự tại vị trí X trong từ cần tìm. - * Nếu X lớn hơn độ dài của từ, hàm sẽ trả về kí tự *#*. - * Chi phí sử dụng hàm `get_char_at_pos()` 1 lần là 10 đơn vị. -* `Procedure answer(s:string);` - * Thủ tục `answer()` được dùng để trả về kết quả - là từ mà em đã xác định - được. - * Chi phí sử dụng thủ tục `answer()` là 0 đơn vị. - * Chương trình bắt buộc phải gọi thủ tục `answer()` một lần duy nhất, nếu - không sẽ bị 0 điểm. Thủ tục này khi được gọi sẽ tự động thoát chương - trình bằng câu lệnh `halt`. - -Với mỗi test, nếu chương trình của bạn gọi thủ tục `answer()` với đáp án không -chính xác, chạy quá thời gian quy định, sử dụng quá 1000 đơn vị hoặc gặp các -lỗi dẫn tới dừng chương trình, bài làm sẽ nhận 0 điểm cho test đó. - -Số điểm cho mỗi test sẽ giảm dần khi chi phí bạn sử dụng tăng lên. - -### Ví dụ - -Bộ từ điển có các từ sau: - - cat - can - mic - man - tiger - hello - world - -Từ người ngoài hành tinh muốn nói là *cat*. - -| Các thủ tục được gọi | Giá trị trả về | Giải thích | -| -------------------- | :------------: | ----------------------------------- | -| `get_char_at_pos(4)` | # | 4 vượt quá độ dài của từ *cat* là 3 | -| `count_char('c')` | 1 | Trong từ *cat* có 1 kí tự *c* | -| `count_char('a')` | 1 | Trong từ *cat* có 1 kí tự *a* | -| `count_char('n')` | 0 | Trong từ *cat* không có kí tự *n* | -| `answer('cat')` | | Bạn trả lời đúng với chi phí là 13 | - -### Ghi chú - -Trên máy làm bài của các bạn đã được cung cấp 3 file: `DIC.PP`, `DIC.DAT` và -`SAMPLE.PAS`. Bạn có thể tham khảo cách sử dụng `DIC.PP` và `DIC.DAT` trong -file `SAMPLE.PAS`. File `DIC.DAT` bạn nhận được là từ điển ví dụ. diff --git a/tht/B/QG-2014/XEPHINH1.TXT b/tht/B/QG-2014/XEPHINH1.TXT deleted file mode 100644 index 0b884be..0000000 --- a/tht/B/QG-2014/XEPHINH1.TXT +++ /dev/null @@ -1,6 +0,0 @@ -1 2 3 3 3 -1 2 4 4 4 -1 2 5 5 4 -6 7 7 5 8 -6 7 5 5 8 -6 7 7 8 8 diff --git a/tht/B/QG-2014/XEPHINH2.TXT b/tht/B/QG-2014/XEPHINH2.TXT deleted file mode 100644 index 8dc8e6a..0000000 --- a/tht/B/QG-2014/XEPHINH2.TXT +++ /dev/null @@ -1,8 +0,0 @@ -1 2 3 4 5 6 7 8 9 9 10 10 -1 2 3 4 5 6 7 8 9 11 10 12 -1 2 3 4 5 6 7 8 9 11 10 12 -13 13 14 15 15 15 16 16 11 11 12 12 -13 17 14 14 14 15 16 18 19 19 19 20 -13 17 17 17 21 21 16 18 18 18 19 20 -22 23 23 23 21 24 25 25 25 26 20 20 -22 22 22 23 21 24 24 24 25 26 26 26 diff --git a/tht/B/QG-2014/XEPHINH3.TXT b/tht/B/QG-2014/XEPHINH3.TXT deleted file mode 100644 index bdf97ba..0000000 --- a/tht/B/QG-2014/XEPHINH3.TXT +++ /dev/null @@ -1,7 +0,0 @@ -1 2 3 4 5 6 7 8 9 10 11 11 11 -1 2 3 4 5 6 7 8 9 10 12 12 11 -1 2 3 4 5 6 7 8 9 10 12 13 13 -14 14 14 15 15 15 16 16 17 17 12 12 13 -14 18 18 18 19 20 20 16 17 21 21 21 13 -22 18 22 18 19 20 16 16 17 21 23 21 23 -22 22 22 19 19 20 20 24 24 24 23 23 23 diff --git a/tht/B/QG-2014/XEPHINH4.TXT b/tht/B/QG-2014/XEPHINH4.TXT deleted file mode 100644 index 497341c..0000000 --- a/tht/B/QG-2014/XEPHINH4.TXT +++ /dev/null @@ -1,15 +0,0 @@ -1 2 3 4 5 5 6 6 6 7 -1 2 3 4 5 8 6 8 6 7 -1 2 3 4 5 8 8 8 7 7 -9 10 11 12 13 13 14 14 14 15 -9 10 11 12 13 16 14 16 14 15 -9 10 11 12 13 16 16 16 15 15 -17 18 19 20 21 21 22 22 22 23 -17 18 19 20 21 24 22 24 22 23 -17 18 19 20 21 24 24 24 23 23 -25 26 27 28 29 29 30 30 30 31 -25 26 27 28 29 32 30 32 30 31 -25 26 27 28 29 32 32 32 31 31 -33 34 35 36 37 37 38 38 38 39 -33 34 35 36 37 40 38 40 38 39 -33 34 35 36 37 40 40 40 39 39 diff --git a/tht/B/QG-2014/XEPHINH5.TXT b/tht/B/QG-2014/XEPHINH5.TXT deleted file mode 100644 index 550e630..0000000 --- a/tht/B/QG-2014/XEPHINH5.TXT +++ /dev/null @@ -1,15 +0,0 @@ -1 1 2 2 3 3 21 21 22 22 23 23 41 41 42 42 43 43 61 61 62 62 63 63 81 81 82 82 83 83 -1 4 2 5 5 3 21 24 22 25 25 23 41 44 42 45 45 43 61 64 62 65 65 63 81 84 82 85 85 83 -1 4 2 2 5 3 21 24 22 22 25 23 41 44 42 42 45 43 61 64 62 62 65 63 81 84 82 82 85 83 -4 4 6 7 5 7 24 24 26 27 25 27 44 44 46 47 45 47 64 64 66 67 65 67 84 84 86 87 85 87 -8 8 6 7 7 7 28 28 26 27 27 27 48 48 46 47 47 47 68 68 66 67 67 67 88 88 86 87 87 87 -8 6 6 9 9 9 28 26 26 29 29 29 48 46 46 49 49 49 68 66 66 69 69 69 88 86 86 89 89 89 -8 8 10 10 10 9 28 28 30 30 30 29 48 48 50 50 50 49 68 68 70 70 70 69 88 88 90 90 90 89 -11 11 10 12 10 12 31 31 30 32 30 32 51 51 50 52 50 52 71 71 70 72 70 72 91 91 90 92 90 92 -11 13 13 12 12 12 31 33 33 32 32 32 51 53 53 52 52 52 71 73 73 72 72 72 91 93 93 92 92 92 -11 11 13 14 14 14 31 31 33 34 34 34 51 51 53 54 54 54 71 71 73 74 74 74 91 91 93 94 94 94 -15 15 13 16 16 14 35 35 33 36 36 34 55 55 53 56 56 54 75 75 73 76 76 74 95 95 93 96 96 94 -15 17 17 16 18 18 35 37 37 36 38 38 55 57 57 56 58 58 75 77 77 76 78 78 95 97 97 96 98 98 -15 15 17 16 16 18 35 35 37 36 36 38 55 55 57 56 56 58 75 75 77 76 76 78 95 95 97 96 96 98 -19 17 17 20 18 18 39 37 37 40 38 38 59 57 57 60 58 58 79 77 77 80 78 78 99 97 97 100 98 98 -19 19 19 20 20 20 39 39 39 40 40 40 59 59 59 60 60 60 79 79 79 80 80 80 99 99 99 100 100 100 diff --git a/tht/B/QG-2014/dic.pp b/tht/B/QG-2014/dic.pp deleted file mode 100644 index 716249d..0000000 --- a/tht/B/QG-2014/dic.pp +++ /dev/null @@ -1,96 +0,0 @@ -unit dic; -interface - function count_char(c: char): longint; - function get_char_at_pos(x: longint): char; - procedure answer(s: string); - -implementation -var - secret_word: string; - words: array [1..1000000] of string; - total_cost, n: longint; - -procedure answer(s: string); -begin - if s = secret_word then - begin - writeln('Chuc mung ban da tim ra dap an chinh xac la "', s, '"'); - writeln('Chi phi ban da su dung la ', total_cost); - end - else - begin - writeln('Dap an ban dua ra la "', s, '"'); - writeln('Dap an chinh xac la "', secret_word, '"'); - end; - halt; -end; - -procedure cost_limit_exceed; -begin - writeln('Chi phi ban da su dung vuot qua chi phi toi da cho phep'); - halt; -end; - -function count_char(c: char): longint; -var - i, res: longint; -begin - total_cost := total_cost + 1; - if (total_cost > 1000) then - cost_limit_exceed; - res := 0; - for i := 1 to length(secret_word) do - if secret_word[i] = c then - inc(res); - exit(res); -end; - -function get_char_at_pos(x: longint): char; -begin - total_cost := total_cost + 10; - if (total_cost > 1000) then - cost_limit_exceed; - if (x < 1) or (x > length(secret_word)) then - exit('#'); - exit(secret_word[x]); -end; - -procedure check_secret_word; -var - f: text; - i: longint; - ok: boolean; -begin - assign(f, 'DIC.DAT'); - reset(f); - while not seekeof(f) do - begin - inc(n); - readln(f, words[n]); - end; - close(f); - ok := false; - for i := 1 to n do - if words[i] = secret_word then ok := true; - if not ok then - begin - writeln('Du lieu duoc khoi tao khong chinh xac. Dap an can tim khong nam trong tu dien'); - halt; - end; -end; - -procedure init; -begin - writeln; - writeln(' TU DIEN '); - writeln('*****************'); - writeln; - - secret_word := 'cat'; - total_cost := 0; - check_secret_word; -end; - -initialization - init; -end. diff --git a/tht/B/QG-2014/giaodiem.c b/tht/B/QG-2014/giaodiem.c deleted file mode 100644 index 78ca9b2..0000000 --- a/tht/B/QG-2014/giaodiem.c +++ /dev/null @@ -1,29 +0,0 @@ -#include - -const long long TESTS[] = {4, 7, 10, 11, 7777, 8888888, 1234567890, 9999999999, - 12345678912345, 2014201420142014}; - -int main() -{ - char i, j, k, divisor; - long long n, p; - FILE *f = fopen("GIAODIEM.TXT", "w"); - - for (i = 0; i < 10; i++) { - divisor = 24; - p = 1; - for (j = 0; j < 4; j++) { - n = TESTS[i] - j; - for (k = 2; k < 4; k++) { - while (!(n % k + divisor % k)) { - n /= k; - divisor /= k; - } - } - p *= n % 2014; - } - fprintf(f, "%d\n", p % 2014); - } - fclose(f); - return 0; -} diff --git a/tht/B/QG-2014/giaodiem_img/example.png b/tht/B/QG-2014/giaodiem_img/example.png deleted file mode 100644 index 2af578f..0000000 Binary files a/tht/B/QG-2014/giaodiem_img/example.png and /dev/null differ diff --git a/tht/B/QG-2014/giaodiem_img/piece1.png b/tht/B/QG-2014/giaodiem_img/piece1.png deleted file mode 100644 index a658789..0000000 Binary files a/tht/B/QG-2014/giaodiem_img/piece1.png and /dev/null differ diff --git a/tht/B/QG-2014/giaodiem_img/piece2.png b/tht/B/QG-2014/giaodiem_img/piece2.png deleted file mode 100644 index 7d467ac..0000000 Binary files a/tht/B/QG-2014/giaodiem_img/piece2.png and /dev/null differ diff --git a/tht/B/QG-2014/giaodiem_img/piece3.png b/tht/B/QG-2014/giaodiem_img/piece3.png deleted file mode 100644 index 2aa00a0..0000000 Binary files a/tht/B/QG-2014/giaodiem_img/piece3.png and /dev/null differ diff --git a/tht/B/QG-2014/guess.pas b/tht/B/QG-2014/guess.pas deleted file mode 100644 index af39434..0000000 --- a/tht/B/QG-2014/guess.pas +++ /dev/null @@ -1,106 +0,0 @@ -uses dic; - -type - dic_t = array of string; - coun_t = array['a'..'z'] of byte; - -var - f: text; - dict, new_dict: array[0..999999] of string; - chars: array of coun_t; - count: coun_t; - enum: array of record i, n: byte end; - len, new_len: longint; - i, j: byte; - c: char; - - -procedure swapbyte(var x, y: byte); - var - tmp: byte; - - begin - tmp := x; - x := y; - y := tmp - end; - - - -begin - len := 0; - assign(f, 'DIC.DAT'); - reset(f); - while not eof(f) do - begin - readln(f, dict[len]); - inc(len) - end; - close(f); - - setlength(chars, len); - for i := 0 to len - 1 do - begin - for c := 'a' to 'z' do - chars[i][c] := 0; - for c in dict[i] do - inc(chars[i][c]) - end; - for c := 'a' to 'z' do - count[c] := count_char(c); - - new_len := 0; - for i := 0 to len - 1 do - begin - for c := 'a' to '{' do - if chars[i][c] <> count[c] then - break; - if c = '{' then - begin - new_dict[new_len] := dict[i]; - inc(new_len) - end - end; - - setlength(enum, length(new_dict[0])); - for i := 0 to length(enum) - 1 do - begin - enum[i].i := i + 1; - enum[i].n := 0; - for c := 'a' to 'z' do - count[c] := 0; - for j := 0 to new_len - 1 do - inc(count[new_dict[j][i + 1]]); - for c := 'a' to 'z' do - if count[c] > 0 then - inc(enum[i].n) - end; - - for i := 0 to length(enum) - 2 do - for j := i + 1 to length(enum) - 1 do - if enum[i].n < enum[j].n then - begin - swapbyte(enum[i].n, enum[j].n); - swapbyte(enum[i].i, enum[j].i) - end; - - j := 0; - while new_len > 1 do - begin - len := new_len; - for i := 0 to len - 1 do - dict[i] := new_dict[i]; - - c := get_char_at_pos(enum[j].i); - new_len := 0; - for i := 0 to len - 1 do - if dict[i][enum[j].i] = c then - begin - new_dict[new_len] := dict[i]; - inc(new_len) - end; - inc(j) - end; - - answer(new_dict[0]) -end. diff --git a/tht/B/QG-2014/sample.pas b/tht/B/QG-2014/sample.pas deleted file mode 100644 index c8b5e17..0000000 --- a/tht/B/QG-2014/sample.pas +++ /dev/null @@ -1,21 +0,0 @@ -uses dic; - -var - answer1: char; - answer2, answer3, answer4: longint; - -begin - answer1 := get_char_at_pos(4); - writeln('Vi tri thu 4 cua xau can tim la: ', answer1); - - answer2 := count_char('c'); - writeln('So luong ki tu c trong tu can tim la: ', answer2); - - answer3 := count_char('a'); - writeln('So luong ki tu a trong tu can tim la: ', answer3); - - answer4 := count_char('n'); - writeln('So luong ki tu n trong tu can tim la: ', answer4); - - answer('can'); -end. diff --git a/tht/B/QG-2014/xephinh.pas b/tht/B/QG-2014/xephinh.pas deleted file mode 100644 index d428302..0000000 --- a/tht/B/QG-2014/xephinh.pas +++ /dev/null @@ -1,270 +0,0 @@ -uses math; - -type - gift_t = record - filename: string; - m, n, a, b, c: byte - end; - piece_t = array[1..3, 1..3] of boolean; - board_t = array[1..15, 1..30] of byte; - -const - gifts: array[1..5] of gift_t = ( - (filename: 'XEPHINH1.TXT'; m: 6; n: 5; a: 4; b: 2; c: 2), - (filename: 'XEPHINH2.TXT'; m: 8; n: 12; a: 8; b: 18; c: 0), - (filename: 'XEPHINH3.TXT'; m: 7; n: 13; a: 12; b: 5; c: 7), - (filename: 'XEPHINH4.TXT'; m: 3; n: 10; a: 4; b: 2; c: 2), - (filename: 'XEPHINH5.TXT'; m: 15; n: 6; a: 0; b: 10; c: 10) - ); - pieces: array[1..3] of piece_t = ( - ((false, true, false), (false, true, false), (false, true, false)), - ((false, true, true), (false, true, false), (false, true, false)), - ((false, true, true), (false, true, false), (false, true, true)) - ); - -var - f: text; - i, m, n, a, b, c: byte; - init_board: board_t; - done: boolean; - - -function divide(dividend, divisor: smallint): smallint; - begin - if dividend mod divisor = 0 then - exit(dividend div divisor); - divide := dividend div divisor + 1 - end; - - -function modulo(dividend, divisor: smallint): smallint; - begin - if dividend mod divisor = 0 then - exit(divisor); - modulo := dividend mod divisor - end; - - -function rotate( - piece: piece_t; - quarter: byte -): piece_t; - - var - i, j: byte; - - begin - if quarter = 0 then - exit(piece); - for i := 1 to 3 do - for j := 1 to 3 do - rotate[i][j] := piece[j][4 - i]; - exit(rotate(rotate, pred(quarter))) - end; - - -function flip(piece: piece_t): piece_t; - var - i, j: byte; - - begin - for i := 1 to 3 do - for j := 1 to 3 do - flip[i][j] := piece[4 - i][j] - end; - - -function putable( - board: board_t; - y, x: byte; - piece: piece_t -): boolean; - - var - yoff, xoff, i, j: byte; - - begin - if not piece[1][1] then - if piece[1][2] then - begin - yoff := 1; - xoff := 2 - end - else - begin - yoff := 2; - xoff := 1 - end - else - begin - yoff := 1; - xoff := 1 - end; - - for i := 1 to 3 do - for j := 1 to 3 do - if not piece[i][j] then - continue - else if not inrange(y + i - yoff, 1, m) or - not inrange(x + j - xoff, 1, n) or - (board[y + i - yoff][x + j - xoff] > 0) then - exit(false); - putable := true - end; - - -function put( - board: board_t; - y, x: byte; - piece: piece_t; - no: byte -): board_t; - - var - yoff, xoff, i, j: byte; - - begin - if not piece[1][1] then - if piece[1][2] then - begin - yoff := 1; - xoff := 2 - end - else - begin - yoff := 2; - xoff := 1 - end - else - begin - yoff := 1; - xoff := 1 - end; - - for i := 1 to 3 do - for j := 1 to 3 do - if piece[i][j] then - board[y + i - yoff][x + j - xoff] := no; - exit(board) - end; - - -procedure solve( - board: board_t; - position: smallint; - no: byte -); - - var - y, x: smallint; - i: byte; - - begin - if done then - exit; - while (board[divide(position, n)][modulo(position, n)] > 0) and - (position <= m * n) do - inc(position); - if position > m * n then - begin - for y := 1 to m do - begin - for x := 1 to n - 1 do - write(f, board[y][x], ' '); - writeln(f, board[y][n]) - end; - done := true; - exit - end; - - y := divide(position, n); - x := modulo(position, n); - for i := 0 to 1 do - if (a > 0) and - putable(board, y, x, rotate(pieces[1], i)) then - begin - dec(a); - solve(put(board, y, x, rotate(pieces[1], i), no), position, no + 1); - inc(a) - end; - for i := 0 to 3 do - if (b > 0) and - putable(board, y, x, rotate(pieces[2], i)) then - begin - dec(b); - solve(put(board, y, x, rotate(pieces[2], i), no), position, no + 1); - inc(b) - end; - for i := 1 to 3 do - if (b > 0) and - putable(board, y, x, rotate(flip(pieces[2]), i)) then - begin - dec(b); - solve(put(board, y, x, rotate(flip(pieces[2]), i), no), position, no + 1); - inc(b) - end; - for i := 0 to 3 do - if (c > 0) and - putable(board, y, x, rotate(pieces[3], i)) then - begin - dec(c); - solve(put(board, y, x, rotate(pieces[3], i), no), position, no + 1); - inc(c) - end; - end; - - -begin - for i := 1 to 5 do - begin - assign(f, gifts[i].filename); - rewrite(f); - m := gifts[i].m; - n := gifts[i].n; - for a := 1 to m do - for b := 1 to n do - init_board[a][b] := 0; - a := gifts[i].a; - b := gifts[i].b; - c := gifts[i].c; - done := false; - solve(init_board, 1, 1); - close(f) - end; - - assign(f, 'XEPHINH4.TXT'); - reset(f); - for m := 1 to 3 do - for n := 1 to 10 do - read(f, init_board[m][n]); - close(f); - assign(f, 'XEPHINH4.TXT'); - rewrite(f); - for a := 0 to 4 do - for m := 1 to 3 do - begin - for n := 1 to 9 do - write(f, init_board[m][n] + a * 8, ' '); - writeln(f, init_board[m][10] + a * 8) - end; - close(f); - - assign(f, 'XEPHINH5.TXT'); - reset(f); - for m := 1 to 15 do - for n := 1 to 6 do - read(f, init_board[m][n]); - close(f); - assign(f, 'XEPHINH5.TXT'); - rewrite(f); - for m := 1 to 15 do - begin - for a := 0 to 3 do - for n := 1 to 6 do - write(f, init_board[m][n] + a * 20, ' '); - for n := 1 to 5 do - write(f, init_board[m][n] + 80, ' '); - writeln(f, init_board[m][6] + 80); - end; - close(f); -end. -- cgit 1.4.1