Coding_Gamesメモ_Balanced_ternary_computer_encode
Coding_Gamesメモ_Balanced_ternary_computer_encode
javaの学習にCoding_Games を知り、学習の記録としてメモ。
To debug:
System.err.println( );
を使うとデバックしやすくなる。(エラー出力は評価に影響しない)
内容
10進数→特殊3進数エンコーダー
ルール
10進数を1,0,T(-1) でできた3進数に変換する
例 8 = 1*(3^2) + 0*(3^1) + (-1)*(3^0) 8 = 9 + 0 + (-1) 8 = 10T 6 = 1*(3^2) + (-1)*(3^1) + 0*(3^0) 6 = 9 + (-3) + 0 6 = 1T0
インプット
1行目 10進数 N (-30000 < N < 30000)
アウトプット
入力を変換した3進数
使用したクラス
StringBuilder
(int) = StringBuilder.length()
文字数を出力
(StringBuilder) = StringBuilder.append( x )
x はboolean,char,int,String,Objectなど
文字列の後ろにxを追加する
Math
(double) = Math.pow((double) a , (double) b)
ab a のb 乗
(long) = Math.round( (double) x )
xの四捨五入を行う
引数が(float) だと戻値が(int) になる
入力は-30000~30000の範囲なので最大でも3進数10桁(59049) 以内になる考え方
最大桁から1桁づつ3進数に変換する
Coding_Games:https://www.codingame.com/ StringBuilder (Java Platform SE 8) - Oracle Cloud:https://docs.oracle.com/javase/jp/8/docs/api/java/lang/StringBuilder.html Math (Java Platform SE 8) - Oracle Cloud:http://docs.oracle.com/javase/jp/8/docs/api/java/lang/Math.html
ミシン修理
ミシン修理
ミシンの動きが悪くなったので分解して修理してみました
症状
- モーターの回転が悪い
- 針の位置調整用の側面ノブがモーター1方向だけ重い
修理
モーター軸の焼け付きと想像していたが分解してみるとモーターは軽く動く
モーターからの出力のベルトがプーリーのすり減りで壁側により、ギアと壁の間に食い込むようにハマっていた
(外しているベルト部分)
モーター位置を2mmほど移動させベルトと壁が干渉しないようにすることで修理できた
感想
ミシンの構造複雑
分解も可動パーツを動かしてできた細めのドライバーがギリギリ入る隙間からネジを外したりと難しい
もう少しネジの位置なんとかならなかったのか
縫い方のパターンをセットする部分が鍵みたいな構造で見ていて面白い
(似た構造オートマタで見たような気が)
Coding_Gamesメモ_Benford's_law
Coding_Gamesメモ_Benford's_law
javaの学習にCoding_Games を知り、学習の記録としてメモ。
To debug:
System.err.println( );
を使うとデバックしやすくなる。(エラー出力は評価に影響しない)
内容
ベンフォードの法則を使い、不正口座か判断する
ルール
口座履歴の最初の桁の1~9までの数字のどれか1つでもベンフォードの法則の比率からプラスマイナス10%を超えていれば"true"を出力する
ベンフォードの法則の割合
最初の桁の数字 : 出現率
1: 30.1% 2: 17.6% 3: 12.5% 4: 9.7% 5: 7.9% 6: 6.7% 7: 5.8% 8: 5.1% 9: 4.6%
インプット
1行目 口座履歴の内容量(N)
2行目から 口座履歴の内容
アウトプット
true / false
使用したクラス
String
(char[]) = String.toCharArray();
char配列を出力
とすると文字が数字になるため後の処理が楽になる考え方
(int) = (char C) - '1'
Coding_Games:https://www.codingame.com/ String (Java Platform SE 8) - Oracle Cloud:https://docs.oracle.com/javase/jp/8/docs/api/java/lang/String.html
Coding_Gamesメモ_TicTacToe
Coding_Gamesメモ_TicTacToe
javaの学習にCoding_Games を知り、学習の記録としてメモ。
To debug:
System.err.println( );
を使うとデバックしやすくなる。(エラー出力は評価に影響しない)
内容
○×ゲームの最後の1手を探す
ルール
○×ゲームで○のプレーヤーが1手で勝利できるときは勝利状況を、そうでなければfalse
を出力する
インプット
3×3マスのゲームボード
- "." 空白のスペース
- "X" プレーヤーXのスペース
- "O" プレーヤーOのスペース
アウトプット
プレーヤーO が勝利したゲームボード or false
使用したクラス
String
(char) = String.charAt( x )
x はint、 x番目の文字を出力
1手で勝利になる場所を見つけたい= 'O'2つと'.'1つのパターンを見つけたい考え方
それを探す関数を作り、縦横斜め探して見つけたら'.'を'O'に変えて出力
Coding_Games:https://www.codingame.com/ String (Java Platform SE 8) - Oracle Cloud:https://docs.oracle.com/javase/jp/8/docs/api/java/lang/String.html
Coding_Gamesメモ_XML_MDF-2016
Coding_Gamesメモ_XML_MDF-2016
javaの学習にCoding_Games を知り、学習の記録としてメモ。
To debug:
System.err.println( );
を使うとデバックしやすくなる。(エラー出力は評価に影響しない)
内容
一番重いタグを探す
ルール
開始タグと終了タグで作られた文字列の中で一番重いタグを探す
タグのルール
- 開始タグ アルファベット1文字
- 終了タグ
'-' + '(終了させたいタグ)'
- タグは重複することがある
- タグの重さは1/n の合計で計算する
例
"ab-bcd-d-c-ae-e"
a( b c[ d{} ] ) e()
タグ a 深さ 1 重さ 1/1
タグ b 深さ 2 重さ 1/2
タグ c 深さ 2 重さ 1/2
タグ d 深さ 3 重さ 1/3
タグ e 深さ 1 重さ 1/1
例2
"a-abab-b-a-b"
a() b( a[ b{} ] )
タグ 1つ目のa 深さ 1 重さ 1/1
タグ 1つ目のb 深さ 1 重さ 1/1
タグ 2つ目のa 深さ 2 重さ 1/2
タグ 2つ目のb 深さ 3 重さ 1/3
タグ a の重さ 1/1 + 1/2 = 1.5
タグ b の重さ 1/1 + 1/3 = 1.33...
インプット
1行目 タグ階層の文字列 sequence >= 1024
アウトプット
一番重いタグ
使用したクラス
String
(char) = String.toCharArray();
char配列を出力
タグ毎の重さを計算するためアルファベット分の配列を作る とすることでa-z から数字へ変換できる タグの配列に現在の階層の逆数を掛けて足していき、最後に一番大きいタグを出力する考え方
char C = 'c' ;
arphabet[ (int) C - (int) 'a' ]
重さは小数点以下になることがあるので小数点以下を扱える方が必要
計算は優先順位がある(()
*
+
など) ので一部が小数点以下を扱える型でもint同士の計算になってしまうことがある
Coding_Games:https://www.codingame.com/ String (Java Platform SE 8) - Oracle Cloud:https://docs.oracle.com/javase/jp/8/docs/api/java/lang/String.html 文字コード - 文字列 数値 変換 java:https://code.i-harness.com/ja-jp/q/a4fee2
Coding_Gamesメモ_May_the_Triforce_be_with_you!
Coding_Gamesメモ_May_the_Triforce_be_with_you!
javaの学習にCoding_Games を知り、学習の記録としてメモ。
To debug:
System.err.println( );
を使うとデバックしやすくなる。(エラー出力は評価に影響しない)
内容
AA の出力
ルール
*
で作られたN サイズの三角形3つが合わさった大きな三角形を出力する
自動トリミング機能防止のため、左上の文字を.
にする
その行で最後の*
の後は、直ぐに改行する
インプット
1行目 三角形1つあたりの行数 (N)
アウトプット
2*N 行の三角形のAA
使用したクラス
StringBuilder
(StringBuilder) = StringBuilder.append( x )
x はboolean,char,int,String,Objectなど
文字列の後ろにxを追加する
行と列のfor 文で1文字ずつ判定していく をそれぞれ分けると作りやすい考え方
大きな三角形を作るif 文
左下が三角になるように整形するif 文
右下が三角になるように整形するif 文
Coding_Games:https://www.codingame.com/
Coding_Gamesメモ_Darts
Coding_Gamesメモ_Darts
javaの学習にCoding_Games を知り、学習の記録としてメモ。
To debug:
System.err.println( );
を使うとデバックしやすくなる。(エラー出力は評価に影響しない)
内容
当たり判定
ルール
正方形の的があり、その中に直径が正方形の1辺と同じ円がある、その中に対角線が円の直径と同じひし形がある
それぞれの得点は、正方形5点、円10点、ひし形15点
座標からプレイヤー毎の得点を計算して出力する
- 的の中心の座標は0,0
- 正方形の的のXの範囲は-X(SIZE/2)~X(SIZE/2)
- 的の境界線の座標は的内として処理する
インプット
1行目 的のサイズ (SIZE)
2行目 プレイヤーの人数 (N)
2行目からN行 プレイヤー名 (name)
次の行 処理する座標数 (T)
次のT行 $(プレイヤー名) $(X座標) $(Y座標)
アウトプット
プレイヤー名と得点を得点が高い順に出力
得点が同じならリスト順に出力
使用したクラス
String
(boolean) = String.equals(x); (String == x) String は == では判定できないので代わりに使用する。
Math
x = Math.abs(y)
y の絶対値x を出力
(double) = Math.pow((double) a , (double) b)
ab a のb 乗
(double) = Math.sqrt( (double) x )
xの平方根を出力する
3種類の当たり判定について考える で判定できる考え方
的の中心の座標が0,0 なので
Coding_Games:https://www.codingame.com/ String (Java Platform SE 8) - Oracle Cloud:https://docs.oracle.com/javase/jp/8/docs/api/java/lang/String.html Math (Java Platform SE 8) - Oracle Cloud:http://docs.oracle.com/javase/jp/8/docs/api/java/lang/Math.html