题目:

Problem

Do you know how to read the phone numbers in English? Now let me tell you.

For example, In China, the phone numbers are 11 digits, like: 15012233444. Someone divides the numbers into 3-4-4 format, i.e. 150 1223 3444. While someone divides the numbers into 3-3-5 format, i.e. 150 122 33444. Different formats lead to different ways to read these numbers:

150 1223 3444 reads one five zero one double two three three triple four.

150 122 33444 reads one five zero one double two double three triple four.

Here comes the problem:

Given a list of phone numbers and the dividing formats, output the right ways to read these numbers.

Rules:

Single numbers just read them separately.

2 successive numbers use double.

3 successive numbers use triple.

4 successive numbers use quadruple.

5 successive numbers use quintuple.

6 successive numbers use sextuple.

7 successive numbers use septuple.

8 successive numbers use octuple.

9 successive numbers use nonuple.

10 successive numbers use decuple.

More than 10 successive numbers read them all separately.

Input

The first line of the input gives the number of test cases, T. T lines|test cases follow. Each line contains a phone number N and the dividing format F, one or more positive integers separated by dashes (-), without leading zeros and whose sum always equals the number of digits in the phone number.

Output

For each test case, output one line containing "Case #x: y", where x is the case number (starting from 1) and y is the reading sentence in English whose words are separated by a space.

Limits

1 ≤ T ≤ 100.

Small dataset

1 ≤ length of N ≤ 10.

Large dataset

1 ≤ length of N ≤ 100.

翻译:

问题

你知道如何阅读英语中的电话号码吗?现在让我告诉你。

例如,在中国,电话号码是11位数字,如: 15012233444 。有人将号码为3-4-4格式,即150 1223 3444 。虽然有人将号码为3-3-5格式,即150 122 3344 4 。不同的格式,导致不同的方式来读取这些数字:

150 1223 3444读一五零壹双三三四个。

150 122 3344 4读取一五零壹双双三三四个。

可是问题来了:

鉴于电话号码和除以格式的列表,输出正确的方式来阅读这些数字。

规则:

单数刚读它们分开。

2连续使用双。

连续3使用三倍。

4连续使用翻两番。

5连续使用五倍。

6连续使用六倍。

7连续使用七元。

连续使用8八倍。

连续使用9 nonuple 。

连续十数十倍。

超过10个连续的数字阅读他们都分开。

输入

输入的第一行给出了测试用例的数量, T. T线|测试用例遵循。每行包含一个电话号码N和除以格式F,破折号( - )分隔的一个或多个正整数,不带前导零的总和总是等于数字位数的电话号码。

产量

对于每个测试用例,输出一行包含“案例# X:Y ”,其中x是案件编号(从1开始)和y是阅读英语句子中的字是由空格分隔。

范围

1≤T≤ 100。

小数据集

1长度≤ N ≤ 10 。

大数据集

1长度≤ N ≤ 100 。

google_number_reader.py

#!/usr/bin/env python

NUMBER=("ZERO","ONE","TWO","THERR","FOUR","FIVE","SIX","SEVEN","EIGHT","NINE","TEN")
REPT_COUNT=("","double","triple","quadruple","quintuple",
"sextuple","septuple","octuple","nonuple","decuple") class PhoneNumberReader:
def set_piece_list(self,list):
i = 0
sum = 0
flag_list = [0]
while i < len(list):
sum += int(list[i])
flag_list.append(sum)
i += 1
return flag_list def cut(self,phone,flag_list):
i = 0
piece_list = []
while i < len(flag_list) - 1:
piece_list.append(phone[flag_list[i]:flag_list[i+1]])
i += 1
return piece_list def read_piece(self,a_piece):
word_list = []
s_index = 0
repetitions = 0
cur_char = "" while True:
if s_index == len(a_piece):
break cur_char = int(a_piece[s_index])
if s_index + 1 < len(a_piece) and a_piece[s_index] == a_piece[s_index + 1]:
repetitions += 1
s_index += 1
continue if len(REPT_COUNT[repetitions]) > 0:
word_list.append(REPT_COUNT[repetitions]) word_list.append(NUMBER[cur_char])
repetitions = 0 s_index += 1 return word_list def read_piece_list(self,piece_list):
word_list = []
for i in piece_list:
word_list += self.read_piece(i) s = ""
for i in word_list:
s += i + " "
return s[:-1] def read(self,line):
try:
phone,format = line.split(" ")
format_list = format.split("-")
flag_list = self.set_piece_list(format_list)
piece_list = self.cut(phone,flag_list)
return self.read_piece_list(piece_list)
except ValueError:
print line if __name__ == '__main__':
try:
datafile = open("A-large-practice.in","r")
phone_reader = PhoneNumberReader() while True:
line = datafile.readline()
if not line:
break
phone_reader.read(line) except IOError, e:
print e.strerror

test_google_number_reader.py

#!/usr/bin/env python

from phone_number_reader import PhoneNumberReader
import unittest class TestPhoneNumberReader(unittest.TestCase):
def setUp(self):
self.phone_number_reader = PhoneNumberReader() def test_344(self):
s = self.phone_number_reader.read("15810665042 3-4-4")
print s
assert(s == "ONE FIVE EIGHT ONE ZERO double SIX FIVE ZERO FOUR TWO")
#def test_443(self):
# self.phone_number_reader.read("15810665042 4-4-3") #def test_353(self):
# self.phone_number_reader.read("15810665042 3-5-3") #def test_353(self):
# self.phone_number_reader.read("15810665042 3-5-3") if __name__ == '__main__':
unittest.main()

google jam 比赛题(设计有问题)的更多相关文章

  1. 25条来自 Google 的移动网站设计准则

    越来越的用于通过移动设备访问网络,因此对于企业来说,现在比以往任何时候都更需要一个移动网站.但是,怎么样才能制作一个优秀的移动网站呢? 为了回答这个问题,Google 与 AnswerLab 合作,研 ...

  2. 实验楼的php比赛题,网页数据提取。

    实验楼的php比赛题,网页数据提取. 题目的地址:https://www.shiyanlou.com/contests/lou5/challenges 以下代码是题目的答案 <?php head ...

  3. 【python】Leetcode每日一题-设计停车系统

    [python]Leetcode每日一题-设计停车系统 [题目描述] 请你给一个停车场设计一个停车系统.停车场总共有三种不同大小的车位:大,中和小,每种尺寸分别有固定数目的车位. 请你实现 Parki ...

  4. Google Code Jam 第一题

    通过的第一题,留做纪念,呵呵,非常简单,Africa 2010, Qualification Round: Store Credit. #include <stdio.h> #includ ...

  5. 2014年的Google I/O app设计中的材料设计-渣渣的翻译

    又是一篇翻译,用了三个多小时.http://android-developers.blogspot.co.id/2014/08/material-design-in-2014-google-io-ap ...

  6. USACO比赛题泛刷

    随时可能弃坑. 因为不知道最近要刷啥所以就决定刷下usaco. 优先级排在学习新算法和打比赛之后. 仅有一句话题解.难一点的可能有代码. 优先级是Gold>Silver.Platinum刷不动. ...

  7. Google发布移动网站设计原则

    Google 刚刚发布了由 Google 与 AnswerLab 联合打造,名为<Principles of Mobile Site Design: Delight Users and Driv ...

  8. C#LeetCode刷题-设计

    设计篇 # 题名 刷题 通过率 难度 146 LRU缓存机制   33.1% 困难 155 最小栈 C#LeetCode刷题之#155-最小栈(Min Stack) 44.9% 简单 173 二叉搜索 ...

  9. 2018 湖南网络比赛题 HDU - 6286 (容斥)

    题意:不说了. 更加偏向于数学不好的小可爱来理解的. 这篇博客更加偏重于容斥的讲解.用最直观的数学方法介绍这个题. 思路: 在a<=x<=b. c<=y<=d 中满足  x*y ...

随机推荐

  1. vs2010 sp1 创建silverlight 时,提示我 “在创建silverlight项目之前,您需要安装最新的silverlight Developer运行时

    ---恢复内容开始--- Silverlight 5 Developer Rumtime (32bit): http://go.microsoft.com/fwlink/?LinkId=229323 ...

  2. 关于Python中的for循环控制语句

    #第一个:求 50 - 100 之间的质数 import mathfor i in range(50, 100 + 1):    for j in range(2, int(math.sqrt(i)) ...

  3. 黑马程序员_<<IO流基本操作(Writer,Reader)>>

    --------------------ASP.Net+Android+IOS开发..Net培训.期待与您交流! -------------------- 1.概述 硬盘之间的文件的传输,硬盘中文件的 ...

  4. JAVA 并发实现六(Volatile的使用)

    Java™ 语言包含两种内在的同步机制:同步块(或方法)和 volatile 变量. 这两种机制的提出都是为了实现代码线程的安全性.其中 Volatile 变量的同步性较差(但有时它更简单并且开销更低 ...

  5. 流媒体开发之-腾讯体育NBA视频点播解析

    在前面解析赛事和排名,在这里解析点播视频,选取的是腾讯体育链接里面的点播. 首先还是先封装一个保存点播视频的相关信息的类 package com.jwzhangjie.model; import ja ...

  6. Oracle11g完全卸载步骤

    Oracle11g完全卸载步骤:1. 开始->设置->控制面板->管理工具->服务 停止所有Oracle服务.2. 开始->程序->Oracle - OraHome ...

  7. Java基础知识强化59:String(字符串)和其他类型的相互转化

    1. String类型 ---> 其他类型 (1)使用基本类型包装类的parseXXX方法 e.g:String(字符串)转化为int(整型) String MyNumber ="12 ...

  8. Linux内核如何启动并装载一个可执行程序

    2016-04-07 张超<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000#/info 一.理解编译链接的 ...

  9. Linux命令之必杀绝技Vi文本编辑的使用

    vi  文本编辑器 语法:vi [参数] 文件 进入vi全屏幕编辑画面 按字母i进入[输入模式],按[ESC]转到命令行, 输入 :q可不保存退出vi :wq存盘退出vi :q!不存盘强制退出 :w ...

  10. Sass插值、注释、数剧类型、字符串、值类型

    插值#{}使用 CSS 预处理器语言的一个主要原因是想使用 Sass 获得一个更好的结构体系.比如说你想写更干净的.高效的和面向对象的 CSS.Sass 中的插值(Interpolation)就是重要 ...