パリティビットの追加(C#、Java、JavaScript、PHP、Python3、Ruby)

 ビット列の誤り検知を目的として追加されるパリティビット。

 バリティビットの追加方法は、ビット列の1の個数が常に奇数になるように追加する「奇数パリティ」、常に偶数になるように追加する偶数パリティの2通りがあります。

 今回は文字列中に含まれる1の数をカウントし、その結果に応じて0もしくは1を追加する処理について、C#、Java、JavaScript、PHP、Python、Rubyの6言語で書いています。

 奇数パリティ追加処理を行う関数parity_odd()の場合は、文字列中の1の個数がが常に奇数になるように0または1を追加し、偶数パリティ追加処理を行う関数pparity_even()の場合は、文字列中の1の個数が常に偶数になるように0または1を追加します。
 
 なお、文字列中に0と1以外の文字が含まれている場合は、それらの文字を空白文字に変換してカットする処理を行います。

 今回の処理で使用する文字列は「1011001」で、parity_odd()で「11011001」を、parity_even()で「01011001」を、それぞれ出力します。

C#
using System;
using System.Text.RegularExpressions;

public class Sample{
    //奇数パリティ
    public static string parity_odd(string str){
        string new_str = "";
        Regex reg = new Regex("[^0-1]");
        str = reg.Replace(str, "");

        int count = str.Split('1').Length - 1;

        if (count % 2 == 1){
            new_str = '0' + str;
        } else {
            new_str = '1' + str;
        }
        return new_str;
    }

    //偶数パリティ
    public static string parity_even(string str){
        string new_str = "";
        Regex reg = new Regex("[^0-1]");
        str = reg.Replace(str, "");

        int count = str.Split('1').Length - 1;

        if (count % 2 == 0){
            new_str = '0' + str;
        } else {
            new_str = '1' + str;
        }
        return new_str;
    }

    public static void Main(){
        var line = "1011001";
        Console.WriteLine(parity_odd(line));
        Console.WriteLine(parity_even(line));
    }
}
Java
import java.util.*;

public class Main {
    //奇数パリティ
    public static String parity_odd(String str) {
        String new_str = "";
        str = str.replaceAll("[^0-1]", "");

        int count = str.split("1").length - 1;

        if (count % 2 == 1){
            new_str = '0' + str;
        } else {
            new_str = '1' + str;
        }
        return new_str;
    }

    //偶数パリティ
    public static String parity_even(String str) {
        String new_str = "";
        str = str.replaceAll("[^0-1]", "");

        int count = str.split("1").length - 1;

        if (count % 2 == 0){
            new_str = '0' + str;
        } else {
            new_str = '1' + str;
        }
        return new_str;
    }

    public static void main(String[] args) throws Exception {
        var line = "1011001";
        System.out.println(parity_odd(line));
        System.out.println(parity_even(line));
    }
}
JavaScript
process.stdin.resume();
process.stdin.setEncoding('utf8');
//奇数パリティ
function parity_odd(str){
    var new_str = "";
    str = str.replace(/[^0-1]/g, '');
    var count = str.split('1').length - 1;

    if (count % 2 == 1){
        new_str = '0' + str;
    } else {
        new_str = '1' + str;
    }

    return new_str;
}

//偶数パリティ
function parity_even(str){
    var new_str = "";
    str = str.replace(/[^0-1]/g, '');
    var count = str.split('1').length - 1;

    if (count % 2 == 0){
        new_str = '0' + str;
    } else {
        new_str = '1' + str;
    }

    return new_str;
}

var line = "1011001";
console.log(parity_odd(line));
console.log(parity_even(line));
PHP
<?php
//奇数パリティ
function parity_odd($str){
    $new_str = "";
    $str = preg_replace('/[^0-1]/','', $str);

    if (substr_count($str, '1') % 2 == 1){
        $new_str = '0'.$str;
    } else {
        $new_str = '1'.$str;
    }

    return $new_str;
}

//偶数パリティ
function parity_even($str){
    $new_str = "";
    $str = preg_replace('/[^0-1]/','', $str);

    if (substr_count($str, '1') % 2 == 0){
        $new_str = '0'.$str;
    } else {
        $new_str = '1'.$str;
    }

    return $new_str;
}

$line = "1011001";
echo parity_odd($line)."\n";
echo parity_even($line)."\n";
?>
Python3
import re

#奇数パリティ
def parity_odd(string):
    new_str = ""
    string = re.sub('[^0-1]', '', string)

    if string.count("1") % 2 == 1:
        new_str = "0" + string
    else:
        new_str = "1" + string

    return new_str

#偶数パリティ
def parity_even(string):
    new_str = ""
    string = re.sub('[^0-1]', '', string)

    if string.count("1") % 2 == 0:
        new_str = "0" + string
    else:
        new_str = "1" + string

    return new_str


line = "1011001"
print(parity_odd(line))
print(parity_even(line))
Ruby
#奇数パリティ
def parity_odd(str)
    new_str = ""
    str = str.gsub(/[^0-1]/, '')

    if str.count('1') % 2 == 1
        new_str = '0' + str
    else
        new_str = '1' + str
    end

    return new_str
end

#偶数パリティ
def parity_even(str)
    new_str = ""
    str = str.gsub(/[^0-1]/, '')

    if str.count('1') % 2 == 0
        new_str = '0' + str
    else
        new_str = '1' + str
    end

    return new_str
end

line = "1011001"
puts parity_odd(line)
puts parity_even(line)

にほんブログ村 ゲームブログへ

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする