Jak długo powinna działać moja kuchenka mikrofalowa?

33

Jestem głodny. Zróbmy coś mikrofalowego. Biorąc pod uwagę numeryczną liczbę od 1 do 4 cyfr, podaj liczbę sekund, które powinna uruchomić kuchenka mikrofalowa.

Detale

Sztuką jest ustalenie, czy użytkownik wprowadza sekundy, czy kombinację sekund i minut. Te i dziesiątki miejsc należy interpretować jako sekundy, a setki i tysiące miejsc powinny być minutami. Na przykład wartość 1234należy interpretować jako 12 minut, 34 sekund i 9876powinna wynosić 98 minut, 76 sekund. Pisanie na klawiaturze 130i 90powinno skutkować czasem gotowania 90 sekund.

Oto kilka innych danych wejściowych i wyjściowych:

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

Zasady

To jest , więc wygrywa najkrótszy program w bajtach. Standardowe luki są niedozwolone. Zwycięski wpis musi zwrócić poprawną odpowiedź, jeśli otrzyma dowolną liczbę całkowitą od 1 do 9999.

Andrew Brēza
źródło
@WheatWizard, z przyjemnością edytuję pytanie. Czy masz jakieś sugestie dotyczące tego, co powinienem powiedzieć w części „Szczegóły”? Może mógłbym wyjaśnić to zdanie: „Te i dziesiątki miejsc powinny być interpretowane jako sekundy, a setki i tysiące miejsc powinny być minutami”.
Andrew Brēza,
@WheatWizard Właśnie dodałem więcej szczegółów, daj mi znać, jeśli uważasz, że powinienem dodać więcej.
Andrew Brēza,
Czy to działa z wejściem 9876?
Andrew Brēza,
1
Dziwne, miałem właśnie przeprowadzić piaskownicę tego konkretnego wyzwania haha
FlipTack
Jaki byłby wynik 190?
OldBunny2800,

Odpowiedzi:

9

Japt , 6 bajtów

ìL ì60

Przetestuj online! ìLkonwertuje na base-100 i ì60konwertuje z powrotem na base 60, w wyniku czego floor(n/100)*60 + n%100. Działa również z godzinami ( 10000 -> 3600liczbą sekund na godzinę).

ETHprodukcje
źródło
1
Dokładnie to, co miałem :)
Kudłaty
7

C, C ++, Java, C #, D: 36 bajtów

D: 35 bajtów

C: 28 bajtów

Po raz pierwszy mam tak krótką odpowiedź!

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

D może mieć specjalną optymalizację ze względu na system szablonów golfy:

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

C ma specjalną optymalizację z domyślną int:

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

Kod do przetestowania

W C (należy dołączyć 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;
}

Link TIO

W C ++ (należy dołączyć 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';
    }
}

Wypróbuj online!

W Javie :

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

Wypróbuj online!

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

W D (trzeba zaimportować std.stdio) (dokładnie, nie mam pojęcia, jak używać tablic w 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]));
} 

Link TIO

HatsuPointerKun
źródło
Kod testowy D będzie stopką tego TIO: tio.run /... i widzę, że nauczyłeś się systemu szablonów :). (Jest foreachw D, po prostu zapomniałem, jak go używać ze smutkiem)
Zacharý
C można golfować do 28 bajtów za pomocą C89 implicit-int.
pizzapants184
Powinieneś zamieścić je wszystkie jako osobne odpowiedzi.
MD XF,
6

Pyth - 9 8 bajtów

Konwertuje dane wejściowe na bazę 100, a następnie interpretuje to jako liczbę bazową 60.

ijQ*TT60

Pakiet testowy .

Maltysen
źródło
6

TI-Basic (seria 83), 8 bajtów

Ans-40int(sub(Ans

Wymaga systemu operacyjnego w wersji 1.15 lub nowszej.

Misza Ławrow
źródło
6

dc , 10 bajtów

?9A~r60*+p

Wypróbuj online!

Objaśnienie: w DC, gdy naciskasz coś. na stosie idzie na wierzch

?         # 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
seshoumara
źródło
5

Bash bc + sed, 30 28 bajtów

-2 bajty dzięki @seshoumara .

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

Wypróbuj online!

Pobiera dane wejściowe ze standardowego wejścia. Poszedł do bardziej kreatywnego podejścia: wstawia *60+przed ostatnią 1 lub 2 cyframi i przygotowuje 0od początku do uwzględnienia danych wejściowych zawierających tylko 1 lub 2 cyfry. Wynik jest następnie przekazywany do bc.

Justin Mariner
źródło
1
Jeśli usuniesz -ri użyjesz \?, możesz stracić 2 bajty.
seshoumara,
3

Perl 5, 15 + 1 (-p) bajtów

/..$/;$_-=40*$`
  • -l przełącznik nie jest liczony, ponieważ dla czytelności testów

Wypróbuj online

Nahuel Fouilleul
źródło
2

JavaScript, 21 bajtów

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

Wypróbuj online!


źródło
Zaoszczędź 4 bajty, używając sztuczki ovsa - a- (a / 100 ^ 0) * 40
IanF1
1
@ IanF1. Dzięki, ale myślę, że to dosłownie kradnie ich pomysł.
tak, masz rację. Przepraszam, zbyt entuzjastycznie.
IanF1
3
@ThePirateBay Tak naprawdę nie zasługujesz na swoje imię;)
kamoroso94 11.11.17
2

J , 12 bajtów

-40*&<.%&100

Jest to rozwiązanie Pythona 2 wyrażone w J. Składa się z haka i widelca:

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

Wypróbuj online!

Galen Iwanow
źródło
1
Liczba bajtów taka sama jak 60#.0 100#:].
FrownyFrog,
@FrownyFrog - Twoje rozwiązanie wygląda ładniej, na zdrowie!
Galen Iwanow
2

Partia, 23 bajty

@cmd/cset/a%1-%1/100*40
Neil
źródło
2

Haskell , 18 bajtów

f t=t-t`div`100*40

Wypróbuj online!

Port Anotha.

Rozwiązanie Pointfree, 21 bajtów

(-)<*>(*40).(`div`40)
całkowicie ludzki
źródło
2

Labirynt , 19 bajtów

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

Wypróbuj online!

Wyjaśnienie

?      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 trafia w ślepy zaułek i zaczyna się cofać. Kiedy dotrze do/ , próbuje podzielić przez zero, co kończy program.

Martin Ender
źródło
2

Galaretka , 5 bajtów

Jako monadyczny link (dzięki za heads-up, caird!):

b³ḅ60

Wypróbuj online!

... lub jako pełny program:

bȷ2ḅ60

Można to łatwo przenieść do 05AB1E, więc:

05AB1E , 5 bajtów

тв60β

Wypróbuj online!

Po prostu konwertuje wejściową liczbę całkowitą na bazę 100, a następnie konwertuje wynik z podstawy 60 na liczbę całkowitą. W związku z tym odpowiada to wejściowemu% 100 + 60 * ⌊Wejście / 100⌋

Pan Xcoder
źródło
W funkcji 5 bajtów
caird coinheringaahing
@cairdcoinheringaahing Myślę, że miałeś na myśli to , ale i tak dziękuję za heads-up
Mr. Xcoder
2

Excel VBA, 29 bajtów

Anonimowa funkcja bezpośredniego okna VBE, która przenosi dane wejściowe z zakresu [A1]i wyjścia do bezpośredniego okna VBE.

?[A1]Mod 1E2+60*[Int(A1/100)]
Taylor Scott
źródło
2

APL (Dyalog) , 11 10 bajtów

600 100⊤⊢

Wypróbuj online!

W jaki sposób?

0 100⊤- kodować w bazie 100, zatrzymując się na drugim LSB, skutecznie wytwarzając n ÷ 100, n % 100.

60⊥ - dekodować w bazie 60

Uriel
źródło
2

PARI / GP , 16 bajtów

Bezpośredni:

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

Niestety, ta przyjemna metoda jest po prostu zbyt długa do użycia:

n->[60,1]*divrem(n,100)
Charles
źródło
2

Pushy , 10 9 bajtów

Kevin obezwładnił mnie w moim własnym języku ... (używając podejścia z odpowiedzi ovs )

2dH/40*-#

Wypróbuj online!

10 bajtów

sjvj60*^+#

Wypróbuj 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 bajtów

Jeszcze jeden bajt możemy zastosować Input % 100 + 60 * ⌊Input / 100⌋podejście:

H2d%}/60*+#

Wypróbuj online!

FlipTack
źródło
1
9 bajtów poprzez utworzenie portu Python 2 odpowiedzi @ovs' : 2dH/40*-#. Nigdy wcześniej nie programowany w Pushy, ale wygląda na całkiem fajny język. :)
Kevin Cruijssen
1
@KevinCruijssen to dość ogólny język oparty na stosach, myślę, że jedyną nieznacznie inną rzeczą, jaką przynosi do stołu, jest podwójny stos ... ale dziękuję i dziękuję za golfa :)
FlipTack
1

05AB1E , 9 bajtów

т÷60*¹т%+

Wypróbuj online!

Wyjaśnienie:

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

Prawdopodobnie istnieje pewna sztuczka z podstawowymi konwersjami, którą można osiągnąć w 05AB1E, ale nie mogłem jej znaleźć.


źródło
1

bash, 20 bajtów

echo $[$1-$1/100*40]

Wypróbuj online

Nahuel Fouilleul
źródło
1

Siatkówka , 11 bajtów

.{100}
60$*

Wypróbuj online!

Wejście i wyjście unary . Dla wygody zestaw testów konwertuje zi na dziesiętny.

Wykonanie tego rodzaju konwersji podstawowej tylko dla maksymalnie dwóch cyfr jest zaskakująco proste do zrobienia w pojedynczej jednostce. Po prostu dopasowujemy przebiegi 100 1s i zastępujemy je 60 1s. Wszystko, co pozostanie, odpowiada dwóm ostatnim cyfrom w postaci dziesiętnej i pozostaje niezmienione.

Martin Ender
źródło
1

Alice , 19 bajtów

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

Wypróbuj online!

Wyjaśnienie

Szkoda, że ​​usunąłem divmod z języka, tak myślę ...

/o
\i@/...

Jest to zwykła struktura dla programów liniowych z dziesiętnymi operacjami we / wy działającymi wyłącznie w trybie kardynalnym (arytmetycznym).

.     Duplicate input.
'd%   Mod 100.
~     Swap with other copy.
'd:   Divide by 100.
'<*   Multiply by 60.
+     Add.
Martin Ender
źródło
1

Droga Mleczna , 10 bajtów

':Z/v40*-!

stosowanie: ./mw code.mwg -i 9999

Wyjaśnienie:

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
ovs
źródło
1

R , 21 bajtów

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

Wypróbuj online!

znak
źródło
1
W R stworzyłem własne rozwiązanie, które było znacznie mniej eleganckie.
Andrew Brēza,
Możesz wyciąć, scanponieważ większość odpowiedzi zakłada, że ​​zmienna jest już zdefiniowana.
Andrew Brēza
W związku z tym zasady są tak niespójne. Jednym z innych wyzwań jest posiadanie funkcji lub skanowanie w celu uchwycenia wartości.
Mark
1

REXX, 25 bajtów

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

(Tylko kolejne tłumaczenia @ovs)

idrougge
źródło
0

05AB1E , 7 bajtów

т‰ć60*+

Wypróbuj online!

Wyjaśnienie

         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]
Cinari
źródło
0

Symboliczny Python , 66 bajtów

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

Wypróbuj online!


Wyjaśnienie

Symbolic Python          values

___=-~-~_-_              ___=2
__=___*___               __=2*2=4
__=__*__*___+___*__      __=4*4*2+2*4=32+8=40
_=_-_/(__+__+__/___)*__  _=_-_/(40+40+40/2)*40=_-_/100*40
ovs
źródło