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.
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#.
-
01Kartlägg båda implementationernaHitta motsvarande funktioner och tester i C++ och C# innan ni bygger ut dem.Syfte · uppgift · resultat
SyfteHitta motsvarande funktioner och tester i C++ och C# innan ni bygger ut dem.
Uppgift- Kör
git status --shortochgit rev-parse HEADsom en separat baslinje för extraövningen; beskriv befintliga ändringar endast om de påverkar jämförelsen. - Använd filkartan för att hitta båda implementationerna av
ClippedAreaochClassifyPointsamt deras faktiska testpåståenden. - Kör
./scripts/test-cpp.shoch./scripts/test-csharp.sh; behåll båda resultaten tillgängliga för jämförelse utan att ändra något.
LedtrådGrundövningarna kan redan ha ändrat ett språk. Bevara den startpunkten.
PromptstödBe om en filkarta och båda testresultaten.
Klara närNi kan hitta båda versionerna och skilja befintliga fel från senare ändringar.
- Kör
-
02Koppla specifikationsregler till testerHitta beteenden som de offentliga testerna täcker — och sådant de missar.Syfte · uppgift · resultat
SyfteHitta beteenden som de offentliga testerna täcker — och sådant de missar.
Uppgift- Läs docs/spec.md och båda offentliga testfilerna från filkartan.
- 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. - Kontrollera varje påståendes indata och jämförelse; hänvisa till dess fil och testnamn eller rad. Ändra inte testerna ännu.
LedtrådEn otestad regel är en täckningslucka. Beteende som specifikationen aldrig definierar är en annan sorts lucka.
PromptstödFråga vilka påståenden som stöder varje regel och vad som saknas.
Klara närVarje uttrycklig regel har spårbar täckning eller en tydligt namngiven lucka.
-
03Lägg till små geometriregressionerSkydda två definierade beteenden med exempel som ni kan räkna ut själva.Syfte · uppgift · resultat
SyfteSkydda två definierade beteenden med exempel som ni kan räkna ut själva.
UppgiftLä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)→ area25.
Testa båda hörnordningarna. Förklara varje förväntning, undvik dubblerad täckning och kör
./scripts/test-cpp.sheller./scripts/test-csharp.sh.LedtrådJämför klassificering exakt och area inom
0.001; en omvänd polygon beskriver samma form.PromptstödBe om motiverade förväntningar och regressioner i båda riktningarna.
Klara närBåda fallen och riktningarna lyckas i ert språks offentliga testsvit.
- Hörnklassificering: polygon
-
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
SyfteKontrollera att tangerande former ger noll area och att beteendet bevaras när alla indata flyttas.
UppgiftLägg till dessa fall i era tilldelade offentliga tester:
- Kantkontakt: polygon
(10,2),(14,2),(14,8),(10,8)ochRect64(0,0,10,10)→ exakt0. - Hörnkontakt: polygon
(10,10),(14,10),(14,14),(10,14)med samma rektangel → exakt0. - 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.sheller./scripts/test-csharp.sh.LedtrådAnvänd exakta noll- och klassificeringspåståenden; använd toleransen
0.001för areor som inte är noll och för areajämförelser.Promptstart — slutför den tillsammansFråga varför kontakt och förflyttning bör bevara dessa förväntningar.
Klara närDe ursprungliga och förflyttade fallen lyckas med oberoende förklarade förväntningar.
- Kantkontakt: polygon
-
05Förutsäg före körningSkilj mellan er förutsägelse, AI:ns säkerhet och implementationens faktiska beteende.Syfte · uppgift · resultat
SyfteSkilj mellan er förutsägelse, AI:ns säkerhet och implementationens faktiska beteende.
UppgiftSkriv 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.Operation Polygon Rektangel 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ådVissa indata ligger avsiktligt utanför specifikationens definierade fall. Skriv ut observationer; gör inte gissningar till testpåståenden.
Promptstart — slutför den tillsammansBe om förutsägelser och säkerhet innan någon körning tillåts.
Klara närAlla sex rader skiljer mellan förutsägelser, observationer och specifikationstäckning; wrappern och de offentliga testerna är oförändrade.
-
06Föreslå en saknad regelGör ett odefinierat beteende till en uttrycklig designfråga.Syfte · uppgift · resultat
SyfteGör ett odefinierat beteende till en uttrycklig designfråga.
Uppgift- Använd
ClippedAreai ert språk med(0,0),(10,10),(10,0),(0,10)ochRect64(0,0,10,10)i ett tillfälligt körprogram för att observera resultatet. - 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.
- 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ådDet observerade resultatet är belägg för diskussion, inte automatiskt det krävda svaret.
Promptstart — slutför den tillsammansFråga vilken regel som skulle göra beteendet testbart.
Klara närEtt tydligt märkt förslag förklarar både det avsedda beteendet och dess konsekvenser.
- Använd
-
07Utmana en föreslagen optimeringAnvänd ett motexempel för att testa om en implementation som ser snabbare ut är korrekt.Syfte · uppgift · resultat
SyfteAnvänd ett motexempel för att testa om en implementation som ser snabbare ut är korrekt.
UppgiftBörja med godkända tester i ert tilldelade språk.
- 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.
- Lägg till en offentlig regression och visa att den lyckas med originalkoden.
- Tillämpa
./scripts/apply-l7-patch.sh cppeller./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--revertoch 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ådEn 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ådFråga vilket påstående om en tidig retur som ett motexempel skulle kunna motbevisa.
Klara närDen dokumenterade lyckade körningen → påståendefelet → lyckade körningen visar att regressionen avvisar förslaget.
-
08Spegla en regression i båda språkenKontrollera att C++ och C# skyddar samma beteende.Syfte · uppgift · resultat
SyfteKontrollera att C++ och C# skyddar samma beteende.
Uppgift- Välj en regression från extraövningarna 3–7, eller fallet med partiell överlappning i extraövning 3 om ni hoppade över dem.
- 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.
- Kör
./scripts/test-cpp.sh,./scripts/test-csharp.shoch./scripts/test-all.sh.
LedtrådUndersök avvikelser; ändra inte förväntningarna bara för att få implementationerna att matcha.
Valfri ledtrådPromptingredienser: samma indata, samma förväntning, båda språken.
Klara närBåda sviterna testar samma motiverade resultat och alla tre kommandon lyckas.
-
09Följ en klippoperation genom biblioteketVerifiera en AI-förklaring mot faktisk Clipper2-källkod.Syfte · uppgift · resultat
SyfteVerifiera en AI-förklaring mot faktisk Clipper2-källkod.
Uppgift- Fråga hur en kantkorsning hanteras och hur utdatabanor sätts samman. Leta i ert språk efter
GetIntersection,AddCornerochExecuteInternalisrc/cpp/Clipper2Lib/src/clipper.rectclip.cppellersrc/csharp/Clipper2Lib/Clipper.RectClip.cs. - Öppna och verifiera minst två
file:line-hänvisningar från förklaringen. - Testa ett observerbart påstående genom
ClippedAreaellerRectClipi er offentliga testsvit. Förklara det förväntade resultatet, kör ert språks testskript och behåll den godkända regressionen.
LedtrådFö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ådPromptingredienser: kantkorsning, källhänvisningar, observerbara belägg.
Klara närTvå hänvisningar stöder förklaringen och ett godkänt test visar ett påstående.
- Fråga hur en kantkorsning hanteras och hur utdatabanor sätts samman. Leta i ert språk efter
-
10Testa relationer mellan formerKontrollera egenskaper över flera indata samtidigt som ni behåller regressioner med exakta värden.Syfte · uppgift · resultat
SyfteKontrollera egenskaper över flera indata samtidigt som ni behåller regressioner med exakta värden.
Uppgift- 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.
- 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.
- 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ådAnvänd toleransen
0.001konsekvent, även för gränser. Relationer kan missa en implementation som alltid returnerar noll.Valfri ledtrådPromptingredienser: fasta fall, invarianta egenskaper, tester av exakta värden.
Klara närBåda språken klarar samma reproducerbara fall och behåller oberoende tester av förväntade värden.
-
11Jämför språkens utdata automatisktBygg differentialtestning: ge båda implementationerna identisk indata och rapportera skillnader i utdata.Syfte · uppgift · resultat
SyfteBygg differentialtestning: ge båda implementationerna identisk indata och rapportera skillnader i utdata.
Uppgift- 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.
- Låt de offentliga testkörprogrammen skriva nya
build/parity-cpp.csvochbuild/parity-csharp.csv: kolumnernacase_id,area,classification, identisk ordning, invariant decimalformatering och namnenOutside,Boundary,Inside. - Skapa ett körbart
scripts/parity-diff.sh. Jämför efter ID; avvisa dubbletter, saknade ID:n, olika klassificeringar eller areaskillnader över0.001och returnera icke-noll vid fel. - 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ådLö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ådPromptingredienser: 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.
-
12Lägg till ett litet batch-APIKom överens om en funktions beteende innan ni ber AI implementera den.Syfte · uppgift · resultat
SyfteKom överens om en funktions beteende innan ni ber AI implementera den.
Uppgift- Välj
ClassifyPoints(många punkter, en polygon) ellerClippedAreas(många polygoner, en rektangel; standardvalet). Skriv exakta C++-/C#-signaturer idocs/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. - 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.
- 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ådHåll funktionen som ett tunt lager runt de befintliga funktionerna; verifiera varje assistants bidrag.
Valfri ledtrådPromptingredienser: kontrakt först, avgränsat arbete, verifiering.
Klara närBåda API:erna följer det överenskomna dokumentet och testerna lyckas, inklusive tom indata och ordning.
- Välj
-
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.
UppgiftBörja med godkända tester i ert tilldelade språk.
- 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 enClippedArea-regression. - 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.
- Å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ådFelet räknar bara den första delen. Om resultatvariabeln inte heter
clippedeller ersättningens gräns är oklar, fråga en handledare. Ett kompileringsfel är inte ett bevis.Valfri ledtrådEr tur: utforma förfrågan.
Klara närNi har dokumenterat minst två banor och lyckad körning → avsiktligt påståendefel → lyckad körning; originalimplementationen är återställd.
- 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
-
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
SyfteGör ett överraskande resultat enklare att undersöka genom att hitta ett mindre exempel.
UppgiftAnvänd ert språks
ClippedAreamedRect64(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)- 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 idocs/minimised-case.md. - 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.
- 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ådPolygonen 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ådEr tur: utforma förfrågan.
Klara närDen mindre indatan bevarar ert fasta villkor och de slutliga försöken med borttagning motiverar lokal minimalitet.
- Skapa ett tillfälligt körprogram under
-
15Undersök precision vid stora koordinaterSe om en exakt heltalsarea överlever API:ts flyttalsreturvärde.Syfte · uppgift · resultat
SyfteSe om en exakt heltalsarea överlever API:ts flyttalsreturvärde.
Uppgift- För
k = 1..9, sättn = 10^k - 1. Använd kvadraten(0,0),(n,0),(n,n),(0,n)ochRect64(0,0,n,n); dess exakta area ärn × n. - Använd ett tillfälligt körprogram under
build/och språketsBigInteger,unsigned __int128eller en verifierad motsvarighet. Skriv ut nio ordnade rader:k,n, exakt heltalsarea, faktisktClippedArea-resultat och exakt numerisk likhet. Runda inte det förväntade heltalet till double före jämförelsen. - 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 idocs/spec-proposals.md, och skapa filen vid behov. Ta bort körprogrammet; lämna befintlig specifikation, wrapper och tester oförändrade.
LedtrådFörklara jämförelsemetoden innan ni litar på den. Detta undersöker exakt likhet, inte den vanliga testtoleransen
0.001.Valfri ledtrådEr tur: utforma förfrågan.
Klara närEra 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å.
- För
-
16Förbered en granskbar ändringGör det enkelt för någon annan att förstå och bedöma ert arbete.Syfte · uppgift · resultat
SyfteGör det enkelt för någon annan att förstå och bedöma ert arbete.
Uppgift- 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.
- Granska
git status --shortochgit 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. - 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.
- 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ådNegativa fall tränar olika eller tomma resultat, eller dokumenterat avvisande. Behandla granskningsfynd som hypoteser; be inte om en kvot problem.
Valfri ledtrådEr tur: utforma förfrågan.
Klara närOmfattningen och commiternas syften är tydliga, fynden är lösta med motiveringar och de slutliga testerna lyckas.
-
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
SyfteVälj vilket svar ni ska lita på med hjälp av belägg, inte säkerhet eller längd.
Uppgift- Å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.
- Använd
/newfö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. - Skapa i
docs/model-comparison.mdtvå 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. - 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ådNya konversationer och identisk kontext gör jämförelsen meningsfull. Plan garanterar inte ensam att filer förblir oförändrade.
Valfri ledtrådEr tur: utforma förfrågan.
Klara närTvå likvärdiga körningar har en evidensbaserad jämförelse och experimentet har inte lämnat några käll-/teständringar efter sig.
-
18Skriv användbara instruktioner för er AIGör era erfarenheter till fungerande regler som ni kan testa.Syfte · uppgift · resultat
SyfteGör era erfarenheter till fungerande regler som ni kan testa.
Uppgift- 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. - 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.
- Dokumentera en kort före-/efterjämförelse: vad förväntade ni er skulle ändras och vad ändrades faktiskt?
LedtrådFilen 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ådEr tur: utforma förfrågan.
Klara närEra regler är specifika, används uttryckligen i en ny konversation och utvärderas mot ett tidigare svar.
- Välj lärdomar från lyckade metoder, förvirring eller ett valfritt AI-misstag. Skriv 3–5 korta regler i