o
    ¬ø¸h6’  ã                   @   sò  d dl mZmZmZ d dlmZ d dlZd dlZd dlZd dl	m
Z
mZ d dl mZ d dl mZ d dlmZ d dlmZ d dlZd	ed
efdd„Ze d¡ZdZeƒ Zdd„ Ze d¡dd„ ƒZe d¡de
fdd„ƒZdgddgddgdœZdgdgd gd!œZdgdgd d"gd#gd$œZ d%gd&gg d'¢d(gd)gd*d+gd,d-gd.gd)gd/gd0d1gd2œZ!dOd4ed5efd6d7„Z"e d8¡d9ed:efd;d<„ƒZ#e d=¡d>e$fd?d@„ƒZ%e dA¡dBdC„ ƒZ&e dD¡dEe'fdFdG„ƒZ(e dH¡dIdJ„ ƒZ)e dK¡dLe$fdMdN„ƒZ*dS )Pé    )Ú	APIRouterÚHTTPExceptionÚQuery)ÚRedirectResponseN)Ú
SpeechTextÚUserQuestion)ÚBackgroundTasks)ÚBody)Údatabase_demo)ÚloggerÚtextÚreturnc                 C   s   t  dd| ¡ ¡ S )Nz\s+Ú )ÚreÚsubÚstrip)r   © r   ú&/home/air/demo/back/gemini_routerV2.pyÚnormalize_text   s   r   Ús3z$shanri-ai-chatbot-for-text-to-speechc                 Ã   sª   t jjjdd| d}d|› dt ¡ › d}t|dƒ}| ¡ D ]}| |¡ q W d   ƒ n1 s2w   Y  |› dt ¡ › d}t 	|t
|¡ t |¡ dt
› d	|› S )
Nztts-1Únova)ÚmodelÚvoiceÚinputz
tmp/audio-ú-z.mp3Úwbzhttps://z.s3.amazonaws.com/)ÚclientÚaudioÚspeechÚcreateÚtimeÚopenÚ
iter_bytesÚwriteÚ	s3_clientÚupload_fileÚbucket_nameÚosÚremove)r   Úuser_idÚresponseÚ
audio_fileÚfÚchunkÚs3_keyr   r   r   Úsynthesize_speech   s    €ýÿÿ
r/   z/healthc                   Ã   s
   ddiS )NÚstatusÚhealthyr   r   r   r   r   Úhealth_check)   s   €r2   z/apige/speechÚspeech_textc                 Ã   s6   | j }| j}|stddd‚t||ƒI d H }d|iS )Né  zText is required©Ústatus_codeÚdetailr+   )r   Ú
chat_tokenr   r/   )r3   r   r8   r+   r   r   r   r   .   s   €r   uB   ä»¥å‰ã«ã‚³ãƒ¼ãƒ‡ã‚£ãƒ³ã‚°ã‚’å­¦ã‚“ã ã“ã¨ã¯ã‚ã‚Šã¾ã™ã‹ï¼Ÿu¹  ã¯ã„ã€ãã‚Œã§ã¯ã‚³ãƒ¼ãƒ‡ã‚£ãƒ³ã‚°ã®åŸºæœ¬è¦ç´ ã‚’ä½¿ã£ã¦æŽ²ç¤ºæ¿ã‚’ä½œã‚‹ãƒ—ãƒ­ã‚»ã‚¹ã‚’é€²ã‚ã¦ã¿ã¾ã—ã‚‡ã†ã€‚
## æŠ€è¡“ã‚¹ã‚¿ãƒƒã‚¯æ•´ç†

### ãƒ•ãƒ­ãƒ³ãƒˆã‚¨ãƒ³ãƒ‰ï¼ˆãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒè¦‹ã‚‹ç”»é¢ï¼‰
- **HTML**ï¼šæŽ²ç¤ºæ¿ã®æ§‹é€ ï¼ˆæŠ•ç¨¿ä¸€è¦§ã€æŠ•ç¨¿ãƒ•ã‚©ãƒ¼ãƒ ã€ã‚³ãƒ¡ãƒ³ãƒˆæ¬„ï¼‰
- **CSS**ï¼šãƒ‡ã‚¶ã‚¤ãƒ³ï¼ˆãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆã€ãƒœã‚¿ãƒ³ã€è‰²ã€ãƒ¬ã‚¹ãƒãƒ³ã‚·ãƒ–ï¼‰
- **JavaScript**ï¼š
  - ãƒœã‚¿ãƒ³ã‚„ãƒ•ã‚©ãƒ¼ãƒ ã®å‹•ä½œåˆ¶å¾¡
  - æŠ•ç¨¿ä¸€è¦§ãƒ»è©³ç´°ã‚’è¡¨ç¤ºã™ã‚‹ã¨ãã«ã‚µãƒ¼ãƒãƒ¼ã¨é€šä¿¡ï¼ˆFetch APIï¼‰

---

### ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ï¼ˆã‚µãƒ¼ãƒãƒ¼ï¼‰
- **Python + FastAPI**
  - ãƒ«ãƒ¼ã‚¿ãƒ¼ï¼šæŠ•ç¨¿ä¸€è¦§å–å¾—ã€æ–°è¦æŠ•ç¨¿ã€ç·¨é›†/å‰Šé™¤ã€ã‚³ãƒ¡ãƒ³ãƒˆæ©Ÿèƒ½
  - JSON å½¢å¼ã§ãƒ‡ãƒ¼ã‚¿ã‚’ã‚„ã‚Šå–ã‚Š
- **MySQL**
  - æŠ•ç¨¿ãƒ»ã‚³ãƒ¡ãƒ³ãƒˆãƒ»ãƒ¦ãƒ¼ã‚¶ãƒ¼æƒ…å ±ã‚’ä¿å­˜
  - åŸºæœ¬çš„ãª SQL æ–‡ï¼ˆINSERT, SELECT, UPDATE, DELETEï¼‰ã®ã¿å­¦ç¿’

---

### ã‚µãƒ¼ãƒãƒ¼ç’°å¢ƒ
- **AWS EC2 (Ubuntu)**

---

## ã‚«ãƒªã‚­ãƒ¥ãƒ©ãƒ ã®é›£æ˜“åº¦èª¿æ•´
- **ã‚¹ãƒ†ãƒƒãƒ— 1ï¼ˆåŸºç¤Žï¼‰**ï¼šé™çš„ãª HTML/CSS ã§æŽ²ç¤ºæ¿ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆã‚’ä½œæˆ
- **ã‚¹ãƒ†ãƒƒãƒ— 2ï¼ˆãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰åŸºæœ¬ï¼‰**ï¼šFastAPI ã§æŠ•ç¨¿ä¸€è¦§/æŠ•ç¨¿ä½œæˆ API ã‚’ä½œæˆ
- **ã‚¹ãƒ†ãƒƒãƒ— 3ï¼ˆDB é€£æºï¼‰**ï¼šMySQL ã«æŠ•ç¨¿ã‚’ä¿å­˜ã—ã¦å–å¾—
- **ã‚¹ãƒ†ãƒƒãƒ— 4ï¼ˆãƒ•ãƒ­ãƒ³ãƒˆã¨ãƒãƒƒã‚¯æŽ¥ç¶šï¼‰**ï¼šJS Fetch ã§ API ã¨æŽ¥ç¶šã—ã¦å‹•ä½œç¢ºèª
- **ã‚¹ãƒ†ãƒƒãƒ— 5ï¼ˆè¿½åŠ æ©Ÿèƒ½ï¼‰**ï¼šã‚³ãƒ¡ãƒ³ãƒˆã€ãƒšãƒ¼ã‚¸ãƒãƒ¼ã‚·ãƒ§ãƒ³ã€ç°¡å˜ãªãƒ­ã‚°ã‚¤ãƒ³æ©Ÿèƒ½u7   1æ—¥ã”ã¨ã®å­¦ç¿’å†…å®¹ã‚‚ä½œæˆã—ã¾ã—ã‚‡ã†ã‹ï¼Ÿu]  ## 3ãƒ¶æœˆ (12é€±é–“) æŽ²ç¤ºæ¿ãƒ—ãƒ­ã‚¸ã‚§ã‚¯ãƒˆå­¦ç¿’ã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ«

## **1ãƒ¶æœˆç›®ï¼ˆåŸºç¤Žç·¨ï¼šWebã®åœŸå°ã‚’ä½œã‚‹ï¼‰**

### **Week 1 â€” HTML åŸºç¤Ž**
- **Day 1**: Webã¨ã¯ï¼Ÿ ãƒ–ãƒ©ã‚¦ã‚¶ã¨ã‚µãƒ¼ãƒãƒ¼ã®ä»•çµ„ã¿
- **Day 2**: HTML åŸºæœ¬æ–‡æ³•ï¼ˆã‚¿ã‚°ã€è¦ç´ ã€å±žæ€§ï¼‰
- **Day 3**: è¦‹å‡ºã—ãƒ»æ®µè½ãƒ»ãƒªãƒ³ã‚¯ãƒ»ç”»åƒã®ä½¿ã„æ–¹
- **Day 4**: ãƒªã‚¹ãƒˆãƒ»ãƒ†ãƒ¼ãƒ–ãƒ«ãƒ»ãƒ•ã‚©ãƒ¼ãƒ 
- **Day 5**: æŽ²ç¤ºæ¿ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆï¼ˆä¸€è¦§ãƒšãƒ¼ã‚¸ã®é››å½¢ä½œæˆï¼‰

### **Week 2 â€” CSS ãƒ‡ã‚¶ã‚¤ãƒ³**
- **Day 6**: CSS ã®åŸºæœ¬ï¼ˆã‚»ãƒ¬ã‚¯ã‚¿ã€è‰²ã€ãƒ•ã‚©ãƒ³ãƒˆï¼‰
- **Day 7**: ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆï¼ˆBoxãƒ¢ãƒ‡ãƒ«ã€margin/padding/borderï¼‰
- **Day 8**: Flexboxã§ã®ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆå®Ÿè·µ
- **Day 9**: ãƒ¬ã‚¹ãƒãƒ³ã‚·ãƒ–ãƒ‡ã‚¶ã‚¤ãƒ³ï¼ˆã‚¹ãƒžãƒ›å¯¾å¿œï¼‰
- **Day 10**: æŽ²ç¤ºæ¿ä¸€è¦§ã®è¦‹ãŸç›®ã‚’æ•´ãˆã‚‹æ¼”ç¿’

### **Week 3 â€” JavaScript å…¥é–€**
- **Day 11**: JSã®åŸºæœ¬ï¼ˆå¤‰æ•°ã€åž‹ã€æ¼”ç®—ï¼‰
- **Day 12**: æ¡ä»¶åˆ†å²ã¨ãƒ«ãƒ¼ãƒ—
- **Day 13**: é–¢æ•°ã¨ã‚¤ãƒ™ãƒ³ãƒˆå‡¦ç†ï¼ˆã‚¯ãƒªãƒƒã‚¯/å…¥åŠ›ï¼‰
- **Day 14**: DOMæ“ä½œï¼ˆè¦ç´ ã®å–å¾—ã€å¤‰æ›´ã€è¿½åŠ ï¼‰
- **Day 15**: æŽ²ç¤ºæ¿ã§ã€Œãƒœã‚¿ãƒ³ã‚’æŠ¼ã™ã¨ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãŒå‡ºã‚‹ã€æ¼”ç¿’

### **Week 4 â€” JSå¿œç”¨ + ãƒŸãƒ‹ãƒ—ãƒ­ã‚¸ã‚§ã‚¯ãƒˆ**
- **Day 16**: é…åˆ—ã¨ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆ
- **Day 17**: JSONã®ç†è§£ï¼ˆãƒ‡ãƒ¼ã‚¿ã®å½¢ï¼‰
- **Day 18**: Fetch API ã§å¤–éƒ¨ãƒ‡ãƒ¼ã‚¿ã‚’å–å¾—ï¼ˆç–‘ä¼¼APIåˆ©ç”¨ï¼‰
- **Day 19**: æŽ²ç¤ºæ¿ã€Œä»®ã®æŠ•ç¨¿ä¸€è¦§ã€ã‚’ JSã§è¡¨ç¤ºã™ã‚‹æ¼”ç¿’
- **Day 20**: 1ãƒ¶æœˆç›®ã¾ã¨ã‚ï¼ˆHTML/CSS/JSã ã‘ã§ç°¡æ˜“æŽ²ç¤ºæ¿ï¼‰

---

## **2ãƒ¶æœˆç›®ï¼ˆãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ç·¨ï¼šFastAPI + DBï¼‰**

### **Week 5 â€” Python åŸºç¤Ž**
- **Day 21**: Python åŸºæœ¬æ–‡æ³•ï¼ˆprint, å¤‰æ•°, åž‹ï¼‰
- **Day 22**: æ¡ä»¶åˆ†å² if/elif/else
- **Day 23**: ãƒ«ãƒ¼ãƒ— for/while
- **Day 24**: é–¢æ•°å®šç¾©ã¨ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«
- **Day 25**: ç°¡å˜ãªãƒŸãƒ‹ãƒ—ãƒ­ã‚°ãƒ©ãƒ ä½œæˆï¼ˆè¨ˆç®—æ©Ÿãªã©ï¼‰

### **Week 6 â€” FastAPI å…¥é–€**
- **Day 26**: FastAPIã¨ã¯ï¼Ÿ REST APIã®åŸºæœ¬
- **Day 27**: FastAPI ç’°å¢ƒæ§‹ç¯‰ & Hello World
- **Day 28**: GETã‚¨ãƒ³ãƒ‰ãƒã‚¤ãƒ³ãƒˆï¼ˆæŠ•ç¨¿ä¸€è¦§ã‚’è¿”ã™ï¼‰
- **Day 29**: POSTã‚¨ãƒ³ãƒ‰ãƒã‚¤ãƒ³ãƒˆï¼ˆæ–°è¦æŠ•ç¨¿ã‚’å—ã‘å–ã‚‹ï¼‰
- **Day 30**: APIãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆSwagger UIï¼‰ã‚’ç¢ºèª

### **Week 7 â€” MySQL åŸºç¤Ž**
- **Day 31**: RDBã®åŸºæœ¬æ¦‚å¿µï¼ˆãƒ†ãƒ¼ãƒ–ãƒ«ãƒ»ãƒ¬ã‚³ãƒ¼ãƒ‰ãƒ»åˆ—ï¼‰
- **Day 32**: SQLæ–‡ï¼ˆSELECT / INSERTï¼‰
- **Day 33**: UPDATE / DELETE
- **Day 34**: æŽ²ç¤ºæ¿ç”¨ãƒ†ãƒ¼ãƒ–ãƒ«è¨­è¨ˆï¼ˆusers, posts, commentsï¼‰
- **Day 35**: MySQL + FastAPIæŽ¥ç¶šãƒ†ã‚¹ãƒˆ

### **Week 8 â€” FastAPI + MySQL å®Ÿè£…**
- **Day 36**: æŠ•ç¨¿ä¸€è¦§ã‚’DBã‹ã‚‰å–å¾—
- **Day 37**: æ–°è¦æŠ•ç¨¿ã‚’DBã«ä¿å­˜
- **Day 38**: æŠ•ç¨¿è©³ç´°ãƒšãƒ¼ã‚¸API
- **Day 39**: æŠ•ç¨¿ç·¨é›†ãƒ»å‰Šé™¤API
- **Day 40**: 2ãƒ¶æœˆç›®ã¾ã¨ã‚ï¼ˆFastAPI + MySQLã§æŽ²ç¤ºæ¿CRUDå®Œæˆï¼‰

---

## **3ãƒ¶æœˆç›®ï¼ˆç™ºå±•ç·¨ï¼šã¤ãªã’ã‚‹ & æ”¹è‰¯ã™ã‚‹ï¼‰**

### **Week 9 â€” ãƒ•ãƒ­ãƒ³ãƒˆã¨ãƒãƒƒã‚¯ã®é€£æº**
- **Day 41**: JSã‹ã‚‰FastAPIã«Fetchã§ãƒªã‚¯ã‚¨ã‚¹ãƒˆ
- **Day 42**: æŠ•ç¨¿ä¸€è¦§ã‚’APIã‹ã‚‰å–å¾—ã—ã¦è¡¨ç¤º
- **Day 43**: æŠ•ç¨¿ãƒ•ã‚©ãƒ¼ãƒ ã‹ã‚‰APIã¸é€ä¿¡ã—ã¦ä¿å­˜
- **Day 44**: æŠ•ç¨¿è©³ç´°ã‚’APIã‹ã‚‰å–å¾—ã—ã¦è¡¨ç¤º
- **Day 45**: æŽ²ç¤ºæ¿ã®åŸºæœ¬æ“ä½œãŒä¸€é€šã‚Šã§ãã‚‹çŠ¶æ…‹ã«

### **Week 10 â€” ã‚³ãƒ¡ãƒ³ãƒˆæ©Ÿèƒ½ & ãƒšãƒ¼ã‚¸ãƒ³ã‚°**
- **Day 46**: ã‚³ãƒ¡ãƒ³ãƒˆç”¨APIä½œæˆ
- **Day 47**: ã‚³ãƒ¡ãƒ³ãƒˆä¸€è¦§/è¿½åŠ ã®ãƒ•ãƒ­ãƒ³ãƒˆå®Ÿè£…
- **Day 48**: ãƒšãƒ¼ã‚¸ãƒ³ã‚°ã®è€ƒãˆæ–¹ï¼ˆlimit/offsetï¼‰
- **Day 49**: ãƒšãƒ¼ã‚¸åˆ‡ã‚Šæ›¿ãˆãƒœã‚¿ãƒ³ã®å®Ÿè£…
- **Day 50**: ã‚³ãƒ¡ãƒ³ãƒˆ & ãƒšãƒ¼ã‚¸ãƒ³ã‚°çµ±åˆãƒ†ã‚¹ãƒˆ

### **Week 11 â€” ç°¡æ˜“ãƒ­ã‚°ã‚¤ãƒ³æ©Ÿèƒ½**
- **Day 51**: ãƒ¦ãƒ¼ã‚¶ãƒ¼ç™»éŒ²APIï¼ˆID, PWï¼‰
- **Day 52**: ãƒ‘ã‚¹ãƒ¯ãƒ¼ãƒ‰ãƒãƒƒã‚·ãƒ¥åŒ–ã®åŸºæœ¬
- **Day 53**: ãƒ­ã‚°ã‚¤ãƒ³APIï¼ˆJWTãƒˆãƒ¼ã‚¯ãƒ³ï¼‰
- **Day 54**: æŠ•ç¨¿æ™‚ã«ãƒ¦ãƒ¼ã‚¶ãƒ¼æƒ…å ±ã‚’ç´ã¥ã‘ã‚‹
- **Day 55**: è‡ªåˆ†ã®æŠ•ç¨¿ã ã‘ç·¨é›†/å‰Šé™¤å¯èƒ½ã«ã™ã‚‹

### **Week 12 â€” ã¾ã¨ã‚ & ç™ºè¡¨**
- **Day 56**: ãƒ‡ã‚¶ã‚¤ãƒ³æ”¹å–„ï¼ˆCSSä»•ä¸Šã’ï¼‰
- **Day 57**: ã‚¨ãƒ©ãƒ¼å‡¦ç† & ãƒãƒªãƒ‡ãƒ¼ã‚·ãƒ§ãƒ³è¿½åŠ 
- **Day 58**: AWSã‚µãƒ¼ãƒãƒ¼ã§ãƒ‡ãƒ—ãƒ­ã‚¤ & IPã‚¢ã‚¯ã‚»ã‚¹ç¢ºèª
- **Day 59**: æŽ²ç¤ºæ¿å®Œæˆç™ºè¡¨ç”¨ã‚¹ãƒ©ã‚¤ãƒ‰ä½œæˆ
- **Day 60**: æˆæžœç™ºè¡¨ä¼šï¼ˆãƒãƒ¼ãƒ  or å€‹äººç™ºè¡¨ï¼‰

---

## å­¦ç¿’ã‚´ãƒ¼ãƒ«
- **1ãƒ¶æœˆç›®**ï¼šHTML/CSS/JSã§é™çš„æŽ²ç¤ºæ¿ã‚’ä½œã‚Œã‚‹
- **2ãƒ¶æœˆç›®**ï¼šFastAPI + MySQLã§æŽ²ç¤ºæ¿APIã‚’ä½œã‚Œã‚‹
- **3ãƒ¶æœˆç›®**ï¼šãƒ•ãƒ­ãƒ³ãƒˆã¨APIã‚’ã¤ãªã’ã¦æœ¬ç‰©ã®æŽ²ç¤ºæ¿å®ŒæˆuÓ   ä»¥ä¸‹ã¯ã€æŽ²ç¤ºæ¿ä½œæˆã®3ã‹æœˆã‚³ãƒ¼ã‚¹ã«ãŠã‘ã‚‹è©•ä¾¡é …ç›®ã§ã™ã€‚
- å­¦ç¿’ã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ«ã«æ²¿ã£ã¦é€²ã‚ã‚‰ã‚ŒãŸã‹
- å„é€±ã®å­¦ç¿’ç›®æ¨™ã‚’é”æˆã—ãŸã‹
- æŽ²ç¤ºæ¿ã‚’å®Œæˆã•ã›ãŸã‹)u0   ã‚³ãƒ¼ãƒ‡ã‚£ãƒ³ã‚°ã‚’å­¦ã‚“ã§ã¿ãŸã„ã§ã™ã€‚u0   ã„ã„ãˆã€å­¦ã‚“ã ã“ã¨ã¯ã‚ã‚Šã¾ã›ã‚“ã€‚õ   ã¯ã„ã€ãŠé¡˜ã„ã—ã¾ã™ã€‚uX   æ¡ä»¶åˆ†å²ï¼ˆifï¼‰ã¨ç¹°ã‚Šè¿”ã—ï¼ˆforï¼whileï¼‰ã®å­¦ç¿’ã¯ã„ã‹ãŒã§ã—ãŸã‹ï¼Ÿu$   æ—¥èªŒã‚’æ•´ç†ã—ã¾ã—ã‚‡ã†ã‹ï¼Ÿu  ## ðŸ“˜ å­¦ç¿’æ—¥èªŒ (OOOO-OO-OO)

### ä»Šæ—¥å­¦ã‚“ã å†…å®¹
- **Python æ¡ä»¶æ–‡ (IF)**
- **ç¹°ã‚Šè¿”ã—æ–‡ (For / While)**

### å­¦ç¿’éŽç¨‹ã¨æ„Ÿæƒ³
- æ¡ä»¶æ–‡ IF ã¨ç¹°ã‚Šè¿”ã—æ–‡ For/While ã¯åˆã‚ã¦å­¦ã¶å†…å®¹ã ã£ãŸã®ã§é›£ã—ãæ„Ÿã˜ãŸã€‚
- æ¤œç´¢ã—ã¦èª¿ã¹ãªãŒã‚‰ä¸€ã¤ã²ã¨ã¤ç†è§£ã—ã¦å­¦ç¿’ã‚’é€²ã‚ãŸã€‚
- ç·´ç¿’å•é¡Œã‚’è§£ããªãŒã‚‰ã€å®Ÿéš›ã«ã‚³ãƒ¼ãƒ‰ã‚’æ›¸ã„ã¦ç¢ºèªã§ããŸã€‚

### æˆæžœ
- Python ã®åŸºæœ¬çš„ãªåˆ¶å¾¡æ–‡ï¼ˆæ¡ä»¶æ–‡ãƒ»ç¹°ã‚Šè¿”ã—æ–‡ï¼‰ã‚’ç†è§£ã§ããŸã€‚
- ç°¡å˜ãªã‚³ãƒ¼ãƒ‰ã®ä½œæˆã¨å•é¡Œæ¼”ç¿’ã‚’çµŒé¨“ã€‚

### ä»Šå¾Œã®è¨ˆç”»
- æ¡ä»¶æ–‡ã‚„ç¹°ã‚Šè¿”ã—æ–‡ã‚’ä½¿ã£ãŸã‚ˆã‚Šå¤šæ§˜ãªç·´ç¿’å•é¡Œã«å–ã‚Šçµ„ã‚€ã€‚
- å…¥ã‚Œå­ã®æ¡ä»¶æ–‡ï¼ç¹°ã‚Šè¿”ã—æ–‡ã€break/continue ãªã©ã®ç™ºå±•çš„ãªå†…å®¹ã‚’å­¦ç¿’äºˆå®šã€‚)õg   ä»Šæ—¥ã¯Pythonã®æ¡ä»¶åˆ†å²ï¼ˆifæ–‡ï¼‰ã¨ç¹°ã‚Šè¿”ã—ï¼ˆforæ–‡ï¼whileæ–‡ï¼‰ã‚’å‹‰å¼·ã—ã¾ã—ãŸã€‚õ   æ¡ä»¶åˆ†å²ï¼ˆifï¼‰ã¨ç¹°ã‚Šè¿”ã—ï¼ˆforï¼whileï¼‰ã¯åˆã‚ã¦ã§ã‹ãªã‚Šé›£ã—ã‹ã£ãŸã§ã™ãŒã€æ¤œç´¢ã—ã¦èª¿ã¹ãªãŒã‚‰ä¸€ã¤ã²ã¨ã¤ç†è§£ã—ã¦å­¦ç¿’ã—ã¾ã—ãŸã€‚ã¾ãŸã€ä¾‹é¡Œã‚’è§£ãã¤ã¤ã€å®Ÿéš›ã«ã‚³ãƒ¼ãƒ‰ã‚‚æ›¸ã„ã¦ã¿ã¾ã—ãŸã€‚õ   ã¯ã„ã€ãŠé¡˜ã„ã—ã¾ã™u6   ã‚°ãƒ«ãƒ¼ãƒ—ãƒãƒ£ãƒƒãƒˆã«å…±æœ‰ã—ã¾ã—ã‚‡ã†ã‹ï¼ŸuC   æ‰¿çŸ¥ã—ã¾ã—ãŸï¼
ã‚°ãƒ«ãƒ¼ãƒ—ãƒãƒ£ãƒƒãƒˆã«å…±æœ‰ã—ã¾ã™ã€‚)r:   r;   r<   u	   ã¯ã„ã€‚u  ITä¼æ¥­ã«å°±è·ã‚’ã”å¸Œæœ›ãªã®ã§ã™ã­ï¼

ãã‚Œã§ã¯3ã¤ã®æ–¹æ³•ãŒã‚ã‚Šã¾ã™ã€‚

1. Paiza Bãƒ©ãƒ³ã‚¯ã®å–å¾—
2. ãƒ—ãƒ­ã‚¸ã‚§ã‚¯ãƒˆï¼ˆPJTï¼‰ã®å®Ÿæ–½
3. Paiza Bãƒ©ãƒ³ã‚¯ã®å–å¾—ï¼‹ãƒ—ãƒ­ã‚¸ã‚§ã‚¯ãƒˆã®å®Ÿæ–½

ä¸€ç•ªãŠã™ã™ã‚ã™ã‚‹æ–¹æ³•ã¯ã€3ç•ªç›®ã§ã™ï¼u.  ã€ãƒ—ãƒ­ã‚¸ã‚§ã‚¯ãƒˆåã€‘
ã‚¬ãƒãƒ£ãƒ—ãƒ­ã‚¸ã‚§ã‚¯ãƒˆ

ã€ãƒ—ãƒ­ã‚¸ã‚§ã‚¯ãƒˆæ¦‚è¦ã€‘
ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒã‚¬ãƒãƒ£å•†å“ã‚’ç™»éŒ²ã—ã€æŽ²ç¤ºæ¿ã«æŠ•ç¨¿ã—ã¦ãƒ¦ãƒ¼ã‚¶ãƒ¼åŒå£«ãŒäº¤æµã§ãã€ã•ã‚‰ã«åœ°å›³ã‚’æŠ¼ã™ã¨è‡ªåˆ†ã®å‘¨å›²ã®ã‚¬ãƒãƒ£ã‚·ãƒ§ãƒƒãƒ—ã‚’è¡¨ç¤ºã™ã‚‹ãƒ—ãƒ­ã‚¸ã‚§ã‚¯ãƒˆã§ã™ã€‚
)uß	  ã¯ã„ã€æ¬¡ã¯ã‚¬ãƒãƒ£ãƒ—ãƒ­ã‚¸ã‚§ã‚¯ãƒˆã®1ã‹æœˆã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’ä½œæˆã„ãŸã—ã¾ã™ã€‚
# 1ã‹æœˆãƒ—ãƒ­ã‚¸ã‚§ã‚¯ãƒˆã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ«ï¼ˆã‚¬ãƒãƒ£ãƒ—ãƒ­ã‚¸ã‚§ã‚¯ãƒˆï¼‰

## ç¬¬1é€± â€” ä¼ç”» & é–‹ç™ºç’°å¢ƒæ§‹ç¯‰

- **è¦ä»¶æ•´ç†**
  - æ ¸å¿ƒæ©Ÿèƒ½ã®ç¢ºå®š:
    - ã‚¬ãƒãƒ£å•†å“ã®ç™»éŒ²
    - æŽ²ç¤ºæ¿ï¼ã‚³ãƒ¡ãƒ³ãƒˆæ©Ÿèƒ½
    - ãƒ¦ãƒ¼ã‚¶ãƒ¼åŒå£«ã®äº¤æµï¼ˆã‚³ãƒ¡ãƒ³ãƒˆï¼ã„ã„ã­ï¼‰
    - åœ°å›³ä¸Šã§å‘¨è¾ºã®ã‚¬ãƒãƒ£ã‚·ãƒ§ãƒƒãƒ—è¡¨ç¤ºï¼ˆGoogle Maps / Leaflet ç­‰ï¼‰
    - ä¼šå“¡ç™»éŒ²ï¼ãƒ­ã‚°ã‚¤ãƒ³

- **DBè¨­è¨ˆ**
  - ERD è¨­è¨ˆ: `users`, `gacha_items`, `posts`, `comments`, `shops`, `likes` ãªã©ã®ãƒ†ãƒ¼ãƒ–ãƒ«å®šç¾©

- **é–‹ç™ºç’°å¢ƒæ§‹ç¯‰**
  - GitHub/GitLab ãƒªãƒã‚¸ãƒˆãƒªä½œæˆ
  - ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ãƒ•ãƒ¬ãƒ¼ãƒ ãƒ¯ãƒ¼ã‚¯é¸å®šï¼ˆä¾‹: FastAPI, Node.js, Spring ç­‰ï¼‰
  - ãƒ•ãƒ­ãƒ³ãƒˆã‚¨ãƒ³ãƒ‰ç’°å¢ƒæ§‹ç¯‰ï¼ˆReact, Vue, Next.js ç­‰ï¼‰
  - DBï¼ˆMySQL, PostgreSQLï¼‰æŽ¥ç¶šç¢ºèª

- **UIãƒ¯ã‚¤ãƒ¤ãƒ¼ãƒ•ãƒ¬ãƒ¼ãƒ ä½œæˆ**
  - ãƒ­ã‚°ã‚¤ãƒ³ï¼ä¼šå“¡ç™»éŒ²ã€å•†å“ç™»éŒ²ç”»é¢ã€æŽ²ç¤ºæ¿ã€åœ°å›³ãƒšãƒ¼ã‚¸ã®åˆæœŸãƒ‡ã‚¶ã‚¤ãƒ³ï¼ˆFigma ç­‰ï¼‰

---

## ç¬¬2é€± â€” ã‚³ã‚¢æ©Ÿèƒ½é–‹ç™ºï¼ˆDBé€£æºï¼‰

- **ä¼šå“¡ï¼èªè¨¼æ©Ÿèƒ½**
  - ä¼šå“¡ç™»éŒ²ã€ãƒ­ã‚°ã‚¤ãƒ³ã€JWT èªè¨¼è¨­å®š

- **ã‚¬ãƒãƒ£å•†å“ç™»éŒ²æ©Ÿèƒ½**
  - å•†å“ã®ç™»éŒ²ï¼å‚ç…§ï¼å‰Šé™¤ API
  - ç”»åƒã‚¢ãƒƒãƒ—ãƒ­ãƒ¼ãƒ‰ï¼ˆS3, Cloud Storage æ´»ç”¨å¯ï¼‰

- **æŽ²ç¤ºæ¿ & ã‚³ãƒ¡ãƒ³ãƒˆæ©Ÿèƒ½**
  - æŠ•ç¨¿ CRUD
  - ã‚³ãƒ¡ãƒ³ãƒˆã€ã„ã„ã­æ©Ÿèƒ½å®Ÿè£…

- **DBãƒžã‚¤ã‚°ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³**
  - åˆæœŸã‚µãƒ³ãƒ—ãƒ«ãƒ‡ãƒ¼ã‚¿æŒ¿å…¥

---

## ç¬¬3é€± â€” åœ°å›³æ©Ÿèƒ½ & ãƒ•ãƒ­ãƒ³ãƒˆã‚¨ãƒ³ãƒ‰çµ±åˆ

- **åœ°å›³æ©Ÿèƒ½**
  - Google Maps API ã¾ãŸã¯ Leaflet.js ã§ã‚¬ãƒãƒ£ã‚·ãƒ§ãƒƒãƒ—ä½ç½®è¡¨ç¤º
  - ç¾åœ¨åœ°ã‚’åŸºæº–ã«ã—ãŸå‘¨è¾ºã‚·ãƒ§ãƒƒãƒ—ãƒªã‚¹ãƒˆè¡¨ç¤º
  - DB ã«åº§æ¨™ã‚’ä¿å­˜ã—ã¦é€£æº

- **ãƒ•ãƒ­ãƒ³ãƒˆã‚¨ãƒ³ãƒ‰**
  - åŸºæœ¬ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆé©ç”¨ï¼ˆãƒ˜ãƒƒãƒ€ãƒ¼ã€ãƒ•ãƒƒã‚¿ãƒ¼ã€ãƒ¡ãƒ‹ãƒ¥ãƒ¼ï¼‰
  - å•†å“ç™»éŒ²ãƒšãƒ¼ã‚¸é€£æº
  - æŽ²ç¤ºæ¿ UIã€ã‚³ãƒ¡ãƒ³ãƒˆ UI é€£æº
  - åœ°å›³ãƒšãƒ¼ã‚¸ UI å®Ÿè£…

---

## ç¬¬4é€± â€” ãƒ†ã‚¹ãƒˆ & ãƒ‡ãƒ—ãƒ­ã‚¤

- **çµ±åˆãƒ†ã‚¹ãƒˆ**
  - API ãƒ†ã‚¹ãƒˆï¼ˆPostman, pytest ç­‰ï¼‰
  - ãƒ•ãƒ­ãƒ³ãƒˆã‚¨ãƒ³ãƒ‰ãƒ»ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰é€£æºãƒ†ã‚¹ãƒˆ

- **ãƒã‚°ä¿®æ­£ & æœ€é©åŒ–**
  - UX æ”¹å–„ï¼ˆãƒ­ãƒ¼ãƒ‡ã‚£ãƒ³ã‚°è¡¨ç¤ºã€ã‚¨ãƒ©ãƒ¼ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸å‡¦ç†ï¼‰
  - DB ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹æœ€é©åŒ–

- **ãƒ‡ãƒ—ãƒ­ã‚¤**
  - AWS EC2 + Nginx/Apache ã§ã‚µãƒ¼ãƒ“ã‚¹å…¬é–‹
  - HTTPS è¨¼æ˜Žæ›¸é©ç”¨ï¼ˆLetâ€™s Encryptï¼‰

- **æœ€çµ‚ãƒã‚§ãƒƒã‚¯**
  - ã‚µãƒ³ãƒ—ãƒ«ãƒ¦ãƒ¼ã‚¶ãƒ¼ãƒ‡ãƒ¼ã‚¿ã§ E2E ã‚·ãƒŠãƒªã‚ªãƒ†ã‚¹ãƒˆ
  - ãƒ‡ãƒ¢æº–å‚™
u¦   ã‚¬ãƒãƒ£ãƒ—ãƒ­ã‚¸ã‚§ã‚¯ãƒˆã®è©•ä¾¡åŸºæº–ã§ã™ã€‚
- ãƒ—ãƒ­ã‚¸ã‚§ã‚¯ãƒˆã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ«ã«æ²¿ã£ã¦é€²ã‚ã‚‰ã‚ŒãŸã‹
- å„é€±ã”ã¨ã®ç›®æ¨™ã‚’é”æˆã§ããŸã‹
õ@   1æ—¥ã”ã¨ã®ã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚‚ãŠä½œã‚Šã—ã¾ã—ã‚‡ã†ã‹ï¼Ÿu‘	  # ã‚¬ãƒãƒ£ãƒ—ãƒ­ã‚¸ã‚§ã‚¯ãƒˆ â€” æ—¥åˆ¥é–‹ç™ºã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ«

## âœ… ç¬¬1é€±ï¼ˆä¼ç”» & ç’°å¢ƒæ§‹ç¯‰ï¼‰

- **Day 1** : ãƒ—ãƒ­ã‚¸ã‚§ã‚¯ãƒˆã‚­ãƒƒã‚¯ã‚ªãƒ•
  - è¦ä»¶æ•´ç†ã€æ ¸å¿ƒæ©Ÿèƒ½ã®ç¢ºå®šï¼ˆä¼šå“¡ã€æŽ²ç¤ºæ¿ã€ã‚¬ãƒãƒ£å•†å“ã€åœ°å›³ï¼‰
  - æ©Ÿèƒ½ã®å„ªå…ˆé †ä½ã‚’æ±ºå®š

- **Day 2** : DBè¨­è¨ˆ
  - ERD ä½œæˆï¼ˆ`users`, `gacha_items`, `posts`, `comments`, `shops`, `likes`ï¼‰
  - ãƒ†ãƒ¼ãƒ–ãƒ«ã‚«ãƒ©ãƒ å®šç¾©

- **Day 3** : é–‹ç™ºç’°å¢ƒæº–å‚™
  - GitHub/GitLab ãƒªãƒã‚¸ãƒˆãƒªä½œæˆ
  - Python/Node.js ç’°å¢ƒæ§‹ç¯‰ã€ä»®æƒ³ç’°å¢ƒæº–å‚™

- **Day 4** : ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰åŸºæœ¬è¨­å®š
  - FastAPI/Express ãƒ—ãƒ­ã‚¸ã‚§ã‚¯ãƒˆåˆæœŸåŒ–
  - DBï¼ˆMySQL/PostgreSQLï¼‰æŽ¥ç¶šãƒ†ã‚¹ãƒˆ

- **Day 5** : ãƒ•ãƒ­ãƒ³ãƒˆã‚¨ãƒ³ãƒ‰åŸºæœ¬è¨­å®š
  - React/Next.js ãƒ—ãƒ­ã‚¸ã‚§ã‚¯ãƒˆåˆæœŸåŒ–
  - ãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚°æ§‹é€ è¨­å®šï¼ˆãƒ­ã‚°ã‚¤ãƒ³ã€æŽ²ç¤ºæ¿ã€åœ°å›³ãªã©ï¼‰

---

## âœ… ç¬¬2é€±ï¼ˆã‚³ã‚¢æ©Ÿèƒ½é–‹ç™ºï¼‰

- **Day 6** : ä¼šå“¡ï¼èªè¨¼ (1)
  - ä¼šå“¡ç™»éŒ² APIã€DB ä¿å­˜

- **Day 7** : ä¼šå“¡ï¼èªè¨¼ (2)
  - ãƒ­ã‚°ã‚¤ãƒ³ APIã€JWT ç™ºè¡Œï¼æ¤œè¨¼

- **Day 8** : ã‚¬ãƒãƒ£å•†å“ (1)
  - å•†å“ç™»éŒ² API
  - å•†å“ãƒ†ãƒ¼ãƒ–ãƒ«é€£æº

- **Day 9** : ã‚¬ãƒãƒ£å•†å“ (2)
  - å•†å“å‚ç…§ï¼å‰Šé™¤ API
  - ç”»åƒã‚¢ãƒƒãƒ—ãƒ­ãƒ¼ãƒ‰ï¼ˆS3ï¼Cloud Storageï¼‰

- **Day 10** : æŽ²ç¤ºæ¿ (1)
  - æŠ•ç¨¿ä½œæˆï¼å‚ç…§ API

---

## âœ… ç¬¬3é€±ï¼ˆæ©Ÿèƒ½æ‹¡å¼µ & UI é€£æºï¼‰

- **Day 11** : æŽ²ç¤ºæ¿ (2)
  - æŠ•ç¨¿ç·¨é›†ï¼å‰Šé™¤ API
  - ã‚³ãƒ¡ãƒ³ãƒˆæ©Ÿèƒ½è¿½åŠ 

- **Day 12** : ã„ã„ã­æ©Ÿèƒ½
  - ã„ã„ã­ APIã€DB åæ˜ 

- **Day 13** : åœ°å›³æ©Ÿèƒ½ (1)
  - Leaflet.jsï¼Google Maps API é€£æº
  - ç¾åœ¨åœ°ã®è¡¨ç¤º

- **Day 14** : åœ°å›³æ©Ÿèƒ½ (2)
  - DB ã«ä¿å­˜ã•ã‚ŒãŸã‚¬ãƒãƒ£ã‚·ãƒ§ãƒƒãƒ—ã‚’è¡¨ç¤º
  - åœ°å›³ã¨ API ã‚’é€£æº

- **Day 15** : ãƒ•ãƒ­ãƒ³ãƒˆ UI åŸºæœ¬æž çµ„ã¿
  - ãƒ˜ãƒƒãƒ€ãƒ¼ï¼ãƒ•ãƒƒã‚¿ãƒ¼ï¼ãƒ¡ãƒ‹ãƒ¥ãƒ¼é©ç”¨
  - ãƒšãƒ¼ã‚¸é·ç§»ç¢ºèª

---

## âœ… ç¬¬4é€±ï¼ˆãƒ†ã‚¹ãƒˆ & ãƒ‡ãƒ—ãƒ­ã‚¤ï¼‰

- **Day 16** : ãƒ•ãƒ­ãƒ³ãƒˆãƒ»ãƒãƒƒã‚¯é€£æº (1)
  - ä¼šå“¡ç™»éŒ²ï¼ãƒ­ã‚°ã‚¤ãƒ³ç”»é¢ + API é€£æº

- **Day 17** : ãƒ•ãƒ­ãƒ³ãƒˆãƒ»ãƒãƒƒã‚¯é€£æº (2)
  - æŽ²ç¤ºæ¿ç”»é¢ + API é€£æº
  - ã‚³ãƒ¡ãƒ³ãƒˆï¼ã„ã„ã­ UI

- **Day 18** : ãƒ•ãƒ­ãƒ³ãƒˆãƒ»ãƒãƒƒã‚¯é€£æº (3)
  - ã‚¬ãƒãƒ£å•†å“ç™»éŒ²ï¼å‚ç…§ç”»é¢ + API é€£æº

- **Day 19** : ãƒ•ãƒ­ãƒ³ãƒˆãƒ»ãƒãƒƒã‚¯é€£æº (4)
  - åœ°å›³ç”»é¢ + API é€£æº

- **Day 20** : çµ±åˆãƒ†ã‚¹ãƒˆ & ãƒ‡ãƒ—ãƒ­ã‚¤
  - API ãƒ†ã‚¹ãƒˆï¼ˆPostmanï¼‰
  - AWS EC2 ãƒ‡ãƒ—ãƒ­ã‚¤ã€HTTPS é©ç”¨
  - ãƒ‡ãƒ¢æº–å‚™  u>   ç¾åœ¨ã€ITã«é–¢ã™ã‚‹çµŒé¨“ã‚„çŸ¥è­˜ã¯ãŠæŒã¡ã§ã™ã‹ï¼Ÿuv  ã¯ã„ã€ãã‚Œã§ã¯Paiza Bãƒ©ãƒ³ã‚¯ã®1ã‹æœˆã‚³ãƒ¼ã‚¹ã‚’ä½œæˆã„ãŸã—ã¾ã™ã€‚
# Paiza Bãƒ©ãƒ³ã‚¯å¯¾ç­– 1ãƒ¶æœˆå­¦ç¿’ã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ«ï¼ˆPythonåŸºç¤ŽçŸ¥è­˜ã‚ã‚Šï¼‰

## ðŸ”¹ 1é€±ç›®: Paiza Cãƒ©ãƒ³ã‚¯ç·å¾©ç¿’
**ç›®æ¨™**: åŸºç¤Žå•é¡Œã‚’ç´ æ—©ãè§£ã‘ã‚‹ã‚ˆã†ã«ã™ã‚‹

- å…¥å‡ºåŠ›å‡¦ç†ã®ç·´ç¿’ï¼ˆè¤‡æ•°è¡Œå…¥åŠ›ã€2æ¬¡å…ƒå…¥åŠ›ï¼‰
- æ–‡å­—åˆ—å‡¦ç†ï¼ˆsplit, join, count, find, replaceï¼‰
- ãƒªã‚¹ãƒˆæ“ä½œï¼ˆæœ€å¤§å€¤/æœ€å°å€¤ã€ã‚½ãƒ¼ãƒˆã€ã‚¹ãƒ©ã‚¤ã‚¹ï¼‰
- ç°¡å˜ãªã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ï¼ˆåº§æ¨™ç§»å‹•ã€ç¹°ã‚Šè¿”ã—å‡¦ç†ï¼‰
- **æ¼”ç¿’**: Paiza Cãƒ©ãƒ³ã‚¯å•é¡Œã‚’æ¯Žæ—¥3å•

---

## ðŸ”¹ 2é€±ç›®: ã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ & ã‚«ã‚¦ãƒ³ãƒˆå¼·åŒ–
**ç›®æ¨™**: Bãƒ©ãƒ³ã‚¯å…¸åž‹ãƒ‘ã‚¿ãƒ¼ãƒ³ã®ç¿’å¾—

- **ã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³**
  - çŠ¶æ…‹æ›´æ–°ï¼ˆä¾‹: ãƒ­ãƒœãƒƒãƒˆç§»å‹•ã€ã‚²ãƒ¼ãƒ ç›¤ã®å¤‰åŒ–ï¼‰
  - ã€å•é¡Œâ‘ ã€‘ãƒãƒ§ã‚³ãƒ¬ãƒ¼ãƒˆåº§æ¨™ã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³
- **ã‚«ã‚¦ãƒ³ãƒˆ**
  - æ¡ä»¶ã‚’æº€ãŸã™æ•°ã‚’æ•°ãˆã‚‹
  - è¡Œåˆ—ã‚„ãƒ“ãƒ³ã‚´åˆ¤å®š
  - ã€å•é¡Œâ‘¡ã€‘NÃ—Nãƒ“ãƒ³ã‚´
- **æ¼”ç¿’**: Paiza Cï½žBãƒ©ãƒ³ã‚¯å•é¡Œã‚’æ¯Žæ—¥2å•

---

## ðŸ”¹ 3é€±ç›®: å…¨æŽ¢ç´¢ & æœ€å°å€¤æŽ¢ç´¢
**ç›®æ¨™**: Brute Force ã§æ¼ã‚Œãªãè§£ã‘ã‚‹åŠ›

- **æŽ¢ç´¢**
  - å…¨æŽ¢ç´¢ï¼ˆBrute Forceï¼‰
  - ãƒžãƒ³ãƒãƒƒã‚¿ãƒ³è·é›¢ã®è¨ˆç®—
  - æœ€å°å€¤ã®æ›´æ–°ã¨å€™è£œã®ä¿å­˜
  - ã€å•é¡Œâ‘¢ã€‘æ˜ ç”»é¤¨ã®åº§å¸­
- **æ¼”ç¿’**:
  - Cãƒ©ãƒ³ã‚¯ã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³1å•
  - Bãƒ©ãƒ³ã‚¯æŽ¢ç´¢ç³»å•é¡Œ1å•ï¼ˆæ¯Žæ—¥åˆè¨ˆ2å•ï¼‰

---

## ðŸ”¹ 4é€±ç›®: å®Ÿæˆ¦æ¨¡æ“¬è©¦é¨“ & ã‚ªãƒ¼ãƒãƒ¼ãƒ“ãƒ¥ãƒ¼
**ç›®æ¨™**: å®Ÿéš›ã®Bãƒ©ãƒ³ã‚¯è©¦é¨“å½¢å¼ã«æ…£ã‚Œã‚‹

- **æ¨¡æ“¬è©¦é¨“**
  - åˆ¶é™æ™‚é–“1æ™‚é–“ã§1å•è§£ã
  - å…¥åŠ›å‡¦ç† â†’ ãƒ­ã‚¸ãƒƒã‚¯ â†’ å‡ºåŠ›ã‚’ç´ æ—©ã
- **å¾©ç¿’**
  - é–“é•ãˆãŸå•é¡Œã‚’å¿…ãšå†æŒ‘æˆ¦
  - ã‚³ãƒ¼ãƒ‰ã‚’ãƒªãƒ•ã‚¡ã‚¯ã‚¿ãƒªãƒ³ã‚°ï¼ˆçŸ­ãã€èª­ã¿ã‚„ã™ãï¼‰
- **æ¼”ç¿’**:
  - Bãƒ©ãƒ³ã‚¯å•é¡Œã‚’æ¯Žæ—¥1å•
  - æ¨¡æ“¬è©¦é¨“å½¢å¼ã§é€±3å›ž

---

# âœ… å­¦ç¿’ãƒã‚¤ãƒ³ãƒˆã¾ã¨ã‚
- **Week1**: Cãƒ©ãƒ³ã‚¯ã®åŸºç¤Žã‚’å›ºã‚ã‚‹
- **Week2**: ã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³/ã‚«ã‚¦ãƒ³ãƒˆç·´ç¿’
- **Week3**: æŽ¢ç´¢ãƒ»æœ€å°å€¤å•é¡Œã«æ…£ã‚Œã‚‹
- **Week4**: æ¨¡æ“¬è©¦é¨“ã§å®Ÿæˆ¦æ„Ÿè¦šã‚’ã¤ã‘ã‚‹

[ã€Paizaã®ãƒªãƒ³ã‚¯ã€‘](https://paiza.jp/)
r=   u§  # Paiza Bãƒ©ãƒ³ã‚¯å¯¾ç­– 1ãƒ¶æœˆ æ—¥åˆ¥å­¦ç¿’ã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ«ï¼ˆPythonåŸºç¤ŽçŸ¥è­˜ã‚ã‚Šï¼‰

## ðŸ”¹ ç¬¬1é€± (Cãƒ©ãƒ³ã‚¯ç·å¾©ç¿’)
- **Day 1**: å…¥å‡ºåŠ›å¾©ç¿’ï¼ˆ`input().split()`ã€è¤‡æ•°è¡Œå…¥åŠ›ã€2æ¬¡å…ƒãƒªã‚¹ãƒˆå…¥åŠ›ï¼‰
- **Day 2**: æ–‡å­—åˆ—å‡¦ç†åŸºç¤Žï¼ˆ`split`, `join`, `replace`ï¼‰ï¼‹æ¼”ç¿’ï¼ˆæ–‡å­—åˆ—ã®é€†é †ï¼‰
- **Day 3**: æ–‡å­—åˆ—æŽ¢ç´¢ï¼ˆ`find`, `count`, `in`ï¼‰ï¼‹æ¼”ç¿’ï¼ˆå˜èªžã®å‡ºç¾å›žæ•°ã‚’æ•°ãˆã‚‹ï¼‰
- **Day 4**: ãƒªã‚¹ãƒˆå¾©ç¿’ï¼ˆæœ€å¤§/æœ€å°ã€ã‚½ãƒ¼ãƒˆã€ã‚¹ãƒ©ã‚¤ã‚¹ï¼‰
- **Day 5**: Cãƒ©ãƒ³ã‚¯å•é¡Œ3å•è§£ãï¼ˆæ–‡å­—åˆ—ãƒ»ãƒªã‚¹ãƒˆä¸­å¿ƒï¼‰
- **é€±æœ«ï¼ˆå¾©ç¿’ï¼‰**: Day1ï½ž5ã®ã‚³ãƒ¼ãƒ‰å†å®Ÿè¡Œã€èª¤ç­”ãƒŽãƒ¼ãƒˆä½œæˆ

---

## ðŸ”¹ ç¬¬2é€± (ã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ & ã‚«ã‚¦ãƒ³ãƒˆå¼·åŒ–)
- **Day 6**: ã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³åŸºç¤Žï¼ˆåº§æ¨™ç§»å‹•ã€çŠ¶æ…‹æ›´æ–°ï¼‰
- **Day 7**: æ¼”ç¿’ â€“ ãƒãƒ§ã‚³ãƒ¬ãƒ¼ãƒˆåº§æ¨™ã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ï¼ˆå•é¡Œâ‘ ï¼‰
- **Day 8**: ã‚«ã‚¦ãƒ³ãƒˆåŸºç¤Žï¼ˆæ¡ä»¶ã‚’æº€ãŸã™æ•°ã‚’æ•°ãˆã‚‹ï¼‰
- **Day 9**: æ¼”ç¿’ â€“ NÃ—Nãƒ“ãƒ³ã‚´ï¼ˆå•é¡Œâ‘¡ï¼‰
- **Day 10**: Cï½žBãƒ©ãƒ³ã‚¯æ··åˆå•é¡Œ2å•è§£ãï¼ˆã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³/ã‚«ã‚¦ãƒ³ãƒˆï¼‰
- **é€±æœ«ï¼ˆå¾©ç¿’ï¼‰**: ãƒãƒ§ã‚³ãƒ¬ãƒ¼ãƒˆå•é¡Œã€ãƒ“ãƒ³ã‚´å•é¡Œã‚’å†æŒ‘æˆ¦ï¼ˆç•°ãªã‚‹å…¥åŠ›ã§ãƒ†ã‚¹ãƒˆï¼‰

---

## ðŸ”¹ ç¬¬3é€± (æŽ¢ç´¢ & æœ€å°å€¤æŽ¢ç´¢)
- **Day 11**: å…¨æŽ¢ç´¢ï¼ˆBrute Forceï¼‰åŸºç¤Žï¼‹ç°¡å˜ãªãƒªã‚¹ãƒˆæŽ¢ç´¢æ¼”ç¿’
- **Day 12**: ãƒžãƒ³ãƒãƒƒã‚¿ãƒ³è·é›¢è¨ˆç®—æ¼”ç¿’
- **Day 13**: æ¼”ç¿’ â€“ æ˜ ç”»é¤¨ã®åº§å¸­ï¼ˆå•é¡Œâ‘¢ï¼‰
- **Day 14**: å¿œç”¨ â€“ æœ€å°è·é›¢ã®åº§æ¨™ã‚’è¤‡æ•°å‡ºåŠ›ã™ã‚‹å•é¡Œ
- **Day 15**: Bãƒ©ãƒ³ã‚¯æŽ¢ç´¢å•é¡Œ2å•è§£ãï¼ˆæ˜ ç”»é¤¨åº§å¸­ï¼‹å¿œç”¨å•é¡Œï¼‰
- **é€±æœ«ï¼ˆå¾©ç¿’ï¼‰**: æ˜ ç”»é¤¨åº§å¸­å•é¡Œã‚’å†æŒ‘æˆ¦ã€ã‚³ãƒ¼ãƒ‰æœ€é©åŒ–

---

## ðŸ”¹ ç¬¬4é€± (å®Ÿæˆ¦æ¨¡æ“¬è©¦é¨“ & ç·å¾©ç¿’)
- **Day 16**: æ¨¡æ“¬è©¦é¨“ â€“ åˆ¶é™æ™‚é–“1æ™‚é–“ã§ã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³å•é¡Œ1å•
- **Day 17**: èª¤ç­”å¾©ç¿’ï¼‹ã‚³ãƒ¼ãƒ‰ãƒªãƒ•ã‚¡ã‚¯ã‚¿ãƒªãƒ³ã‚°
- **Day 18**: æ¨¡æ“¬è©¦é¨“ â€“ åˆ¶é™æ™‚é–“1æ™‚é–“ã§ã‚«ã‚¦ãƒ³ãƒˆå•é¡Œ1å•
- **Day 19**: èª¤ç­”å¾©ç¿’ï¼‹ã‚³ãƒ¼ãƒ‰æœ€é©åŒ–
- **Day 20**: æ¨¡æ“¬è©¦é¨“ â€“ åˆ¶é™æ™‚é–“1æ™‚é–“ã§æŽ¢ç´¢å•é¡Œ1å•
- **é€±æœ«ï¼ˆå¾©ç¿’ï¼‰**: æ¨¡æ“¬è©¦é¨“3å•ã‚’å†æŒ‘æˆ¦ã€é–“é•ãˆãŸéƒ¨åˆ†ã‚’æ•´ç†

---

## ðŸ”¹ æœ€çµ‚é€± (ä»•ä¸Šã’ & æœ€çµ‚ãƒã‚§ãƒƒã‚¯)
- **Day 21**: Bãƒ©ãƒ³ã‚¯éŽåŽ»å•1å•ï¼ˆã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ï¼‰
- **Day 22**: Bãƒ©ãƒ³ã‚¯éŽåŽ»å•1å•ï¼ˆã‚«ã‚¦ãƒ³ãƒˆï¼‰
- **Day 23**: Bãƒ©ãƒ³ã‚¯éŽåŽ»å•1å•ï¼ˆæŽ¢ç´¢ï¼‰
- **Day 24**: ãƒ©ãƒ³ãƒ€ãƒ ã§C/Bå•é¡Œ2å•è§£ã
- **Day 25**: ç·å¾©ç¿’ï¼‹æ¨¡æ“¬è©¦é¨“1æ™‚é–“ï¼ˆãƒ©ãƒ³ãƒ€ãƒ Bãƒ©ãƒ³ã‚¯å•é¡Œï¼‰
- **é€±æœ«ï¼ˆæœ€çµ‚å¾©ç¿’ï¼‰**: ä»Šã¾ã§è§£ã„ãŸå•é¡Œã®èª¤ç­”ã‚’ã™ã¹ã¦å†æŒ‘æˆ¦

---

# âœ… ã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ç‰¹å¾´
- **ç¬¬1é€±**: Cãƒ©ãƒ³ã‚¯åŸºç¤Žå›ºã‚
- **ç¬¬2é€±**: ã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³/ã‚«ã‚¦ãƒ³ãƒˆé›†ä¸­ï¼ˆå•é¡Œâ‘ /â‘¡å¯¾ç­–ï¼‰
- **ç¬¬3é€±**: æŽ¢ç´¢/æœ€å°å€¤å•é¡Œé›†ä¸­ï¼ˆå•é¡Œâ‘¢å¯¾ç­–ï¼‰
- **ç¬¬4é€±**: æ¨¡æ“¬è©¦é¨“ã§å®Ÿæˆ¦æ„Ÿè¦šã‚’é¤Šã†
- **æœ€çµ‚é€±**: Bãƒ©ãƒ³ã‚¯éŽåŽ»å•/ãƒ©ãƒ³ãƒ€ãƒ å•é¡Œã§ä»•ä¸Šã’
u    
ãã—ã¦æ¬¡ã¯3ã‹æœˆé–“ã®è©•ä¾¡å†…å®¹ã§ã™ã€‚
- å­¦ç¿’ã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ«ã«æ²¿ã£ã¦é€²ã‚ã‚‰ã‚ŒãŸã‹
- å„é€±ã”ã¨ã®å­¦ç¿’ç›®æ¨™ã‚’é”æˆã§ããŸã‹

uŠ  åˆæ ¼ãŠã‚ã§ã¨ã†ã”ã–ã„ã¾ã™ï¼

ãã‚Œã§ã¯ã€PJTã‚’ã”ç´¹ä»‹ã„ãŸã—ã¾ã™ï¼

ã€ãƒ—ãƒ­ã‚¸ã‚§ã‚¯ãƒˆåã€‘

ã‚¬ãƒãƒ£ãƒ—ãƒ­ã‚¸ã‚§ã‚¯ãƒˆ

ã€ãƒ—ãƒ­ã‚¸ã‚§ã‚¯ãƒˆæ¦‚è¦ã€‘

ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒã‚¬ãƒãƒ£å•†å“ã‚’ç™»éŒ²ã—ã€æŽ²ç¤ºæ¿ã«æŠ•ç¨¿ã—ã¦ãƒ¦ãƒ¼ã‚¶ãƒ¼åŒå£«ãŒäº¤æµã§ãã€ã•ã‚‰ã«åœ°å›³ã‚’æŠ¼ã™ã¨è‡ªåˆ†ã®å‘¨å›²ã®ã‚¬ãƒãƒ£ã‚·ãƒ§ãƒƒãƒ—ã‚’è¡¨ç¤ºã™ã‚‹ãƒ—ãƒ­ã‚¸ã‚§ã‚¯ãƒˆã§ã™ã€‚u_
  ã¯ã„ï¼Paiza Bãƒ©ãƒ³ã‚¯ã«åˆæ ¼ã—ã€ãã®å¾ŒITä¼æ¥­ã«å°±è·ã™ã‚‹ãŸã‚ã«å¿…è¦ãªã‚«ãƒªã‚­ãƒ¥ãƒ©ãƒ ã‚’ã”æç¤ºã—ã¾ã™ï¼
# Pythonå­¦ç¿’ã‚«ãƒªã‚­ãƒ¥ãƒ©ãƒ ï¼ˆPaiza Bãƒ©ãƒ³ã‚¯å¯¾ç­–ï¼‰

## 1æ®µéšŽ. PythonåŸºç¤Žæ–‡æ³•ï¼ˆå…¥é–€ï¼‰

- **ç’°å¢ƒè¨­å®š**: Pythonã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã€VS Code/IDLEã®ä½¿ã„æ–¹
- **åŸºæœ¬æ–‡æ³•**
  - å¤‰æ•°ã€ãƒ‡ãƒ¼ã‚¿åž‹(int, float, str, bool)
  - å…¥åŠ›(`input()`)ã€å‡ºåŠ›(`print()`)
  - åŸºæœ¬æ¼”ç®—å­(+ - * // % **)
- **æ¡ä»¶åˆ†å²**
  - if / elif / else
  - è«–ç†æ¼”ç®—å­(and, or, not)
- **ç¹°ã‚Šè¿”ã—**
  - for, while
  - range() ã®æ´»ç”¨
- **æ¼”ç¿’èª²é¡Œ**
  - åˆè¨ˆã‚’æ±‚ã‚ã‚‹
  - ä¹ä¹ã®å‡ºåŠ›
  - æ˜Ÿå°ãƒ‘ã‚¿ãƒ¼ãƒ³ã®å‡ºåŠ›

---

## 2æ®µéšŽ. ãƒ‡ãƒ¼ã‚¿æ§‹é€ åŸºç¤Žï¼ˆãƒªã‚¹ãƒˆãƒ»æ–‡å­—åˆ—ä¸­å¿ƒï¼‰

- **ãƒªã‚¹ãƒˆ(list)**
  - ä½œæˆã€ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ã‚¢ã‚¯ã‚»ã‚¹ã€ã‚¹ãƒ©ã‚¤ã‚¹
  - è¿½åŠ /å‰Šé™¤/ã‚½ãƒ¼ãƒˆ (`append`, `sort`, `remove`)
- **æ–‡å­—åˆ—(str)**
  - ã‚¹ãƒ©ã‚¤ã‚¹ã€`split()`, `join()`, `replace()`
  - æ–‡å­—åˆ—ã®èµ°æŸ»(for â€¦ in â€¦)
- **è¾žæ›¸(dict)ã€é›†åˆ(set)**
  - key-value æ§‹é€ 
  - é‡è¤‡é™¤åŽ»
- **æ¼”ç¿’èª²é¡Œ**
  - æ–‡å­—åˆ—ã®é€†é †
  - ãƒªã‚¹ãƒˆã®æœ€å¤§å€¤/æœ€å°å€¤ã‚’æ±‚ã‚ã‚‹
  - å‡ºç¾å›žæ•°ã‚’æ•°ãˆã‚‹ï¼ˆã‚«ã‚¦ãƒ³ã‚¿ãƒ¼ï¼‰

---

## 3æ®µéšŽ. é–¢æ•° & å…¥å‡ºåŠ›å‡¦ç†

- **é–¢æ•°**
  - å®šç¾©/å‘¼ã³å‡ºã— (`def func():`)
  - æˆ»ã‚Šå€¤
- **æ¨™æº–å…¥åŠ›å‡¦ç†**
  - `input().split()`
  - `map(int, input().split())`
- **è¤‡æ•°è¡Œå…¥åŠ›**
  - `for _ in range(N):` ã¨çµ„ã¿åˆã‚ã›ã¦ä½¿ç”¨
- **æ¼”ç¿’èª²é¡Œ**
  - Nå€‹ã®æ•°ã®åˆè¨ˆ/å¹³å‡
  - 2æ¬¡å…ƒãƒªã‚¹ãƒˆã‚’å…¥åŠ›ã—ã¦å‡ºåŠ›

---

## 4æ®µéšŽ. ã‚¢ãƒ«ã‚´ãƒªã‚ºãƒ åŸºç¤Žï¼ˆPaiza Cï½žBãƒ©ãƒ³ã‚¯å¿…é ˆï¼‰

- **ã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³**
  - åº§æ¨™ç§»å‹•(F/B/L/R)ã€ã‚°ãƒªãƒƒãƒ‰æŽ¢ç´¢
  - ã€å•é¡Œâ‘ ã€‘ãƒãƒ§ã‚³ãƒ¬ãƒ¼ãƒˆåº§æ¨™ã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³
- **ã‚«ã‚¦ãƒ³ãƒˆå‡¦ç†**
  - ãƒ“ãƒ³ã‚´ç›¤ã®è¡Œã‚«ã‚¦ãƒ³ãƒˆ (row, col, diagonal)
  - ã€å•é¡Œâ‘¡ã€‘NÃ—N ãƒ“ãƒ³ã‚´
- **æŽ¢ç´¢ & æœ€å°å€¤æŽ¢ç´¢**
  - å…¨æŽ¢ç´¢ï¼ˆBrute Forceï¼‰
  - ãƒžãƒ³ãƒãƒƒã‚¿ãƒ³è·é›¢è¨ˆç®—
  - ã€å•é¡Œâ‘¢ã€‘æ˜ ç”»é¤¨ã®åº§å¸­
- **ã‚½ãƒ¼ãƒˆ & æ¡ä»¶å‡¦ç†**
  - `sorted()`, `key` é–¢æ•°
- **æ¼”ç¿’èª²é¡Œ**
  - è¿·è·¯ç§»å‹•
  - æ•°å­—ã‚«ãƒ¼ãƒ‰æŽ¢ç´¢
  - æœ€å°è·é›¢æŽ¢ç´¢

---

## 5æ®µéšŽ. å•é¡Œè§£æ±ºã®å®Ÿæˆ¦ç·´ç¿’

- **Paiza Cãƒ©ãƒ³ã‚¯å•é¡Œã‚’å…¨ã¦è§£ã**
  - æ–‡å­—åˆ—å‡¦ç†ã€é…åˆ—åˆè¨ˆã€æ¡ä»¶åˆ†å²ãªã©
- **Bãƒ©ãƒ³ã‚¯å•é¡Œã«æŒ‘æˆ¦**
  - ä»Šå›žæç¤ºã—ãŸ3ã¤ã®å•é¡Œï¼ˆãƒãƒ§ã‚³ãƒ¬ãƒ¼ãƒˆã€ãƒ“ãƒ³ã‚´ã€æ˜ ç”»é¤¨ã®åº§å¸­ï¼‰ã¨åŒæ§˜ã®ã‚¿ã‚¤ãƒ—
  - ã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ / ã‚«ã‚¦ãƒ³ãƒˆ / æŽ¢ç´¢ãƒ™ãƒ¼ã‚¹ã®å•é¡Œ

[ã€Paizaã®ãƒªãƒ³ã‚¯ã€‘](https://paiza.jp/)

ã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ«ã¨ã—ã¦æ•´ç†ã—ã¾ã—ã‚‡ã†ã‹ï¼Ÿ
u
  ã¯ã„ï¼3ã‹æœˆã§ã§ãã‚‹Pythonå­¦ç¿’ã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ«ã§ã™ã€‚
# ðŸ“… Python 12é€±é–“ æ—¥åˆ¥å­¦ç¿’ã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ«ï¼ˆPaiza Bãƒ©ãƒ³ã‚¯å¯¾ç­–ï¼‰

## ðŸ”¹ ç¬¬1ï½ž2é€±: PythonåŸºç¤Žã‚’å›ºã‚ã‚‹
**ç›®æ¨™**: Pythonæ–‡æ³•ã¨åŸºæœ¬çš„ãªå…¥å‡ºåŠ›ã«æ…£ã‚Œã‚‹

- **Day 1**: Pythonã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã€VS Codeã®ä½¿ã„æ–¹ã€`print()` å®Ÿç¿’
- **Day 2**: å¤‰æ•°/ãƒ‡ãƒ¼ã‚¿åž‹(int, float, str, bool)
- **Day 3**: ç®—è¡“/æ¯”è¼ƒ/è«–ç†æ¼”ç®—å­ å®Ÿç¿’
- **Day 4**: ifæ–‡ã€elifã€else
- **Day 5**: ãƒã‚¹ãƒˆifã€è«–ç†æ¼”ç®—å­å¿œç”¨
- **Day 6**: foræ–‡ã€range() åŸºæœ¬
- **Day 7**: whileæ–‡ã€break/continue
- **Day 8**: `input()`, `split()`, `map()` æ´»ç”¨
- **Day 9**: ç·´ç¿’å•é¡Œï¼ˆä¹ä¹ã€1ï½žNã®åˆè¨ˆï¼‰
- **Day 10**: æ˜Ÿå°å‡ºåŠ›ï¼ˆâ–³ã€â–¡ã€ãƒ”ãƒ©ãƒŸãƒƒãƒ‰ï¼‰

---

## ðŸ”¹ ç¬¬3ï½ž4é€±: ãƒ‡ãƒ¼ã‚¿æ§‹é€  & æ–‡å­—åˆ—
**ç›®æ¨™**: ãƒªã‚¹ãƒˆ/æ–‡å­—åˆ—/è¾žæ›¸ã‚’è‡ªç”±ã«æ‰±ãˆã‚‹ã‚ˆã†ã«ã™ã‚‹

- **Day 11**: ãƒªã‚¹ãƒˆåŸºç¤Žï¼ˆä½œæˆã€ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ã€ã‚¹ãƒ©ã‚¤ã‚¹ï¼‰
- **Day 12**: ãƒªã‚¹ãƒˆè¿½åŠ /å‰Šé™¤/ã‚½ãƒ¼ãƒˆ (`append`, `pop`, `sort`)
- **Day 13**: æ–‡å­—åˆ—åŸºç¤Žã€ã‚¹ãƒ©ã‚¤ã‚¹
- **Day 14**: `split()`, `join()`
- **Day 15**: æ–‡å­—åˆ—æŽ¢ç´¢ (`in`, `find`, `count`)
- **Day 16**: è¾žæ›¸(dict) åŸºç¤Žã€key-value
- **Day 17**: é›†åˆ(set) åŸºç¤Žã€é‡è¤‡é™¤åŽ»
- **Day 18**: æ–‡å­—åˆ—é€†é † å®Ÿç¿’
- **Day 19**: å˜èªžå‡ºç¾å›žæ•°ã‚’æ•°ãˆã‚‹ï¼ˆã‚«ã‚¦ãƒ³ã‚¿å®Ÿè£…ï¼‰
- **Day 20**: ãƒªã‚¹ãƒˆæœ€å¤§å€¤/æœ€å°å€¤ æŽ¢ç´¢

---

## ðŸ”¹ ç¬¬5ï½ž6é€±: é–¢æ•°ã¨2æ¬¡å…ƒé…åˆ—
**ç›®æ¨™**: é–¢æ•°å®šç¾©ã¨2æ¬¡å…ƒãƒ‡ãƒ¼ã‚¿å‡¦ç†ã«æ…£ã‚Œã‚‹

- **Day 21**: é–¢æ•°å®šç¾©ã€å‘¼ã³å‡ºã—ã€å¼•æ•°
- **Day 22**: returnã€ãƒ­ãƒ¼ã‚«ãƒ«/ã‚°ãƒ­ãƒ¼ãƒãƒ«å¤‰æ•°
- **Day 23**: ãƒã‚¹ãƒˆãƒªã‚¹ãƒˆä½œæˆ
- **Day 24**: 2æ¬¡å…ƒãƒªã‚¹ãƒˆ å…¥åŠ›/å‡ºåŠ›
- **Day 25**: è¡Œåˆ—ã®åŠ ç®— å®Ÿç¿’
- **Day 26**: åº§æ¨™ç§»å‹•ï¼ˆä¸Šä¸‹å·¦å³ã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ï¼‰
- **Day 27**: è¿·è·¯å…¥åŠ›ã—ã¦è¡¨ç¤º
- **Day 28**: è¿·è·¯æŽ¢ç´¢ï¼ˆå£ `#`ã€é“ `.`ï¼‰å®Ÿè£…
- **Day 29**: ç·åˆæ¼”ç¿’ï¼ˆé–¢æ•°+2æ¬¡å…ƒãƒªã‚¹ãƒˆå¿œç”¨ï¼‰
- **Day 30**: å¾©ç¿’ + é–“é•ã„ç›´ã—

---

## ðŸ”¹ ç¬¬7ï½ž8é€±: ã‚¢ãƒ«ã‚´ãƒªã‚ºãƒ åŸºç¤Ž
**ç›®æ¨™**: Paiza Cãƒ©ãƒ³ã‚¯å•é¡Œã‚’è§£ã‘ã‚‹åŠ›ã‚’èº«ã«ã¤ã‘ã‚‹

- **Day 31**: ã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³åŸºç¤Žï¼ˆçŠ¶æ…‹æ›´æ–°ï¼‰
- **Day 32**: ã‚«ã‚¦ãƒ³ãƒˆåŸºç¤Žï¼ˆæ¡ä»¶ã‚’æº€ãŸã™æ•°ã‚’æ•°ãˆã‚‹ï¼‰
- **Day 33**: å…¨æŽ¢ç´¢ï¼ˆBrute Forceï¼‰
- **Day 34**: æœ€å°/æœ€å¤§å€¤æŽ¢ç´¢
- **Day 35**: ã‚µã‚¤ã‚³ãƒ­ã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³
- **Day 36**: åº§æ¨™ç§»å‹•å¾Œã®æœ€çµ‚ä½ç½®å‡ºåŠ›
- **Day 37**: ãƒžãƒ³ãƒãƒƒã‚¿ãƒ³è·é›¢è¨ˆç®— å®Ÿç¿’
- **Day 38**: ç·åˆã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³å•é¡Œ
- **Day 39**: ã‚«ã‚¦ãƒ³ãƒˆå•é¡Œï¼ˆæ•°ã‚’æ•°ãˆã‚‹ã€æ¡ä»¶åˆ¤å®šï¼‰
- **Day 40**: å¾©ç¿’ + Paiza Cãƒ©ãƒ³ã‚¯å•é¡Œ3å•

---

## ðŸ”¹ ç¬¬9ï½ž10é€±: Paiza Cãƒ©ãƒ³ã‚¯ã‚’å…¨ã¦è§£ã
**ç›®æ¨™**: å®Ÿæˆ¦æ„Ÿè¦šã‚’é›ãˆã‚‹

- **Day 41**: æ–‡å­—åˆ—å¤‰æ›å•é¡Œï¼ˆå¤§æ–‡å­—å°æ–‡å­—å¤‰æ›ã€æ–‡å­—åˆ—åœ§ç¸®ï¼‰
- **Day 42**: ãƒªã‚¹ãƒˆ/é…åˆ—ã®åˆè¨ˆå•é¡Œ
- **Day 43**: å¹³å‡è¨ˆç®—å•é¡Œ
- **Day 44**: æ¡ä»¶åˆ†å²å•é¡Œï¼ˆç‚¹æ•°è©•ä¾¡ã€åˆå¦åˆ¤å®šï¼‰
- **Day 45**: ç°¡å˜ãªã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³å•é¡Œ
- **Day 46**: Cãƒ©ãƒ³ã‚¯å•é¡Œ3å•è§£ã
- **Day 47**: Cãƒ©ãƒ³ã‚¯å•é¡Œ3å•è§£ã
- **Day 48**: Cãƒ©ãƒ³ã‚¯å•é¡Œ3å•è§£ã
- **Day 49**: Cãƒ©ãƒ³ã‚¯å•é¡Œ3å•è§£ã
- **Day 50**: é–“é•ã„ç›´ã— + å¾©ç¿’

---

## ðŸ”¹ ç¬¬11é€±: Paiza Bãƒ©ãƒ³ã‚¯å•é¡Œã«é›†ä¸­
**ç›®æ¨™**: å®Ÿéš›ã®Bãƒ©ãƒ³ã‚¯é›£æ˜“åº¦å•é¡Œã‚’ç·´ç¿’

- **Day 51**: å•é¡Œâ‘  ãƒãƒ§ã‚³ãƒ¬ãƒ¼ãƒˆåº§æ¨™ç§»å‹•ï¼ˆã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ï¼‰
- **Day 52**: å¿œç”¨åº§æ¨™ç§»å‹•å•é¡Œ
- **Day 53**: å•é¡Œâ‘¡ NÃ—N ãƒ“ãƒ³ã‚´ï¼ˆã‚«ã‚¦ãƒ³ãƒˆ & ãƒãƒƒã‚·ãƒ¥ï¼‰
- **Day 54**: ãƒ“ãƒ³ã‚´å¿œç”¨å•é¡Œï¼ˆè¡Œå®Œæˆãƒã‚§ãƒƒã‚¯ï¼‰
- **Day 55**: å•é¡Œâ‘¢ æ˜ ç”»é¤¨ã®åº§å¸­ï¼ˆæœ€å°è·é›¢æŽ¢ç´¢ï¼‰
- **Day 56**: ãƒžãƒ³ãƒãƒƒã‚¿ãƒ³è·é›¢å¿œç”¨å•é¡Œ
- **Day 57**: ã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³+ã‚«ã‚¦ãƒ³ãƒˆç·åˆå•é¡Œ
- **Day 58**: Bãƒ©ãƒ³ã‚¯å•é¡Œ1å•æŒ‘æˆ¦
- **Day 59**: Bãƒ©ãƒ³ã‚¯å•é¡Œ1å•æŒ‘æˆ¦
- **Day 60**: é–“é•ã„ç›´ã— + å¾©ç¿’

---

## ðŸ”¹ ç¬¬12é€±: å®Ÿæˆ¦æ¨¡æ“¬è©¦é¨“ & å¾©ç¿’
**ç›®æ¨™**: Bãƒ©ãƒ³ã‚¯åˆæ ¼ãƒ¬ãƒ™ãƒ«ã«ä»•ä¸Šã’ã‚‹

- **Day 61**: æ¨¡æ“¬è©¦é¨“ï¼ˆ1æ™‚é–“ã€å•é¡Œ1å•ï¼‰
- **Day 62**: æ¨¡æ“¬è©¦é¨“ï¼ˆ1æ™‚é–“ã€å•é¡Œ1å•ï¼‰
- **Day 63**: æ¨¡æ“¬è©¦é¨“ï¼ˆ1æ™‚é–“ã€å•é¡Œ1å•ï¼‰
- **Day 64**: æ¨¡æ“¬è©¦é¨“ï¼ˆ1æ™‚é–“ã€å•é¡Œ1å•ï¼‰
- **Day 65**: æ¨¡æ“¬è©¦é¨“ï¼ˆ1æ™‚é–“ã€å•é¡Œ1å•ï¼‰
- **Day 66**: é–“é•ã„ç›´ã—
- **Day 67**: ã‚³ãƒ¼ãƒ‰æœ€é©åŒ–ç·´ç¿’ï¼ˆãƒªãƒ•ã‚¡ã‚¯ã‚¿ãƒªãƒ³ã‚°ï¼‰
- **Day 68**: C/Bãƒ©ãƒ³ã‚¯æ··åˆãƒ©ãƒ³ãƒ€ãƒ å•é¡Œ
- **Day 69**: Bãƒ©ãƒ³ã‚¯è¿½åŠ ç·´ç¿’
- **Day 70**: æœ€çµ‚ãƒã‚§ãƒƒã‚¯ï¼ˆå…¥åŠ›å‡¦ç†ã€ã‚·ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã€æ™‚é–“/ãƒ¡ãƒ¢ãƒªç¢ºèªï¼‰
u   ãã—ã¦æ¬¡ã¯3ã‹æœˆé–“ã®è©•ä¾¡å†…å®¹ã§ã™ã€‚
- å­¦ç¿’ã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ«ã«æ²¿ã£ã¦é€²ã‚ã‚‰ã‚ŒãŸã‹
- å„é€±ã”ã¨ã®å­¦ç¿’ç›®æ¨™ã‚’é”æˆã§ããŸã‹)u#   ITä¼æ¥­ã«å°±è·ã—ãŸã„ã§ã™ã€‚u   PJTã‚’é€²ã‚ã¾ã™ã€‚u3   ã‚¬ãƒãƒ£ãƒ—ãƒ­ã‚¸ã‚§ã‚¯ãƒˆã‚’ã‚„ã£ã¦ã¿ã¾ã™ã€‚r9   u   3ç•ªã§é€²ã‚ã¾ã™ã€‚u*   Pythonã®åŸºç¤ŽçŸ¥è­˜ã‚’å­¦ã³ã¾ã—ãŸã€‚u@   ã¯ã„ã€1æ—¥ã”ã¨ã®ã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’ãŠé¡˜ã„ã—ã¾ã™ã€‚u(   Paiza Bãƒ©ãƒ³ã‚¯ã«åˆæ ¼ã—ã¾ã—ãŸã€‚u(   Paiza Bãƒ©ãƒ³ã‚¯ã‚’å–å¾—ã—ã¦ã¿ã¾ã™u)   ã„ã„ãˆã€‚ITé–¢é€£ã¯åˆã‚ã¦ã§ã™ã€‚uF   3ã‹æœˆä»¥å†…ã«ã§ãã‚‹ã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’ä½œã£ã¦ãã ã•ã„ã€‚ÚchatÚquestion_textÚmodec                 Ã   s˜   |dkrt }n|dkrt}n|dkrt}n	|dkrt}nt }t| ƒ}| ¡ D ]\}}|t|ƒkr5|  S q'| ¡ D ]\}}t|ƒ|v rH|  S q:dgS )Nr>   ÚlogÚworkerzworker-chatu*   ãƒ‡ãƒ¢ã‚·ãƒŠãƒªã‚ªã«ãªã„è³ªå•ã§ã™ã€‚)ÚQA_CHAT_SCENARIOÚQA_LOG_SCENARIOÚQA_LOG_WORKER_SCENARIOÚQA_CHAT_WORKER_SCENARIOr   Úitems)r?   r@   ÚscenarioÚnormalized_inputÚqÚar   r   r   Úgenerate_answer$  s(   €ÿÿrL   z/demo/api/ask_questionÚuser_questionÚbackground_tasksc                 Ã   s2   | j  ¡ }t| ddƒ}t||dI d H }d|iS )Nr@   r>   )r@   Úanswer)Úquestionr   ÚgetattrrL   )rM   rN   r?   r@   rO   r   r   r   Úgemini_questionA  s
   €
rR   z$/demo/api/request-signal/{signal_no}Ú	signal_noc              
   Ã   ót   zd}t j|d| idI dH  dd| › ddœW S  ty9 } zt d	| › d
|› ¡ tdd|› d‚d}~ww )ub   
    [ì—­í• ] ì§€ì •ëœ signal_noì˜ is_requestedë¥¼ trueë¡œ ë³€ê²½í•©ë‹ˆë‹¤. (ì‹ í˜¸ ìš”ì²­)
    zCUPDATE signals SET is_requested = TRUE WHERE signal_no = :signal_norS   ©ÚvaluesNÚokzSignal z has been requested.©r0   r7   z&Error in request_signal for signal_no ú: éô  úAn error occurred: r5   ©r
   ÚexecuteÚ	Exceptionr   Úerrorr   )rS   ÚqueryÚer   r   r   Úrequest_signalL  s   €€ýrb   z/demo/api/check-signalc               
   Ã   sì   zWt  ¡ 4 I dH šA d} t  | ¡I dH }|r;t|ƒ}d}t j|d|d idI dH  d|dœW  d  ƒI dH  W S dddœW  d  ƒI dH  W S 1 I dH sQw   Y  W dS  tyu } zt d	|› ¡ td
d|› d‚d}~ww )u£   
    [ì—­í• ] is_requestedê°€ trueì¸ ì‹ í˜¸ë¥¼ ì°¾ì•„ ë©”ì‹œì§€ë¥¼ ë°˜í™˜í•˜ê³ ,
           ì¦‰ì‹œ í•´ë‹¹ ì‹ í˜¸ì˜ is_requestedë¥¼ falseë¡œ ë˜ëŒë¦½ë‹ˆë‹¤.
    NzHSELECT signal_no, message FROM signals WHERE is_requested = TRUE LIMIT 1zDUPDATE signals SET is_requested = FALSE WHERE signal_no = :signal_norS   rU   T)Ú
has_signalÚdataFzError in check_signal: rZ   r[   r5   ©	r
   ÚtransactionÚ	fetch_oneÚdictr]   r^   r   r_   r   )Úquery_selectÚresultÚsignal_to_processÚquery_updatera   r   r   r   Úcheck_signal_  s$   €ñ4ï€ýrm   z/demo/api/submit-adviceÚpayloadc              
   Ã   s€   |   d¡}|stddd‚zd}tj|d|idI dH  d	d
dœW S  ty? } zt d|› ¡ tdd|› d‚d}~ww )u¶   
    [ì—­í• ] í”„ë¡ íŠ¸ì—ì„œ ë°›ì€ Advice í…ìŠ¤íŠ¸ë¥¼ advice_queue í…Œì´ë¸”ì— ì €ìž¥í•©ë‹ˆë‹¤.
    (is_processedì˜ ê¸°ë³¸ê°’ì€ FALSEì´ë¯€ë¡œ ë³„ë„ ì§€ì • í•„ìš” ì—†ìŒ)
    Úadvicer4   zAdvice text is requiredr5   z<INSERT INTO advice_queue (advice_text) VALUES (:advice_text)Úadvice_textrU   NrW   zAdvice has been submitted.rX   zError in submit_advice: rZ   r[   )Úgetr   r
   r]   r^   r   r_   )rn   rp   r`   ra   r   r   r   Úsubmit_advice  s   €
€þrr   z/demo/api/check-advicec               
   Ã   sð   zYt  ¡ 4 I dH šC d} t  | ¡I dH }|r=t|ƒ}|d }d}t j|d|idI dH  d|dœW  d  ƒI dH  W S dddœW  d  ƒI dH  W S 1 I dH sSw   Y  W dS  tyw } zt d	|› ¡ td
d|› d‚d}~ww )uÄ   
    [ì—­í•  ìˆ˜ì •] is_processedì´ FALSEì¸ 'ì²˜ë¦¬ë˜ì§€ ì•Šì€' Adviceë¥¼ ì°¾ìŠµë‹ˆë‹¤.
    ì°¾ìœ¼ë©´ í•´ë‹¹ Adviceì˜ ìƒíƒœë¥¼ TRUE('ì²˜ë¦¬ ì¤‘')ë¡œ ë°”ê¾¸ê³  ë‚´ìš©ì„ ë°˜í™˜í•©ë‹ˆë‹¤.
    NzfSELECT id, advice_text FROM advice_queue WHERE is_processed = FALSE ORDER BY id ASC LIMIT 1 FOR UPDATEÚidú:UPDATE advice_queue SET is_processed = TRUE WHERE id = :idrU   T)Ú
has_advicero   FzError in check_advice: rZ   r[   r5   re   )ri   rj   Úadvice_to_processÚ	advice_idrl   ra   r   r   r   Úcheck_advice“  s&   €ó4ñ€þrx   z$/demo/api/confirm-advice/{advice_id}rw   c              
   Ã   rT   )uÉ   
    [ìˆ˜ì •ëœ ê¸°ëŠ¥] í”„ë¡ íŠ¸ì—”ë“œì—ì„œ ë©”ì‹œì§€ í‘œì‹œê°€ ì™„ë£Œë˜ì—ˆìŒì„ í™•ì¸ë°›ê³ ,
    í•´ë‹¹ Adviceì˜ is_processedë¥¼ TRUEë¡œ ë³€ê²½í•˜ì—¬ 'ì²˜ë¦¬ ì™„ë£Œ' ìƒíƒœë¡œ ë§Œë“­ë‹ˆë‹¤.
    rt   rs   rU   NrW   zAdvice #z has been marked as processed.rX   zError in confirm_advice for ID rY   rZ   r[   r5   r\   )rw   r`   ra   r   r   r   Úconfirm_advice°  s   €€þry   )r>   )+Úfastapir   r   r   Úfastapi.responsesr   Úboto3r'   r    Úschemasr   r   r   r	   Údbr
   Úconfigr   r   Ústrr   r   r$   r&   Úrouterr/   rq   r2   Úpostr   rC   rD   rE   rF   rL   rR   Úintrb   rm   rh   rr   rx   ry   r   r   r   r   Ú<module>   s¤    


 à!fšÝ ÿÿùÿÿïç
RZ@ÀB:ÆA[p   Ñ    )


