Facebook Hacker Cup 2014 Vorige deel Overzicht Volgende deel Laatste deel

Dit topic is onderdeel van een reeks. Ga naar het meest recente topic in deze reeks.

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Eärendil
  • Registratie: Februari 2002
  • Laatst online: 02:02

Facebook Hacker Cup 2014

Afbeeldingslocatie: https://fbcdn-sphotos-e-a.akamaihd.net/hphotos-ak-snc6/228451_208196249212571_4622306_n.jpg
Wat is de Facebook Hacker Cup?
De Facebook Hacker Cup is een jaarlijkse programmeerwedstrijd waarin hackers (efficiënte) oplossingen proberen te bedenken voor bepaalde problemen.

De Facebook Hacker Cup bestaat sinds 2011 en is Facebooks officiële programmeerwedstrijd.
Wanneer is de Facebook Hacker Cup 2014?
De Hacker Cup 2014 begint dit jaar twee maanden eerder dan vorige jaren:

RondeStartDuurEind
Online Qualification Roundvrijdag 22 november 01:0072 uurmaandag 25 november 01:00
Online Elimination Round 1zaterdag 7 december 19:0024 uurzondag 8 december 19:00
Online Elimination Round 2zaterdag 14 december 19:003 uurzaterdag 14 december 22:00
Online Elimination Round 3zaterdag 21 december 19:003 uurzaterdag 21 december 22:00
Onsite Finals at Facebook20 en 21 februari 2014
Hoe kan ik meedoen
Simpel, als je al een facebook account hebt, kan je met dat account je inschrijven voor de Hacker Cup. Inschrijven doe je op https://www.facebook.com/hackercup/register.
Vragen
Het concept is simpel, je krijgt een probleem en daar moet jij een oplossing voor vinden. Je krijgt bij je probleem al een hele simpel voorbeeld van input en output. Als jij denkt dat je oplossing het probleem kan oplossen dan download je wedstrijd-inputdata en haal je die door je programma. De ouput upload je naar Facebook welke je oplossing zal nakijken en als juist of fout zal beoordelen. Na het downloaden van de input heb je 6 minuten om de output de uploaden, je moet dus zeker weten dat je programma correct en snel genoeg werkt voor je de input downloadt.
Oude opgaven
YearRoundProblemsSolutions
2014QualSquare Detector, Basketball Game, Tennison
2013FinalArchiver, Colored Trees, Minesweeping, Teleports
3Digits War, Name the Baby, Greedy Entertainers
2Cake Cutting, RoboElection, Permutations
1Card Game, Security, Dead Pixels
QualBeautiful strings, Balanced Smileys, Find the Min
20123Divisor Function Optimization, Trapezoids, Unfriending
2Monopoly, Road Removal, Sequence Slicing
1Checkpoint, Recover the Sequence, Squished Status
QualAlphabet Soup, Auction, Billboards
2011FinalAlien Game, Party Time, Safest Place
2Bonus Assignments, Scott's New Trick, Studious Student II
1BChess 2, Diminishing Circle, Slot Machine Hacker
1A-2Diversity Number, Turn on the Lights, Wine Tasting
1AAfter the Dance Battle, First or Last, Power Overwhelming
QualDouble Squares, Peg Game, Studious Student

2013: Qualification Round, Round 1, Round 2
2012: Vragen kwalificatieronde
2011: Vragen Finale (beetje scrollen)
Andere competities
NWERC 2012 (Vragen/Oplossingen)
BAPC 2012 (Vragen/Oplossingen/Testdata) (Zip-bestand)
Vlaamse Programmeerwedstrijd '09, '10, '11, '12 (Vragen/Oplossingen/Testdata)
Project Euler
USACO Training Program
TopCoder
CodeForces
UVa Online Judge
SPOJ
Google Code Jam
Python Challenge

Zie ook de reacties van Soultaker, kokx en MrHaas in het topic van 2013.
Hackers Wall of Fame
Soultaker - Finale 2011 (laatste 25)
Voorgaande topics
In de voorgaande topics kan je vragen, oplossingen en discussies terugvinden.
Facebook Hacker Cup 2011
Facebook Hacker Cup 2012
Facebook Hacker Cup 2013
Deze topicstart is gebaseerd op de topicstart van Ghehe uit 2013 en wordt nog verder bijgewerkt.

[ Voor 115% gewijzigd door Eärendil op 25-11-2013 15:46 ]


Acties:
  • 0 Henk 'm!

  • Megamind
  • Registratie: Augustus 2002
  • Laatst online: 28-02 01:01
Hoop dat er weer wat knappe koppen meedoen hier altijd wel leuk om te zien met de oplossing waar ze mee komen! Ik doe ook weer mee maar zal het niet ver schoppen, ben niet zo'n wiskundige progammeur.

Acties:
  • 0 Henk 'm!

  • _Moe_
  • Registratie: Mei 2006
  • Laatst online: 14-05 13:06
Dit jaar dan toch ook maar eens een poging voor doen, als we er de moment zelf tijd voor hebben tenminste!

RTFM!


Acties:
  • 0 Henk 'm!

  • HuHu
  • Registratie: Maart 2005
  • Niet online
Heb me ingeschreven. Ben 14 december op vakantie, dus ik ga sowieso uitvallen, maar de eerste rondes proberen is wel leuk :).

Acties:
  • 0 Henk 'm!

  • dcm360
  • Registratie: December 2006
  • Niet online

dcm360

Moderator Discord

HD7767 powered

Hm, dit jaar past het zo te zien wel in mijn agenda. Dat wordt dan maar eens een poging wagen :)

Acties:
  • 0 Henk 'm!

Anoniem: 156876

Vroeg me af waarom ik dit topic niet eerder gezien had, maar toen ik zag ik dat hij ook pas vandaag aangemaakt is. :9 Ik ga ook maar een poging wagen, verwacht er niet al te veel van maar ben benieuwd! :Y

Acties:
  • 0 Henk 'm!

  • Ghehe
  • Registratie: April 2011
  • Laatst online: 11-05 23:55

Ghehe

400 pound hacker

Ook dit jaar terug eens meedoen. :)

Kwestie van dit topic in gang te trekken: Welke programmeertaal gaan jullie gebruiken tijdens de Hacker Cup?

Mijn voorkeur gaat nog steeds uit naar Perl. Snel coden, regex ingebakken in de taal, timtowtdi en het is ook één van de talen die ik het meest gebruik. :P

Acties:
  • 0 Henk 'm!

  • SuperSjoerd
  • Registratie: Mei 2011
  • Laatst online: 06-05 09:53
Ik weet niet precies wat ik me moet voorstellen qua opdrachten, maar denken jullie dat het mogelijk is om mee te doen in .net C#?

Intel Core I7 3770 | 16GB DDR3 | Asus P8P67 | 16TB Random HDD's | 265GB Samsung 830 | HD7970


Acties:
  • 0 Henk 'm!

  • Eärendil
  • Registratie: Februari 2002
  • Laatst online: 02:02
Je kan met bijna alle talen mee doen. De input staat in een tekst-bestand, en je moet je output ook weer als tekst-bestand aanleveren. De constraints op de input zijn zo gekozen dat je met een goed algoritme ook in minder snelle talen mee kan doen. Ik zou vooral een taal kiezen die je zelf goed beheerst.

Ik gebruik waarschijnlijk Python, met eventueel voor sommige opgaven Java.

In de Qualification Round van vorig jaar werden o.a. deze talen gebruikt, in volgorde van populariteit:
C++, Java, Python, C, C#, PHP, Ruby, Perl, Pascal/Delphi, Javascript, Haskell, Scala, Clojure

[ Voor 4% gewijzigd door Eärendil op 19-11-2013 18:55 ]


Acties:
  • 0 Henk 'm!

  • Megamind
  • Registratie: Augustus 2002
  • Laatst online: 28-02 01:01
Ik doe normaal in C# mee, maar bij de vervolgrondes moet je toch wel goed aan performance gaan denken en dan kom je met Linq vaak niet zo ver meer :P

Acties:
  • 0 Henk 'm!

  • - peter -
  • Registratie: September 2002
  • Laatst online: 13-05 08:39
Ik doe ook weer mee in Ruby! Al zal ik het wel niet zo ver schoppen. :)

Grootste punt is altijd dat je goed moet opletten dat de voorbeeld input files qua waarden erg laag liggen, en de echte input files veel grotere waarden hebben. Dat wordt wel van te voren aangegeven, maar je zal zien dat een brute-force oplossing bij de echte input niet gaat werken in 6 minuten. En dat is ook niet de bedoeling. Je moet slim werken.

Acties:
  • 0 Henk 'm!

Anoniem: 156876

Eärendil schreef op maandag 18 november 2013 @ 16:13:
Je kan met bijna alle talen mee doen. De input staat in een tekst-bestand, en je moet je output ook weer als tekst-bestand aanleveren. De constraints op de input zijn zo gekozen dat je met een goed algoritme ook in minder snelle talen mee kan doen. Ik zou vooral een taal kiezen die je zelf goed beheerst.

Ik gebruik waarschijnlijk Python, met eventueel voor sommige opgaven Java.

In de Qualification Round van vorig jaar werden o.a. deze talen gebruikt, in volgorde van populariteit:
C++, Java, Python, C, C#, PHP, Ruby, Perl, Pascal/Delphi, Javascript, Haskell, Scala, Clojure
Waar is Objective-C opeens gebleven? :9

Acties:
  • 0 Henk 'm!

  • dcm360
  • Registratie: December 2006
  • Niet online

dcm360

Moderator Discord

HD7767 powered

De 2 talen die voor mij in aanmerking komen zijn Scala en Delphi, met wat voorkeur voor de eerste omdat ik Delphi eigenlijk nauwelijks nog gebruik. PHP kan ik ook wel, maar om daar zin voor te maken...

Acties:
  • 0 Henk 'm!

  • Eärendil
  • Registratie: Februari 2002
  • Laatst online: 02:02
Ander lijstje gevonden wat completer leek, en daar stond Objective-C lager of niet in. :p

Acties:
  • 0 Henk 'm!

Anoniem: 170251

Ik schrijf me wel weer in, even de kat uit de boom kijken wat voor opdracht het is. Ben niet zo erg van de wiskunde.

Acties:
  • 0 Henk 'm!

  • Eärendil
  • Registratie: Februari 2002
  • Laatst online: 02:02
De Qualification Round is vannacht begonnen. Iedereen die minimaal 1 opdracht goed inlevert gaat door naar de volgende ronde.

Tot het eind van de ronde (maandag 01:00) nog niet inhoudelijk de opdrachten bespreken, dat mag daarna.

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 22:12
Oh huh, het is nu al begonnen? Ik had vanavond pas in gedachten.

Acties:
  • 0 Henk 'm!

  • Douweegbertje
  • Registratie: Mei 2008
  • Laatst online: 12-05 19:36

Douweegbertje

Wat kinderachtig.. godverdomme

Ga het eens proberen met PHP :+

Acties:
  • 0 Henk 'm!

  • Megamind
  • Registratie: Augustus 2002
  • Laatst online: 28-02 01:01
Eerste is supersimpel, zo simpel dat er een bug in m'n code zat en ik buiten de tijd kwam :+

Tweede en derde al gesubmit.

Acties:
  • 0 Henk 'm!

  • Eärendil
  • Registratie: Februari 2002
  • Laatst online: 02:02
Soultaker schreef op vrijdag 22 november 2013 @ 22:58:
Oh huh, het is nu al begonnen? Ik had vanavond pas in gedachten.
Ik had ook vrijdagavond in mijn hoofd, maar gelukkig maakt de tijd bij deze ronde niks uit.

Acties:
  • 0 Henk 'm!

  • ZaPPZion
  • Registratie: Februari 2009
  • Laatst online: 17-03 01:01
Nummer 1 en 2 gesubmit, morgen nummer 3 :)
EDIT: kennelijk nummer 3 niet, kom er niet uit, heel irritant, maar kansberekening is nooit mijn sterkste punt geweest. Ik krijg het nog niet eens voor elkaar om de 2e case op papier uit te werken, dus ik geloof dat ik nog even goed moet zoeken naar hoe de berekening nu eigenlijk in elkaar zit.

[ Voor 77% gewijzigd door ZaPPZion op 23-11-2013 12:20 ]


Acties:
  • 0 Henk 'm!

Anoniem: 304426

Ja ik heb ook moeite met nummer 3. De eerste case is natuurlijk te doen, maar die 2e vind ik lastig om na te bootsen.

Acties:
  • 0 Henk 'm!

  • ZaPPZion
  • Registratie: Februari 2009
  • Laatst online: 17-03 01:01
Ik zit er aan te denken om nummer 3 te brute-forcen op een recursieve manier (ofwel, alle mogelijke scenario's berekenen), maar ja, dat lijkt me niet ideaal :)

Acties:
  • 0 Henk 'm!

  • HuHu
  • Registratie: Maart 2005
  • Niet online
ZaPPZion schreef op zaterdag 23 november 2013 @ 13:48:
Ik zit er aan te denken om nummer 3 te brute-forcen op een recursieve manier (ofwel, alle mogelijke scenario's berekenen), maar ja, dat lijkt me niet ideaal :)
Gegeven de constraints lijkt me dat ook niet mogelijk.

Acties:
  • 0 Henk 'm!

  • Megamind
  • Registratie: Augustus 2002
  • Laatst online: 28-02 01:01
Zelfde hier :P Ik kom er niet helemaal uit hoe ik die increments van zon en erbij moet tellen als kans.

Misschien iemand die veel van kansrekenen weet een tipje :P

Acties:
  • 0 Henk 'm!

  • Megamind
  • Registratie: Augustus 2002
  • Laatst online: 28-02 01:01
Oh nouja laat maar zitten, de eerste 250 gaan door en daar moet je 100 punten voor hebben, aangezien ik de eerste verpest heb ga ik me niet meer wagen aan de 3e.

Acties:
  • 0 Henk 'm!

  • Ghehe
  • Registratie: April 2011
  • Laatst online: 11-05 23:55

Ghehe

400 pound hacker

Megamind schreef op zaterdag 23 november 2013 @ 18:32:
Oh nouja laat maar zitten, de eerste 250 gaan door en daar moet je 100 punten voor hebben, aangezien ik de eerste verpest heb ga ik me niet meer wagen aan de 3e.
Nee hoor, in de eerste ronde qualification round gaat iedereen door die minstens 1 probleem goed heeft:
quote: From the FAQ
How many people advance?
Qualification round: Everyone who gets at least one problem right will advance to Round 1.
Round 1: The top 500 finishers will advance to Round 2. Everyone that gets the same number of points as the person in 500th place will also advance to Round 2.
Round 2: The top 100 finishers will advance to Round 3.
Round 3: The top 25 finishers will advance to the onsite final.
(Source)

Acties:
  • 0 Henk 'm!

  • Megamind
  • Registratie: Augustus 2002
  • Laatst online: 28-02 01:01
Oja inderdaad, weet niet hoe ik met 250 in m'n hoofd zat. Nummer 500 heeft maar 55 punten dus er is nog wel een kansje.

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 22:12
Je mist geloof ik Ghehe's punt: de ranglijst doet er bij de kwalificatieronde helemaal niet toe. Je moet gewoon één opgave goed hebben.

Bij de latere ronden wordt er wel naar punten en straftijd gekeken en is inderdaad de positie op de ranglijst van belang. Maar denk eraan dat het feit dat iemand een oplossing heeft ingestuurd nog niet betekent dat de oplossing ook is goedgekeurd. Dat krijg je pas aan het eind van de wedstrijd te zien. Van de mensen met 100 punten zullen er nog een flink aantal afvallen.

Acties:
  • 0 Henk 'm!

  • StM
  • Registratie: Februari 2005
  • Laatst online: 00:21

StM

Hoe zwaar telt bv een spatie te veel aan het eind van een regel? Ik mag toch hopen dat ze dat gewoon negeren of zijn ze er heel streng op?

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 22:12
Ik zou het ook hopen maar ik durf het niet te garanderen. Zelf zorg ik er altijd voor dat m'n uitvoer exact matcht met het voorbeeld. Ben je bij opgave B de mist in gegaan?

Acties:
  • 0 Henk 'm!

  • StM
  • Registratie: Februari 2005
  • Laatst online: 00:21

StM

Nah heb het voor de zekerheid toch nog maar even gefixed :)

Acties:
  • 0 Henk 'm!

Anoniem: 156876

Ik heb de eerste 2 problemen zonder al te veel moeite opgelost, dus ben in ieder geval door naar tweede ronde. Laatste opdracht is voor mij al te lastig, voornamelijk omdat het meer een wiskundig probleem is dan programmeer-technisch.

Acties:
  • 0 Henk 'm!

  • dcm360
  • Registratie: December 2006
  • Niet online

dcm360

Moderator Discord

HD7767 powered

Ondertussen heb ik de eerste 2 ook opgelost. Bij de eerste was de 'uitdaging' het bedenken van de aanpak, bij de tweede heb ik het meest zitten prutsen met het parsen van de invoer 8)7

De derde wordt ook voor mij wat uitdagender, ik werp er nu nog even een blik op, maar waarschijnlijk ga er morgen pas serieus mee aan de slag.

Acties:
  • 0 Henk 'm!

  • _js_
  • Registratie: Oktober 2002
  • Laatst online: 10-04 21:30
Anoniem: 156876 schreef op zaterdag 23 november 2013 @ 22:43:
Ik heb de eerste 2 problemen zonder al te veel moeite opgelost, dus ben in ieder geval door naar tweede ronde. Laatste opdracht is voor mij al te lastig, voornamelijk omdat het meer een wiskundig probleem is dan programmeer-technisch.
Ik heb net de derde gedaan, vond het juist een typisch programmeerprobleem en niet een wiskundig iets, ik ken geen wiskundige formules of reeksen die je kunt gebruiken om dit op te lossen (maar ik ben dan ook niet een wiskundige).

Nu nog eens kijken naar die andere twee.

Acties:
  • 0 Henk 'm!

Anoniem: 156876

_js_ schreef op zondag 24 november 2013 @ 09:30:
[...]

Ik heb net de derde gedaan, vond het juist een typisch programmeerprobleem en niet een wiskundig iets, ik ken geen wiskundige formules of reeksen die je kunt gebruiken om dit op te lossen (maar ik ben dan ook niet een wiskundige).

Nu nog eens kijken naar die andere twee.
Ik vind zelf kansberekeningen juist wél wiskundig. :9

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 22:12
Ik krijg de indruk dat degenen die het probleem wél opgelost hebben vinden dat het vooral een programmeerprobleem is, terwijl degenen die het niet opgelost hebben denken dat er een of andere superwiskundige analyse voor nodig is.

Het derde probleem is wel lastig, maar vooral vanwege de vereiste programmeertechniek. Meer dan middelbareschoolniveau kansrekening heb je er niet voor nodig.

Acties:
  • 0 Henk 'm!

  • Ghehe
  • Registratie: April 2011
  • Laatst online: 11-05 23:55

Ghehe

400 pound hacker

Eerste twee problemen ingeleverd, nu nog effe knoeien met die laatste. :)

Acties:
  • 0 Henk 'm!

  • Megamind
  • Registratie: Augustus 2002
  • Laatst online: 28-02 01:01
Soultaker schreef op zondag 24 november 2013 @ 17:33:
Het derde probleem is wel lastig, maar vooral vanwege de vereiste programmeertechniek. Meer dan middelbareschoolniveau kansrekening heb je er niet voor nodig.
Kansrekenen heb ik pas op het HBO gehad, en is niet veel van blijven steken :P

Acties:
  • 0 Henk 'm!

  • Eärendil
  • Registratie: Februari 2002
  • Laatst online: 02:02
Ik heb net ook de tweede ingeleverd. Voor de derde heb ik denk ik wel een werkend programma, maar alleen nog lang niet snel genoeg bij grotere input.

[ Voor 4% gewijzigd door Eärendil op 24-11-2013 19:39 ]


Acties:
  • 0 Henk 'm!

  • Ghehe
  • Registratie: April 2011
  • Laatst online: 11-05 23:55

Ghehe

400 pound hacker

Eärendil schreef op zondag 24 november 2013 @ 19:38:
Voor de derde heb ik denk ik wel een werkend programma, maar alleen nog lang niet snel genoeg bij grotere input.
Same here. :/

Acties:
  • 0 Henk 'm!

  • Douweegbertje
  • Registratie: Mei 2008
  • Laatst online: 12-05 19:36

Douweegbertje

Wat kinderachtig.. godverdomme

hm, had wel iets werkend voor opgave #1 met PHP, alleen een beetje op m'n bek gegaan met de echte data vanwege een stomme denk fout van mij :+ In elk geval ben ik zeer benieuwd naar wat mensen hebben gebrouwd in PHP.

Acties:
  • 0 Henk 'm!

  • dcm360
  • Registratie: December 2006
  • Niet online

dcm360

Moderator Discord

HD7767 powered

Achja, altijd nog beter dan wat ik in elkaar heb weten te zetten, namelijk en veel te traag en niet altijd correcte antwoorden.

Acties:
  • 0 Henk 'm!

  • Eärendil
  • Registratie: Februari 2002
  • Laatst online: 02:02
Ik heb net toch maar opdracht 3 geprobeerd, die was gelukkig minder moeilijk dan mijn eigen voorbeeld input, dus ik kon na twee minuten al submitten. Hopelijk ook correct :p

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 22:12
Ja, het was mij ook opgevallen dat de officiële testdata nogal slap was. (Sample cases + uniform random cases, lijkt het.) Daardoor worden allerlei oplossingen die eigenlijk teveel tijd/geheugen gebruiken ook goedgekeurd.

Da's voor de kwalificatie-ronde geen ramp, maar ik vind het wel een slecht precedent scheppen; eigenlijk moet je er als organisatie voor zorgen dat je alleen correcte oplossingen accepteert.

Verder vind ik het jammer dat de bounds voor probleem C zo ruim gekozen zijn dat scripttalen als Python eigenlijk afvallen omdat ze niet snel genoeg zijn (als zinnige testdata gebruikt zou worden, tenminste).

Acties:
  • 0 Henk 'm!

  • kaesve
  • Registratie: Maart 2009
  • Laatst online: 04:15
Het valt me een beetje tegen van mijzelf dat opdracht 3 niet lukte. Ik geloof dat ik wel op het goede spoor zat, maar de laatste paar stapjes misste. Nouja, ik ben in ieder geval zeer benieuwd naar wat anderen hebben uitgevoerd.

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 22:12
Nou, de ronde is voorbij, al is het me niet helemaal duidelijk of de inzendingen nu al gecontroleerd zijn...

Voor wie het interesseert: mijn oplossingen staan hier.

Voor probleem C had ik een Python-oplossing gemaakt die O(K4) tijd en ruimte nodig heeft, wat nogal veel is. Ik heb die herschreven in C en het geheugengebruik weten te reduceren tot O(K3) door de recursieve implementatie te vervangen door een slimme iteratieve.

Op de Facebook testdata werken beide oplossingen wel, maar eigenlijk is de Python variant te traag. Als je je oplossing wil testen op een serieuze case, kun je bijvoorbeeld deze proberen:
100 0.600 0.300 0.500 0.011 0.500 0.023 0.250

(Het probleem met de Facebook testdata is dat er nauwelijk kleine Pu en Pd in de invoer voorkomen, terwijl het aantal discrete waarden dat de kans-op-zon kan aannemen daar wel vanaf hangt.)

Acties:
  • 0 Henk 'm!

  • kaesve
  • Registratie: Maart 2009
  • Laatst online: 04:15
Soultaker schreef op maandag 25 november 2013 @ 02:22:
Nou, de ronde is voorbij, al is het me niet helemaal duidelijk of de inzendingen nu al gecontroleerd zijn...

Voor wie het interesseert: mijn oplossingen staan hier.

Voor probleem C had ik een Python-oplossing gemaakt die O(K4) tijd en ruimte nodig heeft, wat nogal veel is. Ik heb die herschreven in C en het geheugengebruik weten te reduceren tot O(K3) door de recursieve implementatie te vervangen door een slimme iteratieve.

Op de Facebook testdata werken beide oplossingen wel, maar eigenlijk is de Python variant te traag. Als je je oplossing wil testen op een serieuze case, kun je bijvoorbeeld deze proberen:
100 0.600 0.300 0.500 0.011 0.500 0.023 0.250

(Het probleem met de Facebook testdata is dat er nauwelijk kleine Pu en Pd in de invoer voorkomen, terwijl het aantal discrete waarden dat de kans-op-zon kan aannemen daar wel vanaf hangt.)
dank je wel, leuk om te zien :)
Ik ben niet bepaald bekend met python, maar kan de code goed volgen. Zou je bij B misschien een kleine toelichting willen geven? Was het niet efficienter geweest om tijdens het ophogen van de speeltijd van spelers in playing meteen de hoogste waarden te vinden?

Acties:
  • 0 Henk 'm!

  • Eärendil
  • Registratie: Februari 2002
  • Laatst online: 02:02
Ik heb dezelfde output als met de code van soultaker, dus ik zal ze wel allemaal goed hebben :p

Acties:
  • 0 Henk 'm!

  • Megamind
  • Registratie: Augustus 2002
  • Laatst online: 28-02 01:01
Als ik zo zie waren de downloadable test-sets wel gelijk volgens mij, of in ieder geval random in volgorde.

En totzover voor mij :P Alle 3 de entries niet goed.

[ Voor 20% gewijzigd door Megamind op 25-11-2013 08:42 ]


Acties:
  • 0 Henk 'm!

  • HuHu
  • Registratie: Maart 2005
  • Niet online
Ik heb 'n mailtje dat ik door ben :).

Acties:
  • 0 Henk 'm!

  • xos
  • Registratie: Januari 2002
  • Laatst online: 01-04 08:49

xos

Het stond al een tijdje in de planning om eens naar go te kijken. Dus deze challenge gebruikt om er mee te spelen. Heb dus ook structuren gebruikt die niet echt efficient zijn, of nodig waren maar leuk zijn om eens mee te experimenteren.

Eerste 2 goed, de derde is een naive aanpak die veel te traag is. Had het toen wel genoeg. Geen idee of de output goed is, voor de eerste 3 cases in de voorbeeld data wel. De 4 en 5 case duurde te lang en daarna ben ik afgehaakt.

1) http://pastebin.com/LGSvwMhr
2) http://pastebin.com/sfdgWNDh
3) http://pastebin.com/60REEruw

Acties:
  • 0 Henk 'm!

  • dcm360
  • Registratie: December 2006
  • Niet online

dcm360

Moderator Discord

HD7767 powered

Beide inzendingen die ik gedaan heb waren correct :) Als ik het goed onthouden heb, ben ik ongeveer 300 plaatsen gestegen met de validatie van de uitvoer.

Bij de eerste ging ik bij het inlezen op zoek naar het eerste vakje, nam die als linkerbovenhoek en ging door met vakjes tellen. Aan de hand van het aantal vakjes, werd er een rechteronderhoek bepaald. Die hypothese werd vervolgens getest.

De 2e was een kwestie van lijstjes maken en deze sorteren. In Scala is dat net zo eenvoudig als in de uitwerking in Python die op de HackerCup Page geplaatst is.

Dus, op naar ronde 1 :) Eens kijken hoe dat in te passen is met <+:)

Acties:
  • 0 Henk 'm!

  • StM
  • Registratie: Februari 2005
  • Laatst online: 00:21

StM

Hier ook beide goed :) Het derde ding heb ik niet eens een poging voor gedaan aangezien mijn wiskundekennis daar veel te ver voor onder de maat is en wat ik heb gehad op de middelbare school is ver verdrongen :P

Geen idee of ik met Ronde 1 mee ga doen, ik heb eigenlijk bar veel andere dingen aan m'n hoofd.

Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Ah, dat was dit weekend, helaas vergeten :/. Nou kan ik toch niet tijdens alle eliminatie rondes, dus had sowieso net zoals vorig jaar uitgevallen. Misschien vanavond of morgen avond toch voor de grap nog even de opdrachten maken.

[ Voor 4% gewijzigd door Woy op 25-11-2013 12:07 ]

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 22:12
However, the probabilities are only given to 3 decimal places so it suffices to represent p as an integer in the range \[0, 1000].
Oh, dat had ik me niet eens gerealiseerd. Dat is wel een héél stuk eenvoudiger dan wat ik geïmplementeerd had. Note to self: beter lezen de volgende keer.

Acties:
  • 0 Henk 'm!

  • kaesve
  • Registratie: Maart 2009
  • Laatst online: 04:15
Wie doen er morgen weer mee? :) Ik hoop dat ik het deze ronde beter doe dan in de qualificatie :p Mijn doel is op zijn minst deze ronde te overleven. Ben bang dat ik niet de kennis en vaardigheden bezit om verder dan dat te komen.

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 22:12
Ik doe weer mee. Voor de duidelijkheid: ook deze ronde is tijd niet van belang. Het gaat om het totaal aantal punten wat je scoret. (Maar de ronde duurt deze keer 24 uur; je moet de problemen wel binnen die tijd oplossen.)

Acties:
  • 0 Henk 'm!

  • kaesve
  • Registratie: Maart 2009
  • Laatst online: 04:15
Precies om die reden denk ik dat deze ronde nog wel te halen moet zijn. Ik kan de problemen vaak best oplossen, maar zal daar niet bepaald de snelste in zijn :p

Acties:
  • 0 Henk 'm!

  • Ghehe
  • Registratie: April 2011
  • Laatst online: 11-05 23:55

Ghehe

400 pound hacker

Ik doe ook weer mee. :) Dit jaar zou ik wel eens door ronde 1 willen geraken. :P

Acties:
  • 0 Henk 'm!

  • Sendy
  • Registratie: September 2001
  • Niet online
Ik heb voor opdracht 4 nu een bovengrens bepaald. Deze bovengrens blijkt ook gelijk aan de gegeven oplossingen voor de voorbeelden.

Ik weet niet of mijn bovengrens ook altijd de goede oplossing is, maar er staat in de opdracht niet dat het om het laagst mogelijke bedrag gaat. Ik twijfel dus een beetje.

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 22:12
For each test case [..] output [..] the minimum extra amount of money you would have to spend compared to giving everyone money equal to their age.
Het gaat dus wel om het laagst mogelijke bedrag.

Acties:
  • 0 Henk 'm!

  • Sendy
  • Registratie: September 2001
  • Niet online
He dat hebben ze net veranderd! Fijn, weg twijfel.

En inderdaad, mijn bovengrens blijkt niet het minimum te zijn :)

[ Voor 40% gewijzigd door Sendy op 07-12-2013 20:26 ]


Acties:
  • 0 Henk 'm!

  • frG
  • Registratie: Augustus 2004
  • Laatst online: 10-05 20:57

frG

Ik werk in C# en loop tegen het volgende probleem aan voor opdracht 1:

Ik heb 2 string arrays:

string[] letters
string[] lijst

Zodra ik iets verander in lijst[] verandert letters ook mee, het is geen kopie.. ik werk zelf altijd met List etc, maar vergeet ik iets?

Wil eigenlijk geen code pasten omdat de opdracht nog loopt.

Acties:
  • 0 Henk 'm!

  • Megamind
  • Registratie: Augustus 2002
  • Laatst online: 28-02 01:01
Strings zijn reference type, dat is toch wel erg belangrijk om te weten in C# :+

Acties:
  • 0 Henk 'm!

  • frG
  • Registratie: Augustus 2004
  • Laatst online: 10-05 20:57

frG

Megamind schreef op zaterdag 07 december 2013 @ 23:23:
Strings zijn reference type, dat is toch wel erg belangrijk om te weten in C# :+
Thanks, dat wist ik inderdaad wel maar zag meerdere malen over het hoofd dat ik me recursive functie onder een bepaalde conditie de input parameter (letters) teruggeef.

Stom.. 8)7

Jammer dat mijn implementatie verder (veel) te langzaam is..

[ Voor 7% gewijzigd door frG op 07-12-2013 23:34 ]


Acties:
  • 0 Henk 'm!

  • dcm360
  • Registratie: December 2006
  • Niet online

dcm360

Moderator Discord

HD7767 powered

Zo, strategieën voor de 15, 20 en 40 heb ik wel redelijk in mn hoofd nu. Van de 25-punten vraag weet ik wel in welke richting ik een aanpak moet zoeken, en weet ik ook dat ik niet echt goed ben in het bedenken van een werkende aanpak voor dat soort problemen.

Meh.
code:
1
2
3
4
5
Case #1: TTE
Case #2: FACECAAK
Case #3: HACKERCUPTECM
Case #4: WISHESYOUGOODLUDK
Case #5: NDHOPESYOUHAVEFVN

[ Voor 19% gewijzigd door dcm360 op 08-12-2013 02:23 ]


Acties:
  • 0 Henk 'm!

  • Sendy
  • Registratie: September 2001
  • Niet online
Mijn Coins game is goed! Nu de eerste opdracht.

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 22:12
Zo, ik heb ze allemaal ingeleverd. Wel leuke problemen deze keer. :)

edit:
Oeps, ik heb een foutje gemaakt in de laatste opgave, geloof ik. Balen. Met 1 letter verschil lijkt 'ie wel te werken. :/ Nope, 't is iets subtieler.

[ Voor 57% gewijzigd door Soultaker op 08-12-2013 13:38 ]


Acties:
  • 0 Henk 'm!

  • _js_
  • Registratie: Oktober 2002
  • Laatst online: 10-04 21:30
Ik kom maar niet uit opdracht 4, de voorbeelden lukken nog wel, maar dat zijn niet de moeilijkste opgaven. En dan hierboven verschillende mensen die het wel af hebben of in ieder geval uitgedacht hebben. Grrr. Gelukkig is dcm er nog die me weer een beetje goed laat voelen want die opdracht had ik gelukkig geen problemen mee ;)

Acties:
  • 0 Henk 'm!

  • dcm360
  • Registratie: December 2006
  • Niet online

dcm360

Moderator Discord

HD7767 powered

Achja, ik had een detail over het hoofd gezien, ondertussen heb ik die opgave en, ehm, welke opgave ookalweer (:P) ingeleverd.
Nu nog bezig met de Coins, ik was blij dat ik besloot om zelf nog wat testcases te bouwen, want blijkbaar waren er wat randsituaties waarin ik wat onhandige aannames deed.

Oh, en na het lezen van een artikel op Wikipedia heb ik ook een strategie bedacht voor het AAAAAA-probleem. Ik heb alleen geen tijd meer om dat nog te gaan bouwen...

[ Voor 22% gewijzigd door dcm360 op 08-12-2013 11:36 ]


Acties:
  • 0 Henk 'm!

  • kaesve
  • Registratie: Maart 2009
  • Laatst online: 04:15
goh. twee uurtjes slapen heeft me toch behoorlijk goed gedaan :+ Ik heb nog niks ingeleverd, maar denk dat ik 1, 2 en 3 nu wel heb. Gezien de tijd-strafpunten nog niet zo zwaar meetellen ga ik zometeen lekker de tijd om alles nog een keer te testen voordat ik het echt inlever. Maar eerst kijken of die 4e misschien ook nog lukt :)

Acties:
  • 0 Henk 'm!

  • Sendy
  • Registratie: September 2001
  • Niet online
Shit, opdracht 1 mislukt...

Acties:
  • 0 Henk 'm!

  • kaesve
  • Registratie: Maart 2009
  • Laatst online: 04:15
Ik geloof dat ik nu een correcte oplossing heb voor alle opdrachten.. maar ik vertrouw ook op mijn onkunde om er zo achter te komen dat ik ze alle 4 toch fout doe :p

Acties:
  • 0 Henk 'm!

  • dcm360
  • Registratie: December 2006
  • Niet online

dcm360

Moderator Discord

HD7767 powered

Hm, zo te merken is mijn oplossing voor AAAAAA niet snel genoeg. Jammer, maar meer tijd had ik niet om de code te verbeteren.

Acties:
  • 0 Henk 'm!

  • kaesve
  • Registratie: Maart 2009
  • Laatst online: 04:15
mijn god. dat inleveren blijft een stressvolle zaak. ik heb mijn antwoorden niet goed genoeg gecontrolleerd. bij opdracht 4 had ik meteen een infinite loop te pakken -- maar die heb ik nog binnen de 6 minuten weten te fixen. opdracht 3 was spannend omdat ik even dacht dat mijn implementatie te langzaam was. opdracht 2 ging als enige redelijk soepel. opdracht 1 heb ik helemaal weten te verkloten :p op de laatste case gaat hij op zijn bek zonder dat ik een reden kan vinden.. helaas.

Nouja. Ik heb wel 3 opdrachten weten in te leveren. Als deze ook correct zijn, ziet het er naar uit dat ik wel door ga. Maar ik begin al het ergste te vresen :+

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 22:12
... en de ronde is voorbij! Ik dump gelijk maar een megapost met daarin mijn oplossingen:


Labelmaker
Als b de lengte van de string L is, dan zijn er precies bn strings van lengte n. Beginnend met b=1 is het vrij makkelijk om te checken of Nbn. Zo ja, dan weten we de lengte van het antwoord. Zo niet, dan kunnen we die strings overslaan door bn van N af te trekken, en b te verhogen.

Als we de lengte eenmaal bepaald hebben, kunnen we de string zelf bepalen door N-1 te interpreteren als basis-b getal met de letters uit L als cijfers. (De -1 is hier omdat de eerste string nummer 1 heeft.)

In talen met 64-bit integers is het trouwens een enorm gepiel om dit goed te krijgen, omdat de invoer zo groot is dat integer overflow een risico is. (Gelukkig bevat de voorbeeldinvoer zo'n geval.)

Code in Python


Coins Game
Dit vond ik het leukste probleem. De optimale strategie (en daarmee de oplossing) is heel simpel, maar ligt niet meteen voor de hand.

Als alle potten minstens x munten bevatten, kun je veilig uit elke pot x munten pakken, dus doe je dat ook. Daarna zijn sommige potten leeg, en sommige niet. Om nog een muntje te kunnen pakken zul je, in het ongunstigste geval, eerst alle lege potten moeten ontdekken door er een actie aan te verspillen (je wijst de pot aan, maar hij blijkt leeg te zijn). Daarna kun je uit de overgebleven potten veilig 1 (of meer) muntje(s) halen.

Het moge duidelijk zijn dat aan deze strategie niets te verbeteren valt. Gegeven is dus dat je m rondes uitvoert (waarbij je in een ronde uit elke pot 1 muntje probeert te pakken) tot je genoeg munten hebt verzameld, en maximaal 1 actie per pot verspilt (want als een pot leeg blijkt te zijn ga je er natuurlijk niet nog een keer uit pakken). De potten waar je geen actie aan verspilt zijn precies de potten die in de laatste ronde nog niet leeg blijken te zijn; daar zaten dus minstens m munten in.

Om het aantal potten met m munten te kunnen maximaliseren, moet je m minimaliseren, onder de voorwaarde dat m×NC, omdat je anders na m keer pakken uit N potten niet genoeg munten hebt verzameld. De minimale waarde van m is dus C/N naar boven afgerond.

Het aantal potten dat je tot m kan vullen is gelijk aan K/m (naar beneden afgerond). Als dat aantal groter dan of gelijk aan N is, ben je makkelijk klaar. Zoniet, dan zijn er precies N - K/m potten waar je een actie aan moet verspillen, en omdat m minimaal is, is K/m maximaal, en is N - K/m minimaal.

Code in Python


AAAAAA
Eerst berekenen we voor elke (lege) cel op positie (r,c) (r voor rij, c voor kolom) of 'ie bereikbaar is vanaf de ingang op 0,0 en wat de maximale lengte van een pad is dat begint op die cel, onder de aanname dat we alleen naar rechts en beneden mogen stappen. Die waarden stoppen we in arrays, genaamd reach en maxdist. Die arrays zijn makkelijk uit te rekenen door in het eerste geval steeds te kijken of er een cel links of boven bereikbaar is, en in het tweede geval door de maximale afstand rechts en onder de nemen. (De volgorde waarin arrays worden gevuld is daarbij van belang!)

Nu mogen we ook nog één horizontaal segment invoegen waarop naar links wordt gelopen, of één verticaal segment waarop naar boven wordt gelopen. Cruciale observatie is dat een horizontaal segment altijd van boven binnengegaan wordt, en naar beneden wordt verlaten. Een horizontaal segment van (r,c1)-(r,c2) dat uit lege cellen bestaat is dus bereikbaar als (r-1,c2) (de cel boven de rechterkant) bereikbaar is. De afstand tot de rechterkant is (r+c2), de lengte van het segment is (c2-c1+1), en de afstand vanaf de linkerkant wordt gegeven door maxdist\[r+1][c1]. De situatie voor verticale segmenten is vergelijkbaar.

We kunnen in O(H×W×(H + W)) tijd alle mogelijke segmenten aflopen. Met twintig testcases en H,W ≤ 50 is dat in C++ of Java goed te doen, maar in bijvoorbeeld Python is dat helaas te traag.

Code in C++


Preventing Alzheimer's
Nu wordt het echt ingewikkeld. De kern van het probleem is het volgende: als we een lijst getallen hebben, hoe vaak moeten we dan een getal met 1 ophogen om een lijst te maken waarin elk paar getallen copriem is? Voordat we dat probleem oplossen is het handig om twee randgevallen uit de weg te ruimen:
  1. Als K > 1 dan moeten alle getallen een veelvoud van K zijn. Het is praktisch om alle getallen naar boven af te ronden naar een veelvoud van K en vervolgens te delen door K, zodat we altijd kunnen doen alsof K=1. (Dan moet het antwoord wel weer met K vermenigvuldigd worden.)
  2. Nullen in de invoer zijn vervelend. Als twee kinderen $0 krijgen is de oplossing ongeldig, want die zijn allebei deelbaar door alle getallen. We kunnen dus hooguit één kind $0 geven, en dan alleen als alle andere kinderen $1 krijgen (onder aanname dat K=1, zie hierboven). Zoniet, dan moeten we alle kinderen een bedrag >$0 geven.
Als we die gevallen hebben afgehandeld kunnen we er vanuit gaan dat K=1 en dat alle getallen groter dan 0 zijn. Dan het echte probleem. We hebben een array A en we willen een array B maken zodat A[i] ≤ B[i] voor alle indices i, en zo dat gcd(B[i],B[j])=1 voor elk paar indices i<j, en zo dat de som van B minimaal is.

Een belangrijke observatie is dat er maximaal 20 getallen zijn, en geen getal is groter dan 50. Dat betekent dat als we 20 priemgetallen groter dan 50 pakken, we sowieso een geldige oplossing hebben. Concreet:
  • Er zijn 15 kleine priemgetallen: 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47.
  • En dan 20 grote priemgetallen: 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149.
We kunnen nu in principe bruteforce steeds een waarde tussen A[i] en 150 proberen toe te kennen, en dan checken of het gekozen getal copriem is met de al eerder gekozen getallen; zo ja, door naar het volgende getal. Dit werkt in principe, behalve dat het veel te traag is. Gelukkig zijn er nog een paar observaties mogelijk: elk getal in B[i] wordt ofwel een groot priemgetal, ofwel een combinatie van (0 of meer) kleine priemgetallen. Het is nooit nodig om grote en kleine priemgetallen te combineren; in plaats van bijvoorbeeld 206=2×53 kunnen we beter gewoon 53 pakken. Verder zijn alle grote priemgetallen groter dan 50, dus áls we er een gebruiken, kunnen we het beste de kleinste nemen die nog niet gebruikt is.

Nu komt de efficiënte oplossing in zicht. Als we van links naar rechts door de array lopen dan kunnen we op elke positie ófwel het volgende grote priemgetal invullen, ófwel een getal dat een combinatie is van kleine priemgetallen die nog niet eerder gebruikt zijn (mits dat getal groter is dan A[i]).

Elke toestand wordt dus gekenmerkt door: de positie in de lijst, de verzameling van kleine priemgetallen die al gebruikt zijn, en het aantal grote priemgetallen dat gebruikt is (we gebruiken namelijk altijd de kleinste). Dat levert 20×215×20 = ~13 miljoen toestanden op, waarbij op elke positie <150 getallen uitgebrobeerd moeten worden (alle getallen tussen A[i] en het volgende grote priemgetal). Dat is maximaal twee miljard iteraties per test case, wat niet weinig is, maar in de praktijk vallen er een heleboel toestanden af, waardoor alles vlot draait mits geïmplementeerd in een snelle programmeertaal.

Code in C++

Acties:
  • 0 Henk 'm!

  • Elijan9
  • Registratie: Februari 2004
  • Laatst online: 09-05 10:12
"Preventing Alzheimer" fout gedaan, de rest wel goed. Als ik de post hierboven lees snap ik ook meteen wat ik fout deed en waarom... De meeste (goede) inzendingen zijn niet heel erg leesbaar, de juiste kern er uit halen is dan lastig.

Bij AAAAAA zat ik wel op 30 seconden voor 500x500 testcases, gelukkig was niet alles zo groot anders had ik het mogelijk niet in de tijd gehaald...

Leuke wedstrijd, ik heb niet de illusie dat ik ver ga komen, maar wel gaaf om te proberen en nadien bij te leren! Tot nog toe zit ik bij de eerste 400 met 60 punten, ik mag dus nog een ronde meedoen!

War is when the young and stupid are tricked by the old and bitter into killing each other. - Niko Bellic


Acties:
  • 0 Henk 'm!

  • dcm360
  • Registratie: December 2006
  • Niet online

dcm360

Moderator Discord

HD7767 powered

Nou, dat was het dan voor mij, uiteindelijk bleek ik alleen de eerste opgave goed te hebben.

Acties:
  • 0 Henk 'm!

  • Vaan Banaan
  • Registratie: Februari 2001
  • Niet online

Vaan Banaan

Heeft ook Apache ontdekt

Kan ik ergens de opdrachten lezen, zonder facebook account?
Na veel zoeken een gevonden:
Labelmaker: http://pastebin.com/T1JAdUpc

500 "The server made a boo boo"


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 22:12
Hebben er nog mensen meegedaan in de tweede ronde afgelopen weekend? (Ik had zelf helaas een andere afspraak.)

Acties:
  • 0 Henk 'm!

  • Elijan9
  • Registratie: Februari 2004
  • Laatst online: 09-05 10:12
Ik heb meegedaan. Ben niet door, had dat ook niet verwacht en ben daarom best tevreden. Ik moet zeggen dat ik veel tijd kwijt was aan het begrijpen van de Engelstalige uitleg, maar dat is eerder al een grote uitdaging geweest. Voor Ski Resort Planning kwam ik er zo snel niet uit met de tekst, jammer, want achteraf had ik wel een oplossing kunnen schrijven. Hold'em Numbers verkeerd gelezen en dan helpt het niet dat ik wel de juiste uitvoer kreeg bij de example input. ;) Voor Magic Pairs had ik net iets meer tijd nodig gehad (enkele minuten) om een oplossing in te kunnen zenden. Ook daar had ik eerst de tekst verkeerd begrepen, waarna ik alles heb moeten herschrijven. Geen punten gehaald dus, maar ik had ook echt niet verwacht dat ik een ronde verder was gekomen, de uitdaging op zich was erg leuk!

War is when the young and stupid are tricked by the old and bitter into killing each other. - Niko Bellic


Acties:
  • 0 Henk 'm!

  • Vaan Banaan
  • Registratie: Februari 2001
  • Niet online

Vaan Banaan

Heeft ook Apache ontdekt

Ik snap nog steeds niet zoveel van de tekst bij het Ski Resort probleem en dat frusteert me enorm.
Ski Resort Planning
.. The mountain has N interesting points, numbered 0, 1, ..., N-1. Point 0 is the top of the mountain. Point i is further down the mountain than point j if i > j.

For each point a > 0, she has decided on a different point b, which has the following property: All paths from the top of the mountain to point a have to go through point b, and there is no point c, such that b < c < a and all paths from the top of the mountain to point a go through point c. A path can never go up the mountain.

You have been given the task to plan where the slopes go. You can add slopes directly between any two different interesting points. How many ways can you lay out the slopes for her resort, while satisfying the conditions above?

Two ways of laying out the slopes, X and Y, are different if there exists two interesting points a and b, such that the slope between a and b exists in X or Y, but not in the other.

You can assume that the skiers will be able to get to a lift from any point, so you don't have to worry about getting them all the way down for every path. You have to be able to reach all interesting points from the top.
Voorbeeld 2 zegt:
6
0 0 0 2 2
Met als oplossing: 20 mogelijkheden. Als ik die boom teken
code:
1
2
3
4
5
6
7
8
9
10
11
12
     a0
     /|\
    / | \
   a1 |  \
      |   \
      a2   \
      |\    \
      | \   a3
      |  \
      a4  \
           \
           a5

Ik denk simpel: a1-a2, a2-a3, a1-a3 en a4-a5: 4 banen wel of niet dus 24 = 16 mogelijkheden?
a3-a4 en a3-a5 mag niet (zou via a2 moeten, maar je mag alleen maar naar beneden)
Dan houd het voor mij op.
Ik zie nog wel iets met a1-a2-a4, a1-a2-a5 of a1-a2-a4-a5, maar die heb ik toch al met de eerste regel?

500 "The server made a boo boo"


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 22:12
Als ik het probleem goed begrijp zijn dit soort constructies ook legaal:
Afbeeldingslocatie: http://tweakers.net/ext/f/Zd87FFc4jURqalfwjTXxmdJj/full.png
Het verschil met jouw voorbeeld is dat de verbinding 0-3 ontbreekt. Verder zijn verbindingen 1-2 en 4-5 optioneel, wat in totaal vier nieuwe mogelijkheden oplevert.

edit:
Ik ben het trouwens wel met je eens dat de tekst verre van helder geschreven is. Ik moest het ook drie keer lezen voordat ik maar een beetje begreep wat precies de bedoeling was.

[ Voor 27% gewijzigd door Soultaker op 27-12-2013 22:21 ]


Acties:
  • 0 Henk 'm!

  • Vaan Banaan
  • Registratie: Februari 2001
  • Niet online

Vaan Banaan

Heeft ook Apache ontdekt

Dat verklaart inderdaad precies de 4 ontbrekende paden.
Maar dan begrijp ik weer niet waarom onderstaande constructie niet geldig zou zijn.
code:
1
2
3
4
5
6
7
8
9
  a0
   |
  a1
   |\
  a2 \
   |\ \
   | \a3
   a4 \
       a5

Terwijl ik nu toch ook You have to be able to reach all interesting points from the top.?
AAAGHH KAK :'( Ik ga nog maar eens letter voor letter uitpluizen hoe ze de oplossing beredeneren, misschien dat ik er dan uit kom. [insert diverse frustie smilies]

500 "The server made a boo boo"


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 22:12
Dat mag niet vanwege deze eis:
[..] and there is no point c, such that b < c < a and all paths from the top of the mountain to point a go through point c.[..]
In je laatste voorbeeld gaan alle paden naar 3 door 1 terwijl A3=0. (Om het aan de tekst te relateren: a=3, b=A3=0, c=1; je ziet dat 0 < 1 < 3 en dat mag niet.)

Zoals ik het interpreteer proberen zo op een ingewikkelde manier te zeggen dat een configuratie alleen geteld moet worden als voor elk punt i geldt dat het laagste (of: laatste/hooggenummerde) punt waar álle paden van 0 naar i doorheen gaan gelijk is aan Ai.

(Ik vind het zelf trouwens wel een beetje jammer bij programmeerwedstrijden als de vraagstelling zo moeilijk te begrijpen is dat je bijna meer tijd kwijt bent met uitzoeken wat er nu precies gevraagd wordt dan met het oplossen van het daadwerkelijke probleem.)

[ Voor 14% gewijzigd door Soultaker op 28-12-2013 00:45 ]


Acties:
  • 0 Henk 'm!

  • Vaan Banaan
  • Registratie: Februari 2001
  • Niet online

Vaan Banaan

Heeft ook Apache ontdekt

HELD!! _/-\o_
Precies van dat laatste stukje zin in je qoute snapte ik maar niet wat er bedoeld werd.
Los daarvan dacht ik met For each point a > 0, she has decided on a different point b... dat dat alleen voor de punten met waarde > 0 zou gelden (in het voorbeeld 0, 0, 0, 2, 2 dus alleen de laatste 2)
Nu begrijp ik jouw boom waarbij je b < c < a omzeilt door 2 paden naar A3 te maken.
SUPER!! [insert rits blije smilies]

Ik ben niet zo'n ster met grafen, en heb dus 10 dagen op die tekst zitten broeden, wat er nu bedoeld werd. De overige 3 voorbeelden bij dat probleem waren zo verschrikkelijk beperkt, dat die totaal niks toevoegden.

500 "The server made a boo boo"

Pagina: 1