Kod Golf Golf Golf


24

Golf Mücadelesi

Aşağıda ASCII "Yeşil" verilmiştir.

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

Let |göstermek bir duvar
Let |Göstermek yarım bayrak direği
Let >Göstermek kutup bayrak
Let Oİşaret Etmektedir delik
Let oGöstermek top

“Yeşil” in boyutları 10x10'dur. İki duvar arasında on boşluk vardır |.
Yeşilin üstü ve altı arasında boş olan veya olmayan on boşluk vardır.

Meydan okuma

Bir golf topunu yeşile çekmek için bir x ve y değeri girin veya iki rasgele sayı oluşturun.
Eğer üretilen x, y deliğe veya bayrak direği / bayrak çıktısına dokunmuyorsa "Tekrar Dene!"
Eğer x, y oluşturulan delik çıkışına "Bir Delik!"
Eğer x, y oluşturulan kutup çıkışına isabet ederse "Lucky Shot!"
Eğer x, y oluşturulan bayrak "Close One!"

Vurulduktan sonra, topun konumunu yeşil ile a oile bastırarak, çarptığı herhangi bir karakteri değiştirin. Ayrıca yukarıda belirtilen sözleri de verin.

Örnekler:

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

Eğlenin ve bol şanslar ve bu için en kısa kod kazanır!


Bayrak / direk daima aynı konumda mı?
corvus_192

Olduğu yerde bırakabilir veya onunla biraz eğlenip etrafta gezinebilirsiniz. Etrafında dolaşmanın çok fazla acı verici olacağını düşündüm ama bence eğlenceli bir meydan okuma ekledi. Eğer hareket ettirirseniz, 2 <h <= 10 olduğundan, h'nin delik yükseklik indeksi olduğundan emin olurdum. Bu şekilde bayrak ekrandan çıkmaz.
jacksonecac

2
Ya iki paragrafı i ve k'yi alın; burada 0 <i <= 10 ve 0 <k <= 10 ya da rasgele sayı üretme kullanarak i ve k'yi ayarlayın
jacksonecac

1
kesinlikle @ corvus_192
jacksonecac

1
Bu çıkış dizeleri kod golf için acı vericidir. Henüz bir cevap olmadığından, onları bir girdi olarak kabul etmeyi düşünün
Luis Mendo

Yanıtlar:


10

JavaScript (ES6) 210 208 193 184 bayt

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 bayt Hedi teşekkür

gösteri


8

Jöle , 78 bayt

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

Bir Çal Beceri-Oyun veya Bok-Shoot at TryItOnline!

(Bok-çekimler daha fazla bayta mal olur).

Nasıl?

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

Güzel değil ve kısa değil ama yorgunum ve ilk Python cevabı. Çekimi x, y biçiminde girin.

Düzenle

Listenin oluşturulma şeklini yeniden tanımlayarak 26'yı kapattı. Yine de uzun olsa bile hayır şans.

-2 eğer bir uzun olanı bir sözlükle ve kısa olanı değiştirerek

-10 @ Noodle9 sayesinde - Bunu kaçırdım :)

-4 - tekrar teşekkürler :)

Başka bir 3 kapalı. Teşekkürler.

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

Mantıkla ilgilenen herkes için, yorumlarla bağlanmamış (1316 byte, ancak birileri hatırlarsa yine de 3.5 inçlik bir diske kolayca uyar):

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

Kesinlikle bir sözlük benim için ilk kez bir golf mücadelesinde en iyi veri formatı olmuştur.


Sözlük anahtarı olarak elverişli olan her şeyi kullanabilirsiniz
Noodle9

6

C, 236 bayt

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 bayt

(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ıfırla indeksleme kullanımı.

Bu da çok okunaklı :(

Açıklama:

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

Formülü 1+x+13*ydoğru indeksi hesaplamak için kullandım , çünkü her satır 13 karakter uzunluğunda (2 sınır, yeni satır ve 10 boşluk) artı birer ofset, çünkü (0,0) ikinci karakter olmalıdır.


3

Perl, 225 209 bayt

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

İki hazır bilgi satırının her biri bir bayt kurtarır. Oldukça standart. Deklarasyonu, ardından oyun tahtasını yazdırır.


3

Kömür , 99 bayt

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

1-tabanlı girdi, stdin'de boşlukla ayrılmış. Kodun çoğu dört mesajı yazdırmak içindir. Çevrimiçi deneyin!

Not: Kömür hala devam eden bir çalışmadır. Bu kod mevcut taahhüdün sonunda çalışır . Gelecekte çalışmayı bırakırsa (özellikle, TIO bağlantısı beklendiği gibi çalışmazsa), ping bana ve çalışan, rekabet etmeyen güncellenmiş bir sürüm eklemeye çalışacağım.

açıklama

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 bayt

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

Çevrimiçi deneyin!


Kazandım mı?


İlk çıktı satırının sonunda yazdırılmış boş bir bayta sahip görünüyor.
0 '

@ 1000000000 evet. Bunu en son güncellememle düzelttim. Bunu gösterdiğin için teşekkürler.
MegaTom

2

TI-Basic, 183 bayt

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!

Şükürler olsun, TI-Basic belirteçleri kullanıyor.

|Normalde yazdınız ama karakter kümesi edilemez.

Lütfen, çekim sonucunun kesinlikle küçük harf olması gerekiyorsa bana bildirin.

Daha sonra örnek bir program sonucunun ekran görüntüsünü ekleyeceğim.


2

Groovy - 235 bayt

İlk denemem - X ve Y atış için koordine ettiği 0'dan 9'a kadar 2 tamsayı kabul eden harika bir kapanış.

{j, k-> j ++; c = ''; b = '|'; f = '>'; h = 'O'; s = ''; v = [2: b, 3: b, 4: h ] (0..9) .each {y> l = (+ s * 10 + B '| \ n') karakter;. l [3] = T [y] ?: s, l [4] = y == 2? f: s; eğer (k == y) {m = [(s): 'Tekrar Dene!', (b): 'Şanslı Atış!', (f): 'Birini Kapat!', (h): 'Bir Delik!'] ["" ​​+ l [j]]; l [j] = 'o'}; c + = l}; c + = m}

2

Dyalog APL , 147 (veya 127) bayt

Argüman olarak (y, x) alır.

{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 sürümünden itibaren, bayt sayısını yeni ile neredeyse yarıya indirebiliriz. @ operatörle ;

@ sol işleneni, sağ argümandaki sağ işlenici pozisyonlarına koyar: 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'de izin verilebilmesi için biraz değiştirilmiş kod:

Bir Delik , Şanslı Atış 1 , Şanslı Atış 2 , Bir Atış , Rastgele


1

Turtled , 164 bayt

Bir kez daha, Turtlèd'in golf sahası ile en basit şeyler için verimsizlik arasındaki dengeyi sergileyen (bir sayı artırma gibi), Turtlèd, golf sahalarından başka hiçbir şeyi atmıyor.

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

Çevrimiçi deneyin

Yarı sıfır endeksli ve yarı yarı endeksli olduğuna dikkat edin; x bir dizinli, y sıfır dizinli; 3,3 birinde delik


1

R, 230 226 bayt

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 bayt için @billywob sayesinde, farkına varmak birkaç vakada M[a,b]eşittir M[c].

Can sıkıcı bir şekilde, iki catçağrı (!) catBir araya getirilemez, çünkü fillargüman mesajı karıştırır. Ahh!


1
Fonksiyonun içindeki matrisin yaratımını hareket ettirin ve isimlendirilmemiş olanı yapı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

Oh, yeterince adil. Dikkat et, f=yine de çözümüme ihtiyacım olduğunu sanmıyorum . Kaldırıldı.
JDL
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.