私の電子レンジはどれくらいの時間作動しますか?


33

お腹が空きました。電子レンジをしましょう。1から4桁の数値入力が与えられた場合、マイクロ波が実行される秒数を出力します。

詳細

ユーザーが秒または秒と分を組み合わせて入力しているかどうかを判断するのがコツです。1桁と10桁は秒と解釈され、数百と数千桁は分である必要があります。たとえば、値1234は12分34秒として解釈され、987698分76秒である必要があります。入力する130と、90両方とも90秒のクック時間になります。

他のいくつかの入力と出力は次のとおりです。

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

ルール

これはであるため、バイト単位の最短プログラムが優先されます。標準の抜け穴は許可されていません。1から9999までの整数入力が与えられた場合、受賞エントリは正しい答えを返さなければなりません。


@WheatWizard、質問を編集させていただきます。詳細セクションで私が言うべきことについての提案はありますか?「1桁と10桁は秒と解釈し、数百と数千桁は分と解釈する必要があります。」
アンドリューブリンザ

@WheatWizard詳細を追加したばかりですが、追加する必要があると思われる場合はお知らせください。
アンドリューブリンザ

それはの入力で動作し9876ますか?
アンドリューブリンザ

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

オンラインでお試しください!

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/…であり、テンプレートシステムを学習したことがわかります:)。(foreachDにある、悲しいことにそれを使用する方法を忘れていた)
ザカリー

Cは、C89 implicit-intを使用して28バイトまでゴルフできます。
pizzapants184

これらすべてを個別の回答として投稿する必要があります。
MD XF



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バイト

@seshoumaraのおかげで-2バイト。

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

オンラインでお試しください!

stdinから入力を受け取ります。より創造的なアプローチのために行きました。*60+最後の1桁または2桁の前に挿入し、先頭にa 0を追加して、1桁または2桁のみの入力を考慮します。結果はに渡されbcます。


1
を削除-rして使用すると\?、2バイトが失われる可能性があります。
seshoumara




2

JavaScript、21バイト

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

オンラインでお試しください!


ovsのトリックを使用して4バイトを節約
-a-

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-ソリューションはきれいに見えます、乾杯!
ガレンイワノフ



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バイト

モナドリンクとして(ヘッズアップに感謝、ケアード!):

b³ḅ60

オンラインでお試しください!

...または完全なプログラムとして:

bȷ2ḅ60

これは05AB1Eに簡単に移植できるため、次のようになります。

05AB1E、5バイト

тв60β

オンラインでお試しください!

入力整数を基数100に変換してから、結果を基数60から整数に変換します。したがって、Input%100 + 60 *⌊Input/100⌋と同等です



私はあなたが意味するものだと思う@cairdcoinheringaahing これを、しかし、おかげ用ヘッドアップとにかく
氏Xcoder

2

Excel VBA、29バイト

範囲から入力を受け取り[A1]、VBEイミディエイトウィンドウに出力する匿名VBEイミディエイトウィンドウ関数。

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


2

PARI / GP、16バイト

わかりやすい:

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

残念ながら、この素晴らしいメソッドは長すぎて使用できません。

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

2

Pushy10 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
図9は、ポートの作成することにより、バイト@ovs' Pythonの2の答えを2dH/40*-#。以前Pushyでプログラミングしたことはありませんが、かなりクールな言語のようです。:)
ケビンクルーイッセン

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進数から10進数に変換します。

この種の基本変換を最大2桁まで行うのは、単項で驚くほど簡単です。100 1秒の実行に一致し、60 1秒に置き換えます。残ったものはすべて、10進数表現の最後の2桁に対応し、変更されないままになります。


1

アリス、19バイト

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

オンラインでお試しください!

説明

残念ながら、言語からdivmodを削除しました

/o
\i@/...

これは、純粋にCardinal(算術)モードで動作する10進数の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で独自のソリューションを作成しましたが、これほどエレガントではありませんでした。
アンドリューブルーザ

scanほとんどの答えは変数がすでに定義されていると仮定するだけなので、カットできます。
アンドリューブルーザ

ルールはそれに関して非常に矛盾しています。他のほとんどの課題の1つは、値を取得する機能またはスキャンが必要です。
マーク



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.