• Publicidad

De Java a Perl: cambiar los 1 por 0

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

De Java a Perl: cambiar los 1 por 0

Notapor toxperl » 2012-01-14 09:32 @439

Estimada comunidad, necesito su ayuda urgente para una tarea de la universidad, es vital que la realice para aprobar el ramo. El ejercicio es el siguiente:

Ya lo hice en Java... pero quería el equivalente en Perl... Por favor, si alguien me puede ayudar.

Adjunto el código en Java y también unos ejemplos de cómo es la lógica de reemplazo:

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
Example 1:
bits = "00110".
By flipping bits 3-4, we get "00000". Method returns 2.

Example 2:
bits = "10110"
If we flip bits 1-4, we get "01000". Now we flip bit 2 and get "00000".
Method returns 4 + 1 = 5.

Example 3:
bits = "1001110001"
Flipping bits 1-10 yields "0110001110"
Now, flipping bits 2-9 yields "0001110000"
Again, flipping bits 4-6 yields "0000000000"
Method returns 10 + 8 + 3 = 21.
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Solución en Código Java:
Sintáxis: [ Descargar ] [ Ocultar ]
Using java Syntax Highlighting
  1. public class BitFlipper {
  2.  
  3.     public int minFlip( String bits ) {
  4.         int flip = 0;
  5.         while ( !"".equals(bits) ) {
  6.             bits = bits.replaceAll( "^[0]*", "" );
  7.             bits = bits.replaceAll( "[0]*$", "" );
  8.             flip += bits.length();
  9.             StringBuffer sb = new StringBuffer();
  10.             for ( int i = 0; i < bits.length(); i++ ) {
  11.                 String cur = bits.substring( i, i + 1 );
  12.                 if ( "0".equals(cur) ) {
  13.                     sb.append("1");
  14.                 }
  15.                 else {
  16.                     sb.append("0");
  17.                 }
  18.             }
  19.             bits = sb.toString();
  20.         }
  21.         return flip;
  22.     }
  23. }
  24.  
  25. public static void main( String [] args ) {
  26.     BitFlipper bf = new BitFlipper();
  27.     System.out.println( bf.minFlip("00110") );
  28.     System.out.println( bf.minFlip("10110") );
  29.     System.out.println( bf.minFlip("1001110001") );
  30.     System.out.println( bf.minFlip("10001") );
  31.     System.out.println( bf.minFlip("101010101") );
  32.     System.out.println( bf.minFlip("") );
  33. }
  34.  
Coloreado en 0.014 segundos, usando GeSHi 1.0.8.4
Última edición por toxperl el 2012-01-15 17:18 @762, editado 6 veces en total
toxperl
Perlero nuevo
Perlero nuevo
 
Mensajes: 5
Registrado: 2012-01-14 09:23 @433

Publicidad

Re: De Java a Perl: cambiar los 1 por 0

Notapor explorer » 2012-01-14 10:33 @481

Bienvenido a los foros de Perl en español, toxperl.

Este problema es tan sencillo de resolver para Perl, que ni siquiera es necesario escribir un programa.

Se puede resolver en una sola línea, desde la misma línea de órdenes:

Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
  1. explorer@casa:~/> perl -le '$_=shift; $t=0; while (/1/) {$t += substr($_, $y = index($_,1), rindex($_,1) - $y + 1) =~ tr/01/10/ }; print $t' 1001110001
  2. 21
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4

Lo que hacemos es un bucle sin fin mientras exista algún '1' en la cadena que pasamos como argumento. Luego buscamos por esos '1' por el principio de la cadena con index(), y por el final con rindex(). Extraemos la subcadena con substr() y se la pasamos a tr///, que es el que hace la transliteración de 0 a 1 y viceversa, devolviendo además el número de veces que lo hace, número que agregamos al contador $t, valor que sacamos al final como resultado del proceso.

Vamos, exactamente lo mismo que lo que hace el código en Java que has publicado... pero con menos líneas :)
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: De Java a Perl: cambiar los 1 por 0

Notapor toxperl » 2012-01-14 10:39 @485

Muchas gracias por tu respuesta..
Última edición por toxperl el 2012-01-15 17:12 @758, editado 1 vez en total
toxperl
Perlero nuevo
Perlero nuevo
 
Mensajes: 5
Registrado: 2012-01-14 09:23 @433

Re: De Java a Perl: cambiar los 1 por 0

Notapor explorer » 2012-01-14 11:04 @503

¿Pero qué clase de Universidad es esa que te hace preguntas de programación sino eres programador?

Se supone que para resolver estos problemas, debes haber recibido unas clases de programación.

Así aprendimos todos.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: De Java a Perl: cambiar los 1 por 0

Notapor toxperl » 2012-01-14 11:08 @505

Una no muy buena parece :( Lo mismo decimos nosotros y reclamamos, el asunto es que tengo que hacer este ejercicio en dos lenguajes, Java y Perl, y en Perl se me pedía crear una función que obtenga el valor de cambios de 1 por 0 y viceversa... :(
toxperl
Perlero nuevo
Perlero nuevo
 
Mensajes: 5
Registrado: 2012-01-14 09:23 @433

Re: Ayuda con el while

Notapor creating021 » 2012-01-14 15:47 @699

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. while ($bits =~ /1/){...}
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Te recomiendo leer este tutorial.
Expect the worst, is it the least you can do?
Avatar de Usuario
creating021
Perlero frecuente
Perlero frecuente
 
Mensajes: 595
Registrado: 2006-02-23 16:17 @720
Ubicación: Frente al monitor


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados