นักท่องกาลเวลา


18

รหัสที่สั้นที่สุดในการสร้างเวลาที่ถูกต้องบนนาฬิกาชนะ

คุณเป็นนักท่องกาลเวลาและเป็นที่รู้กันว่าหยุดอยู่ที่ดาวเคราะห์จำนวนมากในช่วงที่คุณอยู่ในวารสาร ดาวเคราะห์แต่ละดวงหมุนตัวในอัตราที่แตกต่างกันและด้วยเหตุนี้ความยาวของวันจึงแตกต่างจากวันที่ 24 ชั่วโมงปกติของเรา เป็นผลให้ดาวเคราะห์ใช้นาฬิกาที่มีจำนวนชั่วโมงที่แตกต่างกัน ชั่วโมงบนนาฬิกาที่มีxชั่วโมงจัดเรียงคล้ายกับของเรา (1, 2, 3, ... , x ) โดยมีตัวเลขหมุนตามเข็มนาฬิกาและxอยู่ที่ด้านบน

นอกจากนี้แต่ละดาวเคราะห์มีจำนวนนาทีที่แตกต่างกันในหนึ่งชั่วโมงและจำนวนวินาทีที่แตกต่างกันในหนึ่งนาที คุณจะได้รับเวลาเริ่มต้นและจำนวนวินาทีที่ผ่านไปซึ่งคุณต้องกำหนดเวลาสิ้นสุด

อินพุตสามารถนำโดยตรงจากไฟล์ที่ส่งผ่านเป็นอาร์กิวเมนต์หรือเป็นอินพุตมาตรฐาน บรรทัดแรกของการป้อนข้อมูลจะเป็นจำนวนนาฬิกาที่คุณต้องดำเนินการ หลังจากนั้นแต่ละนาฬิกาจะมีอินพุตสามบรรทัดที่มีจำนวนเต็มในรูปแบบต่อไปนี้:

x y z
h m s
t

ความหมายของตัวอักษรแต่ละตัวอยู่ด้านล่าง

x = จำนวนชั่วโมงในหนึ่งวัน (2 <= x <= 99)
y = จำนวนนาทีในหนึ่งชั่วโมง (2 <= y <= 100)
z = จำนวนวินาทีในหนึ่งนาที (2 <= z <= 100)
h = ชั่วโมงของเวลาเริ่มต้น (1 <= h <= x)
m = นาทีของเวลาเริ่มต้น (0 <= m <y)
s = วินาทีที่สองของเวลาเริ่มต้น (0 <= s <z)
t = จำนวนวินาทีที่ผ่านไป

เอาต์พุตจะต้องเป็นเวลาสิ้นสุดสำหรับแต่ละนาฬิกาหลังจากผ่านไปแล้วtวินาทีนับตั้งแต่เวลาเริ่มต้น เอาต์พุตของคุณต้องอยู่ในรูปแบบเวลานาฬิกามาตรฐาน (HH: MM: SS) ควรใส่ตัวเลขเมื่อจำเป็นเพื่อให้แน่ใจว่าตัวเลขทั้งหมดเป็นตัวเลขสองหลัก

กรณีทดสอบ


อินพุต

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

เอาท์พุต

04:13:08
02:08:03

อินพุต

1
14 17 11
12 16 10
1530

เอาท์พุต

07:03:00

อินพุต

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

เอาท์พุต

05:26:10
14:00:00

8
ฉันสงสัยว่าดาวเคราะห์ทุกดวงเป็นที่อยู่อาศัยของชาวอังกฤษหรือไม่?
aaaaaaaaaaaa

4
@ eBusiness ดีกว่าให้พวกเขาดื่มดีไม่เหมือนชา
Mateen Ulhaq

ฉันคิดว่าฉันไม่เข้าใจตัวอย่าง / รูปแบบการป้อนข้อมูล x จำนวนชั่วโมงในหนึ่งวัน - ชั่วโมงในเวลานั้นของดาวเคราะห์หรือชั่วโมงของมนุษย์ / โลก? และ h, เวลาเริ่มต้นคือเวลาในเวลาของดาวเคราะห์นั้นหรืออีกครั้งเวลาของมนุษย์ / โลก? เพราะ: ถ้าในอินพุท 1 ตัวอย่างที่ 2 ดาวเคราะห์มีเวลาเพียง 6 ชั่วโมง - เวลาเริ่มต้นควรเป็น 6 อย่างไร นั่นจะเป็นเวลาที่ไม่ถูกต้อง
ไม่ทราบผู้ใช้

ถ้าฉันเข้าใจถูกต้องชั่วโมงไปจาก 1 ถึง n นาทีและวินาทีเริ่มจาก 0 ถึง n-1 แต่เที่ยงคืน n: 00: 00 หรือ 1:00:00 นั่นคือสิ่งที่ฉันสับสน
captncraig

@CMP: ตามที่กรณีทดสอบล่าสุดแสดงเวลาเที่ยงคืนคือ n: 00: 00
เควินบราวน์

คำตอบ:


8

GolfScript - 50 ตัวอักษร

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

ค่า (H / M / S) จะถูกรวบรวมโดยการย้ายไปยังด้านหน้าของสแต็ก ( ])\) ชั่วโมง 'อันเดอร์โฟล์' ที่ 0 orจะถูกจัดการด้วย มีการจัดการการซ้อนศูนย์ด้วย100+`(;แม้ว่าฉันคิดว่า0`\+-2>มีความยาวเท่ากัน


Ooooh 100 สิ่งที่ทำให้ฉันบ้า ฉันหวังว่าฉันจะคิดถึงมัน (มันจะช่วยฉันได้แค่ 3 ตัวอักษร แต่จะช่วยฉันประหยัดเวลาสมองได้มากขึ้น)
Jesse Millikan

9

Python 142 ตัวอักษร

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)

ถ้าฉันไม่ผิดเนื่องจากคุณใช้for i in ' '*input()คุณจริงสามารถใช้iแทน' 'ในการR()+' '+R()ประหยัดตัวละครทั้งสอง
Dan Burton

แน่นอนขอบคุณ
Keith Randall

คุณสามารถแทนที่บรรทัดที่สองได้โดยสิ่งนี้exec"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 xอักขระสั้นลง
Nabb

5

GolfScript 62 60 ตัวอักษร

แก้ไข: ฉันจัดการเพื่อให้ได้รับอาร์เรย์ที่เก็บไว้ก่อนหน้านี้ใน a เพื่ออยู่ใน stack มันใช้การสลับพิเศษเล็กน้อยแม้ว่าจะไม่มีการปรับปรุงที่สำคัญ

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

ฉันแน่ใจว่ามันสามารถทำได้ดีกว่านี้มากฉันแค่คิดอะไรไม่ออกเลย

1: สร้างอาร์เรย์ของอินพุตทั้งหมดเลือกองค์ประกอบแรกแล้วจัดกลุ่มส่วนที่เหลือลงในบล็อกของ 7
a / 13: ใช้หมายเลขแรกจากอินพุตเพื่อใช้วนรอบที่จำนวนครั้ง
2: เก็บอาเรย์ว่างไว้ใน
3: เลือกบล็อก 7 และขยายเป็นตัวเลข 7 ตัว
b / 8: วิ่งวนซ้ำ 3 ครั้งครั้งละวินาทีนาทีและชั่วโมง
4: เพิ่มตัวเลขสองตัวสุดท้ายเข้าด้วยกันสำหรับการวนซ้ำครั้งแรกที่เป็นวินาทีและเวลาที่จะเลื่อนสำหรับต่อไปนี้คือนาทีและชั่วโมงที่มีการไหลล้นจากรอบก่อนหน้า ทำสำเนาผลที่สอง
5: แบ่งการคัดลอกโดย จำกัด การผลิตมากเกินไปและเลื่อนผลลัพธ์กลับหนึ่งช่องว่าง
6: คำนวณโมดูโลของแผนกก่อนหน้าเพื่อสร้างส่วนหนึ่งของผลลัพธ์
7: เพิ่มส่วนนี้ลงในอาร์เรย์
9: ลบการโอเวอร์โฟลว์ชั่วโมงและการ จำกัด ที่สองและนาทีจากสแต็ก
10: ใช้ส่วนชั่วโมงของ a ถ้ามันเป็นศูนย์แทนที่ด้วยขีด จำกัด ชั่วโมงใส่กลับเข้าไปในอาร์เรย์
11: สำหรับแต่ละองค์ประกอบใน a ให้วาง '0' ไว้ข้างหน้าดังนั้นแปลงเป็นสตริงและละทิ้งทุกอย่างยกเว้นอักขระ 2 ตัวสุดท้าย
12: ยุบอาร์เรย์ลงในสตริงเดี่ยวที่คั่นด้วย ':' วางบรรทัดใหม่และเลื่อนอาร์เรย์ที่มีงานที่เหลือไปยังด้านหน้าของสแต็กดังนั้นจึงเตรียมการทำซ้ำครั้งถัดไป


และ 13 คืออะไร คำอธิบายที่ดี! +1
FUZxxl

@FUZxxl: 13 และ 8 เป็นเครื่องหมายสิ้นสุดของบล็อก a และ b
schnaader

5

J (172/35) 137 99 107

ตอนนี้ผ่านกรณีทดสอบที่ได้รับทั้งหมด

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 คือสิ่งทั้งปวง 35 คือจำนวนตัวละครที่ฉันจะให้ถ้าฉันบ้าๆบอ ๆ จริงๆและปฏิเสธที่จะทำ IO ตามที่ระบุไว้ (ฉันยังแก้ไขมันเล็กน้อย; นาฬิกาเป็นฟังก์ชั่นที่ใช้ชื่อไฟล์เพื่อใช้โต้ตอบภายใน J)

ฉันแน่ใจว่านี่เป็นเรื่องง่ายกว่าใน J มากกว่าที่ฉันจะทำให้

แก้ไข: คิดหาวิธีการแยกวิเคราะห์อินพุตที่ดีขึ้นใน J กำจัด charsub เปลี่ยนไปใช้การเรียกใช้บรรทัดคำสั่งและเอาต์พุต

แก้ไข 2: การเปลี่ยนแปลงอินพุตของฟังก์ชันส่วนกลางเป็นเมทริกซ์ 3x3, กำจัดวงเล็บที่น่ารำคาญจำนวนมาก, กำจัดชื่อ

แก้ไข 3: 0 นาฬิกาจัดการ

คำอธิบาย:

J ของฉันยังคงไม่ดีนักและ IO ก็เจ็บปวดเช่นเคย ดังนั้นสิ่งนี้จึงบ้า

  • กริยา1 0 0+{.#:{.&{:+{.#.1 0 0-~1&{ใช้เมทริกซ์สามคูณสาม (ประกอบด้วยบรรทัดอินพุตองค์ประกอบสองรายการสุดท้ายเป็นขยะ)
  • h / m / s ได้มาด้วย { (หัว) เวลาจริงที่มี 1 & {(องค์ประกอบที่สอง) และจำนวนที่สองด้วย {. & {: (หัวหาง)
  • คำกริยาใช้# เพื่อเปลี่ยนเวลาของนาฬิกาเป็นวินาที (ดูเอกสารหลัก)
  • มันเพิ่มการนับครั้งที่สองจากนั้นใช้#:เพื่อรับ 3 คำตอบองค์ประกอบ
  • กรณี 0 นาฬิกาถูกจัดการโดยการลบ 1 จากชั่วโมงก่อนที่จะเปลี่ยนฐานและเพิ่ม 1 หลัง (สองบิตด้วย1 0 0)
  • ส่วนที่เหลือคืออินพุตและเอาต์พุตซึ่งสกปรกมาก (เช่นเคย)
  • ".;._2(1!:1)3 รับเมทริกซ์คอลัมน์ '3' ของอินพุตด้วย 0s ในตำแหน่งที่ไม่สำเร็จ
  • ,&}.$~,&3 3&{.&{. ตัดแถวแรกออกจากอินพุตและจัดเรียงแถวที่เหลือเป็น Nx3x3
  • การ"2ดัดแปลงกริยากลางให้รับกรณี 3x3
  • 10 10&#:ให้ทศนิยม 2 หลักสำหรับแต่ละหมายเลขที่ให้เมทริกซ์ Nx3x2 (การได้รับ 0s สำหรับการเติมเต็มเป็นความเจ็บปวด )
  • ,"2":"0 แปลงตัวเลขเป็น ASCII (Nx3x2x1) และทำลายคอลัมน์สุดท้ายทำให้ Nx3x2 เป็น ASCII อีกครั้ง
  • LF,~"1([,':',])/"2 การแทรก: ระหว่างแต่ละองค์ประกอบและผนวกเข้าด้วยกัน (Nx7) และเพิ่มการป้อนบรรทัดต่อสำหรับ (Nx8)
  • 4(1!:2)~ พิมพ์แต่ละแถว

4

Haskell, 159 ตัวอักษร

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

  • แก้ไข: (207 -> 200) บางครั้งdivModก็ไม่คุ้มค่า!
  • แก้ไข: (200 -> 178) ยอมแพ้ที่จะไม่ใช้foldrวิธีการที่สวยงาม(ซึ่งใช้ได้กับระบบเวลาที่มีองค์ประกอบจำนวนเท่าใด!)
  • แก้ไข: (178 -> 164) ถูกแทรก f
  • แก้ไข: (164 -> 158) ลบวงเล็บที่ไม่จำเป็นออก
  • แก้ไข: (158 -> 160) แก้ไขการแนะนำเล็กน้อยเมื่อสามการแก้ไขที่ผ่านมา: ชั่วโมงถูกต้องอีกครั้ง
  • แก้ไข: (160 -> 159) โอนสายไปที่ tail

ชั่วโมงถูกชดเชยโดยหนึ่งในเอาต์พุตทั้งหมด
Joey Adams

@ Joey: จับได้ดี! แก้ไขแล้ว.
MtnViewMark

3

Ruby, 128 ตัวอักษร

คัดลอกอย่างไม่มีรอยต่อจากงูหลามหนึ่ง:

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 อักขระที่จำเป็น

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 ตัวอักษร)

รับอินพุตจากไฟล์ที่ส่งเป็นอาร์กิวเมนต์

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);}

และไม่ดี

$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);
}

และเพื่อให้ทราบโดยไม่มีเครื่องหมาย (เครื่องหมายดอลลาร์) สิ่งนี้จะมีอักขระมากถึง 205 ตัว


2

Java, 486 371 ตัวอักษร

เวอร์ชันที่ไม่ได้อัปโหลด: http://pastebin.com/6LiTdGyi

สิ่งนี้จะให้ผลลัพธ์เช่นเดียวกับในตัวอย่างที่ให้ไว้

แต่ฉันไม่เห็นด้วยกับพฤติกรรมนั้น: นาฬิกามีจำนวนไม่มากเท่าที่มีชั่วโมงในหนึ่งวัน: มีครึ่งหนึ่งของพวกเขา

หมายความว่าหากคุณเพิ่ม 3600 วินาทีเป็น 12:50:12 มันควรพิมพ์ 01:50:12 ไม่ใช่ 13:50:12 (ในระบบมาตรฐาน 24/60/60 ของเรา)

ฉันจัดการมันในรหัสของฉัน แต่แสดงความคิดเห็นในโซลูชันของฉันเพื่อให้ตรงกับตัวอย่าง แน่นอนถ้าคุณพิจารณาสิ่งนี้ดังนั้นเวลาในการป้อนข้อมูลอาจถูกพิจารณาว่าไม่ชัดเจนเว้นแต่คุณจะเพิ่มเครื่องหมาย AM / PM

แต่ในกรณีใด ๆ ตัวต่อจะมีความไม่สอดคล้องกัน: หาก 00 ชั่วโมงควรถูกแทนที่ด้วย x ดังนั้นชั่วโมง> (x / 2) จะถูกแทนที่ด้วยชั่วโมง - (x / 2)

แก้ไข: รุ่น Golfed:

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));}}}

สวัสดี [คำถาม code-golf] ต้องการคำตอบที่สั้นที่สุดในจำนวนอักขระทั้งหมด นี่หมายถึงรายการที่ golfed ควรอย่างน้อย: 1. ไม่ใช้packageการประกาศ 2. ไม่ใช้final; 3. ใช้ชื่อตัวแปรอักขระเดียวและชื่อคลาส 4. โดยทั่วไปใช้วิธีที่ฉลาดที่สุดในการทำให้รหัสสั้นที่สุดเท่าที่จะเป็นไปได้
Chris Jester-Young

ไม่สำคัญว่ารหัสของคุณอ่านไม่ได้หรือไม่ ดังนั้นเวอร์ชัน "อ่านไม่ได้" ของคุณจึงไม่เป็นประโยชน์สำหรับการแข่งขันกอล์ฟรหัสหากไม่สั้น ความจริงแล้ว Java เป็นภาษาที่ไม่ดีสำหรับการเข้าร่วมการแข่งขันกอล์ฟเนื่องจากเมื่อเปรียบเทียบกับภาษาส่วนใหญ่แล้ว Java นั้นมีความละเอียดมาก :-(
Chris Jester-Young

ในอนาคตอันใกล้ฉันจะทำแบบฝึกหัดการล้างข้อมูลที่รายการที่ไม่ใช่นักกอล์ฟจะถูกลบออกจากคำถาม [รหัสกอล์ฟ] ดังนั้นหากคุณสามารถสร้างเวอร์ชัน golfed (ดูความคิดเห็นแรกของฉัน) โปรดทำ; มิฉะนั้นคำตอบของคุณจะถูกลบออกในการทำความสะอาดครั้งต่อไป
Chris Jester-Young

สวัสดี ขออภัยด้วยทั้งหมด ฉันสับสน ... ฉันเข้าใจความหมายของการตีกอล์ฟ ฉันเก็บเวอร์ชันที่ไม่อัปโหลดไว้เป็นลิงก์เท่านั้น ฉันหวังว่าจะดีโดยเฉพาะอย่างยิ่งเนื่องจากความสงสัยของฉันเกี่ยวกับการป้อนข้อมูลและผลลัพธ์ที่คาดหวัง ฉันใส่เวอร์ชั่นที่ดีกว่าของกอล์ฟ Java ที่ถูกต้องไม่ใช่สิ่งที่ดีที่สุด แต่ฉันคิดว่าฉันทำได้ดีพอที่จะเก็บรุ่นกอล์ฟนี้ไว้ที่นี่ ขอโทษอีกครั้ง.
tisek

@tisek: ขอบคุณสำหรับรุ่นใหม่ของคุณ นี่เป็นข้อเสนอแนะสำหรับการตัดทอนรหัสให้ดียิ่งขึ้น: แทนของคุณอาจต้องการที่จะใช้int[]c={i(s),i(s),i(s),i(s),i(s),i(s),i(s)} int a=i(s),b=i(s),c=i(s),d=i(s),e=i(s),f=i(s),g=i(s)ใช่คุณเพิ่ม 11 ตัวอักษรที่นี่ แต่คุณบันทึกสามตัวอักษรในแต่ละครั้งที่คุณใช้c[x]ซึ่งหมายถึงหลังจาก 4 อินสแตนซ์ดังกล่าวมันจะจ่ายเอง ฉันนับอินสแตนซ์ 13 รายการซึ่งหมายความว่าคุณสามารถบันทึกได้ 28 ตัวอักษรโดยรวม!
Chris Jester-Young

2

Bash - 189 ตัวละคร:

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

ในขณะที่ฉันจำได้ว่าการแก้ไขครั้งที่สองจะมีการลบวินาทีที่ผ่านไป

บรรทัด printf นั้นใช้ไม่ได้ ต้องใช้ช่องว่างระหว่างprintfและอาร์กิวเมนต์และระหว่างอาร์กิวเมนต์เหล่านั้น ...
Mark Reed

1

PHP, 229 228 ตัวอักษร

<?$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);}

ไฟล์จะต้องถูกส่งผ่านเข้าไปในสคริปต์เป็นอาร์กิวเมนต์

Ungolfed:

<?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);
}

การเปลี่ยนแปลง:

229 -> 228: ไม่จำเป็นต้องตั้งเวลาที่เหลือในขณะทำการแบ่งตามชั่วโมง



1

สกาล่า 184 ตัวอักษร:

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)}
}

ในความขัดแย้งกับกฎฉันอ้างว่าสำหรับ

14 15 20
1 14 0
-580

ผลลัพธ์ไม่ควรเป็น

14:00:00

แต่

00:00:00

และนั่นคือสิ่งที่รหัสของฉันผลิต โปรดแสดงนาฬิกาที่แสดงเวลา 24:00 น. บนโลกแทน 00:00:00 - อาจ 24:59:59 หรือคุณคาดหวังลำดับ:

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

แทน

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

บนโลกคุณจะไม่เห็น 24:00:01 แต่บางครั้งคุณเห็น 'วัน N เวลา 24:00:00' ใช้เป็นคำพ้องความหมายสำหรับ 'วัน N + 1 เวลา 00:00:00' มันเป็นเวลาเดียวกัน แต่มุ่งเน้นที่แตกต่าง - 'เที่ยงคืนคืนนี้' กับ 'เที่ยงคืนพรุ่งนี้เช้า'
Mark Reed

1

Python 2 , 137 ไบต์

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]]

ลองออนไลน์!

สั้นกว่าคำตอบของงูหลามเพียงเล็กน้อยเท่านั้นแต่ใช้เส้นทางอื่นเพื่อไปที่นั่น

คำอธิบายไม่ดี

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 ตัวอักษรที่ไม่ใช่สนามกอล์ฟยกเว้นบรรทัดว่าง)

ฉันพิมพ์ 00:00:00 แทน 12:00:00 หรือคล้ายกันสำหรับเวลาเที่ยงคืน แก้ไข: เปลี่ยนที่

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'

สามารถสรุปบางสิ่งเพิ่มเติมได้ แต่ด้วย / มันจะละเว้นบรรทัดแรกของไฟล์อินพุตอย่างสมบูรณ์และโดยทั่วไปจะส่งเสียงอื้ออึงถึงคุณในรูปแบบไฟล์ที่ไม่เหมาะสม


โปรดทราบว่ามันจะง่ายต่อการจัดการโซลูชันนี้เพื่อให้มากกว่าสองหลักสำหรับชั่วโมงนาทีและวินาที
Dan Burton

"เวลาบนนาฬิกาที่มี x ชั่วโมงจัดเรียงคล้ายกับของเรา (1, 2, 3, ... , x)" ดังนั้น 00:00:00 จึงไม่ถูกต้อง ไม่ควรยากที่จะปรับในเรื่องนั้น
เควินบราวน์

@ Bass5098 คงที่และสั้นลงเล็กน้อย ฉันยังไม่มีหัวใจที่จะนำมันออกมาในรูปแบบที่อ่านไม่ได้
Dan Burton
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.