Paradoks Banach – Tarski menyatakan bahwa, mengingat bola dalam ruang 3-dimensi, Anda dapat menguraikan bola menjadi sejumlah himpunan bagian himpunan titik yang terbatas. Kumpulan poin yang terpisah ini kemudian dapat disusun kembali untuk menghasilkan dua salinan bola awal. Anda kemudian, secara teoritis, memiliki dua bola yang identik.
Proses reassembly terdiri dari hanya memindahkan himpunan bagian himpunan poin yang disebutkan di atas dan memutarnya, sementara tidak mengubah bentuk spasial mereka. Ini dapat dilakukan dengan sedikitnya lima himpunan bagian yang terpisah.
Set disjoint tidak memiliki elemen umum dengan definisi. Di mana A
dan B
apakah ada dua himpunan bagian himpunan bola awal, unsur-unsur umum antara A
dan B
merupakan himpunan kosong. Ini ditunjukkan dalam persamaan berikut.
Untuk set disjoint di bawah ini, anggota biasa membentuk set kosong.
Tantangan
Tulis sebuah program yang dapat mengambil input "ball" ASCII, dan mengeluarkan "ball" duplikat.
Memasukkan
Berikut ini contoh bola input:
##########
###@%$*.&.%%!###
##!$,%&?,?*?.*@!##
##&**!,$%$@@?@*@&&##
#@&$?@!%$*%,.?@?.@&@,#
#,..,.$&*?!$$@%%,**&&#
##.!?@*.%?!*&$!%&?##
##!&?$?&.!,?!&!%##
###,@$*&@*,%*###
##########
Setiap sphere diuraikan oleh tanda-tanda pound ( #
) dan diisi dengan tesis karakter: .,?*&$@!%
. Setiap input akan berukuran 22x10 karakter (lebar dengan tinggi).
Membuat Duplikat
Pertama, setiap titik di dalam bola diberi titik bernomor berdasarkan indeks di .,?*&$@!%
. Berikut adalah contoh di atas, setelah diberi nomor:
##########
###7964151998###
##86295323431478##
##5448269677374755##
#75637896492137317572#
#21121654386679924455#
##1837419384568953##
##85363518238589##
###2764574294###
##########
Kemudian, setiap titik digeser ke atas satu (sembilan ke satu):
##########
###8175262119###
##97316434542589##
##6559371788485866##
#86748917513248428683#
#32232765497781135566#
##2948521495679164##
##96474629349691##
###3875685315###
##########
Akhirnya, setiap nilai poin baru dikonversi kembali ke karakter terkait:
##########
###!.@&,$,..%###
##%@?.$*?*&*,&!%##
##$&&%?@.@!!*!&!$$##
#!$@*!%.@&.?,*!*,!$!?#
#?,,?,@$&*%@@!..?&&$$#
##,%*!&,.*%&$@%.$*##
##%$*@*$,%?*%$%.##
###?!@&$!&?.&###
##########
Keluaran
Kedua bola ini kemudian dikeluarkan berdampingan, dalam bentuk ini (dipisahkan oleh empat spasi di garis katulistiwa):
########## ##########
###@%$*.&.%%!### ###!.@&,$,..%###
##!$,%&?,?*?.*@!## ##%@?.$*?*&*,&!%##
##&**!,$%$@@?@*@&&## ##$&&%?@.@!!*!&!$$##
#@&$?@!%$*%,.?@?.@&@,# #!$@*!%.@&.?,*!*,!$!?#
#,..,.$&*?!$$@%%,**&&# #?,,?,@$&*%@@!..?&&$$#
##.!?@*.%?!*&$!%&?## ##,%*!&,.*%&$@%.$*##
##!&?$?&.!,?!&!%## ##%$*@*$,%?*%$%.##
###,@$*&@*,%*### ###?!@&$!&?.&###
########## ##########
Catatan: Menggeser nilai titik, dan karakter yang lebih baru, adalah simbol dari rotasi yang dilakukan untuk memasang kembali subset titik (pengelompokan karakter).
Jawaban:
Pyth, 21 byte
Cobalah online: Demonstrasi
Akhirnya sebuah use case untuk
.r
.Penjelasan
Loop infinite terputus, ketika tidak ada lagi input yang tersedia.
sumber
Ruby, 65
Berfungsi bagus ketika input diambil dari file alih-alih stdin:
Di sisi lain, jika Anda suka mengetik bola ke stdin secara manual, dan ingin hasilnya di akhir, coba versi 67 byte ini:
sumber
Matlab, 120
Matlab bukan bahasa terbaik untuk menangani string.
\n
selalu dianggap sebagai dua karakter, yang cukup menjengkelkan, dan Anda tidak bisa hanya membuat matriks dari string baris-break (line-broken?), Anda harus melakukannya secara manual. Setidaknya saya tidak perlu peduli dengan ukuran / padding karena setiap baris memiliki panjang yang sama persis.Input Contoh:
Contoh output:
PS: Kalau saya bisa berasumsi input seperti ini:
Saya hanya perlu 88 karakter:
sumber
Ruby, 102
Pada dasarnya, itu hanya memanggil
tr
inputsumber
sed (39 byte)
sumber
CJam, 28 byte
Cobalah online
Penjelasan:
sumber
Python 3.5,
968988 bytePython 3.3,
1039695 bytePenjelasan
Python 3.3 dan 3.5 didaftar secara terpisah karena cara
input()
menangani baris baru di IDLE berubah. Ini terjadi untuk menghemat 8 byte, yang keren.Catatan tentang eksekusi: gunakan IDLE. Jika Anda menggunakan terminal, maka solusi untuk 3.3 sama dengan 3.5, tetapi keduanya menghubungkan input dengan output.
Saya membalik string simbol
s
untuk mengambil keuntungan dari pengindeksan negatif Python. Kemudian untuk setiap baris dalam input, saya mengeluarkannya, dua spasi, dan baris dengan masing-masing simbol diganti dengan simbol sebelumnya. Alasan saya hanya menempatkan dua spasi adalah karena saya menggunakan,
alih-alih+
, yang menambahkan spasi pada hasil cetakan. Ini (,' ',
) menyelamatkan saya lebih dari satu byte+' '*4+
.Terima kasih kepada xsot karena telah menyelamatkan saya
78 byte. Saya mengubahs.find
untuks.rfind
mengizinkan saya untuk menempatkan spasi dan hash ke dalams
, sehingga menghilangkan kebutuhan untuk melakukan pemeriksaany in s
. Plus, ruang telah disimpan. EDIT: diubah kembali kes.find
karena kehadiran##
sekarang memungkinkan saya+1
tanpa khawatir tentang kesalahan indeks-out-of-bounds.sumber
input()
berubah? Saya tidak dapat menemukan perbedaan antara dokumentasi 3.4 dan 3.5 .Retina ,
4539 byteUntuk menjalankan kode dari satu file, gunakan
-s
bendera.Tahap pertama menduplikasi setiap baris, dipisahkan oleh
" ; "
, untuk mendapatkanKemudian tahap kedua hanya mempengaruhi karakter yang ditemukan dalam pertandingan
;.*
, yaitu hanya bagian kedua dari setiap baris. Karakter-karakter tersebut kemudian ditransliterasi melalui korespondensi berikutDi mana 9 pasangan pertama "menambah" karakter dalam bola dan pasangan terakhir mengubah titik koma ke ruang lain.
sumber
Python 2, 77 byte
sumber
Perl, 59 byte
Kode 56 byte ditambah 3 byte karena
-p
ini perlu disimpan ke file.Contoh penggunaan:
sumber
05AB1E (warisan) , 21 byte
Menggunakan versi lawas 05AB1E, karena dimungkinkan untuk menggunakan filter
ʒ
dengan implisity
sebagai foreach untuk mencetak, sedangkan dengan versi baru yang sebenarnya untuk setiap loopv
dengan eksplisity
harus digunakan, yaitu 1 byte lebih lama.Cobalah online.
Penjelasan:
Di sini versi yang juga berfungsi di versi baru 05AB1E (kredit ke @Grimy ):
05AB1E , 21 byte
Cobalah online.
Penjelasan:
sumber
TFD?4ú".,?*&$@!%"DÀ‡,
(input dijamin tepat 10 baris).₂j
adalah alternatif yang bagus (walaupun byte yang sama) untuk4ú
, karena lebar dijamin menjadi 26 karakter. :)