Превратить целое число n в список, содержащий его n раз


15

Если в nкачестве входных данных указать целое число , вернуть список, содержащий nповторяющиеся значения n. Например, программа возьмет 5и превратит это в [5,5,5,5,5]. Элементы должны быть целыми числами, а не строками. Нет встроенных функций, которые выполняют задачу.

Это , поэтому применяются стандартные правила.


43
@BrunoE Это все еще не отвечает почему . У вас есть реальная причина запретить встроенные модули? Процитируем xnor: В общем, если ваш вызов слишком прост, чтобы быть интересным, он не будет спасен, если запретить что-то.
Линн

13
@ BrunoE, хотя я согласен с мнением, мы предпочитаем объективность здесь, в PPCG. Либо что-то является или не является действительным, мнения не должны входить в уравнение.
Скидсдев

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 times», принимающая 2 аргумента. То, что заставляет его выполнять задачу, заключается в том, как Jelly анализирует неявные аргументы, что не имеет ничего общего с самой функцией.
Эрик Outgolfer

6
Если этот ответ недействителен, тогда ограничение вопроса - не «Нет встроенных», а «Нет 1-байтовых ответов», что является чрезвычайно произвольным ограничением, которое кажется контрпродуктивным в кодовом гольфе.
Камил Дракари

8
Я думаю, что аргумент в пользу того, чтобы это не было встроенным, состоит в том, что есть два других однобайтовых ответа в Jelly, которые делают то же самое, и поэтому этот ответ может быть любым из трех. Не существует 3 встроенных (можно надеяться) «повторяющихся n nвремен», поэтому они ВСЕ не могут быть «встроенными» для него.
nmjcman101

6
Вся эта цепочка комментариев кажется хорошим аргументом для того, чтобы не запрещать что-то настолько субъективное, как встроенные.
Trichoplax


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.
Волшебная Урна Осьминога

2
@MagicOctopusUrn Это лучше?
Steadybox

1
@Steadybox ахаха! Эпический: P. Это город слева от мертвых? Это похоже на церковь, которую вы начинаете в своего рода.
Волшебная Урна Осьминога

1
Я думаю, что скриншоты должны быть обрезаны до уменьшенного изображения. Нам не нужно видеть карту, и она отвлекает от фактического результата.
mbomb007

12

APL (Дьялог) , 2 байта

Пять одинаково коротких решений. Последние два любезно предоставлены Захари .


⍴⍨

Попробуйте онлайн!

 циклически г eshape

 сам


/⍨

Попробуйте онлайн!

/ Репликация

 сам


\⍨

Попробуйте онлайн!

\ расширять

 сам


⌿⍨

Попробуйте онлайн!

 копировать вдоль первой (и единственной) оси

 сам


⍀⍨

 расширяться вдоль первой (и единственной) оси

 сам

Попробуйте онлайн!


@Uriel Есть еще один ...
Адам

1
Оба ⌿⍨и ⍀⍨работают.
Захари

2
Было ли это преднамеренным, что «я» выглядит как лицо?
геокавель

1
@geokavel Я так не думаю, но я также заметил это как напечатанный этот пост. Делает это довольно мнемоническим, нет? На самом деле, selfie - это одно из полуофициальных имен, поэтому в интерфейсе RIDE для Dyalog APL вы можете вставить его, набрав `` selfie .
17

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
Массив без ...- что дальше ?!
Нил

1
@Neil: это было неправильно, даже когда я печатал это! : D
Лохматый


7

Haskell , 13 байт

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

Попробуйте онлайн! Использование: f 5урожайность [5,5,5,5,5]. Для n=5, [1..n]выдает список [1,2,3,4,5]. n<$заменяет каждый элемент этого списка на n.


3
Мой немного дольше, но мне все равно нравится:join replicate
Амаллой

@amalloy Это действительно хороший способ сделать это на Хаскеле. Тем joinне менее, не является частью Prelude и, следовательно, требует длительной import Control.Monad, что редко делает его полезным для игры в гольф.
Лайкони



5

Додос , 76 байт

	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

Попробуйте онлайн!

Объяснение:

fявляется псевдонимом для dab(tail).

sэто вычитание, как объяснено в вики: (x, y) → (0, y − x), когда x ≤ y .

tотображает (a, b, c…) в (b + c +…, a + b + c +…) .

f s tотображает (a, b, c…) в a . Это наша «головная» функция.

dопускает только голову своего аргумента: (a, b, c…) → (| a − 1 |, b, c…)

rэто основная логика повторения. Мы отображаем (a, b) в (* r (| a − 1 |, b), b) .

Например, r (4, 7) будет оцениваться как

  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.

Наконец, мы определяем 2, какие карты n → (n, n) , и определяем mainкак f f r 2, вычисляя r (n, n) и отсекая первые два элемента.


4

Japt , 2 байта

ÆU

Проверь это


объяснение

Неявный ввод целого числа U. Создайте массив целых чисел от 0до U-1. Заполните это U. Неявный вывод результирующего массива.


4

TeX, 81 байт

\newcommand{\f}[1]{#1\count0=2\loop,#1\advance\count0 by1\ifnum\count0<#1\repeat}

использование

\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


Это на самом деле LaTeX. В Tex это было бы намного короче.
Золотой человек


4

Haskell (14 байт)

replicate>>=id

Благодаря @nimi мне больше не нужен импорт. Ура!

Это функция, которая принимает целочисленный аргумент; например, следующее возвращает [5,5,5,5,5]:

(replicate>>=id) 5

1
Почему нет id=<<replicate? Это также 14 байтов, но не нуждается в импорте.
Ними

@nimi Очень хорошая мысль! Упустили эту возможность. (Мне действительно нужно больше погрузиться в монаду со стрелами ...)
Томсминг

4

Java (OpenJDK 8) , 50 48 байтов

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

Попробуйте онлайн!

-2 байта благодаря @Jakob

Вдохновленный комментариями в посте @ OlivierGrégoire, и оптимизирован немного дальше. Принимает целочисленный ввод, создает IntStream nэлементов, затем сопоставляет каждый элемент nи возвращает его.


Вы можете сохранить 2 байта, начиная с java.util.Arrays.stream(new int[n]).
Якоб

4

Perl 5 , 18 14 байтов

-4 байта благодаря @DomHastings

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

Попробуйте онлайн!

Является xли встроенный, который выполняет всю задачу? Вроде? На самом деле, нет? Правила неясны?

Редактировать: Да, наверное, все в порядке.


Было почти то же самое, но вы можете изменить первый $_[0]на @_! Также второе может быть, "@_"я думаю ...
Дом Гастингс

Я бы сказал, что это не считается встроенным, потому что вы должны обойти тот факт, что он принимает два входа вместо одного.
Брэд Гилберт b2gills

Почему не $_=$_ x$_с perl -pe?
Тор

@Thor xвыполняет повторение строк, а не повторение списка, если только левый операнд не находится в скобках (или не является qwоператором) и xне оценивается в контексте списка. И конечно $_это скаляр, а не список.
aschepler

1
@ Я бы не посчитал это удовлетворением "вернуть список".
aschepler

3

J, 2 байта

$~

То же, что и ответ APL: рефлексивно формировать ввод. Другими словами:

$~ y
y $ y
NB. y copies of y


3

C (gcc) , 55 байтов

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

Попробуйте онлайн!

Возвращает список kцелых чисел.


1
Yay "оператор длинной стрелы". Кроме того, я не думал, что gcc будет когда-либо использовать регистр eaxдля местных жителей. Пойди разберись.
aschepler

2
Вы можете сэкономить 2 байта, удалив сравнение с 0 в цикле, если я ничего не пропустил.
Жасмес

Предлагаю *f(k){int r[k],вместоint*f(k){int*r=malloc(k*4),
floorcat

3

Röda , 10 байт

{[[_]*_1]}

Попробуйте онлайн!

Объяснение:

{[[_]*_1]}
{        } /* Anonymous function   */
   _       /* The input (_1)       */
  [ ]      /* As a list            */
     *_1   /* Repeated _1 times    */
 [      ]  /* Pushed to the stream */

1
Почему вы можете пропустить 1 на первом входе, а не на втором?
Конор О'Брайен

1
@ ConorO'Brien Каждый знак подчеркивания без номера имеет номер, который на один больше предыдущего: [_]*_= [_1]*_2. Поскольку первое подчеркивание является первым, оно автоматически имеет номер 1.
fergusq


3

Brainfuck , 16 байтов

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

Попробуйте онлайн!

Разбивка:

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

Как я уверен, вы знаете, что brainfuck воспринимает входные и выходные значения как символы ASCII. Таким образом, а !представляется как значение 33.


Ваша программа не требует ввода, я не думаю. Если вы не говорите о значении, оставленном на ленте
Конор О'Брайен

@ ConorO'Brien Лестница. Думайте об этом как о функции, а не как о программе.
Гравитон

3

Coreutils, sed, 14 байтов

yes $1|sed $1q

Как функция zsh, 20 19 байтов:

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

Попробуйте онлайн!


Я не думаю, что этот ответ действителен, так как он не требует ввода.
DJMcMayhem

@DJMcMayhem: использовал его в функции
Тор

Почему бы просто не сделать это программой yes $1|sed $1q?
Цифровая травма

Хороший вопрос @DigitalTrauma, обновлено
Thor

Правила говорят, что это должны быть целочисленные элементы, а не строковые элементы. Чтобы удовлетворить это, bash / zsh ответ должен использовать declare -iцелочисленные переменные. Но это также должен быть массив. Я не уверен, что bash даже поддерживает целочисленный массив (как eval declare -ia "$1"использование первой функции arg в качестве имени возвращаемого значения массива.) Я проголосовал за это, потому что это соответствует духу вопроса; Я сомневаюсь, что вопрос предназначен для исключения языков, которые на самом деле не имеют целочисленных списков / массивов.
Питер Кордес


2

Java (OpenJDK 8) , 58 56 байт

n->{int a[]=new int[n],i=n;for(;i-->0;)a[i]=n;return a;}

Попробуйте онлайн!

-2 байта благодаря @KevinCruijssen


1
На два байта короче:n->{int a[]=new int[n],i=n;for(;i-->0;)a[i]=n;return a;}
Кевин Круйссен

@KevinCruijssen Ой, больно, я не думал об этом ... Спасибо!
Оливье Грегуар

Случается с лучшими из нас. ;) Если вы заглянете в мою историю ответов, вы, вероятно, также найдете некоторые ответы, в которых я добавляю что-то вроде "байтов, сохраненных благодаря ... из-за глупой ошибки, возникшей мной / что-то очевидное, что я забыл .." :)
Кевин Круйссен

Я подумал об ответе вроде, IntStream.generate(() -> n).limit(n)но решил, что не стоит печатать и проголосовал за него :)
JollyJoker

1
@JollyJoker Ты можешь это сделать ! Это действительно на два байта короче и легко
Оливье Грегуар


2

Свифт 3 , 29 байт

{n in(0..<n).map{_ in n}}

Попробуй это здесь!

Swift 3 , 30 байт

{Array(repeating:$0,count:$0)}

Попробуй это здесь!


Интересно, сможем ли мы получить ввод в виде одной и той же переменной, повторенной дважды. Тогда вы могли бы иметь раствор 10 байт: Array.init. Просто назначьте его переменной с псевдонимом типа и boom:let f: (Int, Int) -> [Int] = Array.init; print(f(5, 5))
Александр - Восстановите Монику

@ Александр Нет, мы не можем получить вход дважды.
Мистер Кскодер
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.