हाय, हैब्र। मैं आपके साथ एक दिलचस्प समस्या साझा करना चाहता हूं जो हम में से कई को साक्षात्कार में प्राप्त हुई, लेकिन शायद यह भी महसूस नहीं किया कि हम इसे गलत तरीके से हल कर रहे थे।
सबसे पहले, थोड़ा इतिहास। टीम लीडर और तकनीकी नेता के पदों पर काम करते हुए, मुझे कभी-कभी साक्षात्कार आयोजित करना पड़ता था, इसलिए मुझे कुछ सैद्धांतिक प्रश्न तैयार करने की आवश्यकता है, ठीक है, सरल कार्यों के एक जोड़े को हल करने में 2 से 3 मिनट से अधिक नहीं लगेगा। यदि सिद्धांत के साथ सब कुछ सरल है - मेरा पसंदीदा सवाल है: "टाइपोफ़ नल क्या है?", उत्तर से आप तुरंत समझ सकते हैं कि आपके सामने कौन बैठा है, जून बस सही उत्तर देगा, और वरिष्ठों के लिए उम्मीदवार भी बताएगा कि क्यों। अभ्यास के साथ यह अधिक कठिन है। लंबे समय तक मैं एक सामान्य कार्य के साथ नहीं आ सका, न कि दूर चला गया, जैसे कि फ़िज़-बज़, लेकिन मेरे अपने कुछ। इसलिए, मैंने साक्षात्कार में असाइनमेंट दिए, जो मैंने खुद पास किए, वर्तमान नौकरी पर नौकरी प्राप्त की। उनमें से सबसे पहले चर्चा की जाएगी।
टास्क टेक्स्ट
एक फ़ंक्शन लिखें जो स्ट्रिंग को इनपुट के रूप में लेता है और इस स्ट्रिंग को "पीछे" लौटाता है
function strReverse(str) {};
strReverse('Habr') === 'rbaH'; // true
, , :
const strReverse = str => str.split('').reverse().join('');
- , «split('')». , : « , ...?». .
, , , emoji! , , , , (, ).
, emoji , .

, , . , , , , , , !

, , , … , , , emoji ?
, !

. , , , , — , .
, . « ?» . «, » — , … « ? ? , — ? !» — .
, , — .
Emoji?
, —
! ,
.
emoji unicode 8.0 emoji 2.0 , emoji.
.
emoji

…
, emoji

→
emoji, zwj — .
ZERO WIDTH JOINER (ZWJ) — , , emoji ZWJ (200D), «» emoji :

→
, emoji .
, , , ?
.
, .
emoji, , , .
emoji_sequence :=
emoji_core_sequence
| emoji_zwj_sequence
| emoji_tag_sequence
#
emoji_core_sequence :=
emoji_character
| emoji_presentation_sequence
| emoji_keycap_sequence
| emoji_modifier_sequence
| emoji_flag_sequence
emoji_presentation_sequence :=
emoji_character emoji_presentation_selector
emoji_presentation_selector := \x{FE0F}
emoji_keycap_sequence := [0-9#*] \x{FE0F 20E3}
emoji_modifier_sequence :=
emoji_modifier_base emoji_modifier
emoji_modifier_base := \p{Emoji_Modifier_Base}
emoji_modifier := \p{Emoji_Modifier}
#
emoji_flag_sequence :=
regional_indicator regional_indicator
regional_indicator := \p{Regional_Indicator}
emoji_zwj_sequence :=
emoji_zwj_element ( ZWJ emoji_zwj_element )+
emoji_zwj_element :=
emoji_character
| emoji_presentation_sequence
| emoji_modifier_sequence
emoji_tag_sequence :=
tag_base tag_spec tag_term
tag_base :=
emoji_character
| emoji_modifier_sequence
| emoji_presentation_sequence
tag_spec := [\x{E0020}-\x{E007E}]+
tag_term := \x{E007F}
, , () , .
Unicode Categories
, , , , , , .
. : emoji:
{Emoji}, {Emoji_Presentation}, {Emoji_Modifier}, {Emoji_Modifier_Base}, , , , ECMAScript . — —
{Emoji}
tc-39 (stage-2 10.04.2019).
« , » —
github.com/mathiasbynens/emoji-regex, , , … , … , ! !
const emojiRegex = require('emoji-regex');
const regex = emojiRegex();
function stringReverse(string) {
let match;
const emojis = [];
const separator = `unique_separator_${Math.random()}`;
const reversedSeparator = [...separator].reverse().join('');
while (match = regex.exec(string)) {
const emoji = match[0];
emojis.push(emoji);
}
return [...string.replace(regex, separator)].reverse().join('').replace(new RegExp(reversedSeparator, 'gm'), () => emojis.pop());
}

"
" , - , . , : « , , null >= 0? !». , 100% , , - — , . -, , , - .
, , .
:
\u{0415}\u{0308}. , 2 , emoji, … — .
UPD: «», 2 u{0415}() u{0308}("̈), «» .