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.)