Was ist der Standardkratzer?


12

Im Golf wird der Standard-Scratch eines Platzes nach folgender Formel berechnet:

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

Ihre Aufgabe ist es, anhand dieser 4 Eingaben den Standard-Scratch eines Golfplatzes zu berechnen.

Sie sollten Eingaben in einer beliebigen Standardform im Format vornehmen

[num_of_3_pars, num_of_4_pars, num_of_5_pars], difficulty rating

Wenn es jedoch Bytes spart, nehmen Sie viele Eingaben auf andere Weise vor.

Sie sollten das Endergebnis mit jeder akzeptierten Methode auf Meta ausgeben, z. B. mit der Rückkehr von einer Funktion.

Kürzester Code gewinnt, weil das !


Sind alle Eingaben Ganzzahlen und mindestens 1? (Wird die Ausgabe auch immer positiv sein?)
Türknauf

Können wir Eingaben umgekehrt machen?
Totalhuman

13
So trivial das auch ist, ein paar Testfälle wären schön.
Dennis

9
Interessant, ein Code Golf über Golf.
Sergiol

Antworten:


28

Scratch, 145 Bytes

-2 dank boboquack
- ??? weil das Schreiben in Oto kürzer ist als in Englisch

(Weil Kratzer der Standardkratzer ist.)

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 übersetzung: frage () und warte set (a) bis (antworte ask () und warte set ( b) bis (Antwort frage () und warte set (c) bis (Antwort frage () und warte set (d) bis (Antwort sagen (((c) - ((a) + (d))) + ((4 ) * (((a) + (b)) + (c

Hier ist ein Probelauf:

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


18

Gelee , 6 Bytes

JḊ~æ.N

Probieren Sie es online!

Wie es funktioniert

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 Bytes

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

Probieren Sie es online! Verbrauch: (3#2)5 7Erträge35 .

Dieses nicht so schöne Eingabeformat ist ein Byte kürzer als die einfache Lösung:

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

Punktloses und schönes Eingabeformat: (23 Bytes)

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

Probieren Sie es online! Binden an fund anrufen mit f [3,2,5] 7.


5

Mathematica, 13 14 Bytes

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

Vielen Dank an @ GregMartin. Nehmen Sie die Eingabe als Liste der Länge 4.


Dank "aber wenn es Bytes spart, nehmen Sie viele Eingaben auf eine andere Weise", denke ich, sollten Sie Eingaben als Länge-4-Liste nehmen und die zweite Lösung auf {3,4,5,-1}.#&(13 Bytes) kürzen .
Greg Martin

Sie haben Recht ..
Keyu Gan




4

Julia 0,5 , 15 Bytes

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

Probieren Sie es online!


Sind drei Bytes, oder bin ich falsch gezählt? Wäre .*das eine Verbesserung? Bearbeiten: Macht nichts - habe den Summierungsteil verpasst.
Julian Wolf

Ja, drei Bytes. .*Führt nur eine elementweise Multiplikation durch. Es geht nicht um die Summe der Produkte.
Dennis


3

x86-64-Maschinencode, 14 Byte

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

Eine Funktion, die der Aufrufkonvention von System V AMD64 folgt (allgegenwärtig auf Gnu / Linux-Systemen) und vier ganzzahlige Parameter akzeptiert:

  • EDI = Anzahl_von_3_Par_Löchern
  • ESI = Anzahl_von_4_Par_Löchern
  • EDX = Anzahl_von_5_Par_Löchern
  • ECX = schwierigkeitsbewertung

Es wird ein einzelner Wert zurückgegeben, der Standard-Scratch in der EAX Register zurück.

Ungolfed Assembler-Mnemonik:

; 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

Nur eine einfache Übersetzung der Formel. Interessant ist, dass dies im Wesentlichen derselbe Code ist, den Sie auch bei der Optimierung der Geschwindigkeit schreiben würden . Dies zeigt wirklich die volle Leistung der x86 - LEAInstruktion, die ausgelegt ist , l oad ein e ffective eines ddress, kann aber (durch niedrigen Potenzen von 2 Multiplikation) in einem einzigen Befehl, so dass es ein leistungsstarken Mehrzweck - Rechen Arbeitspferd Additions- und Skalierung tun .


3

Gelee , 10 7 Bytes

3r5×⁸S_

Probieren Sie es online!

-3 Bytes dank Erik The Outgolfer!

Wie es funktioniert!

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)

Die Standardmethode zum Erstellen von Listen ist weggelassen, []aber Sie können 3r5×⁸S_diese Methode verwenden, um mehr Golf zu spielen ( 3r5-> [3, 4, 5], = linkes Argument, um es von dem zu unterscheiden S, ×ist kommutativ).
Erik der Outgolfer

3

Oktave , 14 Bytes

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

Probieren Sie es online!

Etwa doppelt so lange wie die MATL-Antwort . Ich habe dies ursprünglich buchstäblich auf MATL portiert, aber es stellte sich heraus, dass iY*es länger als nur *s. Beachten Sie, dass die Eingabe a, die die Löcher in der Reihenfolge und dann die Schwierigkeit enthält, ein Spaltenvektor sein sollte.


Wie Frage sagt , dass Sie die Eingabe in einem beliebigen Format nehmen , wenn es Bytes speichert, funktioniert dies für 14: @(a)[3:5 -1]*a. Die Eingabe ist ein Spaltenvektor von[3 holes; 4 holes; 5holes; difficulty]
Tom Carpenter

@ TomCarpenter Oh, ich dachte, die Liste + Nummer Teil war obligatorisch. Es ist ein bisschen seltsam formuliert: "Du solltest ... aber du darfst". Dann werde ich wohl meine Antwort ändern.
Sanchises


2

Neim , 7 Bytes

'π𝐂𝕋𝐬S𝕊

Erläuterung:

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

Alternatives Programm: 3𝐈ᛖ𝕋𝐬S𝕊

Anstatt zu drücken 345und dann die Zeichen abzurufen, wird das Array [1 2 3]mit erstellt 3𝐈und dann zu jedem Element mit 2 hinzugefügt .

Probieren Sie es online!


This commit was pushed 8 days before the answer was posted.Naja, das brauchst du eigentlich nicht.
Erik der Outgolfer

@EriktheOutgolfer Sicher tue ich nicht. Aber ich brauche auch keine Erklärung. Möchten Sie, dass ich das entferne?
Okx

Grundsätzlich müssen Sie sich keine Sorgen um Konkurrenz machen, da sich der Metakonsens geändert hat.
Erik der Outgolfer

@EriktheOutgolfer Ich mache mir Sorgen über das Nicht-Konkurrieren, weil der Metakonsens subjektiv und unklar ist. Aber in diesem Fall gibt es keinen Grund, sich darüber zu beschweren. Du verbrauchst mehr Zeit als sonst, wenn du diesen Kommentar nicht gepostet hättest.
Okx

Aus irgendeinem Grund sehen die meisten Neim-Zeichen in Inline-Codeblöcken so aus? Kisten.
CalculatorFeline


2

Swift 3 , 25 19 Bytes

Mir wurde klar, dass Sie das nicht brauchen var f=, weil Sie es wie ein Python-Lambda nennen können:

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

Online testen!

Verwendung: {$0*3+$1*4+$2*5-$3}(a,b,c,d) Wo a,b,c,dsind die Parameter?


2

Brainfuck , 39 Bytes

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

Probieren Sie es online!

Übernimmt die Eingabe und druckt die Ausgabe als ASCII-Zeichen. Beispielsweise würde der Wert 99 als c dargestellt.

Erläuterung:

,                                       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 Bytes

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

Erläuterung

Nehmen Sie zum Beispiel die Eingänge 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 Bytes

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

Probieren Sie es online!

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

Beobachten Sie es laufen

Ein ziemlich lineares Programm, das sich einige Male auf sich selbst zurückspult. Grundlagen:

  • I3*r;U; Holen Sie sich die erste Eingabe, multiplizieren Sie mit 3 und bereinigen Sie den Stapel
  • I4*/r\ Nächste Eingabe abrufen und mit 4 multiplizieren. Ergebnis nach unten drehen.
  • Iw5*Ur;w<;r;;W Holen Sie sich die nächste Eingabe, multiplizieren Sie mit 5 und bereinigen Sie den Stapel
  • I-r;w; Holen Sie sich die letzte Eingabe, subtrahieren Sie vom Par 5-Ergebnis und bereinigen Sie den Stapel
  • /+p+O\@ Addiere zum Par 4-Ergebnis, bringe das Par 3-Ergebnis nach oben. Addiere, gebe aus und halte an

2

HP-15C (RPN), 14 Byte

Anweisungs-Hex-Codes:

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

Lesbare Version:

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

Die vier Zahlen werden der Reihe nach in den Stapel geladen, bevor das Programm ausgeführt wird.


Schöne erste Antwort. Willkommen bei PPCG!
musicman523

2

Excel VBA, 20 Bytes

Anonymous VBE unmittelbaren Fensterfunktion , die eine Eingabe von dem Bereich nimmt [A3:A6]davon [A3:A5]repräsentieren die Anzahl der 3, 4und 5par Löcher jeweils und [A6]stellt die Schwierigkeit. Ausgabe in das VBE-Sofortfenster

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

Das obige ist eine komprimierte Version des Aufrufs

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

Dabei "=3*A3+4*A4+5*A5-A6"wird die Formel einer anonymen Zelle angegeben, wie vom [...]Wrapper angegeben, und ?die veraltete Version des PrintAufrufs mit einem impliziten Debug.Kontext

Mehr Spaß Version, 34 Bytes

Anonymous VBE-Direktfensterfunktion mit denselben E / A-Bedingungen wie oben.

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

Das obige ist eine komprimierte Version des Aufrufs

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

Wo "=SUMPRODUCT(A3:A5,ROW(A3:A5))" wird die Formel einer anonymen Zelle angegeben, wie vom [...]Wrapper angegeben, und ?die veraltete Version des PrintAufrufs mit einem impliziten Debug.Kontext. In dieser Version werden der Bereich [A3:A5]und die Zeilennummern dieses Bereichs (ROWS(A3:A5) ) als Arrays übergeben

Excel-Version, 18 Bytes

Natürlich bieten sich die obigen Versionen auch an, um Versionen von zu übertreffen

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

und

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





Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.