Перетворіть ціле число 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]. З огляду на тільки один аргумент, Jelly просто трапляється , щоб використовувати його в якості лівого і правого аргументу для додається посилання, але вона не буде притаманна для x.

Якщо це не враховується, існують різні цікаві 2-байтові альтернативи:

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

тощо.


10
Ну так. Кожна відповідь на код гольфу - це сукупність вбудованих модулів, які виконують завдання. Ви можете заборонити цю відповідь, якщо xзробили "всю роботу", але вона, безумовно, не відповідає. Існує неявна "0 байт" розбору посилань та логіки примусу, що перетворить це на repeat([n], n)це, саме в що відповідають інші робити.
Лінн

8
@ Adám Це функція "повторити кожен елемент xy разів", взявши 2 аргументи. Що змушує її виконати завдання, це те, як Jelly розбирає неявні аргументи, що не має нічого спільного з самою функцією.
Erik the Outgolfer

6
Якщо ця відповідь є недійсною, тоді обмеженням питання є не "Без вбудованих", це "Ні 1 байтових відповідей", що є надзвичайно довільним обмеженням, яке видається контрпродуктивним у коді гольфу.
Каміль Дракарі

8
Я думаю, що аргументом цього не є вбудованим є те, що в Jelly є два інші відповіді на 1 байт, які роблять те саме, і тому ця відповідь може бути будь-якою з трьох. Немає 3 вбудованих (можна сподіватися) для "повторних n nразів", тому вони не можуть ВСІМ бути "вбудованими" для цього.
nmjcman101

6
Ціла нитка коментарів здається хорошим аргументом для того, щоб не забороняти щось таке суб'єктивне, як вбудовані.
трихоплакс


19

Операція Мова сценарію Flashpoint ,  50  46 байт

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

Телефонуйте за допомогою:

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

Вихід:


Чи є у вас постдекремент i--, і +=в цьому?
TheLethalCoder

3
Чому скріншоти для цього завжди знаходяться в безплідній пустелі? Ви повинні використовувати класну карту для своїх знімків екрана: P.
Magic Octopus Urn

2
@MagicOctopusUrn Це краще?
Steadybox

1
@Steadybox ахаха! Епопея: Р. Це місто зліва для мертвих? Це схоже на церкву, яку ви починаєте якось.
Magic Octopus Urn

1
Я думаю, що знімки екрана повинні бути розміщені на меншому зображенні. Нам карту не потрібно бачити, і це відволікає від фактичного виводу.
mbomb007

12

APL (Dyalog) , 2 байти

П'ять однаково коротких рішень. Останні два - люб'язно Захарі .


⍴⍨

Спробуйте в Інтернеті!

 циклічно r ешапе

 Я


/⍨

Спробуйте в Інтернеті!

/ тиражувати

 Я


\⍨

Спробуйте в Інтернеті!

\ розширити

 Я


⌿⍨

Спробуйте в Інтернеті!

 повторити вздовж першої (і єдиної) осі

 Я


⍀⍨

 розширити вздовж першої (і єдиної) осі

 Я

Спробуйте в Інтернеті!


@Uriel Є ще один…
Adám

1
І те, ⌿⍨і ⍀⍨робота.
Zacharý

2
Чи було навмисно, що "Я" виглядає як обличчя?
geokavel

1
@geokavel Я не думаю, що так, але я також помітив це як набраний цей пост. Це робить це досить мнемічно, ні? Насправді selfie - це одне з його офіційних назв, тому в інтерфейс RIDE до Dyalog APL можна вставити , ввівши `` selfie .
Adám

1
@sethrin TIO підраховує символи (і байти UTF-8, де це можливо), але користувач повинен переконатися, що вони не використовують жодних символів, відсутніх у однобайтовому наборі символів (SBCS). Про APL-файли дивіться тут.
Адам



9

Октава, 12 байт

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

Спробуйте в Інтернеті!


Що означає ~ в октаві, тому що це єдина частина вашого коду, я не розумію ..
Michthan

1
@Michthan Вибачте за пізню відповідь. ~- notоператор, який перетворює 1: n в масив 0s розміром n. Ви можете використовувати !замість нього.
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

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

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.
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


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


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.