本章では、必要なツールを導入する方法と、簡単な動かし方とを学びます。
まずは、ファイルを配置するフォルダを作ります。
ファイルがあちこちに散らばっていては、作業に不便です。そこで、1つフォルダを作り、ここに全てのファイルやフォルダを入れることにします。今後、このフォルダを「基点フォルダ」と呼びます。基点フォルダはわかりやすい位置にあるのが好ましいので、迷ったらとりあえずデスクトップに置いてしまいましょう。名前はvlrfsasmとします。
さて、基点フォルダの中についても、散らかしたくはありません。新しいことを始めるときや、構造が混迷してしまい、刷新したいときには、必ず新しいフォルダを作ります。これは、Vlrfsasmに限らず、何にでも適用して損はないことですから、癖にしましょう。本講習では、この新しいフォルダを「作業フォルダ」と呼び、章ごとに作ってもらいます。
必要なアプリと、その導入方法とを紹介します。
まず、Vlrfsasmを導入します。Githubで公開しているので、このリンクからダウンロードし、zipファイルを基点フォルダ内に解凍してください。解凍されたフォルダはVlrfsasm_v1.1という名前になりますが、このままではアップデート毎に変えなくてはならないので、assemblerと改名しておいてください。
次に、バッチファイルを作ります。メモ帳などのテキストエディタを起動し、以下の内容をコピーして貼り付けてください。
- @set sourceFolder=%CD%
- @cd ..\assembler
- start vlrfsasm %sourceFolder%\result.txt %sourceFolder%\message.log %sourceFolder%\source.vlra def\common.vlra
そして、基点フォルダ内に、assemble.batという名前で、保存してください。文字コードはUTF-8にしましょう。このバッチファイルは、各章で使い回します。
本講習では少ししか使いませんが、vlrfsasmはもともとバイナリファイルを扱うために作ったので、使う機会はあると思います。データを読み出すだけですので、何でも構いません。使い慣れているものがあればそれを使ってください。参考までに、Vlrfsasmの作者はFavBinEditを使っています。いずれにせよ、各ソフトウェアの指示に従ってインストールしてください。
メモ帳で構いませんが、これも使い慣れているものを使ってください。ただし、拡張表示機能などのファイルは提供していません。また、スタートメニューにショートカットを貼っておくと便利でしょう。
それでは、動作確認を兼ねて、少し動かしてみましょう。
基点フォルダ内にhelloというフォルダを作り、さきほど作ったバッチファイルをコピーして入れてください。また以下のソースコードを、source.vlraという名前でこのフォルダに保存してください。Vlrfsasmのソースコードは、常に.vlraという拡張子を付け、文字コードはUTF-8で保存してください。
- [文字列「Hello world!」を出力します]
- {.; ; (c.convertSbS8 "Hello world!")}
バッチファイルをダブルクリックして実行すると、Vlrfsasmが実行されます。うまくいけば、helloフォルダ内に、result.txtとmessage.logが出力されているはずです。上手く行かないときは、ファイル名や文字コードなどを確認しましょう。メモ帳では、ファイルメニューの「名前を付けて保存」から、文字コードを設定して保存し直せます。
さて、生成された2つのファイルを開き、中身が以下のようになっていれば成功です。ただし、message.logの赤下線部には、実行日時が書かれています。これはコンピュータの現地時刻なので、時差を含みます。また、その下に出力ファイルのパスなどが表示されますが、青下線部のように個人情報を含むことがあるので、誤って公開しないよう注意しましょう。
- Hello world!
- Vlrfsasm v0.7 2021-11-27 18:00
- 15:Complete
- C:\Users\vlrfsg\Desktop\vlrfsasm\hello\result.txt
なお、青下線部は架空のものです。
本章の内容は以上です。Vlrfsasmは勝手に終了していますから、開いたテキストエディタなどを閉じれば片付けも終わりです。
ここはVlrfsasm講習の内容ではありません。
| 0 | 1 | 2 | 3 | 4 | |
| 1 | 2 | 4 | 8 | 16 | |
| 1 | 2.72 | 7.39 | 20.1 | 54.6 | |
| 1 | 3 | 9 | 27 | 81 |
- #include <bits/stdc++.h>
- using namespace std;
- int main() {
- int n, k;
- cin >> n >> k;
- vector<int> a(n);
- for (int i = 0; i < n; i++) cin >> a[i];
- bool ok = false;
- ビット全探索のループ/*ビット全探索開始*/
- for (int b = 0; b < 1 << n; b++) {
- int sum = 0;
- for (int i = 0; i < n; i++) {
- 対応するビットが1のとき/*ビットによる分岐*/
- if ((b >> i) & 1) {
- sum += a[i];
- }
- }
- if (sum == k) ok = true;
- }
- /*ビット全探索終了*/
- if (ok) cout << "Yes" << endl;
- else cout << "No" << endl;
- return 0;
- }