(Ini adalah pertanyaan kode-golf pertama saya)
Ketika saya masih kecil, ayah saya dan saya menciptakan sebuah permainan di mana plat nomor yang kita lihat di mobil dapat memberikan poin tertentu berdasarkan beberapa aturan sederhana:
Jumlah X dari huruf atau angka yang sama memberikan X-1 poin, contoh:
22 = 1 point
aa = 1 point
5555 = 3 points
Angka-angka harus di sebelah satu sama lain, jadi 3353
hanya memberikan 1 poin, karena 5 memecah urutan 3's.
Urutan nomor X dalam urutan naik atau turun, minimal 3, berikan X poin, contoh:
123 = 3 points
9753 = 4 points
147 = 3 points
Sistem poin hanya berfungsi untuk angka 1-digit, jadi 1919
tidak memberikan poin, dan14710
hanya memberikan 3, (147).
Urutan dapat digabungkan untuk menghasilkan lebih banyak poin, contoh:
1135 = 4 points (1 point for 11 and 3 points for 135)
34543 = 6 points (3 points for 345 and 3 points for 543)
Namun Anda tidak diizinkan memotong urutan yang lebih besar menjadi 2 urutan yang lebih kecil untuk poin tambahan: 1234 = 123, 234 (6 points)
tidak diizinkan.
Tugas Anda adalah, diberi urutan, untuk menentukan jumlah poin yang diberikan oleh plat nomor.
Di Denmark, pelat lisensi disusun seperti ini: CC II III, di mana C adalah karakter dan saya adalah bilangan bulat, dan dengan demikian input contoh saya akan mencerminkan struktur ini. Jika Anda mau, Anda dapat membuat urutan sesuai dengan struktur Anda sendiri, atau, jika Anda merasa benar-benar suka berpetualang, biarkan program menganalisis struktur plat nomor dan dengan demikian membuatnya bekerja pada semua jenis plat nomor di seluruh dunia. Nyatakan secara eksplisit struktur yang Anda putuskan untuk digunakan dalam jawaban Anda.
Anda dapat mengambil input dengan cara apa pun yang Anda suka, baik string atau array tampaknya paling masuk akal bagi saya.
Masukan tes | keluaran:
AA 11 111 | 5
AB 15 436 | 3
OJ 82 645 | 0
UI 65 456 | 6
HH 45 670 | 5
YH 00 244 | 5
AJ 00 754 | 1
Karena sifat memilih struktur Anda sendiri, atau bahkan mencakup semua struktur, saya tidak perlu melihat bagaimana pemenang dapat ditentukan secara eksplisit. Saya kira pemenang akan menjadi byte terpendek pada struktur yang telah diputuskan. (Dan jangan mengambil input seperti CICIC, hanya agar mudah bagi Anda sendiri)
EDIT:
Sehubungan dengan komentar yang diajukan, saya memiliki beberapa informasi tambahan untuk dibagikan: Urutan angka naik atau turun mengacu pada urutan aritmatika, jadi X +/- a * 0, X +/- a * 1, ... X +/- a * n dll. Jadi 3-5-7 misalnya adalah 3 + 2 * 0, 3 + 2 * 1, 3 + 2 * 2. Namun, urutannya tidak harus dimulai dari 0 atau berakhir pada 0.
LEBIH EDIT:
Anda dapat memberikan input dengan cara apa pun yang Anda inginkan, Anda tidak perlu memasukkan spasi, tanda hubung atau hal lain yang membuat plat nomor lebih mudah dibaca. Jika Anda dapat menyimpan byte dengan hanya menerima huruf kapital atau sesuatu seperti itu, Anda dapat melakukannya juga. Satu-satunya persyaratan adalah bahwa program Anda dapat mengambil string / array / apa pun yang mengandung karakter dan angka, dan menampilkan jumlah poin yang benar sesuai dengan aturan yang dinyatakan.
XX 87 654
. Saya datang dengan sesuatu yang benar untuk semua kasus pengujian Anda tetapi entah bagaimana salah untuk yang satu ini .. Bekerja untuk memperbaikinya.CCIIIII
, tidak ada spasi), atau masalah ini tidak memiliki kriteria menang objektif, yang kami butuhkan di sini. Seperti apa adanya, “(Dan jangan mengambil input seperti CICIC, hanya untuk membuatnya mudah bagi diri Anda sendiri)” sangat subyektif. Apa itu struktur yang bisa dan tidak bisa diterima?IA99999
(berisi urutan poin kode yang menurun, tetapi bukan angka).Jawaban:
05AB1E ,
25222018 byteMenerima serangkaian karakter alfabet huruf kecil dan angka tanpa spasi.
Cobalah online! atau sebagai Test Suite
sumber
Sekam ,
201615 byte-1 byte terima kasih kepada @Zgarb
Mengambil input tanpa spasi dan dalam huruf kecil.
Cobalah online!
Penjelasan
sumber
K0
bisa di¬
sini.IA99999
.Python 3 ,
19385 byte-3 byte terima kasih Lynn
Mengambil input sebagai byte-string dengan huruf kecil seperti:
b'aa11111'
.Cobalah online!
sumber
C=0!=d==c-l
bahkan lebih pendek.Java 8, 195 byte
Pasti bisa bermain golf lagi dengan menggunakan teknik lain untuk memeriksa urutan.
Penjelasan:
Coba di sini.
sumber
Pyth ,
5150 byte (mengejutkan)Verifikasi semua kasus uji atau Coba di sini.
sumber
R ,
153,145, 143 byteFungsi anonim yang mengambil vektor karakter dan mengembalikan integer.
Masukan yang diharapkan
z(c("A", "A", "1", "1", "1", "1", "1"))
Cobalah online!
Versi tidak disatukan
sumber
C (gcc) , 91 byte
Cobalah online!
Ide dicuri dari jawaban Python Felipe Nardi Batista .
sumber
Pyth ,
4842 bytePort langsung dari jawaban python saya. Mengambil input sebagai byte-string dengan huruf kecil sebagai: b'aa11111 '.
Ini adalah pengkodean pertama saya di Pyth, jadi ada sarannya: D
Coba di sini
sumber
JavaScript,
216192186202201 byteTidak ditambang
Edit riwayat:
0000 XXX
format. (-24 byte)sumber
0000
memberi 7 poin, apakah itu benar? (Ini dibaca sebagai urutan aritmatika dan urutan angka yang diulang pada saat yang sama)