ABC202Dをいろいろな言語で解いてみた
解いてみただけ
Python3
import math A, B, K = map(int, input().split()) result = [] def sameFactorial(a, b): return math.factorial(a+b) // (math.factorial(a)*math.factorial(b)) def headIs(a, b, k): if a == 0: result.append('b'*b) elif b == 0: result.append('a'*a) elif sameFactorial(a-1, b) >= k: result.append('a') headIs(a-1, b, k) else: result.append('b') headIs(a, b-1, k-sameFactorial(a-1, b)) headIs(A, B, K) print(''.join(result))
Julia
A, B, K = parse.(Int64, split(readline())) function sameFactorial(a, b) factorial(big(a+b)) ÷ (factorial(big(a))*factorial(big(b))) end function headIs(a, b, k) if a == 0 return 'b'^b elseif b == 0 return 'a'^a elseif sameFactorial(a-1,b) >= k return 'a' * headIs(a-1, b, k) else return 'b' * headIs(a, b-1, k-sameFactorial(a-1,b)) end end print(headIs(A, B, K))
Ruby
def C(n, k) result = 1 k.times do |i| result *= n - i result /= i + 1 end result end def solve(a, b, k) if a == 0 'b' * b elsif b == 0 'a' * a elsif k <= (c = C(a + b - 1, b)) 'a' + solve(a - 1, b, k) else 'b' + solve(a, b - 1, k - c) end end A, B, K = gets.split.map(&:to_i) puts solve(A, B, K)
Perl
use strict; use warnings; use utf8; sub C { my ($n, $k) = @_; my $result = 1; for my $i (1..$k){ $result *= $n - $i + 1; $result /= $i; } return $result; } sub Solve { my ($a, $b, $k) = @_; if($a == 0){ return 'b'x$b; }elsif($b == 0){ return 'a'x$a; }else{ my $c = C($a+$b-1,$b); if($k <= $c) { return 'a' . Solve($a-1, $b, $k); }else{ return 'b' . Solve($a, $b-1, $k-$c); } } } my ( $A, $B, $K ) = split / /,<>; print Solve($A, $B, $K);
最近腰が痛い...
vscodeのcodeコマンド
Codeコマンド
vscode を使っている人であれば打ったことがあるであろうcode
コマンド
実はbinaryじゃなくてshellscriptが見れる
shellscriptがそのままあることもあるんだなぁ
$which code /usr/local/bin/code $cat /usr/local/bin/code #!/usr/bin/env bash # # Copyright (c) Microsoft Corporation. All rights reserved. # Licensed under the MIT License. See License.txt in the project root for license information. function realpath() { python -c "import os,sys; print(os.path.realpath(sys.argv[1]))" "$0"; } CONTENTS="$(dirname "$(dirname "$(dirname "$(dirname "$(realpath "$0")")")")")" ELECTRON="$CONTENTS/MacOS/Electron" CLI="$CONTENTS/Resources/app/out/cli.js" ELECTRON_RUN_AS_NODE=1 "$ELECTRON" "$CLI" "$@" exit $?
realpath
dirname
- ディレクトリのパスを返す
- 知らないコマンドがまだまだたくさんあるね
$dirname ~/ws/notes/blog /Users/matac/ws/notes
$?
直前のプロセスの終了ステータス
exit $?
終了ステータス$?を返して終了する
debugしてみる
$zsh -x /usr/local/bin/code . +/Users/matac/.zshenv:1> source /Users/matac/.cargo/env +/Users/matac/.cargo/env:4> case :/Users/matac/.nvm/versions/node/v14.16.1/bin:/Users/matac/.pyenv/shims:/Users/matac/.pyenv/bin:/Users/matac/.rbenv/shims:/usr/local/opt/openssl@1.1/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/TeX/texbin:/usr/local/go/bin:/Users/matac/.cargo/bin:/usr/local/go/bin:/Users/matac/ws/go/bin:/Applications/Julia-1.6.app/Contents/Resources/julia/bin: (*:/Users/matac/.cargo/bin:*) +/usr/local/bin/code:7> CONTENTS=+/usr/local/bin/code:7> realpath /usr/local/bin/code +realpath:0> python -c 'import os,sys; print(os.path.realpath(sys.argv[1]))' realpath +/usr/local/bin/code:7> CONTENTS=+/usr/local/bin/code:7> dirname /Users/matac/realpath +/usr/local/bin/code:7> CONTENTS=+/usr/local/bin/code:7> dirname /Users/matac +/usr/local/bin/code:7> CONTENTS=+/usr/local/bin/code:7> dirname /Users +/usr/local/bin/code:7> CONTENTS=+/usr/local/bin/code:7> dirname / +/usr/local/bin/code:7> CONTENTS=/ +/usr/local/bin/code:8> ELECTRON=//MacOS/Electron +/usr/local/bin/code:9> CLI=//Resources/app/out/cli.js +/usr/local/bin/code:10> ELECTRON_RUN_AS_NODE=1 //MacOS/Electron //Resources/app/out/cli.js . /usr/local/bin/code:10: no such file or directory: //MacOS/Electron +/usr/local/bin/code:11> exit 127
マジで何やってるのかわからん
$ls -la /usr/local/bin/code lrwxr-xr-x 1 matac admin 68 3 28 20:50 /usr/local/bin/code@ -> /Applications/Visual Studio Code.app/Contents/Resources/app/bin/code
実体はここにある
[~/ws/notes/blog] $zsh /usr/local/bin/code . /usr/local/bin/code:10: no such file or directory: /Users/matac/MacOS/Electron [~/ws/notes/blog] $bash /usr/local/bin/code .
zshじゃなくてbashなら行けるっぽい(bashって書いてあるやろがい!)
[~/ws/notes/blog] $bash -x /usr/local/bin/code . ++++++ realpath /usr/local/bin/code ++++++ python -c 'import os,sys; print(os.path.realpath(sys.argv[1]))' /usr/local/bin/code +++++ dirname '/Applications/Visual Studio Code.app/Contents/Resources/app/bin/code' ++++ dirname '/Applications/Visual Studio Code.app/Contents/Resources/app/bin' +++ dirname '/Applications/Visual Studio Code.app/Contents/Resources/app' ++ dirname '/Applications/Visual Studio Code.app/Contents/Resources' + CONTENTS='/Applications/Visual Studio Code.app/Contents' + ELECTRON='/Applications/Visual Studio Code.app/Contents/MacOS/Electron' + CLI='/Applications/Visual Studio Code.app/Contents/Resources/app/out/cli.js' + ELECTRON_RUN_AS_NODE=1 + '/Applications/Visual Studio Code.app/Contents/MacOS/Electron' '/Applications/Visual Studio Code.app/Contents/Resources/app/out/cli.js' . + exit 0
なのでcodeコマンドは最終的に
'/Applications/Visual Studio Code.app/Contents/MacOS/Electron' '/Applications/Visual Studio Code.app/Contents/Resources/app/out/cli.js' .
を実行している
'/Applications/Visual Studio Code.app/Contents/MacOS/Electron'
vscodeを開くコマンド
'/Applications/Visual Studio Code.app/Contents/Resources/app/out/cli.js'
[~/ws/notes/blog] $cat '/Applications/Visual Studio Code.app/Contents/Resources/app/out/cli.js' "use strict";const bootstrap=require("./bootstrap"),bootstrapNode=require("./bootstrap-node"),product=require("../product.json");bootstrap.avoidMonkeyPatchFromAppInsights(),bootstrapNode.configurePortable(product),bootstrap.enableASARSupport(void 0),process.env.VSCODE_CLI="1",require("./bootstrap-amd").load("vs/code/node/cli"); //# sourceMappingURL=https://ticino.blob.core.windows.net/sourcemaps/054a9295330880ed74ceaedda236253b4f39a335/core/cli.js.map
後ろにディレクトリを指定してあげるとvscodeでそのディレクトリを開ける動きをするはず
めっちゃ長い1 line code
vscodeのフロントまでたどり着いたっぽい
bootstrap はフロントエンドライブラリ
ちょっと見辛いので改行入れてみた(あんまり改行できなかった)
"use strict"; const bootstrap=require("./bootstrap"),bootstrapNode=require("./bootstrap-node"),product=require("../product.json"); bootstrap.avoidMonkeyPatchFromAppInsights(),bootstrapNode.configurePortable(product),bootstrap.enableASARSupport(void 0),process.env.VSCODE_CLI="1",require("./bootstrap-amd").load("vs/code/node/cli");
requireでモジュールbootstrap
, bootstrapNode
, product
を読み込んでいる
最後にvs/code/node/cli
がloadされている。見に行ったらとてつもなく長い1 line codeがあった。
このくらいにしておこう...
build and debug
https://github.com/microsoft/vscode/wiki/How-to-Contribute
buildしてcode
したときの動きをdebugすると面白そう
ブラウザでも開けるのか
webアプリケーションって思ったよりも大きい括りかもしれない
debugはappとして起動しながらやろう
いろいろ準備して./scripts/code.sh
で起動できる
多分これがcodeコマンドに相当するはず
./scripts/code.sh ~/ws/notes
とやったら~/ws/notes
が起動後に開かれた
- これ自体はcodeコマンドとは別物みたい
ソースをみに行ったら、しっかりインデントがついたコードが見れた
GitHub - microsoft/vscode: Visual Studio Code
$resources/darwin/bin/code.sh . resources/darwin/bin/code.sh: line 10: /Users/matac/ws/src/github.com/microsoft/vscode/MacOS/Electron: No such file or directory
これがcodeコマンドだろうけど、パスがずれてるっぽくてうまく動かない
実機の場合は
/Applications/Visual Studio Code.app/Contents/Resources/app/bin/code
debug環境は
/Users/matac/ws/src/github.com/microsoft/vscode/resources/darwin/bin/code.sh
ちょっといじらないとcodeコマンドのdebugができない...?
読み書き聞き
最近文章を読むのも書くのもちょっと辛いです。
色々読みたいものはあって読むのですが、最中に色々考えてしまって内容がほとんど入ってきません。
別に何か悩みごとがあってその事ばかり考えてしまうというわけではなく、単純に読みながら別のことを考えている感じです。
環境の難易度が上がったのか、自分のレベルが下がったのかわからないですが困りました。
生活できなくなるくらい悪くはないですが、楽しくはないですね。
これは文章に限らず会話のときもそうです。人の話を聞いてるつもりでも、どうしても聞き漏らしがあります。
聞いてる最中に、言葉が脳を経由せずに右から左へ抜けていくのを本当に感じることが出来ます。
大抵は聞き返せば問題ないですが、あまり何回も聞き返すのは気が引けるし、相手も気分は良くないでしょう。
会話と読み書きの頻度が低くなっているのが原因だと思います。
あと、集中力も低下しているような気がしていて、それも原因の一つに挙げられるでしょう。
もとからこんなもんだった説もあります。
どちらにせよ、今の能力値では物足りないので言語を使用する頻度を増やして鍛えていきたいです。
ありがとうgit reflog
gitってブランチの移動やresetの履歴まで残ってるの初めて知りました。
深夜の私はなにか血迷い$git reset --hard HEAD^
(たぶんbranch間違えたか何か).
つらい気持ちになっていたときに諦めきれずに調べたら、reflogが出てきて作業内容を取り戻すことが出来ました。
めでたしめでたし。
1限は辛かった
できることなら1限という制度はなくなってほしいです。オンライン実施だったので授業が始まるギリギリまで寝てました。今回はオリエンテーションみたいな感じだったのでそれでも問題なしです。まあでも毎度のことですが、毎週1限に出ると慣れてきます。自分の場合は慣れの問題です。3コマも1限があるので早起きが得意になりそう。
卒業要件的には卒研・セミナーの単位で終わりです。しかし、他にも12単位くらい取るので大学のほうがいつもより暇になるということはなさそうです。
GitHub Actions
今日は初めてGitHub Actionsを触りました。学科にGitLabがあって、そっちではGitLab CI/CD, GitLab Runnerが使用できます(以下、GitLab CI)。しかし、GitHub ActionsとGitLab CIのyamlの書き方は違います。同じyamlを使い回すといったことはできないかも。 ある程度対応関係はありそうなので、変換してやれば使えるかもしれないという予想。特にそういった予定はないですが。
Migrating from GitLab CI/CD to GitHub Actions - GitHub Docs
ウマ娘
因子について教えてもらったのでうまぴょい目指してがんばります。