time a given player spends actually connected to the
network.
We keep console logs of various game subsystems for each play session. Each log message
has the following format:
(MM/dd/yyyy-hh:mm:ss) :: [message logged]
Sample log lines:
(11/12/2015-02:34:56) :: START
(01/02/1990-13:10:00) :: DISCONNECTED
(03/13/2018-21:01:01) :: ERROR - File "close.png" not found.
Log messages that pertain to network connectivity are as follows:
START : Logged when the game starts up.
CONNECTED : Logged when a network connection is established.
DISCONNECTED : Logged when network connection is lost.
SHUTDOWN : Logged when the player is quitting the game.
A player's session length is the amount of time between the START and SHUTDOWN
messages.
A player's connected time is the amount of time they spend in a connected state. A player starts
the game disconnected, becomes connected when we log a CONNECTED message, and
becomes disconnected when we log a DISCONNECTED message.
You can make the following assumptions:
All logs will be properly formatted
All dates will be valid
No log message will stretch across multiple lines
All log files will be ordered chronologically
There will always be exactly one START and exactly one SHUTDOWN event logged
Input
A file containing lines of log messages.
Output
The connectivity percentage as a string, rounded down to an integer.
Examples
(01/01/2000-01:00:00) :: START
(01/01/2000-01:01:00) :: CONNECTED
(01/01/2000-01:21:00) :: DISCONNECTED
(01/01/2000-01:50:00) :: SHUTDOWN
The player spent 20 minutes out of 50 connected, 20 / 50 = 0.4, output should be "40%"
(02/03/2002-14:00:00) :: START
(02/03/2002-14:00:00) :: CONNECTED
(02/03/2002-14:08:00) :: DISCONNECTED
(02/03/2002-14:10:00) :: CONNECTED
(02/03/2002-14:15:00) :: SHUTDOWN
The player spent 13 minutes out of 15 connected, 13 / 15 = 0.8667, output should be "86%"
More sample input can be found in the text files input_1.txt, input_2.txt, and input_3.txt
有事游戏中有Log用于记录各种状态,想知道究竟用户连接的时间是多少。状态除了START, CONNECTED, DISCONNECTED, SHUTDONW外还有ERROR啥的,但是只需要关注前四个。
输入形式: vector<string> lines
(11/01/2015-04:00:00) :: START
(11/01/2015-04:00:00) :: CONNECTED
(11/01/2015-04:30:00) :: DISCONNECTED
(11/01/2015-04:45:00) :: CONNECTED
(11/01/2015-05:00:00) :: SHUTDOWN

涉及到处理Date, 以及STDIN from a file

处理Date可以用SimpleDateFormat这个class

static Date parseTime(String timeStr) {
  Date time = new Date();
  DateFormat dft = new SimpleDateFormat("MM/dd/yyyy-hh:mm:ss");
  try {
    time = dft.parse(timeStr);
  }catch (ParseException ignored) {}
  return time;
}

 package pocketGems;

 import java.io.*;
import java.util.*;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat; public class LogParser2 {
public static void main(String[] args)
throws FileNotFoundException, IOException {
String filename = "C:/Users/yang liu/workspace/Interview2017/src/pocketGems/test1.txt";
if (args.length > 0) {
filename = args[0];
} String answer = parseFile(filename);
System.out.println(answer);
} static String parseFile(String filename)
throws FileNotFoundException, IOException{
BufferedReader input = new BufferedReader(new FileReader(filename));
List<String> allLines = new ArrayList<String>();
String line = "";
while ((line = input.readLine()) != null) {
allLines.add(line);
}
input.close();
return parseLines(allLines.toArray(new String[allLines.size()]));
} static String parseLines(String[] lines) {
Map<String, Integer> status = new HashMap<String, Integer>(); status.put("START", 0);
status.put("CONNECTED", 1);
status.put("DISCONNECTED", -1);
status.put("SHUTDOWN", -2); long totalTime = 0;
long connectTime = 0;
boolean isConnected = false;
Date lastConnectMoment = new Date();
Date startMoment = new Date();
Date shutMoment = new Date(); for (String line : lines) {
String[] lineSplit = line.split(" :: ");
String event = lineSplit[1];
if (!status.containsKey(event)) continue; String cur = lineSplit[0];
Date currentTime = parseTime(cur.substring(1, cur.length()-1)); int eventID = status.get(event);
if (eventID > 0) {
if (!isConnected)
lastConnectMoment = currentTime;
isConnected = true;
}
else if (eventID < 0) {
if (isConnected)
connectTime += currentTime.getTime() - lastConnectMoment.getTime();
isConnected = false;
}
if (eventID == 0) startMoment = currentTime;
if (eventID == -2) shutMoment = currentTime;
}
totalTime = shutMoment.getTime() - startMoment.getTime(); double ratio = (double)connectTime/totalTime * 100;
return String.format("%d%s", (int)ratio, "%");
} static Date parseTime(String timeStr) {
Date time = new Date();
DateFormat dft = new SimpleDateFormat("MM/dd/yyyy-hh:mm:ss");
try {
time = dft.parse(timeStr);
}catch (ParseException ignored) {}
return time;
}
}

Pocket Gem OA: Log Parser的更多相关文章

  1. Pocket Gem OA: Path Finder

    1. 有向图 找所有start node到end node之间的路径 输入是一个txt 形式如下: A E A : B C D. B : C C : E D : B. 输出一个List<Stri ...

  2. Log Parser 2.2 分析 IIS 日志

    1,安装Log Parser 2.2 https://www.microsoft.com/en-us/download/details.aspx?displaylang=en&id=24659 ...

  3. 用Log Parser Studio分析IIS日志

    发现一个强大的图形化IIS日志分析工具——Log Parser Studio,下面分享一个实际操作案例. 1. 安装Log Parser Studio a) 需要先安装Log Parser,下载地址: ...

  4. 云计算之路-阿里云上:借助IIS Log Parser Studio分析“黑色30秒”问题

    今天下午15:11-15:13间出现了类似“黑色30秒”的状况,我们用强大的IIS日志分析工具——Log Parser Studio进行了进一步的分析. 分析情况如下—— 先看一下Windows性能监 ...

  5. Log Parser 2.2

    Log Parser 2.2 是一个功能强大的通用工具,它可对基于文本的数据(如日志文件.XML 文件和 CSV 文件)以及 Windows 操作系统上的重要数据源(如事件日志.注册表.文件系统和 A ...

  6. Log Parser 微软强大的日志分析工具

    Log Parser(微软网站下载)是微软公司出品的日志分析工具,它功能强大,使用简单,可以分析基于文本的日志文件.XML 文件.CSV(逗号分隔符)文件,以及操作系统的事件日志.注册表.文件系统.A ...

  7. 日志分析工具Log Parser介绍

    摘要: 微软动态CRM专家罗勇 ,回复321或者20190322可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me! 分析Dynamics 365 Customer Enga ...

  8. Log Parser Studio 分析 IIS 日志

    Log Parser Studio 分析 IIS 日志 来源 https://www.cnblogs.com/lonelyxmas/p/8671336.html 软件下载地址: Log Parser ...

  9. IIS 日志分析工具:Log Parser Studio

    1.安装Log Parser,下载地址:http://www.microsoft.com/en-us/download/details.aspx?displaylang=en&id=24659 ...

随机推荐

  1. php操作数据库获取到的结果集mysql_result

    判断取出的结果集是否为空集: $sql="select adminPwd from adminaccount"; //判断查询是否有数据 if(mysqli_num_rows($r ...

  2. 移动端1px边框实现

    问题描述:移动端iPhone上的1px边框看起来像2px那么粗.问题分析:不同的手机有不同的像素密度,在window对象中有一个devicePixelRatio属性,它可以反应设备的像素与css中的像 ...

  3. Linux bash基础特性二

    shell脚本的组成部分 shebang 各种命令组合 编程变量种类 本地变量: 仅仅在当前的shell生效 环境变量: 在当前和子shell生效 局部变量: shell进程某代码片段 位置变量: $ ...

  4. 在Linux下开发多语言软件(gettext解决方案)

    最近的项目出现了一个bug.项目是基于一个已有的成熟开源软件之上做修改的,新写了加解密库,用于为该成熟开源软件增添加解密功能.功能增加完成后效果都很好,可是就是中文出不来了,也就是说没办法自适应多语言 ...

  5. centos下静默安装oracle11g

    一.安装依赖包 yum -y install gcc make binutils gcc-c++ compat-libstdc++-33 elfutils-libelf-devel elfutils- ...

  6. Lecture5_1&5_2.随机变量的数字特征(数学期望、方差、协方差)

    一.数学期望 1.离散型随机变量的数学期望 设X为离散随机变量,其概率分布为:P(X=xk)=pk 若无穷级数$\sum_{k=1}^{+\infty}x_kp_k$绝对收敛 (即满足$\sum_{k ...

  7. 前台js根据当前时间生成订单号

    *********前台显示框**************** <input type="text" id="WIDout_trade_no" name=& ...

  8. html中的列表

    无序列表(什么前面默认一个实心的黑原点) <ul> <li>什么</li> <li>什么</li> <li>什么</li& ...

  9. CentOS下添加用户并且让用户获得root权限

    转自:https://blog.csdn.net/tropicofcancer9/article/details/53926920 1.添加用户,首先用adduser命令添加一个普通用户,命令如下: ...

  10. linux中启动 java -jar 后台运行程序

    直接用java -jar xxx.jar,当退出或关闭shell时,程序就会停止掉.以下方法可让jar运行后一直在后台运行. 1. java -jar xxx.jar & 说明: 在末尾加入 ...