5 ዚተለመዱ ዚጃቫስክሪፕት ቃለመጠይቅ ቜግሮቜ፡- ትንተና እና መፍትሄዎቜ

5 ዚተለመዱ ዚጃቫስክሪፕት ቃለመጠይቅ ቜግሮቜ፡- ትንተና እና መፍትሄዎቜ

ኚአስተርጓሚው፡- ለእርስዎ አንድ ጜሑፍ አሳተመ ስለ ዚተለመዱ ዚጃቫ ስክሪፕት ተግባራት ዚምትናገሚው ማሪያ አንቶኒታ ፐርና, በቃለ መጠይቅ ብዙ ጊዜ ለአመልካ቟ቜ-ገንቢዎቜ ይቀርባል። ጜሑፉ በመጀመሪያ ደሹጃ ለጀማሪ ፕሮግራመሮቜ ጠቃሚ ይሆናል።

በቮክኖሎጂ ኩባንያዎቜ ውስጥ ዹተደሹጉ ቃለመጠይቆቜ ዹኹተማው መነጋገሪያ ሆነው ቆይተዋል። ይህ ዚሚያስገርም አይደለም - ዹቃለ መጠይቁ በተሳካ ሁኔታ መጠናቀቁ ጥሩ ሥራ ለማግኘት ያስቜላል. ግን ይህ በጣም ቀላል አይደለም, ምክንያቱም ብዙውን ጊዜ ውስብስብ ቜግሮቜን መፍታት አስፈላጊ ነው.

ኹዚህም በላይ አብዛኛውን ጊዜ እነዚህ ተግባራት አመልካቹ ኚሚያኚናውነው ሥራ ጋር ዹተገናኙ አይደሉም, ነገር ግን አሁንም መፍታት አለባ቞ው. አንዳንድ ጊዜ ኹ Google ወይም ኹሌላ ምንጭ ጋር ሳያሚጋግጡ በቊርዱ ላይ ማድሚግ አለብዎት. አዎን, ሁኔታው ​​ቀስ በቀስ እዚተለወጠ ነው, እና በአንዳንድ ኩባንያዎቜ ውስጥ እንደዚህ አይነት ቃለመጠይቆቜን አይቀበሉም, ነገር ግን ብዙ ቀጣሪዎቜ አሁንም ይህንን ወግ አጥብቀው ይይዛሉ. ይህ ጜሑፍ ብዙውን ጊዜ ለአመልካ቟ቜ እንደ ተግባር ዚሚያገለግሉ ዚተለመዱ ዚጃቫ ስክሪፕት ተግባራትን ለመተንተን ያተኮሚ ነው።

እኛ እናስታውስዎታለን- ለሁሉም ዹ "ሀብር" አንባቢዎቜ - ዹ "Habr" ዚማስተዋወቂያ ኮድን በመጠቀም በማንኛውም ዹ Skillbox ኮርስ ውስጥ ሲመዘገቡ ዹ 10 ሩብልስ ቅናሜ.

Skillbox ይመክራል፡ ተግባራዊ ኮርስ "ሞባይል ገንቢ PRO".

ዋናው ነገር ለቃለ መጠይቅዎ በጥንቃቄ መዘጋጀት ነው.

አዎ፣ ተግባራቶቹን ማፍሚስ ኚመጀመራቜን በፊት፣ ለቃለ መጠይቅ ለመዘጋጀት አንዳንድ አጠቃላይ ምክሮቜን እንመልኚት።

ዋናው ነገር አስቀድመው ማዘጋጀት ነው. ስልተ ቀመሮቜን እና ዚውሂብ አወቃቀሮቜን ምን ያህል እንደሚያስታውሱ ያሚጋግጡ እና እርስዎ በደንብ በማያውቋ቞ው አካባቢዎቜ እውቀትዎን ያሻሜሉ። ለቃለ መጠይቅ ለመዘጋጀት ዚሚያግዙዎት ብዙ ዚመስመር ላይ መድሚኮቜ አሉ። እንመክራለን። geeksforgeeks, ፕራምፕ, ቃለ መጠይቅ.io О ዚኮድ ምልክት.

ውሳኔውን ጮክ ብሎ መናገር መማር ጠቃሚ ነው. ምን እዚሰሩ እንደሆነ ለአመልካ቟ቜ መንገር ተገቢ ነው፣ እና በቊርዱ ላይ መጻፍ ብቻ ሳይሆን (ወይም በኮምፒዩተር ላይ ኮድ ይተይቡ ፣ እንዲሁም በፀጥታ)። ስለዚህ, በኮዱ ውስጥ ስህተት ኚሰሩ, ነገር ግን መፍትሄው በአጠቃላይ ትክክል ኹሆነ, ዚስኬት እድሎቜን ኹፍ ማድሚግ ይቜላሉ.

መፍትሄው ኚመጀመሩ በፊት ቜግሩን መሚዳት ያስፈልጋል. በአንዳንድ ሁኔታዎቜ ስራውን በጉልበት ተሚድተው ወደ ተሳሳተ መንገድ መሄድ ይቜላሉ። ለጠያቂው ጥቂት ግልጜ ጥያቄዎቜን መጠዹቅ ጠቃሚ ሊሆን ይቜላል።

በፒሲ ላይ ሳይሆን በእጅ መጻፍ መለማመድ ያስፈልግዎታል. በቃለ-መጠይቆቜ ላይ አመልካቹ ምንም ምክሮቜ ወይም አውቶማቲክ ቅርጞቶቜ ዚሌሉበት ምልክት ማድሚጊያ እና ሰሌዳ ሲሰጣ቞ው ይኚሰታል። መፍትሄ በሚፈልጉበት ጊዜ, ኮድዎን በወሚቀት ላይ ወይም በትክክል በቊርዱ ላይ ይፃፉ. ሁሉንም ነገር በጭንቅላቱ ውስጥ ካስቀመጡ, አንድ አስፈላጊ ነገር መርሳት ይቜላሉ.

በጃቫስክሪፕት ውስጥ ዚአብነት ተግባራት

ኚእነዚህ ተግባራት ውስጥ አንዳንዶቹን አስቀድመው ያውቁ ይሆናል። ተመሳሳይ ዹሆነ ነገር መፍታት ያለብዎት ቃለመጠይቆቜን ወስደዋል ወይም ጃቫ ስክሪፕት እዚተማሩ በእነሱ ላይ ተለማመዱ። ደህና, አሁን እነሱን እንደገና ለመፍታት ጊዜው አሁን ነው, እና ስለ ሂደቱ ዝርዝር ማብራሪያ.

ፓሊንድሚም

ፓሊንድሚም ማለት በተለመደው አቅጣጫ እና በተቃራኒ አቅጣጫ ዚሚነበብ ቃል፣ ዓሹፍተ ነገር ወይም ዚቁምፊዎቜ ቅደም ተኹተል ነው። ለምሳሌ "አና" ፓሊንድሮም ነው, ግን "ጠሹጮዛ" እና "ዮሐንስ" አይደሉም.

መጋሹጃ

አንድ ሕብሚቁምፊ ተሰጥቷል; ሕብሚቁምፊው palindrome ኹሆነ እውነትን እንድትመልስ ዚሚፈቅድልህን ተግባር መፃፍ አለብህ፣ ካልሆነ ደግሞ ሐሰት። በዚህ ሁኔታ, ክፍተቶቜ እና ስርዓተ-ነጥብ ምልክቶቜ ግምት ውስጥ መግባት አለባ቞ው.

palindrome ('racecar') === እውነት
palindrome ('ጠሹጮዛ') === ሐሰት

ተግባሩን መተንተን

እዚህ ያለው ዋናው ሃሳብ ገመዱን ወደ ኋላ ማዞር ነው. ዹ"ተገላቢጊሜ" ሕብሚቁምፊ ሙሉ ለሙሉ ኚመጀመሪያው ጋር ተመሳሳይ ኹሆነ ፓሊንድሚም አግኝተናል እና ተግባሩ ወደ እውነት መመለስ አለበት። ካልሆነ ውሞት።

ዉሳኔ

ፓሊንድሮምን ለመፍታት ዚሚያስቜል ኮድ ይኾውና.

const palindrome = str => {
  // turn the string to lowercase
  str = str.toLowerCase()
  // reverse input string and return the result of the
  // comparisong
  return str === str.split('').reverse().join('')
}

ዚመጀመሪያው እርምጃ ዚግቀት ሕብሚቁምፊ ቁምፊዎቜን ወደ ትንሜ ፊደል መለወጥ ነው። ይህ መርሃግብሩ በትክክል ገጾ-ባህሪያቱን እራሳ቞ው ለማነፃፀር ዋስትና ነው, እና መያዣ ወይም ሌላ ነገር አይደለም.

ሁለተኛው እርምጃ ዚመስመሩ ተገላቢጊሜ ነው። ይህን ለማድሚግ ቀላል ነው፡ .Split() method (ዚሕብሚቁምፊ ቀተ-መጜሐፍት) በመጠቀም ወደ ድርድር መቀዹር ያስፈልግዎታል። ኚዚያም ድርድርን .reverse() (Array Library) በመጠቀም እንገለበጣለን። ዚመጚሚሻው እርምጃ .join() (ዚአደራደር ቀተ-መጜሐፍትን) በመጠቀም ዚተገላቢጊሹን ድርድር ወደ ሕብሚቁምፊ መቀዹር ነው።

አሁን ዚሚያስፈልገው ሁሉ "ዚተገላቢጊሜ" ሕብሚቁምፊን ኚመጀመሪያው ጋር ማወዳደር ነው, ውጀቱን እውነት ወይም ሐሰት በመመለስ.

fizzbuzz

በጣም ታዋቂ ኹሆኑ ዚስራ ቃለ መጠይቆቜ አንዱ።

መጋሹጃ

ኹ 1 እስኚ n ቁጥሮቜን ወደ ኮንሶሉ ለማሳዚት ተግባር ለመፃፍ ያስፈልጋል ፣ n ተግባሩ እንደ መለኪያ ዚሚወስደው ኢንቲጀር ሲሆን ኚሚኚተሉት ሁኔታዎቜ ጋር።

  • ኹ 3 ብዜቶቜ ይልቅ ዚውጀት fizz;
  • ኹ 5 ብዜቶቜ ይልቅ ዹ buzz ውፅዓት;
  • ኚሁለቱም 3 እና 5 ብዜቶቜ ይልቅ fizzbuzz ውፅዓት።

ለምሳሌ:

ፊዝቡዝ(5)

ውጀት

// 1 እ.ኀ.አ.
// 2 እ.ኀ.አ.
// fizz
// 4 እ.ኀ.አ.
// buzz

ተግባሩን መተንተን

እዚህ ያለው ዋናው ነገር ጃቫ ስክሪፕትን በመጠቀም ብዜቶቜን ለማግኘት ዚሚቻልበት መንገድ ነው. ሞጁሉን ኊፕሬተር ወይም ቀሪውን -% በመጠቀም ሊተገበር ይቜላል, ይህም ሁለት ቁጥሮቜን ሲኚፋፍሉ ቀሪውን ለማሳዚት ያስቜልዎታል. ቀሪው 0 ኹሆነ, ዚመጀመሪያው ቁጥር ዹሁለተኛው ብዜት ነው ማለት ነው.

12% 5 // 2 -> 12 ዹ 5 ብዜት አይደለም።
12% 3 // 0 -> 12 ዹ 3 ብዜት ነው።

ስለዚህ 12 ለ 5 ብንኚፍል 2 ኚቀሪው 2 ጋር እናገኛለን።12 ለ 3 ብንኚፍል 4 ኚቀሪው 0 ጋር እናገኛለን።በመጀመሪያው 12 ዹ 5 ብዜት አይደለም፣ በ ሁለተኛ፣ 12 ዹ3 ብዜት ነው።

ዉሳኔ

በጣም ጥሩው መፍትሔ ዹሚኹተለው ኮድ ይሆናል.

const fizzBuzz = num => {
  for(let i = 1; i <= num; i++) {
    // check if the number is a multiple of 3 and 5
    if(i % 3 === 0 && i % 5 === 0) {
      console.log('fizzbuzz')
    } // check if the number is a multiple of 3
      else if(i % 3 === 0) {
      console.log('fizz')
    } // check if the number is a multiple of 5
      else if(i % 5 === 0) {
      console.log('buzz')
    } else {
      console.log(i)
    }
  }
}

ተግባሩ ሁኔታዊ መግለጫዎቜን በመጠቀም አስፈላጊውን ቌኮቜ ያኚናውናል እና በተጠቃሚው ዹሚፈለገውን ውጀት ያስገኛል. በተግባሩ ውስጥ, ዹ if ... ሌሎቜ መግለጫዎቜ ቅደም ተኹተል ትኩሚት መስጠት ተገቢ ነው: በድርብ ሁኔታ (&&) በመጀመር እና ብዙ ቁጥሮቜ ሊገኙ በማይቜሉበት ጊዜ በጉዳዩ ያበቃል. በውጀቱም, ሁሉንም አማራጮቜ እንሞፍናለን.

አናግራም

ይህ ዹሌላ ቃል ፊደላትን በሙሉ በተመሳሳይ ቁጥር ዚያዘ ቃል ስም ነው, ግን በተለዹ ቅደም ተኹተል.

መጋሹጃ

ሁለት ሕብሚቁምፊዎቜ አናግራሞቜ መሆናቾውን ዚሚፈትሜ ተግባር መፃፍ አለብን፣ እና ዚፊደሎቜ ጉዳይ ምንም አይደለም። ቁምፊዎቜ ብቻ ይቆጠራሉ; ክፍተቶቜ ወይም ስርዓተ-ነጥብ ምልክቶቜ ግምት ውስጥ አይገቡም.

አናግራም ('ፈላጊ'፣ 'ጓደኛ') --> እውነት
አናግራም ('ሄሎ'፣ 'ባይ') --> ውሞት

ተግባሩን መተንተን

እዚህ እያንዳንዱን ፊደል በሁለት ዚግብዓት መስመሮቜ እና በእያንዳንዱ መስመር ቁጥራ቞ውን ማሚጋገጥ አስፈላጊ መሆኑን ግምት ውስጥ ማስገባት አስፈላጊ ነው.

ፈላጊ -> ሚ፡ 1 ጓደኛ -> ሚ፡ 1
እኔ፡ 1ር፡ 1
n፡ 1 እኔ፡ 1
መ፡ 1 ሠ፡ 1
ሠ፡ 1 n፡ 1
አር፡1 ደ፡1

ዚአናግራም መሹጃን ለማኚማ቞ት እንደ ጃቫስክሪፕት ነገር በጥሬው ያለ መዋቅር መምሚጥ አለብዎት። በዚህ ጉዳይ ላይ ቁልፉ ዚደብዳቀው ባህሪ ነው, እሎቱ አሁን ባለው መስመር ውስጥ ያለው ድግግሞሜ ብዛት ነው.

ሌሎቜ ሁኔታዎቜም አሉ፡-

  • በማነፃፀር ጊዜ ዚደብዳቀዎቜ ጉዳይ ግምት ውስጥ ዚማይገባ መሆኑን ማሚጋገጥ አለብዎት. ሁለቱንም ሕብሚቁምፊዎቜ ወደ ትንሜ ወይም ትልቅ ሆሄ ይለውጡ።
  • ሁሉንም ገጾ-ባህሪያት ኹንፅፅር እናወጣለን. ጋር ለመስራት ምርጥ መደበኛ መግለጫዎቜ.

ዉሳኔ

// helper function that builds the
// object to store the data
const buildCharObject = str => {
  const charObj = {}
  for(let char of str.replace(/[^w]/g).toLowerCase()) {
    // if the object has already a key value pair
    // equal to the value being looped over,
    // increase the value by 1, otherwise add
    // the letter being looped over as key and 1 as its value
    charObj[char] = charObj[char] + 1 || 1
  }
  return charObj
}
 
// main function
const anagram = (strA, strB) => {
  // build the object that holds strA data
  const aCharObject = buildCharObject(strA)
  // build the object that holds strB data
  const bCharObject = buildCharObject(strB)
 
  // compare number of keys in the two objects
  // (anagrams must have the same number of letters)
  if(Object.keys(aCharObject).length !== Object.keys(bCharObject).length) {
    return false
  }
  // if both objects have the same number of keys
  // we can be sure that at least both strings
  // have the same number of characters
  // now we can compare the two objects to see if both
  // have the same letters in the same amount
  for(let char in aCharObject) {
    if(aCharObject[char] !== bCharObject[char]) {
      return false
    }
  }
  // if both the above checks succeed,
  // you have an anagram: return true
  return true
}

ለአጠቃቀም ትኩሚት ይስጡ Object.keys() ኹላይ ባለው ቅንጣቢ ውስጥ. ይህ ዘዮ በእቃው ላይ እንደታዩት ስሞቜን ወይም ቁልፎቜን ዚያዘ ድርድር ይመልሳል። በዚህ ሁኔታ, ድርድር እንደሚኚተለው ይሆናል.

['f', 'i', 'n', 'd', 'e','r']

በዚህ መንገድ ትልቅ ዑደት ሳያደርጉ ዚነገሩን ባህሪያት እናገኛለን. በአንድ ተግባር ውስጥ ፣ ይህንን ዘዮ ኹ .ርዝመት ንብሚት ጋር መጠቀም ይቜላሉ - ሁለቱም ሕብሚቁምፊዎቜ ተመሳሳይ ዚቁምፊዎቜ ብዛት እንዳላ቞ው ለማሚጋገጥ - ይህ ዚአናግራሞቜ አስፈላጊ ባህሪ ነው።

አናባቢ ፍለጋ

በቃለ መጠይቅ ውስጥ ብዙ ጊዜ ዚሚመጣ ቀላል ቀላል ተግባር።

መጋሹጃ

ሕብሚቁምፊን እንደ ክርክር ዚሚወስድ እና ሕብሚቁምፊው ዚያዘውን ዚአናባቢዎቜ ብዛት ዚሚመልስ ተግባር መፃፍ ያስፈልግዎታል።
አናባቢዎቹ "a", "e", "i", "o", "u" ናቾው.

ለምሳሌ:

FindVowels('ሄሎ') // --> 2
አናባቢዎቜን አግኝ ('ለምን') // --> 0

ዉሳኔ

በጣም ቀላሉ አማራጭ ይኾውና:

const findVowels = str => {
  let count = 0
  const vowels = ['a', 'e', 'i', 'o', 'u']
  for(let char of str.toLowerCase()) {
    if(vowels.includes(char)) {
      count++
    }
  }
  return count
}

ዹ .includes () ዘዮን አጠቃቀም ትኩሚት መስጠት አስፈላጊ ነው. ለሁለቱም ሕብሚቁምፊዎቜ እና ድርድሮቜ ይገኛል። አንድ ድርድር ዹተወሰነ እሎት እንዳለው ለማወቅ ጥቅም ላይ መዋል አለበት። አደራደሩ ዹተገለጾውን እሎት ኚያዘ ይህ ዘዮ እውነት ነው ዹሚመለሰው እና ካልሆነ ውሞት ነው።

እንዲሁም ለቜግሩ አጭር መፍትሄ አለ-

const findVowels = str => {
  const matched = str.match(/[aeiou]/gi)
  return matched ? matches.length : 0
}

ዹ.መጫወቻ () ዘዮ እዚህ ጥቅም ላይ ይውላል, ይህም ቀልጣፋ ፍለጋን ተግባራዊ ለማድሚግ ያስቜላል. ዹመደበኛ አገላለጜ እንደ ስልት ነጋሪ እሎት በተጠቀሰው ሕብሚቁምፊ ውስጥ ኚተገኘ፣ ዚመመለሻ ዋጋው ዚሚዛመድ ዚቁምፊዎቜ ድርድር ነው። ደህና፣ ተዛማጆቜ ኚሌሉ፣ .ተዛማጅ() ባዶ ይመለሳል።

ፋይቊናቺ

በተለያዩ ደሚጃዎቜ ቃለ-መጠይቆቜ ላይ ሊሟላ ዚሚቜል ዚታወቀ ተግባር። ዹ Fibonacci ቅደም ተኹተል ተኚታታይ ቁጥሮቜ መሆኑን ማስታወስ ጠቃሚ ነው, እያንዳንዱ ተኚታይ ዚቀደሙት ሁለት ድምር ነው. ስለዚህ ዚመጀመሪያዎቹ አስር ቁጥሮቜ ይህን ይመስላል፡- 0፣ 1፣ 1፣ 2፣ 3, 5, 8, 13, 21, 34.

መጋሹጃ

ዹ nth መዝገብን በተወሰነ ቅደም ተኹተል ዚሚመልስ ተግባር መፃፍ ያስፈልግዎታል ፣ እና n ለተግባሩ እንደ ክርክር ዹተላለፈ ቁጥር ነው።

ፊቊናቺ (3) // --> 2

ይህ ተግባር በክርክሩ ውስጥ በተገለጹት ጊዜያት ብዛት መዞርን ያካትታል, እሎቱን በተገቢው ቊታ ይመልሰዋል. ቜግሩን ለማስተካኚል በዚህ መንገድ ሉፕ መጠቀምን ይጠይቃል። በምትኩ ተደጋጋሚነት ኚተጠቀሙ፣ ጠያቂው ሊወደው እና ጥቂት ተጚማሪ ነጥቊቜን ሊሰጥ ይቜላል።

ዉሳኔ

const fibonacci = num => {
  // store the Fibonacci sequence you're going
  // to generate inside an array and
  // initialize the array with the first two
  // numbers of the sequence
  const result = [0, 1]
 
  for(let i = 2; i <= num; i++) {
    // push the sum of the two numbers
    // preceding the position of i in the result array
    // at the end of the result array
    const prevNum1 = result[i - 1]
    const prevNum2 = result[i - 2]
    result.push(prevNum1 + prevNum2)
  }
  // return the last value in the result array
  return result[num]
}

በውጀቱ ድርድር ውስጥ ዚመጀመሪያዎቹ ሁለት ቁጥሮቜ በአንድ ሚድፍ ውስጥ ይገኛሉ ምክንያቱም በቅደም ተኹተል ውስጥ ያለው እያንዳንዱ ግቀት ዚቀደሙት ሁለት ቁጥሮቜ ድምርን ያካትታል. መጀመሪያ ላይ ቀጣዩን ቁጥር ለማግኘት ሊወሰዱ ዚሚቜሉ ሁለት ቁጥሮቜ ዚሉም፣ ስለዚህ ሉፕ በራስ ሰር ሊያመነጫ቞ው አይቜልም። ግን እንደምናውቀው, ዚመጀመሪያዎቹ ሁለት ቁጥሮቜ ሁልጊዜ 0 እና 1 ናቾው. ስለዚህ, ዚውጀቱን ድርድር እራስዎ ማስጀመር ይቜላሉ.

ስለ ተደጋጋሚነት ፣ ሁሉም ነገር ቀላል እና በተመሳሳይ ጊዜ ዚተወሳሰበ ነው-

const fibonacci = num => {
  // if num is either 0 or 1 return num
  if(num < 2) {
    return num
  }
  // recursion here
  return fibonacci(num - 1) + fibonacci(num - 2)
}

እኛ ፊቊናቺ () መደወልን እንቀጥላለን ፣ በትንሜ እና በትንሜ ቁጥሮቜ እንደ ክርክር እናስተላልፋለን። ያለፈው ክርክር 0 ወይም 1 ሲሆን እናቆማለን።

መደምደሚያ

ምናልባት ኚፊት ለፊት ወይም ለጃቫ ስክሪፕት ገንቢ ስራ (በተለይም ጁኒዹር ደሹጃ ኹሆነ) ቃለ መጠይቅ እዚሰጡ ኹሆነ ኚእነዚህ ተግባራት ውስጥ አንዳ቞ውንም አጋጥመውዎት ይሆናል። ግን ካላጋጠሟ቞ው ፣ ለወደፊቱ ጠቃሚ ሊሆኑ ይቜላሉ - ቢያንስ ለአጠቃላይ ልማት።

Skillbox ይመክራል፡

ምንጭ: hab.com

አስተያዚት ያክሉ