Головна на лінійці списків


26

Це завдання полягає у тому, щоб просто повернути список списків цілих чисел, подібних до функції діапазону Python, за винятком того, що кожне наступне число повинно бути таким глибоким у списках.

Правила :

  • Створіть програму або неанонімну функцію
  • Він повинен повернути або надрукувати результат
  • Результат повинен бути повернутий у списку (зі списків) або масиві (з масивів)
  • Якщо параметр дорівнює нулю, поверніть порожній список
  • Це має бути в змозі обробити цілий параметр 0 <= n <70.
    • (рекурсивні рішення вибухають досить швидко)
  • Функція повинна називатися лише одним параметром.
  • Інша поведінка не визначена.
  • Це код гольфу, тому найкоротший код виграє.

Приклад дзвінка:

rangeList(6)
> [0, [1, [2, [3, [4, [5]]]]]]

Випробування:

0  => []
1  => [0]
2  => [0, [1]]
6  => [0, [1, [2, [3, [4, [5]]]]]]
26 => [0, [1, [2, [3, [4, [5, [6, [7, [8, [9, [10, [11, [12, [13, [14, [15, [16, [17, [18, [19, [20, [21, [22, [23, [24, [25]]]]]]]]]]]]]]]]]]]]]]]]]]
69 => [0, [1, [2, [3, [4, [5, [6, [7, [8, [9, [10, [11, [12, [13, [14, [15, [16, [17, [18, [19, [20, [21, [22, [23, [24, [25, [26, [27, [28, [29, [30, [31, [32, [33, [34, [35, [36, [37, [38, [39, [40, [41, [42, [43, [44, [45, [46, [47, [48, [49, [50, [51, [52, [53, [54, [55, [56, [57, [58, [59, [60, [61, [62, [63, [64, [65, [66, [67, [68]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]

EDIT: isaacg в відповідь є найкоротшим до сих пір. Я оновлю прийняту відповідь, якщо хтось знайде коротший на мові, яка існувала при опублікуванні виклику. Дякуємо за гру!


2
Випадковий коментар: Смішно, як мінімум символів для заголовка 15, і я не міг використати "Діапазон списків", тому я придумав цей на місці.
mbomb007

Це переважно для того, щоб люди не могли писати непризначені анонімні функції. Особисто я вважаю за краще, якби це була функція, яка приймає параметр.
mbomb007

Чи дозволяється створювати дві функції, де одна - це помічна функція?
ProgramFOX

@ProgramFOX Так. Я думаю, що код, який знаходиться import mathпоза вашою функцією, чудово, оскільки якщо хтось, наприклад, захотів у Python, я не думаю, що він може виникнути всередині функції.
mbomb007

@DevonParsons Є багато питань, у яких є приклад програми, яка міститься всередині, але добре.
mbomb007

Відповіді:


11

Pyth, 13 байт

?hu]+HG_UQYQY

Спробуйте тут.

                 Implicit:
                 Q = eval(input())
                 Y = []
?           QY   If Q = 0, print Y
 h               else, print the first element of
  u     _UQY     the reduce, where Y is the initial value, over the list
                 reversed(range(Q))
   ]+HG          The reduce function: The list containing H prepended onto G.
                 The new number is inserted into the accumulated list,
                 then the resultant list is wrapped in another list.

10

APL ( 13 18)

Припустимо ⎕IO=0:

f←{×⍵:⊃,∘⊂∘,/⍳⍵⋄⍬}

Пояснення:

  • ×⍵: якщо є позитивним,
    • ,∘⊂∘,: приєднайте лівий операнд до вкладеного правого операнда (тобто x ,∘⊂∘, y = [x, [y]])
    • /: зменшити
    • ⍳⍵: цифри 0..⍵-1
    • : розкрийте результат
  • : інакше
    • : повернути порожній список
    • (це необхідно, оскільки /не вмикається і ⍳0дає порожній список.)

Додаток:

Ця функція повертає вкладений масив. Однак, це важко сказати це з вихідних даних APL за замовчуванням. Він розділяє елементи масиву пробілами, тож ви можете вказувати введення лише подвійними пробілами. Ось функція, яка візьме вкладений масив і поверне рядок, форматуючи вкладений масив у стилі Python (тобто [a,[b,[c,...]]]).

arrfmt←{0=≡⍵:⍕⍵ ⋄ '[',(1↓∊',',¨∇¨⍵),']'}

1
Я думаю, вам потрібно ще another після додавання, інакше (принаймні, в моєму перекладачі - dyalog14) останній елемент не вкладається. наприклад [0 [1 [2 3]]]
Моріс Зукка

@marinus Чи можете ви це підтвердити?
mbomb007

Дня-два тому я змінив постановку проблеми, щоб уточнити, що визначені функції повинні бути призначені змінній. Ви повинні додати f←до початку вашої програми, якщо ви не модифікуєте її для прийняття вводу користувача.
mbomb007

Крім того, результат не показує, наскільки глибоко в списку число чітко змінюється ... чи кожен пробіл має на увазі дужку?
mbomb007

@MorisZucca Я повинен погодитися. Дивіться тут: ngn.github.io/apl/web/#code=%7B%D7%u2375%3A%2C%u2218%u2282/…
mbomb007

9

Haskell, 67 байт

data L=E|I Int|L[L] 
1#m=L[I$m-1]
n#m=L[I$m-n,(n-1)#m]
p 0=E
p n=n#n

У Haskell всі елементи списку повинні бути одного типу, тому я не можу змішувати цілі числа зі списком цілих чисел, і я повинен визначити тип власного списку L. Хелперна функція #рекурсивно конструює необхідний список. Основна функція pперевіряє наявність порожнього списку та дзвонить #інакше.

Оскільки нові типи даних не можуть бути надруковані за замовчуванням (правила дозволяють просто повернути список), я додаю ще код для демонстрації:

data L=E|I Int|L[L] deriving Show

Зараз:

-- mapM_ (print . p) [0..5]
E
L [I 0]
L [I 0,L [I 1]]
L [I 0,L [I 1,L [I 2]]]
L [I 0,L [I 1,L [I 2,L [I 3]]]]
L [I 0,L [I 1,L [I 2,L [I 3,L [I 4]]]]]

7

Пітон, 48 байт

f=lambda n,i=0:i<n and[i]+[f(n,i+1)]*(i<n-1)or[]

Використання множення списку для обробки спеціального випадку.


Я не думаю, що це специфічно для Python 2 - здається, він працює у всіх пітонах.
isaacg

@isaacg Виправлено. Моє оригінальне подання не було :)
Sp3000

Крихітний заощадження: *(i<n-1)це можна зробити так само [:n+~i], оскільки це єдиний список.
xnor


5

CJam, 16 байт

Lri){[}%]~;']*~p

Це повна програма. Він приймає вхід через STDIN і друкує остаточний масив на STDOUT.

Як і в інших записах CJam, 0вхід буде надруковано ""як такий, що представляє порожній масив у CJam.

Як це працює :

L                   "Put an empty array on stack. This will be used for the 0 input";
 ri)                "Read the input, convert it to integer and increment it";
    {[}%            "Map over the array [0 ... input number] starting another array";
                    "after each element";
        ]~;         "Now on stack, we have input number, an empty array and the final";
                    "opening bracket. Close that array, unwrap it and pop the empty array";
           ']*~     "Put a string containing input number of ] characters and eval it";
                    "This closes all the opened arrays in the map earlier";
               p    "Print the string representation of the array";
                    "If the input was 0, the map runs 1 time and the ; pops that 1 array";
                    "Thus leaving only the initial empty array on stack";

Спробуйте його онлайн тут


3

JavaScript (ES6) 40

Рекурсивне рішення, досить міцне, без ударів. Помилка оновлення поблизу 6500 із "занадто великою рекурсією"

F=n=>n--?(R=m=>m<n?[m,R(++m)]:[m])(0):[]

Ітеративне рішення (45) Без обмежень, крім використання пам'яті

F=n=>{for(s=n?[--n]:[];n;)s=[--n,s];return s}

Спробуйте F (1000): Консоль FireBug не покаже вам більше 190 вкладених масивів, але вони є


3

Java, 88 107 105 104 102 байт

import java.util.*;int o;List f(final int n){return new Stack(){{add(n<1?"":o++);if(o<n)add(f(n));}};}

Досить довго в порівнянні з іншими, хоча ви не можете зробити набагато краще з Java. Перевірка, щоб визначити, чи потрібно продовжувати рекурсію, - це все, що потрібно.


Вам потрібно import java.util.*;для цього , щоб бути самостійною , що містить (повністю або кваліфікацію java.util.Listі java.util.Stack, але це набагато більше). +19, щоб зробити 107, все ще на 7 краще, ніж відповідь на Java, над якою я працював: D
Geobits

Я бачу два, яких можна зберегти: o!=nможна o<n, а можна поміняти потрійний на o<n?o++:"".
Геобіт

В Java 8, я вважаю, що finalввімкнути int nможна зняти.
Джастін

2

Python 2, 56 байт

Я підозрюю, що це може бути більше гольфу.

f=lambda n,i=0:[i,f(n,i+1)]if i<n-1 else[i]if n>0 else[]

Тести:

# for n in (0,1,2,6,26,69): print n, '=>', f(n)
0 => []
1 => [0]
2 => [0, [1]]
6 => [0, [1, [2, [3, [4, [5]]]]]]
26 => [0, [1, [2, [3, [4, [5, [6, [7, [8, [9, [10, [11, [12, [13, [14, [15, [16, [17, [18, [19, [20, [21, [22, [23, [24, [25]]]]]]]]]]]]]]]]]]]]]]]]]]
69 => [0, [1, [2, [3, [4, [5, [6, [7, [8, [9, [10, [11, [12, [13, [14, [15, [16, [17, [18, [19, [20, [21, [22, [23, [24, [25, [26, [27, [28, [29, [30, [31, [32, [33, [34, [35, [36, [37, [38, [39, [40, [41, [42, [43, [44, [45, [46, [47, [48, [49, [50, [51, [52, [53, [54, [55, [56, [57, [58, [59, [60, [61, [62, [63, [64, [65, [66, [67, [68]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]

Що ж, ви перемогли моє рішення Python.
mbomb007

2

CJam, 17 байт

Я знаю, що оптимізатор знайшов 16, але ось найкраще, що я можу зробити:

{:I{[}%;{]}I1e>*}

Це блок, найближчий до функції в CJam, який бере ціле число на стек і залишає потрібний вкладений масив.

Використовуйте цю програму для тестування її , яка ставить вхід у стек, потім викликає функцію та перевіряє стек. Зауважте, що для 0, вихід стека буде містити ""- це власне представлення CJam порожнього масиву.



2

C # - 100

Проста рекурсія. Перевірте нульовий спеціальний регістр і позначте одну змінну вниз, а іншу

object[]A(int y,int x=0){return y==0?new object[0]:y==1?new object[]{x}:new object[]{x,A(--y,++x)};}

C ++ 87

(Visual C ++ 2012)

int*A(int y,int x=0){int*b=new int{x};return!y?new int:--y?(b[1]=(int)A(y,++x))?b:0:b;}

Цей чудовий, під яким я маю на увазі візантійський, але це та сама основна ідея, що і c # one.

Це реалізація масиву стилю C, тому він не дає вам масиву, він дає вказівник int, в якому я зберігав і ints, і інші покажчики. Ось так: [0,*] *->[1,#] #-> [2,&] &-> etcде символи є псевдокодом для значення int вказівника, а -> - куди воно вказує на пам'ять.

Яка чудова зручна реалізація нерівних масивів стилю c, які я створив (кашель), але я вважаю, що це достатньо правдоподібно, щоб бути в межах норм питання.

Тут досить багато зловживань потрійними операторами, а також досить багато зловживань неявним кидком від int до bool.

Приклад: Якщо ми дозволимо int *bar = (int*)A(3);, ми можемо побачити:

bar
0x003bded8 {0}
((int*)bar[1])[0]
1
((int*)(((int*)bar[1])[1]))[0]
2

Яка розмова вказівника для [0, [1, [2]]].

Гаразд, добре. Це насправді не повинно бути жахливим. Ось кілька тестових кодів для запуску цього коду c ++:

int* GetNext(int* p){
  return (int*)p[1];
}

int main()
{
    auto x = 10;
    auto bar = A(x);

    for (int i = 1; i < x; i++){
        bar = GetNext(bar);
        std::cout << bar[0] << std::endl;
    }

}


Версія C ++ не збирається. ideone.com/fmcXYP
Singh Jaggi

Ви повинні згадати компілятор, який використовується поруч C++.
Анмоль Сінгх Джаггі

@anmolSinghJaggi Так, гарна ідея. Visual C ++ 2012, який здебільшого відповідає C ++ 11.
Натан Купер

Старий пост, але з деяким роздумом я звів його до 86 . Array g(params object[]a)=>a;Array f(int y,int x=0)=>y<1?g():y<2?g(x):g(x,f(y-1,x+1));
дата

2

Pyth, 15 байт

?u[HG)_UtQ]tQQY

Що насправді говорить у Python:

Q = eval(input())
if Q:
    print reduce(lambda G,H:[H,G], reverse(range(Q-1)), [Q-1])
else:
    print []

Гей, я радий, що ти вивчаєш Pyth! Якщо ви хочете генерувати оцінений вхід, ви можете використовувати Q, що робить це для вас. Також Y попередньо ініціалізується на [].
isaacg

qJ_1те саме, що !Q. І JtQфактично витрачає 1 байт. ?Y!Qu[HG)_UtQ[tQ
Якубе

Гаразд, я візьму ці байти.
swstephe

@swstephe Якщо ви змінюєте [tQдо ]tQ, що еквівалентно, ви переключаєтеся на порядок операцій ?, так що ви можете замінити !Qз Q. Це призводить до ?u[HG)_UtQ]tQQY- 1 байт збережено.
isaacg

2

Хаскелл , 65 59 45 41 байт

Ці вкладені списки є тією ж структурою даних, що й укорінені Trees, за винятком того, що вони також можуть бути порожніми. Отже, ми можемо використовувати їх список - також їх називають a Forestдля їх представлення.

(0!)
data T=N[T]Int
m!n=[N((m+1)!n)m|m<n]

Спробуйте в Інтернеті!

Пояснення

Перш за все нам потрібно реалізувати Treeтип даних:

data Tree = Node [Tree] Int

Звідси це просто рекурсія, використовуючи два параметри m(підрахунок) та nвідслідковувати, коли закінчується:

m ! n= [ Node ((m+1)!n) m| m<n ]

Альтернативно, 61 байт

import Data.Tree
f n=unfoldForest(\b->(b,[b+1|b<n-1]))[0|n>0]

Спробуйте в Інтернеті!

Пояснення

Функція unfoldForestприймає список початкових значень і функцію x -> (y,[x]). Для кожного початкового значення xвін розгортає дерево за допомогою функції, створюючи кортеж, (y,xs)де yстане корінь, і xsвони використовуються для повторення процедури:

unfoldForest (\b -> (b, [b+1 | b < 2]) [0]
   Node 0 [unfoldForest (\b -> (b, [b+1 | b < 2) [1]]
   Node 0 [Node 1 [unfoldForest (\b -> (b, [b+1 | b < 2) []]]
   Node 0 [Node 1 []]

1

Perl - 44

sub t{$r=[($t)=@_];$r=[$t,$r]while--$t>0;$r}

Will add explanation upon request. You can try it here.


I'm wondering, because I'm not familiar with Perl - Does the most deeply nested array have 2 elements in it, one being nil or whatever the equivalent is? I ask because on the page you link to the innermost array looks like (3,)
Devon Parsons

1
@DevonParsons the code I added to print it in a readable way adds a comma after each element. undef is the equilvalent of nil or null in Perl and there is not an extra element. Perl flattens arrays so this is creating nested array references.
hmatt1

1

JavaScript, 93 bytes

This isn't ideal, but I might as well give it a try. I'll try and golf this further later on, though for now I see no obvious way to.

function f(n){s='[';i=0;while(i<n-1)s+=i+++',[';s+=i||'';do{s+=']'}while(i--);return eval(s)}

You might also try creating a recursive solution, as it might be shorter.
mbomb007

1

Python, 75 bytes

This is just for show. It's the program I wrote when creating/designing this challenge.

f=lambda x,y=[]:y if x<1 else f(x-1,[x-2]+[y or[x-1]])if x>1 else y or[x-1]

1

Python, 44

f=lambda n,i=0:i<n-1and[i,f(n,i+1)]or[i][:n]

Recursively creates the tree. The [:n] at the end is to special-case n==0 into giving the empty list.


It was during this challenge that I realized that and and or can have spaces omitted next to integers, but else cannot.
mbomb007

@mbomb007 It's because else starts with e, and things like 1e6 are valid number literals.
xnor

I knew that, but I didn't know that was why. Thanks.
mbomb007

1
@mbomb007 Actually after 2.6 or 2.7 or so you can lose the space before else, e.g. x = 1 if y==2else 5 works.
Sp3000

It doesn't work in Python 2.7.2 repl.it/eB6 (But it does work in 3.4)
mbomb007

1

Joe, 8 bytes

Note: This is a non-competing answer. The first version of Joe was released after this question.

F:/+,M]R

What do we have here? F: defines a function F that is a chain of /+,, M] and R. When you call Fn, first Rn gets evaluated, returning range from 0 to n, exclusive. M] wraps each element to a list. Then the list is applied to /+,. x +, y returns x + [y]. / is a right fold. Thus, /+,a b c d... returns [a, [b, [c, [d...]]].

Example invocations (code is indented by 3, output by 0):

   F:/+,M]R
   F10
[0, [1, [2, [3, [4, [5, [6, [7, [8, [9]]]]]]]]]]
   F2
[0, [1]]
   F1
[0]
   F0
[]
   F_5
[0, [-1, [-2, [-3, [-4]]]]]

1

Ruby - Recursive version - 52

r=->(n,v=nil){(n-=1;n<0 ?v:r[n,(v ?[n,v]:[n])])||[]}

Non-recursive version: 66 62 57

r=->i{(i-1).downto(0).inject(nil){|a,n|a ?[n,a]:[n]}||[]}

Sample output (same for both versions)

p r[0]  # => []
p r[1]  # => [0]
p r[2]  # => [0, [1]]
p r[6]  # => [0, [1, [2, [3, [4, [5]]]]]]
p r[26] # => [0, [1, [2, [3, [4, [5, [6, [7, [8, [9, [10, [11, [12, [13, [14, [15, [16, [17, [18, [19, [20, [21, [22, [23, [24, [25]]]]]]]]]]]]]]]]]]]]]]]]]]
p r[69] # => [0, [1, [2, [3, [4, [5, [6, [7, [8, [9, [10, [11, [12, [13, [14, [15, [16, [17, [18, [19, [20, [21, [22, [23, [24, [25, [26, [27, [28, [29, [30, [31, [32, [33, [34, [35, [36, [37, [38, [39, [40, [41, [42, [43, [44, [45, [46, [47, [48, [49, [50, [51, [52, [53, [54, [55, [56, [57, [58, [59, [60, [61, [62, [63, [64, [65, [66, [67, [68]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]

The non-recursive version can handle arbitrarily large input.

p r[1000] # => [0, [1, [2, [3, [4, [5, [6, [7, [8, [9, [10, [11, [12, [13, [14, [15, [16, [17, [18, [19, [20, [21, [22, [23, [24, [25, [26, [27, [28, [29, [30, [31, [32, [33, [34, [35, [36, [37, [38, [39, [40, [41, [42, [43, [44, [45, [46, [47, [48, [49, [50, [51, [52, [53, [54, [55, [56, [57, [58, [59, [60, [61, [62, [63, [64, [65, [66, [67, [68, [69, [70, [71, [72, [73, [74, [75, [76, [77, [78, [79, [80, [81, [82, [83, [84, [85, [86, [87, [88, [89, [90, [91, [92, [93, [94, [95, [96, [97, [98, [99, [100, [101, [102, [103, [104, [105, [106, [107, [108, [109, [110, [111, [112, [113, [114, [115, [116, [117, [118, [119, [120, [121, [122, [123, [124, [125, [126, [127, [128, [129, [130, [131, [132, [133, [134, [135, [136, [137, [138, [139, [140, [141, [142, [143, [144, [145, [146, [147, [148, [149, [150, [151, [152, [153, [154, [155, [156, [157, [158, [159, [160, [161, [162, [163, [164, [165, [166, [167, [168, [169, [170, [171, [172, [173, [174, [175, [176, [177, [178, [179, [180, [181, [182, [183, [184, [185, [186, [187, [188, [189, [190, [191, [192, [193, [194, [195, [196, [197, [198, [199, [200, [201, [202, [203, [204, [205, [206, [207, [208, [209, [210, [211, [212, [213, [214, [215, [216, [217, [218, [219, [220, [221, [222, [223, [224, [225, [226, [227, [228, [229, [230, [231, [232, [233, [234, [235, [236, [237, [238, [239, [240, [241, [242, [243, [244, [245, [246, [247, [248, [249, [250, [251, [252, [253, [254, [255, [256, [257, [258, [259, [260, [261, [262, [263, [264, [265, [266, [267, [268, [269, [270, [271, [272, [273, [274, [275, [276, [277, [278, [279, [280, [281, [282, [283, [284, [285, [286, [287, [288, [289, [290, [291, [292, [293, [294, [295, [296, [297, [298, [299, [300, [301, [302, [303, [304, [305, [306, [307, [308, [309, [310, [311, [312, [313, [314, [315, [316, [317, [318, [319, [320, [321, [322, [323, [324, [325, [326, [327, [328, [329, [330, [331, [332, [333, [334, [335, [336, [337, [338, [339, [340, [341, [342, [343, [344, [345, [346, [347, [348, [349, [350, [351, [352, [353, [354, [355, [356, [357, [358, [359, [360, [361, [362, [363, [364, [365, [366, [367, [368, [369, [370, [371, [372, [373, [374, [375, [376, [377, [378, [379, [380, [381, [382, [383, [384, [385, [386, [387, [388, [389, [390, [391, [392, [393, [394, [395, [396, [397, [398, [399, [400, [401, [402, [403, [404, [405, [406, [407, [408, [409, [410, [411, [412, [413, [414, [415, [416, [417, [418, [419, [420, [421, [422, [423, [424, [425, [426, [427, [428, [429, [430, [431, [432, [433, [434, [435, [436, [437, [438, [439, [440, [441, [442, [443, [444, [445, [446, [447, [448, [449, [450, [451, [452, [453, [454, [455, [456, [457, [458, [459, [460, [461, [462, [463, [464, [465, [466, [467, [468, [469, [470, [471, [472, [473, [474, [475, [476, [477, [478, [479, [480, [481, [482, [483, [484, [485, [486, [487, [488, [489, [490, [491, [492, [493, [494, [495, [496, [497, [498, [499, [500, [501, [502, [503, [504, [505, [506, [507, [508, [509, [510, [511, [512, [513, [514, [515, [516, [517, [518, [519, [520, [521, [522, [523, [524, [525, [526, [527, [528, [529, [530, [531, [532, [533, [534, [535, [536, [537, [538, [539, [540, [541, [542, [543, [544, [545, [546, [547, [548, [549, [550, [551, [552, [553, [554, [555, [556, [557, [558, [559, [560, [561, [562, [563, [564, [565, [566, [567, [568, [569, [570, [571, [572, [573, [574, [575, [576, [577, [578, [579, [580, [581, [582, [583, [584, [585, [586, [587, [588, [589, [590, [591, [592, [593, [594, [595, [596, [597, [598, [599, [600, [601, [602, [603, [604, [605, [606, [607, [608, [609, [610, [611, [612, [613, [614, [615, [616, [617, [618, [619, [620, [621, [622, [623, [624, [625, [626, [627, [628, [629, [630, [631, [632, [633, [634, [635, [636, [637, [638, [639, [640, [641, [642, [643, [644, [645, [646, [647, [648, [649, [650, [651, [652, [653, [654, [655, [656, [657, [658, [659, [660, [661, [662, [663, [664, [665, [666, [667, [668, [669, [670, [671, [672, [673, [674, [675, [676, [677, [678, [679, [680, [681, [682, [683, [684, [685, [686, [687, [688, [689, [690, [691, [692, [693, [694, [695, [696, [697, [698, [699, [700, [701, [702, [703, [704, [705, [706, [707, [708, [709, [710, [711, [712, [713, [714, [715, [716, [717, [718, [719, [720, [721, [722, [723, [724, [725, [726, [727, [728, [729, [730, [731, [732, [733, [734, [735, [736, [737, [738, [739, [740, [741, [742, [743, [744, [745, [746, [747, [748, [749, [750, [751, [752, [753, [754, [755, [756, [757, [758, [759, [760, [761, [762, [763, [764, [765, [766, [767, [768, [769, [770, [771, [772, [773, [774, [775, [776, [777, [778, [779, [780, [781, [782, [783, [784, [785, [786, [787, [788, [789, [790, [791, [792, [793, [794, [795, [796, [797, [798, [799, [800, [801, [802, [803, [804, [805, [806, [807, [808, [809, [810, [811, [812, [813, [814, [815, [816, [817, [818, [819, [820, [821, [822, [823, [824, [825, [826, [827, [828, [829, [830, [831, [832, [833, [834, [835, [836, [837, [838, [839, [840, [841, [842, [843, [844, [845, [846, [847, [848, [849, [850, [851, [852, [853, [854, [855, [856, [857, [858, [859, [860, [861, [862, [863, [864, [865, [866, [867, [868, [869, [870, [871, [872, [873, [874, [875, [876, [877, [878, [879, [880, [881, [882, [883, [884, [885, [886, [887, [888, [889, [890, [891, [892, [893, [894, [895, [896, [897, [898, [899, [900, [901, [902, [903, [904, [905, [906, [907, [908, [909, [910, [911, [912, [913, [914, [915, [916, [917, [918, [919, [920, [921, [922, [923, [924, [925, [926, [927, [928, [929, [930, [931, [932, [933, [934, [935, [936, [937, [938, [939, [940, [941, [942, [943, [944, [945, [946, [947, [948, [949, [950, [951, [952, [953, [954, [955, [956, [957, [958, [959, [960, [961, [962, [963, [964, [965, [966, [967, [968, [969, [970, [971, [972, [973, [974, [975, [976, [977, [978, [979, [980, [981, [982, [983, [984, [985, [986, [987, [988, [989, [990, [991, [992, [993, [994, [995, [996, [997, [998, [999]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]

Both versions also gracefully accept negative numbers

p r[-5] # => []

Just curious, at what value does the recursive solution fail (due to memory/stack overflow)?
mbomb007

@mbomb007 On Windows 7 x64, 16Gb RAM, it works on 926 and fails at 927 (stack level too deep (SystemStackError))
Devon Parsons

0

PHP 5.4 (67 bytes):

I know, I know.

It's far from being the shortest answer.

But it works!

Here it is:

function F($n){for($c=$n?[--$n]:[];~$n&&$n--;$c=[$n,$c]);return$c;}

You can test it right here: https://ideone.com/42L35E (ignore the error)


Javascript (57 bytes):

This is the same exact code except that Javascript is picky about the return and I've reduced the variable names:

function F(n){for(c=n?[--n]:[];~n&&n--;c=[n,c]);return c}

See? Same code!


ES6 (49 bytes):

Basically the same exact code, but reduced for ES6:

F=n=>{for(c=n?[--n]:[];~n&&n--;c=[n,c]);return c}

I specified no anonymous functions, or it was in the comments somewhere. I'll make it clearer.
mbomb007

@mbomb007 It wasn't specified. There was nothing enforcing a name on the function. But I've changed it.
Ismael Miguel

There was a comment by me below the question: "That's mostly to prevent people from writing unassigned anonymous functions. Personally, I'd prefer it if it was a function that takes a parameter."
mbomb007

And I did change the question. But it's pretty standard codegolf for functions that they have to be callable by name (aka, more than once and without typing the entire function again.) That's why you see everyone else's functions using f=lambda...
mbomb007

@mbomb007 But it's pretty standard codegolf for functions that they have to be callable by name (aka, more than once and without typing the entire function again.) --> never heard of this, and I use this website for somewhat close to a year. Besides, this is an invalid argument since you can assign the functions to a variable.
Ismael Miguel

0

Javascript (114 bytes):

Everybody else was doing recursive, so I wanted to try an iterative solution. I have too many special cases, though.

I hold a master list, and then loop and append new lists with new numbers.

function q(n){a=[];if(n==1)a=[0];else if(n!=0){a=[0,b=[]];for(i=1;i<n;){c=[];b.push(c);b.push(i++);b=c}}return a}

0

Common Lisp (95 bytes):

(defun f(n &optional(i 0))(cond((< i(1- n))(cons i(list(f n(1+ i)))))((> n 0)(list i))(t nil)))


0

05AB1E, 11 bytes

_i¯ëFNI<α)R

Try it online or verify all test cases.

11-bytes alternative:

_i¯ëݨRvy)R

Try it online or verify all test cases.

Explanation:

05AB1E has no loops that go downwards, so to loop in the range (input, 0] I either have to:

  • Create that range first (ݨR; create range [0, input], remove last item, reverse), and then loop over it (vy);
  • Or loop in the range [0, input) instead (F), and take the absolute difference between the loop-index and the input-1 (NI<α).
_i          # If the (implicit) input is 0:
  ¯         #  Push the global array (empty by default)
 ë          # Else:
  F         #  Loop `N` in the range [0, (implicit) input):
   N        #   Push index `N`
    I<      #   Push input-1
      α     #   Take the absolute difference between the two
       )    #   Wrap everything on the stack into a list
        R   #   Reverse the list
            # (output the result implicitly after the if/loop)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.