Bài tập
Viết chương trình đọc ba số nguyên m , n từ STDIN hoặc dưới dạng đối số dòng lệnh, in tất cả các góc có thể có của hình chữ nhật có kích thước m × n bằng 2 × 1 và 1 × 2 và cuối cùng là số lượng nghiêng hợp lệ.
Dominos của một ốp lát riêng lẻ phải được biểu thị bằng hai dấu gạch ngang ( -
) cho 2 × 1 và hai thanh dọc ( |
) cho domino 1 × 2 . Mỗi ốp lát (bao gồm cả lát cuối cùng) phải được theo sau bởi một dòng cấp.
Để ghi điểm, bạn cũng phải chấp nhận một cờ từ STDIN hoặc làm đối số dòng lệnh làm cho chương trình của bạn chỉ in số nghiêng hợp lệ, nhưng không phải là nghiêng.
Chương trình của bạn có thể không dài hơn 1024 byte. Nó phải làm việc cho tất cả các đầu vào sao cho m × n ≤ 64 .
(Lấy cảm hứng từ In tất cả các góc domino của hình chữ nhật 4x6 .)
Thí dụ
$ sdt 4 2
----
----
||--
||--
|--|
|--|
--||
--||
||||
||||
5
$ sdt 4 2 scoring
5
Chấm điểm
Điểm của bạn được xác định theo thời gian thực hiện chương trình của bạn cho đầu vào 8 8 với cờ được đặt.
Để biến mã này thành mã nhanh nhất thay vì thử thách máy tính nhanh nhất , tôi sẽ chạy tất cả các lần gửi trên máy tính của riêng tôi (Intel Core i7-3770, RAM 16 GiB PC3-12800) để xác định điểm chính thức.
Vui lòng để lại hướng dẫn chi tiết về cách biên dịch và / hoặc thực thi mã của bạn. Nếu bạn yêu cầu một phiên bản cụ thể của trình biên dịch / trình thông dịch ngôn ngữ của bạn, hãy đưa ra tuyên bố về hiệu ứng đó.
Tôi bảo lưu quyền để lại các bài nộp không được bảo vệ nếu:
Không có trình biên dịch / trình thông dịch miễn phí (như trong bia) cho hệ điều hành của tôi (Fedora 21, 64 bit).
Bất chấp những nỗ lực của chúng tôi, mã của bạn không hoạt động và / hoặc tạo đầu ra không chính xác trên máy tính của tôi.
Quá trình biên dịch hoặc thực thi mất nhiều hơn một giờ.
Mã của bạn hoặc trình biên dịch / trình thông dịch có sẵn duy nhất chứa một cuộc gọi hệ thống đến
rm -rf ~
hoặc một cái gì đó tương tự như cá.
Bảng xếp hạng
Tôi đã ghi lại tất cả các lần gửi, chạy cả hai phần tổng hợp và thực thi trong một vòng lặp với 10.000 lần lặp để biên dịch và từ 100 đến 10.000 lần lặp để thực hiện (tùy thuộc vào tốc độ của mã) và tính giá trị trung bình.
Đây là kết quả:
User Compiler Score Approach
jimmy23013 GCC (-O0) 46.11 ms = 1.46 ms + 44.65 ms O(m*n*2^n) algorithm.
steveverrill GCC (-O0) 51.76 ms = 5.09 ms + 46.67 ms Enumeration over 8 x 4.
jimmy23013 GCC (-O1) 208.99 ms = 150.18 ms + 58.81 ms Enumeration over 8 x 8.
Reto Koradi GCC (-O2) 271.38 ms = 214.85 ms + 56.53 ms Enumeration over 8 x 8.
--
. Nếu nó thẳng đứng, nó là hai |
, một bên dưới cái kia.