Código Golf Puntaje Golf

22

Es viernes ... ¡vamos a jugar al golf! Escriba un código que determine la puntuación del jugador en un hoyo en un juego de golf. El código puede ser una función o un programa completo. Como sugiere el género, gana el código más corto.

Entrada (parámetros o stdin, su elección):

  • Un número entero que representa el par del hoyo, garantizado entre 3 y 6
  • Un número entero que representa el puntaje del golfista, garantizado entre 1 y 64

Salida (imprimir en stdout o return, nueva línea final permitida pero no requerida, su elección):

  • si la puntuación es 1, salida "Hoyo en uno"
  • if score == par - 4 y par> 5, salida "Condor"
  • if score == par - 3 y par> 4, salida "Albatross"
  • if score == par - 2 y par> 3, salida "Eagle"
  • if score == par - 1, salida "Birdie"
  • si puntaje == par, salida "Par"
  • si puntaje == par + 1, salida "Bogey"
  • if score == par + 2, salida "Double Bogey"
  • si puntaje == par + 3, salida "Triple Bogey"
  • si puntuación> par + 3, salida "Jaja, perdedor"

EDIT ¡Felicidades a Dennis por tener la respuesta más corta!

Josh
fuente
34
Siempre me pregunté qué pasaría después del triple bogey.
ThisSuitIsBlackNot
3
Por cierto, el par más grande es 7 no 6.
Joshua
44
@Joshua Estaba temporalmente confundido acerca de por qué comentaste en lugar de editar tu propia publicación. Entonces me golpeó. : P
Rɪᴋᴇʀ
@RikerW los dos nombres de Josh son tan cercanos como su reputación: D
gato
2
¿La entrada puede estar en cualquier orden?
Pomo de la puerta

Respuestas:

6

Jalea , 61 bytes

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

Pruébalo en línea!

Fondo

Esto usa la compresión estática del diccionario de Jelly. Puedes encontrar un compresor aquí . De esta manera,

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

y

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

tanto como

“µḣ⁻×⁵ñBƑ»

y

“Hole in one”

son equivalentes

Cómo funciona

_«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
fuente
¡Felicidades por la respuesta más corta!
Josh
13

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

echo[Condor,Albatross,Eagle,Birdie,Par,$b=Bogey,"Double $b","Triple $b","Haha you loser"][min(4+$s-$p,8)]?:"Hole in one";
Versión sin aviso, 139 137 bytes
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";

Establecer $snúcleo y$p variables de ar antes de que echoy esté apagado

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

Ediciones
-6: No almacena la matriz, solo la llama si es necesario.
-1: Voltear el ternario.
-7: El más bajo $s-$pcon $s>1es -4, por lo max()que no es necesario desde entonces 4+$s-$p >= 0.
-3: Array -> explode() gracias CoolestVeto!
-5: Cheaty string literal undefined constant plus $r[-1] -> false, ¡gracias Ismael Miguel!
-24: Pasando de una explode()función a una printf/ %sconfiguración, con algunos ajustes, más gracias a Ismael Miguel por el cambio de dirección.
-6: Swerve , estamos de vuelta echootra vez!

ricdesi
fuente
1
¿Puedes convertirlo en una cadena y dividirlo por un carácter arbitrario?
Addison Crump
@CoolestVeto De hecho, puedo. Extrañamente, ahorra menos bytes de lo esperado, ¡pero cualquier byte es mejor que ningún byte!
ricdesi
1
Puede reemplazar $b="Bogey";con $b=Bogey;para guardar 2 bytes. Además, reemplace su $s-1? ... : ...;con un echo ... ?: ...;. Aquí está la versión larga de 151 bytes: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
No tenía idea de que podía engañar a los literales de cadena, ordenado.
ricdesi
1
Aquí hay un trabajo más corta y (posiblemente) una: 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);. Básicamente: se eliminó la declaración de función, se eliminaron explore, se eliminaron las comillas, se utilizó una matriz y se utilizó $argv. El código final tiene 139 bytes de longitud.
Ismael Miguel
10

05AB1E , 91 90 bytes

Código:

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

Explicación:

Parte 1:

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

Parte 2:

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

Esto es lo mismo que "Condor Albatross Eagle Birdie Par 0Bogey Double0Bogey Triple0Bogey"usar la compresión de cadenas y la interpolación de cadenas. Luego nos dividimos en espacios, usando ð¡.

Parte 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

Descubierto muchos errores, utiliza CP-1252 codificación .

Pruébalo en línea!

Adnan
fuente
... Whoa Bien hecho.
gato
2
@tac ¡Gracias! :)
Adnan
Este código se parece a los mensajes aleatorios de Unicode que obtienes cuando instalas un archivo .exe que no está en inglés (si tienes el inglés como tu idioma en Windows). ¡Sin embargo, se ve espectacular!
clismique
@DerpfacePython Jaja, los mensajes aleatorios unicode son parcialmente parte del código y la otra parte es parte de un mensaje comprimido.
Adnan
6

Vitsy, 131 bytes

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

Explicación:

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.

Esto funciona descubriendo cuál es la puntuación en relación con el par, luego ejecuta diferentes líneas (y gana diferentes cadenas) de las mismas.

¡Pruébelo en línea!

Modo detallado (para cacas y risas):

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
fuente
"Empuje 9. Esto obliga a cualquier elemento mayor que 8 a ser 9." Wat?
gato
@tac Esto es para forzar la entrada que resultaría en "Jaja, tu perdedor" para ir a la línea que contiene "Jaja, tu perdedor".
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"

Asigne a una variable f=p=>s=>, por ejemplo , luego llámela así: f(6)(2)primero Par, luego puntuación

Puede acortarse combinando el "Bogey"s.

ETHproducciones
fuente
Un ejemplo de combinación de bogeys es: ",Double ,Triple ".split`,`[k-1]+"Bogey"where k=s-p.
user48538
¿Puedo usar su enfoque en mi solución?
user48538
@ zyabin101 que no se desaconseja, siempre y cuando no sea un plagio absoluto
gato
@ zyabin101 Gracias, veré si eso lo hace más corto. Y sí, siéntase libre de usar este enfoque en su respuesta.
ETHproductions
Ya estoy usando esto.
user48538
4

LittleLua - 160 Bytes (no competitivo)

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])

Estoy relativamente seguro de que hice esto bien.

Acepta dos enteros, par y puntuación del jugador.

La versión de Little Lua que solía hacer esto se cargó después de publicar este desafío, pero no se editó después. Es relativamente obvio por el código que no se ha agregado nada para simplificar este desafío

Información de LittleLua:

Una vez que esté satisfecho con los complementos integrados y la funcionalidad de Little Lua, la fuente estará disponible junto con una página de información.

LittleLua V0.02

Skyl3r
fuente
2
Esto no es competitivo porque el archivo se cargó en Dropbox 2 horas después de que se publicó el desafío.
Mego
2
github.com es mucho mejor en el alojamiento de código ...
cat
Absolutamente, no he tenido la oportunidad de configurarlo.
Skyl3r
3

Mouse-2002 , 223 207 bytes

Eliminar comentarios probablemente ayudaría ...

??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"]$

Sin 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"
]


$
gato
fuente
2

bash, 150 136 bytes

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

Prueba de funcionamiento:

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

¡Gracias a Dennis por 14 bytes!

Pomo de la puerta
fuente
1

Python 2, 186 179 158 bytes

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])]

EDITAR 1: se agregó el caso "agujero en uno" que falta ...

EDIT 2: golfed algunos bytes (gracias a tac)

Max
fuente
1
Una lambda sería más corta, también vea consejos para jugar golf en Python
gato
puedes soltar el espacio entre 4yelse
cat
1
Si modifica el algoritmo, puede indexar una lista en lugar de un dict
cat
puede soltar el espacio entre printy {, y si usa un punto y coma para poner el a=y printen la misma línea, puede rasurar un byte de espacio en blanco
gato
1
@tac en realidad "c = lambda x, y:" es más largo que "def c (x, y):", gracias por las otras sugerencias
Max
1

Haskell - 131 bytes (contando nueva línea)

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

lines es la única forma en que puedo pensar en el golf en una lista de cadenas que deben contener espacios con acceso solo para Prelude delimitadores de dos caracteres.

Aún así, Haskell no suele ser tan competitivo (al menos en comparación con los idiomas generales).

Steven Armstrong
fuente
Puedes hacer importlo que quieras, no solo los incorporados
gato el
1

Python 2.7, 226 bytes

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]

Es difícil encontrar un código corto de Python cuando llegas tarde a la fiesta, lo mejor que se me ocurre.

janrn
fuente
Las dos últimas líneas deben cambiarse a una:[print r for r in l if r]
cat
1

C, 198 bytes

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
fuente
0

Japt, 97 bytes

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

Contiene un montón de no imprimibles. ¡Pruébelo en línea!

Cómo funciona

`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
ETHproducciones
fuente
0

Python 2.7.2, 275 bytes

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

Ungolfed / explicado:

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?

Mi segunda respuesta, irónicamente, ambos están en Python. Consejos de golf apreciados!

OldBunny2800
fuente
Pista: ni siquiera lo necesitas b.
Leaky Nun
Voy a editar, solo nrn.
OldBunny2800
Mira esto .
Leaky Nun
Además, pensé que Python 2 envía tu entrada intautomáticamente.
Leaky Nun
-2

Python 2, 302 284 bytes

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 se permitiera el espacio en blanco inicial, serían 282 bytes:

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"
usuario48538
fuente
12
El uso de una matriz de cadenas te ayudaría seriamente aquí.
Addison Crump
De acuerdo, esto parecía realmente no optimizado. Cualquier combinación de términos / resultados acortaría la respuesta.
ricdesi
¿Por qué necesitas raw_input ()? ¿No puedes usar input ()?
OldBunny2800
@ricdesi Combiné los bogeys.
user48538