ตัวเลขที่ปรากฏ


12

การป้อนข้อมูล:

รายการจำนวนเต็ม (ซึ่งจะไม่มีวันเป็นศูนย์)

เอาท์พุท:

รายการขนาดเดียวกันที่มีจำนวนขึ้นอยู่กับสิ่งต่อไปนี้:

  • หากรายการปัจจุบันเป็นลบ: ดูรายการทั้งหมดก่อนรายการนี้และนับจำนวนหลักที่เกิดขึ้นในตัวเลขอื่น ๆ
  • หากรายการปัจจุบันเป็นบวกแทน: ดูรายการทั้งหมดหลังรายการนี้และนับจำนวนหลักที่เกิดขึ้นในตัวเลขอื่น ๆ

มีการบิดหนึ่งครั้ง: หากขนาดของรายการเป็นจำนวนคู่เราจะนับทุก ๆ หมายเลขเพียงครั้งเดียว (แม้ว่าจะตรงกับตัวเลขหลายหลัก) และถ้าขนาดเป็นเลขคี่เราจะนับจำนวนตัวเลขทุกหลักสำหรับรายการปัจจุบันแต่ละรายการ (ซ้ำกัน ตัวเลขจะถูกนับหลายครั้ง)

ลองยกตัวอย่างเพื่ออธิบายให้ฟังหน่อย:

ตัวอย่างที่มีรายการคู่:

Input:  [4, 10, 42, -10, -942, 8374, 728, -200]
Output: [3, 2,  4,  1,   2,    1,    1,   5   ]

ขนาดของรายการเป็นเลขคู่ดังนั้นเราจะนับเฉพาะตัวเลขแต่ละครั้งเท่านั้น

  • 4มันเป็นแง่บวกดังนั้นเราจึงตั้งตารอ มีสามตัวเลขที่มีหลักมี4( 42, -942, 8374) 3ดังนั้นเราจึงเริ่มต้นด้วย
  • 10มันเป็นแง่บวกดังนั้นเราจึงตั้งตารอ มีตัวเลขสองตัวที่มีทั้งตัวเลข1และ / หรือ0( -10, -200) 2ดังนั้นการส่งออกที่สองคือ
  • 42: เป็นบวกอีกครั้งดังนั้นส่งต่อ มีตัวเลขสี่ตัวที่มีทั้งหลักอยู่4และ / หรือ2( -942, 8374, 728, -200) 4ดังนั้นการส่งออกที่สามคือ
  • -10: ครั้งนี้มันเป็นเชิงลบดังนั้นเราจึงมองย้อนกลับไป มีเพียงหมายเลขเดียวเท่านั้นที่มีตัวเลข1และ / หรือ0(เราไม่สนใจเครื่องหมายลบ) ( 10) 1ดังนั้นการส่งออกที่สี่คือ
  • เป็นต้น

ตัวอย่างที่มีรายการแปลก ๆ :

Input:  [382, -82, -8, 381, 228, 28, 100, -28, -2]
Output: [13,  2,   2,  4,   8,   3,  0,   11,  6 ]

ขนาดของรายการนั้นแปลกเราจึงนับทุกหลัก

  • 382มันเป็นแง่บวกดังนั้นเราจึงตั้งตารอ มีหนึ่ง3ในตัวเลขอื่น ๆ ( 381), หก8ในตัวเลขอื่น ๆ ( -82, -8, 381, 228, 28, -28) และหก2ในตัวเลขอื่น ๆ ( -82, 228, 28, -28, 2) 13ดังนั้นเราจึงเริ่มต้นด้วย
  • -82: มันเป็นเชิงลบดังนั้นถอยหลัง มีหนึ่ง3ในจำนวนอื่น ( 382) และหนึ่ง8ในจำนวนอื่น ( 382) 2ดังนั้นการส่งออกที่สองคือ
  • ...
  • 228: มันเป็นไปในทางบวก มีสาม2's ในตัวเลขอื่น ๆ ( 28, -28, -2) และอีกสาม2' s และสอง8's ในตัวเลขอื่น ๆ ( 28, -28) 8ดังนั้นการแสดงผลนี้คือ
  • เป็นต้น

กฏท้าทาย:

  • คุณสามารถสมมติว่าการป้อนข้อมูลจะไม่มี0ในรายการเนื่องจากไม่มีทั้งบวกและลบ
  • คุณสามารถสมมติว่า input-list จะมีอย่างน้อยสองรายการ
  • I / O ยืดหยุ่นได้ อินพุต / เอาท์พุตสามารถเป็นอาร์เรย์ / รายการจำนวนเต็มสตริงที่คั่นด้วยตัวเลข / เมทริกซ์อักขระ ฯลฯ
  • หากหมายเลขแรกในรายการเป็นจำนวนลบหรือหมายเลขสุดท้ายในรายการเป็นจำนวนบวกจะเป็น 0 ในรายการผลลัพธ์
  • ด้วยรายการคี่ตัวเลขที่มีตัวเลขหลักเดียวกันหลายครั้งจะถูกนับหลายครั้งเช่น228ในตัวอย่างคี่ข้างต้นส่งผลให้8(3 + 3 + 2) แทน5(3 + 2)

กฎทั่วไป:

  • นี่คือดังนั้นคำตอบที่สั้นที่สุดในหน่วยไบต์ชนะ
    อย่าปล่อยให้ภาษารหัสกอล์ฟกีดกันคุณจากการโพสต์คำตอบด้วยภาษาที่ไม่ได้เข้ารหัส พยายามหาคำตอบสั้น ๆ ที่เป็นไปได้สำหรับภาษาโปรแกรม 'ใด ๆ '
  • กฎมาตรฐานจะใช้สำหรับคำตอบของคุณดังนั้นคุณจึงได้รับอนุญาตให้ใช้ STDIN / STDOUT ฟังก์ชัน / เมธอดพร้อมพารามิเตอร์ที่เหมาะสมและชนิดผลตอบแทนโปรแกรมเต็มรูปแบบ การโทรของคุณ
  • ช่องโหว่เริ่มต้นเป็นสิ่งต้องห้าม
  • หากเป็นไปได้โปรดเพิ่มลิงค์พร้อมทดสอบรหัสของคุณ
  • นอกจากนี้โปรดเพิ่มคำอธิบายหากจำเป็น

กรณีทดสอบ:

Input:  [4, 10, 42, -10, -942, 8374, 728, -200]
Output: [3, 2,  4,  1,   2,    1,    1,   5   ]

Input:  [382, -82, -8, 381, 228, 28, 100, -28, -2]
Output: [13,  2,   2,  4,   8,   3,  0,   11,  6 ]

Input:  [10, -11, 12, -13, 14, -15, 16, -17, 18, -19]
Output: [9,  1,   7,  3,   5,  5,   3,  7,   1,  9  ]

Input:  [10, -11, 12, -13, 14, -15, 16, -17, 18, -19, 20]
Output: [11, 2,   8,  4,   5,  6,   3,  8,   1,  10,  0 ]

Input:  [88, 492, -938, 2747, 828, 84710, -29, -90, -37791]
Output: [8,  9,   3,    9,    3,   4,     5,   4,   12    ]

Input:  [-1, 11, 11, 1]
Output: [0,  2,  1,  0]

Input:  [1, 11, 11, -1]
Output: [3, 2,  1,  3 ]

Input:  [-1, 11, 1]
Output: [0,  2,  0]

Input:  [1, 11, -1]
Output: [3, 2,  3 ]

คำตอบ:




4

Java (JDK 10) , 204 ไบต์

a->{int l=a.length,r[]=new int[l],i=0,j,x,y,b,s,t=10;for(;i<l;i++)for(j=i+(s=a[i]>0?1:-1);0<=j&j<l;j+=s)for(b=0,x=a[i];x!=0;x/=t)for(y=a[j];b<1&y!=0;y/=t)if(x%t==-y%t|x%t==y%t){r[i]++;b+=1-l%2;}return r;}

ลองออนไลน์!

เครดิต


[1,11,-1][3,2,3]ควรกลับ มันเป็นรายการที่แปลกดังนั้นตัวเลขทั้งหมดจึงถูกนับ ครั้งแรก1: มองไปข้างหน้าสามคน1ทั้งหมด: 11,-1. ประการที่สอง11: มองไปข้างหน้าสำหรับแต่ละหลัก: หนึ่ง1+ 1หนึ่ง ประการที่สาม-1: มองย้อนหลังสามในทั้งหมด:1 -1,11(ด้วยรายการแปลก ๆ คุณควรดูตัวเลขแต่ละตัวเหมือนกันฉันจะอธิบายเรื่องนี้ในสิ่งที่ท้าทาย แต่ตัวอย่างที่แปลก ๆ ที่มีตัวเลขให้ความ228กระจ่างเล็กน้อย)
Kevin Cruijssen

@KevinCruijssen ควรได้รับการแก้ไขแล้ว
Olivier Grégoire

มันทำอย่างแน่นอน ฉันกลัวอยู่แล้วว่าคำอธิบายเบื้องต้นอาจจะไม่ค่อยชัดเจนเมื่อฉันโพสต์ตอนนี้ฉันจะดูว่าฉันสามารถตีกอล์ฟอะไรก็ได้ที่คุณตอบ ;)
Kevin Cruijssen

1
ฉันไม่ได้มีจำนวนมากเวลาใด แต่สิ่งหนึ่งที่คุณสามารถกอล์ฟคือการเพิ่มตัวแปรใหม่,tและการเปลี่ยนแปลงi+(a[i]>0?1:-1)ไปi+(t=a[i]>0?1:-1)และจากนั้นก็ใช้แทนj+=t j+=a[i]>0?1:-1
Kevin Cruijssen

1
คุณสามารถบันทึก 2 ถ้าคุณประกาศตัวอย่าง t = 10 และแทนที่ 10 ทั้งหมดสำหรับ t ถึงแม้ว่ามันจะสามารถเข้าใจได้น้อยกว่า
Java Gonzar



1

JavaScript (Node.js) , 164,158,140 139 ไบต์

a=>a.map((x,i)=>a.slice(x<0?0:i+1,x<0?i:l).map(b=>c+=[...b+""].map(X=>s+=X>=0&&(x+"").split(X).length-1,s=0)&&l%2?s:+!!s,c=0)|c,l=a.length)

ลองออนไลน์!


ดูเหมือนว่า JS6 ไม่ใช่ Node-y
ไม่ใช่ว่า Charles

นี่คือสตริงที่สร้างขึ้นของ tio มันมี Node Babel หรือ SpiderMonkey JS มันยังทำงานได้บนโหนดดังนั้นมันจึงดี
DanielIndie


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