Você deve produzir uma função que aninhe uma string s
dentro de uma matriz, n
vezes
>>> N("stackoverflow",2)
[['stackoverflow']]
Parâmetros:
s
- Uma string asciin
- um inteiro>= 0
Regras
- O menor código vence.
- A saída será um aninhada
array
,list
outuple
(tipo ou semelhante baseado fora uma matriz)
Casos de teste
>>> N("stackoverflow",0)
'stackoverflow'
>>> N("stackoverflow",1)
['stackoverflow']
>>> N("stackoverflow",5)
[[[[['stackoverflow']]]]]
Inspirado por: Aninhando uma string dentro de uma lista n vezes, ou seja, lista de uma lista de uma lista
"
? Por exemploN("stack\"overflow",5)
Respostas:
Geléia , 2 bytes
Um pouco confuso, já que: (1) Jelly não tem cordas, apenas listas de caracteres; e (2); a saída não mostrará o aninhamento. Para ver que isso realmente está fazendo o que é solicitado, observe uma representação de sequência Python do resultado com:
Um par extra de
[]
estará presente, pois a própria string será uma lista de caracteres. Por exemploQuão?
O código de prova de conceito acrescenta:
fonte
Java e C #, 62 bytes
Deve funcionar sem modificação em Java e C #.
fonte
05AB1E , 3 bytes
Código
Explicação
Isso significa que isso também funciona para o 0- case, já que a string já está na pilha.
Experimente online!
fonte
JavaScript (ES6), 20 bytes
Embora as pessoas normalmente me importunem em organizar minhas funções para economizar 1 byte, este é um caso em que realmente contribui para a solução.
fonte
d=>g=n=>n?[g(n-1)]:d
Mathematica, 13 bytes
fonte
CJam ,
76 bytesIntérprete online
Esta é uma função sem nome que leva os seus argumentos a partir da pilha como
S N
,S
sendo a corda eN
sendo os envoltórios. Você pode executá-lo com o~
operador, ou seja, avaliar.Explicação:
fonte
{{a}*}
ou{'a*~}
.{a}
n vezes) em vez do segundo (produz uma sequência de n sea
executa-a).Javascript ES6, 23 bytes
Função recursiva
Currying resulta no mesmo comprimento
fonte
Braquilog , 10 bytes
Experimente online!
Explicação
Isso seria de 3 bytes se não fosse corrigido. Aqui precisamos de tudo isso para obter a lista,
[String, T, built-in_group]
mesmo que[String, T]
já seja nossa contribuição.Infelizmente,
:g
resulta diretamente[[String, T], built-in_group]
, o que não é reconhecido corretamentei
porque o número inteiroT
está dentro da primeira lista.fonte
MATL, 6 bytes
Isso produz uma matriz de células aninhadas como saída. Com a exibição padrão do MATL, no entanto, você não pode ver que é isso que é, pois não mostrará todas as chaves. A demonstração abaixo é uma versão ligeiramente modificada que mostra a representação em cadeia da saída.
Experimente Online
Explicação
fonte
Pyke, 3 bytes
Experimente aqui!
fonte
Pitão , 3 bytes
Permalink
Isso produzirá algo como
...[[[[['string']]]]]...
. Não vou citar para a profundidade zero:string
.Explicação:
Se você deseja citar com profundidade zero, use esta solução de 4 bytes (explicação):
fonte
PHP, 60 bytes
48 bytes se parecer apenas com a tarefa
fonte
function f($s,$n){return$n?[f($s,$n-1)]:$s;}
.print_r()
e, se você não gostar dessa opção,serialize()
será mais curta do quejson_encode()
a outra e diferenciará a saída.')
no final do código parece estranho.Ruby: 23 bytes
Isso é atualizado para torná-lo um Proc exigível, e não o snippet original. Eu estaria interessado em saber se existe uma maneira de
s
retornar implicitamente, em vez de precisar devolvê-lo explicitamente.fonte
->s,n{...}
.C,
44 bytes, 41 bytesVocê pode testá-lo fazendo o seguinte:
A saída:
Claro, você receberá avisos. Isso funciona no
gcc
bash na minha máquina Windows (gcc version 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.3)
, bem como em uma verdadeira máquina Linux (gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5)
).fonte
int*n(s,a)int*s;{return!a?s:n(&s,a-1);}
funciona com o gcc.cc -v
->Apple LLVM version 8.0.0 (clang-800.0.38)
.!
condição ternária e mudar a ordems
en(&s,a-1)
salvar um byte?n(s,6)
, você deve mudar***
para******
na declaração de variável e usar. Isso é necessário exatamente porque a função faz o que se espera: aninhe a string em uma matriz várias (aqui: 6) vezes. É claro que você ainda obteria três níveis[]
porque eles são codificados. Eu acho que o programa não deveria produzi-los. Esse desafio não é sobre colchetes, é sobre aninhamento. Alguns idiomas imprimem matrizes com colchetes, C não possui nenhuma função interna para imprimi-las. E daí? Não é necessário aqui.*
na assinatura da função?Python, 32 bytes
fonte
Ruby, 25 caracteres
Reescrever de jamylak 's solução Python .
Exemplo de execução:
fonte
C # 6, 50 bytes
fonte
n<1
? Também -2 bytes se você usar emobject
vez dedynamic
.Ruby, 24 bytes
Chamado o mesmo que na resposta do manatwork , mas uma implementação mais estranha.
*s
quebra a entrada (uma sequência possivelmente aninhada) em uma matriz. Então, sen
for zero,s[n]
retorna o primeiro elemento des
, transformando a função em um no-op. Caso contrário, ele retornará,nil
poiss
só terá um elemento, então passamos para a chamada recursiva.fonte
V , 6 bytes
Experimente online!
Explicação:
fonte
Perl 6 , 23 bytes
Expandido:
fonte
Agda, 173 bytes
Como o tipo de retorno da função depende do número fornecido como argumento, este é claramente um caso em que uma linguagem tipicamente dependente deve ser usada. Infelizmente, o golfe não é fácil em um idioma em que é necessário importar listas e naturais para usá-los. No lado positivo, eles usam
suc
onde eu esperava o verbososucc
. Então, aqui está o meu código:(Espero encontrar todos os lugares onde os espaços podem ser omitidos.)
L
É uma função de tipo que, dada uma naturaln
e um tipo,a
retorna o tipo den
vezes que as listas aninhadas sãoa
, o mesmoL 3 Bool
seria o tipo de listas de listas de listas deBool
(se tivéssemos importadoBool
). Isso nos permite expressar o tipo de nossa função como(n : ℕ) -> {a : Set} -> a -> L n a
, onde os chavetas tornam esse argumento implícito. O código usa uma maneira mais curta de escrever esse tipo. A função agora pode ser definida de maneira óbvia pela correspondência de padrões no primeiro argumento.Carregando este arquivo com uma
.agda
extensão para emacs permite usoC-c C-n
(avaliar termo à forma normal), de entrada, por exemplo,f 2 3
e obter a resposta correta em uma forma estranha:(3 ∷ []) ∷ []
. Agora, é claro, se você quiser fazer isso com strings, precisará importá-las ...fonte
→
vez de->
, mas é claro que aumenta o tamanho de um arquivo codificado em UTF-8.k, 3 bytes
Tomada como uma função diádica,
/
aplicará iterativamente a função da esquerda,:
(enlist
) n vezes ao segundo argumento.Exemplo:
fonte
PHP, 44 bytes
nada sofisticado, apenas uma função recursiva
fonte
Python 2, 32 bytes
Coloca
n
os colchetes abertos antes da cadeia en
fecha os colchetes antes dela e avalia o resultado. Se uma saída de string for permitida, elaeval
poderá ser removida.fonte
Na verdade , 4 bytes
A entrada é
string
entãon
. Sugestões de golfe são bem-vindas. Experimente online!Ungolfing
fonte
R,
3940 bytesEDIT: corrigido o
n=0
problema graças a @rturnbull.Função que recebe duas entradas
s
(sequência) en
(aninhamento) e gera a lista aninhada. Observe que a classe Rlist
imprime nativamente a saída de maneira diferente da maioria das outras linguagens, no entanto, é funcionalmente semelhante a um mapa de chave / valor (com possíveis chaves sem nome) ou a uma lista em python.Exemplo
fonte
n=0
Porém, não fornece a saída desejada . Antes eu vi sua resposta, eu vim com uma solução recursiva que pode lidar comn=0
, mas é 1 byte mais do que a sua solução (40 bytes):f=function(s,n)if(n)list(f(s,n-1))else s
n=0
caso. No entanto, sua solução é na verdade38
bytes excluindo a nomeação da função e, portanto, mais curta. Grande capturaf(s,n-1)
chamada dentro dele.) Funções anônimas recursivas não são possíveis em R, tanto quanto eu sei.f=function(s,n)'if'(n,list(f(s,n-1)),s)
.Raquete 83 bytes
Ungolfed:
Teste:
Resultado:
fonte
Haskell,
4038 bytesO sistema de tipos estritos de Haskell impede o retorno de tipos diferentes (Strings vs. Lista de Strings vs. Lista de Strings, ...), então eu tenho que definir meu próprio tipo que acomode todos esses casos. A função principal
f
chama recursivamenten
vezes o construtorC
para aninhar eN
para o caso base.Exemplo de uso (com
deriving (Show)
adicionado ao novodata
tipo para poder imprimi-lo):f 4 "codegolf"
->C (C (C (C (N "codegolf"))))
.Edit: @Christian Sievers salvou 2 bytes reescrevendo a função em um estilo sem pontos para o argumento da string. Obrigado!
fonte
deriving
cláusula adicional : os parênteses não são necessários. - Não tenho certeza se é bom aninhar apenas oC
construtor que não é do tipo lista. Minha tentativa muito semelhante foi baseada em um tipo de dados definido comodata D x=J x|L[D x]
.f 0=N;f n=C. f(n-1)
1:(2:(3:([])))
com C (C (C (N "codegolf")))).C
é cons (:
),N
é nulo ([]
).C
não contras, apenas incorpora, seu tipo de dados não pode expressar[["a","b"],["c"]]
. Mas talvez isso seja bom, pois esse problema precisa apenas de singletons. -f n=...
não faz sentido. Ponto reduzido?Either
), mesmo que isso significasse que os construtores eram um pouco mais detalhados?tinylisp (repl), 34 bytes
Define uma função
F
. Tecnicamente, tinylisp não possui seqüências de caracteres, mas esse código funcionará para qualquer tipo de dado fornecido.Ungolfed (chave para builtins:
d
= define,q
= cita,i
= se,c
= contras,s
= subtrai):Exemplo de uso:
fonte
Clojure, 24 bytes
Clojure é um pouco competitivo aqui.
iterate
cria uma sequência dex, (f x), (f (f x)) ...
,nth
retorna o elemento necessário.Veja on-line: https://ideone.com/2rQ166
fonte