2023年9月26日 星期二

[Angular] Material Date Picker Custom Date Format

1. Create a class that extends NativeDateAdapter


import { NativeDateAdapter, DateAdapter, MAT_DATE_FORMATS, MAT_DATE_LOCALE } from '@angular/material/core';

import { formatDate } from '@angular/common';


export const MY_FORMATS = {

parse: {

dateInput: 'yyyy-MM-dd', // date format used by the text field

},

display: {

dateInput: 'yyyy-MM-dd', // date format used by the text field

monthYearLabel: 'MMM-YYYY', // the date on the top left of the date picker

dateA11yLabel: 'LL',

monthYearA11yLabel: 'MM-yyyy',

}

};


export class MyDateAdaper extends NativeDateAdapter {

override format(date: Date, displayFormat: Object): string {

return formatDate(date, displayFormat+'', this.locale);

}

}



2. In your component class, specify we are using MyDateAdapter in @Component.

import { Component, OnInit, ViewChild } from '@angular/core';
import { FormBuilder, FormControl } from '@angular/forms';
import { Case } from '../case/case';
import { CaseAct } from '../case/caseAct';
import { CaseAsmt } from '../case/caseAsmt';
import { StatOrdSummary } from '../case/statOrdSummary';
import { SelectItem } from '../case/selectItem';
import { Observable, Subject, interval, of, mergeMap, concatMap, switchMap } from 'rxjs';
import { HeroService } from '../service/hero.service';
import { FactoryService } from '../service/factory.service';
import { debounceTime, distinctUntilChanged, filter, map, scan, reduce, tap } from 'rxjs/operators';
import { MatTabGroup } from '@angular/material/tabs';
import { MatSnackBar } from '@angular/material/snack-bar';
import { MatCheckboxModule } from '@angular/material/checkbox';
import { MatRadioModule } from '@angular/material/radio';
import { MatDialog, MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
import { CommonDialogComponent } from '../dialog/common-dialog/common-dialog.component';
import { DateAdapter, MAT_DATE_FORMATS, MAT_DATE_LOCALE } from '@angular/material/core';
import { MyDateAdaper, MY_FORMATS } from '../common/myDateFormat';
import { TRANSLOCO_SCOPE } from '@ngneat/transloco';

@Component({
selector: 'app-case',
templateUrl: './case.component.html',
styleUrls: ['./case.component.css'],
providers: [
{
provide: DateAdapter,
useClass: MyDateAdaper,
},
{
provide: MAT_DATE_FORMATS, 
useValue: MY_FORMATS
},
],
})
export class CaseComponent implements OnInit {
.....
}

3. In html template, nothing to config for the date format.

<mat-form-field appearance="fill" class="form-field ">
<mat-label>Iss Dt</mat-label>
<input matInput [matDatepicker]="picker" [(ngModel)]="a.ordrIsuDt" />
<mat-hint>YYYY-MM-DD</mat-hint>
<mat-datepicker-toggle matIconSuffix [for]="picker"></mat-datepicker-toggle>
<mat-datepicker #picker></mat-datepicker>
</mat-form-field>

2023年9月6日 星期三

CSS values and units

https://developer.mozilla.org/en-US/docs/Learn/CSS/Building_blocks/Values_and_units 



UnitNameEquivalent to
cmCentimeters1cm = 37.8px = 25.2/64in
mmMillimeters1mm = 1/10th of 1cm
QQuarter-millimeters1Q = 1/40th of 1cm
inInches1in = 2.54cm = 96px
pcPicas1pc = 1/6th of 1in
ptPoints1pt = 1/72nd of 1in
pxPixels1px = 1/96th of 1in

2023年8月24日 星期四

[Java] Partition equal subset sum

 class Solution {

    public boolean canPartition(int[] nums)
    {
        int n = nums.length;
        int sum = 0;
        for(int i=0; i<n; i++)
        {
            sum+=nums[i];
        }
       
        if(sum%2 !=0 ) return false;

        sum = sum/2;
        boolean[][] possible = new boolean[n+1][sum+1];
        for(int i=0; i<=n; i++) possible[i][0] = true;

        for(int i=1; i<=n; i++)
        {
            for(int j=1; j<=sum; j++)
            {
                if(nums[i-1] > j)
                {
                    possible[i][j] = possible[i-1][j];
                }
                else
                {
                    possible[i][j] = possible[i-1][j-nums[i-1]] || possible[i-1][j];
                }
            }
        }
        return possible[n][sum];
    }
};


[Java] Next Permutation

 class Solution {


    public boolean nextPermutation(int[] nums) {

        int ind1=-1;

        int ind2=-1;

        // step 1 find breaking point 

        for(int i=nums.length-2;i>=0;i--){

            if(nums[i]<nums[i+1]){

                ind1=i;

                break;

            }

        }

        // if there is no breaking  point 

        if(ind1==-1){

            reverse(nums,0);

return false;

        }

        

        

// step 2 find next greater element and swap with ind2

for(int i=nums.length-1;i>=0;i--){

if(nums[i]>nums[ind1]){

ind2=i;

break;

}

}


swap(nums,ind1,ind2);

// step 3 reverse the rest right half

reverse(nums,ind1+1);

        return true;

    }

    void swap(int[] nums,int i,int j){

        int temp=nums[i];

        nums[i]=nums[j];

        nums[j]=temp;

    }

    void reverse(int[] nums,int start){

        int i=start;

        int j=nums.length-1;

        while(i<j){

            swap(nums,i,j);

            i++;

            j--;

        }

    }

}

2023年7月19日 星期三

[Java] Rotate matrix clockwise in place

 class Solution {

    public void rotate(int[][] matrix) {

        int a=0,b=matrix.length-1,tmp;

        while(a<=b)

        {

            for(int k=0;k<=b-a-1;k++)

            {

                tmp = matrix[a][a+k];

                matrix[a][a+k] = matrix[b-k][a];

                matrix[b-k][a] = matrix[b][b-k];

                matrix[b][b-k] = matrix[a+k][b];

                matrix[a+k][b] = tmp;

            }

            a++;

            b--;

        }


    }

}

2023年3月31日 星期五

CSS Battle #104 Amegakure

 <div a></div><div b></div><div c></div><div d></div><div e></div><div f></div><style>body{background:#000}

div{position:absolute;left:50%;top:50%}

div[a]{background:#37385A;width:240;height:120;border-radius:20px;transform:translate(-50%,-50%)}

div[b]{background:#9897AE;width:200;height:80;border-radius:10px;transform:translate(-50%,-50%)}

div[c]{background:#000;width:10;height:10;border-radius:10px;transform:translate(-85px,-50%);box-shadow:0 -20px #000,0 20px #000,160px 0 #000,160px -20px #000,160px 20px #000}

div[d]{background:#C0C3DB;width:51;height:80;transform:translate(-50%,-50%) skew(-15deg,0deg)}

div[e]{background:#000;width:10;height:50;border-radius:10px;transform:translate(-35px,-50%);box-shadow:20px 0 #000,40px 0 #000,60px 0 #000}

CSS Battle #106 Ryuk's Apple

 <div a></div><div b></div><div c></div><div d></div><div e></div><div f></div><style>body{background:#000}

div{position:absolute;left:50%;top:50%}

div[a]{background:#D4392D;width:100;height:120;border-radius:50%;transform:translate(-20px,-60px) rotate(30deg)}

div[b]{background:#D4392D;width:100;height:120;border-radius:50%;transform:translate(-80px,-60px) rotate(-30deg)}

div[c]{background:#000;width:60;height:70;border-radius:50%;transform:translate(-111px,-54px) rotate(45deg)}

div[d]{background:#000;width:60;height:70;border-radius:50%;transform:translate(-111px,-14px) rotate(45deg)}

div[e]{background:#D4392D;width:10;height:70;transform:translate(-50%,-80px)}

CSS Battle #100 Beo

 <div a></div><div b></div><div c></div><div d></div><div e></div><div f><div g></div></div><div h></div><div i></div><div j></div><div k></div><div l></div>

<style>body{background:#14313E}

div{position:absolute;left:50%;top:50%}

div[a]{background:#FFDF00;width:294;height:40;border-radius:5px;transform:translate(-50%,-50%)}

div[b]{background:#FFDF00;width:274;height:150;border-radius:20px;transform:translate(-50%,-50%)}

div[c]{background:#14313E;width:224;height:100;border-radius:10px;transform:translate(-50%,-50%)}

div[d]{background:#14313E;width:194;height:154;transform:translate(-50%,-50%)}

div[e]{background:#FFDF00;width:30;height:154;transform:translate(-7px,-90px) rotate(45deg)}

div[f]{background:#14313E;width:50;height:154;transform:translate(-33px,-91px) rotate(-45deg)}

div[g]{background:#FFDF00;width:30;height:154;transform:translate(-50%,-50%)}

div[h]{background:#FFDF00;width:21;height:21;transform:translate(-73px,-79px);box-shadow:125px 0 #FFDF00}

div[i]{background:#FFDF00;width:20;height:80;transform:translate(-50px,-6px) rotate(-45deg)}

div[j]{background:#FFDF00;width:20;height:80;transform:translate(30px,-6px) rotate(45deg)}

div[k]{background:#FFDF00;width:20;height:80;transform:translate(-57px,2px) rotate(45deg);border-radius:18px}

div[l]{background:#FFDF00;width:20;height:80;transform:translate(37px,2px) rotate(-45deg);border-radius:18px}

2023年2月9日 星期四

PSP《超級機器人大戰A》隱藏機體/人物/物品

 隱藏機體:

1、ミネルバX:

7話時在打倒暗黑大將軍前用甲児說得即會變NPC,讓其生存到過關即可得到。

(注意,如果在打倒暗黑大將軍後再說得將會ミネルバX自爆)

2、アプサラス+高機動型ザク:

6話西羅(シロー)說得愛娜(アイナ)(擊墜或逃跑均無影響)

7話擊墜基尼阿斯(ギニアス)時愛娜仍然生存至過關

(愛娜必會偕同高機動型ザク加入,但不滿足條件アプサラス泡湯)

3、シャア専用ゲルググ:

7話擊墜夏亞(シャア)

4、Gファイター or フルアーマーガンダム:2者只能得其一

到第8話視塞拉(セイラ)與阿姆羅(アムロ)的擊墜數相比

塞拉擊墜數高》Gファイター

阿姆羅擊墜數高》フルアーマーガンダム

兩者相等》Gファイター

5、量産型グレートマジンガー:第30話鉄也擊墜數30或以上

6、サザビー:

31話柯特羅(クワトロ)擊墜數30或以上

7、フルアーマーZZガンダム:

31話分支選擇『小バーム星方面へ向かう』

35話捷度(ジュドー)擊墜數5或以上

36話ZZ就會變成全武裝ZZ

隱藏人物:

1、麗莎(リサ):

4話結束後龍馬(リョウ)擊墜數5或以上

(另,測試過蓋塔3人組總擊墜數達到5就可以,不一定是龍馬一人,尚未完全驗證)

2、早已女美雪(早乙女ミユキ):

7話龍馬、隼人、武藏分別與其戰鬥一次,最後由龍馬說得

3、鳳(フォウ=ムラサメ)或羅莎米亞(ロザミア=バダム):2者只能得其一

16話由加美由(カミーユで)說得,2者均可說得後擊墜

18話再次由加美由說得,只能說得一個,另一個擊墜(可以不是加美由擊墜)

過關後先說得者成為同伴

(用MAP同時擊落也無效)

4、琪麗佳(キリカ):

24話由デューク與之發生戰鬥,並發生交戰EVENT

將增援母艦ズリル擊墜

再用マリア說得即可仲間

(注意,如果マリア與デューク機體合體將無法完成說得,必須分離)

 

5、愛娜(アイナ=サハリン)

參考上面

6、大豪寺凱 ダイゴウジ=ガイ(本名:山田二郎エステバリス・ガイ):

8話選宇宙路線

9話凱生存,並且天河明人(アキト)、撫子(ナデシコ)HP不能低於30%下全滅敵人過關

7、拉拉。辛 ララァ(愛美號エルメス):

8話分支選宇宙路線

11話阿姆羅(アムロ)在夏亞健在時分別與夏亞(シャア)、拉拉(ララァ)戰鬥

塞拉再分別與夏亞、拉拉戰鬥發生交戰EVENT

12話先擊墜夏亞再由阿姆羅說得拉拉

8、鉄甲鬼(メカ鉄甲鬼):

15話成為NPC,讓其生存過關即可仲間

9、武藏(ムサシ)死亡回避法:

15話時龍馬(リョウ)擊墜數達15或以上

10、蝴蝶鬼(メカ蝴蝶鬼):

16話分支選『ビックファルコンへ行く』

ゲッタードラゴン メカ蝴蝶鬼交戰後雙方仍然生存

再由龍馬(リョウ)說得

11、一木金太&知恵(ケロット):

16話選分支『南原コネクションへ行く』,17話加入

12、阿倫比 アレンビー=ビアズリー(ノーベルガンダム):

18話由多蒙(ドモン)說得(說得後可以擊墜)

19話先用萊茵(レイン)說得,再用多蒙說得

最後多蒙用MAP外的武器將其擊墜

(注意,說得順序錯誤後機體爆炸,仲間不能)

13、璞露 エルピー=プル(キュベレイmk-II 璞露茨 プルツー(キュベレイmk-II):

28話,先將古萊明(グレミー)擊墜

加美由(カミーユ)與璞露交戰,交戰後2人仍然生存將發生EVENT,璞露仲間

璞露仲間後擊落璞露茨

28話過關,璞露茨仲間

14、諾裡斯 ノリス=パッカード(グフカスタム):

28話過關時仍生存

(在28話愛娜、西羅與其交戰有EVENT,非必要條件))

15、蒼鷹マイヨ=プラート(ファルゲン):

30話過關時若葉健(ケーン)擊墜數達到30或以上

31話作為增援仲間

16、白鳥九十九(ダイテツジン):

31話分支選『木連のいる方面へ向かう』

33話正式可用

17、東方不敗マスターアジア(マスターガンダム)

8話分支選擇『地上に殘る』

16話分支選『ギアナ高地に向かう』

19話阿倫比 (アレンビー)仲間

28話多蒙(ドモン)擊墜數30或以上,第29話連同風雲再起仲間

(最好都用多蒙打倒東方不敗)

18、風雲再起:(東方不敗收得失敗死亡時)

21話過關時多蒙擊墜數達30或以上

 

隱藏武器:

1BOSS追加武裝 ボロットプレッシャーパンチ【ボスボロット】:

8話選宇宙路線

9話阿強(ボス)擊墜數5或以上

10話追加ボロットプレッシャーパンチ』

2、孔巴拉特V追加武裝 グランダッシャー【コンバトラーV】:

16話分支選『南原コネクションへ行く』

28話追加『グランダッシャー』

3、超電磁ボールVの字斬り【ボルテスⅤ】:

16話分支選『ビックファルコン行く』

28話追加『超電磁ボールVの字斬り』

4、必殺烈風正拳突き改【ダイモス】鬥將戴莫斯:

16話分支選『ギアナ高地行く』

28話追加『殺烈風正拳突き改』

5合體攻撃石破ラブラブ天驚拳 【Gガンダム+ライジングガンダム】:

25話選分支『デビル機動要塞』

26話使用可能

6、珍寶3 ION CANNON

把勝平的珍寶3全改,會追加武器ION CANNON

7、Z GUNDAM 追加武器

Z GUNDAM全改造,會追加新武器