From f04abe7aa8d743ad908eed99a55fb8ec31339a1b Mon Sep 17 00:00:00 2001 From: Grzegorz Kucmierz Date: Thu, 5 Dec 2019 21:27:17 +0100 Subject: [PATCH] Holiday II - Plane Seating --- holiday-ii-plane-seating/index.js | 39 +++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 holiday-ii-plane-seating/index.js 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; +};