Submission #55331433


Source Code Expand

Copy
USING: kernel math sequences io ;
! ----------- 3 -----------
0 !
3 [ ! times 3
0 ! 1
[ ! 1 (loop)
read1 ! 1
dup 48 >= ! '0' 調
over 58 < ! '9' 調 ('0' over )
and ! 2調
[ ! (t)
48 - ! () '0'
swap 10 * + ! 10 ()
t !
]
[ ! (f)
drop !
f !
]
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
USING: kernel math sequences io ;

! ----------- 3個の数値の和を求める -----------

0                   ! 和となる数値をスタックに積む
3 [                 ! times により3回繰り返す
  0                 ! 1個の数値を読み込んだ結果となる数値をスタックに積む
  [                 ! 1個の数値の読み込みを行う (loop)
    read1           ! 1文字読み込む
    dup 48 >=       ! 読み込んだ文字が '0' 以上かを調べる
    over 58 <       ! 読み込んだ文字が '9' 以下かを調べる ('0' 以上かがあるので、over を用いる)
    and             ! 2個の判定を組み合わせ、読み込んだ文字が数字かを調べる
    [               ! 読み込んだ文字が数字である (t) 場合、以下の処理を行う
      48 -          ! 読み込んだ文字(コード)から '0' を引き、数値に変換する
      swap 10 * +   ! これまでの変換結果の10倍に、変換した数値を足す (変換結果を更新する)
      t             ! 変換のループを続行する
    ]
    [               ! 読み込んだ文字が数字でない (f) 場合、以下の処理を行う
      drop          ! 読み込んだ文字を捨てる
      f             ! 変換のループを終了する
    ]
    if              ! 読み込んだ文字が数字かによって、上記の処理を行う
  ] loop
  +                 ! 読み込んだ数値を和に加算する
] times

! ----------- 求めた和を十進数で表現し、出力する -----------

{ } swap            ! 和(数値)の後ろに、十進数表現を格納する配列を置く
[                   ! 和(数値)を十進数に変換する (loop)
  10 /mod           ! 和(数値)を10で割り、商と余りを求める
  48 +              ! 求めた余りに '0' を足し、数字に変換する
                    ! この時点でのスタック:配列 商 数字
  swapd             ! 数字を配列に追加するため、配列を移動する
                    ! この時点でのスタック:商 配列 数字
  prefix            ! 数字を配列の先頭に追加する
                    ! この時点でのスタック:商 配列
  swap              ! 配列の位置を戻す
                    ! この時点でのスタック:配列 商
  dup 0 = not       ! 残っている商が0でないかを判定する (0でない間ループを続ける)
] loop
drop                ! 商 (0) を捨てる
write               ! 変換結果の配列を出力する

! ----------- 値と文字列の間の空白を出力する -----------

32 write1           ! 数値と文字列の間の空白を出力する

! ----------- 文字列 s を出力する -----------

[                   ! 文字列の出力を行う (loop)
  read1             ! 1文字読み込む
  dup write1        ! 読み込んだ文字を確認できるようにコピーし、出力する
  10 = not          ! 読み込んだ文字が '\n' かを判定する ('\n' でない間ループを続ける)
] loop

Submission Info

Submission Time
Task PracticeA - Welcome to AtCoder
User mikecat
Language Factor (Factor 0.98)
Score 100
Code Size 3153 Byte
Status AC
Exec Time 458 ms
Memory 245068 KB

Judge Result

Set Name All
Score / Max Score 100 / 100
Status
AC × 7
Set Name Test Cases
All 00_rnd_01.txt, 00_rnd_02.txt, 00_rnd_03.txt, 00_rnd_04.txt, 00_rnd_05.txt, 00_sample_1.txt, 00_sample_2.txt
Case Name Status Exec Time Memory
00_rnd_01.txt AC 458 ms 245068 KB
00_rnd_02.txt AC 165 ms 132000 KB
00_rnd_03.txt AC 142 ms 131892 KB
00_rnd_04.txt AC 185 ms 131808 KB
00_rnd_05.txt AC 155 ms 131960 KB
00_sample_1.txt AC 177 ms 131748 KB
00_sample_2.txt AC 172 ms 131884 KB


2024-07-07 (Sun)
09:10:02 +09:00