• Publicidad

Juntar letras

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

Juntar letras

Notapor BigBear » 2012-09-29 19:53 @870

Tengo el siguiente código:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $a = "
  2.      11      
  3.      11      
  4.    11  11    
  5.    11  11    
  6.  00      00  
  7.  00      00  
  8.  0000000000  
  9. 00          00
  10. 00          00
  11.  
  12. ";
  13.  
  14. my $b = "
  15.  11111111  
  16.  11      11
  17.  11      11
  18.  11      11
  19.  00000000  
  20.  00      00
  21.  00      00
  22.  00      00
  23.  00000000  
  24.  
  25. ";
  26.  
  27. my $c = "
  28.    11111111  
  29.  11        11
  30.  11          
  31.  11          
  32.  00          
  33.  00          
  34.  00          
  35.  00        00
  36.    00000000  
  37.  
  38. ";
  39.  
  40.  
  41. chomp $a;
  42. chomp $b;
  43. chomp $c;
  44.  
  45. print $a.$b.$c;
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Mi plan es que se junten una al lado de la otra al estilo "a b c" pero no sé cómo se puede hacer eso. ¿Alguien me podría decir cómo sería posible?
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Publicidad

Re: Juntar letras

Notapor reLlene » 2012-10-01 10:41 @487

Este te va a rular...
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl -w
  2.  
  3.  use feature 'say';
  4.     my $a = "
  5.         11              11111111       111111111
  6.         11             11      11     11       11
  7.       11  11           11      11     11          
  8.       11  11           11      11     00
  9.     00      00          00000000      00
  10.     00      00         00      00     00
  11.     0000000000         00      00     00
  12.    00         00       00      00     00       00
  13.    00         00        00000000        0000000
  14.    ";
  15.  
  16. say $a;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Ahora, si los quieres tratar independientemente, no se me ocurre cómo conseguirlo porque no dejan de tratarse de strings; por ende por más que le quites la nueva línea con chomp, ¡¡¡la próxima variable se imprimirá seguidamente de la última!!! :?
Sexo : unzip ; strip ; touch ; grep ; finger ;mount ; fsck ; more ; yes ; umount ; sleep.
Avatar de Usuario
reLlene
Perlero nuevo
Perlero nuevo
 
Mensajes: 97
Registrado: 2012-06-04 07:16 @344

Re: Juntar letras

Notapor explorer » 2012-10-01 11:16 @511

Pero si el problema es sencillo... solo hay que pensar un poco... (por eso no he respondido).
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Juntar letras

Notapor MARKO » 2012-10-01 12:13 @550

Cada letra está formada por líneas, lo que se me ocurre es que concatenes todas las líneas de cada letra respectivamente (todas las primeras, todas las segundas, todas las terceras.......) en un vector y luego imprimas ese vector.

Para eso después de los chomp que escribiste, escribes lo siguiente.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.  
  2. my @arreglo=($a,$b,$c);
  3. my @impresion;
  4.  
  5. foreach(@arreglo){                         #recorres cada una de las letras
  6.         my @renglones = split('\\n', $_);  #en @renglones se meten cada una de las líneas que forman la letra en cuestión
  7.         for my $numlinea (0..9){                #primeras con primeras, segundas con segundas.......            
  8.                 $impresion[$numlinea]=$impresion[$numlinea]."   ".$renglones[$numlinea];
  9.         }
  10. }      
  11. foreach(@impresion){
  12. print "$_\n";             #imprimimos cada una de las lineas de nuestro "TEXTO"
  13. }      
  14.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Imagen
Éxitos.
Última edición por MARKO el 2012-10-01 12:33 @564, editado 2 veces en total
MARKO
Perlero nuevo
Perlero nuevo
 
Mensajes: 86
Registrado: 2012-01-10 22:34 @982

Re: Juntar letras

Notapor BigBear » 2012-10-01 12:16 @553

Gracias por la ayuda, reLlene, pero no es eso lo que quiero lograr. Es que no sé expresarme bien, mejor lo dejo así y cambio de tema.

Viendo tu código
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.     #!/usr/bin/perl -w
  2.      
  3.      use feature 'say';
  4.         my $a = "
  5.            11              11111111       111111111
  6.            11             11      11     11       11
  7.          11  11           11      11     11          
  8.          11  11           11      11     00
  9.        00      00          00000000      00
  10.        00      00         00      00     00
  11.        0000000000         00      00     00
  12.       00         00       00      00     00       00
  13.       00         00        00000000        0000000
  14.       ";
  15.      
  16.     say $a;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


¿Habría alguna forma de dividir la variable $a para tener cada letra en una variable separada? La pregunta es hacerlo desde la variable no haciendo manualmente como lo hice yo.

PD : genial MARKO eso si es lo que queria lograr
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Re: Juntar letras

Notapor explorer » 2012-10-01 14:46 @657

Esta es mi versión:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/env perl
  2. use v5.14;
  3. use List::Util 'max';
  4.  
  5. my $texto = 'aacbcb';                           # Texto de prueba
  6.  
  7. my %letras = (
  8.     a => "
  9.    1111    
  10.  111  111  
  11. 111      111
  12. 11        11
  13. 000000000000
  14. 00        00
  15. 00        00
  16. 00        00
  17. 00        00
  18.  
  19. ",
  20.  
  21.     b => "
  22. 1111111111
  23. 11        11
  24. 11        11
  25. 11        11
  26. 0000000000
  27. 00        00
  28. 00        00
  29. 00        00
  30. 0000000000
  31.  
  32. ",
  33.  
  34.     c => "
  35.  11111111  
  36. 11        11
  37. 11          
  38. 11          
  39. 00          
  40. 00          
  41. 00          
  42. 00        00
  43.  00000000  
  44.  
  45. ",
  46. );
  47. my $fondo = '.';                                # Fondo de las letras
  48. my $kerng = 1;                                  # Espacio entre letras
  49.  
  50. ## Análisis de la fuente de letras
  51. my($ancho_letras, $alto_letras);
  52. {
  53.     my $letra_tipo = $letras{'a'};
  54.     my @lineas = split /\n/, $letra_tipo;
  55.     $alto_letras  = @lineas + 1;
  56.     $ancho_letras = max map { length $_ } @lineas;
  57.     say "Letras: [$ancho_letras x $alto_letras]";
  58. }
  59.  
  60. ## Creación del escritorio
  61. my @escritorio;
  62. for (1 .. $alto_letras) {
  63.     push @escritorio, $fondo x (($ancho_letras + $kerng) * length $texto);
  64. }
  65.  
  66. ## Escritura
  67. my $cursor = 0;                                 # El cursor está a la izquierda
  68.  
  69. for my $letra (split //, $texto) {                              # Por cada letra...
  70.     my @lineas = split /\n/, $letras{$letra};                   # Extraemos su composición
  71.  
  72.     for my $j (0 .. $alto_letras-1) {                           # Para cada línea...
  73.         my $linea = $lineas[$j] =~ s/ /$fondo/gr;               # Le cambiamos el fondo de letra
  74.  
  75.         $linea = $fondo x $ancho_letras if not $linea;          # Caso de línea en blanco
  76.  
  77.         substr($escritorio[$j], $cursor, length $linea) = $linea;       # Pintamos
  78.     }
  79.  
  80.     $cursor += $ancho_letras + $kerng;                          # Movemos el cursor
  81. }
  82.  
  83. ## Presentación
  84. say join "\n", @escritorio;
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

Sale
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
explorer@dv9700 ~/Documents/Desarrollo $ perl code_32486.pl
Letras: [13 x 11]
....................................................................................
....1111..........1111........11111111....1111111111......11111111....1111111111....
..111..111......111..111....11........11..11........11..11........11..11........11..
111......111..111......111..11............11........11..11............11........11..
11........11..11........11..11............11........11..11............11........11..
000000000000..000000000000..00............0000000000....00............0000000000....
00........00..00........00..00............00........00..00............00........00..
00........00..00........00..00............00........00..00............00........00..
00........00..00........00..00........00..00........00..00........00..00........00..
00........00..00........00....00000000....0000000000......00000000....0000000000....
....................................................................................
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Juntar letras

Notapor BigBear » 2012-10-01 16:47 @741

explorer, intenté usar tu script y me tira este error.

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
Bareword found where operator expected at D:\Mis documentos NO BORRAR\Desktop\Le
viatan\Hacking\Warfactory VI\perl\ART\art.pl line 73, near "s/ /$fondo/gr"
syntax error at D:\Mis documentos NO BORRAR\Desktop\Leviatan\Hacking\Warfactory
VI\perl\ART\art.pl line 73, near "s/ /$fondo/gr"
Execution of D:\Mis documentos NO BORRAR\Desktop\Leviatan\Hacking\Warfactory VI\
perl\ART\art.pl aborted due to compilation errors.
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


PD : intenté instalando 5.12, como vos, pero el problema es siempre el mismo.
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Re: Juntar letras

Notapor explorer » 2012-10-01 17:15 @760

Estoy usando una nueva característica de Perl v5.14.

Instálate siempre la última versión estable de Perl.

En este momento, la v5.16.1.

O lo cambias por

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.         (my $linea = $lineas[$j]) =~ s/ /$fondo/g;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Juntar letras

Notapor BigBear » 2012-10-01 17:39 @777

Realicé la modificación que sugeriste y el error cambió a

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
Can't declare scalar assignment in "my" at D:\Mis documentos NO BORRAR\Desktop\L
eviatan\Hacking\Warfactory VI\perl\ART\art.pl line 74, near ") =~"
Execution of D:\Mis documentos NO BORRAR\Desktop\Leviatan\Hacking\Warfactory VI\
perl\ART\art.pl aborted due to compilation errors.
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


P.d.: Instalé el 5.14 y tira, pero tengo un problema: no encuentro crack para el perl2exe de esta versión de Perl y necesito pasarlo a exe. Te quería preguntar cómo modifico tu script para evitar este error con el tema del fondo, arreglarlo o suprimir la opción del fondo que da problemas.
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Re: Juntar letras

Notapor explorer » 2012-10-01 17:46 @782

Ag... puse mal el primer paréntesis...

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

Siguiente

Volver a Básico

¿Quién está conectado?

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

cron