elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


  Mostrar Mensajes
Páginas: 1 2 [3] 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ... 59
21  Programación / Scripting / Re: ¿Ordenar turnos por velocidad? en: 9 Agosto 2021, 23:09 pm
Si correcto, muchas gracias Daniel. Una forma de no usar break es poner el condicional en el while. Ahora, para mi es mas facil de entender un código con break "Si pasa esto me salgo del ciclo en el que estoy" a con una condición while "Si pasa esto cambio el booleano a falso, luego pueden o no pasar cosas, en la siguiente iteración me salgo.". Fuera de eso, no sé si hay algún problema a nivel de ejecución (velocidades o cosas) pero en caso de no haberlo prefiero el break.

Nota: Esto que digo solo aplica si hay una condicional booleana que se altere en medio del código, en caso contrario, en efecto puede ser mejor la condición en el while. Supongo que es tema de preferencias. No estoy seguro si Clean Code habla de esto.

Aunque en tu caso en Macro Flash tengo entendido que tienes el do-while (si al terminar pasa esto me salgo), puede que lo prefieras.

De todas formas si el tema es hacerlo lo mas reducido y correcto posible (con bubble) quizás la opción correcta sea algo como esto:

Código
  1. # Seteo de variables
  2. Player1Speed = 2
  3. Player2Speed = 3
  4. Player3Speed = 1
  5. Player4Speed = 4
  6.  
  7. # Calculo la cantidad de jugadores y seteo y orden de turnos.
  8. l = 0
  9. while f"Player{l+1}Speed" in globals(): #verifico si la variable i+1 existe (ahora no hay error de try except)
  10. l+=1
  11. exec(f'Turn{l} = "Player{l}"') #seteo Turn1 directamente con el nombre del player
  12. j = l
  13. while 1 < j: #ordenamiento burbuja "inverso" directamente en la definición de variables
  14. if(eval(eval(f'Turn{j-1}') + str('Speed')) < eval(eval(f'Turn{j}') + str('Speed'))): #si el player actual es mas rapido que el anterior entonces ejecuto lo siguiente
  15. exec(f'Turn{j}, Turn{j-1} = Turn{j-1}, Turn{j}') #intercambio el player actual con el anterior
  16. else: #en caso contrario
  17. break #me salgo de este ciclo, ya que los anteriores estan ordenados
  18. j-= 1 #resto a j-1
  19.  
  20. #imprimir resultados
  21. i = 1
  22. while i <= l:
  23. print(f'Turn{i} = {eval("Turn" + str(i))}')
  24. i += 1
  25.  
22  Programación / Scripting / Re: ¿Ordenar turnos por velocidad? en: 9 Agosto 2021, 20:09 pm
Explico linea por linea

Código
  1.    # Calculo la cantidad de jugadores y seteo los turnos (sin ordenar) con la velocidad
  2.    l = 1 # dado que la primera variable es Player1Speed, l parte en uno
  3.    while True: #se repite por siempre (hasta que ocurra el break)
  4.     try: #contengo el error que ocurrira cuando intente acceder a una variable PlayerNSpeed que no exista
  5.     var = eval('Player'+str(l)+'Speed') #Accedo a la variable PlayerlSpeed (siendo l el número), de no existir se ejecuta exepct
  6.     exec('Turn'+str(l)+' = '+str(var)) #Creo una variable TurnX = PlayerlSpeed
  7.     l += 1 # Le sumo 1 a l, para que la siguiente iteración sea con un número mas.
  8.     except: #lo de abajo se ejecuta en caso de que la variable PlayerlSpeed no exista
  9.     l -= 1 #dado que PlayerlSpeed no existe, tengo que restar 1 a l, (osea si el total de players eran 4, cuando ocurra el error l será 5, me interesa que vuelva a 4
  10.     break #salgo del ciclo while
  11.  

Como ves l nunca es negativo. Un ejemplo de la ejecución del código con dos players sería:

Código:
Player1Speed = 2
Player2Speed = 1
l = 1
Iteración 1:

var = Player1Speed
Turn1 = var
l = l + 1 #osea 2

Iteración 2:
var = Player2Speed
Turn2 = var
l = l  + 1 #osea 3

Iteración 3:
var  = Player3Speed <- #ERORR!!!! ESTO NO SE PUEDE EJECUTAR PORQUE LA VARIABLE NO EXISTE.
l =  l -1 #Osea vuelve a dos
break #dejo de iterar

#RESULTADOS OBTENIDOS POR EL CÓDIGO DE ARRIBA
Turn1 = 1 #velocidad del primer jugador
Turn2 = 2 #velocidad del segundo jugador
l = 2 #cantidad de jugadores

PD: Yo separe eval de exec, pero en vez de pasar de Player1Speed a var y de var a Turn1 puedes hacerlo directo: Turn1 = Player1Speed

Recomendación:
No sigas por este camino, los arrays existen por algo, trabajar con variables independientes hará que tu código sea dificil de leer y mantener. Puedo entender que no quieras usar switch y case, o incluso que no quieras usar for (aun cuando es mucho mas "controlable" que while), pero no usar arrays solo te limitará como programador. Es tu decisión, pero no puedo evitar hacerte esta recomendación.
23  Foros Generales / Sugerencias y dudas sobre el Foro / Re: Optimización website elhacker.net en: 9 Agosto 2021, 16:21 pm
Otro tema es el sentido actual de la web, sin descargas, sería más ofrecer una pantalla de inicio con algunos de los servicios que se ofrecen: noticias, foros,

¿Te refieres a que la web pase a ser algo así como un hub? Donde solo aparezcan los links al foro, wiki, noticias, warzone y servicios (ademas de aparecer información de redes sociales y quizas un buscador)?

De ser esa tu visión, yo me arriesgaría con un diseño mucho mas actual, tanto en la web-hub como en los otros apartados. (Osea, no limitarse a mantener la estética actual). Me gustaría hacer un ejemplo; Si me veo con tiempo lo subo.
24  Programación / Scripting / Re: ¿Ordenar turnos por velocidad? en: 9 Agosto 2021, 05:19 am
Bueno, al margen de lo del for, el tema de los arrays es lo que hace complicado el código que lees. No sé nada de macromedia flash, así que te lo explicaré según lo que escribí en python (tu haces la traducción luego).

Aca los metódos claves son:
eval()  eval se usa para evaluar una sola expresión de Python generada dinámicamente. Le paso un string (código), esta la ejecuta y me retorna el resultado. Por ejemplo, le paso el nombre de una variable y de existir me dará el resultado, en caso contrarió me tirara un error (el mismo error que arrojaría si yo intentara acceder al valor de una variable que no existe).
exec() exec se usa para ejecutar código de Python generado dinámicamente. Le paso un string y lo ejecuta. Lo utilizó para crear una variable, osea: eval("variable = 5"), sería lo mismo que directamente escribir variable = 5 (solo que lo puedo hacer desde un string, en tiempo de ejecución).

El código se divide en 5 partes (identificadas por los comentarios):

1.- Seteo de variables: Esto ya lo entenderás así que no lo explicaré.

2.- Cálculo de cantidad de jugadores: Dado que no puedo usar arrays o diccionarios lo que hice fue usar un while que tuviera un contador incremental que parte desde 1. En cada ciclo uso la función eval para obtener el valor de la variable (iteración 1: Player1Speed, iteración 2: Player2Speed, etc.), y exec para guardar dicho valor en Turn1, Turn2, Turn3, etc. Cuando eval me tire un error de que la variable que intento acceder no existe entonces salgo del while. Como resultado de este bloque de código obtengo 2 cosas: La creación de variables Turn1, Turn2, Turn3, etc. con las velocidades en desorden y la cantidad de variables de entrada (obtenida a partir del contador resultante). Ejemplo:

Código:
l = 4
Turn1 = 2
Turn2 = 3
Turn3 = 1
Turn4 = 4

3.- El bubble sort mas feo del mundo: Aca no hay mucho que explicar. Si no lo conoces, busca bubble sort en internet y ya está. (Se podrían haber usado otros métodos de ordenamiento, pero este es el mas facil que se me ocurrió). Como resultado de este método obtengo las velocidades ordenadas (estas velocidades están guardadas dentro de Turn1, Turn2, Turn3, etc). Ejemplo:

Código:
Turn1 = 4
Turn2 = 3
Turn3 = 2
Turn4 = 1

4.- Remplazar velocidades por jugadores: Acá recorro la "lista" de jugadores, y por cada uno de estos, recorro la lista de turnos. Si la velocidad del jugador corresponde a la velocidad del turno, remplazo la velocidad del turno por el nombre del jugador y avanzo al siguiente jugador, así hasta que todos los valores sean remplazados. Ejemplo:

Código:
Turn1 = "Player4"
Turn2 = "Player2"
Turn3 = "Player1"
Turn4 = "Player3"


5.- Imprimir resultado ordenado: Nada que decir, solo recorro la lista de turnos e imprimo el resultado.

PD: Si el problema es no poder guardar arrays en un txt, entonces lee el txt, guarda esa lectura en un array de objetos con el nombre del jugador y su velocidad, y ejecuta un metodo de ordenamiento. Te será mucho mas simple.

PD2: No se nada de macromedia flash, pero esto no estaba muerto? Es una duda, no una critica, no te lo tomes a mal hahaha.
25  Programación / Scripting / Re: ¿Ordenar turnos por velocidad? en: 8 Agosto 2021, 09:02 am
¿Como es eso de que no te gustan los fors ni arrays?  :xD :xD :xD

En que lenguaje, ¿python? lo puedes hacer con eval(), exec() y while.. pero vamos, es una tontería no usar arrays  :xD.

Quizás lo haga para entretenerme un rato, pero me mataste con ese comentario  ;-) ;-) ;-) :laugh:

Modifico este mensaje en un rato hahahaha.

Código
  1. # Seteo de variables
  2. Player1Speed = 2
  3. Player2Speed = 3
  4. Player3Speed = 1
  5. Player4Speed = 4
  6.  
  7. # Calculo la cantidad de jugadores y seteo los turnos (sin ordenar) con la velocidad
  8. l = 1
  9. while True:
  10. try:
  11. var = eval('Player'+str(l)+'Speed')
  12. exec('Turn'+str(l)+' = '+str(var))
  13. l += 1
  14. except:
  15. l -= 1
  16. break
  17.  
  18. # El bubble sort mas feo del mundo
  19. i = 1
  20. while i < l:
  21. j = 1
  22. while j < l:
  23. v1 = eval('Turn'+str(j))
  24. v2 = eval('Turn'+str(j + 1))
  25. if v1 < v2:
  26. exec('Turn'+str(j)+' = '+str(v2))
  27. exec('Turn'+str(j + 1)+' = '+str(v1))
  28. j += 1
  29. i += 1
  30.  
  31. # Remplazo las velocidades por los jugadores (uso la misma varialbe turn)
  32. i = 1
  33. while i <= l:
  34. name = 'Player' + str(i)
  35. speed = eval(name+'Speed')
  36. j = 1
  37. while j <= l:
  38. turn = eval('Turn'+str(j))
  39. if speed == turn:
  40. exec( 'Turn'+str(j) + ' = "' + name + '"')
  41. break
  42. j += 1
  43. i += 1
  44.  
  45. #Imprimo el resultado ordenado
  46. i = 1
  47. while i <= l:
  48. var = eval('Turn' + str(i))
  49. print('Turn' + str(i) + ' = ' + var)
  50. i += 1
  51.  
26  Foros Generales / Sugerencias y dudas sobre el Foro / Re: Optimización website elhacker.net en: 8 Agosto 2021, 01:39 am
Las tecnologías es cosa de decidir. Y asegurarse que lo que se decida tenga alguna trayectoria a futuro. Por lo demas, lo unico que pido es que usen las preferencias de usuario para asignar un template oscuro, de verdad lo agradecería mucho.



Por lo demas, supongo que el tema estaría resuelto, de acá en adelante son conversaciones entre el staff. Suerte!

PD: Si sigo por aquí cuando actualicen el sitio web (si lo hacen), cuenten conmigo para cualquier cosa. (Da igual la tecnología, incluso si son las que indica MinusFour puedo subirme al proyecto).
27  Foros Generales / Sugerencias y dudas sobre el Foro / Re: Optimización website elhacker.net en: 7 Agosto 2021, 21:51 pm
No sé, yo creo que a mi me gustaría algo similar a lo que hay ahora (visualmente), con la misma organización y todo, solo que con un código mas limpio y quizás una estética mas "estilizada" (sin discrepar mucho con el diseño actual).

Ni yo me entiendo lo que quiero decir, así que haré un diseño rápido para explicarme. Vuelvo en unas horas.

EDITO:

Algo como esto:


//Hecho en VUE Vite (instalación por defecto), Tailwind y Font Awesome.

(No le hagan mucho caso a los colores, los hice un poco a la rápida, no estoy seguro si le acerté al azul bien, sobre todo en los icnos de rrss) .
28  Foros Generales / Noticias / Re: Apple escaneará automáticamente las fotos del iPhone y iCloud en busca de pornografía infantil en: 7 Agosto 2021, 19:31 pm
Hace tiempo recuerdo haber leído una noticia (creo que en este mismo foro) de un chico que detuvieron por pornografia infantil. Era el mismo, se sacó fotos cuando era más pequeño.

Bueno ahora que lo pienso, quizás si era pedofilo. Solo que un pedofilo previsor que aprovechó su situación de menor para sacarse fotos con las que abastecerse en un futuro.

Como sea. Lo más seguro es que betebe tenga razón, y solo es una excusa para tener más control de sus clientes. No me sorprendería que se aprovechen esas fotos para fines comerciales. PROXIMAMENTE pedofilos con publicidad de jugueterías cercanas.  :-X
29  Foros Generales / Noticias / Re: Apple escaneará automáticamente las fotos del iPhone y iCloud en busca de pornografía infantil en: 7 Agosto 2021, 17:24 pm
Tranquilo, que el consentimiento se lo daras cuando aceptes sus políticas de privacidad sin leer.  ;D ;D
30  Foros Generales / Noticias / Re: Apple escaneará automáticamente las fotos del iPhone y iCloud en busca de pornografía infantil en: 7 Agosto 2021, 07:16 am
Ni idea, pero seguro que Isaac Asimov encontraría la forma.
Páginas: 1 2 [3] 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ... 59
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines