Vai al contenuto

Excel Esports: come risolvere il caso Tetris

    COME_RISOLVERE_CASO_EXCEL_ESPORTS_MICROSOFT_EXCEL_WORLD_CHAMPIONSHIP_TETRIS_MARCOFILOCAMO_SEQUENZA_PARTITE

    Potresti aver sentito parlare dei Mondiali di Excel, ovvero della competizione chiamata Microsoft Excel World Championship. Utilizzare Excel è diventato un esport sempre più popolare e c'è un'intera trafila di eventi da superare per poi arrivare alla finale mondiale, che si tiene a Las Vegas a Dicembre.

    La competizione è altissima e a sfidarsi sono appassionati con qualità in Excel fuori dal comune, che devono risolvere dei casi specifici parecchio diversi da quelli che vedresti in azienda. Per darti un esempio, ci sono stati casi ispirati a videogiochi come World of Warcraft, a come si piegano gli origami e uno, quello di questa guida, a Tetris!

    COME_RISOLVERE_CASO_EXCEL_ESPORTS_MICROSOFT_EXCEL_WORLD_CHAMPIONSHIP_TETRIS_MARCOFILOCAMO_INIZIO

    Questa guida nasce con l'intento di spiegare quanto possano essere interessanti, oltre che complessi, questi casi e fornire, a chi ha la curiosità di cimentarsi, qualche trucco utile da poi riutilizzare non solo in ambito competitivo, ma anche in azienda.

    NB: per seguire al meglio la guida, ti consiglio di scaricare il file dal sito dedicato!

    LORENZO_FOTI_EXCEL_WORLD_CHAMPIONSHIP_MARCOFILOCAMO

    Ho coinvolto, per la realizzazione di questa guida, l'amico Lorenzo Foti (che ringrazio) - un vero pro player nel mondo degli esports legati a Excel, che è arrivato per ben due volte a partecipare alla finale mondiale. Se clicchi sulla thumbnail, potrai vedere la velocità di Lorenzo nel risolvere questo caso e, spero, imparare qualche nuovo trucco!

    Lorenzo ci offre anche la sua interpretazione del caso, che è un po' datato (2021) ma comunque rispecchia alcuni costrutti tipici della competizione:

    Per me un classico caso di gioco a turni in cui simulare stati successivi con parametri che evolvono nel tempo (in questo caso livelli e punti). Approccio che consiglierei: definire le informazioni chiave necessarie per ogni stato e i trigger per evolvere a quello successivo e, se l'approccio è basato su creazione di modello tramite colonne successive e iterazioni di stato sulle righe, trovare giusto trade off tra spezzare la logica fino ad avere singoli passaggi molto semplici e il non proliferare di troppe colonne. Poi 1 row = 1 state!

    Vediamolo insieme.

    Le istruzioni del caso Tetris

    Vediamo le istruzioni per risolvere il caso, che ho tradotto dall'inglese:

    • Stai giocando a Tetris (versione classica NES), ma il tuo gioco è parzialmente danneggiato e non fornisce il punteggio di ogni partita. Tuttavia, ti mostra la sequenza del numero di righe eliminate in ciascun evento di punteggio (1, 2, 3 o 4 righe ) e il Livello di Partenza di ogni partita. Questo ti permette di calcolare autonomamente il punteggio utilizzando Excel!
    • COMPITO: calcola il punteggio per ciascuna delle 30 partite in base al Livello di Partenza e alla Sequenza di Eliminazione delle righe fornite (30 punti per partita).
    • Domanda bonus (100 punti): ipotizzando di avere una partita che inizia al livello 9 e che il totale di righe eliminate sia 289, qual è il minimo numero di eliminazioni di 4 righe necessarie per generare un punteggio di almeno 1.000.000 punti nella stessa partita?

    Passiamo ora a un tema chiave, il cambio di livelli durante la partita:

    • Una partita può iniziare a qualsiasi livello da 0 a 9 inclusi. Il livello massimo raggiunto in questo test sarà il livello 28. Il livello "N" viene raggiunto non appena il totale delle righe eliminate è almeno pari a 10×N.
    • Una partita che inizia al livello 0 raggiungerà il livello 1 a 10 righe, il livello 2 a 20 righe, e così via.
      Una partita che inizia al livello 5 rimarrà al livello 5 finché non saranno eliminate 60 righe, momento in cui passerà al livello 6, poi al livello 7 a 70 righe , e così via.
    • I punti per l’eliminazione delle righe si basano sul livello di gioco dopo l’eliminazione delle righe. In ogni momento, il livello di gioco è pari a (Totale Righe Eliminate) / 10, arrotondato per difetto, a meno che il Livello di Partenza non sia superiore a questo valore; in tal caso, il gioco rimane al Livello di Partenza finché il Totale delle Righe Eliminate non lo raggiunge.

    Il tempo per risolvere questo test? Abbiamo massimo 10 minuti! Personalmente non sono riuscito a risolverlo in un orizzonte temporale così ristretto, ma puoi fare una prova anche tu, prima di leggere la soluzione!

    Nota per la guida - una volta trovata la soluzione corretta, ho poi rivisto il procedimento per offrire qualche spunto in più a chi volesse cimentarsi - quindi non considerare ciò che vedrai nella guida come la prima soluzione, bensì come una rivisitazione di quanto realizzato per trovare velocemente il risultato finale. Utilizzo anche funzioni che non erano disponibili nel 2021 e che, probabilmente, semplificano alcuni dei passaggi.

    In soldoni - se hai 10 minuti, trovare la soluzione con formule ottimizzate e una struttura lineare come quella che troverai qui sulla guida è decisamente difficile. Spero, però, che le combinazioni che utilizzerò ti possano essere utili in futuro.

    Come risolvere il caso Tetris: gli step necessari

    Chiaramente ci serve un piano, per risolvere questo caso. Vediamo insieme, per sommi capi, le informazioni viste fino a questo momento.

    Abbiamo, come struttura:

    • La possibilità di avere massimo 29 livelli per partita, da 0 a 28
    • Ognuno dei livelli ha sequenze con 4 combinazioni possibili (1 riga completata, 2, 3 oppure 4 righe completate)
    • C'è livello variabile di partenza, per ognuna delle 30 partite, che va considerato per il punteggio
    • Il punteggio è variabile a seconda della combinazione e del livello
    • Abbiamo anche una domanda bonus da risolvere, se ci avanza del tempo

    Vediamo ora gli step necessari per risolvere il caso. Iniziamo dai punteggi:

    • Creare una lista con i numeri dei livelli, ripetuta quattro volte per ciascuno dei livelli. Questo perchè dovremo avere il livello 0 con poi 1,2,3,4 nella colonna accanto, il livello 1 con 1,2,3,4 e così via
    • Creare una lista con 1,2,3,4 ripetuta per trenta volte. Il motivo è lo stesso del punto precedente - ognuno dei livelli potrebbe avere combinazioni diverse di soluzione e dobbiamo considerarle tutte
    • Un punteggio specifico per ognuno dei livelli e per le righe corrispondenti. Quindi dobbiamo sapere quanto punteggio faremo nel livello 0 con 4 righe completate, oppure nel livello 22 con 3 righe completate e così via. Per ognuna delle righe della matrice precedente (livelli e righe), ci serve un valore dedicato
    • Risolviamo la domanda bonus

    Partiamo!

    Come risolvere il caso Tetris: la struttura di partenza

    Nel foglio CASE abbiamo le informazioni che ci servono per continuare, ma non c'è una tabella. Il passaggio immediato è creare una tabella (CTRL+T oppure Inserisci > Tabella) chiamata TBL che riassumerà quattro colonne:

    • Game #: la partita di riferimento
    • Score: il punteggio finale
    • Start Level: il livello di partenza
    • Sequence of Line Clears: le sequenze di righe eliminate per singola partita

    Useremo TBL come origine per tutti i nostri calcoli, in modo da semplificarci la vita nella parte successiva di soluzione.

    Sistemata la tabella di partenza, scegliamo un singolo caso (la partita 9), che riassumeremo così:

    • In una cella, il numero della partita
    • In un'altra cella, il riferimento alle righe completate durante la partita
    • In un'altra cella ancora, il livello di partenza
    • In una cella finale, il punteggio generato da quella specifica partita (che è il valore finale del nostro procedimento)

    Parlando della singola partita, in modo da trovare una regola che funzioni:

    • Dobbiamo esplodere le singole righe in modo che Excel possa gestirle singolarmente, poichè una stringa come 2,3,2,1,3 non è particolarmente comoda
    • Ci può tornare molto utile avere una progressione del numero di righe combinate, in modo da capire poi il livello corrispondente. Se parto da 0 e elimino 12 righe in totale, sarò nel livello 1, e così via
    • Avendo un livello diverso di partenza, questo valore va considerato per delimitare correttamente il nostro risultato. Se avessimo come livello di partenza 4 e riuscissimo a eliminare 42 righe, allora saremmo al livello 5 e così via
    • Possiamo ora raggruppare le singole combinazioni di livello+righe per conteggiarle e velocizzare la parte di calcolo di punteggi, ad esempio scoprendo che nel livello 2 abbiamo avuto per 4 volte 1 riga completata, mentre nel livello 12 abbiamo avuto per 2 volte 4 righe completate e così via
    • Colleghiamo le combinazioni fra livello e righe con il punteggio per ognuna, in modo da poterli sommare
    • Sommiamo i valori finali e troviamo la soluzione per un singolo caso

    Per scalare la soluzione su tutti i casi:

    • Inseriamo la soluzione per il caso 4 in una cella specifica
    • Creiamo una sequenza dal livello 1 al livello 30
    • Scaliamo la soluzione funzionante a tutti i casi

    Come vedi, anche a livello logico, non è per niente scontato arrivare a risolvere un caso simile.

    Detto ciò, partiamo!

    Come risolvere il caso Tetris: le informazioni della partita

    Prima di tutto, dobbiamo segnalare che la cella G2 è la nostra cella prescelta per definire la partita che ci interessa.

    Per recuperare la sequenza di righe della partita che vogliamo utilizzare come test, dobbiamo procedere così:

    =INDICE(TBL[Sequence of Line Clears]; G2)

    La formula prende la sequenza di righe (1,2,3,4) della partita indicata in G2 dalla tabella TBL. Per noi, sarà la 4. INDICE non fa altro che orientarsi sulla tabella e, essendo ordinata da 1 a 30, prende la quarta riga. Se non è ordinata, ci possono essere altri modi per arrivare allo stesso risultato

    La procedura è pressochè identica per il livello di partenza:

    =INDICE(TBL[Start Level]; G2)

    Ci serve il livello di partenza perchè influisce sul punteggio, dato che a livelli superiori corrispondono dei punteggi più rilevanti. Nel Tetris reale, infatti, il gioco si velocizza e diventa più complesso completare molte righe insieme.

    Il punteggio finale lo vedremo poi.

    Come risolvere il caso Tetris: la tabella con livelli, righe e punteggi

    COME_RISOLVERE_CASO_EXCEL_ESPORTS_MICROSOFT_EXCEL_WORLD_CHAMPIONSHIP_TETRIS_MARCOFILOCAMO_PARTENZA_DEFINIZIONE_LIVELLO

    Ci sono diversi modi per realizzare questa tabella, ma idealmente vogliamo creare un array con tre diversi componenti:

    • La sequenza di livelli, ripetuta 4 volte
    • L'elenco di righe eliminate in un colpo solo (1, 2, 3, 4) , ripetuta 30 volte
    • Il punteggio per ciascuna delle combinazioni fra livelli e righe eliminate

    Prima di tutto realizziamo la nostra sequenza di livelli, dove dobbiamo avere per quattro volte lo stesso numero per ciascun livello:

    =QUOZIENTE(SEQUENZA(120;;0); 4)

    La sequenza di 120, partendo da 0, ci garantisce dei numeri da 0 a 119. Se dividiamo per 4, troveremo poi il quoziente:

    • 0/4 il quoziente è 0. Il resto è 0
    • 1/4 il quoziente è 0. Il resto è 1
    • 2/4 il quoziente è 0. Il resto è 2
    • 3/4 il quoziente è 0, con resto 3. A questo punto abbiamo generato i 4 valori dell'array per 0
    • 4/4 il quoziente diventa 1
    • 5/4 il quoziente rimane 1 e lo farà fino al 7 (i 4 valori relativi a 1)
    • 8/4 il quoziente diventa 2 e continuiamo così fino a 119

    Se pensi a una divisione con un resto, in sostanza il quoziente è il numero intero corrispondente - se facciamo 5/4, avremo 1 con il resto 1. A noi il resto non interessa, quindi ci teniamo 1.

    Passiamo ora alle righe, dove ci serve una sequenza {1\2\3\4} ripetuta per 30 volte:

    =RESTO(SEQUENZA(120;;0); 4) + 1

    Stavolta lavoriamo con i resti, utilizzando la funzione RESTO. Se guardi infatti i risultati dello step precedente, abbiamo un resto che per 0 diventa 0,1,2,3 - aggiungendo un 1 finale, avremo 1,2,3,4 proprio come desideriamo.

    In questo modo possiamo abbinare il singolo livello con le righe corrispondenti.

    Non ci resta che il punteggio:

    =LET(
    moltiplicatore; B8# + 1;
    righe; C8#;
    punteggio;
    SE(righe=1; 40*moltiplicatore;
    SE(righe=2; 100*moltiplicatore;
    SE(righe=3; 300*moltiplicatore;
    SE(righe=4; 1200*moltiplicatore))));
    punteggio)

    La formula calcola i punti per ogni coppia (livello N, righe L) con le regole NES Tetris che erano indicate nel caso:

    • 1 righe → 40 × (N+1)
    • 2 righe → 100 × (N+1)
    • 3 righe → 300 × (N+1)
    • 4 righe → 1200 × (N+1)

    LET ci aiuta a scrivere una formula più leggibile, dove il moltiplicatore non è altro che il livello N con l'aggiunta di 1.

    Una nota a margine su questa parte - Lorenzo, che come dicevo è un vero esperto nelle competizioni di Excel, dice:

    La creazione della tabella full con i punteggi (1,2,3,4 per ogni livello) si può saltare! Calcoli punti on the fly con (n+1)*k dove k dipende solo dal numero di righe di quello specifico step.

    Qui il punto cruciale è che per le competizioni è fondamentale la velocità, più che una struttura pulitissima e ordinata. La soluzione sarà la stessa, ma Lorenzo, come hai visto dal video sopra, ci mette una frazione del tempo ad arrivare allo stesso risultato.

    Passiamo ora ad analizzare proprio il nostro caso - la partita #9.

    Come risolvere il caso Tetris: punteggio della singola partita

    COME_RISOLVERE_CASO_EXCEL_ESPORTS_MICROSOFT_EXCEL_WORLD_CHAMPIONSHIP_TETRIS_MARCOFILOCAMO_SINGOLA_PARTITA

    =A.COL(DIVIDI.TESTO( G3 ; ",")) * 1

    DIVIDI.TESTO spezza la sequenza (es. 2,3,4,…) in singoli numeri, che possono essere gestiti molto più facilmente. In questo caso li avremmo tutti sulla stessa riga, ma con A.COL li inseriamo invece in una colonna. Dato che stiamo estraendo dei testi, moltiplicando tutto per 1 avremo invece dei numeri

    Passiamo ora a calcolare la sommatoria progressiva, che vogliamo realizzare in maniera dinamica dato che non sappiamo quante righe siano state eliminate e a che livello siamo arrivati nella singola partita:

    COME_RISOLVERE_CASO_EXCEL_ESPORTS_MICROSOFT_EXCEL_WORLD_CHAMPIONSHIP_TETRIS_MARCOFILOCAMO_RIGHE_PROGRESSIVE

    =SCAN(0; F8#; LAMBDA(a; b; a+b))

    SCAN è una funzione che in genere spaventa un po', ma qui ci sta dicendo che:

    • 0 sono le righe di partenza
    • F8# è l'array che ci interessa, corrispondente alle righe della partita per singolo gruppo di eliminazione
    • Vogliamo sommarle, progressivamente, per determinare poi il livello

    Andando più nello specifico, SCAN crea una somma sequenziale perchè:

    • Parte da 0, che è il primo a. Il primo b sarà il valore in F8, quindi 2. Il primo risultato a+b = 0 + 2 = 2
    • Nella riga seguente, il nuovo a è 2. Il nuovo B (F9) è 3. Il risultato sarà quindi a+b = 2 + 3 = 5
    • Così via, fino all'ultimo valore della nostra sequenza

    In questo caso un altro concetto utile è la cosiddetta ETA Reduction, che corrisponde a una semplificazione in alcune funzioni specifiche in Excel considerate Lambda Helper, quali SCAN. In sostanza, se definiamo di avere a e b per poi sommarli, queste informazioni sono ridondanti perchè potremmo semplicemente dire di sommare i valori - al minimo, dobbiamo avere due valori per far funzionare SCAN.

    La formula precedente corrisponde quindi a:

    =SCAN(0;F8#;SOMMA)

    A questo punto abbiamo tutte le righe eliminate per singola partita. Ricordiamo però la logica precedente per il salto di livello, cioè "Una partita che inizia al livello 0 raggiungerà il livello 1 a 10 righe, il livello 2 a 20 righe , e così via.
    Una partita che inizia al livello 5 rimarrà al livello 5 finché non saranno eliminate 60 righe, momento in cui passerà al livello 6, poi al livello 7 a 70 righe, e così via
    ." Quindi possiamo dire che c'è un collegamento fra il livello e il numero di righe eliminate, utilizzando come divisore il 10.

    Ricordiamo che qui non stiamo parlando ancora del livello di partenza, facciamo come se partissimo da 0. In particolare la progressione dei livelli possiamo farla corrispondere a questa logica:

    COME_RISOLVERE_CASO_EXCEL_ESPORTS_MICROSOFT_EXCEL_WORLD_CHAMPIONSHIP_TETRIS_MARCOFILOCAMO_PROGRESSIONE_LIVELLI

    =ARROTONDA.PER.DIF( G8# / 10; 0 )

    Stiamo arrotondando per difetto il risultato del nostro calcolo precedente - ad esempio, se abbiamo eliminato 8 righe, saremo ancora al livello 0 perchè 8/10 fa 0,8, inferiore a 1. Se invece sono 23 righe, saremo al livello 2 e così via.

    Ci manca ancora l'inserimento del livello iniziale della singola partita. Se cominciamo da 2, passeremo al livello 3 solo dopo aver completato 20 righe. Se cominciamo da 4, passeremo al livello 5 sono dopo averne completate 40 e così via.

    Vediamo due possibilità, prima quella semplice:

    =SE(H8#<G4;G4;H8#)

    In H8 abbiamo calcolato il livello se partissimo da 0. Se il livello dell'array in H8 è inferiore a G4, che è il livello di partenza, vogliamo il livello di partenza. Questo perchè se partiamo dal livello 2, il livello non potrà essere inferiore a 2. Se invece il livello progressivo è superiore al valore del livello iniziale, allora inseriremo il livello progressivo perchè ormai abbiamo scollinato il nostro valore di partenza e quindi riprendiamo la logica dei livelli precedenti.

    Una alternativa sarebbe questa, per spiegare i singoli step:

    COME_RISOLVERE_CASO_EXCEL_ESPORTS_MICROSOFT_EXCEL_WORLD_CHAMPIONSHIP_TETRIS_MARCOFILOCAMO_CONTROLLO_LIVELLI

    =LET(lvl_progressivo;H8#;
    lvl_iniziale;G4;
    lvl_partita;SE(lvl_progressivo<lvl_iniziale;lvl_iniziale;lvl_progressivo);
    lvl_partita)

    Per renderla più complessa, ma in una formula sola, possiamo ottenere lo stesso risultato così, senza i passaggi intermedi:

    =LET(righe_aggregate; SCAN(0;F8#;SOMMA);
    livello; ARROTONDA.PER.DIF(righe_aggregate/10;0);
    livello_iniziale;G4;
    livello_finale;SE(livello<livello_iniziale;livello_iniziale;livello);
    livello_finale)

    Ci siamo quasi, ci manca solo il punteggio per ciascuna combinazione di livello e righe eliminate:

    A questo punto abbiamo tutto per calcolare il punteggio della singola partita di Tetris usando Excel. Come detto, il formato della partita non è molto gestibile se non separiamo le singole combinazioni di righe eliminate:

    COME_RISOLVERE_CASO_EXCEL_ESPORTS_MICROSOFT_EXCEL_WORLD_CHAMPIONSHIP_TETRIS_MARCOFILOCAMO_PUNTEGGIO_SINGOLA_COMBINAZIONE_RIGHE

    =CERCA.X( I8#&F8# ; B8#&C8# ; D8# ; "" )

    Stiamo riprendendo il livello finale e le righe della partita in quello step specifico, per poi collegarle con i dati della nostra tabella di punteggi iniziale e restituire quindi D8#, cioè il punteggio relativo alla singola combinazione.

    A questo punto diventa semplice trovare la soluzione finale, che altro non è se non:

    COME_RISOLVERE_CASO_EXCEL_ESPORTS_MICROSOFT_EXCEL_WORLD_CHAMPIONSHIP_TETRIS_MARCOFILOCAMO_PUNTEGGIO_SINGOLA_PARTITA

    =SOMMA(J8#)

    Possiamo verificare il risultato ed è effettivamente quello del foglio Answers, quindi abbiamo trovato la nostra soluzione, ma dobbiamo scalarla su tutte le partite e rifare il procedimento per 30 volte non è un'opzione.

    Come risolvere il caso Tetris: calcolare il punteggio delle trenta partite

    Sappiamo che il punteggio della partita #9 è corretto, ma come facciamo a calcolare velocemente il punteggio per 30 partite?Iniziamo, prima di tutto, inserendo i numeri di partita:

    COME_RISOLVERE_CASO_EXCEL_ESPORTS_MICROSOFT_EXCEL_WORLD_CHAMPIONSHIP_TETRIS_MARCOFILOCAMO_SEQUENZA_PARTITE

    =SEQUENZA(30)

    Generiamo una semplice lista da 1 a 30, che sono le partite che stiamo considerando.

    COME_RISOLVERE_CASO_EXCEL_ESPORTS_MICROSOFT_EXCEL_WORLD_CHAMPIONSHIP_TETRIS_MARCOFILOCAMO_SOLUZIONE_DA_SCALARE

    Recuperiamo anche il punteggio per la prima partita che inseriamo in M8, cioè:

    =SOMMA(J8#)

    A questo punto dobbiamo creare una tabella dati, un tema poco utilizzato nell'Excel aziendale se non crei numerose simulazioni, ma utile per risolvere casi come questo.

    Prima di tutto selezioniamo le celle da L8 a M38:

    • La colonna L ha i nostri numeri di partita
    • La colonna M avrà le nostre soluzioni di punteggio per ciascuna delle partite, avendo in M8 la prima soluzione

    Ora andiamo in Dati > Analisi di Simulazione > Tabella Dati. Ci sarà chiesto di inserire un input per riga e per colonna, ma a noi interessa solo quella in colonna. Quale sarà il nostro input? Inseriamo G2 che racchiude la partita che abbiamo usato come test e, come per magia, l'intero intervallo si popolerà con tutti i punteggi delle partite.

    G2 (partita numero 9) genera M8 (punteggio partita numero 9). Avendo inserito tutto in modo dinamico (sequenza righe e livello di partenza), sarà Excel a calcolare tutti punteggi insieme in un colpo solo.

    COME_RISOLVERE_CASO_EXCEL_ESPORTS_MICROSOFT_EXCEL_WORLD_CHAMPIONSHIP_TETRIS_MARCOFILOCAMO_TABELLA_FINALE

    Se riguardi la formula ti apparirà:

    {=TABELLA(; G2)}

    Tuttavia, questa formula non può essere scritta direttamente in Excel, essendo proprio l'output di una tabella dati. Il vantaggio è sicuramente la velocità e, grazie alle checkbox, possiamo verificare come tutti i risultati calcolati siano corretti!

    Ce l'abbiamo fatta visto che abbiamo trovato il punteggio per la singola partita e la stessa procedura funziona per tutte e 30, ci manca solo il livello bonus.

    Come risolvere il caso Tetris: il livello bonus

    COME_RISOLVERE_CASO_EXCEL_ESPORTS_MICROSOFT_EXCEL_WORLD_CHAMPIONSHIP_TETRIS_MARCOFILOCAMO_SEQUENZA_RIGHE

    Il livello bonus fa una domanda un po' particolare, dato che dobbiamo trovare il minimo numero di volte nelle quali eliminiamo 4 righe insieme, avendo 289 righe totali eliminate e partendo dal livello 9, per fare un punteggio di almeno 1.000.000 punti.

    Qui il ragionamento esula un po' da Excel - perchè più che una formula, dobbiamo ragionare in modo logico. Se parliamo di valore minimo di 4 righe eliminate, vuol dire che tutto il resto della partita dovrebbe fare il punteggio massimo possibile. Immaginiamoci quindi una progressione dove abbiamo sempre e comunque 3 righe eliminate, finchè non sono 288 (ne togliamo 1). Sarebbe una sequenza come questa:

    3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3

    Questa combinazione fa un punteggio di 477.900, quindi siamo ancora molto lontani dal nostro obiettivo di 1.000.000.

    A questo punto la mia idea è stata quella di sostituire, a gruppi, 4 volte il numero 3 (cioè la combinazione di righe eliminate in un colpo solo) sostituendolo con 3 volte il numero 4, partendo dalla fine. In questo modo, seguendo il nostro ragionamento, stiamo incrementando il punteggio in modo considerevole e man mano scaliamo. Ho poi aggiunto una riga eliminata, appena prima delle combinazioni di 4 righe eliminate insieme, in modo da rispettare il vincolo delle 289 righe.

    Ho ripetuto varie volte questa procedura e la sequenza che ho trovato è questa:

    3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4

    Arriviamo a un totale di 1.002.160, che supera 1.000.000, anche se di pochissimo!

    A questo punto non ci resta che scoprire quante volte abbiamo 4 nella nostra sequenza:

    COME_RISOLVERE_CASO_EXCEL_ESPORTS_MICROSOFT_EXCEL_WORLD_CHAMPIONSHIP_TETRIS_MARCOFILOCAMO_BONUS_CONTEGGIO

    =LUNGHEZZA(G3)-LUNGHEZZA(REGEX.SOSTITUISCI(G3;"4";""))

    Sfruttiamo le funzioni REGEX per rimuovere tutti 4 dal numero di caratteri della cella, ottenuto con LUNGHEZZA, e troviamo la differenza! In pratica se avessimo "30426", la formula direbbe che la lunghezza è pari a 5, cioè i numeri di caratteri. Se però facciamo la sostituzione, la lunghezza di "3026" diventa 4, quindi vuol dire che 5-4=1, abbiamo una volta sola il numero 4 nella nostra soluzione. 27 è anche la soluzione del caso, quindi abbiamo risolto anche il livello bonus!

    Tornando sempre a Lorenzo - la soluzione del suo video è interessante perchè incrocia diverse dimensioni per trovare solamente le possibili combinazioni che portano a 289 + 1M+ di punteggio, ti consiglio di darci un'occhiata!

    Conclusione

    Eccoci arrivati alla fine! Abbiamo risolto il caso Tetris di Excel Esports ed è stato tutto fuorchè una passeggiata, considerato che avremmo dovuto impiegarci massimo 10 minuti. Questo pensa possa darti una idea più precisa del livello necessario per competere in questa competizione, che è veramente solo per pochi "eletti". Addirittura, molti partecipanti si preparano con una collezione di LAMBDA personalizzate e add-in come OA Robot visto che è cruciale ridurre al minimo il tempo per comprendere il caso e poi fornire la soluzione. Questo sicuramente, oltre a un allenamento dedicato, può aiutare per velocizzare molte delle parti che abbiamo visto nella soluzione.

    Se poi cerchi altre soluzioni interessanti, ti consiglio di guardare sul sito di Full Stack Modeller dove sono spiegate, in inglese, alcune alternative proprio per risolvere questo caso specifico!

    La ginnastica mentale di questi test può aiutarti notevolmente anche nei tuoi ambiti di lavoro, in modo da capire meglio come strutturare i tuoi file e migliorare la tua pianificazione prima di buttarti a capofitto sulla soluzione da creare. Come hai visto, è fondamentale partire con il piede giusto per creare poi un processo replicabile, scalabile e, soprattutto, comprensibile.

    Non ti resta che fare anche una tu una prova, magari su un altro caso sempre offerto da Excel Esports - in bocca al lupo!

    Lascia un commento

    Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

    Excel per Professionisti
    Panoramica privacy

    This website uses cookies so that we can provide you with the best user experience possible. Cookie information is stored in your browser and performs functions such as recognising you when you return to our website and helping our team to understand which sections of the website you find most interesting and useful.