challenge LL Golf Hole 7 - バイト数を読みやすくする

与えられたバイト数を読みやすくしてください。読みやすくとは、いわゆる human readable な表記とします(詳しくはサンプルのコードを参考にしてください)。

与えるバイト数についてはリテラルで与える、標準入力で与える、引数で与えるなどは自由とします。

余力のあるものはこのプログラムを短くしてください。

※ LL Future実行委員の高野光弘です。この出題は LL Future公式の出題であり、優れたものについてはLL Golfのセッションでご紹介させていただくかもしれません。ご理解の上、ご投稿ください。また、LL Futureのチケットは現在も発売中です。よろしければ、メインイベントの方にもぜひご参加ください。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
b = gets.to_i
if b < 10**3
    puts b
elsif b < 10**6
    puts "%.1fk" % (b.to_f/10**3)
elsif b < 10**9
    puts "%.1fM" % (b.to_f/10**6)
elsif b < 10**12
    puts "%.1fG" % (b.to_f/10**9)
else
    puts "%.1fT" % (b.to_f/10**12)
end

Posted feedbacks - Batchfile

今日もLLとの彼我兵力差は開きっぱなしですが、バッチで。

バッチで扱える数値の範囲は限られている(0~2147483647)ため、表示可能な単位は Gまで
です。また、基本的に整数しか扱えないので、小数点以下 2桁まで求める関数を書いて対
応しました。(値によって若干の誤差が生じる点は目を瞑っています。)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
@echo off
  setlocal enabledelayedexpansion
    set i=0
    set n=%1

    for %%u in ("" k M G) do (
      for /f "delims=." %%i in ("!n!") do set i=%%i
      if !i! lss 1024 (echo !n!%%~u & exit /b)
      call :div !i! 1024 n
    )
  endlocal
goto :EOF

:div
  setlocal enabledelayedexpansion
    set d=
    set q=0
    set /a n=%1/%2,m=%1%%%2

    if %m% gtr 0 (
      for /l %%i in (1,1,2) do ( :: 小数点以下 2桁
        if !m! gtr 0 (
          set /a q=!m!0/%2,m=!m!0%%%2
          set d=!d!!q!
        )
      )
      set n=%n%.!d!
    )
  endlocal & set %3=%n%
goto :EOF

Index

Feed

Other

Link

Pathtraq

loading...