Encontrar el número faltante de la serie -- php camp codereview Relacionados El problema

Finding missing number from series


5
vote

problema

Español

Este código aceptará la entrada del usuario desde la línea de comandos.

El primer usuario puede ingresar el límite de la serie.

e.g: el usuario puede ingresar 5

Después de eso, el usuario se le solicitará 5 números de una serie.

e.g:

2 4 8 10 12

aquí en esta serie, falta 6, así que voy a encontrar la serie faltante de la serie de diferencia común.

obtuve la salida correcta de este código. ¿Es la forma correcta? ¿Hay algún otro código simple para hacer lo mismo?

  <?php     fscanf(STDIN, "%d ", $count);     $series = array();     $common_diff = array();     $prev_element = null;     for($i=0;$i<$count;$i++){         fscanf(STDIN, "%d ", $series[$i]);         if($prev_element != null){             $common_diff[] = $series[$i] - $prev_element;         }         $prev_element = $series[$i];     }     $c = array_count_values($common_diff);     asort($c);     end($c);     $common_d = key($c);     $prev_element = $series[0];     $missed_no = 0;     for($i=1;$i<$count;$i++){         $diff = $series[$i] - $prev_element;         if($diff != $common_d){             $missed_no = $prev_element + $common_d;         }         $prev_element = $series[$i];     }     echo $missed_no;     exit; ?>   

Entrada de ejemplo

5 2 4 8 10 12

Original en ingles

This code will accept user input from the command line.

The first user can enter the limit of series.

e.g: user may enter 5

After that, the user will be prompted for 5 numbers of a series.

e.g:

2 4 8 10 12

Here in this series, 6 is missing, so I am going to find the missing series from common difference series.

I got the correct output from this code. Is it the correct way? Is there any other simple code to do the same?

<?php     fscanf(STDIN, "%d\n", $count);     $series = array();     $common_diff = array();     $prev_element = null;     for($i=0;$i<$count;$i++){         fscanf(STDIN, "%d\n", $series[$i]);         if($prev_element != null){             $common_diff[] = $series[$i] - $prev_element;         }         $prev_element = $series[$i];     }     $c = array_count_values($common_diff);     asort($c);     end($c);     $common_d = key($c);     $prev_element = $series[0];     $missed_no = 0;     for($i=1;$i<$count;$i++){         $diff = $series[$i] - $prev_element;         if($diff != $common_d){             $missed_no = $prev_element + $common_d;         }         $prev_element = $series[$i];     }     echo $missed_no;     exit; ?> 

example input

5 2 4 8 10 12

  
 
 

Lista de respuestas

3
 
vote

Funciones

El código puede ser más legible si se rompe en funciones. Esto también separa la preocupación de la lectura en la serie y calculando los elementos faltantes.

  lock1  

El uso de funciones también ayuda a hacer que el código sea más reutilizable. La función lock2 se puede usar fácilmente para leer de entrada estándar u otra fuente.

El lock3 Se aprovecha de algunas suposiciones que se pueden hacer cuando se ordena una serie:

  • sería imposible notar si los elementos iniciadores o finales se extrañaban, por lo que ambos deben estar presentes.
  • Uno Los valores de inicio y final se conocen, entonces cada paso por este rango debe estar presente.

Luego usa la diferencia de la serie esperada calculada utilizando el PHP Rango función.

 

Functions

The code can be more readable if it is broken into functions. This also separates the concern of reading in the series and calculating the missing element(s).

function readSeries($fileHandle) {     $series = array();     fscanf($fileHandle, "%d\n", $count);      for ($i = 0; $i < $count; ++$i)     {         fscanf($fileHandle, "%d\n", $series[$i]);     }      return $series; }  function findMissing(Array $series) {     sort($series);     $start = reset($series);     $finish = end($series);     $step = ($finish - $start) / count($series);          return array_diff(range($start, $finish, $step),                       $series); }  $series = readSeries(STDIN); $missing = findMissing($series); echo reset($missing); 

The use of functions also help to make the code more reusable. The readSeries function can easily be used to read from standard input or another source.

The findMissing function takes advantage of some assumptions that can be made when a series is sorted:

  • It would be impossible to notice whether the beginning or end elements were missed, so they must both be present.
  • One the beginning and end values are known then every step along this range must be present.

It then uses the difference of the expected series calculated using the PHP range function.

 
 
1
 
vote

derecha, completaría los valores que faltan así:

  lock4  

Ahora esto está lejos de perfecto, pero es un comienzo

 

Right, I'd fill in the missing values like so:

//assume $series = array(2,4,8,10,12); $count = 5; //get step-size: $step = floor((max($series) - min($series))/$count); //then check/complete series: $complete = array($series[0]);//first element is valid for($i=1, $j=count($series);$i<$j;++$i) {     while(end($complete) + $step < $series[$i]     {//while the complete series + step, add missing value         $complete[] = end($complete) + $step;     }     $complete  = $series[$i]; } 

Now this is far from perfect, but it's a start

 
 

Relacionados problema

2  PHP - Función para manejar las solicitudes  ( Php function to handle requests ) 
Tengo la siguiente función que maneja las solicitudes. Tiene más de 130 líneas public function run() { $objectRequests = json_decode(file_get_contents(...

10  Comparando datos en 2 tablas en diferentes servidores con suma de comprobación  ( Comparing data in 2 tables on different servers with checksum ) 
Así que he tenido un problema en el que necesito comparar datos en 2 tablas diferentes en dos servidores diferentes. Ahora, sé que MySQL admite CHECKSUM TABL...

2  Formulario básico de comentarios de PHP  ( Basic php comment form ) 
Soy un novato de programación. He escrito este simple script PHP para ejecutar un formulario de comentarios muy básico y apreciaría cualquier comentario, espe...

4  Consulta para trazar un histograma de calificaciones de canciones  ( Query to plot a histogram of song ratings ) 
Escribí código para trazar una distribución de calificación, que se parece a esto: La función más importante es el stats Función: function stats($so...

41  Conexión de la base de datos en constructor y destructor  ( Database connection in constructor and destructor ) 
Estoy jugando con diferentes maneras de hacer la interacción de la base de datos en PHP, y una de las ideas con las que he estado jugando está conectando a la...

2  PHP Prueba ISSET e instantánea en un disparo. Posible en php?  ( Php test isset and instantiate in one shot possible in php ) 
¿Cómo mejorar este tipo de redundancia? 'done'8 Quiero evitar repetir $ _bet ['NID'] Ejemplo de uso útil de uso: 'done'9 ...

1  Nombre de la bahía Pirata y MAILER MAILER  ( Pirate bay name and magnet mailer ) 
Entonces, primera vez que trato PHP. Pensé que me gustaría establecer un objetivo para mí, dividirlo en problemas más pequeños y comenzar a andar en Google. A...

28  Biblioteca PHP AutoOoGer  ( Php autoloader library ) 
Básicamente, había escrito esta clase hace poco tiempo para aliviar la carga automática de nuestras bibliotecas locales. La premisa es que todo se divide po...

30  Codeigniter Active Record Subqueries  ( Codeigniter active record subqueries ) 
Yo uso CodeIgNiter en el trabajo, y uno de nuestros archivos modelo tuvo muchas subcarías en ella. Originalmente tuve que escribir manualmente cada subconsu...

-4  Demasiado anidamiento [cerrado]  ( Too much nesting ) 
cerrado. Esta pregunta es off-topic . Actualmente no está aceptando respuestas. ¿Quieres ...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos