finb Ekspert
13. maj 2020 - 12:30 Der er 21 kommentarer og
4 løsninger

9 stole, 9 personer ?

Der er 9 stole og 9 personer.
Kan personerne sidde på 9! (9 fakultet) forskellige måder ?
Hvordan kan jeg vise alle mulighederne i
Excel eller VBA ?
Tak finb
Jan K Ekspert
13. maj 2020 - 13:13 #1
9! er over 360.000 muligheder så jeg vil, annbefale VBA. Har dog ikke tid til at lave en løsning lige nu, men m0ske kan en anden hjælpe.
claes57 Ekspert
13. maj 2020 - 15:28 #2
Hvis det er omkring et rundt bord, så er der mange gentagelser (ens rækkefølge, bare forskelligt viklet).
acore Ekspert
13. maj 2020 - 15:59 #3
Ja, så er det bare 8!
Jan K Ekspert
13. maj 2020 - 17:00 #4
#3 - forstår ikke de 8. Hvis du kalder personerne ABCDEFGHI, og decskal anbringes i alle tænkelige kombinationer, må det være mere end 8.
Jan K Ekspert
13. maj 2020 - 17:05 #5
Hvis rækkefælgen de tages i er betydende (permutationer) er der 362.880 muligheder. Er rækkefølgen ligegyldig (kombinationer) er der "kun" 24.310.
Mads32 Ekspert
13. maj 2020 - 17:25 #6
Hej Jan K

Hvordan kommer du til 24310 ?

acore skriver 8! og ikke 8. ---  8! = 40320

Under alle omstændigheder tro jeg ikke at antal af placeringer kan stiles op nogle formler.

m v h mads32
acore Ekspert
13. maj 2020 - 17:32 #7
Min pointe var, at hvis det er et rundt bord (re #2), så er placeringen af den første person ligegyldig og dermed er svaret 8! i stedet for 9! hvor ! læses som fakultet.

Og hvis rækkefælgen er ligegyldig, så kan 9 personer kun placeres i 9 stole på én måde, nemlig en i hver stol.
Jan K Ekspert
13. maj 2020 - 19:10 #8
#7, Sorry. Havde overset udråbstegnet.

#6 ved at bruge en forkert funktion 🤒 men antallet af kombinationer må kunne beregnes, det er nok sværere at lave en funktion, der viser dem.
claes57 Ekspert
13. maj 2020 - 19:36 #9
min idé var, at fx "abcdefghi" er ok - men alle skift til "bcdefghia" osv "defghiabc" med mere udgår, så for hver 1 godkendt række er der 8, der udgår - så noget med 9!/9
acore Ekspert
13. maj 2020 - 20:07 #10
#9: Netop - som jeg skrev i #3 - 9!/9 = 8!
Jan K Ekspert
13. maj 2020 - 20:30 #11
Enig hvis de sidder rundt om et bord. Jeg så det for mig som 9 stole på en række.
jens48 Ekspert
14. maj 2020 - 00:07 #12
Og her er en makro, som viser alle kombinationsmulighederne, men lad være med at køre den, hvis du skal bruge Excel til noget andet den næste times tid.

Sub fact()
Application.Calculation = xlCalculationManual
Dim A, B, C, D, E, F, G, H, I, R, X As Long
R = 1
For X = 123456789 To 987654321
A = Mid(X, 1, 1)
If A = 0 Then X = X + 100000000
B = Mid(X, 2, 1)
If B = 0 Then X = X + 10000000
C = Mid(X, 3, 1)
If C = 0 Then X = X + 1000000
D = Mid(X, 4, 1)
If D = 0 Then X = X + 100000
E = Mid(X, 5, 1)
If E = 0 Then X = X + 10000
F = Mid(X, 6, 1)
If F = 0 Then X = X + 1000
G = Mid(X, 7, 1)
If G = 0 Then X = X + 100
H = Mid(X, 8, 1)
If H = 0 Then X = X + 10
I = Mid(X, 9, 1)
If I = 0 Then X = X + 1
If A <> B And A <> C And A <> D And A <> E And A <> F And A <> G And A <> H And A <> _
I And B <> C And B <> D And B <> E And B <> F And B <> G And B <> H And B <> _
I And C <> D And C <> E And C <> F And C <> G And C <> H And C <> _
I And D <> E And D <> F And D <> G And D <> H And D <> _
I And E <> F And E <> G And E <> H And E <> _
I And F <> G And F <> H And F <> _
I And G <> H And G <> I And H <> _
I And A <> 0 And B <> 0 And C <> 0 And D <> 0 And E <> 0 And F <> 0 And G <> 0 And H <> 0 And I <> 0 Then
Cells(R, 1) = X
R = R + 1
End If
Next
Application.Calculation = xlCalculationAutomatic
End Sub
xl-Enthusiast Ekspert
14. maj 2020 - 05:42 #13
Ved at lede på en gammel pc fandt jeg noget kode lavet af Excel MVP Myrna Larson tilbage i år 2000 og posteret i Microsoft.Public.Excel.Misc. Koden er lavet mens Excel kun havde 65536 rækker.

Koden genererer en liste med FACT(8) = 40320 i løbet af et splitsekund og en liste med FACT(9) = 362880 på mindre end fem sekunder. Listen indsættes i et nyt ark.
Filen er gemt som Excel 97-2003 workbook. Lav ikke om på det.

Så værsgod at se alle mulighederne finb.

https://www.dropbox.com/scl/fi/gpglkricvnadkmwc43p6o/Permutations.xls?dl=0&rlkey=ylthdn764er1si271ynya1ivr
jens48 Ekspert
14. maj 2020 - 10:14 #14
Ups. Makroen i #12 springer nogle (ca. 40.000) kombinationer over. Men denne finder alle 362800.

Sub fact()
Application.Calculation = xlCalculationManual
Dim A, B, C, D, E, F, G, H, I, R, X As Long
R = 1
For X = 123456789 To 987654321
A = Left(X, 1)
B = Mid(X, 2, 1)
C = Mid(X, 3, 1)
D = Mid(X, 4, 1)
E = Mid(X, 5, 1)
F = Mid(X, 6, 1)
G = Mid(X, 7, 1)
H = Mid(X, 8, 1)
I = Mid(X, 9, 1)
If A <> B And A <> C And A <> D And A <> E And A <> F And A <> G And A <> H And A <> _
I And B <> C And B <> D And B <> E And B <> F And B <> G And B <> H And B <> _
I And C <> D And C <> E And C <> F And C <> G And C <> H And C <> _
I And D <> E And D <> F And D <> G And D <> H And D <> _
I And E <> F And E <> G And E <> H And E <> _
I And F <> G And F <> H And F <> _
I And G <> H And G <> I And H <> _
I And B <> 0 And C <> 0 And D <> 0 And E <> 0 And F <> 0 And G <> 0 And H <> 0 And I <> 0 Then
Cells(R, 1) = X
R = R + 1
End If
Next
Application.Calculation = xlCalculationAutomatic
End Sub
finb Ekspert
14. maj 2020 - 13:12 #15
Foreløbig tak, skal lige se det igennem, vender tilbage...
tak finb
finb Ekspert
18. maj 2020 - 12:59 #16
# 14: Genial i sin enkelhed ! Tak !

Lige et tillægsspørgsmål:
Nu stiger komforten, og
stol 1, stol 2 og stol 3 deler bord 1
stol 4, stol 5 og stol 6 deler bord 2
stol 7, stol 8 og stol 6 deler bord 3

Hvis der ved fx bord 1 sidder person 1,2,3
så kan der ikke også sidde person 2,1,3
eller person 3,1,2 osv. ved bord 1.

Bord 1 må altså kun tildeles 1 konstellation af personerne 1,2,3.
Ligeså med bord 2 og 3.
Det giver selvfølgelig færre løsninger,
hvordan kan det programmeres i VBA ?
Tak finb 
(bordene er ikke runde, ha ha)
finb Ekspert
18. maj 2020 - 13:04 #17
Ser # 13 senere, tak finb
jens48 Ekspert
21. maj 2020 - 23:10 #18
Er vi enige om at der med din sidste opdeling skal være 1680 muligheder?
1680 =(9!/6!/3!)*(6!/3!/3!)
finb Ekspert
25. maj 2020 - 14:11 #19
#18
-det skal jeg lige tænke lidt over...
jens48 Ekspert
25. maj 2020 - 14:25 #20
Du får lige makroen til det. Ikke særlig elegant, men det var den eneste måde jeg kunne få det til at fungere på. Jeg laver ligesom ved den foregående alle muligheder (362880 kombinationer), men deler det op i tre kolonner, og sletter så alle dem der har de samme tal i kolonne C. Så ryger 5 af 6 ud. Så sorteres og så slettes alle der har de samme tal i kolonne B. Igen ryger 5 af 6. Til sidst det samme med kolonne A. Igen ryger 5 af 6. Den tog et par timer at køre, men kom som forventet ud med 1680 kombinationer.
1680 =(9!/6!/3!)*(6!/3!/3!)=9!/6/6/6

Sub fact()
Application.Calculation = xlCalculationManual
Dim A, B, C, D, E, F, G, H, I, R, X As Long
R = 1
For X = 123456789 To 987654321
A = Left(X, 1)
B = Mid(X, 2, 1)
C = Mid(X, 3, 1)
D = Mid(X, 4, 1)
E = Mid(X, 5, 1)
F = Mid(X, 6, 1)
G = Mid(X, 7, 1)
H = Mid(X, 8, 1)
I = Mid(X, 9, 1)
If A <> B And A <> C And A <> D And A <> E And A <> F And A <> G And A <> H And A <> _
I And B <> C And B <> D And B <> E And B <> F And B <> G And B <> H And B <> _
I And C <> D And C <> E And C <> F And C <> G And C <> H And C <> _
I And D <> E And D <> F And D <> G And D <> H And D <> _
I And E <> F And E <> G And E <> H And E <> _
I And F <> G And F <> H And F <> _
I And G <> H And G <> I And H <> _
I And B <> 0 And C <> 0 And D <> 0 And E <> 0 And F <> 0 And G <> 0 And H <> 0 And I <> 0 Then
Cells(R, 1) = A & B & C
Cells(R, 2) = D & E & F
Cells(R, 3) = G & H & I

R = R + 1
End If
Next
'Sletter alle rækker med de samme tal i kolonne C
For R = 362880 To 2 Step -1
If Cells(R, 1) = Cells(R - 1, 1) And Cells(R, 2) = Cells(R - 1, 2) Then
Rows(R).EntireRow.Delete
End If

Next
'Ny sortering
Range("A1:C1").Select
    Range(Selection, Selection.End(xlDown)).Select
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add2 Key:=Range( _
        "A1:A60480"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add2 Key:=Range( _
        "C1:C60480"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add2 Key:=Range( _
        "B1:B60480"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    With ActiveWorkbook.Worksheets("Sheet1").Sort
        .SetRange Range("A1:C60480")
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
'Sletter alle rækker med de samme tal i kolonne B
For R = 60480 To 2 Step -1
If Cells(R, 1) = Cells(R - 1, 1) And Cells(R, 3) = Cells(R - 1, 3) Then
Rows(R).EntireRow.Delete
End If
Next
'Ny sortering
  Range("A1:C1").Select
    Range(Selection, Selection.End(xlDown)).Select
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add2 Key:=Range( _
        "B1:B10080"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add2 Key:=Range( _
        "C1:C10080"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add2 Key:=Range( _
        "A1:A10080"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    With ActiveWorkbook.Worksheets("Sheet1").Sort
        .SetRange Range("A1:C10080")
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
'Sletter all rækker med de samme til i kolonne A
For R = 10080 To 2 Step -1
If Cells(R, 2) = Cells(R - 1, 2) And Cells(R, 3) = Cells(R - 1, 3) Then
Rows(R).EntireRow.Delete
End If
Next
'Ny sortering (tilbage til det oprindelige)
    Range("A1:C1").Select
    Range(Selection, Selection.End(xlDown)).Select
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add2 Key:=Range( _
        "A1:A1680"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add2 Key:=Range( _
        "B1:B1680"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add2 Key:=Range( _
        "C1:C1680"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    With ActiveWorkbook.Worksheets("Sheet1").Sort
        .SetRange Range("A1:C1680")
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

Application.Calculation = xlCalculationAutomatic
End Sub
finb Ekspert
26. maj 2020 - 12:23 #21
ad #20:
Den skal jeg lige læse, vender tilbage...

ad #18:
""1680 =(9!/6!/3!)*(6!/3!/3!)""
Jeg forstår muligvis (6!/3!/3!), men ikke helt (9!/6!/3!) ?
jens48 Ekspert
26. maj 2020 - 13:19 #22
Du tager først 3 af 9. Der er der 9!/6!/3! muligheder. Derefter tages der 3 af 6. Der giver 6!/3!/3! muligheder. Og de sidste 3 kommer i sidste gruppe. Det giver 1 mulighed. Ialt (9!/6!/3!)*(6!/3!/3!)*1
finb Ekspert
27. maj 2020 - 12:56 #23
#20 - Det er rigtig godt !
Måske omfattende løsning, med det virker !
Jeg prøver, om jeg kan koge det lidt ned.

#22 - det hjælper på forståelsen ! Tak
-Senere kommer jeg nok med et udvidet spm., men foreløbig tak !
finb
finb Ekspert
28. maj 2020 - 12:02 #24
Men hov, er det nu rigtigt ?
Den nedenstående ændrer 123,123,123 til: 123
-men ændrer den fx 123,231,321 til: 123 ?

""'Sletter alle rækker med de samme tal i kolonne B
For R = 60480 To 2 Step -1
If Cells(R, 1) = Cells(R - 1, 1) And Cells(R, 3) = Cells(R - 1, 3) Then
Rows(R).EntireRow.Delete
End If
Next""
jens48 Ekspert
28. maj 2020 - 13:50 #25
Nej, den ændrer ikke rækkefølgen i cellen til 123, den sletter alle rækker nedenunder den række, hvor der står 123. Det er betinget af den foregående sortering, således at cellen med 123 altid står øverst
Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links

Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester





Premium
Fremtiden har aldrig set mere usikker ud for Intel: Her er det, der kan redde – og dødsdømme chip-kæmpen
Computerviews: Intels nyslåede topchef Pat Gelsinger står overfor en stribe rigtig svære beslutninger. Hvis han ikke træder varsomt, vil chip-giganten sandsynligvis sygne hen.
Computerworld
Denne malware er den største trussel mod din virksomhed lige nu
Den mest aktive malware i verden sniger sig ind, og at svært at gøre nøget ved. Se her hvordan du tager dine forholdsregler.
CIO
Podcast: Hos Viking Life-Saving Equipment er it gået fra at være backend til at være noget, som kunderne spørger aktivt efter
Podcast, The Digital Edge: Viking leverer en stadig større del af deres produkt som en tjeneste. Som en del af tjenesten tager Viking ansvar for sikkerheden ved at levere, dokumentere og vedligeholde det nødvendige sikkerhedsudstyr. Hør hvordan Henrik Balslev senior digital director hos Viking har løftet den opgave.
Job & Karriere
Microsoft i kæmpe dansk satsning - åbner tre store datacentre i Danmark
Microsoft lancerer kæmpe satsning fra hovedkvarteret i Lyngby. Selskabet åbner tre store bæredygtige datacentre på Sjælland.
White paper
Kunsten at navigere i en tilpasningsøkonomi
Evnen til at tilpasse sig en verden i konstant forandring bliver afgørende for virksomhedens mulighed for at vækste i fremtiden. Ét af de finansielle håndtag du kan skrue på, er en hel eller delvis outsourcing af it-driften. I e-bogen ”Kunsten at navigere i en tilpasningsøkonomi” får du viden om, hvordan din virksomhed kan bruge tilpasningsøkonomi til at håndtere fremtidens krav til it. Vi spørger blandt andet: - Kan din virksomhed skalere og tilpasse sin digitale kapacitet og økonomi? - Har dine kunder tillid til, at du har de skarpeste it-løsninger? - Ville I kunne styrke forretningen ved at give jeres it mere fokus? - Kan I få øget funktionalitet til samme pris? Vi fokuserer på risiko, økonomi, fokus og valg af it-partner, som er fire opmærksomhedspunkter du skal have styr på for at lykkes med at tilpasse virksomheden til at modstå forandringerne i verden.