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


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.