อย่าให้ห้า!


38

คำถาม:

5คุณจะได้รับเริ่มต้นและสิ้นสุดของจำนวนเต็มลำดับและควรกลับจำนวนของจำนวนเต็มที่อยู่ภายในซึ่งไม่ได้มีหลัก ควรระบุหมายเลขเริ่มต้นและปลายทาง!

ตัวอย่าง:

1,9 → 1,2,3,4,6,7,8,9 →ผล 8

4,17 → 4,6,7,8,9,10,11,12,13,14,16,17 →ผล 12

50,60 → 60 →ผล 1

-59, -50 →→ผล 0

ผลลัพธ์อาจมีห้า

หมายเลขเริ่มต้นจะเล็กกว่าหมายเลขปลายทางเสมอ ตัวเลขทั้งสองสามารถเป็นลบได้!

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

แก้ไข นี่คือความท้าทายในการเล่นกอล์ฟดังนั้นรหัสที่สั้นที่สุดชนะ


3
@betseq: นั่นคือปิด; แต่อันนี้มีช่วงตัวแปร (และไม่ต้องโมดูโล)
ติตัส

4
ฉันขอแนะนำรหัสที่สั้นที่สุดว่าเป็นเกณฑ์การชนะและแท็ก code-golf (ฉันไม่ได้เห็นว่ามันไม่ใช่!) นอกจากนี้คุณควรจะวางกรณีทดสอบที่มีช่วง 50 หรือ 500 อาจเป็นอันที่มีช่วง -50 และอันที่มีช่วง 0 นั้นเป็นความคิดที่ดี
Jonathan Allan

1
@JonathanAllan: ฉันจะอัปเดตตัวอย่าง
Arasuvel

4
กรณีทดสอบ: 50, 59 -> 0.
Zgarb

14
คุณพูดว่า: "หมายเลขเริ่มต้นจะเล็กกว่าหมายเลขท้ายเสมอ" แต่หนึ่งในตัวอย่างของคุณ (-50, -59) ขัดแย้งกับสิ่งนี้โดยตรง
theonlygusti

คำตอบ:


21

JavaScript (ES6), 36 33 ไบต์

(a)(b)จะเข้ากับไวยากรณ์ currying

a=>F=b=>b<a?0:!/5/.test(b)+F(b-1)

จัดรูปแบบและแสดงความคิดเห็น

a =>                 // outer function: takes 'a' as argument, returns F
  F = b =>           // inner function F: takes 'b' as argument, returns the final result
    b < a ?          // if b is less than a
      0              //   return 0
    :                // else
      !/5/.test(b) + //   add 1 if the decimal representation of b does not contain any '5'
      F(b - 1)       //   and do a recursive call to F with b - 1

กรณีทดสอบ


(โดยปกติแล้วฉันชอบtestมากกว่าexecเมื่อคุณต้องการบูลีนเท่านั้น)
Neil

@ Neil นั่นทำให้รู้สึกมากขึ้นแน่นอน Updated
Arnauld

หมายเหตุ: ฉันไม่สามารถหาคำแนะนำเกี่ยวกับไวยากรณ์การแก้ปัญหา ES6 ได้ดังนั้นฉันจึงเขียนลงไป
Arnauld

5
@TheLethalCoder b<aอยู่ที่นั่นเพื่อหยุดการเรียกซ้ำหลังจากที่นับจำนวนทั้งหมดจากbไปยังaดังนั้นการลบออกก็จะทำให้เกิดการเรียกซ้ำแบบไม่สิ้นสุด
ETHproductions

1
@HristiyanDodov ฟังก์ชั่นด้านนอกที่ไม่มีชื่อใช้aเป็นอาร์กิวเมนต์และส่งกลับFฟังก์ชั่นซึ่งจะใช้เวลาbเป็นอาร์กิวเมนต์และ - ตามที่คุณสังเกตเห็น - จะเรียกว่าซ้ำเพื่อย้ำจากbถึงการaเพิ่มเคาน์เตอร์สำหรับจำนวนเต็มทั้งหมดที่ไม่ได้มี5ทศนิยม การแสดง
Arnauld

17

เยลลี่ , 8 7 ไบต์

-1 ไบต์ขอบคุณเดนนิส (ใช้ข้อเท็จจริงที่ว่าการจัดทำดัชนีเป็นตัวเลขจะถือว่าเป็นจำนวนทศนิยม)

rAw€5¬S

TryItOnline!

อย่างไร?

rAw€5¬S - Main link: from, to    e.g. -51, -44
r       - range(from, to)        e.g. [-51,-50,-49,-48,-47,-46,-45,-44]
 A      - absolute value         e.g. [51,50,49,48,47,46,45,44]
  w€    - first index of... for €ach (0 if not present)
    5   - five                   e.g. [1,1,0,0,0,0,2,0]
     ¬  - logical not            e.g. [0,0,1,1,1,1,0,1]
      S - sum                    e.g. 5

* อะตอมของค่าสัมบูรณ์Aมีความจำเป็นเนื่องจากจำนวนลบที่ส่งไปยังรายการเลขฐานสิบมีรายการติดลบซึ่งจะไม่มีเลย5(ตัวอย่างที่ให้จะนับทั้งแปดแทนที่จะเป็นสอง)


rAw€5¬Sบันทึกเป็นไบต์
Dennis

@ เดนนิสขอบคุณ! คำอธิบายของฉัน "ถือว่าหมายเลขนั้นเป็นรายการทศนิยม" ถูกต้องหรือไม่
Jonathan Allan

2
ค่อนข้างมาก wปลดอาร์กิวเมนต์จำนวนเต็มให้เป็นทศนิยม
Dennis


13

2sable , 6 5 ไบต์

บันทึกเป็นไบต์ขอบคุณAdnan

Ÿ5¢_O

ลองออนไลน์!

คำอธิบาย

 Ÿ      # inclusive range
  5¢    # count 5's in each element of the range
    _   # negate
     O  # sum

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


คุณสามารถลบสิ่ง`ที่มันทำหน้าที่เหมือนกันในอาร์เรย์: p
Adnan

@Adnan: ขอบคุณ! ฉันจะทดสอบ แต่ลืมไปแล้ว)
Emigna

9

Python2, 59 55 52 51 47 43 42 ไบต์

f=lambda a,b:a<=b and-(`5`in`a`)-~f(a+1,b)

โซลูชันแบบเรียกซ้ำ ขอบคุณ@xnor ที่ให้แรงบันดาลใจแก่ฉันในการหาทางออกโดยใช้ตัวดำเนินการเชิงตรรกะ! นอกจากนี้ต้องขอบคุณ@JonathanAllanและ@xnorสำหรับแนวทางฉันและสับไบต์ 43-42!

ความพยายามอื่น ๆ ที่ 43 ไบต์

f=lambda a,b:a<=b and-~-(`5`in`a`)+f(a+1,b)
f=lambda a,b:a<=b and 1-(`5`in`a`)+f(a+1,b)

จะif!`x`.count('5')ทำงานอย่างไร
ติตัส

2
@Titus Python มีnotโอเปอเรเตอร์ที่!ใช้ภาษา C เหมือนกัน แต่ใช้เวลา 3 ไบต์ :(
Yytsi

1
คิดเกี่ยวกับการใช้ตรรกะลัดวงจรด้วยและand or
xnor

1
ใช่เสร็จแล้ว! notตอนนี้คิดว่าเกี่ยวกับการตัดทอนว่า
xnor

1
คุณสนิทจริงๆ! พยายามต่อไป
xnor


6

05AB1E , 8 7 6 ไบต์

บันทึกเป็นไบต์ขอบคุณAdnan

Ÿ5.å_O

ลองออนไลน์!

คำอธิบาย

Ÿ         # inclusive range
 5.å      # map 5 in y for each y in the list
    _     # logical negation 
     O    # sum

05AB1E ยังมี vectorized åซึ่งก็คือคุณสามารถทำได้Ÿ5.å_O6 ไบต์
Adnan

negateความหมาย-nหรือn==0?1:0?
ETHproductions

@ETHproductions: ขออภัยนั่นไม่ชัดเจน ฉันหมายถึงการปฏิเสธเชิงตรรกะดังนั้นn==0?1:0
Emigna

6

Pyth, 9 8 ไบต์

บันทึกเป็นไบต์ด้วย FryAmTheEggman!

lf-\5T}E

คำอธิบาย:

        Q # Input
      }E  # Form an inclusive range starting from another input
          #   order is reversed, but doesn't matter
 f-\5T    # Filter by absence of '5'
l         # Count the number of elements left

ลองออนไลน์!



5

Haskell , 39 ไบต์

s!e=sum[1|x<-[s..e],notElem '5'$show x]

ลองออนไลน์! การใช้งาน:

Prelude> 4 ! 17
12

คำอธิบาย:

             [s..e]                     -- yields the range from s to e inclusive
          x<-[s..e]                     -- for each x in this range
          x<-[s..e],notElem '5'$show x  -- if the char '5' is not in the string representation of x
       [1|x<-[s..e],notElem '5'$show x] -- then add a 1 to the resulting list      
s!e=sum[1|x<-[s..e],notElem '5'$show x] -- take the sum of the list

4

R, 33 ไบต์

f=function(x,y)sum(!grepl(5,x:y))

การใช้งาน:

> f=function(x,y)sum(!grepl(5,x:y))
> f(40,60)
[1] 10
> f(1,9)
[1] 8
> f(4,17)
[1] 12



4

PHP 7.1, 57 55 ไบต์

for([,$a,$b]=$argv;$a<=$b;)$n+=!strstr($a++,53);echo$n;

ทำงานด้วย php -r '<code>' <a> <b>


นี่ไม่ใช่ไวยากรณ์ PHP7.1 ใช่หรือไม่
Aross

@aross: มันคือ แต่ PHP 7.1 นั้นเก่ากว่า 5 ชั่วโมง ( เผยแพร่เมื่อวันที่ 1 ธันวาคม )
Titus

1
แน่นอนฉันเพิ่งถามเพราะฉันเคยระบุรุ่นหากเป็น 7 หรือสูงกว่า นั่นเป็นประเภทของการประชุมสำหรับ Python
aross

1
อนุสัญญาสำหรับ PHP - เท่าที่ฉันได้เห็น - คือการใช้เวอร์ชันล่าสุดเว้นแต่จะระบุไว้เป็นอย่างอื่น
ติตัส

ฉันไม่คิดว่าหลายคนมีรุ่นรองล่าสุด ตัวหารร่วมที่น้อยที่สุดในขณะนี้อาจเป็น 5.5 โดยส่วนตัวฉันใช้ FC 25 (ถือว่าทันสมัยแล้ว) ซึ่งปัจจุบันจำหน่าย PHP 7.0 หากคุณใช้ Windows คุณอาจต้องอัปเดตด้วยตนเอง
aross

4

Mathematica, 46 44 42 ไบต์

ขอบคุณ alephalpha และ DavidC สำหรับการบันทึก 2 ไบต์ต่อครั้ง!

Tr@Boole[FreeQ@5/@IntegerDigits@Range@##]&

ฟังก์ชันที่ไม่มีชื่อจะรับอาร์กิวเมนต์จำนวนเต็มสองรายการและส่งคืนจำนวนเต็ม IntegerDigits@Range@##แปลงตัวเลขทั้งหมดระหว่างอินพุตเป็นรายการของตัวเลข ทดสอบรายการเหล่านั้นที่จะตัดสินใจว่าคนที่ไม่ได้มีการใด ๆFreeQ@5 5จากนั้นBooleแปลงบูลีนเป็นค่าศูนย์และรายการและTrสรุปผล

โซลูชันอื่น ๆ (44 และ 47 ไบต์):

Count[Range@##,x_/;IntegerDigits@x~FreeQ~5]&

IntegerDigits@x~FreeQ~5พิจารณาว่ารายการของตัวเลขเป็นอิสระจาก 5s และCount[Range@##,x_/;...]&นับจำนวนตัวเลขระหว่างอินพุตที่ผ่านการทดสอบนั้นหรือไม่

Tr[Sign[1##&@@IntegerDigits@#-5]^2&/@Range@##]&

1##&@@IntegerDigits@#-5ใช้รายการตัวเลขเป็นตัวเลขลบ 5 จากทั้งหมดและคูณคำตอบด้วยกัน Sign[...]^2จากนั้นแปลงตัวเลขที่ไม่ใช่ศูนย์ทั้งหมดเป็น 1


1
Count[Range@##,x_/;IntegerDigits@x~FreeQ~5]&
DavidC

1
Tr@Boole[FreeQ@5/@IntegerDigits@Range@##]&
alephalpha

3

Ruby, 36 35 ไบต์

->a,b{(a..b).count{|x|!x.to_s[?5]}}

Thx IMP1 สำหรับ -1 ไบต์


1
สิ่งนี้ส่งคืนรายการที่ไม่มีหมายเลขที่มี 5 ไม่ใช่ขนาดของรายการหรือไม่
IMP1

คุณพูดถูกฉันลอก / วางเวอร์ชันผิด
GB

1
นอกจากนี้คุณยังสามารถใช้?5( '5'อักขระ) แทน/5/ ในการค้นหาเพื่อบันทึกไบต์
IMP1

3

Java 7, 80 78 ไบต์

int c(int a,int b){int r=0;for(;a<=b;)r+=(""+a++).contains("5")?0:1;return r;}

Ungolfed:

int c(int a, int b){
  int r = 0;
  for (; a <= b; ) {
    r += ("" + a++).contains("5")
          ? 0
          : 1;
  }
  return r;
}

รหัสทดสอบ:

ลองที่นี่

class M{
  static int c(int a,int b){int r=0;for(;a<=b;)r+=(""+a++).contains("5")?0:1;return r;}

  public static void main(String[] a){
    System.out.println(c(1, 9));
    System.out.println(c(4, 17));
  }
}

เอาท์พุท:

8
12

3

PowerShell, 42 41 ไบต์

param($a,$b)$a..$b|%{$z+=!($_-match5)};$z

เรียกจากบรรทัดคำสั่งเป็น. \ no5s.ps1 1 20


1
คุณสามารถปล่อยพื้นที่เพื่อบันทึกไบต์ ด้วยรูปแบบ regex เชิงตัวเลขอย่างเคร่งครัดคุณไม่จำเป็นต้องมีตัวคั่น (เช่น-replace3หรือ-split1หรือ-notmatch5)
AdmBorkBork

อ่าดีขอบคุณ @AdmBorkBork
mcmurdo

2

Python 2, 61 56 ไบต์

lambda a,b:len([n for n in range(a,b+1) if not"5"in`n`])

-5 ไบต์ขอบคุณ tukkaaX


อย่าท้อแท้! การมีความสนุกสนานและท้าทายตัวเองคือสิ่งที่สำคัญ คุณสามารถลบช่องว่างที่สองnot "5" in:) นอกจากนี้ถ้าคุณกำลังใช้ Python2 คุณสามารถล้อมรอบxด้วย `` str(x)คำพูดแทนการทำ
Yytsi

@ TuukkaX ขอบคุณ! ยังลบช่องว่างระหว่างในและ `
x`

[]คุณสามารถลบ ifนอกจากนี้คุณยังไม่จำเป็นต้องเว้นวรรคก่อน
Dennis

@Dennis ฉันลองแล้ว แต่ก็บ่นว่า "วัตถุประเภท 'กำเนิด' ไม่มี len ()"
Yytsi

@ TuukkaX ถูกต้อง lambda a,b:sum(not"5"in`n`for n in range(a,b+1))ทำงานได้แม้ว่า tio.run/nexus/…
Dennis

2

Swift 52 ไบต์

($0...$1).filter { !String($0).contains("5") }.count

เนื่องจากความท้าทายของคุณคือความท้าทาย codegolf คุณควรรวมจำนวนไบต์ นอกจากนี้ใน codegolf (อย่างน้อยที่นี่) มันเป็นข้อกำหนดที่โปรแกรมทั้งหมดจะต้องแข่งขันกัน (เช่นชื่อฟังก์ชั่นของคุณอาจเป็นเพียงตัวอักษรเดียวฟังก์ชั่นที่แท้จริงของคุณอาจลดลงเป็นบรรทัดเดียว) ฉันไม่รู้จัก Swift คุณอาจต้องแก้ไขสิ่งต่าง ๆ ให้ฉัน
clismique

2

แบตช์ 95 ไบต์

@set/an=0,i=%1
:g
@if "%i%"=="%i:5=%" set/an+=1
@set/ai+=1
@if %i% leq %2 goto g
@echo %n%

การวนซ้ำด้วยตนเองบันทึกไบต์บางตัวเนื่องจากฉันต้องการตัวนับการวนซ้ำในตัวแปรอย่างไรก็ตาม


2

PHP, 56 ไบต์

for($i=$argv[1];$i<=$argv[2];)trim(5,$i++)&&$x++;echo$x;

ทำงานแบบนี้:

php -r 'for($i=$argv[1];$i<=$argv[2];)trim(5,$i++)&&$x++;echo$x;' 1 9 2>/dev/null;echo
> 8

รุ่นสำหรับ PHP 7.1 จะเป็น 53 ไบต์ (เครดิตถึง Titus):

for([,$i,$e]=$argv;$i<=$e;)trim(5,$i++)&&$x++;echo$x;

คำอธิบาย

for(
  $i=$argv[1];          # Set iterator to first input.
  $i<=$argv[2];         # Loop until second input is reached.
)
  trim(5,$i++) && $x++; # Trim string "5" with the characters in the
                        # current number; results in empty string when
                        # `5` is present in the number. If that is not
                        # the case, increment `$x`

echo$x;                 # Output `$x`

อ่าฉันลืมtrimพารามิเตอร์ที่สองอีกครั้ง
ติตัส

2

CJam "วิธีแก้ปัญหาคณิตศาสตร์ง่าย ๆ ", 60

{{Ab5+_,\_5#)<\9e]);_4f>.m9b}%}:F;q~_:z$\:*0>{((+F:-}{F:+)}?

ลองออนไลน์

มันต้องใช้ตัวเลขในลำดับใด ๆ ในอาเรย์

คำอธิบาย:

ปัญหาหลักอย่างหนึ่งคือการคำนวณ f (n) = จำนวนของตัวเลขที่ไม่ใช่ 5 จาก 1 ถึง n (รวม) สำหรับบวกใด ๆ และคำตอบคือ: ใช้ตัวเลขทศนิยมของ n แทนตัวเลขทั้งหมดหลังจาก 5 แรก (ถ้ามี) ด้วย 9 แล้วแทนที่ตัวเลขทั้งหมด 5..9 ด้วย 4..8 (ลดลง) และแปลงจากฐาน 9 เช่น 1752 → 1759 → 1648 → 1 * 9 ^ 3 + 6 * 9 ^ 2 + 4 * 9 + 8 = 1259 โดยทั่วไปตำแหน่งหลักแต่ละตำแหน่งมีค่าที่ยอมรับได้ 9 ค่าและ 5xxxx เทียบเท่ากับ 49999 เนื่องจากไม่มีตัวเลขที่ถูกต้องระหว่างกัน

เมื่อเราแก้ไขสิ่งนี้แล้วเรามีสองสามกรณี: หากจำนวนอินพุต (พูด a และ b, a <b) เป็นบวก (อย่างเคร่งครัด) ผลลัพธ์ก็คือ f (b) -f (a-1) หากพวกมันเป็นลบเราก็สามารถหาค่าสัมบูรณ์แล้วเรียงลำดับใหม่และใช้การคำนวณแบบเดียวกัน และถ้า a <= 0 <= b ผลที่ได้คือ f (-a) + f (b) +1

โปรแกรมแรกใช้ฟังก์ชั่น F ตามที่อธิบายไว้ข้างต้น (แต่ใช้กับแต่ละหมายเลขในอาเรย์) จากนั้นอ่านอินพุตแปลงตัวเลขเป็นค่าสัมบูรณ์และทำการจัดเรียงใหม่และใช้หนึ่งใน 2 การคำนวณข้างต้นขึ้นอยู่กับ * b> 0 เริ่มแรก


ไม่ใช่วิธีการ "บริสุทธิ์" แต่เป็นวิธีที่ดี ที่นี่รับ +1 :)
Matthew Roh

@ MatthewRoh ขอบคุณ แต่สิ่งที่คุณหมายถึงไม่บริสุทธิ์? มันเป็นวิธีแก้ปัญหาที่คำนวณการคำนวณทางคณิตศาสตร์อย่างเป็นธรรมกับหมายเลขอินพุตโดยไม่ต้องวนซ้ำในช่วง คุณคาดหวังอะไรอีก
aditsu

2

Python 2 , 54 ไบต์

i,j=input();k=0
while i<=j:k+=not"5"in`i`;i+=1
print k

ลองออนไลน์!

ไม่ใช่คำตอบที่สั้นที่สุดของ Python ใช้อัลกอริธึมที่เหมือนกัน แต่เป็นวิธีที่แตกต่างในการนำไปใช้กับ while loop และไม่ใช่ฟังก์ชัน lambda


มันเป็นโปรแกรมและไม่ใช่ฟังก์ชั่นและจะใช้ในขณะที่แทนที่จะเป็น อะไรไม่แตกต่างกัน? ตกลงมันยังคงมองหาสตริง "5" ในการป้อนข้อมูลที่เพิ่มขึ้นตกลง มีวิธีที่ดีกว่า?
ElPedro

นั่นคือสิ่งที่มันเป็นและนั่นคือเหตุผลที่มันเป็นไปได้ ขออภัยอาจทำให้ความคิดเห็นของฉันแตกต่างออกไป
ElPedro

อัลกอริทึมเดียวกันวิธีที่แตกต่างของการใช้งาน ไม่มีปัญหากับความคิดเห็นของคุณ นั่นเป็นคำที่ดีขึ้นหรือไม่
ElPedro

ใช่แล้ว :) ฉันจะลบความคิดเห็นเหล่านี้เพื่อทำให้ส่วนความเห็นดูสะอาด
Yytsi

1

Java 7, 77 ไบต์

นี่คือการปรับปรุงของKevins Answerแต่เนื่องจากฉันยังไม่มีชื่อเสียงที่จะแสดงความคิดเห็นคำตอบใหม่นี้จะต้องทำ

ดังนั้นสิ่งที่ฉันทำคือ:

  • แทนที่indexOfข้อความสั่งด้วยcontains(-1 ไบต์)
  • ย้ายส่วนที่เพิ่มขึ้นของ for-loop ไปยังคำสั่งเงื่อนไข (-2 ไบต์)

for-loop ( 77 ไบต์ ):

int c(int a,int b){int r=1;for(;a++<b;)r+=(""+a).contains("5")?0:1;return r;}

แบบเรียกซ้ำ ( 79 ไบต์ ):

int d(int r,int a,int b){r+=(""+a).contains("5")?0:1;return a!=b?d(r,a+1,b):r;}

เอาท์พุท:

8
12

8
12

ทดสอบที่นี่ !


ยินดีต้อนรับสู่ PPCG! การค้นพบที่ดีในคำตอบที่เล่นกอล์ฟค่อนข้างดีอยู่แล้ว ผมไม่ทราบว่าเกี่ยวกับ Java ที่มาก แต่ไม่ควร(""+a).contains("5")?0:1จะ replacable โดย!(""+a).contains("5")?
Christoph

1
@Christoph เศร้าไม่เพราะใน Java บูลีนจริงๆเป็นเพียงบูลีน ดังนั้นการดำเนินการแบบไตรภาคเป็นวิธีเดียวที่จะไป
Tobias Meister

หืมนั่นเศร้า เกี่ยวกับ(""+a).contains("5")||r++อะไร
Christoph

1
@Christoph ที่จะไม่ทำงานอย่างใดอย่างหนึ่งเพราะคุณไม่สามารถมีการแสดงออกแบบบูลด้วยตัวเอง ฉันพยายามทำให้มันทำงานในที่อื่น ๆ (เช่นการประกาศแบบ for-loop) แต่ไม่ประสบความสำเร็จมากนัก Nice idea tho;)
Tobias Meister

1

C #, 67 ไบต์

a=>b=>{int c=0;for(;a<=b;)c+=(a+++"").Contains("5")?0:1;return c;};

ฉันหวังว่าจะใช้for(int c=0;...)แต่แล้วก็ล้มเหลวในการรวบรวมเพราะผลตอบแทนอยู่นอกขอบเขตสำหรับc
TheLethalCoder

1

JavaScript (ES6), 58 56 49 ไบต์

let f =

(s,e)=>{for(c=0;s<=e;)c+=!/5/.test(s++);return c}

console.log(f(1, 9));
console.log(f(4, 17));
console.log(f(-9, -1));

แข็งแรงเล่นกอล์ฟ 7 ไบต์ขอบคุณที่ETHproductions


1
คุณสามารถใช้c+=!/5/.test(s++)เพื่อบันทึกไม่กี่ไบต์ :-)
ETHproductions

ขอบคุณมาก! ฉันต้องลบสนามกอล์ฟของฉัน ฉันภูมิใจในตัวพวกเขามาก :(
Hristiyan Dodov

ฉันคิดว่าคุณสามารถใช้การแกงคำว่า `s => e =>`
TheLethalCoder

คำตอบด้านบนใช้ความดีความชอบไวยากรณ์ ฉันจะไม่แก้ไขของฉันเพราะมันจะใกล้เคียงกัน ขอบคุณสำหรับการชี้ให้เห็นว่าแม้ว่า!
Hristiyan Dodov

1

MATL 10 ไบต์

&:!V53-!As

ลองออนไลน์!

คำอธิบาย

        % Implicitly grab two input arguments
&:      % Create an array from [input1....input2]
!V      % Convert to a string where each number is it's own row
53-     % Subtract ASCII '5' from each character.
!A      % Detect which rows have no false values (no 5's). Returns a logical array
s       % Sum the logical array to get the # numbers without 5's
        % Implicitly display the result

1

C #, 77 ไบต์

(n,m)=>{var g=0;for(var i=n;i<m+1;i++)g+=(i+"").Contains("5")?0:1;return g;};

การโทรแลมบ์ดานิรนาม

ใช้n(หมายเลขแรก) และm(หมายเลขสุดท้าย) เป็นอินพุตจากนั้นตรวจสอบผ่านการบรรจุสตริง ( "".Contains(""))


ฉันไม่ได้เป็น downvoting เดียว แต่ modulo 5 ไม่ใช่ทางออกที่ถูกต้องสำหรับความท้าทายที่ OP กำหนด ควรแยกสิ่งที่มีตัวเลข5เป็นตัวเลขดังนั้น10(ซึ่งคำตอบของคุณจะไม่นับ) ควรนับ
Kevin Cruijssen

@KevinCruijssen แก้ไขแล้ว
devRicher

นี้ไม่ได้รวบรวมgจะต้องมีการเริ่มต้นเมื่อมีการระบุไว้ตามที่มันเป็นชื่อที่varคุณต้องการvar g="";และคุณสามารถใช้n=>m=>
แกงเผ็ด

นอกจากนี้สิ่งนี้ยังส่งผลให้รายการไม่นับ
TheLethalCoder

1
@KevinCruijssen ด้วยการแก้ไขของคุณนี่คือคำตอบของฉันเป็นหลัก ...
TheLethalCoder

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