รหัสกอล์ฟกอล์ฟกอล์ฟ


24

การแข่งขันกอล์ฟ

รับ ASCII ด้านล่าง "สีเขียว"

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

ให้|แสดงว่าผนัง
ให้|แสดงว่าครึ่งเสาธง
ให้>แสดงถึงธงบนเสา
ให้Oแสดงว่าหลุม
ให้oแสดงถึงลูกบอล

ขนาดของ "สีเขียว" คือ 10x10 |มีช่องว่างสิบระหว่างกำแพงทั้งสองเป็น
นอกจากนี้ยังมีช่องว่างสิบช่องว่างหรือไม่ระหว่างด้านบนและด้านล่างของสีเขียว

ท้าทาย

ป้อนค่า x และ y หรือสร้างตัวเลขสุ่มสองหมายเลขเพื่อ "ยิง" ลูกกอล์ฟลงบนกรีน
หาก x, y ที่สร้างขึ้นไม่ได้สัมผัสหลุมหรือเอาท์พุทเสาธง / ธง "ลองอีกครั้ง!"
หาก x, y ที่สร้างขึ้นจะกระทบยอดเอาต์พุตของรู "Hole in One!"
ถ้า x, y สร้างความนิยมเอาท์พุทเสา "ลัคกี้ช็อต!"
ถ้า x, y ถูกสร้างขึ้นจะกระทบกับเอาต์พุตแฟล็ก "Close One!"

หลังจากการยิงออกตำแหน่งของลูกบอลบนกรีนด้วย a o, แทนที่ตัวละครใด ๆ ที่ตี เอาท์พุทคำพูดที่เกี่ยวข้องดังกล่าวข้างต้น

ตัวอย่าง:

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

ขอให้สนุกและขอให้โชคดีและนี่คือรหัสที่สั้นที่สุดชนะ!


ธง / เสาอยู่ในตำแหน่งเดียวกันเสมอหรือไม่?
corvus_192

คุณสามารถปล่อยให้มันอยู่ที่ไหนหรือสนุกกับมันและย้ายไปรอบ ๆ ฉันคิดว่ามันจะเจ็บปวดมากเกินกว่าที่จะขยับไปมา แต่ฉันคิดว่ามันเพิ่มความท้าทายที่สนุก ถ้าคุณย้ายฉันจะให้แน่ใจว่า 2 <h <= 10 โดยที่ h คือดัชนีความสูงของหลุม ด้วยวิธีนี้การตั้งค่าสถานะไม่ได้อยู่นอกหน้าจอ
jacksonecac

2
อาจเลือกพารามิเตอร์สองตัวคือ i และ k โดยที่ 0 <i <= 10 และ 0 <k <= 10 หรือตั้งค่า i และ k โดยใช้การสร้างตัวเลขสุ่ม
jacksonecac

1
@ corvus_192 อย่าง
jacksonecac

1
สตริงเอาต์พุตเหล่านั้นเจ็บปวดสำหรับโค้ดกอล์ฟ เนื่องจากยังไม่มีคำตอบให้พิจารณาอนุญาตให้นำไปเป็นข้อมูล
หลุยส์เมนโด

คำตอบ:



8

เยลลี่ , 78 ไบต์

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

เล่นSkill-GameหรือCrap-Shootที่TryItOnline!

(Crap-shoot เสียค่าใช้จ่ายมากกว่าไบต์)

อย่างไร?

ṭḌ‘Ç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 ไบต์

มันไม่สวยและไม่สั้น แต่ฉันก็เหนื่อยและมันเป็นคำตอบเดียวของ Python ใส่ shot ในรูปแบบ x, y

แก้ไข

ออกไป 26 โดยกำหนดวิธีการสร้างรายการใหม่ ยังไม่มีโชคกับคำว่ายาวถ้าแม้ว่า

-2 โดยการแทนที่ความยาวถ้าด้วยพจนานุกรมและสั้นกว่าถ้า

-10 ด้วยขอบคุณ @ Noodle9 - ฉันพลาดไป :)

-4 - ขอบคุณอีกครั้ง :)

อีก 3 ออก ขอบคุณ

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

สำหรับทุกคนที่สนใจในตรรกะให้ ungolfed กับความคิดเห็น (1,316 bytes แต่ยังเหมาะกับดิสก์ 3.5 "ได้อย่างง่ายดายหากใครจำได้)

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

ครั้งแรกสำหรับฉันแน่นอนว่าพจนานุกรมเป็นรูปแบบข้อมูลที่ดีที่สุดในการแข่งขันกอล์ฟ


คุณสามารถใช้อะไรก็ได้ที่
แฮชได้

6

C, 236 ไบต์

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

สกาลา, 238 ไบต์

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

ใช้การจัดทำดัชนีเป็นศูนย์

นี่เป็นวิธีที่อ่านง่ายเกินไป :(

คำอธิบาย:

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

ฉันใช้สูตร1+x+13*yในการคำนวณดัชนีที่ถูกต้องเนื่องจากแต่ละแถวมีความยาว 13 ตัวอักษร (2 เส้นขอบ, ขึ้นบรรทัดใหม่และ 10 ช่องว่าง) บวกออฟเซ็ตหนึ่งเพราะ (0,0) ควรเป็นอักขระตัวที่สอง


3

Perl, 225 209 ไบต์

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

ขึ้นบรรทัดใหม่สองตัวอักษรแต่ละตัวบันทึกหนึ่งไบต์ มาตรฐานสวย พิมพ์ประกาศจากนั้นคณะกรรมการเกม


3

ถ่าน 99 ไบต์

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

ใช้อินพุต 1 ตัวคั่นด้วยช่องว่างบน stdin รหัสส่วนใหญ่ใช้สำหรับการพิมพ์ (หนึ่งใน) ข้อความทั้งสี่ ลองออนไลน์!

หมายเหตุ: ถ่านยังคงอยู่ในระหว่างดำเนินการ รหัสนี้ทำงานเป็นของปัจจุบันกระทำ หากหยุดทำงานในอนาคต (โดยเฉพาะหากลิงก์ TIO ไม่ทำงานตามที่คาดไว้) ให้ ping ฉันและฉันจะพยายามเพิ่มเวอร์ชันที่อัปเดตที่ไม่ใช่คู่แข่งซึ่งใช้งานได้

คำอธิบาย

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ไบต์

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

ลองออนไลน์!


ฉันชนะไหม


ดูเหมือนว่าคุณจะมีการพิมพ์ไบต์ว่างที่ท้ายบรรทัดแรกของเอาต์พุต
0

@ 1000000000 ใช่ ฉันได้แก้ไขแล้วด้วยการอัปเดตล่าสุดของฉัน ขอบคุณสำหรับการชี้ให้เห็นว่า
MegaTom

2

TI-Basic, 183 ไบต์

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!

ขอบคุณพระเจ้า TI-Basic ใช้โทเค็น

|ไม่ปกติจะพิมพ์ แต่มันอยู่ในชุดอักขระ

โปรดแจ้งให้เราทราบหากผลลัพธ์ของการยิงต้องเป็นตัวพิมพ์เล็ก

ฉันจะเพิ่มภาพหน้าจอของผลลัพธ์ตัวอย่างโปรแกรมในภายหลัง


2

Groovy - 235 ไบต์

ความพยายามครั้งแรกของฉัน - การปิด Groovy ยอมรับจำนวนเต็ม 2 จำนวนจาก 0 ถึง 9 เป็นค่า X และ Y สำหรับการถ่ายภาพ

{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') ตัวอักษร; l. [3] v = [Y] ?: s; L [4] = y == 2? f: s; ถ้า (k == y) {m = [(s): 'ลองอีกครั้ง!', (b): 'Lucky Shot!', (f): 'ปิดหนึ่ง!', (h): 'Hole In One!'] ["+ l [j]]; l [j] = 'o'}; c + = l}; c + = m}

2

Dyalog APL , 147 (หรือ 127)ไบต์

ใช้เวลา (y, x) เป็นอาร์กิวเมนต์

{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

จากเวอร์ชัน 16.0 เราเกือบจะสามารถลดจำนวนไบต์ด้วยตัว@ดำเนินการใหม่ได้ครึ่งหนึ่ง

@ วางตัวถูกดำเนินการด้านซ้ายไว้ในตำแหน่งขวาของตัวถูกดำเนินการในอาร์กิวเมนต์ที่ถูกต้อง: 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!'}

รหัสที่แก้ไขเล็กน้อยเพื่อให้อนุญาตใน TryAPL:

โฮลอินวัน , ลักกี้ช็อต 1 , Lucky Shot 2 , One One , Random


1

เต่าขนาด 164 ไบต์

อีกครั้งที่แสดงให้เห็นถึงความสมดุลของTurtlèdระหว่าง golfiness และ verbosity สำหรับสิ่งที่ง่ายที่สุด (เช่นการเพิ่มจำนวน) Turtlèdชนะทั้งหมด แต่ langing golfing

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

ลองออนไลน์

โปรดทราบว่ามีการทำดัชนีครึ่งศูนย์และอีกครึ่งหนึ่งจัดทำดัชนี x คือหนึ่งดัชนี y เป็นศูนย์ดัชนี; 3,3 เป็นรูในหนึ่งเดียว


1

R, 230 226 ไบต์

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

ขอบคุณ @billywob สำหรับ -2 ไบต์การสังเกตM[a,b]จะเทียบเท่ากับM[c]ในบางกรณี

น่ารำคาญทั้งสองcatสาย (!) ไม่สามารถนำcatไปรวมเป็นหนึ่งเดียวได้เนื่องจากการfillโต้แย้งทำให้ข้อความยุ่งเหยิง โอ๊ะ!


1
ย้ายการสร้างเมทริกซ์ภายในฟังก์ชั่นและทำให้ในชื่อที่หนึ่ง: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

โอ้ยุติธรรมพอ โปรดทราบฉันไม่คิดว่าฉันต้องการf=วิธีแก้ปัญหาของฉัน ลบออก
JDL
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.