外付けの記憶媒体

メモを取る習慣構築の為の実験的手段

2020年年初めエントリを書き忘れた人の春休みエントリ

大きなカテゴリから小さいカテゴリへ遷移していくことにより自分のやりたいことを洗い出していく

    • Linux,OS学(CTF全体の総合的な知識のアップデートに努める)

  • 数学
    • 数論
  • 英語
  • 趣味
    • Wiiのデータ復旧と修理
    • Rasberry Piでアニメ録画
    • 同人雑誌
    • go勉強会

こうしてみると積み本やべぇなw とりあえず買っただけの本とか多いので確実に処理していきたい。

記号のみPowerう〇こshell芸入門

Aizu Advent Calendar 2019の13日目の記事です。

また、9日遅れでの投稿でもあります。誠に申し訳ございません…。

 

adventar.org

 

序論

ところで、皆さんはシェル芸人と呼ばれるものをご存知でしょうか。

シェル芸人とは、USP友の会様によると

シェル芸 とは、主にUNIXオペレーティングシステムにおいて「マウスも使わず、ソースコードも残さず、GUIツールを立ち上げる間もなく、あらゆる調査・計算・テキスト処理を CLI端末へのコマンド入力 一撃で 終わらせること」(USP友の会会長・上田隆一による定義)である。
この技術を持つ人物を シェル芸人 という。

 

https://qiita.com/t_nakayama0714/items/bfe4852e0535858ee662

www.usptomo.com

 

 

一時期話題になっていたojichatやその派生系のhimechatも優秀なシェル芸人達によって日々生み出されています。わくわくしますね!

 

僕も偉大な先輩方に近づけるよう、日々精進しております。

 

そんなシェル芸界隈ではう〇こをあらゆる手段で出力することが流行っています。(大嘘…でもないのか?)

 

 これは一番最近観測したkingunko

 

しかし、bashでうんこを出力するなんてありきたりなことじゃ感動が薄れるのではないか?と思い、

そうだPowershellで書いたら面白いんじゃないか

となり今にいたります。

 

ただし、ただpowershellを使っても

 

echo うんこ

 

とかで終わってしまっては面白くないので、今回はbase64で書いたうんこをデコードするコマンド群を書いて、さらにそのワンライナー自体を難読化させることを目標に作ることにしました。

すなわち、目標としては

echo "44GG44KT44GT" | base64 -dと似たようなことをコマンドレットのみで実現したい

 となります。

 

ちなみに、熟練したシェル芸人は目でbase64をデコードするといわれています。恐ろしいですね。

 

本文

概要

これを実現する為に必要なことは ざっくりまとめると以下の二つです。

  1. 任意のアルファベットを生成する
  2. それを連結させてeval()する

ここで言うevalとは、bashで用いられるものであり主な用途は

evalコマンドが威力を発揮する場面は2つあります。1つはあるコマンドが出力した文字列自体をコマンドとして実行すること、もう1つは入れ子になった)変数を評価することです。

です。

www.atmarkit.co.jp

 

これはpowershellではInvoke-Expressionと呼ばれるコマンドレットで実現可能です。これで、引数に指定した文字列をコマンドとして実行することを可能にします。

また、これはiexでaliasされています。

iex自体を実行するには実行演算子&を用います。

 

"[char]文字コード番号 + [char]文字コード番号 + ... | iex" | &"iex"

イメージはこんな感じ。

 

さて、任意のアルファベットを用意する方法ですが、int型の数値をchar型

にキャストできることを利用します。

 

例えば、"[char]72"をiexにかけてやると、"H"が出力されます。

 

つまり、文字コードを作り、それをなんらかの手段で作ったcharでキャストしてiexにかければいいわけです。

 

数値を作る

 

powershellでは${}で囲むとほとんどの記号を変数にできる性質を持ちます。

 

まず初めに、変数をすべて記号化する為、以下のようにします。

${;}=+$()
${=}=${;} #0
${+}=++${;} #1
${@}=++${;} #2
${.}=++${;} #3
${[}=++${;} #4
${]}=++${;} #5
${(}=++${;} #6
${)}=++${;} #7
${&}=++${;} #8
${|}=++${;} #9

 

 

まず変数${;}を用意します。$()は空の部分式で、$nullと等しくなります。これに+を付けると$nullがintにキャストされて0になります。それを${;}に代入。

 

そしてインクリメントして完成です。

 

”Char”を作る

 "r"は"True"から、"c","h","a"は連想配列から生み出します。

 

Trueは自動変数"$?"から生成することができます。"$?"は前のコマンドが正常終了されればTrue,異常終了されればFalseを吐き出すものです。

 

ここでは、Trueの二文字目のみを取得したいので、文字列にインデックスを付けるとそのインデックスの場所にある文字を取得できることを利用して

 

"$?[${+}]" 

このように記述します。

 

次に"c","h","a"ですが、空の連想配列@{}を用意して

これを部分式$()の中に格納し、"$(@{})"としてstringにキャストすると"System.Collections.Hashtable"という文字列が得られることを利用して実現します。

 

以上をまとめると

${"}="["+"$(@{})"[${)}]+"$(@{})"["${+}${|}"]+"$(@{})"["${@}${=}"]+"$?"[${+}]+"]"

 

 

${"} #char

 

"iex"を作る

"i"と"e"は"System.Collections.Hashtable"に含まれているので、xをどうにかして工面する方針で考えます。

 

これはSystem.stringでカバーします。

System.stringにはInsert()というメソッドがあり、

string Insert(int startIndex, string value)

 ここにxが含まれているので、このxをなんとかして取り出したいです。

 

これは、

PowerShell

<オブジェクト>.メソッド名

とするとメソッド情報が格納されたPSMethodオブジェクトを取得できることを利用して解決できます。またPSMethodオブジェクトをstringにキャストするとそのメソッドのシグネチャが文字列として得られます。

 

つまり

$method="".insert "$method"

このようなコードを記号で記述すればいいわけです。

”insert”については、これまでの文字にすべて含まれているので

 

${;}="".("$(@{})"["${+}${[}"]+"$(@{})"["${+}${(}"]+"$(@{})"[${=}]+"$(@{})"[${[}]+"$?"[${+}]+"$(@{})"[${.}]) 

 

これで${;}にはPSMethodオブジェクトが格納されて、 "${;}"["${@}${)}"]とすれば"x"が得られます。

 

以上をまとめて

${;}="$(@{})"["${+}${[}"]+"$(@{})"[${[}]+"${;}"["${@}${)}"]

 

 

${;} #iex

 

組み立てる 

 後は実行したいコードを文字コードに変換するだけです。

今回はpowershell上でbase64デコードによりうんこを表示するので、ワンライナーは以下のようになります。

 

$b64txt="44GG44KT44GT";$byte = [System.Convert]::FromBase64String($b64txt);$txt = [System.Text.Encoding]::UTF8.GetString($byte);write-output $txt

 

 

これを一度手元で文字コード番号に変換してあげる必要があります………

 

当然全て手で変換するのは骨が折れるので簡易的なスクリプトを組みました。

 

$str = [string]"hogefugapiyo";( [char[]]"$str" | %{'${"}'+ ([int]$_ -replace "0",'${=}' -replace "1",'${+}' -replace "2",'${@}' -replace "3",'${.}' -replace "4",'${[}' -replace "5",'${]}' -replace "6",'${(}' -replace "7",'${)}' -replace "8",'${&}' -replace "9",'${|}') }) -join '+'

 

本当はparam関数とか使ってもっと賢いスクリプトファイル作っていろいろやりたかったけど上手くいかなかったので手打ちしました。。。。。

 

 

出力

以下がコードで

${;}=+$();${=}=${;};${+}=++${;};${@}=++${;};${.}=++${;};${[}=++${;};${]}=++${;};${(}=++${;};${)}=++${;};${&}=++${;};${|}=++${;};${"}="["+"$(@{})"[${)}]+"$(@{})"["${+}${|}"]+"$(@{})"["${@}${=}"]+"$?"[${+}]+"]";{;}="".("$(@{})"["${+}${[}"]+"$(@{})"["${+}${(}"]+"$(@{})"[${=}]+"$(@{})"[${[}]+"$?"[${+}]+"$(@{})"[${.}]);${;}="$(@{})"["${+}${[}"]+"$(@{})"[${[}]+"${;}"["${@}${)}"];
"${"}${.}${(}+${"}${|}${&}+${"}${]}${[}+${"}${]}${@}+${"}${+}${+}${(}+${"}${+}${@}${=}+${"}${+}${+}${(}+${"}${(}${+}+${"}${.}${[}+${"}${]}${@}+${"}${]}${@}+${"}${)}${+}+${"}${)}${+}+${"}${]}${@}+${"}${]}${@}+${"}${)}${]}+${"}${&}${[}+${"}${]}${@}+${"}${]}${@}+${"}${)}${+}+${"}${&}${[}+${"}${.}${[}+${"}${]}${|}+${"}${.}${(}+${"}${|}${&}+${"}${+}${@}${+}+${"}${+}${+}${(}+${"}${+}${=}${+}+${"}${.}${@}+${"}${(}${+}+${"}${.}${@}+${"}${|}${+}+${"}${&}${.}+${"}${+}${@}${+}+${"}${+}${+}${]}+${"}${+}${+}${(}+${"}${+}${=}${+}+${"}${+}${=}${|}+${"}${[}${(}+${"}${(}${)}+${"}${+}${+}${+}+${"}${+}${+}${=}+${"}${+}${+}${&}+${"}${+}${=}${+}+${"}${+}${+}${[}+${"}${+}${+}${(}+${"}${|}${.}+${"}${]}${&}+${"}${]}${&}+${"}${)}${=}+${"}${+}${+}${[}+${"}${+}${+}${+}+${"}${+}${=}${|}+${"}${(}${(}+${"}${|}${)}+${"}${+}${+}${]}+${"}${+}${=}${+}+${"}${]}${[}+${"}${]}${@}+${"}${&}${.}+${"}${+}${+}${(}+${"}${+}${+}${[}+${"}${+}${=}${]}+${"}${+}${+}${=}+${"}${+}${=}${.}+${"}${[}${=}+${"}${.}${(}+${"}${|}${&}+${"}${]}${[}+${"}${]}${@}+${"}${+}${+}${(}+${"}${+}${@}${=}+${"}${+}${+}${(}+${"}${[}${+}+${"}${]}${|}+${"}${.}${(}+${"}${+}${+}${(}+${"}${+}${@}${=}+${"}${+}${+}${(}+${"}${.}${@}+${"}${(}${+}+${"}${.}${@}+${"}${|}${+}+${"}${&}${.}+${"}${+}${@}${+}+${"}${+}${+}${]}+${"}${+}${+}${(}+${"}${+}${=}${+}+${"}${+}${=}${|}+${"}${[}${(}+${"}${&}${[}+${"}${+}${=}${+}+${"}${+}${@}${=}+${"}${+}${+}${(}+${"}${[}${(}+${"}${(}${|}+${"}${+}${+}${=}+${"}${|}${|}+${"}${+}${+}${+}+${"}${+}${=}${=}+${"}${+}${=}${]}+${"}${+}${+}${=}+${"}${+}${=}${.}+${"}${|}${.}+${"}${]}${&}+${"}${]}${&}+${"}${&}${]}+${"}${&}${[}+${"}${)}${=}+${"}${]}${(}+${"}${[}${(}+${"}${)}${+}+${"}${+}${=}${+}+${"}${+}${+}${(}+${"}${&}${.}+${"}${+}${+}${(}+${"}${+}${+}${[}+${"}${+}${=}${]}+${"}${+}${+}${=}+${"}${+}${=}${.}+${"}${[}${=}+${"}${.}${(}+${"}${|}${&}+${"}${+}${@}${+}+${"}${+}${+}${(}+${"}${+}${=}${+}+${"}${[}${+}+${"}${]}${|}+${"}${+}${+}${|}+${"}${+}${+}${[}+${"}${+}${=}${]}+${"}${+}${+}${(}+${"}${+}${=}${+}+${"}${[}${]}+${"}${+}${+}${+}+${"}${+}${+}${)}+${"}${+}${+}${(}+${"}${+}${+}${@}+${"}${+}${+}${)}+${"}${+}${+}${(}+${"}${.}${@}+${"}${.}${(}+${"}${+}${+}${(}+${"}${+}${@}${=}+${"}${+}${+}${(}|${;}"|&${;};

 

出力結果がこちら

 

f:id:taikohaijin44:20191221185729p:plain

unko

楽しいですね() 

 

 

過程での苦労した点、結果など 

1.変数に文字を代入する時、ダブルクォーテーションが入れ子になってめんどくさい

$str = [string]" $b64txt="44GG44KT44GT""

 

こうなると正しく認識されないわけですね。このバグ探しを全部エンコードし終わった後にやるから精神がすり減る。病むコレ。視界がバグる。

 

まぁエスケープシーケンスはよく使うから詳しくなれてよかった。

ちなみにPowerShell は、エスケープシーケンスとしてバッククォート(`)を使用します。

 

 2.変数をエンコードする時に、その変数自身を参照?してからエンコードする

 

つまり、$aを翻訳したくとも、その$aの中身を翻訳しようとするのでバグる。nullが入ってる。

 

3.エディタ使わずにやったので疲れた。

 

今度からおとなしくVScode使います。

 

 

参考記事様

https://web.archive.org/web/20190420195441/http://perl-users.jp/articles/advent-calendar/2010/sym/11

https://binary-pulsar.hatenablog.jp/entry/2018/09/01/000000

https://win.just4fun.biz/?PowerShell/PowerShell%E3%81%A7Base64%E3%81%AE%E3%82%A8%E3%83%B3%E3%82%B3%E3%83%BC%E3%83%89%E3%81%A8%E3%83%87%E3%82%B3%E3%83%BC%E3%83%89

 

Github cheatsheet

ようやくまとめるとこまで漕ぎつけた…

 

1.ローカルリポジトリを作る

 

自分の置きたい場所にファイルを配置する。

(E.g.) cd ~/Desktop

          mkdir hogefuga

          cd hogefuga

 

ここで必ずgit initする。

恐らくこれ忘れてsrc refspec master does not match anyみたいなエラー吐かれてしまった。

 

2.addしてcommit

1の工程を終えたら、次はお目当てのものを何か作った後にaddしていい感じにする。その後、コミットメッセージを添えていい感じに

 

touch hoge.txt

git add <filename>

git commit -m "time files like an arrow"

 

3.branch切る(よくわかってない)

git checkout -b <branch name>

 

4.github上に新しいリポジトリ

画面左にある緑ボタンを押して、あとはフォームの指示に従っていい感じに。その後、remoteしてローカルとすり合わせて?(要理解)、push

 

git remote add origin https://github.com/spokey/mynewrepository.git

 

git push -u origin master

 

git push origin mybranch

 

困ったときはgit statusでこまめに確認。これで必要最低限なんとか耐える。

 

https://product.hubspot.com/blog/git-and-github-tutorial-for-beginners

上記リンクを参考にしたので、こまったらこれ見るかググるか各自対処すること。

MSYS2を入れたときの話

WindowsにTerminalを導入する

ユーザー直下の諸設定ファイルをいじる

https://qiita.com/u1and0/items/b4c3217868cf8bafb085

上記のサイトを参考にした。

* .bash_profile : 起動時に一度だけ読み込まれる
* .bashrc : 起動時に一度だけ読み込まれる
* .bash_aliases : alias書くところ
* .bash_function : function書くところ
* etc/fstab,etc/profile : 環境変数書くところ[f:id:taikohaijin44:20190802172631p:plain][f:id:taikohaijin44:20190802172631p:plain]
* .inputrc : キー操作を書くところ

とのこと、ファイルを読み込む順番としては、以下の通り

https://www.atmarkit.co.jp/ait/articles/0203/12/news001_2.html

f:id:taikohaijin44:20190802172715p:plain
読み込む順番

ユーザーがログインすると、まず/etc/profileを読み込み、次に~/.bash_profileを読み込みます。~/.bash_profileが存在しない場合は、~/.bash_loginを読み込みます。~/.bash_loginもない場合は~/.profileを読み込みます。~/.bash_logoutは、ログアウト時に読み込まれるファイルです。

とある。まあechoでいじった時に、profileの次にailiasesが読み込まれたからその順なのだと思ふ

.bash_aliasesの設定について

なんかqiitaのどっかのサイトから拾ってきた貼り付けました

個人的に感動したのが

ls = 'ls --color=auto --show-control-chars --time-style=long-iso -FH' alias grep='grep --color'

色付けて表示するやつ。効率爆上がり。--colorで実現できるのね

補足: https://qiita.com/zaburo/items/9194cd9eb841dea897a0 上記のサイトでプロンプト(ユーザーとか表示するあの$みたいなやつ)が設定できるみたい。やろうかな

vimをいじりやすくするために、設定ファイルをいじる

https://qiita.com/iwaseasahi/items/0b2da68269397906c14c

上記のサイトを参考にしている。

" ファイルを上書きする前にバックアップを作ることを無効化 set nowritebackup " ファイルを上書きする前にバックアップを作ることを無効化 set nobackup " vim の矩形選択で文字が無くても右へ進める set virtualedit=block " 挿入モードでバックスペースで削除できるようにする set backspace=indent,eol,start " 全角文字専用の設定 set ambiwidth=double " wildmenuオプションを有効(vimバーからファイルを選択できる) set wildmenu

"---------------------------------------- " 検索 "---------------------------------------- " 検索するときに大文字小文字を区別しない set ignorecase " 小文字で検索すると大文字と小文字を無視して検索 set smartcase " 検索がファイル末尾まで進んだら、ファイル先頭から再び検索 set wrapscan " インクリメンタル検索 (検索ワードの最初の文字を入力した時点で検索が開始) set incsearch " 検索結果をハイライト表示 set hlsearch

"---------------------------------------- " 表示設定 "---------------------------------------- " エラーメッセージの表示時にビープを鳴らさない set noerrorbells " Windowsでパスの区切り文字をスラッシュで扱う set shellslash " 対応する括弧やブレースを表示 set showmatch matchtime=1 " インデント方法の変更 set cinoptions+=:0 " メッセージ表示欄を2行確保 set cmdheight=2 " ステータス行を常に表示 set laststatus=2 " ウィンドウの右下にまだ実行していない入力中のコマンドを表示 set showcmd " 省略されずに表示 set display=lastline " タブ文字を CTRL-I で表示し、行末に $ で表示する set list " 行末のスペースを可視化 set listchars=tab:^\ ,trail:~ " コマンドラインの履歴を10000件保存する set history=10000 " コメントの色を水色 hi Comment ctermfg=3 " 入力モードでTabキー押下時に半角スペースを挿入 set expandtab " インデント幅 set shiftwidth=2 " タブキー押下時に挿入される文字幅を指定 set softtabstop=2 " ファイル内にあるタブ文字の表示幅 set tabstop=2 " ツールバーを非表示にする set guioptions-=T " yでコピーした時にクリップボードに入る set guioptions+=a " メニューバーを非表示にする set guioptions-=m " 右スクロールバーを非表示 set guioptions+=R " 対応する括弧を強調表示 set showmatch " 改行時に入力された行の末尾に合わせて次の行のインデントを増減する set smartindent " スワップファイルを作成しない set noswapfile " 検索にマッチした行以外を折りたたむ(フォールドする)機能 set nofoldenable " タイトルを表示 set title " 行番号の表示 set number " ヤンクでクリップボードにコピー set clipboard=unnamed,autoselect " Escの2回押しでハイライト消去 nnoremap :nohlsearch " シンタックスハイライト syntax on " すべての数を10進数として扱う set nrformats= " 行をまたいで移動 set whichwrap=b,s,h,l,<,>,[,],~ " バッファスクロール set mouse=a

" auto reload .vimrc augroup source-vimrc autocmd! autocmd BufWritePost vimrc source $MYVIMRC | set foldmethod=marker autocmd BufWritePost gvimrc if has('gui_running') source $MYGVIMRC augroup END

" auto comment off augroup auto_comment_off autocmd! autocmd BufEnter * setlocal formatoptions-=r autocmd BufEnter * setlocal formatoptions-=o augroup END

" HTML/XML閉じタグ自動補完 augroup MyXML autocmd! autocmd Filetype xml inoremap <C-o> autocmd Filetype html inoremap <C-o> augroup END

" 編集箇所のカーソルを記憶 if has("autocmd") augroup redhat " In text files, always limit the width of text to 78 characters autocmd BufRead *.txt set tw=78 " When editing a file, always jump to the last cursor position autocmd BufReadPost * \ if line("'\"") > 0 && line ("'\"") <= line("$") | \ exe "normal! g'\"" | \ endif augroup END endif

デフォルトの矢印キーで自由に移動できないのめっちゃ不便だったからうれしい。

*set guioptions-=T  *set number ↑ 範囲指定してヤンク。自動でクリップボードに貼り付け。くそ便利。

endifとか見る限り、シェルっぽく記述できるみたい。時間を見つけて、深く掘り下げてみよう。

pythonのインストールと諸設定

http://samurai375.hatenablog.com/entry/2019/04/11/133459

このサイト参考にした。

主の環境では、プロキシの設定までやらないといけないようだが、その必要はない。

pacman -Su でパッケージの更新を行い、pacman -S pythonpythonパッケージをインストールしていく。

pythonインタプリタ型言語であるからして、C言語で言うgccに当たるものをインストールしなければいけないことをすっかり忘れていた。

pacman -S winpty 起動時の読み込まれて欲しいから、.bashrcに以下のように記述する。

alias python = 'winpty python.exe'

後はpipとnumpyを入れて終い。

Windows10でVirtual Boxの環境構築を試みた結果死ぬほど苦戦した話ver1.01

CTF勉強会でVB使いそうなので、それまでに環境構築終わらさねば

  • Error one
  • Error two
  • Error three

 

  • Error one

終了コード : E_INVALIDARG (0x80070057)なるエラーを吐かれました。対処には下記のサイトを参考にしました。

https://shimi-dai.com/virtualbox-uuid-e_invalidarg-0x80070057/

これは、恐らくすでにOSが立ち上げられているのに、なんでもう一回

作るん?ということだと思ったので、消して作り直したら解決

 

f:id:taikohaijin44:20190823113302p:plain

 

  • Error two 

content: Failed to load API DLL : WinHvPlatform.dll

VERR_MODULE_NOT_FOUND:vid.dll:

VERR_MODULE_NOT_FOUND(VERR_NEM_INIT_FAILED)

 

f:id:taikohaijin44:20190823113504p:plain

 

https://qiita.com/shinyay/items/9ca418e5d2ae71567f53

 ↑

Virtual boxとHyper-vは共存できない話。

 

BIOS画面にて、virtulizationをenableにして、hyper-vを無効化すべし。

 

素直に実行しましたが、上記のエラーと全く同じものが出てきて死。

https://qiita.com/keiichiroy/items/481f83db66c892e443cf

 

ここで結構核心に迫ってそうな記事を見つけました。

 

この記事によると、どうやら仮想化支援機能の有無も深く関わってくるらしい。

 

そもそもintel VTってなんや?

https://www.atmarkit.co.jp/fsys/kaisetsu/085intelvt/intelvt.html

↑これらしい

 

  • Error three

システム側が、無効な設定とエラーを吐きまくっていたので、その指示に従うようにして以下の項目を確認した。

 

システム->アクセラレーション->VT-x/AMD-vを有効化

 

すると、エラー内容が多少変わったのでここに記す。

 

f:id:taikohaijin44:20190825150120p:plain

error 3

 

 

要約すると、vt-x とhyper-vは共存できないという話。らしい

f:id:taikohaijin44:20190825160433p:plain

bcdedit

hypervisorlaunchtypeがっつりoffになっとるがな

 

https://hiro20180901.hatenablog.com/entry/2018/12/24/060000

これ見るとhyper-v必要臭いし、やるしかねーか

 

https://qiita.com/ryotkn/items/d3a3a99b92ecfc3d83ca

そういやこんな記事あったなぁ…

 

現時点でやらんといかんこと整理すると

  1. vbmanagerでadapter作成
  2. そのvbmanagerが起動せんから、トラブルシューティング
  3. そもそもhyper-vと共存できるのか調査

3については周辺記事が存在するので、まとめる。

https://forums.virtualbox.org/viewtopic.php?f=6&t=90853

https://hiro20180901.hatenablog.com/entry/2019/02/09/070016

 

さて、私は上記の1,2に取り掛からねばならない。

 

調べものしてたら以下の記事にたどり着いたのだが、九割九分これな気がする… 

要約すると、セキュリティソフトのプロトコルフィルタリングがめんどいとかなんとか

https://blog.officekoma.co.jp/2018/04/vagrant-up-failed-to-create-host-only.html

https://qiita.com/iscale821/items/9f561ba4b34ce1b7700c

 

上記の指示に従っていろいろやっとんのやけど、どうにもうまくいかん。

 いろいろオフにしたりしとるんやけどなぁ…

 

 https://www.virtualbox.org/ticket/14040cversion=0&cnum_hist=8#comment:48

公式質問板覗いたらこんなの見つけた。

 

f:id:taikohaijin44:20190911230809p:plain

hoge

 

なにやってもこの様…

え、セキュリティソフトアンインストールしてVBも入れなおして管理者権限でvboxmanage.exe hostonlyif createしてこれなんですけど…

 

原因は別にあると考えた方がよさそう

 

上のTodoリスト割と筋通ってて草。 

 

https://stackoverflow.com/questions/43580778/failed-to-create-the-host-only-adapter-windows-10-docker-virtualbox

また例によってネットの海で遭難してたらよさそうな島に漂着した。

 

And uninstall HyperV Virtual ethernet Adapter from the device manager if you see it (this blocks usually creation of virtualbox virtual network (Host-Only Ethernet adapter))

↑着目したのはこの部分。後は明日の自分が頑張ってくれる。(解決してない)

 

ついに長きに渡る問題が解決した!!!!!!!!!!!!!

 

f:id:taikohaijin44:20190913013412p:plain

solved

https://powerpro.at.webry.info/201905/article_23.html

原因としては、defender。コア分離のメモリ整合性という項目がOnになってるとその機能の全てをVt上に押し込んで、他が入ってこないように保護してしまう。Vtを使いたい他のアプリケーションソフトがVtを使おうとすると拒否されるようになるのだ。それが、セキュリティとして強固という理由でもある。だって、そこにOS機能以外入れないんだもん。ってことだ。

 

らしい、、、、

 

報われた、、、、俺の二か月、、、、、、、、、

Atcoder伸びんので武者修行に出ます(AOJプログラミング入門編)

探さないでください

 

現状:

AtCoder複数回参加するけど、全然アルゴリズム思い浮かばん。てか、問題を考えることに対する耐性がなってないと思う

問題と解説:

  • ITP1_8_A

配列に入れて、サイズだけfor文回して、何か臨機応変に大文字にしたり小文字にしたりすればなんとかなんじゃね

 

//以下が私のコード

#include<stdio.h>
#include<ctype.h>

int main(){
char array[1200];

scanf("%c",array);

for(int i=0;i<sizeof(array);i++){
if(islower(array[i])){
printf("%c",toupper(array[i]));
} else {
printf("%c",tolower(array[i]));
}

}

 

return 0;
}

 

//参考にしたのが次のコード

#include<stdio.h>

#include<ctype.h>


int main(void){

char ch;

while(1) {

scanf("%c", &ch);

if(islower(ch)) printf("%c", toupper(ch));

else if(isupper(ch)) printf("%c", tolower(ch));

else printf("%c", ch);

 

if(ch=='\n') break; }

 

return 0;

}

 

文字だけだとchar型でいいんだろうけど、ASCIIに直すときは配列の方がいいみたい

 

  • ITP1_8_B
  • ITP1_8_C
  • ITP1_8_D

反省と対策:

 

~~ここまでにして寝ます

懲りずにABC134に参加した話

何かうまくいく問題もあるけど、Dまで安定して解けるようにはなりたい

 

問題:

https://atcoder.jp/contests/abc134

上記の通り、いつでも復習できるな

 

解説:

A - Dodecagon

半径 a の円に内接する正十二角形の面積は 3a2 であることが知られています。

整数 r が与えられるので、半径 r の円に内接する正十二角形の面積を求めて下さい。

 

入力は以下の形式で標準入力から与えられます。

r

正十二角形の面積を表す整数を出力してください。

 

………とのこと、まぁこれは流石にね

  1. #include<stdio.h>
  2.  
  3. int main(){
  4. int r,sum;
  5.  
  6. scanf("%d",&r);
  7. sum = 3*r*r;
  8.  
  9. printf("%d",sum);
  10.  
  11. return 0;
  12. }

 見たまんま記法

 

 

 

B - Golden Apple

一列に並んだ N 本の林檎の木のうちいずれかに黄金の林檎が実ると言われています。

そこで、何人かの監視員を配置してどの林檎の木もいずれかの監視員に監視された状態にしたいです。

それぞれの監視員は N 本の木のうちいずれかに配置します。便宜上、これらの木に 1 から N までの番号をつけます。番号 i の木に配置された監視員は、番号が iD 以上 i+D 以下のすべての林檎の木を監視します。

条件を満たすために少なくとも何人の監視員を配置する必要があるか求めてください。

 

入力は以下の形式で標準入力から与えられる。

N D

条件を満たすために配置する必要のある監視員の人数の最小値を出力せよ。

 

問題の入力例を見てみると、6 2と入力した場合、答えが2になることから、観測範囲は自分を含めて入力されたDだけ増えることが分かった。(例の場合は観測者を含めて3本まで見れる)以下が実際の解答例である

 

  1. #include<stdio.h>
  2.  
  3. int main(){
  4. int n,d,range;
  5. scanf("%d%d",&n,&d);
  6. range=d*2+1;
  7.  
  8. if(n%range==0) printf("%d",n/range);
  9. else printf("%d",n/range+1);
  10.  
  11. return 0;
  12. }

range=d*2+1の意味は、観測者は-d分まで観測の手を広げることができるから、増えた範囲dを二倍することで解決。本数を範囲で割って、余りが0になったら最小値出力、余りが出たら割れない分1だけ足して出力。シンプルな問題で助かった。

 

 

C - Exception Handling

長さ の数列 が与えられます。 以上 以下の各整数

に対し、次の問いに答えてください。

  • 数列中の

を除く 個の要素のうちの最大の値を求めよ。

 

入力は以下の形式で標準入力から与えられる。


 

行出力せよ。 行目 () に、数列中の を除く 個の要素のうちの最大の値を出力すること。

 

 

 

 

反省、改善点: