Domino mana yang hilang?

34

Satu set domino standar memiliki 28 buah unik:

masukkan deskripsi gambar di sini

Diberikan daftar 28 atau kurang domino unik, tampilkan daftar yang diperlukan untuk membuat set lengkap.

Input dan output domino ditentukan oleh dua digit - jumlah pips pada setiap sisi domino yang, misalnya 00, 34, 40, 66.

Digit dapat diberikan dalam urutan apa pun, demikian 34juga dengan domino yang sama43

Contoh Input

00 01 02 03 04 05 06 11 12 13 14 15 16 22 23 24 25 26 33 34 35 36 44 45 46 55 56 66
00 10 11 20 21 22 30 31 32 33 40 41 42 43 44 50 51 52 53 54 55 60 61 62 63 64 65 66
00 01 02 03 04 05 06 11 12 13 14 15 16 22 23 24 25 26 34 35 36 44 45 46 55 56 66
00 02 03 04 05 06 11 13 14 15 16 22 24 25 26 33 35 36 44 46 55 66
<empty list>

Keluaran Contoh yang Sesuai

<empty list>
<empty list>
33
01 12 23 34 45 56
00 01 02 03 04 05 06 11 12 13 14 15 16 22 23 24 25 26 33 34 35 36 44 45 46 55 56 66
Trauma Digital
sumber
2
Format input apa yang diizinkan? Daftar string? Daftar daftar bilangan bulat?
Martin Ender
1
@ Martin Saya berasumsi kita memiliki konsensus meta di suatu tempat di sepanjang baris "apa pun daftar, array, set, koleksi, vektor, matriks, ... Apakah sesuai untuk bahasa Anda. Anggota dapat berupa angka atau string"
Digital Trauma
Apakah itu berarti bahwa kita dapat meminta setiap kartu domino sebagai sepasang bilangan bulat, misalnya 03 16= [0, 3], [1, 6]?
FlipTack
1
@FlipTack Ya, tentu saja
Digital Trauma

Jawaban:

10

CJam, 11 byte

{:$7Ym*:$^}

Blok tanpa nama (fungsi) dengan I / O sebagai daftar pasangan bilangan bulat.

Uji di sini.

Penjelasan

:$   e# Sort each pair in the input.
7Ym* e# Get all pairs with elements in range [0 .. 6] using a Cartesian product.
:$   e# Sort each pair.
^    e# Symmetric set-difference. This will remove all pairs that are in the input
     e# and also remove duplicates, because it's a set operation.
Martin Ender
sumber
Mengapa Anda membutuhkan {}tanda kurung?
Chromium
6

Pyth, 12 10 byte

-.CU7 2SMQ

Input dan output dalam format [[0, 0], [0, 1], ...].

   U7       generate range [0, 1, ..., 6]
 .C   2     all combinations-with-replacement of 2, generates [[0,0],[0,1],...]
         Q  get the input
       SM   sort each domino (turns ex. [1,0] into [0,1])
-           remove the map-sort'd input from the full array

Coba di sini.

Terima kasih kepada @ MartinBüttner untuk menghemat 2 byte dengan format input / output yang berbeda!

Gagang pintu
sumber
4

JavaScript (diusulkan ES7), 80 76 byte

s=>[for(n of d="0123456")for(o of d.slice(n))if(s.search(n+o+'|'+o+n)<0)n+o]

Mengambil input sebagai string yang dipisahkan spasi dan mengembalikan array string. Pemahaman array sangat menarik bagi mereka yang satu ini.

Neil
sumber
3

Ruby 74 byte

->b{a=(0..27).map{|i|"%d%d"%[i%7,(i+i/7)%7]}
b.map{|e|a-=[e,e.reverse]}
a}

Mengambil array string, mengembalikan array string.

Berkomentar dalam program uji

f=->b{a=(0..27).map{|i|"%d%d"%[i%7,(i+i/7)%7]} #generate complete set of dominos (each domino once) and store in a
b.map{|e|a-=[e,e.reverse]}                     #remove provided dominos (check both forward and reverse representations)
a}                                             #return a

p f[%w{00 01 02 03 04 05 06 11 12 13 14 15 16 22 23 24 25 26 33 34 35 36 44 45 46 55 56 66}]
p f[%w{00 10 11 20 21 22 30 31 32 33 40 41 42 43 44 50 51 52 53 54 55 60 61 62 63 64 65 66}]
p f[%w{00 01 02 03 04 05 06 11 12 13 14 15 16 22 23 24 25 26 34 35 36 44 45 46 55 56 66}]
p f[%w{00 02 03 04 05 06 11 13 14 15 16 22 24 25 26 33 35 36 44 46 55 66}]
p f[[]]

Keluaran

[]
[]
["33"]
["01", "12", "23", "34", "45", "56"]
["00", "11", "22", "33", "44", "55", "66", "01", "12", "23", "34", "45", "56", "60", "02", "13", "24", "35", "46", "50", "61", "03", "14", "25","36", "40", "51", "62"]

Pada contoh terakhir (daftar kosong masukan) catat urutan pembuatan daftar lengkap domino menggunakan aritmatika modular. 7 ganda dihasilkan pertama, kemudian 7 domino dengan selisih 1 (atau 6) pip di setiap sisi, lalu 7 domino dengan selisih 2 (atau 5) pip, dan akhirnya 7 domino dengan selisih 3 (atau 4) pips.

Level River St
sumber
3

Julia 0,6 , 47 byte

A->setdiff([[i,j]for i=0:6 for j=i:6],sort.(A))

Cobalah online!

(Rentang mulai dikoreksi berkat JayCe.)


48 byte

A->[(i,j)for i=0:6 for j=i:6 if[i,j]∉sort.(A)]

Cobalah online!

sundar - Pasang kembali Monica
sumber
Saya pikir nol domino tampaknya hilang dari test case TIO ke-3 Anda. Untuk i = 0: 6 mungkin?
JayCe
Itulah yang saya dapat dari mencoba memposting setengah tertidur jam 3 pagi! Yap, perbaiki sekarang (semoga), terima kasih.
sundar - Reinstate Monica
2

Perl, 48 + 1 = 49 byte

for$=(0..6){for$.($=..6){/$=$.|$.$=/||say$=.$.}}

Membutuhkan -nbendera, dan gratis -M5.010| -E:

$ perl -nE'for$=(0..6){for$.($=..6){/$=$.|$.$=/||say$=.$.}}' <<< '00 02 03 04 05 06 11 13 14 15 16 22 24 25 26 33 35 36 44 46 55 66'                      
01
12
23
34
45
56

Jawabannya cukup membosankan secara keseluruhan, tapi ini dia versi yang tidak diserang:

# '-n' auto reads first line into `$_`:
# $_ = <>;
foreach $a (0..6) {
  foreach $b ($a..6) {
    say $a . $b unless $_ =~ /$a$b|$b$a/;
  }
}
andlrc
sumber
2

Python 2 , 91 byte

lambda A,S="0123456":sum([[i+j for j in S[int(i):]if(i+j in A)+(j+i in A)<1]for i in S],[])

Cobalah online!

FlipTack
sumber
2

R , 111 byte

function(s,p=paste0,L=lapply)setdiff(p(sequence(1:7)-1,rep(0:6,t=1:7)),L(L(strsplit(s,''),sort),p,collapse=''))

Cobalah online!

Tidak benar-benar bangga dengan ini, tetapi R tidak terlalu "golfy" dalam membelah / menggabungkan string ...

menggali semua
sumber
2

05AB1E , 12 11 byte

6Ýã€{JI€{KÙ

-1 byte terima kasih kepada @Emigna .

Cobalah online.

Penjelasan:

6Ý         # [0,1,2,3,4,5,6]
  ã        # Duplicate and take the cartesian product (pair up each)
   €{      # Sort each pair
     J     # Join them together to strings
I€{        # Sort each pair-string of the input
K          # Remove all pairs from the input from the cartesian list
Ù          # Only leave unique values
Kevin Cruijssen
sumber
1

Mathematica, 49 byte

Complement[Join@@Table[{x,y},{x,0,6},{y,0,6}],#]&

Input adalah daftar daftar bilangan bulat.

CalculatorFeline
sumber
3
Gagal pada test case terakhir; ingat, ini adalah himpunan tidak teratur.
LegionMammal978
Saya setuju dengan @ LegionMammal978; jawaban ini tampaknya tidak valid.
Jonathan Frech
1

Java 8, 105 byte

Void lambda menerima yang bisa berubah java.util.Set<String>.

s->{for(int i=0,a,b;i<49;)if(s.add(""+(a=i/7)+(b=i++%7))&(s.add(""+b+a)|a==b))System.out.print(" "+a+b);}

Cobalah secara Online

Tidak disatukan

s -> {
    for (int i = 0, a, b; i < 49;)
        if (
            s.add("" + (a = i / 7) + (b = i++ % 7))
            & (
                s.add("" + b + a)
                | a == b
            )
        )
            System.out.print(" " + a + b);
}

Ucapan Terima Kasih

  • -1 byte terima kasih kepada Jonathan Frech
Jakob
sumber
1
int i=0,a,b;while(i<49bisa for(int i=0,a,b;i<49;.
Jonathan Frech
1

Jelly , 8 byte

Ṣ€7ḶŒċ¤ḟ

Cobalah online!

Argumen adalah daftar panjang-2 daftar bilangan bulat. Footer mengubah input dari format dalam kasus uji ke format yang diterima solusi ini.

Erik the Outgolfer
sumber
1

J, 26 , 24 byte

-2 byte terima kasih kepada FrownyFrog

(;(,.i.,])&.>i.7)-.\:~"1
  • (;(,.i.,])&.>i.7) menghitung set lengkap (bagian ini bisa golf lebih lanjut, saya percaya. Dan tolong lakukan jika Anda melihat caranya ...)
  • -. diatur "minus"
  • /:~"1 memesan setiap input

Cobalah online!

Asli

Cobalah online!

((#~<:/"1)>,{;~i.7)-./:~"1
Jonah
sumber
(;(,.i.,])&.>i.7)menghemat 2 (membalikkan urutan)
FrownyFrog
@FrownyFrog terima kasih, diperbarui.
Jonah
1

Python 2, 89 86 byte

Disimpan beberapa byte dengan menyederhanakan pembuatan set domino.

lambda z,s="0123456":{x+y for x in s for y in s[int(x):]}-{(a+b,b+a)[a>b]for a,b in z}

Cobalah online!

Mengambil daftar string seperti ["00", "10", "02] sebagai argumen untuk kartu domino. Mengembalikan objek set python, yang merupakan daftar berbeda yang tidak berurutan.

Penjelasan

# anonymous function, s should always have its default value
lambda z,s="0123456":
                     # contents are a set
                     {                                  }
                          # iterate over characters in string
                          for x in s
                                     # for each x, iterate over x from index of current item forward
                                     for y in s[int(x):]
                     # add characters together for domino string
                     x+y
                                                         # contents are a set, return the difference between these two sets 
                                                         -{                          }
                                                             # iterate over items in input list, split strings into two characters
                                                                         for a,b in z
                                                             # sort strings in input list (so that i.e. "10" => "01")
                                                             # essentially, "ab" if a<b, otherwise "ba"
                                                             (a+b,b+a)[a>b]
Triggernometri
sumber
0

Haskell, 65 byte

f x=[[a,b]|a<-"0123456",b<-[a..'6'],notElem[a,b]x&&notElem[b,a]x]

Contoh penggunaan:

*Main> f ["00","02","03","04","05","06","11","13","14","15","16","22","24","25","26","33","35","36","44","46","55","66"]
["01","12","23","34","45","56"]

Iterate adalam loop luar atas semua angka dari 0untuk 6dan bdalam loop batin atas semua angka dari ake 6dan menjaga mereka abdi mana tidak abjuga baditemukan dalam string masukan.

nimi
sumber
0

Serius, 16 byte

,`S`M7r;∙`εjS`M-

Mengambil input sebagai daftar string, menampilkan daftar string

Cobalah online!

Penjelasan:

,`S`M7r;∙`εjS`M-
,`S`M             map: sort each input string
     7r;∙         cartesian product of range(0,7) ([0,1,2,3,4,5,6]) with itself
         `εjS`M   map: join on empty string, sort (results in all valid dominoes with some duplicates)
               -  set difference (all values present in valid dominoes set not present in input, with duplicates removed)

Sebenarnya , 13 byte (tidak bersaing)

♂S7r;∙`εjS`M-

Ini identik dengan jawaban Serius (dengan pengecualian input implisit dan ♂Scara yang lebih pendek untuk mempersingkat setiap string input).

Cobalah online!

Mego
sumber
1
Anda memiliki duplikat dalam output
Digital Trauma
@DigitalTrauma Ini disebabkan oleh perubahan yang tidak kompatibel ke belakang yang dibuat sejak saat posting.
Mego
0

raket

(define (missing-dominoes input)
  (filter
   (lambda (n)
     (not (member n (map
                     (lambda (n)
                       (let ((x (quotient n 10)) (y (remainder n 10)))
                         (if (<= x y) n (+ (* y 10) x))))
                     input))))
   (for*/list ([i (in-range 7)] [j (in-range i 7)])
     (+ (* 10 i) j))))
Kevin
sumber
2
Senang melihat orang bermain golf di raket! Ini adalah pertanyaan kode-golf sehingga Anda mungkin harus memasukkan bytecount Anda dalam jawaban Anda. Anda juga bisa menghapus spasi kosong dari jawaban ini.
Wheat Wizard
Saya setuju dengan @WW dalam jawaban ini sepertinya tidak cukup golf untuk valid.
Jonathan Frech