Golf Code Golf Golf

24

Tantangan Golf

Diberikan ASCII "Hijau" di bawah ini.

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

Biarkan |Mendenotasikan dinding
Biarkan |Mendenotasikan setengah tiang bendera
Biarkan >Mendenotasikan bendera pada tiang
Biarkan OMendenotasikan lubang
Biarkan oMendenotasikan bola

Dimensi "Hijau" adalah 10x10. Ada sepuluh ruang di antara kedua dinding |.
Ada juga sepuluh ruang, kosong atau tidak antara bagian atas dan bagian bawah hijau.

Tantangan

Masukkan nilai x dan y atau hasilkan dua angka acak untuk "menembak" bola golf ke green.
Jika x, y yang dihasilkan tidak menyentuh lubang atau flag flag / flag output "Coba Lagi!"
Jika x, y yang dihasilkan menyentuh output lubang "Hole in One!"
jika x, y yang dihasilkan mencapai output kutub "Lucky Shot!"
jika x, y yang dihasilkan hits keluaran bendera "Tutup Satu!"

Setelah tembakan, keluarkan lokasi bola di atas hijau dengan o, menggantikan karakter apa pun yang terkena. Keluarkan pepatah masing-masing di atas.

Contoh:

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

Selamat bersenang-senang dan semoga sukses dan karena ini adalah kode, kode terpendek akan menang!

jacksonecac
sumber
Apakah bendera / tiang selalu di posisi yang sama?
corvus_192
Anda dapat membiarkannya di tempatnya, atau bersenang-senang dengannya dan memindahkannya. Saya pikir itu akan terlalu merepotkan untuk bergerak tapi saya pikir itu menambah tantangan yang menyenangkan. Jika Anda memindahkannya, saya akan memastikan 2 <h <= 10 di mana h adalah indeks tinggi lubang. Dengan begitu bendera tidak hilang dari layar.
jacksonecac
2
Baik ambil dua parameter i dan k di mana 0 <i <= 10 dan 0 <k <= 10 atau set i dan k menggunakan pembangkitan bilangan acak
jacksonecac
1
@ corvus_192 benar
jacksonecac
1
String keluaran itu menyakitkan untuk golf kode. Karena belum ada jawaban, pertimbangkan untuk menerimanya sebagai masukan
Luis Mendo

Jawaban:

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 thanx ke Hedi

Demo

sbisit
sumber
8

Jelly , 78 byte

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

Mainkan Skill-Game atau Crap-Shoot di TryItOnline!

(Crap-shoot membutuhkan lebih banyak byte).

Bagaimana?

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

Python 2, 290 264 262 252 248 245 byte

Ini tidak cantik dan tidak pendek tapi saya lelah dan itu satu- satunya jawaban Python pertama . Masukkan bidikan dalam format x, y.

Edit

Bermain golf 26 dengan mendefinisikan ulang cara daftar dibuat. Masih tidak beruntung dengan pernyataan jika panjang sekalipun.

-2 dengan mengganti yang panjang jika dengan kamus dan jika lebih pendek.

-10 dengan terima kasih kepada @ Noodle9 - Saya melewatkan yang satu itu :)

-4 - terima kasih lagi :)

3 lagi. Terima kasih.

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

Bagi siapa pun yang tertarik dengan logika, tidak diserang dengan komentar (1316 bytes tetapi masih mudah masuk pada disk 3,5 "jika ada yang mengingatnya):

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

Pasti pertama kalinya bagi saya bahwa kamus telah menjadi format data terbaik dalam tantangan golf.

ElPedro
sumber
Anda dapat menggunakan apa pun yang hashable sebagai kunci kamus
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);}

Tidak Disatukan:

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

Menggunakan pengindeksan nol.

Ini terlalu mudah dibaca :(

Penjelasan:

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

Saya telah menggunakan rumus 1+x+13*yuntuk menghitung indeks yang benar, karena setiap baris panjangnya 13 karakter (2 batas, baris baru dan 10 spasi) plus offset satu karena (0,0) harus menjadi karakter kedua.

corvus_192
sumber
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

Dua baris baru literal masing-masing menyimpan satu byte. Cukup standar. Mencetak deklarasi, lalu papan permainan.

Gabriel Benamy
sumber
3

Arang , 99 byte

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

Mengambil input berbasis 1, dipisahkan oleh ruang, pada stdin. Sebagian besar kode digunakan untuk mencetak (satu dari) empat pesan. Cobalah online!

Catatan: Arang masih dalam proses. Kode ini berfungsi sejak komit saat ini . Jika berhenti berfungsi di masa mendatang (khususnya, jika tautan TIO tidak berfungsi seperti yang diharapkan), ping saya dan saya akan mencoba menambahkan versi pembaruan yang tidak bersaing yang berfungsi.

Penjelasan

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

Brain-Flak , 1466 1938 byte

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

Cobalah online!


Apakah saya menang?

MegaTom
sumber
Anda tampaknya memiliki byte nol yang dicetak pada akhir baris pertama output.
0
@ 1000000000 ya. Saya telah memperbaikinya dengan pembaruan terbaru saya. Terima kasih telah menunjukkannya.
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!

Syukurlah TI-Basic menggunakan token.

The |biasanya tidak dapat diketik, tetapi di set karakter.

Tolong beri tahu saya jika hasil tembakan harus benar-benar huruf kecil.

Saya akan menambahkan tangkapan layar hasil contoh program nanti.

DanTheMan
sumber
2

Groovy - 235 byte

Usaha pertama saya - Penutupan asyik yang menerima 2 bilangan bulat dari 0 hingga 9 sebagai koordinat X dan Y untuk bidikan.

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

Dyalog APL , 147 (atau 127) byte

Membawa (y, x) sebagai argumen.

{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

Dari versi 16.0, kita hampir dapat membagi dua byte-count dengan @operator baru ;

@ menempatkan operan kiri ke posisi operan kanan dalam argumen yang tepat: 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!'}

Kode yang sedikit dimodifikasi agar diperbolehkan di TryAPL:

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

Adm
sumber
1

Turtled , 164 byte

Sekali lagi, menampilkan keseimbangan Turtlèd antara golfiness dan verbositas untuk hal-hal yang paling sederhana (seperti menambah angka), Turtlèd mengalahkan semua kecuali 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_]

Cobalah online

Perhatikan bahwa itu adalah setengah nol diindeks dan setengah satu diindeks; x adalah satu diindeks, y adalah nol diindeks; 3,3 adalah hole in one

Lemon dirusak
sumber
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)}

Berkat @billywob untuk -2 byte, memperhatikan M[a,b]setara dengan M[c]dalam beberapa kasus.

Yang menjengkelkan, kedua catpanggilan (!) Tidak dapat catdisatukan menjadi satu, karena fillargumen mengacaukan pesan. Argh!

JDL
sumber
1
Pindahkan kreasi dari matriks di dalam fungsi dan buat yang tidak bernama: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, cukup adil. Pikiran Anda, saya pikir saya tidak perlu f=solusi saya. Dihapus.
JDL