CloudCoder Python feladatgyujtemeny/pasziansz
A MathWikiből
A lap korábbi változatát látod, amilyen Csirke (vitalap | szerkesztései) 2015. szeptember 11., 04:51-kor történt szerkesztése után volt.
Akkor van baj, ha valamelyik színből több van mint a másikból, de a legértékesebb lap nem ebből a színből van, mert akkor a másik színnel kezdjük a tevést, és így eggyel kevesebbet tudunk tenni ebből a színből, mint lehetne. Egy lehetséges megoldás, hogy miután leraktam az eredeti módszerrel minden kártyát amit lehetett, ha a maradék kártyák más színűek mint az első kártya, akkor még az első kártya elé tehetek belőlük egyet, a legértékesebbet. Ebben a megoldásban a return előtti 3 sor a módosítás:
# Ez a függvény megmondja a legjobb kirakható # sor értékét. def pasziansz(kez): # Ha egy kártyánk sincs, 0 pont a max. if len(kez) == 0: return 0 # Csökkenö sorrendbe tesszük a kártyákat. kez.sort(reverse=True) # Az els? kártya a legértékesebb. elso = kez[0] elozo = kez[0] pont = elozo[0] del kez[0] # Mindig megkeressük a legértékesebb lapot, # ami lehet a következö, mert más szinü. # Ezt addig csináljuk amig találunk ilyent talalt = True while talalt: talalt = False # Csökken? sorrendben végigmegyünk a kártyákon for i in range(len(kez)): lap = kez[i] # Ha a kártya különbözö szinü, betesszük, # és kitöröljük a kártyák listájáról if fekete(elozo) != fekete(lap): talalt = True elozo = lap pont += lap[0] del kez[i] break # Ha a maradek kartyakbol egy meg a sor elejere # teheto, tegyuk oda. if len(kez) != 0: if fekete(elso) != fekete(kez[0]): pont += kez[0][0] return pont