Người du hành thời gian


18

Mã ngắn nhất để tạo thời gian chính xác trên đồng hồ sẽ thắng.

Bạn là một người du hành thời gian dày dạn và được biết là dừng lại ở nhiều hành tinh trong các tạp chí của bạn. Mỗi hành tinh quay với tốc độ khác nhau và vì điều này, độ dài của một ngày khác với ngày 24 giờ thông thường của chúng ta. Do đó, các hành tinh sử dụng đồng hồ với số giờ khác nhau. Giờ trên đồng hồ có x giờ được sắp xếp tương tự như giờ của chúng ta (1, 2, 3, ..., x ) với số quay theo chiều kim đồng hồ và x ở trên cùng.

Ngoài ra, mỗi hành tinh có số phút khác nhau trong một giờ và số giây khác nhau trong một phút. Bạn sẽ được cung cấp thời gian bắt đầu và một số giây trôi qua mà bạn phải xác định thời gian kết thúc.

Đầu vào có thể được lấy trực tiếp từ một tệp được truyền dưới dạng đối số hoặc là đầu vào tiêu chuẩn. Dòng đầu tiên đầu tiên sẽ là số lượng đồng hồ bạn cần xử lý. Sau đó, mỗi đồng hồ có ba dòng đầu vào chứa số nguyên theo định dạng sau:

x y z
h m s
t

Ý nghĩa của mỗi chữ cái dưới đây.

x = Số giờ trong một ngày (2 <= x <= 99)
y = Số phút trong một giờ (2 <= y <= 100)
z = Số giây trong một phút (2 <= z <= 100)
h = Giờ của thời gian bắt đầu (1 <= h <= x)
m = Phút của thời gian bắt đầu (0 <= m <y)
s = Thứ hai của thời gian bắt đầu (0 <= s <z)
t = Số giây đã trôi qua

Đầu ra phải là thời gian kết thúc cho mỗi đồng hồ sau khi t giây đã trôi qua kể từ thời gian bắt đầu. Đầu ra của bạn phải được định dạng là thời gian đồng hồ tiêu chuẩn (HH: MM: SS). Các số phải được đệm, khi cần thiết, để đảm bảo rằng tất cả các số đều có hai chữ số.

Các trường hợp thử nghiệm


Đầu vào

2
5 20 10
1 10 5
2633
6 25 5
6 0 3
290

Đầu ra

04:13:08
02:08:03

Đầu vào

1
14 17 11
12 16 10
1530

Đầu ra

07:03:00

Đầu vào

2
8 40 25
3 1 15
10620
14 15 20
1 14 0
-580

Đầu ra

05:26:10
14:00:00

8
Tôi tự hỏi nếu tất cả các hành tinh đều có người Anh sinh sống?
aaaaaaaaaaaa

4
@eBusiness Tốt hơn là cho họ một tách đẹp không hoàn toàn không giống trà.
Mateen Ulhaq

Tôi nghĩ rằng tôi không hiểu các ví dụ / định dạng đầu vào. x là số giờ trong một ngày - số giờ trong hành tinh đó, hay giờ của con người / trái đất? Và h, thời gian bắt đầu là thời gian trong thời gian của các hành tinh đó, hay một lần nữa, thời gian của con người / trái đất? Bởi vì: Nếu trong đầu vào 1, ví dụ 2, hành tinh chỉ có 6 giờ - thời gian bắt đầu là 6 như thế nào? Đó sẽ là một thời gian không hợp lệ.
người dùng không biết

Nếu tôi hiểu chính xác, Giờ đi từ 1 đến n. Phút và giây đi từ 0 đến n-1. Nhưng là nửa đêm n: 00: 00 hoặc 1:00:00. Đó là nơi tôi bị lẫn lộn.
captncraig

@CMP: Như trường hợp thử nghiệm cuối cùng cho thấy, thời gian cho nửa đêm là n: 00: 00.
Kevin Brown

Câu trả lời:


8

GolfScript - 50 ký tự

~](;7/{{~+.4$/\4$%])\}3*3<)@\or\+{100+`(;}%':'*n}%

Các giá trị (H / M / S) được thu thập bằng cách di chuyển chúng ra phía trước ngăn xếp ( ])\). Giờ 'underflow' ở 0 được xử lý với or. Không đệm được xử lý với 100+`(;, mặc dù tôi cho rằng 0`\+-2>có cùng chiều dài.


Ooooh, 100 điều làm tôi phát điên. Tôi ước tôi đã nghĩ về nó. (Nó sẽ chỉ cứu tôi 3 ký tự, nhưng sẽ giúp tôi tiết kiệm thời gian não hơn nhiều.)
Jesse Millikan

9

Con trăn, 142 ký tự

R=raw_input
for i in' '*input():x,y,z,h,m,s=map(int,(R()+i+R()).split());t=input()+h*y*z+m*z+s;print'%02d:%02d:%02d'%((t/y/z-1)%x+1,t/z%y,t%z)

Nếu tôi không nhầm, vì bạn sử dụng, for i in ' '*input()bạn thực sự có thể sử dụng ithay vì ' 'vào R()+' '+R(), lưu hai ký tự.
Dan Burton

Thật vậy, cảm ơn.
Keith Randall

Bạn có thể thay thế dòng thứ hai bằng cách nàyexec"x,y,z,h,m,s=map(int,(R()+' '+R()).split());t=input()+h*y*z+m*z+s;print'%02d:%02d:%02d'%((t/y/z-1)%x+1,t/z%y,t%z);"*input()
fR0DDY

t/y/z%x or xlà một nhân vật ngắn hơn.
Nabb

5

GolfScript 62 60 ký tự

Chỉnh sửa: Tôi đã quản lý để có được các mảng trước đây được lưu trữ trong một để nằm trên ngăn xếp, phải mất thêm một chút chuyển đổi theo cách đó mặc dù vậy không có cải tiến lớn.

~](\7/\{(~+[]\{.5$/@@5$%\+@@+}3*;\;(@or\+{'0'\+-2>}%':'*n@}*

Phiên bản 62:

~](\7/\{[]:a;(~{+.4$/\4$%a+:a;}3*;;;a(@or\+{'0'\+-2>}%':'*n@}*
1______a2____3_b4_5___6__7____8__9__10_____11_________12____13

Tôi chắc chắn rằng nó có thể được thực hiện tốt hơn rất nhiều, tôi không thể nghĩ gì tốt hơn.

1: Tạo một mảng gồm tất cả đầu vào, chọn phần tử đầu tiên, nhóm phần còn lại thành các khối 7.
a / 13: Sử dụng số đầu tiên từ đầu vào để chạy vòng lặp số lần đó.
2: Lưu trữ một mảng trống trong a.
3: Chọn một khối 7 và mở rộng thành 7 số riêng lẻ.
b / 8: Chạy một vòng lặp 3 lần, một lần cho mỗi giây, phút và giờ.
4: Cộng hai số cuối lại với nhau, cho lần lặp đầu tiên là giây và thời gian để thay đổi, với số lần sau là phút và giờ với số lần tràn từ chu kỳ trước. Tạo một bản sao thứ hai của kết quả.
5: Chia bản sao cho giới hạn của nó để tạo ra tràn và chuyển kết quả trở lại một khoảng trắng.
6: Tính toán modulo của phép chia trước để tạo ra một phần kết quả.
7: Thêm phần này vào một mảng.
9: Loại bỏ tràn giờ và giới hạn thứ hai và phút khỏi ngăn xếp.
10: Lấy phần giờ của a, nếu không, thay thế nó bằng giới hạn giờ, đặt nó trở lại mảng.
11: Đối với mỗi phần tử trong một, đặt '0' ở phía trước, do đó chuyển đổi thành chuỗi và vứt bỏ mọi thứ trừ 2 ký tự cuối cùng.
12: Thu gọn mảng thành một chuỗi được phân tách bằng ':', đặt một dòng mới và dịch chuyển mảng chứa các công việc còn lại sang phía trước ngăn xếp, do đó chuẩn bị cho lần lặp tiếp theo.


Và 13 là gì? Lời giải thích hay! +1
FUZxxl

@FUZxxl: 13 và 8 là điểm đánh dấu kết thúc của khối a và b.
schnaader

5

J (172/35) 137 99 107

Bây giờ vượt qua tất cả các trường hợp thử nghiệm nhất định.

4(1!:2)~LF,~"1([,':',])/"2,"2":"0(10 10#:1 0 0+{.#:{.&{:+{.#.1 0 0-~1&{)"2&(,&}.$~,&3 3&{.&{.)".;._2(1!:1)3

172 là toàn bộ; 35 là số lượng nhân vật tôi sẽ cung cấp nếu tôi thực sự lén lút và từ chối thực hiện IO như đã chỉ ra. (Tôi vẫn sửa đổi nó một chút; đồng hồ là một chức năng lấy tên tệp có nghĩa là được sử dụng tương tác trong J.)

Tôi chắc chắn hy vọng điều này ở J dễ dàng hơn nhiều so với tôi làm.

Chỉnh sửa: Tìm hiểu cách thực hiện phân tích cú pháp đầu vào tốt hơn trong J, loại bỏ ký tự, chuyển sang lệnh và đầu ra dòng lệnh.

Chỉnh sửa 2: Thay đổi đầu vào của chức năng trung tâm thành ma trận 3x3, loại bỏ nhiều dấu ngoặc đơn, loại bỏ tên

Chỉnh sửa 3: 0 giờ xử lý.

Giải trình:

J của tôi vẫn không tuyệt vời và IO luôn luôn là một nỗi đau. Vì vậy, bit của điều này là vô lý.

  • Động từ 1 0 0+{.#:{.&{:+{.#.1 0 0-~1&{mất ba ma trận ba (bao gồm các dòng đầu vào, hai yếu tố cuối cùng là rác)
  • H / m / s được nhận với {. (đầu), thời gian thực tế với 1 & {(yếu tố thứ hai) và số thứ hai với {. & {: (đầu đuôi).
  • Động từ sử dụng #. để biến đổi thời gian đồng hồ thành giây. (Xem thông tin.)
  • Nó thêm số thứ hai và sau đó sử dụng #: để có câu trả lời 3 phần tử.
  • Trường hợp 0 ​​giờ được xử lý bằng cách trừ 1 từ giờ trước khi thay đổi cơ sở và thêm 1 trở lại sau. (hai bit với 1 0 0)
  • Phần còn lại là đầu vào và đầu ra, thực sự rất bẩn thỉu (như mọi khi).
  • ".;._2(1!:1)3 lấy ma trận 3 'cột' của đầu vào với 0 ở vị trí chưa được lấp đầy.
  • ,&}.$~,&3 3&{.&{. cắt hàng đầu tiên ra khỏi đầu vào và định hình các hàng còn lại thành Nx3x3.
  • Việc "2sửa đổi động từ trung tâm để lấy các trường hợp 3x3.
  • 10 10&#:đưa ra 2 chữ số thập phân cho mỗi số cho ma trận Nx3x2. (Nhận 0s cho phần đệm là một nỗi đau .)
  • ,"2":"0 chuyển đổi các chữ số thành ASCII (Nx3x2x1) và phá hủy cột cuối cùng, đưa Nx3x2 trở lại thành ASCII.
  • LF,~"1([,':',])/"2 chèn: giữa mỗi phần tử và nối thêm chúng (Nx7) và thêm nguồn cấp dữ liệu cho mỗi (Nx8).
  • 4(1!:2)~ in từng hàng.

4

Haskell, 159 ký tự

v(_:x:y:z:h:m:s:t:r)=(w%x+1)&":"$z%y&":"$1%z&"\n"$v$t:r where w=y*z;(%)=mod.div(t+h*w-w+m*z+s)
v _=""
d&c=tail.(shows(d+100)c++)
main=interact$v.map read.words

  • Chỉnh sửa: (207 -> 200) đôi khi divModkhông xứng đáng!
  • Chỉnh sửa: (200 -> 178) không chịu sử dụng cách foldrtiếp cận tao nhã (hoạt động cho các hệ thống thời gian với bất kỳ số lượng thành phần nào!)
  • Chỉnh sửa: (178 -> 164) nội tuyến f
  • Chỉnh sửa: (164 -> 158) đã xóa các dấu ngoặc đơn không cần thiết
  • Chỉnh sửa: (158 -> 160) đã sửa một chút giới thiệu ba lần chỉnh sửa trước: giờ lại chính xác
  • Chỉnh sửa: (160 -> 159) bỏ cuộc gọi đến tail

Giờ được bù bởi một trong tất cả các đầu ra.
Joey Adams

@Joey: Bắt tốt! Đã sửa.
MtnViewMark

3

Ruby, 128 ký tự

Bản sao đáng xấu hổ từ con trăn:

d=$<.read.split.map(&:to_i);d[0].times{|o|x,y,z,h,m,s,t=d[o*7+1,7];t+=z*(y*h+m)+s;puts ["%02d"]*3*':'%[(t/y/z-1)%x+1,t/z%y,t%z]}

3

Haskell - 219 nhân vật cần thiết

import Text.Printf
(#)=div
(%)=mod
n?d=(n-1)%d+1
e a n=mapM(\_->a)[1..n]
main=readLn>>=(e$do{
 a<-e getLine 3;
 let[x,y,z,h,m,s,t]=map read.words=<<a;
    w=y*z;e=h*w+m*z+s+t::Int
  in printf"%02d:%02d:%02d\n"(e#w?x)(e#z%y)(e%z)})

2

PHP (241 ký tự)

Lấy đầu vào từ một tệp được truyền dưới dạng đối số.

foreach(array_chunk(array_slice(file($argv[1]),1),3)as$v){list($x,$y,$z)=split(" ",$v[0]);list($h,$m,$s)=split(" ",$v[1]);$e=($v[2]+$s+$z*($m+$h*$y))%($x*$y*$z);$s=$e%$z;$e/=$z;$m=$e%$y;$h=($e/$y)%$x;printf("%02d:%02d:%02d\n",$h?:$x,$m,$s);}

Và vô lương tâm:

$input = array_chunk(array_slice(file($argv[1]),1),3);
foreach($input as $v){
    list($x,$y,$z)=split(" ",$v[0]);
    list($h,$m,$s)=split(" ",$v[1]);
    $t = $v[2];
    $seconds_in_day = $x * $y * $z;
    $total_elapsed = $t + $s + $m*$z + $h*$y*$z;
    $elapsed = $total_elapsed % $seconds_in_day;

    $sec = $elapsed % $z;
    $elapsed /= $z;

    $min = $elapsed % $y;
    $elapsed /= $y;

    $hours = $elapsed % $x;
    if ($hours == 0) $hours = $x;

    printf("%02d:%02d:%02d\n",$hours,$min,$sec);
}

Và chỉ cần lưu ý, không có sigils (ký hiệu đô la), điều này xuất hiện tới 205 ký tự.


2

Java, 486 371 ký tự

Phiên bản bị đánh cắp: http://pastebin.com/6LiTdGyi

Điều này cho cùng một đầu ra như trong các ví dụ được cung cấp.

Nhưng tôi không đồng ý với hành vi đó: một chiếc đồng hồ không có nhiều số như số giờ trong một ngày: nó có một nửa số đó.

Có nghĩa là nếu bạn thêm 3600 giây vào 12:50:12, thì nên in 01:50:12, chứ không phải 13:50:12 (trong hệ thống 24/60/60 tiêu chuẩn của chúng tôi).

Tôi đã xử lý nó trong mã của tôi nhưng nhận xét nó trong giải pháp của tôi cho nó phù hợp với các ví dụ. Tất nhiên nếu bạn xem xét điều này, thì thời gian đầu vào có thể được coi là mơ hồ trừ khi bạn thêm một số điểm đánh dấu AM / PM.

Nhưng trong mọi trường hợp, câu đố có sự không nhất quán: nếu 00 giờ nên được thay thế bằng x, thì giờ> (x / 2) nên được thay thế bằng giờ - (x / 2).

Chỉnh sửa: Phiên bản chơi gôn:

import java.io.File;import java.util.Scanner;public class U{static int i(Scanner s){return
s.nextInt();}public static void main(String[]g)throws Exception{Scanner s=new Scanner(new File(g[0
]));int n=i(s);while(0!=n--){int J=i(s),K=i(s),L=i(s),P=(i(s)*K*L+i(s)*L+i(s)+i(s))%(J*K*L);System.
out.println(String.format("%02d:%02d:%02d",(0==P/L/K%J)?J:P/L/K%J,P/L%K,P%L));}}}

Xin chào, một câu hỏi [code-golf] yêu cầu câu trả lời ngắn nhất trong tổng số ký tự. Điều này có nghĩa là một mục nhập golf, ít nhất là: 1. không sử dụng packagekhai báo; 2. không sử dụng final; 3. sử dụng tên biến ký tự đơn và tên lớp; 4. thường sử dụng những cách thông minh nhất để tạo mã ngắn nhất có thể.
Chris Jester-Young

Nó không quan trọng nếu mã của bạn không thể đọc được hay không; do đó, phiên bản "không thể đọc được" của bạn không hữu ích cho một cuộc thi golf mã nếu nó không ngắn. Thành thật mà nói, Java là một ngôn ngữ kém để tham gia một cuộc thi golf, bởi vì so với hầu hết các ngôn ngữ, Java rất dài dòng. :-(
Chris Jester-Young

Trong tương lai gần, tôi sẽ thực hiện một bài tập dọn dẹp trong đó các mục không được đánh gôn sẽ bị xóa khỏi các câu hỏi [code-golf]. Vì vậy, nếu bạn có thể tạo một phiên bản chơi gôn (xem bình luận đầu tiên của tôi), xin vui lòng làm; nếu không, câu trả lời của bạn sẽ bị xóa trong lần dọn dẹp tiếp theo.
Chris Jester-Young

Chào. Xin lỗi vì tất cả. Tôi đã bối rối ... Tôi cuối cùng đã hiểu ý nghĩa của việc chơi golf. Tôi chỉ giữ phiên bản không có bản quyền như một liên kết. Tôi hy vọng điều đó tốt đặc biệt là vì những nghi ngờ của tôi về đầu vào và kết quả mong đợi. Tôi đặt một phiên bản golf tốt hơn. Đúng Java không phải là tốt nhất nhưng tôi nghĩ rằng tôi đã làm đủ tốt để phiên bản golf này được giữ ở đây. Xin lỗi lần nữa.
tisek

@tisek: Cảm ơn phiên bản mới của bạn. Đây là một gợi ý để rút ngắn mã hơn nữa: thay vì int[]c={i(s),i(s),i(s),i(s),i(s),i(s),i(s)}, bạn có thể muốn sử dụng int a=i(s),b=i(s),c=i(s),d=i(s),e=i(s),f=i(s),g=i(s). Có, bạn thêm 11 ký tự ở đây, nhưng bạn lưu ba ký tự mỗi lần bạn sử dụng c[x], có nghĩa là sau 4 trường hợp như vậy, nó tự trả tiền. Tôi đã đếm 13 trường hợp như vậy, có nghĩa là bạn lưu 28 ký tự tổng thể!
Chris Jester-Young

2

Bash - 189 ký tự:

read n
for((i=0;i<n;i++));do
read x y z
read h m s
read t
R=$(((s+m*z+h*y*z+t)%(x*y*z)))
H=$((R/y/z))
R=$((R-H*y*z))
M=$((R/z))
printf"%02d:%02d:%02d\n"$((((H-1)%x+x)%x+1))$M$((R-M*z))
done

Khi tôi nhớ lại mod thứ hai ở đó trong vài giây tiêu cực.

Dòng printf đó không hoạt động. Không gian được yêu cầu giữa printfvà các đối số của nó và giữa các đối số đó ...
Mark Reed

1

PHP, 229 228 ký tự

<?$v=file($argv[1]);while(++$i<$v[0]*3){list($x,$y,$z)=split(" ",$v[$i++]);list($h,$m,$s)=split(" ",$v[$i++]);$s=($e=($v[$i]+$s+$m*$z+$h*$y*$z)%($x*$y*$z))%$z;$m=($e/=$z)%$y;printf("%02d:%02d:%02d\n",($e/$y)%$x?$e%$x:$x,$m,$s);}

Tệp phải được truyền vào tập lệnh dưới dạng đối số

Ung dung:

<?php

$v = file($argv[1]); // Automatically break the file into an array by line

while(++$i < $v[0]*3){ // Loop for every three lines
  list($x, $y, $z) = explode(" ", $v[$i++]); // Break apart the first line by space
  list($h, $m, $s) = explode(" ", $v[$i++]); // Break apart the second line

  /*
    Add the starting time to the total number of seconds that have passed
    Divide by total amount of seconds in a day
  */

  $time = ($v[$i] + $s + $m * $z + $h * $y * $z) % ($x * $y * $z);

  $seconds = $time % $z;  // Get the number of seconds
  $minutes = ($time /= $z) % $y; // Remove the end amount of seconds, then get the minutes

  /*
    Remove the end amount of hours
    Determine how many hours there would be
    If the number is zero, then output the max hours
    If the number is not zero, output the amount of hours left
  */

  $hours = ($time / $y) % $x? $e % $x : $x;

  // Display the time in the correct format
  printf("%02d:%02d:%02d\n", $hours, $minutes, $seconds);
}

Thay đổi:

229 -> 228: Không cần đặt thời gian còn lại trong khi thực hiện phân chia theo giờ


1

Bash, 139 ký tự

read n
while((n--));do
read x y z;read h m s;read t
((t+=z*(y*h+m)+s,a=(t/y/z-1)%x+1,b=t/z%y,c=t%z))
printf %02d:%02d:%02d\\n $a $b $c
done

1

Scala 184 ký tự:

object C extends App{val r=new java.util.Scanner(System.in)
def n=r.nextInt
for(j<-1 to n;h=n;m=n;s=n;x=n;y=n;z=n;t=n;d=(x*m+y)*s+z+t){printf("%02d:%02d:%02d\n",d/(m*s)%h,d/s%m,d%s)}
}

Trong xung đột với các quy tắc, tôi tuyên bố rằng

14 15 20
1 14 0
-580

Đầu ra không nên

14:00:00

nhưng

00:00:00

và đó là những gì mã của tôi tạo ra. Vui lòng cho tôi xem đồng hồ hiển thị 24:00:00 trên trái đất thay vì 00:00:00 - có thể 24:59:59. Hoặc bạn có mong đợi trình tự:

23:59:59
24:00:00
00:00:01

thay vì

23:59:59
00:00:00
00:00:01

Trên trái đất, bạn sẽ không thấy 24:00:01, nhưng đôi khi bạn thấy 'ngày N lúc 24:00:00' được sử dụng như một từ đồng nghĩa với 'ngày N + 1 lúc 00:00:00'. Đó là cùng một lúc nhưng một trọng tâm khác - 'nửa đêm tối nay' và 'nửa đêm sáng mai'.
Mark Reed

1

Con trăn 2 , 137 byte

lambda T:["%02d:%02d:%02d"%((s/z/y%x,x)[s%x<1],s/z%y,s%z)for x,y,z,h,m,s,t in[T[i:i+7]for i in range(1,len(T),7)]for s in[s+m*z+h*y*z+t]]

Hãy thử trực tuyến!

Chỉ ngắn hơn một chút so với câu trả lời Python khác , nhưng cần một tuyến đường khác để đến đó.

Giải thích bất đắc dĩ:

def f(T):
    # ignore first list element, split list into even chunks of length 7
    for i in range(1, len(T), 7):
        # get variables for sublist
        for x, y, z, h, m, s, t in [T[i:i + 7]]:
            # get total time in seconds, inside a list so that we can use list comprehension
            for s in [s + m*z + h*y*z + t]:
                # split total time into parts
                # seconds: convert seconds to minute, take remainder
                sec = s % z
                # minutes: convert seconds to minutes (discard remainder), convert minutes to hours, take remainder
                min = s / z % y
                # hours: convert seconds to minutes (discard remainder),
                #        convert minutes to hours (discard remainder),
                #        convert hours to days, take remainder
                # if seconds are evenly divisible by total hours, use number of hours in day instead ("midnight")
                hr = (s / z / y % x, x)[s % x < 1]

                print "%02d:%02d:%02d"%(hr, min, sec)

0

Haskell ( 815 624 ký tự không được đánh gôn, loại trừ các dòng trống)

Của tôi in 00:00:00 thay vì 12:00:00 hoặc tương tự cho thời gian giống như "nửa đêm". Chỉnh sửa: đã thay đổi điều đó.

main = readFile "in.txt" >> mapM_ print . times . map (map read . words) . tail . lines

times [] = []
times ([x,y,z]:[h,m,s]:[t]:xs) = Time x y z h m s +++ t : times xs

data Time = Time {x,y,z,h,m,s :: Int}
hr t | h t == 0 = x t | otherwise = h t

instance Show Time where show t = pad2 (hr t) ++ ':':pad2 (m t) ++ ':':pad2 (s t)

pad2 x | x < 10 = '0':show x | otherwise = show x

t +++ ss | ss < 0  = t +++ (ss + x'*y'*z') | otherwise = Time x' y' z' h' m' s'
  where (x',y',z') = (x t, y t, z t)
        (ms, s') = (s t + ss) `quotRem` z'
        (hs, m') = (m t + ms) `quotRem` y'
        (_,  h') = (h t + hs) `quotRem` x'

Có thể đã trừu tượng hóa một số điều nữa, nhưng w / e. Nó hoàn toàn bỏ qua dòng đầu tiên của tệp đầu vào và thường hét lên với bạn về các tệp được định dạng không chính xác.


Lưu ý rằng sẽ dễ dàng thao tác giải pháp này để cho phép nhiều hơn hai chữ số trong giờ, phút và giây.
Dan Burton

"Giờ trên đồng hồ có x giờ được sắp xếp tương tự như giờ của chúng tôi (1, 2, 3, ..., x)", vì vậy 00:00:00 không hợp lệ. Không nên khó điều chỉnh cho điều đó mặc dù.
Kevin Brown

@ Bass5098 đã sửa, và rút ngắn một chút. Mặc dù vậy, tôi vẫn không có ý định biến nó thành một dạng không thể đọc được.
Dan Burton
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.