Hadiah telah dibuka. Kue pai telah dimakan. Star Wars telah ditonton. Musim Natal mulai reda. Sekarang Anda mungkin telah menarik beberapa Kerupuk Natal . Jika Anda beruntung, alih-alih mainan plastik biasa yang tidak berguna, Anda mungkin telah memenangkan Kalkulator Misteri yang dengannya Anda dapat memukau teman dan kerabat Anda .
Trik ini terdiri dari 6 kartu masing-masing dengan kotak angka 4x8 dicetak di atasnya. Setiap kartu berisi subset integer yang berbeda [1,63]
. Pesulap akan meminta Anda untuk memilih nomor dari satu kartu dan merahasiakan nomor itu. Pesulap kemudian akan bertanya kartu mana yang memiliki nomor itu. Dengan pengetahuan itu, pesulap akan secara ajaib dapat menentukan dan mengungkapkan nomor asli yang ditebak.
Keluarkan set lengkap 6 kartu Kalkulator Misteri persis seperti berikut:
1 3 5 7 9 11 13 15
17 19 21 23 25 27 29 31
33 35 37 39 41 43 45 47
49 51 53 55 57 59 61 63
- - - - - - - - - - -
2 3 6 7 10 11 14 15
18 19 22 23 26 27 30 31
34 35 38 39 42 43 46 47
50 51 54 55 58 59 62 63
- - - - - - - - - - -
4 5 6 7 12 13 14 15
20 21 22 23 28 29 30 31
36 37 38 39 44 45 46 47
52 53 54 55 60 61 62 63
- - - - - - - - - - -
8 9 10 11 12 13 14 15
24 25 26 27 28 29 30 31
40 41 42 43 44 45 46 47
56 57 58 59 60 61 62 63
- - - - - - - - - - -
16 17 18 19 20 21 22 23
24 25 26 27 28 29 30 31
48 49 50 51 52 53 54 55
56 57 58 59 60 61 62 63
- - - - - - - - - - -
32 33 34 35 36 37 38 39
40 41 42 43 44 45 46 47
48 49 50 51 52 53 54 55
56 57 58 59 60 61 62 63
Keluaran mungkin mengandung atau mungkin tidak mengandung satu baris akhir baru. Tidak boleh ada spasi spasi tambahan. Setiap kartu dipisahkan oleh 11 -
perforasi.
- md5sum dengan baris terakhir:
7aa2d9339b810ec62a2b90c5e11d6f4a
- md5sum tanpa baris baru final:
e9abe4e32dca3e8fbfdaa4886fc5efd2
Bagi Anda yang lebih dari orientasi windows, saya juga akan membiarkan CRLF
ujung garis gaya. Dalam hal ini, md5s adalah:
- md5sum dengan baris terakhir:
e4f16ff9752eee2cedb5f97c7b5aec6d
- md5sum tanpa baris baru final:
78c560eed3b83513e3080117ab5dc5fa
sumber
Jawaban:
Python 2 ,
99969391 byteKeluar dengan kesalahan, yang diizinkan secara default .
Cobalah online! atau memverifikasi hash MD5 .
Bagaimana itu bekerja
Setelah menginisialisasi k sebagai 1 , kita memasukkan infinite loop yang mengeksekusi kode berikut.
tuple(n for n in range(64)if k&n)
membuat tuple dari semua bilangan bulat non-negatif di bawah 64 yang memiliki bit set j th , di mana j adalah jumlah iterasi dari loop, yaitu, 2 j = k .('%2d '*7+'%2d\n')*4
pertama-tama membuat string format'%2d %2d %2d %2d %2d %2d %2d \n'
, kemudian mengulanginya empat kali. Ini adalah templat untuk setiap kartu, yang membungkus masing-masing bilangan bulat dalam tuple ke dua karakter (spasi yang ditentukan sebelumnya), memisahkan masing-masing kelompok 8 bilangan bulat dengan spasi, dan kelompok-kelompok itu sendiri dengan umpan garis.Sekarang, pernyataan Python 2
print
adalah binatang yang aneh. Dibutuhkan beberapa ekspresi, dipisahkan oleh komata, dan mencetaknya satu per satu. Ini mengevaluasi ekspresi pertama, mencetaknya, mengevaluasi ekspresi berikutnya, mencetaknya, dll. Sampai tidak ada lagi ekspresi yang tersisa. Kecuali jika ekspresi terakhir diikuti oleh koma, itu menambahkan umpan baris ke sana. Juga, ini memberi spasi pada semua ekspresi, kecuali jika dicetak pada awal baris.Di setiap iterasi, pertama-tama kita mencetak hasil menerapkan string format ke tuple. Kami berada di awal garis, jadi tidak ada ruang yang ditambahkan.
Kemudian, kami (berupaya) mencetak hasil
11/(k<32)*' -'
. Jika k <32 , ekspresi ini dievaluasi menjadi' - - - - - - - - - - -'
. Sekali lagi, kita berada di awal sebuah garis, jadi tidak ada ruang yang ditambahkan. Tidak ada koma setelah ekspresi ini, jadiprint
tambahkan linefeed. Namun, dalam iterasi keenam, k = 2 5 = 32 , jadi mencoba mengevaluasi11/(k<32)*' -'
menimbulkan ZeroDivisionError yang tidak tertangkap . Ini keluar dari loop dan mengakhiri program dengan segera.sumber
C (gcc), 105 byte
sumber
Python 2, 132 byte
Membagi urutan sangat mengganggu di Python.
Cobalah online .
sumber
Jelly ,
2726 byteCobalah online! atau memverifikasi hash MD5 .
Bagaimana itu bekerja
sumber
G
builtin secara serius dikalahkan untuk tantangan ini. Saya membutuhkan sekitar 10 byte untuk melakukan hal yang sama.Pip ,
494844 byte43 byte kode, +1 untuk
-S
bendera.Cobalah online!
Penjelasan
sumber
Ruby, 90 byte
Tidak disatukan
Cukup mudah. Satu-satunya hal yang mungkin memerlukan penjelasan tambahan adalah kapan harus mengikuti nomor dengan baris baru daripada spasi. Ini terjadi ketika
j+1%16==0
dalam empat kartu pertama danj+1%8
== 0 dalam dua kartu terakhir. Oleh karena itu ekspresi15>>i/64/4
atau yang setara15>>i/256
adalah AND denganj
untuk menentukan apakah ruang atau baris baru diperlukan.sumber
JavaScript (ES6), 150 byte
sumber
Perl 6 ,
194 11686 byteCobalah
Cobalah
Cobalah
(periksa bagian Debug untuk hasil MD5)
Dua yang terakhir terinspirasi / ditranskripsi dari implementasi Ruby dan C
sumber
05AB1E , 71 byte
Cobalah online!
Pendekatan ini, jangan coba-coba. Kemungkinan besar akan menghapus ini karena rasa malu. Manipulasi matriks bukanlah setelan kuat saya, jadi saya mencoba dengan brute force menghasilkan semua 6 urutan dan kemudian memompa mereka bersama-sama dengan sembrono.
sumber
Batch, 249 byte
Menghasilkan CRLF tambahan.
sumber
JavaScript (ES6),
103102 byteMD5: 7AA2D9339B810EC62A2B90C5E11D6F4A
Uji
Tampilkan cuplikan kode
sumber
utilitas bash / Unix,
125124 byteSunting: Menghapus ^ yang tidak perlu dari regex di akhir; regex akan selalu cocok pada awal baris.
sumber
PHP, 102 byte
mencetak baris baru yang memimpin tetapi tidak ada yang tertinggal, dan satu spasi di setiap baris. Jalankan dengan
-nr
atau coba online .Untuk PHP <5.6, ganti
2**$c
dengan(1<<$c)
. PHP 5.5 bisa digunakan&~1<<$c?:
sebagai gantinya%2**$c||
.Untuk PHP <5.5, ganti
"\n"[$n++%8]
dengan($n++%8?"":"\n")
.Tanda hubung adalah satu karakter mati karena ruang terdepan; tambahkan spasi ke yang pertama
str_pad
parameter (masukkan spasi sebelum baris kode kedua) untuk diperbaiki.Menghapus ruang terdepan sebagai gantinya membutuhkan beberapa mengutak-atik dan tiga byte tambahan:
printf("%c%2d",$n++%8?32:10,++$b%64);
dan23
bukannya25
.Mengubah baris baru menjadi baris tambahan akan membutuhkan tiga byte lagi:
PHP, 109 byte
cocok dengan semua spesifikasi dan berfungsi dengan semua versi PHP.
sumber
Python 2 , 89 byte
Cobalah online!
Penjelasan:
sumber
05AB1E , 29 byte
Port dari @Emigna 's 05AB1E menjawab di sini , setelah itu saya menambahkan kode tambahan untuk mencetaknya sesuai dengan persyaratan dalam tantangan ini.
Cobalah online atau verifikasi md5sum .
Penjelasan:
sumber
JavaScript, 234 byte.
Saya akan menulis penjelasan nanti.
Jika
console.log
diperlukan, jumlah byte akan 247 byte.sumber