ตัวเลขไม่บริสุทธิ์


11

นี้ท้าทายเป็นแรงบันดาลใจอย่างมากจากสิ่งที่สร้างขึ้นด้วย @Mego ของเขาบริสุทธิ์และHolierตัวเลขจำนวนมากต้องขอบคุณเขาและเล่นของเขา

ตัวเลขศักดิ์สิทธิ์เป็นตัวเลขที่ประกอบด้วยตัวเลขที่มีรูเท่านั้นซึ่งประกอบด้วย:

04689

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

ความไม่บริสุทธิ์ของตัวเลขคือผลรวมของความไม่บริสุทธิ์ของตัวเลขจำนวนที่ประกอบด้วยตัวเลขไม่บริสุทธิ์เท่านั้นมีความไม่อนันต์

Number            :8 5 5 8 7
Digital Unholiness:0+1+1+0+1
Total Unholiness  :3

Number            :0 1 7 5 5 2 8 5 7 
Digital Unholiness:0+1+2+3+2+1+0+1+2
Total Unholiness  :12

Number            :1 5 7 3 2 1
Digital Unholiness:∞+∞+∞+∞+∞+∞
Total Unholiness  :∞

Number            :0 4 6 8 9
Digital Unholiness:0+0+0+0+0
Total Unholiness  :0

งานของคุณ

คุณต้องเขียนโปรแกรมหรือฟังก์ชั่นที่ใช้จำนวนเต็มบวกหรือสตริงที่ประกอบด้วยตัวเลขเป็นอินพุตเท่านั้นและส่งออกความไม่บริสุทธิ์ หากคุณเลือกที่จะใช้จำนวนเต็มเป็นข้อมูลป้อนเข้าคุณสามารถสันนิษฐานได้ว่ามันจะไม่นำหน้า0เพราะภาษาของคุณอาจจะลดลง

ในกรณีที่ไม่มีความไม่สิ้นสุดคุณสามารถเลือกระหว่างสามเอาท์พุต

  • ตัวละคร(3 ไบต์)
  • เอาต์พุตไม่สิ้นสุดที่มีอย่างน้อย 1 หลักที่ไม่ใช่ศูนย์ แต่เป็นตัวเลขเท่านั้น
  • Infinityค่าในตัว

นี่คือรหัสกอล์ฟดังนั้นรหัสที่สั้นที่สุดในการชนะไบต์โชคดี!


ส่งคืนInfinityมูลค่าในตัวตามกฎหมายหรือไม่
Neil

1
@ ไม่มีฉันจะอนุญาตเพราะฉันไม่ได้คิดถึงมัน
Katenkyo

ตัวอย่างอินพุตของคุณบางส่วนเริ่มต้นด้วยศูนย์นำหน้า มันตั้งใจว่าเราจะสามารถเขียนฟังก์ชั่นของเราด้วยการป้อน "จำนวนเต็มบวก" เฉพาะในกรณีที่ภาษาที่เราเลือกจะไม่ลดศูนย์นำหน้าโดยอัตโนมัติ? หลายภาษาจะถูกบังคับให้ป้อนสตริงด้วยเหตุผลนี้
Simmons

@ASimmons นั่นเป็นสาเหตุที่ฉันแก้ไข (a back back) อินพุตดังนั้นมันจึงอาจเป็น "string ที่ประกอบไปด้วยดิจิตเท่านั้น" นอกจากนี้จุดสำคัญไม่ได้เป็นเพียง0ตัวเลขศักดิ์สิทธิ์ฉันจะแก้ไขโพสต์ตามเพื่อให้คำตอบอยู่บนเลข 0 ที่ไม่เป็นผู้นำ
Katenkyo

@katenkyo ใช่ฉันเห็นว่าคุณสามารถป้อนข้อมูลเป็นสตริงได้ แต่ดูเหมือนยากที่จะรับเป็นจำนวนเต็ม ฉันอนุมัติการแก้ไขของคุณไปที่ OP
Simmons

คำตอบ:


2

MATL , 25 24 ไบต์

7Zq1hVmt~f!wf-|X<st~?xYY

ลองออนไลน์!

อินพุตเป็นสตริง ในเอาต์พุตอินฟินิตี้จะแสดงเป็นแบบInfดั้งเดิม

คำอธิบาย

7         % number literal                                 
Zq        % prime numbers up to a 7: [2 3 5 7]
1         % number literal                        
h         % horizontal concatenation                       
V         % convert numbers to string: '2  3  5  7  1'
m         % take input implicitly. Determine which digits are 1,2,3,5,7
t         % duplicate
~         % element-wise negate: which digits are 4,6,8,9,0
f         % indices of occurrences of digits 4,6,8,9,0
!         % transpose into column array
w         % swap elements in stack           
f         % indices of occurrences of digits 1,2,3,5,7  
-         % element-wise subtraction with broadcast. Gives 2D array
|         % element-wise absolute value                          
X<        % minimum of each column
s         % sum of elements of array
t         % duplicate                       
~         % element-wise negate
?         % if all elements are true                            
  x       %   delete                                         
  YY      %   push infinity                                       
          % (implicit) end if
          % (implicit) convert to string and display  

4

Python (3), 137 131 ไบต์

def f(s):
 l=range(len(s))
 r=[min(i)for i in zip(*[[abs(j-i)for j in l]for i in l if s[i]in'46890'])]
 return sum(r)if r else'∞'

ผล

>>> [f(i) for i in ['85587', '012321857', '157321', '04689']]
[3, 12, '∞', 0]

ฉันได้รับ131 ไบต์แล้วมีบางอย่างที่ขาดหายไปหรือไม่? นอกจากนี้คำตอบที่ดี :)
Katenkyo

@Katenkyo ฉันมักจะลืมบรรณาธิการเพิ่มบรรทัดว่างท้ายไฟล์
Erwan

2

Pyth, 31 29 27 25 ไบต์

smhS.e?}b"04689"akd.n4zUz

ลองใช้ออนไลน์: การสาธิตหรือชุดทดสอบ

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

คำอธิบาย:

smhS.e?}b"04689"akd.n4zUz  implicit: z = input string of numbers
 m                     Uz  map each d in [0, 1, ..., len(z)-1] to:
    .e                z      map each k (index), b (value) of b to:
                akd            absolute difference between k and d

      ?}b"04689"               if b in "04689" else
                   .n4         infinity
   S                           sort
  h                            take the first element (=minimum)
s                              print the sum

1

JavaScript (ES6), 93 ไบต์

s=>[...s].map(n=>/[12357]/.test(n)?++u:u=0,u=1/0).reverse().map(n=>r+=n?n<++u?n:u:u=0,r=0)&&r

ถ้าInfinityไม่ได้เป็นอินฟินิตี้ทางกฎหมายแล้วเพิ่ม 13 ==1/0?'∞':rไบต์

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