Giới thiệu
Thử thách này được lấy cảm hứng từ Grime , ngôn ngữ phù hợp với mô hình 2D của tôi. Về cơ bản, bạn được cung cấp một "ngữ pháp" mô tả các lưới ký tự hai chiều và công việc của bạn là tạo ra một lưới theo ngữ pháp. Ngoài ra, lưới nên càng nhỏ càng tốt theo một nghĩa yếu nhất định.
Đầu vào
Đầu vào của bạn là một chuỗi chứa các ký tự ASCII chữ thường và các ký hiệu |
và -
. Để đơn giản, đầu vào không chứa các ký tự chữ thường lặp đi lặp lại. Chuỗi là một đặc tả cho một lớp các lưới ký tự hình chữ nhật và nó được phân tích cú pháp từ trái sang phải bằng cách sử dụng một ngăn xếp như sau.
- Cho một ký tự chữ thường
c
, đẩy vào ngăn xếp mộtm×n
lưới của ký tực
, cho bất kỳm, n ≥ 1
. - Đưa ra một đường ống
|
, bật hai lướiA
vàB
từ ngăn xếp (B
ở trên cùng) và đẩy lướiAB
thu được bằng cách nốiB
bên phảiA
. Điều này đòi hỏi điều đóA
vàB
có chiều cao bằng nhau. - Đưa ra một dấu gạch nối
-
, bật hai lướiA
vàB
từ ngăn xếp (B
ở trên cùng) và đẩy lướiA/B
thu được bằng cách ghépB
vào đáyA
. Điều này đòi hỏi điều đóA
vàB
có chiều rộng bằng nhau.
Nó được đảm bảo rằng đối với một số lựa chọn m
và n
được thực hiện trong quá trình phân tích cú pháp (có thể khác nhau cho mỗi chữ cái), đặc tả đầu vào mô tả chính xác một số hình chữ nhật, còn lại trên ngăn xếp ở cuối.
Đầu ra
Đầu ra của bạn là một lưới hình chữ nhật gồm các ký tự được chỉ định bởi đầu vào. Lưới phải tối thiểu theo nghĩa là loại bỏ bất kỳ hàng hoặc cột nào sẽ làm cho nó không hợp lệ. Bạn có thể trả về một chuỗi phân tách dòng mới (có hoặc không có dòng mới), một mảng ký tự 2D hoặc một chuỗi các chuỗi, tùy theo định dạng nào thuận tiện nhất.
Lưu ý rằng bạn không bắt buộc phải xử lý đầu vào chính xác như được mô tả ở trên; Điều quan trọng duy nhất là đầu ra của bạn là chính xác.
Thí dụ
Xem xét các đặc điểm kỹ thuật
par-s||e-
Đầu tiên, chúng tôi chọn đẩy một 1×2
hình chữ nhật p
và 1×1
hình chữ nhật của a
và r
(lý do cho điều này sẽ rõ ràng sau). Sau đó, chúng tôi bật các hình chữ nhật a
và r
hình chữ nhật, và đẩy nối dọc của chúng
a
r
Tiếp theo, chúng ta đẩy một 1×2
hình chữ nhật s
, bật nó và hình chữ nhật ở trên, và đẩy nối ngang của chúng
as
rs
Sau đó, chúng tôi bật hình chữ nhật đó và p
hình chữ nhật, và đẩy nối của chúng
pas
prs
Cuối cùng, chúng ta đẩy một 3×1
hình chữ nhật của e
, bật nó và hình chữ nhật ở trên, và đẩy nối dọc
pas
prs
eee
Đây là đầu ra của chương trình, hoặc ít nhất một trong các khả năng. Mặc dù vậy
ppas
ppas
pprs
eeee
cũng được tạo bởi đặc tả, nó không phải là đầu ra hợp lệ, vì nhiều hàng và cột có thể bị xóa.
Như một ví dụ tinh tế hơn, hãy xem xét
co|m|p|il|e|r|-
Đặc điểm kỹ thuật này tạo ra hình chữ nhật
comp
iler
đó là một đầu ra hợp lệ. Tuy nhiên, nó cũng tạo ra
commp
iiler
cũng hợp lệ vì không có hàng hoặc cột nào có thể bị xóa mà không làm mất hiệu lực của nó.
Quy tắc
Bạn có thể cung cấp một chương trình đầy đủ hoặc một chức năng. Số byte thấp nhất sẽ thắng và các sơ hở tiêu chuẩn không được phép.
Các trường hợp kiểm tra thêm
Bạn có thể sử dụng chúng để kiểm tra chương trình của bạn.
Input:
a
Output:
a
Input:
co|mp|l|-ex|i|f|-y|
Example output:
cccoy
mplly
exify
Input:
ja-r|g-o|ni-|ze|d-|
Example output:
jronze
arondd
ggoidd
Input:
un|co|p-yr|i|gh-t-ab|-|le-||-
Example output:
unnnnnnn
coyriggl
ppyrihhe
ppyritte
ppyriabe
n
và m
được chọn không xác định. Nó được đảm bảo rằng các giá trị phù hợp cho chúng tồn tại, nhưng công việc của chương trình là tìm ra chúng.
un|co|p-|yr|i|gh--t-ab|-|le-||-
là không thể có giá trị. Cái cuối cùng -
có 2, trong khi chỉ có 1 phần tử trên ngăn xếp.