Apex에서 준도 코키 요시 DFA를 만들었습니다.
8971 단어 ApexSalesforce준도 코키 요시
준도코 with Apex by @sho7650
언어 분석적으로 DFA에서
컴파일러를 만들었을 때의 지식이 도움이되었습니다.ズン
와 ドコ
의 토큰에 의해 상태 천이해 가는 DFA 를 작성하는 것으로, 현재 상태의 파악과 다음의 상태의 취득을 간략화하고 있습니다.
그건 그렇고, 재귀 함수 버전은 Tail Recursion이므로 루프에서 실행하는 것이 좋습니다. 키요시보다 먼저 스택 오버플로가 올지도!
ZunDokoKiyoshi.apxcpublic class ZunDokoKiyoshi {
public Enum ZDState {Z, ZZ, ZZZ, ZZZZ, ZZZZD}
public static Map<Set<Object>, ZDState> dfa = new Map<Set<Object>, ZDState>{
new Set<Object>{null, 'ズン'} => ZDState.Z,
new Set<Object>{ZDState.Z, 'ズン'} => ZDState.ZZ,
new Set<Object>{ZDState.ZZ, 'ズン'} => ZDState.ZZZ,
new Set<Object>{ZDState.ZZZ, 'ズン'} => ZDState.ZZZZ,
new Set<Object>{ZDState.ZZZZ, 'ドコ'} => ZDState.ZZZZD
};
// 再帰関数バージョン
public static void zundokoRecursion(ZDState state){
if(state == ZDState.ZZZZD){
System.debug('キ・ヨ・シ!');
} else {
String token = Math.random() > 0.5 ? 'ズン' : 'ドコ';
System.debug(token);
zundokoRecursion(dfa.get(new Set<Object>{state, token}));
}
}
// ループバージョン
public static void zundokoLoop(){
for(ZDState state = null; state != ZDState.ZZZZD;){
String token = Math.random() > 0.5 ? 'ズン' : 'ドコ';
System.debug(token);
state = dfa.get(new Set<Object>{state, token});
}
System.debug('キ・ヨ・シ!');
}
}
실행 결과
재귀 함수 버전
루프 버전
Reference
이 문제에 관하여(Apex에서 준도 코키 요시 DFA를 만들었습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/hrk623/items/97636aaa4503a1a53041
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
public class ZunDokoKiyoshi {
public Enum ZDState {Z, ZZ, ZZZ, ZZZZ, ZZZZD}
public static Map<Set<Object>, ZDState> dfa = new Map<Set<Object>, ZDState>{
new Set<Object>{null, 'ズン'} => ZDState.Z,
new Set<Object>{ZDState.Z, 'ズン'} => ZDState.ZZ,
new Set<Object>{ZDState.ZZ, 'ズン'} => ZDState.ZZZ,
new Set<Object>{ZDState.ZZZ, 'ズン'} => ZDState.ZZZZ,
new Set<Object>{ZDState.ZZZZ, 'ドコ'} => ZDState.ZZZZD
};
// 再帰関数バージョン
public static void zundokoRecursion(ZDState state){
if(state == ZDState.ZZZZD){
System.debug('キ・ヨ・シ!');
} else {
String token = Math.random() > 0.5 ? 'ズン' : 'ドコ';
System.debug(token);
zundokoRecursion(dfa.get(new Set<Object>{state, token}));
}
}
// ループバージョン
public static void zundokoLoop(){
for(ZDState state = null; state != ZDState.ZZZZD;){
String token = Math.random() > 0.5 ? 'ズン' : 'ドコ';
System.debug(token);
state = dfa.get(new Set<Object>{state, token});
}
System.debug('キ・ヨ・シ!');
}
}
재귀 함수 버전
루프 버전
Reference
이 문제에 관하여(Apex에서 준도 코키 요시 DFA를 만들었습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/hrk623/items/97636aaa4503a1a53041텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)