Qu'est-ce que le scratch standard?

12

Au golf, le scratch standard d'un parcours est calculé à l'aide de cette formule:

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

Votre tâche consiste à calculer le scratch standard d'un parcours de golf, compte tenu de ces 4 entrées.

Vous devez prendre la saisie sous n'importe quelle forme standard dans le format

[num_of_3_pars, num_of_4_pars, num_of_5_pars], difficulty rating

mais si cela permet d'économiser des octets, vous êtes nombreux à prendre les entrées d'une manière différente.

Vous devez sortir le résultat final par n'importe quelle méthode acceptée sur les méta, comme le retour d'une fonction.

Le code le plus court gagne parce que c'est du !


la source
Toutes les entrées seront-elles des entiers et au moins 1? (De plus, la sortie sera-t-elle toujours positive?)
Poignée de porte
Pouvons-nous prendre les entrées à l'envers?
totalement humain
13
Aussi trivial que cela soit, quelques cas de test seraient bien.
Dennis
9
Intéressant, un code de golf sur le golf.
sergiol

Réponses:

28

Scratch, 145 octets

-2 grâce à boboquack
- ??? parce que l'écrire en Oto est plus court qu'en anglais

(Parce que Scratch est le scratch standard.)

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)) + (traduction c: demander () et attendre ensemble (a) à (répondre demander () et attendre ensemble ( b) à (répondre demander () et attendre ensemble (c) à (répondre demander () et attendre ensemble (d) à (répondre dire ((((c) - ((a) + (d)))) + ((4 ) * (((a) + (b)) + (c

Voici un exemple d'exécution:

a = 18, b = 13, c = 41, d = 23; réponse = 124.

Laurier
la source
18

Gelée , 6 octets

JḊ~æ.N

Essayez-le en ligne!

Comment ça fonctionne

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
la source
6

Haskell , 22 octets

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

Essayez-le en ligne! Utilisation: (3#2)5 7rendements 35.

Ce format d'entrée pas si agréable est un octet plus court que la solution simple:

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

Format d'entrée sans point et agréable: (23 octets)

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

Essayez-le en ligne! Liez à fet appelez avec f [3,2,5] 7.

Laikoni
la source
5

Mathematica, 13 14 octets

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

Merci à @GregMartin. Prenez l'entrée comme une liste de longueur 4.

Keyu Gan
la source
Grâce à "mais si cela permet d'économiser des octets, vous prenez beaucoup l'entrée d'une manière différente", je pense que vous devriez prendre l'entrée comme une liste de longueur 4 et raccourcir la deuxième solution à {3,4,5,-1}.#&(13 octets).
Greg Martin
Vous avez raison ..
Keyu Gan
4

Javascript, 24 octets

(a,b,c,d)=>3*a+4*b+5*c-d
SuperStormer
la source
4

Perl6, 16 caractères

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

(Ouais, c'est un sous.)

Exemple d'exécution:

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

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

Essayez-le en ligne!

homme au travail
la source
4

Julia 0,5 , 15 octets

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

Essayez-le en ligne!

Dennis
la source
Est-ce que trois octets, ou est-ce que je fais une erreur de calcul? Serait- .*ce une amélioration? modifier: Peu importe - manqué la partie de sommation.
Julian Wolf
Oui, trois octets. .*effectue uniquement une multiplication par élément; cela ne prend pas la somme des produits.
Dennis
3

C #, 24 octets

(a,b,c,d)=>a*3+b*4+c*5-d
TheLethalCoder
la source
3

Code machine x86-64, 14 octets

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

Une fonction suivant la convention d'appel System V AMD64 (omniprésente sur les systèmes Gnu / Linux) qui prend quatre paramètres entiers:

  • EDI = num_of_3_par_holes
  • ESI = num_of_4_par_holes
  • EDX = num_of_5_par_holes
  • ECX = difficulté_évaluation

Il renvoie une seule valeur, le scratch standard, dans le EAXregistre.

Mnémoniques d'assemblage non golfés:

; 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

Juste une simple traduction de la formule. Ce qui est intéressant, c'est qu'il s'agit essentiellement du même code que celui que vous écririez lors de l'optimisation de la vitesse . Cela montre vraiment la puissance de l'x86 LEAinstruction, qui est conçu pour l OAD un e EFFICACES un DRESSE, mais peut faire plus et mise à l' échelle (multiplication par de faibles puissances de 2) en une seule instruction, ce qui en fait un puissant multi-usages bête de somme arithmétique .

Cody Grey
la source
3

Gelée , 10 7 octets

3r5×⁸S_

Essayez-le en ligne!

-3 octets grâce à Erik The Outgolfer!

Comment ça fonctionne!

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)
caird coinheringaahing
la source
La manière standard de créer des listes est d'omettre, []mais vous pouvez l'utiliser pour jouer 3r5×⁸S_au golf davantage ( 3r5-> [3, 4, 5], = l'argument de gauche pour le différencier du S, ×est commutatif).
Erik the Outgolfer
3

Octave , 14 octets

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

Essayez-le en ligne!

Environ deux fois plus longtemps que la réponse MATL . Au départ, j'ai littéralement porté cela sur MATL, mais il s'est avéré que c'était iY*plus long que juste *s. Notez que l'entrée a, contenant les trous dans l'ordre puis la difficulté, doit être un vecteur de colonne.

Sanchises
la source
Comme question dit que vous pouvez prendre l'entrée dans un format si elle enregistre octets, cela fonctionne pour 14: @(a)[3:5 -1]*a. L'entrée est un vecteur colonne de[3 holes; 4 holes; 5holes; difficulty]
Tom Carpenter
@TomCarpenter Oh, je pensais que la partie liste + numéro était obligatoire. C'est un peu bizarrement formulé: "Vous devriez ... mais vous pouvez". Je suppose que je vais alors modifier ma réponse.
Sanchises
2

Neim , 7 octets

'π𝐂𝕋𝐬S𝕊

Explication:

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

Programme alternatif: 3𝐈ᛖ𝕋𝐬S𝕊

Au lieu de pousser 345puis d'obtenir les caractères, crée le tableau en [1 2 3]utilisant 3𝐈, puis ajoute 2 à chaque élément avec .

Essayez-le en ligne!

Okx
la source
This commit was pushed 8 days before the answer was posted.vous n'avez pas vraiment besoin de ça.
Erik the Outgolfer le
@EriktheOutgolfer Bien sûr que non. Mais je n'ai pas non plus besoin de l'explication. Voulez-vous que je retire cela?
Okx
Fondamentalement, vous n'avez pas à vous soucier de la non-concurrence depuis que le méta-consensus a changé.
Erik the Outgolfer
@EriktheOutgolfer Je m'inquiète de la non-concurrence car le méta-consensus est subjectif et peu clair. Mais dans ce cas, il n'y a aucune raison de se plaindre de sa présence. Vous utilisez plus de temps que vous ne l'auriez fait autrement.
Okx
Pour une raison quelconque, la plupart des caractères Neim dans les blocs de code en ligne ressemblent? des boites.
CalculatorFeline
2

C (gcc) , 30 octets

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

Essayez-le en ligne!

Giacomo Garabello
la source
2
Pas besoin d'une variable supplémentaire. Attribuez simplement à a.
Dennis
2

Swift 3 , 25 19 octets

J'ai réalisé que vous n'en avez pas besoin var f=, car vous pouvez l'appeler comme un lambda Python:

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

Testez-le en ligne!

Utilisation:, {$0*3+$1*4+$2*5-$3}(a,b,c,d)a,b,c,dsont les paramètres.

M. Xcoder
la source
2

brainfuck , 39 octets

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

Essayez-le en ligne!

Prend l'entrée et imprime la sortie sous forme de caractères ASCII; par exemple, la valeur 99 serait représentée comme c.

Explication:

,                                       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
la source
2

dc, 14 caractères

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

Les numéros doivent être transmis sur des lignes distinctes.

Exemple d'exécution:

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

Essayez-le en ligne!

homme au travail
la source
2

Brachylog , 18 16 octets

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

Essayez-le en ligne!

-2 grâce à Fatalize .

Erik le Outgolfer
la source
∧5⟦₁↺b;?z×ᵐġ₃+ᵐ-est 2 octets de moins
Fatalize
@Fatalize Cela aurait été 3 octets de moins s'il n'y avait pas eu de bogue avec un entier et une entrée de tête.
Erik the Outgolfer
2

,,,, 12 octets

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

Explication

Prenez l'entrée 4, 3, 2, 1 par exemple.

↻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
totalement humain
la source
2

Cubix , 36 octets

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

Essayez-le en ligne!

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

Regardez-le courir

Un programme assez linéaire qui revient sur lui-même plusieurs fois. Étapes de base:

  • I3*r;U; obtenir la première entrée, multiplier par 3 et nettoyer la pile
  • I4*/r\ obtenir la prochaine entrée et multiplier par 4. Faire pivoter le résultat vers le bas.
  • Iw5*Ur;w<;r;;W obtenir la prochaine entrée, multiplier par 5 et nettoyer la pile
  • I-r;w; obtenir la dernière entrée, soustraire du résultat du par 5 et nettoyer la pile
  • /+p+O\@ ajouter au résultat du par 4, amener le résultat du par3 en haut ajouter, sortir et arrêter
MickyT
la source
2

HP-15C (RPN), 14 octets

Codes hexadécimaux d'instruction:

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

Version lisible:

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

Les quatre numéros sont chargés dans la pile dans l'ordre avant d'exécuter le programme.

Ryan
la source
Belle première réponse. Bienvenue chez PPCG!
musicman523
2

Excel VBA, 20 octets

Anonyme VBE La fonction de fenêtre immédiate qui accepte une entrée de la gamme [A3:A6]qui [A3:A5]représentent le nombre de 3, 4et 5trous par, respectivement , et [A6]représente la difficulté. Sorties vers la fenêtre immédiate VBE

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

Ce qui précède est une version condensée de l'appel

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

"=3*A3+4*A4+5*A5-A6"est donnée pour être la formule d'une cellule anonyme, comme indiqué par l' [...]encapsuleur, et ?est la version obsolète de l' Printappel avec un Debug.contexte implicite

Version plus amusante, 34 octets

Fonction de fenêtre immédiate VBE anonyme avec les mêmes conditions d'E / S que ci-dessus.

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

Ce qui précède est une version condensée de l'appel

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

"=SUMPRODUCT(A3:A5,ROW(A3:A5))"est donné la formule d'une cellule anonyme, comme indiqué par l' [...]encapsuleur, et ?est la version obsolète de l' Printappel avec un Debug.contexte implicite . Dans cette version, la plage de [A3:A5]et les numéros de ligne de cette plage ( ROWS(A3:A5)) sont passés sous forme de tableaux

Version Excel, 18 octets

Bien sûr, les versions ci-dessus se prêtent ainsi à exceller les versions de

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

et

=SUMPRODUCT(A3:A5,ROW(A3:A5))-A6
Taylor Scott
la source
2

R , 25 23 octets

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

Essayez-le en ligne!

Giuseppe
la source
1
sum(scan()*3:5)-scan()est légèrement plus petit
MickyT
Merci. Je n'essaie généralement pas scanlorsqu'il y a plusieurs entrées comme celle-ci, mais whaddya le sait!
Giuseppe
1

05AB1E , 7 octets

3LÌ*O²-

Essayez-le en ligne!

Erik le Outgolfer
la source
Vous pouvez remplacer 3Lpar ācar la première entrée sera une liste de longueur 3 de toute façon.
kalsowerus