How to spend the terminal

技術ブログでさえない

3つの値の最大値を求めるプログラム10言語分

この記事はSLP KBIT Advent Calendar 2014 - Adventarの2日目の記事です。

はじめに

やあ (´・ω・`)
ようこそ、当ブログへ。
この記事は時間稼ぎだから、まず読んで落ち着いて欲しい。
うん、「処分市」なんだ。済まない。
仏の顔もって言うしね、謝って許してもらおうとも思っていない。
でも、このタイトルを見たとき、君は、きっと言葉では言い表せない
「ときめき」みたいなものを感じてくれたと思う。
殺伐とした世の中で、そういう気持ちを忘れないで欲しい、そう思って
この記事を作ったんだ。
じゃあ、注文を聞こうか

本題

入力された3つの値の最大値を求めるプログラムを10言語分書いてみた。
使用言語はC、C++JavaRubyPythonJavaScript、なでしこ、FORTRANBASICシェルスクリプトである。

C言語

#include <stdio.h>

int main(void)
{
  int num1,num2,num3;
  int max;
  
  scanf("%d",&num1);
  scanf("%d",&num2);
  scanf("%d",&num3);
  
  max = num1;
  if( max < num2 ) {
    max = num2;
  }
  if( max < num3 ) {
    max = num3;
  }
  
  printf("%d\n",max);
  
  return 0;
}

C++

#include <iostream>

using namespace std;

int main(void)
{
  int max;
  int num1,num2,num3;
  
  cin >> num1;
  cin >> num2;
  cin >> num3;
  
  max = num1;
  if( max < num2 ) {
    max = num2;
  }
  if( max < num3 ) {
    max = num3;
  }
  
  cout << max;
  
  return 0;
}

C++(C++11)

#include <iostream>
#include <algorithm>

using namespace std;

int main(void)
{
  int num1,num2,num3;
  
  cin >> num1;
  cin >> num2;
  cin >> num3;
  
  cout << max( {num1, num2, num3} );
  
  return 0;
}

Java

import java.util.Scanner;

public class Max {
  public static void main(String[] args) {
    int num1,num2,num3;
    int max;
    int i;
    
    Scanner input = new Scanner(System.in);
    
    num1 = input.nextInt();
    max = num1;
    num2 = input.nextInt();
    if( max < num2 ) {
      max = num2;
    }
    num3 = input.nextInt();
    if( max < num3 ) {
      max = num3;
    }
    
    System.out.printf("%d\n",max);
    
  }
  
}

Ruby

# coding: utf-8

num = [gets.to_i, gets.to_i, gets.to_i]
puts num.max 

Python

# -*- coding: utf-8 -*-

num = [input(), input(), input()]
max(num)

JavaScript

num1 = window.prompt("数1");
num2 = window.prompt("数2");
num3 = window.prompt("数3");
 
max = num1;
if( max < num2 ) {
  max = num2;
}
if( max < num3 ) {
  max = num3;
}

document.write("最大値は" + max );

なでしこ

最大とは整数。
数1とは整数。
数2とは整数。
数3とは整数。

「数1:」と尋ねる。
数1はそれ。
「数2:」と尋ねる。
数2はそれ。
「数3:」と尋ねる。
数3はそれ。

最大に数1を代入。
もし、最大 < 数2ならば
	最大に数2を代入。
もし、最大 < 数3ならば
	最大に数3を代入。

最大を表示。

BASIC

10 INPUT NUM1
20 INPUT NUM2
30 INPUT NUM3
40 MAX = NUM1
50 IF MAX < NUM2 THEN MAX = NUM2
60 IF MAX < NUM3 THEN MAX = NUM3
70 PRINT MAX
80 END

FORTRAN

program max
  integer mx
  integer num1,num2,num3
  
  read *,num1
  read *,num2
  read *,num3
  
  mx = num1
  if( mx < num2 ) then
    mx = num2
  endif
  if( mx < num3 ) then
    mx = num3
  endif
  
  print *,mx
end program max

シェルスクリプト

#!/bin/sh

max=${1}
if [ ${max} -lt ${2} ]
then
   max=${2}
fi
if [ ${max} -lt ${3} ]
then
   max=${3}
fi

echo ${max}

まとめ

RubyPythonはマジックコメントを除けば2行で書ける(好ましくない書き方だと思われるが)ので、とても柔軟な言語だと思った。
正直こんな簡単なプログラムだとあまり違いがわからないので他のプログラムでもやってみたい。

B1の方々へ

togetterでもNAVERでも動画でもいいと思うので参加してみては?


12/2 C++(C++11)追記