그는 이것에 대한 인턴 엘프가 없습니까?
코드 출현 2015 5일차
1 부
regex
건틀릿? regex
reduce()
및 every()
모두 마무리하기 위해 마지막이자 첫 번째 정규식 건틀릿?
valid
입니다.regular expression
s지금까지 여러 가지가 있었습니다.
그들은 모두 이것을 위해 나를 준비하고 있습니다!
정규식의 트리오
contains at least three vowels
단일 모음 문자와 일치하는
regex
는 다음과 같습니다./[aeiou]/
matchAll()
와 결합할 때 일치하는 항목의 수는 3개 이상이어야 합니다.[...text.matchAll(/[aeiou]/)].length >= 3
contains at least one letter that appears twice in a row
임의의 문자를 연속으로 두 번 일치시키는
regex
는 다음과 같습니다./(\w)\1/
matchAll()
와 결합할 때 일치하는 항목의 수는 1 이상이어야 합니다.[...text.matchAll(/(\w)\1/)].length > 0
does not contain the strings ab, cd, pq, or xy, even if they are part of one of the other requirements
regex
, ab
, cd
또는 pq
와 일치하는 xy
는 다음과 같습니다./ab|cd|pq|xy/
matchAll()
와 결합할 때 일치하는 항목의 수는 0이 되는 것이 좋습니다.[...text.matchAll(/ab|cd|pq|xy].length == 0
reduce() 및 every()를 모두 마무리합니다.
reduce()
문자열nice
카운트를 누적합니다.every()
모든 테스트 통과 확인자바스크립트 내 알고리즘:
input.reduce(
(nice, text) =>
nice += [
[...text.matchAll(/[aeiou]/)].length >= 3,
[...text.matchAll(/(\w)\1/)].length > 0,
[...text.matchAll(/ab|cd|pq|xy/)].length == 0
].every(el => el == true) ? 1 : 0
, 0)
정답을 생성했습니다!
파트 1, 1년 전
그때 내가 한 방법은 다음과 같습니다.
contains at least three vowels
각 모음을 문자별로 센다:
function hasMin3Vowels(str) {
let vowels = ['a','e','i','o','u']
let numVowels = 0
str.split("").forEach(char => {
if (vowels.includes(char)) {
numVowels += 1
}
})
return numVowels >= 3
}
contains at least one letter that appears twice in a row
다음 문자가 현재 문자와 일치하는 위치를 확인합니다.
function hasOneLetterTwiceInARow(str) {
let matches = 0
str.split("").forEach((char, idx) => {
if (idx !== str.length - 1) {
if (char == str[idx + 1]) {
matches += 1
}
}
})
return matches > 0
}
does not contain the strings ab, cd, pq, or xy, even if they are part of one of the other requirements
잘못된 쌍이 있는지 문자열을 확인합니다.
function hasNoDisallowedStrings(str) {
let output = 0;
let disallowedStrings = ['ab', 'cd', 'pq', 'xy']
disallowedStrings.forEach(bad => {
if (str.indexOf(bad) !== -1) {
output += 1
}
})
return output == 0;
}
래퍼 기능:
function isNice(str) {
return hasMin3Vowels(str) && hasOneLetterTwiceInARow(str) && hasNoDisallowedStrings(str)
}
래핑 반복자:
input.map(str => isNice(str))
.filter(str => str == true)
.length
이 코드가 좋지 않아 보이지만 이번 라운드에서 어떻게 해결했는지 매우 자랑스럽습니다.
2 부
정규식 듀오
contains a pair of any two letters that appears at least twice in the string without overlapping
겹치지 않는 연속 문자 쌍을 일치시키는
regex
는 다음과 같습니다./(\w)(\w).*\1\2/
matchAll()
와 결합할 때 일치하는 항목의 수는 1 이상이어야 합니다.[...text.matchAll(/(\w)(\w).*\1\2/)].length > 0
contains at least one letter which repeats with exactly one letter between them
패턴 A*A에서 세 문자를 일치시키는
regex
는 다음과 같습니다./(\w)(\w)\1/
matchAll()
와 결합할 때 일치하는 항목의 수는 1 이상이어야 합니다.[...text.matchAll(/(\w)(\w)\1/)].length > 0
JavaScript에서 내 업데이트된 알고리즘:
input.reduce(
(nice, text) =>
nice += [
[...text.matchAll(/(\w)(\w).*\1\2/)].length > 0,
[...text.matchAll(/(\w)(\w)\1/)].length > 0
].every(el => el == true) ? 1 : 0
, 0)
정답을 생성했습니다!
해냈어!!
regex
! 이 퍼즐은 내가 새로 찾은 편안함 공예
regular expressions
의 부인할 수 없는 증거였습니다.거의 1년 전에 AoC를 처음 발견한 후 시도했을 때 비
regex
방법을 사용하여 파트 1을 거의 풀지 못했고... 파트 2도 시도하지 않았습니다.그러나 이날 나는 이 퍼즐을 30분도 안 되어 완성했다. 거의 쉽게 느껴졌습니다!
잘했어, 자기. 잘했어요.
Reference
이 문제에 관하여(그는 이것에 대한 인턴 엘프가 없습니까?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/rmion/doesnt-he-have-intern-elves-for-this-370e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)