Hasilkan input microwave yang malas

18

Terkait: Programkan oven microwave saya dan Hasilkan nilai malas .

Kolega saya sangat malas sehingga dia bahkan tidak repot-repot menggerakkan jarinya ketika memprogram microwave oven. (Ini sebenarnya benar!)

Bantu dia menemukan input gelombang mikro yang memberikan waktu paling dekat dengan yang diinginkannya, tetapi semua digitnya sama. Jika dua input menghasilkan perbedaan waktu yang sama dari waktu yang diinginkan, pilih satu dengan digit yang lebih sedikit. Jika keduanya memiliki jumlah digit yang sama, pilih yang lebih rendah - jadi dia tidak perlu menunggu terlalu lama.

Input adalah bilangan bulat yang akan dimasukkan oleh perfeksionis, misalnya 4304 menit dan 30 detik 100dan 60masing - masing adalah 1 menit. Ini akan lebih besar dari 0 dan tidak akan melebihi 9999.

Keluaran harus berupa bilangan bulat, misalnya 4444 menit dan 44 detik dan 5555 detik.

Baik input dan output hanya mungkin dalam detik sederhana (tidak ada menit) jika total waktu di bawah 1 menit dan 40 detik.

Ini , jadi kode Anda harus sesingkat mungkin.

Kasus uji:

  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
Adm
sumber
3
Saya suka pendekatan setengah malas . Terus tekan tombol "tambah 30 detik" sampai ada di sana: D
Geobits
@Geobits Banyak sekali penekanan sampai pukul 11.30. Bagaimanapun, faktanya dia menggunakan metode yang saya tulis di atas ... :-D
Adám
2
Ya, saya biasanya cukup mengetikkan apa saja selama beberapa menit. Ini adalah
kompromi yang
Apakah input / output dalam # detik diizinkan?
CalculatorFeline
2
Kolega saya sangat malas sehingga dia bahkan tidak repot-repot menggerakkan jarinya ketika memprogram microwave oven. Tidak mengharapkan apa pun dari seseorang yang bekerja di markas Dyalog APL ... :)
Lynn

Jawaban:

3

Jelly, 26 byte

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

Penjelasan:

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.

Cobalah online!

Lynn
sumber
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}

Menggunakan fungsi pembantu cyang menghitung lima kali jumlah aktual detik berlalu.

Neil
sumber
1

Dyalog APL , 37 byte

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

⍳41 2 3 4
⎕D"0123456789"
∘./⍨tabel pengulangan (seperti tabel perkalian, tetapi di mana setiap sel berisi B pengulangan A bukan A × B)
,membuat tabel menjadi daftar string
⍎¨membuat setiap string menjadi angka (Sekarang kita memiliki daftar dari semua kemungkinan hasil.)
{... }berfungsi di mana argumen diwakili oleh
⎕⍵argumen mendahului dengan masukan yang diminta
(... berlaku untuk masing-masing dari keduanya (argumen dan daftar) ...
0 100∘⊤konversikan ke basis-100
60⊥konversi dari basis-60
-/menghitung perbedaan antara dua
|absolut
daftar nilai ekstrak (karena -/merangkum hasilnya)
sort order (Tidak mengurutkan, hanya mengembalikan urutan penempatan argumen untuk mencapai urutan naik. Jika dua elemen sama, mereka tetap dalam urutan saat ini. Karena daftar kami memiliki elemen yang bertambah panjang, ini menangani ikatan.)
yang pertama, yaitu yang dengan perbedaan absolut terkecil dari input ⍵⊃⍨mengambil elemen itu dari daftar argumen (daftar hasil yang mungkin)

Terima kasih kepada kolega yang bersangkutan untuk memangkas satu byte.


Catatan: Saya tidak punya solusi pada saat memposting OP.

Adm
sumber