Introducción:
Creo que todos hemos oído hablar de él, pero aquí un resumen muy breve: Noé reunió dos de cada especie de animal en el planeta, machos y hembras, para salvar en su Arca durante una gran inundación. La cita real de la Biblia es:
Génesis 7: 2-3
Debes llevar contigo siete de cada tipo de animal limpio, el macho y su compañero, dos de cada tipo de animal inmundo, el macho y su compañero, y también siete de cada tipo de ave en el cielo , macho y hembra, para preservar su descendencia sobre la faz de la tierra.
fuente
Pero por el bien de este desafío, ignoraremos la parte limpia / sucia y la parte donde tomó siete de cada animal. Este desafío es solo sobre esta parte:
dos de cada tipo de animal
inmundo, el macho y su compañero
Reto:
Entrada:
Se le da una lista de enteros positivos (en orden aleatorio).
Salida:
Dos valores distintos que indican si es una 'Lista de Noé' o no. Esto no necesariamente tiene que ser un valor verdadero / falso , por lo que también podría ser 0
/ 1
en Java / C #, o 'A'
/ 'B'
en cualquier lenguaje, para dar algunos ejemplos.
¿Cuándo es una lista una 'Lista de Noé'? Cuando hay exactamente dos de cada número entero en la lista.
Reglas de desafío:
- I / O es flexible. La entrada puede ser una lista / matriz / secuencia de enteros / flotantes / cadenas, o leer uno por uno desde STDIN. La salida puede ser dos valores distintos , devueltos desde una función o salida a STDOUT / a file.
- Los enteros en la lista de entrada están en orden aleatorio y se garantiza que son positivos dentro del rango .
- Se garantiza que la lista de entrada no estará vacía.
- Tener un entero un múltiplo de dos veces presente por encima de 2 (es decir, 4, 6, 8, etc.) será falso. Es decir,
[6,4,4,6,4,7,4,7]
es Falsey-, aunque aún se podía crear pares iguales como este:[[4,4],[4,4],[6,6],[7,7]]
.
Reglas generales:
- Este es el código de golf , por lo que la respuesta más corta en bytes gana.
No permita que los lenguajes de code-golf lo desanimen a publicar respuestas con lenguajes que no sean codegolf. Trate de encontrar una respuesta lo más breve posible para 'cualquier' lenguaje de programación. - Las reglas estándar se aplican a su respuesta con las reglas de E / S predeterminadas , por lo que puede usar STDIN / STDOUT, funciones / método con los parámetros adecuados y programas completos de tipo retorno. Tu llamada.
- Las lagunas predeterminadas están prohibidas.
- Si es posible, agregue un enlace con una prueba para su código (es decir, TIO ).
- Además, se recomienda agregar una explicación para su respuesta.
Casos de prueba:
Truthy:
[7,13,9,2,10,2,4,10,7,13,4,9]
[1,2,3,1,2,3]
[10,100,1000,1,100,10,1000,1]
[123,123]
[8,22,57189,492,22,57188,8,492,57188,57189,1,1]
Falsey:
[6,4,4,6,4,7,4,7]
[2,2,2,2,2,2]
[5,1,4,5,1,1,4]
[77,31,5,31,80,77,5,8,8]
[1,2,3,2,1]
[44,4,4]
[500,30,1]
[1,2,1,1]
[2,4,6,4,4,4]
[2,23,34,4]
[2,23,3,3,34,4]
fuente
Respuestas:
Python 3 , 31 bytes
Pruébalo en línea!
Python 2 , 33 bytes
Pruébalo en línea!
fuente
05AB1E , 4 bytes
Pruébalo en línea! o como un conjunto de pruebas
Explicación
fuente
¢2QP
, pero usarΘ
también es una buena alternativa. :){ιË
, pero por supuesto eso falla cuando los enteros ocurren 4 veces.Brachylog , 4 bytes
Pruébalo en línea!
Explicación
fuente
R , 20 bytes
-6 bytes gracias a digEmAll cambiando el método de entrada
Pruébalo en línea!
Salidas
FALSE
si es una lista de Noé, y de loTRUE
contrario. Funciona para cualquier tipo de entrada, no solo enteros.Calcula el recuento de cada valor en la lista y comprueba si alguno de los recuentos es diferente de 2.
fuente
APL (Dyalog Extended) , SBCS de 5 bytes
Pruébalo en línea!
¿Es cierto que ...
2¨
dos para cada elemento≡
es idéntico a⍧⍨
el selfie de cuenta atrás (cuenta de elementos propios en uno mismo)?
fuente
C # (compilador interactivo de Visual C #) ,
39, 32 bytesGracias a @Expired_Data
Pruébalo en línea!
fuente
Haskell , 33 bytes
Pruébalo en línea!
Para cada elemento de la entrada, nos aseguramos de que aparezca dos veces en la lista de entrada.
sum[1|b<-x,b==a]
es solo una versión más golfista delength(filter(==a)x)
.fuente
Perl 6 , 18 bytes
Pruébalo en línea!
.Bag
convierte la lista de entrada en unBag
--un conjunto con multiplicidad.{*}
extrae todas las multiplicidades..all
crea una unión y de las multiplicidades.== 2
da como resultado otra unión de booleanos, cada uno verdadero si la multiplicidad es 2.so
contrae la unión a un único booleano.fuente
J , 10 bytes
Pruébalo en línea!
fuente
[:*/2=1#.=
realmente quiero eliminar ese límite, pero no puedo entender cómo.2*/@:=1#.=
, también 10 bytes@:
es útil aquí.=
, tan extrañamente útil en escenarios de golf de nichoMS SQL Server 2017 ,
152150146 bytesLa versión legible:
Pruébalo en SQL Fiddle !
-2 bytes gracias a Kevin Cruijssen
fuente
c
puede eliminar después deCOUNT(*)
?Haskell ,
6145 bytesPruébalo en línea!
Gracias a @KevinCruijssen por 12 bytes, y @nimi por otros 4.
Primera respuesta de Haskell, pero fue sorprendentemente fácil de hacer. Puede
probablementeser golfed mucho. Caso en punto...fuente
all(True==).map(2==)
puede serloall(2==)
. :)length
aall
:all((2==).length).group.sort
. No es necesario darle un nombre a la función, es decir, soltar elf=
.all(2==)
cuando estaba probando en GHCi. Gracias Kevin y Nimi, actualizaré la respuesta.all(True==)
esand
.JavaScript (ES6), 37 bytes
Devuelve falso para Noah o verdadero para no-Noah.
Pruébalo en línea!
Comentado
fuente
APL (Dyalog Unicode) , SBCS de 8 bytes
Función de prefijo tácito anónimo. Devoluciones
0
/1
.Pruébalo en línea!
...
⌸
para cada valor como argumento izquierdo e índices de ocurrencias de ese valor como argumento derecho, llame a:≢
cuenta el argumento correcto (las ocurrencias) y∘
luego⊢
devuelve eso, ignorando el argumento izquierdo2=
Lista booleana que indica qué recuentos son 2∧/
Reducción Y (es decir, ¿son todas ciertas?)fuente
PowerShell ,
663726 bytes-11 bytes gracias a mazzy
Pruébalo en línea!
Agrupa
$l
y toma todos los recuentos de valores coincidentes. Luego filtra todos los recuentos de 2 de esta lista. Si la lista está vacía, es un número de Noé; de lo contrario, se completará con recuentos que no sean 2. Si no está en la lista, apareceráTrue
si está vacío yFalse
si está llenofuente
group
ser una cosa que existeElixir , 52 bytes
Pruébalo en línea!
Completa el novato de Elixir aquí :-D.
fuente
PHP , 60 bytes
Pruébalo en línea!
PHP tiene excelentes características para esto, aunque con 20 caracteres,
array_count_values()
no es muy golfoso.fuente
Mathematica,
2524 bytesPruébalo en línea!
La
Tally
función devuelve una lista del formulario , que luego se compara con un patrón que verifica si todos los recuentos son 2.{{element, count}, ...}
fuente
Adjunto , 16 bytes
Pruébalo en línea!
Explicación
Alternativas
17 bytes:
{All&_!`=&2@`~&_}
18 bytes:
{All[`=&2@`~&_,_]}
23 bytes:
Same@2&`'@Sum@Table[`=]
25 bytes:
Same«2'Sum@Table[`=,_]»
25 bytes:
Same<~2'Sum@Table[`=,_]~>
25 bytes:
{Same[2'Sum@Table[`=,_]]}
35 bytes:
{Commonest@_==Unique@_and _[0]~_=2}
fuente
TI-Basic, 47 bytes
Soy un gran fanático de TI-Basic. No es un gran lenguaje para ningún propósito, pero disfruto programando (y jugando golf).
¿Cómo funciona este código?
Primero, ordena la lista.
En segundo lugar, utiliza la función △ Lista para generar otra lista, que es la diferencia entre los elementos de la lista ordenada. (Por ejemplo, △ Lista ({1,3,7,8}) produciría {2,4,1}). No se aplica a esta lista, que convierte cada elemento distinto de cero de la lista a cero y cada cero a uno.
Luego, el programa verifica que la lista resultante se ajuste al patrón
{1, 0, 1, 0, ...}
, lo que solo será cierto si la lista original es una lista de Noah.También hay una comprobación adicional de que la longitud de la lista es uniforme, para detectar algunos casos extremos.
Aquí hay algunas capturas de pantalla de casos de prueba:
fuente
Julia 1.0 , 32 bytes
Pruébalo en línea!
Divide cada elemento de la matriz de entrada
l
por la transposiciónl'
dando una matriz. Sumar sobre esta matriz mientras se aplicaisone
a cada elemento da el doble de longitudl
si cada elemento aparece exactamente dos veces.fuente
K (oK) , 9 bytes
Solución:
Pruébalo en línea!
Explicación:
fuente
Julia ,
30 caracteres26 bytes¡Gracias, H.PWiz por este truco!
Pruébalo en línea!
fuente
!a=all(x->2==sum(a.==x),a)
para 26 bytes. NÓTESE BIEN. que recomiendo contar en bytes en este sitio!
para funciones anónimasJalea , 5 bytes
Pruébalo en línea!
Un enlace monádico que toma una lista de enteros y devuelve 1 si es una lista de Noah y 0 si no.
fuente
VDM-SL , 64 bytes
Explicación
VDM funciona predominantemente como declaraciones lógicas de segundo orden.
Como no puede TIO VDM, aquí está la salida de una sesión de depuración
fuente
MATL , 6 bytes
Pruébalo en línea!
0 para la verdad, 1 para la falsedad. La respuesta de Ports Robin Ryder .
MATL , 6 bytes
Pruébalo en línea!
1 para la verdad, 0 para la falsedad. La respuesta de Ports Luis Mendo .
fuente
Ruby , 29 bytes
Pruébalo en línea!
fuente
Kotlin ,
96776951 bytesPruébalo en línea!
fuente
Excel, 45 bytes
Asume datos en la columna A, con esto ingresado en cualquier celda que no sea una en la columna A. Devuelve VERDADERO si hay pares y FALSO si no son pares coincidentes
Intenté eliminar el / 2 y agregar .5 para la suma, pero esto no funcionó.
Intenté contar las frecuencias que son <> 2 y esto no devolvió la cantidad correcta.
fuente
Octava / MATLAB,
2221 bytesFunción anónima que ingresa un vector numérico y emite
0
si el vector cumple la condición o1
no.Pruébalo en línea! O verificar todos los casos de prueba .
Explicación
fuente
Bash , 26 bytes
El código de salida no es cero si la lista es de Noah.
Pruébalo en línea!
fuente