골프 챌린지
아래의 ASCII “녹색”이 주어집니다.
| |
| |> |
| | |
| O |
| |
| |
| |
| |
| |
| |
하자 |
넣어야에게 벽
하자 |
나타내는 절반 플래그 극
하자 >
나타내는 극에 플래그
하자 O
넣어야 구멍
하자 o
넣어야 공을
“녹색”의 크기는 10×10입니다. 두 벽 사이에는 10 개의 공간이 있습니다 |
.
녹색의 위쪽과 아래쪽 사이에 비어 있거나없는 10 개의 공백도 있습니다.
도전
x와 y 값을 입력하거나 두 개의 난수를 생성하여 골프 공을 그린에 “사격”하십시오.
x, y가 생성 된 구멍이나 깃대 / 플래그 출력에 닿지 않으면 “다시 시도하십시오!”
x, y가 생성되면 홀 출력 “Hole in One!”에 도달합니다.
x, y가 생성되면 폴 출력 “Lucky Shot!”에 도달합니다.
x, y가 생성되면 플래그 출력 “Close One!”을 누르십시오.
사격 후 공의 위치를 녹색으로 출력하여 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 |
| |
| |
| |
| |
| |
| |
재미 있고 행운을 빕니다. 이것이 코드 골프 이기 때문에 가장 짧은 코드가 승리합니다!
답변
자바 스크립트 (ES6) 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``)
- Hedi에 -9 바이트
데모
답변
젤리 , 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)
답변
파이썬 2, 290 264 262 252 248 245 바이트
예쁘지 않고 짧지는 않지만 피곤하고 첫 번째 유일한 Python 답변입니다. x, y 형식으로 샷을 입력하십시오.
편집하다
목록이 작성되는 방식을 재정 의하여 26 점을 기록했습니다. 그래도 긴 if 문으로 여전히 운이 없습니다.
-2를 긴 if를 사전으로 바꾸고 더 짧은 if로 교체합니다.
@ Noodle9 덕분에 -10-나는 그중 하나를 놓쳤다 🙂
-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
골프 사전에서 사전이 최고의 데이터 형식이라는 사실은 처음입니다.
답변
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);}
언 골프 드 :
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);
}
답변
스칼라, 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 개의 공백)에 1의 오프셋 (0,0)이 두 번째 문자 여야하므로 오프셋을 계산 하기 때문에 수식 을 사용하여 올바른 인덱스를 계산했습니다.
답변
펄 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
두 개의 리터럴 개행은 각각 1 바이트를 저장합니다. 꽤 표준입니다. 선언을 인쇄 한 다음 게임 보드를 인쇄합니다.
답변
숯 , 99 바이트
NαNβ× ⁵↑¹⁰‖C←J⁴¦²←>↓²OM⁴↖P⁺⎇∧⁼α³⁼β⁴Hole in One⎇∧⁼α³⁼¹÷β²Lucky Shot⎇∧⁼α⁴⁼β²Close One¦Try Again¦!Jαβo
stdin에서 공백으로 분리 된 1 기반 입력을받습니다. 대부분의 코드는 4 가지 메시지를 인쇄하기위한 것입니다. 온라인으로 사용해보십시오!
참고 : 숯은 여전히 진행중인 작업입니다. 이 코드 는 현재 커밋에서 작동합니다 . 나중에 작동이 중지되면 (특히, 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