Скільки часу повинна працювати моя мікрохвильова піч?


33

Я голодний. Давайте щось мікрохвильовку. Враховуючи числовий вхід від 1 до 4 цифр, виведіть кількість секунд, які повинна запустити мікрохвильова піч.

Деталі

Хитрість полягає у з'ясуванні, якщо користувач вводить секунди або комбінацію секунд і хвилин. Одиниці і десятки місць слід інтерпретувати як секунди, а сотні і тисячі місць - хвилини. Наприклад, значення 1234слід інтерпретувати як 12 хвилин, 34 секунди і 9876має бути 98 хвилин, 76 секунд. Набравши 130і 90обидва повинні результат в час варіння 90 секунд.

Ось кілька інших входів і виходів:

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

Правила

Це , тому виграє найкоротша програма в байтах. Стандартні лазівки заборонені. Переможний запис повинен повернути правильну відповідь, коли дається будь-який цілий вхід від 1 до 9999.


@WheatWizard, я радий редагувати питання. Чи є у вас пропозиція щодо того, що я повинен сказати в розділі "Деталі"? Можливо, я міг би зробити це речення більш зрозумілим: "Те і десятки місць слід інтерпретувати як секунди, а сотні і тисячі місць - хвилини".
Андрій Бреза

@WheatWizard Я просто додав більше деталей, повідомте мені, якщо ви думаєте, що я повинен додати більше.
Андрій Бреза

Це працює з входом 9876?
Андрій Бреза

1
Як не дивно, я збирався пісочницю на цю точну проблему ха-ха
FlipTack

Для чого був би результат 190?
OldBunny2800

Відповіді:



9

Japt , 6 байт

ìL ì60

Перевірте його онлайн! ìLперетворює на базу-100 і ì60перетворює назад на базу 60, в результаті чого floor(n/100)*60 + n%100. Також працює з годинами ( 10000 -> 3600, кількість секунд за годину).


1
Саме те, що у мене було :)
Shaggy

7

C, C ++, Java, C #, D: 36 байт

D: 35 байт

C: 28 байт

Перший раз у мене така відповідь коротка!

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

D може мати спеціальну оптимізацію через систему шаблонів golfy:

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/… , і я бачу, що ви навчилися шаблонній системі :). (Є foreachв D, я просто забув, як це сумно використовувати)
Zacharý

C можна пограти в гольф до 28 байтів, використовуючи C89 implicit-int.
pizzapants184

Ви повинні розмістити все це як окремі відповіді.
MD XF



6

DC , 10 байт

?9A~r60*+p

Спробуйте в Інтернеті!

Пояснення: в дк при натисканні на що-небудь. на стеку він іде зверху

?         # 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 байт

-2 байти завдяки @seshoumara .

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

Спробуйте в Інтернеті!

Бере вхід з stdin. Пішов на більш креативний підхід: вставляє *60+перед останніми 1 або 2 цифрами, і створює попередження 0від початку для обліку входів лише з 1 або 2 цифрами. Потім результат передається до bc.


1
Якщо ви виймете -rта використаєте \?, ви можете втратити 2 байти.
seshoumara

3



2

JavaScript, 21 байт

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

Спробуйте в Інтернеті!


Збережіть 4 байти, використовуючи трюк ovs - a- (a / 100 ^ 0) * 40
IanF1

1
@ IanF1. Дякую, але я думаю, це було б буквально вкрасти їхню ідею.

так, ти маєш рацію. Занадто захоплений, вибачте.
IanF1

3
@ThePirateBay Ви насправді не доживаєте свого імені;)
kamoroso94

2

J , 12 байт

-40*&<.%&100

Це ovs 'Python 2, виражений у J. Він складається з гачка та вилки:

┌─┬───────────────────────┐
│-│┌──┬────────┬─────────┐│
│ ││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 на ціле число. Отже, він еквівалентний вводу% 100 + 60 * ⌊вхід / 100⌋



@cairdcoinheringaahing Я думаю, ви це мали на увазі , але все-таки дякую за голову в голові
містер Xcoder

2

Excel VBA, 29 байт

Анонімна функція негайного вікна VBE, яка приймає вхід із діапазону [A1]та виводить у безпосереднє вікно 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

Пушистий , 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 байт

На ще один байт ми можемо використовувати Input % 100 + 60 * ⌊Input / 100⌋підхід:

H2d%}/60*+#

Спробуйте в Інтернеті!


1
9 байт шляхом створення порту Python 2 відповіді @ovs ' : 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$*

Спробуйте в Інтернеті!

Вхід і вихід уніар . Тестовий набір для зручності перетворюється з та в десятковий.

Зробити таке базове перетворення лише до двох цифр напрочуд просто. Ми просто співпадаємо з пробіжками 100 1с і замінюємо їх на 60 1с. Все, що залишилося, відповідатиме останнім двом цифрам у десятковому поданні та залишається незмінним.


1

Аліса , 19 байт

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

Спробуйте в Інтернеті!

Пояснення

Шкода, що я видалив divmod з мови, я думаю ...

/o
\i@/...

Це просто звичайна рамка для лінійних програм з десятковим введенням-виведенням, що працюють виключно в кардинальному (арифметичному) режимі.

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

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

Try it online!


1
I created my own solution in R and it was far less elegant than this.
Andrew Brēza

You can cut the scan since most of the answers just assume the variable is already defined.
Andrew Brēza

The rules are so inconsistent with regards to that. One most other challenges you have to have a function or scan to capture the value.
Mark



0

05AB1E, 7 bytes

т‰ć60*+

Try it online!

Explanation

         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

Symbolic Python, 66 bytes

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

Try it online!


Explanation

Symbolic Python          values

___=-~-~_-_              ___=2
__=___*___               __=2*2=4
__=__*__*___+___*__      __=4*4*2+2*4=32+8=40
_=_-_/(__+__+__/___)*__  _=_-_/(40+40+40/2)*40=_-_/100*40
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.