esercizio n14



  • esercizio n.14
    di ninai data: 15/08/2015 03:54:22

    Salve
    Ispirandomi ad un esercizio appena svolto altrove, che l'"amabile" scossa ha proposto.

    in una cella mettere una formula , senza appoggi, che restituisca una stringa di DUE lettere.
    Queste lettere devono essere ambedue casuali dalla A alla Z ma non devono essere MAI identiche.

    es. se la prima è una A, la seconda può essere tutte le lettere tranne la A e così, per qualunque lettera.


    NB
    E' importante che sia rispettata la casualità completa delle due lettere.
    credo che con VBA sia troppo facile, se non è proprio banale, si accetta anche vba.



  • di Vecchio Frac data: 15/08/2015 06:56:28

    cit. "si accetta anche vba"
    ---> Grazie ninai per la proposta.
    Tuttavia una soluzione in VBA non è una cosa così strana in un forum su Excel VBA ^_^





  • di Vecchio Frac data: 15/08/2015 09:25:28

    Ecco una piccola proposta non banale :)
    Può essere usata anche come formula sul foglio di lavoro (non ho verificato a fondo, ma alla prima esecuzione potrebbe esserci un baco dovuto alla staticità della variabile vector, inizialmente vuota, ecco perchè devo forzare una rigenerazione).
    In pratica dopo aver creato il vettore di elementi con le ventisei lettere, le rimescolo e prendo le prime due posizioni del vettore, sicuramente diverse tra loro.
    Per garantire una mescolanza continua, ogni 13 estrazioni il vettore viene rigenerato. Le lettere così non vengono riestratte insieme tra una generazione e l'altra.
    Sì, è una versione un pochino più complicata rispetto a una funzione banale come

    Function RANDBETWEENAZ() As String
    Dim p As Integer, q As Integer
    p = Int(Rnd(1) * 26) + 1
    q = Int(Rnd(1) * 26) + 1
    Do Until q <> p
    q = Int(Rnd(1) * 26) + 1
    Loop
    test2 = Chr(p + 64) & Chr(q + 64)
    End Function

     
    Option Explicit
    
    Public Function RANDBETWEENAZ(Optional auto_generate As Boolean = True) As String
    Static vector(0 To 26) As String
    Dim s As String, i As Integer, p As Integer, q As Integer
    'by VF
    'Generates a pair of letters A-Z not repeated
    'Vector is regenerated each time a couple of letters are extracted.
    'If "auto_generate" is True or omitted, the Function doesn't regenerate the couple of letters.
    'Otherwise every time the sheet is calcukated (or by pressing F9), a new string is recreate.
    
        Application.Volatile auto_generate
        If CInt(vector(0)) = 13 Then
            'reinitializing vector after two steps
            vector(0) = "0"
            For i = 1 To 26
                vector(i) = Chr(i + 64)
            Next
            
            'shuffling
            Randomize Timer
            For i = 1 To 1000
                p = Int(Rnd(1) * 26) + 1
                q = Int(Rnd(1) * 26) + 1
                s = vector(q)
                vector(q) = vector(p)
                vector(p) = s
            Next
        End If
        
        vector(25) = vector(1)
        vector(26) = vector(2)
        For i = 1 To 24
            vector(i) = vector(i + 2)
        Next
        s = vector(1) & vector(2)
        
        If s = "" Then s = RANDBETWEENAZ(auto_generate)
        vector(0) = CStr(CInt(vector(0)) + 1)
        RANDBETWEENAZ = s
        
    End Function
    






  • di ninai data: 15/08/2015 11:20:51

    VF, non era per escludere il VBA ma non avendo idea di come funziona la cosa in quell'area, poteva anche essere una procedura troppo scontata. E poi che vuoi, "il quesito è mio e me lo gestisco io"



  • di cromagno data: 15/08/2015 11:44:03

    Buongiorno,
    @ninai
    visto che anche io ho già seguito quell'esercizio, posso riproporre la formula che ho usato (in caso non dovessi trovarne un'altra)?



  • di scossa data: 15/08/2015 11:51:11

    "Parafrasando" la proposta di V.F., ho optato per una collection di 26 lettere, da cui estraggo la prima lettera. Quindi la lettera viene eliminata dalla collection e viene estratta una seconda lettera dalle restanti 25.


    scossa's web site
    Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee.
    (George Bernard Shaw)

     
    '---------------------------------------------------------------------------------------
    ' Procedure : RandomAZ
    ' Author    : scossa
    ' Date      : 15/08/2015
    ' Purpose   : return a pair of different letters, each between A-Z
    ' arguments : if bVolatile is true or omitted, udf will be recalculated
    '             at each sheet recalculation (or F9 pressing), and a new string is recreate
    '---------------------------------------------------------------------------------------
    '
    Public Function RandomAZ(Optional ByVal bVolatile As Boolean = True) As String
      
      Dim sRet_ As String
      Dim cLetters As Collection
      Dim i As Byte
      
      Application.Volatile bVolatile
      
      Set cLetters = New Collection
      For i = 65 To 90
        cLetters.Add Chr(i)
      Next
      Randomize
      i = Int(Rnd(1) * 26) + 1
      sRet_ = cLetters(i)
      cLetters.Remove i
      Randomize
      i = Int(Rnd(1) * 25) + 1
      sRet_ = sRet_ & cLetters(i)
      
      RandomAZ = sRet_
    
    End Function
    



  • di ninai data: 15/08/2015 12:11:22

    @cromagno

    io non ho capito se la tua proposta, non l'ho studiata e non l'ho capita, garantisse la possibilità di scelta di TUTTE le lettere, escludendo SOLO quella già scelta.
    Credevo che come quella di scossa, escludesse delle lettere dalla scelta, oltre a quella da non ripetere.

    @scossa

    ecco! quello che dovresti fare con la formula è proprio questo (anche nell'altro quesito), escludere solo quella scelta prima.



  • di cromagno data: 15/08/2015 12:21:44

    Si, andrebbe comunque rivista per limitare l'esclusione alla sola lettera già uscita.
    Prevedo altri giorni di mal di testa...



  • di scossa data: 15/08/2015 12:28:17

    Errata corrige: avevo dimenticato il set a nothing di cLetters

    scossa's web site
    Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee.
    (George Bernard Shaw)

     
    '---------------------------------------------------------------------------------------
    ' Procedure : RandomAZ
    ' Author    : scossa
    ' Date      : 15/08/2015
    ' Purpose   : return a pair of different letters, each between A-Z
    ' arguments : if bVolatile is true or omitted, udf will be recalculated
    '             at each sheet recalculation (or F9 pressing), and a new string is recreate
    '---------------------------------------------------------------------------------------
    '
    Public Function RandomAZ(Optional ByVal bVolatile As Boolean = True) As String
      
      Dim sRet_ As String
      Dim cLetters As Collection
      Dim i As Byte
      
      Application.Volatile bVolatile
      
      Set cLetters = New Collection
      For i = 65 To 90
        cLetters.Add Chr(i)
      Next
      Randomize
      i = Int(Rnd(1) * 26) + 1
      sRet_ = cLetters(i)
      cLetters.Remove i
      Randomize
      i = Int(Rnd(1) * 25) + 1
      sRet_ = sRet_ & cLetters(i)
      
      RandomAZ = sRet_
      set cLetters = Nothing
    
    End Function



  • di Textomb data: 15/08/2015 19:10:18

    @ninai
    immagino che, avendola proposta, esisterà almeno una soluzione con formule senza appoggio.
    Io ancora non mi sono cimentato. Ma vorrei evitare se poi dirai che non si può fare..!



  • di Marius44 data: 15/08/2015 20:02:26

    Buona sera a tutti.
    Ma ferie ... niente?
    @ninai
    ma tu non dormi?

    Ragazzi non sono un esperto di formule ma la butto lì. Può andare così come è postata? A dire il vero nelle prove che ho fatto non mi ha dato MAI due lettere uguali ma, riflettendoci bene sopra, forse una possibilità su un miliardo ....

    Ciao,
    Mario
     
    =SE(IDENTICO(CODICE.CARATT(CASUALE.TRA(65;90));CODICE.CARATT(CASUALE.TRA(65;90)));CODICE.CARATT(CASUALE.TRA(66;90)-1) & CODICE.CARATT(CASUALE.TRA(65;89)+1);CODICE.CARATT(CASUALE.TRA(65;90))&CODICE.CARATT(CASUALE.TRA(65;90)))



  • di ninai data: 15/08/2015 20:21:57

    I miei orari di veglia/sonno sono alquanto variabili. Ho doppia vita
     
    Textomb
    Io credo di averla trovata una soluzione, cercando di risolvere un altro quesito
    
    
    Marius
    Credo che la possibilità di lettere uguali non sia poca. E' la stessa soluzione che cercavo di ottimizzare nella altro quesito



  • di scossa data: 15/08/2015 20:58:11

    @Marius44: se analizzi la tua formula ti puoi rendere conto che non può garantire quanto richiesto. infatti, tu il confronto Identico() lo fai tra due numeri casuali che poi non utilizzerai per costruire la stringa, specie se il confronto fosse falso: rigeneri due numeri causali con
    COODICE.CARATT(CASUALE.TRA(65;90))&CODICE.CARATT(CASUALE.TRA(65;90))
    sui quali non hai/fai nessun controllo.


    scossa's web site
    Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee.(George Bernard Shaw)



  • di Textomb data: 15/08/2015 21:39:04

    Io una soluzione "banale" ma funzionale l'avrei trovata.
    So che può essere oggetto di critiche. Ma risponde alla domanda iniziale.
    =CODICE.CARATT(PARI(CASUALE.TRA(65;90)))&CODICE.CARATT(DISPARI(CASUALE.TRA(64;89)))



  • di Marius44 data: 15/08/2015 23:21:39

    @scossa
    hai perfettamente ragione. In effetti me ne ero accorto anch'io, ma dopo aver inviato la formula.

    @textomb
    quel ... pari ... dispari ... mi piace (anche se . una parte della formula l'hai copiata da me - CODICE.CARATT - passami la battuta)



  • di ninai data: 15/08/2015 23:39:04

    textomb
    cit. "....ma risponde alla domanda iniziale....."

    non proprio
    la scelta casuale, deve essere fatta su TUTTE le lettere dalla A alla Z esclusa SOLO quella estratta.






  • di scossa data: 16/08/2015 01:27:01

    Secondo me con le formule c'è solo un modo, "sporco" ma lecito, per farlo:


    =INDICE(
    {"AB""AC""AD""AE""AF""AG""AH""AI""AJ""AK""AL""AM""AN""AO""AP""AQ""AR""AS""AT""AU""AV""AW""AX""AY""AZ".
    "BA""BC""BD""BE""BF""BG""BH""BI""BJ""BK""BL""BM""BN""BO""BP""BQ""BR""BS""BT""BU""BV""BW""BX""BY""BZ".
    "CA""CB""CD""CE""CF""CG""CH""CI""CJ""CK""CL""CM""CN""CO""CP""CQ""CR""CS""CT""CU""CV""CW""CX""CY""CZ".
    "DA""DB""DC""DE""DF""DG""DH""DI""DJ""DK""DL""DM""DN""DO""DP""DQ""DR""DS""DT""DU""DV""DW""DX""DY""DZ".
    "EA""EB""EC""ED""EF""EG""EH""EI""EJ""EK""EL""EM""EN""EO""EP""EQ""ER""ES""ET""EU""EV""EW""EX""EY""EZ".
    "FA""FB""FC""FD""FE""FG""FH""FI""FJ""FK""FL""FM""FN""FO""FP""FQ""FR""FS""FT""FU""FV""FW""FX""FY""FZ".
    "GA""GB""GC""GD""GE""GF""GH""GI""GJ""GK""GL""GM""GN""GO""GP""GQ""GR""GS""GT""GU""GV""GW""GX""GY""GZ".
    "HA""HB""HC""HD""HE""HF""HG""HI""HJ""HK""HL""HM""HN""HO""HP""HQ""HR""HS""HT""HU""HV""HW""HX""HY""HZ".
    "IA""IB""IC""ID""IE""IF""IG""IH""IJ""IK""IL""IM""IN""IO""IP""IQ""IR""IS""IT""IU""IV""IW""IX""IY""IZ".
    "JA""JB""JC""JD""JE""JF""JG""JH""JI""JK""JL""JM""JN""JO""JP""JQ""JR""JS""JT""JU""JV""JW""JX""JY""JZ".
    "KA""KB""KC""KD""KE""KF""KG""KH""KI""KJ""KL""KM""KN""KO""KP""KQ""KR""KS""KT""KU""KV""KW""KX""KY""KZ".
    "LA""LB""LC""LD""LE""LF""LG""LH""LI""LJ""LK""LM""LN""LO""LP""LQ""LR""LS""LT""LU""LV""LW""LX""LY""LZ".
    "MA""MB""MC""MD""ME""MF""MG""MH""MI""MJ""MK""ML""MN""MO""MP""MQ""MR""MS""MT""MU""MV""MW""MX""MY""MZ".
    "NA""NB""NC""ND""NE""NF""NG""NH""NI""NJ""NK""NL""NM""NO""NP""NQ""NR""NS""NT""NU""NV""NW""NX""NY""NZ".
    "OA""OB""OC""OD""OE""OF""OG""OH""OI""OJ""OK""OL""OM""ON""OP""OQ""OR""OS""OT""OU""OV""OW""OX""OY""OZ".
    "PA""PB""PC""PD""PE""PF""PG""PH""PI""PJ""PK""PL""PM""PN""PO""PQ""PR""PS""PT""PU""PV""PW""PX""PY""PZ".
    "QA""QB""QC""QD""QE""QF""QG""QH""QI""QJ""QK""QL""QM""QN""QO""QP""QR""QS""QT""QU""QV""QW""QX""QY""QZ".
    "RA""RB""RC""RD""RE""RF""RG""RH""RI""RJ""RK""RL""RM""RN""RO""RP""RQ""RS""RT""RU""RV""RW""RX""RY""RZ".
    "SA""SB""SC""SD""SE""SF""SG""SH""SI""SJ""SK""SL""SM""SN""SO""SP""SQ""SR""ST""SU""SV""SW""SX""SY""SZ".
    "TA""TB""TC""TD""TE""TF""TG""TH""TI""TJ""TK""TL""TM""TN""TO""TP""TQ""TR""TS""TU""TV""TW""TX""TY""TZ".
    "UA""UB""UC""UD""UE""UF""UG""UH""UI""UJ""UK""UL""UM""UN""UO""UP""UQ""UR""US""UT""UV""UW""UX""UY""UZ".
    "VA""VB""VC""VD""VE""VF""VG""VH""VI""VJ""VK""VL""VM""VN""VO""VP""VQ""VR""VS""VT""VU""VW""VX""VY""VZ".
    "WA""WB""WC""WD""WE""WF""WG""WH""WI""WJ""WK""WL""WM""WN""WO""WP""WQ""WR""WS""WT""WU""WV""WX""WY""WZ".
    "XA""XB""XC""XD""XE""XF""XG""XH""XI""XJ""XK""XL""XM""XN""XO""XP""XQ""XR""XS""XT""XU""XV""XW""XY""XZ".
    "YA""YB""YC""YD""YE""YF""YG""YH""YI""YJ""YK""YL""YM""YN""YO""YP""YQ""YR""YS""YT""YU""YV""YW""YX""YZ".
    "ZA""ZB""ZC""ZD""ZE""ZF""ZG""ZH""ZI""ZJ""ZK""ZL""ZM""ZN""ZO""ZP""ZQ""ZR""ZS""ZT""ZU""ZV""ZW""ZX""ZY"};
    CASUALE.TRA(1;26);CASUALE.TRA(1;25))




    scossa's web site
    Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee.(George Bernard Shaw)



  • di ninai data: 16/08/2015 07:50:25

    Scossa
    forse ci siamo (non so fare la comparazione combinatoria con la mia) ma è troppo sporca, tu puoi fare molto di meglio, impegnati ;).

    "non siamo quì ad imbrattare i post con i " e le "/" "

    La matrice dell'indice, perchè non l'hai prevista su una sola riga (vettore?) ed una sola Casuale.tra()????



  • di scossa data: 16/08/2015 11:20:28

    cit. ninai: "forse ci siamo"
    Secondo me il forse puoi toglierlo, le combinazioni ci sono tutte .....

    cit. ninai: "La matrice dell'indice, perchè non l'hai prevista su una sola riga (vettore?) ed una sola Casuale.tra()?"

    Ci avevo pensato, ma ho preferito questa forma perché:
    1) l'ho generata con
    =CODICE.CARATT(RIF.RIGA($65:$90))&CODICE.CARATT(RIF.COLONNA($BM:$CL))
    e poi è stato semplice eliminare le coppie uguali;

    2) è più facile, per chi la legge, da interpretare;

    3) la sequenza di coppie estratte è con buona probabilità più "sparpagliata" rispetto al vettore.

    4) a quell'ora altro non mi è venuto in mente


    scossa's web site
    Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee.(George Bernard Shaw)


  • ninai
    di ninai data: 16/08/2015 13:19:36

    OK scossa, anche io credo sia giusta ma è tropoooooooo lunga
    Se non ci saranno richieste di proroga , in nottata darò la soluzione "pulita" e breve.



  • di scossa data: 16/08/2015 13:49:58

    Ad esempio questa garantisce l'equa probabilità a tutte le coppie.


    scossa's web site
    Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee.(George Bernard Shaw)

     
    =STRINGA.ESTRAI("ABACADAEAFAGAHAIAJAKALAMANAOAPAQARASATAUAVAWAXAYAZBABCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZCACBCDCECFCGCHCICJCK
    CLCMCNCOCPCQCRCSCTCUCVCWCXCYCZDADBDCDEDFDGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZEAEBECEDEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZFAFB"&
    "FCFDFEFGFHFIFJFKFLFMFNFOFPFQFRFSFTFUFVFWFXFYFZGAGBGCGDGEGFGHGIGJGKGLGMGNGOGPGQGRGSGTGUGVGWGXGYGZHAHBHCHDHEHFHGHIHJHKHLHMHNHOHPHQ
    HRHSHTHUHVHWHXHYHZIAIBICIDIEIFIGIHIJIKILIMINIOIPIQIRISITIUIVIWIXIYIZJAJBJCJDJEJFJGJHJIJKJLJMJNJOJPJQJRJSJTJUJVJWJXJYJZKAKBK"&
    "CKDKEKFKGKHKIKJKLKMKNKOKPKQKRKSKTKUKVKWKXKYKZLALBLCLDLELFLGLHLILJLKLMLNLOLPLQLRLSLTLULVLWLXLYLZMAMBMCMDMEMFMGMHMIMJMKMLMNMOMPMQMR
    MSMTMUMVMWMXMYMZNANBNCNDNENFNGNHNINJNKNLNMNONPNQNRNSNTNUNVNWNXNYNZOAOBOCODOEOFOGOHOIOJOKOLOMONOPOQOROSOTOUOVOWOXOYOZPAPBPC"&
    "PDPEPFPGPHPIPJPKPLPMPNPOPQPRPSPTPUPVPWPXPYPZQAQBQCQDQEQFQGQHQIQJQKQLQMQNQOQPQRQSQTQUQVQWQXQYQZRARBRCRDRERFRGRHRIRJRKRLRMRNRORPRQ
    RSRTRURVRWRXRYRZSASBSCSDSESFSGSHSISJSKSLSMSNSOSPSQSRSTSUSVSWSXSYSZTATBTCTDTETFTGTHTITJTKTLTMTNTOTPTQTRTSTUTVTWTXTYTZUAUBUCU"&
    "DUEUFUGUHUIUJUKULUMUNUOUPUQURUSUTUVUWUXUYUZVAVBVCVDVEVFVGVHVIVJVKVLVMVNVOVPVQVRVSVTVUVWVXVYVZWAWBWCWD"&"WEWFWGWHWIWJWKWLWMWNW
    OWPWQWRWSWTWUWVWXWYWZXAXBXCXDXEXFXGXHXIXJXKXLXMXNXOXPXQXRXSXTXUXVXWXYXZYAYBYCYDYEYFYGYHYIYJYKYLYMYNYOYPYQYRYSYTYUYVYWYXYZZAZBZ
    CZDZEZFZGZHZIZJZKZLZMZNZOZPZQZRZSZTZUZVZWZXZY";DISPARI(CASUALE.TRA(1;1299));2)



  • di scossa data: 16/08/2015 14:06:18

    Se poi la "stringona" la attribuiamo ad un nome:
    AZ riferito a::
    "ABACADAEAFAGAHAIAJAKALAMANAOAPAQARASATAUAVAWAXAYAZBABCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZCACBCDCECFCGCHCICJCKCLCMCNCOCPCQCRCSCTCUCVCWCXCYCZDADBDCDEDFDGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZEAEBECEDEFEGEHE"&"IEJEKELEMENEOEPEQERESETEUEVEWEXEYEZFAFBFCFDFEFGFHFIFJFKFLFMFNFOFPFQFRFSFTFUFVFWFXFYFZGAGBGCGDGEGFGHGIGJGKGLGMGNGOGPGQGRGSGTGUGVGWGXGYGZHAHBHCHDHEHFHGHIHJHKHLHMHNHOHPHQHRHSHTHUHVHWHXHYHZIAIBICIDIEIFIGIHIJIKILIMINIOIP"&"IQIRISITIUIVIWIXIYIZJAJBJCJDJEJFJGJHJIJKJLJMJNJOJPJQJRJSJTJUJVJWJXJYJZKAKBKCKDKEKFKGKHKIKJKLKMKNKOKPKQKRKSKTKUKVKWKXKYKZLALBLCLDLELFLGLHLILJLKLMLNLOLPLQLRLSLTLULVLWLXLYLZMAMBMCMDMEMFMGMHMIMJMKMLMNMOMPMQMRMSMTMUMVMWM"&"XMYMZNANBNCNDNENFNGNHNINJNKNLNMNONPNQNRNSNTNUNVNWNXNYNZOAOBOCODOEOFOGOHOIOJOKOLOMONOPOQOROSOTOUOVOWOXOYOZPAPBPCPDPEPFPGPHPIPJPKPLPMPNPOPQPRPSPTPUPVPWPXPYPZQAQBQCQDQEQFQGQHQIQJQKQLQMQNQOQPQRQSQTQUQVQWQXQYQZRARBRCRDRE"&"RFRGRHRIRJRKRLRMRNRORPRQRSRTRURVRWRXRYRZSASBSCSDSESFSGSHSISJSKSLSMSNSOSPSQSRSTSUSVSWSXSYSZTATBTCTDTETFTGTHTITJTKTLTMTNTOTPTQTRTSTUTVTWTXTYTZUAUBUCUDUEUFUGUHUIUJUKULUMUNUOUPUQURUSUTUVUWUXUYUZVAVBVCVDVEVFVGVHVIVJVKVLVM"&"VNVOVPVQVRVSVTVUVWVXVYVZWAWBWCWDWEWFWGWHWIWJWKWLWMWNWOWPWQWRWSWTWUWVWXWYWZXAXBXCXDXEXFXGXHXIXJXKXLXMXNXOXPXQXRXSXTXUXVXWXYXZYAYBYCYDYEYFYGYHYIYJYKYLYMYNYOYPYQYRYSYTYUYVYWYXYZZAZBZCZDZEZFZGZHZIZJZKZLZMZNZOZPZQZRZSZTZUZVZWZXZY"

    la riporto con gli "a capo" per renderla visibile:

    "ABACADAEAFAGAHAIAJAKALAMANAOAPAQARASATAUAVAWAXAYAZBABCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZCACBCDCECFCGCHCICJCKCLCMCNC
    OCPCQCRCSCTCUCVCWCXCYCZDADBDCDEDFDGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZEAEBECEDEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZFAFB"&
    "FCFDFEFGFHFIFJFKFLFMFNFOFPFQFRFSFTFUFVFWFXFYFZGAGBGCGDGEGFGHGIGJGKGLGMGNGOGPGQGRGSGTGUGVGWGXGYGZHAHBHCHDHEHFHGHIHJHKHLHMHNHOHPHQ
    HRHSHTHUHVHWHXHYHZIAIBICIDIEIFIGIHIJIKILIMINIOIPIQIRISITIUIVIWIXIYIZJAJBJCJDJEJFJGJHJIJKJLJMJNJOJPJQJRJSJTJUJVJWJXJYJZKAKBK"&
    "CKDKEKFKGKHKIKJKLKMKNKOKPKQKRKSKTKUKVKWKXKYKZLALBLCLDLELFLGLHLILJLKLMLNLOLPLQLRLSLTLULVLWLXLYLZMAMBMCMDMEMFMGMHMIMJMKMLMNMOMPMQMR
    MSMTMUMVMWMXMYMZNANBNCNDNENFNGNHNINJNKNLNMNONPNQNRNSNTNUNVNWNXNYNZOAOBOCODOEOFOGOHOIOJOKOLOMONOPOQOROSOTOUOVOWOXOYOZPAPBPC"&
    "PDPEPFPGPHPIPJPKPLPMPNPOPQPRPSPTPUPVPWPXPYPZQAQBQCQDQEQFQGQHQIQJQKQLQMQNQOQPQRQSQTQUQVQWQXQYQZRARBRCRDRERFRGRHRIRJRKRLRMRNRORPRQ
    RSRTRURVRWRXRYRZSASBSCSDSESFSGSHSISJSKSLSMSNSOSPSQSRSTSUSVSWSXSYSZTATBTCTDTETFTGTHTITJTKTLTMTNTOTPTQTRTSTUTVTWTXTYTZUAUBUCU"&
    "DUEUFUGUHUIUJUKULUMUNUOUPUQURUSUTUVUWUXUYUZVAVBVCVDVEVFVGVHVIVJVKVLVMVNVOVPVQVRVSVTVUVWVXVYVZWAWBWCWD"&"WEWFWGWHWIWJWKWLWMWNW
    OWPWQWRWSWTWUWVWXWYWZXAXBXCXDXEXFXGXHXIXJXKXLXMXNXOXPXQXRXSXTXUXVXWXYXZYAYBYCYDYEYFYGYHYIYJYKYLYMYNYOYPYQYRYSYTYUYVYWYXYZZAZBZ
    CZDZEZFZGZHZIZJZKZLZMZNZOZPZQZRZSZTZUZVZWZXZY"

    la formula si riduce a:
    =STRINGA.ESTRAI(AZ;DISPARI(CASUALE.TRA(1;1299));2)

    N.B.: nel postare la "stringona" anche nell'altro post, ho messo degli "a capo" per renderla visibile per intero, ovviamente vanno tolti nella formula (la "stringona" deve essere di 2300 caratteri).


    scossa's web site
    Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee.(George Bernard Shaw)



  • di cromagno data: 16/08/2015 14:16:14

    Ciao a tutti,
    credo di aver trovato una soluzione, o meglio, con le prove che ho fatto non ha dato errori...
    comunque, la formula (matriciale) è questa:

    =CODICE.CARATT(INT((ADESSO()*10^8-INT(ADESSO()*10^8))*26+65))&CODICE.CARATT(GRANDE(SE(RIF.RIGA($A$65:$A$90)<>INT((ADESSO()*10^8-INT(ADESSO()*10^8))*26+65);RIF.RIGA($A$65:$A$90);"");CASUALE.TRA(1;25)))



  • di scossa data: 16/08/2015 14:54:51

    cit.: "credo di aver trovato una soluzione, o meglio, con le prove che ho fatto non ha dato errori... "

    purtroppo presenta degli errori. Se provi a scrivere la tua formula ad esempio in A3 e in B3 scrivi
    =SINISTRA(A3;1)=DESTRA(A3;1)
    poi copi per un migliaio di righe e premi F9, vedrai che ogni tanto ottieni, in colonna A, un errore di #VALORE!


    scossa's web site
    Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee.(George Bernard Shaw)



  • di cromagno data: 16/08/2015 15:02:14

    Ciao scossa, si avevo fatto anche quella prova su 5000 celle e non aveva dato errori...
    Cmq grazie, ricontrollerò

    [EDIT]
    Ci dev'essere qualcosa di "corrotto" nell'assegnazione del valore di ADESSO() che non riesco a capire...
    Infatti, rifacendo le prove su 5000 celle e aggiornando ripetutamente, la maggior parte delle volte non da nessun errore (ma può restituire 2 caratteri uguali, diciamo una volta su 30000) mentre la volta che da errore (o caratteri <65 o >90) lo da per più di 1000 volte....

    Comunque mi arrendo.
    Aspetto la soluzione di ninai



  • di ninai data: 16/08/2015 15:31:42

    scossa
    anche la tua ultima soluzione mi da qualche lettera uguale (una decina ogni 5000), pochi ma li da

    cromagno
    la tua non riesco a valutarla


    comunque io vi propino adesso la mia di soluzione, così posso leggere i vostri commenti prima di andare via:

    =SOSTITUISCI(INDIRIZZO(1;PICCOLO(SE(RESTO(RIF.COLONNA($AA:$ZY);27)>0;RIF.COLONNA($AA:$ZY));CASUALE.TRA(1;650));4);1;"")

    matriciale

    l'ispirazione è nata dai presupposti che le intestazioni di colonna AA:ZY rappresentavano tutte le combinazioni di due lettere e che ogni 27 colonne ve ne era una da togliere, in quanto con due lettere uguali, da quì sono arrivato ad estrare le due lettere casuali. Per il quesito dell'altro forum, questo non è bastato, in quanto non sono riuscito ad ottenere le altre disposizioni previste.



  • di scossa data: 16/08/2015 16:16:50

    cit. ninai: "anche la tua ultima soluzione mi da qualche lettera uguale (una decina ogni 5000), pochi ma li da"

    Se intendi che genera una coppia di lettere uguali (credo ZZ) può essere solo perché nel costruire la stringa con gli "a capo" potrei aver cancellato un carattere (sfalsando l'inizo di coppia sui dispari(1.3.5.7.....). Vabbè!


    cit. ninai: "l'ispirazione è nata dai presupposti che le intestazioni di colonna AA:ZY rappresentavano tutte le combinazioni di due lettere e che ogni 27 colonne ve ne era una da togliere"

    Intuizione geniale! Si vede che tirare tardi la notte per suonare ti fa bene!!


    scossa's web site
    Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee.(George Bernard Shaw)



  • di scossa data: 16/08/2015 16:23:49

    cit.: "nel costruire la stringa con gli "a capo" potrei aver cancellato un carattere"

    Ho testato la proposta con l'uso del nome su oltre 24.000 righe per una 50ina di volte e non ho mai avuto stringhe con lettere uguali.
    Presumo col copia incolla della formula dal forum si sia creata una "stringona" corrotta.

    scossa's web site
    Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee.
    (George Bernard Shaw)



  • di Textomb data: 16/08/2015 16:49:17

    cit.. Intuizione geniale! Si vede che tirare tardi la notte per suonare ti fa bene!!
    Forse a lui...
    Io stanotte ho fatto sogni assurdi per colpa sua!! Penso che lo denuncerò
    Comunque, a parte gli scherzi. Complimenti sinceri.



  • di ninai data: 16/08/2015 17:21:59

    textomb

    credo che noi appassionati di excel, di notti con incubi da "travaglio" di formule ne abbiamo avute parecchie.

    Nelle mie, "gestazioni", la "paternità" è stata molte volte di scossa
    anche quella per il caso specifico si è originata da un suo quesito precedente.

    scossa
    "tirare tardi la notte" non è un'attività salutare per i neuroni ma mi mantiene l'illusione di gioventù. Sarebbe meglio un ricovero in una baita solitaria ad alta quota, come piace a te



  • di cromagno data: 16/08/2015 19:16:15

    E pensare che abbiamo sempre avuto la soluzione davanti agli occhi...
    Complimenti ninai


  • soluzioni
    di ninai data: 17/08/2015 01:02:32

    allego il file con le soluzioni e qualche analisi dei dati
    per le soluzioni VBA, ho incollato i codici ma non riesco a farli girare, vedete voi cosa si deve fare



  • di Luca73 data: 17/08/2015 08:59:49

    Ciao a tutti
    scusate ma nei giorni scorsi sono stato preso dalla grigliata di ferragosto e impegni simili.
    Ho fatto giusto in tempo a leggere il quesito e a mettere in moto in cervello a pensare.
    Appena ho acceso un computer (e neance il mio) con un foglio execel il "capo" (alias mia moglie) mi ha fulminato.Ho continuato a pensare alla soluzione e fino a questa mattina ero arrivato alla stessa conclusiione di scossa che avrei risolto con la stessa formula che ha proposto scossa usandoINDICE e una matrice di costanti di doppie lettere.
    Avevo pensato anche io all'utilizzo di adesso ma non ne avevo ricavato un bel nulla
    Oggi ho visto la soluzione di ninai che mi aperto gli occhi
    e pertanto posto un'altra soluzione che però (come sopra ho detto) non avrei scritto senza aver visto quella di ninai.
    la formula pertanto è:
    =STRINGA.ESTRAI(INDIRIZZO(1;CASUALE.TRA(1;25)*27+(CASUALE.TRA(0;25)+1));2;2)

    Ciao a Tutti





  • di isy data: 17/08/2015 09:10:20

    Ciao Luca73

    Avevo provato senza trovare la soluzione con una formula simile...
    Hai avuto troppa fretta di postare la risposta, solo una piccola variazione

    =SINISTRA(INDIRIZZO(1;CASUALE.TRA(1;25)*27+(CASUALE.TRA(0;25)+1);4);2)



  • di ninai data: 17/08/2015 09:54:23

    ciao
    belle proposte, io ero ormai troppo incanalato nella mia procedura per pensare a semplificazioni (pur intuendone l'esistenza).

    Mi scuso per la mancata attesa, non avevo tenuto conto del ferragosto e pensavo non ci fossero altri utenti interessati, oltre a quelli già partecipanti.



  • di Vecchio Frac data: 17/08/2015 10:06:25

    Bella discussione, in effetti sono passati due giorni tra l'apertura e la chiusura, magari la prossima volta possiamo avere un po' più di suspance :)
    Ninai, proclama il vincitore (se c'è)!





  • di Luca73 data: 17/08/2015 10:06:51

    @ ninai
    non ti scusare, vai tranquillo che è solo un "gioco"...

    @ isy
    perche cit "Hai avuto troppa fretta di postare la risposta, solo una piccola variazione"?

    Buone vacanze a chi è in vacanza...







  • di ninai data: 17/08/2015 10:17:32

    proclamare il "vincitore", che arduo compito.

    Le formule più "belle" sono ,secondo me, le ultime due (Luca ed Isy), ma vorrei far porre il prossimo quesito a Scossa.
    Oltre alla motivazione che egli è stato il primo a porre una soluzione valida (anche se sporca), nomino lui (egoisticamente), perchè ho avuto notizia che ha in cantiere un quesito molto tosto ed a me i suoi rompicapo mi "eccitano" (i neuroni).

    VF
    te ne occupi tu di integrare nel file soluzioni (che adesso aggiorno con ultime proposte), le soluzioni VBA (che tanto ami e difendi a spda tratta )



  • di Vecchio Frac data: 17/08/2015 10:21:47

    cit. "te ne occupi tu di integrare nel file soluzioni"
    ---> Sì, allega pure qui e poi ci penso io.
    VBA è la mia passione principale, con le formule non mi ci trovo neanche da lontano, e vorrei comunque che non dimenticaste che il forum è dedicato a "Excel VBA"... altrimenti si chiamava "Excel Formulas" ^_^





  • di ninai data: 17/08/2015 10:33:36

    I codici proposti (da te e Scossa) sono già nel file che ho allegato, avevo dedicato anche un foglio per queste soluzioni (vedi che grande considerazione e ti lamenti pure ;) ). ho copiato i vostri codici in dei moduli, ho intuito che sono delle UDF ma non sono riuscito a farle funzionare.



  • di Vecchio Frac data: 17/08/2015 11:26:14

    Perfetto ninai come sempre. Grazie ^_^





  • di Vecchio Frac data: 17/08/2015 11:29:36

    cit. "non sono riuscito a farle funzionare."
    ---> Ci credo, anche perchè il file "soluzioni bis" è un xlsx quindi senza macro :)





  • di Marius44 data: 17/08/2015 12:28:56

    Complimenti al Vincitore ed al Proponente. A me personalmente sono piaciute molto le formule di Luca e Isy: snelle, secche ed efficaci. Nel mio piccolo vorrei aggiungere una variante ed aspettare ... le mosse dei "formulisti" (non mi piace questo termine ma non ho trovato altro per definire gli ... amanti delle formule).
    Ho notato che nelle quasi 5000 combinazioni molte sono costituite dalle stesse coppie di lettere (anche quelle di Luca e Isy che ho testato). Sarebbe possibile lasciarne solo una (cioè TUTTE COPPIE DIFFERENTI)? Ovviamente elaborando una formula ad hoc o implementando quella già esposta e non con VBA. Grazie.

    Ciao a tutti,
    Mario



  • di ninai data: 17/08/2015 13:44:06

    ciao Mario
    non capisco cosa vuoi fare. Le formule prevedono il risultato solo in una cella, il resto è uno sviluppo casuale per verificare (alla buona) se vi sono lettere uguali o se tutte le lettere sono estratte.


    Da quello che capisco dalla tua richiesta, avere restituzioni univoche, equivale ad avere le 650 combinazioni possibili, pertanto, nel caso della mia formula:
    =SOSTITUISCI(INDIRIZZO(1;PICCOLO(SE(RESTO(RIF.COLONNA($AA:$ZY);27)>0;RIF.COLONNA($AA:$ZY));RIF.RIGA(A1));4);1;"")

    Probabilmente tu intendi altro

    edit
    se quello che vuoi è appunto tutta la serie di due lettere possibili, univoche ed anche in ordine random, allora credo che con formule, senza nessun appoggio, non si possa fare.
    Si dovrà intervenire con VBA.

    Per il termine, opterei per "formulofili"


    Con appoggio, si potrebbe creare una colonna di appoggio di 650 righe (esempio A2:A651) con =CASUALE()
    nella colonna a fianco (la B) usare sempre la stessa formula di prima, usando come "K" di PICCOLO(), RANGO(A;A:A)
    in B2:
    =SOSTITUISCI(INDIRIZZO(1;PICCOLO(SE(RESTO(RIF.COLONNA($AA:$ZY);27)>0;RIF.COLONNA($AA:$ZY));RANGO(A2;$A$2:$A$651));4);1;"")



  • di Luca73 data: 17/08/2015 13:49:24

    Ciao Mario
    le combinazioni possibili sono 26*26-26 ovvero 650
    IO ho fatto alcune prove (con la formula di isy) e ti confermo che le probabilite con cui esce ciascuna lettera in prima posizione, ciascuna lettera in seconda posizione e ciascuna coppia di lettere sono omogenee e coerenti (tra la minima e la massima frequenza c'è un errore del 15% 1508 contro 1744) su un campione di 1048576 coppie)

    Siccome le formule si basano su casuale e quindi su concetti probabilistici allora pretendere che se estraggo 650 numeri siano tutti diversi allora è impossibile. Dovresti implementare una routine VBA che memorizza gli ultimi numeri estratti e verifica quello nuovo.

    Ciao
    Luca







  • di Marius44 data: 17/08/2015 15:35:41

    Ottimo!
    Vedo che siete preparati.

    Ciao,
    Mario



  • di scossa data: 17/08/2015 22:59:57

    cit. ninai: ".... perchè ho avuto notizia che ha in cantiere un quesito molto tosto ...."

    Non vorrei deludere ninai, ma siccome vogliamo far partecipare più utenti possibili, eviterei di proporre esercizi troppo tosti; per questo l'esercizio che proporrò sarà abbastanza semplice (ma propedeutico per quello tosto).

    Stay tuned .....


    scossa's web site
    Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee.(George Bernard Shaw)



  • di Vecchio Frac data: 18/08/2015 08:07:32

    cit. "eviterei di proporre esercizi troppo tosti"
    --->