2017年校招全国統一模擬筆記試験(第5回)プログラミング問題集合(Javascript版)


住所:2017年学校募集全国統一模擬筆記試験(第5回)プログラミング問題集合

偶数列(AC)


1つの文字列が2つの同じ文字列で接続されている場合、この文字列は偶数列と呼ばれます.例えば「xyzxyz」と「aaaaa」は偶数列であるが、「ababab」と「xyzxy」はそうではない.牛は今あなたに1つの小文字のアルファベットの偶数列sだけを含んで、あなたは文字列sの末尾から1とあるいは複数の文字を削除することができて、削除した後の文字列がまだ1つの偶数列であることを保証して、牛は削除した後に最も長い偶数列の長さがどれだけあることを知りたいです.
入力説明:入力は1つの文字列sを含み、文字列長length(2≦length≦200)は、sが偶数列であり、小文字で構成されていることを保証する.
出力記述:削除後に得られる最長偶数列の長さを示す整数を出力します.テストデータの非ゼロ解の保証
入力例1:
abaababaab
出力例1:
6
var readline = require('readline');
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});

rl.on('line', function(line) {
  var str = line.trim();
  str = strWithoutLast(str);
  while(str.length){
    if(str.length & 1 === 1){
      str = strWithoutLast(str);
    }
    if(isEvenStr(str)){
      console.log(str.length);
      break;
    } else {
      str = strWithoutLast(str);
    }
  }
  function isEvenStr(str){
    var len = str.length;
    var left = str.slice(0, len / 2);
    var right = str.slice(len / 2, len);
    return left === right;
  }
  function strWithoutLast(str){
    var len = str.length;
    return str.slice(0, len - 1);
  }
});

製造回文(AC)


牛にはいくつかのアルファベットカードがあり、各カードには小さなアルファベットがあり、すべてのカードは文字列sを構成しています.牛牛はずっと回文という性質が非常に優雅だと思っていたので、牛はこれらのカードでいくつかの回文列を組み立てることを望んでいたが、以下の要求があった.例えば、s=「abbaa」、出力1は、少なくとも「ababa」という回文列s=「abc」、出力3は、少なくとも「a」、「b」、「c」の3つの回文列しかパッチワークできないため
入力説明:入力は1行、1文字列s、文字列sの長さlength(1≦length≦1000)を含む.sの各文字は小文字です
≪出力説明|Output Description|emdw≫:整数、すなわち最小のエコー列数を出力します.
入力例1:
abc
出力例1:
3
var readline = require('readline');
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});

rl.on('line', function(line) {
  var alpha = 26;
  var strArr = line.trim().split('');
  var arr = [];
  var odd = 0;
  while(alpha){arr.push(0); alpha--;}
  for(var i = 0, len = strArr.length; i < len; i++){
    var index = strArr[i].charCodeAt(0) - 97;
    arr[index]++;
  }
  arr.forEach(function(item){
    if(item & 1 === 1){
      odd++;
    }
  });
  console.log(odd);
});

推測(Memory out)


牛と羊が面白い推測ゲームをしています.このゲームでは、牛や牛のプレイヤーが正の整数を選択し、羊や羊が与えられたヒントに基づいてこの数字を当てます.i番目のヒントは「Y」または「N」であり、牛が選択した数がiの倍数であるか否かを示す.たとえば、ヒントが「YYNYY」の場合、この数は1,2,4,5の倍数になりますが、3の倍数ではありません.いくつかのヒントにエラーが発生することに気づきました.例えば、「NYYY」はエラーで、すべての整数が1の倍数であるため、開始要素は「N」ではないに違いない.また、例えば「YNNY」のヒントも間違っている.結果は4の倍数ではないが2の倍数ではないからだ.与えられたプロンプトの長さを表す整数nが与えられる.長さnの合法的なヒントの個数を計算してください.例えばn=5:合法的提示:YNNY YNNY YNY YYYNNN YYYNNY YYYNYN YYYYYYNNY YYYYYYYNY YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYだから出力12
入力説明:入力は、提示された長さを表す整数n(1≦n≦10^6)を含む.
出力説明:合法的なプロンプト数を表す整数を出力します.答えが大きいかもしれないので、1000000007のモジュールに出力します.
入力例1:
5
出力例1:
12
var readline = require('readline');
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});
rl.on('line', function(line) {
  var mod = 1000000007;
  var ans = 1;
  var n = parseInt(line.trim());
  var vis = [];
  debugger;
  for(var i = 2; i <= n; i++){
    if(vis[i]) continue;
    for(var j = 2 * i; j <= n; j += i){
        vis[j] = 1;
    }
    var tmp = n;
    var cnt = 0;
    while(tmp >= i){
        tmp /= i;
        cnt++;
    }
    ans = ans * (cnt + 1) % mod;
  }
  console.log(ans);
});

DNA


DNA断片時間制限:1秒空間制限:32768 K牛は生物科学研究者から文字列データsを獲得し、牛は科学研究者が最も長いDNA配列を見つけるのを助ける必要がある.DNA配列とは、配列中に「A」、「T」、「C」、「G」のみが含まれることを意味する.牛はこの問題が簡単すぎると思って、問題をあなたに任せて解決します.例えば、s="ABCBOATER"に含まれる最も長いDNA断片は"AT"であるため、最も長い長さは2である.入力記述:入力は1つの文字列s、文字列長length(1≦length≦50)を含み、文字列には大文字(‘A’~’Z’)のみが含まれる.
出力記述:最も長いDNA断片を表す整数を出力する
入力例1:ABCBOATER
出力例1:2
var readline = require('readline');
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});
rl.on('line', function(line) {
  var str = line.trim();
  var len =  line.match(/[ATCG]*/g).reduce(function(a, b){
    return a < b.length ? b.length : a;
  }, 0);
  console.log(len);
});

いろタイル


牛はカラーのものが好きで、特にカラーのタイルが好きです.牛の部屋には正方形のタイルが敷かれている.各レンガの色には4つの可能性があります.赤、緑、青、黄です.文字列Sが与えられ、Sのi番目の文字が「R」、「G」、「B」または「Y」である場合、i番目のタイルの色はそれぞれ赤、緑、青または黄である.牛はタイルの色を変えて、隣接する2つのタイルの色が異なるようにすることにした.牛牛の最低交換が必要なタイルの数を計算してください.
入力記述:入力は、1行、1文字列S、文字列長length(1≦length≦10)を含み、文字列の各文字列は、「R」、「G」、「B」または「Y」である.
出力説明:牛が最も少なく交換する必要があるタイルの数を示す整数を出力します.
入力例1:
RRRRRR
出力例1:
3
var readline = require('readline');
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});
rl.on('line', function(line) {
  var str = line.trim();
  var arr = str.match(/([RGBY])\1+/g);
  var num = 0;
  if(arr){
    num = arr.reduce(function(a, b){
      return Math.floor(b.length / 2) + a;
    }, 0);
  }
  console.log(num);
});