Trong thử thách này, người dùng sẽ lần lượt hoàn thành ba nhiệm vụ mã hóa khá đơn giản bằng các ngôn ngữ lập trình được phép tiến bộ cũ hơn.
Câu trả lời đầu tiên phải sử dụng ngôn ngữ lập trình được thực hiện trong năm 2015. Một khi có ít nhất một câu trả lời từ ngôn ngữ 2015, câu trả lời có thể sử dụng ngôn ngữ lập trình được thực hiện vào năm 2014. Tương tự, câu trả lời sử dụng ngôn ngữ từ năm 2013 không được phép cho đến khi có ít nhất một câu trả lời năm 2014
Nói chung, không được phép sử dụng ngôn ngữ lập trình từ năm Y cho đến khi câu trả lời sử dụng ngôn ngữ từ năm Y + 1 đã được gửi. Ngoại lệ duy nhất là Y = 2015.
Tìm ngôn ngữ của bạn
Để trả lời câu hỏi này, bạn phải biết năm mà ngôn ngữ lập trình của bạn được "thực hiện". Tất nhiên đây là một thuật ngữ chủ quan; một số ngôn ngữ đã được phát triển trong nhiều năm và nhiều ngôn ngữ vẫn đang được nâng cấp hàng năm. Hãy để năm mà một ngôn ngữ được "tạo ra" là năm đầu tiên việc triển khai ngôn ngữ đó xuất hiện trong công chúng.
Ví dụ, Python được "sản xuất" năm 1991 , mặc dù sự phát triển của nó đã được tiến hành từ năm 1989 và phiên bản 1.0 không được phát hành cho đến năm 1994.
Nếu năm nay vẫn chủ quan, chỉ cần sử dụng ý thức chung của bạn để chọn năm thích hợp nhất. Đừng sa lầy vào những bất đồng nhỏ về lựa chọn năm. Vui lòng cung cấp một liên kết đến một nguồn cho biết khi ngôn ngữ của bạn được thực hiện.
Các phiên bản hoặc tiêu chuẩn khác nhau của ngôn ngữ lập trình (ví dụ Python 1, 2, 3) được tính là cùng một ngôn ngữ với cùng một năm đầu tiên.
Vì vậy, trừ khi năm ngôn ngữ của bạn là 2015, bạn chỉ có thể gửi câu trả lời của mình sau khi câu trả lời đã được gửi mà năm của ngôn ngữ là năm ngay trước bạn.
Nếu câu trả lời hợp lệ cùng năm với câu trả lời của bạn đã tồn tại, thì bạn có thể trả lời. Không có vấn đề gì nếu ngôn ngữ của bạn được phát triển sớm hơn hoặc muộn hơn trong năm.
Nhiệm vụ
Bạn phải hoàn thành Nhiệm vụ 1 đến 3. Nhiệm vụ 0 là tùy chọn.
Các tác vụ này ít nhiều được chọn để tương ứng với ba khía cạnh quan trọng của lập trình: cung cấp đầu ra (Nhiệm vụ 1), lặp (Nhiệm vụ 2) và đệ quy (Nhiệm vụ 3).
Nhiệm vụ 0 - Lịch sử ngôn ngữ (tùy chọn)
Viết ít nhất một đoạn văn giải thích lịch sử của ngôn ngữ lập trình bạn đã chọn: ai đã phát triển nó, tại sao, như thế nào, v.v ... Điều này đặc biệt được khuyến khích nếu cá nhân bạn có mặt khi ngôn ngữ ra đời, và thậm chí có thể đóng vai trò trong sự phát triển của nó. Vui lòng liên hệ các giai thoại cá nhân về ảnh hưởng của ngôn ngữ đối với bạn hoặc công việc của bạn, hoặc bất cứ điều gì tương tự.
Nếu bạn còn quá trẻ để biết nhiều về lịch sử ngôn ngữ của bạn mà không cần nghiên cứu nhiều, hãy cân nhắc để lại một ghi chú cho người dùng lớn tuổi nói rằng họ có thể chỉnh sửa bài đăng của bạn và thêm vào một số lịch sử trực tiếp.
Nhiệm vụ 1 - "Xin chào, Thế giới!" Biến thể
Viết chương trình in
[language name] was made in [year made]!
đến khu vực đầu ra tiêu chuẩn của ngôn ngữ của bạn (thiết bị xuất chuẩn cho các ngôn ngữ gần đây nhất).
Ví dụ: nếu ngôn ngữ là Python, đầu ra sẽ là:
Python was made in 1991!
Nhiệm vụ 2 - ASCII Art N
Viết chương trình cho phép người dùng nhập số nguyên dương lẻ (bạn có thể cho rằng đầu vào luôn hợp lệ) và in ra một chữ cái nghệ thuật ASCII N được tạo bằng ký tự N
.
Nếu đầu vào là 1, đầu ra là:
N
Nếu đầu vào là 3, đầu ra là:
N N
NNN
N N
Nếu đầu vào là 5, đầu ra là:
N N
NN N
N N N
N NN
N N
Nếu đầu vào là 7, đầu ra là:
N N
NN N
N N N
N N N
N N N
N NN
N N
Các mô hình tiếp tục như thế này. Đầu ra có thể chứa dấu cách.
Nhiệm vụ 3 - GCD
Viết chương trình cho phép người dùng nhập hai số nguyên dương (bạn có thể cho rằng đầu vào luôn hợp lệ) và in ước số chung lớn nhất của chúng . Đây được định nghĩa là số nguyên dương lớn nhất chia cả hai số mà không để lại phần dư. Nó có thể được tính toán dễ dàng bằng thuật toán Euclide .
Ví dụ:
8
, 12
→ 4
12
, 8
→ 4
3
, 30
→ 3
5689
, 2
→ 1
234
, 876
→6
Bạn có thể sử dụng chức năng tích hợp nhưng hãy thử tìm hiểu xem nó có ở phiên bản đầu tiên của ngôn ngữ của bạn không. Nếu không, hãy thử không sử dụng nó.
Quy tắc
- Bạn có thể trả lời nhiều lần, nhưng mỗi câu trả lời mới phải sử dụng một ngôn ngữ được thực hiện ít nhất 5 năm trước ngôn ngữ trong câu trả lời cuối cùng của bạn. Vì vậy, nếu bạn trả lời bằng ngôn ngữ 2015, bạn không thể trả lời lại cho đến khi ngôn ngữ 2010 được cho phép. Nếu bạn bắt đầu với câu trả lời năm 2010, bạn không thể thực hiện câu trả lời năm 2015 cho câu trả lời thứ hai của mình vì năm 2015 không phải trước năm 2010.
- Nếu có thể, hãy viết mã của bạn để nó có thể hoạt động trong phiên bản đầu tiên của ngôn ngữ của bạn (hoặc phiên bản cũ nhất có thể). (Đây không phải là một yêu cầu vì việc tìm kiếm trình biên dịch / phiên dịch cũ cho một số ngôn ngữ có thể khó khăn.)
- Không đăng một ngôn ngữ đã được đăng trừ khi câu trả lời được đăng có lỗi nghiêm trọng hoặc bạn có cách hoàn thành nhiệm vụ rất khác.
- Chơi golf mã của bạn là tốt nhưng không bắt buộc.
- Một dòng mới trong đầu ra của bất kỳ chương trình là tốt.
- Đối với các tác vụ 2 và 3, tất cả các giá trị đầu vào dưới một số tối đa hợp lý như 2 16 sẽ hoạt động (ít nhất là 256).
- Ngôn ngữ của bạn phải tồn tại trước khi câu hỏi này được đăng.
- Các ngôn ngữ lập trình rất cũ có thể có các hình thức đầu vào và đầu ra khác với những gì chúng ta nghĩ ngày nay. Điều này là tốt Hoàn thành các nhiệm vụ hết khả năng của bạn trong ngữ cảnh ngôn ngữ của bạn.
Chấm điểm
Điểm số của bạn là:
upvotes - downvotes + (2015 - languageYear) / 2
Do đó, 0,5 được thêm vào số phiếu bầu cho mỗi năm trước năm 2015, tạo lợi thế cho các ngôn ngữ cũ. Bài nộp với số điểm cao nhất sẽ thắng.
Danh sách trả lời
Đoạn mã dưới đây liệt kê tất cả các câu trả lời hợp lệ theo năm ngôn ngữ của họ.
Bạn phải bắt đầu bài đăng của mình với dòng Markdown này để đảm bảo nó được liệt kê chính xác:
#[year] - [language name]
Ví dụ:
#1991 - Python
Tên ngôn ngữ có thể nằm trong một liên kết (nó sẽ là cùng một liên kết trong danh sách trả lời):
#1991 - [Python](https://www.python.org/)
Câu trả lời không theo định dạng này hoặc có một năm chưa được phép hoặc đến từ người dùng đã trả lời trong 5 năm qua được đánh dấu là không hợp lệ.
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script><script>$(function(){function e(e,r){var a="https://api.stackexchange.com/2.2/questions/48476/answers?page="+e.toString()+"&pagesize=100&order=asc&sort=creation&site=codegolf&filter=!YOKGPOBC5Yad160RQxGLP0r4rL";$.get(a,r)}function r(e){if(e.items.forEach(function(e){var r=e.link,a=e.owner.display_name,i=e.body.match(/<h1\b[^>]*>(\d{4}) - (.*?)<\/h1>/);if(i&&i.length>=3)var h=parseInt(i[1]),u=i[2];h&&u&&n>=h&&h>=t&&(!d.hasOwnProperty(e.owner.user_id)||d[e.owner.user_id]-h>=p)?(d[e.owner.user_id]=h,h==t&&--t,o.hasOwnProperty(h)||(o[h]=[]),o[h].push({language:u,user:a,link:r,score:e.score+(n-h)/2})):s.push(' <a href="'+r+'">'+a+"</a>")}),e.has_more)runQuery(++a,r);else{for(var i=n,h=[];o.hasOwnProperty(i);){for(var u=$("<tr>").append($("<td>").text(i.toString())),l=$("<td>"),c=$("<td>"),g=$("<td>"),f=0;f<o[i].length;f++){var v=o[i][f];l.append(v.language),c.append($("<a>").html(v.user).attr("href",v.link)),g.append(v.score),f+1<o[i].length&&(l.append("<br><br>"),c.append("<br><br>"),g.append("<br><br>"))}u.append(l).append(c).append(g),h.push(u),--i}$("#answers").find("tbody").append(h),s.length>0?$("#invalid").append(s):$("#invalid").remove()}}var a=1,n=2015,t=n-1,p=5,o={},s=[],d={};e(1,r)})</script><style>html *{font-family: Helvetica, Arial, sans-serif;}table{border: 4px solid #a4a; border-collapse: collapse;}th{background-color: #a4a; color: white; padding: 8px;}td{border: 1px solid #a4a; padding: 8px;}div{font-size: 75%;}</style><table id='answers'> <tr> <th>Year</th> <th>Language</th> <th>User (answer link)</th> <th>Score</th> </tr></table><div id='invalid'><br>Invalid Answers:</div>