Tiga nomor lainnya

Oct 09 2020

Diberikan tiga angka berbeda dari \$1\$ke \$7\$, menghasilkan tiga angka berbeda lainnya dari \$1\$ke \$7\$, yaitu tidak ada angka yang sama dengan angka aslinya. Kode Anda harus menghasilkan rangkaian keluaran yang berbeda untuk setiap rangkaian masukan yang memungkinkan. Artinya, tidak ada dua masukan yang dapat menghasilkan keluaran yang sama, memperlakukan keduanya sebagai himpunan tidak berurutan. Selain itu, Anda dapat menerapkan pemetaan apa pun yang Anda inginkan.

Secara matematis, Anda diminta memberikan bijection (fungsi satu-ke-satu) \$f:S \to S\$dimana \$S\$terdiri dari himpunan bagian tiga elemen dari \$\{1,2,3,4,5,6,7\}\$, sedemikian rupa \$f(s) \cap s = \emptyset\$untuk setiap \$s\in S\$. Sebagai bijection, pemetaan ini harus dapat dibalik, meskipun Anda tidak harus menyediakan fungsi invers dalam kode Anda.

Berikut adalah 35 kemungkinan tripel ( dipisahkan spasi ).

I / O

Format set tiga elemen fleksibel. Anda dapat mengambil input dalam urutan yang diurutkan sebagai tiga angka atau daftar / larik / tupel tiga elemen, atau sebagai satu set. Namun, Anda tidak boleh meminta masukan yang dipesan dalam urutan tertentu selain diurutkan. Anda mungkin nol indeks.

Anda juga dapat menggunakan urutan tujuh bit yang tiga di antaranya berada. Urutan tujuh bit ini juga dapat direpresentasikan sebagai bilangan desimal, byte, atau karakter.

Keluaran dapat diberikan dalam salah satu format ini, dengan kelonggaran lebih lanjut bahwa keluaran yang dipesan tidak harus diurutkan.

Jawaban

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

Cobalah secara online!

-3 byte berkat FryAmTheEggman
-4 byte dengan indeks-nol
-1 byte berkat xnor

11 JonathanAllan Oct 09 2020 at 22:26

Python 3 , 43 byte

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

Cobalah secara online!

8 JonathanAllan Oct 09 2020 at 21:39

Jelly ,  9 8  7 byte

7RṚḟṙSḊ

Tautan monadik menerima daftar tiga angka, dari \$[1,7]\$, dalam urutan yang diurutkan yang menghasilkan daftar nomor lain, dari \$[1,7]\$, belum tentu diurutkan.

Cobalah secara online! Atau lihat semua 35 (saya mengurutkan nilai yang dihasilkan untuk perbandingan yang lebih mudah).

Bagaimana?

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

Edit: -2 byte dengan menggunakan modulo -4(yang mengembalikan negatif modulo 4)

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

Cobalah secara online!

Menemukan 4 digit dalam 1..7 yang tidak ada dalam input, dan mengecualikan satu digit yang sesuai dengan jumlah input (membungkus sekitar).

Tes tautan TIO yang keluarannya unik untuk setiap masukan, dan menunjukkan keluaran untuk setiap masukan.

(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

Seperti yang diiklankan sebelumnya , saya sedikit mabuk jadi ini bisa saja salah dan, bahkan jika benar, mungkin bisa bermain golf sedikit.

7õ kU k϶UxÍu4

Cobalah atau lihat (menurut saya) buktinya

5 Neil Oct 09 2020 at 21:47

Arang , 39 38 34 32 byte

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

Cobalah secara online! Tautan adalah untuk verbose versi kode. I / O adalah bilangan bulat 7-bit 7..112. Penjelasan: Ordinal string TXdhpmemiliki pola lima bit yang saya pilih secara sewenang-wenang sehingga hasilnya tidak termasuk 1. Mereka kemudian diputar secara siklis sampai ada yang cocok dengan input, di mana saya telah menentukan bit yang dikecualikan. Bit ini kemudian ditambahkan ke input asli, dan akhirnya perbedaan antara 127dan jumlahnya dicetak.

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

Saya secara sewenang-wenang memilih pola lima bit berikut untuk dikecualikan 1tetapi lima pola yang bahkan berbeda secara siklis akan bekerja.

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

JavaScript (ES6),  66  65 byte

Mengambil masukan sebagai string 3 digit. Mengembalikan string dalam format yang sama.

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

Cobalah secara online!

3 JonathanAllan Oct 09 2020 at 23:32

05AB1E , 10 byte

7LsKsO(._¨

Cobalah secara online!

Bagaimana?

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

Menyelamatkan 16 19 23 byte kekalahan berkat pria itu sendiri kucing langit-langit !!!
Menyelamatkan satu byte berkat 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;}

Cobalah secara online!

Mengambil masukan sebagai \$3\$bit diatur dalam paling tidak signifikan- \$7\$-bits dari sebuah intdan mengembalikan tiga angka lainnya juga.

Penjelasan (sebelum bermain golf)

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

Cobalah secara online!

2 KjetilS. Oct 10 2020 at 22:03

Perl 5 , 49 byte

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

Cobalah secara online!

Hanya terjemahan jawaban python dari 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)

Cobalah secara online!

2 ellcs Oct 12 2020 at 17:41

Ruby, 38 byte

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

Cobalah secara online!

Mencuri jawaban Eric berdasarkan jawaban Jonathan . Saya akan berkomentar kepada Eric, tetapi saya tidak memiliki reputasi yang cukup.

Perbedaan sebenarnya: Menggunakan rentang untuk mendapatkan potongan tiga elemen.

1 EricDuminil Oct 10 2020 at 16:23

Ruby , 40 byte

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

Cobalah secara online!

Port Ruby jawaban Jonathan .

Lyxal Oct 09 2020 at 22:55

05AB1E , 17 byte

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

Cobalah secara online!

Ini adalah versi yang lebih panjang dari jawaban Jeli, jadi naikkan suara itu juga.

Graham Oct 10 2020 at 18:05

APL + WIN, 20 byte

Perintah untuk memasukkan vektor bilangan bulat

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

Cobalah secara online! Terima kasih kepada Dyalog Classic

Ven Oct 12 2020 at 14:55

APL (Dyalog Unicode) , 13 byte SBCS

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

Cobalah secara online!

Ini di atas kereta

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)