-3h -35m -10s

aoc-2017

#102

Bravo. Io invece mi metto ora sul 22, visto che mi sono fatto 1500 km guidando e sono appena arrivato a destinazione. Vincerà la stanchezza o la caparbietà? Questo spirola virus mi sembra simpatico.


#103

@the_devil_88, prova a fare un salto al day 22. Ti ricorderà qualche cosa che non troppo tempo fa hai scritto in Swift, anche se parliamo di un set di regole diverse.


#104

Eccomi!
Sbaglio o quello di oggi sembra facile facile? :confused:


#105

La parte uno si. La parte due necessita di ottimizzare l’assembly e per farlo bisogna capire quale calcolo sta facendo. Se ti serve ho scritto un visualizzatore dell’esecuzione con clock variabile in HTML.


#106

Come non detto, già mi sono impantanato.
Ho ripreso il vecchi codice ma sono riuscito a riprendere pure tutti gli errori che avevo fatto l’altra volta…
E adesso mi si è incasinato e non capisco neanche perché.

EDIT: Che incantanto, avevo lasciato un’istruzione scritta male… -_-

Non so cos’è ma lo acceto volentieri. :wink:


#107

Non che sia così incredibilmente utile in fondo (non ci si capisce una mazza comunque e tanto vale armarsi di carta e penna per decifrare l’asm) ma comunque sia…

Eccolo
data:text/html;charset=utf-8;base64,PCFET0NUWVBFIGh0bWw+CjwhLS0gRGF5IDIzOiBDb3Byb2Nlc3NvciBDb25mbGFncmF0aW9uIChwYXJ0IHR3bykgLS0+CjxodG1sPgoJPGhlYWQ+CgkJPG1ldGEgY2hhcnNldD0iVVRGLTgiPgoJCTx0aXRsZT5Bb0MyMDE3fDIzLzI8L3RpdGxlPgoJCTxzdHlsZT4KCQkJKgoJCQl7CgkJCQltYXJnaW46IDA7CgkJCQlwYWRkaW5nOiAwOwoJCQkJZm9udDogaW5oZXJpdDsKCQkJCWJveC1zaXppbmc6IGluaGVyaXQ7CgkJCX0KCQkJaHRtbAoJCQl7CgkJCQlmb250OiAxNnB4LzEuMjMgRW52eSBDb2RlIFIsIG1vbm9zcGFjZTsKCQkJCWJveC1zaXppbmc6IGJvcmRlci1ib3g7CgkJCX0KCQkJYm9keQoJCQl7CgkJCQlkaXNwbGF5OiBmbGV4OwoJCQl9CgkJCWJvZHkgPiAqCgkJCXsKCQkJCWZsZXg6IDE7CgkJCX0KCQkJdWwKCQkJewoJCQkJbGlzdC1zdHlsZTogbm9uZTsKCQkJfQoJCTwvc3R5bGU+Cgk8L2hlYWQ+Cgk8Ym9keT4KCQk8cHJlPjwvcHJlPgoJCTx1bD48L3VsPgoJCTxzY3JpcHQ+Cgpjb25zdCBwcmUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdwcmUnKQoKY29uc3QgcmVnaXN0ZXJzID0KewoJYTogMSwgLy8gZGVidWcgbW9kZSBzd2l0Y2gKCWI6IDAsCgljOiAwLAoJZDogMCwKCWU6IDAsCglmOiAwLAoJZzogMCwKCWg6IDAgIC8vIDw8LS0gd2hhdCBJIG5lZWQgdG8ga25vdy4uLgp9Cgpjb25zdCBhc20gPSBgCnNldCBiIDg0CnNldCBjIGIKam56IGEgMiAgICAgICAgICAg4pSA4pSA4pSA4pSA4pSQCmpueiAxIDUgICAgICAgICAgIOKUgOKUgOKUkCDilIIKbXVsIGIgMTAwICAgICAgICAg4oaQ4pSA4pS84pSA4pSYCnN1YiBiIC0xMDAwMDAgICAgICAg4pSCCnNldCBjIGIgICAgICAgICAgICAg4pSCCnN1YiBjIC0xNzAwMCAgICAgICAg4pSCCnNldCBmIDEgICAgICAgICAgIOKGkOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUkApzZXQgZCAyICAgICAgICAgICAgICAgICAgIOKUggpzZXQgZSAyICAgICAgICAgICDihpDilIDilIDilIDilIDilIDilJAg4pSCCnNldCBnIGQgICAgICAgICAgIOKGkOKUgOKUgOKUgOKUkCDilIIg4pSCCm11bCBnIGUgICAgICAgICAgICAgICDilIIg4pSCIOKUggpzdWIgZyBiICAgICAgICAgICAgICAg4pSCIOKUgiDilIIKam56IGcgMiAgICAgICAgICAg4pSA4pSA4pSQIOKUgiDilIIg4pSCCnNldCBmIDAgICAgICAgICAgICAg4pSCIOKUgiDilIIg4pSCCnN1YiBlIC0xICAgICAgICAgIOKGkOKUgOKUmCDilIIg4pSCIOKUggpzZXQgZyBlICAgICAgICAgICAgICAg4pSCIOKUgiDilIIKc3ViIGcgYiAgICAgICAgICAgICAgIOKUgiDilIIg4pSCCmpueiBnIC04ICAgICAgICAgIOKUgOKUgOKUgOKUgOKUmCDilIIg4pSCCnN1YiBkIC0xICAgICAgICAgICAgICAgIOKUgiDilIIKc2V0IGcgZCAgICAgICAgICAgICAgICAg4pSCIOKUggpzdWIgZyBiICAgICAgICAgICAgICAgICDilIIg4pSCCmpueiBnIC0xMyAgICAgICAgIOKUgOKUgOKUgOKUgOKUgOKUgOKUmCDilIIKam56IGYgMiAgICAgICAgICAg4pSA4pSA4pSQICAgICDilIIKc3ViIGggLTEgICAgICAgICAgICDilIIgICAgIOKUggpzZXQgZyBiICAgICAgICAgICDihpDilIDilJggICAgIOKUggpzdWIgZyBjICAgICAgICAgICAgICAgICAgIOKUggpqbnogZyAyICAgICAgICAgICDilIDilIDilJAgICAgIOKUggpqbnogMSAzICAgICAgICAgICDilIDilIDilLzilIDilJAgICDilIIKc3ViIGIgLTE3ICAgICAgICAg4oaQ4pSA4pSYIOKUgiAgIOKUggpqbnogMSAtMjMgICAgICAgICDilIDilIDilIDilIDilLzilIDilIDilIDilJgKICAgICAgICAgICAgICAgICAg4oaQ4pSA4pSA4pSA4pSYCmAKLnRyaW0oKQouc3BsaXQoJ1xuJykKLm1hcCggaXQgPT4gaXQucmVwbGFjZSgvW+KUgOKUkOKUmOKUguKGkOKUvOKUtF0vZywnJykudHJpbSgpLnNwbGl0KCcgJykubWFwKHg9PmlzTmFOKHgpP3g6K3gpKQphc20ucG9wKCkKCmNvbnN0IHN0eWxlID0gZG9jdW1lbnQuaGVhZC5xdWVyeVNlbGVjdG9yKCdzdHlsZScpCmNvbnN0IHVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigndWwnKQphc20uZm9yRWFjaCgoIGl0LCBpICkgPT4gewoJbGV0IGxpID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGknKQoJbGkuaW5uZXJIVE1MID0gaXQuam9pbignICcpCgl1bC5hcHBlbmRDaGlsZCggbGkgKQoKCXN0eWxlLmlubmVySFRNTCArPSBgdWxbZGF0YS1wYz0iJHtpfSJdID4gbGk6bnRoLWNoaWxkKCR7aSsxfSl7IGJhY2tncm91bmQ6IGdvbGQ7IH1cbmAKfSkKCmxldCBkdCA9IDEwMDAKCmNvbnN0IHNsZWVwID0gbXMgPT4gbmV3IFByb21pc2UoIHIgPT4gc2V0VGltZW91dCggciwgbXMgKSkKCmFzeW5jIGZ1bmN0aW9uIHJ1biAoIGFzbSwgcmVnaXN0ZXJzICkKewoJbGV0IHBjID0gMAoJbGV0IGNsb2NrcyA9IDAKCWxldCBtdWxzID0gMAoKCW1haW46Cgl3aGlsZSAoIHBjID49IDAgJiYgcGMgPCBhc20ubGVuZ3RoICkKCXsKCQlsZXQgWyBvcGNvZGUsIFgsIFkgXSA9IGFzbVsgcGMgXQoKCQljbG9ja3MgKz0gMQoKCQlsZXQganVtcCA9IDEKCgkJc3dpdGNoICggb3Bjb2RlICkKCQl7CgkJCS8vIHNldCBYIFkgc2V0cyByZWdpc3RlciBYIHRvIHRoZSB2YWx1ZSBvZiBZLgoJCQljYXNlICdzZXQnOgoJCQlyZWdpc3RlcnNbWF0gPSB0eXBlb2YgWSA9PT0gIm51bWJlciIgPyBZIDogcmVnaXN0ZXJzW1ldCgkJCWJyZWFrCgoJCQkvLyBzdWIgWCBZIGRlY3JlYXNlcyByZWdpc3RlciBYIGJ5IHRoZSB2YWx1ZSBvZiBZLgoJCQljYXNlICdzdWInOgoJCQlyZWdpc3RlcnNbWF0gLT0gdHlwZW9mIFkgPT09ICJudW1iZXIiID8gWSA6IHJlZ2lzdGVyc1tZXQoJCQlicmVhawoKCQkJLy8gbXVsIFggWSBzZXRzIHJlZ2lzdGVyIFggdG8gdGhlIHJlc3VsdCBvZiBtdWx0aXBseWluZyB0aGUgdmFsdWUgY29udGFpbmVkIGluIHJlZ2lzdGVyIFggYnkgdGhlIHZhbHVlIG9mIFkuCgkJCWNhc2UgJ211bCc6CgkJCXJlZ2lzdGVyc1tYXSAqPSB0eXBlb2YgWSA9PT0gIm51bWJlciIgPyBZIDogcmVnaXN0ZXJzW1ldCgkJCW11bHMgKz0gMQoJCQlicmVhawoKCQkJLy8gam56IFggWSBqdW1wcyB3aXRoIGFuIG9mZnNldCBvZiB0aGUgdmFsdWUgb2YgWSwgYnV0IG9ubHkgaWYgdGhlIHZhbHVlIG9mIFggaXMgbm90IHplcm8uIChBbiBvZmZzZXQgb2YgMiBza2lwcyB0aGUgbmV4dCBpbnN0cnVjdGlvbiwgYW4gb2Zmc2V0IG9mIC0xIGp1bXBzIHRvIHRoZSBwcmV2aW91cyBpbnN0cnVjdGlvbiwgYW5kIHNvIG9uLikKCQkJY2FzZSAnam56JzoKCQkJewoJCQkJbGV0IHggPSB0eXBlb2YgWCA9PT0gIm51bWJlciIgPyBYIDogcmVnaXN0ZXJzW1hdCgkJCQlsZXQgeSA9IHR5cGVvZiBZID09PSAibnVtYmVyIiA/IFkgOiByZWdpc3RlcnNbWV0KCQkJCWlmICggeCAhPT0gMCApCgkJCQkJanVtcCA9IHkKCQkJfQoJCQlicmVhawoJCX0KCgkJZGVidWcoIHBjLCBjbG9ja3MsIHJlZ2lzdGVycywgYXNtLCBtdWxzICkKCQlhd2FpdCBzbGVlcChkdCkKCgkJcGMgKz0ganVtcAoJfQp9CgpmdW5jdGlvbiBkZWJ1ZyAoIHBjLCBjbG9ja3MsIHJlZ2lzdGVycywgYXNtLCBtdWxzICkKewoJcHJlLmlubmVySFRNTCA9IGAKCXJlZ2lzdGVyczoKCWE6ICR7cmVnaXN0ZXJzLmF9CgliOiAke3JlZ2lzdGVycy5ifQoJYzogJHtyZWdpc3RlcnMuY30KCWQ6ICR7cmVnaXN0ZXJzLmR9CgllOiAke3JlZ2lzdGVycy5lfQoJZjogJHtyZWdpc3RlcnMuZn0KCWc6ICR7cmVnaXN0ZXJzLmd9CgloOiAke3JlZ2lzdGVycy5ofQoJcGM6ICR7cGN9CgljbG9ja3M6ICR7Y2xvY2tzfQoJZHQ6ICR7ZHR9CgltdWxzOiAke211bHN9CglgCgkucmVwbGFjZSggL15ccyovZ20sICcnICkKCgl1bC5zZXRBdHRyaWJ1dGUoJ2RhdGEtcGMnLCBwYyApCn0KCnJ1bihhc20sIHJlZ2lzdGVycykKCgp3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciggImtleWRvd24iLCBlID0+CnsKCXN3aXRjaCAoIGUua2V5ICkKCXsKCQljYXNlICJBcnJvd0Rvd24iOgoJCWR0IC09IGUuc2hpZnRLZXkgPyAxMDAgOiAxCgkJaWYgKCBkdCA8IDAgKQoJCQlkdCA9IDAKCQlicmVhawoKCQljYXNlICJBcnJvd1VwIjoKCQlkdCArPSBlLnNoaWZ0S2V5ID8gMTAwIDogMQoJCWlmICggZHQgPiAxMDAwMCApCgkJCWR0ID0gMTAwMDAKCQlicmVhawoJfQp9KQoKCQk8L3NjcmlwdD4KCTwvYm9keT4KPC9odG1sPg==

Con le frecce UP/DOWN della tastiera cambi il clock della virtual machine di 1 ms per clock. Tenendo premuto anche shift lo step è di 100ms.


#108

Dimenticavo di specificarlo, ma il codice richiede un browser che supporti https://caniuse.com/#feat=async-functions ovvero oramai praticamente tutti.


#109

Bene, a questo punto la caccia è aperta: cosa diavolo sta facendo?


#110

Veramente ho fatto una prova veloce e non mi funziona… Poi però sono dovuto uscire quindi ho abbandonato il tutto.
Quando rientro se non è troppo tardi faccio qualche altra prova, altrimenti va a finire a domani o addirittura a chissà quando…


#111

Se mi posti gli errori che ti scrive in console verifico.


#112

Ho provato sia su Firefox che su Safari, mi danno errori diversi ma guardando il codice non ho capito perché li dia.
Per quanto riguarda il quesito direi che questo mi sta facendo impazzire.
A parte il fatto che inizialmente avevo capito che volesse sapere quale valore dovesse avere h per far terminare il programma, anche ora che ho capito (spero bene) che invece vuole sapere con che valore termina h, non trovo una strada. Ho provato a fare anche 100.000.000 operazioni per vedere come cambiano i registri, ma a prima vista non ho notato niente di particolare.
Se può esser d’aiuto, l’unica nota è che tra il mio e il tuo puzzle l’unica differenza è nel valore impostato a b sulla prima istruzione.


#113

Mmmm. Diversi errori sia su Firefox che Safari? Sono curioso di vederli. Quando hai un attimo postali. Credo comunque che sia un problema tra encoding e decoding base64. Ho messo il tutto in un codepen che però a volte non gradisce molto i loop asincroni considerandoli infiniti (cosa che sono, ma potrebbe anche farsi gli affari suoi).
Comunque hai capito bene. Vuole sapere, quando il programma termina, quale valore resta nel registro h. Cosa sta facendo il programma? Per ora credo che sia qualche cosa che ha a che fare con i fattori primi, ma non capisco l’algoritmo. Ieri non ho avuto abbastanza freschezza per mettermi a decompilare il programma in un linguaggio a più alto livello. Pertanto visto che ho già fatto il day-24 stamattina alle 7, lo faccio ora…


#114

:joy: Finalmente sono riuscito a capire. L’aver decompilato l’assembly mi ha decisamente aiutato a capire meglio l’operazione. Non scrivo quest’ultima, ma lascio in dono il corrispondente codice c-like.

asm-to-pseudocode
a = 1
b = 0
c = 0
d = 0
e = 0
f = 0
g = 0
h = 0

b = 84
c = b

if ( a !== 0 )
{
	b *= 100
	b += 100000
	c = b
	c += 17000
}

loop_a:
do
{
	f = 1
	d = 2
	
	loop_b:
	do
	{
		e = 2

		loop_c:
		do
		{
			g = d
			g *= e
			g -= b

			if ( g === 0 )
			{
				f = 0
			}

			e += 1
			g = e
			g -= b
		}
		while ( g !== 0 )

		d += 1
		g = d
		g -= b
	}
	while ( g !== 0 )

	if ( f === 0 )
	{
		h += 1
	}

	g = b
	g -= c

	if ( g === 0 )
	{
		// END
		break loop_a
	}
	b += 17
}
while ( true )

#115

Complimenti, io torno operativo adesso. Ieri notte c’ho ragionato un po’ prima di andare a letto e ho sparato qualche risposta dopo aver fatto qualche calcolo con la calcolatrice, ma non ne ho azzeccata una e mi sono ritrovato che dovevo aspettare 10 minuti prima del successivo tentativo.
Ho dato un’occhiata al tuo pseudocode e più o meno mi pare che avevo già intuito gran parte del giro, sono che non ho ancora capito qual è la risposta.
Ora vedo se continuare qui o intanto provare a risolvere quello di oggi che sembra più fattibile…


#116

Quello di oggi non è facilissimo. Una nuova manifestazione dei tuoi amici: i grafi.
Ora ho un appuntamento diverso: https://handmadehero.org.
Poi domani spero di riuscire fare tutto entro le 8 di mattina, perché dopo sarà complicato trovare il tempo tra gli sconosciuti di famiglia con cui dovrò passare la giornata.
Intanto, auguri.


#117

Facile facile oggi.


#118

Sapevo che sarebbe finita così, queste feste mi stanno uccidendo… :scream:
Sono costantemente lontano da un computer, quindi non so quando riuscirò a terminare il gioco.
Comunque complimenti a te varg per il risultato, anche se era scontato :stuck_out_tongue_winking_eye:, io da parte mi posso solo dire che fino a qui mi sono divertito e neanche speravo di arrivarci.
Come proposito cercherò di ultimare questi mancanti e provare con quelli degli anni passati che ancora mi mancano. Giusto per tenermi allenato.


#119

Io direi che sei andato alla stragrande. E’ stata una edizione divertente e varia (senza l’insistenza sugli algoritmi di path-finding che hanno martoriato il 2016). Al livello di difficoltà l’ho trovata un po’ più semplice rispetto agli altri anni, ma è un fattore molto personale.


#120

Eric comunque ci ha preparato ulteriore lavoro da fare, una volta finito tutto il resto (topaz su reddit è il nostro eroe). https://www.reddit.com/r/adventofcode/comments/7m9mg8/all_years_all_days_solve_them_within_the_time/


#121

In super ritardo arrivo!
Oggi sono da solo in ufficio, vediamo se riesco ad andare avanti :stuck_out_tongue_closed_eyes: