Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 
Índice general » Mundo Perl » Básico » De Java a Perl: cambiar los 1 por 0 Este tema está cerrado, no puede editar mensajes o enviar nuevas respuestas
Nuevo tema


Página 1 de 1  [ 6 mensajes ] 
 
Nota 2012-01-14 09:32 @439

Perlero Nuevo
Registrado: 2012-01-14 09:23 @433
Mensajes: 5
De Java a Perl: cambiar los 1 por 0
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:

Syntax: [ Download ] [ Hide ]
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.


Solución en Código Java:
Syntax: [ Download ] [ Hide ]
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.  


Última edición por toxperl el 2012-01-15 17:18 @762, editado 6 veces en total

Nota 2012-01-14 10:33 @481
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10249
Re: De Java a Perl: cambiar los 1 por 0
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:

Syntax: [ Download ] [ Hide ]
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

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


Nota 2012-01-14 10:39 @485

Perlero Nuevo
Registrado: 2012-01-14 09:23 @433
Mensajes: 5
Re: De Java a Perl: cambiar los 1 por 0
Muchas gracias por tu respuesta..


Última edición por toxperl el 2012-01-15 17:12 @758, editado 1 vez en total

Nota 2012-01-14 11:04 @503
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10249
Re: De Java a Perl: cambiar los 1 por 0
¿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


Nota 2012-01-14 11:08 @505

Perlero Nuevo
Registrado: 2012-01-14 09:23 @433
Mensajes: 5
Re: De Java a Perl: cambiar los 1 por 0
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... :(


Nota 2012-01-14 15:47 @699
Avatar de Usuario
Vive para Perl en Español
Registrado: 2006-02-23 16:17 @720
Ubicación: Frente al monitor
Mensajes: 592
Re: Ayuda con el while
Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
  1. while ($bits =~ /1/){...}


Te recomiendo leer este tutorial.

_________________
Expect the worst, is it the least you can do?


Este tema está cerrado, no puede editar mensajes o enviar nuevas respuestas  [ 6 mensajes ] 

Reglas del Foro
No puedes abrir nuevos temas en este Foro
No puedes responder a temas en este Foro
No puedes editar tus mensajes en este Foro
No puedes borrar tus mensajes en este Foro
No puedes enviar adjuntos en este Foro

Publicidad

Socializa

Síguenos por Twitter

Suscríbete GRATUITAMENTE al Boletín de Perl en Español

Saltar a:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Traducción al español por Huan Manwë para phpbb-es.com
phpBB SEO