Standart çizik nedir?


12

Golfte, bir parkurun standart çizik bu formül kullanılarak hesaplanır:

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

Senin görevin bu 4 giriş verilen bir golf sahasının standart çizik hesaplamaktır.

Girdiyi formatta herhangi bir standart biçimde almalısınız

[num_of_3_pars, num_of_4_pars, num_of_5_pars], difficulty rating

ancak bayt tasarruf ederse, birçoğunuz girişi farklı bir şekilde alırsınız.

Nihai sonucu, metada bir işlevden döndürme gibi kabul edilen herhangi bir yöntemle çıkarmalısınız.

En kısa kod kazanır, çünkü bu !


Tüm girdiler tam sayı ve en az 1 olacak mı? (Ayrıca, çıktı her zaman olumlu olacak mı?)
Kapı tokmağı

Ters çevrilmiş girdileri alabilir miyiz?
totallyhuman

13
Bu kadar önemsiz, birkaç test vakası iyi olurdu.
Dennis

9
İlginç, golf hakkında bir kod golf.
sergiol

Yanıtlar:


28

Çizik, 145 bayt

-2 boboquack sayesinde
- ??? çünkü Oto'ya yazmak İngilizce'den daha kısa

(Çünkü Scratch standart çiziktir.)

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 () ve bekleme ayarını (a) (cevap isteme () ve bekleme ayarına ( b) 'ye (cevap sor () ve (c)' yi (cevap sor () 'a bekle ve (d)' yi (cevap diyelim (((c) - ((a) + (d)) için bekleyin) + ((4 ) * (((a) + (b)) + (c

İşte örnek bir çalışma:

a = 18, b = 13 olduğunda, c = 41, d = 23; cevap = 124.


18

Jöle , 6 bayt

JḊ~æ.N

Çevrimiçi deneyin!

Nasıl çalışır

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 bayt

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

Çevrimiçi deneyin!Kullanımı: (3#2)5 7verim 35.

Bu çok hoş olmayan giriş biçimi, düz çözümden bir bayt daha kısa:

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

Noktasız ve hoş giriş formatı: (23 bayt)

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

Çevrimiçi deneyin! Bağlanın fve çağırın f [3,2,5] 7.


5

Mathematica, 13 14 bayt

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

@GregMartin'e teşekkürler. Girişi uzunluk-4 listesi olarak alın.


"Eğer bayt kaydederse, birçok kişi girişi farklı bir şekilde alır" sayesinde, girdiyi uzunluk-4 listesi olarak almalı ve ikinci çözümü {3,4,5,-1}.#&(13 bayt) kısaltmalısınız .
Greg Martin

Haklısın ..
Keyu Gan



4

Perl6, 16 karakter

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

(Yepp, bu bir alt.)

Örnek çalışma:

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

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

Çevrimiçi deneyin!


4

Julia 0.5 , 15 bayt

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

Çevrimiçi deneyin!


Üç bayt mı yoksa yanlış mı sayıyorum? Misiniz .*iyileşme olacak? edit: Never mind - özledim kısmı kaçırdı.
Julian Wolf

Evet, üç bayt. .*sadece eleman-bazlı çarpma gerçekleştirir; ürünlerin toplamını almaz.
Dennis


3

x86-64 Makine Kodu, 14 bayt

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

Dört tamsayı parametresi alan System V AMD64 çağrı kuralını (Gnu / Linux sistemlerinde her yerde bulunur) izleyen bir işlev:

  • EDI = num_of_3_par_holes
  • ESI = num_of_4_par_holes
  • EDX = num_of_5_par_holes
  • ECX = zorluk derecesi

Kayıtta tek bir değer, standart çizik döndürür EAX.

Ungolfed montaj anımsatıcıları:

; 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

Formülün basit bir çevirisi. İlginç olan, bunun hız için optimize ederken yazdığınız kod ile aynı olmasıdır . Bu gerçekten x86 en güç gösterir LEAşekilde tasarlanmıştır talimat, l bir OAD e yayılımından, bir DRES ama güçlü çok amaçlı aritmetik beygir yapım tek talimatında (2 düşük güçler tarafından çarpma) eklenmesi ve ölçekleme yapabilir .


3

Jöle , 10 7 bayt

3r5×⁸S_

Çevrimiçi deneyin!

Erik The Outgolfer sayesinde -3 bayt!

Nasıl çalışır!

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)

Liste yapmanın standart yolu yok sayılır, []ancak bunu 3r5×⁸S_daha fazla golf için kullanabilirsiniz ( 3r5-> [3, 4, 5], = sol argümandan ayırmak için S, ×değişmeli).
Outgolfer Erik

3

Oktav , 14 bayt

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

Çevrimiçi deneyin!

MATL cevabının yaklaşık iki katı . Başlangıçta bunu MATL'ye taşıdım, ancak ortaya çıktı iY*sadece daha uzun *s. aDelikleri sırayla ve ardından zorluğu içeren girdinin bir sütun vektörü olması gerektiğini unutmayın.


Sorunun söylediği gibi, bayt kaydederse girdiyi herhangi bir formatta alabilirsiniz, bu 14: için çalışır @(a)[3:5 -1]*a. Girdi bir sütun vektörü[3 holes; 4 holes; 5holes; difficulty]
Tom Carpenter

@TomCarpenter Oh, liste + numara kısmının zorunlu olduğunu düşündüm. Biraz tuhaf bir şekilde ifade edildi: "Yapmalısın ... ama yapabilirsin". Sanırım cevabımı değiştireceğim.
Sanchises


2

Neim , 7 bayt

'π𝐂𝕋𝐬S𝕊

Açıklama:

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

Alternatif program: 3𝐈ᛖ𝕋𝐬S𝕊

345Karakterleri itmek ve sonra almak yerine, [1 2 3]kullanarak diziyi oluşturur 3𝐈, sonra ile her öğeye 2 ekler .

Çevrimiçi deneyin!


This commit was pushed 8 days before the answer was posted.aslında buna ihtiyacınız yok.
Outgolfer Erik

@EriktheOutgolfer Emin değilim. Ama açıklamaya da ihtiyacım yok. Bunu kaldırmamı ister misiniz?
Okx

Temel olarak, meta fikir birliği değiştiği için rekabet etmeme konusunda endişelenmenize gerek yoktur.
Outgolfer Erik

@EriktheOutgolfer Meta konsensüs sübjektif ve belirsiz olduğu için rekabet etmeme konusunda endişeleniyorum. Ancak bu durumda, orada olduğu konusunda şikayet etmek için hiçbir neden yoktur. Aksi halde bu yorumu göndermediğinizden daha fazla zaman harcıyorsunuz.
Okx

Herhangi bir nedenle, satır içi kod bloklarındaki çoğu Neim karakteri nasıl görünür? kutuları.
CalculatorFeline


2

Swift 3 , 25 19 bayt

İhtiyacınız olmadığını fark ettim var f=, çünkü Python lambda gibi diyebilirsiniz:

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

Çevrimiçi test edin!

Kullanımı:, parametreler {$0*3+$1*4+$2*5-$3}(a,b,c,d)nerede a,b,c,d.


2

brainfuck , 39 bayt

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

Çevrimiçi deneyin!

Girdiyi alır ve çıktıyı ASCII karakterleri olarak yazdırır; örneğin, 99 değeri c olarak temsil edilir.

Açıklama:

,                                       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

Sayıların ayrı satırlardan geçirilmesi gerekir.

Örnek çalışma:

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

Çevrimiçi deneyin!



2

,,,, 12 bayt

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

açıklama

Örneğin giriş 4, 3, 2, 1'i ele alalım.

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

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

Çevrimiçi deneyin!

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

İzle

Birkaç kez kendi kendine dolanan oldukça doğrusal bir program. Basit adımlar:

  • I3*r;U; ilk girişi al, 3 ile çarp ve yığını temizle
  • I4*/r\ sonraki girişi al ve 4 ile çarp. Sonucu aşağı döndür.
  • Iw5*Ur;w<;r;;W sonraki girişi al, 5 ile çarp ve yığını temizle
  • I-r;w; son girdiyi al, 5. bölüm sonucundan çıkar ve yığını temizle
  • /+p+O\@ par 4 sonucuna ekleyin, par3 sonucunu en üste ekleyin, çıktı alın ve durdurun

2

HP-15C (RPN), 14 bayt

Talimat hex kodları:

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

Okunabilir sürüm:

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

Dört sayı, programı çalıştırmadan önce yığına yüklenir.


Güzel ilk cevap. PPCG'ye Hoşgeldiniz!
musicman523

2

Excel VBA, 20 Bayt

Anonim vbe aralığından girdi alır hemen pencere fonksiyonu [A3:A6]olan [A3:A5]sayısını temsil eder 3, 4ve 5sırası ile, kısmen delikler ve [A6]zorluk temsil eder. VBE anlık penceresine çıkışlar

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

Yukarıdaki çağrı yoğun bir versiyonudur

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

Burada "=3*A3+4*A4+5*A5-A6"belirtildiği gibi, anonim hücrenin formül olarak verilir [...]sargının ve ?bir kaldırılmış versiyonu Printbir örtülü olan çağrı Debug.bağlamda

Daha eğlenceli Sürüm, 34 Bytes

Anonim VBE anlık pencere işlevi, yukarıdaki G / Ç koşullarıyla aynıdır.

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

Yukarıdaki çağrı yoğun bir versiyonudur

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

Burada "=SUMPRODUCT(A3:A5,ROW(A3:A5))"belirtildiği gibi, anonim hücrenin formül olarak verilir [...]sargının ve ?bir kaldırılmış bir sürümünü olan Printbir kapalı olan çağrı Debug.bağlamda. Bu sürümde, [A3:A5]bu aralığın ( ROWS(A3:A5)) aralığı ve satır numaraları diziler olarak geçirilir

Excel Sürümü, 18 bayt

Tabii ki, yukarıdaki versiyonlar kendilerini mükemmel bir şekilde

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

ve

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





Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.