자바 스크립트 (ES6), 143
백틱에는 2 개의 줄 바꿈이 있으며 중요합니다.
n=>` _
`+(r=n=>n?[...r(n-1),n,...r(n-1)]:[])(n).map((x,i,t,u=n=>'|'+'_'.repeat(n>0&&n))=>String.fromCharCode(x+64)+u(x)+u(t[i+1]-x-1)).join`
`
... 또는 문자가 소문자 일 수있는 경우 138입니다.
n=>` _
`+(r=n=>n?[...r(n-1),n,...r(n-1)]:[])(n).map((x,i,t,u=n=>'|'+'_'.repeat(n>0&&n))=>(x+9).toString(36)+u(x)+u(t[i+1]-x-1)).join`
덜 골프
n=>{
// recursive function for ABACABA returning an array of integers
var r=n=>n?[...r(n-1),n,...r(n-1)]:[]
// function to build "|__..."
// if argument <=0 just returns the vertical bar
var u=n=>'|'+'_'.repeat(n>0&&n)
var t = r(n)
t = t.map((x,i)=>
// current building + extension to the len of next building if needed
String.fromCharCode(x+64)+u(x)+u(t[i+1]-x-1)
)
return ' _\n' // the top line is fixed
+ t.join('\n')
}
테스트
solution=
n=>` _
`+(r=n=>n?[...r(n-1),n,...r(n-1)]:[])(n).map((x,i,t,u=n=>'|'+'_'.repeat(n>0&&n))=>String.fromCharCode(x+64)+u(x)+u(t[i+1]-x-1)).join`
`
function update() {
var n=+N.value
if (n>=0 && n<=26) O.textContent=solution(n)
}
update()
#N { width: 2em }
N:<input id=N value=4 oninput='update()'><pre id=O></pre>