# ABC 122A : 2019 年 4 月 4 日 [Double Helix (100点)](https://atcoder.jp/contests/abc122/tasks/abc122_a) 普通に switch かなと思って書いてから、解説をみた。ほー、C++ のそれを「連想記憶」と呼ぶかねぇと思ったけど、 まぁ、なるほど。 C# では System.Collections.Generic の Dictionary を使う。 Haskell で同じことするのは面倒かなぁと思って、 一度は[パタンマッチ版](https://atcoder.jp/contests/abc122/submissions/4753069)を書いてみたのだけど、 折角タプルに対する lookup が Prelude にあるのだから、それを使って書き直してみた。 ${>>=} や ${flip} を使い慣れているわけではないので、慣れていこう。 言語によって ${getLine} だったり ${ReadLine} だったりするのは、ちょっとしんどいなぁ。 ちゃんと VSCode とか使うか${コンパイラに怒られるまえに、エディタが教えてくれるのがいいかなという意味}。 ## C++ $$
{
#include 
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()
        {{"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")]
$$}