Go: package main
// 三角形の形は辺の長さで決まる． 順番に３つの正整数が与えられたとき， 辺の長さがそれらの値と一致する三角形が存在するかどうかを調べ,
//  存在するなら鋭角三角形，直角三角形，鈍角三角形のいずれかを判定し， 次の入力へ進む． 三角形が存在しないとき， それまでに入力された，
// 三角形，直角三角形，鋭角三角形，鈍角三角形の 個数を空白で区切って出力し， それ以降の入力は無視して終了する
// 入力の中には必ず三角形が存在しないようなものがある と仮定してよい. 入力の行数は判らないが各行には３つの正整数が空白で区切って書かれている．
//  ただし，各整数は100 以下とする.

// return
// 三角形 直角三角形　鈍角三角形 鈍角三角形
import (
	"os"
	"fmt"
	"bufio"
)


var sc = bufio.NewScanner(os.Stdin)

func max(a, b, c int) (int, int, int) {
	if a > b {
		if b > c {
			return a, b, c
		} else {
			return c, a, b
		}
	} else {
		if b > c {
			return b, a, c
		} else {
			return c, b, a
		}
	}
}

func find_trianges(a, b, c int) string {
	a, b, c = max(a, b, c)
	r := b*b + c*c
	if a*a > r {
		return "obtuse_triangle"
	} else if a*a < r {
		return "sharped_triangle"
	} else {
		return "right_triangle"
	}
}

func main() {
	s := bufio.NewScanner(os.Stdin)
	var t, r_t, s_t, o_t int = 0, 0, 0, 0
	for s.Scan() {
		var a, b, c int
		fmt.Sscan(s.Text(), &a, &b, &c)
			a, b, c = max(a, b, c)
			if (a < b + c) {
				r := find_trianges(a, b, c)
				switch r {
				case "right_triangle":
					r_t++
				case "sharped_triangle":
					s_t++
				case "obtuse_triangle":
					o_t++
				}
				t++
			}	else {
				break
			}
			
	}
	fmt.Println(t, r_t, s_t, o_t)
}

C++: #include <bits/stdc++.h>
using namespace std;

int main(){
  std::vector<int> v(3);
  int a,b,c;
  a=b=c=0;
  for(int i=0;i<100;i++){
    cin>>v[0]>>v[1]>>v[2];
    sort(v.begin(),v.end());
    if(v[2]>=v[0]+v[1]){
      cout<<i<<" "<<a<<" "<<b<<" "<<c<<endl;
      break;
    }
    else{
      if(v[2]*v[2]==v[0]*v[0]+v[1]*v[1])a++;
      if(v[2]*v[2]<v[0]*v[0]+v[1]*v[1])b++;
      if(v[2]*v[2]>v[0]*v[0]+v[1]*v[1])c++;
    }
  }
}

C++: #include<stdio.h>
 
int main(){
	int a[3], b, i, j, e = 0, f = 0, g = 0, h = 0;
	while(scanf("%d %d %d", &a[0], &a[1], &a[2]) != EOF){
		for(i = 0; i < 2; i++){
			for(j = i + 1; j < 3; j++){
				if(a[i] < a[j]){
					b = a[i];
					a[i] = a[j];
					a[j] = b;
				}
			}
		}
		if(a[0] >= a[1] + a[2]) break;
		else e++;
		if(a[0] * a[0] > a[1] * a[1] + a[2] * a[2]) f++;
		else if(a[0] * a[0] == a[1] * a[1] + a[2] * a[2]) g++;
		else h++;
	}
	printf("%d %d %d %d\n", e, g, h, f);
	return 0;
}

C++: #include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main() {
	// your code goes here
	int ch, ei, don;
	int n = 0;
	ch = 0;
	ei = 0;
	don = 0;
	
	while (true) {
		vector <int> l(3);
		cin >> l[0];
		cin >> l[1];
		cin >> l[2];
		std::sort(l.begin(), l.end());
		if (l[0] + l[1] > l[2] && l[1] + l[2] > l[0] && l[2] + l[0] > l[1]) {
			n++;
			if (l[2] * l[2] == l[0] * l[0] + l[1] * l[1]) {
				ch++;
			} else if (l[2] * l[2] > l[0] * l[0] + l[1] * l[1]) {
				don++;
			} else {
				ei++;
			}
		} else {
			break;
		}
	}
	cout << n << " " << ch << " " << ei << " " << don << endl;
	return 0;
}

C++: #include<iostream>
#include<algorithm>
using namespace std;
int main() {
	int a[3];
	int t = 0, x = 0, y = 0, z = 0;
	bool b = true;
	while (cin >> a[0] >> a[1] >> a[2]){
		if (!b)continue;
		sort(a, a + 3);
		if (a[0] + a[1] <= a[2]){
			b = false;
			continue;
		}else{
			t++;
			if		(a[0] * a[0] + a[1] * a[1] == a[2] * a[2])y++;
			else if (a[0] * a[0] + a[1] * a[1] <= a[2] * a[2])x++;
			else if (a[0] * a[0] + a[1] * a[1] >= a[2] * a[2])z++;
		}
	}
	cout << t << ' ' << x << ' ' << y << ' ' << z << endl;
}

C++: #include<bits/stdc++.h>
using namespace std;
int main(){
  int a,b,c,count1=0,count2=0,count3=0,count4=0;
  while(cin>>a>>b>>c ){
      int ia,ib,ic,max,z;
      ia=a*a;
      ib=b*b;
      ic=c*c;
      if(ia>=ib && ia>=ic) {
	if(a<b+c) {
	  max=ia;
	  ia=ic;
	}
	else break;
      }
      
      else if(ib>=ia && ib>=ic) {
	if(b<a+c) {
	  max=ib;
	  ib=ic;
	}
	else break;
      }
      else if(ic>=ia && ic>=ib) {
	if(c<a+b) {
	  max=ic;
	}
	else break;
      }
      else break;
      count1++;
      if(max==ia+ib) count2++;
      else if(max<ia+ib) count3++;
      else count4++;
      break;
  }
  cout<<count1<<" "<<count2<<" "<<count3<<" "<<count4<<endl;
  return 0;
  
}

C++: #include<iostream>
#include<algorithm>
using namespace std;
int a[3];
int cnt,b,c,d;
main()
{
    while(cin>>a[0]>>a[1]>>a[2])
    {
        sort(a,a+3);
        if(a[0]+a[1]<=a[2])
        {
            cout<<cnt<<" "<<b<<" "<<c<<" "<<d<<endl;
            return 0;
        }
        cnt++;
        for(int i=0;i<3;i++)a[i]*=a[i];
        if(a[0]+a[1]==a[2])b++;
        else if(a[0]+a[1]<a[2])d++;
        else c++;
    }
}

C++: #include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main(){
  vector<int> hen(3),ans(4);
  fill(ans.begin(),ans.end(),0);

  while(cin >> hen[0] >> hen[1] >> hen[2]){

    sort(hen.begin(),hen.end());

    if(hen[2] < hen[0] + hen[1]){
      ans[0]++; 
      if(hen[2]*hen[2] < hen[0]*hen[0] + hen[1]*hen[1]){
	ans[2]++;
      }else if(hen[2]*hen[2] > hen[0]*hen[0] + hen[1]*hen[1]){
	ans[3]++;
      }else ans[1]++;

    }else break;
  }
  for(int i = 0 ; i < 4 ; i++ ){
    if(i == 0)cout << ans[0];
    else cout <<' '<< ans[i];
  }
  cout << endl;

  return 0;
}

C++: #include <bits/stdc++.h>
typedef long long LL;
using namespace std;

int main(){
  vector<int> a(3);
  int cnt[4] = {0, 0, 0, 0};
  while (cin >> a[0] >> a[1] >> a[2]) {
    if (a[0] + a[1] > a[2] && a[0] + a[2] > a[1] && a[1] + a[2] > a[0]) {
      cnt[0] ++;
      sort(a.begin(), a.end());
      if (a[0] * a[0] + a[1] * a[1] > a[2] * a[2])  cnt[1] ++;
      if (a[0] * a[0] + a[1] * a[1] == a[2] * a[2]) cnt[2] ++;
      if (a[0] * a[0] + a[1] * a[1] < a[2] * a[2])  cnt[3] ++;
    }
  }

  cout << cnt[0];
  cout << " " << cnt[1];
  cout << " " << cnt[2];
  cout << " " << cnt[3];
  cout << endl;
}