Wie lange soll meine Mikrowelle laufen?


33

Ich habe Hunger. Lassen Sie uns etwas Mikrowelle. Geben Sie bei einer Zahleneingabe zwischen 1 und 4 Ziffern die Anzahl der Sekunden aus, die die Mikrowelle laufen soll.

Einzelheiten

Der Trick besteht darin, herauszufinden, ob der Benutzer Sekunden oder eine Kombination aus Sekunden und Minuten eingibt. Die Einsen und die Zehnerstellen sollten als Sekunden interpretiert werden und die Hunderter und Tausenderstellen sollten Minuten sein. Beispielsweise sollte der Wert 1234als 12 Minuten, 34 Sekunden und 987698 Minuten, 76 Sekunden interpretiert werden. Tippen 130und 90beides sollte eine Garzeit von 90 Sekunden ergeben.

Hier sind einige andere Ein- und Ausgänge:

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

Regeln

Das ist , also gewinnt das kürzeste Programm in Bytes. Standardlücken sind nicht erlaubt. Der Gewinner muss die richtige Antwort zurückgeben, wenn er eine Ganzzahleingabe von 1 bis 9999 erhält.


@ WheatWizard, ich bin glücklich, die Frage zu bearbeiten. Haben Sie einen Vorschlag für das, was ich im Detailabschnitt sagen sollte? Vielleicht könnte ich diesen Satz klarer machen: "Die Einsen und die Zehnerstellen sollten als Sekunden interpretiert werden und die Hunderter und Tausenderstellen sollten Minuten sein."
Andrew Brēza

@ WheatWizard Ich habe gerade weitere Details hinzugefügt. Lassen Sie mich wissen, wenn Sie der Meinung sind, dass ich weitere hinzufügen sollte.
Andrew Brēza

Funktioniert das mit einer Eingabe von 9876?
Andrew Brēza

1
Seltsamerweise wollte ich gerade genau diese Herausforderung
lösen,

Wofür wäre die Ausgabe 190?
OldBunny2800

Antworten:



9

Japt , 6 Bytes

ìL ì60

Testen Sie es online! ìLkonvertiert zu Base-100 und ì60konvertiert zurück zu Base 60, was zu führt floor(n/100)*60 + n%100. Funktioniert auch mit Stunden ( 10000 -> 3600die Anzahl der Sekunden in einer Stunde).


1
Genau das, was ich hatte :)
Shaggy

7

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

D: 35 Bytes

C: 28 Bytes

Zum ersten Mal habe ich eine Antwort so kurz!

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

D kann aufgrund des Golf-Template-Systems eine besondere Optimierung erfahren:

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

C hat eine spezielle Optimierung mit dem impliziten int:

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

Code zum Testen

In C (muss enthalten sein 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 Link

In C ++ (muss enthalten sein 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';
    }
}

Probieren Sie es online!

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

Probieren Sie es online!

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

In D (muss importieren std.stdio) (genau, ich habe keine Ahnung, wie man Arrays in D verwendet):

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 Link


Der D- Testcode ist die Fußzeile dieses TIOs : tio.run/… , und ich sehe, dass Sie das Vorlagensystem gelernt haben :). (Es gibt eine foreachin D, ich habe nur vergessen, wie man es leider verwendet)
Zacharý

C kann mit C89 implicit-int auf 28 Bytes golfen werden.
Pizzapants184

Sie sollten alle diese als separate Antworten veröffentlichen.
MD XF

6

Pyth - 9 8 Bytes

Wandelt die Eingabe in eine Zahl zur Basis 100 um und interpretiert diese als Zahl zur Basis 60.

ijQ*TT60

Test Suite .


6

TI-Basic (Serie 83), 8 Byte

Ans-40int(sub(Ans

Benötigt OS Version 1.15 oder höher.


6

Gleichstrom , 10 Bytes

?9A~r60*+p

Probieren Sie es online!

Erklärung: in dc, wenn du etw drückst. auf dem Stapel geht es oben drauf

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

-2 Bytes dank @seshoumara .

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

Probieren Sie es online!

Übernimmt die Eingabe von stdin. Ging zu einem kreativeren Ansatz über: *60+Fügt vor den letzten 1 oder 2 Ziffern ein und stellt ein 0vor den Anfang, um Eingaben mit nur 1 oder 2 Ziffern zu berücksichtigen. Das Ergebnis wird dann an übergeben bc.


1
Wenn Sie entfernen -rund verwenden \?, können Sie 2 Bytes verlieren.
Seshoumara




2

JavaScript, 21 Bytes

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

Probieren Sie es online!


Sparen Sie 4 Bytes mit dem Trick von ovs - a- (a / 100 ^ 0) * 40
IanF1

1
@ IanF1. Danke, aber ich denke, es würde buchstäblich ihre Idee stehlen.

ja, du hast recht. Zu enthusiastisch, sorry.
IanF1

3
@ThePirateBay Du wirst deinem Namen nicht wirklich gerecht;)
kamoroso94

2

J , 12 Bytes

-40*&<.%&100

Es ist die Python 2-Lösung von ovs, ausgedrückt in J. Sie besteht aus einem Haken und einer Gabel:

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

Probieren Sie es online!


1
Gleiche Byteanzahl wie 60#.0 100#:].
FrownyFrog

@FrownyFrog - Ihre Lösung sieht schöner aus, Prost!
Galen Ivanov



2

Labyrinth , 19 Bytes

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

Probieren Sie es online!

Erläuterung

?      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.

Die IP stößt dann auf eine Sackgasse und beginnt sich rückwärts zu bewegen. Wenn es das erreicht /, versucht es eine Division durch Null, die das Programm beendet.


2

Gelee , 5 Bytes

Als monadischer Link (danke für das Heads-up, caird!):

b³ḅ60

Probieren Sie es online!

... oder als volles Programm:

bȷ2ḅ60

Dies kann einfach auf 05AB1E portiert werden, also:

05AB1E , 5 Bytes

тв60β

Probieren Sie es online!

Konvertiert einfach die eingegebene Ganzzahl in die Basis 100 und konvertiert dann das Ergebnis von der Basis 60 in eine Ganzzahl. Daher entspricht dies Eingabe% 100 + 60 * ⌊Eingang / 100⌋



@cairdcoinheringaahing Ich denke, Sie meinten das , aber trotzdem danke für das Heads-up
Mr. Xcoder

2

Excel VBA, 29 Bytes

Anonyme VBE-Direktfensterfunktion, die Eingaben aus dem Bereich [A1]und Ausgaben in das VBE-Direktfenster übernimmt .

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


2

PARI / GP , 16 Bytes

Einfach:

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

Leider ist diese schöne Methode einfach zu lang:

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

2

Aufdringlich , 10 9 Bytes

Kevin hat mich in meiner eigenen Sprache übervorteilt ... (mit dem Ansatz von ovs 'Antwort)

2dH/40*-#

Probieren Sie es online!

10 Bytes

sjvj60*^+#

Probieren Sie es online!

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 Bytes

Für ein Byte mehr können wir den Input % 100 + 60 * ⌊Input / 100⌋Ansatz verwenden:

H2d%}/60*+#

Probieren Sie es online!


1
9 Bytes , die durch einen Port der Schaffung @ovs' Python 2 Antwort : 2dH/40*-#. Noch nie in Pushy programmiert, aber es scheint eine ziemlich coole Sprache zu sein. :)
Kevin Cruijssen

1
@ KevinCruijssen es ist eine ziemlich generische Stack-basierte Sprache, ich denke, das einzige, was es auf den Tisch bringt, ist der Double-Stack ... aber danke und danke für das Golfen :)
FlipTack

1

05AB1E , 9 Bytes

т÷60*¹т%+

Probieren Sie es online!

Erläuterung:

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

Wahrscheinlich gibt es einen Trick mit Basisumwandlungen, der in 05AB1E erzielt werden kann, aber ich konnte ihn nicht finden.



1

Retina , 11 Bytes

.{100}
60$*

Probieren Sie es online!

Ein- und Ausgabe in unary . Die Testsuite konvertiert aus praktischen Gründen von und nach Dezimalstellen.

Diese Art der Basiskonvertierung für nur zwei Ziffern ist überraschend einfach in unary durchzuführen. Wir gleichen nur Läufe von 100 1s ab und ersetzen sie durch 60 1s. Alles, was übrig bleibt, entspricht den letzten beiden Stellen in der Dezimaldarstellung und bleibt unverändert.


1

Alice , 19 Bytes

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

Probieren Sie es online!

Erläuterung

Schade, dass ich Divmod aus der Sprache entfernt habe, denke ich ...

/o
\i@/...

Dies ist nur der übliche Rahmen für lineare Programme mit dezimaler E / A, die nur im Kardinalmodus (arithmetisch) ausgeführt werden.

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

1

Milchstraße , 10 Bytes

':Z/v40*-!

Verwendung: ./mw code.mwg -i 9999

Erläuterung:

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 Bytes

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

Probieren Sie es online!


1
Ich habe meine eigene Lösung in R erstellt und sie war weit weniger elegant als diese.
Andrew Brēza

Sie können das abschneiden, scanda die meisten Antworten nur davon ausgehen, dass die Variable bereits definiert ist.
Andrew Brēza

Die Regeln sind diesbezüglich so inkonsistent. Eine weitere Herausforderung ist, dass Sie eine Funktion oder einen Scan haben müssen, um den Wert zu erfassen.
Mark


1

REXX, 25 Bytes

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

(Nur eine andere Übersetzung von @ovs)


0

05AB1E , 7 Bytes

т‰ć60*+

Probieren Sie es online!

Erläuterung

         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]

0

Symbolische Python , 66 Bytes

___=-~-~_-_
__=___*___
__=__*__*___+___*__
_=_-_/(__+__+__/___)*__

Probieren Sie es online!


Erläuterung

Symbolic Python          values

___=-~-~_-_              ___=2
__=___*___               __=2*2=4
__=__*__*___+___*__      __=4*4*2+2*4=32+8=40
_=_-_/(__+__+__/___)*__  _=_-_/(40+40+40/2)*40=_-_/100*40
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.