Página inicial na gama de listas


26

Esse desafio é simplesmente retornar uma lista de listas de números inteiros, semelhante à função de intervalo do Python, exceto que cada número sucessivo deve ser tão profundo nas listas.

Regras :

  • Crie um programa ou uma função não anônima
  • Deve retornar ou imprimir o resultado
  • O resultado deve ser retornado em uma lista (de listas) ou matriz (de matrizes)
  • Se o parâmetro for zero, retorne uma lista vazia
  • Isso deve poder manipular um parâmetro inteiro 0 <= n <70.
    • (soluções recursivas explodem bem rápido)
  • A função deve ser chamada apenas com um parâmetro.
  • Outro comportamento é indefinido.
  • Isso é código de golfe, então o código mais curto vence.

Exemplo de chamada:

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

Casos de teste:

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: a resposta de isaacg é a mais curta até agora. Atualizarei a resposta aceita se alguém encontrar uma resposta mais curta em um idioma que existia no lançamento do desafio. Obrigado por jogar!


2
Comentário aleatório: É engraçado como o número mínimo de caracteres para um título é 15, e como eu não podia usar o "Range of Lists", criei esse aqui imediatamente.
mbomb007

Isso é principalmente para impedir que as pessoas escrevam funções anônimas não atribuídas. Pessoalmente, eu preferiria se fosse uma função que aceita um parâmetro.
mbomb007

É permitido criar duas funções, onde uma é uma função auxiliar?
ProgramFOX

@ProgramFOX Sim. Eu acho que código externo para sua função é bom, pois se alguém quisesse import mathem Python, por exemplo, não acho que isso poderia ocorrer dentro de uma função.
mbomb007

@DevonParsons Há muitas perguntas com um exemplo de programa, mas tudo bem.
mbomb007

Respostas:


11

Pitão, 13 bytes

?hu]+HG_UQYQY

Experimente aqui.

                 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)

Assumindo ⎕IO=0:

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

Explicação:

  • ×⍵:se é positivo,
    • ,∘⊂∘,: junte o operando esquerdo ao delimitar o operando direito (ou seja x ,∘⊂∘, y = [x, [y]])
    • /: reduzir
    • ⍳⍵: os números 0..⍵-1
    • : divulgar o resultado
  • : de outra forma
    • : retorna a lista vazia
    • (isso é necessário porque /falha e ⍳0fornece a lista vazia.)

Termo aditivo:

Esta função retorna uma matriz aninhada. No entanto, é um pouco difícil diferenciar isso da saída padrão da APL. Ele separa os itens da matriz por espaços, para que você possa diferenciar o aninhamento por espaços duplos. Aqui está uma função que pega uma matriz aninhada e retorna uma string, formatando a matriz aninhada no estilo Python (ou seja [a,[b,[c,...]]]).

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

1
Eu acho que você precisa de outro ∘, após o anexo, caso contrário (pelo menos no meu intérprete - dyalog14), o último elemento não está incluído. por exemplo, [0 [1 [2 3]]]
Moris Zucca 05/03

@marinus Você pode verificar isso?
mbomb007

Alterei a declaração do problema há um ou dois dias para esclarecer que funções definidas devem ser atribuídas a uma variável. Você deve adicionar f←ao início do seu programa, a menos que o modifique para aceitar a entrada do usuário.
mbomb007

Além disso, a saída não mostra a profundidade da lista de um número que varia claramente ... cada espaço é um colchete implícito?
mbomb007

@MorisZucca Eu tenho que concordar. Veja aqui: ngn.github.io/apl/web/#code=%7B%D7%u2375%3A%2C%u2218%u2282/…
mbomb007

9

Haskell, 67 bytes

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

No Haskell, todos os elementos de uma lista devem ser do mesmo tipo; portanto, não posso misturar números inteiros com a lista de números inteiros e preciso definir um tipo de lista personalizado L. A função auxiliar #constrói recursivamente a lista necessária. A função principal pverifica a lista vazia e chama o #contrário.

Como novos tipos de dados não podem ser impressos por padrão (as regras permitem apenas retornar a lista), adiciono mais código para fins de demonstração:

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

Agora:

-- 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

Python, 48 bytes

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

Usando a multiplicação de lista para lidar com o caso especial.


Eu não acho que isso seja específico do Python 2 - parece funcionar em todos os pitães.
Isaacg

@isaacg Fixed. Minha submissão original não foi embora :)
SP3000

Um pequeno salvamento de caracteres: *(i<n-1)pode ser feito como [:n+~i], uma vez que é uma lista única.
Xnor


5

CJam, 16 bytes

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

Este é um programa completo. Ele recebe entrada via STDIN e imprime a matriz final em STDOUT.

Assim como na outra entrada CJam, a 0entrada será impressa ""como essa é a representação de uma matriz vazia no CJam.

Como funciona :

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";

Experimente online aqui


3

JavaScript (ES6) 40

Solução recursiva, bastante robusta, sem golpes. A atualização falha perto de 6500 com 'muita recursão'

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

Solução iterativa (45) Sem limites, exceto o uso de memória

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

Tente F (1000): o console do FireBug não mostrará mais de 190 matrizes aninhadas, mas elas estão lá


3

Java, 88 107 105 104 102 bytes

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

Bastante longo em comparação com os outros, embora você não possa fazer muito melhor com Java. Uma verificação para determinar se é necessário continuar a recursão.


Você precisa que import java.util.*;isso seja auto-suficiente (ou totalmente qualificado java.util.Liste java.util.Stack, mas isso é muito mais longo). +19 para torná-lo 107, ainda 7 melhor do que a resposta Java Eu estava trabalhando em: D
Geobits

Vejo dois que você pode salvar: o!=npode ser o<ne você pode trocar o ternário o<n?o++:"".
Geobits 4/03/15

No Java 8, acredito que o finalon int npossa ser removido.
Justin

2

Python 2, 56 bytes

Eu suspeito que isso poderia ser jogado mais.

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

Testes:

# 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]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]

Bem, você venceu a minha solução Python.
mbomb007

2

CJam, 17 bytes

Sei que o Optimizer encontrou 16, mas aqui está o melhor que posso fazer:

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

Este é um bloco, a coisa mais próxima de uma função no CJam, que pega um número inteiro na pilha e deixa a matriz aninhada desejada.

Use este programa para testá-lo , que coloca a entrada na pilha, depois chama a função e inspeciona a pilha. Observe que 0, para , a saída da pilha conterá ""- esta é a representação nativa do CJam de uma matriz vazia.



2

C # - 100

Recursão simples. Verifique o caso especial zero e marque com uma variável, abaixo com a outra

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;}

Este é ótimo, com o que quero dizer bizantino, mas é a mesma idéia básica que o c # one.

É uma implementação de matriz no estilo C, por isso não fornece uma matriz, fornece um ponteiro int, no qual eu estava armazenando ints e outros ponteiros. Assim: [0,*] *->[1,#] #-> [2,&] &-> etconde os símbolos são pseudocódigo para o valor int de um ponteiro e o -> é para onde ele aponta na memória.

Que excelente implementação fácil de usar de matrizes irregulares no estilo c que eu criei (tosse), mas mantenho que é plausível o suficiente para estar dentro das regras da pergunta.

Há muitos operadores ternários abusando aqui, e também muitos abusando da conversão implícita de int para bool.

Exemplo: Se deixarmos int *bar = (int*)A(3);, podemos ver:

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

Qual é o ponteiro para [0, [1, [2]]].

Certo, tudo bem. Na verdade, não precisa ser terrível. Aqui está um código de teste para executar este código 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;
    }

}


A versão C ++ não compila. ideone.com/fmcXYP
Anmol Singh Jaggi

Você deve mencionar o compilador usado ao lado C++.
Anmol Singh Jaggi

@anmolSinghJaggi Sim, boa ideia. Visual C ++ 2012, que é principalmente compatível com C ++ 11.
Nathan Cooper

Post antigo, mas com alguns ajustes, reduzi-o para 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));
dana

2

Pitão, 15 bytes

?u[HG)_UtQ]tQQY

O que realmente está dizendo, em Python:

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

Ei, que bom que você está aprendendo Pyth! Se você deseja gerar a entrada avaliada, pode usar Q, o que faz isso para você. Além disso, Y é pré-inicializado para [].
Isaacg

qJ_1é o mesmo que !Q. E JtQrealmente desperdiça 1 byte. ?Y!Qu[HG)_UtQ[tQ
Jakube 5/03

Ok, eu vou pegar esses bytes.
precisa saber é

@swstephe Se você mudar [tQpara ]tQ, o que é equivalente, você trocará para a ordem das operações de ?, para poder substituir !Qpor Q. Isso resulta em ?u[HG)_UtQ]tQQY- mais 1 byte salvo.
Isaacg 8/03

2

Haskell , 65 59 45 41 bytes

Essas listas aninhadas são da mesma estrutura de dados que Trees com raiz , exceto que elas também podem estar vazias. Portanto, podemos usar uma lista deles - também chamada de a Forestpara representá-los.

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

Experimente online!

Explicação

Primeiro de tudo, precisamos implementar o Treetipo de dados:

data Tree = Node [Tree] Int

A partir daí, é apenas a recursão usando dois parâmetros m(contagem) e npara acompanhar quando terminar:

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

Alternativa, 61 bytes

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

Experimente online!

Explicação

A função unfoldForestpega uma lista de valores iniciais e uma função x -> (y,[x]). Para cada valor inicial, xela desdobra uma árvore usando a função, produzindo uma tupla (y,xs)onde yse tornará a raiz e xssão usadas para repetir o procedimento:

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}

Adicionará explicação mediante solicitação. Você pode tentar aqui .


Estou me perguntando, porque não estou familiarizado com Perl - A matriz mais profundamente aninhada tem 2 elementos, um ser nilou qualquer outro equivalente? Eu pergunto porque na página que você conectar-se aos olhares de matriz mais íntimos como(3,)
Devon Parsons

1
@DevonParsons o código que adicionei para imprimi-lo de maneira legível adiciona uma vírgula após cada elemento. undefé o equilvalente de nilou nullem Perl e não há um elemento extra. O Perl nivela matrizes, portanto, isso cria referências de matriz aninhadas.
precisa saber é

1

JavaScript, 93 bytes

Isso não é o ideal, mas é melhor tentar. Vou tentar jogar isso ainda mais tarde, embora por enquanto não veja uma maneira óbvia.

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

Você também pode tentar criar uma solução recursiva, pois ela pode ser mais curta.
mbomb007

1

Python, 75 bytes

Isto é apenas para mostrar. É o programa que escrevi ao criar / projetar esse desafio.

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]

Cria recursivamente a árvore. O [:n]final é um caso especial n==0para dar a lista vazia.


Foi durante esse desafio que percebi isso ande orposso ter espaços omitidos próximos a números inteiros, mas elsenão posso.
mbomb007

@ mbomb007 É porque elsecomeça com e, e coisas como 1e6são literais numéricos válidos.
Xnor

Eu sabia disso, mas não sabia por isso. Obrigado.
mbomb007

1
@ mbomb007 Na verdade, depois de 2.6 ou 2.7, você pode perder espaço antes else, por exemplo, x = 1 if y==2else 5funciona.
Sp3000

Ele não funciona no Python 2.7.2 repl.it/eB6 (Mas funciona no 3.4) #
mbomb007 15/15

1

Joe , 8 bytes

Nota: Esta é uma resposta não concorrente. A primeira versão do Joe foi lançada após esta pergunta.

F:/+,M]R

O que temos aqui? F:define uma função F que é uma cadeia de /+,, M]e R. Quando você liga Fn, primeiro Rné avaliado, retornando um intervalo de 0 a n, exclusivo. M]agrupa cada elemento em uma lista. Em seguida, a lista é aplicada /+,. x +, y retorna x + [y]. /é uma dobra direita. Assim, /+,a b c d...retorna[a, [b, [c, [d...]]] .

Invocações de exemplo (o código é recuado por 3, produzido por 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 - Versão Recursiva - 52

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

Versão não recursiva: 66 62 57

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

Saída de amostra (o mesmo para as duas versões)

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]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]

A versão não recursiva pode manipular entradas arbitrariamente grandes.

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]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]

Ambas as versões também aceitam graciosamente números negativos

p r[-5] # => []

Apenas curioso, em que valor a solução recursiva falha (devido ao estouro de memória / pilha)?
mbomb007

@ mbomb007 No Windows 7 x64, 16GB de RAM, ele funciona em 926 e falha em 927 ( stack level too deep (SystemStackError))
Devon Parsons

0

PHP 5.4 (67 bytes):

Eu sei eu sei.

Está longe de ser a resposta mais curta.

Mas funciona!

Aqui está:

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

Você pode testá-lo aqui: https://ideone.com/42L35E (ignore o erro)


Javascript (57 bytes):

Este é o mesmo código exato , exceto que o Javascript é exigente quanto ao retorno e reduzi os nomes das variáveis:

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

Vejo? O mesmo código!


ES6 (49 bytes):

Basicamente, o mesmo código exato, mas reduzido para o ES6:

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

Não especifiquei nenhuma função anônima ou estava nos comentários em algum lugar. Vou deixar mais claro.
mbomb007

@ mbomb007 Não foi especificado. Não havia nada forçando um nome na função. Mas eu mudei isso.
Ismael Miguel

Houve um comentário meu abaixo da pergunta: "Isso é principalmente para impedir que as pessoas escrevam funções anônimas não atribuídas. Pessoalmente, eu preferiria se fosse uma função que usa um parâmetro".
mbomb007

E eu fiz mudar a pergunta. Mas é um codegolf bastante padrão para funções que elas precisam ser chamadas pelo nome (ou seja, mais de uma vez e sem digitar a função inteira novamente.) É por isso que você vê as funções de todos os outros usando 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.)-> nunca ouvi falar disso, e eu uso este site há quase um ano. Além disso, este é um argumento inválido, pois você pode atribuir as funções a uma variável.
Ismael Miguel

0

Javascript (114 bytes):

Todo mundo estava fazendo recursividade, então eu queria tentar uma solução iterativa. Eu tenho muitos casos especiais, no entanto.

Possuo uma lista principal e, em seguida, faço um loop e anexo novas listas com novos números.

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

Lisp comum (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

Experimente online ou verifique todos os casos de teste .

Alternativa de 11 bytes:

_i¯ëݨRvy)R

Experimente online ou verifique todos os casos de teste .

Explicação:

05AB1E não possui loops que vão para baixo, portanto, fazem um loop no intervalo (input, 0] eu tenho que:

  • Crie esse intervalo primeiro ( ݨR; crie um intervalo [0, input], remova o último item, inverta) e depois faça um loop sobre ele (vy );
  • Ou faça um loop no intervalo [0, input)( F) e faça a diferença absoluta entre o índice de loop e a entrada 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)
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.