ไมโครเวฟของฉันจะทำงานได้นานแค่ไหน?


33

ฉันหิว. ลองทำอะไรซักอย่างที่ไมโครเวฟกันเถอะ กำหนดอินพุตตัวเลขระหว่าง 1 ถึง 4 หลักส่งออกจำนวนวินาทีที่ไมโครเวฟควรทำงาน

รายละเอียด

เคล็ดลับคือการหาว่าผู้ใช้ป้อนวินาทีหรือรวมของวินาทีและนาที สถานที่และสถานที่นับสิบควรตีความว่าเป็นวินาทีและสถานที่นับแสนควรเป็นนาที ตัวอย่างเช่นค่า1234ควรถูกตีความเป็น 12 นาที, 34 วินาทีและ9876ควรเป็น 98 นาที, 76 วินาที การพิมพ์130และ90ควรส่งผลให้เวลาทำอาหาร 90 วินาที

ต่อไปนี้เป็นอินพุตและเอาต์พุตอื่นสองสามรายการ:

  • 1 = 1
  • 11 = 11
  • 111 = 71
  • 1111 = 671
  • 9 = 9
  • 99 = 99
  • 999 = 639
  • 9999 = 6039

กฎระเบียบ

นี่คือดังนั้นโปรแกรมที่สั้นที่สุดในหน่วยไบต์ชนะ ไม่อนุญาตช่องโหว่มาตรฐาน รายการที่ชนะจะต้องส่งคืนคำตอบที่ถูกต้องเมื่อได้รับอินพุตจำนวนเต็มตั้งแต่ 1 ถึง 9999


@Weateat ตัวช่วยสร้างฉันยินดีที่จะแก้ไขคำถาม คุณมีข้อเสนอแนะสำหรับสิ่งที่ฉันควรพูดในส่วนรายละเอียดหรือไม่? บางทีฉันอาจทำให้ประโยคนี้ชัดเจนขึ้น: "สถานที่และสถานที่นับสิบควรตีความว่าเป็นวินาทีและสถานที่หลายร้อยและพันควรเป็นนาที"
Andrew Brēza

@WheatWizard ฉันเพิ่งเพิ่มรายละเอียดเพิ่มเติมแจ้งให้เราทราบหากคุณคิดว่าฉันควรเพิ่ม
Andrew Brēza

ทำงานกับอินพุตของ9876หรือไม่
Andrew Br Andrewza

1
แปลกฉันกำลังจะแซนด์บ็อกซ์ความท้าทายที่แน่นอนนี้ฮ่าฮ่า
FlipTack

ผลลัพธ์จะเป็น190อะไร
OldBunny2800

คำตอบ:



9

Japt , 6 ไบต์

ìL ì60

ทดสอบออนไลน์! ìLแปลงไปยังฐาน-100 และì60แปลงกลับไปที่ฐาน 60 floor(n/100)*60 + n%100ส่งผลให้ใน ใช้ได้กับชั่วโมง ( 10000 -> 3600จำนวนวินาทีในหนึ่งชั่วโมง)


1
สิ่งที่ฉันมีแน่นอน :)
Shaggy

7

C, C ++, Java, C #, D: 36 ไบต์

D: 35 ไบต์

C: 28 ไบต์

ครั้งแรกที่ฉันมีคำตอบสั้น ๆ !

int r(int i){return i/100*60+i%100;}

D สามารถมีการเพิ่มประสิทธิภาพพิเศษเนื่องจากระบบแม่แบบ golfy:

T r(T)(T i){return i/100*60+i%100;}

C มีการเพิ่มประสิทธิภาพพิเศษด้วย int โดยนัย:

r(i){return i/100*60+i%100;}

รหัสที่จะทดสอบ

ในC (ต้องรวมstdio.h):

int main() {
    int testArr[] = {1,11,111,1111,9,99,999,9999};
    for(int i=0;i<8; ++i) {
        printf("%d = %d\n",testArr[i],r(testArr[i]));
    }
    return 0;
}

ลิงก์ TIO

ในC ++ (ต้องรวมiostream):

int main() {
    std::initializer_list<int> testList{
        1,11,111,1111,9,99,999,9999
    };

    for (auto x : testList) {
        std::cout << r(x) << '\n';
    }
}

ลองออนไลน์!

ในJava :

public class MainApp {

    int r(int i){return i/100*60+i%100;}

    public static void main(String[]a) {
        MainApp m = new MainApp();
        int testArr[] = new int[]{
                1,11,111,1111,9,99,999,9999
        };

        for (int v : testArr) {
            System.out.println(v + " = " + m.r(v));
        }
    }
}

ลองออนไลน์!

ในC #

class Program {
    int r(int i){return i/100*60+i%100;}
    static void Main(string[] args) {
        var p = new Program();
        int[] testArr = new int[8]
        {
            1,11,111,1111,9,99,999,9999
        };
        foreach(int a in testArr) {
            Console.WriteLine(a + " = " + p.r(a));
        }
    }
}

ในD (ต้องนำเข้าstd.stdio) (แน่นอนว่าฉันไม่รู้วิธีใช้อาร์เรย์ใน D):

void main() {
    int[] arr = [1,11,111,1111,9,9,999,9999];
    for(int i = 0; i < arr.length; i++)
        writeln(arr[i]," = ",r(arr[i]));
} 

ลิงก์ TIO


รหัสทดสอบ D เป็นส่วนท้ายของ TIO: tio.run/และฉันเห็นว่าคุณได้เรียนรู้ระบบเทมเพลตแล้ว :) (มีอยู่foreachใน D ฉันแค่ลืมวิธีใช้มันอย่างเศร้า ๆ )
Zacharý

C สามารถเล่นกอล์ฟได้ถึง28 ไบต์โดยใช้ C89 โดยนัย
pizzapants184

คุณควรโพสต์สิ่งเหล่านี้เป็นคำตอบแยกต่างหาก
MD XF

6

Pyth - 9 8 ไบต์

แปลงอินพุตเป็นฐาน 100 จากนั้นตีความว่าเป็นหมายเลขฐาน 60

ijQ*TT60

Test Suite


6

TI-Basic (83 series), 8 ไบต์

Ans-40int(sub(Ans

ต้องใช้ระบบปฏิบัติการเวอร์ชั่น 1.15 หรือสูงกว่า


6

dc , 10 ไบต์

?9A~r60*+p

ลองออนไลน์!

คำอธิบาย:ใน dc เมื่อคุณกด sth บนสแต็คมันจะอยู่ด้านบน

?         # read and push the input number on the stack
9A        # push 100: 9 * 10^1 + A[10] * 10^0 :D
~         # divide 2nd nr. by the top nr., push quotient, then remainder
r60*      # swap top 2 nr., then multiply the top by 60
+p        # add top 2 nr., then print result

5

Bash bc + sed, 30 28 ไบต์

-2 ไบต์ขอบคุณที่@seshoumara

bc<<<0`sed 's/..\?$/*60+&/'`

ลองออนไลน์!

รับอินพุตจาก stdin ใช้วิธีการสร้างสรรค์มากขึ้น: แทรก*60+ก่อนหลัก 1 หรือ 2 หลักและเติม0จุดเริ่มต้นเพื่อบัญชีสำหรับอินพุตที่มีเพียง 1 หรือ 2 หลัก bcผลที่ได้คือผ่านไปแล้ว


1
หากคุณลบ-rและใช้งาน\?คุณสามารถหลวม 2 ไบต์
seshoumara

3



2

JavaScript ขนาด 21 ไบต์

a=>(a/100^0)*60+a%100

ลองออนไลน์!


บันทึก 4 ไบต์โดยใช้กลอุบายของ ovs - a- (a / 100 ^ 0) * 40
IanF1

1
@ IanF1 ขอบคุณ แต่ฉันคิดว่ามันคงเป็นการขโมยความคิดของพวกเขา

ถูกของคุณ. มีความกระตือรือร้นเกินไปขอโทษ
IanF1

3
@ThePirateBay คุณไม่ได้ทำตามชื่อของคุณจริงๆแล้ว)
kamoroso94

2

J , 12 ไบต์

-40*&<.%&100

เป็นโซลูชัน Python 2 ของ ovs 'ที่แสดงใน J ประกอบด้วยตะขอและส้อม:

┌─┬───────────────────────┐
│-│┌──┬────────┬─────────┐│
│ ││40│┌─┬─┬──┐│┌─┬─┬───┐││
│ ││  ││*│&│<.│││%│&│100│││
│ ││  │└─┴─┴──┘│└─┴─┴───┘││
│ │└──┴────────┴─────────┘│
└─┴───────────────────────┘

       %&100  - divides the number by 100
   *&<.       - finds the floor of the left argument and multiplies it to the left arg.
 40           - 
-             - subtracts the result of the above fork from the input 

ลองออนไลน์!


1
60#.0 100#:]นับไบต์เดียวกับ
FrownyFrog

@FrownyFrog - วิธีการแก้ปัญหาของคุณดูดีขึ้นเชียร์!
Galen Ivanov



2

เขาวงกต , 19 ไบต์

?:_100%}#00/_60*{+!

ลองออนไลน์!

คำอธิบาย

?      Read input.
:      Duplicate.
_100%  Mod 100.
}      Move off to auxiliary stack.
#00/   Divide by 100, using the stack depth to get a 1, instead of _1.
_60*   Multiply by 60.
{+     Retrieve the earlier result and add it.
!      Print.

จากนั้น IP ก็จะเข้าสู่จุดตายและเริ่มเคลื่อนที่ไปข้างหลัง เมื่อมันมาถึง/มันจะพยายามหารด้วยศูนย์ซึ่งจะยุติโปรแกรม


2

เยลลี่ 5 ไบต์

เป็นลิงก์ monadic (ขอบคุณสำหรับ heads-up, caird!):

b³ḅ60

ลองออนไลน์!

... หรือเป็นโปรแกรมเต็มรูปแบบ:

bȷ2ḅ60

สามารถโอนย้ายได้อย่างง่ายดายไปที่ 05AB1E ดังนั้น:

05AB1E , 5 ไบต์

тв60β

ลองออนไลน์!

เพียงแปลงจำนวนเต็มอินพุตเป็นฐาน100จากนั้นแปลงผลลัพธ์จากฐาน60เป็นจำนวนเต็ม ดังนั้นมันจึงเท่ากับInput% 100 + 60 * putInput / 100⌋



@cairdcoinheringaahing ฉันคิดว่าคุณหมายถึงสิ่งนี้แต่ขอบคุณสำหรับ heads-up ต่อไป
Mr. Xcoder

2

Excel VBA ขนาด 29 ไบต์

ฟังก์ชันหน้าต่าง VBE แบบไม่ระบุชื่อทันทีที่รับอินพุตจากช่วง[A1]และเอาต์พุตไปยังหน้าต่างทันที VBE

?[A1]Mod 1E2+60*[Int(A1/100)]



2

รุก , 10 9 ไบต์

เควินทำตัวฉันเป็นภาษาของตัวเอง ... (ใช้แนวทางจากคำตอบของovs )

2dH/40*-#

ลองออนไลน์!

10 ไบต์

sjvj60*^+#

ลองออนไลน์!

s             \ Split input into digits
 jvj          \ Join the first two and the last two
    60*       \ Multiply the first by 60
       ^+     \ Add the values
         #    \ Print

11 ไบต์

อีกหนึ่งไบต์เราสามารถใช้Input % 100 + 60 * ⌊Input / 100⌋วิธีนี้ได้:

H2d%}/60*+#

ลองออนไลน์!


1
9 ไบต์โดยการสร้างพอร์ตของ@ovs' งูใหญ่ 2 คำตอบ2dH/40*-# : ไม่เคยตั้งโปรแกรมใน Pushy มาก่อน แต่ดูเหมือนว่ามันจะเป็นภาษาที่เจ๋งมาก :)
Kevin Cruijssen

1
@KevinCruijssen มันค่อนข้างเป็นภาษาสแต็คทั่วไปฉันเดาว่าสิ่งที่แตกต่างกันเล็กน้อยที่มันนำมาสู่ตารางคือสแต็คคู่ ... แต่ขอบคุณและขอบคุณสำหรับสนามกอล์ฟ :)
FlipTack

1

05AB1E , 9 ไบต์

т÷60*¹т%+

ลองออนไลน์!

คำอธิบาย:

т÷60*¹т%+

т         // Push number 100
 ÷        // Integer division with the input
  60      // Push number 60
    *     // Multiply with the previous result
     ¹    // Push input
      т   // Push 100 again
       %  // Modulo
        + // Add the first and the second result

อาจมีเคล็ดลับบางประการเกี่ยวกับการแปลงฐานซึ่งสามารถทำได้ใน 05AB1E แต่ฉันหามันไม่เจอ



1

เรติน่า 11 ไบต์

.{100}
60$*

ลองออนไลน์!

เข้าและส่งออกในเอก ชุดทดสอบจะแปลงจากและเป็นทศนิยมเพื่อความสะดวก

การแปลงฐานแบบนี้ให้มากถึงสองหลักทำได้ง่ายอย่างน่าประหลาดใจ เราแค่จับคู่การวิ่ง 100 1วินาทีและแทนที่ด้วย 60 1วินาที อะไรก็ตามที่เหลือจะตรงกับตัวเลขสองหลักสุดท้ายในการแทนทศนิยมและยังคงไม่เปลี่ยนแปลง


1

อลิซอายุ 19 ไบต์

/o
\i@/.'d%~'d:'<*+

ลองออนไลน์!

คำอธิบาย

น่าเสียดายที่ฉันลบDivmodออกจากภาษาฉันเดาว่า ...

/o
\i@/...

นี่เป็นเพียงกรอบงานปกติสำหรับโปรแกรมเชิงเส้นที่มีทศนิยม I / O ที่ทำงานแบบหมดจดในโหมด Cardinal (เลขคณิต)

.     Duplicate input.
'd%   Mod 100.
~     Swap with other copy.
'd:   Divide by 100.
'<*   Multiply by 60.
+     Add.

1

ทางช้างเผือก 10 ไบต์

':Z/v40*-!

การใช้งาน: ./mw code.mwg -i 9999

คำอธิบาย:

code       explanation                          stack

'          push input to stack                  [input]
 :         duplicate ToS                        [input, input]
  Z        push 100                             [input, input, 100]
   /v      integer division (divide and floor)  [input, ⌊input/100⌋]
     40    push 40                              [input, ⌊input/100⌋, 40]
       *   multiply                             [input, ⌊input/100⌋*40]
        -  subtract                             [input - ⌊input/100⌋*40]
         ! print

1

R , 21 ไบต์

x=scan();x-x%/%100*40

ลองออนไลน์!


1
ฉันสร้างโซลูชันของตัวเองใน R และมันก็ดูสง่างามน้อยกว่านี้มาก
Andrew Brēza

คุณสามารถตัดscanเนื่องจากคำตอบส่วนใหญ่เพียงแค่สมมติว่าตัวแปรถูกกำหนดไว้แล้ว
Andrew Brēza

กฎไม่สอดคล้องกับที่เกี่ยวกับที่ หนึ่งในความท้าทายอื่น ๆ ที่คุณต้องมีฟังก์ชั่นหรือสแกนเพื่อจับค่า
ทำเครื่องหมาย



0

05AB1E , 7 ไบต์

т‰ć60*+

ลองออนไลน์!

คำอธิบาย

         command                              current stack
т‰ć60*+  full program. push input implicitly  [1234]
т        push 100                             [1234] [100]
 ‰       push divmod                          [12, 34]
  ć      push head extracted (n[1:], n[0])    [34] [12]
   60*   multiply by 60                       [34] [720]
      +  add and display implicitly           [754]

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