tín dụng
Tôi cảm ơn câu hỏi dựa trên thư của Rand Al'Thor cho cảm hứng cho thử thách chơi gôn mã này.
Lý lịch
Bản chất của thử thách này dựa trên thuật toán được Rand đề cập trong cuốn "Một tam giác hình thành ba chữ cái":
- Bắt đầu với một chuỗi gồm 10 chữ cái, mỗi chữ cái là X, Y hoặc Z.
- Dưới mỗi hàng, xây dựng hàng tiếp theo như sau. Nếu hai chữ cái liền kề giống nhau, hãy viết cùng một chữ cái bên dưới chúng; nếu chúng khác nhau, hãy viết chữ cái thứ ba bên dưới chúng.
Sau đó, bạn sẽ lặp lại bước trước cho đến khi bạn có một chữ cái trong hàng thứ mười của bạn.
Thử thách
Chúng ta sẽ đặt một vòng xoáy toán học vào thuật toán trên:
- Hãy bắt đầu với một chuỗi gồm 10 chữ số, mỗi chữ số cách nhau một khoảng trắng và mỗi chữ số là 1, 2 hoặc 3.
- Dưới mỗi hàng, xây dựng hàng tiếp theo như sau. Nếu hai chữ số liền kề giống nhau, hãy viết cùng một chữ số bên dưới chúng; nếu chúng khác nhau, hãy viết chữ số thứ ba bên dưới chúng.
- Lặp lại bước trước cho đến khi bạn có một số cuối cùng.
Vì vậy, theo thuật toán này, nếu bắt đầu bằng hàng 1 2 3 3 1 3 1 3 1 2
, ví dụ, tam giác sau được tạo:
Input: 1 2 3 3 1 3 1 3 1 2
Output:
1 2 3 3 1 3 1 3 1 2
3 1 3 2 2 2 2 2 3
2 2 1 2 2 2 2 1
2 3 3 2 2 2 3
1 3 1 2 2 1
2 2 3 2 3
2 1 1 1
3 1 1
2 1
3
Tôi cũng tò mò muốn biết tổng của tất cả các chữ số trong tam giác số, vì vậy hãy thêm tất cả các chữ số này và đặt tổng này vào hàng thứ mười một, được chứng minh đúng cho chữ số cuối cùng trong hàng đầu tiên. Vì vậy, tam giác số của chúng ta sẽ trông giống như sau (khoảng trắng trong ví dụ của tôi được biểu thị bên dưới bởi .
ký tự để hiển thị định dạng.)
Input: 1 2 3 3 1 3 1 3 1 2
Output:
1.2.3.3.1.3.1.3.1.2
.3.1.3.2.2.2.2.2.3.
..2.2.1.2.2.2.2.1..
...2.3.3.2.2.2.3...
....1.3.1.2.2.1....
.....2.2.3.2.3.....
......2.1.1.1......
.......3.1.1.......
........2.1........
.........3.........
................109
Thách thức của bạn là viết mã có thể bắt đầu bằng một chuỗi / mảng / mảng được nhập. gồm mười chữ số, theo ví dụ của tôi, và sau đó áp dụng thuật toán để tạo mười hàng sẽ tạo ra tam giác số, theo sau là hàng thứ 11 sẽ hiển thị tổng số tất cả các chữ số với chứng minh đúng.
Kiểm tra
Việc kiểm tra chuỗi này có thể được thực hiện với một chuỗi được tạo ngẫu nhiên gồm mười chữ số bạn chọn hoặc một chuỗi được tạo từ đoạn trích bên dưới ...
c1=()=>('1331123221'+(Math.random()*(1<<24)|0).toString(4)).replace(/0/g, "").slice(-10).split("").join(" ");
$("#btn").click(function(){
$("#str").val(c1());
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" id="str"><button id="btn">Get numbers</button>
<br>
Please use this snippet to generate a starting row for testing your code. Alternatively, you can also use a string of your choice, so long as it's ten digits (ranging from 1 to 3), separated by single spaces.
Quy tắc
- Áp dụng quy tắc chơi gôn, vì vậy số byte thấp nhất sẽ chiến thắng thử thách. Trong trường hợp có hai mục có cùng số điểm thấp, người chiến thắng sẽ được trao dựa trên số phiếu bầu tăng.
- Về cơ bản, chúng tôi có 11 hàng, dài 19 ký tự ... Cách bạn kết xuất đầu ra cuối cùng hoàn toàn phụ thuộc vào bạn: mảng, bàn điều khiển, đầu ra tệp, STDOUT, v.v., vì vậy hãy sử dụng bất kỳ phương thức đầu ra nào bạn muốn làm việc để lợi thế của bạn. Quy tắc duy nhất trong đầu ra là chúng ta có 11 hàng với 19 ký tự ở mỗi hàng có định dạng tương tự như trên ...
- Nếu nó giúp mã của bạn, hãy sử dụng bất kỳ dấu phân cách nào cho các chữ số ... Chỉ cần nhớ rằng mức độ dễ đọc có thể là một yếu tố góp phần.
- Không có sơ hở ngớ ngẩn .
- Mã hóa cứng của đầu vào không được phép. Mục đích của mã này là nó có thể được sử dụng để tạo ra các kết quả khác nhau mỗi lần với đầu vào khác nhau. Mã hóa cứng
1 1 1 1 1 1 1 1 1 1
chẳng hạn, phủ nhận hoàn toàn toàn bộ điểm của thuật toán.
Nhìn về phía trước để xem những gì tất cả các bạn có thể đến với!