Lấy cảm hứng từ cách sắp xếp không hợp lệ-số-chữ số-chữ số mà không sử dụng một mảng , nhưng tôi nghĩ rằng nó đã tạo ra một golf mã tốt hơn câu hỏi SO.
Cho một số nguyên dương, sắp xếp các chữ số trong số nguyên đó.
Điểm số thấp nhất chiến thắng!
- Bắt đầu với 0 điểm.
- Thêm một điểm cho mỗi nhân vật.
- Thêm 20 điểm cho mỗi mảng bạn sử dụng.
- Thêm 10 điểm cho mỗi chuỗi nhiều ký tự trong mã của bạn. (Ngoại trừ đầu vào ban đầu miễn là nó được chuyển đổi thành một số nguyên mà không có bất kỳ thao tác nào khác được thực hiện trên nó.)
- Thêm 32 điểm nếu số chữ số tối đa mà chương trình của bạn có thể xử lý bị giới hạn bởi chương trình của bạn (trái ngược với máy).
- Trừ 10 điểm nếu mã của bạn có thể thay đổi hướng sắp xếp đưa ra một đối số khác (bất cứ điều gì bạn muốn, nhưng ví dụ 0 cho sắp xếp giảm dần và 1 cho tăng dần.)
Mỗi ngôn ngữ là khác nhau, nhưng ý tưởng là để tránh bất kỳ loại tin tặc lặp đi lặp lại nào.
Thí dụ:
Đầu vào : 52146729
Đầu ra : 97654221 hoặc 12245679
Ghi chú:
- Sử dụng bất kỳ khả năng sắp xếp tích hợp nào mà ngôn ngữ lập trình của bạn cung cấp, nhưng nếu tính năng sắp xếp đó liên quan đến chuỗi hoặc mảng, hãy chịu phạt!
- Bạn có thể viết giải pháp dưới dạng một hàm lấy một số nguyên trực tiếp hoặc như một chương trình lấy một đối số từ argv, một tệp hoặc luồng và chuyển đổi nó thành một số nguyên. Miễn là bạn chuyển đổi nó thành một số nguyên ngay lập tức và loại bỏ đầu vào char * ban đầu mà không thực hiện thêm bất kỳ thao tác nào trên nó, không áp dụng hình phạt nào.
- Các hình phạt không chỉ áp dụng cho chuỗi ký tự trong văn bản chương trình của bạn, mà bất kỳ phần nào trong tính năng chương trình của bạn được cho là đầu vào hoặc đầu ra một chuỗi hoặc lặp lại. Ví dụ: JavaScript
String.prototype.split
có ít nhất một chuỗi là input (this
) và Array là đầu ra, vì vậy +30 để sử dụng chuỗi đó. - Tôi đã cố gắng thực hiện các quy tắc này hướng dẫn nguyên tắc thiết kế thuật toán, chứ không phải I / O ban đầu / cuối cùng (do đó lưu ý # 2). Tôi không nghĩ rằng hình phạt nên áp dụng cho
int(input())
ngay cả khiinput
chữ ký của nó nói rằng nó trả về một chuỗi, miễn là biểu thức đó là điểm vào ban đầu của chương trình. Tương tự, nếu đầu ra cuối cùng của chương trình làprint(x)
vàx
phải là một chuỗi, hình phạt sẽ không áp dụng cho hoạt động đúc chuỗi cuối mương. Tất cả những gì đã nói, tôi rõ ràng không bao giờ nói rằng đây phải là một chương trình hoặc nơi mà I / O phải đến hoặc đi. Một chức năng nhậnint
và trả vềint
sẽ phục vụ và sẽ không phải chịu những sự mơ hồ này.
" "
được tính là một chuỗi nhiều ký tự không? Một nhân vật sẽ không được coi là "đa" ...