Inspirado por esta pregunta de nuestros amigos rivales en Code Review.
Definiciones
Una supermatriz es una matriz en la que cada elemento nuevo de la matriz es más grande que la suma de todos los elementos anteriores. {2, 3, 6, 13}
es una super matriz porque
3 > 2
6 > 3 + 2 (5)
13 > 6 + 3 + 2 (11)
{2, 3, 5, 11}
no es una super matriz, porque
3 > 2
5 == 3 + 2
11 > 5 + 3 + 2
Una matriz duper es una matriz donde cada elemento nuevo en la matriz es más grande que el producto de todos los elementos anteriores. {2, 3, 7, 43, 1856}
es una super matriz, pero también es una matriz duper ya que
3 > 2
7 > 3 * 2 (6)
43 > 7 * 3 * 2 (42)
1856 > 43 * 7 * 3 * 2 (1806)
El reto
Escriba una función o programa que tome una matriz como entrada en el formato de lista nativa de su idioma y determine qué tan súper es la matriz. Opcionalmente, también puede tomar una entrada de longitud de matriz (para lenguajes como C / C ++). Además, se puede asumir que todos los números de la lista habrá enteros mayores que 0. Si es un súper matriz, debe imprimir It's a super array!
Si se trata de una súper duper matriz, debe imprimir It's a super duper array!
También es posible que una matriz sea duper- no super Por ejemplo, {1, 2, 3}
en este caso, debe imprimir It's a duper array!
Si la matriz no es super ni duper, puede imprimir un valor falso.
Como de costumbre, este es el código de golf, por lo que se aplican las lagunas estándar y gana la respuesta más corta en bytes.
{1, 2, 3}
matriz?2 * 1
a la igualdad3
en mi cabeza.super[space][space]array
lo permiten.Respuestas:
Jelly ,
474544 42 bytesEsto imprime una cadena vacía (false) para matrices que no son ni super ni duper. Pruébalo en línea!
Cómo funciona
fuente
JavaScript (ES6),
111110 bytes¡ Ahorré un byte gracias a @ETHproductions !
Explicación
Toma una matriz de números, devuelve una cadena o el número
0
para falso.Prueba
Mostrar fragmento de código
fuente
s+=s&&n>s&&n,d*=d&&n>d&&n
s
debe hacerse de esta manera porque debe establecerse enfalse
ifn>s
, perod*false
tiene el mismo efecto para que uno funcione. ¡Gracias!Java,
183182 bytesHice los siguientes supuestos:
""
es un valor falso.Si alguno de estos está mal, por favor dígame.
De todos modos, no puedo evitar la sensación de que podría haberme exagerado con la cantidad de variables.
Editar: logró guardar un byte, gracias a @UndefinedFunction
fuente
boolean s=true
aboolean s=1<2
?MATL , 66 bytes
Utiliza la versión actual (10.0.3) , que es anterior a este desafío.
La entrada es de stdin. Si no es super o duper, la salida está vacía (que es falsey).
EDITAR (7 de abril de 2016) : debido a cambios en la versión 16.0.0 del idioma,
5L
y6L
debe ser reemplazado por3L
y4L
respectivamente. El enlace al compilador en línea incluye esas modificaciones.Pruébalo en línea !
Explicación
fuente
C ++ 14,
178, ...,161157 bytesNo se me ocurre una manera de hacerlo más corto.¡Parece que siempre hay margen de mejora!Actualización 1 : estoy a favor del código seguro, pero tomar una matriz cruda y su tamaño como argumentos de función es 9 bytes más corto que tomar un vector :(
Actualización 2: ahora devuelve una cadena vacía como valor falso, a un costo de 8 bytes.
Actualización 3: Volver a 165 bytes, gracias al comentario de CompuChip.
Actualización 4: Otro comentario de CompuChip, otros 4 bytes desactivados.
Actualización 5: usar en
auto
lugar destring
otra sugerencia de CompuChip elimina otros 4 bytes del código.Programa completo sin golf con casos de prueba:
Salida:
fuente
It's a array!
es veraz ( prueba ) según nuestra definición en Meta .if ... >=
comparaciones de longitud : creo quee=r>s?e:0
es equivalente aif(r<=s)e=0
.for(s=p=*a;--n;s+=r,p*=r)r=*++a
trabajo? Le permitiría caer pori
completoC, 150 bytes
Cada entrada es terminada por a
0
. Prueba principal:Prima si se nos permite un formato de salida más compacto, podemos cortarlo a 107 bytes :
En este caso,
Z
regrese3
para superduper,2
para super,1
para duper y0
para none.fuente
Pyth -
5452 bytesLa parte del formato de la cadena probablemente se puede jugar golf, pero me gusta el enfoque de prueba súper duper.
Test Suite .
fuente
c2"superduper"
se puede jugar golf+R"uper""sd"
lang-pyth
no existe.Pitón 3, 127
Guardado 5 bytes gracias a FryAmTheEggman.
Solución bastante básica en este momento, nada demasiado elegante. Simplemente ejecute un total acumulado de suma y producto y verifique cada elemento.
Aquí están los casos de prueba en caso de que alguien más quiera intentar superar mi puntaje.
fuente
AWK - 140 bytes
Para aquellos que no conocen AWK, los registros se analizan automáticamente en líneas basadas en variables
RS
y las líneas se analizan automáticamente en campos basados en variablesFS
. También las variables "" no asignadas son "", que cuando se agregan a un # actúan como un 0. LaBEGIN
sección se llama exactamente una vez, antes de analizar los registros / campos. El resto del lenguaje es bastante similar a C con cada bloque de código coincidente que se aplica a cada registro. Ver http://www.gnu.org/software/gawk/manual/gawk.html#Getting-Started para obtener más detalles.Ejemplo ejecutado donde
'code'
es como arriba:echo 1 2 6 | 'code'
También podría colocar una matriz en un archivo llamado Nombre de archivo y ejecutarlo como:
'code' Filename
Si el código se ejecuta con frecuencia, se puede colocar en un archivo de script ejecutable. Esto eliminaría el encerramiento
' '
y elawk
comando se colocaría en la parte superior del archivo como:#!/bin/awk -f
fuente
It's a array!
para matrices que no son ni super ni duper, que es una cadena verdadera según nuestra definición en Meta .echo 1 2 6 | <the above code>
PHP,
144...113112 BytesExplicación:
Sin registros globales sería esto (118 bytes):
$a
(rendimiento de conversión de matriz a cadenaArray
)$p
a 1, por lo que aumentar el producto cuesta menos.fuente
$a
. No tiene que preocuparse por los avisos y demás, simplemente ignórelos en este sitio.$argv[1]
es una buena alternativa. Dicho esto, este desafío es muy vago sobre sus formatos de entrada y salida. Pero puede ser penalizado en otros desafíos con este enfoque. Y la codificación rígida de la entrada en realidad no es aceptable, aunque hay algunas excepciones que lo permiten. Sé que leer datos de entrada es muy costoso en PHP, por eso hice una pregunta similar sobre meta al respecto .register_globals
, pero en su lugar escribiré futuros campos de golf como una función. ¿Por qué oh por qué se rechazaron los cierres cortos ?R , 115 bytes
Pruébalo en línea!
Valor falso:
It's a array!
aquí no hay nada demasiado sofisticado, excepto quizás usarlosapply
en una lista de funciones.fuente
Scala, 172 bytes
Sin golf (aunque realmente no hay mucho trabajo para hacerlo):
fuente
Haskell, 136 bytes
f
Es la función requerida. Tenga en cuenta que la suma vacía es 0 y el producto vacío es 1, razón por la cual[0]
no es ni super ni duper.s
captura la estructura común de probar super o duper tomando un operador arbitrarioo
y un elemento neutral arbitrariot
. Elfoldr
rastrea tuplas(s,b)
dondes
es el resultado de encadenamiento de todos los elementos vistos con el operadoro
yb
dice si, para cada elemento analizado hasta ahora, este elemento era más grande que la suma / producto previamente calculado.¡La salida no se juega mucho al golf y agradecería que alguien contribuyera con una mejor idea!
Versión ligeramente más legible:
fuente
05AB1E ,
5351 bytesPruébelo en línea o verifique todos los casos de prueba .
Explicación:
Vea aquí para una explicación de cómo
.•dwā•
es "duper" y cómo„¦È!
es "array".fuente
Jalea , 37 bytes
Pruébalo en línea!
Programa completo
Tengo la
Z…P
idea de la respuesta (antigua) de Dennis.fuente