|
Autor |
Python Befehl gesucht (Knobel-Problemchen) |
|
Bekell
Aktiv  Dabei seit: 05.09.2008 Mitteilungen: 3168
 | Themenstart: 2023-03-20
|
Kleines Programmier KnobelProblemchen:
Eingabe: Eine von 5 möglichen ungeraden Endziffer:
Ausgabe: zwei andere ungerade Endziffern, und zwar genau die beiden Paare, die addiert eine Zahl mit derselben Endziffer ergeben, wie das Doppelte der gegebenen Zahl.
Beispiel: Eingabe = 1, deren Doppeltes ist 2. Gesucht sind jetzt von den anderen beiden möglichen Paaren je eine Ziffer.
Die einzig möglichen Paare sind: 9 u. 3, sowie 5 u. 7.
Die möglichen Ausgaben wären (Er soll von jedem Paar nur eine Zahl angeben!):
1. [1,9,5]
2. [1,9,7]
3. [1,3,5]
4. [1,3,7]
\sourceon Python
\numberson
from itertools import cycle
def def_endziffer(x):
num=0
num = x%10
return num
zif1=0
zif2=0
nr=0
Eingabe=1
ez = cycle([1,3,5,7,9])
Ausgabe=[]
Ausgabe.append(Eingabe)
Doppeltes=def_endziffer(Eingabe+Eingabe)
while len(Ausgabe)<4:
zif1=next(ez)
nr+=1
zif2=next(ez)
print(nr,Doppeltes,zif1,zif2,"Su",zif1+zif2,next(ez),Ausgabe)
if Doppeltes==def_endziffer(zif1+zif2):
Ausgabe.append(zif2)
if nr==20:
break
\sourceoff
Ich habe dieses Programm zusammengeschustert, aber es hat das Problem, dass im Cycle die 5 Ziffern in fester Reihenfolge sind. Sie müssten durcheinander gewirbelt werden, dann käme noch die letzte Möglichkeit 9 und3 dazu. Gibt es so einen Befehl?
Er soll aus der Menge der 5 Zahlen solange eine Randomzahl geben, bis die Paarung gefunden wird, die eine Summe mit Endzahl 2 hat, und deren Summanden aber noch nicht in Ausgabe enthalten sind.
|
Profil
|
DerEinfaeltige
Senior  Dabei seit: 11.02.2015 Mitteilungen: 3281
 | Beitrag No.1, eingetragen 2023-03-20
|
\sourceon Python
\numberson
def generate_pairs(remainder:int, base:int=10, summands:list[int]=[1,3,5,7,9]):
return {(a,b) for a in summands for b in summands if a < b and (a+b) % base == remainder}
def bekell_triples(remainder:int, base:int=10, summands:list[int]=[1,3,5,7,9]):
pairs = generate_pairs(remainder, base, summands)
pairs_of_pairs = [(p1, p2) for p1 in pairs for p2 in pairs if p1 < p2]
return [[(remainder, a, b) for a in p1 for b in p2] for p1,p2 in pairs_of_pairs]
print("Bekellian Arbitrary Solution:")
for cipher in [0,2,4,6,8]:
print(bekell_triples(cipher))
print("General Decimal Solution:")
for cipher in range(10):
print(bekell_triples(cipher,10,list(range(10))))
\sourceoff
Bekellian Arbitrary Solution:
[[(0, 1, 3), (0, 1, 7), (0, 9, 3), (0, 9, 7)]]
[[(2, 3, 5), (2, 3, 7), (2, 9, 5), (2, 9, 7)]]
[[(4, 1, 5), (4, 1, 9), (4, 3, 5), (4, 3, 9)]]
[[(6, 1, 7), (6, 1, 9), (6, 5, 7), (6, 5, 9)]]
[[(8, 1, 3), (8, 1, 5), (8, 7, 3), (8, 7, 5)]]
General Decimal Solution:
[[(0, 3, 4), (0, 3, 6), (0, 7, 4), (0, 7, 6)], [(0, 1, 3), (0, 1, 7), (0, 9, 3), (0, 9, 7)], [(0, 1, 4), (0, 1, 6), (0, 9, 4), (0, 9, 6)], [(0, 1, 2), (0, 1, 8), (0, 9, 2), (0, 9, 8)], [(0, 2, 3), (0, 2, 7), (0, 8, 3), (0, 8, 7)], [(0, 2, 4), (0, 2, 6), (0, 8, 4), (0, 8, 6)]]
[[(1, 0, 3), (1, 0, 8), (1, 1, 3), (1, 1, 8)], [(1, 0, 2), (1, 0, 9), (1, 1, 2), (1, 1, 9)], [(1, 0, 5), (1, 0, 6), (1, 1, 5), (1, 1, 6)], [(1, 0, 4), (1, 0, 7), (1, 1, 4), (1, 1, 7)], [(1, 3, 5), (1, 3, 6), (1, 8, 5), (1, 8, 6)], [(1, 3, 4), (1, 3, 7), (1, 8, 4), (1, 8, 7)], [(1, 2, 3), (1, 2, 8), (1, 9, 3), (1, 9, 8)], [(1, 2, 5), (1, 2, 6), (1, 9, 5), (1, 9, 6)], [(1, 2, 4), (1, 2, 7), (1, 9, 4), (1, 9, 7)], [(1, 4, 5), (1, 4, 6), (1, 7, 5), (1, 7, 6)]]
[[(2, 0, 5), (2, 0, 7), (2, 2, 5), (2, 2, 7)], [(2, 0, 3), (2, 0, 9), (2, 2, 3), (2, 2, 9)], [(2, 0, 4), (2, 0, 8), (2, 2, 4), (2, 2, 8)], [(2, 3, 5), (2, 3, 7), (2, 9, 5), (2, 9, 7)], [(2, 3, 4), (2, 3, 8), (2, 9, 4), (2, 9, 8)], [(2, 4, 5), (2, 4, 7), (2, 8, 5), (2, 8, 7)]]
[[(3, 1, 5), (3, 1, 8), (3, 2, 5), (3, 2, 8)], [(3, 1, 4), (3, 1, 9), (3, 2, 4), (3, 2, 9)], [(3, 1, 6), (3, 1, 7), (3, 2, 6), (3, 2, 7)], [(3, 5, 6), (3, 5, 7), (3, 8, 6), (3, 8, 7)], [(3, 4, 5), (3, 4, 8), (3, 9, 5), (3, 9, 8)], [(3, 4, 6), (3, 4, 7), (3, 9, 6), (3, 9, 7)], [(3, 0, 1), (3, 0, 2), (3, 3, 1), (3, 3, 2)], [(3, 0, 5), (3, 0, 8), (3, 3, 5), (3, 3, 8)], [(3, 0, 4), (3, 0, 9), (3, 3, 4), (3, 3, 9)], [(3, 0, 6), (3, 0, 7), (3, 3, 6), (3, 3, 7)]]
[[(4, 1, 6), (4, 1, 8), (4, 3, 6), (4, 3, 8)], [(4, 1, 5), (4, 1, 9), (4, 3, 5), (4, 3, 9)], [(4, 5, 6), (4, 5, 8), (4, 9, 6), (4, 9, 8)], [(4, 0, 1), (4, 0, 3), (4, 4, 1), (4, 4, 3)], [(4, 0, 6), (4, 0, 8), (4, 4, 6), (4, 4, 8)], [(4, 0, 5), (4, 0, 9), (4, 4, 5), (4, 4, 9)]]
[[(5, 1, 2), (5, 1, 3), (5, 4, 2), (5, 4, 3)], [(5, 1, 6), (5, 1, 9), (5, 4, 6), (5, 4, 9)], [(5, 1, 7), (5, 1, 8), (5, 4, 7), (5, 4, 8)], [(5, 2, 6), (5, 2, 9), (5, 3, 6), (5, 3, 9)], [(5, 2, 7), (5, 2, 8), (5, 3, 7), (5, 3, 8)], [(5, 0, 1), (5, 0, 4), (5, 5, 1), (5, 5, 4)], [(5, 0, 2), (5, 0, 3), (5, 5, 2), (5, 5, 3)], [(5, 0, 6), (5, 0, 9), (5, 5, 6), (5, 5, 9)], [(5, 0, 7), (5, 0, 8), (5, 5, 7), (5, 5, 8)], [(5, 6, 7), (5, 6, 8), (5, 9, 7), (5, 9, 8)]]
[[(6, 1, 7), (6, 1, 9), (6, 5, 7), (6, 5, 9)], [(6, 1, 2), (6, 1, 4), (6, 5, 2), (6, 5, 4)], [(6, 2, 7), (6, 2, 9), (6, 4, 7), (6, 4, 9)], [(6, 0, 7), (6, 0, 9), (6, 6, 7), (6, 6, 9)], [(6, 0, 1), (6, 0, 5), (6, 6, 1), (6, 6, 5)], [(6, 0, 2), (6, 0, 4), (6, 6, 2), (6, 6, 4)]]
[[(7, 0, 3), (7, 0, 4), (7, 7, 3), (7, 7, 4)], [(7, 0, 8), (7, 0, 9), (7, 7, 8), (7, 7, 9)], [(7, 0, 1), (7, 0, 6), (7, 7, 1), (7, 7, 6)], [(7, 0, 2), (7, 0, 5), (7, 7, 2), (7, 7, 5)], [(7, 3, 8), (7, 3, 9), (7, 4, 8), (7, 4, 9)], [(7, 1, 3), (7, 1, 4), (7, 6, 3), (7, 6, 4)], [(7, 1, 8), (7, 1, 9), (7, 6, 8), (7, 6, 9)], [(7, 1, 2), (7, 1, 5), (7, 6, 2), (7, 6, 5)], [(7, 2, 3), (7, 2, 4), (7, 5, 3), (7, 5, 4)], [(7, 2, 8), (7, 2, 9), (7, 5, 8), (7, 5, 9)]]
[[(8, 0, 2), (8, 0, 6), (8, 8, 2), (8, 8, 6)], [(8, 0, 3), (8, 0, 5), (8, 8, 3), (8, 8, 5)], [(8, 0, 1), (8, 0, 7), (8, 8, 1), (8, 8, 7)], [(8, 2, 3), (8, 2, 5), (8, 6, 3), (8, 6, 5)], [(8, 1, 2), (8, 1, 6), (8, 7, 2), (8, 7, 6)], [(8, 1, 3), (8, 1, 5), (8, 7, 3), (8, 7, 5)]]
[[(9, 2, 4), (9, 2, 5), (9, 7, 4), (9, 7, 5)], [(9, 2, 3), (9, 2, 6), (9, 7, 3), (9, 7, 6)], [(9, 1, 2), (9, 1, 7), (9, 8, 2), (9, 8, 7)], [(9, 1, 4), (9, 1, 5), (9, 8, 4), (9, 8, 5)], [(9, 1, 3), (9, 1, 6), (9, 8, 3), (9, 8, 6)], [(9, 0, 2), (9, 0, 7), (9, 9, 2), (9, 9, 7)], [(9, 0, 1), (9, 0, 8), (9, 9, 1), (9, 9, 8)], [(9, 0, 4), (9, 0, 5), (9, 9, 4), (9, 9, 5)], [(9, 0, 3), (9, 0, 6), (9, 9, 3), (9, 9, 6)], [(9, 3, 4), (9, 3, 5), (9, 6, 4), (9, 6, 5)]]
|
Profil
|
Bekell
Aktiv  Dabei seit: 05.09.2008 Mitteilungen: 3168
 | Beitrag No.2, vom Themenstarter, eingetragen 2023-03-20
|
Danke Einfältiger, Deine Lösung gibt aber gerade Zahlen an der 1. Stelle aus. Ich habe zwischendurch das Problem damit gelöst:
\sourceon Python
\numberson
from random import *
zif1=zif2=nr=z=0
Eingabe=1
Ausgabe=[1]
def endziffer(x):
num=0
num = x%10
return num
def zufall(x):
z=randint(0, 10)
if z%2==0:
z=z+1
if z>10:
z=z-10
return z
Doppeltes=endziffer(Eingabe+Eingabe)
while len(Ausgabe)<4:
zif1=zufall(1)
zif2=zufall(1)
if Doppeltes==endziffer(zif1+zif2) and zif1 not in Ausgabe and zif2 not in Ausgabe:
Ausgabe.append(zif2)
if len(Ausgabe)==3:
print("Ausgabe",Ausgabe)
break
\sourceoff
Trotzdem vielen Dank. Mir fiel auf: Dein Programm ist umfangreicher als meines???
|
Profil
|
Bekell hat die Antworten auf ihre/seine Frage gesehen. | Bekell wird per Mail über neue Antworten informiert. |
|