Как долго должна работать моя микроволновая печь?

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преобразует в base-100 и ì60преобразует обратно в base 60, в результате чего floor(n/100)*60 + n%100. Также работает с часами ( 10000 -> 3600количество секунд в часе).

ETHproductions
источник
1
Именно то, что у меня было :)
Лохматый
7

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

D: 35 байт

C: 28 байт

Впервые у меня есть такой короткий ответ!

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

У D может быть специальная оптимизация из-за системы шаблонов игры в гольф:

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 Link

В 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 Link

HatsuPointerKun
источник
Тестовый код D будет нижним колонтитулом этого TIO : tio.run/… , и я вижу, что вы изучили систему шаблонов :). (Есть foreachв D, я просто забыл, как его использовать, к сожалению)
Zacharý
C может быть заполнен до 28 байт с использованием C89 implicit-int.
pizzapants184
Вы должны опубликовать все это как отдельные ответы.
MD XF
6

Pyth - 9 8 байт

Преобразует ввод в основание 100, затем интерпретирует его как число 60 основ.

ijQ*TT60

Тестовый пакет .

Maltysen
источник
6

TI-Basic (серия 83), 8 байт

Ans-40int(sub(Ans

Требуется версия ОС 1.15 или выше.

Миша лавров
источник
6

постоянный ток , 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
seshoumara
источник
5

Bash bc + sed, 30 28 байт

-2 байта благодаря @seshoumara .

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

Попробуйте онлайн!

Принимает ввод от стандартного ввода. Пошел к более творческому подходу: вставляет *60+перед последними 1 или 2 цифрами и добавляет 0к началу, чтобы учесть вводы только с 1 или 2 цифрами. Результат затем передается bc.

Джастин Маринер
источник
1
Если вы удалите -rи используете \?, вы можете потерять 2 байта.
Сешумара
3

C (gcc) , 50 байтов

t;f(){scanf("%d",&t);printf("%d",t%100+t/100*60);}

Попробуйте онлайн!

gastropner
источник
3

Perl 5, 15 + 1 (-p) байт

/..$/;$_-=40*$`
  • -l переключатель не учитывается, потому что для проверки читаемости

Попробуйте онлайн

Науэль Фуйе
источник
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

Это решение Python 2 от ovs, выраженное в 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

Пакетный, 23 байта

@cmd/cset/a%1-%1/100*40
Нил
источник
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 в целое число. Следовательно, это эквивалентно Input% 100 + 60 * putInput / 100⌋

Мистер Xcoder
источник
Как функция, 5 байт
caird coinheringaahing
@cairdcoinheringaahing Я думаю , что вы имели в виду это , но спасибо за головы-вверх так или иначе
г -
2

Excel VBA, 29 байт

Функция анонимного непосредственного окна VBE, которая берет входные данные из диапазона [A1]и выводит в непосредственное окно VBE.

?[A1]Mod 1E2+60*[Int(A1/100)]
Тейлор Скотт
источник
2

APL (Dyalog) , 11 10 байтов

600 100⊤⊢

Попробуйте онлайн!

Как?

0 100⊤- кодировать в базе 100, останавливаясь на втором LSB, эффективно создавая n ÷ 100, n % 100.

60⊥ - декодировать в базе 60

Уриэль
источник
2

PARI / GP , 16 байт

Непосредственная:

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

К сожалению, этот хороший метод просто слишком длинный для использования:

n->[60,1]*divrem(n,100)
Чарльз
источник
2

Напористый , 10 9 байт

Кевин переиграл меня на моем родном языке ... (используя подход из ответа Овса )

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*+#

Попробуйте онлайн!

FlipTack
источник
1
9 байт путем создания порта Python 2 ответа @ovs' : 2dH/40*-#. Никогда не программировал в Pushy раньше, но это похоже на довольно крутой язык. :)
Кевин Круйссен
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 байт

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

Попробуйте онлайн!

отметка
источник
1
Я создал свое собственное решение в R, и оно было гораздо менее элегантным, чем это.
Андрей Бреза
Вы можете сократить, scanтак как большинство ответов просто предполагают, что переменная уже определена.
Андрей Бреза
Правила настолько противоречивы в отношении этого. Одной из наиболее сложных проблем является наличие функции или сканирования для получения значения.
Марк
1

REXX, 25 байт

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

(Просто еще один перевод @ovs)

idrougge
источник
0

05AB1E , 7 байтов

т‰ć60*+

Попробуйте онлайн!

объяснение

         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
источник