Internationalization Puzzles 2025
const textEncoder = new TextEncoder();
input.split('\n').map(line => [textEncoder.encode(line).length <= 160, line.length <= 140]).map(([s, t]) => s ? (t ? 13 : 11) : (t ? 7 : 0)).reduce((a, b) => a + b, 0)
Object.entries(Object.groupBy(input.split('\n'), date => new Date(Date.parse(date)).toISOString())).find(([_, arr]) => arr.length >= 4)[0].replace('.000Z', '+00:00')
const isValid = (p) =>
[
(p) => p.length >= 4 && p.length <= 12,
(p) => /\d/.test(p),
(p) => /\p{Uppercase_Letter}/u.test(p),
(p) => /\p{Lowercase_Letter}/u.test(p),
(p) => [...p].some((c) => c.charCodeAt(0) > 127),
].every((rule) => rule(p));
(Using Temporal API)
const parseDateWithTimeZone = (dateString, tz) => {
const date = new Date(dateString);
return Temporal.PlainDateTime.from({
year: date.getFullYear(),
month: date.getMonth() + 1,
day: date.getDate(),
hour: date.getHours(),
minute: date.getMinutes(),
})
.toZonedDateTime(tz)
};
const lineRegex = /^.*:\s+(\S+)\s+(.+)$/;
const totalMinutes = input
.split('\n\n')
.map(group =>
group.split('\n')
.map(line => line.match(lineRegex).slice(1))
.map(([tz, dateString]) => parseDateWithTimeZone(dateString, tz))
)
.map(([departure, arrival]) => departure.until(arrival).total('minutes'))
.reduce((sum, minutes) => sum + minutes, 0);
(Using Temporal API)
const lineRegex = /^(\S+)\s+(\S+)\s+(.+)$/;
const result = input
.split("\n")
.map((line) => line.match(lineRegex).slice(1))
.map(([datetime, correct, wrong]) => {
let t;
try {
t = Temporal.ZonedDateTime.from(`${datetime}[America/Halifax]`, { offset: "reject" });
} catch (e) {
t = Temporal.ZonedDateTime.from(`${datetime}[America/Santiago]`);
}
return [t, Number.parseInt(correct, 10), Number.parseInt(wrong, 10)];
})
.map(([t, correct, wrong]) =>
t.subtract({ minutes: wrong }).add({ minutes: correct }),
)
.reduce((sum, dt, i) => sum + dt.hour * (i + 1), 0);