🎃
コーディングメモ / 20230910
この記録は、以下の本を読み進めている際の学習メモです。
Integer Reversal
# python での整数の逆順への変換
def reverse_integer(num):
reverse_num = 0
while num > 0:
# 余りを算出します
digit = num % 10
# 商を算出します (Floor division を利用)
num = num // 10
reverse_num = reverse_num * 10 + digit
return reverse_num
# 動作確認
reverse_integer(56341)
14365
注意点:
- Python3 では、割り算の商は浮動小数点数 float が返される。
- Floor division (//) を利用で、整数で返してくれる。
- Ref: // floor division
- Returns the integral part of the quotient.
// JavaScript での整数の逆順への変換
function reverse_integer(num) {
let reverse_num = 0
while (num > 0) {
let digit = num % 10
// Floor division に対応するのがないので、Math.floor() します
num = Math.floor(num / 10)
reverse_num = reverse_num * 10 + digit
}
return reverse_num
}
// 確認
reverse_integer(12345)
54321
// アロー関数で記載
const reverse_int = (num) => {
let reverse_num = 0
while (num > 0) {
let digit = num % 10
// Floor division に対応するのがないので、Math.floor() します
num = Math.floor(num / 10)
reverse_num = reverse_num * 10 + digit
}
return reverse_num
}
// 確認
reverse_int(13579)
97531
// とても簡単ですが TypeScript として
function reverse_integer(num: number) {
let reverse_num:number = 0
while (num > 0) {
let digit:number = num % 10
// Floor division に対応するのがないので、Math.floor() します
num = Math.floor(num / 10)
reverse_num = reverse_num * 10 + digit
}
return reverse_num
}
const testNum:number = 123456
const res:number = reverse_integer(testNum)
console.log(res)
- インタビューはひたすら練習、練習、練習。
- 久しぶりに簡単なコードを書こうとしても、なかなか思い出せないのに苦笑い。
- TypeScript は typescriptlang でオンラインで作成。
Reverse string
# python での文字列の反転(逆順へのならべかえ)
def reverse_string(s):
s_list = list(s)
n = len(s_list)
print('length: {}'.format(n))
# 両端から入れ替えを行うので、レンジは半分まで
for i in range(n//2):
print('range: {}'.format(i))
last = n-i-1
s_list[i], s_list[last] = s_list[last], s_list[i]
return ''.join(s_list)
# 動作確認
>>> reverse_string('abcdefghijkl')
length: 12
range: 0
range: 1
range: 2
range: 3
range: 4
range: 5
'lkjihgfedcba'
回文のチェック
// アルファベットだけを対象にしたもの
function palindrome(str) {
/*
Step:
1. Remove non alphanumeric chars.
2. Change all chars to lowercase.
3. reverse and join.
4. compare original and converted.
*/
let original = str.toLowerCase().replace(/([^a-zA-Z0-9])/g, '');
let converted = original.split('').reverse().join('');
console.log(original);
console.log(converted)
return converted === original;
}
palindrome("A man, a plan, a canal. Panama");
- この方法だと文字列を2つ生成する必要がある。
- 単純にチェックするなら、両端どうしの同士の文字を比較すれば良い。
function isPalindrome(str) {
const str_length = str.length
let i = 0
let j = str_length - 1
while (i < j) {
if (str[i] != str[j]) {
return false
}
i++
j--
}
return true
}
> isPalindrome('!aa4554aa!')
true
> isPalindrome('!aa455aa!')
false
Max Chars
- 指定のバッファサイズにうまく文字が収まるかどうかは、文字のエンコードにも依存する。
- 以下の点を考慮すること。
- データ構造構造や変数のサイズ
- 格納を想定する文字列のサイズ
- エンコードの種別
- abbbccccd であれば ['a':1, 'b':3, 'c':4, 'd':1] のように表現できる
- データの圧縮や文字列の操作、パターンマッチに有効である
- 一般的な方法としては、ハッシュテーブルに文字の出現回数を保持すること
Discussion