가치산정
2026년 4월 8일 09:30분
레위기 27장은 사람을 서원할 때 나이와 성별에 따라 가치를 정합니다. 나는 이 표를 2차원 맵으로 구현했습니다. 나이 구간과 성별을 키로 받아 은 세겔 값을 반환합니다. 구간에 해당하지 않으면 제사장 판단으로 처리합니다.
package com.jesusbornd.leviticus;
import java.util.Map;
import java.util.Optional;
public class Leviticus_27_Chapter_Lv3 {
enum Gender { MALE, FEMALE }
record AgeRange(int min, int max) {
boolean contains(int age) { return age >= min && age <= max; }
}
record ValuationKey(AgeRange range, Gender gender) {}
static class VowValuationTable {
private final Map<ValuationKey, Integer> table;
VowValuationTable() {
table = Map.of(
new ValuationKey(new AgeRange( 1, 4), Gender.MALE), 3,
new ValuationKey(new AgeRange( 1, 4), Gender.FEMALE), 2,
new ValuationKey(new AgeRange( 5, 19), Gender.MALE), 20,
new ValuationKey(new AgeRange( 5, 19), Gender.FEMALE), 10,
new ValuationKey(new AgeRange(20, 59), Gender.MALE), 50,
new ValuationKey(new AgeRange(20, 59), Gender.FEMALE), 30,
new ValuationKey(new AgeRange(60, 99), Gender.MALE), 15,
new ValuationKey(new AgeRange(60, 99), Gender.FEMALE), 10
);
}
Optional<Integer> lookup(int age, Gender gender) {
return table.entrySet().stream()
.filter(e -> e.getKey().range().contains(age) && e.getKey().gender() == gender)
.map(Map.Entry::getValue)
.findFirst();
}
void print(int age, Gender gender) {
String label = gender == Gender.MALE ? "남" : "여";
lookup(age, gender)
.ifPresentOrElse(
v -> System.out.printf("나이 %2d %s → %d 세겔%n", age, label, v),
() -> System.out.printf("나이 %2d %s → 제사장 판단%n", age, label)
);
}
}
public static void main(String[] args) {
VowValuationTable vow = new VowValuationTable();
vow.print(3, Gender.MALE);
vow.print(3, Gender.FEMALE);
vow.print(25, Gender.MALE);
vow.print(65, Gender.FEMALE);
vow.print(0, Gender.MALE);
}
}
from enum import Enum
from dataclasses import dataclass
class Gender(Enum):
MALE = "남"
FEMALE = "여"
@dataclass(frozen=True)
class AgeRange:
min_age: int
max_age: int
def contains(self, age: int) -> bool:
return self.min_age <= age <= self.max_age
VOW_TABLE: dict[tuple[AgeRange, Gender], int] = {
(AgeRange( 1, 4), Gender.MALE): 3,
(AgeRange( 1, 4), Gender.FEMALE): 2,
(AgeRange( 5, 19), Gender.MALE): 20,
(AgeRange( 5, 19), Gender.FEMALE): 10,
(AgeRange(20, 59), Gender.MALE): 50,
(AgeRange(20, 59), Gender.FEMALE): 30,
(AgeRange(60, 99), Gender.MALE): 15,
(AgeRange(60, 99), Gender.FEMALE): 10,
}
def lookup(age: int, gender: Gender) -> int | None:
for (rng, g), value in VOW_TABLE.items():
if rng.contains(age) and g == gender:
return value
return None
def print_valuation(age: int, gender: Gender):
value = lookup(age, gender)
if value is not None:
print(f"나이 {age:2d} {gender.value} → {value} 세겔")
else:
print(f"나이 {age:2d} {gender.value} → 제사장 판단")
if __name__ == "__main__":
print_valuation(3, Gender.MALE)
print_valuation(3, Gender.FEMALE)
print_valuation(25, Gender.MALE)
print_valuation(65, Gender.FEMALE)
print_valuation(0, Gender.MALE)
Search
Categories
← 목록으로
Comments
나이 구간과 성별로 가치를 매기는 표를 2차원 맵으로 구현한 방식이, 서원의 구체적인 기준을 직관적으로 보여줍니다.