# TSMC hiring test --- Double
## Qustion 1.
### Description




**ChatGPT' s answer**
```python3=
1
```
**Double' s answer**
```python=
import math
import os
import random
import re
import sys
#
# Complete the 'getTime' function below.
#
# The function is expected to return a LONG_INTEGER.
# The function accepts STRING s as parameter.
#
from collections import Counter
import string
def getTime(s):
num = 1
time_spent = 0
data = Counter(string.ascii_uppercase)
for l in data:
data[l] = num
num += 1
s = 'A' + s
n = len(s)
for i in range(0, n-1):
diff = abs(data[s[i]]-data[s[i+1]])
if diff <= 13:
time_spent += diff
else:
time_spent += 26 - diff
return time_spent
if __name__ == '__main__':
fptr = open(os.environ['OUTPUT_PATH'], 'w')
s = input()
result = getTime(s)
fptr.write(str(result) + '\n')
fptr.close()
```
**BBB' s answer**
```python3=
```
**James's answer**
``` java=
public static int getMiniSec(String input) {
//A: 1, Z:26
int curPos = 1;
int ans = 0;
for (int i = 0; i < input.length(); i++) {
char c = input.charAt(i);
int pos = (c - 'A') + 1;
if (curPos == pos) continue;
int way1 = 0;
int way2 = 0;
if (curPos > pos) {
way1 = curPos - pos;
way2 = (26 - curPos) + pos;
} else {
way1 = pos - curPos;
way2 = (26 - pos) + curPos;
}
ans += Math.min(way1, way2);
curPos = pos;
}
return ans;
}
```
---
## Qustion 2.
### Description


**ChatGPT' s answer**
```python3=
```
**Double' s answer**
```python=
def countSubstrings(input_str):
mapping = {
"a": 1, "b": 1,
"c": 2, "d": 2, "e": 2,
"f": 3, "g": 3, "h": 3,
"i": 4, "j": 4, "k": 4,
"l": 5, "m": 5, "n": 5,
"o": 6, "p": 6, "q": 6,
"r": 7, "s": 7, "t": 7,
"u": 8, "v": 8, "w": 8,
"x": 9, "y": 9, "z": 9
}
n = len(input_str)
count = 0
dp = [[0] * n for _ in range(n)]
# init dp
for i in range(n):
dp[i][i] = mapping[input_str[i]]
count += 1
for length in range(2, n+1):
for i in range(n-length+1):
j = i + length - 1
dp[i][j] = dp[i][j-1] + mapping[input_str[j]]
if dp[i][j] % length == 0:
count += 1
return count
```
**BBB' s answer**
```python3=
```
**James's answer**
```java=
public static int extraordinaryStr(String input) {
HashMap<Character, Integer> map = new HashMap<>();
map.put('a', 1);
map.put('b', 1);
map.put('c', 2);
map.put('d', 2);
map.put('e', 2);
map.put('f', 3);
map.put('g', 3);
map.put('h', 3);
map.put('i', 4);
map.put('j', 4);
map.put('k', 4);
map.put('l', 5);
map.put('m', 5);
map.put('n', 5);
map.put('o', 6);
map.put('p', 6);
map.put('q', 6);
map.put('r', 7);
map.put('s', 7);
map.put('t', 7);
map.put('u', 8);
map.put('v', 8);
map.put('w', 8);
map.put('x', 9);
map.put('y', 9);
map.put('z', 9);
int ans = 0;
for (int i = 0; i < input.length(); i++) {
for (int j = i + 1; j <= input.length(); j++) {
if (isExtra(input.substring(i, j), map)) {
ans++;
}
}
}
return ans;
}
public static boolean isExtra(String input, Map<Character, Integer> map) {
int tmp = 0;
for (int i = 0; i < input.length(); i++) {
tmp += map.get(input.charAt(i));
}
return tmp % input.length() == 0;
}
```
---
## Qustion 3.
### Description




**ChatGPT' s answer**
```python3=
```
**Double' s answer**
```python=
import math
import os
import random
import re
import sys
import bisect
#
# Complete the 'countIntersections' function below.
#
# The function is expected to return an INTEGER_ARRAY.
# The function accepts following parameters:
# 1. INTEGER_ARRAY startsAt
# 2. INTEGER_ARRAY endsAt
#
# 3 3 1 5
# 3 3 5 6
# 暴力法
def countIntersections(startsAt, endsAt):
intervals = []
n = len(startsAt)
ret = [0] * n
for i in range(n):
curstart = min(startsAt[i], endsAt[i])
curend = max(startsAt[i], endsAt[i])
for j in range(i):
paststart = min(startsAt[j], endsAt[j])
pastend = max(startsAt[j], endsAt[j])
if curstart < paststart and curend < paststart:
continue
if curstart > pastend and curend > pastend:
continue
ret[j] += 1
ret[i] += 1
return ret
if __name__ == '__main__':
fptr = open(os.environ['OUTPUT_PATH'], 'w')
startsAt_count = int(input().strip())
startsAt = []
for _ in range(startsAt_count):
startsAt_item = int(input().strip())
startsAt.append(startsAt_item)
endsAt_count = int(input().strip())
endsAt = []
for _ in range(endsAt_count):
endsAt_item = int(input().strip())
endsAt.append(endsAt_item)
result = countIntersections(startsAt, endsAt)
fptr.write('\n'.join(map(str, result)))
fptr.write('\n')
fptr.close()
```
**BBB' s answer**
```python3=
```
**James's answer**
Double: Wrong@@
why
突然想到題目沒有說 不會給到無重複的 data
例如 : start at {3,3,1}, end at {3, 3, 10}



```java=
public static int[] intersects(int[] start, int[] end) {
int[] ans = new int[start.length];
for (int i = 0; i < start.length; i++) {
int curStart = Math.min(start[i], end[i]);
int curEnd = Math.max(start[i], end[i]);
for (int j = 0; j < i; j++) {
int pastStart = Math.min(start[j], end[j]);
int pastEnd = Math.max(start[j], end[j]);
if (curStart < pastStart && curEnd < pastStart) {
continue;
}
if (curStart > pastEnd && curEnd > pastEnd) {
continue;
}
ans[j]++;
ans[i]++;
}
}
return ans;
}
// 好一點點的 暴力法
public static int[] intersectsOPT(int[] start, int[] end) {
int[][] intervals = new int[start.length][2];
for (int i = 0; i < start.length; i++) {
int[] ele = new int[]{Math.min(start[i], end[i]), Math.max(start[i], end[i])};
intervals[i] = ele;
}
Arrays.sort(intervals, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
int diff = o1[0] - o2[0];
if (diff != 0) return diff;
return o2[1] - o1[1];
}
});
HashMap<String, Integer> map = new HashMap<>();
for (int i = 0; i < intervals.length; i++) {
int[] ele = intervals[i];
String key = ele[0] + "-" + ele[1];
int j = i + 1, intersectCount = 0;
while (j < intervals.length && intervals[j][0] <= ele[1]) {
String keyForOther = intervals[j][0] + "-" + intervals[j][1];
map.put(keyForOther, map.getOrDefault(keyForOther, 0) + 1);
intersectCount++;
j++;
};
map.put(key, map.getOrDefault(key, 0) + intersectCount);
}
int[] ans = new int[intervals.length];
for (int i = 0; i < ans.length; i++) {
ans[i] = map.getOrDefault(start[i] + "-" + end[i], 0);
}
return ans;
}
```
---