Codice Golf Golf Golf


24

Sfida di golf

Dato il seguente ASCII "Verde".

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

Lascia |denotare un muro
Lascia |denotare metà del palo della bandiera
Lascia >denotare la bandiera sul palo
Lascia Odenotare il buco
Lascia odenotare la palla

Le dimensioni del "Verde" sono 10x10. Ci sono dieci spazi tra le due pareti |.
Ci sono anche dieci spazi, vuoti o meno tra la parte superiore e la parte inferiore del verde.

Sfida

Inserisci un valore xey o genera due numeri casuali per "sparare" una pallina da golf sul green.
Se la x, y generata non tocca il buco o l'uscita del palo bandiera / bandiera "Riprova!"
Se la x, y generata colpisce l'uscita del foro "Hole in One!"
se la x, y generata colpisce l'uscita del polo "Lucky Shot!"
se la x, y generata colpisce l'output del flag "Close One!"

Dopo il tiro, emetti la posizione della palla sul green con un o, sostituendo qualsiasi personaggio colpito. Emetti anche il rispettivo detto sopra.

Esempi:

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

Buon divertimento e buona fortuna e dato che si tratta di vince il codice più corto!


La bandiera / asta è sempre nella stessa posizione?
corvus_192,

Puoi lasciarlo dov'è o divertirti e spostarlo. Ho pensato che sarebbe stato troppo doloroso spostarlo, ma penso che aggiunga una sfida divertente. Se lo sposti assicurerei 2 <h <= 10 dove h è l'indice di altezza del foro. In questo modo la bandiera non è fuori dallo schermo.
jacksonecac,

2
Prendi due parametri i e k dove 0 <i <= 10 e 0 <k <= 10 o imposta i e k usando la generazione casuale di numeri
jacksonecac,

1
@corvus_192 assolutamente
jacksonecac

1
Quelle stringhe di output sono dolorose per il golf del codice. Poiché non ci sono ancora risposte, considera la possibilità di prenderle come input
Luis Mendo

Risposte:


10

JavaScript (ES6) 210 208 193 184 byte

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 byte grazie a Hedi

dimostrazione


8

Gelatina , 78 byte

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

Gioca a un gioco di abilità o uno schifo su TryItOnline!

(Le schifezze costano più byte).

Come?

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

8

Python 2, 290 264 262 252 248 245 byte

Non è carino e non è breve ma sono stanco ed è la prima unica risposta di Python. Inserisci lo scatto in formato x, y.

modificare

Lanciato a golf 26 ridefinendo il modo in cui l'elenco è costruito. Ancora nessuna fortuna con la lunga dichiarazione if però.

-2 sostituendo il lungo se con un dizionario e un più breve se.

-10 grazie a @ Noodle9 - Mi mancava quello :)

-4 - grazie ancora :)

Altri 3 di sconto. Grazie.

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

Per chiunque sia interessato alla logica, privo di commenti (1316 byte ma si adatta facilmente su un disco da 3,5 "se qualcuno li ricorda):

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

Sicuramente la prima volta per me che un dizionario è stato il miglior formato di dati in una sfida di golf.


puoi usare tutto ciò che è hashing come chiave di dizionario
Noodle9

6

C, 236 byte

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

3

Scala, 238 byte

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

Utilizzo dell'indicizzazione zero.

Questo è troppo leggibile :(

Spiegazione:

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

Ho usato la formula 1+x+13*yper calcolare l'indice corretto, poiché ogni riga è lunga 13 caratteri (2 bordi, una nuova riga e 10 spazi) più un offset di uno perché (0,0) dovrebbe essere il secondo carattere.


3

Perl, 225 209 byte

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

Le due nuove righe letterali salvano ognuna un byte. Piuttosto standard. Stampa la dichiarazione, quindi il tabellone.


3

Carbone , 99 byte

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

Accetta un input basato su 1, separato da spazi, su stdin. La maggior parte del codice è per la stampa (uno dei) quattro messaggi. Provalo online!

Nota: il carbone è ancora in fase di elaborazione. Questo codice funziona a partire dal commit corrente . Se smetterà di funzionare in futuro (in particolare, se il collegamento TIO non funziona come previsto), eseguimi il ping e proverò ad aggiungere una versione aggiornata non competitiva che funziona.

Spiegazione

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

3

Brain-Flak , 1466 1938 byte

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

Provalo online!


Ho vinto?


Sembra che si stia stampando un byte null alla fine della prima riga di output.
0

@ 1000000000 sì. Ho risolto il problema con il mio ultimo aggiornamento. Grazie per averlo sottolineato.
MegaTom,

2

TI-Basic, 183 byte

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!

Grazie al cielo TI-Basic utilizza i token.

Il | non possono essere normalmente digitati, ma è nel set di caratteri.

Per favore fatemi sapere se il risultato dello scatto deve essere assolutamente minuscolo.

Aggiungerò uno screenshot di un risultato del programma di esempio in seguito.


2

Groovy - 235 byte

Il mio primo tentativo - Una chiusura groovy che accetta 2 numeri interi da 0 a 9 come coordinate X e Y per il tiro.

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

2

Dyalog APL , 147 (o 127) byte

Prende (y, x) come argomento.

{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

Dalla versione 16.0, possiamo quasi dimezzare il conteggio dei byte con il nuovo @operatore;

@ mette l'operando sinistro nelle posizioni dell'operando destro nell'argomento destro: 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!'}

Codice leggermente modificato per renderlo consentito in TryAPL:

Hole in One , Lucky Shot 1 , Lucky Shot 2 , Close One , Casuale


1

Tartaruga , 164 byte

Ancora una volta, mettendo in mostra l'equilibrio di Turtlèd tra golfismo e verbosità per le cose più semplici (come aumentare un numero), Turtlèd batte tutto tranne i morsi del 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_]

Provalo online

Si noti che è indicizzato per metà zero e per metà indicizzato; x è uno indicizzato, y è zero indicizzato; 3,3 è un buco in uno


1

R, 230 226 byte

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

Grazie a @billywob per -2 byte, notandolo M[a,b] equivale a M[c]in un paio di casi.

In modo fastidioso, le due catchiamate (!) Non possono essere catraggruppate in una, poiché l' fillargomento confonde il messaggio. Argh!


1
Sposta la creazione della matrice all'interno della funzione e 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)}
creane

Oh, abbastanza giusto. Intendiamoci, non credo di aver bisogno f=comunque della mia soluzione. Rimosso.
JDL,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.