कोड गोल्फ गोल्फ गोल्फ


24

गोल्फ चैलेंज

नीचे दिए गए ASCII "ग्रीन"।

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

चलो |निरूपित एक दीवार
Let |निरूपित आधा झंडा पोल
Let >निरूपित पोल पर झंडा
Let Oनिरूपित छेद
Let oनिरूपित गेंद

"ग्रीन" का आयाम 10x10 है। दोनों दीवारों के बीच दस स्थान हैं |
हरे और ऊपर और नीचे के बीच खाली या नहीं, दस जगह भी हैं।

चुनौती

एक x और y मान इनपुट करें या हरे रंग पर एक गोल्फ बॉल को "शूट" करने के लिए दो यादृच्छिक संख्याएं उत्पन्न करें।
यदि x, y उत्पन्न छेद या फ्लैग पोल / फ्लैग आउटपुट "पुन: प्रयास करें!" को स्पर्श नहीं करता है।
यदि x, y जेनरेट होता है तो होल आउटपुट "होल इन वन!"
यदि x, y उत्पन्न पोल आउटपुट को हिट करता है "लकी शॉट!"
अगर x, y ने फ्लैग आउटपुट "क्लोज वन!"

शॉट के बाद, हरे रंग के साथ गेंद के स्थान को आउटपुट करें 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 छेद की ऊंचाई सूचकांक है। इस तरह से ध्वज स्क्रीन से दूर नहीं है।
जैक्सनसेक

2
या तो दो पैरामीटर्स i और k लें, जहां 0 <i <= 10 और 0 <k <= 10 या यादृच्छिक i जनरेशन का उपयोग करके i और k सेट करें
jacksonecac

1
@ corvus_192 बिल्कुल
जैक्सनसेक

1
उन आउटपुट स्ट्रिंग्स कोड गोल्फ के लिए दर्दनाक हैं। चूंकि कोई जवाब अभी तक कर रहे हैं, उन्हें एक इनपुट के रूप में लेने के लिए अनुमति पर विचार
लुइस Mendo

जवाबों:


10

जावास्क्रिप्ट (ईएस 6) 210 208 193 184 बाइट्स

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

डेमो


8

जेली , 78 बाइट्स

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

एक कौशल-खेल या एक बकवास-शूट पर खेलते हैं TryItOnline!

(बकवास-शूट लागत अधिक बाइट्स)।

कैसे?

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

अजगर 2, 290 264 262 252 248 245 बाइट्स

यह सुंदर नहीं है और यह छोटा नहीं है लेकिन मैं थका हुआ हूं और यह पहली बार है एकमात्र पायथन जवाब है। एक्स, वाई प्रारूप में शॉट दर्ज करें।

संपादित करें

सूची के निर्माण के तरीके को पुनर्परिभाषित करके 26 को बंद किया गया। फिर भी लंबे समय के बयान के साथ अगर भाग्य नहीं।

एक शब्दकोश के साथ लंबे समय से बदलकर -2 और अगर एक छोटे से।

-10 के साथ @ नूडल 9 के लिए धन्यवाद - मुझे याद है कि एक :)

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

तर्क में दिलचस्पी रखने वाले किसी भी व्यक्ति के लिए, टिप्पणियों के साथ अधूरा (1316 बाइट्स लेकिन फिर भी आसानी से 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

सी, 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

पर्ल, 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

दो शाब्दिक newlines प्रत्येक एक बाइट को बचाते हैं। सुंदर मानक। घोषणा को प्रिंट करता है, फिर गेम बोर्ड।


3

चारकोल , 99 बाइट्स

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

स्टड पर 1-आधारित इनपुट, स्पेस-अलग किया जाता है। अधिकांश कोड चार संदेशों की छपाई (एक) के लिए है। इसे ऑनलाइन आज़माएं!

नोट: चारकोल अभी भी प्रगति पर है। यह कोड वर्तमान प्रतिबद्ध के रूप में काम करता है । यदि यह भविष्य में काम करना बंद कर देता है (विशेष रूप से, यदि TIO लिंक अपेक्षित रूप से काम नहीं करता है), तो मुझे पिंग करें और मैं काम करने वाले गैर-प्रतिस्पर्धा वाले अपडेटेड वर्जन को जोड़ने का प्रयास करूंगा।

व्याख्या

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

ब्रेन-फ्लैक , 1466 1938 बाइट्स

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

इसे ऑनलाइन आज़माएं!


क्या मैंने जीत लिया?


आपको लगता है कि आउटपुट की पहली पंक्ति के अंत में एक शून्य बाइट मुद्रित हो रही है।
0 '

@ 1000000000 हाँ। मैंने तय किया है कि मेरे नवीनतम अपडेट के साथ। उसे इंगित करने के लिए धन्यवाद।
मेगाटॉम

2

टीआई-बेसिक, 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!

धन्यवाद टीआई-बेसिक टोकन का उपयोग करता है।

|सामान्य रूप से टाइप किया जा सकता है, लेकिन यह वर्ण सेट में है।

कृपया मुझे बताएं कि क्या शॉट का परिणाम बिल्कुल कम होना है।

मैं बाद में एक उदाहरण कार्यक्रम परिणाम का स्क्रीनशॉट जोड़ूंगा।


2

ग्रूवी - 235 बाइट्स

मेरा पहला प्रयास - एक्स और वाई शॉट के लिए निर्देशांक के रूप में 0 से 9 तक 2 पूर्णांकों को स्वीकार करने वाला एक ग्रूवी क्लोजर।

{j, k-> j ++; c = ''; b = '।'; f = '>'; h '' O '; s =' '; v = [2: b, 3: b, 4: h ]; (0..9) .प्रत्येक {y-> एल = (ख + s * 10 + '| \ n') वर्ण;। एल [3] = वी [y] ?: रों; एल [4] = y == 2? f: s; if (k == y) {m = [(s): 'कोशिश करो!', (b): 'लकी शॉट!', (f): 'Close One!'। (h): 'होल इन वन!'] ["+ + l [j]]; l [j] = o o '}; c + = l}; c + = m};

2

दिल्लोग एपीएल , 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 , लकी शॉट 2 , क्लोज वन , रैंडम


1

Turtled , 164 बाइट्स

एक बार फिर से, गोल्फर और सरलता के लिए वर्बोसिटी के बीच संतुलन को दिखाने के लिए सबसे सरल चीजों (जैसे कि एक संख्या बढ़ाना), टर्टल ने सभी लेकिन गोल्फ लैंग्स को हराया।

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

आर, 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)}

-2 बाइट्स के लिए @billywob को धन्यवाद, नोट 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)}
बनाएं

ओह, काफी उचित है। आप का मन है, मुझे नहीं लगता कि मुझे f=अपने समाधान में वैसे भी जरूरत थी । हटा दिया।
JDL
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.