กระโดดตัวเลข


12

หมายเลขกระโดดถูกกำหนดให้เป็นจำนวนบวก n ซึ่งทุกคู่ของตัวเลขทศนิยมต่อเนื่องที่แตกต่างกัน 1 นอกจากนี้ตัวเลขหลักเดียวทั้งหมดจะถือว่าเป็นตัวเลขการกระโดด เช่น. 3, 45676, 212 เป็นตัวเลขกระโดด แต่ 414 และ 13 ไม่ใช่ ความแตกต่างระหว่าง 9 และ 0 ไม่ถือว่าเป็น 1

ความท้าทาย สร้างโปรแกรมที่แสดงผลลัพธ์อย่างใดอย่างหนึ่งต่อไปนี้:

  • รับnเอาท์พุทnตัวเลขกระโดดครั้งแรก
  • รับnเอาท์พุทคำที่nthของลำดับ

บันทึก

  • อนุญาตให้ใช้รูปแบบ I / O ใด ๆ ที่ถูกต้อง
  • อนุญาต 1 ดัชนีหรือ 0 ดัชนี (โปรดระบุ)

นี่คือตัวเลขกระโดด:

1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 21, 23, 32, 34, 43, 45, 54, 56, 65, 67, 76, 78, 87, 89, 98, 101, 121, 123, 210, 212, 232, 234, 321, 323, 343, 345, 432, 434, 454, 456, 543, 545, 565, 567, 654, 656, 676, 678, 765, 767, 787, 789, 876, ...

นี่คือA033075


นี่คือดัชนี 0 หรือ 1 หรือไม่
Taylor Scott

1
@TaylorScott ลำดับประกอบด้วยตัวเลขที่เป็นบวกเท่านั้น หากคุณหมายถึงอินพุตnก็ขึ้นอยู่กับคุณ
Luis felipe De jesus Munoz

ฉันคาดเดา "อนุญาตรูปแบบ I / O ใด ๆ ที่ถูกต้อง" รวมเอาท์พุทตัวเลขเป็นรายการเลขทศนิยม แต่ต้องการยืนยัน - หรือไม่
Jonathan Allan

ใช่ @JonathanAllan
Luis felipe De jesus Munoz

คำตอบ:



6

เยลลี่ 8 ไบต์

1DI*`ƑƊ#

โปรแกรมเต็มรูปแบบที่รับจำนวนเต็มnจาก STDIN ซึ่งพิมพ์รายการของnตัวเลขการกระโดดครั้งแรกที่เป็นค่าบวก

ลองออนไลน์!

อย่างไร?

ความแตกต่างที่เพิ่มขึ้นที่ยอมรับได้ระหว่างตัวเลขคือ1และ-1ในขณะที่คนอื่น ๆ[-9,-2]+[2,9]ไม่ใช่ บรรทัดนี้ขึ้นกับจำนวนเต็มซึ่งไม่เปลี่ยนแปลงเมื่อยกให้กับตัวเอง ie xx=xตั้งแต่:

00=1
11=1
22=4
-1-1=-1
-2-2=-14

1DI*`ƑƊ# - Main Link: no arguments (accepts a line of input from STDIN)
       # - count up keeping the first (input) n matches...
1        - ...start with n equal to: 1
      Ɗ  - ...match function: last three links as a monad:  e.g. 245       777      7656
 D       -   convert to a list of decimal digits                 [2,4,5]   [7,7,7]  [7,6,5,6]
  I      -   incremental differences                             [2,1]     [0,0]    [-1,-1,1]
     Ƒ   -   invariant under?:
    `    -     using left argument as both inputs of:
   *     -       exponentiation (vectorises)                     [4,1]     [1,1]    [-1,-1,1]
         -                                            --so we:   discard   discard  keep
         - implicitly print the list of collected values of n

6

05AB1E (ดั้งเดิม) 5 ไบต์

อินพุตถูกทำดัชนี 1 ดัชนี

รหัส:

µN¥ÄP

ใช้การเข้ารหัส05AB1E ลองออนไลน์!


คำอธิบาย

µ          # Get the nth number, starting from 0, such that...
   Ä       #   The absolute values
 N¥        #   Of the delta's of N
    P      #   Are all 1 (product function, basically acts as a reduce by AND)

เครื่องมือที่เหมาะสมสำหรับงาน
lirtosiast

5

Python 2 , 79 75 ไบต์

-4 ไบต์โดย xnor

f=lambda n,i=1:n and-~f(n-g(i),i+1)
g=lambda i:i<10or i%100%11%9==g(i/10)>0

ลองออนไลน์!

ที่ได้มาจากChas บราวน์ 's คำตอบ ฟังก์ชันตัวช่วยg(i)จะส่งคืนว่าiเป็นหมายเลขกระโดดหรือไม่ Iff ตัวเลขสองหลักสุดท้ายของตัวเลขnมีความแตกต่างแน่นอน 1 จากนั้นn%100%11จะเป็น 1 หรือ 10 ดังนั้นn%100%11%9จะเป็น 1


%11เคล็ดลับที่ดีกับ คุณสามารถทำได้f=lambda n,i=1:n and-~f(n-g(i),i+1)หากคุณเปลี่ยนเป็นการจัดทำดัชนีหนึ่งรายการ
xnor

4

APL (Dyalog Unicode) , 36 ไบต์SBCS

1 การจัดทำดัชนี ขอบคุณ dzaima สำหรับความช่วยเหลือในการตีกอล์ฟนี้

แก้ไข: -15 ไบต์จาก ngn

1+⍣{∧/1=|2-/⍎¨⍕⍺}⍣⎕⊢0

ลองออนไลน์!

คำอธิบาย

เรามีf⍣g⍣hที่ไหนที่เป็นผู้ประกอบการ, APL (f⍣g)⍣hแปลนี้ (ตรงกันข้ามกับฟังก์ชั่นที่2×3+1มีการแปล2×(3+1))

1+⍣{...}⍣⎕⊢0  This is equivalent to 
               "do {check} we find the n-th integer that fulfils {check}"

1+⍣{...}   0  Start with 0 and keep adding 1s until the dfn 
               (our jumping number check in {}) returns true.
        ⍣⎕    We take input n (⎕) and repeat (⍣) the above n times 
               to get the n-th jumping number.

{∧/1=|2-/⍎¨⍕⍺}  The dfn that checks for jumping numbers.

         ⍎¨⍕⍺   We take the base-10 digits of our left argument
                 by evaluating each character of the string representation of ⍺.
     |2-/        Then we take the absolute value of the pairwise differences of the digits
 ∧/1=            and check if all of the differences are equal to 1.

10⊥⍣¯1⊢⍺->⍎¨⍕⍺
ngn

มันสั้นกว่ามากเมื่อเทียบกับการเรียกซ้ำ: {1+⍣{∧/1=|2-/⍎¨⍕⍺}⍣⍵⊢0}หรือ1+⍣{∧/1=|2-/⍎¨⍕⍺}⍣⎕⊢0
ngn

"⍣เป็นตัวถูกดำเนินการ" - เป็น "โอเปอเรเตอร์" (ฉันผิดพลาดในการแชทและแก้ไขมัน แต่ดูเหมือนว่าคุณจะได้รับเวอร์ชันเริ่มต้นขออภัย)
ngn


3

Japt, 14 ไบต์

เอาต์พุตnเทอมแรกที่1 ซึ่งจัดทำดัชนี

_ì äa dÉ ªU´}f

ลองมัน

(ฉันรู้ฉันรู้ว่าฉันควรจะหยุดพักแต่ฉันถอนตัวจากการเล่นกอล์ฟ!)


ฮ่าฮ่าอาจเรียนรู้ภาษากอล์ฟใหม่เพื่อรักษาอาการถอนเงินของคุณ : P
Quintec

3

Python 2 , 88 87 ไบต์

f=lambda n,i=2:n and f(n-g(i),i+1)or~-i
g=lambda i:i<10or abs(i/10%10-i%10)==1==g(i/10)

ลองออนไลน์!

ส่งคืนตัวเลขการกระโดด 0 ดัชนี (เช่น f (0) => 1, ฯลฯ )


@lirtosiast: ไม่เป็นไรโปรดบริจาคคำตอบของคุณเพื่อการกุศลที่คุณชื่นชอบ :) มันแตกต่างกันพอสมควรที่จะได้รับการตอบกลับที่แยกจากกัน (เช่นเดียวกับการใช้ภาษาที่เหมาะสม)
Chas Brown

3

Haskell , 69 ไบต์

  • ขอบคุณJoseph Sible ที่บังคับใช้กฎการท้าทายและบันทึกสามไบต์
  • ที่บันทึกไว้สองไบต์ขอบคุณที่Nimi
(filter(all((==1).abs).(zipWith(-)<*>tail).map fromEnum.show)[1..]!!)

ลองออนไลน์!


1
ดูเหมือนว่าจะตอบคำถามว่า "นี่เป็นหมายเลขกระโดดหรือไม่" สำหรับหมายเลขอินพุตที่กำหนดซึ่งไม่ใช่สิ่งที่ท้าทาย
Joseph Sible-Reinstate Monica

@JosephSible คุณถูกต้อง ขอบคุณที่สังเกต
Jonathan Frech

นอกจากนี้ตอนนี้ที่ได้รับการแก้ไขคุณสามารถทำให้g3 ไบต์สั้นลงโดยเขียนใหม่ให้เป็นแบบไร้จุดแล้วใช้<*>:g=all((==1).abs).(zipWith(-)<*>tail).map(read.pure).show
Joseph Sible-Reinstate Monica

@JosephSible ขอบคุณ
Jonathan Frech

@nimi เรียบร้อยแล้ว ขอบคุณ.
Jonathan Frech




1

Python 3 , 122 121 ไบต์

g=lambda s:len(s)==1or 1==abs(ord(s[0])-ord(s[1]))and g(s[1:])
def f(n,i=1):
	while n:
		if g(str(i)):n-=1;yield i
		i+=1

ลองออนไลน์!

-1 ไบต์โดยเปลี่ยนfจากการพิมพ์เป็นฟังก์ชันตัวสร้าง

gเป็นฟังก์ชั่นผู้ช่วยซ้ำซึ่งกำหนดว่าสตริงsเป็น "สตริงกระโดด" (ใช้งานได้เนื่องจากรหัสอักขระสำหรับ 0 ถึง 9 อยู่ในลำดับและต่อเนื่องกัน)

fเป็นฟังก์ชั่นเครื่องกำเนิดไฟฟ้าที่รับnและให้ผลก่อนnตัวเลขกระโดด


1

R , 85 ไบต์

i=scan();j=0;while(i)if((j=j+1)<10|all(abs(diff(j%/%10^(0:log10(j))%%10))==1))i=i-1;j

ลองออนไลน์!

สงสัยว่านี่สามารถเล่นกอล์ฟได้มากกว่านี้ อ่านหมายเลขโดยใช้scan()และส่งออกหมายเลขการกระโดดที่เหมาะสม





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