Noté que el odómetro de mi auto estaba en 101101 cuando hoy me puse a trabajar. Lo cual es un número genial porque es binario (y un palíndromo, pero eso no es importante). Ahora, quiero saber cuándo la próxima vez tendré una lectura binaria del odómetro. No puedo leer el cuentakilómetros mientras conduzco, porque eso sería peligroso, por lo que tendrá que ser binario cuando llegue al trabajo o llegue a casa.
Hay muy mal tráfico en el camino hacia y desde mi oficina, así que tengo que tomar una ruta diferente cada día.
Para los propósitos de este desafío, un día es un viaje de ida y vuelta y comienza con mi viaje al trabajo.
Tendrá que tomar la lectura inicial del odómetro y una secuencia de 10 elementos que represente la cantidad de millas en cada sentido. Esta secuencia debe repetirse hasta llegar a una lectura binaria del odómetro. Luego, debe mostrar la cantidad de días que lleva hasta que lleguemos a una lectura binaria.
Tanto el kilometraje de la ruta como la lectura del odómetro serán enteros positivos. El recuento de días será xo x.5, por lo que su salida del recuento de días debe admitir coma flotante durante medio día. Si el recuento de días es un número entero, no necesita generar el .0. El odómetro siempre alcanzará un estado binario.
Cualquier forma de entrada / salida es aceptable y las lagunas estándar no están permitidas.
Casos de prueba:
101101, [27, 27, 27, 27, 27, 27, 27, 27, 27, 27] == 165.0
1, [13, 25, 3, 4, 10, 8, 92, 3, 3, 100] == 22.5
2, [2, 3, 1, 2, 7, 6, 10, 92, 3, 7] == 2.0

Respuestas:
Jalea,
221716 bytesPruébalo en línea!
Cómo funciona
fuente
Javascript,
6863616052 bytes5 bytes de descuento gracias a @ETHproductions .
2311 !! bytes desactivados gracias @NotthatCharles .Prueba aquí.
fuente
(i+=a[++m%10])?ro enmabsoluto (deberían ser nulos, es decir, 0)m=0el inicializador e incrementando después del módulo (m++%10) ... en ese punto, puede soltarlo porrcompleto. Todo el método está en los bajos 50MATL ,
292625 bytesEl formato de entrada es
EDITAR (10 de junio de 2016): el siguiente enlace reemplaza
vpor&v( 26 bytes ) para adaptarse a los cambios en el idiomaPruébalo en línea!
fuente
Lua, 108 bytes
Primera vez que utilizo la repetición ... hasta el bucle en un codegolf!
Sin golf
Después del primer bucle,
otendré una parte decimal debido atonumberque tuve que eliminarlo ... Y para agregarlo en el primer caso, es por eso que lo concateno con a".".fuente
Java, 112
millasbytesfuente
05AB1E , 31 bytes
Código:
De alguna manera, el código no deja de ejecutarse (y no puedo entender por qué). Aparentemente olvidé que hay tres bucles en lugar de 2. Así que todavía entraría en un bucle infinito ...Pruébalo en línea!
fuente
PowerShell,
8473675957 bytesToma información
$ay$bespera$bser un conjunto explícito de kilometraje (por ejemplo,.\binary-car.ps1 1 @(13,25,3,4,10,8,92,3,3,100)). Luego ingresamos ado/untilloop. Cada iteración, incrementamos$acon el kilometraje en la$bposición$i++ % 10para que recorramos continuamente la matriz. Esto comenzará en cero ya que para el primer bucle$ino se inicializa, por lo que se evalúa en$null, lo que equivale a0en este contexto, y es solo después de esa evaluación++ocurre.Luego, el
untilenunciado verifica si nuestro número es solo0y,1al principio-replace,1no contiene nada, lo devuelve como un entero con+, y luego toma el Booleano-no con!. Si se evalúa verdadero, terminaremos el ciclo, salida$i / 2y terminaremos el programa.Explicación del bucle condicional: en PowerShell, cualquier número entero distinto de cero es
$true, y cualquier cadena no vacía también lo es$true. Por ejemplo,231145(un entero) cambiará a"2345"(una cadena) después de-replace, que se convertirá en entero como2345(un entero), el!cual es$false. Sin embargo,101101(un entero) cambiará a"00"(una cadena) que se convertirá como0(un entero), el!cual es$true. Si no tuviéramos+la"00"voluntad!que$falseya que es una cadena no vacía.Edición: guardó 11 bytes intercambiando igualdad en longitud por estrictamente cero
Edición 2: guardó otros 6 bytes al darse cuenta de que
$b.countsiempre será10...Edición 3: guardó otros 8 bytes utilizando do / hasta en lugar de
Editar 4 - Si el objeto que
-replacees d es un valor entero, no necesita comillas, guardando otros 2 bytesfuente
Rubí, 58
Nada especial. Solo un ciclo ...
fuente
->s,a,i=0{a.cycle{|e|i+=0.5;break i if/[2-9]/!~'%d'%s+=e}}[1, [13, 25, 3, 4, 10, 8, 92, 3, 3, 100]]o ...f=->s,a,i=0{a.cycle{|e|i+=0.5;break i if/[2-9]/!~'%d'%s+=e}}; f[1, [13, 25, 3, 4, 10, 8, 92, 3, 3, 100]]Mathematica, 92 bytes
Sí. La entrada es el odómetro y una lista de veces. La salida es el recuento de días.
fuente
PHP,
10298Versión sin golf
Los avisos PHP se pueden eliminar con un costo adicional de 4 caracteres
$d = 0;en la versión de golf.Ejemplo
fuente
if, quitar el 00.5y quitar|entre el 1 y el 0 en su expresión regular le ahorra 4 bytes.function f($i,$s){while(1)foreach($s as$v){$d+=.5;$i+=$v;if(preg_match('/^[01]+$/',$i))return$d;}}Pyth,
363230 bytesPruébalo aquí!
Explicación
Jvz.V0=J+J@QbI <ssM {`J2KbB; chK2 # Q = secuencia de entrada Jvz # asigna valor inicial a J .V0 # Comienza un ciclo infinito iterando sobre b comenzando en 0 = J # Establezca J en + J # la suma de J @Qb # y el valor en Q [b% len (q)] Yo # si <2 # inferior a 2 {`J # Eliminar dígitos duplicados de J ssM # Mapear los dígitos restantes de nuevo a enteros y sumarlos KbB # si lo anterior se evalúa como verdadero, guarde b en K y deje el bucle ; # Fin del cuerpo del bucle hK # Incremento K porque perdimos un incremento de bucle c 2 # y divídalo por 2 para obtener los díasfuente
C Sharp, 180.
Estimado señor C # es largo.
fuente