นาฬิกา ASCII พร้อมเครื่องหมายเวลาและเครื่องหมายจุลภาค


39

บทนำ

คำอธิบายรหัสกอล์ฟ

ลองนึกภาพว่าเส้นของตัวอักษรเป็นสองแถว แถวบน - จุด - หมายถึงชั่วโมง (ระบบตลอด 24 ชั่วโมง) ในขณะที่ลดลง - เครื่องหมายจุลภาค - หมายถึงนาที ตัวละครตัวหนึ่งสามารถแสดงชั่วโมงนาทีหรือทั้งสองอย่าง - เมื่อเป็นไปได้

ตอนแรกอาจจะมีการแปลงนาทีนับตั้งแต่เที่ยงคืนถึงชั่วโมงและนาที

ผลลัพธ์ที่ได้คือสตริงที่แสดงเวลาปัจจุบันใน "รูปแบบจุด" จุดนับ ( เครื่องหมายอัญประกาศเดี่ยวนับที่นี่เป็นจุดและจะถูกเรียกอย่างนั้น! ) คือการนับชั่วโมงตั้งแต่เที่ยงคืนและการนับจุลภาคคือการนับนาที ฉันจะแสดงตัวอย่างบางอย่างเพื่อให้ชัดเจน

  • (หมายเหตุ) hh: mm - result
  • (เฉพาะชั่วโมง) 05:00 - '''''
  • (เพียงไม่กี่นาที) 00:08 - ,,,,,,,,
  • (ชั่วโมง <นาที) 03:07 - ;;;,,,,
  • (ชั่วโมง> นาที) 08:02 - ;;''''''
  • (ชั่วโมง = นาที) 07:07 - ;;;;;;;
  • (เริ่มต้นของวัน) 00:00 - ( ผลลัพธ์ว่างเปล่า )

โปรดสังเกตว่าอักขระ "ทั้งคู่"สามารถใช้ได้สูงสุด 23 ครั้ง - สำหรับ 23: xx โดยที่ xx คือ 23 หรือมากกว่า

สัญลักษณ์

หากตัวละครต้องหนี (ดูกฎที่ 5) ในภาษาของคุณคุณสามารถเปลี่ยนเป็นทางเลือกหนึ่ง หากทางเลือกดังกล่าวไม่เพียงพอคุณสามารถใช้สัญลักษณ์อื่น ๆ ได้ แต่ให้มีเหตุผล ฉันไม่อยากหนีไปเป็นอุปสรรค

  • ;(อัฒภาค) - เครื่องหมายสำหรับทั้งชั่วโมงและนาที (Alt: :)
  • '(วรรค) - เครื่องหมายชั่วโมง (Alt: '``°)
  • ,(จุลภาค) - เครื่องหมายนาที (Alt: .)

กฎเพิ่มเติม

  1. รหัสที่มีจำนวนไบต์น้อยที่สุดจะเป็นผู้ชนะ!
  2. คุณต้องใช้ทั้งสองสัญลักษณ์เมื่อเป็นไปได้ สำหรับ 02:04 ผลที่ไม่สามารถหรือ'',,,, ;',,,มันจะต้องเป็น;;,,
  3. อินพุต - สามารถเป็นพารามิเตอร์สคริปต์ / แอปอินพุตผู้ใช้ (เช่น readline) หรือตัวแปรภายในรหัส
    3.1 หากมีการใช้ตัวแปรภายในโค้ดความยาวจะต้องยาวที่สุดเท่าที่จะเป็นไปได้ มันคือ1439(23:59) ดังนั้นมันจึงดูเหมือนt=1439
  4. ส่วนทั่วไปซึ่งเป็นสัญลักษณ์ของตัวละคร "ทั้ง" (12 ใน 12:05, 3 ใน 03:10) จะต้องวางไว้ที่จุดเริ่มต้นของสตริง
  5. สัญลักษณ์สามารถเปลี่ยนเป็นทางเลือกได้ก็ต่อเมื่อพวกเขาจะต้องหลบหนีในรหัสของคุณ
  6. ป้อนข้อมูลภายในไม่กี่นาทีหลัง00:00 น . คุณสามารถสันนิษฐานได้ว่านี่เป็นจำนวนเต็มไม่เป็นลบ

กรณีทดสอบ

Input: 300
Output: '''''

Input: 8
Output: ,,,,,,,,

Input: 187
Output: ;;;,,,,

Input: 482
Output: ;;''''''

Input: 427
Output: ;;;;;;;

Input: 0
Output:  (empty)

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

3
ไม่มีปัญหา! มันเป็นโพสต์แรกที่ดีมากและเป็นความท้าทายที่ดี :)
Adnan

1
ลักษณะนี้ให้ดีด้วยเครื่องหมายอัฒภาคเพียงและจุลภาค แต่ apostrophes โคลนมันทั้งหมดขึ้น :(
SPARR

ที่จริง1439เป็นและไม่ได้23:59 1339(23 x 60 + 59)
insertusernamehere

ขอบคุณทุกคนสำหรับคำพูดที่ดี! :) @Sparr ใช่นั่นคือจุดที่ไม่ดี :( คุณคิดไหมว่ามันจะถูกแทนที่ได้อย่างไรแทรกชื่อผู้ใช้ที่ถูกต้องแน่นอนคงที่ :) :)
Krzysiu

คำตอบ:


10

Pyth, 19 ไบต์

:.iF*V.DQ60J"',"J\;

ชุดทดสอบ

:.iF*V.DQ60J"',"J\;
      .DQ60            Divmod the input by 60, giving [hours, minutes].
           J"',"       Set J equal to the string "',".
    *V                 Perform vectorized multiplication, giving H "'" and M ','.
 .iF                   Interleave the two lists into a single string.
:               J\;    Perform a substitution, replacing J with ';'.

8

CJam, 22 20 19 ไบต์

รับข้อมูลจาก STDIN:

ri60md]',`.*:.{;K+}

ทดสอบที่นี่

คำอธิบาย

ri     e# Read input and convert to integer.
60md   e# Divmod 60, pushes hours H and minutes M on the stack.
]      e# Wrap in an array.
',`    e# Push the string representation of the comma character which is "',".
.*     e# Repeat apostrophe H times and comma M times.
:.{    e# Apply this block between every pair of characters. This will only applied to
       e# first N characters where N = min(hours,minutes). The others will remain
       e# untouched. So we want the block to turn that pair into a semicolon...
  ;    e#   Discard the comma.
  K+   e#   Add 20 to the apostrophe to turn it into a semicolon.
}

มันโชคดีจริงๆที่สิ่งต่าง ๆ ทำงานร่วมกันได้ดีที่นี่โดยเฉพาะการกำหนดชั่วโมง'และนาทีให้,กับลำดับของชั่วโมงและนาทีบนสแต็กที่จับคู่กับการแสดงสตริงของอักขระ

นี่เป็นบล็อก 3 ไบต์เดียวที่ฉันค้นพบ มีวิธีแก้ปัญหา 4 ตัวอักษรมากมายแม้ว่า:

{;;';}
{';\?}
{^'0+}
{^'F-}
{-'@+}
{-'6-}
...

6

GNU Sed, 37

คะแนนรวม +1 สำหรับ-Eตัวเลือกในการระงับ

ฉันไม่ประทับใจเป็นพิเศษกับ golfiness ของคำตอบ bashของฉันดังนั้นฉันคิดว่าฉันจะลองด้วยความสนุก

ข้อมูลป้อนเข้านั้นไม่พร้อมกันตามmeta-answerนี้

y/1/,/          # Convert unary 1's to commas (minutes)
s/,{60}/'/g     # divmod by 60.  "'" are hours
:               # unnamed label
s/(.*)',/;\1/   # replace an apostrophe and comma with a semicolon
t               # jump back to unnamed label until no more replacements

ลองออนไลน์


ป้ายกำกับที่ไม่มีชื่อ
mikeserv


@ manatwork - ฉันคิดว่ามันต้องเป็นบั๊ก GNU
mikeserv

@mikeserv - แต่การใช้บั๊กก็โอเคใช่ไหม? ฉันไม่ได้ขอให้คุณเยาะเย้ยฉันไม่รู้ :)
Krzysiu

@Krzysiu - ตกลง อืมม บนเว็บไซต์นี้ฉันคิดว่ามันจะเป็นสัญลักษณ์ของความเป็นเลิศ มิฉะนั้นแทบจะไม่แน่นอน เมื่อโปรแกรมเมอร์หลงทางจาก API และใช้รายละเอียดการนำไปใช้งานโปรแกรมจะขึ้นอยู่กับเวอร์ชัน / การนำไปใช้งาน - ซึ่งเป็นสิ่งที่ไม่ดี
mikeserv

6

Python 2, 56 ไบต์

def g(t):d=t%60-t/60;print(t/60*";")[:t%60]+","*d+"'"*-d

ฟังก์ชั่นที่พิมพ์ (หนึ่งตัวอักษรสั้นกว่าt=input();)

วิธีการคล้ายกับLoovjo ของ จำนวนของ,จะแตกต่างกันระหว่างนาทีและชั่วโมงโดยมีค่าน้อยที่สุดโดยนัยของ 0 สำหรับ'มันคือการปฏิเสธ สำหรับ;คำนวณค่าminปริยายโดยใช้เวลามาก;ถึงชั่วโมงแล้วตัดทอนเป็นจำนวนนาที

มันบันทึกตัวอักษรเพื่อบันทึกdแต่ไม่ใช่จำนวนชั่วโมงและนาทีที่นี่ อะนาล็อกที่มีแลมบ์ดานั้นยาวกว่าสองตัวอักษร (58) ดังนั้นการกำหนดตัวแปรจึงคุ้มค่า

lambda t:(t%60*";")[:t/60]+","*(t%60-t/60)+"'"*(t/60-t%60)

การประมวลผลอินพุตโดยตรงไม่ได้บันทึกตัวอักษร (58):

h,m=divmod(input(),60);d=m-h;print(";"*m)[:h]+","*d+"'"*-d

อีกกลยุทธ์หนึ่งด้วยการแบ่งส่วนอีกต่อไป (64):

def g(t):m=t%60;h=t/60;return(";"*m)[:h]+(","*m)[h:]+("'"*h)[m:]


3

Pure Bash (ไม่มียูทิลิตี้ภายนอก), 103

p()(printf -vt %$2s;printf "${t// /$1}")
p \; $[h=$1/60,m=$1%60,m>h?c=m-h,h:m]
p , $c
p \' $[m<h?h-m:0]

ขอบคุณ @ F.Hauri สำหรับการบันทึก 2 ไบต์


ดี! แต่คุณสามารถบันทึกตัวอักษร 2 โดยการแลกเปลี่ยน$1และ$2ในp()และเขียนp , $cที่บรรทัดที่ 3
เอฟ HAURI

ใช่ แต่ที่มันใช้เฉพาะในprintf "%s"การมีcที่ว่างเปล่าจะทำงานได้ดี (ในขณะที่ไม่ได้นำมาใช้ใหม่)
เอฟ HAURI

@ F.Hauri ตอนนี้ฉันเข้าใจแล้ว - ขอบคุณ!
Digital Trauma

3

C, 119 ไบต์

#define p(a,b) while(a--)putchar(b);
main(h,m,n){scanf("%d",&m);h=m/60;m%=60;n=h<m?h:m;h-=n;m-=n;p(n,59)p(h,39)p(m,44)}

รายละเอียด

// macro: print b, a times
#define p(a,b) while(a--)putchar(b)

int main(void)
{
    int h,m,n;
    scanf("%d",&m);  // read input

    h=m/60;m%=60;    // get hours:minutes
    n=h<m?h:m;       // get common count
    h-=n;m-=n;       // get remaining hours:minutes

    p(n,59);        // print common
    p(h,39);        // print remaining hours
    p(m,44);        // print remaining minutes

    return 0;
}

1
การใช้putcharและตัวอักษรจำนวนเต็มเป็นตัวละครหนึ่งไบต์ช่วยดึงอัฒภาคภายในแมโครประหยัดอีกสอง :)
เควนติน

@ บันทึกย่อของเคว็นตินบันทึกได้ 5 ไบต์
Khaled.K

คุณสามารถเสียพื้นที่ก่อนหน้าwhileในแมโคร #define ของคุณ -1 ไบต์
Albert Renshaw

1
นอกจากนี้คุณยังสามารถบันทึกไบต์เพิ่มเติมได้โดยเพียงแค่ทำ p (a, b) ฟังก์ชั่นแทนมาโคร (และเพิ่มเซมิโคลอนอีกสองสามฟังก์ชั่นให้กับคุณ)
Albert Renshaw

3

Haskell, 68 66 Bytes

g(h,m)=id=<<zipWith replicate[min h m,h-m,m-h]";',"
g.(`divMod`60)

ตัวอย่างการใช้งาน:

(g.(`divMod`60)) 482

บิตที่ฉลาดตรงนี้คือมันreplicateจะคืนค่าสตริงว่างถ้าความยาวที่กำหนดเป็นลบหรือศูนย์ดังนั้นฉันสามารถใช้มันกับความแตกต่างทั้งสองและมีเพียงค่าบวกเท่านั้นที่จะปรากฏขึ้น ส่วนแรกนั้นง่ายเนื่องจากจำนวนเซมิโคลอนนั้นน้อยที่สุดของทั้งสอง จากนั้นzipWithใช้ฟังก์ชันกับรายการที่เกี่ยวข้อง

แก้ไข: รับรู้ฉันใช้ถ่านผิดสำหรับนาที

แก้ไข 2: บันทึก 2 ไบต์ขอบคุณ @Laikoni


คุณสามารถบันทึกไบต์ที่สองโดยการแทนที่ด้วยconcat$ id=<<
Laikoni


2

Powershell, 99 85 ไบต์

param($n)";"*(($m=$n%60),($h=$n/60))[($b=$m-gt$h)]+"'"*(($h-$m)*!$b)+","*(($m-$h)*$b)

ใช้วิธีการของ Loovjoนี่คือการใช้ PowerShell ของฉัน

ungolfed

param($n) 
# set the number of minutes and hours, and a boolean which one is bigger
# and also output the correct number of ;s
";"*(($m=$n%60),($h=$n/60))[($b=$m-gt$h)]+ 
# add the difference between h and m as 's but only if h > m
"'"*(($h-$m)*!$b)+
# add the difference between m and h as ,s but only if m > h
","*(($m-$h)*$b)

บันทึก 14 ไบต์ขอบคุณ AdmBorkBork


คุณสามารถบันทึกได้โดยใช้pseudo-ternaryสำหรับรายการแรกย้าย$mและ$hประกาศลงในนั้นจากนั้นใช้การคูณแบบบูล ชอบมาก -param($n)';'*(($m=$n%60),($h=$n/60))[($b=$m-gt$h)]+'°'*(($h-$m)*!$b)+','*(($m-$h)*$b)
AdmBorkBork

1

Python 3, 98 ไบต์

d=int(input());m=d%60;h=int((d-m)/60)
if m>=h:print(";"*h+","*(m-h))
else:print(";"*(m)+"'"*(h-m))

อาจไม่ใช่คำตอบที่ดีที่สุด แต่มันสนุกมาก!


1

Python 2, 61 ไบต์

t=input();m,h=t%60,t/60
print";"*min(h,m)+","*(m-h)+"'"*(h-m)

ชี้แจง:

t=input();              # Read input
          m,  t%60,     # Do a divmod, h = div, m = mod
            h=     t/60

print";"*min(h,m)+                    # Print the minimum of the h and m, but in ";"s
                  ","*(m-h)+          # Print (m-h) ","s (if m-h is negative, print nothing)
                            "'"*(h-m) # Print (h-m) "'"s (if h-m is negative, print nothing)

1

PHP, 81 ไบต์

ฉันไปหาอินพุตตัวแปรเนื่องจากสั้นกว่าการอ่านSTDINหรือรับอาร์กิวเมนต์บรรทัดคำสั่ง

for($_=1439;$i<max($h=0|$_/60,$m=$_%60);++$i)echo$i<$h?$i<min($h,$m)?';':"'":",";

ฉันคิดว่าฉันรู้ PHP ค่อนข้างดี แต่ฉันเห็น | สำหรับครั้งแรก. ฉันคิดว่าฉันจะใช้มันเพื่อออกกำลังกายสักหน่อย - ฉันจะวิเคราะห์ :)
Krzysiu

240ล้มเหลว ลอง$i>=min($h,$m)?$h<$m?",":"'":";"(+1 ไบต์) หรือใช้for($_=1439;$i<max($h=0|$_/60,$m=$_%60);)echo"',;"[$i++<min($h,$m)?2:$h<$m];(76 ไบต์) Btw: การเสนอราคาเดียว-rเป็นไปไม่ได้; ดังนั้นคุณควรใช้ backtick เป็นชั่วโมงหากอยู่ในสตริงหรือ°สแตนด์อโลน (ไม่จำเป็นต้องมีเครื่องหมายคำพูด -> -1 ไบต์)
ติตัส

1

JavaScript (ES6), 77 71 ไบต์

x=>';'[r='repeat'](y=Math.min(h=x/60|0,m=x%60))+"'"[r](h-y)+','[r](m-y)

การใช้งานที่ยอดเยี่ยมในการเข้าถึงแอตทริบิวต์ / อาร์กิวเมนต์ของฟังก์ชัน +1
Cyoce

1

Perl 6, 103 101 98 97 69 ไบต์

$_=get;say ";"x min($!=($_-$_%60)/60,$_=$_%60)~"'"x $!-$_~","x $_-$!;

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

แก้ไข: -2 ไบต์: มีความกล้าหาญและนำบางส่วนออก

แก้ไข 2: -3 ไบต์โดยการลบอาร์เรย์

Edit3: -1 ไบต์เพื่อพิมพ์ในรูปแบบที่ถูกต้องโดยใช้ "lambdas" และลบ parantheses

Edit4: (ขออภัยด้วย) การเหยียดหยามชั่วโมงนั้น - นาทีควรกลับ 0 และตรงข้าม ลบออกหากงบ จากนั้นลบวงเล็บแล้วตระหนักว่าฉันไม่จำเป็นต้องแลมบ์ดาเลย -28 ไบต์ :)

ว้าวฉันเริ่มดีขึ้นแล้ว


0

C, 141 ไบต์

main(h,m){scanf("%d",&m);h=(m/60)%24;m%=60;while(h||m){if(h&&m){printf(";");h--;m--;}else if(h&&!m){printf("'");h--;}else{printf(",");m--;}}}

h>0||m>0ฉันคิดว่าคุณจะสามารถประหยัดไม่กี่ไบต์โดยใช้ จากนั้นคุณต้องทำh--;m--;เพียงครั้งเดียวในทุกการทำซ้ำและ{}สำหรับการที่if/elseจะล้าสมัย
insertusernamehere

นอกจากนี้คุณยังสามารถบันทึกสองสามไบต์ในเงื่อนไขที่สองของคุณ: แทนที่จะเป็นelse if(h&&!m)ได้else if(h)
Hellion

และในที่สุดก็พยายามที่จะใช้ประกอบ ternary ก็จะช่วยให้คุณประหยัดจากการใช้ "ยาว" คำเช่นและif else
แทรกชื่อผู้ใช้ ณ

พิจารณา refactoring เป็นฟังก์ชั่นที่ใช้เวลาการป้อนข้อมูลที่เป็นพารามิเตอร์ int - scanf()นั่นอย่างน้อยควรจะช่วยให้คุณประหยัด
Digital Trauma

ฉันไม่คิดว่า%24จำเป็น - อินพุตสูงสุดคือ 23:59
Digital Trauma

0

Gema, 119 ตัวอักษร

<D>=@set{h;@div{$0;60}}@set{m;@mod{$0;60}}@repeat{@cmpn{$h;$m;$h;$h;$m};\;}@repeat{@sub{$h;$m};'}@repeat{@sub{$m;$h};,}

วิ่งตัวอย่าง:

bash-4.3$ gema '<D>=@set{h;@div{$0;60}}@set{m;@mod{$0;60}}@repeat{@cmpn{$h;$m;$h;$h;$m};\;}@repeat{@sub{$h;$m};`}@repeat{@sub{$m;$h};,}' <<< '252'
;;;;,,,,,,,,

0

Matlab: 89 ไบต์

i=input('');m=mod(i,60);h=(i-m)/60;[repmat(';',1,min(h,m)),repmat(39+5*(m>h),1,abs(h-m))]

ทดสอบ:

310
ans =
;;;;;,,,,,

0

SmileBASIC ขนาด 59 ไบต์

INPUT M
H%=M/60M=M-H%*60?";"*MIN(H%,M);",'"[M<H%]*ABS(H%-M)

อธิบาย:

INPUT MINUTES 'input
HOURS=MINUTES DIV 60 'separate the hours and minutes
MINUTES=MINUTES MOD 60
PRINT ";"*MIN(HOURS,MINUTES); 'print ;s for all positions with both
PRINT ",'"[MINUTES<HOURS]*ABS(HOURS-MINUTES) 'print extra ' or ,

มันดูแย่มากเนื่องจากส่วนล่างของ;นั้นไม่เหมือนกับ,ในแบบอักษรของ SmileBASIC


0

PHP, 81 ไบต์

โซลูชั่นเพิ่มเติม:

echo($r=str_repeat)(";",min($h=$argn/60,$m=$argn%60)),$r(",`"[$h>$m],abs($h-$m));
// or
echo($p=str_pad)($p("",min($h=$argn/60,$m=$argn%60),";"),max($h,$m),",`"[$h>$m]);

echo <time> | php -R '<code>'ทำงานด้วย

<?=($r=str_repeat)(";",min($h=($_=1439)/60,$m=$_%60)),$r(",`"[$h>$m],abs($h-$m));
// or
<?=($r=str_repeat)(";",min($h=.1/6*$_=1439,$m=$_%60)),$r(",`"[$h>$m],abs($h-$m));
// or
<?=str_pad(str_pad("",min($h=($_=1439)/60,$m=$_%60),";"),max($h,$m),",`"[$h>$m]);

แทนที่1439ด้วยอินพุต, บันทึกเป็นไฟล์, รัน


0

Ruby, 50 ตัวอักษร

->t{(?;*h=t/60)[0,m=t%60]+",',"[0<=>m-=h]*m.abs}

ขอบคุณที่:

  • กิกะไบต์สำหรับ
    • เตือนฉันว่าฉันไม่สามารถใช้อักขระเกินกว่าสตริงได้ (-1 อักขระ)
    • จัดระเบียบการคำนวณของฉันใหม่ (-1 อักขระ)

รอนานมากที่จะใช้Numeric.divmodเพียงแค่ตระหนักว่ามันยาวมาก

วิ่งตัวอย่าง:

2.1.5 :001 > puts ->t{(?;*h=t/60)[0,m=t%60]+",',"[0<=>m-=h]*m.abs}[252]
;;;;,,,,,,,,

1
บันทึก 1 ตัวละครโดยการตัดทอนสตริงแทนการใช้ขั้นต่ำ:(?;*h=t/60)[0,m=t%60]
GB

1
และอีกหนึ่งไบต์โดยการลบ h จาก m:",',"[0<=>m-=h]*m.abs
GB

0

05AB1E , 25 ไบต์

60‰vy„'.Nè×}‚.BøJ„'.';:ðK

ลองออนไลน์!

60‰vy„'.Nè×}แน่นอนสามารถจะสั้นลงผมก็ไม่สามารถคิดออกและสงสัยฉันจะสามารถโกน 7 ×ไบต์จะชนะด้วยวิธีนี้นอกจากจะมีรุ่นเวกเตอร์ของ


ตัวอย่าง (ด้วยอินพุตเท่ากับ 63):

60‰                       # Divmod by 60.
                          # STACK: [[1,3]]
   vy      }              # For each element (probably don't need the loop)...
                          # STACK: []
     „'.Nè×               # Push n apostrophe's for hours, periods for minutes.
                          # STACK: ["'","..."]
            ‚             # Group a and b.
                          # STACK: [["'","..."]]
             .B           # Boxify.
                          # STACK: [["'  ","..."]]
               ø          # Zip it (Transpose).
                          # STACK: [["'."," ."," ."]
                J         # Join stack.
                          # STACK: ["'. . ."]
                 „'.';:   # Replace runs of "'." with ";".
                          # STACK: ["; . ."]
                       ðK # Remove all spaces.
                          # OUTPUT: ;..

D60÷''×s60%'.ׂ.BøJ„'.';:ðK เป็นรุ่นดั้งเดิมของฉัน แต่นั่นก็แพงกว่า divmod

60‰WDµ';ˆ¼}-¬0Qi'.ë''}ZׯìJ อีกวิธีหนึ่งที่ฉันลอง ...



0

Java 8, 101 99 86 ไบต์

n->{String r="";for(int m=n%60,h=n/60;h>0|m>0;r+=h--*m-->0?";":h<0?",":"'");return r;}

คำอธิบาย:

ลองที่นี่

n->{                      // Method with integer parameter and String return-type
  String r="";            //  Result-String (starting empty)
  for(int m=n%60,h=n/60;  //   Get the minutes and hours from the input integer
      h>0|m>0;            //   Loop as long as either the hours or minutes is above 0
    r+=                   //   Append the result-String with:
       h--*m-->0?         //    If both hours and minutes are above 0
                          //    (and decrease both after this check):
        ";"               //     Use ";"
       :h<0?              //    Else-if only minutes is above 0 (hours is below 0)
        ","               //     Use ","
       :                  //    Else:
        "'"               //     Use "'"
  );                      //  End loop
  return r;               //  Return the result
}                         // End of method
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.