Tín dụng cho @ Agawa001 để đưa ra câu hỏi này.
Giải trình
"Keybore" mới của tôi chỉ có 2 nút, cụ thể là +
và -
.
Số trong bộ nhớ bắt đầu từ 0
.
Mỗi lần nhấn liên tiếp +
hoặc -
sẽ tăng / giảm bộ nhớ trong chính xác bao nhiêu lần nó đã được nhấn liên tiếp.
Do đó, nếu bạn nhấn +
4 lần, lần đầu tiên nó thêm 1, lần thứ hai thêm 2 lần, lần thứ ba thêm 3, lần thứ tư thêm 4 lần, cho bạn 10
(mười).
Bây giờ, nếu bạn nhấn -
3 lần, lần đầu tiên nó trừ 1, lần thứ hai 2, lần thứ ba 3, để lại cho bạn 4
(bốn).
TL; DR
Cho một chuỗi + và -, chia nó cho mỗi lần thay đổi ký tự. Sau đó, mỗi chuỗi kết quả của +
các ký hiệu m sẽ thêm số tam giác thứ m và mỗi chuỗi của -
các ký hiệu n sẽ trừ đi số tam giác thứ n.
Đi qua
Bây giờ, nếu bạn vẫn không hiểu, tôi sẽ chỉ cho bạn cách +++--+--
tạo 1
.
Program | Counter | Memory
----------------------------
| 0 | 0
+ | +1 | 1
++ | +2 | 3
+++ | +3 | 6
+++- | -1 | 5
+++-- | -2 | 3
+++--+ | +1 | 4
+++--+- | -1 | 3
+++--+-- | -2 | 1
Bài tập
- Bạn sẽ lấy một số nguyên dương làm đầu vào, làm đối số chức năng hoặc từ STDIN.
- Sau đó, bạn sẽ xuất / in số lượng tổ hợp phím tối thiểu cần thiết để tạo số đó bằng phương pháp trên.
Tủ thử
Vì sắp xếp lại các lần chạy +
hoặc -
cho cùng một số, đối với mỗi nhóm như vậy, chỉ có trình tự sớm nhất về mặt từ vựng được liệt kê.
Input | Output | Possible corresponding sequences
-------------------------------------------------
4 | 5 | -+++-
6 | 3 | +++
9 | 5 | ++++-
11 | 7 | +++-+++
12 | 7 | +++++--, ++++-++
19 | 8 | -++++++-
39 | 12 | +++++++++---
40 | 13 | +++++++++---+, ++++++++-+++-
45 | 9 | +++++++++
97 | 20 | ++++++++++++++--+---, +++++++++++++-++++--, ++++++++++++-++++++-
361 | 34 | ++++++++++++++++++++++++++-+++-+++
Tài nguyên bổ sung
- Bằng chứng là bất kỳ số nào cũng có thể được thực hiện : về cơ bản, bằng cách lặp lại
++-
, bạn có thể có được bất kỳ số chẵn nào. Để có được các số lẻ, chỉ cần đặt một+
ở cuối. - Một cách chung khác để có được bất kỳ số nào. Ví dụ: để tạo
50
, một cách là nhấn+
50 lần, sau đó nhấn-
49 lần. - Lời giải của 50 số đầu tiên .
- JSFiddle bắt buộc .
Chấm điểm
Đây là môn đánh gôn . Giải pháp ngắn nhất trong byte thắng.
+++++--
cũng là một thay thế, nhưng tôi loại bỏ ++-++++
vì đó là tương đương với ++++-++
). Tôi vẫn còn một trường hợp nữa tôi muốn thêm vào sau này trong trường hợp bất kỳ ai đưa ra giải pháp hiệu quả, nếu tôi quản lý tạo ra nó.
++-++++
xóa. Ngoài ra, đây là chỉnh sửa CỦA TÔI, không phải CỦA BẠN.
+++++--
(hoặc, tương đương, --+++++
), đó là lý do tại sao tôi cảm thấy cần phải chỉnh sửa ngay từ đầu.