ย่อหน้าผนวกลำดับ


14

งาน

ภาคผนวกภาคผนวก - ลำดับถูกกำหนดซ้ำแบบนี้

  • a (1) = 1
  • a (n) = a (n-1) .n หาก n เป็นเลขคู่
  • a (n) = na (n-1) ถ้า n เป็นเลขคี่

ที่ไหน . แทนค่าการต่อข้อมูลจำนวนเต็ม

ดังนั้นเงื่อนไขแรกไม่กี่: 1,12,312,3124,53124,531246,7531246,...นี่คือA053064

งานของคุณจะได้รับจำนวนเต็มA> 0จะกลับnเช่นว่าn TH องค์ประกอบในย่อหน้าที่ผนวกลำดับเท่ากับและถ้าไม่เช่นnมีอยู่ผลตอบแทน 0, จำนวนลบหรือข้อผิดพลาดออก ฯลฯ

กฎระเบียบ

  • การป้อนข้อมูลสามารถนำมาเป็นจำนวนเต็มสตริงรายการตัวละคร / ตัวเลขเป็นต้น
  • สามารถพิมพ์เอาต์พุตไปที่ STDOUT หรือส่งคืน (จำนวนเต็มสตริงและอื่น ๆ ได้)
  • กับการป้อนข้อมูลที่ไม่ถูกต้องและในกรณีที่ไม่มีเช่นnมีอยู่โปรแกรมของคุณอาจจะทำอะไร แต่กลับเป็นจำนวนเต็มบวก (เช่น. ห่วงตลอด return 0 ฯลฯ )
  • คุณอาจเลือกที่จะใช้การจัดทำดัชนี 0 แต่ผลลัพธ์ในกรณีที่ไม่มีnไม่สามารถเป็น 0

กรณีทดสอบ

1 -> 1
12 -> 2
21 -> 0
123 -> 0
312 -> 3
213 -> 0
211917151311975312468101214161820 -> 21
2119171513119753102468101214161820 -> 0
333129272523211917151311975312468101214161820222426283031 -> 0
999795939189878583817977757371696765636159575553514947454341393735333129272523211917151311975312468101214161820222426283032343638404244464850525456586062646668707274767880828486889092949698100 -> 100

เป็นทางการมากขึ้น: a(n-1)*(int(log(n))+1)+nและn*(int(log(n))+1)+a(n-1)?
Mr. Xcoder

1
@ Mr.Xcoder ฉันจะเรียกว่าเป็นทางการน้อย : P
โพสต์ Rock Garf Hunter

@JanathanAllan นั่นมีอยู่แล้วในคำถามประมาณ 10 นาที
Mr. Xcoder

2
ฉันแนะนำให้อนุญาตข้อผิดพลาดสำหรับอินพุตที่ไม่ถูกต้อง
user41805

ฉันขอแนะนำให้อนุญาตพฤติกรรมที่ไม่ได้กำหนดสำหรับอินพุตที่ไม่ถูกต้อง
Mr. Xcoder

คำตอบ:


6

JavaScript (ES6), 40 ไบต์

รับอินพุตเป็นสตริง ส่งข้อผิดพลาดการสอบถามซ้ำหากไม่พบดัชนี

f=(n,s=k='1')=>n==s?k:f(n,++k&1?k+s:s+k)

การสาธิต


ฉันคิดว่าคุณสามารถบันทึกไบต์ด้วยวิธีนี้: f=(n,s=k='1')=>n-s?f(n,++k&1?k+s:s+k):k
Rick Hitchcock

@RickHitchcock แต่น่าเสียดายที่จะบังคับให้มีการเปรียบเทียบจำนวนและแนะนำผลบวกปลอมในอินพุตที่มีขนาดใหญ่ที่เกิดจากการสูญเสียความแม่นยำ
Arnauld

Gotcha มันใช้งานได้ในกรณีทดสอบ แต่ไม่แน่ใจว่ามันจะจัดการกับสถานการณ์อื่นได้อย่างไร
Rick Hitchcock

6

C # (. NET Core) , 83, 80, 60 59 ไบต์

n=>{int i=0;for(var t="";t!=n;)t=++i%2<1?t+i:i+t;return i;}

ลองออนไลน์!

นำอินพุตเป็นสตริงไปยังฟังก์ชัน lambda 1 การจัดทำดัชนี ส่งคืนดัชนีของค่าสำหรับความจริงหรือลูปไม่สิ้นสุดสำหรับ "falsey"


6

Python 2 , 63 ไบต์

-1 ขอบคุณไบต์@EriktheOutgolfer

f=lambda x,i='1',j=2:i!=`x`and f(x,[i+`j`,`j`+i][j%2],j+1)or~-j

ลองออนไลน์!

Python 2 , 64 ไบต์

-18 ไบต์ขอบคุณ@officialaimmเพราะฉันไม่ได้สังเกตเห็นว่าได้รับอนุญาตให้แก้ไขข้อผิดพลาด!

x,i,j=input(),'1',1
while i!=x:j+=1;i=[i+`j`,`j`+i][j%2]
print j

ลองออนไลน์!

Python 2 , 82 ไบต์ (ไม่วนซ้ำตลอดไป)

อันนี้ส่งคืน0สำหรับอินพุตที่ไม่ถูกต้อง

def f(n,t="",i=1):
 while len(t)<len(n):t=[t+`i`,`i`+t][i%2];i+=1
 print(n==t)*~-i

ลองออนไลน์!



@officialaimm ขอบคุณมาก! ฉันไม่ได้สังเกตเห็นว่ามีการอนุญาตให้ทำผิดพลาด / วนซ้ำตลอดไป
Mr. Xcoder

บันทึกไบต์ด้วยแลมบ์ดา:f=lambda x,i='1',j=2:i!=`x`and f(x,[i+`j`,`j`+i][j%2],j+1)or~-j
Erik the Outgolfer

@EriktheOutgolfer รอสักครู่มันจะเกิดข้อผิดพลาดในการเรียกซ้ำสำหรับทุกสิ่งแม้ว่าฉันจะตั้งค่าไว้sys.setrecursionlimit()ก็ตาม คุณให้ทีโอได้ไหม
Mr. Xcoder

@ Mr.Xcoder มันทำให้เกิดข้อผิดพลาดx=1หรือไม่? หรือx=12? ฉันคิดว่ามันแค่โยนความผิดพลาดไปอย่างน้อยก็x=151311975312468101214อย่างนั้น
Erik the Outgolfer


3

05AB1E , 14 ไบต์

$vDNÌNFs}«})Ik

ลองออนไลน์! หรือเป็นชุดทดสอบ

คำอธิบาย

0 การจัดทำดัชนี
ส่งคืน-1ถ้าอินพุตไม่อยู่ในลำดับ

$                 # push 1 and input
 v                # for each y,N (element, index) in input do:
  D               # duplicate top of stack
   NÌ             # push N+2
     NF }         # N times do:
       s          # swap the top 2 elements on the stack
         «        # concatenate the top 2 elements on the stack
          })      # end loop and wrap in a list
            Ik    # get the index of the input in this list

ฮ่าฮ่านี่เป็นวิธีแก้ปัญหาของฉันด้วยการgลบและสิ่งที่ผนวก / ผนวกสั้นลง ฉันจะลบคำตอบของฉัน
Okx

@Okx: โอ้ใช่ฉันเห็นคุณเล่นกอล์ฟของคุณลงไปเกือบจะเพียงไม่กี่นาทีหลังจากโพสต์ของฉัน จิตใจที่ยอดเยี่ยม;)
Emigna

2

R , 73 ไบต์

p=paste0;n=scan(,'');l='';while(l!=n){F=F+1;l="if"(F%%2,p(F,l),p(l,F))};F

อ่านจาก stdin และส่งคืนค่าของดัชนี (พิมพ์โดยนัย) ไม่มีที่สิ้นสุดลูปเมื่อค่าไม่ได้อยู่ในลำดับ Fเป็นค่าเริ่มต้นFALSEซึ่งจะถูกโยน0เมื่อใช้ในการคำนวณ

ลองออนไลน์!


1

Mathematica, 135 ไบต์

s=t={};x=1;While[x<5!,{s~AppendTo~#&,s~PrependTo~#&}[[x~Mod~2+1]]@x;AppendTo[t,FromDigits@Flatten[IntegerDigits/@s]];x++];t~Position~#&

1

เยลลี่ ,  19 18  15 ไบต์

+ḂḶṚm2;RḤ$ṁµ€Vi

ลิงก์ monadic ที่รับและส่งคืนจำนวนเต็ม

ลองออนไลน์! (ช้ามาก - ใช้เวลา ~ 50s บน TIO เพียงเพื่อยืนยันว่า3124อยู่ที่ดัชนี4)

สำหรับรุ่นที่เร็วขึ้นให้ใช้18 byter ก่อนหน้า (ตรวจสอบเฉพาะความยาวของอินพุตซึ่งเพียงพอ)

อย่างไร?

+ḂḶṚm2;RḤ$ṁµ€Vi - Link: number, v
           µ€   - perform the monadic link to the left for €ach k in [1,2,3,...v]
                -                 (v can be big, lots of k values makes it slow!)
 Ḃ              -   modulo k by 2  = 1 if odd 0 if even
+               -   add to k = k+isOdd(k)
  Ḷ             -   lowered range = [0,1,2,...,k+isOdd(k)]
   Ṛ            -   reverse = [k+isOdd(k),...,2,1,0])
    m2          -   modulo slice by 2 = [k+isOdd(k),k+isOdd(k)-2,...,3,1]
         $      - last two links as a monad:
       R        -   range(k) = [1,2,3,...,k]
        Ḥ       -   double = [2,4,6,...,2k]
     ;          - concatenate = [k+isOdd(k),k+isOdd(k)-2,...,3,1,2,4,6,...,2k]
         ṁ      - mould like range(k) = [k+isOdd(k),k+isOdd(k)-2,...,3,1,2,4,6,...,k-isOdd(k)]
                -   (this is a list of the integers to be concatenated for index k)
             V  - evaluate as Jelly code (yields a list of the concatenated integers)
              i - first index of v in that (or 0 if not found)

ใช้เวลาในการคำนวณ211917151311975312468101214161820นานเท่าใด
Okx

นานนาน: p
Jonathan Allan

ใช่ แต่นานเท่าไหร่
Okx

ดูเหมือนว่ามันคือคำสั่งv กำลังสองโดยที่vคือจำนวนเต็มอินพุท
Jonathan Allan

@JonathanAllan ในทางเทคนิคคุณเรียกว่า : p
Erik the Outgolfer

1

Swift 4 , 92 bytes

การวนซ้ำนี้ไม่สิ้นสุดสำหรับกรณีที่ไม่ถูกต้องดังนั้นฉันจึงไม่รวมไว้ในลิงก์ทดสอบ

func f(x:String){var i="1",j=1;while i != x{j+=1;i=[i+String(j),String(j)+i][j%2]};print(j)}

ชุดทดสอบ

มันเป็นเรื่องตลกอีกต่อไปด้วยการปิด:

var f:(String)->Int={var i="1",j=1;while i != $0{j+=1;i=[i+String(j),String(j)+i][j%2]};return j}

ชุดทดสอบ




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