Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ReDoS 検出の最先端 recheck の紹介 / State of the Art of ...
Search
TSUYUSATO Kitsune
March 04, 2022
Programming
9
3.4k
ReDoS 検出の最先端 recheck の紹介 / State of the Art of ReDoS Detection
YAPC::Japan::Online 2022
での発表資料です。
recheck:
https://makenowjust-labs.github.io/recheck
TSUYUSATO Kitsune
March 04, 2022
Tweet
Share
More Decks by TSUYUSATO Kitsune
See All by TSUYUSATO Kitsune
YAPC::Japan::Online 2022で発表して WEB+DB PRESSに記事を寄稿した話
makenowjust
0
9
Regular Expressions, REXML, Automata Learning
makenowjust
0
240
オートマトン学習しろ / Do automata learning
makenowjust
3
150
#kaigieffect LT 2024 - rexml-css_selector: A REXML extension for supporting CSS selector
makenowjust
1
300
RubyKaigi 2024 - Make Your Own Regex Engine!
makenowjust
1
1.2k
正規表現改善報告する回 / Regexp memoization progress report
makenowjust
2
520
Make Regexp#match much faster
makenowjust
1
2.5k
ReDoS 検出プログラム recheck の開発 / recheck: ReDoS check program
makenowjust
0
120
Integrated Shrinking による 高階関数の自動生成 / PRO-2020-4 Generating Higher-Order Functions by Integrated Shrinking
makenowjust
0
130
Other Decks in Programming
See All in Programming
Subclassing, Composition, Python, and You
hynek
3
180
sqlcを利用してsqlに型付けを
kamiyam
0
240
CSC509 Lecture 04
javiergs
PRO
0
150
perl for shell, awk and sed programmers
mackee
1
750
"noncopyable types" の使いどころについて考えてみた
andpad
0
160
게임 개발하던 학생이이 세계에선 안드로이드 개발자?
pangmoo
0
110
Serverless renderování Webových komponent
rarous
PRO
0
110
"Swarming" をコンセプトに掲げるアジャイルチームのベストプラクティス
boykush
2
260
データフレームライブラリ徹底比較
daikikatsuragawa
2
110
C#および.NETに対する誤解をひも解く
ymd65536
0
310
Vue :: Better Testing 2024
up1
1
410
PHPを書く理由、PHPを書いていて良い理由 / Reasons to write PHP and why it is good to write PHP
seike460
PRO
5
480
Featured
See All Featured
Testing 201, or: Great Expectations
jmmastey
38
7k
Designing for Performance
lara
604
68k
Fireside Chat
paigeccino
32
3k
The Power of CSS Pseudo Elements
geoffreycrofte
71
5.3k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
7
590
BBQ
matthewcrist
85
9.2k
StorybookのUI Testing Handbookを読んだ
zakiyama
26
5.1k
Docker and Python
trallard
40
3k
Side Projects
sachag
452
42k
Statistics for Hackers
jakevdp
796
220k
Design by the Numbers
sachag
278
19k
Designing for humans not robots
tammielis
249
25k
Transcript
ϠόΠɻ
3F%P4ϠόΠɻ
·͡ͰϠόΠΑɺϚδϠόΠɻ
ϠόΠɻӉϠόΠɻ·͡ͰϠόΠΑɺϚδϠόΠɻ ӉϠόΠɻ ·͍ͣɻ͏͍ͳΜͯΜ͡Όͳ͍ɻ͍ɻ ͍ͱ͔ͬͯ ʮ౦ژυʔϜݸͿΜ͘Β͍ʁʯ
ͱ͔ɺ͏ɺͦ͏͍͏Ϩϕϧ͡Όͳ͍ɻ Կ͠ΖແݶɻεήΣʂͳΜ͔୯Ґͱ͔ແ͍ͷɻԿ௶ͱ͔Կᶨͱ͔Λӽͯ͠Δɻແݶ͍ͩ͠ɻ ͔͠ுͯ͠ΔΒ͍͠ɻϠόΠΑɺுͩΑɻ ͩͬͯී௨ٿͱ͔ு͠ͳ͍͡ΌΜɻͩͬͯࣗͷ෦ͷ࿓Լ͕ͩΜͩΜ৳ͼͯͬͨΒࠔΔ͡ΌΜɻτΠϨͱ͔ԕ͍ͱ͔ࠔΔ ͬ͠ΐɻ ௨ֶ࿏͕৳ͼͯɺҰͷͱ͖ెาͩͬͨͷʹɺࡾͷͱ͖ࣗసंͰೋ࣌ؒͱ͔ٽͬ͘͠ΐɻ ͔ͩΒٿͱ͔ு͠ͳ͍ɻͷΘ͔ΔϠπͩɻ ͚ͲӉϠόΠɻͦΜͳͷؾʹ͠ͳ͍ɻு͠·͘Γɻ࠷ԕ͔͘Β౸ୡ͢Δޫͱ͔؍ଌͯ͠Α͘Θ͔Μͳ͍͘Β͍ԕ͍ɻϠό ͗͢ɻ ແݶ͍͚ͬͯͨͲɺ͔ͨ͠͠Β༗ݶ͔͠Μͳ͍ɻͰ༗ݶͬͯࣄʹ͢Δͱ ʮ͡Ό͋ɺӉͷͷ֎ଆͬͯφχΑʁʯ ͬͯࣄʹͳΔ͠ɺͦΕ୭Θ͔Βͳ͍ɻϠόΠɻ୭ʹ͔Βͳ͍ͳΜͯੌ͗͢Δɻ ͋ͱפ͍ɻέϧϏϯɻઁࢯͰݴ͏ͱʵˆɻϠόΠɻפ͗͢ɻόφφͰఝଧͭՋͳ͘ࢮ͵ɻා͍ɻ ͦΕʹԿແ͍ɻΨϥΨϥɻͦΕʹͷΜͼΓɻԯͱ͔ฏؾͰग़ͯ͘ΔɻԯͯɻখֶੜͰݴΘͶ͐Αɺ࠷ۙɻ ͳΜͭͬͯӉഅྗ͕ੌ͍ɻແݶͱ͔ฏؾͩ͠ɻ ͏ͪΒͳΜͯແݶͱ͔͔͔ͨͩੵܭࢉͰग़͖͚ͯͨͩͰ্ख͘ѻ͑ͳ͍͔Β༗ݶʹͨ͠ΓɺGͱஔ͍ͯΈͨΓɺԋࢉࢠͬͨΓ͢ ͷʹɺ ӉશવฏؾɻແݶΛແݶͷ··ѻͬͯΔɻੌ͍ɻϠόΠɻ ͱʹ͔͘و༷ΒɺӉͷϠό͞ΛͬͱΔ͖ͩͱࢥ͍·͢ɻ ͜ͷίϐϖΛɺ
ϠόΠɻӉϠόΠɻ·͡ͰϠόΠΑɺϚδϠόΠɻ ӉϠόΠɻ ·͍ͣɻ͏͍ͳΜͯΜ͡Όͳ͍ɻ͍ɻ ͍ͱ͔ͬͯ ʮ౦ژυʔϜݸͿΜ͘Β͍ʁʯ
ͱ͔ɺ͏ɺͦ͏͍͏Ϩϕϧ͡Όͳ͍ɻ Կ͠ΖແݶɻεήΣʂͳΜ͔୯Ґͱ͔ແ͍ͷɻԿ௶ͱ͔Կᶨͱ͔Λӽͯ͠Δɻແݶ͍ͩ͠ɻ ͔͠ுͯ͠ΔΒ͍͠ɻϠόΠΑɺுͩΑɻ ͩͬͯී௨ٿͱ͔ு͠ͳ͍͡ΌΜɻͩͬͯࣗͷ෦ͷ࿓Լ͕ͩΜͩΜ৳ͼͯͬͨΒࠔΔ͡ΌΜɻτΠϨͱ͔ԕ͍ͱ͔ࠔΔ ͬ͠ΐɻ ௨ֶ࿏͕৳ͼͯɺҰͷͱ͖ెาͩͬͨͷʹɺࡾͷͱ͖ࣗసंͰೋ࣌ؒͱ͔ٽͬ͘͠ΐɻ ͔ͩΒٿͱ͔ு͠ͳ͍ɻͷΘ͔ΔϠπͩɻ ͚ͲӉϠόΠɻͦΜͳͷؾʹ͠ͳ͍ɻு͠·͘Γɻ࠷ԕ͔͘Β౸ୡ͢Δޫͱ͔؍ଌͯ͠Α͘Θ͔Μͳ͍͘Β͍ԕ͍ɻϠό ͗͢ɻ ແݶ͍͚ͬͯͨͲɺ͔ͨ͠͠Β༗ݶ͔͠Μͳ͍ɻͰ༗ݶͬͯࣄʹ͢Δͱ ʮ͡Ό͋ɺӉͷͷ֎ଆͬͯφχΑʁʯ ͬͯࣄʹͳΔ͠ɺͦΕ୭Θ͔Βͳ͍ɻϠόΠɻ୭ʹ͔Βͳ͍ͳΜͯੌ͗͢Δɻ ͋ͱפ͍ɻέϧϏϯɻઁࢯͰݴ͏ͱʵˆɻϠόΠɻפ͗͢ɻόφφͰఝଧͭՋͳ͘ࢮ͵ɻා͍ɻ ͦΕʹԿແ͍ɻΨϥΨϥɻͦΕʹͷΜͼΓɻԯͱ͔ฏؾͰग़ͯ͘ΔɻԯͯɻখֶੜͰݴΘͶ͐Αɺ࠷ۙɻ ͳΜͭͬͯӉഅྗ͕ੌ͍ɻແݶͱ͔ฏؾͩ͠ɻ ͏ͪΒͳΜͯແݶͱ͔͔͔ͨͩੵܭࢉͰग़͖͚ͯͨͩͰ্ख͘ѻ͑ͳ͍͔Β༗ݶʹͨ͠ΓɺGͱஔ͍ͯΈͨΓɺԋࢉࢠͬͨΓ͢ ͷʹɺ ӉશવฏؾɻແݶΛແݶͷ··ѻͬͯΔɻੌ͍ɻϠόΠɻ ͱʹ͔͘و༷ΒɺӉͷϠό͞ΛͬͱΔ͖ͩͱࢥ͍·͢ɻ ͜ͷਖ਼نදݱͰϚονϯά͢Δͱɺ /^.+(Ӊ|ϠόΠ|[\s\S])*.+$/
ϠόΠɻӉϠόΠɻ·͡ͰϠόΠΑɺϚδϠόΠɻ ӉϠόΠɻ ·͍ͣɻ͏͍ͳΜͯΜ͡Όͳ͍ɻ͍ɻ ͍ͱ͔ͬͯ ʮ౦ژυʔϜݸͿΜ͘Β͍ʁʯ
ͱ͔ɺ͏ɺͦ͏͍͏Ϩϕϧ͡Όͳ͍ɻ Կ͠ΖແݶɻεήΣʂͳΜ͔୯Ґͱ͔ແ͍ͷɻԿ௶ͱ͔Կᶨͱ͔Λӽͯ͠Δɻແݶ͍ͩ͠ɻ ͔͠ுͯ͠ΔΒ͍͠ɻϠόΠΑɺுͩΑɻ ͩͬͯී௨ٿͱ͔ு͠ͳ͍͡ΌΜɻͩͬͯࣗͷ෦ͷ࿓Լ͕ͩΜͩΜ৳ͼͯͬͨΒࠔΔ͡ΌΜɻτΠϨͱ͔ԕ͍ͱ͔ࠔΔ ͬ͠ΐɻ ௨ֶ࿏͕৳ͼͯɺҰͷͱ͖ెาͩͬͨͷʹɺࡾͷͱ͖ࣗసंͰೋ࣌ؒͱ͔ٽͬ͘͠ΐɻ ͔ͩΒٿͱ͔ு͠ͳ͍ɻͷΘ͔ΔϠπͩɻ ͚ͲӉϠόΠɻͦΜͳͷؾʹ͠ͳ͍ɻு͠·͘Γɻ࠷ԕ͔͘Β౸ୡ͢Δޫͱ͔؍ଌͯ͠Α͘Θ͔Μͳ͍͘Β͍ԕ͍ɻϠό ͗͢ɻ ແݶ͍͚ͬͯͨͲɺ͔ͨ͠͠Β༗ݶ͔͠Μͳ͍ɻͰ༗ݶͬͯࣄʹ͢Δͱ ʮ͡Ό͋ɺӉͷͷ֎ଆͬͯφχΑʁʯ ͬͯࣄʹͳΔ͠ɺͦΕ୭Θ͔Βͳ͍ɻϠόΠɻ୭ʹ͔Βͳ͍ͳΜͯੌ͗͢Δɻ ͋ͱפ͍ɻέϧϏϯɻઁࢯͰݴ͏ͱʵˆɻϠόΠɻפ͗͢ɻόφφͰఝଧͭՋͳ͘ࢮ͵ɻා͍ɻ ͦΕʹԿແ͍ɻΨϥΨϥɻͦΕʹͷΜͼΓɻԯͱ͔ฏؾͰग़ͯ͘ΔɻԯͯɻখֶੜͰݴΘͶ͐Αɺ࠷ۙɻ ͳΜͭͬͯӉഅྗ͕ੌ͍ɻແݶͱ͔ฏؾͩ͠ɻ ͏ͪΒͳΜͯແݶͱ͔͔͔ͨͩੵܭࢉͰग़͖͚ͯͨͩͰ্ख͘ѻ͑ͳ͍͔Β༗ݶʹͨ͠ΓɺGͱஔ͍ͯΈͨΓɺԋࢉࢠͬͨΓ͢ ͷʹɺ ӉશવฏؾɻແݶΛແݶͷ··ѻͬͯΔɻੌ͍ɻϠόΠɻ ͱʹ͔͘و༷ΒɺӉͷϠό͞ΛͬͱΔ͖ͩͱࢥ͍·͢ɻ /^.+(Ӊ|ϠόΠ|[\s\S])*.+$/ ඵ͔͔Δɻ ˞.BD#PPL1SP J ্Ͱ/PEF KTͰ࣮ߦͨ݁͠Ռ
ϠόΠɻӉϠόΠɻ·͡ͰϠόΠΑɺϚδϠόΠɻ ӉϠόΠɻ ·͍ͣɻ͏͍ͳΜͯΜ͡Όͳ͍ɻ͍ɻ ͍ͱ͔ͬͯ ʮ౦ژυʔϜݸͿΜ͘Β͍ʁʯ
ͱ͔ɺ͏ɺͦ͏͍͏Ϩϕϧ͡Όͳ͍ɻ Կ͠ΖແݶɻεήΣʂͳΜ͔୯Ґͱ͔ແ͍ͷɻԿ௶ͱ͔Կᶨͱ͔Λӽͯ͠Δɻແݶ͍ͩ͠ɻ ͔͠ுͯ͠ΔΒ͍͠ɻϠόΠΑɺுͩΑɻ ͩͬͯී௨ٿͱ͔ு͠ͳ͍͡ΌΜɻͩͬͯࣗͷ෦ͷ࿓Լ͕ͩΜͩΜ৳ͼͯͬͨΒࠔΔ͡ΌΜɻτΠϨͱ͔ԕ͍ͱ͔ࠔΔ ͬ͠ΐɻ ௨ֶ࿏͕৳ͼͯɺҰͷͱ͖ెาͩͬͨͷʹɺࡾͷͱ͖ࣗసंͰೋ࣌ؒͱ͔ٽͬ͘͠ΐɻ ͔ͩΒٿͱ͔ு͠ͳ͍ɻͷΘ͔ΔϠπͩɻ ͚ͲӉϠόΠɻͦΜͳͷؾʹ͠ͳ͍ɻு͠·͘Γɻ࠷ԕ͔͘Β౸ୡ͢Δޫͱ͔؍ଌͯ͠Α͘Θ͔Μͳ͍͘Β͍ԕ͍ɻϠό ͗͢ɻ ແݶ͍͚ͬͯͨͲɺ͔ͨ͠͠Β༗ݶ͔͠Μͳ͍ɻͰ༗ݶͬͯࣄʹ͢Δͱ ʮ͡Ό͋ɺӉͷͷ֎ଆͬͯφχΑʁʯ ͬͯࣄʹͳΔ͠ɺͦΕ୭Θ͔Βͳ͍ɻϠόΠɻ୭ʹ͔Βͳ͍ͳΜͯੌ͗͢Δɻ ͋ͱפ͍ɻέϧϏϯɻઁࢯͰݴ͏ͱʵˆɻϠόΠɻפ͗͢ɻόφφͰఝଧͭՋͳ͘ࢮ͵ɻා͍ɻ ͦΕʹԿແ͍ɻΨϥΨϥɻͦΕʹͷΜͼΓɻԯͱ͔ฏؾͰग़ͯ͘ΔɻԯͯɻখֶੜͰݴΘͶ͐Αɺ࠷ۙɻ ͳΜͭͬͯӉഅྗ͕ੌ͍ɻແݶͱ͔ฏؾͩ͠ɻ ͏ͪΒͳΜͯແݶͱ͔͔͔ͨͩੵܭࢉͰग़͖͚ͯͨͩͰ্ख͘ѻ͑ͳ͍͔Β༗ݶʹͨ͠ΓɺGͱஔ͍ͯΈͨΓɺԋࢉࢠͬͨΓ͢ ͷʹɺ ӉશવฏؾɻແݶΛແݶͷ··ѻͬͯΔɻੌ͍ɻϠόΠɻ ͱʹ͔͘و༷ΒɺӉͷϠό͞ΛͬͱΔ͖ͩͱࢥ͍·͢ɻ /^.+(Ӊ|ϠόΠ|[\s\S])*.+$/ จࣈͰඵ͔͔ΔͷϠόΠɻ
ϠόΠɻӉϠόΠɻ·͡ͰϠόΠΑɺϚδϠόΠɻ ӉϠόΠɻ ·͍ͣɻ͏͍ͳΜͯΜ͡Όͳ͍ɻ͍ɻ ͍ͱ͔ͬͯ ʮ౦ژυʔϜݸͿΜ͘Β͍ʁʯ
ͱ͔ɺ͏ɺͦ͏͍͏Ϩϕϧ͡Όͳ͍ɻ Կ͠ΖແݶɻεήΣʂͳΜ͔୯Ґͱ͔ແ͍ͷɻԿ௶ͱ͔Կᶨͱ͔Λӽͯ͠Δɻແݶ͍ͩ͠ɻ ͔͠ுͯ͠ΔΒ͍͠ɻϠόΠΑɺுͩΑɻ ͩͬͯී௨ٿͱ͔ு͠ͳ͍͡ΌΜɻͩͬͯࣗͷ෦ͷ࿓Լ͕ͩΜͩΜ৳ͼͯͬͨΒࠔΔ͡ΌΜɻτΠϨͱ͔ԕ͍ͱ͔ࠔΔ ͬ͠ΐɻ ௨ֶ࿏͕৳ͼͯɺҰͷͱ͖ెาͩͬͨͷʹɺࡾͷͱ͖ࣗసंͰೋ࣌ؒͱ͔ٽͬ͘͠ΐɻ ͔ͩΒٿͱ͔ு͠ͳ͍ɻͷΘ͔ΔϠπͩɻ ͚ͲӉϠόΠɻͦΜͳͷؾʹ͠ͳ͍ɻு͠·͘Γɻ࠷ԕ͔͘Β౸ୡ͢Δޫͱ͔؍ଌͯ͠Α͘Θ͔Μͳ͍͘Β͍ԕ͍ɻϠό ͗͢ɻ ແݶ͍͚ͬͯͨͲɺ͔ͨ͠͠Β༗ݶ͔͠Μͳ͍ɻͰ༗ݶͬͯࣄʹ͢Δͱ ʮ͡Ό͋ɺӉͷͷ֎ଆͬͯφχΑʁʯ ͬͯࣄʹͳΔ͠ɺͦΕ୭Θ͔Βͳ͍ɻϠόΠɻ୭ʹ͔Βͳ͍ͳΜͯੌ͗͢Δɻ ͋ͱפ͍ɻέϧϏϯɻઁࢯͰݴ͏ͱʵˆɻϠόΠɻפ͗͢ɻόφφͰఝଧͭՋͳ͘ࢮ͵ɻා͍ɻ ͦΕʹԿແ͍ɻΨϥΨϥɻͦΕʹͷΜͼΓɻԯͱ͔ฏؾͰग़ͯ͘ΔɻԯͯɻখֶੜͰݴΘͶ͐Αɺ࠷ۙɻ ͳΜͭͬͯӉഅྗ͕ੌ͍ɻແݶͱ͔ฏؾͩ͠ɻ ͏ͪΒͳΜͯແݶͱ͔͔͔ͨͩੵܭࢉͰग़͖͚ͯͨͩͰ্ख͘ѻ͑ͳ͍͔Β༗ݶʹͨ͠ΓɺGͱஔ͍ͯΈͨΓɺԋࢉࢠͬͨΓ͢ ͷʹɺ ӉશવฏؾɻແݶΛແݶͷ··ѻͬͯΔɻੌ͍ɻϠόΠɻ ͱʹ͔͘و༷ΒɺӉͷϠό͞ΛͬͱΔ͖ͩͱࢥ͍·͢ɻ /^.+(Ӊ|ϠόΠ|[\s\S])*.+$/ ݱͷ$16͕ɺ ඵͰจࣈఔॲཧͰ͖ͳ͍Θ͚͕ͳ͍ɻ
ϠόΠɻӉϠόΠɻ·͡ͰϠόΠΑɺϚδϠόΠɻ ӉϠόΠɻ ·͍ͣɻ͏͍ͳΜͯΜ͡Όͳ͍ɻ͍ɻ ͍ͱ͔ͬͯ ʮ౦ژυʔϜݸͿΜ͘Β͍ʁʯ
ͱ͔ɺ͏ɺͦ͏͍͏Ϩϕϧ͡Όͳ͍ɻ Կ͠ΖແݶɻεήΣʂͳΜ͔୯Ґͱ͔ແ͍ͷɻԿ௶ͱ͔Կᶨͱ͔Λӽͯ͠Δɻແݶ͍ͩ͠ɻ ͔͠ுͯ͠ΔΒ͍͠ɻϠόΠΑɺுͩΑɻ ͩͬͯී௨ٿͱ͔ு͠ͳ͍͡ΌΜɻͩͬͯࣗͷ෦ͷ࿓Լ͕ͩΜͩΜ৳ͼͯͬͨΒࠔΔ͡ΌΜɻτΠϨͱ͔ԕ͍ͱ͔ࠔΔ ͬ͠ΐɻ ௨ֶ࿏͕৳ͼͯɺҰͷͱ͖ెาͩͬͨͷʹɺࡾͷͱ͖ࣗసंͰೋ࣌ؒͱ͔ٽͬ͘͠ΐɻ ͔ͩΒٿͱ͔ு͠ͳ͍ɻͷΘ͔ΔϠπͩɻ ͚ͲӉϠόΠɻͦΜͳͷؾʹ͠ͳ͍ɻு͠·͘Γɻ࠷ԕ͔͘Β౸ୡ͢Δޫͱ͔؍ଌͯ͠Α͘Θ͔Μͳ͍͘Β͍ԕ͍ɻϠό ͗͢ɻ ແݶ͍͚ͬͯͨͲɺ͔ͨ͠͠Β༗ݶ͔͠Μͳ͍ɻͰ༗ݶͬͯࣄʹ͢Δͱ ʮ͡Ό͋ɺӉͷͷ֎ଆͬͯφχΑʁʯ ͬͯࣄʹͳΔ͠ɺͦΕ୭Θ͔Βͳ͍ɻϠόΠɻ୭ʹ͔Βͳ͍ͳΜͯੌ͗͢Δɻ ͋ͱפ͍ɻέϧϏϯɻઁࢯͰݴ͏ͱʵˆɻϠόΠɻפ͗͢ɻόφφͰఝଧͭՋͳ͘ࢮ͵ɻා͍ɻ ͦΕʹԿແ͍ɻΨϥΨϥɻͦΕʹͷΜͼΓɻԯͱ͔ฏؾͰग़ͯ͘ΔɻԯͯɻখֶੜͰݴΘͶ͐Αɺ࠷ۙɻ ͳΜͭͬͯӉഅྗ͕ੌ͍ɻແݶͱ͔ฏؾͩ͠ɻ ͏ͪΒͳΜͯແݶͱ͔͔͔ͨͩੵܭࢉͰग़͖͚ͯͨͩͰ্ख͘ѻ͑ͳ͍͔Β༗ݶʹͨ͠ΓɺGͱஔ͍ͯΈͨΓɺԋࢉࢠͬͨΓ͢ ͷʹɺ ӉશવฏؾɻແݶΛແݶͷ··ѻͬͯΔɻੌ͍ɻϠόΠɻ ͱʹ͔͘و༷ΒɺӉͷϠό͞ΛͬͱΔ͖ͩͱࢥ͍·͢ɻ /^.+(Ӊ|ϠόΠ|[\s\S])*.+$/ ͡Ό͋Կ͕ѱ͍ʁ
ϠόΠɻӉϠόΠɻ·͡ͰϠόΠΑɺϚδϠόΠɻ ӉϠόΠɻ ·͍ͣɻ͏͍ͳΜͯΜ͡Όͳ͍ɻ͍ɻ ͍ͱ͔ͬͯ ʮ౦ژυʔϜݸͿΜ͘Β͍ʁʯ
ͱ͔ɺ͏ɺͦ͏͍͏Ϩϕϧ͡Όͳ͍ɻ Կ͠ΖແݶɻεήΣʂͳΜ͔୯Ґͱ͔ແ͍ͷɻԿ௶ͱ͔Կᶨͱ͔Λӽͯ͠Δɻແݶ͍ͩ͠ɻ ͔͠ுͯ͠ΔΒ͍͠ɻϠόΠΑɺுͩΑɻ ͩͬͯී௨ٿͱ͔ு͠ͳ͍͡ΌΜɻͩͬͯࣗͷ෦ͷ࿓Լ͕ͩΜͩΜ৳ͼͯͬͨΒࠔΔ͡ΌΜɻτΠϨͱ͔ԕ͍ͱ͔ࠔΔ ͬ͠ΐɻ ௨ֶ࿏͕৳ͼͯɺҰͷͱ͖ెาͩͬͨͷʹɺࡾͷͱ͖ࣗసंͰೋ࣌ؒͱ͔ٽͬ͘͠ΐɻ ͔ͩΒٿͱ͔ு͠ͳ͍ɻͷΘ͔ΔϠπͩɻ ͚ͲӉϠόΠɻͦΜͳͷؾʹ͠ͳ͍ɻு͠·͘Γɻ࠷ԕ͔͘Β౸ୡ͢Δޫͱ͔؍ଌͯ͠Α͘Θ͔Μͳ͍͘Β͍ԕ͍ɻϠό ͗͢ɻ ແݶ͍͚ͬͯͨͲɺ͔ͨ͠͠Β༗ݶ͔͠Μͳ͍ɻͰ༗ݶͬͯࣄʹ͢Δͱ ʮ͡Ό͋ɺӉͷͷ֎ଆͬͯφχΑʁʯ ͬͯࣄʹͳΔ͠ɺͦΕ୭Θ͔Βͳ͍ɻϠόΠɻ୭ʹ͔Βͳ͍ͳΜͯੌ͗͢Δɻ ͋ͱפ͍ɻέϧϏϯɻઁࢯͰݴ͏ͱʵˆɻϠόΠɻפ͗͢ɻόφφͰఝଧͭՋͳ͘ࢮ͵ɻා͍ɻ ͦΕʹԿແ͍ɻΨϥΨϥɻͦΕʹͷΜͼΓɻԯͱ͔ฏؾͰग़ͯ͘ΔɻԯͯɻখֶੜͰݴΘͶ͐Αɺ࠷ۙɻ ͳΜͭͬͯӉഅྗ͕ੌ͍ɻແݶͱ͔ฏؾͩ͠ɻ ͏ͪΒͳΜͯແݶͱ͔͔͔ͨͩੵܭࢉͰग़͖͚ͯͨͩͰ্ख͘ѻ͑ͳ͍͔Β༗ݶʹͨ͠ΓɺGͱஔ͍ͯΈͨΓɺԋࢉࢠͬͨΓ͢ ͷʹɺ ӉશવฏؾɻແݶΛແݶͷ··ѻͬͯΔɻੌ͍ɻϠόΠɻ ͱʹ͔͘و༷ΒɺӉͷϠό͞ΛͬͱΔ͖ͩͱࢥ͍·͢ɻ /^.+(Ӊ|ϠόΠ|[\s\S])*.+$/ ਖ਼نදݱͷϚονϯά࣌ؒͷരൃɺ
ϠόΠɻӉϠόΠɻ·͡ͰϠόΠΑɺϚδϠόΠɻ ӉϠόΠɻ ·͍ͣɻ͏͍ͳΜͯΜ͡Όͳ͍ɻ͍ɻ ͍ͱ͔ͬͯ ʮ౦ژυʔϜݸͿΜ͘Β͍ʁʯ
ͱ͔ɺ͏ɺͦ͏͍͏Ϩϕϧ͡Όͳ͍ɻ Կ͠ΖແݶɻεήΣʂͳΜ͔୯Ґͱ͔ແ͍ͷɻԿ௶ͱ͔Կᶨͱ͔Λӽͯ͠Δɻແݶ͍ͩ͠ɻ ͔͠ுͯ͠ΔΒ͍͠ɻϠόΠΑɺுͩΑɻ ͩͬͯී௨ٿͱ͔ு͠ͳ͍͡ΌΜɻͩͬͯࣗͷ෦ͷ࿓Լ͕ͩΜͩΜ৳ͼͯͬͨΒࠔΔ͡ΌΜɻτΠϨͱ͔ԕ͍ͱ͔ࠔΔ ͬ͠ΐɻ ௨ֶ࿏͕৳ͼͯɺҰͷͱ͖ెาͩͬͨͷʹɺࡾͷͱ͖ࣗసंͰೋ࣌ؒͱ͔ٽͬ͘͠ΐɻ ͔ͩΒٿͱ͔ு͠ͳ͍ɻͷΘ͔ΔϠπͩɻ ͚ͲӉϠόΠɻͦΜͳͷؾʹ͠ͳ͍ɻு͠·͘Γɻ࠷ԕ͔͘Β౸ୡ͢Δޫͱ͔؍ଌͯ͠Α͘Θ͔Μͳ͍͘Β͍ԕ͍ɻϠό ͗͢ɻ ແݶ͍͚ͬͯͨͲɺ͔ͨ͠͠Β༗ݶ͔͠Μͳ͍ɻͰ༗ݶͬͯࣄʹ͢Δͱ ʮ͡Ό͋ɺӉͷͷ֎ଆͬͯφχΑʁʯ ͬͯࣄʹͳΔ͠ɺͦΕ୭Θ͔Βͳ͍ɻϠόΠɻ୭ʹ͔Βͳ͍ͳΜͯੌ͗͢Δɻ ͋ͱפ͍ɻέϧϏϯɻઁࢯͰݴ͏ͱʵˆɻϠόΠɻפ͗͢ɻόφφͰఝଧͭՋͳ͘ࢮ͵ɻා͍ɻ ͦΕʹԿແ͍ɻΨϥΨϥɻͦΕʹͷΜͼΓɻԯͱ͔ฏؾͰग़ͯ͘ΔɻԯͯɻখֶੜͰݴΘͶ͐Αɺ࠷ۙɻ ͳΜͭͬͯӉഅྗ͕ੌ͍ɻແݶͱ͔ฏؾͩ͠ɻ ͏ͪΒͳΜͯແݶͱ͔͔͔ͨͩੵܭࢉͰग़͖͚ͯͨͩͰ্ख͘ѻ͑ͳ͍͔Β༗ݶʹͨ͠ΓɺGͱஔ͍ͯΈͨΓɺԋࢉࢠͬͨΓ͢ ͷʹɺ ӉશવฏؾɻແݶΛແݶͷ··ѻͬͯΔɻੌ͍ɻϠόΠɻ ͱʹ͔͘و༷ΒɺӉͷϠό͞ΛͬͱΔ͖ͩͱࢥ͍·͢ɻ /^.+(Ӊ|ϠόΠ|[\s\S])*.+$/ ͜Ε͕3F%P4ɻ
@MakeNowJust ౻࿘େ cYAPC::Japan::Online 2022 3F%P4ݕग़ͷ࠷ઌ SFDIFDLͷհ
ਖ਼نදݱͷϚονϯά࣌ؒ രൃ͢Δ
Ͳ͏ʹ͔ͯ͠ਖ਼نදݱΛ ҆શʹ͍͍ͨ ʮʜʜ%'"ܕͷϚονϯάʹ͢Εʁʯ ʮʜʜλΠϜΞτ͢Ε͍͍Μ͡Όͳ͍ʁʯ
ͯ͢ͷਖ਼نදݱͷϚονϯά͕࣌ؒ രൃ͢ΔΘ͚͡Όͳ͍ /^(foo|bar)*$/ ҆શ /^<[^@<]*@[^>@]*>$/ /^(fizz|buzz|fizzbuzz)*$/ രൃ͢Δ /^<[^<]*@[^>]*>$/
ਖ਼نදݱ͕҆શ͔Ͳ͏͔Λఆ͍ͨ͠ /^(foo|bar)*$/ ҆શ /^<[^@<]*@[^>@]*>$/ /^(fizz|buzz|fizzbuzz)*$/ രൃ͢Δ /^<[^<]*@[^>]*>$/
ˠ3F%P4ݕग़ /^(foo|bar)*$/ ҆શ /^<[^@<]*@[^>@]*>$/ /^(fizz|buzz|fizzbuzz)*$/ രൃ͢Δ /^<[^<]*@[^>]*>$/
രൃ͢Δਖ਼نදݱͷಛ /^(fizz|buzz|fizzbuzz)*$/ രൃ͢Δ /^<[^<]*@[^>]*>$/
ਖ਼نදݱͷരൃͷํछྨ͋Δ จࣈྻͷ͞ ʹରͯ͠Ϛονϯά࣌ؒͷ࠷ѱܭࢉྔ͕ɺ ʹͳΔ ࢦతͳ ߹ ɹྫ/^(fizz|buzz|fizzbuzz)*$/ ߈ܸจࣈྻ('fizzbuzz' x
27) . 'x' ɹจࣈҎԼͰ߈ܸͰ͖ΔͨΊͱͯϠόΠɻ ʹͳΔ తͳ ߹ ɹྫ/^<[^<]*@[^>]*>$/ ߈ܸจࣈྻ'<' . ('@' x 54773) ɹ߈ܸʹઍʙສจࣈඞཁͳͨΊɺۓٸΊɻ ɹ͔͠͠ɺ4UBDL0WFS fl PX$MPVE fl BSF͕࣮ࡍʹ3F%P4Ͱμϯͨ͠ͷ͜ͷέʔεɻ n O(2n) O(n2)
ʹͳΔ ࢦతͳ ߹ͷಛ O(2n) ܁Γฦ͠ͷதͷϚονϯάͷํ͕ᐆດ ྫ͑/^(fizz|buzz|fizzbuzz)*$/ͷ߹ɺ "fizzbuzz"ͷϚονϯάͷํ͕ɺ 1."fizzbuzz"ͱ2."fizzbuzz"ͷ௨Γ͋Δɻ
"fizzbuzz"͕OݸฒΜͰ͍ͯ࠷ޙͰόοΫτϥοΫ͢Δͱɺ ྆ํͷ௨ΓํΛͦΕͧΕʹରͯ͠ࢼ͞ͳ͚Ε͍͚ͳ͍ͨΊɺ ࢦతͳ ͷܭࢉྔʹͳΔɻ O(2n)
ʹͳΔ తͳ ߹ͷಛ O(n2) ͭͷ܁Γฦ͠ͱͦͷؒͷϚονϯάͷํ͕ᐆດ ྫ͑/^<[^<]*@[^>]*>$/ͷ߹ɺ "@"ͷจࣈͰ[^<]*ͱ[^>]*Λ܁Γฦ͢ͷͱ @Ͱ܁Γฦ͠ΛҠಈ͢Δ͜ͱ͕Ͱ͖Δɻ
"@"͕OݸฒΜͰ͍ͯ࠷ޙͰόοΫτϥοΫ͢Δͱɺ Ͳ͜Ͱࠨ͔Βӈͷ܁Γฦ͠ʹҠಈ͢Δ͔͕ᐆດʹͳΔͨΊɺ తͳ ͷܭࢉྔʹͳΔɻ O(n2)
͡Ό͋ਖ਼نදݱΛݟͯ அ͢Ε͍͍ʁ
ͦΕ݁ߏ͍͠ ׳ΕΔͱ݁ߏΕΔ͚Ͳɺ ਖ਼֬ੑΛอূ͢Δͷ͍͠ ਖ਼نදݱSFHFYMJCDPNΑΓ /([^\.\?\!]*)[\.\?\!]/ /"((\\")|[^"(\\")])+"/ /^[0-9]{1,}(,[0-9]+){0,}$/ /"[^"\r\n]*"/
/(\S*)+(\u007C)+(\S*)/ /\s*[a-zA^Z,\s]+\s*$/
ΦʔτϚτϯʹมͯ͠ΈΑ͏
ʹͳΔ ࢦతͳ ߹ͷಛ O(2n) &%" &YQPOFOUJBM%FHSFF"NCJHVJUZ ߏ q fizz buzz
fizzbuzz q w w ͋Δจࣈྻ Ͱ͋Δঢ়ଶ ʹ ͬͯ͘Δํ๏͕௨Γ͋Δ w q q fizzbuzz fizzbuzz ཧ
ʹͳΔ తͳ ߹ͷಛ O(n2) *%" *O fi OJUF%FHSFF"NCJHVJUZ ߏ q1
q2 [^<] [^>] @ q1 q2 w ಉ͡จࣈྻ Ͱঢ়ଶ ʹͬͯ͜Εͯɺ ͦͷؒભҠͰ͖Δɻ w q1 , q2 w w
&%"ߏɾ*%"ߏͷ୳ࡧΞϧΰϦζϜ ΦʔτϚτϯͷੵߏͷΑ͏ʹͯ͠ঢ়ଶΛʹͨ͠ΦʔτϚτϯΛߏ͢Δɻ ͷͱ͖ʹ ͜ͷભҠؔΛڧ࿈݁ղͯ͠ɺ ಉ͡ڧ࿈݁ʹ ͱ
ͨͩ͠ ͷΑ͏ͳ ঢ়ଶͷ͕͋Ε&%"ߏ͕ଘࡏ͢Δɻ *%"ߏͷ߹ɺঢ়ଶΛͭʹͯ͠ ͱ ͷΑ͏ͳΛ୳͢͜ͱͰൃݟͰ͖Δɻ q11 a q12 ∧ q21 a q22 (q11 , q21 ) a (q12 , q22 ) (q1 , q1 ) (q2 , q3 ) q2 ≠ q3 (q1 , q1 , q2 ) (q1 , q2 , q2 )
&%"ߏɾ*%"ߏͷੑ࣭ &%"ߏ͕ଘࡏ͢Δ Ϛονϯάͷ࠷ѱܭࢉྔ͕ࢦతʹͳΔ *%"ߏ͕ଘࡏ͢Δ Ϛονϯάͷ࠷ѱܭࢉྔ͕తʹͳΔɻ ͭ·Γɺ ɹɹ&%"ߏɾ*%"ߏͷଘࡏΛఆ͢Δ͜ͱͰɺ ɹɹਖ਼نදݱͷϚονϯά͕࣌ؒരൃ͢Δ͔
ɹɹཧతʹਖ਼֬ʹఆͰ͖Δɻ ⟺ ⟺
3F%P4ݕग़ɾ ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ʜʜʁ
ຊʹʁ
ΦʔτϚτϯͷղੳʹΑΔ3F%P4ݕग़ͷݶք ༗ݶঢ়ଶΦʔτϚτϯΛར༻͍ͯ͠ΔͷͰɺ มͷͰ͖ͳ͍ޙํࢀর \1, \2 ͷΑ͏ͳ֦ு͕͋Δͱղੳ͕ෆՄೳɻ /<(\w+)>(.*?)<\/\1>/
/(["'])[^"']+\1/
ΦʔτϚτϯͷղੳʹΑΔ3F%P4ݕग़ͷݶք ղੳΞϧΰϦζϜͷܭࢉྔঢ়ଶʹରͯ͠ ͱɺ ෳࡶͳਖ਼نදݱͷ߹ղੳʹ͕͔͔࣌ؒΔɻ ͞ΒʹɺόοΫτϥοΫͷڍಈΛਖ਼֬ʹ࠶ݱ͢Δ߹ܾఆԽ͕ඞཁʹͳΓɺ ͦͷ߹ͷղੳͷܭࢉྔࢦతʹͳͬͯ͠·͏ɻ O(n6)
/(\w+(\.\w+)*)@(([\w\-]{1,32}\.){0,4}[a-zA-Z]{1,32}|\[(\d{0,3}(\.\d{0,3}){0,4})\])/
ΦʔτϚτϯͷղੳʹΑΔ3F%P4ݕग़ͷݶք ͭ·Γɺਖ਼نදݱ͕ෳࡶͳ߹ɺਖ਼نݴޠͰͳ͍֦ுʹରͯ͠ɺ ΦʔτϚτϯͷղੳʹΑΔݕग़ແྗ /<(\w+)>(.*?)<\/\1>/ /(["'])[^"']+\1/ /(\w+(\.\w+)*)@(([\w\-]{1,32}\.){0,4}[a-zA-Z]{1,32}|\[(\d{0,3}(\.\d{0,3}){0,4})\])/
3F%P4ݕग़ͷ࠷ઌ
ಈతղੳ ࣮ࡍʹϚονϯάΛߦͳͬͯɺ࣌ؒͷ͔͔ΔͷΛ୳͢ ਖ਼نදݱ ࣮ ೖྗ Ϛονϯά͕࣌ؒ രൃ͢ΔͷΛൃݟ 3F%P4੬ऑ
ͱͯ͠ݕग़ "foo" จࣈྻ
ϑΝδϯά จࣈྻΛϥϯμϜʹͨ͘͞Μੜͯ͠ɺಈతղੳΛ͢Δ "foo" "bar" "foobar" ͨ͘͞Μͷจࣈྻ ਖ਼نදݱ ࣮
ೖྗ Ϛονϯά͕࣌ؒ രൃ͢ΔͷΛൃݟ 3F%P4੬ऑ ͱͯ͠ݕग़
ҨతΞϧΰϦζϜ Ϛονϯάʹ࣌ؒͷ͔͔ΔจࣈྻΛֻ͚߹Θͤͯɺ ΑΓ࣌ؒͷ͔͔ΔจࣈྻΛੜ͢Δ ҨతΞϧΰϦζϜͰ Ϛονϯά࣌ؒΛ૿Ճͤ͞Δ "foo" "bar"
"foobar" ͨ͘͞Μͷจࣈྻ ਖ਼نදݱ ࣮ ೖྗ Ϛονϯά͕࣌ؒ രൃ͢ΔͷΛൃݟ 3F%P4੬ऑ ͱͯ͠ݕग़
ϑΝδϯάʹΑΔ3F%P4ݕग़ ಈతղੳʹΑΔ3F%P4ݕग़ख๏ɻ ϥϯμϜੑ͕͋ΔͷͰਖ਼֬ੑʹ͕͋Δ͕ Ͱ͖ͳ͍ΑΓϚγ ɺ ޙํࢀরͳͲͷ֦ுঢ়ଶͷଟ͘ͳΔෳࡶͳਖ਼نදݱʹରԠͰ͖Δɻ ҨతΞϧΰϦζϜͰ Ϛονϯά࣌ؒΛ૿Ճͤ͞Δ
"foo" "bar" "foobar" ͨ͘͞Μͷจࣈྻ ਖ਼نදݱ ࣮ ೖྗ Ϛονϯά͕࣌ؒ രൃ͢ΔͷΛൃݟ 3F%P4੬ऑ ͱͯ͠ݕग़
ϑΝδϯά࠷ڧʁ
ͳ߹ͷ߈ܸจࣈྻ ઍʙສจࣈ O(n2)
Ԑ͕γΣΠΫεϐΞΛॻ͘ͷΛ ͭΘ͚ʹ͍͔ͳ͍ ͍͘ΒҨతΞϧΰϦζϜΛͬͯɺ ສจࣈͷ࠷దԽΛ্ख͘ߦ͏Ͱ͖Δ͔ӡήʔͳͷͰɺ ͷ߹͏·͘ൃݟͰ͖ͳ͍͜ͱ͕ଟ͘ͳͬͯ͠·͏ O(n2)
จࣈྻͷ܁Γฦ͠ߏ Ϛονϯά࣌ؒΛരൃͤ͞Δจࣈྻ෦తʹ܁Γฦ͍ͯ͠Δɻ ྫ('fizzbuzz' x 27) . 'x' '<' .
('@' x 54773) ੜ͞ΕΔจࣈྻʹ࣍ͷ จࣈΛ܁Γฦ͢ͱ͍͏ҙຯͷه߸ ΛՃͯ͠ɺ ͦΕΛؚΊͯϑΝδϯάΛߦ͏ɻ ͜ΕʹΑͬͯɺతͳ߹ͰϑΝδϯάʹΑͬͯݕग़͕ՄೳʹͳΔɻ n □ n
ϑΝδϯά࠷ڧ ͲͷΑ͏ͳ߹Ͱരൃ͢Δਖ਼نදݱΛਖ਼͘͠ൃݟͰ͖ΔΑ͏ʹͳͬͨ
࣮ʁ
None
SFDIFDL ൃදऀ !.BLF/PX+VTU ͷ։ൃ͍ͯ͠Δ3F%P4ݕग़ϥΠϒϥϦɻ ࣮ݴޠ4DBMBɻ+BWB4DSJQU͔Βར༻Մೳɻ ࠓճઆ໌ͨ͠ɺΦʔτϚτϯͷղੳʹΑΔํ๏ͱϑΝδϯάʹΑΔํ๏ͷ ྆ํͷํ๏Λ࣮͍ͯ͠Δɻ IUUQTNBLFOPXKVTUMBCTHJUIVCJPSFDIFDL
ΦʔτϚτϯͷղੳਖ਼͚֬ͩͲɺ ͕͔͔࣌ؒΓͦ͏ͳ߹ϑΝδϯάʹΓସ͍͑ͨ
ݕग़ख๏ͷࣗಈΓସ͑ SFDIFDLͰɺՄೳͳݶΓΦʔτϚτϯͷղੳʹΑΔख๏Λͬͯɺ ࣌ؒతɾਫ਼తʹϑΝδϯάͷํ͕దͩͱஅͨ͠߹ʹɺ ϑΝδϯάʹΓସ͑Δػೳ͕࣮͞Ε͍ͯΔɻ σϑΥϧτͰ͜ͷϞʔυʹͳ͍ͬͯΔɻ ͲͪΒ͕ద͔ɺਖ਼نදݱͷେ͖͞
ΦʔτϚτϯͷঢ়ଶͳͲ͔Βஅ͞ΕΔɻ
ରԠ͍ͯ͠Δਖ਼نදݱͷํݴ ݱࡏ+BWB4DSJQUͷਖ਼نදݱʹͷΈରԠɻ /&5 +BWB 1$3& 1FSM 1ZUIPO 3VCZͷਖ਼نදݱͷରԠΛ࣮தɻ +BWB4DSJQUҎ֎ͷݴޠͷਖ਼نදݱ͋·Γݫີͳ༷͕ͳ͍ͷͰɺ
ͳΜͱͳ͘ରԠ͢Δ༧ఆɻ
࣮ؒʹ߹Θͳͯ͘ ͝ΊΜͳ͍͞
͍ํ ී௨ʹϥΠϒϥϦͱͯ͑͠Δɻ const { check } = require('recheck'); console.log(await
check('^(a|a)*$', '')); &4-JOUͷϓϥάΠϯ eslint-plugin-redos ެ։͍ͯ͠ΔͷͰɺ &4-JOUΛ͍ͬͯΔϓϩδΣΫτʹ͙͢ʹಋೖՄೳɻ
IUUQTNBLFOPXKVTUMBCTHJUIVCJPSFDIFDLQMBZHSPVOE
ݸͷਖ਼نදݱͷ3F%P4ݕग़ʹඵɻ ฏۉͯ͠ɺਖ਼نදݱݸลΓඵఔɻ ମײͱͯ͠ɺ$*ͳͲͰར༻͢Δʹे͑Δɻ ΤσΟλͳͲͰϦΞϧλΠϜʹݕग़͠ଓ͚Δͱɺͪΐͬͱ͔ͨͭ͘ɻ
࣮ ࣮ࡍʹ͍͔ͭ͘ͷϥΠϒϥϦͷ੬ऑੑΛൃݟɺใࠂ͍͍ͯ͠Δɻ NBSLEPXOJU ɾIUUQTHJUIVCDPNNBSLEPXOJUNBSLEPXOJUTFDVSJUZBEWJTPSJFT()4"WGDRWGWSD NBSLFE ɾIUUQTHJUIVCDPNNBSLFEKTNBSLFETFDVSJUZBEWJTPSJFT()4"SSSNRKNWIG ɾIUUQTHJUIVCDPNNBSLFEKTNBSLFETFDVSJUZBEWJTPSJFT()4"WISDYYHK
SFDIFDLΛͬͯ੬ऑੑΛൃݟͨ͠߹ɺͪ͜Βʹ࿈བྷ͍͚ͯͨͩ͠Δͱ͋Γ͕͍ͨͰ͢ɻ
͋ͳͨͱSFDIFDLɺ ࠓ͙͢μϯϩʔυ
ൃදͷ·ͱΊ w 3F%P4ݕग़ֶతʹఆࣜԽͰ͖Δղ͚Δɻ ͳΜ͔;Θͬͱͨ͠ؾͰܭࢉྔ͕രൃ͢ΔΘ͚Ͱͳ͍ɻ w ͱ͍͑ݱ࣮ͷਖ਼نදݱΛରʹ͢Δͱ͕͋ΔͷͰɺ ϑΝδϯάͳͲΛซ༻͢Δͷ͕࠷ઌͷ3F%P4ݕग़ɻ w
3F%P4ݕग़ϥΠϒϥϦͱͯ͠SFDIFDL͕͋Δɻ͍ͬͯͬͯͩ͘͞ɻ w ͱ͍͑શʹਖ਼֬ͳ3F%P4ݕग़Λݱ࣮తͳ࣌ؒͰߦ͏ͷ ΄ͱΜͲෆՄೳͳͷͰɺݕग़݁Ռ͚ͩΛݟͯ҆શͩͱஅͤͣɺ λΠϜΞτͳͲΛೖΕΔͷॏཁɻ
ݕূϑΣʔζ ࣮ࡍͷਖ਼نදݱ࣮࠷దԽͳͲ͕͞Ε͍ͯͯɺ ཧ௨ΓʹϚονϯά͕࣌ؒ૿Ճ͠ͳ͍Մೳੑ͕͋Δɻ ͦͷΑ͏ͳ߹ͷͨΊʹSFDIFDLͰɺ ಘΒΕͨ߈ܸจࣈྻΛ࣮ࡍʹॲཧܥʹೖྗͯ͠ɺ Ϛονϯάʹ͕͔͔࣌ؒΔ͔ݕূ͢Δػೳ͕ར༻Ͱ͖·͢ɻ ͕͔͔࣌ؒΔͷͰσϑΥϧτͰແޮ