Skenario: Anda adalah perancang perangkat lunak yang bekerja untuk perusahaan yang dikelola pemerintah yang mendesain plat nomor untuk mobil dan kendaraan lain. Anda telah diminta untuk mengembangkan perangkat lunak yang menghasilkan plat nomor. Sebelum Anda mulai bekerja, atasan Anda menetapkan aturan dasar ini.
Pelat nomor tidak boleh mengandung:
ASS
666
69<any number here>
<any number here>69
KKK
SHT
Aturan dan persyaratan:
- Plat nomor harus dibuat secara acak.
- Setelah plat nomor acak dibuat, plat nomor yang sama tidak dapat dibuat lagi.
- Anda harus mengeluarkan setidaknya 200 plat nomor unik . Anda dapat menghasilkan lebih banyak jika Anda mau .
- Anda dapat menyimpan piring yang dihasilkan dalam file untuk "mengingat" mereka.
- Plat nomor berisi 2 bagian, satu berisi hanya tiga huruf, dan satu berisi hanya tiga angka, dipisahkan oleh tanda hubung, seperti ini:
233-ADF
atauADF-233
. - Anda hanya dapat menggunakan angka dan huruf kapital.
- Plat nomor bisa ditulis ke stdout, atau file.
- Setiap "sisi" plat akan berisi tiga angka atau huruf.
- Ini adalah kode-golf , sehingga jawaban tersingkat, paling populer, menang. Pemenang akan dipilih setelah tujuh hari.
Aturan umum
- Jawaban harus mencakup, tetapi tidak terbatas pada, yang berikut ini.
- Nama bahasa.
- Jumlah karakter.
- Ukuran file.
- Bagaimana kode dijalankan.
- Kode itu sendiri.
- Contoh: Python 234 chars atau Python 23mb .
Jika saya perlu mengklarifikasi detail tambahan, harap sebutkan di komentar dan saya akan menambahkannya ke posting saya. Bagaimanapun, semoga berhasil, dan buatkan saya beberapa plat nomor yang sesuai!
Pembaruan 1: Pemenang akan dipilih sedikit lebih awal.
Ternyata saya harus melakukan perjalanan segera, jadi saya akan memilih pemenang sekitar 00:00 UTC, 25 Juli. Setelah pemenang dipilih, Anda masih dapat mengirimkan barang, hanya tahu bahwa pemenang telah dipilih. Bai.
Perbarui 2: Pemenang!
Kami memiliki pemenang! Yay! Keju dan anggur untuk semua orang yang berpartisipasi! Inilah yang menang.
- Posisi Pertama: Àngel - Bash (95 karakter)
- Posisi Kedua: Martin Büttner - Mathematica (182 bytes)
- Posisi Kedua: Emilio M Bumachar - Pyg (92?)
- Posisi Kedua: Peter Taylor - Golfscript (98 karakter)
- Posisi Ketiga: Mark Thomas - Ruby (127 karakter)
Wow, tiga ikatan tempat kedua. Wow. Kompetisi telah berakhir, tetapi silakan kirimkan entri jika Anda mau. Bai!
sumber
AAA-
Jawaban:
bash (95 karakter)
Simpan skrip seperti
m
dalam folder di PATH Anda dengan set bit eksekusi.Jalankan sebagai
bash m
. Pelat disimpan dalam file halIni sama dengan menjalankan yang berikut ini:
Peringatan: Final
m
seharusnya benar-benarexec m
(+5 karakter) untuk menghindari meninggalkan proses menunggu penyelesaian (tetapi Anda dapat memiliki ribuan tanpa banyak masalah)Kredit diberikan kepada http://www.cyberciti.biz/faq/linux-random-password-generator/ untuk gagasan menggunakan
tr -dc
sumber
grep -v
mengecualikan daftar hitam dan daftar pelat yang telah kami hasilkan (grep
diharapkan p mengandung satu pola per baris, tetapi karena pelat tidak mengandung metakarakter ekspresi reguler, mereka hanya cocok dengan diri mereka sendiri). Kami hanya menghasilkan satu atau nol pelat per iterasi, jadi setelah setiap iterasi daftar lengkap (yang diperbarui) untuk dikecualikan akan dibaca oleh grep. : DPYG - 92
Sekarang dapat memilih secara seragam dari semua pelat yang tidak digunakan, mempertahankan spesifikasi OP, sementara lebih pendek dengan 1 karakter lebih.
Secara teori dimungkinkan bahwa daftar 999 piring akan berisi pengulangan yang cukup sehingga himpunan dipangkas akan kurang dari 200. Tetapi kemungkinan itu sangat kecil. Dalam sepuluh percobaan, panjang terendah yang saya dapatkan adalah 994.
EDIT: berubah 999 menjadi K (yang merupakan pyg untuk 1000), untuk menghemat dua karakter atas saran dari bitpwner.
sumber
Mathematica, 182 byte
Ugh, ini panjang
Tidak disatukan
Cukup mudah. Menghasilkan piring acak, dan menyaring duplikat dan yang terlarang sampai 200 ditemukan.
sumber
GolfScript (98 karakter)
Ini menghasilkan semua pelat lisensi yang mungkin dalam urutan acak menggunakan beberapa konversi basis jelek diikuti dengan penyaringan. Ada banyak dari mereka, jadi jangan berharap untuk mengeksekusi dengan cepat, tetapi pertanyaannya tidak menempatkan kendala pada waktu eksekusi.
sumber
JavaScript (ES6) - 213
Mungkin bisa diperbaiki. Diuji pada Konsol Firefox.
Ubah lansiran itu ke
console.log()
jika Anda ingin mengujisumber
Ruby -
136133129 karakterMengerikan. Tapi berpikir ada ruang untuk perbaikan. Cukup masukkan kode
irb
ataupry
dan tekan enter untuk menjalankan:sumber
Ruby, 127 karakter
Upaya saya pada versi Ruby yang "dapat dibaca":
sumber
Python 2.7 - 258 karakter
Saya bukan programmer profesional atau apa pun, jadi saya katakan saya puas dengan hasilnya.
Filesize adalah 4.0 K, jalankan dengan
python file.py
!sumber
pass
seharusnyacontinue
? Anda juga dapat menghemat beberapa karakter dengan membuat indentasi dengan spasi 1 bukannya 4.for i in range(0,200):
bisa diganti denganfor i in range(200):
.continue
.. Tapipass
lakukan triknya. Plus, lebih pendek. Dan ketika saya mencobafor i in range(200)
, itu hanya 199 ^^ Saya menghitungnya setelah itu dengan membuatduplicates
variabel dan meletakkanduplicates += 1
sebelumpass
dan menghitung kejadian-
dalam daftar / string.\t
dan menggantinya dengan 1 spasi tidak mengubah jumlah karakter ... Terima kasih atas sarannya!if k in t: pass
, karena tidak melakukan apa-apa.Python - 208
Hai, inilah tikaman saya pada pembuatan plat nomor. Solusi ini mirip dengan solusi @ bitpwner tetapi tanpa modul string dan alih-alih daftar untuk plat nomor saya memilih untuk menggunakan set dan juga memungkinkan angka terlebih dahulu.
Output sampel:
sumber
Python, 252 byte
Inilah kontribusi saya. Saya terkesan dengan itu, tetapi saya tahu orang lain telah melakukan lebih baik dengan python.
sumber
Python - 165
Impor itu ...
Jika ada kebutuhan untuk memulai secara acak dengan angka atau huruf, yang menurut saya tidak benar-benar diperlukan, maka 190.
sumber
PHP
341324320Adalah yang terbaik yang bisa saya lakukan.
Untuk menjalankan kode, cukup simpan sebagai file .php dan jelajahi di server web mana pun. Ia akan mencoba membuat file blacklist p.txt jika belum ada. Namun Anda mungkin perlu mendefinisikannya dengan jalur server penuh jika Anda tidak memiliki akses root.
Kode itu sendiri ada di sini sebelum golfifikasi:
Sesingkat aku bisa mendapatkannya :-(
Output Sampel
EDIT: merapikan beberapa jika pernyataan menggunakan formulir pendek.
sumber
$string = (rand(1,2)==1) ? "$rand_number-$letters" : "$letters-$rand_number";
Delphi, 161 byte
Inilah pendapat saya tentang ini. Ini mengeluarkan plat nomor ke stdout tanpa line feed di antara mereka. Jika LF diperlukan (tidak ditentukan dalam aturan), maka itu menambah 4 byte tambahan.
Versi golf:
Tidak Disatukan:
Cara menjalankan:
sumber
PHP, 267
Ini tentang sesingkat yang saya bisa dapatkan.
Pelat disimpan dalam file "p".
sumber
R, 229 karakter
Saya yakin ini bisa diperbaiki:
Jalankan di konsol, cetak daftar plat nomor.
sumber
Cobra - 198
sumber
ECMAScript 6 -
155168158Peringatan : 200 dialog peringatan (ubah
alert
menjadiconsole.log
untuk menguji)Edit : Ups. Versi asli duplikat yang dicetak ...
Sunting 2 : Lebih dekat dengan skor asli sekarang - beralih dari satu set ke array asosiatif dengan beberapa pemeriksaan duplikat yang tipis memungkinkan untuk mencetak saat berjalan
Diuji di konsol Firefox.
sumber
l=x=>String.fromCharCode(65+r()*26);
. I guess I don't know what's happening withl=x=>...
f=a=>b
is an ES6 feature that's basically shorthand forfunction f(a) { b }
and it's only(?) supported by Firefox at the moment.JavaScript (ES6) 184
As usual, test in FireFox console and change
alert
toconsole.log
or be prepared to pressescape
200 times.sumber
Python3, 257 chars
Sample output:
sumber
;
instead of\n
.PHP,167
that's 100 chars less than current PHP's best :)
hope you like it. In case it is allowed:
is only 141 chars but doesn't shuffle chars and numbers. Any suggestions wellcome :)
sumber
F#, 264 chars
Not really a language designed for golfing, but I'm sure this could be improved. Using Seq.exists with a lambda is pretty annoying, as are the many parens and lack of implicit conversion.
Uses recursion, keeps going forever.
Can be run in FSI.
sumber
Python 203
I'm not sure if this technically counts, but I liked it so I'm posting it anyway. While I do generate the answers pseudo-randomly, as pretty much everyone else did, I strategically picked the random seed such that invalid answers wouldn't end up in the output. So, my answer isn't actually capable of generating the entire set of valid answers, without also generating the invalid ones.
sumber
Perl - 123 Characters
Ungolfed:
If anyone has ideas to golf it further, let me know, I am interested. If you want further explanation of part of the code, leave a comment and I'd be happy to explain more too.
sumber
Javascript - 283
327CharactersEdit:
After implementing the suggestions from Alconja, here's my new version:
1) Remove Variable:s and use literal:"\n" [-4][323]
2) Remove "var o="",i,r,n,l," [-17][306]
3) Remove Variable:t and use literal:"ASS|KKK|SHT|666" [-4][302]
4) Set m=Math.random and use "m" instead [-7][296]
5) Use (m()+"") rather than m().toString() [-6][290]
6) Remove unneeded ";" [-7][283]
Old-version: Javascript - 327 Characters
I'm sure there's some room for improving... I'm pretty inexperienced at Code-golfing:
Here is a formatted, "Ungolfed" version with "un-minified" variable/function names:
Here is a "debug" version that can be pasted into URL of browser favorite/bookmark. Output is placed in a "TEXTAREA" on a new "window" instead of "alert()":
Here is the "debug" version, formatted:
sumber
var
(just assigning will do, 323), you don't need;
s unless there's another statement following (eg. the last character in the line, or before a}
, 316), watch for anything that takes more space to declare/use than just inline (eg. yours
variable, 312), ditto for the reverse if something is used more than once (eg.Math.random(...)
tor=Math.random ... r(...)
, 307,(x+"")
is shorter thanx.toString()
, 300