Ketika saya masih muda, saya memiliki peta besar AS dipasang di dinding saya di seberang tempat tidur. Ketika saya bosan, saya akan menatap peta itu dan memikirkan hal-hal. Hal-hal seperti teorema empat warna, atau negara bagian yang berbatasan dengan sebagian besar negara bagian lainnya. Untuk menghemat tenaga otak saya dalam menghitung, Anda akan menciptakan mesin waktu dan memberi tahu saya berapa banyak negara yang membatasi input. Karena waktu itu rewel, ini perlu sesingkat mungkin.
Tugas
Diberikan salah satu dari 50 negara bagian AS, baik dengan nama lengkap atau singkatan posnya, seperti yang ditemukan di halaman ini ( archive.org mirror ), mengembalikan jumlah negara bagian yang berbatasan dengannya. Berikut ini adalah pemetaan semua input untuk nama negara lengkap ke jumlah negara bagian yang berdekatan, yang ditemukan di situs web ini .
Missouri, Tennessee -> 8
Colorado, Kentucky -> 7
Arkansas, Idaho, Illinois, Iowa, Nebraska, New York, Oklahoma, Pennsylvania, South Dakota, Utah, Wyoming -> 6
Arizona, Georgia, Massachusetts, Michigan, Minnesota, Nevada, New Mexico, Ohio, Virginia, West Virginia -> 5
Alabama, Indiana, Kansas, Maryland, Mississippi, Montana, North Carolina, Oregon, Texas, Wisconsin -> 4
California, Connecticut, Delaware, Louisiana, New Hampshire, New Jersey, North Dakota, Rhode Island, Vermont -> 3
Florida, South Carolina, Washington -> 2
Maine -> 1
Alaska, Hawaii -> 0
Aturan
- Program Anda dapat menangani nama negara lengkap atau kode pos - tidak dapat menggunakan kombinasi.
- Anda dapat menentukan kasus input, tetapi Anda tidak dapat menghapus spasi di input.
- Anda tidak harus menangani Washington, DC, atau apa pun yang bukan salah satu dari 50 negara.
- Jumlah negara yang berbatasan tidak termasuk negara input.
- Ini adalah kode-golf , jadi jawaban tersingkat dalam byte menang.
Meskipun saya tahu ini mungkin siapa saja yang memiliki kompresi terbaik atau menemukan pola regex terbaik per angka, jika saya mendapatkan terlalu banyak jawaban itu, saya akan memberikan hadiah untuk jawaban yang menghasilkan peta AS dan menggunakannya untuk menghitung jumlah negara yang berbatasan.
inb4
Built-inJawaban:
Jelly ,
7365 byteCobalah online!
Builtin? Siapa yang butuh itu? (
ʂÞiƬ
di tanah jijik).Mengambil input sebagai nama lengkap, seperti
"Idaho"
.Bagaimana itu bekerja
sumber
OS%168
di masing-masing negara bagian, yang langsung menghasilkan daftar. Saya menemukan konstanta 168 dengan memaksa semua kemungkinan kurang dari 250, memeriksa masing-masing untuk benar-benar dapat membedakan antara jumlah perbatasan yang berbeda.168
bekerja (di antara beberapa lainnya) dan memiliki manfaat tambahan hanya dengan memiliki48
nilai hard-code karena tabrakan.Mathematica,
112111 byte-5 byte terima kasih kepada Mark S. dan LegionMammal978 !
-22 byte (dan memperhatikan masalah dengan output) terima kasih kepada ngenisis !
Tentu saja, ada Mathematica bawaan untuk itu. Termasuk DC dalam hitungan.
sumber
AdministrativeDivision
sangat panjang sehingga Anda akan menyimpan byte dengan Panjang [x = "AdministrativeDivision" ~ Entity ~ StringDelete [""] @ # ~ ToExpression [x <> "Data"] ~ "BorderingStates"] &ToExpression
dapat diganti denganSymbol
, jika saya ingat dengan benar.AdministrativeDivisionData
, cukup"BorderingStates"
sebagai argumen untuk entitas; egEntity["AdministrativeDivision","Alaska"]["BorderingStates"]
Tr[1^...]
tempatLength@...
untuk menyimpan byte lain.JavaScript (ES6),
115113 byteSunting: menyimpan 2 byte dengan meminjam 2 optimisasi string lebih lanjut dari Langkah Hen Python jawab . Saya merindukan mereka pada upaya awal saya.
Mengambil kode pos sebagai input.
Bagaimana?
Argumen non-RegExp yang diteruskan ke
.match()
metode secara implisit dikonversi ke objek RegExp. Jadi, kami sedang menguji ekspresi reguler/.\D*{{input}}/
pada string kami yang dikodekan. Ini cocok dengan digit (1) , diikuti oleh 0 hingga N karakter non-digit, diikuti oleh input.Misalnya: jika inputnya adalah
"NH"
(New Hampshire), string yang cocok adalah"3CACTNDELANH"
. Kami hanya menyimpan karakter pertama dari string ini, atau kembali"6"
secara default jika tidak ada kecocokan.(1):
.
Sebenarnya cocok dengan karakter apa pun, tetapi string dibangun sedemikian rupa sehingga apa yang ditemukan sebelum sekelompok huruf selalu digit.Demo
Tampilkan cuplikan kode
Versi hash, 115 byte
Format input yang sama.
Demo
Tampilkan cuplikan kode
sumber
Python 3 ,
168154153137 byteCobalah online!
-4 byte terima kasih kepada isaacg
-10 byte berkat ETHProductions
-1 byte terima kasih kepada notjagen
Menyimpan lebih banyak byte dengan default ke enam, seperti jawaban yang telah dilakukan
TIO termasuk tes. Mengambil input sebagai kode pos. Menghasilkan daftar nama negara sebagai string untuk setiap set, disatukan bersama jika memungkinkan (misalnya,
WVVA
disimpan sebagaiWVA
). Fungsi lambda mendapatkan indeks dalam daftar yang stringnya berisi input. Mungkin ada cara saya tidak tahu tentang golf fungsi tubuh. Keluaran sebagai daftar yang berisi bilangan bulat - tambahkan[0]
ke ujung lambda ke keluaran sebagai bilangan bulat.sumber
l
satu kali, jadi sebaiknya Anda sebariskan.V , 143 byte
Cobalah online!
Hexdump:
Saya menulis ini sebelum saya menyadari Anda dapat mengambil input sebagai kode pos. Saya tidak yakin apakah itu sebenarnya lebih pendek atau tidak
:shrug:
. Jawaban ini menggunakan regex untuk mencari status tertentu, dan kemudian mengubah input ke nomor tertentu jika cocok. Namun, karena jumlah negara yang telah kami uji coba naik, pencarian terkecil yang dapat kami gunakan turun. Jadi misalnya, kami tidak dapat mencariC
karena itu akan cocokColorado
danCalifornia
. (Serta Conneticut dan The Carolinas) Namun, begitu kami telah menguji untuk setiap negara bagian yang memiliki lebih dari 3 batas, kami hanya dapat mencari dimulai dengan C karena tidak dapat cocok dengan yang sebelumnya lagi.Beberapa test case mungkin salah karena saya tidak punya waktu untuk menguji semuanya. Beri tahu saya jika Anda menemukan output yang salah. :)
sumber
JavaScript, 153 byte
Chaining variabel. Saya yakin ada cara yang lebih baik untuk melakukan ini.
Berkat saran dari seseorang dari Discord, output default menjadi 6, jumlah paling umum dari status berbatasan. 183 byte hingga 151 byte.
Seorang komentator menunjukkan bahwa ini gagal untuk AK dan HI, jadi saya telah menambahkan dua byte untuk memperbaiki masalah ini. 151 hingga 153 byte.
sumber
AK
danHI
karena0||6
mengevaluasi ke 6, yang merupakan output yang salah.05AB1E ,
7872 byteCobalah online!
Ini HANYA berfungsi karena urutan singkatan negara memungkinkan keadaan TIDAK terjadi dalam tumpang tindih antar negara:
Butuh beberapa saat untuk mendapatkan pengaturan yang benar ... Kemudian, dengan membagi input dan menghitung spasi di bagian pertama, kita mendapatkan hasil yang benar.
Jika saya mencuri "default ke 6" dari jawaban lain, saya mendapatkan 65 byte:
05AB1E , 65 byte
Cobalah online!
sumber
Took awhile to get the arrangement right
-> oh, saya pikir Anda bisa menyalinnya dari jawaban saya (jika saya membaca ini dengan benar)Retina ,
106105 byteCobalah online! Apakah ada yang mengatakan regex? Sunting: Disimpan 1 byte berkat @Arnauld.
sumber
JavaScript (ES6), 195 byte
Serangkaian ekspresi reguler, yang berfungsi atas nama lengkap negara.
Kasus uji:
Tampilkan cuplikan kode
sumber
Jelly ,
6159 byteProgram lengkap yang mengambil nama negara lengkap dan mencetak hasilnya (sebagai tautan monadik ia akan mengembalikan daftar yang berisi satu angka atau angka 6).
Cobalah online! atau lihat test suite .
Bagaimana?
adalah daftar indeks halaman kode:
dan ditampilkan sebagai
“ ... ‘
, di bawah ini:sumber
Excel VBA,
177154147 BytesFungsi VBE anonim yang mengambil input, dari tipe yang diharapkan
String
mewakili kode pos negara, dari rentang[A1]
, dan mengembalikanInteger
yang mewakili jumlah negara yang berbatasan dengan negara itu.Versi sebelumnya
154 Bytes:
177 Bytes:
Diformat agar mudah dibaca
sumber
Python 2,
363218 byteMari kita mulai dengan jawaban hardcode
sederhana yangsedikit dioptimalkan. Mengambil kode pos sebagai input.-145 byte berkat bfontaine.
sumber
dict(MO=8,TN=8,...)
alih-alih{'MO':8,'TN':8,...}
. Anda kemudian dapat menyimpan hampir 50 byte dengan menggunakan.get(a,6)
dan menghapus status yang membatasi 6 status lainnya. Saya bisa turun ke 219 dengan dua trik itu..
dan melakukansplit()
(saya pikir)dict((i[0]+i[1],int(i[-1])) for i in zip(*[iter("WA2WI4WV5FL2...")]*3))
. Juga Anda mungkin bisa meninggalkanint
itu jika diizinkan untuk memiliki output sebagai string.dict((a+b,int(c)) for a,b,c in zip(*[iter("WA2WI4WV5...")]*3))
. Maaf, saya agak bimbang: DPowerShell , 187 byte
Cobalah online!
Saya yakin ada cara yang lebih baik untuk melakukan ini, tetapi inilah pendekatan yang saya buat.
Mengambil input
$a
dan menggunakannya untuk mendapatkan.IndexOf
kemunculannya dalam rangkaian panjang kombinasi negara / perbatasan. Menyimpan ke dalam$x
dan string ke$b
dalam proses. Kemudian masuk keif
pernyataan yang memeriksa apakah menemukan kecocokan, dan jika demikian indeks ke digit laluexit
. Kalau tidak, kita adalah salah satu6
negara bagian atauAK
atauHI
, jadi kami melakukan beberapa logika untuk melihat apakah$a
salah satu0
negara bagian, dan kurangi jika perlu. Bagaimanapun, yang tersisa pada pipa dan output tersirat.sumber
Python 3, 729
733byteMengambil input sebagai singkatan pos. Ini adalah upaya pertama saya di tantangan golf, dan ini adalah yang terpendek yang saya pikir bisa saya dapatkan dengan pendekatan neraka ini. Saya tahu ini luar biasa - kalau dipikir-pikir saya mungkin akan lebih baik dengan
if-else
pernyataan, tetapi setelah semua waktu dan usaha saya harus mempostingnya: D.Saya baru sadar bahwa saya telah mengambil kemewahan dari nama variabel tiga huruf - turun 4 byte, 400 pergi!
sumber