ABC 122A : 2019 年 4 月 4 日

Double Helix (100点)

普通に switch かなと思って書いてから、解説をみた。ほー、C++ のそれを「連想記憶」と呼ぶかねぇと思ったけど、 まぁ、なるほど。

C# では System.Collections.Generic の Dictionary を使う。

Haskell で同じことするのは面倒かなぁと思って、 一度はパタンマッチ版を書いてみたのだけど、 折角タプルに対する lookup が Prelude にあるのだから、それを使って書き直してみた。 >>=flip を使い慣れているわけではないので、慣れていこう。

言語によって getLine だったり ReadLine だったりするのは、ちょっとしんどいなぁ。

ちゃんと VSCode とか使うか*1

C++

#include <bits/stdc++.h>
using namespace std;
int main()
{
  char d[128];
  d['A'] = 'T'; d['T'] = 'A'; d['C'] = 'G'; d['G'] = 'C';

  char c;
  cin >> c;
  cout << d[c] << endl;
}

C#

using System.Collections.Generic;
using static System.Console;

class Atcoder
{
    public static void Main()
    {
        var d = new Dictionary<string, string>()
        {{"A", "T"}, {"T", "A"}, {"C", "G"}, {"G", "C"}};
        WriteLine(d[ReadLine()]);
    }
}

Haskell

import           Data.Maybe
main = getLine >>= putStrLn . fromJust . d
  where d = flip lookup [("A", "T"), ("T", "A"), ("C", "G"), ("G", "C")]