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


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
Цікаво, що код гольфу про гольф.
сергіол

Відповіді:


28

Скретч, 145 байт

-2 завдяки boboquack
- ??? тому що писати його на Oto коротше, ніж англійською

(Тому що Scratch - це стандартна подряпина.)

adi () - теми (a) kuati (thadi adi () - temi (b) kuati (thadi adi () - temi (c) kuati (thadi adi () - temi (d) kuati (thadi ma (((c) - ((a) + (d))) + ((4) * (((a) (b)) + (c переклад: ask () і зачекайте set (a) to (відповідь ask () і чекайте set ( б) до (відповідь запитувати () і чекати встановити (в) до (відповісти запитати () і встановити очікування (d) до (відповідь сказати (((c) - ((a) + (d))) + ((4 ) * (((a) + (b)) + (c

Ось приклад запуску:

a = 18, b = 13, c = 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

Хаскелл , 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 байт).
Грег Мартін

Ви маєте рацію ..
Keyu Gan




4

Це три байти, або я рахую рахунки? Було .*б поліпшення? редагувати: Неважливо - пропустив підсумовувальну частину.
Джуліан Вольф

Так, три байти. .*виконує лише елементарне множення; це не бере суму продуктів.
Денніс


3

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

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

Функція, що відповідає умові виклику System V 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 байти завдяки Erik The Outgolfer!

Як це працює!

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], = лівий аргумент, щоб відмежувати його від S, ×є комутативним).
Ерік Аутгольфер

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.ну, вам насправді цього не потрібно.
Erik the Outgolfer

@EriktheOutgolfer Звичайно, я цього не роблю. Але мені також не потрібно пояснень. Хочете, щоб я це зняв?
Okx

В основному вам не доведеться турбуватися про неконкурентні, оскільки змінився мета-консенсус.
Erik the 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, довести результат пар3 до початку додавання, виведення та зупинки

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.