• Publicidad

Reto: El submarino

Aprende Perl

Reto: El submarino

Notapor explorer » 2010-10-27 11:27 @519

«Se tiene un plano (imagínese como un cuaderno cuadriculado), en donde cada cuadrito tiene su coordenada. Allí se colocarán 3 islas y 5 animales marinos en diferentes cuadritos. Uno está en un submarino en alguna coordenada. Al elevar el periscopio se puede ver hacia el norte, sur, este, oeste. Problema: Cuente cuántos animales se ven desde su posición. Nota: si hay una isla entre Ud. y el animal, no podrá ver los animales detrás de ella porque la isla los oculta. Se dan las coordenadas del submarino, las islas y los animales. NO SE PUEDEN USAR ARREGLOS, HASHES NI REFERENCIAS SIMBÓLICAS.»

Ejemplos de llamada:
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
$ #              SxSyI1I1I2I2I3I3A1A1A2A2A3A3A4A4A5A5
$ ./submarino.pl 4 4 2 3 6 4 5 6 4 2 6 2 8 4 5 5 4 7
2
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4

Caso extremo:
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
$ ./submarino.pl 5 5   5 3 2 5 7 5   5 2 1 5 3 5 6 5 5 7
3
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


(Nota: es un ejemplo de llamada, se puede programar otra forma de entrar los datos).

El único arreglo del que se puede leer es @ARGV, pero solo para inicializar variables escalares donde se almacenarán los valores leídos.

Objetivo: encontrar la solución más corta. Encontrar una solución que pueda ser ampliable a 5 islas y 20 animales.

Fuente original: UNIVERSIDAD CENTRAL DE VENEZUELA, FACULTAD DE CIENCIAS, ESCUELA DE COMPUTACIÓN, ALGORITMOS Y PROGRAMACIÓN, PROYECTO #1 (pdf)
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Publicidad

Re: Reto: El submarino

Notapor explorer » 2010-11-16 08:32 @397

La explicación de la siguiente solución en Perl ofuscado, se deja como ejercicio para el lector.

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
#!/usr/bin/perl -l
# El
sub#marino                |
                          l{
                        my$b;for$i
                        (1..shift)
                       {my($x,$y)#JF2010
           =(shift@ARGV,shift@ARGV);if($x==$sx||$y==$sy)
        {$b.=','if$b;$b.="$x|$y"}}$b};($sx,$sy)=(shift,shift);$I=l(3);
      $E=l(5);$v=0;for$e(split/,/,$E){($ex,$ey)=split/\|/,$e;my $m;map{(
      $ix,$iy)=split/\|/;$m.=(($iy==$ey*(($ex-$ix)*($ix-$sx)>0))or($ix==
        $ex*(($ey-$iy)*($iy-$sy)>0)))}split/,/,$I;$v++if!$m}print$v;
 
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: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Formación

¿Quién está conectado?

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

cron