Первое решение, которое я придумала, это:
eq=. ('b< >' 8!:2 (] ,.~ |.@}."1)@:([: >:/~ i.))
eq 5
1
111
11111
1111111
111111111
eq 10
1
111
11111
1111111
111111111
11111111111
1111111111111
111111111111111
11111111111111111
1111111111111111111
eq
- это глагол, который сначала берет аргумент и создает матрицу с левым нижним из 1
, используя ([: >:/~ i.)
, это затем подается на (] ,.~ |.@}."1)
, который отбрасывает первый символ каждой строки, а затем переворачивает перед добавлением к исходной матрице. Наконец, чтобы избавиться от уродливых 0
, я использую внешнее соединение 8!:2
, которое форматирует двоичный массив в символы, а левый аргумент 'b< >'
указывает, что 0
будут заменены пробелами.
Второе решение:
eq2=: ([ ,.~ |.@}."1)@:(]\)
eq2 'hello'
h
ehe
lehel
llehell
ollehello
eq2 '*******'
*
***
*****
*******
*********
***********
*************
eq2
работает так же, за исключением того, что изначально использует ]\
, что означает, что формат внешнего соединения не требуется, поскольку результат передается ([ ,.~ |.@}."1)
уже в символьной форме.