Code Golf Golf Golf

24

Golf Challenge

Angesichts der folgenden ASCII "Grün".

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

Lassen |Sie eine Wand bezeichnen
Lassen |Sie die Hälfte der Fahnenstange bezeichnen
Lassen >Sie die Fahne auf der Stange bezeichnen
Lassen OSie das Loch bezeichnen
Lassen oSie den Ball bezeichnen

Die Maße des "Green" betragen 10x10. Es gibt zehn Räume zwischen den beiden Wänden |.
Es gibt auch zehn Leerzeichen zwischen dem oberen und unteren Rand des Grüns.

Herausforderung

Geben Sie einen x- und einen y-Wert ein oder generieren Sie zwei Zufallszahlen, um einen Golfball auf das Grün zu "schießen".
Berührt das erzeugte x, y nicht das Loch oder den Fahnenmast / Fahnenausgang "Try Again!"
Wenn das erzeugte x, y die Lochausgabe "Hole in One!"
wenn das erzeugte x, y den Polausgang "Lucky Shot!"
wenn das erzeugte x, y die Flag-Ausgabe "Close One!" trifft

Geben Sie nach dem Schuss die Position des Balls auf dem Grün durch a aus ound ersetzen Sie alle getroffenen Zeichen. Geben Sie auch den entsprechenden obigen Spruch aus.

Beispiele:

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

Viel Spaß und viel Glück und wie das ist , die kürzesten Code gewinnt!

jacksonecac
quelle
Befindet sich die Fahne / Stange immer in der gleichen Position?
corvus_192
Sie können es lassen, wo es ist, oder etwas Spaß damit haben und es bewegen. Ich dachte, es wäre zu schmerzhaft, um es zu bewegen, aber ich denke, es ist eine lustige Herausforderung. Wenn Sie es verschieben, würde ich sicherstellen, dass 2 <h <= 10, wobei h der Höhenindex des Lochs ist. Auf diese Weise wird die Flagge nicht vom Bildschirm entfernt.
Jacksonecac
2
Nehmen Sie entweder zwei Parameter i und k, wobei 0 <i <= 10 und 0 <k <= 10 ist, oder setzen Sie i und k mithilfe der Zufallszahlengenerierung
jacksonecac,
1
@ corvus_192 absolut
jacksonecac
1
Diese Ausgangssaiten sind für Codegolf schmerzhaft. Da es noch keine Antworten gibt, sollten Sie in Betracht ziehen, diese als Eingabe zuzulassen
Luis Mendo,

Antworten:

10

JavaScript (ES6) 210 208 193 184 Bytes

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 Bytes Danke an Hedi

Demo

sbisit
quelle
8

Jelly , 78 Bytes

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

Spiele ein Skill-Game oder ein Crap-Shoot bei TryItOnline!

(Mistschießen kostet mehr Bytes).

Wie?

ṭḌ‘Ç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
quelle
8

Python 2, 290 264 262 252 248 245 Bytes

Es ist nicht hübsch und nicht kurz, aber ich bin müde und es ist die erste einzige Python-Antwort. Geben Sie die Aufnahme im Format x, y ein.

Bearbeiten

Golfing off 26 durch Neudefinition der Art und Weise, wie die Liste aufgebaut ist. Trotzdem kein Glück mit der langen if-Anweisung.

-2 durch Ersetzen des langen if durch ein Wörterbuch und eines kürzeren if.

-10 danke an @ Noodle9 - ich hatte das verpasst :)

-4 - Nochmals vielen Dank :)

Weitere 3 aus. Vielen Dank.

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

Für alle, die an der Logik interessiert sind und keine Kommentare haben (1316 Bytes, aber trotzdem problemlos auf eine 3,5 "-Diskette passen, wenn sich jemand daran erinnert):

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

Für mich definitiv das erste Mal, dass ein Wörterbuch das beste Datenformat für eine Golf-Herausforderung ist.

ElPedro
quelle
Sie können alles, was hashbar ist, als Wörterbuchschlüssel verwenden
Noodle9
6

C 236 Bytes

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);}

Ungolfed:

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
quelle
3

Scala, 238 Bytes

(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'))}

Null-Indexierung verwenden.

Das ist viel zu lesbar :(

Erläuterung:

(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
  )
}

Ich habe die Formel verwendet 1+x+13*y, um den korrekten Index zu berechnen, da jede Zeile 13 Zeichen lang ist (2 Rahmen, ein Zeilenumbruch und 10 Leerzeichen) und einen Versatz von eins, da (0,0) das zweite Zeichen sein sollte.

corvus_192
quelle
3

Perl, 225 209 Bytes

$_="|".$"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

Die beiden wörtlichen Zeilenumbrüche sparen jeweils ein Byte. Ziemlich normal. Druckt die Erklärung und dann den Spielplan.

Gabriel Benamy
quelle
3

Kohle , 99 Bytes

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

Nimmt eine durch Leerzeichen getrennte 1-basierte Eingabe für stdin auf. Der größte Teil des Codes dient zum Drucken (einer) der vier Nachrichten. Probieren Sie es online!

Hinweis: Holzkohle ist noch in Arbeit. Dieser Code funktioniert ab dem aktuellen Commit . Wenn es in Zukunft nicht mehr funktioniert (insbesondere wenn der TIO-Link nicht wie erwartet funktioniert), rufen Sie mich an und ich werde versuchen, eine nicht konkurrierende aktualisierte Version hinzuzufügen, die funktioniert.

Erläuterung

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
quelle
3

Brain-Flak , 1466, 1938 Bytes

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

Probieren Sie es online!


Habe ich gewonnen?

MegaTom
quelle
Anscheinend wird am Ende der ersten Ausgabezeile ein Null-Byte ausgegeben.
0 '
@ 1000000000 ja. Ich habe das mit meinem letzten Update behoben. Vielen Dank, dass Sie darauf hingewiesen haben.
MegaTom
2

TI-Basic, 183 Bytes

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!

Zum Glück verwendet TI-Basic Token.

Das |kann normalerweise nicht eingegeben werden, aber es befindet sich im Zeichensatz.

Bitte lassen Sie mich wissen, ob das Ergebnis der Aufnahme unbedingt Kleinbuchstaben sein muss.

Ich werde später einen Screenshot eines Beispielprogrammergebnisses hinzufügen.

DanTheMan
quelle
2

Groovy - 235 Bytes

Mein erster Versuch - Ein grooviger Verschluss, der 2 Ganzzahlen von 0 bis 9 als X- und Y-Koordinaten für den Schuss akzeptiert.

{j, k-> j ++; c = ''; b = '|'; f = '>'; h = 'O'; s = ''; v = [2: b, 3: b, 4: h ]; (0..9) .jedes {y-> l = (b + s * 10 + '| \ n'). Zeichen; l [3] = v [y] ?: s; l [4] = y == 2? f: s; if (k == y) {m = [(s): 'Versuch es erneut!', (b): 'Glücksschuss!', (f): 'Schließe einen!', (h): 'Hole In One!'] ["" ​​+ l [j]]; l [j] = 'o'}; c + = l}; c + = m}
GolfIsAGoodWalkSpoilt
quelle
2

Dyalog APL , 147 (oder 127) Bytes

Nimmt (y, x) als 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

Ab Version 16.0 können wir die Byteanzahl mit dem neuen @Operator fast halbieren .

@ Setzt den linken Operanden in die rechten Operandenpositionen im rechten Argument: 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!'}

Leicht modifizierter Code, der in TryAPL zulässig ist:

Hole in One , Glücksschuss 1 , Glücksschuss 2 , Close One , Random

Adam
quelle
1

Schildkröte , 164 Bytes

Turtlèd zeigt einmal mehr, wie gut Turtlèd die Balance zwischen Golf und Ausführlichkeit für die einfachsten Dinge (wie das Erhöhen einer Zahl) hält.

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

Probieren Sie es online aus

Beachten Sie, dass es halb null und halb eins indexiert ist. x ist eins indiziert, y ist null indiziert; 3,3 ist ein Loch in einem

Zerstörbare Zitrone
quelle
1

R, 230 226 Bytes

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

Dank @billywob für -2 Bytes ist das Bemerken in einigen Fällen M[a,b]gleichbedeutend mit M[c].

Es ist ärgerlich, dass die beiden catAnrufe (!) Nicht konform sein könnencat einem zusammengefasst werden, da das fillArgument die Nachricht durcheinander bringt . Argh!

JDL
quelle
1
Bewegen Sie die Erstellung der Matrix in die Funktion und machen Sie eine unbenannte: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, fair genug. Wohlgemerkt, ich glaube nicht, dass ich es f=in meiner Lösung brauchte . Entfernt.
JDL