Zamień liczbę całkowitą n na listę zawierającą ją n razy

15

Biorąc pod uwagę liczbę całkowitą njako dane wejściowe, zwraca listę zawierającą npowtarzane nczasy. Na przykład program wziąłby go 5i przekształcił w [5,5,5,5,5]. Elementy muszą być liczbami całkowitymi, a nie ciągami. Żadne wbudowane funkcje, które wykonują to zadanie, nie są dozwolone.

To jest , więc obowiązują standardowe zasady.

Bruno E.
źródło
43
@BrunoE To wciąż nie odpowiada dlaczego . Czy masz rzeczywisty powód, aby zakazać wbudowanych? Cytując xnor: Ogólnie rzecz biorąc, jeśli twoje wyzwanie jest zbyt proste, aby było interesujące, nie można go uratować poprzez banowanie różnych rzeczy.
Lynn,
13
@BrunoE, chociaż zgadzam się z tym sentymentem, wolimy obiektywizm tutaj w ppcg. Albo coś jest, albo nie jest ważne, opinie nie powinny wchodzić w równanie.
Skidsdev,
5
@BrunoE Specyfikacje muszą być wykonane w taki sposób, aby można było bezdyskusyjnie zdecydować, czy wpis jest prawidłowy, czy nie. Podziel się przemyśleniami na temat istniejących odpowiedzi i spraw, aby specyfikacje były bardziej obiektywne, jeśli chodzi o built-in.
Pan Xcoder,
6
Nadal jestem zdezorientowany, co liczy się jako „wbudowane” do tego zadania. Czy *operator Pythona jest w porządku? Jaki jest przykład wbudowanego, który nie jest w porządku?
Steve Bennett,
8
Jestem zaskoczony, że nikt jeszcze o tym nie wspominał, ale mamy piaskownicę do wyzwań, w których możesz je opublikować, aby uzyskać opinie na ich temat, zanim zaczną działać. W ten sposób mogłeś zapobiec dyskusji o regułach wyzwania, podczas gdy inni już przesłali swoje odpowiedzi.
JAD,

Odpowiedzi:

32

Galaretka , 1 bajt

x

Wypróbuj online!

Zauważ, że nie jest ton n wbudowane „powtarzanie czasów” - jego funkcja jest bardziej ogólna. Na przykład 4,5,6x1,2,3jest równy [4, 5, 5, 6, 6, 6]. Biorąc pod uwagę tylko jeden argument, Jelly właśnie dzieje się z niego korzystać zarówno z lewej i prawej argumentu dla podanego linku, ale ta funkcjonalność nie jest właściwy do x.

Jeśli to się nie liczy, istnieją różne zabawne 2-bajtowe alternatywy:

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

itp.

Lynn
źródło
10
No tak. Każda odpowiedź na kod golfa jest zbiorem wbudowanych elementów, które spełniają to zadanie. Możesz zablokować tę odpowiedź, jeśli xwykonała „całą pracę”, ale z pewnością nie - nie ma ukrytego „0 bajtów” logiki parsowania linków i logiki koercji tablic repeat([n], n), która zamienia to w to , co dokładnie inne odpowiedzi robić.
Lynn,
8
@ Adám Jest to funkcja „powtarzaj każdy element xy razy”, biorąc 2 argumenty. Zadanie polega na tym, że Jelly analizuje niejawne argumenty, co nie ma nic wspólnego z samą funkcją.
Erik the Outgolfer
6
Jeśli ta odpowiedź jest nieprawidłowa, wówczas ograniczeniem pytania nie jest „Brak wbudowanych”, to „No 1 bajtowe odpowiedzi”, co jest niezwykle arbitralnym ograniczeniem, które wydaje się nieproduktywne w kodzie golfowym.
Kamil Drakari,
8
Myślę, że argument ten nie jest w kierunku wbudowany jest to, że istnieją dwa inne odpowiedzi 1 bajt w galarecie, które robią to samo i tak ta odpowiedź mogłaby być jednym z trzech. Nie ma 3 wbudowanych (można by mieć nadzieję) „powtórzeń n nczasów”, więc nie mogą być WSZYSTKIM „wbudowanymi”.
nmjcman101
6
Cały wątek komentarza wydaje się dobrym argumentem za tym, by nie zakazać czegoś tak subiektywnego jak wbudowane.
trichoplax
22

Python 3 , 14 bajtów

lambda k:[k]*k

Wypróbuj online!

Pan Xcoder
źródło
Co jest nie tak z sprawiedliwym [n]*n?
3
@paxdiablo That is a snippet. Możemy tworzyć pełne programy lub funkcje zgodnie z meta-konsensusem.
Mr. Xcoder,
19

Operacja Flashpoint język skryptowy ,  50  46 bajtów

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

Zadzwoń z:

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

Wynik:

Steadybox
źródło
Czy masz dekrementację i--, i +=w tym?
TheLethalCoder
3
Dlaczego zrzuty ekranu są zawsze na jałowej pustyni? Do zrzutów ekranu należy użyć fajnej mapy: P.
Magic Octopus Urn
2
@MagicOctopusUrn Czy to lepiej?
Steadybox
1
@Steadybox ahaha! Epicki: P. Czy to miasto odeszło na śmierć? To wygląda jak kościół, który zaczynasz.
Magic Octopus Urn
1
Myślę, że zrzuty ekranu powinny być przycięte do mniejszego obrazu. Nie musimy widzieć mapy, która odwraca uwagę od rzeczywistych wyników.
mbomb007
12

APL (Dyalog) , 2 bajty

Pięć równie krótkich rozwiązań. Dwa ostatnie są dzięki uprzejmości Zacharý .


⍴⍨

Wypróbuj online!

 cykliczne R eshape

 samego siebie


/⍨

Wypróbuj online!

/ replika

 samego siebie


\⍨

Wypróbuj online!

\ rozszerzać

 samego siebie


⌿⍨

Wypróbuj online!

 replikacja wzdłuż pierwszej (i tylko) osi

 samego siebie


⍀⍨

 rozwinąć wzdłuż pierwszej (i tylko) osi

 samego siebie

Wypróbuj online!

Adám
źródło
@Uriel Jest jeszcze jeden…
Adám
1
Zarówno ⌿⍨i ⍀⍨praca.
Zacharý
2
Czy było celowe, że „ja” wygląda jak twarz?
geokavel
1
@geokavel Nie sądzę, ale zauważyłem też, że napisałem ten post. Czyni to całkiem mnemonicznym, nie? W rzeczywistości selfie jest jedną z jego półoficjalnych nazw, więc w interfejsie RIDE do Dyalog APL możesz wstawić , wpisując `` selfie .
Adám
1
@sethrin TIO zlicza znaki (i bajty UTF-8, w stosownych przypadkach), ale od użytkownika zależy, czy nie użyją żadnych znaków, których brakuje w jednobajtowym zestawie znaków (SBCS). Informacje na temat APL można znaleźć tutaj.
Adám
11

Mathematica, 10 bajtów

#~Table~#&
J42161217
źródło
10

Proton , 8 bajtów

n=>[n]*n

Wypróbuj online!

całkowicie ludzki
źródło
11
To łączy najlepszą odpowiedź python i odpowiedź javascript, uwielbiam to!
Bruno E,
9

Oktawa, 12 bajtów

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

Wypróbuj online!

rahnema1
źródło
Co oznacza ~ w oktawie, ponieważ to jedyna część twojego kodu, której nie rozumiem ..
Michthan
1
@Michthan Przepraszamy za opóźnienie w odpowiedzi. ~to notoperator konwertujący 1: n na tablicę 0s rozmiaru n. Możesz użyć !zamiast tego.
rahnema1
9

JavaScript (ES6), 19 bajtów

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

Spróbuj

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>

Kudłaty
źródło
3
Tablica bez ...- cokolwiek dalej ?!
Neil
1
@Neil: wydawało mi się, że to źle, nawet kiedy to pisałem! : D
Shaggy
7

Pyth , 2 bajty

*]

Zestaw testowy .


*] QQ - Pełny program z niejawnym wejściem

 ] - Zmień dane wejściowe w listę.
* - Powtórz to tyle razy, ile wynosi wartość wejściowa. 
Pan Xcoder
źródło
7

Haskell , 13 bajtów

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

Wypróbuj online! Zastosowanie: f 5plony [5,5,5,5,5]. Dlan=5 , [1..n]otrzymuje listę [1,2,3,4,5]. n<$zastępuje każdy element tej listy na n.

Laikoni
źródło
3
Mój jest trochę dłuższy, ale i tak mi się podoba:join replicate
amalloy
@amalloy To byłby rzeczywiście czysty sposób Haskella. Jednak joinnie jest częścią Preludium i dlatego wymaga długiego czasu import Control.Monad, co rzadko czyni go przydatnym do gry w golfa.
Laikoni
6

R , 18 bajtów

array(n<-scan(),n)

Wypróbuj online!

użytkownik2390246
źródło
6
Czy jest rep(n<-scan(),n)zbyt blisko wbudowanego?
Robin Gertenbach,
@RobinGertenbach Może powinieneś zamieścić to jako osobną odpowiedź.
Andreï Kostyrka
5

05AB1E , 2 bajty

Wypróbuj online!

Emigna
źródło
Fajnie, lepiej niż .D).
Magic Octopus Urn
@MagicOctopusUrn: Tak, to była moja pierwsza myśl.
Emigna
5

Dodos , 76 bajtów

	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

Wypróbuj online!

Wyjaśnienie:

fto pseudonim dla dab(tail).

sto odejmowanie, jak wyjaśniono na wiki: (x, y) → (0, y-x), gdy x ≤ y .

todwzorowuje (a, b, c…) na (b + c +…, a + b + c +…) .

f s tmapy (a, b, c…) do a . To jest nasza funkcja „głowy”.

dzanurza tylko głowę argumentu: (a, b, c…) → (| a − 1 |, b, c…)

rjest główną logiką powtarzania. Odwzorowujemy (a, b) na (* r (| a-1 |, b), b) .

Na przykład r (4, 7) będzie oceniać jako

  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.

Na koniec definiujemy 2, które mapy n → (n, n) , i definiujemy mainjako f f r 2, obliczając r (n, n) i odcinając pierwsze dwa elementy.

Lynn
źródło
4

Japt , 2 bajty

ÆU

Sprawdź to


Wyjaśnienie

Domniemane wprowadzenie liczby całkowitej U. Wygeneruj tablicę liczb całkowitych od 0do U-1. Wypełnij to U. Niejawne wyjście wynikowej tablicy.

Shaggy
źródło
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
źródło
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
źródło
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
źródło
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
źródło
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
źródło
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
źródło
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
źródło
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
źródło
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
źródło
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

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
źródło
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
źródło
I don't think this answer is valid, since it doesn't take input.
James
@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
źródło
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
źródło
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
źródło
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
źródło
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