Autor
|
Tema: El reto de sheldon cooper (Leído 3,757 veces)
|
Baphomet2204
Desconectado
Mensajes: 56
Programo luego existo
|
hola a todos los miembros de foro, creo recordamos el capitulo 73 de la teoria del big bang donde sheldon nos dice porque el 73 es el mejor número, pues hoy quiero proponer una comprobación, hacer un programa en cualquier lenguaje para comprobar si solo el 73 cumple con lo dicho por sheldon, el programa solicitaría el número a comprobar y solo diría si cumple o no con lo estipulado, debe cumplir con lo siguiente el número: * N debe de ser primo (73 es primo) * el número formado por las cifras invertidas de N debe ser primo (37 es primo) * la posición en la lista de números primos de N debe ser el inverso a la de la posición del inverso de N, (73 ocupa el lugar 21 y 37 el 12 que es el inverso de 21) * El producto de las cifras de N debe ser igual a su posición en la lista (7*3=21 que es su lugar en la lista). Desde luego el programa más sencillo es: if(n==73) cumple else nocumple ya que solo el 73 cumple con los requisitos pero el caso es comprobarlo realmente y por eso este reto por diversión, que tal el reto, lo veo bien para pasar unas horas.
|
|
« Última modificación: 21 Julio 2019, 22:21 pm por Baphomet2204 »
|
En línea
|
$Diseñando_vida
while(vivas) { Come(); //Duerme(); Programa(); Repite(); }
|
|
|
tincopasan
Desconectado
Mensajes: 1.286
No es lo mismo conocer el camino que recorrerlo.
|
No tengo la menor idea de quien hablas, y no creo que esto sea una tarea, pero es simple no más de 5 minutos para ecscribir(se nota que soy muy lerdo). una forma simple y sin demasiadas comprobaciones de errores es: #-*- coding: utf -8 -*- ''' * 1) N debe de ser primo (73 es primo) * 2)el número formado por las cifras invertidas de N debe ser primo (37 es primo) * 3)la posición en la lista de números primos de N debe ser el inverso a la de la posición del inverso de N, (73 ocupa el lugar 21 y 37 el 12 que es el inverso de 21) * 4)El producto de las cifras de N debe ser igual a su posición en la lista (7*3=21 que es su lugar en la lista). ''' def lista_primos(n): return ([2] + [x for x in range(3, n+1, 2) if not [y for y in range(3, int(x**0.5)+1, 2) if (float(x) / y).is_integer()]]) if n >= 2 else [] def comprobar(numero): if len(str(numero)) < 2 : print("El número debe ser de por lo menos 2 cifras") return if numero in lista_primos(numero): print("Comprobación 1 aceptada") else: print("el número no es primo") return reverso = int(str(numero)[::-1]) if int(str(numero)[::-1]) in lista_primos(reverso): print("Comprobación 2 aceptada") else: print("Comprobación 2 no aceptada") return posicion_numero = str(lista_primos(numero).index(numero)+1) posicion_reverso = str(lista_primos(reverso).index(reverso)+1) if posicion_numero == posicion_reverso[::-1]: print("Comprobación 3 aceptada") else: print("Comprobación 3 no aceptada ") y = 1 for x in str(numero): y = y * int(x) if str(y) == posicion_numero: print("Comprobación 4 aceptada") comprobar(73)
por eso este reto por diversión, que tal el reto, lo veo bien para pasar unas horas. lo de diversión si, lo de horas ni por casualidad. Saludos.
|
|
|
En línea
|
|
|
|
Baphomet2204
Desconectado
Mensajes: 56
Programo luego existo
|
Efectivamente no es una tarea, puedes leer este link para ver la teoría que se comprobó con un episodio de una serie y en la que base este reto, muy bueno tu método, el que había pensado es muy similar con la diferencia que nunca se me ocurrió def lista_primos(n): return ([2] + [x for x in range(3, n+1, 2) if not [y for y in range(3, int(x**0.5)+1, 2) if (float(x) / y).is_integer()]]) if n >= 2 else [] estaba como loco comprobando de uno en uno hasta que se encontrara el número y veía cuantas veces se hizo para ver su posición en la lista, el tuyo sin duda mucho mejor
|
|
|
En línea
|
$Diseñando_vida
while(vivas) { Come(); //Duerme(); Programa(); Repite(); }
|
|
|
Tachikomaia
Desconectado
Mensajes: 1.420
Hackentifiko!
|
Demasiado complicado me parece para lo que se logra haciéndolo, mejor hacer un videojuego por ejemplo.
"la posición en la lista de números primos de N debe ser el inverso a la de la posición del inverso de N, (73 ocupa el lugar 21 y 37 el 12 que es el inverso de 21)"
Me perdí bastante ahí, quizá sería mejor: "la posición de N en la lista de números primos debe ser inversa a la posición del inverso de N (73 ocupa el lugar 21, y 37 el 12 que es el inverso de 21)" Puedes intentar hacer un programa para comprobar eso si quieres xD
|
|
|
En línea
|
|
|
|
@XSStringManolo
Hacker/Programador
Colaborador
Desconectado
Mensajes: 2.399
Turn off the red ligth
|
No tengo la menor idea de quien hablas, y no creo que esto sea una tarea, pero es simple no más de 5 minutos para ecscribir(se nota que soy muy lerdo). una forma simple y sin demasiadas comprobaciones de errores es: #-*- coding: utf -8 -*- ''' * 1) N debe de ser primo (73 es primo) * 2)el número formado por las cifras invertidas de N debe ser primo (37 es primo) * 3)la posición en la lista de números primos de N debe ser el inverso a la de la posición del inverso de N, (73 ocupa el lugar 21 y 37 el 12 que es el inverso de 21) * 4)El producto de las cifras de N debe ser igual a su posición en la lista (7*3=21 que es su lugar en la lista). ''' def lista_primos(n): return ([2] + [x for x in range(3, n+1, 2) if not [y for y in range(3, int(x**0.5)+1, 2) if (float(x) / y).is_integer()]]) if n >= 2 else [] def comprobar(numero): if len(str(numero)) < 2 : print("El número debe ser de por lo menos 2 cifras") return if numero in lista_primos(numero): print("Comprobación 1 aceptada") else: print("el número no es primo") return reverso = int(str(numero)[::-1]) if int(str(numero)[::-1]) in lista_primos(reverso): print("Comprobación 2 aceptada") else: print("Comprobación 2 no aceptada") return posicion_numero = str(lista_primos(numero).index(numero)+1) posicion_reverso = str(lista_primos(reverso).index(reverso)+1) if posicion_numero == posicion_reverso[::-1]: print("Comprobación 3 aceptada") else: print("Comprobación 3 no aceptada ") y = 1 for x in str(numero): y = y * int(x) if str(y) == posicion_numero: print("Comprobación 4 aceptada") comprobar(73)
lo de diversión si, lo de horas ni por casualidad. Saludos. Lo has hecho bastante compacto. Yo en C++ usaría el operador módulo para sacar los primos o usaría cualquier algoritmo para generarlos con un contador que aumente con cada número primo generado. Guardaría cada primo junto a su posición en un vector. Guardaría cada cifra como elemento en un vector de ints. Despues para comprobarl si coinciden al revés leería el vector con begin() y end() de la stl y leería con rbegin() y rend() para comparar el contenido apuntado por el iterador a ver si coinciden o no. Finalmente recorrería el vector que almacena el primo junto a su posición buscando ambos valores, el primo y el inverso para comprobar si el orden en la serie también coincide con el inverso en la serie. Demasiado complicado me parece para lo que se logra haciéndolo, mejor hacer un videojuego por ejemp
"la posición en la lista de números primos de N debe ser el inverso a la de la posición del inverso de N, (73 ocupa el lugar 21 y 37 el 12 que es el inverso de 21)"
Me perdí bastante ahí, quizá sería mejor: "la posición de N en la lista de números primos debe ser inversa a la posición del inverso de N (73 ocupa el lugar 21, y 37 el 12 que es el inverso de 21)" Puedes intentar hacer un programa para comprobar eso si quieres xD
Se hace en 5 minutos... No sé que juego harás tú en 5 minutos.
|
|
|
En línea
|
Mi perfil de patrocinadores de GitHub está activo! Puedes patrocinarme para apoyar mi trabajo de código abierto 💖
|
|
|
Baphomet2204
Desconectado
Mensajes: 56
Programo luego existo
|
Lo has hecho bastante compacto. Yo en C++ usaría el operador módulo para sacar los primos o usaría cualquier algoritmo para generarlos con un contador que aumente con cada número primo generado. Guardaría cada primo junto a su posición en un vector. Guardaría cada cifra como elemento en un vector de ints. Despues para comprobarl si coinciden al revés leería el vector con begin() y end() de la stl y leería con rbegin() y rend() para comparar el contenido apuntado por el iterador a ver si coinciden o no. Finalmente recorrería el vector que almacena el primo junto a su posición buscando ambos valores, el primo y el inverso para comprobar si el orden en la serie también coincide con el inverso en la serie. Exacto, es justo lo que yo pensaba hacer, pero aquí el amigo tincopasan lo resumió de manera increíble, sinceramente no pensé en hacerlo así, estaba pensado el camino largo
|
|
|
En línea
|
$Diseñando_vida
while(vivas) { Come(); //Duerme(); Programa(); Repite(); }
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
los reto a un reto muy dificil
Desafíos - Wargames
|
elshaker
|
2
|
4,621
|
2 Enero 2013, 00:12 am
por kaiserr
|
|
|
Sheldon Adelson emprende una campaña millonaria para matar el juego 'online'
Noticias
|
wolfbcn
|
1
|
1,541
|
24 Noviembre 2013, 17:19 pm
por JaNCeR
|
|
|
Reto algoritmo mezcla cifras y letras (RETO REMUNERADO)
Desafíos - Wargames
|
kingMezlo
|
3
|
5,517
|
31 Diciembre 2013, 19:47 pm
por #Aitor
|
|
|
The Big Bang Theory - Sheldon debe elegir entre una PS4 o una Xbox One (ESPAÑOL)
Foro Libre
|
Meta
|
8
|
3,884
|
9 Septiembre 2014, 03:15 am
por engel lex
|
|
|
El error de Pablo Igesias se convierte en la web House Water Watch Cooper
Noticias
|
wolfbcn
|
0
|
1,187
|
8 Diciembre 2015, 13:31 pm
por wolfbcn
|
|