Code Golf Golf Golf

24

Golf Challenge

Étant donné le "vert" ASCII ci-dessous.

|          |
|  |>      |
|  |       |
|  O       |
|          |
|          |
|          |
|          |
|          |
|          |

Soit |Dénoter un mur
Soit |Dénoter la moitié du mât de drapeau
Soit >Dénoter le drapeau sur le mât
Soit ODénoter le trou
Soit oDénoter le ballon

Les dimensions du "vert" sont de 10x10. Il y a dix espaces entre les deux murs |.
Il y a aussi dix espaces, vides ou non entre le haut et le bas du green.

Défi

Saisissez une valeur x et y ou générez deux nombres aléatoires pour «tirer» une balle de golf sur le green.
Si les x, y générés ne touchent pas le trou ou la sortie du mât / drapeau "Try Again!"
Si le x, y généré atteint la sortie du trou "Hole in One!"
si le x, y généré atteint la sortie du pôle "Lucky Shot!"
si le x, y généré atteint la sortie du drapeau "Close One!"

Après le tir, affichez l'emplacement de la balle sur le green par un o, en remplaçant tout personnage qu'elle a touché. Également afficher le dicton respectif ci-dessus.

Exemples:

//Hole in one example, the O was replaced with a o
Randomed x = 3
Randomed y = 4

"Hole in One!"

|          |
|  |>      |
|  |       |
|  o       |
|          |
|          |
|          |
|          |
|          |
|          |


//Clone example, the top half of the pole was replaced with a o
Randomed x = 3
Randomed y = 2

"Lucky Shot!"

|          |
|  o>      |
|  |       |
|  O       |
|          |
|          |
|          |
|          |
|          |
|          |

//Lucky Shot example, the > was replaced with a o
Randomed x = 4
Randomed y = 2

"Close One!"

|          |
|  |o      |
|  |       |
|  O       |
|          |
|          |
|          |
|          |
|          |
|          |

//Try Again example, the <space> was replaced with a o
Randomed x = 5
Randomed y = 1

"Try Again!"

|     o    |
|  |>      |
|  |       |
|  O       |
|          |
|          |
|          |
|          |
|          |
|          |

Amusez-vous et bonne chance et comme il s'agit de le code le plus court gagne!

jacksonecac
la source
Le drapeau / mât est-il toujours à la même position?
corvus_192
Vous pouvez le laisser où il est, ou vous amuser avec lui et le déplacer. Je pensais que ce serait trop pénible de le déplacer, mais je pense que cela ajoute un défi amusant. Si vous le déplacez, je m'assurerais que 2 <h <= 10 où h est l'indice de hauteur du trou. De cette façon, le drapeau n'est pas sur l'écran.
jacksonecac
2
Soit prendre deux paramètres i et k où 0 <i <= 10 et 0 <k <= 10 ou régler i et k en utilisant la génération de nombres aléatoires
jacksonecac
1
@ corvus_192 absolument
jacksonecac
1
Ces chaînes de sortie sont douloureuses pour le golf de code. Puisqu'il n'y a pas encore de réponses, envisagez de permettre de les prendre comme entrée
Luis Mendo

Réponses:

10

JavaScript (ES6) 210 208 193 184 octets

f=(a,b)=>((s=[...(`
|          |`).repeat(10)])[17]=s[30]='|',s[18]='>',s[43]=0,s[a+=1+b*13]='o',(a-17&&a-30?a-18?a-43?'Try Again!':'Hole in One!':'Close One!':'Lucky Shot!')+s.join``)
  • -9 octets merci à Hedi

Démo

sbisit
la source
8

Gelée , 78 octets

ċЀ®Ḍị“ȷþḄ7Ẋ“þẹƊ⁴ḳL&Ṛ“qĠṂ®““ÞzḊṁġ“»;”!Ṅṛ
⁶ẋ“€¡®µC‘ż“|>|O”©F”o⁸¦Ç
ṭḌ‘Çs⁵j@€⁾||Y

Faites une CAPACITES jeu ou une merde-Shoot à TryItOnline!

(Crap-shoot coûte plus d'octets).

Comment?

ṭḌ‘Çs⁵j@€⁾||Y - Main link: x, y (0-based)
ṭ             - tack            -> [y, x]
 Ḍ            - cast to decimal -> 10y+x
  ‘           - increment       -> 10y+x+1
   Ç          - call last link (1) as a monad
    s⁵        - split into chunks of size 10 (rows of green display)
         ⁾||  - literal ['|','|']
      j@€     - join €ach  with reversed @rguments (make the border)
            Y - join with line feeds
              - implicit print

⁶ẋ“€¡®µC‘ż“|>|O”©F”o⁸¦Ç - Link 1, Make green & place the ball: decimal 1-based location
  “€¡®µC‘               - code page indexes -> [12,0,8,9,67]
⁶                       - literal ' '
 ẋ                      - repeat (vectorises)
         ż              - zip with
          “|>|O”        - literal ['|','>','|','O']
                ©       -     and place the flag parts into the register
                 F      - flatten list
                     ¦  - apply to index at
                    ⁸   - input value
                  ”o    - literal 'o'
                      Ç - call the last link (2) as a monad

ċЀ®Ḍị“ȷþḄ7Ẋ“þẹƊ⁴ḳL&Ṛ“qĠṂ®““ÞzḊṁġ“»;”!Ṅṛ - Link 2, Print message: green with ball
   ®                                     - read register (the flag parts)     | > | O
ċЀ                                      - count occurrences e.g. HoleInOne: [2,1,2,0]
    Ḍ                                    - cast to decimal                  ->2120
     ị                                   - index into (1-based & modular) 2120 % 6 = 2
      “ȷþḄ7Ẋ“þẹƊ⁴ḳL&Ṛ“qĠṂ®““ÞzḊṁġ“»      - compressed list of (6) strings:
              ...["Lucky Shot","Hole in One","Try Again","","Close One",""]
                                   ;     - concatenate with
                                    ”!   - literal '!'
                                      Ṅ  - print with linefeed
                                       ṛ - yield right argument (the green)
Jonathan Allan
la source
8

Python 2, 290 264 262 252 248 245 octets

Ce n'est pas joli et ce n'est pas court mais je suis fatigué et c'est la première seule réponse Python. Saisissez la prise de vue au format x, y.

modifier

Golfé 26 en redéfinissant la façon dont la liste est construite. Toujours pas de chance avec la longue déclaration if.

-2 en remplaçant le long si par un dictionnaire et un plus court si.

-10 avec merci à @ Noodle9 - je l'avais manqué :)

-4 - merci encore :)

Encore 3 de réduction. Merci.

x,y=input();a=[' ']*120;a[15]=a[27]='|';a[16],a[39],b='>','0',x+y*12
a[b],k='o',"Lucky Shot!";l={16:"Close One!",15:k,27:k,39:"Hole in One!"}
print l[b]if b in l else"Try Again!"
for z in range(10):c=z*12;a[c]=a[c+11]='|';print''.join(a[c:c+12])

Pour toute personne intéressée par la logique, sans commentaires (1316 octets mais tient facilement sur un disque de 3,5 pouces si quelqu'un s'en souvient):

x,y=input()                                     #Get the input as a tuple
a=[' ']*120                                     #Create a great big list of spaces for the whole green
a[15]=a[27]='|'                                 #Put the flag pole in place
a[16]='>'                                       #Add the flag
a[39]='0'                                       #Add the hole
b=x+y*12                                        #Get the absolute position in the list of the input tuple 
a[b]='o'                                        #Place the ball on the green
k="Lucky Shot!"                                 #Set a variable for k because it is long and we're going to use it twice
l={16:"Close One!",15:k,27:k,39:"Hole in One!"} #Create a dictionary of the comments (using k)
print l[b]if b in l else"Try Again!"            #If the absolute index is in the dict then print it otherwise print the default
for z in range(10):                             #Loop through the length of the green
    c=z*12                                      #Set a variable for the start point of each line
    a[c]=a[c+11]='|'                            #Add the left and right walls
    print''.join(a[c:c+12])                     #Print each line in turn. Because this is in a for loop then Python will deal with newlines

Certainement la première fois pour moi qu'un dictionnaire a été le meilleur format de données dans un défi de golf.

ElPedro
la source
vous pouvez utiliser tout ce qui est lavable comme clé de dictionnaire
Noodle9
6

C, 236 octets

n,m;char*a[]={"Try Again!","Hole in One!","Lucky Shot!","Close One!"};f(x,y){n=130;m=142-y*13-x;puts(a[(m==87)+2*(m==113|m==100)+3*(m==112)]);while(n--)putchar(m==n?111:n%13?n%13==1|n%13==12|n==113|n==100?124:n==112?62:n==87?79:32:10);}

Non golfé:

n,m;
char*a[]={"Try Again!","Hole in One!","Lucky Shot!","Close One!"};
f(x,y){
 n=130;
 m=142-y*13-x;
 puts(a[(m==87) + 2*(m==113|m==100) + 3*(m==112)]); 
 while(n--)
  putchar(m==n?111:n%13?n%13==1|n%13==12|n==113|n==100?124:n==112?62:n==87?79:32:10);
}
Karl Napf
la source
3

Scala, 238 octets

(x:Int,y:Int)=>{val r="<          |\n"
('"'+(if(x==2&y==3)"Hole in One!"else
if(x==2&(y==1|y==2))"Lucky Shot!"else
if(x==3&y==1)"Close One!"else
"Try again!")+"'",(r+"|  |>      |\n|  |       |\n|  O       |\n"+r*6)updated(1+x+13*y,'o'))}

Utilisation de l'indexation zéro.

C'est bien trop lisible :(

Explication:

(x:Int,y:Int)=>{                                      //define an anonymous function
  val r="|          |\n"                                //a shortcut for an empty row
  (                                                     //return a tuple of
    '"'+                                                  //a double quote
    (if(x==2&y==3)"Hole in One!"                          //plus the correct string
    else if(x==2&(y==1|y==2))"Lucky Shot!"
    else if(x==3&y==1)"Close One!"
    else "Try again!"
    )+"'"                                                 //and another quote
  ,                                                     //and
    (r+"|  |>      |\n|  |       |\n|  O       |\n"+r*6) //the field
    updated(1+x+13*y,'o')                                //with the (1+x+13*y)th char replaced with a ball
  )
}

J'ai utilisé la formule 1+x+13*ypour calculer l'index correct, car chaque ligne a une longueur de 13 caractères (2 bordures, une nouvelle ligne et 10 espaces) plus un décalage d'un car (0,0) devrait être le deuxième caractère.

corvus_192
la source
3

Perl, 225 209 octets

$_="|".$"x10 ."|
";$_.=sprintf("|  %-8s|
"x3,"|>","|",O).$_ x6;$d="Try Again!";($x,$y)=@ARGV;say$x==3?$y~~[2,3]?"Lucky Shot!":$y==4?"Hole in One!":$d:$x==4&&$y==2?"Close One!":$d;substr($_,$y*13-13+$x,1)=o;say

Les deux nouvelles lignes littérales économisent chacune un octet. Assez standard. Imprime la déclaration, puis le plateau de jeu.

Gabriel Benamy
la source
3

Charbon de bois , 99 octets

NαNβ× ⁵↑¹⁰‖C←J⁴¦²←>↓²OM⁴↖P⁺⎇∧⁼α³⁼β⁴Hole in One⎇∧⁼α³⁼¹÷β²Lucky Shot⎇∧⁼α⁴⁼β²Close One¦Try Again¦!Jαβo

Prend une entrée basée sur 1, séparée par des espaces, sur stdin. La plupart du code sert à imprimer (l'un des) les quatre messages. Essayez-le en ligne!

Remarque: Le charbon de bois est toujours un travail en cours. Ce code fonctionne à partir de la validation actuelle . S'il cesse de fonctionner à l'avenir (en particulier, si le lien TIO ne fonctionne pas comme prévu), envoyez-moi un ping et j'essaierai d'ajouter une version mise à jour non concurrente qui fonctionne.

Explication

NαNβ       Read two inputs as numbers into variables α and β

               Construct the green and flag:
× ⁵          Print to canvas 5 spaces
↑¹⁰          Print 10 | characters going up
‖C←         Reflect and copy leftward
             At this point, borders of green are complete; cursor is above left wall
J⁴¦²        Jump 4 units right and 2 down
←>           Print the flag, going leftward
↓²           Print the pin (2 | characters), going downward
O            Print the hole
             The last print was rightward by default, which means we're now at (4,4)
M⁴↖         Move 4 units up and left; cursor is above left wall again

               Add the proper message:
⎇∧⁼α³⁼β⁴    If α is 3 and β is 4 (in the hole):
Hole in One  
⎇∧⁼α³⁼¹÷β²  Else if α is 3 and β is 2 or 3 (hit the pin):
Lucky Shot
⎇∧⁼α⁴⁼β²    Else if α is 4 and β is 2 (hit the flag):
Close One
             Else:
¦Try Again
⁺...¦!       Concatenate a ! to the string
P           Print it without changing the cursor position

               Overwrite the appropriate spot with o:
Jαβ         Jump α units right and β units down
o            Print o
DLosc
la source
3

Brain-Flak , 1466 1938 octets

(<()>)<>((()()()()()){}){({}[()]<(((((((()()()()()){})){}{}()){}){})<((()()()()()){}){({}[()]<(((((()()){}){}){}){})>)}{}>)((()()()()()){})>)}{}((((()()){}){}){}()){({}[()]<({}<>)<>>)}{}{}{}(((((()()()()()){})){}{}()){})(((((((()()()()()){})){}{}()){}){})<(((()()()){}){}()){({}[()]<({}<>)<>>)}{}{}>)(((()()()){}){}()){({}[()]<({}<>)<>>)}{}{}(((((()()()){}){}){}){}){<>({}<>)}(<>{}((((({}[()])){}){})){}{}{}()<>{}){({}[()]<({}<>)<>>)}{}({}<(((((((()()()){}){})){}{}())){}{}){<>({}<>)}>)(({}<((({}(((()()){}){}){}()){})[()])>)[((((()()){}){}){}){}]){({}[(((()()){}){}){}]){({}[((()()()){}()){}]){{}{}(((((((((()()()){}()){}){}()){}){})[()()()()()])[(()()()){}()])<(((((()()()()()){}){}){}()){}())(((((()()){}){}){}){})>(((()()){}){}){}())(([((()()()){}()){}](({})<>)<>)[((()()){}){}])((<>{}<>[()()()()])[(((()()()()()){}){}){}()])<>}{}{{}((((((((((()()()){}){}){}()){}){}())<>)<>((()()())){}{})[(((()()()()()){})){}{}()])<(((((()()){}){}){}){})((((<>{}<>)((()()()){}()){})[()()()()])[()()()])>[((()()()){}){}])<>}}{}{{}((((((((()()()){}){}){}()){}){}())((()()())){}{})[(((()()()()()){})){}{}()])((((((()()){}){}){}){})<(((((()()()()()){}){({}[()])}{}){})[()()()()()])>)((((((((()()()){}){}){}()){}){}())(()()()){}())()()())((((((()()()){}){}){})){}{})<>}{}}{}{{}(((((((()()()()()){}){({}[()])}{}){})[()()()()()])[((()()){}){}])(()()()){})(((((((((((()()){}){}){}){})))({}<({}{}())>)[()()()()]){}())[(()()()){}()])[(((()()()()()){})){}{}])<>}<>(((((()()){}){}){}()){})

Essayez-le en ligne!


Ai-je gagné?

MegaTom
la source
Vous semblez avoir un octet nul en cours d'impression à la fin de la première ligne de sortie.
0 '27
@ 1000000000 oui. J'ai corrigé cela avec ma dernière mise à jour. Merci d'avoir fait remarquer cela.
MegaTom
2

TI-Basic, 183 octets

Input X
Input Y
X+1➡X
ClrHome
For(I,1,10
Output(I,1,"|
Output(I,12,"|
End
Output(2,4,"|>
Output(3,4,"|
Output(4,4,"O
Output(Y,X,"o
13
Output(1,Ans,"TRY AGAIN!
If X=4 and Y=4
Output(1,Ans,"HOLE IN ONE!
If X=5 and Y=2
Output(1,Ans,"CLOSE ONE!
If Y=2 or Y=3 and X=4
Output(1,Ans,"LUCKY SHOT!

Dieu merci, TI-Basic utilise des jetons.

Le |ne peut normalement pas être tapé, mais il est dans le jeu de caractères.

Veuillez me faire savoir si le résultat de la prise de vue doit absolument être en minuscules.

J'ajouterai une capture d'écran d'un exemple de résultat de programme plus tard.

DanTheMan
la source
2

Groovy - 235 octets

Ma première tentative - Une fermeture groovy acceptant 2 entiers de 0 à 9 comme coordonnées X et Y pour le plan.

{j, k-> j ++; c = ''; b = '|'; f = '>'; h = 'O'; s = ''; v = [2: b, 3: b, 4: h ]; (0..9) .chaque {y-> l = (b + s * 10 + '| \ n'). Chars; l [3] = v [y]?: S; l [4] = y == 2? f: s; if (k == y) {m = [(s): 'Try Again!', (b): 'Lucky Shot!', (f): 'Close One!', (h): 'Hole In One!'] ["" ​​+ l [j]]; l [j] = 'o'}; c + = l}; c + = m}
GolfIsAGoodWalkSpoilt
la source
2

Dyalog APL , 147 (ou 127) octets

Prend (y, x) comme argument.

{G10 10''
G[⍳4;3]←' ||O'
G[2;4]←'>'
G[⊃⍵;⊃⌽⍵]←'o'                G[y;x]←
⎕←'|',G,'|'                  Print G with sides
4 3≡⍵:'Hole in One!'         If (y,x)  (4,3)
(⊂⍵)∊2 3∘.,3:'Lucky Shot!'   If (y,x)  {(2,3), (2,3)}
2 4≡⍵:'Close One!'
'Try Again!'}                Else

À partir de la version 16.0, nous pouvons presque diviser par deux le nombre d'octets avec le nouveau @ opérateur;

@ place l'opérande gauche dans la position de l'opérande droit dans l'argument de droite: NewChars @ Positions ⊢ Data

{⎕←'|','|',⍨' ||O>o'@((2 4)⍵,⍨3,⍨¨⍳4)⊢10 10''
4 3≡⍵:'Hole in One!'
(⊂⍵)∊2 3∘.,3:'Lucky Shot!'
2 4≡⍵:'Close One!'
'Try Again!'}

Code légèrement modifié pour le rendre autorisé dans TryAPL:

Trou en un , Lucky Shot 1 , Lucky Shot 2 , Close One , Aléatoire

Adam
la source
1

Turtled , 164 bytes

Encore une fois, mettant en valeur l'équilibre de Turtlèd entre golfeur et verbosité pour les choses les plus simples (comme incrémenter un nombre), Turtlèd bat tout sauf les langages du golf.

6;11[*'|:'|>;<u]'|rrr'O8:'|u'|>;'|ddd'|l'|uuu<"|>":l'|u'|>11;'|?<:?;( #Try Again!#)(>#Close One!#)(|#Lucky Shot!#)(O#Hole in One!#)'o[|r][ u]dl[|l][ u]u@"-,r["+.r_]

Essayez-le en ligne

Notez qu'il est indexé à moitié zéro et à moitié indexé; x est un indexé, y est indexé zéro; 3,3 est un trou en un

Citron destructible
la source
1

R, 230 226 octets

M=matrix("|",10,10);M[2:9,]=" ";M[34]="0";M[4,2:3]="f";M[15]=">";function(x,y){m=switch(M[y,x],">"="Close One","f"="Lucky Shot","0"="Hole In One","Try again");M[y,x]="o";cat(m,"!\n",sep="");cat(gsub("f","|",M),sep="",fill=10)}

Merci à @billywob pour -2 octets, remarquer M[a,b]équivaut àM[c] dans quelques cas.

Ennuyeusement, les deux catappels (!) Ne peuvent pas être concat confondus en un seul, car l' fillargument gâche le message. Argh!

JDL
la source
1
Déplacez la création de la matrice à l'intérieur de la fonction et créez-en une sans nom:function(x,y){M=matrix("|",10,10);M[2:9,]=" ";M[34]="0";M[4,2:3]="f";M[15]=">";m=switch(M[y,x],">"="Close One","f"="Lucky Shot","0"="Hole In One","Try again");M[y,x]="o";cat(m,"!\n",sep="");cat(gsub("f","|",M),sep="",fill=10)}
Billywob
Oh, assez bien. Attention, je ne pense pas avoir besoin f=de ma solution de toute façon. Supprimé.
JDL