diff --git a/holiday-ii-plane-seating/index.js b/holiday-ii-plane-seating/index.js new file mode 100644 index 0000000..4fdfe51 --- /dev/null +++ b/holiday-ii-plane-seating/index.js @@ -0,0 +1,39 @@ +// https://www.codewars.com/kata/holiday-ii-plane-seating/javascript + +function planeSeat(a) { + const m = a.match(/^(\d+)(\w+)$/); + const v = conditionalRange(+m[1], [ + { min: 1, max: 20, data: 'Front' }, + { min: 21, max: 40, data: 'Middle' }, + { min: 41, max: 60, data: 'Back' }, + ], false); + const h = conditionalRange('ABCDEFGHK'.indexOf(m[2]), [ + { min: 0, max: 2, data: 'Left' }, + { min: 3, max: 5, data: 'Middle' }, + { min: 6, max: 8, data: 'Right' }, + ], false); + return v && h ? [v, h].join`-` : 'No Seat!!'; +} + +// https://gist.github.com/gkucmierz/66ed209add3343db76482040d93d8a03 +const conditionalRange = (n, ranges, def) => { + for (let i = 0; i < ranges.length; ++i) { + const r = ranges[i]; + if ('max' in r) { + if ('min' in r) { + if (r.min <= n && n <= r.max) return r.data; + } else { + if (n <= r.max) return r.data; + } + } + } + for (let i = ranges.length-1; 0 <= i; --i) { + const r = ranges[i]; + if ('min' in r) { + if (!('max' in r)) { + if (r.min <= n) return r.data; + } + } + } + return def; +};