Tujuan
Diberikan string dengan kereta hash, hitung panjang totalnya dan bagi dengan jarak dari awal hingga selesai.
Simulasi
Apa yang kita simulasikan? Menurut makalah ini , perbandingan panjang sungai dengan jarak antara awal dan akhir adalah sekitar Pi! (Ini mungkin telah dibantah secara empiris, tetapi saya dapat menemukan data dan untuk tantangan ini kita akan menganggap itu benar).
Bagaimana kita mensimulasikan ini?
- Ambil input string spasi dan hash
- Setiap hash akan memiliki dua lainnya yang berdekatan dengannya
- Dengan pengecualian hash pertama dan terakhir yang hanya memiliki 1
- Setiap karakter terletak pada titik kisi
(x, y)
x
adalah indeks karakter di barisnya- mis.
c
adalah karakter ke 4 di0123c567
- mis.
y
adalah nomor baris karakter- misal
c
ada di baris ke-3:
- misal
0line
1line
2line
3c...
- Jumlah jarak antara hash yang berdekatan, sebut saja
S
- Ambil jarak antara hash pertama dan terakhir, sebut saja
D
- Kembali
S/D
Spesifikasi
- Memasukkan
- Fleksibel, ambil input dengan cara standar apa pun (mis. Parameter fungsi, STDIN) dan dalam format standar apa pun (mis. String, Binary)
- Keluaran
- Fleksibel, memberikan hasil dengan cara standar apa pun (mis. Mengembalikan, mencetak)
- Ruang putih, trailing dan ruang putih utama dapat diterima
- Akurasi, harap berikan setidaknya 4 tempat desimal akurasi (yaitu
3.1416
)
- Mencetak gol
- Kode terpendek menang!
Uji Kasus
Ini adalah perkiraan saya tentang sungai. Perkiraan saya mungkin buruk atau ini contoh populasi saya yang miskin. Juga, saya melakukan perhitungan ini dengan tangan; Aku bisa saja salah menghitung.
### ####
# # #
# # #
# # #
# # #
# # #
## # # #####
## # #
##
1.6519
#
#
#
#
#
#
#
#
# #
# # #
# #
#
##
#
#
#
#
#
#
#
#
# #
# ##
#
#
#
#
#
#
#
#
#
#
#
1.5498
###
# #
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
###
#
#
#
#
#
#
#
#
#
##
#
#
##
##
##
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
####
#
#
1.5257
TL; DR
Tantangan-tantangan ini adalah simulasi algoritma yang hanya membutuhkan alam dan otak Anda (dan mungkin beberapa sumber daya yang dapat digunakan kembali) untuk memperkirakan Pi. Jika Anda benar-benar membutuhkan Pi selama kiamat zombie, metode ini tidak membuang - buang amunisi ! Ada sembilan tantangan total.
#<tag>
Jawaban:
MATL ,
4844423733 byteCukup banyak byte yang disimpan berkat ide rahnema1 (jawaban oktaf) untuk meruntuhkan dua konvolusi menjadi satu
Ini mengambil input sebagai matriks biner, dengan
;
pemisah baris.1
sesuai dengan hash dan0
ruang.Cobalah online! Atau verifikasi semua kasus uji .
Berikut ini adalah konverter format yang mengambil input sebagai array char 2D (sekali lagi, dengan
;
sebagai pemisah) dan menghasilkan representasi string dari matriks biner yang sesuai.Penjelasan
Ini sangat menyenangkan! Kode ini menggunakan
tigadua konvolusi 2D, masing-masing untuk tujuan yang berbeda:Untuk mendeteksi tetangga vertikal dan horizontal, yang berkontribusi jarak
1
, masker yang diperlukan adalahTetapi kami hanya ingin setiap pasangan tetangga terdeteksi satu kali. Jadi kami mengambil setengah topeng (dan baris nol terakhir dapat dihilangkan):
Demikian pula, untuk mendeteksi tetangga diagonal, yang berkontribusi jarak
sqrt(2)
, topeng itutetapi dengan alasan yang sama seperti di atas menjadi
Jika topeng ini dikalikan dengan
sqrt(2)
dan ditambahkan ke yang pertama, kedua konvolusi dapat diganti oleh satu konvolusi dengan mask gabunganTitik awal dan titik akhir, menurut definisi, adalah titik dengan hanya satu tetangga. Untuk mendeteksi mereka, kami berbelit-belit
dan lihat poin mana yang memberi
1
sebagai hasil.Untuk menghasilkan topeng gabungan dari item 1, lebih pendek untuk menghasilkan kuadrat dan kemudian mengambil akar kuadrat. Topeng dalam item 2 adalah literal yang sudah ditentukan sebelumnya.
sumber
Oktaf, 99 byte
metode yang hampir sama dengan jawaban MATL tetapi di sini kernel konvolusi
itu
sqrt(2) =1.41
untuk tetangga diagonal dan1
untuk tetangga langsung sehingga ketika kita menjumlahkan nilai hasil di atas sungai kita mendapatkan dua kali jarak nyata.versi tanpa ungolfed :
Coba (tempel) di Octave Online
sumber
{[x y]=find(c<2&c>0),pdist([x y])}{2}
sangat pintar !!!JavaScript (ES6), 178
Input sebagai string dengan baris baru dalam bentuk persegi panjang : setiap baris diisi dengan spasi dengan panjang yang sama (seperti pada contoh)
Kurang golf
Uji
sumber