En inglés, los sustantivos pueden tomar dos formas diferentes dependiendo de si son singulares (uno) o plurales (cualquier otra cosa). Por ejemplo, diríamos "1 perro" pero "2 perros", "0 perros", "57 perros", etc.
En ruso, hay tres categorías. En lugar de "1 perro, 2 perros, 5 perros", en ruso sería "1 собака, 2 собаки, 5 собак".
Las categorías se dividen según la siguiente lógica:
- "Singular": se usa para 1 y cualquier número que termine en 1, excepto los números que terminan en 11.
- Ejemplos: 1 собака, 21 собака, 101 собака
- "Pocos": se usa para 2, 3 y 4, y cualquier número que termine en 2, 3 o 4, excepto los números que terminan en 12, 13 y 14.
- Ejemplos: 2 собаки, 3 собаки, 4 собаки, 32 собаки, 43 собаки, 104 собаки
- "Muchos": cualquier cosa que no se considere "Singular" o "Pocos".
- Ejemplos: 0 собак, 5 собак, 11 собак, 13 собак, 25 собак, 111 собак, 114 собак
El reto
Dada una entrada entera en el rango [0, 1000], devuelve 1
si pertenece a la categoría "singular", 2
si pertenece a la categoría "pocos" y 5
si pertenece a la categoría "muchos".
Su programa puede ser una función o puede usar STDIN. Puede imprimir en STDOUT o devolver un valor de la función
Este es un desafío de código de golf , por lo que gana la solución con el menor número de bytes.
fuente
1
,2
y5
en particular? Además, ¿por qué no puedo usar códigos de salida?Respuestas:
Python 2 , 36 bytes
Pruébalo en línea!
Misma longitud aritméticamente:
Primero veamos un código más simple que no tiene en cuenta a los adolescentes.
Aquí, queremos un mapeo del dígito de uno a una salida que funcione como
Pero, en lugar de tomar el
n
módulo 10 (%10
), podemos hacern%-10
, que se asigna a los intervalos[-9..0]
para dar restos:Esto es prometedor porque las dos primeras entradas
0
y-9
están muy separadas, y deben enviarse a diferentes salidas. Además,-10
se puede acortar a~9
.A partir de aquí, dividir el piso por
/-3
trozos de 3 con el punto de partida correctoPara obtener el resultado deseado, ahora solo necesitamos asignar
0->5, 1->5, 2->2, 1->1
, lo que hacemos con la selección de cadena'5521'[_]
.Ahora, también necesitamos números que terminen en 11 a 15 para dar siempre
5
. Primero hacemos esto detectando si entonces diez dígitos es1
. Tomandon/10
para eliminar el último dígito, luego aplicamos%~9
como antes para obtener los resultadospara los respectivos dígitos finales. El dígito de 1 que queremos detectar se asigna al valor extremo
-9
. Al dividir el piso se-9
convierte en 1 y todo lo demás en 0.Finalmente, hacemos que este indicador
1
siempre dé la salida 5. Esto se hace cambiando ligeramente el resultado de lan%~9/-3
derecha por el indicador. El resultado de0,1,2,3
los cambios de bits siempre a la derecha a 0 o 1, lo que da una salida de 5 como se desee.fuente
Python 2 , 45 bytes
Pruébalo en línea!
fuente
(s+'5'*10+s*9)
110 caracteres?Perl 5 , 26 bytes
25 bytes de código +
-p
bandera.Pruébalo en línea!
Para un byte más, hay
$_=/(?<!1)[1-4]$/?2-/1$/:5
.Explicaciones: (en la versión de 27 bytes; el 26 es bastante simétrico)
Tanto "singular" como "pocos" terminan con "no un 1 seguido de un dígito de 1 a 4" (probado con
(?<!1)[1-4]$/
). En esos casos, el resultado es 2, menos 1 si el número termina con 1 (2-/1$/
). De lo contrario, el resultado es 5.fuente
JavaScript (ES6),
5349484039383736 bytesIntentalo
fuente
1[1-4]
puede ser1.
y/1$/.test(s)
podría ser+s%10==1
. Nunca olvides unario+
!+
en absoluto,s%10
debería convertirlos
en un número.n%10
->n%5
guarda un byteJalea ,
1918 bytesUn enlace monádico que toma y devuelve enteros no negativos.
Pruébalo en línea! o vea los tres grupos de 0 a 1000 inclusive en este conjunto de pruebas .
¿Cómo?
fuente
05AB1E ,
3819 bytesUtiliza el truco del índice de la respuesta de Python de Rod
Pruébalo en línea!
Explicación
fuente
PHP> = 7.1, 44 bytes
Versión en línea
fuente
<?=$argn[-2]!=1&($m=($argn+9)%10)<4?2-!$m:5;
.Conjunto MCxxxx , 123 bytes
Nota:
TiO no admite este lenguaje, que se usa en el juego Zachtronics Shenzhen I / O , por lo que no hay un enlace para probar esto.
Explicación:
Esta es una función que toma entrada a través del puerto XBus x0 y sale a través del puerto x1. Es demasiado largo para ejecutarse en un MC4000, pero encaja perfectamente en la memoria de un MC6000. Los puertos XBus, para aquellos que no están familiarizados, permiten la transmisión de paquetes discretos de datos digitales.
Una pieza de información que puede ser útil para leer esto: en el ensamblaje MCxxxx, las instrucciones de prueba establecen una bandera que indica qué rama se debe tomar. Las líneas que comienzan
+
solo se ejecutan si la prueba más reciente devuelve verdadero, y las líneas que comienzan-
solo se ejecutan si la prueba fue falsa.Linea por linea:
Una nota sobre la puntuación: el ensamblaje MCxxxx no tiene funciones per se, pero es lo más parecido a una función que pueda obtener: es un programa que cabe en un solo nodo de ejecución, toma la entrada a través de un puerto y las salidas a través de otro. Como resultado, he calificado esto como una función (es decir, sin contar los bytes necesarios para crear un archivo de emulador MCxxxx válido).
fuente
Retina ,
2521 bytesPruébalo en línea! -4 bytes gracias a Neil.
fuente
!`.$
para extraer el último dígito. Pruébalo en línea!Haskell ,
6258 bytesPruébalo en línea!
Explicación
Esto construye la siguiente cadena:
5122255555555555555551222555555122255555512225555551222555555122255555512225555551222555555122255555 ...
Cuál es una tabla donde la celda
n
contiene la respuesta para elnth
número. La tabla solo es correcta para los primeros 100 elementos, de ahí elmod
.fuente
f n|s<-"5122255555"=(s++('5'<$[0..9])++cycle s)!!mod n 100
Scala, 110 bytes
fuente
Turtlèd, 35 bytes
Pruébalo en línea!
Esta función requiere que la entrada comience con un>, lo que supongo que está bien porque python2 usa la entrada semi regularmente, y eso necesita comillas.
Explicación:
fuente
>
algún propósito en Turtled o es un personaje arbitrario que has agregado a la entrada?