Apa goresan standar?


12

Dalam golf, goresan standar kursus dihitung menggunakan rumus ini:

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

Tugas Anda adalah menghitung goresan standar lapangan golf, mengingat 4 input ini.

Anda harus mengambil input dalam bentuk standar apa pun dalam format

[num_of_3_pars, num_of_4_pars, num_of_5_pars], difficulty rating

tetapi jika menghemat byte, Anda banyak mengambil input dengan cara yang berbeda.

Anda harus menampilkan hasil akhir dengan metode apa pun yang diterima pada meta, seperti kembali dari suatu fungsi.

Kode terpendek menang karena ini adalah !


Apakah semua input akan menjadi bilangan bulat dan setidaknya 1? (Juga, apakah hasilnya akan selalu positif?)
Gagang pintu

Bisakah kita mengambil input terbalik?
manusia

13
Sepele seperti ini, beberapa uji kasus akan menyenangkan.
Dennis

9
Menarik, kode golf tentang golf.
sergiol

Jawaban:


28

Gores, 145 byte

-2 Terima kasih kepada boboquack
- ??? karena menulisnya di Oto lebih pendek dari bahasa Inggris

(Karena Scratch adalah awal standar.)

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 terjemahan: ask () dan menunggu set (a) ke (jawab ask () dan tunggu set ( b) ke (jawab tanyakan () dan tunggu set (c) ke (jawab tanya () dan tunggu set (d) ke (jawab katakan (((c) - ((a) + (d))) + + ((4 ) * (((a) + (b)) + (c

Inilah contoh menjalankan:

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


18

Jelly , 6 byte

JḊ~æ.N

Cobalah online!

Bagaimana itu bekerja

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 byte

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

Cobalah online! Penggunaan: (3#2)5 7hasil 35.

Format input yang tidak begitu bagus ini satu byte lebih pendek dari solusi straight forward:

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

Format input bebas titik dan bagus: (23 byte)

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

Cobalah online! Ikat fdan panggil dengan f [3,2,5] 7.


5

Mathematica, 13 14 byte

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

Terima kasih kepada @GregMartin. Ambil input sebagai daftar panjang-4.


Terima kasih untuk "tetapi jika menghemat byte, Anda banyak mengambil input dengan cara yang berbeda", saya pikir Anda harus mengambil input sebagai daftar panjang-4 dan mempersingkat solusi kedua menjadi {3,4,5,-1}.#&(13 byte).
Greg Martin

Anda benar ..
Keyu Gan



4

Perl6, 16 karakter

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

(Yepp, itu adalah sub.)

Contoh dijalankan:

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

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

Cobalah online!


4

Julia 0,5 , 15 byte

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

Cobalah online!


Apakah tiga byte, atau saya salah hitung? Apakah .*ada peningkatan? edit: Sudahlah — ketinggalan bagian penjumlahan.
Julian Wolf

Ya, tiga byte. .*hanya melakukan multiplikasi elemen-bijaksana; tidak mengambil jumlah produk.
Dennis


3

x86-64 Kode Mesin, 14 byte

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

Sebuah fungsi yang mengikuti konvensi pemanggilan System V AMD64 (di mana-mana pada sistem Gnu / Linux) yang mengambil empat parameter integer:

  • EDI = num_of_3_par_holes
  • ESI = num_of_4_par_holes
  • EDX = num_of_5_par_holes
  • ECX = tingkat kesulitan_rating

Ini mengembalikan nilai tunggal, goresan standar, dalam EAXregister.

Mnemonik perakitan tidak dikumpulkan:

; 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

Hanya terjemahan sederhana dari rumus. Yang menarik adalah bahwa ini pada dasarnya adalah kode yang sama yang akan Anda tulis ketika mengoptimalkan kecepatan juga. Ini benar-benar menunjukkan kekuatan x86 ini LEAinstruksi, yang dirancang untuk l OAD sebuah e ffective sebuah ddress, tetapi dapat melakukan penambahan dan scaling (perkalian dengan kekuatan rendah 2) di dalam sebuah instruksi, membuatnya menjadi multi-tujuan kuat aritmatika pekerja keras .


3

Jelly , 10 7 byte

3r5×⁸S_

Cobalah online!

-3 byte terima kasih kepada Erik The Outgolfer!

Bagaimana itu bekerja!

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)

Cara standar untuk membuat daftar dihilangkan []tetapi Anda dapat menggunakan 3r5×⁸S_ini lebih banyak ( 3r5-> [3, 4, 5], = argumen kiri untuk membedakannya dari S, ×adalah komutatif).
Erik the Outgolfer

3

Oktaf , 14 byte

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

Cobalah online!

Sekitar dua kali panjang jawaban MATL . Saya awalnya benar-benar porting ini ke MATL, tetapi ternyata iY*lebih lama dari sekadar *s. Perhatikan bahwa input a, yang berisi lubang-lubang secara berurutan dan kemudian kesulitannya, harus berupa vektor kolom.


Seperti pertanyaan mengatakan Anda dapat mengambil input dalam format apapun jika menghemat byte, ini bekerja untuk 14: @(a)[3:5 -1]*a. Input adalah vektor kolom dari[3 holes; 4 holes; 5holes; difficulty]
Tom Carpenter

@ TomCarpenter Oh, saya pikir daftar + nomor bagian adalah wajib. Ini agak aneh diutarakan: "Anda harus ... tetapi Anda mungkin". Saya kira saya akan mengubah jawaban saya.
Sanchises


2

Neim , 7 byte

'π𝐂𝕋𝐬S𝕊

Penjelasan:

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

Program alternatif: 3𝐈ᛖ𝕋𝐬S𝕊

Alih-alih mendorong 345dan mendapatkan karakter, buat array [1 2 3]menggunakan 3𝐈, lalu tambahkan 2 ke setiap elemen .

Cobalah online!


This commit was pushed 8 days before the answer was posted.yah, Anda sebenarnya tidak membutuhkan ini.
Erik the Outgolfer

@EriktheOutgolfer Tentu saya tidak. Tapi saya juga tidak butuh penjelasan. Apakah Anda ingin saya menghapusnya?
Okx

Pada dasarnya Anda tidak perlu khawatir tentang tidak bersaing karena konsensus meta berubah.
Erik the Outgolfer

@EriktheOutgolfer Saya khawatir tentang non-bersaing karena konsensus meta bersifat subyektif dan tidak jelas. Tetapi dalam kasus ini, tidak ada alasan untuk mengeluh karena itu ada di sana. Anda menggunakan lebih banyak waktu daripada yang seharusnya Anda tidak memposting komentar itu.
Okx

Untuk beberapa alasan, sebagian besar karakter Neim di blok kode inline terlihat seperti? kotak.
CalculatorFeline


2

Swift 3 , 25 19 byte

Saya menyadari Anda tidak perlu var f=, karena Anda dapat menyebutnya seperti lambda Python:

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

Uji secara online!

Penggunaan:, di {$0*3+$1*4+$2*5-$3}(a,b,c,d) mana a,b,c,dparameternya.


2

brainfuck , 39 byte

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

Cobalah online!

Mengambil input dan mencetak output sebagai karakter ASCII; misalnya, nilai 99 akan direpresentasikan sebagai c.

Penjelasan:

,                                       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

dc, 14 karakter

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

Angka-angka perlu dilewatkan pada garis yang terpisah.

Contoh dijalankan:

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

Cobalah online!



2

,,,, 12 byte

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

Penjelasan

Ambil input 4, 3, 2, 1 misalnya.

↻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 byte

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

Cobalah online!

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

Tonton Jalankan

Program yang cukup linier yang berputar kembali ke dirinya sendiri beberapa kali. Langkah dasar:

  • I3*r;U; dapatkan input pertama, kalikan dengan 3 dan bersihkan tumpukan
  • I4*/r\ dapatkan input berikutnya dan kalikan dengan 4. Putar hasilnya ke bawah.
  • Iw5*Ur;w<;r;;W dapatkan input selanjutnya, gandakan dengan 5 dan bersihkan tumpukan
  • I-r;w; dapatkan input terakhir, kurangi dari hasil par 5 dan bersihkan tumpukan
  • /+p+O\@ tambahkan ke hasil par 4, bawa hasil par3 ke atas add, output dan berhenti

2

HP-15C (RPN), 14 byte

Kode hex instruksi:

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

Versi yang dapat dibaca:

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

Keempat angka dimuat ke dalam tumpukan sebelum menjalankan program.


Jawaban pertama yang bagus. Selamat datang di PPCG!
musicman523

2

Excel VBA, 20 Bytes

Fungsi jendela langsung VBE anonim yang mengambil input dari kisaran [A3:A6]yang [A3:A5]mewakili jumlah 3, 4dan 5lubang par, masing-masing dan [A6]mewakili kesulitan. Output ke jendela langsung VBE

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

Di atas adalah versi panggilan yang kental

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

Di mana "=3*A3+4*A4+5*A5-A6"diberikan untuk menjadi formula sel anonim, seperti yang ditunjukkan oleh [...]pembungkus, dan ?merupakan versi Printpanggilan yang sudah usang Debug.dengan konteks yang tersirat

Versi yang lebih menyenangkan, 34 Bytes

Fungsi jendela langsung VBE anonim dengan kondisi I / O yang sama seperti di atas.

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

Di atas adalah versi panggilan yang kental

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

Di mana "=SUMPRODUCT(A3:A5,ROW(A3:A5))"diberikan untuk menjadi formula sel anonim, seperti yang ditunjukkan oleh [...]pembungkus, dan ?merupakan versi Printpanggilan yang sudah usang Debug.dengan konteks yang tersirat . Dalam versi ini, kisaran [A3:A5]dan nomor baris dari rentang itu ( ROWS(A3:A5)) dilewatkan sebagai array

Versi Excel, 18 byte

Tentu saja, versi di atas memungkinkan mereka untuk mengungguli versi

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

dan

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

2

R , 25 23 byte

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

Cobalah online!


1
sum(scan()*3:5)-scan()sedikit lebih kecil
MickyT

Terima kasih. Saya biasanya tidak mencoba scanketika ada beberapa input seperti ini, tetapi whaddya tahu!
Giuseppe




Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.