한달에 하루나 이틀 정도 날을 잡아서 그날만큼은 자기가 좋아하는 간식을 사먹는다는 그 아이디어가 정말 귀엽고 좋다고 생각했다.
그냥 이렇게라도 숨통을 틔워줄 겸, 마침 지금 혼자서 만들고 있는 가계부 프로그램에 도입해도 좋을 것 같다는 생각도 들어서 잠깐 코드를 짜봤다.
기본적인 로직은 로또 번호 발생기와 동일하다.
여기에 특별한 날을 한달에 2일 이상 잡을 경우 오름차순으로 정렬하여 출력하는 로직만 추가했다.
자바스크립트 내장함수를 몇 개 사용했는데, 이것도 나름 깊이있게 공부하려다보니 쓰잘데기없이 말이 많아져서 따로 글을 써야겠다.
1. 로또 번호 생성기
2. 셔플 (데이터 순서를 랜덤하게 섞기) - Math.random() 을 활용하여 난수 생성
3. 윤년 계산
4. sort() 를 이용한 데이터 오름차순 정렬
5. lastIndexOf(), substring() 을 활용하여 문자열 처리
6. 동적 객체 생성하여 추가
요건 짜다가 귀찮아서 그만둔 java 버전 소스...
package test;
import java.util.Calendar;
public class LuckyDay {
private int[] days;
private int[] selected;
public int[] getDays() {
return days;
}
public void setDays(int[] days) {
this.days = days;
}
public int[] getSelected() {
return selected;
}
public void setSelected(int[] selected) {
this.selected = selected;
}
public LuckyDay() {
int index = getTotalDays();
int[] days = new int[index];
int[] selected;
int temp = 0;
int j = 0;
for(int i = 0; i < days.length; i++) {
days[i] = i + 1;
}
for(int i = 0; i < 100; i++) {
j = (int)(Math.random() * index);
temp = days[0];
days[0] = days[j];
days[j] = temp;
}
selected = new int[] {days[0], days[1]};
this.days = days;
this.selected = selected;
}
public int getTotalDays () {
Calendar today = Calendar.getInstance();
int year = today.get(Calendar.YEAR);
int month = today.get(Calendar.MONTH);
int[] months = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int totalDays = months[month];
if(month == 2 && year % 4 == 0 && (year % 100 != 0 || year % 400 == 0))
++totalDays;
return totalDays;
}
}
$(function(){
$('#result').attr('style', 'visibility:hidden');
setBoxValue();
$('#testBtn').on('click', function(){
preGetLuckyDays();
});
});
function setBoxValue(){
var maxDays = getTotalDays();
$('#testBox').attr('max', maxDays);
}
function preGetLuckyDays(){
var selected = $('#testBox').val();
var choice = confirm("이번 달 중 " + selected + "일을 뽑아 럭키데이로 하시겠습니까?");
if(choice){
var totalDays = $('#testBox').attr('max');
getLuckyDays(totalDays, selected);
}
}
function getTotalDays(){
var today = new Date();
var year = today.getFullYear();
var month = today.getMonth();
var months = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
var totalDays = months[month];
if(month == 2){
if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
++totalDays;
}
return totalDays;
}
function getLuckyDays(totalDays, selected){
var days = new Array();
var selectedDays = new Array();
var temp = 0;
var j = 0;
var result = "";
for(var i = 0; i < totalDays; i++)
days[i] = i + 1;
for(var i = 0; i < 100; i++){
j = Math.floor(Math.random() * totalDays);
temp = days[0];
days[0] = days[j];
days[j] = temp;
}
for(var i = 0; i < selected; i++){
selectedDays[i] = days[i];
//result += selectedDays[i] + ", ";
}
if(selectedDays.length > 1)
selectedDays = selectedDays.sort(sortNumber);
for(var i in selectedDays){
result += selectedDays[i] + ", ";
}
result = result.substring(0, result.lastIndexOf(","));
$('#result').text(result);
$('#result').attr('style', 'visibility:display');
var btn = $('<button id="saveBtn">Save!</button>');
$('#result').append('<br><br>');
$('#result').append(btn);
}
function sortNumber(a, b){return a - b;}