読者です 読者をやめる 読者になる 読者になる

落書きノート

ふと自分が気になった事を書いてます

Haskellで不定期練習

import Text.Printf
import System.Random

main :: IO ()
main = do
  putStrLn "3個の乱数を生成しました。"
  a <- (getStdRandom $ randomR (0.0, 1.0) :: IO Float)
  b <- (getStdRandom $ randomR (0.0, 10.0) :: IO Float)
  c <- (getStdRandom $ randomR (-1.0, 1.0) :: IO Float)
  printf "0.0以上 1.0未満 : %f\n" a
  printf "0.0以上10.0未満 : %f\n" b
  printf "-1.0以上1.0未満 : %f\n" c


import Text.Printf

main :: IO ()
main = do
  putStrLn "姓"
  sei <- getLine
  putStrLn "名"
  mei <- getLine
  printf "こんにちは%s%sさん。\n" sei mei




import Text.Printf

main :: IO ()
main = do
  putStrLn "住所"
  address <- getLine
  printf "お住いは%sですね。\n" address




import Text.Printf
import Data.IORef

main :: IO ()
main = do
  s1 <- newIORef "ABC"
  let s2 = "XYZ"
  printf "文字列s1は%sです。\n" =<< readIORef s1
  printf "文字列s2は%sです。\n" s2
  writeIORef s1 "FBI"
  printf "文字列s1は%sです。\n" =<< readIORef s1
  printf "文字列s2は%sです。\n" s2

C言語で不定期練習

// 演習問題3-4

#include <stdio.h>
#include <stdlib.h>

int bin_search(const int a[], int n, int key) {
  int pl = 0;
  int pr = n - 1;
  int pc;
  int i;
  do {
    pc = (pl + pr) / 2;
    printf("%*s|", 3, "");
    for(i = 0; i < n; i++) {
      if(i == pl)
        printf(" <- ");
      else if(i == pc)
        printf("%*s+", 3, "");
      else if(i == pr)
        printf("%*s->", 2, "");
      else
        printf("%*s", 4, "");
    }
    puts("");
    printf("  %d|", pc);
    for(i = 0; i < n; i++)
      printf("%*s%d", 3, "", a[i]);
    puts("");
    printf("%*s|\n", 3, "");
    if(a[pc] == key)
      return pc;
    else if(a[pc] < key)
      pl = pc + 1;
    else
      pr = pc - 1;
  } while (pl <= pr);

  return -1;
}

int main(void) {
  int i, nx, ky, idx;
  int *x;

  puts("2分探索");
  printf("要素数 : ");
  scanf("%d", &nx);
  x = calloc(nx, sizeof(int));
  printf("昇順に入力してください。\n");
  printf("x[0] : ");
  scanf("%d", &x[0]);
  for(i = 1; i < nx; i++) {
    do {
      printf("x[%d] : ", i);
      scanf("%d", &x[i]);
    } while(x[i] < x[i - 1]);
  }
  printf("探す値 : ");
  scanf("%d", &ky);
  printf("%*s|", 3, "");
  for(i = 0; i < nx; i++)
    printf("%*s%d", 3, "", i);
  puts("");
  printf("---+");
  for(i = 0; i < nx; i++)
    printf("----");
  puts("--");
  idx = bin_search(x, nx, ky);
  if(idx == -1)
    puts("探索に失敗しました。");
  else
    printf("%dはx[%d]にあります。\n", ky, idx);
  free(x);
  return 0;
}

// 演習問題3-5

#include <stdio.h>
#include <stdlib.h>

int bin_search2(const int a[], int n, int key) {
  int pl = 0;
  int pr = n - 1;
  int pc;
  int i;
  int answer;
  do {
    pc = (pl + pr) / 2;
    if(a[pc] == key) {
      for(i = pc;;i--) {
        if(a[i] == key)
          continue;
        else {
          answer = i + 1;
          break;
        }
      }
      return answer;
    }
    else if(a[pc] < key)
      pl = pc + 1;
    else
      pr = pc - 1;
  } while (pl <= pr);

  return -1;
}

int main(void) {
  int i, nx, ky, idx;
  int *x;

  puts("2分探索");
  printf("要素数 : ");
  scanf("%d", &nx);
  x = calloc(nx, sizeof(int));
  printf("昇順に入力してください。\n");
  printf("x[0] : ");
  scanf("%d", &x[0]);
  for(i = 1; i < nx; i++) {
    do {
      printf("x[%d] : ", i);
      scanf("%d", &x[i]);
    } while(x[i] < x[i - 1]);
  }
  printf("探す値 : ");
  scanf("%d", &ky);
  idx = bin_search2(x, nx, ky);
  if(idx == -1)
    puts("探索に失敗しました。");
  else
    printf("%dはx[%d]にあります。\n", ky, idx);
  free(x);
  return 0;
}

新・明解C言語によるアルゴリズムとデータ構造

新・明解C言語によるアルゴリズムとデータ構造

C/C++で不定期練習 AIZU ONLINE JUDGE

// Simple Calculator

#include <iostream>

using namespace std;

int main(void) {
  int a,b;
  char op;
  while(cin >> a >> op >> b) {
    if(op == '+')
      cout << a + b << endl;
    else if(op == '-')
      cout << a - b << endl;
    else if(op == '*')
      cout << a * b << endl;
    else if(op == '/')
      cout << a / b << endl;
    else if(op == '?')
      break;
  }
  return 0;
}


// Min, Max and Sum (C言語)

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(void) {
  int n,p = 0,i;
  char buf[1000000];
  char *tok,ch;
  int min,max;
  long long sum;
  scanf("%d", &n);
  while((ch = fgetc(stdin)) != '\n') {};
  int a[n];
  fgets(buf, sizeof(buf), stdin);
  tok = strtok(buf, " ");
  while(tok != NULL) {
    a[p++] = atoi(tok);
    tok = strtok(NULL, " ");
  }
  min = a[0];
  max = a[0];
  sum = 0;
  for(i = 0; i < n; i++) {
    if(min > a[i])
      min = a[i];
    if(max < a[i])
      max = a[i];
    sum += a[i];
  }
  printf("%d %d %lld\n", min, max, sum);
  return 0;
}



// Min, Max and Sum (C++)

#include <iostream>
#include <cstdlib>
#include <sstream>

using namespace std;

int main(void) {
  int n,j = 0;
  string s, item;
  int min,max;
  long long sum;
  cin >> n;
  cin.ignore();
  int a[n];
  getline(cin, s);
  stringstream ss(s);
  while(getline(ss, item, ' '))
    a[j++] = atoi(item.c_str());
  min = a[0];
  max = a[0];
  sum = 0;
  for(int i = 0; i < n; i++) {
    if(min > a[i])
      min = a[i];
    if(max < a[i])
      max = a[i];
    sum += a[i];
  }
  cout << min << ' ' << max << ' ' << sum << endl;
  return 0;
}

Linuxでのカーネルのコンパイルのやり方

Gentoo Linuxなどをたまにアップデートする時、カーネルコンパイルのやり方を忘れるときが結構あるので、なんとなくメモ。専用コマンド以外は、おおよそ他のLinuxでも通用します。

専用コマンドを使う場合。

> eselect kernel list
> eselect kernel set 2
> sudo genkernel --menuconfig all
コンフィグファイルを使いまわす場合。
> sudo genkernel --kernel-config=/usr/src/kernel-xxx/.config all
make oldconfigに相当するやり方。
> sudo genkernel --oldconfig all
nvidiaを使う場合。再コンパイル。
> sudo emerge x11-drivers/nvidia-drivers
これでも行けそう。多分こっちの方が楽かも。
> sudo emerge @module-rebuild

grub-mkconfigはgenkernelがしてくれるので問題なしです。

手動でのやり方。

> cp /usr/src/linux/.config /usr/src/kernel-xxx/
> sudo rm /usr/src/linux
> ln -s /usr/src/kernel-xxx /usr/src/linux
> cd /usr/src/linux
> make menuconfig
もしくは
> make oldconfig
> make modules_prepare
> make && make modules_install
> sudo make install
initramfsが必要な場合
> sudo genkernel --install initramfs
> sudo emerge @module-rebuild
> sudo grub-mkconfig -o /boot/grub/grub.cfg
> sudo emerge -P gentoo-sources

C++で不定期練習 AIZU ONLINE JUDGE

// A/B Problem

#include <iostream>

using namespace std;

int main(void) {
  int a,b;
  cin >> a >> b;
  int d = a / b;
  int r = a % b;
  double f = (double)a / b;
  cout << d << " " << r << " " << fixed << f << endl;
  return 0;
}

// Circle

#include <iostream>
#include <cmath>

using namespace std;

int main(void) {
  double r;
  cin >> r;
  cout << fixed << r * r * M_PI << " " << 2 * r * M_PI << endl;
  return 0;
}

Javaで不定期練習 ついでに英語 CodingBat

// monkeyTrouble

public boolean monkeyTrouble(boolean aSmile, boolean bSmile) {
  if(aSmile == true && bSmile == true)
    return true;
  else if(aSmile == false && bSmile == false)
    return true;
  else if(aSmile == true && bSmile == false)
    return false;
  else
    return false;
}

// sumDouble

public int sumDouble(int a, int b) {
  return a != b ? a + b : (a + b) * 2;
}

// diff21

public int diff21(int n) {
  return n > 21 ? (n - 21) * 2 : 21 - n;
}

// parrotTrouble

public boolean parrotTrouble(boolean talking, int hour) {
  return talking == true ? hour < 7 || hour > 20 ? true : false : false;
}

チャーハン

スーパーで食材を買っておいたんですけど、母親が料理をするときがあるので(気になるのはわかるけど…おかず代はきっちり払ってますけどね)、自分の買ってきた食材で料理する機会が延びてしまっていました。野菜を買ってきていたので、消費期限が気になり、慌てて料理しました。材料はこんな感じです。

  • ミックスベジタブル
  • 豚ミンチ
  • オリーブオイル
  • ネギ
  • 7種類入った野菜
  • 塩コショウ

こんな感じです。

f:id:kh2n:20170521212223j:plain

普段はレタスを入れてるんですけど、今回ちょっと変わった野菜を買ってきて試してみました。野菜は後入れして炒めすぎないようにしました。はあ、それにしても今日は疲れた…。