Desafío
Su tarea en esta pregunta es escribir un programa o una función con nombre que tome un entero positivo n
(mayor que 0) como entrada a través de STDIN, ARGV o argumentos de función y genere una matriz a través de STDOUT o el valor devuelto por la función.
¿Suena bastante simple? Ahora estas son las reglas
- La matriz solo contendrá enteros de
1
an
- Cada entero de
1
an
debe repetirsex
veces dondex
es el valor de cada entero.
Por ejemplo:
Entrada:
5
Salida:
[1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5]
La matriz puede o no estar ordenada.
Este es el código de golf, por lo que el ganador es el código más corto en bytes.
Prima
Multiplique su puntaje por 0.5
si no hay dos enteros adyacentes en su matriz de salida iguales.
Por ejemplo n = 5
, una de esas configuraciones sería
[5, 4, 5, 4, 3, 4, 5, 2, 5, 3, 1, 2, 3, 4, 5]
fuente
/⍨⍳n
Ruby (recursivo), 41 bytes * 0.5 = 20.5
O usando una lambda (según lo recomendado por histocrat y Ventero): 34 bytes * 0.5 = 17
(llamar usando
r[argument]
)fuente
n=->x,i=1{...n[x,i+1]...
) y algunos más con[*i..n]
.r=->n,i=n{i>0?[*i..n]+r[n,i-1]:[]}
Pyth , 9 bytes * 0.5 = 4.5
Con la ayuda de @FryAmTheEggman
Pruébalo en línea.
Explicación
donde
Q
esta la entradafuente
Haskell, 31 caracteres = 15.5 puntaje
27 personajes sin el bono
Golpeado por el orgulloso Haskeller
fuente
g n = [y|x<-[n,n-1..1],y<-[x..n]]
C, 22 = 44 bytes * 0.5
La función
h
toma dos parámetros. El primero es un nint
especificador . El segundo es unint*
que es el búfer de salida.Programa de prueba
fuente
Pyth -
1510 * .5 = 5Pruébalo en línea.
Espera entrada en stdin. Algoritmo descubierto independientemente. Gracias @ Sp3000 por ayudarme a pegar la última Q allí: P ¿También, ironía? XD
Explicación:
fuente
CJam,
1215 bytes * 0.5 = 7.5Este es un programa completo de STDIN a STDOUT. Concatena sufijos crecientes de la
1 ... n
rango, lo que garantiza que no haya dos números adyacentes idénticos.Pruébalo aquí.
fuente
Python 2, 53 bytes * 0.5 = 26.5
La idea de @ VisualMelon tomó prestada descaradamente
fuente
Haskell, 34 bytes * 0.5 = 17
Es la primera vez que uso Haskell para jugar al golf. Llamada con
g <number>
.fuente
Bash + coreutils, 28/2 = 14
Robando descaradamente la idea de @ pgy y jugando al golf:
Golpe puro (sin coreutils), 30/2 = 15
Eva, escape y expansión del infierno:
fuente
GolfScript (14 bytes * 0.5 = puntaje 7)
Demostración en línea
Creo que esto es probablemente similar a algunas respuestas existentes, ya que acumula la matriz
concat( [n], [n-1, n], [n-2, n-1, n], ..., [1, 2, ..., n] )
Lamentablemente, no pude jugar más al golf, posiblemente el más elegante:
que pone la entrada
x
en una matriz y luego se aplica dos veces{,{x\-}/}%
, que asigna cada elemento de una matriz a una cuenta regresiva de esa cantidad de elementosx
.fuente
C # - 81 (161bytes * 0.5)
Trabajo simple en C #, es de esperar que obtenga el bono de números sin neibouring. Lee un int desde stdin, escribe una matriz como el ejemplo en stdout.
Más legible:
Ejemplos de salida:
fuente
System.Console
es estático, no puede asignarlo a una variable, pero en C # 6 o lo que sea siguiente, podrá hacerusing System.Console;
(using System;
no paga en este caso), no estoy seguro de cómo me siento acerca de esta función, lo hará afectar muchas preguntas antiguas de golf precisamente por este motivo;)using C=System.Console
ahorra 3 bytes y es probablemente lo que @MarkKnol quiso decir (¡perdón!), Vergonzosa negligencia de mi parte.JavaScript, ES6, 41 bytes
Esto crea una función
f
que se puede llamar comof(6)
y devuelve la matriz requerida.Esto utiliza un enfoque recursivo, donde cada iteración crea una matriz de
i
elementos todos valoradosi
y concatena una matriz devueltaf(i-1)
con la condición de detención dei==0
.Funciona en la última versión de Firefox.
fuente
Haskell, 14 = 28 bytes / 2
salida de ejemplo:
24 bytes sin el bono:
fuente
=<<
ayudar a evitar el espacio en blanco? Siento que podría, pero me sorprendería si no lo hubieras considerado.=<<
, necesitaría paréntesis para el lambda>>=
?(
,[
,=
,,
, después de todos los operadores, y similareslet \x->y = (2+) in (x,y)
Parece un poco imposible.Haxe , 53 bytes
Funciona con l (6); debido a la comprensión de la matriz.
Prueba en línea http://try.haxe.org/#741f9
fuente
vba, 76 * 0.5 = 38
fuente
For Z=1 To
aFor Z=1To
Next:Next
aNext x,Z
R, 44 * .5 = 22
Una prueba rápida
fuente
JavaScript, ES6, 66 bytes * 0.5 = 33
Partiendo del enfoque recursivo de Optimizer , podemos construir series descendentes de longitud decreciente, como
[4,3,2,1, 4,3,2, 4,3, 4]
.En lugar de
Array(i).fill(i)
hacerundefined
subconjuntos del mismo valor con , hacemos subconjuntos llenos de la longitud apropiada conArray(n).fill()
y luego cambiamos los valores a una ejecución descendente usando.map((v,x)=>i-x)
. Además, definimos y recurrimos sobre una función internag
; la función externaf
existe solo para almacenar el valor dei
whileg
recurses.fuente
T-SQL, 176 * 0.5 = 88
Como parecía perderse el T-SQL @Optimizer, aquí está en toda su gloria detallada :).
Un par de opciones de funciones, una función escalar y una tabla de valores en línea. La función escalar usa bucles while para recurrir y devuelve una cadena de números, donde la función Valor de tabla en línea usa un CTE recursivo para una secuencia y devuelve una tabla. Por supuesto, estos nunca serán competitivos, por lo que no he pasado mucho tiempo jugando al golf.
Función de valor de tabla en línea, 176 * .5
Llamado de la siguiente manera
Ejemplo de SQLFiddle
Función escalar, 220 * .5
Llamado de la siguiente manera
Ejemplo de SQLFiddle
fuente
Mathematica, 34 * 0.5 = 17
fuente
perl, 26 bytes
fuente
$n
.Unable to parse postcircumfix:sym<{ }>, couldn't find final '}' at line 3
. Probado en ideone.com.JavaScript (legible), 131 bytes
Soy nuevo en Code Golf, así que este no es el mejor
JavaScript (menos legible), 87 bytes
Minified usando jscompress.com
fuente
TECO, 25 bytes * 0.5 = 12.5
Lo anterior apenas supera la versión sin bono de 13 bytes:
fuente
C #,
11499 * 0.5 = 49.5 bytes(Con un poco de ayuda de la respuesta de VisualMelon) Editar: y el comentario de James Webster
Sin golf:
Hay una versión insegura que tomé descaradamente de la respuesta C de feersum, pero no estoy 100% seguro de que se ajuste a las reglas, ya que debe asignar la memoria antes de llamar al método.C # (inseguro), 82 * 0.5 = 41 bytes
Llamado de la siguiente manera:
Según la sugerencia de VisualMelon (¡gracias!), El código inseguro se puede volver a crear con un código seguro que reduce aún más el tamaño. Todavía plantea la pregunta de si la creación de la matriz de resultados finales se puede realizar fuera del método.
C #, 72 * 0.5 = 36 bytes
fuente
int[]
inmediatovoid A(int n,int[]p){int z=0,m=n,i;while(m-->0)for(i=m;i++<n;)p[z++]=i;}
- Estoy de acuerdo en que probablemente sea un poco dudoso, con respecto a las reglas;)System.Runtime.InteropServices.Marshal.Copy(new IntPtr(stuff), stuffArray, 0, length);
?var a=new int[(int)((n/2f)*(n+1))];
que creo que se reduce a 109(n*(n+1)/2)
Bash con seq, expr y xargs = 59/2 = 29.5
Guárdelo y ejecute con el número como primer argumento.
fuente
C #,
116115+ 33 = 148 bytesNo es el código más corto, pero ... funciona de todos modos: P
Requiere esto en la parte superior del archivo (33 bytes):
Versión sin golf:
fuente
J, 23 * 0.5 = 11.5
J, 11
fuente
23 * 0.5
es11.5
no10.5
.-1
Byte: ¡f=.-[:;<@|.@i."0@>:@i.
haciendo que las puntuaciones sean iguales!JavaScript (ES6) 29 (58 * 0.5)
Editar eliminar; thx @Optimizer
Prueba en la consola FireFox / FireBug
Salida
Sin golf
fuente
ECMAScript6, 67 * 0.5 = 33.5 bytes
Bastante contento con este ... Es aproximadamente una cuarta parte del tamaño de mi original.
f(4)
devoluciones:Vieja respuesta:
Esta es mi primera oportunidad en el código de golf ... Todavía quiero obtener ese bono de 0.5x. Cualquier sugerencia es bienvenida!
Llamado con f (n).
fuente
d
, (2)a=b=c=[]
en la parte de declaración, (3)c[a].map(e=>a)
(4)b.push(...c)
C #, 108 bytes * 0.5 = 54
¡Gracias a VisualMelon por hacer el trabajo duro! Pensé que trataría de exprimirlo lo más posible.
(114 bytes * 0.5 = 57, si insiste en usar .ToArray () para devolver int [])
fuente