Code Golf Score de golf

22

C'est vendredi ... alors allons jouer au golf! Écrivez le code qui détermine le score du joueur sur un trou dans une partie de golf. Le code peut être soit une fonction soit un programme entier. Comme le genre le suggère, le code le plus court gagne.

Entrée (paramètres ou stdin, au choix):

  • Un entier représentant le pair du trou, garanti entre 3 et 6
  • Un entier représentant le score du golfeur, garanti entre 1 et 64

Sortie (impression vers sortie standard ou retour, retour à la ligne autorisé mais non requis, votre choix):

  • si le score est 1, sortir "Trou en un"
  • si score == par - 4 et par> 5, sortir "Condor"
  • si score == par - 3 et par> 4, sortir "Albatros"
  • si score == par - 2 et par> 3, sortir "Eagle"
  • si score == par - 1, sortie "Birdie"
  • si score == par, sortie "Par"
  • si score == par + 1, sortie "Bogey"
  • si score == par + 2, sortie "Double Bogey"
  • si score == par + 3, sortie "Triple Bogey"
  • si score> par + 3, sortie "Haha you loser"

EDIT Félicitations à Dennis d'avoir la réponse la plus courte!

Josh
la source
34
Je me suis toujours demandé ce qu'il y avait après le triple bogey.
ThisSuitIsBlackNot
3
Soit dit en passant, le plus grand par est de 7 et non de 6.
Joshua
4
@Joshua J'ai été temporairement confus quant à la raison pour laquelle vous avez commenté au lieu de modifier votre propre message. Puis ça m'a frappé. : P
Rɪᴋᴇʀ
@RikerW les deux noms de Josh sont aussi proches que leur réputation: D
cat
2
L'entrée peut-elle être dans n'importe quel ordre?
Poignée de porte

Réponses:

6

Gelée , 61 octets

_«4ị“Ƙḷ“&SẆ@ẓ“&T¡UQ“½⁽Ð'÷ṿɼ“½Œż“¡œM“v⁵“¥⁻c“£Ḋ⁶»
瓵ḣ⁻×⁵ñBƑ»’?

Essayez-le en ligne!

Contexte

Cela utilise la compression de dictionnaire statique de Jelly. Vous pouvez trouver un compresseur ici . Par ici,

“Ƙḷ“&SẆ@ẓ“&T¡UQ“½⁽Ð'÷ṿɼ“½Œż“¡œM“v⁵“¥⁻c“£Ḋ⁶»

et

“Bogey“Double Bogey“Triple Bogey“Haha you loser“Condor“Albatross“Eagle“Birdie“Par”

aussi bien que

“µḣ⁻×⁵ñBƑ»

et

“Hole in one”

sont équivalents.

Comment ça marche

_«4ị“Ƙḷ“&SẆ@ẓ“&T¡UQ“½⁽Ð'÷ṿɼ“½Œż“¡œM“v⁵“¥⁻c“£Ḋ⁶»  Helper link. Arguments: score, par

_                                                Subtract the par from the score.
 «4                                              Cap the difference at 4.
   ị                                             Index into the list at the right.
    “Ƙḷ“&SẆ@ẓ“&T¡UQ“½⁽Ð'÷ṿɼ“½Œż“¡œM“v⁵“¥⁻c“£Ḋ⁶»  Yield a list of strings.


瓵ḣ⁻×⁵ñBƑ»’?  Main link. Arguments: score, pair

            ?  If...
           ’   the decremented score if non-zero:
ç                Call the helper link on both input arguments.
 “µḣ⁻×⁵ñBƑ»      Else, return “Hole in one”.
Dennis
la source
Félicitations pour la réponse la plus courte!
Josh
13

PHP 5.3+, 173 167 166 159 159 156 151 127 121 octets

echo[Condor,Albatross,Eagle,Birdie,Par,$b=Bogey,"Double $b","Triple $b","Haha you loser"][min(4+$s-$p,8)]?:"Hole in one";
Version sans préavis, 139 137 octets
echo$s-1?["Condor","Albatross","Eagle","Birdie","Par",$b="Bogey","Double $b","Triple $b","Haha you loser"][min(4+$s-$p,8)]:"Hole in one";

Définissez $sles $pvariables de base et ar avant le echoet vous êtes parti.

vue éclatée
echo [Condor,
      Albatross,
      Eagle,
      Birdie,
      Par,
      $b = Bogey,
      "Double $b",
      "Triple $b",
      "Haha you loser"][ min( 4+$s-$p,8 ) ]
  ?: "Hole in one";

Modifications
-6: ne stocke pas le tableau, il suffit de l'appeler si nécessaire.
-1: retournement du ternaire.
-7: Le plus bas $s-$pavec $s>1est -4, donc ce max()n'est pas nécessaire depuis 4+$s-$p >= 0.
-3 Array -> explode() :, merci CoolestVeto!
-5: Chaîne tricheuse littérale constante indéfinie plus $r[-1] -> false, merci Ismael Miguel!
-24: Passer d'une explode()fonction à une printf/ %ssetup, avec quelques ajustements, merci à Ismael Miguel pour le changement de direction.
-6: Swerve , nous sommes de retour echo!

ricdesi
la source
1
Pouvez-vous la transformer en une seule chaîne et divisée par un caractère arbitraire?
Addison Crump
@CoolestVeto En fait, je le peux. Bizarrement, il enregistre moins d'octets que prévu, mais tous les octets valent mieux que pas d'octets!
ricdesi
1
Vous pouvez remplacer $b="Bogey";par $b=Bogey;pour économiser 2 octets. Remplacez également votre $s-1? ... : ...;par un echo ... ?: ...;. Voici la version longue de 151 octets:function g($s,$p){$b=Bogey;echo explode("-","Condor-Albatross-Eagle-Birdie-Par-$b-Double $b-Triple $b-Haha you loser")[min(4+$s-$p,8)]?:"Hole in one";}
Ismael Miguel
Je n'avais aucune idée que vous pouviez tricher des littéraux à cordes, bien.
ricdesi
1
Voici un (peut - être) et de travail plus courte: printf([Condor,Albatross,Eagle,Birdie,Par,'%s','Double %s','Triple %s','Haha you loser'][min(4+$argv[1]-$argv[2],8)]?:'Hole in one',Bogey);. Fondamentalement: Suppression de la déclaration de fonction, suppression du explore, suppression des guillemets, utilisation d'un tableau et utilisation $argv. Le code final est long de 139 octets.
Ismael Miguel
10

05AB1E , 91 90 octets

Code:

-5+U“¥Ê€†€µ“ª"0Bogey"ДCondor Albatross²è Birdie Par ÿ‹¶ÿ½¿ÿ”ð¡“Haha€î loser“X0¹1Qm*@0ð:ðÛ

Explication:

Partie 1:

-5+                          # Computes Score - Par + 5
   U                         # Store in X
    “¥Ê€†€µ“ª                # Short for "Hole in one"
             "0Bogey"        # Push this string
                     Ð       # Triplicate

Partie 2:

”Condor Albatross²è Birdie Par ÿ‹¶ÿ½¿ÿ”ð¡

Cela revient à "Condor Albatross Eagle Birdie Par 0Bogey Double0Bogey Triple0Bogey"utiliser la compression et l'interpolation de chaînes. Nous avons ensuite divisé sur les espaces, en utilisant ð¡.

Partie 3:

“Haha€î loser“                # Push "Haha you loser"
              X               # Push X
               0¹1Qm          # Compute 0 ^ (score == 1), this translates 1 to 0 and 
                                everything else to 1.
                    *         # Multiply the top two items
                     @        # Get the string from that position
                      0ð:     # Replace zeros with spaces
                         ðÛ   # Trim off leading spaces

Découvert de nombreux bugs, utilise l' encodage CP-1252 .

Essayez-le en ligne!

Adnan
la source
... Whoa. Bien fait.
cat
2
@tac Merci! :)
Adnan
Ce code ressemble un peu aux messages Unicode aléatoires que vous obtenez lorsque vous installez un fichier .exe non anglais (si vous avez l'anglais comme langue dans les choses Windows). Cela a l'air spectaculaire, cependant!
clismique
@DerpfacePython Haha, les messages Unicode aléatoires font partiellement partie du code et l'autre partie fait partie d'un message compressé.
Adnan
6

Vitsy, 131 octets

D1-)["eno ni eloH"rZ;]r-5+D9/([X9]mZ
"rodnoC"
"ssortablA"
"elgaE"
"eidriB"
"raP"
"yegoB"
4m" elbuoD"
4m" elpirT"
"resol uoy ahaH"

Explication:

D1-)["eno ni eloH"rZ;]r-5+D9/([X9]mZ
D1-)[                ]      If the second input is 1, do the bracketed stuff.
     "eno ni eloH"rZ;       Output "Hole in one" and quit.
r                           Reverse the stack.
 -                          Subtract the top two items.
  5+                        Add 5 to fix for negative values of score.
    D9/([  ]                If the result of that is greater than 8, do the stuff in brackets.
         X                  Remove the top item.
          9                 Push 9. This forces any items greater than 8 to be 9.
            m               Execute this number line.
             Z              Output everything in the stack.

Cela fonctionne en déterminant quel est le score par rapport au pair, puis en exécutant différentes lignes (et en gagnant différentes chaînes).

Essayez-le en ligne!

Mode verbeux (pour les caca et les rires):

duplicate top item;
push 1;
subtract top two;
if (int) top is not 0;
begin recursive area;
toggle double quote;
push 14;
eval(stack);
capture stack as object with next;
 ;
eval(stack);
push input item;
 ;
push 14;
push length of stack;
capture stack as object with next;
push all ints between second to top and top;
toggle double quote;
reverse stack;
output stack as chars;
generic exit;
end recursive area;
reverse stack;
subtract top two;
push 5;
add top two;
duplicate top item;
push 9;
divide top two;
if (int) top is 0;
begin recursive area;
remove top;
push 9;
end recursive area;
goto top method;
output stack as chars;
:toggle double quote;
reverse stack;
capture stack as object with next;
push 13;
eval(stack);
capture stack as object with next;
push cosine of top;
toggle double quote;
:toggle double quote;
push inverse sine of top;
push inverse sine of top;
capture stack as object with next;
reverse stack;
push inverse tangent of top;
push 10;
push 11;
push length of stack;
push inverse cosine of top;
toggle double quote;
:toggle double quote;
push 14;
push length of stack;
g;
push 10;
push e;
toggle double quote;
:toggle double quote;
push 14;
push input item;
push 13;
reverse stack;
push input item;
B;
toggle double quote;
:toggle double quote;
reverse stack;
push 10;
push pi;
toggle double quote;
:toggle double quote;
push number of stacks;
push 14;
g;
capture stack as object with next;
B;
toggle double quote;
:push 4;
goto top method;
toggle double quote;
 ;
push 14;
push length of stack;
push 11;
flatten top two stacks;
capture stack as object with next;
duplicate top item;
toggle double quote;
:push 4;
goto top method;
toggle double quote;
 ;
push 14;
push length of stack;
push whether (int) top item is prime;
push input item;
reverse stack;
push tangent of top;
toggle double quote;
;
;
:toggle double quote;
reverse stack;
push 14;
push inverse sine of top;
capture stack as object with next;
push length of stack;
 ;
flatten top two stacks;
capture stack as object with next;
push number of stacks;
 ;
push 10;
factorize top item;
push 10;
push all ints between second to top and top;
toggle double quote;
Addison Crump
la source
"Poussez 9. Cela force tous les éléments supérieurs à 8 à 9." Wat?
cat
@tac Il s'agit de forcer l'entrée qui résulterait en "Haha you loser" pour aller à la ligne contenant "Haha you loser".
Addison Crump
5

JavaScript (ES6), 125 124 bytes

p=>s=>"Hole in one,Condor,Albatross,Eagle,Birdie,Par,Bogey,Double Bogey,Triple Bogey".split`,`[s-1&&s-p+5]||"Haha you loser"

Attribuez à une variable par exemple f=p=>s=>, puis appelez-la comme ceci: f(6)(2)Par d'abord, puis marquez.

Peut être raccourci en combinant le par "Bogey".

ETHproductions
la source
Un exemple de combinaison des bogeys est: ",Double ,Triple ".split`,`[k-1]+"Bogey"k=s-p.
user48538
Puis-je utiliser votre approche dans ma solution?
user48538
@ zyabin101 qui n'est pas découragé, tant qu'il ne s'agit pas d'un plagiat pur et simple
cat
@ zyabin101 Merci, je vais voir si cela le raccourcit. Et oui, n'hésitez pas à utiliser cette approche dans votre réponse.
ETHproductions
J'utilise déjà ça.
user48538
4

LittleLua - 160 octets (non compétitif)

r()P=I B="Bogey"r()Z={"Hole in one","Condor","Albatross","Eagle","Birdie","Par",B,"Double "..B,"Triple "..B,"Haha, you loser"}p(I=='1'a Z[1]or Z[I-P+6]or Z[10])

Je suis relativement certain d'avoir bien fait ça.

Accepte deux entiers, le pair et le score du joueur.

La version de Little Lua que j'utilisais pour faire cela a été téléchargée après la publication de ce défi, mais n'a pas été modifiée par la suite. Il est relativement évident d'après le code que rien n'a été ajouté pour simplifier ce défi

Info LittleLua:

Une fois que je suis satisfait des fonctionnalités intégrées et des fonctionnalités de Little Lua, la source sera disponible avec une infopage.

LittleLua V0.02

Skyl3r
la source
2
Ce n'est pas compétitif, car le fichier a été téléchargé sur Dropbox 2 heures après la publication du défi.
Mego
2
github.com est bien meilleur dans l'hébergement de code ...
cat
Absolument, je n'ai tout simplement pas eu la chance de l'installer.
Skyl3r
3

Souris-2002 , 223 207 octets

La suppression des commentaires aiderait probablement ...

??s:p:s.1=["Hole in one"]s.p.4-=p.5>["Condor"]s.p.3-=p.4>["Albatross"]s.p.2-=p.3>["Eagle"]s.p.1-=["Birdie"]s.p.=["Par"]s.p.1+=["Bogey"]s.p.2+=["Double Bogey"]s.p.2+=["Double Bogey"]s.p.3+>["Haha you loser"]$

Non golfé:

? ? s: p:

s. 1 = [
  "Hole in one"
]

~ 1
s. p. 4 - = p. 5 > [
  "Condor"
]

~ 2
s. p. 3 - = p. 4 > [
  "Albatross"
]

~ 3
s. p. 2 - = p. 3 > [
  "Eagle"
]

~ 4
s. p. 1 - = [
  "Birdie"
]

~ 5
s. p. = [
  "Par"
]

~ 6
s. p. 1 + = [
  "Bogey"
]

~ 7
s. p. 2 + = [
  "Double Bogey"
]

~ 8
s. p. 2 + = [
  "Double Bogey"
]

s. p. 3 + > [
  "Haha you loser"
]


$
chat
la source
2

bash, 150 136 octets

b=Bogey
(($2<2))&&echo Hole in one||tail -$[$2-$1+5]<<<"Haha you loser
Triple $b
Double $b
$b
Par
Birdie
Eagle
Albatross
Condor"|head -1

Essai:

llama@llama:...code/shell/ppcg74767golfgolf$ for x in {1..11}; do bash golfgolf.sh 6 $x; done                                                          
Hole in one
Condor
Albatross
Eagle
Birdie
Par
Bogey
Double Bogey
Triple Bogey
Haha you loser
Haha you loser

Merci à Dennis pour 14 octets!

Poignée de porte
la source
1

Python 2, 186 179 158 158 octets

def c(s,p):a="Bogey";print["Condor","Albatross","Eagle","Birdie","Par",a,"Double "+a,"Triple "+a,"Haha you loser","Hole in one"][([[s-p+4,8][s-p>3],9][s==1])]

EDIT 1: ajout du cas "trou d'un coup" manquant ...

EDIT 2: joué quelques octets (grâce à tac)

Max
la source
1
Un lambda serait plus court, voir aussi les astuces pour jouer au golf en Python
cat
vous pouvez laisser tomber l'espace entre 4etelse
cat
1
Si vous modifiez l'algorithme, vous pouvez simplement indexer une liste plutôt qu'un dict
cat
vous pouvez supprimer l'espace entre printet {, et si vous utilisez un point-virgule pour mettre le a=et printsur la même ligne, vous pouvez raser un octet de blanc
cat
1
@tac en fait "c = lambda x, y:" est plus long que "def c (x, y):", merci pour les autres suggestions
Max
1

Haskell - 131 octets (en comptant la nouvelle ligne)

1%p="Hole in one"
s%p=lines"Condore\nAlbatros\nEagle\nBirdie\nPar\nBogey\nDouble Bogey\nTriple Bogey\nHaha you loser"!!min(4-p+s)8

linesest la seule façon dont je peux penser à jouer au golf dans une liste de chaînes qui doivent contenir des espaces avec accès uniquement Preludecoincés avec deux délimiteurs de caractères.

Pourtant, Haskell n'est généralement pas aussi compétitif (contre les langues générales au moins).

Steven Armstrong
la source
Vous pouvez importtout ce que vous voulez, pas seulement les builtins
cat
1

Python 2.7, 226 octets

p,s=input()
b="Bogey"
l={s==1:"Hole in one",5<p==s+4:"Condor",4<p==s+3:"Albatross",3<p==s+2:"Eagle",s==p-1:"Birdie",s==p:"Par",s==p+1:b,s==p+2:"Double "+b,s==p+3:"Triple "+b,s>p+3:"Haha you loser"}
for r in l:
 if r:print l[r]

Difficile de trouver un court code python lorsque vous êtes en retard à la fête, du mieux que je puisse penser.

janrn
la source
Les deux dernières lignes doivent être changées en une seule:[print r for r in l if r]
cat
1

C, 198 octets

main(){char s=8,p=4,m[]="Hole in one.Condor.Albatross.Eagle.Birdie.Par.Bogey.Double Bogey.Triple Bogey.Haha you loser",*t,*x,i=0;for(x=m;t=strtok(x,".");x=0,i++)if((s-1?s-p>3?9:s-p+5:0)==i)puts(t);}
Johan du Toit
la source
0

Japt, 97 octets

`Ho¤  e
CÆBr
AlßNoss
Eag¤
Bir¹e
P
zD½e zTp¤ zHa y lo r`rz"Bogey
" ·g9m´V©V-U+6

Contient un tas d'imprimables. Testez-le en ligne!

Comment ça marche

`Ho¤  e\nCÆBr\nAlßNoss\nEag¤\nBir¹e\nP\nzD½e zTp¤ zHa y lo r`                        rz"Bogey\n" ·  g9m´ V© V-U+6
"Hole in one\nCondor\nAlbatross\nEagle\nBirdie\nPar\nzDouble zTriple zHaha you loser"rz"Bogey\n" qR g9m--V&&V-U+6

              // Implicit: U = par, V = score
"..."         // Take this long, compressed string.
rz"Bogey\n"   // Replace each instance of "z" with "Bogey\n".
qR            // Split at newlines.

--V&&V-U+6    // If V is 1, take 0; otherwise, take V-U+5.
9m            // Take the smaller of this and 9.
g             // Get the item at this index in the previous list of words.
              // Implicit output
ETHproductions
la source
0

Python 2.7.2, 275 octets

s=int(input())
p=int(input())
a="Bogey"
if s==1:b="Hole in one"
elif p-4==s:b="Condor"
elif p-3==s:b="Albatross"
elif p-2==s:b="Eagle"
elif p-1==s:b="Birdie"
elif p==s:b="Par"
elif p+1==s:b=a
elif p+2==s:b="Double "+a
elif p+3==s:b="Triple "+a
else:b="Haha you loser"
print b

Non golfé / expliqué:

score = int(input())
par = int(input)
foo = "Bogey" # a shortcut for 3 of the outputs
if score == 1:
    output = "Hole in one"
elif par - 4 == score:
    output = "Condor"
...
elif par == score:
    output = "Par"
elif par + 1 == score:
    output = foo # See what I mean?
elif par + 2 == score:
    output = "Double " + foo # Huh? Huh?
elif par + 3 == score:
    output = "Triple " + foo # That makes 3.
else:
    output = "Haha you loser"
print output # Make sense?

Ma deuxième réponse, ironiquement, les deux sont en Python. Conseils de golf appréciés!

OldBunny2800
la source
Astuce: vous n'avez même pas besoin b.
Leaky Nun
Je vais éditer, juste nrn.
OldBunny2800
Jetez un oeil à cela .
Leaky Nun
De plus, je pensais que Python 2 convertit intautomatiquement votre entrée .
Leaky Nun
-2

Python 2, 302 284 octets

i=input();j=input()
if j==1:print"Hole in one"
if(j==i-4)&(i>5):print"Condor"
if(j==i-3)&(i>4):print"Albatross"
if(j==i-2)&(i>3):print"Eagle"
if j==i-1:print"Birdie"
if j==i:print"Par"
if j>i:
 k=j-i
 if k<4:
  print["","Double ","Triple "][k-1]+"Bogey"
 else:
  print"Haha you loser"

Si le premier espace blanc était autorisé, ce serait 282 octets:

i=input();j=input()
if j==1:print"Hole in one"
if(j==i-4)&(i>5):print"Condor"
if(j==i-3)&(i>4):print"Albatross"
if(j==i-2)&(i>3):print"Eagle"
if j==i-1:print"Birdie"
if j==i:print"Par"
if j>i:
 k=j-i
 if k<4:
  print["","Double","Triple"][k-1],"Bogey"
 else:
  print"Haha you loser"
user48538
la source
12
L'utilisation d'un tableau de chaînes vous aiderait sérieusement ici.
Addison Crump
D'accord, cela ne semblait vraiment pas optimisé. Toute combinaison de termes / résultats raccourcirait la réponse.
ricdesi
Pourquoi avez-vous besoin de raw_input ()? Ne pouvez-vous pas simplement utiliser input ()?
OldBunny2800
@ricdesi J'ai combiné les bogeys.
user48538