Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - dijsktra

#1
Cita de: fary en  3 Mayo 2020, 20:21 PM
dijsktra deberías de poner mas retos como este  :P

Va por el fary !

Nuestros hermanos de América puede que no sepan quien es el Fary... Es... el "más cantante de España",,,   https://www.youtube.com/watch?v=XLZO3DGRrfY
(Parodia de lo mal que hablan los "gallegos"!!)

A vueltas con las matrices... Se trata ahora de comprobar si una matriz es triangular inferior descendiente...


Yo lo he hecho de arriba a bajo. Es similar, pero es como si a un zurdo le mandaran escribir con la derecha, o a un diestro con la izquierda...

Vale el mismo código base de

https://foro.elhacker.net/programacion_cc/algebra_de_matrices_matriz_triangular_superior_desdendiente_en_c-t504451.0.html;msg2220794#msg2220794

int lowerTriangleDesc(const int **A,
     const int N)
{
 // Start code here.
 return 1;
}


De nuevo, el que más simple/bonito lo hace, (no el que termine antes, como en los concursos) gana!

Ojo , YreX-DwX, no se te olivde que tienen que valer para matrices N>=1 columnas....

Ejemplos de entrada de casos son...
EN DOS DIAS PONGO LA SOLUCION

3
1 0 0
0 1 0
0 0 1
lowerTriangleDesc: 1
3
1 2 3
0 4 5
0 0 6
lowerTriangleDesc: 0
3
1 2 3
2 4 5
0 0 6
lowerTriangleDesc: 0
5
1 0 0 0 0
1 2 0 0 0
1 2 3 0 0
1 2 3 4 0
1 2 3 4 5
lowerTriangleDesc: 1
5
1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
0 0 0 0 1
lowerTriangleDesc: 1
1
1
lowerTriangleDesc: 1
1
0
lowerTriangleDesc: 1


#2
Se pide, dada na matriz de tamaño NxN, N arbitrario, determinar si es una matriz triangular superior decendiente. Esto es, los elementos debajo de la diagonal principal descendiente son todos nulos (no necesariaemente el resto).

Por ejemplo, son triangulares superiores descendientes:


1 2 3    1 2 3    
0 4 5    0 4 5
0 0 2    0 0 0


Y no lo son


1 2 3    1 2 3    
0 4 5    2 4 5
0 2 2    0 0 0

Se facilita el codigo de entrada/salida y unos casos de uso. La primera linea marca la dimension de la matriz cuadrada, N. Las siguientes N lineas dan las filas de la matriz.

ES UN RETO. YO YA TENGO LA SOLUCION. EN UNOS DIAS LA PONGO...
(Se valora la solucion mas imple)




5
1 2 3 0 0
0 4 5 0 0
0 0 0 1 1
0 0 0 3 1
0 0 0 0 1
upperTriangleDesc: 1
3
1 2 3
0 4 5
0 2 0
upperTriangleDesc: 0
3
1 2 3
0 4 5
0 0 0
upperTriangleDesc: 1


int upperTriangleDesc(const int **A,
     const int N)
{
// Start coding here
   return 0 ;
}

int main(int argc, char *args[])
{
 int **A;
 int N;
 for( ; scanf("%d",&N)==1; )
   {
     if  ((A=(int**)malloc(N*sizeof(int *)))==NULL)
{
 perror("calloc");
 exit(1);
}
     for(int n=0;n<N;n++)
{
 if  ((A[n]=(int*)malloc(N*sizeof(int)))==NULL)
   {
     perror("calloc");
     exit(1);
   }
 for(int m=0;m<N;m++)
   if (scanf("%d",&A[n][m])!=1)
     {
perror("scanf");
exit(1);
     }
}
     printf("upperTriangleDesc: %d\n",upperTriangleDesc((const int **)A,N));
     for(int n=0;n<N;n++)
free(A[n]);
     free(A);
   }
 return 0;
}


#3
Scripting / leer un array por entrada estandar (cmd)
29 Noviembre 2019, 15:52 PM
Hola.
Tengo experiencia en C pero me gustaría aprender el criptico command.com

Hay algunos tutoriales en la sección de mensajes fijos, pero no encuentro la respuesta.

Se que

set /P VAR=

Lee un escalar. Pero no consigo leer un array por entrada estandar.

algo como

for %%i in (0,1,10) do (
  set /P A[%%i]=
)

Que desde luego, no funciona. si alguien puede decirme...
#4
Dado un vector de enteros V[0..N) , con todos sus componentes siguiendo un orden stricto creciente, (1,5,17,20) y un numero k >=0 , diseñar un algoritmo de complejidad lineal que resuelva el número de pares de componentes <i,j> , con 0<=i,j<N, tales que Vi-Vj=k.

En la siguientee lineas se da unos ejemplos como ilustracion


5 3   (Numero de componentes del vector y k)
1 4 5 6 8  (Componentes del vector)
2  (Resultado)

4 2 (Numero de componentes del vector y k)
1 4 5 6 (Componentes del vector)
1  (Resultado)


3 0 (Numero de componentes del vector y k)
1 2 3 (Componentes del vector)
3 Resultado)



Yo dispongo de la solución. La pongo en dos días. Pero ahí esta el reto. Cuanto más simple mejor!
#5
Scripting / Juego Python OhNO
24 Mayo 2019, 14:18 PM
Hola!
OhnO es un juego clásico de fichas sobre un tablero de origen japonés.  Sus reglas son:
EDITED: Credits NEBIRE

  • Una misma ficha azul puede ver a las otras azules contiguas en su misma fila y columna, excluyendo ella misma
  • Las fichas rojas rompen la contigüidad entre las azules
  • Haz click en las fichas para cambiar sus colores. Las fichas "clavadas" del principio no se pueden cambiar
  • Los numeros (A/B) describen cuantas fichas azules debe ver cada ficha azul (B) y cuantas ve relamente (A).
  • Como mínimo, cualquier ficha azul debe ver otra ficha azul

Es posible que haya miles de versiones por Internet.
Ofrezco la mía. Alguna valoración?
https://github.com/rafaelm53539600/OhnO







(Son 250 lineas, por eso no lo expongo en el Web)

#6
Hola!

En una facultad de Madrid me he encontrado pinchado en el panel este original reto...
Está en inglés, pero creo que se entiende...

  • El primer problema pide demostrar que el programa dado acaba
  • El segundo dice que cuando acabe, el sistema sacará la llamada correspondiente al assert.  :o :o



Alguna propuesta ? :o :o :o
#7
Programación C/C++ / std::list::erase <list>
4 Julio 2018, 12:07 PM
Tengo una duda. De la función
Código (cpp) [Seleccionar]
iterator erase (iterator position);
la documentación dice:

RETURNS : An iterator pointing to the element that followed the last element erased by the function call. This is the container end if the operation erased the last element in the sequence.

Mi pregunta es: se deve asumir algún valor "util" en el iterador, como parametro de entrada salida?

El siguiente programa invierte el sugsegmento L[i..i+k) del vector corresponidente a la lista L[0..N), con 0 <=i < N , 0 <= k

#include <iostream>
#include <list>
#include <algorithm>
using namespace std;

// P : length(l) >= 0 , 0 <= i < length(l)  ,k >= 0
void invertSegment(list<char>& l, const int i, const int k){
 list<char>::const_iterator it1,it2;
 it1 = next(l.begin(),i);  //O(l)
 it2 = next(l.begin(),min(i+k,(int)l.size())); // O(i+k)
 for(it2--;it2!=it1 ;it2-- ) // O(k))
   {
     l.insert(it1,*it2);  // O(1)
     it2=l.erase(it2);
   }
 return;    
}



int main() {
 list<char> l;
 int N, i, k;
 char c;
 for ( ; cin >> N >> i >> k; )
   {
     l.clear();
     for (int n = 0; n < N; n++)
{
cin >> c ; l.push_back(c);
}
     invertSegment(l,i,k);
     for (list<char>::const_iterator it=l.begin(); it!=l.end(); it++) cout << *it << " ";
     cout << endl;
   }
 return true;
}


En la linea 14, debo asumir

it2=l.erase(it2);

como lo mismo que...

l.erase(it2);

Yo creo que NO, pese a que el programa parce funcionar.

Aquí algunas salidas: La primera linea leem, N, i, k , la segunda la lista de N elementos y la salida marca la lista con la sublista invertida
6 1 2
1 2 3 4 5 6
1 3 2 4 5 6
6 1 4
1 2 3 4 5 6
1 5 4 3 2 6
6 1 5
1 2 3 4 5 6
1 6 5 4 3 2
6 0 6
1 2 3 4 5 6
6 5 4 3 2 1


#8
Ejercicios / Particion aritmetica en python
11 Marzo 2018, 00:47 AM
Vuelvo a recuperar la cuestión no resuelta desde Mayo del 2017

https://foro.elhacker.net/ejercicios/ejercicio_bucle_while_en_python-t469250.0.html

"Dados dos números enteros n (n≥0) y a (a>0) encontrar, si existe, el
menor entero x del intervalo [0, n] para el que se cumpla lo siguiente: la diferencia
entre las sumas de los valores enteros de los intervalos [n-x, n] y [0, x] coincide
con a."

Se mostraron dos soluciones:

La primera es incorrecta, ya que para n = 100000 y para a= 350 se daba x=449, cosa que no
es cierta, pues

>>> n,a,x = 100000, 350, 449
>>> n,a,x
(100000, 350, 449)
>>> a == sum(range(x,n+1)) - sum(range(0,x+1))
False
>>> a ,  sum(range(x,n+1)) - sum(range(0,x+1))
(350, 4999848399)


En la segunda, se dice que el problema se puede resolver en O(1) sin más que resolver la ecuacion
(n-x)x+(n-x)=a
diciendo que (n-x)x+(n-x)  es la diferencia buscada. Cosa que no es, ya que

>>> n,x
(100000, 449)
>>> (n-x)*x+(n-x) ==  sum(range(x,n+1)) - sum(range(0,x+1))
False
>>> (n-x)*x+(n-x) , sum(range(x,n+1)) - sum(range(0,x+1))
(44797950, 4999848399)


Propongo mi solución. La ecuación que hay que resolver en valores enteros 0 <= x <=n es (al final del mensaje digo como la he obtenido):

n(n+1) = 2(a+x^2)

En el cuerpo de los complejos, siempre tiene solución, pero en los enteros 0 <= x <= n puede que ésta no exista, por lo que emplearé el tipo None de Python para expresar esta circunstancia...


El algoritmo python que lo resuelve es el siguiente:

Código (python) [Seleccionar]
'''
   P :  N >= 0 and a > 0
   Q : x = min i : 0 <= i <= N and N(N+1)==2(a +i^2) : i
'''
def partition(N,a):
    m = 0
    while (m<=N) and (N*(N+1)!=2*(a+m*m)):
        m=m+1
    return (None if m>N else m)




Van algunos ejemplos


>>> for n in range(5,10):    
       for a in range(6,10):
           print n,a , " => Sol : " , partition(n,a)



Lo que arroja esta salida

5 6  => Sol :  3
5 7  => Sol :  None
5 8  => Sol :  None
...
9 7  => Sol :  None
9 8  => Sol :  None
9 9  => Sol :  6



Vemos que


>>> n,a,x = 5,6,3
>>> n,a,x
(5, 6, 3)
>>> a == sum(range(x,n+1)) - sum(range(0,x+1))
True
>>> a , sum(range(x,n+1)) - sum(range(0,x+1))
(6, 6)


El caso n=100000 y a = 350, no tiene solución.

Si puedo, mañana escribo de donde sale la ecuación.