Tạo đầu vào vi sóng lười biếng


18

Liên quan: Lập trình lò vi sóng của tôiTạo giá trị lười biếng .

Đồng nghiệp của tôi lười biếng đến mức anh ta thậm chí không thèm di chuyển ngón tay khi lập trình lò vi sóng. (Điều này thực sự đúng!)

Giúp anh ta tìm đầu vào lò vi sóng cho thời gian gần nhất với những gì anh ta muốn, nhưng trong đó tất cả các chữ số đều giống nhau. Nếu hai đầu vào dẫn đến chênh lệch thời gian giống nhau so với thời gian mong muốn, hãy chọn đầu vào có ít chữ số hơn. Nếu cả hai có cùng số chữ số, hãy chọn số ít hơn - vì vậy anh ta không phải đợi quá lâu.

Đầu vào là số nguyên mà người cầu toàn sẽ nhập, ví dụ: 4304 phút và 30 giây trong khi 10060mỗi lần là 1 phút. Nó sẽ lớn hơn 0 và sẽ không vượt quá 9999.

Đầu ra phải là một số nguyên, ví dụ 444là 4 phút và 44 giây và 55là 55 giây.

Cả đầu vào và đầu ra có thể chỉ trong vài giây đơn giản (không có phút) nếu tổng thời gian dưới 1 phút và 40 giây.

Đây là , vì vậy mã của bạn phải càng ngắn càng tốt.

Các trường hợp thử nghiệm:

  30 →   33
  60 →   55
  70 →  111
  90 →   88
 100 →   55
 101 →   66
 120 →   77
 130 →   88
 200 →   99
 201 →  222
 500 →  444
 700 →  666
1000 →  888
1055 →  999
1056 → 1111
1090 → 1111

3
Tôi thích cách tiếp cận nửa lười biếng . Chỉ cần tiếp tục nghiền nút "thêm 30 giây" cho đến khi nó ở đó: D
Geobits 23/2/2016

@Geobits Rất nhiều ấn cho đến 11:30. Dù sao, thực tế là anh ấy sử dụng phương pháp tôi đã viết ở trên ... :-D
Adám 23/2/2016

2
Vâng, tôi thường chỉ cần gõ nó cho bất cứ điều gì trong vài phút. Đó là một sự cân bằng tinh tế giữa số máy ép và khoảng cách ngón tay đi du lịch;)
Geobits

Là đầu vào / đầu ra trong # giây cho phép?
Máy

2
Đồng nghiệp của tôi lười biếng đến mức anh ta thậm chí không thèm di chuyển ngón tay khi lập trình lò vi sóng. Không mong đợi ít hơn từ một người làm việc tại trụ sở DyL APL ... :)
Lynn

Câu trả lời:


3

Thạch, 26 byte

bȷ2ḅ60
³ÇạÇ,
9Rẋ€4R¤ḌFÇ€ṂṪ

Giải trình:

bȷ2ḅ60             f(x) = x tobase 100 frombase 60
³ÇạÇ,              g(x) = (abs(f(arg) - f(x)), x)
9Rẋ€4R¤            main(arg) = [1..9] repeat each with [1..4],
       ḌF           then get digits and flatten,
         ǀ         then map g,
           Ṃ        then minimum,
            Ṫ       then last element.

Hãy thử trực tuyến!


2

JavaScript (ES6), 112 byte

n=>{c=n=>n*3+n%100*2;d=n=c(n);for(r=i=0;i<1e4;i++)/^(.)\1*$/.test(i)&(m=c(i)-n,m<0?m=-m:m)<d&&(d=m,r=i);return r}

Sử dụng hàm trợ giúp ctính toán năm lần số giây thực tế đã trôi qua.


1

APL Dyalog , 37 byte

{⍵⊃⍨⊃⍋⊃|-/(60⊥0 100∘⊤)¨⎕⍵}⍎¨,⎕D∘./⍨⍳4

⍳4Bảng lặp lại 1 2 3 4
⎕D"0123456789"
∘./⍨(giống như bảng nhân, nhưng trong đó mỗi ô chứa B lặp lại của A thay vì A × B),
,hãy tạo bảng thành danh sách các chuỗi
⍎¨làm cho mỗi chuỗi thành số (Bây giờ chúng ta có một danh sách tắt tất cả có thể kết quả.)
{... }chức năng nơi đối số được thể hiện bằng
⎕⍵tranh luận trước với đầu vào nhắc
(... áp dụng đối với mỗi người trong số hai (đối số và danh sách) ...
0 100∘⊤chuyển đổi sang cơ sở-100
60⊥chuyển đổi từ cơ sở-60
-/tính toán chênh lệch giữa hai
|tuyệt đối
danh sách trích xuất giá trị (vì -/đóng gói kết quả của nó)
thứ tự sắp xếp (Không sắp xếp, chỉ trả về thứ tự đặt các đối số để đạt được thứ tự tăng dần. Nếu hai phần tử bằng nhau, chúng giữ nguyên thứ tự hiện tại.
cái đầu tiên, tức là cái có chênh lệch tuyệt đối nhỏ nhất từ ​​đầu vào ⍵⊃⍨lấy phần tử đó từ danh sách đối số (danh sách kết quả có thể)

Cảm ơn đồng nghiệp trong câu hỏi để cạo một byte.


Lưu ý: Tôi không có bất kỳ giải pháp nào tại thời điểm đăng OP.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.