Превратить целое число 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
22

Python 3 , 14 байт

lambda k:[k]*k

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

Мистер Xcoder
источник
Что не так с просто [n]*n?
3
@paxdiablo Это фрагмент. Мы можем создавать полные программы или функции в соответствии с мета-консенсусом.
мистер Xcoder
19

Операция Flashpoint скриптовый язык,  50  46 байтов

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

Звоните с:

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

Выход:

Steadybox
источник
У вас есть пост декремент 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

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

rahnema1
источник
Что означает ~ в октаве, потому что это единственная часть вашего кода, которую я не понимаю ..
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

Pyth , 2 байта

*]

Тестовый пакет .


*] QQ - Полная программа с неявным вводом

 ] - превратить ввод в список.
* - Повторите это количество раз, равное вводу. 
Мистер Xcoder
источник
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.

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

R , 18 байт

array(n<-scan(),n)

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

user2390246
источник
6
Является ли rep(n<-scan(),n)слишком близко к встроенным командам?
Робин Гертенбах
@RobinGertenbach Может быть, вы должны опубликовать это как отдельный ответ.
Андрей Костырка,
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
tomsmeding
источник
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и возвращает его.

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

Perl 5 , 18 14 байтов

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

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

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

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

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

aschepler
источник
Было почти то же самое, но вы можете изменить первый $_[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

Brainbash , 39 байт

>-[-[-<]>>+<]>->#[->+>+<<]>>[-<;<<.>>>]

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

Печатает N Nраз. Работает, генерируя 32, принимая входные данные, затем дублируя входные данные дважды, а затем выводя первое для каждого 1 во втором.

Конор О'Брайен
источник
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 */
fergusq
источник
1
Почему вы можете пропустить 1 на первом входе, а не на втором?
Конор О'Брайен
1
@ ConorO'Brien Каждый знак подчеркивания без номера имеет номер, который на один больше предыдущего: [_]*_= [_1]*_2. Поскольку первое подчеркивание является первым, оно автоматически имеет номер 1.
fergusq
3

Groovy , 9 байт

{[it]*it}

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


Возможно, самый конкурентоспособный отличный ответ, который я сделал на сегодняшний день.

Урна волшебного осьминога
источник
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

cQuents v0, 3 байта

::n

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

объяснение

::    Mode: sequence 2. Given input n, output the sequence n times
  n   Each item in the sequence is n
Стивен
источник
Обратите внимание, что текущая версия использует &вместо::
Стивен
2

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

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

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

Swift 3 , 30 байт

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

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

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