1. Trang chủ
  2. » Thể loại khác

Faculty of Computer Science and Engineering Department of Computer Science

21 7 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 21
Dung lượng 685,26 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Trong đó bao gồm thông tin về màu sắc của những quả trứng phục sinh, cùng với những sự kiện xảy ra trong lúc chuẩn bị trứng.. Mỗi hàng trứng là một danh sách màu sắc các quả trứng nằm tr

Trang 1

Bài Tập Lớn 1

EASTER BUNNY

1 Giới thiệu

Ngày xửa ngày xưa, từ trước khi Prometheus đem ngọn lửa thắp sáng cho nhân

loại, ông kẹ Pitch Black là nỗi ám ảnh gieo rắc sợ hãi cho loài người mỗi đêm

Để giúp cho nhân loại vượt trên nỗi sợ hãi để tìm đến hy vọng, tình yêu và

hạnh phúc, Man on the Moon đã tập hợp những vệ thần để gieo rắc hạt giống

niềm tin vào tâm hồn mỗi người khi họ còn là những đứa trẻ Năm vệ thần

được chọn gồm có Tooth Fairy, Santa Claus, Easter Bunny, Sandman và nay là

Jack Frost Từ đó, Pitch Black đã bị đẩy lùi vào bóng tối dưới gầm giường

Nhưng nỗi sợ hãi của những đứa trẻ vào mỗi đêm chưa đủ để thỏa mãn tham

vọng của Pitch Black Hắn âm thầm thực hiện âm mưu cướp đi niềm tin vào

phép màu, vào hạnh phúc của trẻ thơ Từ đó, một lần nữa nhấn chìm thế giới

vào bóng đêm của sự sợ hãi

Pitch Black và thuộc hạ Nightmare của hắn đã tấn công vào nơi ở của nàng

tiên răng Tooth Fairy và cướp hết những chiếc răng sữa của trẻ em cùng với ký

ức về niềm vui và hạnh phúc chứa trong đó Trong lúc các vệ thần chiến đấu

cùng Pitch Black, thì tại vương quốc Bunnymund, các chú thỏ cũng đang gấp

rút tô màu cho những quả trứng phục sinh Để tiện cho việc tô màu, những quả

trứng phục sinh được xếp thành 03 hàng Những chú thỏ sẽ tô màu cho những

quả trứng, đồng thời Pitch Black cũng không ngừng gửi những thuộc hạ đến

phá hoại Nếu đến cuối cùng, màu của những quả trứng phục sinh trùng khớp

với lời tiên tri trong bài hát của ảo thuật gia Méliès thì các vệ thần sẽ giành

chiến thắng

Trang 2

2 Yêu cầu

Trong bài tập lớn này, sinh viên sẽ được cung cấp một file chứa dữ liệu nhập

Trong đó bao gồm thông tin về màu sắc của những quả trứng phục sinh, cùng

với những sự kiện xảy ra trong lúc chuẩn bị trứng Chương trình sẽ xuất ra màn

hình thông tin màu sắc của những quả trứng sau khi quá trình chuẩn bị kết

thúc Các dữ liệu nhập xuất mà sinh viên phải xử lý đểu được biểu diễn dưới

dạng danh sách liên kết (linked list) Chi tiết mô tả dữ liệu nhập và các công

việc sinh viên phải làm được nêu trong phần dưới đây

3 Dữ liệu nhập

Dữ liệu nhập của chương trình được chứa trong file mang tên input.txt File

này sẽ chứa các thông tin như sau:

100_100_100 200_200_000 001_003_012 ;

130_100_150 200_200_010 ;

100_110_100 100_200_030 ;

0_100_001_010_1 ;

Trong đó, các thành phần dữ liệu nhập được ngăn cách bằng dấu chấm

phẩy với thứ tự lần lượt như sau:

 03 thành phần đầu tương ứng với khởi tạo 03 hàng trứng ban đầu Mỗi

hàng trứng là một danh sách màu sắc các quả trứng nằm trong hàng đó

Màu sắc quả trứng được mô tả dưới dạng R_G_B với R, G, B gồm 3 ký

số có giá trị từ 000-999 Giữa các quả trứng được ngăn cách bởi khoảng trắng Mỗi hàng chứa tối đa 2100 quả trứng

Thông tin về 3 hàng trứng ban đầu

Thông tin về các sự kiện xảy ra

Trang 3

 Thành phần cuối cùng là danh sách sự kiện xảy ra theo thứ tự thời gian

Các sự kiện cách nhau bằng khoảng trắng và được mô tả theo bảng mã

sự kiện như sau (các mã sự kiện không đúng theo mô tả sẽ bị bỏ qua)

0_R_G_B_T Một quả trứng được E.B tô màu xong và thêm vào cuối hàng

1_R_G_B_P_T Jack Frost đổi màu của một quả trứng

2_R_G_B Nightmare tấn công làm phai màu trứng

3_R_G_B Ông kẹ Pitch Black lẻn vào lấy cắp một quả trứng

4_R_G_B_M Lấy những quả trứng kì diệu để phục sinh cho Sandman

5_R_G_B_P Nhóc tiên Tooth Baby làm xáo trộn màu trứng

6_R_G_B Sophie giấu chú thỏ vào bên phải quả trứng gần giống nhất

7_S Toothiana đưa những quả trứng về trạng thái quá khứ

8_K Các chú thỏ đào hang cất giấu trứng khỏi The Monkey King

9_C Bí mật của Santa Claus

Ban đầu hàng trứng trên cùng có 03 quả trứng, hàng trứng thứ hai có 02 quả

trứng và hàng trứng cuối cùng có 01 quả trứng Trong quá trình chuẩn bị trứng

thì có một sự kiện xảy ra Đó là sự kiện, một quả trứng có màu đỏ:100, xanh

lá:001, xanh dương:010 được thêm vào hàng trứng trên cùng

Trang 4

4 Hiện thực chương trình

Sinh viên sẽ hiện thực một hàm prepare có prototype như sau:

void prepare (EEList*& top, EEList*& middle, EEList*& bottom, eventList* pEvent);

Trong đó:

a) EEList là một danh sách liên kết chứa các thông tin về màu của các quả

trứng, được khai báo như sau:

Danh sách này gồm có thông tin về mã màu của mỗi quả trứng gồm có

nCodeR (mã màu đỏ), nCodeG (mã màu xanh lá), nCodeB (mã màu xanh

dương) Danh sách khi truyền vào ban đầu là danh sách tất cả những quả trứng

được nhập vào từ file input chưa được xử lý Trong quá trình hiện thực sinh

viên sẽ thay đổi danh sách này theo thông tin mô tả ở Phần 5

Có ba con trỏ trỏ đến ba danh sách liên kết EEList được truyền vào tương ứng

với ba hàng trứng ở trên, ở giữa và ở dưới

b) eventList là một danh sách liên kết chứa thông tin về các sự kiện, được

khai báo như sau:

Danh sách này gồm có mã sự kiện và một con trỏ trỏ đến danh sách các thông

số tương ứng với từng mã sự kiện khác nhau (xem Phần 3)

Trang 5

5 Hiện thực danh sách trứng phục sinh (Easter Eggs – EE)

Khởi tạo 03 danh sách EE tương ứng với 03 hàng trứng từ file dữ liệu nhập như đã

mô tả ở Phần 3 Những quả trứng có màu hợp lệ có giá trị mã màu R_G_B với R,

G, B nằm trong khoảng 000-255 mới được đưa vào danh sách EE

Hàng trứng trên cùng có một quả trứng có mã màu RGB tương ứng

{100,100,100} Hàng trứng ở giữa có một quả trứng có mã màu RGB {130,

100,150} Hàng trứng dưới cùng có chỉ hai quả trứng mang mã màu hợp lệ

{100, 010,001} và {201,202,203}

Trong bất kì trường hợp nào, những quả trứng trong mỗi hàng đều được

chú thỏ E.B sắp xếp lại và dồn về bên trái Điều đó là vị trí của mỗi quả trứng

đều có thứ tự được đánh từ trái sang phải và có chỉ số bắt đầu là 1 Xét ví dụ 2,

quả trứng {100,100,100} nằm ở hàng trên cùng và có thứ tự là 1; ở hàng dưới

cùng, quả trứng {100,010,001} mang thứ tự 1 và quả trứng {201,202,203} mang

thứ tự 2

Trong suốt quá trình chuẩn bị trứng cho ngày lễ sẽ có những sự kiện xảy ra làm

thay đổi những danh sách này Các sự kiện cụ thể như sau:

S0) Các chú thỏ hoàn tất tô màu cho một quả trứng và thêm quả trứng đó vào cuối

một trong 03 hàng trứng ban đầu Mã sự kiện có dạng 0_R_G_B_T Trong đó

R,G,B gồm 3 ký số có giá trị từ 000-999 cho biết màu của quả trứng cần thêm T

là số nguyên cho biết hàng trứng được thêm vào Các giá trị của T thuộc {1,2,3}

Trang 6

tương ứng với {hàng trên cùng, hàng ở giữa, hàng dưới cùng} Quả trứng mới với

màu hợp lệ được thêm vào cuối hàng trứng

Ứng với mã sự kiện 0_123_234_012_3, một quả trứng có mã màu

{123,234,012} được thêm vào cuối của hàng trứng dưới cùng như sau:

Ứng với mã sự kiện 0_999_234_012_3, màu của quả trứng mới không phải là

giá trị hợp lệ, quả trứng không được thêm vào hàng

S1) Jack Frost là một vệ thần rất nghịch ngợm Để trêu chọc Easter Bunny, Jack

Frost cố tình đổi màu của một quả trứng bất kì Mã sự kiện có dạng

1_R_G_B_P_T Trong đó, P là số nguyên dương chỉ vị trí của quả trứng bị đổi

màu trong hàng T Màu mới của quả trứng được xác định bởi R,G,B Các giá trị

R,G,B, T được định nghĩa giống như ở mục S0 Nếu vị trí P không tồn tại trong

hàng T, Jack Frost sẽ không đổi màu trứng và danh sách trứng được giữ nguyên

Trang 7

Lưu ý: Jack Frost là một vệ thần bất quy tắc, do đó màu sắc mới của quả trứng

bị thay đổi không cần là màu sắc hợp lệ mà có thể là giá trị bất kì trong khoảng

S2) Để ngăn cản không cho các chú thỏ hoàn thành vẽ trứng trước lễ Phục Sinh,

ông kẹ Pitch Black cử bọn Nightmare tấn công vương quốc Bunnymund Mỗi đợt

tấn công, bọn Nightmare sẽ làm tất cả số trứng bị phai màu Mã sự kiện có dạng

2_R_G_B Màu của mỗi quả trứng sẽ bị giảm một lượng R,G,B tương ứng với ba

chỉ số R,G,B ban đầu Màu của quả trứng chỉ có thể bị giảm về 000

Ví dụ 7: Với dữ liệu nhập là

100_100_100 ;

130_100_150 ;

Trang 8

S3) Biết được lời tiên tri của Méliès về sự chiến thắng của các vệ thần, ông kẹ

Pitch Black lẻn vào vương quốc Bunnymund để lấy cắp trứng nhằm ngăn lời tiên

tri trở thành sự thật Mã sự kiện có dạng 3_R_G_B, với R,G,B là những số nguyên

định nghĩa như mục S0 Do Pitch Black không biết hết lời tiên tri chỉ biết được

màu gần đúng của một quả trứng xác định bằng giá trị R,G,B ở trên, hắn sẽ lựa

chọn quả trứng có màu gần giống nhất và lấy nó đi khỏi hàng trứng Mức độ

giống nhau giữa hai quả trứng được tính bằng khoảng cách Mahatan như sau:

mdiff({R1,G1,B1},{R2,G2,B2}) = |R1-R2| +|G1-G2| + |B1-B2|

Hai quả trứng có màu càng gần giống nhau nếu khoảng cách trên giữa chúng

càng nhỏ Nếu có nhiều quả trứng gần giống với lời tiên tri, để tiết kiệm thời gian,

Pitch Black sẽ lấy cắp quả trứng gần nhất theo thứ tự ưu tiên hàng trứng (từ trên

xuống) và vị trí từ trái sang phải trong mỗi hàng

Ví dụ 8: Với dữ liệu nhập là

100_100_100 ;

Trang 9

Pitch Black tìm được hai quả trứng {100,100,100} và {100,110,100} với cùng

mdiff = 5 nhỏ nhất, lúc này hắn lựa chọn quả trứng gần nhất theo thứ tự ưu tiên

là {100,100,100} và lấy nó khỏi hàng trứng

;

130_100_150 ;

100_110_100 ;

S4) Trong lúc đánh nhau với Pitch Black, thần ngủ Sandman mắc bẫy và bị giết

chết Vô cùng đau buồn trước cái chết của Sandman, Jack Frost cùng những chú

thỏ tập hợp những quả trứng phục sinh để cứu Sandman sống lại Mã sự kiện có

dạng 4_R_G_B_M Trong đó, màu của quả trứng kì diệu trong truyền thuyết được

xác định bởi R,G,B là những số nguyên định nghĩa như mục S0 Chỉ những quả

trứng gần giống với quả trứng kì diệu với giá trị mdiff nhỏ hơn ngưỡng quy định

M mới có thể giúp Sandman sống lại Những quả trứng này sẽ được lấy ra khỏi

hàng trứng và giúp hổi sinh Sandman

Trang 10

Hai quả trứng {100,100,100} và {100,110,100} với cùng mdiff = 5 < 10 sẽ được

lấy ra khỏi hàng trứng để hổi sinh Sandman

;

130_100_150 ;

;

S5) Nhóc tiên Tooth Baby muốn giúp các chú thỏ vẽ trứng phục sinh Nhưng với

bản tính hậu đậu, Tooth Baby lại làm xáo trộn màu sắc của các quả trứng Thay vì

tô màu cho trứng, nhóc tiên sẽ hoán đổi màu của quả trứng với màu hiện có

Mã sự kiện có dạng 5_R_G_B_P cho biết màu sắc và vị trí ban đầu trong hàng

trứng mà Tooth Baby định tô màu Tooth Baby sẽ làm xáo trộn màu sắc trứng theo

quy luật dưới đây:

 Tooth Baby sẽ bắt đầu hoán đổi màu ban đầu với màu của quả trứng ở vị trí

P trong hàng tương ứng nếu vị trí đó có tồn tại trong hàng, nếu không nhóc

tiên sẽ chuyển xuống hàng kế tiếp Thứ tự ưu tiên là từ hàng trên cùng

xuống hàng giữa và hàng dưới cùng Nếu vị trí P không tồn tại trong cả ba

hàng, Tooth Baby sẽ không tô màu và danh sách EE giữ nguyên

 Sau đó, Tooth Baby sẽ tiếp tục bay đến cho những quả trứng xung quanh và

hoán đổi màu hiện có với màu quả trứng ở vị trí mới Vốn dĩ thích màu

xanh nên nhóc tiên sẽ lựa chọn trong những quả trứng ở vị trí lân cận theo

thứ tự dưới, trên, trái, phải vị trí có thành phần G lớn hơn màu hiện có Quá

trình hoán đổi màu sẽ tiếp tục cho đến khi vị trí như vậy không tồn tại

Trang 11

Tooth Baby sẽ đậu vào quả trứng {100,100,106} ở vị trí thứ 4 của hàng giữa và

hoán đổi màu sắc ban đầu với màu của quả trứng này

100_100_100 100_100_102 100_100_100 ;

130_100_150 100_100_100 100_150_100 100_100_200 ;

100_110_100 130_100_150 100_100_100 100_100_100;

Tiếp theo, nhóc tiên sẽ lần lượt xem xét quả trứng ở vị trí dưới {100,100,100},

trái {100,150,100} và chọn vị trí đầu tiên theo thứ tự đó có giá trị G lớn hơn

màu hiện có, ở đây là vị trí trái {100,150,100} và hoán đổi với màu hiện có

{100,100,106}

100_100_100 100_100_102 100_100_100 ;

130_100_150 100_100_100 100_100_106 100_100_200 ;

100_110_100 130_100_150 100_100_100 100_100_100;

Lúc này các vị trí dưới {100,100,100}, trên {100,100,100}, trái {100,100,100}

và phải {100,100,200} đều có giá trị G nhỏ hơn màu hiện có {100,150,100} nên

nhóc tiên Tooth Baby dừng quá trình xáo trộn màu trứng

S6) Khi Pitch Black tập kích vào vương quốc Bunnymund, cô bé Sophie hóa trang

các chú thỏ thành những quả trứng phục sinh và giấu vào hàng trứng Mã sự kiện

có dạng 6_R_G_B Trong đó, ba ký số R,G,B được định nghĩa như mục S0 cho

biết màu của quả trứng mà Sophie hóa trang cho chú thỏ Để không bị phát hiện,

cô bé sẽ giấu chú thỏ vào bên phải quả trứng có màu gần giống nhất (được mô tả

Trang 12

trong mục S3) Nếu cả ba hàng trứng đều rỗng, Sophie sẽ đặt chú thỏ vào hàng

Sophie hóa trang chú thỏ thành quả trứng có màu {100,100,105} và giấu vào vị

trí bên phải của quả trứng {100,100,104} với mdiff = 1 và độ ưu tiên cao hơn

S7) Nàng tiên răng Toothiana thường có những linh cảm về quá khứ nhưng không

phải lúc nào cũng chính xác Những lúc như vậy, nàng sẽ đưa trạng thái của những

quả trứng về trước đó một khoảng thời gian Mã sự kiện có dạng 7_S cho biết

trạng thái của những quả trứng sẽ bị lùi S sự kiện Do phép thuật của Toothiana có

giới hạn nên nàng chỉ có thể thay đổi một nửa số trứng mỗi hàng (làm tròn lên nếu

số trứng là số lẻ) Hàng trứng mới được tạo thành bằng cách ghép nửa sau của

danh sách EE trong quá khứ vào cuối nửa đầu của danh sách EE hiện tại Ngoài ra,

số sự kiện S chỉ giới hạn là 1 hoặc 2 Nếu số sự kiện đã xảy ra nhỏ hơn S, hàng

trứng sẽ được đưa về trạng thái ban đầu

Ví dụ 13: Với dữ liệu nhập là

100_100_100 100_100_102 100_100_100 ;

130_100_150 100_100_100 100_100_104 100_100_106 ;

Trang 13

S8) Nhận thấy các chú thỏ sắp hoàn tất tô màu trứng phục sinh, Pitch Black sai

The Monkey King phá hoại số trứng Thỏ E.B chỉ đạo thần dân vương quốc đào

hang và đưa trứng xuống giấu Sau khi The Monkey King bị đánh bại, số trứng lại

được đưa lên và xếp trở lại vào hàng Mã sự kiện có dạng 8_K trong đó K cho biết

cách thức các chú thỏ đào hang, bao gồm các giá trị

 K=1 hang được đào chỉ có một cửa

 K=2 hang được đào có 2 cửa vào/ra, nhưng cửa vào bị The Monkey King

chặn lại khi rút lui

Trang 14

 K=3 hang được đào có 2 cửa vào/ra

Những quả trứng sẽ được đưa xuống hang theo thứ tự hàng từ trên xuống và từ

trái sang phải trong hàng Tùy thuộc vào cách thức đào hang mà trứng sẽ được lấy

ra để xếp lại vào hàng, cụ thể như sau

 K=1 hang chỉ có một cửa nên quả trứng đưa vào sau sẽ được lấy ra trước

 K=2 cửa vào bị chặn nên chỉ có thể lấy trứng từ cửa ra, quả trứng đưa vào

trước sẽ được lấy ra trước

 K=3 trứng được lấy đồng thời từ hai phía cửa hang, trứng được lấy từ lần

lượt từ cửa vào rồi đến cửa ra

Sau đó, trứng sẽ được chia đều vào ba hàng sao cho số trứng ở hàng trên luôn nhỏ

hơn hoặc bằng hàng dưới

Trứng được lấy ra theo thứ tự {100,100,100}, {100,100,102}, {130, 100, 150},

{100,100,100}, {100,110,100} và giấu vào hang

100_100_100

Sau khi The Monkey King rút lui, ứng với K = 1, trứng sẽ được lấy ra theo thứ

tự và xếp lại vào hàng, danh sách EE trở thành

100_110_100 ;

100_100_100 130_100_150 ;

100_100_102 100_100_100 ;

Trang 15

Trứng được lấy ra theo thứ tự {100,100,100}, {100,100,102}, {130, 100, 150},

{100,100,100}, {100,110,100} và giấu vào hang

Trứng được lấy ra theo thứ tự {100,100,100}, {100,100,102}, {130, 100, 150},

{100,100,100}, {100,110,100} và giấu vào hang

Ngày đăng: 21/09/2022, 10:36

HÌNH ẢNH LIÊN QUAN

 display( ): hàm xuất dữ liệu ra màn hình. - Faculty of Computer Science and Engineering Department of Computer Science
display ( ): hàm xuất dữ liệu ra màn hình (Trang 19)

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w