Diberikan string sebagai input, output negara AS yang modalnya adalah jika itu adalah modal negara, modal negara jika itu adalah negara, atau Arstotzka
jika tidak.
Contoh:
Austin -> Texas
Alaska -> Juneau
The Nineteenth Byte -> Arstotzka
Semua ibukota dan negara bagiannya masing-masing:
Baton Rouge, Louisiana
Indianapolis, Indiana
Columbus, Ohio
Montgomery, Alabama
Helena, Montana
Denver, Colorado
Boise, Idaho
Austin, Texas
Boston, Massachusetts
Albany, New York
Tallahassee, Florida
Santa Fe, New Mexico
Nashville, Tennessee
Trenton, New Jersey
Jefferson, Missouri
Richmond, Virginia
Pierre, South Dakota
Harrisburg, Pennsylvania
Augusta, Maine
Providence, Rhode Island
Dover, Delaware
Concord, New Hampshire
Montpelier, Vermont
Hartford, Connecticut
Topeka, Kansas
Saint Paul, Minnesota
Juneau, Alaska
Lincoln, Nebraska
Raleigh, North Carolina
Madison, Wisconsin
Olympia, Washington
Phoenix, Arizona
Lansing, Michigan
Honolulu, Hawaii
Jackson, Mississippi
Springfield, Illinois
Columbia, South Carolina
Annapolis, Maryland
Cheyenne, Wyoming
Salt Lake City, Utah
Atlanta, Georgia
Bismarck, North Dakota
Frankfort, Kentucky
Salem, Oregon
Little Rock, Arkansas
Des Moines, Iowa
Sacramento, California
Oklahoma City, Oklahoma
Charleston, West Virginia
Carson City, Nevada
Aturan
- Tidak ada built-in atau perpustakaan / modul yang menyediakan pemetaan dari negara ke ibukota atau ibukota ke negara, atau daftar ibukota dan / atau negara (misalnya,
CityData
built-in Mathematica )
- Celah standar berlaku
- Ini kode-golf , jadi jawaban tersingkat dalam byte menang!
Papan peringkat
Cuplikan Stack di bagian bawah posting ini menghasilkan leaderboard dari jawaban a) sebagai daftar solusi terpendek per bahasa dan b) sebagai leaderboard keseluruhan.
Untuk memastikan bahwa jawaban Anda muncul, silakan mulai jawaban Anda dengan tajuk utama, menggunakan templat Penurunan harga berikut:
## Language Name, N bytes
di mana N
ukuran kiriman Anda. Jika Anda meningkatkan skor Anda, Anda bisa menyimpan skor lama di headline, dengan mencoretnya. Contohnya:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Jika Anda ingin memasukkan beberapa angka dalam tajuk Anda (mis. Karena skor Anda adalah jumlah dari dua file atau Anda ingin membuat daftar hukuman penterjemah secara terpisah), pastikan bahwa skor sebenarnya adalah angka terakhir di tajuk:
## Perl, 43 + 2 (-p flag) = 45 bytes
Anda juga dapat membuat nama bahasa menjadi tautan yang kemudian akan muncul di cuplikan:
## [><>](http://esolangs.org/wiki/Fish), 121 bytes
<style>body { text-align: left !important} #answer-list { padding: 10px; width: 290px; float: left; } #language-list { padding: 10px; width: 290px; float: left; } table thead { font-weight: bold; } table td { padding: 5px; }</style><script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="language-list"> <h2>Shortest Solution by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr> </thead> <tbody id="languages"> </tbody> </table> </div> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr> </thead> <tbody id="answers"> </tbody> </table> </div> <table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr> </tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr> </tbody> </table><script>var QUESTION_ID = 64254; var ANSWER_FILTER = "!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe"; var COMMENT_FILTER = "!)Q2B_A2kjfAiU78X(md6BoYk"; var OVERRIDE_USER = 45941; var answers = [], answers_hash, answer_ids, answer_page = 1, more_answers = true, comment_page; function answersUrl(index) { return "https://api.stackexchange.com/2.2/questions/" + QUESTION_ID + "/answers?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + ANSWER_FILTER; } function commentUrl(index, answers) { return "https://api.stackexchange.com/2.2/answers/" + answers.join(';') + "/comments?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + COMMENT_FILTER; } function getAnswers() { jQuery.ajax({ url: answersUrl(answer_page++), method: "get", dataType: "jsonp", crossDomain: true, success: function (data) { answers.push.apply(answers, data.items); answers_hash = []; answer_ids = []; data.items.forEach(function(a) { a.comments = []; var id = +a.share_link.match(/\d+/); answer_ids.push(id); answers_hash[id] = a; }); if (!data.has_more) more_answers = false; comment_page = 1; getComments(); } }); } function getComments() { jQuery.ajax({ url: commentUrl(comment_page++, answer_ids), method: "get", dataType: "jsonp", crossDomain: true, success: function (data) { data.items.forEach(function(c) { if (c.owner.user_id === OVERRIDE_USER) answers_hash[c.post_id].comments.push(c); }); if (data.has_more) getComments(); else if (more_answers) getAnswers(); else process(); } }); } getAnswers(); var SCORE_REG = /<h\d>\s*([^\n,<]*(?:<(?:[^\n>]*>[^\n<]*<\/[^\n>]*>)[^\n,<]*)*),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/; var OVERRIDE_REG = /^Override\s*header:\s*/i; function getAuthorName(a) { return a.owner.display_name; } function process() { var valid = []; answers.forEach(function(a) { var body = a.body; a.comments.forEach(function(c) { if(OVERRIDE_REG.test(c.body)) body = '<h1>' + c.body.replace(OVERRIDE_REG, '') + '</h1>'; }); var match = body.match(SCORE_REG); if (match) valid.push({ user: getAuthorName(a), size: +match[2], language: match[1], link: a.share_link, }); else console.log(body); }); valid.sort(function (a, b) { var aB = a.size, bB = b.size; return aB - bB }); var languages = {}; var place = 1; var lastSize = null; var lastPlace = 1; valid.forEach(function (a) { if (a.size != lastSize) lastPlace = place; lastSize = a.size; ++place; var answer = jQuery("#answer-template").html(); answer = answer.replace("{{PLACE}}", lastPlace + ".") .replace("{{NAME}}", a.user) .replace("{{LANGUAGE}}", a.language) .replace("{{SIZE}}", a.size) .replace("{{LINK}}", a.link); answer = jQuery(answer); jQuery("#answers").append(answer); var lang = a.language; lang = jQuery('<a>'+lang+'</a>').text(); languages[lang] = languages[lang] || {lang: a.language, lang_raw: lang.toLowerCase(), user: a.user, size: a.size, link: a.link}; }); var langs = []; for (var lang in languages) if (languages.hasOwnProperty(lang)) langs.push(languages[lang]); langs.sort(function (a, b) { if (a.lang_raw > b.lang_raw) return 1; if (a.lang_raw < b.lang_raw) return -1; return 0; }); for (var i = 0; i < langs.length; ++i) { var language = jQuery("#language-template").html(); var lang = langs[i]; language = language.replace("{{LANGUAGE}}", lang.lang) .replace("{{NAME}}", lang.user) .replace("{{SIZE}}", lang.size) .replace("{{LINK}}", lang.link); language = jQuery(language); jQuery("#languages").append(language); } }</script>
Jawaban:
Pyth,
597596590Hexdump di atas dapat dibalik dengan
xxd -r -c 17
. Cobalah online di Pyth Compiler .Ide
Kami menyandikan informasi yang diperlukan sebagai berikut:
Semua nama telah dilemparkan ke huruf kecil, spasi telah diganti dengan q's, dan nama dipisahkan oleh linefeeds.
Semua huruf kapital didaftar pertama (dalam urutan yang berhasil meminimalkan jumlah byte). Kemudian negara terkait terdaftar dalam urutan terbalik. Akhirnya, Arstotzka ditambahkan.
Dengan cara ini, modal / negara pada indeks i sesuai dengan negara / modal pada indeks - (x + 2) . Juga, input yang tidak valid akan memiliki indeks 100 ( Arstotzka ) atau -1 (tidak ditemukan), dan - (100 + 2) ≡ -1 ≡ - (- 1 + 2) mod 101 . Tata letak ini mencegah Arstotzka dari kasus khusus, tanpa menambahkan atau menambahkan apa pun ke daftar.
Untuk mengompresi informasi, kami menemukan indeks masing-masing karakter
"\nabc...xyz"
dan mengkonversi hasil dari basis 27 ke basis 256.Penguraian secara langsung: kita kembali dari basis 256 ke basis 27, mengambil elemen yang sesuai dari
"\nabc…xyz"
, mengganti q's dengan spasi, dan menggunakan huruf kapital dari huruf pertama dari setiap kata yang dihasilkan.Kode
sumber
Python3, 997 byte
Saya tidak dapat diganggu untuk melakukan konversi basis atau kemasan biner yang pasti akan dilakukan oleh versi yang menang, tetapi saya ingin memposting ini untuk menunjukkan trik yang sangat keren.
XOR'ing angka dengan 1 sama dengan menambahkan 1 jika angkanya genap, atau mengurangi 1 jika angkanya ganjil. Anda dapat membuat peta dua arah yang sangat mudah dan golf menggunakan trik ini.
sumber
print()
dan segala sesuatu yang lain masih harus bekerjaraw_input
). @orlpCJam,
625609603599 byteHexdump di atas dapat dibalik dengan
xxd -r -c 17
. Cobalah online di juru bahasa CJam .Ide
Kami menyandikan informasi yang diperlukan sebagai berikut:
Semua nama telah dilemparkan ke huruf kecil, spasi telah diganti dengan q, dan nama dipisahkan oleh backticks.
Semua huruf kapital didaftar pertama (dalam urutan yang berhasil meminimalkan jumlah byte). Kemudian negara terkait terdaftar dalam urutan terbalik. Akhirnya, Arstotzka ditambahkan.
Dengan cara ini, modal / negara pada indeks i sesuai dengan negara / modal pada indeks - (x + 2) . Juga, input yang tidak valid akan memiliki indeks 100 ( Arstotzka ) atau -1 (tidak ditemukan), dan - (100 + 2) ≡ -1 ≡ - (- 1 + 2) mod 101 . Tata letak ini mencegah Arstotzka dari kasus khusus, tanpa menambahkan atau menambahkan apa pun ke daftar.
Untuk mengompresi informasi, kita kurangi 97 (titik kode
`
) dari setiap karakter dalam string dan konversikan hasilnya dari basis 27 ke basis 256.Penguraian secara langsung: kita kembali dari basis 256 ke basis 27, tambahkan basis-27 digit ke karakter backtick, ganti q's dengan spasi, dan kapitalkan huruf pertama dari setiap kata yang dihasilkan.
Kode
sumber
JavaScript (ES6),
821806 byteMenggunakan decode Base64 untuk mengompresi string. Demo langsung
Ini hexdump; gunakan
xxd -r filename
untuk membalikkan.sumber
r=
perlu?PHP,
12721239 bytePastikan Anda telah mengaktifkan short_open_tag di php.ini:
Kode ini menggunakan argv [1] sebagai input.
sumber
<?$c=['Baton Rouge'=>Louisiana,$I=Indiana=>$I.polis, ... ];echo$c[$z=$argv[1]]?:(array_flip($c)[$z]?:Arstotzka);
. Anda hanya perlu mengisi array. Abaikan semua peringatanJava,
1062964 byte-17 byte terima kasih kepada @KevinCruijssen.
Cobalah online!
Cukup mudah; jika kecocokan ditemukan, tambahkan atau kurangi dari indeks array saat ini tergantung pada apakah itu genap atau ganjil. Kalau tidak, cetak "Arstotzka".
Mayoritas byte yang disimpan adalah karena menghapus 99
:
s dan membelah string berdasarkan regex(?<=[a-z])(?=[A-Z])
, yang menggunakan tampilan positif di belakang dan mencari di muka untuk memeriksa perbedaan dalam casing.sumber
R ,
1023985 byteCobalah online!
Berbeda dengan pengajuan R lainnya.
Kode menempatkan ibukota dan negara bagian dalam vektor yang sama. Status berada dalam urutan terbalik sehingga, mengingat indeks negara bagian atau modal, indeks entri pencocokan adalah
length(data)-index+1
, di manalength(data)=100
, 50 (negara bagian) + 50 (modal)Juga, data input dikemas sebagai string tunggal dan kemudian dipisah. Tali itu dapat dikompres untuk golf lebih jauh.
Sunting: menambahkan beberapa substitusi pasang karakter yang tidak dioptimalkan.
sumber
Javascript,
10571042 byteJawaban 1: 1042
Jawaban yang Diperbarui 1 melewatkan nol: S, Juga memperbaiki kesalahan umum Jawaban yang Diperbarui 1 + 2 mengatur ulang struktur sedikit.
Jawaban 1 disarankan untuk dijalankan di konsol Javascript (misalnya browser Anda) fungsi yang tidak disebutkan namanya yang kembali ke konsol. Anda juga bisa mengujinya di sini .
Jawaban 2 1049
Jawaban 2 akan bekerja dengan tombol potongan kode
sumber
Ruby, 989
Membagi data menjadi satu array. Temukan indeks input dalam array (
index
mengembalikan nilai falsynil
jika input tidak ada di sana)Jika salah, kembalikan "Arstotzka" jika tidak XOR indeks dengan 1 untuk menemukan anggota pasangan yang lain
Dalam program uji:
sumber
~a.index(s)
dan membuat negara bagian dan ibu kota berhubungan seperti itu (mis.["New York", "New Jersey", "California",..., "Sacramento", "Trenton", "Albany"]
)PHP, 674 byte
Hex:
Penjelasan
sumber
Prolog, 1221 byte
Sebagian besar jumlah byte berasal dari daftar negara bagian dan ibukota.
Semua nama negara dan huruf kapital perlu dikutip atom sejak mereka mulai dengan huruf besar, dengan biaya kita 202 byte saja.
Bagaimana itu bekerja
Mendapat index Saya unsur X dalam daftar L .
Xor index dengan 1 untuk mendapatkan index of return value.
Mendapat elemen E pada indeks J daftar L .
Jika ada aturan yang gagal, cetak Arstotzka
Contoh
sumber
Python 2.7,
127112321054 byteContoh I / O:
Sunting: cara ditingkatkan
sumber
zip()
, apa pun kecuali itu! (juga saya pikir mencoba menggunakan interpolasi string / penggabungan pada ini hanya akan membuat kode jauh lebih lama sementara sedikit memperpendek kamus, tetapi saya tidak tahu bagaimana mencoba)Perl 5, 999 byte
Posting pertama saya di codegolf.
Tidak Disatukan:
sumber
Perl 5, 1029 byte
sumber
Haskell ,
1077106910681063 byteCobalah online!
Setelah menghabiskan banyak waktu untuk mencoba implementasi Huffman coding saya menyadari bahwa pendekatan langsung mungkin lebih pendek. Ah, baiklah.
EDIT: Terima kasih kepada @Laikoni untuk melepas 8 byte!
EDIT: Terima kasih lagi Laikoni untuk byte tambahan itu. Ide bagus untuk menggunakan '~'
EDIT: Terima kasih kepada Laikoni karena melepas 5 byte itu!
sumber
fmap tail
:(l,_:r)<-span(/=',')
.span(>',')
harus juga berfungsi.span(>',')
tidak berfungsi jika ada spasi atas nama ibu kota (misalnya Baton Rouge) sejak' '<','
~
sebagai ganti,
, yang lebih besar dari semua karakter lain yang digunakan.last$l:[r|s==l]
lebih pendek darifilter(/=s)[l,r]!!0
dans==l||s==r
berdetakelem s[l,r]
satu byte.T-SQL, 1402 byte (menghitung ukuran file .sql)
Benteng jenis ini mengatur logika mengalahkan logika prosedural membuat mudah dan cepat untuk menyelesaikannya pada DB relasional.
Di bawah kode ungolfed. Catatan kita bisa menjalankan bagian create / populate sekali dalam batch terpisah
Dan dengan data itu bertahan hanya menggunakan permintaan ini
Deklarasi variabel tidak wajib, tentu saja Anda bisa langsung memasukkan input ke dalam query dan menyimpan 10 byte tetapi saya lebih suka parameter saya diparametisasi.
sumber
sqlldr
format daripada memasukkan langsung -sqlldr
tidak perlu tanda kutip di mana-mana, misalnyaZsh ,
993 928924 byte-4 byte berkat jawaban Bash @ spuck, ganti
th Dakota
danth Carolina
Cobalah online! Cobalah online!Cobalah online!Kompresi manual dengan mengganti angka 0..9 dalam array.
Karena Zsh menggunakan array 1-diindeks, kita harus menambahkan elemen dummy di awal.
$a[(i)$1]
mendapatkan indeks elemen array yang cocok. Menambahkan(e)
flag menonaktifkan pencocokan pola dan menggunakan pencocokan string biasa. Jika kami tidak melakukan ini,Ut*
cocokUtah
dan kami akan mencetakCarson City
. Jika elemen tidak ditemukan, ini mengembalikan indeks di luar akhir array.Kami kemudian xor dengan 1 dan mendapatkan elemen berpasangan yang sesuai. Jika elemen dummy kami di indeks 1 cocok, ini akan menjadi
$a[0]
, yang menggantikan string kosong. Bagaimanapun, jika ini kosong,${ :-Arstotzka}
akan menggantikan Arstotzka sebagai gantinya.sumber
Bash , 927
97810031051976byteSatu lagi edit, mengurangi byte yang diambil oleh spasi dan baris baru dalam $ T.
Juga memesan kembali substitusi untuk 0,.9, memperbaiki masalah penanganan "Carol1a", karena penggantian 1 -> "dalam" akan sudah selesai sebelum titik itu.
Mengedit jawaban saya setelah komentar @ GammaFuntion di bawah ini; Saya tidak memenuhi aturan asli untuk menangani semua input; string yang sebagian cocok dengan negara atau modal akan memberikan output yang salah.
Jawaban Zsh-nya mengilhami saya untuk juga menggunakan XOR daripada pengindeksan modulo 100 dan melakukan beberapa kompresi manual menggunakan angka 0..9. Saya menulis sebuah skrip untuk melakukan perhitungan cepat dan kotor pada daftar input untuk memutuskan sepuluh string mana yang akan memberikan pengurangan byte terbaik. Kemudian gunakan skrip itu secara iteratif untuk mengurangi string. Lihat di sini: Coba online!
Cobalah online!
Cobalah online!Cobalah online!Cobalah online!Cobalah online!sumber
Rock
sebagai input, hasilnyaLittle Arkansas
bukanArstotzka
.for t in on in an is th.Carol1a or en as th.Dakota er;{ S=${S//$[j++]/$t};}
. Juga, penggunaan yang bagusth.
, saya menambahkannya ke jawaban zsh saya.i
(atauj
) sebelumnya.R, 1294 byte
Ini adalah huruf besar-kecil sesuai dengan input yang ditampilkan sebagai contoh.
Kode tidak dikunci (sedikit berbeda dalam posisi pemindaian):
sumber
Jawa, 1312
sumber
Javascript, 1042
sumber
AWK , 1009 byte
Cobalah online!
Jika ada cara untuk mengecilkan ini, saya akan senang mendengarnya. :)
sumber
J ,
843829 byteCobalah online!
sumber