Nhiệm vụ của bạn trong thử thách này là phân tích một "Phương trình que diêm" đã cho như thế này ...
... Và để tìm hiểu xem liệu nó có thể được biến thành một phương trình hợp lệ hay không bằng cách sắp xếp lại các trận đấu. Nếu vậy, bạn phải xuất ra số lượng di chuyển ít nhất để làm như vậy và phương trình kết quả.
Đầu vào
Đầu vào là một Chuỗi có thể được đọc từ STDIN, được lấy làm đối số chức năng hoặc thậm chí được lưu trữ trong một tệp. Đây là một phương trình đại diện cho sự sắp xếp que diêm và có thể được mô tả bằng EBNF sau:
input = term, "=", term ;
term = number | (term, ("+" | "-"), term) ;
number = "0" | (numeralExceptZero , {numeral}) ;
numeralExceptZero = "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ;
numeral = "0" | numeralExceptZero ;
Một ví dụ cho một đầu vào hợp lệ sẽ là 3+6-201=0+0+8
.
Bài tập
Hãy xem xét hình minh họa sau đây trong đó mỗi que diêm có một số được gán:
Bây giờ chúng ta ánh xạ từng ký hiệu đầu vào vào các vị trí que diêm tương ứng như sau:
0 ↦ 1,2,3,4,5,6
1 ↦ 4,5
2 ↦ 2,3,5,6,8
3 ↦ 3,4,5,6,8
4 ↦ 1,4,5,8
5 ↦ 1,3,4,6,8
6 ↦ 1,2,3,4,6,8
7 ↦ 4,5,6
8 ↦ 1,2,3,4,5,6,8
9 ↦ 1,3,4,5,6,8
- ↦ 8
+ ↦ 8,10
= ↦ 7,9
Mỗi công thức đầu vào có thể được biến thành một sự sắp xếp que diêm. Ví dụ: phương trình "45 + 6 = 92" trở thành
nơi que diêm không sử dụng được tô màu xám. Nhiệm vụ của bạn là tìm ra số lượng que diêm ít nhất phải được sắp xếp lại để làm cho phương trình hợp lệ.
Đầu ra
Chúng tôi phân biệt giữa ba trường hợp có thể:
- Nếu đầu vào không hợp lệ (nghĩa là nó không thỏa mãn EBNF ở trên), hãy xuất bất cứ thứ gì bạn muốn.
- Mặt khác, nếu có nhiều cách để biến phương trình thành phương trình hợp lệ bằng cách sắp xếp lại các que diêm, bạn phải xuất cả số lượng sắp xếp lại tối thiểu và phương trình tương ứng. Giống như đầu vào, phương trình xuất ra cũng phải thỏa mãn EBNF đã cho. Trong ví dụ trên, đầu ra chính xác sẽ là
1
và46+6=52
. Nếu có nhiều khả năng cho phương trình kết quả, xuất bất kỳ trong số chúng. - Mặt khác (vì vậy nếu đầu vào hợp lệ nhưng không có cách nào để biến phương trình thành đúng), bạn phải xuất
-1
.
Chi tiết
- Bạn không được phép loại bỏ hoặc thêm các trận đấu. Điều đó có nghĩa là, nếu đầu vào được xây dựng bằng
n
que diêm, đầu ra cũng phải bao gồm chính xác cácn
que diêm. - Các khối que diêm "rỗng" chỉ được phép ở cuối và đầu của một phương trình, không phải ở giữa. Vì vậy, ví dụ, chuyển
7-1=6
vào7 =6-1
bằng cách đơn giản là loại bỏ-1
từ bên trái và thêm nó vào bên phải chỉ với 3 sắp xếp lại que diêm là không được phép. Vì tôi thực sự không thấy ánh xạ từ các số đến các vị trí của que diêm là một phần thú vị của thử thách này, cộng thêm 20 byte , bạn có thể
- truy cập một tệp trong đó ánh xạ
(number/operation ↦ matchstick positions)
được lưu trữ theo bất kỳ cách hợp lý nào, hoặc - nếu ngôn ngữ lập trình của bạn hỗ trợ
Map
kiểu dữ liệu, giả sử rằng bạn có quyền truy cập vào bản đồ được xác định trước bằng cách lập bản đồ(number/operation ↦ matchstick positions)
. Bản đồ này có thể ví dụ như thế:{(0,{1,2,3,4,5,6}),(1,{4,5}),(2,{2,3,5,6,8}),(3,{3,4,5,6,8}), ..., (-,{8}),(+,{8,10}),(=,{7,9})}
- truy cập một tệp trong đó ánh xạ
Ví dụ
Input: 1+1=3
↦ Output: 1
và1+1=2
Input: 15+6=21
↦ Output: 0
và15+6=21
Input: 1=7
↦ Output: -1
Input: 950-250=750
↦ Output: 2
và990-240=750
Input: 1-2=9
↦ Output: 1
và1+2=3
Input: 20 + 3=04
↦ Output: bất cứ điều gì
Người chiến thắng
Đây là môn đánh gôn , vì vậy câu trả lời đúng ngắn nhất (tính bằng byte) sẽ thắng. Người chiến thắng sẽ được chọn một tuần sau khi câu trả lời đúng đầu tiên được đăng.
=
(2 que diêm) và -
(1 que diêm) và để lại tất cả các số mà chúng đang ở. Tuy nhiên, nếu 2 phải được di chuyển sang trái, bạn cũng sẽ phải tính các bước di chuyển cần thiết.
1+1+2=3-6+10
nào? Và câu hỏi tương tự về đầu ra.
0: 1, 2, 3, 4, 5, 6
để thống nhất