# Ngày 25/06
## Bài tập 1
### Example 1:
Input: nums = [1,2,4,6], operations = [[1,3],[4,7],[6,1]]
Output: [3,2,7,1]
### Example 2:
Input: nums = [1,2], operations = [[1,3],[2,1],[3,2]]
Output: [2,1]
## Bài 2
Input: tickets = [2,3,2], k = 2
Output: 6
Explanation:
- In the first pass, everyone in the line buys a ticket and the line becomes [1, 2, 1].
- In the second pass, everyone in the line buys a ticket and the line becomes [0, 1, 0].
The person at position 2 has successfully bought 2 tickets and it took 3 + 3 = 6 seconds.
Input: tickets = [5,1,1,1], k = 0
Output: 8
Explanation:
- In the first pass, everyone in the line buys a ticket and the line becomes [4, 0, 0, 0].
- In the next 4 passes, only the person in position 0 is buying tickets.
The person at position 0 has successfully bought 5 tickets and it took 4 + 1 + 1 + 1 + 1 = 8 seconds.
> [name=mrnamcpvn]
---
## Bài 3
> [name=Nhun Nhun]
Input: [1, 2, 3, 4, 5]
Output: 9
Input: [4, 3, 2]
Output: 4
Input: []
Output: -1
## Bài 4
Input: s = "the sky is blue"
Output: "blue is sky the"
Input: s = " hello world "
Output: "world hello"
Input: s = "a good example"
Output: "example good a"
## Bài 5
Input: nums = [10,2]
Output: "210"
Input: nums = [3,30,34,5,9]
Output: "9534330"
## Bài 6
> [name=vuong.nguyen]
>
token: "eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJOT1RFIjoiQ8OgaSB0aMawIHZp4buHbiAnbW9yc2UtY29kZS1qcycgxJHhu4MgZ2nhuqNpIG3huq10IHRoxrAgW0tFWV0sIHNhdSDEkcOzIGTDuW5nIFtLRVldIMSR4buDIGdp4bqjaSBbTUVTU0FHRV0iLCJLRVkiOiIqLS4tKi4qKioqfC0uKioqKi4qLS4tKi4qKioqfC0qLioqLiouKi4tKnwtKi4qLS4qLS0uLS18LSouKi0uLSotLXwtKiouLSoqLiotLi0qKi18LSouLS0qLi0tLS4tLioqKnwtKi4tLSouKioqKi4qLi0uKioqfCoqKi0tLi0tLS0tfCotKi4tLS0uLS0tLioqLioqLSoiLCJNRVNTQUdFIjoiJzMyLjUwLjQ0LjQ0LjM4LjQ4IDQ5LjUwLjMwLjMwLjQzLjM1IDUxLjUwLjM4IDUxLjM0LjM0LjQ3IiwibmJmIjoxNjU2MDU4ODkyLCJleHAiOjE2NTYxNDUyOTIsImlhdCI6MTY1NjA1ODg5Mn0.W5ILmwmV66uOuieMo_J-phMtcI9hJ1iFZBr6q1dxo2Lxb1waTc-zn5TUtdzhnDS3Al4tffb02ag0BhELYlEvpg"
- Mở trang https://jwt.io/
- Copy token và paste vào thì sẽ trả về kết quả sau
```typescript=
{
"NOTE": "Cài thư viện 'morse-code-js' để giải mật thư [KEY], sau đó dùng [KEY] để giải [MESSAGE]",
"KEY": "*-.-*.****|-.****.*-.-*.****|-*.**.*.*.-*|-*.*-.*--.--|-*.*-.-*--|-**.-**.*-.-**-|-*.--*.---.-.***|-*.--*.****.*.-.***|***--.-----|*-*.---.---.**.**-*",
"MESSAGE": "'32.50.44.44.38.48 49.50.30.30.43.35 51.50.38 51.34.34.47",
"nbf": 1656058892,
"exp": 1656145292,
"iat": 1656058892
}
```
- Mở https://stackblitz.com/, chọn dự án Typescript và cài package 'morse-code-js';
- Nội dung file index.ts
```typescript=
import * as morseCode from 'morse-code-js';
// SOLVE [KEY]
const key = morseCode.stringSentence(
'*-.-*.****|-.****.*-.-*.****|-*.**.*.*.-*|-*.*-.*--.--|-*.*-.-*--|-**.-**.*-.-**-|-*.--*.---.-.***|-*.--*.****.*.-.***|***--.-----|*-*.---.---.**.**-*'
);
console.log(key);
// ANH THANH NIEEN NAWM NAY DDAX NGOTS NGHETS 30 ROOIF => A = 30
// SOLVE [MESSAGE]
const alpla: string = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
const nums: number[] = [
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,
];
const decode = (msg: string): string => {
let result: string[] = [];
let words: string[] = msg.split(' ');
words.forEach((word) => {
const characters: string[] = word.split('.');
characters.forEach((char) => {
const index: number = nums.indexOf(+char);
result.push(alpla[index]);
});
result.push(' ');
});
return result.join('');
};
console.log(decode('32.50.44.44.38.48 49.50.30.30.43.35 51.50.38 51.34.34.47'));
// CUOOIS TUAANF VUI VEER
```
## Bài 7
# Bài 6: Giải mật thư
Người này là ai?
### Gợi ý 1
---
> 72677384857267
>
`Key: Xe Êm biển số 67`
```
Giải thích: X Ê => C = 67
```
```typescript=
function NumberToString(num: number) {
let arr = [];
let originArr = String(num).split('');
for (let i = 0; i = originArr.length / 2; i++) {
arr.push(Number.parseInt(originArr.splice(originArr.length - 2, 2).join('')));
}
return arr.map(x=> String.fromCharCode(x)).join('');
}
Đ.Án: CHUTICH
```
### Gợi ý 2
---
> 11980950
>
```
Ta cùng chia đội
Tám người cùng chơi
Chẵn chẵn lẻ lẻ
Lấy hai hai bốn
```
```typescript=
function ChiaDoi(num: string){
let arr = [...num.split('').reverse().filter((x,i)=> i % 2 == 0), ...num.split('').reverse().filter((x,i)=> i % 2 != 0)]
return [arr.splice(0,2).join(''), arr.splice(0,2).join(''), arr.join('')];
}
// Đ.Án : 19 05 1890
```
### Gợi ý 3
---
> Mật Thư: GUHINYGNUESNCN
```
Key: Rắn Ăn Đuôi
```
```typescript=
function RanAnDuoi(str: string) {
// Lấy giá trị ở đầu 1, 3 5 ,7 ,9 ,11, 13
let firstArr = str.split('').splice(0, str.length / 2);
// Lấy giá trị cuối, đảo ngược lại => 2,4,6,8...
let afterArr = str.split('').splice(str.length / 2, str.length).reverse();
// Sắp xếp
let arrs: string[] = [];
firstArr.forEach((x, i) => {
arrs.push(firstArr[i], afterArr[i]);
})
// Đảo ngược, join
return arrs.reverse().join('');
}
Đ.Án: NGUYENSINHCUNG
```
---
# Bài 8
*Input: x = 1 => Output: [[1]]
Input: x = 2 => Output: [[1,2],[2,4]]
Input: x = 3 => Output: [[1, 2, 3], [2, 4, 6], [3, 6, 9]]*
---
```typescript=
function multiplicationTable (size: number): number[][] {
let arrRs = [];
for (let i = 1; i <= size; i++) {
let arr = [];
for (let j = 1; j <= size; j++) {
arr.push(j * i);
}
arrRs.push(arr);
}
return arrRs;
}
```
```typescript=
function multiplicationTable (size: number): number[][] {
return Array.from({length: size}, (v,i) => Array.from({length: size}, (k,j) => (i+1)*(j+1)) )
}
```
## Bài 9
> [name=Tánh]
- input: "a!@Bc&D eF$"
- output:"F!@eD&c Ba$"
- hoán đổi vị trí ký tự đối xứng nhau nhưng không làm thay đổi vị trí ký tự đặc biệt.
```typescript=
function swapCharacter(s: string){
let temp = [];
for(let i=0; i<s.length; i++){
if(isCheckAnphabet(s[i])){
temp.push(s[i]);
}
}
let tempReverse = temp.reverse();
let s1 = s.split('');
let j=0;
for(let i = 0; i < s1.length; i++){
if(isCheckAnphabet(s1[i])){
s1[i] = tempReverse[j];
j++;
}else continue;
}
console.log(s) ;
console.log(s1.join(''));
}
function isCheckAnphabet(character: string): boolean{
return ((character >= 'a' && character <= 'z') || (character >= 'A' && character <= 'Z'));
}
```
swapCharacter("a!@Bc&D eF$");
## Giải bài 1
```typescript=
function arrayChange(nums: number[], operations: number[][]): number[] {
operations.forEach(item => { nums.splice(nums.findIndex(x => x == item[0]), 1, item[1]); });
return nums;
}
console.log(arrayChange([1,2,4,6], [[1,3],[4,7],[6,1]]));
console.log(arrayChange([1,2], [[1,3],[2,1],[3,2]]));
```
---
## Giải bài 2
```typescript=
function timeRequiredToBuy(tickets: number[], k: number): number {
let countTime = 0;
while(tickets[k] !== 0){
for(let i = 0; i < tickets.length; i++){
if(tickets[k] == 0){
return countTime;
}
if(tickets[i] !== 0){
tickets[i] = tickets[i] - 1;
countTime++;
}
}
}
return countTime;
};
```
console.log(timeRequiredToBuy([2,3,2],2))
console.log(timeRequiredToBuy([2,3,2],2))
---
## Giải bài 3
```typescript=
function sumNumbersLargerAverage(a: number[]){
var tb = a.reduce((a,b) => a+b, 0) / a.length;
console.log("tb", tb)
var res = a.filter(v => v > tb);
console.log("res", res)
return res.length ? res.reduce((a,b) => a+b, 0) : -1;
}
```
---
## Giải bài 4
```typescript=
function reverseWords(s: string): string {
return (s.split(/(\s+)/).filter(v => { return v.trim().length > 0; } )).reverse().join(' ');
};
```