Nhỏ nhất không nhìn thấy, nhưng không có chữ số chia sẻ!


28

Thử thách

Tại PPCG, chúng tôi chắc chắn thích các trình tự của chúng tôi, vì vậy đây là một phần thú vị khác.

Hãy xác định a(n)số nguyên không âm nhỏ nhất Xkhông bằng bất kỳ a(k)( 0 < k < n) nào a(n-1)Xkhông chia sẻ bất kỳ chữ số thập phân nào.a(0) = 0

Cho một đầu vào n > 0, đầu ra như vậy a(n).

Ví dụ, đối với đầu vào n = 13, chúng tôi có a(13) = 20, vì a(12) = 1120là số nguyên không âm nhỏ nhất mà chúng tôi chưa thấy mà không chia sẻ bất kỳ chữ số thập phân nào 11.

Trình tự

Dưới đây là 20 điều khoản đầu tiên để bạn bắt đầu. Đây là trình tự A067581 trên OEIS.

0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 22, 11, 20, 13, 24, 15, 23, 14, 25

Quy tắc

  • Đầu vào và đầu ra có thể được coi là phù hợp với kiểu số nguyên của ngôn ngữ của bạn.
  • Đầu vào và đầu ra có thể được đưa ra trong bất kỳ định dạng thuận tiện .
  • Bạn có thể chọn 0-index, như tôi ở đây trong các ví dụ của tôi hoặc 1-index cho bài nộp của bạn. Vui lòng cho biết bạn đang làm gì.
  • Một chương trình đầy đủ hoặc một chức năng được chấp nhận. Nếu một chức năng, bạn có thể trả lại đầu ra thay vì in nó.
  • Nếu có thể, vui lòng bao gồm một liên kết đến một môi trường thử nghiệm trực tuyến để người khác có thể thử mã của bạn!
  • Sơ hở tiêu chuẩn bị cấm.
  • Đây là vì vậy tất cả các quy tắc chơi gôn thông thường đều được áp dụng và mã ngắn nhất (tính bằng byte) sẽ thắng.

Chúng ta có thể lấy n > 1(hoặc n ≥ 2) làm đầu vào không? (1 chỉ mục)
Erik the Outgolfer

@EriktheOutgolfer Chắc chắn, điều đó tốt. Tôi dường như đã bỏ lỡ điểm đạn khi dán sao chép, bởi vì đó là tiêu chuẩn cho những thách thức của tôi.
admBorkBork

5
Các biểu đồ phân tán chắc chắn có vẻ tốt đẹp :)
flawr

Câu trả lời:



7

Japt , 18 byte

@A{!ZøA «As oX}a}g

Kiểm tra nó trực tuyến! Tôi vừa mới thêm gtính năng được sử dụng ở đây, nhưng đó là thứ tôi muốn thêm vào trong một thời gian dài (và điều này đã đẩy tôi ra ngoài lề, bởi vì ggiải pháp không phải của tôi là khoảng 35 byte).

Giải trình

@   A{!ZøA «  As oX}a}g
XYZ{A{!ZøA &&!As oX}a}gU
                           Implicit: U = input integer
   {                 }gU   Starting with [0, 1], return the U'th item generated by
XYZ{                 }     this function: (X = previous item, Y = index, Z = full array)
    A{             }a        Return the smallest non-negative integer A where
      !ZøA &&                  Z does not contain A (A is not yet in the sequence), and
             !As oX            A.toString() does not contain any of the same chars as X.
                           Implicit: output result of last expression

Điều này làm cho đầu tôi đau! Nhưng, sau đó tôi hầu như không nhìn vào bất kỳ phương thức chức năng nào trong Japt.
Xù xì

Không phải là quy tắc mặc định rằng bạn không thể thêm một cái gì đó vào ngôn ngữ sau khi câu hỏi được đưa ra? Sẽ là tầm thường nếu không luôn luôn tạo ra một tích hợp mới để giải quyết thách thức, làm cho tất cả chúng ngắn tùy ý.
trlkly

@trlkly Tôi tin rằng nó được cho phép trong sự phán xét tốt. Tôi tích hợp thêm vào có mục đích chung hơn nhiều so với chỉ một câu trả lời này. Tôi nghĩ rằng về mặt lý thuyết, ai đó có thể thêm một phần tích hợp để giải quyết hoàn toàn thử thách, nhưng một câu trả lời như thế chắc chắn sẽ được nhận rất kém.
Sản xuất ETH


3

Haskell, 79 byte

f 0=0
f x=[i|i<-[1..],all((/=i).f)[1..x-1],all(`notElem`show(f$x-1))$show i]!!0

Các mã là không hiệu quả khủng khiếp. Để tính giá trị lớn hơn, tức là> 12, thêmf x|x<11=x vào giữa hai dòng (được triển khai a gtrong liên kết TIO).

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


1

JavaScript (ES6), 82 byte

Chỉ số 0.

f=(n,x=[1,p=0])=>n--?f(x[(g=k=>x[k]||(k+'').match(`[${p}]`)?g(k+1):p=k)(0)]=n,x):p

Bản giới thiệu


1

Husk , 18 byte

!¡₁;0
ḟȯ¬V€d→⁰d-⁰N

Một giải pháp 1 chỉ mục. Hãy thử trực tuyến!

Chỉnh sửa: lỗi cố định cho +1 byte.

Giải trình

Hàm lặp tích hợp của Husk ¡có nhiều ý nghĩa. Ở đây, tôi đang sử dụng "xây dựng danh sách vô hạn bằng cách liên tục nối thêm các phần tử mới được tính từ các phần tử hiện có". Dòng thứ hai là hàm trợ giúp tính toán một phần tử mới:

ḟȯ¬V€d→⁰d-⁰N  Takes a list of existing elements, e.g. x = [0,1,...,10]
           N  The positive integers
         -⁰   with elements of x removed:        [11,12,13,...
ḟȯ            Find an element n of this list that satisfies:
        d     Digits of n.
   V          Is any of them
    €         an element of
     d        the digits of
      →⁰      the last element of x?
  ¬           Negate.
              Returns 22.

Dòng đầu tiên là chức năng chính:

!¡₁;0  Takes an integer k.
 ¡     Iterate adding new elements to the list
   ;0  [0]
  ₁    using the helper function,
!      take k'th element of result.

Tôi đã thêm Husk vào danh sách ngôn ngữ chơi gôn ; xin vui lòng cho tôi biết nếu tôi có bất kỳ chi tiết sai.
Sản phẩm ETH

1

Haskell, 78 byte

n!k|r:_<-[j|j<-[1..],all(/=j)k,all(`notElem`show n)$show j]=n:r!(r:k)
(0![]!!)

Sẽ còn hiệu quả hơn nữa nếu đối số thứ hai ! sẽ không phải là danh sách các số nhìn thấy mà là các số chưa nhìn thấy. Nhưng tôi không thể làm điều đó mà không sử dụng nhiều byte hơn.

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


0

Toán học 115 byte

Vẫn còn chỗ để đánh gôn này - và có thể sử dụng đệ quy (do đó tăng tốc nó lên).

(For[z={0};i=1,Length@z<#,
For[i=1,!FreeQ[z,i]||!DisjointQ@@IntegerDigits/@{l,i},i++];
z~AppendTo~i;l=Last@z;
];l)&

Mã verbose gốc, với cùng một ý tưởng cơ bản:

MakeSequenceA067581[n_]:=Module[{list={0}, innerCounter=1},

While[Length@list<n,
innerCounter=1;
(* inner loop *)While[Or[MemberQ[list,innerCounter],Intersection[IntegerDigits[Last@list],IntegerDigits[innerCounter]]!={}],innerCounter++];
AppendTo[list,innerCounter];
];
list
]
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.