裏 RjpWiki

Julia ときどき R, Python によるコンピュータプログラム,コンピュータ・サイエンス,統計学

実力判定:Cランク

2017年12月31日 | ブログラミング

実力判定:Cランク

締め切りが 2017/12/31 10:00 AM なので,その 1 分後に投稿されるように予約
きっと,締め切りは,再来年,再々来年...と繰り延べられるのだろうけど

【問題】

「0123456789」の10枚のカードの内、4枚のカードが提示されます。

通常は、「最も数値が大きなカード」が勝利者のカードです。
4枚の中に0があれば、「0以外で最も小さなカード」が勝利者のカードです。

勝利者のカードの数値を割り出してください。

【入力】

標準入力から、複数行のデータが与えられます。1行のデータが、1セットのゲームになります。

1行のデータは、数字4文字の文字列になります。この1文字ずつが、1枚のカードになります。

【出力】

1行ずつ結果を判定して、その答えとなる数字を、1行ごと標準出力に出力します。
 
【入出力サンプル】

Input

1234
6745
0149
3705

Output

4
7
1
3

==============================================================

R

f = function(S) {
    for (s in S) {
        s = as.integer(unlist(strsplit(s, "")))
        i = which(s == 0)
        if (length(i) > 0) {
            x = min(s[-i])
        } else {
            x = max(s)
        }
        cat(x, "\n", sep="")
    }
}
f(readLines(file("stdin", "r")))

==============================================================

AWK

awk '{
    split($0, x, "")
    Min = 100
    Max = -100
    zero = 0
    for (i = 1; 4 >= i; i++) {
        if (x[i] == 0) {
            zero = 1
        }
        else {
            Min = Min < x[i] ? Min : x[i]
            Max = Max > x[i] ? Max : x[i]
        }
    }
    if (zero == 1) {
        print Min
    }
    else {
        print Max
    }
        
}
'

==============================================================

Perl

use strict;
use warnings;
use utf8;
use List::Util qw/max min/; # min, max 関数を使うため

my ($line, $i, @char, $Min, $Max, $zero);

while (defined(my $line = )) {
    #    print $line;
    @char = split(//, $line);
    $Min = 10;
    $Max = -10;
    $zero = 0;
    for ($i = 0; $i < 4; $i++) {
        if ($char[$i] == 0){
            $zero = 1;
        }
        else {
            $Min = min($Min, $char[$i]);
            $Max = max($Max, $char[$i]);
        }
    }
    if ($zero) {
        print $Min, "\n";
    }
    else {
        print $Max, "\n";
    }
}

==============================================================

VB.net

imports System
module Crank
    sub Main()
        dim line as String
        dim m as Integer
        dim Min, Max, ans as Integer
        dim zero as Boolean
    for i as integer = 1 to 100
            line = Console.ReadLine() ' コンソールから入力
               Min = 10
            Max = -10
            zero = False
            for i as integer = 1 to 4
                   m = Integer.Parse(mid(line, i, 1)) ' 文字列を整数に変換
                    if (m = 0) then
                           zero = True
                    else
                        Min = Math.min(Min, m)
                        Max = Math.max(Max, m)
                    end if
            next
            if (zero) then
                ans = Min
            else
                ans = Max
            end if
            Console.WriteLine(ans) ' コンソールに出力 改行しないなら Console.Write()
        next
    end sub
end module

コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« 切手の選び方は何通り? | トップ | カエル跳びゲームを一般化して! »
最新の画像もっと見る

コメントを投稿

ブログラミング」カテゴリの最新記事