Ba số khác

Oct 09 2020

Cho ba số phân biệt từ \$1\$đến \$7\$, xuất ra ba số khác biệt từ \$1\$đến \$7\$, tức là không có số nào chung với các số ban đầu. Mã của bạn phải tạo ra một bộ đầu ra khác nhau cho mỗi bộ đầu vào có thể. Có nghĩa là, không có hai đầu vào nào có thể tạo ra cùng một đầu ra, coi cả hai như các tập không có thứ tự. Ngoài ra, bạn có thể triển khai bất kỳ ánh xạ nào bạn muốn.

Về mặt toán học hơn, bạn được yêu cầu đưa ra một bijection (hàm một đối một) \$f:S \to S\$ở đâu \$S\$bao gồm các tập con ba phần tử của \$\{1,2,3,4,5,6,7\}\$, như vậy \$f(s) \cap s = \emptyset\$cho mọi \$s\in S\$. Là một phép phân tích, ánh xạ này phải có thể đảo ngược, mặc dù bạn không cần phải cung cấp hàm nghịch đảo trong mã của mình.

Dưới đây là 35 bộ ba có thể có (được viết bằng dấu cách ).

I / O

Định dạng của bộ ba phần tử là linh hoạt. Bạn có thể lấy các đầu vào theo thứ tự đã sắp xếp dưới dạng ba số hoặc danh sách ba phần tử / mảng / bộ hoặc dưới dạng một tập hợp. Tuy nhiên, bạn có thể không yêu cầu đầu vào được sắp xếp theo thứ tự cụ thể khác với thứ tự đã được sắp xếp. Bạn có thể không chỉ mục.

Bạn cũng có thể sử dụng một chuỗi bảy bit, trong đó có ba bit. Chuỗi bảy bit này cũng có thể được biểu diễn dưới dạng số thập phân, byte hoặc ký tự.

Đầu ra có thể được cung cấp ở bất kỳ định dạng nào trong số này, với sự cho phép hơn nữa là các đầu ra có thứ tự không cần phải được sắp xếp.

Trả lời

12 HyperNeutrino Oct 09 2020 at 19:46

Python 3 , 53 byte

def f(b):c=[*{*range(7)}-b];del c[-sum(b)%4];return c

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

-3 byte nhờ FryAmTheEggman
-4 byte bằng không lập chỉ mục
-1 byte nhờ xnor

11 JonathanAllan Oct 09 2020 at 22:26

Python 3 , 43 byte

lambda s:([*{*range(7)}-s]*4)[-sum(s):][:3]

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

8 JonathanAllan Oct 09 2020 at 21:39

Thạch ,  9 8  7 byte

7RṚḟṙSḊ

Một Liên kết đơn nguyên chấp nhận danh sách ba số, từ \$[1,7]\$, theo thứ tự được sắp xếp tạo ra danh sách các số khác, từ \$[1,7]\$, không nhất thiết phải được sắp xếp.

Hãy thử nó trực tuyến! Hoặc xem tất cả 35 (Tôi đã sắp xếp các giá trị kết quả để so sánh dễ dàng hơn).

Làm sao?

7RṚḟṙSḊ - Link: list A                   e.g.  [2,4,7]
7R      - seven range                          [1,2,3,4,5,6,7]
  Ṛ     - reverse                              [7,6,5,4,3,2,1]
   ḟ    - filter discard (A) -> B              [6,5,3,1]
     S  - sum (A)                              13
    ṙ   - rotate (B) left by (that)            [5,3,1,6]
      Ḋ - remove the leftmost                  [3,1,6]
7 DominicvanEssen Oct 10 2020 at 12:24

R , 33 31 byte

Chỉnh sửa: -2 byte bằng cách sử dụng modulo -4(trả về âm của modulo 4)

(1:7)[v<--scan()][sum(v)%%-4-1]

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

Tìm 4 chữ số trong 1..7 không có trong đầu vào và loại trừ số tương ứng với tổng đầu vào (bao quanh).

Các bài kiểm tra liên kết TIO cho thấy đầu ra là duy nhất cho mỗi đầu vào và hiển thị đầu ra cho mọi đầu vào.

(1:7)                   # vector of digits 1..7
     [          ]       # select elements
         -scan()        # excluding (negative indexes) input
      v<-               # and define v as (negative) input
                        # (so up to here we have the 4 elements that aren't in the input)  
     [              ]   # from these, select elements
      -                 # excluding (negative index)
       (sum(v)%%4+1)    # the sum of input, modulo 4, plus 1
5 Shaggy Oct 09 2020 at 21:24

Japt , 14 byte

Như đã quảng cáo trước đây , tôi hơi say nên điều này có thể sai và, ngay cả khi đúng, có lẽ tôi có thể chơi gôn một chút.

7õ kU k϶UxÍu4

Hãy thử nó hoặc xem (những gì tôi nghĩ là) bằng chứng

5 Neil Oct 09 2020 at 21:47

Than củi , 39 38 34 32 byte

NθI⁻¹²⁷⁺θX²⊟Φ⁷№ETXdhp﹪×℅λX²ι¹²⁷θ

Hãy thử nó trực tuyến! Liên kết là phiên bản dài của mã. I / O là một số nguyên 7 bit 7..112. Giải thích: Thứ tự của chuỗi TXdhpcó năm mẫu bit mà tôi đã tùy ý chọn để kết quả loại trừ 1. Sau đó, chúng được quay theo chu kỳ cho đến khi một khớp nối với đầu vào, lúc đó tôi đã xác định được bit bị loại trừ. Bit này sau đó được thêm vào đầu vào ban đầu, và cuối cùng sự khác biệt giữa 127và tổng được in.

Nθ                                  Cast input to integer
             ⁷                      Literal 7
            Φ                       Filter on implicit range
                TXdhp               Literal string `TXdhp`
               E                    Map over characters
                        λ           Current character
                       ℅            Ordinal
                      ×             Multiplied by
                          ²         Literal 2
                         X          Raised to power
                           ι        Outer index
                     ﹪              Modulo
                            ¹²⁷     Literal 127
              №                     Count (i.e. contains)
                               θ    Input
           ⊟                        Pop matching value
          ²                         Literal 2
         X                          Raised to that power
       ⁺                            Added to
        θ                           Input
   ⁻                                Subtracted from
    ¹²⁷                             Literal 127
  I                                 Cast to string
                                    Implicitly print

Tôi đã tự ý chọn năm mẫu bit sau để loại trừ 1nhưng bất kỳ năm mẫu nào thậm chí khác biệt theo chu kỳ sẽ hoạt động.

T   1010100
X   1011000
d   1100100
h   1101000
p   1110000
4 Arnauld Oct 09 2020 at 20:00

JavaScript (ES6),  66  65 byte

Nhận đầu vào dưới dạng chuỗi 3 chữ số. Trả về một chuỗi có cùng định dạng.

f=(n,k=i=0)=>++k<8?(~n.search(k)||n*43%399%4==i++?'':k)+f(n,k):''

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

3 JonathanAllan Oct 09 2020 at 23:32

05AB1E , 10 byte

7LsKsO(._¨

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

Làm sao?

7LsKsO(._¨ - (push the input)      e.g.: [2,4,7]
7          - push 7                      7,[2,4,7]
 L         - range                       [1,2,3,4,5,6,7],[2,4,7]
  s        - swap top two of the stack   [2,4,7],[1,2,3,4,5,6,7]
   K       - push a without bs           [1,3,5,6]
    s      - swap top two of the stack   [2,4,7],[1,3,5,6]  (implicit input swapped in)
     O     - sum                         13,[1,3,5,6]
      (    - negate                      -13,[1,3,5,6]
       ._  - rotate a left by b          [6,1,3,5]
         ¨ - remove rightmost            [6,1,3]
           - implicit print top of stack [6,1,3]
3 Noodle9 Oct 11 2020 at 23:06

C (gcc) , 84 83 byte

Đã tiết kiệm được một con số khổng lồ 16 19 23 byte nhờ chính con mèo trần !!!
Đã lưu một byte nhờ Neil !!!

p;i;f(m){for(p=i=0;(L"᰸ᨴᘬᤲᔪ"[p]>>i%7&m)-m;p+=++i%7<1);p=(64>>i%7)+m^127;}

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

Nhận đầu vào là \$3\$các bit được đặt trong giá trị nhỏ nhất- \$7\$-bits của an intvà trả về ba số khác tương tự như vậy.

Giải thích (trước khi chơi gôn)

f(m){                                  // function taking an integer with  
                                       // 3 bits set in its 7 lsb  
                                       // representing the 3 input numbers  
     for(                              // loop over  
         p=L"ᔪᘬᤲᨴ᰸"                     // a sequence of 5 int values:
                                       //   5418,5676,6450,6708,7224
                                       // that are the 5 unique patterns of    
                                       // 3 set bits per 7 bits shifted and
                                       // repeated over 13 bits so that their  
                                       // 7th bit is unset:  
                                       //   5418 = 1010100101010
                                       //   5676 = 1011000101100  
                                       //   6450 = 1100100110010  
                                       //   6708 = 1101000110100  
                                       //   7224 = 1110000111000
                    ;;++p)             // no need to test for stopping  
                                       // since we must match one  
       for(i=7;i--;)                   // loop over shift values from 6 to 0    
         if((*p>>6-i&m)==m)            // if a shifted 7-bit slice of one of  
                                       // our patterns matches m we've found  
                                       // the correct bit to exclude from m's  
                                       // 4 unset bits
            return(1<<i)+m^127;        // add that bit to m and flip the 7   
                                       // lsb so the 3 other unset bits are  
                                       // now set to represent the 3 return
                                       // values  
 }
2 Razetime Oct 10 2020 at 04:02

Husk , 9 byte

hṙ_Σ¹`-ḣ7

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

2 KjetilS. Oct 10 2020 at 22:03

Perl 5 , 49 byte

sub{@c=grep!/[@_]/,0..6;splice@c,-sum(@_)%4,1;@c}

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

Chỉ là bản dịch của câu trả lời python từ HyperNeutrino.

2 TomerShetah Oct 11 2020 at 17:19

Scala , 64 byte

b=>1.to(7).diff(b).zipWithIndex.filter(_._2!=b.sum*3%4)map(_._1)

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

2 ellcs Oct 12 2020 at 17:41

Ruby, 38 byte

->s{n=s.sum;(([*1..7]-s)*9)[-n..-n+2]}

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

Đánh cắp câu trả lời của Eric dựa trên câu trả lời của Jonathan . Tôi sẽ nhận xét với Eric, nhưng tôi không có đủ danh tiếng.

Sự khác biệt thực tế: Sử dụng một phạm vi để có được ba phần tử.

1 EricDuminil Oct 10 2020 at 16:23

Ruby , 40 byte

->s{(([*1..7]-s)*9).last(s.sum).first 3}

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

Cổng Ruby của câu trả lời của Jonathan .

Lyxal Oct 09 2020 at 22:55

05AB1E , 17 byte

7LIм{3.$IO(._Dg<£

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

Đây là một phiên bản dài hơn của câu trả lời Jelly, vì vậy hãy ủng hộ nó.

Graham Oct 10 2020 at 18:05

APL + THẮNG, 20 byte

Lời nhắc nhập vectơ số nguyên

3↑(-+/¯2↑n)⌽n←(⍳7)~⎕

Hãy thử nó trực tuyến! Cảm ơn Dyalog Classic

Ven Oct 12 2020 at 14:55

APL (Dyalog Unicode) , 13 byte SBCS

1∘↓+/⌽(⌽⍳7)∘~

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

Đây là đỉnh của một đoàn tàu

1∘↓+/⌽(⌽⍳7)∘~
      (⌽⍳7)∘~ ⍝ Right side of the atop
        ⍳7    ⍝ Range
       ⌽      ⍝ Reverse
           ∘  ⍝ Composed with...
            ~ ⍝ ...without (to remove our arguments)
     ⌽        ⍝ Rotated by...
   +/         ⍝ ...the sum of the arguments
1∘↓           ⍝ Left side of the atop
1∘↓           ⍝ Drop leftmost (drop curried with 1)