Transformer un entier n en une liste le contenant n fois

15

Étant donné un entier nen entrée, renvoyez une liste contenant ndes ntemps répétés . Par exemple, le programme prendrait 5et le transformerait en [5,5,5,5,5]. Les éléments doivent être des entiers, pas des chaînes. Aucune fonction intégrée qui accomplit la tâche n'est autorisée.

Il s'agit de , donc les règles standard s'appliquent.

Bruno E
la source
43
@BrunoE Cela ne répond toujours pas au pourquoi . Avez-vous une raison réelle d'interdire les modules intégrés? Pour citer xnor: En général, si votre défi est trop simple pour être intéressant, il ne sera pas sauvé en interdisant les choses.
Lynn
13
@BrunoE alors que je suis d'accord avec le sentiment, nous préférons l'objectivité ici au ppcg. Soit quelque chose est ou n'est pas valide, les opinions ne devraient pas entrer dans l'équation.
Skidsdev
5
@BrunoE Les spécifications doivent être établies de telle sorte que l'on puisse incontestablement décider si une entrée est valide ou non. Veuillez partager vos réflexions sur les réponses existantes et rendre les spécifications plus objectives en ce qui concerne built-in.
M. Xcoder
6
Je suis toujours confus ce qui compte comme «intégré» pour cette tâche. L' *opérateur de Python est-il correct? Quel est un exemple d'un intégré qui ne va pas?
Steve Bennett
8
Je suis surpris que personne n'ait encore mentionné cela, mais nous avons un bac à sable pour les défis où vous pouvez les publier pour obtenir des commentaires sur eux, avant qu'ils ne soient mis en ligne. De cette façon, vous pourriez avoir empêché de discuter des règles du défi alors que d'autres ont déjà soumis leurs réponses.
JAD

Réponses:

32

Gelée , 1 octet

x

Essayez-le en ligne!

Notez que ce n'est pas le « n ntemps de répétition » intégré - sa fonction est plus générale que cela. Par exemple, c'est 4,5,6x1,2,3égal [4, 5, 5, 6, 6, 6]. Étant donné un seul argument, Jelly l'utilise à la fois comme argument gauche et droit pour le lien fourni, mais cette fonctionnalité n'est pas inhérente à x.

Si cela ne compte pas, il existe différentes alternatives amusantes sur 2 octets:

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

etc.

Lynn
la source
10
Hé bien oui. Chaque réponse de golf de code est une collection de modules intégrés qui accomplissent la tâche. Vous pourriez interdire cette réponse si vous avez xfait «tout le travail», mais ce n'est certainement pas le cas - il y a un «0 octet» implicite de logique d'analyse de liens et de coercition de tableaux pour transformer cela en repeat([n], n), ce qui est exactement ce que les autres réponses faire.
Lynn
8
@ Adám Il s'agit de la fonction "répéter chaque élément des temps xy", en prenant 2 arguments. Ce qui lui permet d'accomplir la tâche, c'est la façon dont Jelly analyse les arguments implicites, ce qui n'a rien à voir avec la fonction elle-même.
Erik the Outgolfer
6
Si cette réponse n'est pas valide, la contrainte de la question n'est pas "Pas de code intégré", c'est "Aucune réponse à 1 octet", ce qui est une limitation extrêmement arbitraire qui semble contre-productive dans le golf de code.
Kamil Drakari
8
Je pense que l'argument selon lequel ce n'est pas intégré est qu'il y a deux autres réponses de 1 octet dans Jelly qui font la même chose et que cette réponse pourrait donc être l'une des trois. Il n'y a pas 3 intégrés (on pourrait l'espérer) pour les " n ntemps de répétition ", donc ils ne peuvent pas TOUS être "intégrés" pour cela.
nmjcman101
6
Tout ce fil de commentaires semble un bon argument pour ne pas interdire quelque chose d'aussi subjectif que les intrinsèques.
trichoplax
22

Python 3 , 14 octets

lambda k:[k]*k

Essayez-le en ligne!

M. Xcoder
la source
Quel est le problème avec juste [n]*n?
3
@paxdiablo C'est un extrait. Nous pouvons créer des programmes complets ou des fonctions selon le méta-consensus.
M. Xcoder
19

Langage de script Operation Flashpoint ,  50  46 octets

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

Appeler avec:

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

Production:

Steadybox
la source
Avez-vous post décrémentation i--, et +=dans ce domaine?
TheLethalCoder
3
Pourquoi les captures d'écran sont-elles toujours dans un désert aride? Vous devriez utiliser une carte sympa pour vos captures d'écran: P.
Urne de poulpe magique
2
@MagicOctopusUrn Est-ce mieux?
Steadybox
1
@Steadybox ahaha! Épique: P. Est-ce la ville de gauche pour les morts? Cela ressemble un peu à l'église dans laquelle vous commencez.
Magic Octopus Urn
1
Je pense que les captures d'écran devraient être publiées recadrées sur une image plus petite. Nous n'avons pas besoin de voir la carte, et elle distrait de la sortie réelle.
mbomb007
12

APL (Dyalog) , 2 octets

Cinq solutions également courtes. Les deux derniers sont une gracieuseté de Zacharý .


⍴⍨

Essayez-le en ligne!

 cyclique r Eshape

 soi


/⍨

Essayez-le en ligne!

/ reproduire

 soi


\⍨

Essayez-le en ligne!

\ développer

 soi


⌿⍨

Essayez-le en ligne!

 répliquer le long du premier (et uniquement) axe

 soi


⍀⍨

 développer le premier (et le seul) axe

 soi

Essayez-le en ligne!

Adam
la source
@Uriel Il y en a un de plus…
Adám
1
Les deux ⌿⍨et le ⍀⍨travail.
Zacharý
2
Était-ce intentionnel que «soi» ressemble à un visage?
geokavel
1
@geokavel Je ne pense pas, mais je l'ai également remarqué en tapant ce message. C'est assez mnémonique, non? En fait, selfie est l'un de ses noms semi-officiels, donc dans l'interface RIDE de Dyalog APL, vous pouvez l'insérer en tapant `` selfie .
Adám
1
@sethrin TIO compte les caractères (et les octets UTF-8 le cas échéant), mais il appartient à l'utilisateur de s'assurer qu'il n'utilise aucun caractère manquant dans un jeu de caractères à un octet (SBCS). Pour les APL, voir ici.
Adám
11

Mathematica, 10 octets

#~Table~#&
J42161217
la source
10

Proton , 8 octets

n=>[n]*n

Essayez-le en ligne!

totalement humain
la source
11
Cela combine le meilleur de la réponse python et de la réponse javascript, j'adore!
Bruno E
9

Octave, 12 octets

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

Essayez-le en ligne!

rahnema1
la source
Qu'est-ce que le ~ en octave, parce que c'est la seule partie de votre code que je ne comprends pas ..
Michthan
1
@Michthan Désolé pour la réponse tardive. ~est l' notopérateur qui convertit 1: n en un tableau de 0s de taille n. Vous pouvez utiliser à la !place de celui-ci.
rahnema1
9

JavaScript (ES6), 19 octets

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

Essayez-le

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>

Hirsute
la source
3
Un tableau sans ...- quelle que soit la prochaine?!
Neil
1
@Neil: c'était mal même quand je le tapais! : D
Shaggy
7

Pyth , 2 octets

*]

Suite de tests .


*] QQ - Programme complet avec entrée implicite

 ] - Transformez l'entrée en liste.
* - Répétez-le un nombre de fois égal à l'entrée. 
M. Xcoder
la source
7

Haskell , 13 octets

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

Essayez-le en ligne! Utilisation: f 5rendements [5,5,5,5,5]. Pour n=5, [1..n]donne la liste [1,2,3,4,5]. n<$remplace chaque élément de cette liste par n.

Laikoni
la source
3
Le mien est un peu plus long, mais je l'aime quand même:join replicate
amalloy
@amalloy Ce serait en effet la manière propre à Haskell de le faire. Cependant, joinne fait pas partie de Prelude et nécessite donc une longue durée import Control.Monad, ce qui le rend rarement utile pour le golf.
Laikoni
6

R , 18 octets

array(n<-scan(),n)

Essayez-le en ligne!

user2390246
la source
6
Est rep(n<-scan(),n)trop proche d'un builtin?
Robin Gertenbach
@RobinGertenbach Peut-être que vous devriez l'afficher en tant que réponse distincte.
Andreï Kostyrka
5

05AB1E , 2 octets

Essayez-le en ligne!

Emigna
la source
Nice, mieux que .D).
Magic Octopus Urn
@MagicOctopusUrn: Oui, c'était ma première pensée.
Emigna
5

Dodos , 76 octets

	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

Essayez-le en ligne!

Explication:

fest un alias pour dab(queue).

sest une soustraction, comme expliqué sur le wiki: (x, y) → (0, y − x) lorsque x ≤ y .

tmappe (a, b, c…) à (b + c +…, a + b + c +…) .

f s tcorrespond (a, b, c…) à a . C'est notre fonction «tête».

dne plonge que la tête de son argument: (a, b, c…) → (| a − 1 |, b, c…)

rest la principale logique de répétition. Nous mappons (a, b) à (* r (| a − 1 |, b), b) .

Par exemple, r (4, 7) sera évalué comme

  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.

Enfin, nous définissons 2, qui mappe n → (n, n) , et définissons maincomme f f r 2, le calcul de r (n, n) et le découpage des deux premiers éléments.

Lynn
la source
4

Japt , 2 octets

ÆU

Essaye-le


Explication

Saisie implicite d'entier U. Générez un tableau d'entiers de 0à U-1. Remplissez-le avec U. Sortie implicite du tableau résultant.

Hirsute
la source
4

TeX, 81 octets

\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
la source
C'est en fait LaTeX. En Tex, ce serait beaucoup plus court.
Un homme d'or le
4

Husk , 2 octets

´R

Essayez-le en ligne!

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

Alternative polie (3 octets)

ṠIR

Essayez-le en ligne!

Laikoni
la source
4

Haskell (14 octets)

replicate>>=id

Grâce à @nimi, je n'ai plus besoin d'importer. Yay!

C'est une fonction qui prend un argument entier; par exemple, les retours suivants [5,5,5,5,5]:

(replicate>>=id) 5
tomsmeding
la source
1
Pourquoi pas id=<<replicate? C'est aussi 14 octets mais n'a pas besoin de l'importation.
nimi
@nimi Très bon point! Oublié cette possibilité. (J'ai vraiment besoin de plonger dans la flèche monade plus ...)
tomsmeding
4

Java (OpenJDK 8) , 50 48 octets

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

Essayez-le en ligne!

-2 octets grâce à @Jakob

Inspiré par les commentaires dans le post de @ OlivierGrégoire, et optimisé un peu plus loin. Prend une entrée entière, crée un IntStream d' néléments, puis mappe chaque élément net le renvoie.

Xanderhall
la source
Vous pouvez enregistrer 2 octets en commençant par java.util.Arrays.stream(new int[n]).
Jakob
4

Perl 5 , 18 14 octets

-4 octets grâce à @DomHastings

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

Essayez-le en ligne!

Est x une fonction intégrée qui fait la totalité de la tâche? Sorte de? Pas vraiment? Les règles ne sont pas claires?

Edit: Ouais, probablement c'est bien.

aschepler
la source
Eu à peu près la même chose, mais vous pouvez changer le premier $_[0]en @_! Le second peut aussi être "@_"je pense ...
Dom Hastings
Je dirais que cela ne compte pas comme intégré car il faut contourner le fait qu'il faut deux entrées au lieu d'une.
Brad Gilbert b2gills
Pourquoi pas $_=$_ x$_avec perl -pe?
Thor
@Thor xeffectue la répétition de chaînes, pas la répétition de liste, sauf si l'opérande de gauche est entre parenthèses (ou est un qwopérateur) et xest évalué dans le contexte de la liste. Et bien sûr, $_c'est un scalaire, pas une liste.
aschepler
1
@Thor Je ne considérerais pas cela comme satisfaisant "retourner une liste".
aschepler
3

J, 2 octets

$~

Identique à la réponse APL: façonner réflexivement l'entrée. En d'autres termes:

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

Brainbash , 39 octets

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

Essayez-le en ligne!

Imprime N Nfois. Fonctionne en générant 32, en prenant l'entrée, puis en dupliquant l'entrée deux fois, puis en sortant la première pour chaque 1 dans la seconde.

Conor O'Brien
la source
3

C (gcc) , 55 octets

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

Essayez-le en ligne!

Renvoie une liste d' kentiers.

Conor O'Brien
la source
1
Ouais "opérateur flèche longue". De plus, je ne pensais pas que gcc utiliserait jamais le registre eaxpour les locaux. Allez comprendre.
aschepler
2
Vous pouvez enregistrer 2 octets en supprimant une comparaison à 0 pour le cycle, sauf si j'ai oublié quelque chose.
Jasmes
Suggérer à la *f(k){int r[k],place deint*f(k){int*r=malloc(k*4),
plafondcat
3

Röda , 10 octets

{[[_]*_1]}

Essayez-le en ligne!

Explication:

{[[_]*_1]}
{        } /* Anonymous function   */
   _       /* The input (_1)       */
  [ ]      /* As a list            */
     *_1   /* Repeated _1 times    */
 [      ]  /* Pushed to the stream */
fergusq
la source
1
Pourquoi pouvez-vous laisser le 1 dans la première entrée mais pas la seconde?
Conor O'Brien
1
@ ConorO'Brien Chaque trait de soulignement sans numéro a un numéro un plus grand que le précédent: [_]*_= [_1]*_2. Parce que le premier trait de soulignement est le premier, il a automatiquement le numéro 1.
fergusq
3

brainfuck , 16 octets

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

Essayez-le en ligne!

La ventilation:

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

Comme je suis sûr que vous le savez, brainfuck prend les valeurs d'entrée et de sortie sous forme de caractères ASCII. Donc, a !est représenté par la valeur 33.

Graviton
la source
Votre programme ne prend pas en compte, je ne pense pas. À moins que vous ne parliez d'une valeur restante sur la bande
Conor O'Brien
@ ConorO'Brien L'échelle. Considérez-le comme une fonction plus qu'un programme.
Graviton
3

Coreutils, sed, 14 octets

yes $1|sed $1q

En tant que fonction zsh, 20 19 octets:

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

Essayez-le en ligne!

Thor
la source
Je ne pense pas que cette réponse soit valide, car elle ne prend pas d'entrée.
DJMcMayhem
@DJMcMayhem: l'a utilisé dans une fonction
Thor
Pourquoi ne pas simplement en faire un programme yes $1|sed $1q?
Digital Trauma
Bon point @DigitalTrauma, mis à jour
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
la source
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
la source
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
la source
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
la source
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