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方向だけ重い

修理

モーター軸の焼け付きと想像していたが分解してみるとモーターは軽く動く
モーターからの出力のベルトがプーリーのすり減りで壁側により、ギアと壁の間に食い込むようにハマっていた

f:id:tiridukano_yagigame:20200922214249j:plain
(外しているベルト部分)
モーター位置を2mmほど移動させベルトと壁が干渉しないようにすることで修理できた

感想

ミシンの構造複雑
分解も可動パーツを動かしてできた細めのドライバーがギリギリ入る隙間からネジを外したりと難しい
もう少しネジの位置なんとかならなかったのか

f:id:tiridukano_yagigame:20200922214305j:plain

縫い方のパターンをセットする部分が鍵みたいな構造で見ていて面白い
(似た構造オートマタで見たような気が)

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配列を出力

考え方

  • 最初の桁を探して割合を出す
  • 割合がベンフォードの法則からプラスマイナス10%を超えていたら出力を"true"にする
(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配列を出力

考え方

タグ毎の重さを計算するためアルファベット分の配列を作る

char C = 'c' ;
arphabet[ (int) C - (int) 'a' ]

とすることでa-z から数字へ変換できる
重さは小数点以下になることがあるので小数点以下を扱える方が必要
計算は優先順位がある(() * +など) ので一部が小数点以下を扱える型でも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点
f:id:tiridukano_yagigame:20200916223828p:plain
座標からプレイヤー毎の得点を計算して出力する

  • 的の中心の座標は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 なので

  • 正方形 X,Y の絶対値がSIZE/2 以下だと範囲内
  • 円 sqrt(X2 +Y2) がSIZE/2 以下だと範囲内
  • ひし形 X,Y の絶対値の合計がSIZE/2 以下だと範囲内

で判定できる

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