Кол Оцінка гольфу


22

П’ятниця ... так що давайте підемо в гольф! Напишіть код, який визначає забиття гравця на отвір у грі в гольф. Кодом може бути функція або вся програма. Як підказує жанр, виграє найкоротший код.

Введення (параметри або stdin, ваш вибір):

  • Ціле число, яке представляє нори нори, гарантовано буде між 3 і 6
  • Ціле число, що представляє рахунок гольфіста, гарантовано становитиме від 1 до 64

Вихід (друк для виведення або повернення, зворотний новий рядок, дозволений, але не обов'язковий, ваш вибір):

  • якщо оцінка дорівнює 1, виведіть "Отвір в одному"
  • якщо оцінка == par - 4 і par> 5, виведіть "Condor"
  • якщо оцінка == par - 3 і par> 4, виведіть "Albatross"
  • якщо оцінка == par - 2 і par> 3, виведіть "Орел"
  • якщо бал == par - 1, виведіть "Пташка"
  • якщо бал == номінал, виведіть "Пар"
  • якщо оцінка == par + 1, виведіть "Bogey"
  • якщо бал == par + 2, виведіть "Double Bogey"
  • якщо оцінка == par + 3, виведіть "Потрійний волхв"
  • якщо бал> par + 3, вивести "Ха-ха ти програв"

EDIT Вітаю Денніса за найкоротшу відповідь!


34
Мені завжди було цікаво, що було після потрійного багна.
ThisSuitIsBlackNot

3
До речі, найбільша номінальна величина - 7, а не 6.
Джошуа

4
@Joshua Мене тимчасово збентежили, чому ви коментували замість того, щоб редагувати власну публікацію. Тоді це мене вдарило. : P
Rɪᴋᴇʀ

@RikerW імена Джоша настільки ж близькі, як і їхня репутація: D
кіт

2
Чи можна ввести будь-який порядок?
Дверна ручка

Відповіді:


6

Желе , 61 байт

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

Спробуйте в Інтернеті!

Фон

Для цього використовується статичне стиснення словника Jelly. Ви можете знайти компресор тут . Сюди,

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

і

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

так добре як

“µḣ⁻×⁵ñBƑ»

і

“Hole in one”

рівнозначні.

Як це працює

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

Вітаю найкоротшу відповідь!
Джош

13

PHP 5.3+, 173 167 166 159 156 151 127 121 байт

echo[Condor,Albatross,Eagle,Birdie,Par,$b=Bogey,"Double $b","Triple $b","Haha you loser"][min(4+$s-$p,8)]?:"Hole in one";
Безповідна версія, 139 137 байт
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";

Встановіть змінні $score та $par перед тим, echoяк ви вимкнетесь.

вибухнув вигляд
echo [Condor,
      Albatross,
      Eagle,
      Birdie,
      Par,
      $b = Bogey,
      "Double $b",
      "Triple $b",
      "Haha you loser"][ min( 4+$s-$p,8 ) ]
  ?: "Hole in one";

Редагує
-6: не зберігає масив, а просто викликає його за потреби.
-1: Перегортання потрійника навколо.
-7: Найменша $s-$pз $s>1це -4, так що max()не є необхідним, так як 4+$s-$p >= 0.
-3:, Array -> explode() дякую CoolestVeto!
-5: Читливий рядок буквально невизначений постійний плюс $r[-1] -> false, дякую Ісмаелю Мігелю!
-24: Перехід від explode()функції до printf/ %sналаштування, з деякими налаштуваннями, більше завдяки Ісмаелю Мігелю за зміну напрямку.
-6: Swerve , ми знову повертаємось echo!


1
Чи можете ви перетворити його в один рядок і розділити на довільний символ?
Аддісон Кримп

@CoolestVeto Власне кажучи, я можу. Дивно, це економить менше байтів, ніж очікувалося, але будь-які байти краще, ніж жодні байти!
ricdesi

1
Ви можете замінити $b="Bogey";з , $b=Bogey;щоб зберегти 2 байти. Крім того, замініть свій $s-1? ... : ...;на echo ... ?: ...;. Ось версія з 151 байтом: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";}
Ісмаель Мігель

Не мав ідеї, що ти можеш обдурити струнні літерали, акуратно.
ricdesi

1
Ось (можливо) і робоча коротше один: 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);. В основному: вилучили декларацію функції, видалили explore, вилучили лапки, використали масив та використали $argv. Остаточний код - 139 байт.
Ісмаїл Мігель

10

05AB1E , 91 90 байт

Код:

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

Пояснення:

Частина 1:

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

Частина 2:

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

Це те саме, що "Condor Albatross Eagle Birdie Par 0Bogey Double0Bogey Triple0Bogey"використовувати стискання рядків і інтерполяцію рядків. Потім розділимо пробіли, використовуючи ð¡.

Частина 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

Виявив багато помилок, використовує кодування CP-1252 .

Спробуйте в Інтернеті!


... Ого! Чудово зроблено.
кіт

2
@tac Дякую! :)
Аднан

Цей вид начебто схожий на випадкові повідомлення Unicode, які ви отримуєте при встановленні не-англійської речі .exe (якщо у ваших речах Windows англійською мовою є мова). Схоже, ефектно!
клісмік

@DerpfacePython Haha, випадкові повідомлення Unicode частково є частиною коду, а інша частина - частиною стислого повідомлення.
Аднан

6

Віци, 131 байт

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

Пояснення:

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.

Це працює, з'ясовуючи, який показник відносно номіналу, а потім виконує різні рядки (і отримує різні рядки) їх.

Спробуйте в Інтернеті!

Докладний режим (для пупок і хихикань):

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;

"Натисніть 9. Це змушує будь-які предмети більше 8 дорівнювати 9." Ват?
кіт

@tac Це змушує вхід, який призведе до "Ха-ха ти програв", перейти до рядка, що містить "Ха-ха ти програв".
Аддісон Кримп

5

JavaScript (ES6), 125 124 байт

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

Призначте змінну, наприклад f=p=>s=>, потім назвіть її так: f(6)(2)Спочатку пар, потім оцінка.

Можна скоротити, комбінуючи "Bogey"s.


Прикладом поєднання богерів є: ",Double ,Triple ".split`,`[k-1]+"Bogey"де k=s-p.
user48538

Чи можу я використати ваш підхід у своєму рішенні?
user48538

@ zyabin101 це не відволікає, якщо це не відвертий плагіат
кішка

@ zyabin101 Дякую, я побачу, якщо це робить його коротшим. І так, сміливо використовуйте такий підхід у своїй відповіді.
ETHproductions

Я вже використовую це.
user48538

4

LittleLua - 160 байт (неконкурентоспроможний)

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

Я відносно впевнений, що я зробив це правильно.

Приймає два цілі числа, номінальний і рахунок гравця.

Версія Little Lua, яку я використовував для цього, була завантажена після публікації цього виклику, але після цього не була відредагована. З коду відносно очевидно, що нічого не було додано для спрощення цього завдання

Інформація про LittleLua:

Як тільки я задоволений вбудованими модулями та функціональністю Little Lua, джерело буде доступне разом із інформаційною сторінкою.

LittleLua V0.02


2
Це є неконкурентоспроможним, оскільки файл було завантажено в Dropbox через 2 години після опублікування виклику.
Мего

2
github.com набагато краще в хостингу коду ...
кіт

Абсолютно, я просто не мав шансу створити це.
Skyl3r

3

Миша-2002 , 223 207 байт

Видалення коментарів, ймовірно, допоможе ...

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

Безголівки:

? ? 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 байт

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

Пробіг:

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

Дякуємо Деннісу за 14 байт!


1

Пітон 2, 186 179 158 байт

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: додано пропущений "отвір в одному" випадку ...

EDIT 2: вийшов кілька байтів (завдяки tac)


1
А лямбда буде коротше, також дивіться поради щодо гри в гольф на Python
кішка

ви можете скинути пробіл між 4іelse
кішка

1
Якщо ви модифікуєте алгоритм, ви можете просто проіндексувати список, а не диктат
кіт

ви можете опустити пробіл між printі {, і якщо ви використовуєте крапку з комою для того, щоб розмістити a=та printна одній лінії, ви можете поголити байт пробілу
кішка

1
@tac насправді "c = lambda x, y:" довше, ніж "def c (x, y):", дякую за інші пропозиції
Макс

1

Haskell - 131 байт (рахуючи новий рядок)

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це єдиний спосіб, коли я можу придумати гольф у списку рядків, які мають містити пробіли з доступом лише до Preludeтаких наклеєних двома роздільниками символів.

Проте Haskell зазвичай не є конкурентоспроможним (принаймні щодо загальних мов).


Ви можете importбудь-що, що завгодно, не тільки вбудовані
кішка

1

Python 2.7, 226 байт

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]

Важко придумати короткий код пітона, коли ти спізнишся на вечірку, найкраще, що я міг придумати.


Останні два рядки слід змінити на один:[print r for r in l if r]
кіт

1

C, 198 байт

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 байт

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

Містить купу недрукованих матеріалів. Перевірте це в Інтернеті!

Як це працює

`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 байт

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

Необурені / пояснив:

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?

Моя друга відповідь, як не дивно, обидва є в Python. Поради щодо гольфу високо оцінені!


Підказка: вам навіть не потрібно b.
Leaky Nun

Я збираюся редагувати, просто nrn.
OldBunny2800

Погляньте на це .
Leaky Nun

Крім того, я подумав, що Python 2 автоматично передає ваш вклад int.
Leaky Nun

-2

Python 2, 302 284 байт

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"

Якщо дозволено пробіл білого простору, це буде 282 байти:

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
Використання рядкового масиву серйозно допоможе вам тут.
Аддісон Кримп

Домовились, це здавалося дійсно неоптимізованим. Будь-яке поєднання термінів / результатів скоротить відповідь.
ricdesi

Навіщо потрібен raw_input ()? Ви не можете просто використовувати input ()?
OldBunny2800

@ricdesi Я поєднав богерів.
user48538
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.