Mã Golf Golf


24

Thử thách chơi gôn

Cho ASCII "Xanh" dưới đây.

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

Hãy biểu |thị một bức tường
Hãy biểu |thị một nửa cột cờ
Hãy biểu >thị lá cờ trên cột
Hãy biểu Othị lỗ
Hãy biểu othị quả bóng

Kích thước của "Green" là 10x10. Có mười khoảng trống giữa hai bức tường |.
Ngoài ra còn có mười khoảng trống, trống hoặc không nằm giữa đỉnh và đáy của màu xanh lá cây.

Thử thách

Nhập giá trị x và y hoặc tạo hai số ngẫu nhiên để "bắn" quả bóng golf lên green.
Nếu x, y được tạo không chạm vào lỗ hoặc cột cờ / đầu ra cờ "Thử lại!"
Nếu x, y được tạo sẽ chạm vào đầu ra lỗ "Hole in One!"
nếu x, y được tạo đạt đến đầu ra cực "Lucky Shot!"
nếu x, y được tạo sẽ chạm vào đầu ra cờ "Đóng một!"

Sau khi bắn, xuất vị trí của quả bóng trên green bằng a o, thay thế bất kỳ ký tự nào nó đánh. Cũng xuất ra các câu nói tương ứng ở trên.

Ví dụ:

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

Hãy vui vẻ và may mắn và vì đây là , mã ngắn nhất sẽ thắng!


Là cờ / cực luôn ở cùng một vị trí?
corvus_192

Bạn có thể để nó ở nơi nó đang ở, hoặc vui chơi với nó và di chuyển nó xung quanh. Tôi nghĩ rằng sẽ rất đau đớn khi di chuyển nó nhưng tôi nghĩ nó sẽ thêm một thử thách thú vị. Nếu bạn di chuyển nó, tôi sẽ đảm bảo 2 <h <= 10 trong đó h là chỉ số chiều cao của lỗ. Bằng cách đó, cờ không tắt màn hình.
jacksonecac

2
Hoặc lấy hai tham số i và k trong đó 0 <i <= 10 và 0 <k <= 10 hoặc đặt i và k bằng cách tạo số ngẫu nhiên
jacksonecac

1
@ corvus_192 hoàn toàn
jacksonecac

1
Những chuỗi đầu ra là đau đớn cho mã golf. Vì chưa có câu trả lời nào, hãy xem xét cho phép lấy chúng làm đầu vào
Luis Mendo

Câu trả lời:


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 sox đến Hedi

Bản giới thiệu


8

Thạch , 78 byte

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

Chơi một Skill-game hoặc một Crap-Shoot tại TryItOnline!

(Crap-bắn tốn nhiều byte hơn).

Làm sao?

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

Nó không đẹp và cũng không ngắn nhưng tôi mệt mỏi và đó là câu trả lời Python duy nhất đầu tiên . Nhập bắn theo định dạng x, y.

Chỉnh sửa

Đánh bại 26 bằng cách xác định lại cách xây dựng danh sách. Vẫn không có may mắn với tuyên bố dài nếu mặc dù.

-2 bằng cách thay thế dài nếu bằng từ điển và ngắn hơn nếu.

-10 với lời cảm ơn @ Noodle9 - Tôi đã bỏ lỡ cái đó :)

-4 - cảm ơn lần nữa :)

Thêm 3 tắt. Cảm ơn.

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

Đối với bất kỳ ai quan tâm đến logic, không thích nhận xét (1316 byte nhưng vẫn dễ dàng nằm gọn trên đĩa 3,5 if nếu có ai nhớ chúng):

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

Chắc chắn lần đầu tiên đối với tôi rằng một cuốn từ điển là định dạng dữ liệu tốt nhất trong một thử thách golf.


bạn có thể sử dụng bất cứ thứ gì có thể băm làm khóa từ điển
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);}

Ung dung:

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

Sử dụng chỉ mục không.

Đây là cách quá dễ đọc :(

Giải trình:

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

Tôi đã sử dụng công thức 1+x+13*yđể tính chỉ số chính xác, vì mỗi hàng dài 13 ký tự (2 đường viền, một dòng mới và 10 khoảng trắng) cộng với một giá trị của một vì (0,0) phải là char thứ hai.


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

Hai dòng chữ mới mỗi chữ tiết kiệm một byte. Khá chuẩn. In tờ khai, sau đó là bảng trò chơi.


3

Than , 99 byte

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

Mất đầu vào dựa trên 1, tách biệt không gian, trên stdin. Hầu hết các mã là để in (một trong) bốn tin nhắn. Hãy thử trực tuyến!

Lưu ý: Than vẫn là một công việc đang tiến triển. Mã này hoạt động như cam kết hiện tại . Nếu nó ngừng hoạt động trong tương lai (đặc biệt, nếu liên kết TIO không hoạt động như mong đợi), hãy ping tôi và tôi sẽ cố gắng thêm phiên bản cập nhật không cạnh tranh hoạt động.

Giải trình

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

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

Hãy thử trực tuyến!


Tôi đã thắng chưa?


Bạn dường như có một byte null được in ở cuối dòng đầu ra đầu tiên.
0 '

@ 1000000000 có. Tôi đã sửa nó với bản cập nhật mới nhất của tôi. Cảm ơn bạn đã chỉ ra rằng.
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!

Cảm ơn chúa TI-Basic sử dụng mã thông báo.

Không |thể thường được gõ, nhưng nó nằm trong bộ ký tự.

Xin vui lòng cho tôi biết nếu kết quả của cú đánh hoàn toàn phải là chữ thường.

Tôi sẽ thêm một ảnh chụp màn hình của một kết quả chương trình ví dụ sau.


2

Groovy - 235 byte

Nỗ lực đầu tiên của tôi - Một đóng cửa hấp dẫn chấp nhận 2 số nguyên từ 0 đến 9 làm tọa độ X và Y cho ảnh.

{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'). Chars; l [3] = v [y]?: S; l [4] = y == 2? f: s; if (k == y) {m = [(s): 'Thử lại!', (b): 'Lucky Shot!', (f): 'Đóng một!', (h): 'Lỗ trong một!'] ["" ​​+ l [j]]; l [j] = 'o'}; c + = l}; c + = m}

2

Dyalog APL , 147 (hoặc 127) byte

Lấy (y, x) làm đối số.

{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

Từ phiên bản 16.0, chúng ta gần như có thể giảm một nửa số byte với @toán tử mới ;

@ đặt toán hạng bên trái vào các vị trí toán hạng bên phải trong đối số bên phải: 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!'}

Mã được sửa đổi một chút để cho phép trong TryAPL:

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


1

Rùa , 164 byte

Một lần nữa, thể hiện sự cân bằng của Turtlèd giữa tính golf và tính dài hạn cho những điều đơn giản nhất (như tăng số), Turtlèd đánh bại tất cả trừ những người chơi 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_]

Dùng thử trực tuyến

Lưu ý rằng nó được lập chỉ mục một nửa và một nửa được lập chỉ mục; x là một chỉ mục, y là không có chỉ mục; 3,3 là một lỗ trong một


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

Nhờ @billywob cho -2 byte, thông báo M[a,b]tương đương với M[c]một vài trường hợp.

Khó chịu, hai cat cuộc gọi (!) Không thể được kết cathợp thành một, vì fillđối số làm rối thông điệp. Argh!


1
Di chuyển việc tạo ma trận bên trong hàm và tạo thành một tên không tên: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

Ồ, đủ công bằng. Tâm trí bạn, tôi không nghĩ rằng tôi cần f=trong giải pháp của tôi nào. Đã gỡ bỏ.
JDL
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.