Что такое стандартная царапина?


12

В гольфе стандартная царапина курса рассчитывается по следующей формуле:

(3*num_of_3_par_holes + 4*num_of_4_par_holes + 5*num_of_5_par_holes) - difficulty_rating

Ваша задача - рассчитать стандартную царапину на поле для гольфа, учитывая эти 4 входа.

Вы должны принять ввод в любой стандартной форме в формате

[num_of_3_pars, num_of_4_pars, num_of_5_pars], difficulty rating

но если это экономит байты, вы много принимаете ввод по-другому.

Вы должны вывести окончательный результат любым принятым методом на мета, таким как возврат из функции.

Самый короткий код выигрывает, потому что это !


Будут ли все входные данные целыми числами и хотя бы 1? (Кроме того, всегда ли результат будет положительным?)
— Ручка двери

Можем ли мы принять обратные данные?
— полностью человек

13
Как бы ни было тривиально, было бы неплохо несколько тестовых случаев.
— Деннис

9
Интересно, код гольф про гольф.
— sergiol

Ответы:


28

Царапина, 145 байт

-2 благодаря бобакуке
- ??? потому что написание на ото короче английского

(Потому что Царапина является стандартной царапиной.)

ади () - теми (а) куати (тади ади () - теми (б) куати (тади ади () - теми (с) куати (тади ади () - теми (д) куати (тади ма (((с) - ((a) + (d))) + ((4) * (((a) (b)) + (c перевод: ask () и ждать set (a) to (answer ask () и wait set ( б) ответить (ответить на вопрос () и подождать, когда задано (в) (ответить на вопрос (), и подождать в (d) (ответить (((с) - ((a) + (d))) + ((4 ) * (((а) + (б)) + (с

Вот пример прогона:

а = 18, B = 13, с = 41, D = 23; ответ = 124,


18

Желе , 6 байт

JḊ~æ.N

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

Как это устроено

JḊ~æ.N  Main link. Argument: [a, b, c, d]

J       Indices; yield [1, 2, 3, 4].
 Ḋ      Dequeue; yield [2, 3, 4].
  ~     Bitwise NOT; yield [-3, -4, -5].
     N  Negate; yield [-a, -b, -c, -d].
   æ.   Dot product; yield
        (-3)(-a) + (-4)(-b) + (-5)(-c) + (-d) = 3a + 4b + 5c - d.


6

Haskell , 22 байта

(a#b)c d=3*a+4*b+5*c-d

Попробуйте онлайн! Использование: (3#2)5 7урожайность 35.

Этот не очень приятный формат ввода на один байт короче прямого решения:

f a b c d=3*a+4*b+5*c-d

Бессмысленный и приятный формат ввода: (23 байта)

(-).sum.zipWith(*)[3..]

Попробуйте онлайн! Привязать fи позвонить с f [3,2,5] 7.


5

Математика, 13 14 байтов

{3,4,5,-1}.#&

Спасибо @GregMartin. Возьмите ввод как список длины 4.


Благодаря «но если это экономит байты, вы многие принимаете ввод по-другому», я думаю, что вы должны взять ввод как список длины 4 и сократить второе решение до {3,4,5,-1}.#&(13 байтов).
— Грег Мартин

Вы правы ..
— Кейу Ган




4

Юлия 0,5 , 15 байт

!v=v⋅[3:5;-1]

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


Есть ⋅три байта, или я неправильный подсчет? Будет .*ли улучшение? редактировать: неважно - пропустил суммирование.
— Джулиан Вольф

Да, три байта. .*выполняет только поэлементное умножение; это не берет сумму продуктов.
— Деннис


3

Машинный код x86-64, 14 байтов

8D 3C 7F 8D 14 92 8D 04 B7 01 D0 29 C8 C3

Функция, соответствующая соглашению о вызовах System64 AMD64 (вездесуще в системах Gnu / Linux), которая принимает четыре целочисленных параметра:

  • EDI = num_of_3_par_holes
  • ESI = num_of_4_par_holes
  • EDX = num_of_5_par_holes
  • ECX = сложность_рейтинг

Он возвращает единственное значение, стандартное нуля, в EAXрегистре.

Неуправляемая сборка мнемоники:

; int ComputeStandardScratch(int num_of_3_par_holes,
;                            int num_of_4_par_holes,
;                            int num_of_5_par_holes,
;                            int difficulty_rating);
lea   edi, [rdi+rdi*2]    ; EDI = num_of_3_par_holes * 3
lea   edx, [rdx+rdx*4]    ; EDX = num_of_5_par_holes * 5
lea   eax, [rdi+rsi*4]    ; EAX = EDI + (num_of_4_par_holes * 4)
add   eax, edx            ; EAX += EDX
sub   eax, ecx            ; EAX -= difficulty_rating
ret                       ; return, leaving result in EAX

Просто простой перевод формулы. Интересно то, что это по сути тот же код, который вы написали бы при оптимизации скорости . Это действительно показывает мощь архитектуры x86 в LEAинструкции, которая предназначена для л Oad е ffective ddress, но может сделать сложение и масштабирование (умножение на малых мощностях 2) в одной инструкции, что делает его мощным многоцелевым арифметика лошадка ,


3

Желе , 10 7 байт

3r5×⁸S_

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

-3 байта благодаря Эрику Аутгольферу!

Как это устроено!

3r5×⁸S_  Main link: a, the pars as a list and b, the difficulty rating

     S   The sum of
3r5        [3, 4, 5]
   ×       each element times
    ⁸      the left argument (a)
      _  Subtract the right argument (b)

Стандартный способ составления списков опущен, []но вы можете использовать 3r5×⁸S_это больше ( аргумент 3r5-> [3, 4, 5], ⁸= left, чтобы отличить его от S, ×является коммутативным).
— Эрик Outgolfer

3

Октава , 14 байт

@(a)[3:5 -1]*a

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

Примерно вдвое дольше, чем ответ MATL . Я изначально буквально портировал это на MATL, но оказалось, что iY*это дольше, чем просто *s. Обратите внимание, что вход a, содержащий отверстия по порядку, а затем сложность, должен быть вектором столбца.


Как вопрос говорит , что вы можете взять на вход в любом формате , если он сохраняет байты, это работает 14: @(a)[3:5 -1]*a. Входной вектор-столбец[3 holes; 4 holes; 5holes; difficulty]
— Том Карпентер

@ TomCarpenter О, я думал, что часть списка + номер была обязательной. Это немного странно выражено: «Вы должны ... но вы можете». Я думаю, я исправлю свой ответ тогда.
— Санчиз


2

Нейм , 7 байт

'π𝐂𝕋𝐬S𝕊

Объяснение:

'π         Push 345
           The character ' pushes the next character's index in the codepage plus 100.
           The characters ", + and * do that same thing except add a different number.
           This means that in Neim, all 3 digit numbers can be expressed with 2 characters.
           This commit was pushed 8 days before the answer was posted.
  𝐂        Get the characters
   𝕋       Vectorised multiply with the input
    𝐬       Sum the resulting list
     S𝕊    Subtract the input

Альтернативная программа: 3𝐈ᛖ𝕋𝐬S𝕊

Вместо того, чтобы нажимать 345и затем получать символы, создает массив [1 2 3]с помощью 3𝐈, а затем добавляет 2 к каждому элементу с помощью ᛖ.

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


This commit was pushed 8 days before the answer was posted.ну, тебе на самом деле это не нужно.
— Эрик Outgolfer

@EriktheOutgolfer Конечно, нет. Но мне также не нужно объяснение. Вы хотите, чтобы я убрал это?
— Okx

По сути, вам не нужно беспокоиться о неконкурентоспособности, поскольку мета-консенсус изменился.
— Эрик Outgolfer

@EriktheOutgolfer Я беспокоюсь о том, чтобы не конкурировать, потому что мета-консенсус субъективен и неясен. Но в этом случае нет причин жаловаться на то, что он там. Вы тратите больше времени, чем в противном случае, если бы вы не оставили этот комментарий.
— Okx

По какой причине большинство символов Neim во встроенных блоках кода выглядят? коробки.
— CalculatorFeline



2

брейкфук , 39 байт

,[->+++<],[->++++<],[->+++++<],[->-<]>.

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

Принимает ввод и печатает вывод в виде символов ASCII; например, значение 99 будет представлено как c.

Объяснение:

,                                       Take the first input in Cell 0
 [      ]                               While the data being pointed to (Cell 0) is nonzero
  ->+++<                                Decrement Cell 0 and add 3 to Cell 1
                                        Now 4 times the first input is in Cell 1
         ,                              Take the second input in Cell 0
          [->++++<]                     Add 4 times the second input to Cell 1
                   ,[->+++++<]          Take the third input in Cell 0 and add five times its value to Cell 1
                              ,         Take the fourth input in Cell 0
                               [    ]   While the data being pointed to (Cell 0) is nonzero
                                ->-<    Decrement Cells 0 and 1
                                     >. Print the value in Cell 1




2

,,, 12 байт

↻5×↻4×↻3×↻-#

объяснение

Возьмите вход 4, 3, 2, 1, например.

↻5×↻4×↻3×↻-#

              implicit input                  [4, 3, 2, 1]
↻             rotate the stack clockwise      [1, 4, 3, 2]
 5            push 5                          [1, 4, 3, 2, 5]
  ×           pop 2 and 5 and push 2 * 5      [1, 4, 3, 10]
   ↻          rotate the stack clockwise      [10, 1, 4, 3]
    4         push 4                          [10, 1, 4, 3, 4]
     ×        pop 3 and 4 and push 3 * 4      [10, 1, 4, 12]
      ↻       rotate the stack clockwise      [12, 10, 1, 4]
       3      push 3                          [12, 10, 1, 4, 3]
        ×     pop 4 and 3 and push 4 * 3      [12, 10, 1, 12]
         ↻    rotate the stack clockwise      [12, 12, 10, 1]
          -   pop 10 and 1 and push 10 - 1    [12, 12, 9]
           #  pop 12, 12, 9 and push the sum  [33]
              implicit output

2

Cubix , 36 байт

w;r5*U4I;I3*r;UW;;r;<\r/;r-I/+p+O@;w

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

      w ; r
      5 * U
      4 I ;
I 3 * r ; U W ; ; r ; <
\ r / ; r - I / + p + O
@ ; w . . . . . . . . .
      . . .
      . . .
      . . .

Смотреть это работает

Довольно линейная программа, которая несколько раз оборачивается вокруг себя. Основные шаги:

  • I3*r;U; получить первый вход, умножить на 3 и очистить стек
  • I4*/r\ получить следующий вход и умножить на 4. Повернуть результат вниз.
  • Iw5*Ur;w<;r;;W получить следующий ввод, умножить на 5 и очистить стек
  • I-r;w; получить последний ввод, вычесть из результата 5 пар и очистить стек
  • /+p+O\@ добавление к результату 4, приведение результата par3 к началу добавления, вывода и остановки

2

HP-15C (RPN), 14 байтов

Инструкция шестнадцатеричные коды:

41 C4 F5 FC C5 F4 FC FA C5 F3 FC FA 31 FB

Читаемая версия:

001 {       44  1 } STO 1
002 {          33 } R⬇
003 {           5 } 5
004 {          20 } ×
005 {          34 } x↔y
006 {           4 } 4
007 {          20 } ×
008 {          40 } +
009 {          34 } x↔y
010 {           3 } 3
011 {          20 } ×
012 {          40 } +
013 {       45  1 } RCL 1
014 {          30 } −

Четыре числа загружаются в стек по порядку перед запуском программы.


Хороший первый ответ. Добро пожаловать в PPCG!
— musicman523

2

Excel VBA, 20 байт

Anonymous VBE функция немедленного окна , которое принимает входные данные из диапазона [A3:A6]которых [A3:A5]представляют числа 3, 4и 5номинальных отверстий, соответственно , и [A6]представляет трудность. Выходы в непосредственное окно VBE

?[3*A3+4*A4+5*A5-A6]

Выше приведен сокращенный вариант звонка

Debug.Print Application.Evaluate("=3*A3+4*A4+5*A5-A6")

Где "=3*A3+4*A4+5*A5-A6"задана формула анонимной ячейки, как указано в [...]оболочке, и ?является устаревшей версией Printвызова с неявным Debug.контекстом

Более веселая версия, 34 байта

Функция анонимного непосредственного окна VBE с теми же условиями ввода-вывода, что и выше.

?[SUMPRODUCT(A3:A5,ROW(A3:A5))-A6]

Выше приведен сокращенный вариант звонка

Debug.Print Application.Evaluate("=SUMPRODUCT(A3:A5,ROW(A3:A5))")

Где "=SUMPRODUCT(A3:A5,ROW(A3:A5))"указано, что это формула анонимной ячейки, как указано в [...]оболочке, и ?является устаревшей версией Printвызова с неявным Debug.контекстом. В этой версии диапазон [A3:A5]и номера строк этого диапазона ( ROWS(A3:A5)) передаются как массивы

Версия Excel, 18 байт

Конечно, вышеприведенные версии поддаются таким образом, чтобы превосходить версии

=3*A3+4*A4+5*A5-A6

и

=SUMPRODUCT(A3:A5,ROW(A3:A5))-A6





Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.