สร้างอินพุตไมโครเวฟที่ขี้เกียจ


18

ที่เกี่ยวข้อง: โปรแกรมไมโครเวฟเตาอบของฉันและสร้างค่าขี้เกียจ

เพื่อนร่วมงานของฉันขี้เกียจมากจนเขาไม่อยากขยับนิ้วเมื่อเขียนโปรแกรมเตาไมโครเวฟ (นี่เป็นเรื่องจริง!)

ช่วยเขาค้นหาอินพุตไมโครเวฟที่ให้เวลาใกล้เคียงกับสิ่งที่เขาต้องการมากที่สุด แต่ตัวเลขทั้งหมดเหมือนกัน หากอินพุตสองรายการส่งผลให้เกิดความแตกต่างในเวลาเดียวกันจากเวลาที่ต้องการ หากทั้งคู่มีจำนวนหลักเท่ากันให้เลือกน้อยกว่าดังนั้นเขาไม่ต้องรอนาน

อินพุตเป็นจำนวนเต็มที่ผู้ใส่สิ่งมีค่านิยมจะป้อนเช่น4304 นาทีและ 30 วินาทีในขณะที่100และ60แต่ละครั้งคือ 1 นาที มันจะมากกว่า 0 และจะไม่เกิน 9999

ผลลัพธ์จะต้องเป็นจำนวนเต็มเช่น4444 นาทีและ 44 วินาทีและ5555 วินาที

ทั้งอินพุทและเอาท์พุทอาจใช้เวลาเพียงไม่กี่วินาที (ไม่กี่นาที) หากเวลาทั้งหมดต่ำกว่า 1 นาทีและ 40 วินาที

นี่คือดังนั้นรหัสของคุณจะต้องสั้นที่สุด

กรณีทดสอบ:

  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
ผมชอบครึ่งขี้เกียจวิธี เพียงทำการบดปุ่ม "เพิ่ม 30 วินาที" จนกว่าจะถึงที่นั่น: D
Geobits

@Geobits กดมากจนถึง 11:30 อย่างไรก็ตามความจริงก็คือเขาใช้วิธีที่ฉันเขียนด้านบน ... :-D
Adám

2
ใช่ฉันมักจะพิมพ์เพื่ออะไรมากกว่าไม่กี่นาที มันเป็นการแลกเปลี่ยนที่ละเอียดอ่อนระหว่างจำนวนเครื่องกดและระยะทางในการเดินทางด้วยนิ้วมือ)
Geobits

อินพุต / เอาต์พุตในจำนวนวินาทีที่อนุญาตหรือไม่
CalculatorFeline

2
เพื่อนร่วมงานของฉันขี้เกียจจนเขาไม่อยากขยับนิ้วเมื่อเขียนโปรแกรมเตาไมโครเวฟ อย่าคาดหวังอะไรจากคนที่ทำงานที่สำนักงานใหญ่ของ Dyalog APL ... :)
ลินน์

คำตอบ:


3

เยลลี่ 26 ไบต์

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

คำอธิบาย:

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.

ลองออนไลน์!


2

JavaScript (ES6), 112 ไบต์

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}

ใช้ฟังก์ชันตัวช่วยcซึ่งคำนวณจำนวนครั้งที่ผ่านไปห้าวินาทีตามจริง


1

Dyalog APLขนาด 37 ไบต์

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

⍳41 2 3 4
⎕D"0123456789"
∘./⍨ตารางการทำซ้ำ (เช่นตารางการคูณ แต่ที่แต่ละเซลล์มี B ซ้ำของ A แทน A × B)
,สร้างตารางลงในรายการสตริง
⍎¨ทำให้แต่ละสตริงเป็นตัวเลข (ตอนนี้เรามีรายการออกทั้งหมดที่เป็นไปได้ทั้งหมด ผล.)
{... }ฟังก์ชั่นที่อาร์กิวเมนต์ที่เป็นตัวแทนจาก
⎕⍵อาร์กิวเมนต์ Precede ด้วยการป้อนข้อมูลรับแจ้ง
(... นำไปใช้กับแต่ละสอง (อาร์กิวเมนต์และรายการ) ...
0 100∘⊤แปลงไปยังฐาน-100
60⊥แปลงจากฐาน-60
-/คำนวณความแตกต่างระหว่างสอง
|แน่นอน
รายการสารสกัดค่า(เพราะ-/ห่อหุ้มผลลัพธ์ของมัน)
เรียงลำดับ (ไม่เรียงลำดับส่งกลับเฉพาะลำดับที่วางอาร์กิวเมนต์เพื่อให้ได้ลำดับจากน้อยไปหามากถ้าสององค์ประกอบมีค่าเท่ากันพวกมันจะอยู่ในลำดับปัจจุบันเนื่องจากรายการของเรามีองค์ประกอบที่มีความยาวเพิ่มขึ้น
อันแรกคืออันที่มีความแตกต่างน้อยที่สุดจากอินพุต ⍵⊃⍨รับองค์ประกอบนั้นจากรายการอาร์กิวเมนต์ (รายการผลลัพธ์ที่เป็นไปได้)

ขอขอบคุณเพื่อนร่วมงานที่มีปัญหาในการโกนหนึ่งไบต์


หมายเหตุ: ฉันไม่ได้มีวิธีการแก้ปัญหาใด ๆ ในเวลาที่โพสต์ OP

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.