Inlägg

Inlägg som Dave1080 har skrivit i forumet
Av Dave1080

Jag har nu kommenterat ut koder för att se vad som går så himla långsamt. Det var tydligen BigInteger klassen i Kotlin, dess modulus operator verkar vara väldigt trög, tyvärr. Jag optimerade koden till att lösa det sista exemplet på 2m 22s istället för 5 minuter, sen kommenterade jag ut allt och breakade loopen så fort iteratorn hamnade på samma tal. Tog 11s. Så jag får komma på ett sätt att ha feta steps och försöka undvika att använda BigIntegers modulusmetod.

Detta är roligt!

EDIT: Jag vet inte varför jag inte bara använde Long från början. Nere på 37 sekunder nu för exemplet. Fortfarande för hemskt långsamt. När jag testade att bara köra plain timestamp++ för varje loop tog det ändå fett lång tid så jag förstod att jag måste göra stora kliv i loopen och inte bara steppa upp med 1. Har någon tips på hur jag kan räkna ut dessa kliv?

GitHub.

Av Dave1080

Alltså, va? Dag 13 del 2. Kompilerar ni fram svaret på några sekunder? Min kod har löst alla dessa exempel:

7,13,x,x,59,x,31,19

och

The earliest timestamp that matches the list 17,x,13,19 is 3417.
67,7,59,61 first occurs at timestamp 754018.
67,x,7,59,61 first occurs at timestamp 779210.
67,7,x,59,61 first occurs at timestamp 1261476.
1789,37,47,1889 first occurs at timestamp 1202161486.

Dold text

Varav den sistnämnda tog ca 5 minuter att bruteforcera. Nu kör jag med originalinputen och enligt min beräkning skulle det ta 83.000 gånger så gång tid, dvs nästan 7000 timmar. 288 jävla dagar.

Jag känner mig så dum och mållös!

Av Dave1080
Skrivet av Alphahanne:

Problemet är att det finns en begränsad kapacitet för tillverkning av kretsarna. Processen i sig är inte särskilt enkel heller och långt ifrån hundraprocentig. Dessutom är det också så att t.ex. AMD, jag vet inte hur det är för Nvidia i det sammanhanget, prioriterar den mer lukrativa server- och proffsmarknaden eftersom det är där de tjänar de stora pengarna. De pumpar ut så mycket de bara kan. Detta tillsammans med en historiskt hög efterfrågan gör att det ser ut som det gör.

Till exemplet med AMD så använder de sig av TSMCs 7nm-process för att producera såväl CPU, GPU samt APU. Hela deras program, förutom IO-kretsarna som fortfarande tillverkas i 14nm, är alltså beroende av vad TSMC kan spotta ut. Detta ska då bli såväl Zen3-CPUer, RDNA2-GPUer och de APU som sitter i PS5 och senaste XBox SAMT EPYC, Threadripper mm. Även Intel använder deras 7nm till olika kretsar och de slåss med AMD om kapaciteten. NVidia använder sig av Samsungs 8nm-process för sina kretsar vad jag förstått. Gissningsvis har de också fler kunder som slåss om deras kapacitet så det borde vara likartat där.

Det går helt enkelt inte producera mer, kapaciteten räcker inte till. Jag är övertygad om att samtliga aktörer vill pumpa ut mer men det går helt enkelt inte. Ingen var förberedd på att det skulle vara en sådan extremt hög efterfrågan. Eftersom beställningar görs långt i förväg så går det inte heller justera över en natt. Om jag förstått det rätt beställde såväl Nvidia som AMD sina kretsar i somras som skulle vara färdiga till release, vi pratar alltså om 4-6 månader i förväg. Alltså tar det, i bästa fall, flera månader att öka produktionen, om det alls finns extra kapacitet att plocka ur. Därför kan vi tidigast se en ökad tillgång i februari-mars, om det nu är över huvud taget är möjligt.

Skrivet av kettlebell:

Allt deras material och resurser går till att bygga farkoster för att fly denna planet innan klimatändringarna förstör allting. De har insett att det är kört och vill antingen åka till en annan planet eller skapa rymdstation i en bana runt jorden där de kan leva tills det blivit mer beboeligt här på jorden. Problemet är bara att ödlefolket har slutat hålla kontakt med dem och fler UFO har börjat skickas till jorden som visar sig helt öppet vilket var emot deras överenskommelser med jordens ledare sedan tidigare. Nu har de rika fått panik men försöker suga ut det allra sista de kan, samt få allt att verka normalt för folket medan de sätter igång med sina planer.

Men skämt åsido, jag har faktiskt en kompis som tror på allt ovanstående, på riktigt. Sen har tydligen Flat Earth movement vuxit sig större va. Allt sånt här är kul tills mer än halva jordens befolkning plötsligt börjar tro att alla konspirationer är sanna och man börjar märka av dem i ens egna kretsar. Vet inte om Joe Rogan och DMT har med saken att göra.

Grafikkort och teknologibristen kan nog enklare förklaras med att alla människor sitter hemma mycket mer, på grund av Corona, därav köper mer saker som TV apparater, datorer, tv spel osv för att de ändå alltid sitter hemma. Lite som varför vi i Sverige handlar så mycket mer teknikprylar till hemmet (vi är ju alltid hemma på grund av vädret) än andra som till exempel bor nära havet och det är varmt. Sen så har säkert många andra faktorer spelat in och jag kan tänka mig att fulspel från stora företag också kan hittas.

Ja, hur frustrerad man än blir förstår man ju ändå att det beror på den hemskt höga efterfrågan. Då folk inte reser använder de semesterpengarna till feta burkar istället. And stuff like that. Suck...

Sen finns det ju tyvärr en massa som förlorat sina jobb och då scalpar hem saker för att sälja vidare, en säker inkomstkälla.

Av Dave1080

Ja, detta är obegripligt. Visst, covid-19, men det kan inte vara den enda anledningen ändå? Känns som att de blir helt lamslagna och inte gör ett skit. Vad hindrar dem från att bara tillverka femdubbelt så många kort? Hårdvaru-resursbrist? Bristande arbetskraft?

Samma jävla skit med webbkameror, PS5, osv. Sen så har solen inte tittat fram på flera veckor. Ja, läggdags nu.

Av Dave1080

Din processor flaskhalsar förmodligen, tyvärr. Det innebär att den förhindrar ditt grafikkort att kunna använda all kraft. Jag var tvungen att uppgradera min i5 7600K till mitt 1080 Ti för att den uppenbarligen flaskhalsade. Allt spiklagg försvann i Resident Evil 2 Remake och Prey (2017) när jag gjorde det.

Skrivet av Valle641:

Såååå jag måste skaffa en ny CPU. Suck.

Japp.

Av Dave1080

Gav mig på dag 13 ändå och det flöt på, jag tänkte ut en lösning som fungerade direkt. Vilken härlig känsla. Klockan är dock mycket nu så jag släpper och njuter av segerns sötma tills imorgon där jag provar på del 2.

Dag: 13, endast del 1
Språk: Kotlin
Lösning: GitHub

Av Dave1080

Dag: 12
Språk: Kotlin
Lösning: GitHub

Tyvärr börjar detta bli lite alltför svårt. Del 1 var rätt lätt, men inte del 2. Jag försökte i alla fall mig på den ordentligt men fastnade i att hur man skulle tänka när man bytte direction på waypointen. Tex by default börjar den alltid 10 units east och 1 unit north om fartyget.

Men det var skitkul att helt naturligt använda mig utav rekursiva funktioner - nåt jag aldrig hade gjort utan AOC. En viktig learning.

Ikväll ska jag nog rita en x/y diagram och sätta ut punkterna enligt 90 gradersintervallen så att jag får bättre överseende och sen koda utifrån det. Nu ut på promenad.

EDIT: Nu ger jag upp på riktigt, jag klarar inte av att klura ut hur jag kan flytta på waypointen helt enkelt. Trots att jag ritat en stöddiagram. På rad 66 har jag skrivit en kommentar för detta. Min lösning fungerar bara för kodexemplet och bara om E körs först. Ni är alltid välkomna med tips och hjälp.

EDIT 2: Kollade på era lösningar och insåg att jag gjorde det mycket mer komplext än vad det behövde vara. Blev inspirerad av @huggeMugg lösning och tillämpade det på min. Äntligen.

Av Dave1080
Skrivet av Ingetledigtnamn:

Varför vill du ha en lista? Du har ju en 2D tabell att leta i. Det är bara att gå i en riktning i taget tills du hittar ett säte. Tomt eller inte.

Precis, jag läste lite slarvigt. Jag läste det som att man måste kolla alla säten i ett visst håll och inte bara den första. My bad. Har i alla fall löst det nu, redigerat mitt inlägg.

Skrivet av Sajox:

Det är fler som har det kämpigt

Första gången jag provar AOC med språket Rust. Har inte gjort så mycket med Rust mer än läst och hängt med för att det är ett intressant språk.

Jobbar som utvecklare och efter 8 timmar direkt sätta sig ner med AOC har haft sina påfrestningar. Min hjärna måste få slappna av efter jobbet. Kommer nog sitta i mån av tid och lösa pusslen när man är sugen.

Ja, jag håller med. Jag tror att de flesta av oss besitter på den egenskapen att aldrig ge upp och det kan ibland vara dåligt. Utöver det har AOC varit sjukt nyttigt, ändå!

Av Dave1080

Jag har fuskat lite genom att inte ta hänsyn till om adjacent seats faktiskt finns utan istället fångar alla icke-existerande-seat-krascher i try/catch. Hade inte gjort så i produktion.

Dock har jag ingen aning om hur jag kan skapa en lista av relevanta coordinates för del 2? Jag förstår att jag vill kolla alla seats i alla åtta håll, men vet inte hur jag kan skapa en sådan lista enkelt. Tips på algoritm?

Dag: 11
Språk: Kotlin
Lösning: GitHub

Sen kan jag tycka att det känns som att det är bara folk som faktiskt löser skriver här. Kom igen, det finns väl mycket fler som också har det kämpigt?!

EDIT: Jag kom på en lösning under min dagliga promenad och jag tänkte skitsamma. Väldigt ful och hemsk lösning men jag har en helg att tänka på.

Av Dave1080

Jag tror att jag låtsas att denna dag aldrig hände. Del 1 var enkelt, men jag kan inte ens förstå problemet för del 2, blir bara hårigare för varje gång jag försöker förstå problemet, så jag ger upp och tar mig an nästa dag imorgon (vilket blir dag 11), jag måste ju också njuta av min helg.

Dag: 10, endast del 1
Språk: Kotlin
Lösning: GitHub

Av Dave1080

Dag: 9
Språk: Kotlin
Lösning: GitHub

Av Dave1080

Ville bara visa hur fula mina koder brukar vara när jag lyckats få rätt svar för första gången - innan all tid jag lägger ned på att förbättra koderna.

https://i.imgur.com/j2k5wEs.png

Av Dave1080

Dag: 8
Språk: Kotlin
Lösning: GitHub

Väldigt kul uppgifter idag, har alltid gillat att skriva whileloopar där jag manipulerar iteratorn. Påminner om småspelet Human Resource Machine som är baserat på assemblerkod.

Av Dave1080
Skrivet av Ingetledigtnamn:

Det är inte så svårt. Du måste bara tänka på rätt sätt. Det finns ett tankesätt som kallas wishful thinking inom programmeringen och det passar perfekt för rekursion.

Skrivet av https://wiki.c2.com/?WishfulThinking:

"Wishful Thinking" is a good way to think about recursion:
When seeing a recursive call, you should not think about the code being executed on each sub call. Instead, just imagine that the sub call does its job correctly.
Thus, you prove the correctness of the function by assuming that it is correct (on simpler input). This is some positive kind of self-fulfilling prophecy.
Of course you still have to check for trivial cases and need to assure that the recursive call handles a simpler case of your problem. But those are minor issues. The hardest part is to understand the recursive calls.
Without the technique of wishful thinking, you can't handle problems like "Towers of Hanoi", let alone more complicated ones.

Yes, makes sense, jag satt och försökte tänka i mitt huvud vad som hände funktion efter funktion när det egentligen räckte med att först skriva en fungerande funktion utan att tänka rekursivt överhuvudtaget och sen låta den kalla på sig själv. Då löser resten av sig självt. Tack för kodexemplet!

Är grön på er alla som tydligen har tid på morgon/dag. Jag får vackert vänta tills ikväll, annars kommer jag inte att göra mitt jobb.

(Jag vet att jag skriver på SweClockers nu!)

Av Dave1080

@huggeMugg @GLaDER @noMad17 @wgren

Jag är helt otroligt överväldigad av vilka bra och detaljerade svar jag fick. En sak ska ni alla här i tråden ha jävligt klart för er och det är att jag suger på rekursiva funktioner. Jag fattar konceptet, men hjärnan slutar funka hela tiden när jag försöker skriva en. Jag har ärligt talat aldrig skrivit en proper rekursiv funktion under hela mina 3 år. Det kanske märks?

Bara part 1 så länge, uppdaterar inlägget om jag lyckas lösa part 2 inom kort.
Inspirerad av wgrens idé.

Dag: 7
Språk: Kotlin
Lösning: GitHub

Av Dave1080

Dag 7. Läs inte om du vill lösa uppgiften helt på egen hand. Jag behöver hjälp.

Är det meningen att man ska loopa mer än två gånger? I så fall hur vet man när man kan sluta loopa?

Jag skapar först en lista av färger som har shiny gold som direct child. Resultat nedanför.

[striped tomato, clear yellow, wavy beige, faded fuchsia, shiny lavender, pale magenta]

Sen loopar jag genom listan igen och kollar varje child, om en child är med i den listan jag först skapade läggs det till i räkningen.

Blir fel svar ändå, jag behöver gärna tips på algoritm. Jag har försökt förstå era lösningar men tyvärr ingen framgång.

Dold text
Av Dave1080

Roligaste uppgiften hittills. Rakt på sak liksom. Sen blev jag riktigt nöjd med min lösning.

Dag: 6
Språk: Kotlin
Lösning: GitHub

Av Dave1080

Gick inte speciellt bra nu, men jag påminde för mig själv att det inte var meningen att detta skulle vara lätt. Hade problem med mina flotta lowerHalf och upperHalf metoder tills jag gav upp och tjuvade från någon av er. Då insåg jag att jag försökte för mycket, att det räckte med en sådan trivial algoritm och att en int avrundades neråt automatiskt. Allt annat skrev jag iaf själv...

Dag: 5
Språk: Kotlin
Lösning: GitHub

Av Dave1080

Dag: 4
Språk: Kotlin
Lösning: GitHub

Jag håller med om att uppgiften alldeles är för omständlig för detta ändamål. Chore-programmering gör jag helst bara på mitt arbete eller på mina egna projekt. Jag var också tvungen att debugga för att upptäcka jag hade splittat strängen på ett fel sätt. Men å andra sidan blev det mycket Kotlinmagi.

Jag har även fuskat med att använda kommentarer för att skilja på metoderna/klasserna. Pallar inte skapa nya filer och så.

Av Dave1080

Dag: 3
Språk: Kotlin
Lösning: GitHub
Speciellt tack till: @huggeMugg