หอระฆังจะดังขึ้นกี่ครั้ง?


24

บทนำ

หอระฆังจะดังระฆังของทุกชั่วโมงnครั้งกับnการเป็นชั่วโมงในปัจจุบันเกี่ยวกับนาฬิกาแบบ 12 ชั่วโมง

ตัวอย่างเช่นเสียงกระดิ่งจะดังขึ้น 5 ครั้งในเวลา 17.00 น. และ 10 ครั้งเวลา 10.00 น.

งาน

ให้สองครั้งในรูปแบบที่เหมาะสมเอาท์พุทจำนวนครั้งที่ระฆังจะดังรวมถึงเวลาเริ่มต้นและสิ้นสุด

ตัวอย่าง

"10am-12pm"
10+11+12= 33

[01:00, 05:00]
1+2+3+4+5 = 15

[11, 15]
11+12+1+2+3 = 29

[10:00pm, 10:00am]
10+11+12+1+2+3+4+5+6+7+8+9+10 = 88

หากการเริ่มต้นนั้นเหมือนกับจุดสิ้นสุดคุณเพียงแค่ใส่จำนวนเสียงในชั่วโมงนั้น:

[5pm, 5pm]
5 = 5

อย่างที่คุณเห็นคุณอาจเลือกวิธีการป้อนข้อมูล แต่ผลลัพธ์จะต้องเป็นจำนวนเต็มด้วยตัวเอง (หรือทางเลือกที่ยอมรับได้) ต่อท้าย / ขึ้นบรรทัดใหม่และช่องว่างที่ได้รับอนุญาต

บันทึก:

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

2
เราเลือกวิธีการป้อนข้อมูลของเราเองหรือไม่หรือต้องสนับสนุนทั้งหมดที่กล่าวถึงหรือไม่
ไม่ระบุชื่อ

1
คุณสามารถเลือกวิธีป้อนข้อมูล
Shaun Wild

1
คุณควรทำให้ชัดเจนยิ่งขึ้นว่าอินพุตสามารถไปจากpmถึงamจึงข้ามไปยังวันที่ 2
mbomb007

3
เที่ยงคืนจะได้รับเป็น 0 หรือ 24 หรือไม่
xnor

4
เราสนับสนุนให้ใช้Sandboxเพื่อแก้ไขปัญหาใด ๆ ที่มีความท้าทายก่อนที่จะโพสต์ไปยังเว็บไซต์หลัก
Mego

คำตอบ:


12

JavaScript (ES6), 38 35 ไบต์

f=(x,y)=>~-x%12-~(x-y&&f(x%24+1,y))

เพิ่มจำนวนเสียงกริ่งปัจจุบันซ้ำไปยังจำนวนทั้งหมดซ้ำ ๆ เรียกว่าชอบf(11,15); 24เที่ยงคืนจะแสดงเป็น ผมได้เป็นส่วนหนึ่งของ~-เคล็ดลับจาก@ XNOR คำตอบของงูหลาม

ตัวอย่างการทดสอบ

รุ่นที่ไม่ใช่แบบเรียกซ้ำ (Firefox 30+), 56 ไบต์

(x,y,t=0)=>[for(_ of Array((y-x+25)%24))t+=x++%12||12]|t

เทียบเท่ากับฟังก์ชัน ES6 ต่อไปนี้:

(x,y,t=0)=>[...Array((y-x+25)%24))].map(_=>t+=x++%12||12)|t

7

Python 2, 46 ไบต์

f=lambda x,y:(x%12or 12)+(x-y and f(-~x%24,y))

ตามคำตอบ JS ของฉัน สูตรแบบเรียกซ้ำfสำหรับโซลูชันถูกกำหนดดังนี้

  1. เริ่มต้นด้วยสองจำนวนเต็มxและy ที่
  2. ใช้x mod 12 ; ถ้านี่คือ 0 ใช้12แทน
  3. ถ้าx! y =เพิ่มผลมาจากf (x + 1 สมัย 24, y)

6

Python 2, 59 54 ไบต์

a=lambda x,y:sum(1+i%12for i in range(x-1,y+24*(x>y)))
เทียบเท่ากับ
summ=0
if start > end:
    end+=24
for hour in range(start-1,end):
    summ +=1+hour%12
print summ

3
ฉันคิดว่าคุณไม่ต้องการa=ส่วนนี้
acrolith

@daHugLenny ต้องเป็นฟังก์ชันเต็ม (ใช้งานได้)
Rod

(y + 24)% 24 เป็นเพียงแค่ y
Vladimir Cravero

1
@Rod a=คุณไม่จำเป็นต้อง มันได้รับอนุญาตให้เป็นแลมบ์ดาบริสุทธิ์
Yytsi

1
@VladimirCravero ไม่แน่นอน y%24มันเป็นเช่นเดียวกับ
Erik the Outgolfer


3

Python ขนาด 42 ไบต์

f=lambda a,b:~-a%12-~(b-a and f(-~a%24,b))

ฟังก์ชั่นวนซ้ำที่รับสองตัวเลขจาก 0 ถึง 23 การขยายตัว~xของการ-x-1ให้

f=lambda a,b:(a-1)%12+1+(b-a and f((a+1)%24,b))

การแสดงออก(a+1)%12+1แปลงเวลาไปยังหมายเลขของวงไป1 12จากนั้นขอบเขตล่างคือโมดูโลแบบเพิ่มค่า 24 และเพิ่มฟังก์ชันสำหรับผลลัพธ์แบบเรียกซ้ำ นั่นคือยกเว้นว่าชั่วโมงปัจจุบันเป็นชั่วโมงสิ้นสุดซึ่งในกรณีนี้เราหยุด

ฉันพยายามเขียนวิธีแก้ปัญหาเชิงคณิตศาสตร์อย่างหมดจดแทน แต่จนถึงตอนนี้ฉันก็พบว่าการแสดงออกที่ยาวนานและยุ่งเหยิง


โอ้ฉันได้รับมัน: มันเป็นพื้นเทคนิคเดียวกันเป็นคำตอบหลามของฉัน orแต่มีวิธีที่ฉลาดจริงๆของการรับรอบ ทำได้ดีนี่!
ETHproductions

3

Haskell, 48 43 ไบต์

s%e=sum[mod x 12+1|x<-[s-1..e+23],x<e||s>e]

การใช้งานstartHour % endHourมีทั้งอินพุตที่ให้ในรูปแบบ 24 ชั่วโมง

แก้ไข: เพิ่มการปรับปรุงของ @ xnor ประหยัด 5 ไบต์


แทนการเปลี่ยนแปลงeเมื่อคุณสามารถกรองช่วงe<s s%e=sum[mod(x-1)12+1|x<-[s..e+24],x<=e||s>e]จากนั้นก็จะช่วยประหยัดไบต์การเปลี่ยนแปลง x ลดลง s%e=sum[mod x 12+1|x<-[s-1..e+23],x<e||s>e]1:
xnor

3

C #, 73 ไบต์

a=>b=>{int x=0;for(;;){x+=(a%=24)>12?a-12:a<1?12:a;if(a++==b)return x;}};

อินพุตที่ยอมรับได้: จำนวนเต็มในช่วง [0,23]

วิธีนี้ไม่ได้ใช้ LINQ


โปรแกรมเต็มรูปแบบพร้อมกรณีทดสอบ:

using System;

namespace HowManyTimesABellTowerRings
{
    class Program
    {
        static void Main(string[] args)
        {
            Func<int,Func<int,int>>f= a=>b=>{int x=0;for(;;){x+=(a%=24)>12?a-12:a<1?12:a;if(a++==b)return x;}};

            Console.WriteLine(f(10)(12));   //33
            Console.WriteLine(f(1)(5));     //15
            Console.WriteLine(f(11)(15));   //29
            Console.WriteLine(f(22)(10));   //88
            Console.WriteLine(f(10)(10));   //10
            Console.WriteLine(f(11)(10));   //156
            Console.WriteLine(f(0)(23));    //156
            Console.WriteLine(f(22)(1));    //34
        }
    }
}

3

เยลลี่ , 17 16 15 14 ไบต์

>×24+⁹⁸r’%12‘S

TryItOnline

อย่างไร?

>×24+⁹⁸r’%12‘S - Main link: a, b (24 hr integers, midnight may be 0 or 24)
>              - a>b? (1 if true, 0 if false)
 ×24           - times 24 (24 if a>b, else 0)
    +⁹         - add to b (b+24 if a>b, else b)
      ⁸        - a
       r       - range(a, b+24 or b) ([a,a+1,...,b+24 or b])
        ’      - decrement (vectorises) ([a-1,a,...,b+23 or b-1])
         %12   - mod 12 (vectorises) (number of tolls at each occurrence - 1)
            ‘  - increment (vectorises) (number of tolls at each occurrence)
             S - sum

2

MATL , 14 ไบต์

yy>24*+&:12X\s

รูปแบบการป้อนข้อมูลเป็นตัวอย่างที่สามในความท้าทายนั่นคือตัวเลขสองตัวในรูปแบบ 24 ชั่วโมง

ลองออนไลน์!

คำอธิบาย

ใช้ปัจจัยการผลิต22, 10เป็นตัวอย่าง

yy      % Take two inputs implicitly. Duplicate both
        %   STACK: 22, 10, 22, 10
>       % Is the first greater than the second?
        %   STACK: 22, 10, 1
24*     % Multiply by 24
        %   STACK: 22, 10, 24
+       % Add
        %   STACK: 22, 34
&:      % Binary range
        %   STACK: [22 23 24 25 26 27 28 29 30 31 32 33 34]
12X\    % Modulo 12, 1-based
        %   STACK: [10 11 12 1 2 3 4 5 6 7 8 9 10]
s       % Sum of array
        %   STACK: 88
        % Implicitly display

2

PHP, 90 ไบต์

รูปแบบอินพุต '[1,24]' ระหว่าง 1 ถึง 24

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

<?list($f,$g)=$_GET[b];for($i=$f;$i-1!=$g|$f>$g&!$c;$s+=$i++%12?:12)$i<25?:$c=$i=1;echo$s;

99 ไบต์

<?for($i=($b=$_GET[b])[0],$c=($d=$b[1]-$b[0])<0?25+$d:$d+1;$c--;$s+=$i++%12?:12)$i<25?:$i=1;echo$s;

113 Bytes ต่อ min และ max

<?for($i=min($b=$_GET[b]);$i<=$m=max($b);)$s+=$i++%12?:12;echo($b[0]>$b[1])?156-$s+($m%12?:12)+($b[1]%12?:12):$s;

โอเคนี้ความคิดที่บ้าทำงานร่วมกับอาร์เรย์ 149 ไบต์เติมอาร์เรย์$y[0]และ$y[1]ถ้า$_GET["b"][0]<=$_GET["b"][1] หาก$y[1]เป็นnullเราสามารถสรุปอาร์เรย์นี้array_diff_key($y[0],array_slice($y[0],$b[1],$b[0]-$b[1]-1,1))

<?for(;++$i<25;)$y[$i>=($b=$_GET[b])[0]&$i<=$b[1]][$i]=$i%12?:12;echo array_sum($y[1]??array_diff_key($y[0],array_slice($y[0],$b[1],$b[0]-$b[1]-1,1)));

สิ่งนี้สามารถลงสนามได้ 124 ไบต์

<?for(;++$i<25;)$x[($v=($b=$_GET[b])[0]>$b[1])?$i<$b[0]&$i>$b[1]:$i>=$b[0]&$i<=$b[1]][$i]=$i%12?:12;echo array_sum($x[!$v]);

ณ จุดนี้เราสามารถลดอาเรย์ด้วยสอง ints 101 Bytes Make 2 sums $x[0]และ$x[1]

list($f,$g)=$_GET[b];

หาก$v=($f>$g เพิ่มมูลค่าให้กับ$x[$i<$f&$i>$g] คนอื่นเพิ่มมูลค่าให้$x[$i>=$f&$i<=$g] กับผลลัพธ์จะได้รับการค้นหาตามกรณีecho$x[!$v];

<?list($f,$g)=$_GET[b];for(;++$i<25;)$x[($v=$f>$g)?$i<$f&$i>$g:$i>=$f&$i<=$g]+=$i%12?:12;echo$x[!$v];

หลังจากนั้นฉันพบวิธีการคำนวณผลลัพธ์โดยตรง 112 ไบต์

<?list($x,$y)=$_GET[t];echo(($b=$x>$y)+(($x-($s=$x%12?:12)^$y-($t=$y%12?:12))xor$b))*78-($s*($s-1)-$t*($t+1))/2;

เวียนซ้ำ 103 ไบต์

<?list($x,$y)=$_GET[t];function f($x,$y){return($x%12?:12)+($x-$y?f(++$x<25?$x:1,$y):0);}echo f($x,$y);

2

PHP, 69 ไบต์

list(,$i,$a)=$argv;for($a+=$i>$a?24:0;$i<=$a;)$n+=$i++%12?:12;echo$n;

การแยกรายการได้แรงบันดาลใจจากคำตอบของJörgHülsermann แต่ความคล้ายคลึงกันที่เหลือเป็นผลมาจากวิวัฒนาการของการลู่เข้าและเพราะมันค่อนข้างสั้นกว่ามากและเงื่อนไขในการวนรอบนั้นแตกต่างกันมาก

ใช้เวลาอินพุตเป็น 24 ชั่วโมง (ปรับด้วย 0 หรือ 24) ทำงานเหมือน:

php -r "list(,$i,$a)=$argv;for($a+=$i>$a?24:0;$i<=$a;)$n+=$i++%12?:12;echo$n;" 9 18

$i>$a?24:0มีความยาวเท่ากับ($i>$a)*24 wiki.php.net/rfc/short_list_syntaxบางทีคุณอาจต้องการใช้ไวยากรณ์ลิสต์แบบสั้นซึ่งเป็นของใหม่ใน 7.1 [$x,$i,$a]=$argv;-2 ไบท์ไบต์ก่อนที่ฉันจะไม่ได้ทดสอบว่าฉันจะไม่ใช้มัน วิธีที่ดีตอนนี้ฉันเกลียดฉันมากกว่าที่ฉันไม่ได้พบวิธีนี้
JörgHülsermann

ขอบคุณฉันรู้เกี่ยวกับไวยากรณ์รายการสั้น ๆ ที่จะเกิดขึ้น แต่เนื่องจาก php 7.1 ยังไม่ได้รับการเผยแพร่อย่างถูกต้อง (ยังอยู่ในรุ่นที่ 3 ผู้สมัครที่เขียน) ฉันคิดว่ามันยังไม่ได้รับอนุญาตในคำตอบ PPCG
user59178

2

Java, 72 71 78 76 ไบต์

Usage: 
    pm:    true if first time is past 11am
    time:  first time%12
    pm2:   true if second time is past 11am
    time2: second time%12

แก้ไข :

  • -1ไบต์ ขอบคุณ @ 1Darco1
  • หัวฟังก์ชั่นคงที่ +7ไบต์บน
  • -2ไบต์ ขอบคุณ @Kevin Cruijssen
  • +2ไบต์บน ตอนนี้e/ clockจะเริ่มต้น

(a,b,c,d)->{int e=0;b+=a?12:0;d+=c?12:0;for(;b!=d;e+=b%12,b=++b%24);return e;}

Ungolfed:

public static int clock(boolean pm, int time, boolean pm2, int time2){
  int clock=0;
  time+=pm?12:0;
  time2+=pm2?12:0;
  while(time!=time2){
    clock+=time%12;
    time=++time%24;
  }
  return clock;
}

คุณกำหนดไว้ที่ไหนaและdและb? วิธีการแบบเต็มทำให้รู้สึก แต่ถ้าฉันไม่ได้หายไปอย่างรุนแรงฉันคิดว่าคุณต้องดูแลมบ์ดาของคุณกอล์ฟอีกครั้งและพยายามที่จะดำเนินการจริง สำหรับการเล่นกอล์ฟเพิ่มเติม: สามารถกลายเป็น(time+1) ++time
1Darco1

เกิดข้อผิดพลาดในส่วนที่แข็งแรงเล่นกอล์ฟคือควรจะเป็นa+=a? b+=a?นอกจากนี้คุณยังสามารถตีกอล์ฟได้ 2 ไบต์โดยเปลี่ยนwhileร่างเป็นร่างกายforแบบนี้:(a,b,c,d)->{int e;b+=a?12:0;d+=c?12:0;for(;b!=d;e+=b%12,b=++b%24);return e;}
Kevin Cruijssen

ขอโทษ ฉันเขียนวิธีการนี้จากมือถือของฉันและไม่สามารถทดสอบได้ คงที่ :)
Roman Gräf

1

QBIC , 90 47 ไบต์

ดังนั้นนี่คือคำตอบที่พิมพ์ได้เฉพาะจำนวนระฆังทั้งหมด:

::{c=a~c>12|c=c-12]d=d+c~a=b|_Xd]a=a+1~a>24|a=1

ป้อนข้อมูลอยู่ในช่วง1-24; aและbเป็นอินพุต ( ::ในรหัส), cติดตาม am / pm, dเป็นจำนวนเสียงเรียกเข้าทั้งหมด เมื่อเรานับถอยหลังทุกชั่วโมง_Xdยกเลิกโปรแกรมการพิมพ์dในกระบวนการ


ตกลงฉันเข้าใจผิดคำถามและคิดว่า1+2+3...=ข้อความเป็นส่วนหนึ่งของผลลัพธ์ดังนั้นฉันจึงเขียนว่า:

::{c=a~c>12|c=c-12]X=!c$Z=Z+X+@+| d=d+c~a=b|?left$$|(Z,len(Z)-1)+@ =|+!d$_X]a=a+1~a>24|a=1

ตอนนี้ฉันจะเขียนรหัสคำตอบที่ถูกต้อง ...


1

Pyth - 11 ไบต์

s|R12%R12}F

Test Suite


2
นี้ไม่ได้นับประมาณเที่ยงคืนเช่น23, 1ผลเมื่อมันควรเอาท์พุท144 24(แน่นอนกรณีนี้ควรอยู่ในการทดสอบ!)
Jonathan Allan

1

C #, 76 ไบต์

(a,b)=>Enumerable.Range(a,Math.Abs(b-a)+1).Select(n=>n%12==0?12:n%12).Sum();

นี่ดูไม่เหมือนว่ามันล้อมรอบตอนเที่ยงคืน
Neil

กรณีทดสอบทั้งหมดสำเร็จ
downrep_nation

ฉันไม่ได้ถามอย่างนั้น
Neil

ถ้ากรณีทดสอบอะไรของคุณล้มเหลวในการติดตั้ง
downrep_nation

a=23และb=0ดูเหมือนจะเป็นตัวอย่างที่ชัดเจนที่สุด
Neil

1

Perl, 36 ไบต์

รวม +1 สำหรับ -p

ให้เวลาเริ่มต้นและสิ้นสุดในรูปแบบ 24 ชั่วโมงในแต่ละบรรทัดใน STDIN:

toll.pl
11
15
^D

toll.pl:

#!/usr/bin/perl -p
$\+=$_%12||12for$_..$_+(<>-$_)%24}{

1

Java 7, 64 ไบต์

int c(int x,int y){return(x%12<1?12:x%12)+(x!=y?c(-~x%24,y):0);}

วิธีการซ้ำขึ้นอยู่กับ@ETHproductions 's งูหลาม 2 คำตอบ ใช้อินพุตนาฬิกา 24 ชั่วโมง

Ungolfed & รหัสการทดสอบ:

ลองที่นี่

class M{
  static int c(int x, int y){
    return (x%12 < 1
             ? 12
             : x%12)
         + (x != y
             ? c(-~x % 24, y)
             : 0);
  }

  public static void main(String[] a){
    System.out.println(c(10, 12));
    System.out.println(c(1, 5));
    System.out.println(c(11, 15));
    System.out.println(c(10, 22));
    System.out.println(c(5, 5));
  }
}

เอาท์พุท:

33
15
29
88
5

1

แบตช์168 91 ไบต์

@cmd/cset/ax=(%1+23)%%24,y=x+(%2+24-%1)%%24,z=y%%12+1,(y/12-x/12)*78+z*-~z/2-(x%%=12)*-~x/2

แก้ไข: บันทึก 77 ไบต์โดยเปลี่ยนเป็นแบบปิดสำหรับคำตอบ

  • %1และ%2เป็นพารามิเตอร์สองบรรทัดคำสั่ง
  • @ ปิดการใช้งานเริ่มต้นของแบทช์ซึ่งจะสะท้อนคำสั่ง
  • cmd/c Fool Batch ให้พิมพ์ผลการคำนวณทันที
  • set/a ทำการคำนวณตัวเลข
  • x=(%1+23)%%24, ปรับมาตรฐานชั่วโมงเริ่มต้นให้เป็นจำนวนชั่วโมงตั้งแต่ 1AM (1PM จะทำงานได้ แต่ 11 จะไม่สั้นกว่า 23)
  • y=x+(%2+24-%1)%%24, ปรับมาตรฐานชั่วโมงสิ้นสุดให้อยู่ก่อนชั่วโมงเริ่มต้นและเข้าใกล้วันถัดไปหากจำเป็น
  • z=y%%12+1, จำนวนของระฆังที่เกิดขึ้นในชั่วโมงสุดท้าย
  • (y/12-x/12)*78+ จำนวนระฆังเนื่องจากครึ่งวันพิเศษ
  • z*~-z/2- จำนวนระฆังตั้งแต่ 1 โมงเช้าถึงชั่วโมงสิ้นสุด
  • (x%%=12) หนึ่งน้อยกว่าจำนวนระฆังที่เกิดขึ้นในชั่วโมงเริ่มต้น
  • *-~x/2 จำนวนระฆังที่จะถูกกระแทกตั้งแต่ 1 โมงเช้าถึงชั่วโมงเริ่มต้น แต่ไม่รวมเวลาเริ่มต้น

1

C, 56 Bytes

f(a,b,c=0){while(b-->a){c+=b>12?b-12:b;}printf("%d",c);}

1

> <> , 48 + 2 = 50 ไบต์

<v$&%$-&:$+}:*2c
{>:?!v1-}:1+
v?=1l<++1%c+b$
>n;

คาดว่าอินพุตจะแสดงบนสแต็กเมื่อเริ่มต้นโปรแกรมดังนั้นจึงมีค่า 2 ไบต์สำหรับ-vแฟล็ก การป้อนข้อมูลเป็นจำนวนเต็มสองจำนวนที่ระบุชั่วโมงบนนาฬิกาตลอด 24 ชั่วโมงเพื่อจะได้รับเป็น10am - 10pm10 22

ลองออนไลน์!


@LuisMendo ขอบคุณตอนนี้ได้รับการแก้ไขแล้ว
Sok

1

Cubix , 45 44 ไบต์

บันทึกแล้ว 1 ไบต์ขอบคุณ @ETHproductions

การโจมตีครั้งแรกของฉันสู่ Cubix ...

)$424tU4OI0Iuq;;-!^;^%&21u+rr;ss!;sqU>&%r$@;

หรือถูกทำให้เป็นก้อน:

      ) $ 4
      2 4 t
      U 4 O
I 0 I u q ; ; - ! ^ ; ^
% & 2 1 u + r r ; s s !
; s q U > & % r $ @ ; .
      . . .
      . . .
      . . .

คุณสามารถลองที่ล่ามออนไลน์ อินพุตอยู่ในรูปแบบ 24 ชั่วโมงโดยมีเวลาสิ้นสุดก่อน ยกตัวอย่างเช่น 17:00-01:00 1 17ป้อนข้อมูลที่ควรจะเป็น


รุ่นก่อนหน้า 45 ไบต์:

)$442t\/OI0Iuq;;-!^;^%&21u+rr;ss!;sqU>&%r$@.;

1
ขอบคุณที่ใช้ภาษาของฉันและงานที่ยอดเยี่ยม :-) ฉันเห็นไบต์ขนาดเล็กหนึ่งอันที่คุณสามารถบันทึกได้โดยจัดเรียงใหม่เล็กน้อยและวางไม่มีตัวเลือก:)$424tU4OI0Iuq;;-!^;^%&21u+rr;ss!;sqU>&%r$@;
ETHproductions

0

Qbasic, 112 ไบต์

input "",a
input "",b
do
if a=25 then a=1
if a<=12 then
c=c+a
else
c=c+a-12
endif
a=a+1
loop until a=b+1
print c

คุณไม่ควรออก 12 เมื่อทั้งชั่วโมงเริ่มต้นและสิ้นสุดเป็นศูนย์?
Neil

0

Python ขนาด 73 ไบต์

มันจะสั้นกว่ามากถ้าเราไม่ได้ให้การสนับสนุนการpm amฉันใช้การสอบถามซ้ำเพื่อสนับสนุน

f=lambda a,b:sum([~-i%12+1for i in range(a,b+1)]*(a<b)or[f(a,24),f(1,b)])

ลองออนไลน์

ไม่สนับสนุนpmถึงam(45 ไบต์):

lambda a,b:sum(~-i%12+1for i in range(a,b+1))
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.