Jaka jest standardowa podstawa?

12

W golfie standardowe zadrapanie pola jest obliczane przy użyciu następującego wzoru:

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

Twoim zadaniem jest obliczyć standardowe zarysowanie pola golfowego, biorąc pod uwagę te 4 dane wejściowe.

Powinieneś wziąć dane w dowolnej standardowej formie w formacie

[num_of_3_pars, num_of_4_pars, num_of_5_pars], difficulty rating

ale jeśli oszczędza bajty, wielu przyjmuje dane w inny sposób.

Powinieneś wypisać wynik końcowy dowolną zaakceptowaną metodą na meta, taką jak powrót z funkcji.

Najkrótszy kod wygrywa, ponieważ jest to !


źródło
Czy wszystkie dane wejściowe będą liczbami całkowitymi i co najmniej 1? (Ponadto, czy wynik zawsze będzie dodatni?)
Klamka
Czy możemy cofnąć dane wejściowe?
całkowicie ludzki,
13
Choć jest to banalne, kilka przypadków testowych byłoby fajnych.
Dennis
9
Ciekawe, golf golfowy o golfie.
sergiol

Odpowiedzi:

28

Scratch, 145 bajtów

-2 dzięki boboquack
- ??? ponieważ pisanie go w Oto jest krótsze niż angielski

(Ponieważ Scratch to podstawowa podstawa).

adi () - temi (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 translation: ask () and wait set (a) to (answer ask () i wait set ( b) do (odpowiedz pytaj () i poczekaj ustaw (c) na (odpowiedz pytaj () i poczekaj ustaw (d) do (odpowiedz powiedz (((c) - ((a) + (d))) + ((4 ) * (((a) + (b)) + (c

Oto przykładowy przebieg:

a = 18, b = 13, c = 41, d = 23; odpowiedź = 124.

Laur
źródło
18

Galaretka , 6 bajtów

JḊ~æ.N

Wypróbuj online!

Jak to działa

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.
Dennis
źródło
6

Haskell , 22 bajty

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

Wypróbuj online! Zastosowanie: (3#2)5 7plony35 .

Ten niezbyt przyjemny format wejściowy jest o jeden bajt krótszy niż proste rozwiązanie:

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

Bezładny i ładny format wejściowy: (23 bajty)

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

Wypróbuj online! Powiąż fi dzwoń f [3,2,5] 7.

Laikoni
źródło
5

Mathematica, 13 14 bajty

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

Dzięki @GregMartin. Weź dane jako listę długości 4.

Keyu Gan
źródło
Dzięki „ale jeśli oszczędza bajty, wielu przyjmuje dane w inny sposób”, myślę, że powinieneś wziąć dane jako listę długości 4 i skrócić drugie rozwiązanie do {3,4,5,-1}.#&(13 bajtów).
Greg Martin
Masz rację ..
Keyu Gan
4

JavaScript, 24 bajty

(a,b,c,d)=>3*a+4*b+5*c-d
SuperStormer
źródło
4

Perl6, 16 znaków

3* *+4* *+5* *-*

(Tak, to sub.)

Przykładowy przebieg:

> say 3* *+4* *+5* *-*
{ ... }

> say (3* *+4* *+5* *-*)(4, 3, 2, 1)
33

Wypróbuj online!

człowiek w pracy
źródło
4

Julia 0,5 , 15 bajtów

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

Wypróbuj online!

Dennis
źródło
Czy trzy bajty, czy też mylę się? Byłaby .*poprawa? edycja: Nieważne - przegapiłem część podsumowującą.
Julian Wolf
Tak, trzy bajty. .*wykonuje tylko zwielokrotnienie elementarne; nie bierze sumy produktów.
Dennis
3

C #, 24 bajty

(a,b,c,d)=>a*3+b*4+c*5-d
TheLethalCoder
źródło
3

Kod maszynowy x86-64, 14 bajtów

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

Funkcja zgodna z konwencją wywoływania AMD64 w Systemie V (wszechobecna w systemach Gnu / Linux), która przyjmuje cztery parametry całkowite:

  • EDI = num_of_3_par_holes
  • ESI = num_of_4_par_holes
  • EDX = num_of_5_par_holes
  • ECX = Trudność_cen

Zwraca w EAXrejestrze pojedynczą wartość, podstawową wartość podstawową .

Mnemoniki do montażu bez golfa:

; 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

Proste tłumaczenie formuły. Interesujące jest to, że jest to zasadniczo ten sam kod, który napisalibyśmy również podczas optymalizacji prędkości . To naprawdę pokazuje moc X86 jest LEAinstrukcja, która jest przeznaczona do l OAD e fektywny DRES, ale można zrobić dodawanie i skalowania (mnożenie przez niskie uprawnień 2) w jednej instrukcji, dzięki czemu jest arytmetyka workhorse potężne wielozadaniowy .

Cody Gray
źródło
3

Galaretka , 10 7 bajtów

3r5×⁸S_

Wypróbuj online!

-3 bajty dzięki Erikowi The Outgolfer!

Jak to działa!

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)
Cairney Coheringaahing
źródło
Standardowy sposób tworzenia list jest pomijany, []ale możesz użyć tego 3r5×⁸S_do gry w golfa ( 3r5-> [3, 4, 5], = left argument, aby odróżnić go od S, ×jest przemienny).
Erik the Outgolfer,
3

Oktawa , 14 bajtów

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

Wypróbuj online!

Około dwa razy dłużej niż odpowiedź MATL . Początkowo dosłownie przeniosłem to na MATL, ale okazało się, że iY*jest on dłuższy niż tylko *s. Zauważ, że wejście azawierające kolejność otworów, a następnie stopień trudności, powinno być wektorem kolumny.

Sanchises
źródło
Jak mówi pytanie można wziąć wejście w dowolnym formacie, jeśli zapisuje bajtów, to działa na 14: @(a)[3:5 -1]*a. Dane wejściowe to wektor kolumnowy[3 holes; 4 holes; 5holes; difficulty]
Tom Carpenter
@TomCarpenter Och, myślałem, że lista + część liczbowa jest obowiązkowa. Jest to nieco dziwnie sformułowane: „Powinieneś ... ale możesz”. Chyba zmienię wtedy moją odpowiedź.
Sanchises
2

Neim , 7 bajtów

'π𝐂𝕋𝐬S𝕊

Wyjaśnienie:

'π         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

Alternatywny program: 3𝐈ᛖ𝕋𝐬S𝕊

Zamiast wypychać, 345a następnie pobierać znaki, tworzy tablicę [1 2 3]za pomocą 3𝐈, a następnie dodaje 2 do każdego elementu za pomocą .

Wypróbuj online!

Okx
źródło
This commit was pushed 8 days before the answer was posted.cóż, tak naprawdę nie potrzebujesz tego.
Erik the Outgolfer,
@EriktheOutgolfer Pewnie, że nie. Ale nie potrzebuję też wyjaśnienia. Czy chcesz, żebym to usunął?
Okx,
Zasadniczo nie musisz się martwić o niekonkurencję, ponieważ zmienił się meta konsensus.
Erik the Outgolfer,
@EriktheOutgolfer Martwię się o niekonkurowanie, ponieważ meta konsensus jest subiektywny i niejasny. Ale w tym przypadku nie ma powodu narzekać na to, że tam jest. Zużywasz więcej czasu niż w przeciwnym razie nie opublikowałbyś tego komentarza.
Okx,
Z jakiegoś powodu większość znaków Neim w wbudowanych blokach kodu wygląda? pudła.
CalculatorFeline,
2

C (gcc) , 30 bajtów

e;f(a,b,c,d){e=3*a+4*b+5*c-d;}

Wypróbuj online!

Giacomo Garabello
źródło
2
Nie ma potrzeby stosowania dodatkowej zmiennej. Po prostu przypisz do a.
Dennis,
2

Swift 3 , 25 19 bajtów

Zdałem sobie sprawę, że nie potrzebujesz var f=, ponieważ możesz to nazwać jak lambda Python:

{$0*3+$1*4+$2*5-$3}

Przetestuj online!

Zastosowanie:, {$0*3+$1*4+$2*5-$3}(a,b,c,d) gdzie a,b,c,dsą parametry.

Pan Xcoder
źródło
2

pieprzenie mózgu , 39 bajtów

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

Wypróbuj online!

Pobiera dane wejściowe i drukuje dane wyjściowe jako znaki ASCII; na przykład wartość 99 byłaby reprezentowana jako c.

Wyjaśnienie:

,                                       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
musicman523
źródło
2

dc, 14 znaków

?3*?4*+?5*+?-p

Liczby należy podawać w osobnych wierszach.

Przykładowy przebieg:

bash-4.4$ dc -e '?3*?4*+?5*+?-p' <<< '4
> 3
> 2
> 1'
33

Wypróbuj online!

człowiek w pracy
źródło
2

Brachylog , 18 16 bajtów

∧5⟦₁↺b;?z×ᵐġ₃+ᵐ-

Wypróbuj online!

-2 dzięki Fatalize .

Erik the Outgolfer
źródło
∧5⟦₁↺b;?z×ᵐġ₃+ᵐ-jest 2 bajtów mniej
Fatalize
@Fatalize Byłoby 3 bajty mniej, gdyby nie było błędu z wiodącą liczbą całkowitą i danymi wejściowymi.
Erik the Outgolfer,
2

,,, 12 bajtów

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

Wyjaśnienie

Weźmy na przykład dane wejściowe 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
całkowicie ludzki
źródło
2

Cubix , 36 bajtów

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

Wypróbuj online!

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

Watch It Run

Dość liniowy program, który kilkakrotnie się nawraca. Podstawowe kroki:

  • I3*r;U; zdobądź pierwsze wejście, pomnóż przez 3 i oczyść stos
  • I4*/r\ uzyskaj następny wpis i pomnóż przez 4. Obróć wynik w dół.
  • Iw5*Ur;w<;r;;W zdobądź następny wkład, pomnóż przez 5 i oczyść stos
  • I-r;w; pobierz ostatnie wejście, odejmij od wyniku par 5 i oczyść stos
  • /+p+O\@ dodaj do wyniku par 4, przenieś wynik par3 na górę dodaj, wyjdź i zatrzymaj
MickyT
źródło
2

HP-15C (RPN), 14 bajtów

Kody szesnastkowe instrukcji:

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

Wersja do odczytu:

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 } −

Cztery liczby są ładowane do stosu w kolejności przed uruchomieniem programu.

Ryan
źródło
Dobra pierwsza odpowiedź. Witamy w PPCG!
musicman523
2

Excel VBA, 20 bajtów

Anonymous VBE funkcja natychmiastowego okno które ma wejście z zakresu [A3:A6]których [A3:A5]reprezentują liczbę 3, 4a 5par otworów, odpowiednio i [A6]przedstawia trudności. Dane wyjściowe do bezpośredniego okna VBE

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

Powyżej jest skróconą wersją połączenia

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

Gdzie "=3*A3+4*A4+5*A5-A6"podano, że jest to formuła anonimowej komórki, jak wskazano w [...]opakowaniu, i ?jest przestarzałą wersją Printwywołania z niejawnym Debug.kontekstem

Więcej zabawy Wersja, 34 bajtów

Anonimowa funkcja bezpośredniego okna VBE z tymi samymi warunkami wejścia / wyjścia jak powyżej.

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

Powyżej jest skróconą wersją połączenia

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

Gdzie "=SUMPRODUCT(A3:A5,ROW(A3:A5))"podano, że jest to formuła anonimowej komórki, jak wskazano w [...]otoku, i ?jest przestarzałą wersją Printwywołania z niejawnym Debug.kontekstem. W tej wersji zakres [A3:A5]i numery wierszy tego zakresu ( ROWS(A3:A5)) są przekazywane jako tablice

Wersja Excel, 18 bajtów

Oczywiście powyższe wersje nadają się w ten sposób do doskonalenia wersji

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

i

=SUMPRODUCT(A3:A5,ROW(A3:A5))-A6
Taylor Scott
źródło
2

R , 25 23 bajtów

cat(c(3:5,-1)%*%scan())

Wypróbuj online!

Giuseppe
źródło
1
sum(scan()*3:5)-scan() jest nieco mniejszy
MickyT,
Dziękuję Ci. Zwykle nie próbuję, scangdy istnieje wiele takich danych wejściowych, ale cóż, wiesz!
Giuseppe,
1

05AB1E , 7 bajtów

3LÌ*O²-

Wypróbuj online!

Erik the Outgolfer
źródło
Można wymienić 3Lze ājako pierwsze wejście będzie lista długości 3 i tak.
kalsowerus