神戸プログラミングアカデミーのブログ

「未経験から」「スキルアップ」「起業を目指す」無料で学べる神戸のプログラミング学校&学習コミュニティ

入力された文字列をチェーンケース・スネークケース・アッパーキャメルケース・ローワーキャメルケースに変換する関数を作成せよ

入力された文字列を文字列をチェーンケース・スネークケース・アッパーキャメルケース・ローワーキャメルケースに変換する関数を作成せよ

ただし、チェーンケース・スネークケースに関しては、大文字は小文字に変換されるものとする。(Aaa_Bbbとはしない)

qiita.com

function toChainCase(str){

}
function toSnakeCase(str){

}
function toUpperCamelCase(str){

}
function toLowerCamelCase(str){

}

const args = process.argv.slice(2);
for (let i = 0; i < args.length; i++) {
  const arg = args[i];
  console.log(toChainCase(arg));
  console.log(toSnakeCase(arg));
  console.log(toUpperCamelCase(arg));
  console.log(toLowerCamelCase(arg));
}
node main.js aaa-bbb-ccc AaaBbbCcc aaaBbbCcc aaa_bbb_ccc

出力結果

aaa-bbb-ccc
aaa_bbb_ccc
AaaBbbCcc
aaaBbbCcc
aaa-bbb-ccc
aaa_bbb_ccc
AaaBbbCcc
aaaBbbCcc
aaa-bbb-ccc
aaa_bbb_ccc
AaaBbbCcc
aaaBbbCcc
aaa-bbb-ccc
aaa_bbb_ccc
AaaBbbCcc
aaaBbbCcc

解答例

function splitWords(str) {
  let ret = str.split("-");
  if (ret.length === 1) {
    ret = str.split("_");
  }
  if (ret.length === 1) {
    ret = str.split("_");
  }
  if (ret.length === 1) {
    ret = [];
    let word = "";
    for (let i = 0; i < str.length; i++) {
      if (str[i].match(/[A-Z]/) && word.length > 0) {
        ret.push(word);
        word = "";
      }
      word += str[i];
    }
    ret.push(word);
  }
    // 一旦全部小文字に変換
  for (let i = 0; i < ret.length; i++) {
    ret[i] = ret[i].toLowerCase();
  }
  return ret;
}
function toChainCase(str) {
  const words = splitWords(str);
  return words.join("-");
}
function toSnakeCase(str) {
  const words = splitWords(str);
  return words.join("_");
}
function toUpperCamelCase(str) {
  const words = splitWords(str);
  for (let i = 0; i < words.length; i++) {
    words[i] = words[i][0].toUpperCase() + words[i].slice(1);
  }
  return words.join("");
}
function toLowerCamelCase(str) {
  const words = splitWords(str);
  for (let i = 1; i < words.length; i++) {
    words[i] = words[i][0].toUpperCase() + words[i].slice(1);
  }
  return words.join("");
}

const args = process.argv.slice(2);
for (let i = 0; i < args.length; i++) {
  const arg = args[i];
  console.log(toChainCase(arg));
  console.log(toSnakeCase(arg));
  console.log(toUpperCamelCase(arg));
  console.log(toLowerCamelCase(arg));
}

6ek068l4pw

小数を切り捨て、切り上げ、四捨五入する関数を作成せよ

コマンドライン引き数で渡された、2つの整数 x , y の x / y の計算結果を小数点以下で①切り捨て②切り上げ③四捨五入するプログラムを作成せよ。 ただしMath.floor等の関数の使用を禁止する。

function floor(num) {
}
function round(num) {
}
function ceil(num) {
}
const a = process.argv[2]
const b = process.argv[3]
console.log(a / b)
console.log(floor(a / b))
console.log(round(a / b))
console.log(ceil(a / b))

解答例

function floor(num) {
    let n = num
    while (true) {
        if (n < 1) {
            return num - n
        }
        n -= 1
    }
}
function round(num) {
    return (num - floor(num)) < 0.5 ? floor(num) : floor(num) + 1
}
function ceil(num) {
    return (num - floor(num)) > 0 ? floor(num) + 1 : floor(num)
}
const a = process.argv[2]
const b = process.argv[3]
console.log(a / b)
console.log(floor(a / b))
console.log(round(a / b))
console.log(ceil(a / b))

与えられた数値を2進数に変換するメソッドを作成せよ

与えられた数値(Number型)を2進数(String型)に変換する関数 numToBin() を作成せよ

ただし、JavaScriptの標準関数(toString()等)の使用を禁止する。Math.floor()はOK

function numToBin(num) {
    return "文字列"
}
console.log(numToBin(Number(process.argv[2])))

解答例

function numToBin(num) {
    let ret = ""
    do {
        ret = (num % 2 ? "1" : "0") + ret
        num = Math.floor(num / 2)
    } while (num > 0)
    return ret
}
console.log(numToBin(Number(process.argv[2])))

C言語での解答例(再帰を使用)

void intToBin(int num, char* buf, size_t buf_size){
  if(num > 0){
    intToBin(num >> 1, buf, buf_size);
    strlcat(buf, num & 1 ? "1" : "0", buf_size);
  }
}

文字列を比較する関数strcmp()を作成せよ

文字列を比較する関数strcmp(str1,str2)を作成せよ。

str1とstr2が等しいならば0、 str1>str2ならば1、 str1<str2ならば-1を返す。

ただし1文字ずつ比較するアルゴリズムにすること。

function strcmp(str1,str2) {
}
const a = process.argv[2]
const b = process.argv[3]
console.log(strcmp(a, b) === a.localeCompare(b))

以下全てがtrueとなるように

node main.js aaa aaa
node main.js aaa bbb
node main.js aaa ccc
node main.js ccc aaa
node main.js aaa aaaa
node main.js aaaa aaa

解答例

function strcmp(a, b) {
    const length = Math.max(a.length, b.length)
    for (let i = 0; i < length; i++) {
        if (a[i] === undefined || a[i] < b[i]) {
            return -1
        } else if (b[i] === undefined || a[i] > b[i]) {
            return 1
        }
    }
    return 0
}
console.log(strcmp(process.argv[2], process.argv[3]))

文字列の長さを返す関数strlen()を作成せよ

文字列の長さを返す関数strlen(str)を作成せよ

ただし、文字列のプロパティlengthの使用を禁止し、ループはwhile(true)のみを使用するとする

function strlen(str) {
}
console.log(strlen(process.argv[2]))
node main.js aaa
3
node main.js a,b,c
5

解答例

function strlen(str) {
    let ret = 0
    while (true) {
        if (str[ret] === undefined) {
            break
        }
        ret++
    }
    return ret
}
console.log(strlen(process.argv[2]))

プログラミングを始める前に

プログラミングとは?

そもそもプログラミングってなんなのか?今後、ずーっと大事になる概念です。忘れてしまったらもう一度、ここに立ち返り見直してください。

まず、結論から。

プログラミングとは「コンピュータを働かせる命令を作ること」です。

なぜプログラミング?

では何のためにプログラミングするのか?

現在、まだAIが人間の能力を超えるといわれるシンギュラリティは来ていないので、まだまだコンピュータよりも人間の方が賢いです。

ただし、コンピュータが人間よりも勝っている部分があります。

それは、

  • コンピューターは計算がめちゃくちゃ速い
  • コンピューターは疲れない
  • データに物質的質量がない ということです。

なぜプログラミングをするのか?というのは、これらのコンピュータの利点を生かして、

人間に喜び(便利・楽しい等)を与えることです。

アプリーケーションとは?

アプリケーションとは、入力(Input)を受け付けて、結果を出力(Output)するものです。すべてのアプリケーションこのI(nput)/0(utoput)があります。

課題:身近なアプリケーションのINPUTとOUTPUTを考えてみよう

課題:INPUTデバイスを5種類を挙げみよう

課題:OUTPUTデバイスを5種類を挙げてみよう

効率的な学習方法

プログラミング学習を始める前にこれを見よう

www.youtube.com

与えられた2次元配列の縦・横・斜めが与えられた値で揃っているかを返す関数を作成せよ

prog-ac.hatenablog.com

上記isFilledArray()を使い、与えられた2次元配列の縦・横・斜めが与えられた値で揃っているかを返す関数isBingo(arr, val)を作成せよ

const arr0 = [
  [0,0,0],
  [0,0,0],
  [0,0,0],
]
const arr1 = [
  [0,0,0],
  [1,1,1],
  [0,0,0],
]
const arr2 = [
  [0,0,1],
  [0,0,1],
  [0,0,1],
]
const arr3 = [
  [1,0,0],
  [0,1,0],
  [0,0,1],
]
const arr4 = [
  [0,0,1],
  [0,1,0],
  [1,0,0],
]

console.log(isBingo(arr0, 1))
console.log(isBingo(arr0, 1))
console.log(isBingo(arr1, 1))
console.log(isBingo(arr1, -1))
console.log(isBingo(arr2, 1))
console.log(isBingo(arr2, -1))
console.log(isBingo(arr3, 1))
console.log(isBingo(arr3, -1))
console.log(isBingo(arr4, 1))
console.log(isBingo(arr4, -1))
false
false
true
false
true
false
true
false
true
false

解答例

function isFilledArray(arr, val) {
    for (let i = 0; i < arr.length; i++) {
        if (arr[i] !== val) {
            return false
        }
    }
    return true
}
const arr0 = [
    [0, 0, 0],
    [0, 0, 0],
    [0, 0, 0],
]
const arr1 = [
    [0, 0, 0],
    [1, 1, 1],
    [0, 0, 0],
]
const arr2 = [
    [0, 0, 1],
    [0, 0, 1],
    [0, 0, 1],
]
const arr3 = [
    [1, 0, 0],
    [0, 1, 0],
    [0, 0, 1],
]
const arr4 = [
    [0, 0, 1],
    [0, 1, 0],
    [1, 0, 0],
]

function isBingo(arr, val) {
    if (arr.length !== arr[0].length) {
        console.error('this is not square')
        return false
    }
    const length = arr.length
    let check = []
    for (let a = 0; a < length; a++) {
        check = []
        for (let b = 0; b < length; b++) {
            check.push(arr[a][b])
        }
        if (isFilledArray(check, val)) {
            return true
        }
    }
    for (let a = 0; a < length; a++) {
        check = []
        for (let b = 0; b < length; b++) {
            check.push(arr[b][a])
        }
        if (isFilledArray(check, val)) {
            return true
        }
    }
    check = []
    for (let i = 0; i < length; i++) {
        check.push(arr[i][i])
    }
    if (isFilledArray(check, val)) {
        return true
    }
    check = []
    for (let i = 0; i < length; i++) {
        check.push(arr[length - i - 1][i])
    }
    if (isFilledArray(check, val)) {
        return true
    }
    return false
}

console.log(isBingo(arr0, 1))
console.log(isBingo(arr0, 1))
console.log(isBingo(arr1, 1))
console.log(isBingo(arr1, -1))
console.log(isBingo(arr2, 1))
console.log(isBingo(arr2, -1))
console.log(isBingo(arr3, 1))
console.log(isBingo(arr3, -1))
console.log(isBingo(arr4, 1))
console.log(isBingo(arr4, -1))