Tantangan
Diberikan dua digit 0-9 sebagai input, output domino (dari set domino double-sembilan ) dengan jumlah pips (titik) pada kedua sisi. Sepuluh wajah yang mungkin terlihat seperti ini (dipisahkan oleh pipa):
| | o| o|o o|o o|o o o|o o o|o o o|o o o
| o | | o | | o | | o |o o|o o o
| |o |o |o o|o o|o o o|o o o|o o o|o o o
Atau di jalur terpisah:
-----
o
-----
o
o
-----
o
o
o
-----
o o
o o
-----
o o
o
o o
-----
o o o
o o o
-----
o o o
o
o o o
-----
o o o
o o
o o o
-----
o o o
o o o
o o o
Format input
Anda dapat mengambil input dalam format apa pun yang masuk akal, termasuk tetapi tidak terbatas pada:
- Dua bilangan bulat, string, atau array tunggal yang terpisah;
- Integer tunggal dari 0-99;
- Array dua bilangan bulat;
- Untaian dua digit.
Format output
- Kedua wajah mungkin sejajar secara horizontal, dipisahkan oleh pipa seperti:
o|o o
| o
o |o o
- Atau mereka dapat disejajarkan secara vertikal, dipisahkan oleh tanda hubung seperti:
o
o
-----
o o
o
o o
- Anda dapat menampilkan perbatasan di sekitar domino jika Anda mau.
- Anda juga dapat memilih untuk menampilkan daftar garis, daftar dua wajah, atau kombinasi dari semuanya.
- Anda dapat menggunakan karakter non-spasi putih untuk pips (saya menggunakan
o
). - Jika Anda benar-benar menginginkannya, Anda dapat menggunakan
0
untuk spasi putih dan1
untuk pips, atauFalse
/True
(atau bahasa Anda yang setara) jika menghasilkan array. - Anda dapat menghapus spasi putih di antara kolom; ini adalah output yang valid untuk 7, 7:
ooo|ooo
o | o
ooo|ooo
- Salah satu wajah dapat diputar 90 derajat. Ini juga merupakan output yang valid untuk 7, 7:
o o|o o o
o o o| o
o o|o o o
- Anda mungkin memiliki spasi putih terdepan / trailing sebanyak yang Anda suka, selama bagian utama dari output masih sesuai dengan kendala lainnya.
- Setiap wajah harus memiliki 3 garis, walaupun garisnya kosong. Untuk 0, 1 Anda tidak dapat menampilkan ini:
-----
o
Tapi Anda bisa menampilkan ini:
-----
o
Demikian pula, jika Anda mengeluarkan daftar dua daftar garis, Anda bisa melakukannya [["", "", ""], ["", " o", ""]]
, tetapi tidak [[""], [" o "]]
.
Mencetak gol
Ini adalah kode-golf , jadi kode terpendek dalam byte di setiap bahasa menang.
[2, 1]
, saya bisa output[[[0,0,1],[0,0,0],[1,0,0]],[[0,0,0],[0,1,0],[0,0,0]]]
?[0,5,21,29,31]
semua angka penting di sini teman saya.Jawaban:
Python 2 ,
10197926864 byteCobalah online!
Kredit
sumber
0
danFalse
sama dengan Python, jadi harus OK).C (gcc) ,
252242269262241235220 byteSaya berada di stack overflow untuk soket di python, ketika ini muncul, berkata mengapa tidak? golf kode pertama, jadi saya tidak sepenuhnya yakin apakah saya mengikuti aturan 100% (dan jika tidak dan seseorang ingin mencuri cookie pepatah saya dan memperbaikinya, jadi itu). Dengan 'o' dan '',
255 245 272 265 244 238228 byte. ganti +48 dengan * 79 + 32.Cobalah online!
Cara kerjanya:
Saya menggunakan sedikit pergeseran dan bitwise dan untuk menemukan apakah tempat harus jelas atau pip, kemudian mengimbangi 0 atau 1 ke nilai ASCII yang benar. itu kacau pada 4 dan 5, jadi mereka perlu diperbaiki. sebenarnya ditambahkan beberapa byte. dapat menghapus beberapa byte dengan menghapus topeng dan hanya menggunakan 1 (doh)
Terima kasih khusus kepada Tn. Xcoder untuk 7 byte lebih sedikit dengan menghapus kelebihan #define
Perubahan: menghapus memset -21 byte. redid logika bit untuk 6, 4, 2 untuk bergantung pada 8 | 4 & 2, 8 | 4, 8 | 4 | 2, masing-masing. -6 byte. menghapus baris baru ekstra dengan menggunakan put, bukan printf, yang juga lebih pendek. memperpendek array menjadi 11, menghapus tugas tambahan. -15 byte. SEKARANG saya pikir itu yang terbaik yang bisa saya lakukan.
sumber
'\n'
dapat digantikan oleh10
. (karena dalam C, tipe data char juga tipe data integer) Beberapachar
mungkin dapat diganti denganint
. (atau hilangkan seluruhnya)Jelly , 20 byte
Cobalah online!
Versi alternatif, keluaran asli,
333231 byteTerima kasih kepada @ user202729 untuk bermain golf 1 byte!
Cobalah online!
Bagaimana itu bekerja
Pertama,
“¤o.ƤẸʠṚ’
- integer literal dalam basis bijective 250 - menetapkan nilai kembali ke 1086123479729183 .Kemudian,
B¬
ubah nilai kembali ke biner dan ambil BUKAN logis dari setiap digit, menghasilkan arraySelanjutnya,
s5ŒB
bagi array menjadi potongan-potongan dengan panjang 5 , lalu memantulkan setiap potongan, mengubah abcde menjadi abcdedcba , menghasilkanSekarang,
ị@
mengambil kembali j th dan k th item array ini, di mana j, k adalah argumen pertama program. Perhatikan bahwa pengindeksan adalah berbasis 1 dan modular, sehingga elemen nol juga merupakan yang kesepuluh.Akhirnya, bagi
s€3
setiap potongan dengan panjang sembilan menjadi tiga potongan dengan panjang tiga.sumber
3
digunakan0
untuk pips, tidak1
seperti yang lainnya.“¤o.ƤẸʠṚ’
harus bekerja.Jelly , 13 byte
Cobalah online!
Menggabungkan ide Dennis menggunakan
ŒB
(bouncing) dalam jawaban ini dan pengamatan Xcali dalam jawaban ini untuk mendapatkan 13 byte.Jelly , 28 byte
(dengan pencetakan cantik)
Hanya sekarang saya tahu bahwa string string Jelly secara otomatis dihentikan ...
Cobalah online!
sumber
⁽½ÑD
mengarah ke bytecount kurang dari jawaban EriktheOutgolfer di“¤¦¢¬‘
siniPHP
155, 150 byteDibutuhkan array bilangan bulat sebagai input. Untuk pengujian:
Format output:
Lihat langsung di sini
Solusi saya
Untuk solusi saya, saya menggunakan matriks yang terdiri dari angka bitwise (kekuatan 2). Dapat divisualisasikan seperti ini:
Dan kemudian array penyimpanan yang terdiri dari posisi bit untuk pips dari setiap domino yang dikorelasikan oleh indeks bernomor:
Jadi hanya untuk memperjelas:
0
atau nilai0
akan menjadi domino kosong, yang selalu salah.1
atau nilai16
akan menjadi domino nomor satu dan dalam matriks yang ada di tengah16
.2
atau nilai68
akan menjadi domino nomor dua dan dalam matriks yang kanan atas4
dan kiri bawah64
atau4|64
5
atau nilai341
akan menjadi nomor lima domino dan dalam matriks itu1|4|16|64|256
9
atau nilai511
akan menjadi nomor sembilan domino dan dalam matriksnya adalah kombinasi dari semua bit.Setelah itu didirikan itu adalah hal yang cukup sederhana dari perulangan untuk 9 posisi dalam matriks, dan pengaturan
$x
untuk2
ke kekuasaan dari$i
Lalu kami melakukan sedikit demi sedikit dan
&
saat kami beralih melalui titik-titik itu. Jadi sebagai contoh sake akan menggunakan contoh 2 dari atas dan saya akan menggunakanx
spasi sebagai ganti demi kejelasan visual:68 & 1 ? 0 : 'x'
yang menghasilkan'x'
68 & 2 ? 0 : 'x'
yang menghasilkan'x'
68 & 4 ? 0 : 'x'
yang menghasilkan0
68 & 8 ? 0 : 'x'
yang menghasilkan'x'
68 & 16 ? 0 : 'x'
yang menghasilkan'x'
68 & 32 ? 0 : 'x'
yang menghasilkan'x'
68 & 64 ? 0 : 'x'
yang menghasilkan0
68 & 128 ? 0 : 'x'
yang menghasilkan'x'
68 & 256 ? 0 : 'x'
yang menghasilkan'x'
Ketika loop selesai kita berakhir dengan string ini
"xx0xxx0xx"
.Lalu kita tambahkan perbatasan
"---xx0xxx0xx"
ke sana (sebenarnya saya mulai dengan perbatasan, tapi apa pun) .Dan akhirnya kita chunk_split () pada 3's untuk:
Jangan ragu untuk memberi tahu saya apa yang Anda pikirkan.
sumber
**
diperkenalkan dalam PHP 5.6 alih-alihpow()
php.net/manual/en/language.operators.arithmetic.php^
tapi itu XOR bitwise ... lol$argv
. Fungsi overhead dalam PHP biasanya 13 byte.Perl 5 ,
107 7670+ 1 (= 70 byte-a
)Perl 5 , 70 byte
Cobalah online!
Menggunakan 0 untuk spasi putih dan 1 untuk pip. Metode yang cukup sederhana: amati bahwa ketika digit naik, sekali pip "on", itu tidak pernah padam, "kecuali digit yang ada di tengah. Di posisi tengah, aktif untuk semua nomor ganjil. Jadi, untuk setiap posisi, itu masalah sederhana memeriksa apakah digit lebih besar dari digit terakhir yang dimatikan. The
||0
menciptakan output ketika kondisi salah. Dalam Perl, false adalahundef
yang menghasilkan null.sumber
JavaScript (ES6),
7978 byteDisimpan 1 byte berkat @ETHproductions
Mengambil input dalam sintaks currying
(a)(b)
dan mengeluarkan domino ASCII vertikal.Demo
Tampilkan cuplikan kode
Versi horizontal,
8079 byteDisimpan 1 byte berkat @ETHproductions
Mengambil input sebagai array dari 2 bilangan bulat dan mengeluarkan domino ASCII horizontal.
Demo
Tampilkan cuplikan kode
sumber
n>d|0
atau(+d?n>d:n)&1
APL (Dyalog) , 25 byte
Cobalah online!
-2 Terima kasih kepada ngn .
Format output agak aneh: fungsi ini mengembalikan array berisi dua bentuk-3,3 array yang masing-masing berisi 0s dan 1s.
sumber
2∘|(3 3⍴⊢,,∘⌽)¨>∘3 5 1 7¨
C (gcc) , 115 byte
Cobalah online!
sumber
Javascript (ES6), 87 byte
sumber
Haskell - 88 karakter
Mengambil daftar dua angka yang menunjukkan wajah, mengembalikan daftar daftar bool. Tidak sesingkat itu tetapi saya menemukan solusinya menarik.
sumber
map
alih-alihrepeat
danzipWith
:map$(<$>[[(>4),(>5),(>1)],[(>7),odd,(>7)],[(>1),(>5),(>3)]]).map.flip($)
Coba online!Pip ,
32272421 byte-3 byte berkat @DLosc
Cobalah online!
Penjelasan:
sumber
3517
bukan daftar[3 5o7]
. ;)> <> , 57 + 3 = 60 byte
Cobalah secara Online . Output sebagai domino vertikal dengan 1s untuk titik, 0s untuk spasi putih dan 9s untuk pemisah seperti:
Secara teknis ini dapat diperpanjang hingga 12 nilai yang dimasukkan.
Versi lama:
> <> , 76 + 3 = 79 byte
Cobalah secara Online . Output sebagai domino vertikal dengan 1s untuk titik dan 0s untuk spasi putih seperti ini:
sumber
Arang ,
46444339 byteCobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:
Baca dua bilangan bulat dan petakan di tabel pencarian. Kemudian petakan hasilnya. (Ini secara efektif menangkap hasil sementara.)
Hasilnya kemudian dicetak secara implisit pada garis yang berbeda, dengan garis kosong ekstra di antara setiap wajah karena hasilnya bersarang.
Bergerak ke atas dan gambar garis pemisah di antara wajah.
Versi horisontal 43 byte sebelumnya:
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:
Bekerja secara vertikal.
Cetak garis pemisah.
Posisikan ke awal wajah pertama.
Baca dua bilangan bulat dan petakan di tabel pencarian.
Bersiaplah untuk menghasilkan hingga 9
o
detik.Tetapi mulailah kolom baru setiap tiga
o
s.Konversikan 5 bit lebih rendah dari kode ASCII ke biner, dan kemudian mirror output untuk 4
o
detik yang tersisa .sumber
Jelly , 16 byte
Cobalah online!
Menggunakan strategi Neil dan dekompresi dasar untuk menghasilkan nilai-nilai; output sebagai array biner. Mengambil daftar sebagai input.
Penjelasan:
sumber
APL + MENANG,
4947 byteDiedit sesuai komentar Adam, terima kasih, untuk menjalankan dengan nol asal indeks.
Meminta input layar sebagai vektor bilangan bulat satu untuk setiap wajah.
Outputnya berupa:
untuk input dari
7 3
dan0 5
Penjelasan:
sumber
⎕IO←0
untuk menyelamatkan diri sendiri1+
?Python 2 , 121 byte
Cobalah online!
Dikurangi menjadi 121 menggunakan lambda setelah kembali dan membaca kembali aturan. Sekarang menampilkan daftar baris.
Versi sebelumnya dengan output yang diformat dengan baik:
Python 2 ,
156153147141 byteCobalah online!
-3 dengan terima kasih kepada @NieDzejkob
Mengambil input sebagai 2 bilangan bulat dan output dalam format vertikal dengan 0 = spasi dan 1 = dot.
sumber
Pyt ,
220154 byteUpaya kedua (154 byte)
Penjelasan:
Upaya pertama (220 byte):
Penjelasan:
Cobalah online!
sumber
05AB1E , 34 byte
Cobalah online!
Ini sulit karena 05AB1E memiliki bantalan yang buruk.
Penjelasan dasar:
sumber
SmileBASIC,
9269 byteContoh:
Inilah yang terjadi ketika aturan Anda tidak cukup ketat.
sumber
FALSE,
116807870696663615958 bytemasih mengerjakan ini ...
sumber
Chip ,
142135 byteCobalah online!
Input adalah serangkaian digit. Menggunakan nol sebagai pips. Menarik pip untuk satu nomor, membaca byte input selanjutnya. Jika tidak ada byte berikutnya, akhiri, gambarkan pembagi dan lanjutkan untuk memulai.
Setiap
Z
(atauz
) sesuai dengan satu karakter output, mereka diposisikan untuk menembak secara berurutan dari atas ke bawah. The dikapitalisasiA
,B
,C
, danD
bersesuaian dengan rendah empat bit dari input (itu semua kita melihat, begitu"34" == "CD" == "st" ...
). Huruf kecil yangb
,d
,e
,f
sesuai dengan berbagai potongan-potongan output.Dapat membuat domino panjang tak terbatas juga; coba berikan
0123456789
sebagai masukan.sumber
PHP, 116 byte
membutuhkan PHP 5.5 atau yang lebih baru. Jalankan dengan
-nr
atau coba online .sumber
C (gcc) ,
150146 byteCobalah online!
sumber