Lò vi sóng của tôi nên chạy trong bao lâu?


33

Tôi đói. Hãy để lò vi sóng một cái gì đó. Cho một đầu vào số từ 1 đến 4 chữ số, xuất ra số giây mà lò vi sóng sẽ chạy.

Chi tiết

Bí quyết là tìm hiểu xem người dùng đang nhập giây hay kết hợp giây và phút. Những cái và hàng chục địa điểm nên được hiểu là giây và hàng trăm và hàng ngàn địa điểm nên là phút. Ví dụ: giá trị 1234nên được hiểu là 12 phút, 34 giây và 9876nên là 98 phút, 76 giây. Gõ 13090cả hai sẽ dẫn đến thời gian nấu là 90 giây.

Dưới đây là một vài đầu vào và đầu ra khác:

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

Quy tắc

Đây là , vì vậy chương trình ngắn nhất tính bằng byte sẽ thắng. Sơ hở tiêu chuẩn không được phép. Mục chiến thắng phải trả về câu trả lời đúng khi được cung cấp bất kỳ đầu vào số nguyên nào từ 1 đến 9999.


@WheatWizard, tôi rất vui khi chỉnh sửa câu hỏi. Bạn có gợi ý cho những gì tôi nên nói trong phần Chi tiết không? Có lẽ tôi có thể làm cho câu này rõ ràng hơn: "Những cái và hàng chục địa điểm nên được hiểu là giây và hàng trăm và hàng ngàn địa điểm nên là phút."
Andrew Brēza

@WheatWizard Tôi chỉ cần thêm chi tiết, cho tôi biết nếu bạn nghĩ tôi nên thêm nhiều hơn.
Andrew Brēza

Nó có hoạt động với đầu vào 9876không?
Andrew Brēza

1
Thật kỳ lạ, tôi chuẩn bị thực hiện thử thách chính xác này haha
FlipTack

Đầu ra sẽ làm 190gì?
OldBunny2800

Câu trả lời:




7

C, C ++, Java, C #, D: 36 byte

D: 35 byte

C: 28 byte

Lần đầu tiên tôi có một câu trả lời ngắn gọn!

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

D có thể có một tối ưu hóa đặc biệt vì hệ thống mẫu golf:

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

C có một tối ưu hóa đặc biệt với int ẩn:

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

Mã để kiểm tra

Trong C (phải bao gồm 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;
}

Liên kết TIO

Trong C ++ (phải bao gồm 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';
    }
}

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

Trong 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));
        }
    }
}

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

Trong 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));
        }
    }
}

Trong D (phải nhập std.stdio) (chính xác, tôi không biết làm thế nào để sử dụng mảng trong 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]));
} 

Liên kết TIO


Mã kiểm tra D là chân trang của TIO này: tio.run/ , và tôi thấy bạn đã học được hệ thống mẫu :). (Có một foreachchữ D, tôi chỉ quên cách sử dụng nó một cách đáng buồn)
Zacharý

C có thể được đánh gôn tới 28 byte bằng C89 ngầm định.
pizzapants184

Bạn nên đăng tất cả những điều này như câu trả lời riêng biệt.
MD XF


6

TI-Basic (sê-ri 83), 8 byte

Ans-40int(sub(Ans

Yêu cầu HĐH phiên bản 1.15 trở lên.


6

dc , 10 byte

?9A~r60*+p

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

Giải thích: trong dc khi bạn đẩy sth. trên ngăn xếp nó đi lên trên

?         # 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 byte

-2 byte nhờ @seshoumara .

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

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

Lấy đầu vào từ stdin. Đã đi cho một cách tiếp cận sáng tạo hơn: chèn *60+trước 1 hoặc 2 chữ số cuối cùng và thêm một 0đầu vào tài khoản cho các đầu vào chỉ có 1 hoặc 2 chữ số. Kết quả sau đó được chuyển đến bc.


1
Nếu bạn loại bỏ -rvà sử dụng \?, bạn có thể mất 2 byte.
seshoumara




2

JavaScript, 21 byte

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

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


Lưu 4 byte bằng cách sử dụng thủ thuật của ovs - a- (a / 100 ^ 0) * 40
IanF1

1
@ IanF1. Cảm ơn, nhưng tôi nghĩ rằng nó sẽ thực sự đánh cắp ý tưởng của họ.

Uh, đúng vậy. Quá nhiệt tình, xin lỗi.
IanF1

3
@ThePirateBay Bạn không thực sự sống với tên của mình sau đó;)
kamoroso94

2

J , 12 byte

-40*&<.%&100

Đó là giải pháp Python 2 của ovs thể hiện trong J. Nó bao gồm một cái móc và một cái nĩa:

┌─┬───────────────────────┐
│-│┌──┬────────┬─────────┐│
│ ││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 

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


1
Số byte tương tự như 60#.0 100#:].
FrownyFrog

@FrownyFrog - giải pháp của bạn trông đẹp hơn, chúc mừng!
Galen Ivanov



2

Mê cung , 19 byte

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

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

Giải trình

?      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 sau đó đi vào ngõ cụt và bắt đầu di chuyển lùi. Khi đạt đến /nó, nó cố gắng chia cho 0, kết thúc chương trình.


2

Thạch , 5 byte

Là một liên kết đơn âm (cảm ơn vì đã đứng đầu, caird!):

b³ḅ60

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

... Hoặc là một chương trình đầy đủ:

bȷ2ḅ60

Điều này có thể được chuyển dễ dàng đến 05AB1E, vì vậy:

05AB1E , 5 byte

тв60β

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

Chỉ cần chuyển đổi số nguyên đầu vào thành cơ sở 100 và sau đó chuyển đổi kết quả từ cơ sở 60 sang số nguyên. Do đó, nó tương đương với % 100 + 60 * Input / 100⌋ Input



@cairdcoinheringaahing Tôi nghĩ bạn có ý này , nhưng dù sao cũng cảm ơn vì đã đứng đầu
Ông Xcoder

2

VBA Excel, 29 byte

Chức năng cửa sổ ngay lập tức VBE ẩn danh nhận đầu vào từ phạm vi [A1]và đầu ra cho cửa sổ ngay lập tức VBE.

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


2

PARI / GP , 16 byte

Nói thẳng:

n->n\100*60+n%100

Thật không may, phương pháp hay này đơn giản là quá dài để sử dụng:

n->[60,1]*divrem(n,100)

2

Pushy , 10 9 byte

Kevin vượt xa tôi bằng ngôn ngữ của riêng tôi ... (sử dụng cách tiếp cận từ câu trả lời của ovs )

2dH/40*-#

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

10 byte

sjvj60*^+#

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

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 byte

Để có thêm một byte, chúng ta có thể sử dụng Input % 100 + 60 * ⌊Input / 100⌋cách tiếp cận:

H2d%}/60*+#

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


1
9 byte bằng cách tạo một cổng của câu trả lời Python 2 của @ovs : 2dH/40*-#. Chưa bao giờ được lập trình trong Pushy trước đây, nhưng nó có vẻ như là một ngôn ngữ khá tuyệt. :)
Kevin Cruijssen

1
@KevinCruijssen nó một chồng ngôn ngữ khá chung chung dựa, tôi đoán chỉ điều hơi khác nhau nó mang đến cho bảng là ngăn xếp đôi ... nhưng cảm ơn bạn, và cảm ơn cho sân :)
FlipTack

1

05AB1E , 9 byte

т÷60*¹т%+

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

Giải trình:

т÷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

Có thể có một số mẹo với chuyển đổi cơ sở có thể đạt được trong 05AB1E, nhưng tôi không thể tìm thấy nó.



1

Võng mạc , 11 byte

.{100}
60$*

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

Đầu vào và đầu ra trong unary . Bộ kiểm tra chuyển đổi từ và sang số thập phân cho thuận tiện.

Thực hiện loại chuyển đổi cơ sở này chỉ có tối đa hai chữ số là đơn giản đáng ngạc nhiên để thực hiện trong unary. Chúng tôi chỉ cần chạy 100 1giây và thay thế chúng bằng 60 1giây. Bất cứ điều gì còn sót lại sẽ tương ứng với hai chữ số cuối trong biểu diễn thập phân và không thay đổi.


1

Alice , 19 byte

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

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

Giải trình

Quá tệ, tôi đã loại bỏ divmod khỏi ngôn ngữ, tôi đoán ...

/o
\i@/...

Đây chỉ là khung thông thường cho các chương trình tuyến tính với I / O thập phân hoạt động hoàn toàn ở chế độ Cardinal (số học).

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

1

Dải ngân hà , 10 byte

':Z/v40*-!

sử dụng: ./mw code.mwg -i 9999

Giải trình:

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 byte

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

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


1
Tôi đã tạo ra giải pháp của riêng mình trong R và nó kém thanh lịch hơn nhiều so với điều này.
Andrew Brēza

Bạn có thể cắt scanvì hầu hết các câu trả lời chỉ giả sử biến đã được xác định.
Andrew Brēza

Các quy tắc rất không phù hợp với điều đó. Hầu hết các thử thách khác bạn phải có chức năng hoặc quét để nắm bắt giá trị.
Đánh dấu


1

REXX, 25 byte

arg t
say t%100*60+t//100

(Chỉ là một bản dịch khác của @ovs)


0

05AB1E , 7 byte

т‰ć60*+

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

Giải trình

         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]

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.