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

Do you need help?

[Hw2 di recupero] Ordine delle transazioni di denaro

ManoleLorenzo (4090 points)
1 5 10
in HW2 di recupero by (4.1k points)

Salve,

avrei una domanda sull’Hw 2 di recupero, più precisamente sulle transazioni tra i vari utenti e intermediari:

Nel caso in cui un utente voglia trasferire una somma x di denaro ad un altro utente, e di questa somma che vuole trasferire si può fare la transazione perché dispone dei soldi necessari per farla...tuttavia però la somma che dispone il mittente non è sufficiente anche per pagare la commissione all’intermediario.

Quindi la mia domanda è: chi ha la precedenza?

- Il trasferimento di denaro all’altro utente, e poi l’accredito del debito verso il corrispettivo intermediario; 

oppure

- ha precedenza il pagamento verso l’intermediario, e quindi la transazione non sarà effettuata perché avendo pagato l’intermediario non dispone più dei soldi necessari per effettuare la transazione verso l’utente?

Lo chiedo perché ho fatto i conti a mano, e se accredito prima la somma di denaro all’intermediario, i conti tornano (in parte) come nel risultato aspettato (in parte perché appunto ho il dubbio sopra descritto, e quindi può darsi che io abbia sbagliato a fare alcune transazioni). Se invece faccio prima la transazione e poi il debito, non mi tornano i conti. (Può sempre essere che io abbia sbagliato qualche passaggio)

(Faccio riferimento al test_init-1000, in particolare al caso dell’utente 5775 che trasferisce 1900Ħ all’utente 2694, con l’intermediario 76, che riceve il 7%...che appunto è soltanto uno dei possibili casi in cui questo succede, e che quindi volendo potrebbe riaccadere che si presenti questo "problema" anche in futuro )

Spero di essere stato abbastanza chiaro.

Vi ringrazio.

2 Answers

r
r.bani (1250 points)
0 0 3
by (1.3k points)
Ciao, da quello che ho potuto comprendere dalla lettura del testo, se il mittente, al quale viene addebitata anche la commissione, non dispone del capitale per la transazione, ma ha soldi a sufficienza per la commissione (impossibile ovviamente il viceversa) la transazione viene annullata dall'intermediario che (volpone) si prende comunque i soldi della commissione e vengono sottratti dal capitale del mittente.

Qualora il mittente non abbia soldi per pagare tutta la commissione, si azzera il capitale, quello che c'era si passa sul conto dell'intermediario e ciò che avanza a debito finisce a negativo nel registro del debito dell'intermediario che sta svolgendo la transazione (e che l'ha annullata).

Questo però è quello che ho capito io, se qualcuno mi smentisce maglio, anche perché alcuni test che sto svolgendo sono incongruenti con questa logica.

Aggiungo a questa discussione un dubbio personale che non è chiaro:

Se io destinatario ho debiti con l'intermediario A e l'intermediario B, e attualmente sto ricevendo in una transazione del denaro a sufficienza sia per pagare entrambi gli intermediari, riceverò una somma che è al netto del debito che ho con entrambi gli intermediari e poi agirò sul registro del debito degli intermediari per cancellarlo. Qualora però questa somma non fosse sufficiente per sanare i debiti? Cioè inizialmente pensavo che il debito venisse preso solo dal registro dell'intermediario che sta svolgendo la transazione, ma dal risultato di alcuni test, l'azzeramento del debito è trasversale su tutti gli intermediari, quindi appunto se i soldi non sono sufficienti per tutti che si fa? Si scala fino a quando si può scalare (ciclando) indipendentemente da chi ha fatto la transazione?

Ecco questo è veramente una roba che mi fa saltare tutti gli ultimi test e sto lottando con sta roba.

Spero di aver comunque risposto al tuo quesito e che qualcuno sani i miei/nostri dubbi! Grazie
f
fabio.chiarini (2280 points)
0 0 7
by (2.3k points)

"Se si accumula un debito nei confronti di due intermediari, i fondi vanno per primo all'intermediario che ha il credito più elevato e il resto va all'altro intermediario. Se lo stesso importo è dovuto a entrambi gli intermediari, il rimborso è equamente diviso".

Quindi devi saldare per primo il debito verso l'intermediario che ha il debito maggiore tra i due (a meno che non siano pari).

Esempio: intermediario1 ha debito 100 e intermediario2 ha debito di 50. Mettiamo che il giocatore in questione abbia appena ricevuto 60. In tal caso trasferirà i 60 per intero all'intermediario1 perché è quello che in quel momento ha il maggiore debito tra i due. 

ManoleLorenzo (4090 points)
1 5 10
by (4.1k points)
Ti ringrazio per la risposta. Magari sì, se qualcuno che l'ha già risolto, può dircelo con certezza, sarebbe davvero utile.

Oggi ho fatto questa domanda anche al professor Sterbini durante la lezione che ha tenuto questa mattina, che mi ha detto che non avendolo fatto lui l'Hw, non era certo della risposta, e mi ha invitato a rifarla qui.
f
fabio.chiarini (2280 points)
0 0 7
by (2.3k points)

Io l'homework l'ho svolto con la logica che ti ho descritto e passo tutti i test wink

by (2.8k points)

Anche io wink 

Confermo quanto scritto da @r.bani prima e chiarito da @fabio.chiarini poi.

r
r.bani (1250 points)
0 0 3
by (1.3k points)
ecco, questa è la chiave di volta
ManoleLorenzo (4090 points)
1 5 10
by (4.1k points)
Vi ringrazio per tutti i chiarimenti che mi avete fornito, davvero molto utili. Grazie ancora!
f
fabio.chiarini (2280 points)
0 0 7
by (2.3k points)
Ha la precedenza il pagamento verso l'intermediario. Quindi se ad esempio la transazione è pari a 100, la commissione per l'intermediario è di 10 e sul conto del giocatore ci sono solo 90, 10 verranno traferiti all'intermediario e la transazione tra i due giocatori non sarà eseguita. Sul conto del giocatore resteranno 90-10=80.

Da istruzioni dell'homework: "Si noti che se i fondi nel conto del mittente sono insufficienti, la transazione viene dichiarata non valida dall'intermediario. L'intermediario riceverà comunque la commissione dal mittente, se ci sono abbastanza Ħ nel conto del mittente."
ManoleLorenzo (4090 points)
1 5 10
by (4.1k points)
mentre non so se hai visto il caso di cui parlavo io, ovvero quello in cui l'utente 3 deve trasferire 1900Ħ all'utente 1...l'utente 3, da quel che risulta dai miei calcoli, dovrebbe avere nel suo conto 1922Ħ. Il costo della transazione ammonterebbe a più di quel che l'utente 3 può "permettersi", e così facendo avrebbe i soldi per fare la transazione, ma non quelli che per pagare l'intermediario. Mentre addebitando prima il costo dell'intermediario, i conti dovrebbero tornare, in teoria.

quindi sostanzialmente, se un utente dovrà trasferire 250Ħ ad un altro utente x, con un costo di 40Ħ, ma il mittente ha a disposizione soltanto 260Ħ, pagherà prima l'intermediario, non facendo quindi la transazione, oppure farà la transazione, andando ad indebitarsi con l'intermediario?
f
fabio.chiarini (2280 points)
0 0 7
by (2.3k points)
Pagherà i 40Ħ all'intermediario e la transazione non verrà eseguita. Il saldo del mittente diventerà quindi pari a 220Ħ.
ManoleLorenzo (4090 points)
1 5 10
by (4.1k points)
ti ringrazio per il chiarimento
r
r.bani (1250 points)
0 0 3
by (1.3k points)
come ti avevo scritto, se ha i soldi per pagare la commissione ma non l'intera transazione, la transazione salta (quindi il destinatario non becca niente) ma l'intermediario viene comunque pagato con la sua percentuale.