-3h -35m -10s

aoc-2017

#61

Comunque è geniale a pensarci bene. La sequenza di “mosse” non presenta cicli. Il risultato della loro applicazione si.


#62

Già, penso che l’autore s’è smazzato non poco a creare tutti questi indovinelli.


#63

Ammetto di essere in crisi… :disappointed:


#64

:fireworks: :tada: :confetti_ball:
Wow! Ce l’ho fatta!
C’ho ragionato un bel pezzo e ho fatto un sacco di tentativi inutili, ma alla fine ci sono arrivato.
Era molto più stupido di quello che pensavo.
Bisogna semplicemente ricominciare a pensare la cosa dall’inizio.
Se serve un consiglio… :wink:


#65

Ma siamo sincronizzati o cosa?


#66

Noooo, anche tu? E mi sa che mi hai pure fregato di qualche secondo…


#67

Haha. Considera che oggi mi sono visto tutta la terza serie di Mr Robot… pensando ovviamente che un array di 50 milioni di elementi sarebbe stato un po’ troppo anche avendo un bel po’ di ram. Ma non serve nessun array…


#68

Se interpreto bene i dati in realtà no: sei stato più veloce tu per entrambe le stelle oggi. La seconda con uno scarto di 2 secondi.

{  
   "owner_id":"103700",
   "members":{  
      "290489":{  
         "id":"290489",
         "stars":16,
         "last_star_ts":"2017-12-17T05:09:41-0500",
         "name":"Eugenio Dorigati",
         "global_score":0,
         "local_score":16,
         "completion_day_level":{  
            "9":{  
               "1":{  
                  "get_star_ts":"2017-12-15T09:54:28-0500"
               },
               "2":{  
                  "get_star_ts":"2017-12-15T10:29:04-0500"
               }
            },
            "2":{  
               "1":{  
                  "get_star_ts":"2017-12-12T17:16:31-0500"
               },
               "2":{  
                  "get_star_ts":"2017-12-13T19:57:11-0500"
               }
            },
            "4":{  
               "1":{  
                  "get_star_ts":"2017-12-12T19:20:02-0500"
               }
            },
            "5":{  
               "1":{  
                  "get_star_ts":"2017-12-13T03:57:27-0500"
               },
               "2":{  
                  "get_star_ts":"2017-12-14T08:04:26-0500"
               }
            },
            "6":{  
               "1":{  
                  "get_star_ts":"2017-12-14T09:24:28-0500"
               },
               "2":{  
                  "get_star_ts":"2017-12-14T16:50:20-0500"
               }
            },
            "8":{  
               "2":{  
                  "get_star_ts":"2017-12-15T08:30:11-0500"
               },
               "1":{  
                  "get_star_ts":"2017-12-15T08:23:34-0500"
               }
            },
            "7":{  
               "1":{  
                  "get_star_ts":"2017-12-14T10:32:56-0500"
               }
            },
            "1":{  
               "2":{  
                  "get_star_ts":"2017-12-13T19:32:55-0500"
               },
               "1":{  
                  "get_star_ts":"2017-12-12T14:22:50-0500"
               }
            },
            "10":{  
               "1":{  
                  "get_star_ts":"2017-12-17T05:09:41-0500"
               }
            },
            "3":{  
               "1":{  
                  "get_star_ts":"2017-12-12T19:06:58-0500"
               }
            }
         }
      },
      "103700":{  
         "local_score":92,
         "completion_day_level":{  
            "12":{  
               "2":{  
                  "get_star_ts":"2017-12-12T06:09:36-0500"
               },
               "1":{  
                  "get_star_ts":"2017-12-12T05:54:21-0500"
               }
            },
            "1":{  
               "1":{  
                  "get_star_ts":"2017-12-01T04:19:58-0500"
               },
               "2":{  
                  "get_star_ts":"2017-12-01T04:24:30-0500"
               }
            },
            "3":{  
               "1":{  
                  "get_star_ts":"2017-12-03T07:25:27-0500"
               },
               "2":{  
                  "get_star_ts":"2017-12-03T08:12:12-0500"
               }
            },
            "11":{  
               "1":{  
                  "get_star_ts":"2017-12-11T08:49:16-0500"
               },
               "2":{  
                  "get_star_ts":"2017-12-11T09:05:16-0500"
               }
            },
            "6":{  
               "1":{  
                  "get_star_ts":"2017-12-06T05:31:17-0500"
               },
               "2":{  
                  "get_star_ts":"2017-12-06T05:35:17-0500"
               }
            },
            "13":{  
               "2":{  
                  "get_star_ts":"2017-12-13T07:50:31-0500"
               },
               "1":{  
                  "get_star_ts":"2017-12-13T07:36:24-0500"
               }
            },
            "14":{  
               "1":{  
                  "get_star_ts":"2017-12-14T07:43:18-0500"
               },
               "2":{  
                  "get_star_ts":"2017-12-14T08:24:28-0500"
               }
            },
            "7":{  
               "1":{  
                  "get_star_ts":"2017-12-07T07:45:28-0500"
               },
               "2":{  
                  "get_star_ts":"2017-12-07T08:41:45-0500"
               }
            },
            "15":{  
               "2":{  
                  "get_star_ts":"2017-12-15T05:03:59-0500"
               },
               "1":{  
                  "get_star_ts":"2017-12-15T04:53:34-0500"
               }
            },
            "10":{  
               "2":{  
                  "get_star_ts":"2017-12-10T06:58:04-0500"
               },
               "1":{  
                  "get_star_ts":"2017-12-10T06:32:45-0500"
               }
            },
            "17":{  
               "2":{  
                  "get_star_ts":"2017-12-17T15:15:20-0500"
               },
               "1":{  
                  "get_star_ts":"2017-12-17T10:03:33-0500"
               }
            },
            "9":{  
               "1":{  
                  "get_star_ts":"2017-12-09T00:12:42-0500"
               },
               "2":{  
                  "get_star_ts":"2017-12-09T00:16:42-0500"
               }
            },
            "2":{  
               "2":{  
                  "get_star_ts":"2017-12-02T06:37:33-0500"
               },
               "1":{  
                  "get_star_ts":"2017-12-02T06:14:41-0500"
               }
            },
            "16":{  
               "2":{  
                  "get_star_ts":"2017-12-16T09:14:33-0500"
               },
               "1":{  
                  "get_star_ts":"2017-12-16T06:40:28-0500"
               }
            },
            "4":{  
               "1":{  
                  "get_star_ts":"2017-12-04T05:18:27-0500"
               },
               "2":{  
                  "get_star_ts":"2017-12-04T05:20:41-0500"
               }
            },
            "8":{  
               "2":{  
                  "get_star_ts":"2017-12-08T08:25:21-0500"
               },
               "1":{  
                  "get_star_ts":"2017-12-08T08:13:35-0500"
               }
            },
            "5":{  
               "1":{  
                  "get_star_ts":"2017-12-05T03:49:21-0500"
               },
               "2":{  
                  "get_star_ts":"2017-12-05T03:54:11-0500"
               }
            }
         },
         "global_score":0,
         "name":"mikrosystheme",
         "last_star_ts":"2017-12-17T15:15:20-0500",
         "stars":34,
         "id":"103700"
      },
      "103557":{  
         "local_score":78,
         "completion_day_level":{  
            "7":{  
               "2":{  
                  "get_star_ts":"2017-12-08T18:33:21-0500"
               },
               "1":{  
                  "get_star_ts":"2017-12-07T06:08:35-0500"
               }
            },
            "15":{  
               "1":{  
                  "get_star_ts":"2017-12-15T05:09:28-0500"
               },
               "2":{  
                  "get_star_ts":"2017-12-15T06:01:20-0500"
               }
            },
            "10":{  
               "2":{  
                  "get_star_ts":"2017-12-10T08:55:31-0500"
               },
               "1":{  
                  "get_star_ts":"2017-12-10T08:18:58-0500"
               }
            },
            "14":{  
               "1":{  
                  "get_star_ts":"2017-12-14T07:24:48-0500"
               },
               "2":{  
                  "get_star_ts":"2017-12-14T10:16:51-0500"
               }
            },
            "4":{  
               "2":{  
                  "get_star_ts":"2017-12-04T16:03:07-0500"
               },
               "1":{  
                  "get_star_ts":"2017-12-04T15:41:45-0500"
               }
            },
            "5":{  
               "1":{  
                  "get_star_ts":"2017-12-05T04:46:34-0500"
               },
               "2":{  
                  "get_star_ts":"2017-12-05T05:01:27-0500"
               }
            },
            "8":{  
               "1":{  
                  "get_star_ts":"2017-12-08T18:22:01-0500"
               },
               "2":{  
                  "get_star_ts":"2017-12-08T18:24:19-0500"
               }
            },
            "17":{  
               "1":{  
                  "get_star_ts":"2017-12-17T07:15:37-0500"
               },
               "2":{  
                  "get_star_ts":"2017-12-17T15:13:07-0500"
               }
            },
            "9":{  
               "2":{  
                  "get_star_ts":"2017-12-09T09:27:55-0500"
               },
               "1":{  
                  "get_star_ts":"2017-12-09T09:23:20-0500"
               }
            },
            "2":{  
               "2":{  
                  "get_star_ts":"2017-12-02T16:05:00-0500"
               },
               "1":{  
                  "get_star_ts":"2017-12-02T15:31:00-0500"
               }
            },
            "16":{  
               "1":{  
                  "get_star_ts":"2017-12-16T04:14:28-0500"
               },
               "2":{  
                  "get_star_ts":"2017-12-16T07:06:09-0500"
               }
            },
            "3":{  
               "1":{  
                  "get_star_ts":"2017-12-04T13:09:03-0500"
               },
               "2":{  
                  "get_star_ts":"2017-12-04T13:21:12-0500"
               }
            },
            "1":{  
               "1":{  
                  "get_star_ts":"2017-12-01T08:06:36-0500"
               },
               "2":{  
                  "get_star_ts":"2017-12-01T08:18:46-0500"
               }
            },
            "12":{  
               "2":{  
                  "get_star_ts":"2017-12-12T13:11:33-0500"
               },
               "1":{  
                  "get_star_ts":"2017-12-12T13:02:43-0500"
               }
            },
            "11":{  
               "2":{  
                  "get_star_ts":"2017-12-11T05:52:08-0500"
               },
               "1":{  
                  "get_star_ts":"2017-12-11T05:30:50-0500"
               }
            },
            "6":{  
               "1":{  
                  "get_star_ts":"2017-12-06T08:41:50-0500"
               },
               "2":{  
                  "get_star_ts":"2017-12-06T08:54:19-0500"
               }
            },
            "13":{  
               "2":{  
                  "get_star_ts":"2017-12-13T05:14:00-0500"
               },
               "1":{  
                  "get_star_ts":"2017-12-13T03:55:56-0500"
               }
            }
         },
         "global_score":0,
         "name":null,
         "last_star_ts":"2017-12-17T15:13:07-0500",
         "stars":34,
         "id":"103557"
      }
   },
   "event":"2017"
}

#69

Già, io me ne sono accorto solo mettendo mano alla seconda parte…
Nella prima da solito stolto ho usato l’array, ma il peggio è che dovendo anche oggi andare a pranzo ho fatto come ieri: ho scritto 50000000, ho lanciato e me ne sono sbattuto lasciando il Mac a sventolare. :sweat:
Il problema è che anche una volta eliminato l’array, poi mi sono incasinato da solo le idee per riuscire a trovare qual era il primo elemento di un array che non avevo… :confused: ma come detto la cosa era alquanto stupida, ho dovuto semplicemente ripensare al quesito da zero e la soluzione è stata lampante.
Qualche volta mi meraviglio di come riesca a complicare le cose più semplici.

Già, anzi, se non sbaglio sono ben 2 minuti. :laughing:


#70

Eric ha cercato di metterci sulla buona strada: la “good news”…

Direi che hai proprio ragione. Se riesci a mantenere il passo fino a natale puoi ancora vincere con uno scarto di 2 punti.


#71

Io inizio ora…


#72

Io la prima parte l’ho risolta a lavoro, ora sono a casa, ma non ho voglia di riscrivere tutto… quando riprendo vedo se trovo il tempo per sistemare la seconda. Sempre che ci riesca…


#73

Ehi varg, non sarà mica che mi aspetti? :unamused:
Mi pare strano che hai già risolto il primo e per il secondo ci metti così tanto, non è da te…
Spero che sia un caso, non accetto favoritismi. :stuck_out_tongue_winking_eye:


#74

Nessun favoritismo. Devo aver preso una strada contorta e credo di avere un bug da qualche parte perché i programmi non terminano in tempo rapido. Ora devo andare a portare la macchina dal meccanico e poi cerco di capire dove sto sbagliando. Per curiosità, quanto tempo ci mette la tua soluzione per la seconda parte a terminare?


#75

Non ne ho idea, per il momento sembra procedere all’infinito.
Ho provato a fare un po’ di logging ma sembra tutto ok, salvo il fatto che non finisca mai… :frowning:
Appena riesco vedo di riguardarlo meglio.


#76

Ah! Ma allora siamo sulla stessa barca! Avevo capito che avevi completato entrambe le stelle. Considerando che il più lento tra i veloci ci ha messo una quarantina di minuti potrebbe essere un processo lento… però il più veloce ci ha messo 4 minuti, incluso il tempo per scrivere il codice… pertanto ci deve sfuggire qualche cosa.
Al momento io sono messo così, e sarei tentato di interrompere tutto e riguardare meglio dopo:


#77

Detta in un altro modo, credo che bisogna leggere per bene l’assembly ed identificare una serie di operazioni da ottimizzare. D’altro canto una cosa simile è accaduta anche gli anni scorsi, ma in quel caso si trattava di implementare l’opcode per la moltiplicazione, che altrimenti faceva con addizioni in loop lentissime. Questa volta moltiplicazione già c’è.
Guardando i valori nei registri, vedo che:

  • i è un contatore che decrementa da 128 circa a 0 per poi ripartire.
  • a e b sono stabili a 34
  • f è 1 mentre i decrementa, poi diventa 0 e torna subito ad 1
  • p è un grande mistero perché cambia troppo velocemente per leggerlo.
    Devo rallentare il clock per cercare di leggere meglio l’operazione che sta provando a fare. Ma dopo altrimenti il meccanico chiude.

#78

Avevo effettivamente un baco nell’implementazione. Ora i programmi sembrano leggermente più sani ma continuo a non capire cosa stiano facendo. Dopo più o meno lo stesso numero di cicli di prima la situazione è questa:


#79

:smiling_imp: fatto.
Ora per capire cosa diavolo stessero facendo…
@MacMomo, sono convinto al 99.7% che anche tu hai lo stesso baco che avevo io nell’implementazione. Rileggiti per bene la specifica per l’opcode jgz


#81

Ulteriore hint (questa volta credo che tutti abbiamo lo stesso input, tranne un piccolo particolare che non dovrebbe incidere troppo): i miei 2 programmi terminano andando in deadlock dopo circa 75000 cicli, dove per ciclo intendo una istruzione eseguita.