Baru-baru ini, seorang insinyur listrik yang mempelajari penentuan waktu lampu lalu lintas didenda $ 500 oleh negara bagian Oregon karena menyebut dirinya seorang insinyur.
Diberikan string 2 huruf sebagai input, mewakili negara bagian AS, keluaran:
I am not an engineer
jika negara bagian Oregon (OR
)I am an engineer
jika negara bagian adalah negara bagian AS lainnyaWhat is an engineer?
diberi input lain
Output mungkin tidak mengandung terkemuka spasi, tetapi mungkin berisi sebanyak Trailing spasi yang Anda inginkan.
Anda dapat berasumsi bahwa input akan selalu berupa 2 huruf besar.
Berikut adalah daftar semua 50 singkatan negara bagian AS:
AL, AK, AZ, AR, CA, CO, CT, DE, FL, GA, HI, ID, IL, IN, IA, KS, KY, LA, ME,
MD, MA, MI, MN, MS, MO, MT, NE, NV, NH, NJ, NM, NY, NC, ND, OH, OK, OR, PA,
RI, SC, SD, TN, TX, UT, VT, VA, WA, WV, WI, WY
Mencetak gol
Ini adalah kode-golf , sehingga byte paling sedikit di setiap bahasa menang!
code-golf
string
kolmogorov-complexity
Skidsdev
sumber
sumber
Jawaban:
C #,
311 309240237222195184183 byteCobalah online!
Disimpan 2 byte dengan menambahkan spasi sebelum
an
keb
-69 (huehue)-72 bytes berkat TheLethalCoder-15 byte berkat string status genius TotallyHuman
-38 byte karena lebih banyak kompresi string
Tidak Disatukan:
sumber
..."+b
alih-alih string yang diinterpolasi, ubahif..else if...else
menjadireturn s==
"ATAU"? ....: System.Arr ... `mis. Gunakan ternary. Gunakanu.Contains
sebagai gantiArray.Exists
. Saya pikir jika Anda menggunakan spasi alih-alih koma maka.Split()
tanpa params akan berhasil.u
adalah array bukan string. Namun, Anda dapat menyimpan byte dengan menetapkanu
sebagai string dan menggunakannya.Contains
.s=>{var b=" an engineer";return s=="OR"?"I am not"+b:"AL AK AZ AR CA CO CT DE FL GA HI ID IL IN IA KS KY LA ME MD MA MI MN MS MO MT NE NV NH NJ NM NY NC ND OH OK PA RI SC SD TN TX UT VT VA WA WV WI WY".Contains(s)?"I am"+b:$"What is{b}?";};
. Rasanya saya telah menghapus semua spasi putih yang relevan. (Belum diuji)JavaScript (ES6), 182 byte
Demo
Tampilkan cuplikan kode
sumber
LA
: /C,
215208190 byteTerima kasih pada Cool Guy
Menggunakan "string genus" @ totallyhuman.
Bagaimana itu bekerja:
"string"z
secara otomatis digabungkan"string"
denganz
(" an engineer"
). Ya, C melakukan itu.!strcmp(s,"OR")
membandingkan string dengan "ATAU".?"I am not"z
mengembalikan "Saya bukan seorang insinyur" jika benar. Jika tidak...:strstr(...,s)
memeriksa apakah string jenius @ totallyhuman berisi string yang disediakan.?"I am"z
mengembalikan "Saya seorang insinyur" jika demikian, dan ...:"What is"z"?")
mengembalikan "Apa itu insinyur?" jika tidak.Cobalah online!
sumber
#define z " an engineer" f(char*s){!strcmp(s,"OR")?puts("I am not"z):strstr("MINCALA MSCTNMNVAKY WAZ PAR FL GA NHID COKSD ME MDE MA MTX NE NJ NY ND MOH RIA UT WVT WIL WY",s)?puts("I am"z):puts("What is"z);}
Python 2 ,
228168 byteCobalah online!
sumber
Python 2 ,
192186182178176 bytesMungkin bisa mengompres string negara lebih.
Cobalah online!
sumber
u
diif s in u
dapat Anda perhatikan menggunakannya secara langsung bukannya menyatakan itu?VALA WAZ NCA COH CTX SDE FL GA HID WIL MIN IAKSC KY ME MD MA MNMS MOK MTNE NH NJ NY ND PARI UT NVT WV WY
adalah yang terkecil yang bisa saya buat'MINCALA MSCTNMNVAKY WAZ PAR FL GA NHID COKSD ME MDE MA MTX NE NJ NY ND MOH ORIA UT WVT WIL WY'
Java (JDK 10) , 184 byte
Cobalah online!
Saya minta maaf karena menggunakan kembali string terkompresi: Saya tidak dapat menemukan sesuatu yang lebih baik sendiri ... :(
sumber
05AB1E ,
104103101 byteCobalah online!
Versi lama 104 byte jika lebih mudah ditingkatkan.
Tidak senang dengan kompresi atau kasus khusus untuk
?
.sumber
(A=1,C=3 ...)
. Versi 103 byte melakukan hal yang sama untuk beberapa negara bagian dan menggabungkan beberapa negara bagian yang berakhir dengan huruf yang sama yang dimulai dengan negara baru. Saya yakin ini masih bisa diperbaiki dan saya akan menambahkan penjelasan yang lebih baik ketika saya telah golf lebih..•~Zµ∞/'—¶[@øl•Œ2ù
Anda telah menggunakan untuk beberapa negara bagian, bukan hanya menekan semua negara bagian dan melakukan2ô
. Dan pendekatan yang bagus secara keseluruhan. (Senang saya melihat jawaban Anda sebelum mencoba sesuatu sendiri, karena pasti tidak akan sesingkat ..)F # , 222 byte
Cobalah online!
Diperluas:
Dengan status dua huruf v yang diteruskan ke fungsi f , buat tupel (a, b) yang mewakili kepala dan ekor kalimat "insinyur".
Jangan ragu menggunakan "string state terkompresi" secara bebas; ini satu byte lebih pendek dari MINCALA ...
sumber
R ,
10996 byteCobalah online!
13 byte berkat J. Aduh - melalui penggunaan regex dan indeksasi.
sumber
sub
jauh lebih baik, terima kasih!Japt ,
136135131129128 byteLebih banyak penghematan tersedia dengan bereksperimen dengan urutan singkatan negara - saya akan kembali ke sana sebentar lagi.
Cobalah online
Penjelasan
ò
metode ini.ø
metode untuk melihat apakah array berisiUv
, yang merupakan string input yang dikonversi menjadi huruf kecil."I am "
¥
(sama dengan)"OR"
memungkinkan kita untuk menambahkan salah satu"not "
atau variabel string kosongP
."an engineer"
."What is an engineer?"
.sumber
Python 3 ,
180179178 byteCobalah online!
sumber
CJam , 143 byte
Cobalah online! atau sebagai test suite
Penjelasan
Karena Oregon (
OR
) adalah pada awal string, menemukan signum dari indeks input yang akan menjadi -1 jika tidak ditemukan, 0 jikaOR
, 1 jika ada negara lain. String mana yang akan dicetak dapat diputuskan oleh itu.sumber
PHP, 188 Bytes
Cobalah online!
sumber
in_array(...)
untukstrpos(_AKALARAZCACOCTDEFLGAHIIAIDILINKSKYLAMAMDMEMIMNMOMSMTNCNDNENHNJNMNVNYOHOKPARISCSDTNTXUTVAVTWAWIWVWY,$argn)&1
._NMMNINTNRIHIMIWISCNCCTMTUTVTWVNVFLILCAALGAIAMAPAVAWACOLAMOAKARKSMSNHOHOKORAZDEIDKYMEMDNENJNYNDSDTXWY
bekerjaC #, 178 byte
Jalankan di C # Pad
Golf berdasarkan solusi Mayube ; baru di sini, jadi saya tidak punya cukup perwakilan untuk berkomentar.
sumber
Haskell ,
220214210209 byteCobalah online!
sumber
1<2
bahkan lebih pendekOR
string panjang dalam definisi kedua iJavascript 204
sumber
s=>(!(h=/(A[LKZR]|C[AOT]|DE|FL|[GPLV]A|[HR]I|I[DLNA]|K[SY]|M[EDAINSOT]|N[EVHJMYCD]|O[HKR]|S[CD]|T[NX]|[VU]T|W[AVIY])/.test(s))?"What is":"I am"+(s=='OR'?" not":""))+" an engineer"+['?'[+h]]
AWK, 189 byte
Jika input cocok dengan regex yang berisi semua singkatan negara, cetak "Saya seorang insinyur" dengan 'tidak' dimasukkan di tengah jika negara adalah Oregon, kemudian keluar.
Jika input tidak cocok dengan regex, itu tidak boleh singkatan negara bagian AS.
sumber
Python 3, 238 byte
Penjelasan
Tidak ada teknik kompresi yang digunakan.
sumber
Java, 173 byte
sumber
s->
ke awal.Stax , 100 byte
Bahasa ini mengatasi tantangan. Tetapi penulis (saya) tidak melihatnya sampai sekarang.
Jalankan dan debug itu
sumber
JavaScript ES6,
175171 BytesBergabung dengan banyak yang baik
Atau 152 byte pada pengkodean ISO
Generator:
sumber
C (gcc) , 0 + 176 byte
Cobalah online!
menerjemahkan murni
sumber
Powershell, 175 byte
Skrip uji:
Keluaran:
sumber
Python 3 ,
236182181 byteCobalah online!
TIO berisi kasus uji untuk semua negara.
-54 byte berkat kompresi string
sumber
MINCALA MSCTNMNVAKY WAZ PAR FL GA NHID COKSD ME MDE MA MTX NE NJ NY ND MOH ORIA UT WVT WIL WY
adalah kompresi yang lebih baikq / kdb +, 174 byte
Larutan:
Penjelasan:
Catatan:
Menggunakan string 'terkompresi' dari jawaban lain, berjuang untuk menemukan cara untuk membawanya menjadi satu baris untuk menghindari penugasan
a
variabel (namun tetap menambahkan?
ketika input bukan keadaan.sumber
Retina , 175 byte
Cobalah online! Semoga saya telah mengambil daftar negara terbaik. Penjelasan:
Mulailah membangun hasilnya. Juga, masukkan daftar status untuk digunakan pada tahap berikutnya.
Jika itu salah satu dari 49 negara, hapus negara dan daftar.
Jika itu Oregon, ganti negara dengan
not
, dan hapus daftar.Jika ada yang lain, ganti semuanya dengan output lainnya.
Tambahkan kata ini di akhir untuk menghindari pengulangan.
sumber
Crystal,
232 207205 BytesCobalah online . (sedikit dimodifikasi karena masalah ARGV)
sumber
Faktor, 135 byte
Lebih mudah dibaca, dan dinamai:
[ x ] dip
danx swap
setara berlaku tumpukan tetapi yang pertama lebih pendek hanya ketika bersarang:[ [ [ x ] dip ] dip ] dip
.sumber
Python 2,
213211194 BytesCobalah secara Online
Hal-hal yang saya kerjakan untuk memperpendek:
(i=="OR")
or x[0].lower()+x[1]in c
Memperbarui:
s=not r
dengans=r^1
sumber
Ruby, 164 byte
Menggunakan pengkodean run length, oleh karena itu string ajaib panjangnya 50 byte, satu per negara. Untuk membangun ini, pertama-tama perlu menempatkan kode negara dalam urutan abjad kode negara, daripada nama negara. Sayangnya diperlukan 7 byte untuk mengubah representasi base36 dari
j
dari statecode huruf kecil menjadi statecode huruf besar.Tidak terkurung dalam program uji
sumber