はこねのはこ

はこねさんの備忘録

MacのCLionで#include <bits/stdc++.h>を使えるようにする。

はじめに

前回、MacのCLionでコンパイラの設定をしていました。 しかし、いざ使ってみると、

#include <bits/stdc++.h>

が読み込み得ずに下記のエラーがでてしまっていました。 その解決策です。

fatal error: 'bits/stdc++.h' file not found
#include <bits/stdc++.h>
         ^~~~~~~~~~~~~~~
1 error generated.

hakonebox.hatenablog.com 前回の設定ではインストールしたコンパイラは使えていなかったみたいですね。

解決策

c++ComPilerに下記のパスを記入。

/usr/local/opt/gcc/bin/g++-9

f:id:hakonebox:20200221083842p:plain

これで無事ビルドできました。

MacでもCLionを動かそうとしたらmissing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrunと言われた話

はじめに

タイトルの通りです。 MacbookでもCLion使いたいので環境整えようとしました。
そしたらタイトルのエラーがでてあわあわしてました。

確認手順

Clion→Preferences→Toolchains コンパイラ見つかんないって怒られているみたい。 f:id:hakonebox:20200220225441p:plain

確認してみる。

gcc --version
xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun

エラーでてきた。
コマンドラインツールは入れてたと思ったのですが...
調べてみるとmacOSのアップデートが原因で発生するみたいです。 下記コマンドで

xcode-select --install

f:id:hakonebox:20200220231027p:plain

インストール完了後CLionで確認したら無事認識できました。

f:id:hakonebox:20200220232804p:plain

ついでにアップデートもしておきます。

brew install gcc

無事ビルドできるようになりました。

追記

しかしこれではインストールしたコンパイラは使えていなかったみたいです。 ↓↓ hakonebox.hatenablog.com

CLionの実行結果の文字化けを直す

はじめに

CLion入れました。 www.jetbrains.com

文字化けが起きてしまったのでその解決方法。

環境

  • Windows10

結論

文字コードの設定をUTF-8に合わせました。 f:id:hakonebox:20200219005149p:plain chcpで切り替えてもダメみたいだった(起動時に戻ってしまう。)ので 断腸の思いでベータの機能を採用。

ベータ:ワールドワイド言語サポートでUnicode UTF-8を使用
にチェックをつける。

検証コード

#include <bits/stdc++.h>
using namespace std;

int main() {
    cout << "競プロ" << endl;
    cout << "Hello CLion" << endl;
}

MacBookPro US配列 caps lookを無効にしてcontrolを割り当ててIJKLキーで矢印キーに割り当ててみた(Karabiner)

はじめに

たったさっきまでfn + IJKLで矢印キー(Arrow)に設定して喜んでました。
久々にウキウキと記事を書いて投稿してから気づきました。

あれ?...
どうせcaps lock無効にして何かに置き換えるなら
使用頻度の高いcontrolの方が良くない...?

...というわけでcontrol + IJKLで矢印キーにします。

fn+IJKLの記事はこちら hakonebox.hatenablog.com

環境

  • MacBookPro US配列
  • Karabiner

設定

Karabinerでcontrol+IJKLを矢印に割り当てる

Add ruleから追加します。 f:id:hakonebox:20190518183859p:plain

caps lockを無効にする

システム環境設定→キーボード→修飾キー
caps lockをアクションなしに設定します。
※ この時点でcapslockをcontrolにしようとしていたのですが、
Kanabinerでcapslockがcontrolとしてうまく認識できなかったので、
無効にしてKnabiner側で置き換えることにしました。 f:id:hakonebox:20190518175054p:plain

Karabinerでcaps lockをcontrolに割り当てる

add itemからcaps lockをleft_controlと設定します。 f:id:hakonebox:20190518184251p:plain

さいごに

はじめからこっちで思いつけばよかったです。

MacBookPro US配列 caps lookを無効にしてfnを割り当ててIJKLキーで矢印キーに割り当ててみた(Karabiner)

はじめに

MacBookPro使ってます。

矢印キー(ArrowKey)が地味に打ちにくいので
Karabinerでfn + IJKLキーで矢印キーにしていたのですが、
矢印を打つごとにfnに左手小指を持っていくのは地味に面倒だったので、
もっと楽にできないかと考えました。

左手をほぼ動かさずに打てるキーで使えそうなキーを考えたところ、
caps lockキーを使用していなかったので、
無効にしてfnに割り当てられないかと考えてやってみました。

環境

  • MacBookPro US配列
  • Karabiner

設定

Karabinerでfn+IJKLを矢印に割り当てる

設定していなければAdd ruleから追加します。 f:id:hakonebox:20190518175428p:plain

caps lockを無効にする

システム環境設定→キーボード→修飾キー
caps lockをアクションなしに設定します。 f:id:hakonebox:20190518175054p:plain

Karabinerでcaps lockをfnに割り当てる

add itemからcaps lockをfnと設定します。 f:id:hakonebox:20190518175736p:plain

さいごに

思ったより簡単にできました。

Tenka1 Programmer Beginner Contest 2019の反省会

はじめに

Tenka1 Programmer Beginner Contest 2019に参加しました。

競プロは通算2回目の参加。 前回のAtCoder124は仮眠を取ろうとしたら寝坊して1時間遅れで参加したので、 開始から解いたのは実は今回が初めてでした。

BeginnerSelectionを全てとき、 いくつかの過去問を解いていたことでABCは解けるはずと 変に慢心していました。

悲しみをどうしていいのかわからないので、 気持ちを忘れないように書きなぐっておこうと思います。

戒め。

反省点

A - On the Way

'No'を'no'と記載してしまい痛恨のWA

早く提出しなければいけないという焦りでミスタイプを見逃してしまいました。勿体無い。

確認10秒!! 修正10分!!

A<C<BまたはB<C<Aか判断して条件式で出すだけ。

提出したコード

a,b,c = map(int,input().split())

print("Yes" if (a<c and c<b)  or (b<c and c<a) else "No")

B - *e**** ********e* *e****e* ****e**

pythonの文字列の一文字だけ変更はできないことを忘れていました。

エラーコードで思い出せてよかったです。

今回のミスで一生忘れなくなりそう...。

それはそれでいいことかと思うことにします。

文字列をリストにする。 特定の文字以外を見つけたら文字を変更する。 リストをjoinメソッドで繋げる。

提出したコード

N = int(input())
S = list(input())
K = int(input())

buff = S[K-1]
for i in range(len(S)):
    if buff != S[i]:
        S[i] = '*'

print("".join(S))

C - Stones

大反省案件。

今思うとこんな考え方をしてしまったのが恥ずかしい。

変な法則性を見つけていくつか試して実装してしまいました。

たまたま見つけたのですが、 '#'と'.'の数を数えて差が少ない方を足していけば答えになるという考え方。

問題説明にある例は通るし、自分でサンプルとして考えたinputは処理できていたので、信じ切ってしまっていました。

制限時間がきて冷静になって問題を見ると、 ........か....####か######になるパターンだけってことに気が付いたので 本当に勿体無い時間を過ごしてしまったと思います。

戒めのためにコードを記載。

提出したコード(WA)

# WA
N = int(input())
S = list(input())

sharp_num =[]
dot_num = []

search = '#'
count = 0

for c in S:
    if search == '#':
        if c == search:
            count += 1
        else:
            sharp_num.append(count)
            count = 1
            search = '.'
    else:
        if c == search:
            count += 1
        else:
            dot_num.append(count)
            count = 1
            search = '#'
            
if search == '#':
    sharp_num.append(count)
    dot_num.append(0)
else:
    dot_num.append(count)

total = 0
for i in range(len(sharp_num)):
    total += min(sharp_num[i],dot_num[i])

print(total)

全体を通して

  1. Aの問題を解く
  2. Aの判定が終わる前にBを解き始める
  3. Bの途中でAがWAと気づき修正
  4. 混乱しながらもBを解く
  5. 混乱してすがる思いでCの変な法則に執着する
  6. 問題文の問題がクリアできたので提出後判定を確認する前にD開始
  7. Dの途中でCができていないことに気がつき冷静さが完全になくなる

これからの課題

過去問を解くのを継続し、知らないアルゴリズムを身につけ、 問題を解く手札を増やす。

さいごに

  • 確認10秒!! 修正10分!!

  • 根拠のない法則性に賭けるのはダメ絶対!!!

AtCoder ABC122-Aの解法メモ

はじめに

AtCoder122のA問題について、 if文で記載したもののfindを使用するともっとスッキリ記載できることを知ったのでメモ

問題

AtCoder 星には四種類の塩基 A, C, G, T が存在し、A と T、C と G がそれぞれ対になります。

文字 bが入力されます。これは A, C, G, T のいずれかです。塩基 bと対になる塩基を表す文字を出力するプログラムを書いてください。

atcoder.jp

最初に解いた方法

いい方法が思いつく前にif文を組んだ方が早いと感じて脳死戦法しました

b = input()

if b == 'A':
    output = 'T'
elif b == 'C':
    output = 'G'
elif b == 'G':
    output = 'C'
elif b == 'T':
    output = 'A'
else:
    pass

print(output)

解き直した方法

print("TGCA"["ACGT".find(input())])

ACGTを文字列とし、findメソッドでインデックスを求め、 対になる文字列を求めます。

コード量が少ないので、コーディングの時間短縮できそうです。

メソッド

findメソッド

文字列検索に使用するメソッドです。

検索対象のインデックスを返してくれます。

見つからなかった場合は-1となります。

s = 'hakoneko game dev'
print(s.find('d'))
# 14

print(s.find('game'))
# 9

print(s.find('app'))
# -1

print(s.find('D'))
# -1

rfindメソッド

findは文字列の先頭から検索しますが、rfindを用いると、 後ろから検索します。

s = 'hakoneko game dev'

print(s.find('k'))
# 2

print(s.rfind('k'))
# 6