A veces, cuando estoy realmente aburrido, me gusta tomar la suma de una serie de enteros no negativos. Solo tomo la suma de matrices de longitudes que son potencias de dos. Lamentablemente, a menudo cometo errores. Afortunadamente, sigo mi trabajo a medida que avanzo de la siguiente manera:
Agrego pares de números adyacentes hasta que solo quede uno. Por ejemplo:
6 + 18 + 9 + 6 + 6 + 3 + 8 + 10
= 24 + 15 + 9 + 18
= 39 + 27
= 66
Tu trabajo es determinar si he cometido un error en alguna parte. Puede pasar la entrada a su función o leerla desde la entrada estándar. La salida se puede imprimir o devolver.
Entrada: una matriz / lista / etc. de enteros no negativos, y posiblemente también la longitud de esa matriz si su idioma lo requiere. Esa matriz será todos los números leídos de izquierda a derecha y luego de arriba a abajo. Por ejemplo, la matriz anterior se convertiría en:
[[6, 18, 9, 6, 6, 3, 8, 10], [24, 15, 9, 18], [39, 27], [66]]
o
[6, 18, 9, 6, 6, 3, 8, 10, 24, 15, 9, 18, 39, 27, 66]
si lo prefiere.
Salida: un booleano único que representa si se cometió o no un error. El booleano se puede representar usando cualquier mapeo siempre que todas las entradas donde se comete un error devuelvan / impriman un resultado idéntico y todas las entradas que no contengan errores devuelvan / impriman un resultado idéntico. Esto debería ser evidente, pero esas dos salidas no pueden ser iguales.
Algunos ejemplos de suma correctas:
6
5+6
=11
3 + 2 + 4 + 5
= 5 + 9
= 14
[0, 1, 2, 3, 1, 5, 6]
[[1, 2, 4, 8], [3, 12], [15]]
Algunos ejemplos de suma incorrecta:
5+4
=8
4 + 4 + 4 + 4
= 9 + 7
= 16
[[1, 2, 3, 4], [7, 3], [10]]
[3, 4, 5, 6, 7, 8, 9]
Tenga en cuenta que puedo cometer errores y aún así obtener la respuesta correcta. Si cometo un error, nunca dará como resultado un número adicional o un número faltante en la matriz final, solo un número incorrecto.
Las lagunas estándar están prohibidas. La respuesta más corta en cada idioma es un ganador. La respuesta anterior ganará en caso de empate. Me reservo el derecho de decidir cuál es el "mismo idioma", pero diré por adelantado que no se puede ganar un punto tanto en Python 2 como en Python 3.
[0,1,2,3,1,5,6]
no es válido porque "Entrada: una matriz / lista / etc. de enteros positivos".Respuestas:
Jalea , 6 bytes
Pruébalo en línea!
Cómo funciona
fuente
Python 2 , 51 bytes
Pruébalo en línea! Gracias a Rod por los casos de prueba.
Toma toda la lista plana como entrada. Agrupa elementos en pares adyacentes utilizando el truco zip / iter , toma la suma de los pares y comprueba si el resultado es igual a la segunda mitad de la lista.
Un método recursivo se acercó a los 55 bytes:
Esto usó que los enteros de entrada son positivos, lo que desde entonces ha cambiado en la especificación.
fuente
[0,0,1,1,1,1,1]
.Röda , 40 bytes
Pruébalo en línea!
Es una función anónima que regresa
0
si no hay errores y nada si hay errores.Explicación:
Aquí hay una versión más corta (35 bytes) pero en contra de las reglas (creo):
Pruébalo en línea!
Es una función anónima que lee valores de la secuencia y empuja
TRUE
oFALSE
para cada línea correcta.No estoy seguro de si esto (múltiples valores de retorno) se acepta en las reglas. Aquí está mi defensa: en Röda, las condiciones
if
y loswhile
bloques no son valores booleanos, sino flujos. Un flujo "verdadero" está vacío o contiene soloTRUE
s, y un flujo "falso" contiene uno o másFALSE
s. De esta manera, esta función devuelve un valor "booleano". Y se puede usar como condición de unaif
declaración sin ninguna operación de reducción, etc.fuente
0
. No estoy seguro exactamente cómo Röda maneja eso, pero no es inaudito.if
condicional. Si así es como funciona Röda, cumple con nuestras reglas, a menos que la especificación de desafío anule explícitamente los valores predeterminados.Python 2 ,
6965 bytesPruébalo en línea!
Devoluciones:
Lista vacía como
Falsy
suma total como
Truthy
fuente
Mathematica, 36 bytes
Función pura que toma una lista anidada como entrada y regresa
True
oFalse
. La funciónTr/@#~Partition~2&
toma las sumas por pares de una lista, que luego se aplica (/@#
) a cada sublista de la lista de entrada. Se supone que la primera, segunda, ... sublistas en la lista resultante son iguales a la segunda, tercera, ... sublistas en la entrada original;Most[...]==Rest@#
pruebas para esta propiedad.fuente
Python 2 , 80 bytes
Pruébalo en línea!
No es tan bueno como la otra respuesta de Python, pero tuve ganas de publicarlo de todos modos. Esto solo muestra por qué no soy tan bueno jugando al golf en idiomas regulares .
fuente
JavaScript (ES6), 54 bytes
Toma una matriz aplanada.
fuente
05AB1E ,
1512 bytesPruébalo en línea!
Explicación
fuente
Haskell ,
827965 bytes-14 bytes gracias a nimi!
Funciona comparando la suma de cada par de elementos con el elemento correspondiente en la siguiente línea hacia abajo. Probablemente se puedan jugar algunos bytes
f
, pero no puedo entender dónde.fuente
p
:p(x:y:z)=x+y:p z
y luego usarzipWith(==)
en lugar dezip
y combinar la lista deBool
conand
:f x=and.zipWith(==)(drop(length x`div`2+1)x)$p x
.Python 3 ,
6968 bytesSé que ya hay otras dos respuestas de Python ... pero esta está en Python 3, por lo que es exótica.
Esto funciona en una entrada aplanada.
Salida :
False
si no hay errorTrue
Si hay un error.fuente
Ruby, 50 bytes.
Al invertir la matriz, cualquier elemento de la primera mitad (posición n) debe ser la suma de los elementos en la posición n * 2 yn * 2 + 1.
fuente
Brachylog ,
1613 bytesPruébalo en línea!
¡Esto es terriblemente largo! Tiene que haber alguna forma de no anidar predicados en línea aquí.
El predicado tiene éxito (imprimiendo
true.
como un programa) si no se cometieron errores y falla (imprimiendofalse.
como un programa) de lo contrario.fuente
Python 2 , 64 bytes
Pruébalo en línea!
Una función sin nombre que toma una lista de listas (una por línea de trabajo, por así decirlo), y devuelve True si no se cometieron errores y False de lo contrario.
Funciona mediante el uso de la entrada sin la última entrada,
a[:-1]
para formar lo que debe ser la entrada sin la primera entrada y comprobar que es lo que era de entrada,==a[1:]
.Esta formación se logra mediante el mapeo de la función de suma del tipo entero
int.__add__
, sobre los pares de números producidos por dos "sectores", un segmento es cada otro elemento que comienza en el índice 0,x[::2]
y el otro segmento es cada otro elemento que comienza en el primer índice,x[1::2]
.fuente
Pip ,
2019 bytesEsta es una función anónima que toma un argumento, una lista de listas (por ejemplo
[[1 2 3 4] [3 7] [10]]
). Verifique todos los casos de prueba: ¡ Pruébelo en línea!Explicación
En una función Pip, los dos primeros argumentos se asignan a
a
yb
.Por ejemplo:
fuente
PHP,
9695 bytes:usando builtins:
funciones recursivas retorno
true
ofalse
.Desglose para la primera función:
soluciones anteriores (96 bytes cada una) usando bucles:
Desglose para la última función:
fragmentos iterativos, 81 bytes
asumir matriz predefinida en
$a
; sale con error si es incorrecto.fuente
C, 54 bytes:
Sin golf:
Prueba con
Como puede ver,
f()
devuelve verdadero para entradas no válidas y falso (= 0) para las válidas.Como siempre, la recursión es menos bytes que la iteración, por lo que
f()
es recursiva, a pesar de que toma dos iteradores como argumentos. Funciona comparando repetidamente la suma de dos enteros ens
un entero ene
, ignorando los límites de nivel y continuando hasta que los dos iteradores se encuentran. También he usado algo de zen booleano junto con el hecho de que cualquier valor entero distinto de cero se considera verdadero en C para acortar aún más el código.fuente
R,
9277 bytesFunción anónima que toma una secuencia plana de números como entrada. Devoluciones
TRUE
oFALSE
según corresponda. Utiliza el mismo enfoque conceptual que la respuesta python de xnor.Solución anterior, usando la
rollapply
función delzoo
paquete y tomando la entrada como una lista, por ejemplolist(c(6, 18, 9, 6, 6, 3, 8, 10), c(24, 15, 9, 18), c(39, 27), c(66))
:fuente
JavaScript (ES6),
4644 bytesToma la entrada como una matriz aplanada. Devoluciones
NaN
válidas o0
inválidas.Prueba
Mostrar fragmento de código
fuente
PHP, 102 bytes
el parámetro input als url en este formato
?0=[1,2,3]&1=[3,3]&2=[6]
usa esta entrada[[int,int],[int]]
Descompostura
fuente
Japt, 10 bytes
Toma la entrada como una matriz 2-D.
Intentalo
fuente