Biến một số nguyên n thành một danh sách chứa nó n lần


15

Cho một số nguyên nlàm đầu vào, trả về một danh sách chứa n, nthời gian lặp lại . Ví dụ, chương trình sẽ lấy 5và biến nó thành [5,5,5,5,5]. Các phần tử cần phải là số nguyên, không phải là chuỗi. Không có chức năng tích hợp nào hoàn thành nhiệm vụ được cho phép.

Đây là , vì vậy các quy tắc tiêu chuẩn được áp dụng.


43
@BrunoE Điều đó vẫn không trả lời tại sao . Bạn có một lý do thực tế để cấm xây dựng? Để trích dẫn xnor: Nói chung, nếu thử thách của bạn quá đơn giản để trở nên thú vị, nó sẽ không được cứu bằng cách cấm mọi thứ.
Lynn

13
@BrunoE trong khi tôi đồng ý với tình cảm, chúng tôi thích sự khách quan hơn ở đây tại ppcg. Hoặc một cái gì đó là hoặc không hợp lệ, ý kiến ​​không nên đi vào phương trình.
Skidsdev

5
@BrunoE Các thông số kỹ thuật phải được thực hiện sao cho người ta có thể quyết định không thể chối cãi liệu một mục có hợp lệ hay không. Hãy chia sẻ suy nghĩ của bạn về các câu trả lời hiện có và làm cho thông số kỹ thuật khách quan hơn khi nói đến built-in.
Ông Xcoder

6
Tôi vẫn bối rối những gì được coi là "tích hợp" cho nhiệm vụ này. *Toán tử của Python có ổn không? Một ví dụ về tích hợp không ổn là gì?
Steve Bennett

8
Tôi cho rằng chưa có ai đề cập đến vấn đề này, nhưng chúng tôi có một hộp cát cho những thách thức mà bạn có thể đăng chúng để nhận phản hồi về chúng, trước khi chúng được phát hành trực tuyến. Bằng cách này, bạn có thể đã ngăn không cho thảo luận về các quy tắc của thử thách trong khi những người khác đã gửi câu trả lời của họ.
JAD

Câu trả lời:


32

Thạch , 1 byte

x

Hãy thử trực tuyến!

Lưu ý rằng đây không phảin nlần lặp lại của người dùng được tích hợp sẵn - chức năng của nó còn chung chung hơn thế. Ví dụ 4,5,6x1,2,3bằng [4, 5, 5, 6, 6, 6]. Do chỉ có một đối số, Jelly chỉ xảy ra để sử dụng nó như là cả hai bên trái và lập luận phù hợp với các liên kết cung cấp, nhưng chức năng này không phải là cố hữu để x.

Nếu điều này không được tính, có nhiều lựa chọn thay thế 2 byte thú vị khác nhau:

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

Vân vân.


10
Vâng, vâng. Mỗi câu trả lời golf mã là một tập hợp các tích hợp hoàn thành nhiệm vụ. Bạn có thể cấm câu trả lời này nếu xđã thực hiện tất cả các công việc, nhưng chắc chắn là không - có một logic 0 byte ẩn của logic phân tích liên kết và logic ép buộc mảng để biến điều này thành repeat([n], n), đó chính xác là những câu trả lời khác làm
Lynn

8
@ Adám Đây là hàm "lặp lại từng phần tử của xy lần", lấy 2 đối số. Điều làm cho nó hoàn thành nhiệm vụ là cách Jelly phân tích các đối số ngầm, không liên quan gì đến chính hàm này.
Erik the Outgolfer

6
Nếu câu trả lời này không hợp lệ thì ràng buộc của câu hỏi không phải là "Không có nội dung", đó là "Câu trả lời 1 byte", đây là một giới hạn cực kỳ tùy tiện có vẻ phản tác dụng trong môn đánh gôn.
Kamil Drakari

8
Tôi nghĩ rằng một lập luận cho điều này không phải là một tích hợp là có hai câu trả lời 1 byte khác trong Jelly làm điều tương tự vì vậy câu trả lời này có thể là một trong ba câu trả lời. Không có 3 tích hợp (người ta hy vọng) cho " n nthời gian lặp lại ", vì vậy chúng KHÔNG THỂ là "tích hợp" cho nó.
nmjcman101

6
Toàn bộ chủ đề bình luận này có vẻ là một lập luận tốt cho việc không cấm một cái gì đó chủ quan như nội dung.
trichoplax


19

Hoạt động Flashpoint ngôn ngữ kịch bản ,  50  46 byte

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

Gọi với:

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

Đầu ra:


Bạn có bài viết giảm dần i--, và +=trong này?
TheLethalCoder

3
Tại sao các ảnh chụp màn hình cho điều này luôn luôn trong một sa mạc cằn cỗi? Bạn nên sử dụng bản đồ tuyệt vời cho ảnh chụp màn hình của mình: P.
Bạch tuộc ma thuật Urn

2
@MagicOctopusUrn Có tốt hơn không?
Steadybox

1
@Steadybox ahaha! Sử thi: P. Có phải đó là thị trấn từ trái cho đến chết? Trông giống như nhà thờ bạn bắt đầu ở kinda.
Bạch tuộc ma thuật Urn

1
Tôi nghĩ rằng các ảnh chụp màn hình nên được cắt xén thành một hình ảnh nhỏ hơn. Chúng ta không cần phải xem bản đồ và nó làm sao lãng sản lượng thực tế.
mbomb007

12

APL (Dyalog) , 2 byte

Năm giải pháp ngắn bằng nhau. Hai cuối cùng là lịch sự của Zacharý .


⍴⍨

Hãy thử trực tuyến!

 chu kỳ r eshape

 tự


/⍨

Hãy thử trực tuyến!

/ nhân rộng

 tự


\⍨

Hãy thử trực tuyến!

\ mở rộng

 tự


⌿⍨

Hãy thử trực tuyến!

 nhân rộng dọc theo trục đầu tiên (và duy nhất)

 tự


⍀⍨

 mở rộng dọc theo trục đầu tiên (và duy nhất)

 tự

Hãy thử trực tuyến!


@Uriel Có thêm một bản
Adám

1
Cả hai ⌿⍨⍀⍨làm việc.
Zacharý

2
Có phải nó cố ý rằng "cái tôi" trông giống như một khuôn mặt?
geokavel

1
@geokavel Tôi không nghĩ vậy, nhưng tôi cũng nhận thấy nó là một bài đăng này. Làm cho nó khá dễ nhớ, không? Trên thực tế, selfie là một trong những tên bán chính thức của nó, vì vậy, trong giao diện RIDE với Dyalog APL, bạn có thể chèn bằng cách nhập `` selfie .
Adám

1
@sethrin TIO đếm các ký tự (và byte UTF-8 nếu có), nhưng người dùng phải đảm bảo rằng họ không sử dụng bất kỳ ký tự nào bị thiếu trong bộ ký tự một byte (SBCS). Đối với APL, xem tại đây.
Adám



9

Octave, 12 byte

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

Hãy thử trực tuyến!


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>


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. 

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.


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



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.


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.


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


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


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

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.


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.


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

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.


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.


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

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.


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!


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

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


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

Note current version uses & instead of ::
Stephen

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.