Code Golf Golf Score


22

Es ist Freitag ... also lass uns Golf spielen gehen! Schreiben Sie einen Code, der die Punktzahl des Spielers für ein Loch in einem Golfspiel festlegt. Der Code kann entweder eine Funktion oder ein gesamtes Programm sein. Wie das Genre andeutet, gewinnt der kürzeste Code.

Eingabe (Parameter oder stdin, Ihre Wahl):

  • Eine Ganzzahl, die das Par des Lochs darstellt und garantiert zwischen 3 und 6 liegt
  • Eine Ganzzahl, die die Punktzahl des Golfspielers darstellt und garantiert zwischen 1 und 64 liegt

Ausgabe (Drucken auf Standardausgabe oder Rückgabe, Zeilenumbruch zulässig, aber nicht erforderlich, Ihre Wahl):

  • Wenn die Punktzahl 1 ist, wird "Hole in one" ausgegeben.
  • wenn score == par - 4 und par> 5, "Condor" ausgeben
  • wenn score == par - 3 und par> 4, "Albatross" ausgeben
  • wenn score == par - 2 und par> 3, "Eagle" ausgeben
  • wenn score == par - 1, "Birdie" ausgeben
  • wenn score == par, gib "Par" aus
  • wenn score == par + 1, gib "Bogey" aus
  • wenn score == par + 2, "Double Bogey" ausgeben
  • wenn score == par + 3, "Triple Bogey" ausgeben
  • wenn Punktzahl> Par + 3, Ausgabe "Haha du Verlierer"

EDIT Herzlichen Glückwunsch an Dennis zur kürzesten Antwort!


34
Ich habe mich immer gefragt, was nach Triple Bogey ist.
ThisSuitIsBlackNot

3
Übrigens ist das größte Par 7 nicht 6.
Joshua

4
@Joshua Ich war vorübergehend verwirrt darüber, warum du deinen eigenen Beitrag kommentiert anstatt bearbeitet hast. Dann traf es mich. : P
Rɪᴋᴇʀ

@ RikerW die beiden Josh Namen sind so nah wie ihr Ruf: D
Katze

2
Kann die Eingabe in beliebiger Reihenfolge erfolgen?
Türklinke

Antworten:


6

Jelly , 61 Bytes

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

Probieren Sie es online!

Hintergrund

Hierbei wird die statische Wörterbuchkomprimierung von Jelly verwendet. Einen Kompressor finden Sie hier . Diesen Weg,

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

und

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

ebenso gut wie

“µḣ⁻×⁵ñBƑ»

und

“Hole in one”

sind gleichwertig.

Wie es funktioniert

_«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”.

Herzlichen Glückwunsch zur kürzesten Antwort!
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";
Kündigungsfreie Version, 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";

Setzen Sie die Variablen $score und $par vor echound schon geht es los.

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

Bearbeitungen
-6: Das Array wird nicht gespeichert, sondern nur bei Bedarf aufgerufen.
-1: Drehe den Ternär um.
-7: Das niedrigste $s-$pmit $s>1ist -4, also max()ist das nicht notwendig, da 4+$s-$p >= 0.
-3 Array -> explode() :, danke CoolestVeto!
-5: Cheaty String wörtlich undefinierte Konstante plus $r[-1] -> false, danke Ismael Miguel!
-24: Wechsel von einer explode()Funktion zu einem printf/ %ssetup, mit ein paar Verbesserungen, mehr Dank an Ismael Miguel für die Richtungsänderung.
-6: Swerve , wir sind echowieder da!


1
Können Sie es in eine Zeichenfolge umwandeln und durch ein beliebiges Zeichen teilen?
Addison Crump

@ CoolestVeto In der Tat kann ich. Komischerweise werden weniger Bytes als erwartet gespart, aber alle Bytes sind besser als keine Bytes!
Ricdesi

1
Sie können ersetzen $b="Bogey";mit $b=Bogey;zu speichern 2 Byte. Ersetzen Sie auch Ihr $s-1? ... : ...;durch ein echo ... ?: ...;. Hier ist die 151 Byte lange Version: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

Hatte keine Ahnung, dass Sie String-Literale betrügen könnten, ordentlich.
Ricdesi

1
Hier ist eine (möglicherweise) Arbeits- und kürzere: 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);. Grundsätzlich gilt: Die Funktionsdeklaration wurde entfernt explore, die entfernt, die Anführungszeichen entfernt, ein Array verwendet und verwendet $argv. Der endgültige Code ist 139 Byte lang.
Ismael Miguel

10

05AB1E , 91 90 Bytes

Code:

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

Erläuterung:

Teil 1:

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

Teil 2:

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

Dies entspricht der "Condor Albatross Eagle Birdie Par 0Bogey Double0Bogey Triple0Bogey"Verwendung von String-Komprimierung und String-Interpolation. Dann teilen wir uns mit ð¡.

Teil 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

Hat viele Fehler entdeckt und verwendet die CP-1252- Codierung.

Probieren Sie es online!


... Whoa. Schön gemacht.
Katze

2
@ tac Danke! :)
Adnan

Dieser Code sieht aus wie die zufälligen Unicode-Meldungen, die Sie erhalten, wenn Sie eine nicht englische .exe-Datei installieren (wenn Sie Englisch als Sprache für Windows-Dateien verwenden). Sieht aber spektakulär aus!
Clismique

@DerpfacePython Haha, die zufälligen Unicode-Nachrichten sind teilweise Teil des Codes und der andere Teil ist Teil einer komprimierten Nachricht.
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"

Erläuterung:

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.

Dies funktioniert, indem man herausfindet, was die Punktzahl relativ zum Par ist, und dann verschiedene Linien ausführt (und verschiedene Saiten gewinnt).

Probieren Sie es online!

Ausführlicher Modus (für Kacke und Kichern):

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;

"Drücken Sie 9. Dadurch werden alle Elemente, die größer als 8 sind, zu 9." Wat?
Katze

@tac Dies ist, um die Eingabe zu erzwingen, die zu "Haha du Verlierer" führen würde, um zu der Zeile zu gelangen, die "Haha du Verlierer" enthält.
Addison Crump

5

JavaScript (ES6), 125 - 124 Byte

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

Weisen Sie eine Variable zu f=p=>s=>, und nennen Sie sie dann wie folgt: f(6)(2)Zuerst Par, dann Score.

Kann durch Kombination der "Bogey"s gekürzt werden .


Ein Beispiel für die Kombination der Drehgestelle ist: ",Double ,Triple ".split`,`[k-1]+"Bogey"wo k=s-p.
user48538

Kann ich Ihren Ansatz in meiner Lösung verwenden?
user48538

@ zyabin101 das wird nicht entmutigt, solange es nicht geradezu Plagiat ist
Katze

@ zyabin101 Danke, ich werde sehen, ob es dadurch kürzer wird. Und ja, Sie können diesen Ansatz auch in Ihrer Antwort verwenden.
ETHproductions

Ich benutze das schon.
User48538

4

LittleLua - 160 Bytes (nicht wettbewerbsfähig)

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

Ich bin mir ziemlich sicher, dass ich das richtig gemacht habe.

Akzeptiert zwei ganze Zahlen, par und Punktzahl des Spielers.

Die Version von Little Lua, mit der ich das gemacht habe, wurde nach dem Posten dieser Challenge hochgeladen, danach aber nicht mehr bearbeitet. Aus dem Code geht relativ klar hervor, dass nichts hinzugefügt wurde, um diese Herausforderung zu vereinfachen

LittleLua Info:

Sobald ich mit den eingebauten Ins und der Funktionalität von Little Lua zufrieden bin, wird Source zusammen mit einer Infoseite verfügbar sein.

LittleLua V0.02


2
Dies ist nicht wettbewerbsfähig, da die Datei 2 Stunden nach dem Posten der Herausforderung auf Dropbox hochgeladen wurde.
Mego

2
github.com ist viel besser in Code-Hosting ...
Katze

Absolut, ich hatte gerade keine Chance, es einzurichten.
Skyl3r

3

Mouse-2002 , 223 207 Bytes

Das Entfernen von Kommentaren würde wahrscheinlich helfen ...

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

Ungolfed:

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


$

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

Testlauf:

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

Danke an Dennis für 14 Bytes!


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

EDIT 1: das fehlende "hole in one" case hinzugefügt ...

EDIT 2: Einige Bytes ausgelesen (dank TAC)


1
Ein Lambda wäre kürzer, siehe auch Tipps zum Golfen in Python
cat

Sie können das Leerzeichen zwischen 4undelse
cat

1
Wenn Sie den Algorithmus ändern, können Sie einfach Listenindex eines eher als eine dict
Katze

Sie können das Leerzeichen zwischen printund {löschen, und wenn Sie ein Semikolon verwenden, um das a=und printin dieselbe Zeile zu setzen, können Sie ein Byte Leerzeichen rasieren
cat

1
@tac tatsächlich "c = lambda x, y:" ist länger als "def c (x, y):", danke für die anderen Vorschläge
Max

1

Haskell - 131 Bytes (Zeilenvorschub wird gezählt)

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

linesNur so kann ich mir vorstellen, in einer Liste von Zeichenfolgen Golf zu spielen, die Leerzeichen enthalten müssen, die nur auf Preludezwei Zeichenbegrenzer beschränkt sind.

Trotzdem ist Haskell normalerweise nicht so wettbewerbsfähig (zumindest gegenüber allgemeinen Sprachen).


Sie können importalles, was Sie wollen, nicht nur die eingebauten
Katze

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 ist schwer, einen kurzen Python-Code zu finden, wenn Sie zu spät zur Party kommen.


Die letzten beiden Zeilen sollten in eine geändert werden:[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);}

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

Enthält eine Reihe von nicht druckbaren Dateien. Online testen!

Wie es funktioniert

`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

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 / erklärt:

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?

Meine zweite Antwort ist ironischerweise Python. Golftipps erwünscht!


Hinweis: Sie brauchen nicht einmal b.
Undichte Nonne

Ich werde es bearbeiten, nur nrn.
OldBunny2800

Werfen Sie einen Blick auf diese .
Undichte Nonne

Außerdem dachte ich, Python 2 wandelt Ihre Eingaben intautomatisch um.
Undichte Nonne

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

Wenn führender Leerraum zulässig wäre, wären das 282 Byte:

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"

12
Die Verwendung eines String-Arrays würde Ihnen hier sehr helfen.
Addison Crump

Einverstanden, das schien wirklich nicht optimal. Jede Kombination von Begriffen / Ergebnissen würde die Antwort verkürzen.
Ricdesi

Warum brauchst du raw_input ()? Kannst du nicht einfach input () verwenden?
OldBunny2800

@ricdesi Ich habe die Drehgestelle kombiniert.
User48538
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.