整数nをn回含むリストに変換します


15

n入力として整数を指定すると、、n繰り返しn回数を含むリストを返します。たとえば、プログラムは5それを取得してに変換し[5,5,5,5,5]ます。要素は、文字列ではなく整数である必要があります。タスクを実行する組み込み関数は許可されていません。

これはなので、標準のルールが適用されます。


43
@BrunoEそれはまだ理由に答えていません。組み込みを禁止する実際の理由はありますか?xnorを引用する:一般的に、チャレンジが単純すぎて面白くない場合、物事を禁止しても救われません。
リン

13
@BrunoEは感情に同意しますが、ここppcgでは客観性を好みます。何かが有効であるか無効であるかにかかわらず、意見は方程式に含まれるべきではありません。
Skidsdev

5
@BrunoE仕様、エントリが有効かどうかを議論の余地なく決定できるように作成する必要あります。既存の答えについてあなたの考えを共有し、それに関してはスペックをより客観化してくださいbuilt-in
ミスターXcoder

6
このタスクの「組み込み」と見なされるものはまだ混乱しています。Pythonの*演算子は大丈夫ですか?大丈夫ではないビルトインの例は何ですか?
スティーブベネット

8
誰もまだこれについて言及していないことに驚いていますが、チャレンジするためのサンドボックスがあり、それらを投稿してフィードバックを得ることができます。これにより、他の人がすでに回答を提出している間、チャレンジのルールについて議論するのを防ぐことができます。
JAD

回答:


32

ゼリー、1バイト

x

オンラインでお試しください!

これは組み込みの「繰り返し時間」ではないことに注意してくださいn n。その機能はそれよりも一般的です。たとえば、4,5,6x1,2,3等しい[4, 5, 5, 6, 6, 6]。一つだけの引数を考えると、ゼリーはちょうど付属リンクの左と右の引数の両方としてそれを使用するために起こりますが、この機能ではありません内在しますx

これが考慮されない場合、さまざまな楽しい2バイトの選択肢があります。

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


10
はい、そうです。すべてのコードゴルフの答えは、タスクを達成する組み込みのコレクションです。場合は、この答えを禁止するかもしれないx「すべての仕事」でしたが、それは最も確かにしません-リンク解析すると、アレイ・強制・ロジックは、この中を有効にするに行くの暗黙の「0バイト」がありますrepeat([n], n)正確に何他の回答であるが、行う。
リン

8
@Adámこれは、「xy回の各要素を繰り返す」関数であり、2つの引数を取ります。タスクを達成するのは、Jellyが暗黙引数をどのように解析するかです。これは、関数自体とは関係ありません。
エリックアウトゴルファー

6
この回答が無効な場合、質問の制約は「ビルトインなし」ではなく、「1バイトの回答なし」です。これは、コードゴルフでは逆効果と思われる非常にgolf意的な制限です。
カミルドラカリ

8
Iは、内蔵されていないこの方の引数は同じことを行うゼリーに2つの他の1つのバイトの答えがあることだと思うし、そう、この答えは3のいずれかの可能性が。「繰り返しn n時間」には3つのビルトイン(希望する人はいない)がないため、すべてを「ビルトイン」にすることはできません。
nmjcman101

6
このコメントスレッド全体は、組み込みのように主観的なものを禁止しないことの良い議論のようです。
-trichoplax


19

操作引火点スクリプト言語、 50  46バイト

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

で呼び出す:

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

出力:


ポストデクリメント、、i--および+=これがありますか?
TheLethalCoder

3
このスクリーンショットが常に不毛の砂漠にあるのはなぜですか?スクリーンショットにはクールなマップを使用する必要があります。
魔法のタコUr

2
@MagicOctopusUrnそれは良いですか?
Steadybox

1
@steadyboxあはは!エピック:P。それは町が左から死んでいるのですか?それはあなたがちょっと始めた教会のように見えます。
魔法のタコUr

1
スクリーンショットは、小さな画像にトリミングして投稿する必要があると思います。マップを見る必要はなく、実際の出力から気が散ります。
mbomb007

12

APL(Dyalog)、2バイト

5つの短いソリューション。最後の2つはZacharýの好意によるものです


⍴⍨

オンラインでお試しください!

 周期的にr eshape

 自己


/⍨

オンラインでお試しください!

/ 複製する

 自己


\⍨

オンラインでお試しください!

\ 展開する

 自己


⌿⍨

オンラインでお試しください!

 最初の(そして唯一の)軸に沿って複製する

 自己


⍀⍨

 最初の(そして唯一の)軸に沿って展開する

 自己

オンラインでお試しください!


@Urielもう1つ…
アダム

1
両方⌿⍨⍀⍨仕事。
ザカリー

2
「自己」が顔のように見えることは意図的でしたか?
geokavel

1
@geokavelそうは思いませんが、この投稿をタイプしたものだと気づきました。かなりニーモニックになりますか?実際、selfieは半公式の名前の1つであるため、Dyalog APLへのRIDEインターフェイスでは、「selfie」と入力して挿入できます。
アダム

1
@sethrin TIOは文字(および該当する場合はUTF-8バイト)をカウントしますが、シングルバイト文字セット(SBCS)にない文字を使用しないようにするのはユーザーの責任です。APLについては、こちらをご覧ください。
アダム



9

オクターブ、12バイト

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

オンラインでお試しください!


それはあなたのコードの一部だけだから〜オクターブで、私は何を理解していないん...
Michthan

1
@Michthan返信が遅くなってすみません。1:nをサイズnのsの配列に変換~する not演算子です 0!代わりに使用できます。
rahnema1

9

JavaScript(ES6)、19バイト

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

それを試してみてください

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


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


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.