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


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.