Convierte un entero n en una lista que lo contiene n veces


15

Dado un entero ncomo entrada, devuelve una lista que contiene tiempos nrepetidos n. Por ejemplo, el programa lo tomaría 5y lo convertiría [5,5,5,5,5]. Los elementos deben ser enteros, no cadenas. No se permiten funciones integradas que realicen la tarea.

Este es el , por lo que se aplican reglas estándar.


43
@BrunoE Eso todavía no responde por qué . ¿Tiene una razón real para prohibir los empotrados? Para citar a xnor: en general, si tu desafío es demasiado simple para ser interesante, no se salvará prohibiendo las cosas.
Lynn

13
@BrunoE, aunque estoy de acuerdo con el sentimiento, preferimos la objetividad aquí en ppcg. O algo es o no es válido, las opiniones no deberían entrar en la ecuación.
Skidsdev

55
@BrunoE Las especificaciones deben hacerse de tal manera que uno pueda decidir indiscutiblemente si una entrada es válida o no. Comparta sus pensamientos sobre las respuestas existentes y haga que las especificaciones sean más objetivas cuando se trata de built-in.
Sr. Xcoder

66
Todavía estoy confundido lo que cuenta como un "incorporado" para esta tarea. ¿Está *bien el operador de Python ? ¿Cuál es un ejemplo de un incorporado que no está bien?
Steve Bennett

8
Me sorprende que nadie haya mencionado esto todavía, pero tenemos una caja de arena para desafíos donde puedes publicarlos para obtener comentarios sobre ellos, antes de que se publiquen. De esta manera, es posible que haya evitado discutir las reglas del desafío mientras otros ya enviaron sus respuestas.
JAD

Respuestas:


32

Jalea , 1 byte

x

Pruébalo en línea!

Tenga en cuenta que este no es el " n ntiempo de repetición " incorporado, su función es más general que eso. Por ejemplo 4,5,6x1,2,3igual [4, 5, 5, 6, 6, 6]. Teniendo en cuenta sólo un argumento, jalea sólo pasa a usarlo ya que tanto la izquierda y la derecha argumento para el enlace proporcionado, pero esta funcionalidad no es inherente a x.

Si esto no cuenta, hay varias alternativas divertidas de 2 bytes:

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

etc.


10
Bueno, sí. Cada respuesta de golf de código es una colección de elementos integrados que realizan la tarea. Puede prohibir esta respuesta si xhizo "todo el trabajo", pero ciertamente no lo hace: hay un "0 bytes" implícito de análisis de enlaces y lógica de coerción de matriz para convertir esto repeat([n], n), que es exactamente lo que otras respuestas hacer.
Lynn

8
@ Adám Esta es la función "repetir cada elemento de xy veces", tomando 2 argumentos. Lo que lo hace cumplir la tarea es cómo Jelly analiza los argumentos implícitos, que no tiene nada que ver con la función en sí.
Erik the Outgolfer

66
Si esta respuesta es inválida, entonces la restricción de la pregunta no es "No incluye", es "Respuestas de 1 byte", que es una limitación extremadamente arbitraria que parece contraproducente en el código golf.
Kamil Drakari

8
Creo que un argumento para que esto no se incorpore es que hay otras dos respuestas de 1 byte en Jelly que hacen lo mismo y, por lo tanto, esta respuesta podría ser cualquiera de las tres. No hay 3 incorporados (uno esperaría) para " n ntiempos repetidos ", por lo que TODOS no pueden ser "incorporados" para ello.
nmjcman101

66
Todo este hilo de comentarios parece un buen argumento para no prohibir algo tan subjetivo como los incorporados.
trichoplax


19

Lenguaje de script Operation Flashpoint ,  50  46 bytes

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

Llamar con:

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

Salida:


¿Tiene post decremento i--, y +=en esto?
TheLethalCoder

3
¿Por qué las capturas de pantalla para esto siempre están en un desierto árido? Deberías usar un mapa genial para tus capturas de pantalla: P.
Urna mágica de pulpo

2
@MagicOctopusUrn ¿Eso es mejor?
Steadybox

1
@Steadybox ahaha! Épica: P. ¿Es esa la ciudad de izquierda por muerta? Se parece a la iglesia en la que comienzas.
Urna mágica del pulpo

1
Creo que las capturas de pantalla deberían publicarse recortadas en una imagen más pequeña. No necesitamos ver el mapa, y distrae de la salida real.
mbomb007

12

APL (Dyalog) , 2 bytes

Cinco soluciones igualmente cortas. Los dos últimos son cortesía de Zacharý .


⍴⍨

Pruébalo en línea!

 cíclicamente r eshape

 yo


/⍨

Pruébalo en línea!

/ reproducir exactamente

 yo


\⍨

Pruébalo en línea!

\ expandir

 yo


⌿⍨

Pruébalo en línea!

 replicar a lo largo del primer (y único) eje

 yo


⍀⍨

 expandirse a lo largo del primer (y único) eje

 yo

Pruébalo en línea!


@Uriel Hay uno más ...
Adám

1
Ambos ⌿⍨y ⍀⍨trabajo.
Zacharý

2
¿Fue intencional que el "yo" parezca una cara?
geokavel

1
@geokavel No lo creo, pero también lo noté cuando escribí esta publicación. Lo hace bastante mnemotécnico, ¿no? De hecho, selfie es uno de sus nombres semioficiales, por lo que en la interfaz RIDE de Dyalog APL, puede insertar escribiendo `` selfie .
Adám

1
@sethrin TIO cuenta los caracteres (y los bytes UTF-8 donde corresponda), pero depende del usuario asegurarse de que no use ningún carácter que falte en un conjunto de caracteres de un solo byte (SBCS). Para APL, ver aquí.
Adám



9

Octava, 12 bytes

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

Pruébalo en línea!


¿Qué significa ~ en octava, porque esa es la única parte de su código que no entiendo
Michthan

1
@Michthan Perdón por la respuesta tardía. ~es el notoperador que convierte 1: n en una matriz de 0s de tamaño n. Puedes usar en !lugar de él.
rahnema1

9

JavaScript (ES6), 19 bytes

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

Intentalo

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
Una matriz sin ...... ¡¿qué sigue ?!
Neil

1
@Neil: ¡me sentí mal incluso cuando lo estaba escribiendo! : D
Shaggy

7

Pyth , 2 bytes

*]

Banco de pruebas .


*] QQ - Programa completo con entrada implícita

 ] - Convierta la entrada en una lista.
* - Repítalo varias veces igual a la entrada. 

7

Haskell , 13 bytes

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

Pruébalo en línea! Uso: f 5rendimientos [5,5,5,5,5]. Para n=5, [1..n]produce la lista [1,2,3,4,5]. n<$reemplaza cada elemento de esta lista con n.


3
El mío es un poco más largo, pero me gusta de todos modos:join replicate
amalloy

@amalloy De hecho, esta sería la forma limpia de Haskell de hacerlo. Sin embargo, joinno es parte de Prelude y, por lo tanto, requiere un tiempo prolongado import Control.Monad, lo que rara vez lo hace útil para jugar al golf.
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

Pruébalo en línea!

Explicación:

fes un alias para dab(cola).

ses la resta, como se explica en la wiki: (x, y) → (0, y − x) cuando x ≤ y .

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

f s tmapas (a, b, c ...) a a . Esta es nuestra función de "cabeza".

dsumerge solo la cabeza de su argumento: (a, b, c…) → (| a − 1 |, b, c…)

rEs la lógica de repetición principal. Mapeamos (a, b) a (* r (| a − 1 |, b), b) .

Por ejemplo, r (4, 7) evaluará como

  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.

Finalmente, definimos 2qué mapas n → (n, n) , y definimos maincomo f f r 2, computar r (n, n) y cortar los primeros dos elementos.


4

Japt , 2 bytes

ÆU

Pruébalo


Explicación

Entrada implícita de entero U. Genere una matriz de enteros de 0a U-1. Llénalo con U. Salida implícita de la matriz resultante.


4

TeX, 81 bytes

\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}

ingrese la descripción de la imagen aquí


Eso es en realidad LaTeX. En Tex sería mucho más corto.
Un hombre de oro el


4

Haskell (14 bytes)

replicate>>=id

Gracias a @nimi, ya no necesito ninguna importación. ¡Hurra!

Es una función que toma un argumento entero; por ejemplo, los siguientes retornos [5,5,5,5,5]:

(replicate>>=id) 5

1
¿Por qué no id=<<replicate? También tiene 14 bytes pero no necesita la importación.
nimi

@nimi Muy buen punto! Pasó por alto esa posibilidad. (Realmente necesito sumergirme más en la flecha mónada ...)
tomsmeding

4

Java (OpenJDK 8) , 50 48 bytes

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

Pruébalo en línea!

-2 bytes gracias a @Jakob

Inspirado por los comentarios en la publicación de @ OlivierGrégoire, y optimizado un poco más. Toma una entrada entera, crea un IntStream de nelementos, luego asigna cada elemento ny lo devuelve.


Puede guardar 2 bytes comenzando con java.util.Arrays.stream(new int[n]).
Jakob

4

Perl 5 , 18 14 bytes

-4 bytes gracias a @DomHastings

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

Pruébalo en línea!

¿Es xuna construcción que hace toda la tarea? ¿Algo así como? ¿Realmente no? Reglas poco claras?

Editar: Sí, probablemente esté bien.


Tenía casi lo mismo, pero puedes cambiar el primero $_[0]a @_! También el segundo puede ser "@_", creo ...
Dom Hastings

Diría que no cuenta como una función incorporada porque debe evitar el hecho de que toma dos entradas en lugar de una.
Brad Gilbert b2gills

¿Por qué no $_=$_ x$_con perl -pe?
Thor

@Thor repite las xcadenas, no enumera la repetición, a menos que el operando izquierdo esté entre paréntesis (o sea un qwoperador) y xse evalúe en el contexto de la lista. Y, por supuesto, $_es un escalar, no una lista.
Aschepler

1
@Thor No lo consideraría satisfactorio "devolver una lista".
aschepler

3

J, 2 bytes

$~

Igual que la respuesta APL: da forma reflexiva a la entrada. En otras palabras:

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

3

Brainbash , 39 bytes

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

Pruébalo en línea!

Imprime N Ntiempos. Funciona generando 32, tomando entradas, luego duplicando la entrada dos veces, luego saca la primera para cada 1 en la segunda.


3

C (gcc) , 55 bytes

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

Pruébalo en línea!

Devuelve una lista de kenteros.


1
Yay "operador de flecha larga". Además, no pensé que gcc alguna vez usaría el registro eaxpara locales. Imagínate.
Aschepler

2
Puede guardar 2 bytes eliminando una comparación a 0 en ciclo, a menos que haya pasado por alto algo.
Jasmes

Sugerir en *f(k){int r[k],lugar deint*f(k){int*r=malloc(k*4),
ceilingcat

3

Röda , 10 bytes

{[[_]*_1]}

Pruébalo en línea!

Explicación:

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

1
¿Por qué puedes dejar el 1 en la primera entrada pero no la segunda?
Conor O'Brien

1
@ ConorO'Brien Cada subrayado sin un número tiene un número que es uno más grande que el anterior: [_]*_= [_1]*_2. Como el primer guión bajo es el primero, tiene automáticamente el número 1.
fergusq


3

brainfuck , 16 bytes

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

Pruébalo en línea!

El desglose:

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

Como estoy seguro de que sabe, Brainfuck toma los valores de entrada y salida como caracteres ASCII. Entonces a !se representa como el valor 33.


Su programa no toma entrada, no lo creo. A menos que esté hablando de un valor que queda en la cinta
Conor O'Brien

@ ConorO'Brien La escalera. Piense en ello como una función más que un programa.
Graviton

3

Coreutils, sed, 14 bytes

yes $1|sed $1q

Como una función zsh, 20 19 bytes:

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

Pruébalo en línea!


No creo que esta respuesta sea válida, ya que no toma entrada.
DJMcMayhem

@DJMcMayhem: lo usé en una función
Thor

¿Por qué no simplemente convertirlo en un programa yes $1|sed $1q?
Trauma digital

Buen punto @DigitalTrauma, actualizado
Thor

Las reglas dicen que tiene que ser elementos enteros, no elementos de cadena. Para satisfacer eso, una respuesta bash / zsh necesitaría usar declare -ivariables enteras. Pero también tiene que ser una matriz. No estoy seguro de que bash incluso sea compatible con una matriz de enteros (como eval declare -ia "$1"usar la primera función arg como el nombre de un valor de retorno de la matriz). Voté esto porque sigue el espíritu de la pregunta; Dudo que la pregunta pretenda excluir idiomas que realmente no tienen listas / matrices de enteros.
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;}

Pruébalo en línea!

-2 bytes gracias a @KevinCruijssen


1
Dos bytes más cortos: n->{int a[]=new int[n],i=n;for(;i-->0;)a[i]=n;return a;}
Kevin Cruijssen

@KevinCruijssen Ay, me duele no haber pensado en eso ... ¡Gracias!
Olivier Grégoire

Le pasa a lo mejor de nosotros. ;) Si miras en mi historial de respuestas, probablemente también encontrarás algunas respuestas donde agrego algo como "bytes guardados gracias a ... debido a un estúpido error por mi parte / algo obvio que olvidé ..." :)
Kevin Cruijssen

Pensé en una respuesta como, IntStream.generate(() -> n).limit(n)pero decidí que no valía la pena escribir y voté por esto :)
JollyJoker

1
@JollyJoker ¡Podrías hacerlo ! De hecho, es dos bytes más corto y fácilmente superaría mi respuesta ;-)
Olivier Grégoire


2

Swift 3 , 29 bytes

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

Pruébalo aquí!

Swift 3 , 30 bytes

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

Pruébalo aquí!


Me pregunto si podemos obtener la entrada como la misma variable repetida dos veces. Posteriormente, se podría tener una solución de 10 bytes: Array.init. Simplemente asígnelo a una variable con un alias de tipo y boom:let f: (Int, Int) -> [Int] = Array.init; print(f(5, 5))
Alexander - Restablece a Mónica el

@Alexander No, no podemos obtener la entrada dos veces.
Sr. Xcoder
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.