Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Mova Z70 Ultra Roller Complete: motore potente, rullo di lavaggio e l'IA a guidare
Mova Z70 Ultra Roller Complete: motore potente, rullo di lavaggio e l'IA a guidare
Mova Z70 Ultra Complete è un robot aspirapolvere che coniuga un'aspirazione potente e un lavaggio con rullo a logica di intelligenza artificiale che guida al meglio nella pulizia di casa: rulli e spazzole estensibili a pulire gli angoli e una base di ricarica che lava e ripristina il robot al emglio delle sue funzionalità dopo ogni azione di pulizia
Recensione Google Pixel 11: non ha l'HiLight dei Pro, ma è il Pixel più equilibrato di sempre
Recensione Google Pixel 11: non ha l'HiLight dei Pro, ma è il Pixel più equilibrato di sempre
Abbiamo provato Google Pixel 11, il più accessibile della nuova gamma: chip Tensor G6 condiviso con i modelli Pro, fotocamera 48 MP con Magic Capture e Stili Fotografici, display Actua da 3000 nit e batteria da 4985 mAh. Ecco come si comporta nell'uso quotidiano, e cosa cambia davvero rispetto a Pixel 11 Pro e Pro XL
Google Pixel 11 Pro XL: fotocamera al top, batteria indietro. Luci e ombre del nuovo flagship
Google Pixel 11 Pro XL: fotocamera al top, batteria indietro. Luci e ombre del nuovo flagship
Google Pixel 11 Pro XL debutta in Italia con il nuovo Tensor G6, lo Zoom Pro fino a 120x, il display Super Actua da 3600 nit e la new entry HiLight riservata ai modelli Pro: lo abbiamo provato in anteprima per diversi giorni prima del lancio commerciale, tra fotocamera generativa, ricarica ancora indietro rispetto ai rivali e un prezzo che parte da 1399 euro
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 06-03-2012, 19:18   #1
mistergks
Senior Member
 
L'Avatar di mistergks
 
Iscritto dal: Mar 2011
Messaggi: 1050
[c++] strano gioco... non riesco a trovare una soluzione

Ho trovato un esercizio un pò complicato per me!
TRACCIA (C'è anche un disegno di esempio...lo allego come pdf)
Codice:
Si consideri il seguente rompicapo illustrato dalle figure nell allegato (che riportano, rispettivamente, una possibile istanza del gioco e la sua soluzione). Si ha una griglia quadrata NxN che rappresenta la pianta della city di una moderna città. In ogni casella è presente un edificio con un certo numero di piani; in ciascuna riga e colonna gli edifici sono tutti di altezza diversa: ad esempio, in una griglia 4x4 gli edifici in ogni riga o colonna sono di 10, 20, 30 e 40 piani (1-2-3-4, per semplicità); in una griglia 5x5 ci sono anche 50 piani (5, per semplicità); e così via. I numeri nelle caselle sui bordi grigi indicano quante costruzioni può vedere un osservatore da quella casella lungo la stessa riga o colonna. Ad esempio, nello schema riportato in figura, il “2” posizionato sul bordo sinistro della riga evidenziata, indica che un osservatore in quella posizione, guardando da sinistra verso destra, vedrebbe esattamente due grattacieli; il “3” a destra della stessa riga indica che un osservatore che guardasse la riga da destra verso sinistra ne vedrebbe esattamente tre. Infatti, guardando la corrispondente riga nella soluzione, abbiamo da sinistra a destra “3-4-2-1”: quindi, guardando da sinistra verso destra si vedono solo gli edifici di 30 e 40 piani (3-4), che nascondono quelli più bassi (2-1); guardando da destra a sinistra, abbiamo “1-2-4-3”, e gli edifici visibili sono quelli di 10, 20 e 40 piani (1-2-4), mentre quello di 30 piani (3) è nascosto alla vista da quello più alto (4). Naturalmente, gli indizi valgono nello stesso modo per ogni riga, e similmente per ogni colonna.

Si scriva in C++ una funzione che, ricevuta in input una soluzione candidata, restituisca “true” se la soluzione è ammissibile (cioè rispetta tutti gli indizi di riga e colonna), “false” altrimenti. 
SUGGERIMENTO: La griglia (corrispondente alla parte “bianca” in figura) può essere rappresentata da una matrice di interi senza segno di dimensione NxN; gli indizi per righe e colonna (corrispondenti alla parte “grigia” in figura), invece, possono essere rappresentati da 2 matrici di interi senza segno:  int indiziRiga[N][2], indiziColonna[N][2]. Ad esempio, nella matrice “indiziRiga”, per ogni riga “i”, l’elemento “indiziRiga[i][1]” potrebbe riportare l’indizio da sinistra a destra, e l’elemento “indiziRiga[i][2]” potrebbe riportare l’indizio da destra a sinistra; similmente si può intendere per gli indizi di colonna.
Oltre al fatto che ci abbia messo una vita per capire quello che chiede.... non sono riuscito a scrivere nulla!! Ho sempre scritto il mio codice nei post...ma questa volta non so da dove iniziare.
Infatti ho deciso di postare questa mia richiesta di aiuto non per chiedere la soluzione già pronta...ma per cercare qualcuno che mi aiuti a ragionare... e permettermi di iniziare a scrivere questa funzione

N.B.: Questa funzione non deve risolvere il gioco...ma deve solo verificare che una data soluzione sia corretta!

Allora... io avrei pensato a questa soluzione:
faccio due matrici: indiziRiga e indiziColonna dove vengono messi gli indizi
poi mi scansiono queste due matrici (non insieme ovviamente)e controllo che le condizioni siano verificate. cioè ad esempio:
se scansiono indiziRiga[0][0] trovo il numero 3... quindi in quella riga della matrice alla posizione 2 deve esserci un numero=dimensione matrice (in questo caso 4...perchè la matrice è 4x4)...
Immagini allegate
File Type: pdf esempio.pdf (20.2 KB, 21 visite)

Ultima modifica di mistergks : 06-03-2012 alle 22:17.
mistergks è offline   Rispondi citando il messaggio o parte di esso
Old 07-03-2012, 10:35   #2
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Riposto il testo nei tag QUOTE, a favore della leggibilità (scrollare righe lunghe 1 metro non è il massimo):
Quote:
Si consideri il seguente rompicapo illustrato dalle figure nell allegato (che riportano, rispettivamente, una possibile istanza del gioco e la sua soluzione). Si ha una griglia quadrata NxN che rappresenta la pianta della city di una moderna città.
In ogni casella è presente un edificio con un certo numero di piani; in ciascuna riga e colonna gli edifici sono tutti di altezza diversa: ad esempio, in una griglia 4x4 gli edifici in ogni riga o colonna sono di 10, 20, 30 e 40 piani (1-2-3-4, per semplicità); in una griglia 5x5 ci sono anche 50 piani (5, per semplicità); e così via.
I numeri nelle caselle sui bordi grigi indicano quante costruzioni può vedere un osservatore da quella casella lungo la stessa riga o colonna. Ad esempio, nello schema riportato in figura, il “2” posizionato sul bordo sinistro della riga evidenziata, indica che un osservatore in quella posizione, guardando da sinistra verso destra, vedrebbe esattamente due grattacieli; il “3” a destra della stessa riga indica che un osservatore che guardasse la riga da destra verso sinistra ne vedrebbe esattamente tre.
Infatti, guardando la corrispondente riga nella soluzione, abbiamo da sinistra a destra “3-4-2-1”: quindi, guardando da sinistra verso destra si vedono solo gli edifici di 30 e 40 piani (3-4), che nascondono quelli più bassi (2-1); guardando da destra a sinistra, abbiamo “1-2-4-3”, e gli edifici visibili sono quelli di 10, 20 e 40 piani (1-2-4), mentre quello di 30 piani (3) è nascosto alla vista da quello più alto (4).
Naturalmente, gli indizi valgono nello stesso modo per ogni riga, e similmente per ogni colonna.

Si scriva in C++ una funzione che, ricevuta in input una soluzione candidata, restituisca “true” se la soluzione è ammissibile (cioè rispetta tutti gli indizi di riga e colonna), “false” altrimenti.

SUGGERIMENTO: La griglia (corrispondente alla parte “bianca” in figura) può essere rappresentata da una matrice di interi senza segno di dimensione NxN; gli indizi per righe e colonna (corrispondenti alla parte “grigia” in figura), invece, possono essere rappresentati da 2 matrici di interi senza segno:
int indiziRiga[N][2], indiziColonna[N][2]. Ad esempio, nella matrice “indiziRiga”, per ogni riga “i”, l’elemento “indiziRiga[i][1]” potrebbe riportare l’indizio da sinistra a destra, e l’elemento “indiziRiga[i][2]” potrebbe riportare l’indizio da destra a sinistra; similmente si può intendere per gli indizi di colonna.
La soluzione che hai proposto va bene, in pratica controlli che tutte le condizioni stabilite dalle due righe e due colonne di indizi.
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 08-03-2012, 16:06   #3
mistergks
Senior Member
 
L'Avatar di mistergks
 
Iscritto dal: Mar 2011
Messaggi: 1050
Quote:
Originariamente inviato da banryu79 Guarda i messaggi
Riposto il testo nei tag QUOTE, a favore della leggibilità (scrollare righe lunghe 1 metro non è il massimo):


La soluzione che hai proposto va bene, in pratica controlli che tutte le condizioni stabilite dalle due righe e due colonne di indizi.
Ora che ci penso c'è un problema: cosi facendo non posso stabilire se prima del 4 ci sono ad esempio 1,2,3 o 1,3,2... Nell ultimo caso il palazzo 2 sarebbe oscurato dal 3 scansionando da sinistra verso destra! Quindi non puo andare

Inviato dal mio GT-I9003 usando Tapatalk
mistergks è offline   Rispondi citando il messaggio o parte di esso
Old 08-03-2012, 16:52   #4
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Non ho capito: io non vedo nessun problema.
La logica è questa:
Codice:
per ogni indizio-riga
    poni palazzi-visti a 0
    poni altezza a 0
    per ogni casella in indizio-riga
        se valore casella > valore altezza
        allora poni valore altezza a valore casella e incrementa palazzi-visti di 1
    se valore palazzi-visti != valore indizio-riga
    allora esci (soluzione non valida)
esci (soluzione valida)
Devi fare il controllo per entrambe le righe (destra/sinistra) e colonne (sopra/sotto). Basta che un solo controllo fallisca e la soluzione è errata; viceversa, se tutti i controlli passano la soluzione è corretta.

La logica del controllo resta sempre la stessa, ciò che cambia per ogni riga e colonna sono gli elmenti da controllare e l'ordine in cui vanno scanditi (bisogna rispettare l'ordine con cui si presentano all'osservatore).
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)

Ultima modifica di banryu79 : 09-03-2012 alle 08:34.
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 10-03-2012, 11:17   #5
mistergks
Senior Member
 
L'Avatar di mistergks
 
Iscritto dal: Mar 2011
Messaggi: 1050
Quote:
Originariamente inviato da banryu79 Guarda i messaggi
Non ho capito: io non vedo nessun problema.
La logica è questa:
Codice:
per ogni indizio-riga
    poni palazzi-visti a 0
    poni altezza a 0
    per ogni casella in indizio-riga
        se valore casella > valore altezza
        allora poni valore altezza a valore casella e incrementa palazzi-visti di 1
    se valore palazzi-visti != valore indizio-riga
    allora esci (soluzione non valida)
esci (soluzione valida)
Devi fare il controllo per entrambe le righe (destra/sinistra) e colonne (sopra/sotto). Basta che un solo controllo fallisca e la soluzione è errata; viceversa, se tutti i controlli passano la soluzione è corretta.

La logica del controllo resta sempre la stessa, ciò che cambia per ogni riga e colonna sono gli elmenti da controllare e l'ordine in cui vanno scanditi (bisogna rispettare l'ordine con cui si presentano all'osservatore).
Grazie...sei riuscito a farmi almeno scrivere qualcosa.. anche se è sbagliata..è un passo avanti
Per ora ho fatto solo l'osservazione da sinistra verso destra dato che poi la logica è uguale e cambia solo il metodo di accesso..
Però ahimè...non funziona...pur compilando correttamente.

Codice:
#include <iostream>
using namespace std;

const int n=4;

bool verifica(int M[][n], int n, int indiziRiga[2][n]);


int main(){
    
    int M[n][n]={{1,3,4,2},
                 {3,4,2,1},
                 {4,2,1,3},
                 {2,1,3,4}};
                 
    int indiziRiga[2][n]={{3,2,1,3},
                          {2,3,2,1}};
    
    int indiziColonna[2][n]={{3,2,1,3},
                             {2,3,2,1}};
    
        
        if(verifica(M,n,indiziRiga))
            cout<<"ok"<<endl;
        else cout<<"no"<<endl;
    
    
    
system("pause");
return 0;
}

bool verifica(int M[][n], int n, int indiziRiga[2][n]){
     
     int palazzivisti=0, altezza=0;
     
         for(int i=0; i<n; i++){
                 for(int j=0; j<n; j++){
                            if(M[i][j] > altezza){                       
                                                altezza=M[i][j];                         
                                                palazzivisti++;  }
                 if(palazzivisti > indiziRiga[0][i])
                 return false;
                            }
}

return true;

}
mistergks è offline   Rispondi citando il messaggio o parte di esso
Old 11-03-2012, 15:38   #6
mistergks
Senior Member
 
L'Avatar di mistergks
 
Iscritto dal: Mar 2011
Messaggi: 1050
up

Inviato dal mio GT-I9003 usando Tapatalk
mistergks è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Mova Z70 Ultra Roller Complete: motore potente, rullo di lavaggio e l'IA a guidare Mova Z70 Ultra Roller Complete: motore potente, ...
Recensione Google Pixel 11: non ha l'HiLight dei Pro, ma è il Pixel più equilibrato di sempre Recensione Google Pixel 11: non ha l'HiLight dei...
Google Pixel 11 Pro XL: fotocamera al top, batteria indietro. Luci e ombre del nuovo flagship Google Pixel 11 Pro XL: fotocamera al top, batte...
Non sai programmare? Ecco cosa si può fare con un LLM e una GeForce RTX 5070 Ti Non sai programmare? Ecco cosa si può far...
Recensione Samsung Galaxy Z Fold8 Ultra: il pieghevole più famoso diventa quasi perfetto Recensione Samsung Galaxy Z Fold8 Ultra: il pieg...
Ai Giochi di Pechino i robot prendono fu...
Arianespace Ariane 6: lanciato il satell...
Starship: la nave Forte ha caricato Ship...
ROCm 10 punta sull'AI agentica: AMD auto...
Meta cambia la privacy degli AI Glasses:...
Google ha lanciato Gemini 3.5 Transcribe...
MOVA M10, il lavapavimenti leggero che a...
DLSS 5 funziona anche sulle GeForce RTX ...
GeForce Now, 13 nuovi titoli supportati ...
Mac Studio e Mac mini, il genlock arriva...
Kyndryl porta l’IA agentica nella gestio...
L'era dello smartphone economico è...
NVIDIA mette il freno al suo progetto pi...
Corsair iCUE LINK TITAN II 360 RX LCD: l...
Scritti dalle AI per le AI: la fabbrica ...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 08:09.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v