편집하다
소문자 o를 사용하여 평면을 정의한 다음 나중에 대문자를 사용한 원래 게시물에서 내 오타에 약간의 혼란이있는 것으로 보입니다. 불행히도이 버그는 샌드 박스에서 발견되지 않았습니다. 많은 회원들이 둘 다로 답을 작성했고 오타가 내 잘못이기 때문에 비행기의 정의에서 대문자 또는 소문자 o를 허용합니다. 이에 대한 새로운 규칙을 추가했습니다.
배경
나는 그것을 부르는 경향이 있으므로 아스키 아트 애니메이션 을 좋아합니다. 나는 이것이 구현하기가 너무 어렵다고 생각하지 않기 때문에 희망적으로 짧고 흥미로운 답변을 얻을 수 있습니다.
모든 동료 커뮤니티 회원에게
답변을 향상 시키려면 바이트 수를 다음과 같이 수정하십시오.
이전 바이트 수 새로운 바이트 수
우리는 당신의 진행 상황을 볼 수 있습니다. 감사!
도전
여기는 아스키 비행기입니다
--O--
아스키 활주로
____| |____
비행기는 활주로 위의 5 개 줄에서 시작합니다. 미터법과 영국식 시스템 사이의 충돌을 막고 이것을 미터법이나 발판에 대해 언급하지 않는 진정한 국제적 도전으로 만들기 위해. 예:
--O--
____| |____
비행기는 아래와 같이 활주로 중앙에 정확히 착륙해야합니다.
____|--O--|____
입력
평면의 초기 수평 위치는 왼쪽 날개의 끝을 참조하는 데 사용되는 정수 입력에 의해 정의됩니다. 즉 0에서 10 사이입니다.
산출
비행기 비행의 각 단계가 표시되어야합니다. 아래 예 (입력 = 10) :
--O--
____| |____
--O--
____| |____
--O--
____| |____
--O--
____| |____
--O--
____| |____
____|--O--|____
일을 단순하게 유지하기 위해 우리는 원근법을 무시하고 있습니다. 활주로가 가까워 질수록 같은 크기로 유지됩니다.
규칙
- 업데이트 평면의 가운데는 대문자 또는 소문자가 될 수 있지만 코드를 통해 선택된 것이 선택되어야합니다. 귀하의 언어가 위의 문자를 지원하지 않는 경우 다른 ASCII 문자 만 사용하십시오.
- 평면은 프레임 당 한 줄 아래로 내려갑니다.
- 비행기는 한 줄 아래로 내려갈 때마다 왼쪽이나 오른쪽으로 1 칸만 이동할 수 있습니다. 하강의 각 라인에서 움직일 필요는 없습니다. 활주로에서 끝나는 한 좌우로 움직일 때 당신에게 달려 있습니다. 당신은 조종사입니다!
- 오류 처리가 필요하지 않습니다. 입력이 항상 0에서 10까지의 유효한 정수라고 가정 할 수 있습니다.
- 출력은 위에 표시된 문자로만 구성되어야하며 (언어가 지원하지 않는 경우 편집 된 첫 번째 규칙 참조) 동일한 크기 여야합니다. 즉 6 줄 x 15 자 너비로 시작해야합니다. 위의 예와 같이 높이가 증가함에 따라 높이가 줄어들 수 있습니다.
- 프로그램이나 기능은 훌륭하지만 위에 표시된대로 출력을 생성해야합니다.
- 선행 / 트레일 링 공간 / 개행은 괜찮습니다.
- 원하는 경우 출력 프레임간에 화면을 지우십시오. 이것은 요구 사항 이 아닙니다 .
- 표준 허점은 평소와 같이 금지되어 있습니다 (그러나 이런 종류의 도전에 도움이되는 많은 사람들이 있다고 생각하지는 않지만).
- 이것은 코드 골프이므로 최단 답변은 분명히 승자이며 아마도 대부분의 투표권을 얻지 만 실제로 흥미로운 솔루션이 예상치 못한 언어로 길어 지더라도 반드시 가장 좋은 답변으로 받아 들여지는 것은 아닙니다. 규칙에 부합하는 모든 내용을 게시하십시오.
답변
TI-BASIC, 61 바이트
Input A
A
For(B,1,5
ClrHome
Output(5,1,"----/ /----
Output(B,Ans,"--O--
Ans+6-median({5,7,Ans
End
답변
TI-BASIC, 62 바이트
:Input A
:A
:For(N,3,8
:ClrHome
:Output(8,1,"----I I----
:Output(N,Ans,"--O--
:Ans+(Ans<6)-(Ans>6
:End
TI-BASIC은 _ 또는 | 따라서 나는 수도 I와-로 대체되었습니다. 바이트 수에는 영향을 미치지 않습니다.
답변
파이썬 2, 107 바이트
n=input();h=5
while h:print' '*n+'--O--'+'\n'*h+'____| |____\n';n-=cmp(n,5);h-=1
print'____|--O--|____'
랜딩 비행기의 마지막 줄을 간단히 하드 코딩합니다. 이전의 부품을 재사용하거나 루프에 통합하여 골프를 칠 수 있습니다.
답변
펄, 94 바이트
93 바이트의 코드 + -p
플래그
$\="____| |____
";$p="--O--";for$i(-5..-1){print$"x$_.$p.$/x-$i;$_+=5<=>$_}$\=~s/ +/$p/}{
답변
자바 스크립트 (ES6), 108 바이트
f=(a,b=5)=>b?" ".repeat(a)+`--O--${`
`.repeat(b)}____| |____
`+f(a<5?a+1:a-1,b-1):"____|--O--|____"
그것을 테스트
용법
f
비행기의 색인으로 전화 하십시오.
f(2)
산출
--O--
____| |____
--O--
____| |____
--O--
____| |____
--O--
____| |____
--O--
____| |____
____|--O--|____
답변
스칼라 224 181 바이트
편집 : 나는 당신이 "string"*n
그것을 n 번 반복 할 수 있다고 생각하지 못했습니다 ! 스칼라는 계속 내 마음을 날려 버립니다. if(t>0)
대신 if(t==0)
신인 실수가 누락되었습니다 . 팁 주셔서 감사합니다, 수마 !
def?(x:Int,t:Int=5):Unit={var(p,o)=("--o--","")
o=s"____|${if(t>0)" "*5 else p}|____\n"
for(i<-0 to t)o=if(i!=0&&i==t)" "*x+p+o else "\n"+o
println(o)
if(t>0)?(x-(x-4).signum,t-1)}
원래 말 :
재귀 솔루션이 재미있을 것이라고 생각했습니다. 나는 Scala를 처음 접했기 때문에 이것이 최적이 아니라고 확신합니다.
답변
배치, 230 바이트
@echo off
set/ax=10-%1
set s= --O--
for /l %%i in (0,1,4)do call:l %%i
echo ____^|--O--^|____
exit/b
:l
call echo %%s:~%x%%%
for /l %%j in (%1,1,3)do echo(
echo ____^| ^|____
echo(
set/a"x-=x-5>>3,x+=5-x>>3
x
문자열의 시작 부분에서 제거 할 공백의 수 s
이므로 10에서 매개 변수를 뺍니다. 마지막 행은 Batch에서 가장 가까운 행입니다 x-=sgn(x-5)
.