내 전자 레인지는 얼마 동안 작동해야합니까?


33

배고파. 전자 레인지로하자. 1에서 4 자리 사이의 숫자 입력이 주어지면 전자 레인지가 작동하는 시간 (초)을 출력하십시오.

세부

트릭은 사용자가 초 또는 초와 분의 조합을 입력하는지 파악하고 있습니다. 1과 10의 장소는 초로 해석되어야하고 수십 및 수천의 장소는 분이어야합니다. 예를 들어, 값 1234은 12 분, 34 초로 해석 9876되어야하며 98 분, 76 초 여야합니다. 타이핑 1309090초의 조리 시간에 모두 결과는한다.

다음은 몇 가지 다른 입력 및 출력입니다.

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

규칙

이것은 이므로 바이트 단위의 가장 짧은 프로그램이 승리합니다. 표준 허점은 허용되지 않습니다. 우승 항목은 1에서 9999 사이의 정수 입력이 주어지면 정답을 반환해야합니다.


@WheatWizard, 질문을 편집하게되어 기쁩니다. 세부 사항 섹션에서 내가 말해야 할 것에 대한 제안이 있습니까? 어쩌면 나는이 문장을 더 명확하게 만들 수있을 것입니다. "1과 10의 장소는 초로 해석되어야하고 수백과 수천의 장소는 분이어야합니다."
Andrew Brēza

@WheatWizard 방금 더 자세한 내용을 추가했습니다. 추가해야한다고 생각되면 알려주십시오.
Andrew Brēza

그 입력으로 작동합니까 9876?
Andrew Brēza

1
이상한, 나는 샌드 박스에 관하여이었다이 정확한 도전 하하
FlipTack

결과는 무엇입니까 190?
OldBunny2800

답변:




7

C, C ++, Java, C #, D : 36 바이트

D : 35 바이트

C : 28 바이트

처음에는 그 대답이 짧습니다!

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

골프 템플릿 시스템으로 인해 D는 특별한 최적화를 가질 수 있습니다.

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';
    }
}

온라인으로 사용해보십시오!

에서 자바 :

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.run/… 이 TIO의 바닥 글이며 템플릿 시스템을 배웠습니다. :) ( foreachD 에는 a가 있는데 슬프게 사용하는 방법을 잊어 버렸습니다)
Zacharý

C89 implicit-int를 사용하여 C를 28 바이트 로 골프화 할 수 있습니다 .
pizzapants184

이 모든 것을 별도의 답변으로 게시해야합니다.
MD XF



6

dc , 10 바이트

?9A~r60*+p

온라인으로 사용해보십시오!

설명 : sth를 누를 때 dc에서. 스택에 그것은 위에 간다

?         # 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 바이트

@seshoumara 덕분에 -2 바이트 .

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

온라인으로 사용해보십시오!

stdin에서 입력을받습니다. 보다 창의적인 접근 방식을 원했습니다 : *60+마지막 1 자리 또는 2 자리 앞에 삽입 하고 1 자리 또는 2 자리 0만의 입력을 설명하기 위해 시작 부분 앞에 a 를 추가합니다 . 그런 다음 결과가로 전달됩니다 bc.


1
를 제거 -r하고 사용 \?하면 2 바이트를 잃을 수 있습니다.
seshoumara




2

자바 스크립트, 21 바이트

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

온라인으로 사용해보십시오!


ovs의 트릭을 사용하여 4 바이트 저장-a- (a / 100 ^ 0) * 40
IanF1

1
@ IanF1. 고마워,하지만 말 그대로 그들의 아이디어를 훔칠 것이라고 생각합니다.

그래, 당신 말이 맞아. 너무 열성적입니다. 죄송합니다.
IanF1

3
@ThePirateBay 당신은 정말 다음 이름에 거주하지 않는)
kamoroso94

2

J , 12 바이트

-40*&<.%&100

J로 표현 된 ovs의 Python 2 솔루션입니다. 후크와 포크로 구성됩니다.

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

배치, 23 바이트

@cmd/cset/a%1-%1/100*40


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가 막 다른 골목에 도달하여 뒤로 이동하기 시작합니다. 도달하면 /0으로 나누기를 시도하여 프로그램을 종료합니다.


2

젤리 , 5 바이트

모나 딕 링크로서

b³ḅ60

온라인으로 사용해보십시오!

... 또는 전체 프로그램으로 :

bȷ2ḅ60

이것은 05AB1E로 쉽게 포팅 될 수 있습니다.

05AB1E , 5 바이트

тв60β

온라인으로 사용해보십시오!

입력 정수를 밑수 100 으로 변환 한 다음 결과를 밑수 60의 정수 로 변환하면 됩니다. 따라서 입력 % 100 + 60 * ⌊ 입력 / 100⌋에 해당합니다.



난 당신이 의미 생각 @cairdcoinheringaahing 있지만, 감사의 헤드 업 어쨌든
씨 Xcoder

2

Excel VBA, 29 바이트

범위에서 입력 [A1]을 받고 VBE 즉시 창으로 출력하는 익명 VBE 즉시 창 기능 .

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


2

파리 / GP , 16 바이트

똑바로:

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

불행히도이 멋진 방법은 사용하기에 너무 길다 :

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

2

Pushy , 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 바이트

1 바이트 이상에서는 다음 Input % 100 + 60 * ⌊Input / 100⌋방법을 사용할 수 있습니다 .

H2d%}/60*+#

온라인으로 사용해보십시오!


1
@ovs 'Python 2 answer 의 포트를 생성하여 9 바이트 : 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$*

온라인으로 사용해보십시오!

단항으로 입력 및 출력 . 테스트 스위트는 편의상 10 진수로 변환합니다.

단 2 자리까지만 이러한 종류의 기본 변환을 수행하는 것은 단항식에서 매우 간단합니다. 우리는 100 1의 런을 일치 시키고 60 1년대로 대체합니다 . 남은 것은 십진수 표현의 마지막 두 자리에 해당하며 변경되지 않습니다.


1

Alice , 19 바이트

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

온라인으로 사용해보십시오!

설명

너무 나쁜 언어에서 divmod 를 제거 했습니다 .

/o
\i@/...

이것은 순전히 카디널 (산술) 모드에서 십진 I / O가 작동하는 선형 프로그램의 일반적인 프레임 워크입니다.

.     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

규칙은 이와 관련하여 매우 일치하지 않습니다. 가장 중요한 과제 중 하나는 가치를 포착하기 위해 기능 또는 스캔이 필요합니다.
Mark


1

REXX, 25 바이트

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

(@ovs의 또 다른 번역)


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.