Singkat negara bagian AS itu! menyenangkan, tetapi kami belajar bahwa menyingkat nama negara bagian AS secara efisien sulit dilakukan dengan sistem saat ini. Mari kita datang dengan skema kode negara alternatif untuk bermain golf yang efisien.
Tugas Anda:
Tulis fungsi (atau program) yang, diberi nama negara bagian AS yang valid (hanya diperlukan 50 negara bagian normal), mengembalikan kode dua huruf unik dalam huruf besar yang mengidentifikasinya. Kode harus memenuhi persyaratan ini:
- Huruf pertama harus sama dengan huruf pertama negara.
- Huruf kedua harus merupakan salah satu huruf lain dari negara bagian (bukan spasi).
- Itu harus selalu memberikan output yang sama untuk input yang sama, dan tidak boleh memberikan output yang sama untuk dua input valid berbeda.
Misalnya, mengingat "Alabama", fungsi Anda dapat mengembalikan "AL", "AA", "AB" atau "AM" - selama itu tidak mengembalikan nilai itu untuk Alaska, Arkansas, dll. ("AA "hanya mungkin karena" A "muncul lebih dari satu kali dengan nama negara.)
Celah standar dilarang. Input / output standar ok. Ini adalah kode golf, jadi solusi terpendek, dalam byte, menang.
Daftar lengkap kemungkinan input ada di sini:
Alabama
Alaska
Arizona
Arkansas
California
Colorado
Connecticut
Delaware
Florida
Georgia
Hawaii
Idaho
Illinois
Indiana
Iowa
Kansas
Kentucky
Louisiana
Maine
Maryland
Massachusetts
Michigan
Minnesota
Mississippi
Missouri
Montana
Nebraska
Nevada
New Hampshire
New Jersey
New Mexico
New York
North Carolina
North Dakota
Ohio
Oklahoma
Oregon
Pennsylvania
Rhode Island
South Carolina
South Dakota
Tennessee
Texas
Utah
Vermont
Virginia
Washington
West Virginia
Wisconsin
Wyoming
Jawaban:
Jelly ,
1312 byteTautan monadik yang mengambil dan mengembalikan daftar karakter.
Cobalah online! atau lihat test suite
Bagaimana?
Pengindeksan dalam Jelly adalah 1-diindeks dan modular, sehingga 907 th indeks sesuatu panjang L adalah (907-modulo-L) th barang. Misalnya untuk "Alabama" panjangnya adalah 7 sehingga item pada indeks 907 adalah (907-modulo-7) ke-th , dan 907-modulo-7 adalah 4 (907 = 129 * 7 + 4 ), jadi item pada indeks 907 adalah 'b'.
907 adalah indeks positif pertama di mana singkatan negara menggunakan indeks 1 dan indeks di atas semua 50 negara menjadi unik.
Nama negara, termasuk spasinya, memiliki panjang 4 hingga 14 inklusif, dan 907-modulo-6 adalah 1 (sedangkan untuk semua panjang lainnya nilainya tidak 1). Ini berarti bahwa jika kita menggunakan karakter ke-1 dan ke-907 untuk singkatan bahwa Alaska, Hawaii, Kansas, Nevada, dan Oregon masing-masing akan menjadi AA, HH, KK, NN, dan OO - ini tidak dapat diterima untuk Hawaii, Kansas, atau Nevada; jadi penyesuaian perlu dilakukan; ini adalah alasan untuk penggabungan, de-duplikasi, menuju ke indeks 2 dan urutkan, ini membuat Alaska, Hawaii, Kansas, Nevada, dan Oregon menjadi AL, HA, KA, NA dan OR masing-masing dan tidak bertabrakan dengan singkatan negara yang ada .
sumber
Ruby, 34 byte
Saya mulai dengan
s[0]+s*99999[x].upcase
dan menemukan banyak nilai x hingga x = 100000 yang mengembalikan kode unik untuk semua 50 negara. Sayangnya mereka semua memiliki kasus di mana huruf kedua singkatan adalah huruf pertama dari negara yang digandakan, yang tidak diperbolehkan (kecuali jika huruf itu muncul dua kali dalam nama negara.) Jadi saya memutuskan untuk menggunakan ekspresis[0]+s[1,8]*999[x]
dan menemukan nilai terkecil dari x yang berhasil adalah 445.Berkomentar di program pengujian, dan output
sumber
The second letter must be one of the other letters of the state.
AA untuk Alabama baik-baik saja karena Alabama memiliki dua A. KK baik-baik saja untuk Kentucky tetapi tidak untuk Kansas misalnya.Python 2 , 39 byte
Cobalah online!
Python 2 , 39 byte
Cobalah online!
sumber
JavaScript (ES6), 46 byte
Demo
Tampilkan cuplikan kode
sumber
Retina ,
4946 byteCobalah online! Jika negara berisi huruf besar kedua, atau salah satu huruf
flmpxz
, maka itu menjadi huruf kedua dari kode. Kalau tidak, jika itu berisi salah satu hurufhru
, maka itu menjadi huruf kedua dari kode, jika tidak gunakan saja dua huruf pertama dari negara.sumber
JavaScript (ES6), 52 byte
Tampilkan cuplikan kode
JavaScript (ES6), 52 byte
Tampilkan cuplikan kode
sumber