하스켈, 140 바이트
몇 번의 시도가 골프를 치는 데 실패한 후,이 Haskell 구현으로 끝났습니다. APL 솔루션의 2 배 안에있는 것이 행복합니다!
골프 솔루션 :
e=' ':e
m=[[]]:[[('/':e):map(' ':)x++('\\':e):y|k<-[0..n],x<-m!!(n-k),y<-m!!k]|n<-[0..]]
f n=putStr$unlines[map(!!(n-k))a|a<-m!!n,k<-[1..n]]
Ungolfed 및 댓글 :
이 프로그램은 일련의 n- 단계 산 다이어그램을 재귀 적으로 만듭니다. 각 다이어그램은 무한 길이의 줄 목록으로 표시되며, 옆으로 그려진 산과 무한대로 확장되는 공간을 나타냅니다. 이렇게하면 모든 다이어그램의 높이가 같아 지므로 재귀가 더 쉬워집니다. 마운틴 프린터는 높이를 유한 값으로 자르는 매개 변수를 허용합니다.
import Data.List (transpose)
-- Elementary picture slices, extending to infinity.
empty = ' ' : empty
up = '/' : empty
down = '\\': empty
-- A function which draws a mountain picture to stdout, clipping
-- its height to n.
printMtn n = putStr . unlines . reverse . take n . transpose
{-- Combine mountain pictures x and y by
x
x # y == / \y
--}
x # y = up : raised x ++ down : y
where raised = map (' ':)
-- Given two sets X,Y of mountain pictures, compute the set X <> Y of all
-- combined pictures x#y for x in X, y in Y.
xs <> ys = [ x # y | x <- xs, y <- ys ]
-- Compute the (++,<>)-convolution of a list with itself, e.g.:
-- autoConvolve [x0,x1,x2] == (x2 <> x0) ++ (x1 <> x1) ++ (x0 <> x2)
autoConvolve xs = concat $ zipWith (<>) (reverse xs) xs
{--
mtns is a list whose nth entry is the list of all n-step mountain diagrams.
It is defined recursively by:
-- The only 0-step mountain diagram is empty.
-- Each (n+1)-step diagram can be uniquely drawn as x#y for
some k-step diagram x and (n-k)-step diagram y.
--}
mtns = [[]] : [autoConvolve (prefix n) | n <- [1..]]
where prefix n = take n mtns
-- The driver function: apply the height n mountain printer to each
-- n-step mountain diagram. Whitespace is guaranteed by the order
-- in which the diagrams appear.
test n = mapM_ (printMtn n) $ mtns!!n
샘플 사용법 :
$ ghci mtn3.hs
GHCi, version 7.6.3: http://www.haskell.org/ghc/ :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
[1 of 1] Compiling Main ( mtn3.hs, interpreted )
Ok, modules loaded: Main.
λ> f 3
/\
/ \
/ \
/\/\
/ \
/\
/ \/\
/\
/\/ \
/\/\/\
λ>