Trasforma un numero intero n in un elenco che lo contiene n volte


15

Dato un numero intero ncome input, restituisce un elenco contenente tempi nripetuti n. Ad esempio, il programma dovrebbe prendere 5e trasformarlo in [5,5,5,5,5]. Gli elementi devono essere numeri interi, non stringhe. Non sono consentite funzioni integrate che eseguono l'attività.

Questo è , quindi si applicano le regole standard.


43
@BrunoE Questo non risponde ancora al perché . Hai un vero motivo per vietare i built-in? Per citare xnor: in generale, se la tua sfida è troppo semplice per essere interessante, non verrà salvata vietando le cose.
Lynn,

13
@BrunoE mentre sono d'accordo con il sentimento, preferiamo l'obiettività qui a ppcg. O qualcosa è o non è valido, le opinioni non dovrebbero entrare nell'equazione.
Skidsdev,

5
@BrunoE Le specifiche devono essere fatte in modo tale che si possa indiscutibilmente stabilire se una voce è valida o meno. Per favore, condividi i tuoi pensieri sulle risposte esistenti e rendi le specifiche più obiettive quando si tratta di built-in.
Mr. Xcoder,

6
Sono ancora confuso ciò che conta come "incorporato" per questo compito. L' *operatore di Python è ok? Qual è un esempio di un built-in che non va bene?
Steve Bennett,

8
Sono sorpreso che nessuno lo abbia ancora menzionato, ma abbiamo una sandbox per le sfide in cui è possibile pubblicarli per ricevere feedback su di loro, prima che vadano in diretta. In questo modo potresti aver impedito di discutere le regole della sfida mentre altri hanno già inviato le loro risposte.
JAD,

Risposte:


32

Gelatina , 1 byte

x

Provalo online!

Si noti che questo non è il "tempo di ripetizione n n" incorporato - la sua funzione è più generale di così. Ad esempio è 4,5,6x1,2,3uguale [4, 5, 5, 6, 6, 6]. Dato solo un argomento, Jelly lo usa solo come argomento sinistro e destro per il collegamento fornito, ma questa funzionalità non è inerente a x.

Se questo non conta, ci sono varie alternative divertenti a 2 byte:

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

eccetera.


10
Beh si. Ogni risposta di golf del codice è una raccolta di incorporati che compiono il compito. Potresti vietare questa risposta se xfacesse "tutto il lavoro", ma sicuramente non lo fa - ci sono impliciti "0 byte" di logica di analisi dei collegamenti e coercizione di array in corso per trasformarla in repeat([n], n), che è esattamente ciò che altre risposte fare.
Lynn,

8
@ Adám Questa è la funzione "ripeti ogni elemento xy times", prendendo 2 argomenti. Ciò che lo fa compiere il compito è come Jelly analizza gli argomenti impliciti, che non ha nulla a che fare con la funzione stessa.
Erik the Outgolfer,

6
Se questa risposta non è valida, il vincolo della domanda non è "Nessun builtin", è "Nessuna risposta da 1 byte", che è una limitazione estremamente arbitraria che sembra controproducente nel golf del codice.
Kamil Drakari,

8
Penso che un argomento per non essere integrato sia che ci sono altre due risposte da 1 byte in Jelly che fanno la stessa cosa e quindi questa risposta potrebbe essere una delle tre. Non ci sono 3 built-in (uno spererebbe) per " n ntempi di ripetizione ", quindi non possono TUTTI essere un "built-in" per questo.
nmjcman101,

6
L'intero thread di commenti sembra un buon argomento per non vietare qualcosa di soggettivo come i builtin.
trichoplax,


19

Linguaggio di scripting dell'operazione Flashpoint ,  50  46 byte

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

Chiama con:

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

Produzione:


Hai un decremento post i--, e +=in questo?
TheLethalCoder

3
Perché gli screenshot per questo sono sempre in un deserto arido? Dovresti usare una bella mappa per i tuoi screenshot: P.
Magic Octopus Urn,

2
@MagicOctopusUrn È meglio?
Steadybox,

1
@Steadybox ahaha! Epico: P. Quella città da sinistra è morta? Sembra la chiesa che inizi in un pò.
Magic Octopus Urn,

1
Penso che gli screenshot dovrebbero essere postati ritagliati su un'immagine più piccola. Non abbiamo bisogno di vedere la mappa, che distrae dall'output effettivo.
mbomb007,

12

APL (Dyalog) , 2 byte

Cinque soluzioni ugualmente brevi. Gli ultimi due sono per gentile concessione di Zacharý .


⍴⍨

Provalo online!

 ciclicamente r eshape

 se stesso


/⍨

Provalo online!

/ replicare

 se stesso


\⍨

Provalo online!

\ espandere

 se stesso


⌿⍨

Provalo online!

 replicare lungo il primo (e unico) asse

 se stesso


⍀⍨

 espandersi lungo il primo (e unico) asse

 se stesso

Provalo online!


@Uriel Ce n'è un altro ...
Adám,

1
Entrambi ⌿⍨e ⍀⍨funzionano.
Zacharý,

2
Era intenzionale che il "sé" assomigliasse a una faccia?
geokavel,

1
@geokavel Non la penso così, ma ho anche notato questo come scritto a macchina questo post. Lo rende piuttosto mnemonico, no? In effetti, selfie è uno dei suoi nomi semi-ufficiali, quindi nell'interfaccia RIDE di Dyalog APL, puoi inserire digitando `` selfie .
Adám,

1
@sethrin TIO conta i caratteri (e UTF-8 byte ove applicabile), ma spetta all'utente assicurarsi che non utilizzino alcun carattere mancante in un set di caratteri a byte singolo (SBCS). Per gli APL, vedi qui.
Adám,



9

Ottava, 12 byte

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

Provalo online!


Cosa significa ~ in ottava, perché questa è l'unica parte del tuo codice che non capisco ..
Michthan,

1
@Michthan Ci scusiamo per la risposta tardiva. ~è l' notoperatore che converte 1: n in un array di 0s di dimensione n. È possibile utilizzare al !posto di esso.
rahnema1,

9

JavaScript (ES6), 19 byte

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

Provalo

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
Un array senza ...- quale sarà il prossimo ?!
Neil,

1
@Neil: mi è sembrato sbagliato anche mentre lo scrivevo! : D
Shaggy,

7

Pyth , 2 byte

*]

Suite di test .


*] QQ - Programma completo con input implicito

 ] - Trasforma l'input in un elenco.
* - Ripetilo un numero di volte uguale all'input. 

7

Haskell , 13 byte

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

Provalo online! Utilizzo: f 5rese [5,5,5,5,5]. Per n=5, [1..n]restituisce l'elenco [1,2,3,4,5]. n<$sostituisce ogni elemento di questo elenco con n.


3
Il mio è un po 'più lungo, ma mi piace comunque:join replicate
amalloy,

@amalloy Questo sarebbe davvero il modo pulito di Haskell per farlo. Tuttavia, joinnon fa parte di Prelude e quindi richiede un lungo import Control.Monad, che raramente lo rende utile per il golf.
Laikoni,



5

Dodos , 76 byte

	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

Provalo online!

Spiegazione:

f è un alias per dab (coda).

sè sottrazione, come spiegato nel wiki: (x, y) → (0, y − x) quando x ≤ y .

tmappe (a, b, c ...) a (b + c + ..., a + b + c + ...) .

f s tmappa (a, b, c ...) a a . Questa è la nostra funzione "testa".

d intinge solo il capo del suo argomento: (a, b, c ...) → (| a − 1 |, b, c ...)

rè la principale logica di ripetizione. Mappiamo (a, b) a (* r (| a − 1 |, b), b) .

Ad esempio, r (4, 7) valuterà come

  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.

Infine, definiamo 2quali mappe n → (n, n) e definiamo maincome f f r 2, calcolando r (n, n) e tagliando i primi due elementi.


4

Japt , 2 byte

ÆU

Provalo


Spiegazione

Input implicito di numero intero U. Genera un array di numeri interi da 0a U-1. Riempilo con U. Output implicito dell'array risultante.


4

TeX, 81 byte

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

uso

\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


In realtà è LaTeX. In Tex sarebbe molto più breve.
A Gold Man,


4

Haskell (14 byte)

replicate>>=id

Grazie a @nimi, non ho più bisogno di importazione. Sìì!

È una funzione che accetta un argomento intero; ad esempio, i seguenti ritorni [5,5,5,5,5]:

(replicate>>=id) 5

1
Perché no id=<<replicate? Ha anche 14 byte ma non necessita dell'importazione.
nimi,

@nimi Ottimo punto! Trascurato questa possibilità. (Devo davvero tuffarmi di più nella monade delle frecce ...)
tomsmeding il

4

Java (OpenJDK 8) , 50 48 byte

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

Provalo online!

-2 byte grazie a @Jakob

Ispirato dai commenti nel post di @ OlivierGrégoire, e ottimizzato un po 'di più. Accetta un input intero, crea un IntStream di nelementi, quindi mappa ogni elemento ne lo restituisce.


È possibile salvare 2 byte iniziando con java.util.Arrays.stream(new int[n]).
Jakob,

4

Perl 5 , 18 14 byte

-4 byte grazie a @DomHastings

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

Provalo online!

È x un builtin che svolge l'intera attività? Una specie di? Non proprio? Regole poco chiare?

Modifica: Sì, probabilmente va bene.


Aveva praticamente lo stesso, ma puoi cambiare il primo $_[0]in @_! Anche il secondo può essere, "@_"penso ...
Dom Hastings,

Direi che non conta come integrato perché devi aggirare il fatto che ci vogliono due input invece di uno.
Brad Gilbert b2gills il

Perché non $_=$_ x$_con perl -pe?
Thor,

@Thor xesegue la ripetizione della stringa, non la ripetizione dell'elenco, a meno che l'operando di sinistra non sia tra parentesi (o sia un qwoperatore) e xsia valutato nel contesto dell'elenco. E ovviamente $_è uno scalare, non un elenco.
aschepler,

1
@Thor Non lo considero soddisfacente "restituire un elenco".
aschepler,

3

J, 2 byte

$~

Come la risposta APL: modellare in modo riflessivo l'input. In altre parole:

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

3

Brainbash , 39 byte

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

Provalo 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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.