Please ignore secret bonuses. Secret tests do NOT award bonus. Max hw grade is 30+2 bonus efficiency

Do you need help?

HW2 Recupero - grosso problema con i test

Z
Zenno.Neagu (360 points)
2 4 5
in HW2 by (360 points)
closed by

Salve,

Sto implementando il HW2 Recupero, e nonostante quattro test passino,
gli altri quattro mi danno dei risultati completamente diversi.

Il primo esempio e' quello del test: test_init-1000_txs-10. 
Ho modificato il numero dei conti per rendere il test piu' leggibile, e dato i parametri seguenti:


givenTransactionLogs = [
[[1, 3], 0, 22, 17],
[[2, 3], 900, 11, 18],
[[3, 1], 600, 11, 13],
[[2, 3], 1100, 22, 20],
[[1, 3], 700, 11, 4],
[[2, 3], 1400, 11, 3],
[[1, 3], 1000, 11, 19],
[[2, 1], 500, 22, 17],
[[3, 1], 1900, 11, 7],
[[2, 1], 2800, 22, 11]
]
program.ex1(1, 2, 3, 11, 22, 1000, givenTransactionLogs)  

questo e' il comportamento interno di ogni transazione

0 GIVEN TRAN       
BEFORE           
AFTER TRAN       
AFTER PAYING DEBT
[[1, 3], 0, 22, 17]
([1000, 1000, 1000], [0, 0], [[0, 0, 0], [0, 0, 0]])
([1000.0, 1000, 1000], [0, 0.0], [[0, 0, 0], [0, 0, 0]])
([1000.0, 1000, 1000], [0, 0.0], [[0, 0, 0], [0, 0, 0]])
1 GIVEN TRAN       
BEFORE           
AFTER TRAN       
AFTER PAYING DEBT
[[2, 3], 900, 11, 18]
([1000.0, 1000, 1000], [0, 0.0], [[0, 0, 0], [0, 0, 0]])
([1000.0, 0.0, 1900], [100.0, 0.0], [[0, -62.0, 0], [0, 0, 0]])
([1000.0, 0.0, 1900], [100.0, 0.0], [[0, -62.0, 0], [0, 0, 0]])
2 GIVEN TRAN       
BEFORE           
AFTER TRAN       
AFTER PAYING DEBT
[[3, 1], 600, 11, 13]
([1000.0, 0.0, 1900], [100.0, 0.0], [[0, -62.0, 0], [0, 0, 0]])
([1600.0, 0.0, 1222.0], [178.0, 0.0], [[0, -62.0, 0], [0, 0, 0]])
([1600.0, 0.0, 1222.0], [178.0, 0.0], [[0, -62.0, 0], [0, 0, 0]])
3 GIVEN TRAN       
BEFORE           
AFTER TRAN       
AFTER PAYING DEBT
[[2, 3], 1100, 22, 20]
([1600.0, 0.0, 1222.0], [178.0, 0.0], [[0, -62.0, 0], [0, 0, 0]])
([1600.0, 0.0, 1222.0], [178.0, 0.0], [[0, -62.0, 0], [0, -220.0, 0]])
([1600.0, 0.0, 1222.0], [178.0, 0.0], [[0, -62.0, 0], [0, -220.0, 0]])
4 GIVEN TRAN       
BEFORE           
AFTER TRAN       
AFTER PAYING DEBT
[[1, 3], 700, 11, 4]
([1600.0, 0.0, 1222.0], [178.0, 0.0], [[0, -62.0, 0], [0, -220.0, 0]])
([872.0, 0.0, 1922.0], [206.0, 0.0], [[0, -62.0, 0], [0, -220.0, 0]])
([872.0, 0.0, 1922.0], [206.0, 0.0], [[0, -62.0, 0], [0, -220.0, 0]])
5 GIVEN TRAN       
BEFORE           
AFTER TRAN       
AFTER PAYING DEBT
[[2, 3], 1400, 11, 3]
([872.0, 0.0, 1922.0], [206.0, 0.0], [[0, -62.0, 0], [0, -220.0, 0]])
([872.0, 0.0, 1922.0], [206.0, 0.0], [[0, -104.0, 0], [0, -220.0, 0]])
([872.0, 0.0, 1922.0], [206.0, 0.0], [[0, -104.0, 0], [0, -220.0, 0]])
6 GIVEN TRAN       
BEFORE           
AFTER TRAN       
AFTER PAYING DEBT
[[1, 3], 1000, 11, 19]
([872.0, 0.0, 1922.0], [206.0, 0.0], [[0, -104.0, 0], [0, -220.0, 0]])
([682.0, 0.0, 1922.0], [396.0, 0.0], [[0, -104.0, 0], [0, -220.0, 0]])
([682.0, 0.0, 1922.0], [396.0, 0.0], [[0, -104.0, 0], [0, -220.0, 0]])
7 GIVEN TRAN       
BEFORE           
AFTER TRAN       
AFTER PAYING DEBT
[[2, 1], 500, 22, 17]
([682.0, 0.0, 1922.0], [396.0, 0.0], [[0, -104.0, 0], [0, -220.0, 0]])
([682.0, 0.0, 1922.0], [396.0, 0.0], [[0, -104.0, 0], [0, -305.0, 0]])
([682.0, 0.0, 1922.0], [396.0, 0.0], [[0, -104.0, 0], [0, -305.0, 0]])
8 GIVEN TRAN       
BEFORE           
AFTER TRAN       
AFTER PAYING DEBT
[[3, 1], 1900, 11, 7]
([682.0, 0.0, 1922.0], [396.0, 0.0], [[0, -104.0, 0], [0, -305.0, 0]])
([2582.0, 0.0, 0.0], [418.0, 0.0], [[0, -104.0, -111.0], [0, -305.0, 0]])
([2582.0, 0.0, 0.0], [418.0, 0.0], [[0, -104.0, -111.0], [0, -305.0, 0]])
9 GIVEN TRAN       
BEFORE           
AFTER TRAN       
AFTER PAYING DEBT
[[2, 1], 2800, 22, 11]
([2582.0, 0.0, 0.0], [418.0, 0.0], [[0, -104.0, -111.0], [0, -305.0, 0]])
([2582.0, 0.0, 0.0], [418.0, 0.0], [[0, -104.0, -111.0], [0, -613.0, 0]])
([2582.0, 0.0, 0.0], [418.0, 0.0], [[0, -104.0, -111.0], [0, -613.0, 0]])
RISULTATO FINALE MIO ([2582.0, 0.0, 0.0], [418.0, 0.0], [[0, -104.0, -111.0], [0, -613.0, 0]])
RISULTATO EXPECTED NEL TEST ([ 682, 183, 889], [ 633, 613 ], [ [ 0, 0, 0 ], [ 0, 0, 0 ] ])


Con questi dati, anche seguendo uno per uno, non riesco a capire come e' possible arrivare al risultato previsto nel test "test_init-1000_txs-10".
Ho problemi anche con altri tre test, ma spero che risolto questo si possa risolvere anche gli altri.

EDIT:
Nel frattempo guardando molto attentamente il test "test_init-1000_txs-10", sorgono altre domande:

Come e' possible che il conto numero 2 abbia ancora saldo e non abbia nessun debito,
considerato che non riceve mai danaro?


Qualche consiglio o suggerimento?
Grazie.
Zenno

185 views
closed

2 Answers

Best answer
ale70029 (1950 points)
7 14 28
by (2.0k points)
selected by
Allora questo poveretto ha solo transazioni esose, però devi calcolare che se non hai i soldi per pagare la transazione con l'aggiunta della tassa, paghi solo la tassa, se non puoi pagare neanche quella si crea il debito...

di seguito ti mostro il saldo del tipo ad ogni transazione, considerando che non ha mai i soldi per pagare sia la transazione che la tassa, ma ha sempre abbastanza soldi per pagare le tasse, così come molti di noi, paga solo tasse per rimanre con i suoi due spicci

1000
 # 900 + 162 -> -162 (può permettersi solo la tassa)
838
 # 1100 + 220 -> -220 (come prima)
618
 # 1400 + 42 -> -42 (come sempre)
576
 # 500 + 85 -> -85 (è il suo destino)
491
 # 2800 + 308 -> -308 (botta finale)
183
ale70029 (1950 points)
7 14 28
by (2.0k points)
edited by
Nel caso in cui gli arrivasse un altra transazione in cui non può pagare ne transazione + tassa, ne tassa da sola, si crea il debito solo della tassa...

ad esempio ho 150 sghei, devo pagare una transazione di 1000 con 200 sghei di tassa, la transazione è annullata ma dalla tassa non si sfugge, quindi avrò un debito di 50, perchè non potendo pagare la tassa intera, l'intermediario ti prosciuga il conto, e non dimentica che gli devi ancora dei soldi, quindi devi creare un caso in cui non hai abbastanza soldi per pagare ne la transazione ne la tassa, tutti i soldi che hai li dai all'intermediario, e quello che rimane diventa debito

nel momento in cui qualcuno si degnerà di accreditare i soldi a questa persona, prima di accreditarli devi controllare se ha dei debiti, pagare i debiti nelle modalità descritte nella traccia, e se poi avanza qualcosa gliela accrediti, altrimenti il suo conto rimane a 0 e snellisci i debiti
Z
Zenno.Neagu (360 points)
2 4 5
by (360 points)

@ale70029 
Ale, sei un mito!! Mi hai risparmiato altre ore ed ore di debug laugh

Mi mancava il pezzo "se non hai i soldi per pagare la transazione con l'aggiunta della tassa, paghi solo la tassa". 
Avevo frainteso il requisito ed ero troppo gentile: facevo passare la transazione se c'erano abbastanza soldi per coprire la transazione.

Grazie tantissimo, commissione compresa!

ale70029 (1950 points)
7 14 28
by (2.0k points)
Figurati! :)
AL1990 (28120 points)
3 6 142
by (28.1k points)
Hai tenuto conto del fatto che se non hai abbastanza soldi nel conto, la transazione viene annullata?
Z
Zenno.Neagu (360 points)
2 4 5
by (360 points)
In teoria si. Lo si puo' vedere dalle transazioni 3,4,7 e 9, dove il conto numero 2 cerca di inviare denaro avendo il conto a zero.

Giusto per confermare, pur non avendo soldi sufficienti, la commissione dovrebbe essere comunque addebitata?
AL1990 (28120 points)
3 6 142
by (28.1k points)
edited by
In quel caso la transazione viene annullata.

EDIT: sì, la commissione va comunque addebitata.
Z
Zenno.Neagu (360 points)
2 4 5
by (360 points)
edited by

Pero' a detta del testo dell'esercizio, la commissione va detratta anche nel caso in cui la transazione sia nulla:


E nel frattempo non riesco a capire bene le aspettative del test in questione:


Come e' possible che il conto numero 2 abbia ancora saldo e non abbia nessun debito,
considerato che non riceve mai danaro?

AL1990 (28120 points)
3 6 142
by (28.1k points)
Se i fondi per l'intera transazione compresa di commissione sono insufficienti, la transazione verso il destinatario è annullata ma la commissione pagata per intero.
Quindi nel tuo esempio, ad acn2 non va in porto nemmeno la prima transazione di 900, ma gli vengono comunque scalati 162 di commissione.