C++ / C# · stegvis svårare

Valfria extraövningar

Utforska repot fritt, eller välj en uppgift som inspiration; det förväntas inte att ni klarar alla 18 nivåer.

Använd de här valfria utmaningarna när ni vill ha en utgångspunkt eller gå vidare med en undersökning. De passar efter de fyra grundövningarna, men kan genomföras i valfri ordning; varje nivå anger sina förutsättningar. Ni behöver inte slutföra hela banken. Använd ert tilldelade språk om det inte står att båda ska användas.

Filkartan och testkommandona är en referens, inte obligatorisk läsning inför varje övning. Promptstödet varierar från frågor till nyckelord och sedan till er egen metod. Be OpenCode om en liten ledtråd vid behov.

Starta en ny agent Läs den valda nivån i translations/sv/docs/challenges.md. Berätta dess syfte, vilket första test som ska köras och vilket resultat vi ska granska innan ni redigerar.

Valfritt · 18 nivåer

Välj nästa nivå tillsammans

Nivå 1–7 använder ert tilldelade språk. Nivå 8–18 kan använda både C++ och C#.

  1. 01Kartlägg båda implementationernaHitta motsvarande funktioner och tester i C++ och C# innan ni bygger ut dem.Syfte · uppgift · resultat
    Syfte

    Hitta motsvarande funktioner och tester i C++ och C# innan ni bygger ut dem.

    Uppgift
    1. Kör git status --short och git rev-parse HEAD som en separat baslinje för extraövningen; beskriv befintliga ändringar endast om de påverkar jämförelsen.
    2. Använd filkartan för att hitta båda implementationerna av ClippedArea och ClassifyPoint samt deras faktiska testpåståenden.
    3. Kör ./scripts/test-cpp.sh och ./scripts/test-csharp.sh; behåll båda resultaten tillgängliga för jämförelse utan att ändra något.
    Ledtråd

    Grundövningarna kan redan ha ändrat ett språk. Bevara den startpunkten.

    Promptstöd

    Be om en filkarta och båda testresultaten.

    Klara när

    Ni kan hitta båda versionerna och skilja befintliga fel från senare ändringar.

  2. 02Koppla specifikationsregler till testerHitta beteenden som de offentliga testerna täcker — och sådant de missar.Syfte · uppgift · resultat
    Syfte

    Hitta beteenden som de offentliga testerna täcker — och sådant de missar.

    Uppgift
    1. Läs docs/spec.md och båda offentliga testfilerna från filkartan.
    2. Skapa docs/contract-test-matrix.md: en rad per uttrycklig regel, med kolumner för C++-påstående, C#-påstående och täckningslucka.
    3. Kontrollera varje påståendes indata och jämförelse; hänvisa till dess fil och testnamn eller rad. Ändra inte testerna ännu.
    Ledtråd

    En otestad regel är en täckningslucka. Beteende som specifikationen aldrig definierar är en annan sorts lucka.

    Promptstöd

    Fråga vilka påståenden som stöder varje regel och vad som saknas.

    Klara när

    Varje uttrycklig regel har spårbar täckning eller en tydligt namngiven lucka.

  3. 03Lägg till små geometriregressionerSkydda två definierade beteenden med exempel som ni kan räkna ut själva.Syfte · uppgift · resultat
    Syfte

    Skydda två definierade beteenden med exempel som ni kan räkna ut själva.

    Uppgift

    Lägg till saknad täckning i ert tilldelade språks offentliga tester för:

    • Hörnklassificering: polygon (0,0),(10,0),(10,10),(0,10), punkt (0,0) → Boundary.
    • Partiell överlappning: polygon (5,5),(15,5),(15,15),(5,15), Rect64(0,0,10,10) → area 25.

    Testa båda hörnordningarna. Förklara varje förväntning, undvik dubblerad täckning och kör ./scripts/test-cpp.sh eller ./scripts/test-csharp.sh.

    Ledtråd

    Jämför klassificering exakt och area inom 0.001; en omvänd polygon beskriver samma form.

    Promptstöd

    Be om motiverade förväntningar och regressioner i båda riktningarna.

    Klara när

    Båda fallen och riktningarna lyckas i ert språks offentliga testsvit.

  4. 04Testa former som tangerar och förflyttningKontrollera att tangerande former ger noll area och att beteendet bevaras när alla indata flyttas.Syfte · uppgift · resultat
    Syfte

    Kontrollera att tangerande former ger noll area och att beteendet bevaras när alla indata flyttas.

    Uppgift

    Lägg till dessa fall i era tilldelade offentliga tester:

    • Kantkontakt: polygon (10,2),(14,2),(14,8),(10,8) och Rect64(0,0,10,10) → exakt 0.
    • Hörnkontakt: polygon (10,10),(14,10),(14,14),(10,14) med samma rektangel → exakt 0.
    • Förflyttning: polygon (2,2),(8,2),(8,8),(2,8), Rect64(0,0,6,6), punkt (2,5). Räkna först ut area och klassificering. Flytta sedan polygon, rektangel och punkt med (-5,-7) och kontrollera både de beräknade förväntningarna och oförändrade resultat.

    Kör ./scripts/test-cpp.sh eller ./scripts/test-csharp.sh.

    Ledtråd

    Använd exakta noll- och klassificeringspåståenden; använd toleransen 0.001 för areor som inte är noll och för areajämförelser.

    Promptstart — slutför den tillsammans

    Fråga varför kontakt och förflyttning bör bevara dessa förväntningar.

    Klara när

    De ursprungliga och förflyttade fallen lyckas med oberoende förklarade förväntningar.

  5. 05Förutsäg före körningSkilj mellan er förutsägelse, AI:ns säkerhet och implementationens faktiska beteende.Syfte · uppgift · resultat
    Syfte

    Skilj mellan er förutsägelse, AI:ns säkerhet och implementationens faktiska beteende.

    Uppgift

    Skriv först teamets förutsägelser och be sedan om AI:ns förutsägelser och säkerhet. Kör inte dessa indata förrän båda är sparade i docs/prediction-results.md.

    OperationPolygonRektangel eller punkt
    ClassifyPoint(0,10),(10,10),(10,0),(0,0)punkt (10,10)
    ClassifyPoint(0,0),(0,0),(10,0),(10,10),(0,10)punkt (5,0)
    ClippedArea(0,0),(10,0),(10,10),(0,10)Rect64(5,0,5,10)
    ClippedArea(0,0),(10,10)Rect64(0,0,10,10)
    ClippedArea(0,0),(1000000,0),(1000000,1),(0,1)Rect64(0,0,1000000,1000000)
    ClassifyPoint(0,0),(10,10),(10,0),(0,10)punkt (5,5)

    Använd ett tillfälligt körprogram i ert språk under build/experiments/ för att skriva ut faktiska resultat. Spara det exakta kommandot och observationerna bredvid de ursprungliga förutsägelserna, ange vilka resultat som specifikationen utlovar och ta sedan bort körprogrammet.

    Ledtråd

    Vissa indata ligger avsiktligt utanför specifikationens definierade fall. Skriv ut observationer; gör inte gissningar till testpåståenden.

    Promptstart — slutför den tillsammans

    Be om förutsägelser och säkerhet innan någon körning tillåts.

    Klara när

    Alla sex rader skiljer mellan förutsägelser, observationer och specifikationstäckning; wrappern och de offentliga testerna är oförändrade.

  6. 06Föreslå en saknad regelGör ett odefinierat beteende till en uttrycklig designfråga.Syfte · uppgift · resultat
    Syfte

    Gör ett odefinierat beteende till en uttrycklig designfråga.

    Uppgift
    1. Använd ClippedArea i ert språk med (0,0),(10,10),(10,0),(0,10) och Rect64(0,0,10,10) i ett tillfälligt körprogram för att observera resultatet.
    2. Den här polygonen korsar sig själv; docs/spec.md avgör inte hur den ska tolkas. Föreslå en testbar regel med nytta, kompatibilitetskonsekvenser och ett exempeltest.
    3. Lägg till förslaget, indata, det exakta kommandot och observationen i docs/spec-proposals.md (skapa filen om den saknas). Ta bort körprogrammet; lämna den befintliga specifikationen, wrappern och testerna oförändrade.
    Ledtråd

    Det observerade resultatet är belägg för diskussion, inte automatiskt det krävda svaret.

    Promptstart — slutför den tillsammans

    Fråga vilken regel som skulle göra beteendet testbart.

    Klara när

    Ett tydligt märkt förslag förklarar både det avsedda beteendet och dess konsekvenser.

  7. 07Utmana en föreslagen optimeringAnvänd ett motexempel för att testa om en implementation som ser snabbare ut är korrekt.Syfte · uppgift · resultat
    Syfte

    Använd ett motexempel för att testa om en implementation som ser snabbare ut är korrekt.

    Uppgift

    Börja med godkända tester i ert tilldelade språk.

    1. Läs det medföljande förslaget med begränsningsruta. Skapa en polygon där ett av dess tidiga returvärden ger fel area. Räkna ut det korrekta resultatet oberoende.
    2. Lägg till en offentlig regression och visa att den lyckas med originalkoden.
    3. Tillämpa ./scripts/apply-l7-patch.sh cpp eller ./scripts/apply-l7-patch.sh csharp. Kör ert språks testskript och visa ett påståendefel. Kör sedan samma hjälpare med --revert och visa att den lyckas igen.

    Dokumentera beräkningen och de tre resultaten. Om hjälparen inte hittar sin infogningspunkt, stanna och fråga en handledare; anpassa eller tvinga inte patchen.

    Ledtråd

    En polygons begränsningsruta kan innehålla tomt utrymme. Granska den slutliga diffen: behåll regressionen och teamets övriga arbete och ta bort varje rad från den tillfälliga patchen.

    Valfri ledtråd

    Fråga vilket påstående om en tidig retur som ett motexempel skulle kunna motbevisa.

    Klara när

    Den dokumenterade lyckade körningen → påståendefelet → lyckade körningen visar att regressionen avvisar förslaget.

  8. 08Spegla en regression i båda språkenKontrollera att C++ och C# skyddar samma beteende.Syfte · uppgift · resultat
    Syfte

    Kontrollera att C++ och C# skyddar samma beteende.

    Uppgift
    1. Välj en regression från extraövningarna 3–7, eller fallet med partiell överlappning i extraövning 3 om ni hoppade över dem.
    2. Lägg till motsvarande påståenden i båda offentliga testfilerna i filkartan. Jämför koordinater, ordning, förväntade värden och toleranser sida vid sida.
    3. Kör ./scripts/test-cpp.sh, ./scripts/test-csharp.sh och ./scripts/test-all.sh.
    Ledtråd

    Undersök avvikelser; ändra inte förväntningarna bara för att få implementationerna att matcha.

    Valfri ledtråd

    Promptingredienser: samma indata, samma förväntning, båda språken.

    Klara när

    Båda sviterna testar samma motiverade resultat och alla tre kommandon lyckas.

  9. 09Följ en klippoperation genom biblioteketVerifiera en AI-förklaring mot faktisk Clipper2-källkod.Syfte · uppgift · resultat
    Syfte

    Verifiera en AI-förklaring mot faktisk Clipper2-källkod.

    Uppgift
    1. Fråga hur en kantkorsning hanteras och hur utdatabanor sätts samman. Leta i ert språk efter GetIntersection, AddCorner och ExecuteInternal i src/cpp/Clipper2Lib/src/clipper.rectclip.cpp eller src/csharp/Clipper2Lib/Clipper.RectClip.cs.
    2. Öppna och verifiera minst två file:line-hänvisningar från förklaringen.
    3. Testa ett observerbart påstående genom ClippedArea eller RectClip i er offentliga testsvit. Förklara det förväntade resultatet, kör ert språks testskript och behåll den godkända regressionen.
    Ledtråd

    Följ ett litet exempel. Spara den exakta förfrågan och kontexten om ni vill jämföra modeller i extraövning 17.

    Valfri ledtråd

    Promptingredienser: kantkorsning, källhänvisningar, observerbara belägg.

    Klara när

    Två hänvisningar stöder förklaringen och ett godkänt test visar ett påstående.

  10. 10Testa relationer mellan formerKontrollera egenskaper över flera indata samtidigt som ni behåller regressioner med exakta värden.Syfte · uppgift · resultat
    Syfte

    Kontrollera egenskaper över flera indata samtidigt som ni behåller regressioner med exakta värden.

    Uppgift
    1. Definiera samma fasta lista med högst 20 små rektanglar eller icke-självskärande trianglar i båda offentliga sviterna. Ge varje fall uttryckliga koordinater, klipprektangel, frågepunkt och ett stabilt fall-ID.
    2. Testa att omvänd hörnordning eller att alla indata flyttas tillsammans bevarar area och klassificering. Kontrollera att klippt area ligger mellan noll och rektangelns area. Förklara varför dessa relationer gäller.
    3. Behåll tidigare påståenden med exakta värden, ange fall och koordinater i fel och kör båda språkens skript samt ./scripts/test-all.sh.
    Ledtråd

    Använd toleransen 0.001 konsekvent, även för gränser. Relationer kan missa en implementation som alltid returnerar noll.

    Valfri ledtråd

    Promptingredienser: fasta fall, invarianta egenskaper, tester av exakta värden.

    Klara när

    Båda språken klarar samma reproducerbara fall och behåller oberoende tester av förväntade värden.

  11. 11Jämför språkens utdata automatisktBygg differentialtestning: ge båda implementationerna identisk indata och rapportera skillnader i utdata.Syfte · uppgift · resultat
    Syfte

    Bygg differentialtestning: ge båda implementationerna identisk indata och rapportera skillnader i utdata.

    Uppgift
    1. Välj minst 20 fasta giltiga fall med ID:n, polygoner, klipprektanglar och frågepunkter. Återanvänd fallen från extraövning 10 och lägg till tillräckligt många för att nå 20.
    2. Låt de offentliga testkörprogrammen skriva nya build/parity-cpp.csv och build/parity-csharp.csv: kolumnerna case_id,area,classification, identisk ordning, invariant decimalformatering och namnen Outside, Boundary, Inside.
    3. Skapa ett körbart scripts/parity-diff.sh. Jämför efter ID; avvisa dubbletter, saknade ID:n, olika klassificeringar eller areaskillnader över 0.001 och returnera icke-noll vid fel.
    4. Kör de exakta kommandona för att skapa och jämföra. Visa en upptäckt avvikelse med en ändrad kopia, och skapa sedan om äkta utdata. Håll CSV-filerna utanför commits.
    Ledtråd

    Lös sökvägar från repots rot och visa absoluta utdatasökvägar. Förhindra att gamla CSV-filer överlever en misslyckad generering. Att språken är överens ersätter inte oberoende motiverade tester.

    Valfri ledtråd

    Promptingredienser: ny utdata, tillförlitlig jämförelse, demonstrerat fel.

    Klara när

    Äkta utdata matchar eller har förklarade skillnader, jämföraren upptäcker en avsiktlig avvikelse och de vanliga testerna kan fortfarande köras.

  12. 12Lägg till ett litet batch-APIKom överens om en funktions beteende innan ni ber AI implementera den.Syfte · uppgift · resultat
    Syfte

    Kom överens om en funktions beteende innan ni ber AI implementera den.

    Uppgift
    1. Välj ClassifyPoints (många punkter, en polygon) eller ClippedAreas (många polygoner, en rektangel; standardvalet). Skriv exakta C++-/C#-signaturer i docs/batch-api.md: bevara indataordningen, returnera en tom lista för tom indata och matcha separata anrop med en indata. Areor förblir oberoende och bildar inte en polygonunion.
    2. Be om separata pass för API-konventioner och testdesign, med avgränsade assistenter om sådana finns eller sekventiellt annars. Granska den samlade planen som ett team före implementation.
    3. Lägg till API:t och deklarationerna i båda språken, med tester för tom indata och ordningskänsliga blandade indata. Kör båda språkens skript och ./scripts/test-all.sh.
    Ledtråd

    Håll funktionen som ett tunt lager runt de befintliga funktionerna; verifiera varje assistants bidrag.

    Valfri ledtråd

    Promptingredienser: kontrakt först, avgränsat arbete, verifiering.

    Klara när

    Båda API:erna följer det överenskomna dokumentet och testerna lyckas, inklusive tom indata och ordning.

  13. 13Bevisa att en regression fångar ett felÖva mutationstestning: introducera tillfälligt ett specifikt misstag och visa att testet upptäcker det.Syfte · uppgift · resultat
    Syfte

    Öva mutationstestning: introducera tillfälligt ett specifikt misstag och visa att testet upptäcker det.

    Uppgift

    Börja med godkända tester i ert tilldelade språk.

    1. Skapa en icke-självskärande polygon vars klippta skärning har minst två separata delar. Bekräfta i ett tillfälligt körprogram det råa antalet RectClip-banor med .size() (C++) eller .Count (C#). Räkna oberoende ut deras sammanlagda area och lägg till en ClippedArea-regression.
    2. Visa att regressionen lyckas. Spara de exakta aktuella ackumulerings-/returraderna och ersätt dem sedan tillfälligt med den felaktiga retur som visas nedan. Kör ert språks testskript och visa ett påståendefel.
    3. Återställ de exakta raderna och visa att det lyckas. Behåll regressionen och resultaten; ta bort körprogrammet och all avsiktligt felaktig kod utan att förlora andra ändringar.

    Tillfällig retur i C++:

    return clipped.empty()
        ? 0.0
        : std::abs(Clipper2Lib::Area(clipped.front()));

    Tillfällig retur i C#:

    return clipped.Count == 0
        ? 0.0
        : Math.Abs(Clipper.Area(clipped[0]));
    Ledtråd

    Felet räknar bara den första delen. Om resultatvariabeln inte heter clipped eller ersättningens gräns är oklar, fråga en handledare. Ett kompileringsfel är inte ett bevis.

    Valfri ledtråd

    Er tur: utforma förfrågan.

    Klara när

    Ni har dokumenterat minst två banor och lyckad körning → avsiktligt påståendefel → lyckad körning; originalimplementationen är återställd.

  14. 14Reducera en indata utan att förlora dess beteendeGör ett överraskande resultat enklare att undersöka genom att hitta ett mindre exempel.Syfte · uppgift · resultat
    Syfte

    Gör ett överraskande resultat enklare att undersöka genom att hitta ett mindre exempel.

    Uppgift

    Använd ert språks ClippedArea med Rect64(0,0,20,20) och:

    (0,0),(5,5),(10,10),(15,15),(20,20),(20,10),
    (20,0),(15,5),(10,10),(5,15),(0,20),(0,10)
    1. Skapa ett tillfälligt körprogram under build/experiments/ som läser hörn från en datafil. Dokumentera dess exakta kommando och ursprungliga resultat i docs/minimised-case.md.
    2. Välj ett fast villkor att bevara, till exempel area inom en angiven tolerans. Ta bort ett hörn i taget, behåll ordningen och minst tre hörn och kör igen efter varje försök. Dokumentera accepterade och avvisade borttagningar.
    3. Försök till slut med varje tillåten borttagning av ett enda hörn. Behåll den slutliga indatan, villkoret, kommandona och resultaten; ta bort körprogrammet. Lämna wrappern och de offentliga testerna oförändrade.
    Ledtråd

    Polygonen korsar sig själv, så resultatet är en observation och ingen specifikationsgaranti. Att ingen ytterligare enskild borttagning fungerar betyder lokalt minimal, inte globalt minst.

    Valfri ledtråd

    Er tur: utforma förfrågan.

    Klara när

    Den mindre indatan bevarar ert fasta villkor och de slutliga försöken med borttagning motiverar lokal minimalitet.

  15. 15Undersök precision vid stora koordinaterSe om en exakt heltalsarea överlever API:ts flyttalsreturvärde.Syfte · uppgift · resultat
    Syfte

    Se om en exakt heltalsarea överlever API:ts flyttalsreturvärde.

    Uppgift
    1. För k = 1..9, sätt n = 10^k - 1. Använd kvadraten (0,0),(n,0),(n,n),(0,n) och Rect64(0,0,n,n); dess exakta area är n × n.
    2. Använd ett tillfälligt körprogram under build/ och språkets BigInteger, unsigned __int128 eller en verifierad motsvarighet. Skriv ut nio ordnade rader: k, n, exakt heltalsarea, faktiskt ClippedArea-resultat och exakt numerisk likhet. Runda inte det förväntade heltalet till double före jämförelsen.
    3. Spara alla rader, det exakta kommandot och den första avvikelsen (om någon) i docs/precision-results.md. Lägg till ett noggrannhets-/intervallförslag med kompatibilitetskonsekvenser i docs/spec-proposals.md, och skapa filen vid behov. Ta bort körprogrammet; lämna befintlig specifikation, wrapper och tester oförändrade.
    Ledtråd

    Förklara jämförelsemetoden innan ni litar på den. Detta undersöker exakt likhet, inte den vanliga testtoleransen 0.001.

    Valfri ledtråd

    Er tur: utforma förfrågan.

    Klara när

    Era belägg bevarar den exakta referensen och stöder ett tydligt märkt förslag utan att förutsätta att en avvikelse måste uppstå.

  16. 16Förbered en granskbar ändringGör det enkelt för någon annan att förstå och bedöma ert arbete.Syfte · uppgift · resultat
    Syfte

    Gör det enkelt för någon annan att förstå och bedöma ert arbete.

    Uppgift
    1. Använd baslinjen från extraövning 1, eller identifiera en commit direkt före era avsedda ändringar. Bekräfta att diffen har rätt omfattning.
    2. Granska git status --short och git diff. Lägg återstående arbete i fokuserade commits utan genererade filer, orelaterade ändringar eller omskrivning av delad historik. Kör ./scripts/test-all.sh.
    3. Be i en ny AI-konversation om en granskning med exakta baslinje-/slutcommits, relevant specifikation, källkod och testutdata. Leta efter ostödda påståenden, orelaterade ändringar, försvagade påståenden och saknade negativa fall.
    4. Bedöm materiella fynd i docs/review-notes.md: godta eller avvisa dem med belägg. Åtgärda grundade problem, kör berörda tester igen och uppdatera slutrevisionen.
    Ledtråd

    Negativa fall tränar olika eller tomma resultat, eller dokumenterat avvisande. Behandla granskningsfynd som hypoteser; be inte om en kvot problem.

    Valfri ledtråd

    Er tur: utforma förfrågan.

    Klara när

    Omfattningen och commiternas syften är tydliga, fynden är lösta med motiveringar och de slutliga testerna lyckas.

  17. 17Jämför två modeller rättvistVälj vilket svar ni ska lita på med hjälp av belägg, inte säkerhet eller längd.Syfte · uppgift · resultat
    Syfte

    Välj vilket svar ni ska lita på med hjälp av belägg, inte säkerhet eller längd.

    Uppgift
    1. Återanvänd en fråga från extraövning 7 eller 9. Förbered en förfrågan och samma kod-/specifikationssnapshot för båda modellerna; ta inte med någon modells tidigare svar.
    2. Använd /new för varje körning, sedan /models, och välj därefter Plan med Tab (detaljer). Dokumentera de faktiska modellnamnen. Avböj filändrande åtgärder, jämför diffar före och efter och ta tid på varje komplett svar med en telefontimer.
    3. Skapa i docs/model-comparison.md två modellrader med tre kolumner: verifierade hänvisningar, ett påstående testat med faktiskt kommando/resultat och förfluten tid. Verifiera påståenden efter att båda svaren samlats in; märk saknade belägg ärligt.
    4. Förklara vilket svar ni litar på och varför. Behåll experimentets indata/resultat och ta sedan endast bort tillfällig jämförelsekod; bevara tidigare tester.
    Ledtråd

    Nya konversationer och identisk kontext gör jämförelsen meningsfull. Plan garanterar inte ensam att filer förblir oförändrade.

    Valfri ledtråd

    Er tur: utforma förfrågan.

    Klara när

    Två likvärdiga körningar har en evidensbaserad jämförelse och experimentet har inte lämnat några käll-/teständringar efter sig.

  18. 18Skriv användbara instruktioner för er AIGör era erfarenheter till fungerande regler som ni kan testa.Syfte · uppgift · resultat
    Syfte

    Gör era erfarenheter till fungerande regler som ni kan testa.

    Uppgift
    1. Välj lärdomar från lyckade metoder, förvirring eller ett valfritt AI-misstag. Skriv 3–5 korta regler i docs/team-rules.md, var och en med en observerbar handling och erfarenheten bakom den.
    2. Välj en tidigare förfrågan som kan förbättras. Starta en ny konversation, läs uttryckligen in reglerna, ange samma nödvändiga kontext och upprepa den förfrågan oförändrad.
    3. Dokumentera en kort före-/efterjämförelse: vad förväntade ni er skulle ändras och vad ändrades faktiskt?
    Ledtråd

    Filen läses inte in automatiskt. Behåll befintliga agentinstruktioner i repot oförändrade; ”ingen tydlig förbättring” är en giltig observation.

    Valfri ledtråd

    Er tur: utforma förfrågan.

    Klara när

    Era regler är specifika, används uttryckligen i en ny konversation och utvärderas mot ett tidigare svar.