forked from version1-workspace/ws-0200-js-practice
/
002_medium.js
152 lines (142 loc) · 3.05 KB
/
002_medium.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
/**
* 文字列のローテート
*
* 文字列を入力された数だけローテートさせる関数を実装してください
*
* example:
* 'library', 1 => 'ylibrar'
* 'library', 3 => 'arylibr'
* 'library', -1 => 'ibraryl'
*
*/
function rotate(str, num) {
if (num <= 0) {
const str1 = str.slice(num + Math.abs(num + num));
const str2 = str.slice(0, num + Math.abs(num + num));
return str1 + str2;
} else {
const str1 = str.slice(-num);
const str2 = str.slice(0, str.length - num);
return str1 + str2;
}
}
/**
* 母音を除いた文字列
*
* 与えられた文字列から母音を除いた関数を実装してください
*
* example:
* 'library' => 'lbrry'
* 'apple' => 'ppl'
* 'banana' => 'bnn'
*
*/
function removeVowels(str) {
let newStr = "";
for (let i = 0; i < str.length; i++) {
if (
str[i] !== "a" &&
str[i] !== "e" &&
str[i] !== "i" &&
str[i] !== "o" &&
str[i] !== "u"
) {
newStr += str[i];
}
}
return newStr;
}
/**
* 文字列のカウント
*
* ある文字列の中に特定の文字列がいくつ含まれるかカウントする関数を実装してください。
*
* example:
* 'abcdabeabc', 'abc' => 2
* 'abc', 'abc' => 1
* 'hogehoage', 'hoge' => 1
*
*/
function countStr(s1, s2) {
//RegExpで正規表現をコンパイルしてから使用する
const search = new RegExp(s2, "g");
const searchStr = s1.match(search);
return searchStr.length;
}
/**
* 引数に与えられたアルファベットの文字列が回文であること
* を確認するメソッドを実装してください
*
* example:
* work => false
* anna => true
* madam => true
* level => true
*
*/
function isPalindrome(str) {
for (let i = 0; i < str.length / 2; i++) {
if (str[i] !== str[str.length - 1 - i]) {
return false;
}
}
return true;
}
/**
* 素数
*
* 入力された数字が素数であるか確認する関数を実装してください
*
* example:
* 1 => False
* 2 => True
* 3 => True
* 6 => False
* 9 => False
* 11 => True
*
*/
function isPrime(num) {
//numが2の場合
if (num === 1) {
return false;
}
for (let i = 2; i < num; i++) {
if (num % i === 0) {
return false;
}
}
return true;
}
/**
* 配列の4と次の数字を抜いた合計
*
* 与えらた配列の合計を返す関数を実装してください。
* ただし、配列の中に4がある場合は、4とその次の数字を合計に含めないでください。
*
* example:
* [1, 2, 3, 4] => 6
* [1, 2, 3, 4, 5] => 6
* [1, 4, 3, 4, 5] => 1
* [4, 3, 3, 5] => 8
* [4, 3, 3, 4] => 3
* [4] => 0
*
*/
function sumWithout4andNext(array) {
let total = 0;
for (let i = 0; i < array.length; i++) {
if (array[i - 1] !== 4 && array[i] !== 4) {
total += array[i];
}
}
return total;
}
module.exports = {
rotate,
removeVowels,
countStr,
isPalindrome,
isPrime,
sumWithout4andNext,
};