Mikrodalga fırınının ne kadar sürmesi gerekir?


33

Açım. Hadi bir şeyler mikrodalga yapalım. 1 ila 4 hane arasındaki sayısal bir giriş verildiğinde, mikrodalga fırının çalışması gereken saniye sayısını verin.

ayrıntılar

İşin püf noktası, kullanıcının saniye mi yoksa saniye ve dakika kombinasyonu mu girdiğini bulmaktır. Onlar ve onlarca yerler saniye olarak yorumlanmalı ve yüzlerce ve binlerce yer dakika olmalı. Örneğin, değer 123412 dakika, 34 saniye olarak yorumlanmalı ve 987698 dakika, 76 saniye olmalıdır. Yazma 130ve 90her ikisi de 90 saniyelik bir pişirme süresi ile sonuçlanmalıdır.

İşte birkaç başka giriş ve çıkış:

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

kurallar

Bu , yani bayt cinsinden en kısa program kazanır. Standart boşluklara izin verilmez. Kazanan giriş, 1 ile 9999 arasındaki herhangi bir tam sayı girişi verildiğinde doğru cevabı vermelidir.


@WheatWizard, soruyu düzenlemek için mutluyum. Detaylar bölümünde söylemem gerekenler için bir öneriniz var mı? Belki bu cümleyi daha açık hale getirebilirim: "Onlar ve onlarca yerler saniyeler olarak yorumlanmalı ve yüzlerce ve binlerce yerler de dakika olmalı."
Andrew Brēza

@WheatWizard Daha fazla ayrıntı ekledim, daha fazla eklemem gerektiğini düşünüyorsanız bana bildirin.
Andrew Brēza

Bu bir girdiyle çalışıyor mu 9876?
Andrew Brēza

1
Garip, haha ​​bu tam meydan sandbox
üzereydim

Çıktı ne için olurdu 190?
OldBunny2800

Yanıtlar:




7

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

D: 35 bayt

C: 28 bayt

İlk kez bu kadar kısa bir cevabım var!

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

D golf sahası şablon sistemi sayesinde özel bir optimizasyona sahip olabilir:

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

C örtük int ile özel bir optimizasyona sahip:

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

Test edilecek kod

Olarak C (içermek zorunda 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 Bağlantısı

Gelen C ++ (içermek zorunda 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';
    }
}

Çevrimiçi deneyin!

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

Çevrimiçi deneyin!

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 (ithalat zorunda std.stdio) (tam olarak, ben nasıl D'de diziler kullanmak için hiçbir fikrim yok):

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 Bağlantısı


D testi kodu bu TIO'nun altbilgisidir: tio.run/… ve şablon sistemini öğrendiğinizi görüyorum :). (Bir foreachD var, sadece ne yazık ki nasıl kullanılacağını unuttum)
Zacharý

C, C89 örtük-int kullanılarak 28 bayta golf edilebilir .
pizzapants184

Tüm bunları ayrı cevaplar olarak göndermelisiniz.
MD XF

6

Pyth - 9 8 bayt

Girdiyi taban 100'e dönüştürür, ardından bunu bir taban 60 numarası olarak yorumlar.

ijQ*TT60

Test Takımı .


6

TI-Basic (83 serisi), 8 bayt

Ans-40int(sub(Ans

OS sürüm 1.15 veya üstü gerektirir.


6

dc , 10 bayt

?9A~r60*+p

Çevrimiçi deneyin!

Açıklama: sth tuşuna bastığınızda dc cinsinden. yığında üstüne gider

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

@Seshoumara sayesinde -2 bayt .

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

Çevrimiçi deneyin!

Stdin'den girdi alır. Daha yaratıcı bir yaklaşım için gitti: *60+son 1 veya 2 haneden önce ekler ve 0yalnızca 1 veya 2 basamaklı girişleri hesaba katmak için a'yı hazırlar. Sonuç daha sonra iletilir bc.


1
Çıkarır -rve kullanırsanız \?, 2 bayt kaybedebilirsiniz.
seshoumara




2

JavaScript, 21 bayt

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

Çevrimiçi deneyin!


Ovs's hilesini kullanarak 4 bayt kazanın - a- (a / 100 ^ 0) * 40
IanF1

1
IanF1 @. Teşekkürler, ama kelimenin tam anlamıyla onların fikirlerini çalmak olacağını düşünüyorum.

Evet, haklısın. Çok hevesli, üzgünüm.
IanF1

3
@ThePirateBay Gerçekten isminizi o zaman yaşayamazsınız;)
kamoroso94

2

J , 12 bayt

-40*&<.%&100

Ovs 'Python 2 çözümü J olarak ifade edilmiştir. Bir kanca ve çataldan oluşur:

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

Çevrimiçi deneyin!


1
Aynı bayt sayısı 60#.0 100#:].
FrownyFrog 11:17

@ FrownyFrog - Çözümün daha güzel görünüyor, şerefe!
Galen Ivanov

2

Toplu iş, 23 bayt

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


2

Labirent , 19 bayt

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

Çevrimiçi deneyin!

açıklama

?      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 daha sonra bir çıkmaza girer ve geriye doğru hareket etmeye başlar. Ulaştığı zaman /bu program sona erer sıfıra bölmeye çalışır.


2

Jöle , 5 bayt

Monadik bir bağlantı olarak (başlıklar için teşekkürler, caird!):

b³ḅ60

Çevrimiçi deneyin!

... Veya tam program olarak:

bȷ2ḅ60

Bu kolayca 05AB1E'ye taşınabilir, yani:

05AB1E , 5 bayt

тв60β

Çevrimiçi deneyin!

Basitçe giriş tamsayısını taban 100'e dönüştürür ve sonucu taban 60'tan tam sayıya dönüştürür . Bu nedenle, % 100 + 60 * Giriş değerine eşdeğerdir.



Ne demek düşünüyorum @cairdcoinheringaahing bu , ama teşekkürler için teke tek Neyse
Sn Xcoder

2

Excel VBA, 29 Bayt

Menzilden girdi alan [A1]ve VBE acil durum penceresine çıkan anonim VBE acil durum pencere işlevi .

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


2

PARI / GP , 16 bayt

Basit:

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

Ne yazık ki bu güzel yöntem, kullanımı çok uzun:

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

2

Pushy , 10 9 bayt

Kevin (dan yaklaşım kullanarak ... kendi dilimde bana outgolfed Ovs 'cevabı)

2dH/40*-#

Çevrimiçi deneyin!

10 bayt

sjvj60*^+#

Çevrimiçi deneyin!

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 bayt

Bir bayttan fazlası için bu Input % 100 + 60 * ⌊Input / 100⌋yaklaşımı kullanabiliriz :

H2d%}/60*+#

Çevrimiçi deneyin!


1
9 bir bağlantı noktası oluşturarak bayt @ovs' Python 2 cevap : 2dH/40*-#. Daha önce Pushy'de programlanmadı, ancak çok havalı bir dil gibi görünüyor. :)
Kevin Cruijssen

1
@KevinCruijssen oldukça genel bir yığın tabanlı dil, sanırım masaya getirdiği sadece biraz farklı şey çift yığın ... sanırım ama teşekkür ederim ve golf için teşekkürler :)
FlipTack 13:17

1

05AB1E , 9 bayt

т÷60*¹т%+

Çevrimiçi deneyin!

Açıklama:

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

Muhtemelen 05AB1E'de elde edilebilecek bazı temel dönüşümleri olan bir hile var, ama bulamadım.



1

Retina , 11 bayt

.{100}
60$*

Çevrimiçi deneyin!

Unary giriş ve çıkış . Test paketi kolaylık sağlamak için onluk değere dönüşür.

Bu tür bir temel dönüşümü yalnızca iki haneye kadar yapmak, şaşırtıcı bir şekilde, unary'de yapılması kolaydır. Sadece 100 1saniyelik koşularla eşleşiyoruz ve onları 60 1saniyeyle değiştiriyoruz . Geride kalan herhangi bir şey, ondalık göstergedeki son iki haneye karşılık gelir ve değişmeden kalır.


1

Alice , 19 bayt

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

Çevrimiçi deneyin!

açıklama

Çok kötü divmod'u dilden kaldırdım , sanırım ...

/o
\i@/...

Bu, yalnızca Kardinal (aritmetik) modunda çalışan ondalık G / Ç içeren doğrusal programlar için olağan bir çerçevedir.

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

1

Samanyolu , 10 bayt

':Z/v40*-!

kullanımı: ./mw code.mwg -i 9999

Açıklama:

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 bayt

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

Çevrimiçi deneyin!


1
R'de kendi çözümümü yarattım ve bundan çok daha az seçiciydi.
Andrew Brēza

scanCevapların çoğunun sadece değişkenin önceden tanımlanmış olduğunu varsaydığından beri kesebilirsiniz .
Andrew Brēza

Kurallar bu konuda çok tutarsız. Diğer zorluklardan biri, değeri yakalamak için bir işleve veya taramaya sahip olmanız gerekir.
Mark


1

REXX, 25 bayt

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

(@Ovs'nin başka bir çevirisi)


0

05AB1E , 7 bayt

т‰ć60*+

Çevrimiçi deneyin!

açıklama

         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

Sembolik Python , 66 bayt

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

Çevrimiçi deneyin!


açıklama

Symbolic Python          values

___=-~-~_-_              ___=2
__=___*___               __=2*2=4
__=__*__*___+___*__      __=4*4*2+2*4=32+8=40
_=_-_/(__+__+__/___)*__  _=_-_/(40+40+40/2)*40=_-_/100*40
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.