Transformar um número inteiro n em uma lista que contém n vezes

15

Dado um número inteiro ncomo entrada, retorne uma lista contendo tempos nrepetidos n. Por exemplo, o programa pegaria 5e transformaria em [5,5,5,5,5]. Os elementos precisam ser inteiros, não cadeias. Não são permitidas funções internas que realizam a tarefa.

Isso é , então as regras padrão se aplicam.

Bruno E
fonte
43
@BrunoE Isso ainda não responde o porquê . Você tem um motivo real para banir os embutidos? Para citar o xnor: Em geral, se o seu desafio for muito simples para ser interessante, ele não será salvo ao banir as coisas.
Lynn
13
@BrunoE, embora eu concorde com o sentimento, preferimos a objetividade aqui no ppcg. Ou algo é ou não é válido, as opiniões não devem entrar na equação.
Skidsdev 21/08/19
5
@BrunoE As especificações devem ser feitas de modo que se possa decidir indiscutivelmente se uma entrada é válida ou não. Compartilhe seus pensamentos sobre as respostas existentes e torne as especificações mais objetivas quando se trata built-in.
Mr. Xcoder
6
Ainda estou confuso o que conta como um "embutido" para esta tarefa. O *operador do Python está ok? O que é um exemplo de um built-in que não está bem?
Steve Bennett
8
Estou surpreso que ninguém tenha mencionado isso ainda, mas temos uma caixa de areia para desafios, onde você pode publicá-los para obter feedback sobre eles, antes que eles sejam lançados. Dessa forma, você pode ter evitado discutir as regras do desafio enquanto outros já enviaram suas respostas.
JAD 23/08

Respostas:

32

Geléia , 1 byte

x

Experimente online!

Observe que isso não é o “ n nhorário de repetição ” interno - sua função é mais geral que isso. Por exemplo, 4,5,6x1,2,3igual [4, 5, 5, 6, 6, 6]. Dado apenas um argumento, Jelly só acontece de usá-lo como tanto da esquerda como argumento para a direita para o link fornecido, mas essa funcionalidade não é inerente a x.

Se isso não contar, existem várias alternativas divertidas de 2 bytes:

x` ṁ` Ra Rị R» a€ oR oḶ oṬ oẊ Ḷị Ḷ» Ṭị Ṭ» Ẋị Ẋ» ị€ ṛ€ ȧ€ »€

etc.

Lynn
fonte
10
Bem, sim. Toda resposta de código de golfe é uma coleção de recursos internos que realizam a tarefa. Você pode banir esta resposta se x"fez todo o trabalho", mas certamente não - há um "0 bytes" implícito de lógica de análise de link e coerção de matriz para transformar isso em repeat([n], n), e é exatamente isso que outras respostas Faz.
21417 Lynn
8
@ Adám Esta é a função "repita cada elemento de xy times", recebendo 2 argumentos. O que o faz cumprir a tarefa é como Jelly analisa argumentos implícitos, o que não tem nada a ver com a função em si.
Erik the Outgolfer
6
Se esta resposta for inválida, a restrição da pergunta não é "Sem componentes internos", mas "Respostas de 1 byte", que é uma limitação extremamente arbitrária que parece contraproducente no código de golfe.
Kamil Drakari
8
Eu acho que um argumento para que isso não seja incorporado é que existem duas outras respostas de 1 byte no Jelly que fazem a mesma coisa e, portanto, essa resposta pode ser qualquer uma das três. Não há três embutidos (seria de esperar) para " n ntempos de repetição ", portanto, eles não podem ser "embutidos" para isso.
nmjcman101
6
Todo esse tópico de comentários parece um bom argumento para não proibir algo tão subjetivo quanto os internos.
tricoplax
22

Python 3 , 14 bytes

lambda k:[k]*k

Experimente online!

Mr. Xcoder
fonte
O que há de errado com apenas [n]*n?
3
@paxdiablo Esse é um trecho. Podemos criar programas ou funções completos de acordo com o meta consenso.
Sr. Xcoder 23/08/19
19

Linguagem de script da operação Flashpoint ,  50  46 bytes

f={a=[];t=_this;while{count a<t}do{a=a+[t]};a}

Ligue para:

hint format["%1", 5 call f]

Resultado:

Steadybox
fonte
Você tem pós-decremento i--, e +=nisso?
TheLethalCoder
3
Por que as capturas de tela para isso sempre estão em um deserto árido? Você deve usar um mapa legal para suas capturas de tela: P.
Magic Octopus Urn
2
@MagicOctopusUrn Isso é melhor?
Steadybox
1
@Steadybox ahaha! Épico: P. Essa é a cidade da esquerda para morrer? Parece a igreja em que você começa.
Magic Octopus Urn
1
Eu acho que as capturas de tela devem ser postadas cortadas em uma imagem menor. Não precisamos ver o mapa e ele distrai a saída real.
Mbomb007
12

APL (Dyalog) , 2 bytes

Cinco soluções igualmente curtas. Os dois últimos são cortesia de Zacharý .


⍴⍨

Experimente online!

 ciclicamente r eshape

 auto


/⍨

Experimente online!

/ replicar

 auto


\⍨

Experimente online!

\ expandir

 auto


⌿⍨

Experimente online!

 replicar ao longo do primeiro (e único) eixo

 auto


⍀⍨

 expandir ao longo do primeiro (e único) eixo

 auto

Experimente online!

Adão
fonte
@Uriel Há mais um…
Adám
1
Ambos ⌿⍨e ⍀⍨trabalho.
Zachary
2
Foi intencional que o 'eu' parecesse um rosto?
geokavel
1
@geokavel I don't think so, but I also noticed it as a typed this post. Makes it pretty mnemonic, no? In fact, selfie is one of its semi-official names, so in the RIDE interface to Dyalog APL, you can insert by typing ``selfie.
Adám
1
@sethrin TIO counts characters (and UTF-8 bytes where applicable), but it is up to the user to ensure that they do not use any characters that are missing from a single-byte character set (SBCS). For APLs, see here.
Adám
11

Mathematica, 10 bytes

#~Table~#&
J42161217
fonte
10

Proton, 8 bytes

n=>[n]*n

Try it online!

totallyhuman
fonte
11
This combines the best of the python answer and the javascript answer, I love it!
Bruno E
9

Octave, 12 bytes

@(n)~(1:n)+n

Try it online!

rahnema1
fonte
What does the ~ in octave, because that's the only part of your code I don't understand..
Michthan
1
@Michthan Sorry for late reply. ~ is the not operator that converts 1:n to an array of 0s of size n. You can use ! instead of it.
rahnema1
9

JavaScript (ES6), 19 bytes

n=>Array(n).fill(n)

Try it

o.innerText=(f=
n=>Array(n).fill(n)
)(i.value=8);oninput=_=>o.innerText=f(+i.value)
<input id=i type=number><pre id=o>

Shaggy
fonte
3
An array without ... - whatever next?!
Neil
1
@Neil: it felt wrong even as I was typing it! :D
Shaggy
7

Pyth, 2 bytes

*]

Test suite.


*]QQ - Full program with implicit input

 ]   - Turn the input into a list.
*    - Repeat it a number of times equal to the input. 
Mr. Xcoder
fonte
7

Haskell, 13 bytes

f n=n<$[1..n]

Try it online! Usage: f 5 yields [5,5,5,5,5]. For n=5, [1..n] yields the list [1,2,3,4,5]. n<$ replaces each element of this list with n.

Laikoni
fonte
3
Mine's a bit longer, but I like it anyway: join replicate
amalloy
@amalloy This would indeed be the clean Haskell way to do it. However, join is not part of Prelude and thus requiers a lengthy import Control.Monad, which rarely makes it useful for golfing.
Laikoni
6

R, 18 bytes

array(n<-scan(),n)

Try it online!

user2390246
fonte
6
Is rep(n<-scan(),n) too close to a builtin?
Robin Gertenbach
@RobinGertenbach Maybe you should post it as a separate answer.
Andreï Kostyrka
5

05AB1E, 2 bytes

Try it online!

Emigna
fonte
Nice, better than .D).
Magic Octopus Urn
@MagicOctopusUrn: Yeah, that was my first thought.
Emigna
5

Dodos, 76 bytes

	f f r 2
2
	
	
r
	r d
	f s t f
d
	dip f s t
	f
t
	dot f
	dot
s
	s dip
f
	dab

Try it online!

Explanation:

f is an alias for dab (tail).

s is subtraction, as explained on the wiki: (x, y) → (0, y−x) when x ≤ y.

t maps (a, b, c…) to (b+c+…, a+b+c+…).

f s t maps (a, b, c…) to a. This is our “head” function.

d dips only the head of its argument: (a, b, c…) → (|a−1|, b, c…)

r is the main repetition logic. We map (a, b) to (*r(|a−1|, b), b).

For example, r(4, 7) will evaluate as

  r(4, 7)
= r(3, 7), 7
= r(2, 7), 7, 7
= r(1, 7), 7, 7, 7
= r(0, 7), 7, 7, 7, 7
  → This would call r(1, 7), but (1, 7) ≥ (0, 7), so surrender!
= 0, 7, 7, 7, 7, 7.

Finally, we define 2, which maps n → (n, n), and define main as f f r 2, computing r(n, n) and chopping off the first two elements.

Lynn
fonte
4

Japt, 2 bytes

ÆU

Test it


Explanation

Implicit input of integer U. Generate an array of integers from 0 to U-1. Fill it with U. Implicit output of resulting array.

Shaggy
fonte
4

TeX, 81 bytes

\newcommand{\f}[1]{#1\count0=2\loop,#1\advance\count0 by1\ifnum\count0<#1\repeat}

Usage

\documentclass[12pt,a4paper]{article}
\begin{document}
\newcommand{\f}[1]{#1\count0=2\loop,#1\advance\count0 by1\ifnum\count0<#1\repeat}

\f{5}

\f{10}
\end{document}

enter image description here

Leaky Nun
fonte
That's actually LaTeX. In Tex it'd be much shorter.
A Gold Man
4

Husk, 2 bytes

´R

Try it online!

´    -- Apply next function twice to same argument
 R   -- given an integer n and some element, replicate the element n-times

Polite alternative (3 bytes)

ṠIR

Try it online!

Laikoni
fonte
4

Haskell (14 bytes)

replicate>>=id

Thanks to @nimi, I don't need any import anymore. Yay!

It's a function that takes an integer argument; for example, the following returns [5,5,5,5,5]:

(replicate>>=id) 5
tomsmeding
fonte
1
Why not id=<<replicate? It's also 14 bytes but doesn't need the import.
nimi
@nimi Very good point! Overlooked that possibility. (I really need to dive into the arrow monad more...)
tomsmeding
4

Java (OpenJDK 8), 50 48 bytes

n->java.util.Arrays.stream(new int[n]).map(i->n)

Try it online!

-2 bytes thanks to @Jakob

Inspired by the comments in @OlivierGrégoire's post, and optimized a little further. Takes an integer input, creates an IntStream of n elements, then maps each element to n and returns it.

Xanderhall
fonte
You can save 2 bytes by starting with java.util.Arrays.stream(new int[n]).
Jakob
4

Perl 5, 18 14 bytes

-4 bytes thanks to @DomHastings

sub{(@_)x"@_"}

Try it online!

Is x a builtin that does the entire task? Sort of? Not really? Rules unclear?

Edit: Yeah, probably it's fine.

aschepler
fonte
Had pretty much the same, but you can change the first $_[0] to @_! Also the second can be"@_" I think...
Dom Hastings
I would say it doesn't count as a built-in because you have to work around the fact that it takes two inputs instead of one.
Brad Gilbert b2gills
Why not $_=$_ x$_ with perl -pe?
Thor
@Thor x does string repetition, not list repetition, unless the left operand is in parentheses (or is a qw operator) and the x is evaluated in list context. And of course $_ is a scalar, not a list.
aschepler
1
@Thor I wouldn't count that as satisfying "return a list".
aschepler
3

J, 2 bytes

$~

Same as the APL answer: reflexively shape the input. In other words:

$~ y
y $ y
NB. y copies of y
Conor O'Brien
fonte
3

Brainbash, 39 bytes

>-[-[-<]>>+<]>->#[->+>+<<]>>[-<;<<.>>>]

Try it online!

Prints N N times. Works by generating 32, taking input, then duplicating the input twice, then output the first for each 1 in the second.

Conor O'Brien
fonte
3

C (gcc), 55 bytes

int*f(k){int*r=malloc(k*4),a=k;for(;a-->0;)r[a]=k;k=r;}

Try it online!

Returns a list of k integers.

Conor O'Brien
fonte
1
Yay "long arrow operator". Also, I didn't think gcc would ever use register eax for locals. Go figure.
aschepler
2
You can save 2 bytes by removing a comparison to 0 in for cycle, unless I've overlooked something.
Jasmes
Suggest *f(k){int r[k], instead of int*f(k){int*r=malloc(k*4),
ceilingcat
3

Röda, 10 bytes

{[[_]*_1]}

Try it online!

Explanation:

{[[_]*_1]}
{        } /* Anonymous function   */
   _       /* The input (_1)       */
  [ ]      /* As a list            */
     *_1   /* Repeated _1 times    */
 [      ]  /* Pushed to the stream */
fergusq
fonte
1
Why can you leave off the 1 in the first input but not the second?
Conor O'Brien
1
@ConorO'Brien Each underscore without a number has a number that is one larger than the previous: [_]*_ = [_1]*_2. Because the first underscore is the first, it has automatically the number 1.
fergusq
3

Groovy, 9 bytes

{[it]*it}

Try it online!


Perhaps the most competitive groovy answer I've done to date.

Magic Octopus Urn
fonte
3

brainfuck, 16 bytes

[->+>+<<]>[->.<]

Try it online!

The breakdown:

[->+>+<<]          Duplicate 'n' into the next 2 cells to the right
         >         Move to the first duplicate
          [->.<]   Print 'n', 'n' times

As I'm sure you're aware, brainfuck takes input and output values as ASCII characters. So a ! is represented as the value 33.

Graviton
fonte
Your program doesn't take input, I don't think. Unless you're talking about a value left on the tape
Conor O'Brien
@ConorO'Brien The ladder. Think of it as a function more than a program.
Graviton
3

Coreutils, sed, 14 bytes

yes $1|sed $1q

As a zsh function, 20 19 bytes:

f(){yes $1|sed $1q}

Try it online!

Thor
fonte
I don't think this answer is valid, since it doesn't take input.
DJMcMayhem
@DJMcMayhem: used it in a function
Thor
Why not just make it a program yes $1|sed $1q?
Digital Trauma
Good point @DigitalTrauma, updated
Thor
The rules say it has to be integer elements, not string elements. To satisfy that, a bash/zsh answer would need to use declare -i integer variables. But it also has to be an array. I'm not sure bash even supports an integer array (like eval declare -ia "$1" to use the first function arg as the name of an array return value.) I upvoted this because it follows the spirit of the question; I doubt the question meant to exclude languages that don't really have integer lists / arrays.
Peter Cordes
3

MATL, 4 3 bytes

tY"

Try it online!

Explanation:

t       % duplicate elements
Y"      % replicate elements of array
        % (implicit) convert to string and display
Cinaski
fonte
2

Java (OpenJDK 8), 58 56 bytes

n->{int a[]=new int[n],i=n;for(;i-->0;)a[i]=n;return a;}

Try it online!

-2 bytes thanks to @KevinCruijssen

Olivier Grégoire
fonte
1
Two bytes shorter: n->{int a[]=new int[n],i=n;for(;i-->0;)a[i]=n;return a;}
Kevin Cruijssen
@KevinCruijssen Ouch, it hurts I didn't think about that... Thanks!
Olivier Grégoire
Happens to the best of us. ;) If you look in my answer history you'll probably also find some answers where I add something along the lines of "bytes saved thanks to ... due to a stupid mistake by myself / something obvious I forgot.." :)
Kevin Cruijssen
I thought about an answer like IntStream.generate(() -> n).limit(n) but decided it wasn't worth typing up and upvoted this instead :)
JollyJoker
1
@JollyJoker You could do it! It's indeed two bytes shorter and would easily beat my answer ;-)
Olivier Grégoire
2

cQuents v0, 3 bytes

::n

Try it online!

Explanation

::    Mode: sequence 2. Given input n, output the sequence n times
  n   Each item in the sequence is n
Stephen
fonte
Note current version uses & instead of ::
Stephen
2

Swift 3, 29 bytes

{n in(0..<n).map{_ in n}}

Try it here!

Swift 3, 30 bytes

{Array(repeating:$0,count:$0)}

Try it here!

Mr. Xcoder
fonte
I wonder if we can get the input as the same variable repeated twice. Then you could have a 10 byte solution: Array.init. Just assign it to a variable with a type alias, and boom: let f: (Int, Int) -> [Int] = Array.init; print(f(5, 5))
Alexander - Reinstate Monica
@Alexander No, we cannot get the input twice.
Mr. Xcoder