Những con số bất hạnh


11

Thử thách này được truyền cảm hứng rất nhiều từ những gì @Mego tạo ra với số HolyHolier của anh ấy, rất nhiều lời cảm ơn đến anh ấy và cách chơi chữ của anh ấy.

Số thánh là số chỉ gồm các chữ số có lỗ , đó là:

04689

Các số có ít nhất một chữ số không được coi là không linh hoạt. Các chữ số không rõ ràng là xấu theo định nghĩa, nhưng gần gũi với các chữ số thánh giúp chúng trở nên trung lập. Do đó, càng gần nhau, càng ít u ám (1 khi liền kề).

Sự bất hạnh của một con số là tổng của sự không linh hoạt của các chữ số của nó, một số chỉ bao gồm số không linh thiêng có một sự bất hạnh vô hạn.

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

Nhiệm vụ của bạn

Bạn phải viết một chương trình hoặc hàm lấy một số nguyên dương hoặc một chuỗi chỉ bao gồm các chữ số làm đầu vào và xuất ra tính không ổn định của nó. Nếu bạn chọn sử dụng một số nguyên làm đầu vào, bạn có thể cho rằng nó sẽ không bao giờ dẫn đầu 0vì ngôn ngữ của bạn có thể loại bỏ nó.

Trong trường hợp bất hạnh vô hạn, bạn có thể chọn giữa ba đầu ra

  • Ký tự (3 byte)
  • Đầu ra vô hạn chứa ít nhất 1 chữ số khác không, nhưng chỉ có các chữ số.
  • Một Infinitygiá trị tích hợp.

Đây là môn đánh gôn, vì vậy đoạn mã ngắn nhất trong byte thắng, chúc may mắn!


Là trả lại một Infinitygiá trị tích hợp?
Neil

1
@ Tôi sẽ cho phép nó, vì tôi thậm chí không nghĩ về nó, điểm tốt ở đó.
Katenkyo

Một số ví dụ đầu vào của bạn bắt đầu bằng số 0 đứng đầu; có phải chúng ta chỉ có thể viết hàm của mình với đầu vào "một số nguyên dương" nếu ngôn ngữ lựa chọn của chúng ta sẽ không tự động giảm số 0 đứng đầu? Nhiều ngôn ngữ sẽ bị buộc phải lấy đầu vào chuỗi vì lý do này.
Một Simmons

@ASimmons Đó là lý do tại sao tôi đã sửa đổi (một lúc sau) đầu vào để nó có thể là "chuỗi chỉ bao gồm các chữ số". Ngoài ra, điểm quan trọng không phải là một 0chữ số thánh, tôi sẽ sửa đổi bài đăng theo câu trả lời cho phép dựa trên các số 0 không dẫn đầu.
Katenkyo

@katenkyo Vâng tôi thấy bạn có thể nhập dưới dạng chuỗi nhưng có vẻ khó lấy nó làm số nguyên. Tôi chấp nhận chỉnh sửa của bạn cho OP.
Một Simmons

Câu trả lời:


2

MATL , 25 24 byte

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

Hãy thử trực tuyến!

Đầu vào là một chuỗi. Trong đầu ra, vô cực được hiển thị nguyên bản là Inf.

Giải trình

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 byte

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'∞'

Các kết quả

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

Tôi nhận được số lượng là 131 Byte , tôi có thiếu thứ gì không? Ngoài ra, câu trả lời tuyệt vời :).
Katenkyo

@Katenkyo Tôi luôn quên trình soạn thảo của mình thêm dòng trống ở cuối tập tin
Erwan

2

Pyth, 31 29 27 25 byte

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

Dùng thử trực tuyến: Trình diễn hoặc Test Suite

Đối với mỗi chữ số tôi tính khoảng cách đến mỗi số. Một khoảng cách là vô tận, nếu chữ số thứ hai không phải là thánh. Từ những danh sách này, tôi lấy khoảng cách tối thiểu và tổng hợp lại.

Giải trình:

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 byte

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

Nếu Infinitykhông phải là vô hạn hợp pháp, sau đó thêm 13 byte cho ==1/0?'∞':r.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.