Javaのお題を通してVimの練習をしましょう。
お題(Hit & Blow)
1~9の数字を使ってできる4桁の数字が何かを当てるゲームだ。(この4桁の数字に重複はない)
この数字はランダムで決定されるが例えば1357としよう。
プレイヤーはその数字が何かを予測し、入力する。
1234
この場合1は数字も位置も同じだ。この場合をHitとする。
3は数字は一致しているが位置が違うこれはBlowだ。
この結果
Hit:1,blow:1
と表示される。
これを繰り返し正解までの試行回数を競う。
[実行例]
数字を4桁で入力してください>1234 Hit:0,blow:1 数字を4桁で入力してください>5678 Hit:1,blow:2 数字を4桁で入力してください>9998 Hit:0,blow:0 数字を4桁で入力してください>1567 Hit:1,blow:2 数字を4桁で入力してください>2567 Hit:1,blow:3 数字を4桁で入力してください>6572 Hit:4,blow:0 6回でClear
[作例]
この処理の作例をVimで入力してみよう。
import java.util.*;
public class Main {
public static void main(String[] args) {
final int NUM_COUNT=4;
int[] nums={1,2,3,4,5,6,7,8,9};
int[] ans=new int[NUM_COUNT];
for(int i=0;i<NUM_COUNT;i++){
int index=new Random().nextInt(nums.length-i);
ans[i]=nums[index];
nums[index]=nums[nums.length-1-i];
}
int count=0,hit,blow;
do{
count++;
hit=0;
blow=0;
System.out.printf("数字を%d桁で入力してください>",NUM_COUNT);
int input=new Scanner(System.in).nextInt();
int[] userAns=new int[NUM_COUNT];
for(int i=ans.length-1;i>=0;i--){
userAns[i]=input %10;
input /=10;
}
for(int i=0;i<NUM_COUNT;i++){
if(userAns[i]==ans[i]){
hit++;
}else{
for(int j=0;j<NUM_COUNT;j++){
if(userAns[i]==ans[j]){
blow++;
}
}
}
}
System.out.printf("Hit:%d,Blow:%d%n", hit,blow);
}while(hit!=NUM_COUNT);
System.out.printf("%d回でClear%n", count);
}
}
コメント