Nekromanti Krank bygger: Ledtrådsfilter och datorstöd

krank

Lättkränkt cancelkultur-kommunist
Joined
28 Dec 2002
Messages
36,180
Location
Rissne
Jag gillar ledtrådar, jag gillar mysterier, jag gillar att hitta sätt att systematisera och använda datorstöd för att avhjälpa mina förberedelser när jag ska spelleda.

När jag funderat kring ledtrådar så har försökt fundera kring hur de egentligen funkar i äventyr; hur spelarna interagerar med dem, vad i ledtrådspusslande det är som gör det klurigt och roligt, som gör att man får känna sig clever.

En av de saker jag funderade på är vad jag kallat filtrering. Det är egentligen en klassisk grej som synts i de flesta CSI-kloner och deckarberättelser: Om en ledtråd säger att den skyldige antingen befinner sig på plats A, B eller C och en annan ledtråd säger att den skyldige befinner sig på plats C, D eller E så kan man, med båda ledtrådarna i hand, sluta sig till att det nog vore bra att undersöka plats C. Det här yttrar sig på tusen olika sätt med tusen olika sorters ledtrådar, men grundstrukturen är densamma.

Så... hur kan man hjälpa skapandet av sådana strukturer? Det är klart att man helt enkelt kan hitta på ett gäng ledtrådar och försöka få dem att passa ihop på ett bra sätt, men... jag vill åtminstone ha lite stöd i det arbetet. Och jag upptäckte också att det åtminstone för mig ganska snabbt blir klurigt att hålla reda på allt så snart det börjar bli fler ledtrådar och platser inblandade.

Jag började med att skapa ett nytt Google Sheets-dokument. Jag visste att jag skulle vilja ha minst omkring 8 olika platser och att äventyret jag pillade med nog skulle kunna formas om till att ha fyra olika trådar som ledde till fyra olika filterledtrådar. Jag numrerade platserna 1-8 och filtren fick bli A-D. Jag visste på ett ungefär vilka de åtta platserna skulle vara, och att fem av dem skulle vara av samma typ, men jag visste inte mer om ledtrådarna än att en av dem antagligen skulle informera om att rollpersonernas mål ligger i en av de fem som är av samma typ. Men till en början fick det bli ganska abstrakt - jag tycker om att jobba så. Vad exakt ledtrådarna handlar om kan jag hitta på när jag vet vilka platser de ska peka mot.

Så, jag började med en enkel uppställning.



Filtren (ledtrådarna) vertikalt, platserna horisontellt. x betyder "ledtråden pekar mot platsen" och siffrorna i kolumn B är helt enkelt antalet platser som ingår i respektive filter. Siffrorna genereras helt enkelt med den här formeln:

Code:
=COUNTIF(C2:J2,"=x")
Den gröna färgen är den plats som är "rätt", fetstilen är de fem som "hör ihop".


Steg 2 blev att fundera kring kombinationer. Jag orkade inte räkna ut något sätt att generera en lista med unika filterkombinationer, så jag skrev helt enkelt in alla jag kunde komma på med 2 eller 3 filter:



Sedan funderade jag på min målbild. I äventyret tänker jag mig att det kan finnas negativa effekter av att undersöka platser, t.ex. att man varnar fienden eller så. Jag tänkte därför att det vore bra om tre filter alltid ledde till att man visste exakt vart man skulle (bara en plats) och att två filter skulle kunna leda till mellan 1 och 3 filter - idealiskt sett ska det finnas ett par kombinationer av två filter som leder exakt rätt, någon kombination som leder till 3 platser (och därmed i princip är värdelös) och att resten ska leda till att man kommer ner till 2 platser.

Det här gör att jag måste räkna lite. Jag orkar inte räkna själv, så jag byggde istället en formel. Den ser ut såhär:

Code:
=IF(
  COUNTIF(
    FILTER(C$2:C$5,
      REGEXMATCH($A$2:$A$5,
        SUBSTITUTE($A8,"+","|")
      )
    ),
    "x")
    =LEN(SUBSTITUTE($A8,"+","")
  ),
  "x",
  ""
)
Den placeras sedan i cell C8, och utökas sedan till hela området C8:J13:



Formeln gör alltså såhär:
  • Hämta innehållet i A8, och byt ut + mot |. (SUBSTITUTE - Egentligen hade jag kunnat skriva med | direkt, men jag gillar tydligheten i +)
  • Använd ett filter för att få fram alla rader som matchar resultatet - alltså t.ex. A|B, som innebär "A eller B". (FILTER och REGEXMATCH)
  • Räkna hur många av de raderna som har ett "x" i sig i den nuvarande kolumnen (COUNTIF)
  • Se hur många bokstäver det står i A8 (LEN och SUBSTITUTE).
  • Se om antalet filtrerade rader med x i sig är lika med antalet bokstäver i A8 (IF - kollar alltså ifall alla framfiltrerade rader har ett x, eftersom antal framfiltrerade rader ska vara lika med antalet bokstäver)
  • Om det är så - skriv "x". Annars, skriv "".
Formeln tog en stund att bygga - som vanligt byggde jag varje del för sig och testade, så att jag testade SUBSTITUTE och LEN(SUBSTITUTE)-kombinationerna, och REGEXMATCH+FILTER, och så vidare, i "kladdrutor" medan jag arbetade. Sedan satte jag ihop dem varsamt, en i taget, och dubbelkollade förväntat resultat kontra faktiskt resultat.

Resultatet blir som syns på bilden - eftersom A8 är skrivet som $A8 så betyder det att när jag utökar formeln så fortsätter alla rutor att använda A-kolumnen, men raden beror på vilken rad formeln står i. Så alla i formeln i alla celler på rad 12 står det istället $A12. Jag gillar verkligen det här med att kunna utöka/fylla ut formler...

Sedan är det ganska lätt - I B8:B13 står det samma COUNTIF-formel som i B2:B5, så där räknas helt enkelt antalet x på respektive rad.

Eftersom jag också ville bry mig om tre-filter-kombinationer så byggde jag helt enkelt vidare - formeln ovan funkar även när det står A+B+C till exempel, eftersom den hela tiden använder antalet bokstäver i den första kolumnen snarare än ett fast värde.



Det ni ser ovan är det färdiga resultatet - jag råkade såklart inte få allting perfekt direkt, utan jag fick fortfarande sitta och pilla en del. Men jag hade god hjälp av det visuella stödet - jag såg direkt vilken effekt varje kryss hade på antalet kombinationer och så. Ovanstående resultat funkar för mig - två filterkombinationer (A+D och B+C) leder direkt rätt, en (A+C) är rätt värdelös och övriga leder till visst riskmoment men bör åtminstone kunna leda rollpersonerna rätt inom rimlig tid.

Min förhoppning är såklart att det här ska kunna användas fler gånger - att jag kan plocka upp det här kalkylbladet nästa gång, bestämma ett annat antal filterledtrådar och platser, och bara fylla på.

Jag tror absolut att mina formler kan förbättras av folk som vet vad de håller på med på riktigt, men... I dunno, jag ville mest skryta lite om vad jag lyckades få ihop och kanske inspirera/visa lite hur jag tänker och jobbar när jag bygger äventyr...
 

Attachments

Caligo

Swashbuckler
Joined
3 Aug 2010
Messages
2,073
Location
Göteborg
Intressant.... Jag har jobbat massor med en komplett äventyrsgenerator i excel. Har väl kommit 20%.....
 

shirian

Veteran
Joined
29 Mar 2018
Messages
8
Spännande! Jag misstänker att graf-teori har en användbar tillämpning på detta problem.
 
Top