Introducción:
Un BSN holandés (BurgerServiceNummer) es válido cuando cumple con las siguientes reglas:
- Solo contiene dígitos.
- La longitud debe ser de 8 o 9 de longitud.
- Cuando los dígitos se indexan como a
A
travésI
, el resultado de la siguiente suma:9xA + 8xB + 7xC + 6xD + 5xE + 4xF + 3xG + 2xH + -1xI
(¡NOTA el -1 en lugar de 1!) Debe ser divisible por 11, y no debe ser 0.
Reto:
Entrada: una cadena o matriz de caracteres que representa el BSN.
Salida: Un resultado verdadero o falso si la entrada es un BSN válido.
Reglas de desafío:
- El formato de entrada debe ser una cadena o una matriz de caracteres. No está permitido utilizar una matriz de dígitos int o un número (posiblemente octal). (Sin embargo, usted mismo puede convertirlo en una matriz de dígitos int, pero no directamente como argumento).
- A pesar de la restricción en la entrada anterior, puede asumir que todos los casos de prueba contendrán uno o más dígitos (
[0-9]+
) - Con respecto al BSN con longitud 8 en lugar de 9, la Wikipedia holandesa establece lo siguiente: " Para las once pruebas y para otros usos prácticos, se agrega un cero inicial para hacer el número de longitud 9. " ( fuente )
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. - Se aplican reglas estándar para su respuesta, por lo que puede usar STDIN / STDOUT, funciones / método con los parámetros adecuados, programas completos. Tu llamada.
- Las lagunas predeterminadas están prohibidas.
- Si es posible, agregue un enlace con una prueba para su código.
- Además, agregue una explicación si es necesario.
Casos de prueba:
// Truthy test cases:
111222333
123456782
232262536
010464554
10464554
44016773
// Falsey test cases:
000000000
192837465
247594057
88888888
73
3112223342
000000012
code-golf
string
arithmetic
decision-problem
Kevin Cruijssen
fuente
fuente
A
de la fórmula dada?A
de la fórmula (o básicamente agrega una guía0
para que sea de longitud 9, lo que resulta en el mismo resultado que omitirA
).Respuestas:
05AB1E ,
2321 bytesPruébalo en línea! o como un conjunto de pruebas
Explicación
fuente
DgL
aā
y0Ê
paraĀ
. Pruébalo en línea.JavaScript (ES6) 57
Entrada como un conjunto de caracteres.
reduceRight
¡salvar el dia!Prueba
fuente
reduceRight
respuesta!map()
, solo para darme cuenta de que su respuesta es en realidad de 57 bytes de longitud :-)R,
8667 bytesEditar: ¡Gracias a Jarko Dubbeldam por sugerir el producto dot!
Lee la entrada de stdin y la almacena como una matriz / vector de caracteres. Posteriormente convierta a numérico, multiplique con el vector
9...2,-1
y verifique todas las condiciones.fuente
x
como vector.if(l<9)x=c(0,x);s=sum(as.double(x)*c(9:2,-1))
se puede convertir ens=sum(as.double(x)*c(l:2,-1))
. Además, la suma del producto por pares de dos vectores es igual a su multiplicación de puntos%*%
.JavaScript (ES6),
61605958 bytesToma una matriz de caracteres como entrada. Devoluciones
false
/true
.Casos de prueba
Mostrar fragmento de código
fuente
C,
1121019698104 bytes¡Gracias a @MartinEnder por guardar
53 bytesmientras arreglaba mi código!Devuelve 0 si no es válido, 1 si es válido. Pruébalo en línea!
fuente
61
aunque no tenga la longitud correcta.R,
957993 bytesFunción sin nombre que toma una cadena como argumento. Al principio, sobrepasé el requisito de tener una cadena como entrada en lugar de un número, pero eso es bueno, porque ahorra algunos bytes en la conversión.
No estoy seguro de cómo interpretar la matriz de caracteres, pero si eso significa que puede usar un vector de dígitos de cadena
"1" "2" "3" "4" etc
como entrada, se vuelve un poco más corto incluso:Divide x en un vector numérico, luego agrega un 0 si la longitud es 8, luego calcula el producto de punto del vector y y
c(9,8,7,6,5,4,3,2,-1)
. Comprueba si el resultado es distinto de cero y divisible por 11.Ahorró 16 bytes gracias a la lógica de @Enigma, agregando implícitamente el 0 en la creación del vector
c(length(x):2,-1)
.Olvidé agregar un cheque para la longitud 8/9, entonces +14 bytes :(
fuente
Perl, 58 bytes (52 + 6)
Corre con
Entrada transmitida a través de
STDIN
:Uso
Salidas
1
para el valor de verdad,0
o nada para los valores de falsey.fuente
$r+=$_*(-1,2..9)[$i++]for reverse@F
. Además,-F -pe
(y la entrada suministrada sin una nueva línea final,echo -n
por ejemplo) es suficiente (a menos que su Perl sea demasiado viejo, en cuyo caso necesitará-a
(pero en Perls recientes, está implícito-F
). Finalmente, su código tenía 70 bytes de longitud , no 52;)C ++ 14,
107106bytes-1 byte for en
int
lugar deauto
in for loop.Como lambda sin nombre que regresa a través del parámetro de referencia. Requiere entrada para ser
std::string
o un contenedor de char, comovector<char>
.Sin golf y uso:
fuente
Befunge, 72 bytes
Pruébalo en línea!
Explicación
fuente
MATL, 36 bytes
No es el programa MATL más largo que he escrito , pero me gusta cómo las declaraciones
if
/else
se alargan muy rápidamente en los idiomas de golf. Siento que esta solución puede no ser óptima en MATL, pero hasta ahora no puedo optimizarla más. Estoy pensando en usar el doble 0 en algún lugar, y tal vez reducir elt
's en todas partes.Pruébalo en línea! Explicación:
fuente
!U
lugar de48-
[a2:9]*
da como resultado una multiplicación no basada en elementos, por!
lo que se necesitaría otra que compensara la ganancia inicial.MATL , 26 bytes
El resultado es un vector de columna no vacío, lo cual es cierto si todas sus entradas son distintas de cero .
Pruébalo en línea!
O verifique todos los casos de prueba con cada resultado en una línea diferente.
Explicación
Esto prueba las tres condiciones en el siguiente orden:
Considere la entrada
'8925'
para la explicación.;
es el separador de fila para matrices.fuente
?
él probablemente sería más eficiente, pero no pude encontrar la forma de acortar la longitud 8 o 9. TuGn8-tg=
es muy inteligente.!
?G
empuja un vector de columna y necesito transponerlo para hacer la repetición cong*
Haskell,
116112102 bytesg
cuenta la suma utilizada en el once-proef deh
, mientras quef
también comprueba la longitud correcta y que el once-proef no es 0. Especialmente las comprobaciones def
tomar muchos bytes.EDITAR: ahorró 10 bytes gracias a Lynn y
div
redondeando hacia abajo.fuente
f x=div(length x)2==4&&g x>0&&h x
?Jalea , 21 bytes
TryItOnline! o ejecutar todos los casos de prueba
Los valores de retorno de verdad son distintos de cero (y, de hecho, son el múltiplo de 11 sum).
¿Cómo?
fuente
Python 2, 102 bytes
fuente
Python 2, 96 bytes
Toma una cadena como entrada. La función agrega un
'0'
al frente de la cadena, ya sea que lo necesite o no, y utiliza los índices negativos de Python para agregar elementos, comenzando desde el final de la cadena y trabajando de atrás hacia adelante.El
-1xI
se maneja por separado, utilizando una segunda llamada aint()
. No pude descubrir cómo evitar esto sin costar más bytes de los que guardé.def g(s):u=7<len(s)<10and sum(x*int(('0'+s)[-x])for x in range(10))-2*int(s[-1]);print(u%11<1)*u
funcionaría igual de bien, ya que agregaría1
tiemposs[-1]
pero luego los restaría dos veces, y también agregaría0
tiempos (algo) que, por supuesto, no afectaría la suma.fuente
Brain-Flak , 345 Bytes
Incluye +3 para
-a
La verdad es 1, Falsy tiene un 0 en la parte superior de la pila.
Pruébalo en línea!
Estoy bastante seguro de que hay una forma más corta de hacer la multiplicación en un bucle, pero aún no la he encontrado.
fuente
PowerShell v2 +, 96 bytes
Bien, lo admito, esto parece un completo desastre. Y es un poco. Pero, tengan paciencia conmigo y lo superaremos.
Tomamos entrada
$n
(como unachar
matriz) y establecemos$i
igual a8
menos un valor booleano para ver si hay 8 elementos$n
. Es decir, si hay 8 elementos, entonces$i
sería7
.La siguiente sección combina el cálculo con nuestra salida. Trabajando desde el interior, el ciclo que recorre
$n
con$n|%{...}
. En cada iteración, utilizamos un pseudoternario para obtener uno de los dos resultados, ya sea-"$_"
o(($i+1)*+"$_")
. El índice se basa en si$i
es0
o no (es decir, hemos tocado el-1xI
caso de la ecuación de desafío), que se reduce posteriormente para la próxima ronda. Todos están reunidos en parejas y editados-join
junto con+
. Por ejemplo, con la entrada111222333
en este punto tendríamos9+8+7+12+10+8+9+6+-3
. Eso se canaliza aiex
(abreviaturaInvoke-Expression
y similar aeval
) antes de almacenarse en$b
. Luego tomamos eso%11
y realizamos un booleano-no!(...)
en eso (es decir, si es divisible por 11, esta porción es$true
). Eso se combina con-and$b
para garantizar que$b
no sea cero. Ese resultado booleano se deja en la tubería y la salida es implícita.Ejemplos
fuente
PHP
139128 bytesNo se pudo hacer que la CLI solo hiciera eco de lo verdadero de lo falso. Tenía que hacerlo hacerlo de esta manera. ¿Algunas ideas?
128 bytes: convertido "verdadero" y "falso" en 1 y 0.
fuente
C #,
120115 bytesEsto recorre el
char[]
que recibe como entrada y devuelve verdadero o falso:Violín: https://dotnetfiddle.net/3Kaxrt
Estoy seguro de que puedo eliminar algunos bytes, especialmente en los desordenados
return
. Cualquier idea bienvenida!Editar: Guardado 5 bytes gracias a Kevin. ¡No tenía idea de que podría usar en
&
lugar de&&
!fuente
r>0&&r%11==0&&l<10&&l>7
se puede jugar golf ar>0&r%11<1&l<10&l>7
(&&
to&
yr%11==0
tor%11<1
). Y-'0'
se puede jugar al golf-48
.PHP,
868584838279 bytesNota: usa PHP 7.1 para índices de cadena negativos.
Corre así:
Versión para PHP <7.1 (+10 bytes)
Explicación
Ajustes
"0"
, guardado un byte10000000
no es válido, no hay necesidad de comparar congreater than or equals
,greater than
basta, guardar un byte-R
para poner a$argn
disposiciónfuente
Java 8,
11598 bytesMe sorprende que nadie haya publicado una respuesta Java todavía, así que aquí hay una.
Explicación:
Pruébalo aquí.
fuente
Clojure, 114 bytes
Bueno, esto es algo,
-
resta el resto de los argumentos del primero para que maneje el caso especial de peso-1
. Esta función devuelvenil
entradas de longitud no válida, pero enif
cláusulas funcionan igual quefalse
.(#{8 9}(count v))
devuelvenil
si la longitud dev
no es 8 o 9.Casos de prueba:
fuente
Perl 5 , 63 + 2 (
-F
) = 65 bytesPruébalo en línea!
fuente
Stax , 23 bytes
¡Ejecute y depure en línea!
Explicación
Utiliza la versión desempaquetada para explicar.
fuente