gioiliop7 Δημοσ. 18 Δεκεμβρίου 2022 Share Δημοσ. 18 Δεκεμβρίου 2022 Καλησπέρα παιδιά. Δεν ξέρω αν έχετε φτιάξει κάτι παρόμοιο παλαιότερα, αλλά δυσκολεύομαι να βρω τη λογική για τον αλγόριθμο και το πως θα δουλεύει για κάτι που θέλω να φτιάξω οπότε σας το παραθέτω εδώ Είμαστε 3 άτομα σε μία υπηρεσία και κάνουμε ημερίσιες βάρδιες και θέλω να φτιάξω ένα script το οποίο θα κάνει generate τις υπηρεσίες του μήνα. Θα το φτιάξω σε ένα js αρχείο σαν επιλογή γλώσσας αλλά δεν με νοιάζει τόσο αυτό, ακόμα βρίσκομαι στην λογική του όλου πράγματος. Έχω έναν πίνακα με τα άτομα και ένα με τις ημέρες του μήνα. Δεν μπορώ να σκεφτώ πως θα ήταν σωστός τρόπος να γίνει αυτό. Έχω σκεφτεί μέχρι και fifo και όταν πάω να το υλοποιήσω πάλι κολλάω. Loop στις μέρες; Loop στα άτομα και μετα στις μέρες; Μία βοήθεια αν έχετε σκεφτεί κάτι θα ήταν σημαντική. Ευχαριστώ πολύ. Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
παπι Δημοσ. 18 Δεκεμβρίου 2022 Share Δημοσ. 18 Δεκεμβρίου 2022 15 λεπτά πριν, gioiliop7 είπε generate τις υπηρεσίες Βαρδιες θες να πεις; Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
gioiliop7 Δημοσ. 18 Δεκεμβρίου 2022 Μέλος Share Δημοσ. 18 Δεκεμβρίου 2022 Ναι. Πρακτικά αν εγώ έχω Δευτέρα θα πρέπει αυτόματα να ξαναμπαινω για βάρδια την Πέμπτη. Είναι ολοήμερες οπότε δεν θα χρειαστεί να μπούνε δύο άτομα σε μια μέρα και αυτό το κάνει λίγο πιο εύκολο Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
παπι Δημοσ. 18 Δεκεμβρίου 2022 Share Δημοσ. 18 Δεκεμβρίου 2022 (επεξεργασμένο) Ααα, αρα θες ενα "κυκλικο" buffer, με μια συναερτηση η οποια θα επιστρεφει τη τρεχουσα θεση και ταυτοχρονα θα πηγαινει τον δεικτη στην επομενη. Θες και μια συναρτηση η οποια θα επιστρεφει αν η μερα ειναι εργασιμη ετσι μπορεις να πεις loop 1/1/23-31/1/23 current => current.shift = getEmployee(employees) playground let employees = ['Petros', 'Marios', 'Kwstas']; let circuitBuffer = circuitBufferMake(employees); let fromDate = new Date("1/1/2023"); let toDate = new Date("1/31/2023"); for (let date = new Date(fromDate); date < toDate; date = new Date(date.setDate(date.getDate() + 1))) { if (isWorkingDay(date)) { let currentEmploye = circuitBufferCurrent(circuitBuffer); circuitBufferMove(circuitBuffer); console.log(currentEmploye + " is working at " + date.toDateString()); } } function circuitBufferMake(data) { return { buffer: [...data], currentPosition: 0 }; } function circuitBufferCurrent(buffer) { return buffer.buffer[buffer.currentPosition]; } function circuitBufferMove(buffer) { buffer.currentPosition++; if (buffer.currentPosition >= buffer.buffer.length) buffer.currentPosition = 0; } function isWorkingDay(date) { if (date.getDay() == 0 || date.getDay() == 6) return false; return true; } Επεξ/σία 18 Δεκεμβρίου 2022 από παπι 1 Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
Λύση gioiliop7 Δημοσ. 18 Δεκεμβρίου 2022 Μέλος Λύση Share Δημοσ. 18 Δεκεμβρίου 2022 Είσαι απίστευτος. Αρχικά ευχαριστώ για την απάντησή σου. Τα σαββατοκύριακα τα χρειαζόμουν μέσα ωστόσο μου άρεσε ο τρόπος που το προσέγγισες. Επίσης επειδή έτρεξα το script σου η πρώτη και η τελευταία μέρα του μήνα θέλει διόρθωση γιατί δεν τις πιάνει. Το λέω μπας και το χρησημοποιήσει κάποιος άλλος. Εν μέρει τελικά το είχα λύσει πρίν απαντήσεις αλλά τώρα το είδα οπότε θα παραθέσω και τη δική μου λύση μπας και κάποιο άλλο παιδί θέλει να κάνει κάτι παρόμοιο. Το έκανα με δομή δεδομένων πρακτικά και μια ουρά, κάτι σαν FIFO. Playground: https://playcode.io/1039614 const date = new Date(); function getAllDaysInMonth(year, month) { const date = new Date(year, month, 1); const dates = []; while (date.getMonth() === month) { dates.push(new Date(date)); date.setDate(date.getDate() + 1); } return dates; } const allDays = getAllDaysInMonth(date.getFullYear(), date.getMonth()); const employees = ["Giannis", "Petros", "Kostas"]; allDays.forEach((e) => { const selected = employees[0]; employees.shift(); console.log(`${selected} working in ${e}`); employees.push(selected); }); 1 Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
k33theod Δημοσ. 20 Δεκεμβρίου 2022 Share Δημοσ. 20 Δεκεμβρίου 2022 Μία άλλη προσέγγιση είναι atoma = ["Giannis", "Petros", "Kostas", "Thodoris"]; arat = atoma.length; for (let i = 0;i<31; i++) console.log (`Tin ${i+1} Ιανουαρίου 2023 ipiresia exei o ${atoma[i%arat]}`); Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
pmav99 Δημοσ. 25 Δεκεμβρίου 2022 Share Δημοσ. 25 Δεκεμβρίου 2022 On 20/12/2022 at 15:00, k33theod said: Μία άλλη προσέγγιση είναι atoma = ["Giannis", "Petros", "Kostas", "Thodoris"]; arat = atoma.length; for (let i = 0;i<31; i++) console.log (`Tin ${i+1} Ιανουαρίου 2023 ipiresia exei o ${atoma[i%arat]}`); Δεν έχουν όλοι οι μήνες 31 μέρες. Επίσης θα πρέπει να λάβεις υπόψη και τα δίσεκτα χρόνια κτλ. Anyhow, μια λύση σε Python from datetime import date from datetime import timedelta from itertools import cycle from typing import Generator def daterange(start: date, end: date) -> Generator[date, None, None]: return (start + timedelta(n) for n in range((end- start).days)) def print_shifts(workers: list[str], start_date: str, end_date: str) -> None: start = date.fromisoformat(start_date) end = date.fromisoformat(end_date) for (worker, date) in zip(cycle(WORKERS), daterange(start, end)): print(f"{date.isoformat()} - {worker}") if __name__ == "__main__": WORKERS = ["kostas", "manos", "andreas", "maria", "eleni"] START_DATE = "2020-02-01" END_DATE = "2020-03-01" print_shifts( workers=WORKERS, start_date=START_DATE, end_date=END_DATE, ) 1 Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
ghostaki Δημοσ. 27 Δεκεμβρίου 2022 Share Δημοσ. 27 Δεκεμβρίου 2022 const personsInShiftRota = ['John', 'Anna', 'Rachel', 'Nick'] const getRemainingShiftDatesForCurrentMonth = () => { const currentMonthIndex = new Date().getMonth() const today = new Date().getDate() const shiftDate = new Date() // today, for starters const shiftDates = [shiftDate.toDateString()] for (let i = today; i < 31; i++) { shiftDate.setDate(shiftDate.getDate() + 1) if (shiftDate.getMonth() === currentMonthIndex) { shiftDates.push(shiftDate.toDateString()) } } return shiftDates; } const getShiftRota = (shiftDates, personsInShiftRota) => { const numberOfPersons = personsInShiftRota.length const rota = [] shiftDates.forEach((shiftDate, index) => { const personIndex = index % numberOfPersons rota.push(`${shiftDate} - ${personsInShiftRota[personIndex]}`) }) return rota } const shiftDates = getRemainingShiftDatesForCurrentMonth() const shiftRota = getShiftRota(shiftDates, personsInShiftRota) console.log(shiftRota) Μιας και τρωγόμουν να γράψω λίγο κώδικα στις διακοπές, ιδού και η δική μου παραλλαγή που εκτυπώνει τις βάρδιες από σήμερα έως και το τέλος του τρέχοντα μήνα. Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα