There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.
Je eigen tweaker.me redirect
Over mij
Nice
Zit alleen even hoe dat floor object nu in elkaar zit
Let op: Mijn post bevat meningen, aannames of onwaarheden
Wel jammer dat de 'next challenge' button het niet doet in IE, misschien maar beter als ze geen echte liften gaan programmeren. Oh well, misschien hadden ze gewoon niet verwacht dat een IE gebruiker voorbij de eerste challenge zou komen
Master of questionable victories and sheer glorious defeats
There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.
Je eigen tweaker.me redirect
Over mij
Ha, die is idd leuk! Morgen maar eens lekker mee prutsen.
Never explain with stupidity where malice is a better explanation
No trees were harmed in the creation of this message, but several thousand electrons were mildly inconvenienced.
Dat had ik ook. Nog een keer op "Apply" drukken leverde mij met dezelfde code wel "succes" op. Nu dus nog wat herschrijven zodat ik zeker weet dat ik het verdien om door te gaan.Kobus Post schreef op zaterdag 24 januari 2015 @ 23:39:
Leuk spelletje, tweede challenge nu. 19 personen in 60 sec na wat prutsen
Ja inderdaad, maar dat mag toch geen probleem zijn?
Zie het nu, de verschillende pagina's verschillen alleen in segment identifier. Chrome is kennelijk zo bijdehand om de pagina te refreshen (omdat de identifier niet gevonden wordt?) en IE dus niet. Even geen idee wat het correcte gedrag is.
1
| <a class="emphasis-color" href="#challenge=2">Next challenge</a> |
Master of questionable victories and sheer glorious defeats
Ik ben bij challenge 14 ofzo gekapt. 90 mensen vervoeren waarbij er geen een langer dan 15s mag wachten. Tot die tijd selecteerde ik telkens de lift die naar een bepaalde vloer moest gaan op basis van welke lift het dichtst bij de vloer zit waar wordt gedrukt, hoe vol de lift zit en hoe druk de lift is.GateKeaper schreef op zondag 25 januari 2015 @ 00:03:
[...]
Dat had ik ook. Nog een keer op "Apply" drukken leverde mij met dezelfde code wel "succes" op. Nu dus nog wat herschrijven zodat ik zeker weet dat ik het verdien om door te gaan.
Geen zin meer om ook zooi te schrijven om bij te houden hoe lang elk van de poppetjes aan het wachten is en waar die aan het wachten en de urgentie daar op aan te passen. Want blijkbaar wordt de tijd in de lift ook nog meegenomen, ondanks dat je totaal niet kan weten waar die precies naar toe wil.
Wel een erg tof spel. Elke keer weer als ik in een lift sta dan ben ik manieren aan het bedenken waarop de lift efficiënter/intelligenter zou kunnen zijn. Nu kan ik het eindelijk eens zelf programmeren, met een mooie visualisatie
Nu nog eentje die hetzelfde doet voor stoplichten/kruispunten.
[ Voor 67% gewijzigd door Avalaxy op 25-01-2015 01:35 ]

[ Voor 5% gewijzigd door Tribits op 25-01-2015 01:52 ]
Master of questionable victories and sheer glorious defeats
Gewoon de floors itereren en daar de specifieke on button click events aan hangen.Avalaxy schreef op zondag 25 januari 2015 @ 01:33:
Als iemand op het knopje drukt, hoe weet je dan op welke verdieping hij staat?
Wel een erg tof spel. Elke keer weer als ik in een lift sta dan ben ik manieren aan het bedenken waarop de lift efficiënter/intelligenter zou kunnen zijn. Nu kan ik het eindelijk eens zelf programmeren, met een mooie visualisatie
Nu nog eentje die hetzelfde doet voor stoplichten/kruispunten.
Hoewel ik dit wel een leuk spel vind, is het gewoon een beetje ruk dat je elke keer maar een beetje data extra krijgt. Ik heb geen zin om pas later rekening te gaan moeten houden met opeens 4 extra variabelen.
Begin je toch hier: http://play.elevatorsaga.com/#challenge=10Douweegbertje schreef op zondag 25 januari 2015 @ 02:38:
[...]
Gewoon de floors itereren en daar de specifieke on button click events aan hangen.
Hoewel ik dit wel een leuk spel vind, is het gewoon een beetje ruk dat je elke keer maar een beetje data extra krijgt. Ik heb geen zin om pas later rekening te gaan moeten houden met opeens 4 extra variabelen.
Je krijgt het floor object mee als this in de functie. dus met this.floorNumber oid krijg je het nummer.Avalaxy schreef op zondag 25 januari 2015 @ 01:33:
Als iemand op het knopje drukt, hoe weet je dan op welke verdieping hij staat?[...]
Dan kan je dus ook bijhouden dat er iemand heeft gedrukt en hoe lang die al heeft staat drukken, maar het wordt wat vervelender zodra je ze oppikt. Is wel te doen, maar was makkelijker geweest als je naast elevators en floors ook een collectie passengers had gehad oid. Nu moet je dat zelf gaan opbouwen en de overgang van wachten op vloer en waar die naartoe wil bijhouden incl. tijd en daar dan voorrang aan geven.
Overigens is het dan nog steeds een beetje geluk hebben, want als de verdeling van passagiers over de floors een beetje ruk is dan haal je die max waiting time limieten nooit.
Heb je daar een voorbeeldje van? Het werkt bij mij niet.Caelorum schreef op zondag 25 januari 2015 @ 11:11:
[...]
Je krijgt het floor object mee als this in de functie. dus met this.floorNumber oid krijg je het nummer.
Avalaxy schreef op zondag 25 januari 2015 @ 17:05:
[...]
Heb je daar een voorbeeldje van? Het werkt bij mij niet.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| { init: function(elevators, floors) { for(var i = 0; i<elevators.length; i++){ elevators[i].on("floor_button_pressed", function(floorNum) { this.goToFloor(floorNum, true); }); } for(var i = 0; i < floors.length; i++){ floors[i].on("up_button_pressed", function(){ //bepaal hier de minst drukke of de lift met minste urgentie ipv elevators[0] elevators[0].goToFloor(this.floorNum()); }); floors[i].on("down_button_pressed", function(){ //bepaal hier de minst drukke of de lift met minste urgentie ipv elevators[0] elevators[0].goToFloor(this.floorNum()); }); } }, update: function(dt, elevators, floors) { // We normally don't need to do anything here } } |
zoiets?
tip, lodash is ook beschikbaar:Caelorum schreef op zondag 25 januari 2015 @ 17:18:
[...]
JavaScript:
1 2 3 4 5 6 7 8 { init: function(elevators, floors) { for(var i = 0; i<elevators.length; i++){ elevators[i].on("floor_button_pressed", function(floorNum) { this.goToFloor(floorNum, true); }); }... }
zoiets?
1
2
3
4
5
6
7
8
9
| // vrij vertaald: { init: function(elevators, floors) { _.each(elevators, function(elevator) { elevator.on('floor_button_pressed', function(level) { this.goToFloor(level, true); }); } } |
Dat is toch underscore.js?GateKeaper schreef op zondag 25 januari 2015 @ 21:11:
[...]
tip, lodash is ook beschikbaar:
JavaScript:
1 2 3 4 5 6 7 8 9 // vrij vertaald: { init: function(elevators, floors) { _.each(elevators, function(elevator) { elevator.on('floor_button_pressed', function(level) { this.goToFloor(level, true); }); } }

2x Dell UP2716D | R9 7950X | 128GB RAM | 980 Pro 2TB x2 | RTX2070 Super
.oisyn: Windows is net zo slecht in commandline als Linux in GUI
1
2
3
4
| elevator.goToFloor(0); elevator.goToFloor(1); elevator.goToFloor(2); elevator.goToFloor(1); |
Nou blijkt dus dat als je de timer hoger zet, dat je dan ook een betere score krijgt. Met de timer op 2x ben ik met bovenstaande code klaar in 58s. Als ik de timer op 21x zet duurt dit maar 55s.
Handige bug voor als je het NET niet haalt
Is het ook niet gewoon gedeeltelijk random waar de personen komen? Dan scheelt het per run dus of je het wel of niet haalt.Soundless schreef op maandag 26 januari 2015 @ 12:10:
Ff simpele stuk code gebruikt om iets te testen:
code:
1 2 3 4 elevator.goToFloor(0); elevator.goToFloor(1); elevator.goToFloor(2); elevator.goToFloor(1);
Nou blijkt dus dat als je de timer hoger zet, dat je dan ook een betere score krijgt. Met de timer op 2x ben ik met bovenstaande code klaar in 58s. Als ik de timer op 21x zet duurt dit maar 55s.
Handige bug voor als je het NET niet haalt
“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.”
Misschien wel, maar in al de runs die ik ehb gedraait is dit ongeveer de uitkomst. Ik denk toch dat er ergens een afrondingsbugje ofzo in zit waardoor dit gebeurt. Kan ook puur toeval zijn, maar dan is het ECHT toevallig want heb het nu wel een aantal keer getest.Woy schreef op maandag 26 januari 2015 @ 14:23:
[...]
Is het ook niet gewoon gedeeltelijk random waar de personen komen? Dan scheelt het per run dus of je het wel of niet haalt.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
| { addFloorToQueue: function(elevator, floorNum, override) { }, init: function(elevators, floors) { var elevator = elevators[0]; // Let's use the first elevator var rotator = 0; elevator.on("floor_button_pressed", function(floorNum) { // Floor button pressed addFloorToQueue(elevator, floorNum); }); _.each(floors, function(floor) { floor.on("up_button_pressed down_button_pressed", function() { addFloorToQueue(elevator, floor.level, true); }); }); elevator.on("passing_floor", function(floorNum, direction) { var destQueue = elevator.destinationQueue; }); elevator.on("idle", function() { // The elevator is idle addFloorToQueue(elevator, 0); }); }, update: function(dt, elevators, floors) { // We normally don't need to do anything here }, } |
Resulteert in:
There is a problem with your code: ReferenceError: addFloorToQueue is not defined at Object.eval (eval at (http://play.elevatorsaga.com/app.js:68:35), :23:13) at Object.el.trigger (http://play.elevatorsaga.com/libs/riot.js:45:12) at Object.elevatorInterface.checkDestinationQueue (http://play.elevatorsaga.com/interfaces.js:15:35) at http://play.elevatorsaga.com/world.js:162:64 at Function.St (http://play.elevatorsaga.com/libs/lodash.min.js:23:147) at Object.world.init (http://play.elevatorsaga.com/world.js:162:15) at updater (http://play.elevatorsaga.com/world.js:188:31)
Ook heb ik de function addFloorToQueue(elevator, floorNum, override) notitie gebruikt, maar helaas geen soelaas.
Hoe definiëren jullie herbruikbare code?
Edit;
Ah, even spieken in de oplossingen geeft de volgende mogelijkheid:
1
2
3
| var addFloorToQueue = function(elevator, floorNum, override) { }; |
[ Voor 8% gewijzigd door Matis op 26-01-2015 14:59 ]
If money talks then I'm a mime
If time is money then I'm out of time
In een lambda heb je alleen toegang tot stack variabelen binnen de ancestor scopes. In je code is addFloorToQueue een member van het object dat je definieert, geen variabele op de stack. Als je 'm vanuit init aan wilt roepen zul je this.addFloorToQueue() moeten doen. Echter, je this wijst naar een ander object binnen de event handlers (namelijk het elevator of floor object waar de handler op zit). De truc is om van this even een lokale var te maken, zodat je bij je originele object kan.
Je kan 'm inderdaad ook gewoon als variabele definieren, maar dan heb je er eventueel geen toegang meer toe in je update()
[ Voor 13% gewijzigd door .oisyn op 26-01-2015 15:09 ]
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
Klopt, dat zal ik ook niet ontkennen.
Klopt, daar liep ik dus ook al tegenaan. Echter was het nog niet in me opgekomen om this te misbruiken.In een lambda heb je alleen toegang tot stack variabelen binnen de ancestor scopes. In je code is addFloorToQueue een member van het object dat je definieert, geen variabele op de stack. Als je 'm vanuit init aan wilt roepen zul je this.addFloorToQueue() moeten doen. Echter, je this wijst naar een ander object binnen de event handlers (namelijk het elevator of floor object waar de handler op zit). De truc is om van this even een lokale var te maken, zodat je bij je originele object kan.
Dat is een oplossing waar ik nu mee kan leven.Je kan 'm inderdaad ook gewoon als variabele definieren, maar dan heb je er eventueel geen toegang meer toe in je update()
If money talks then I'm a mime
If time is money then I'm out of time
When life gives you lemons, start a battery factory
Hierin is de API uitgebreid. Het Elevator Object heeft er de functie getPressedFloors() bijgekregen. Waarmee je alle ingedrukte verdiepingen kunt uitlezen per lift.
If money talks then I'm a mime
If time is money then I'm out of time
When life gives you lemons, start a battery factory