Pengguna PPCG dan mod terpilih, @Dennis baru saja menjadi pengguna kedua yang mendapatkan lebih dari 100rb rep!
Ini adalah ide yang benar-benar asli, yang tidak saya dapatkan dari orang lain , tetapi mari kita buat tantangan berdasarkan ID penggunanya, 12012
sebagai penghargaan!
Melihat itu, Anda akan melihat bahwa ada dua "bagian" yang berbeda pada ID-nya.
12
dan
012
Kedua bagian ini menambahkan hingga 3. Itu properti yang cukup menarik.
Mari kita mendefinisikan "angka Dennis 2.0" sebagai bilangan bulat positif di mana setiap kemunculan maksimal jumlah digit yang meningkat secara ketat ke angka yang sama. Sebagai contoh,
123
adalah angka Dennis 2.0 karena hanya ada satu sublist maksimal dari digit yang meningkat secara ketat, dan jumlahnya menjadi 6. Selain itu, 2.846.145 juga merupakan angka Dennis 2.0 karena tiga sublists maksimal peningkatan digit, yaitu
28
46
145
Semua jumlah ke 10
. Selain itu, angka yang hanya mengulangi angka yang sama haruslah angka Dennis 2.0 karena, misalnya, 777
dapat dipecah menjadi
7
7
7
yang jelas semuanya berjumlah tujuh.
Sejumlah seperti 42
ini tidak sejumlah Dennis 2.0, karena dipecah menjadi
4
2
yang jelas tidak menjumlahkan ke nomor yang sama.
Tantangan
Anda harus menulis program atau fungsi untuk menentukan apakah angka yang diberikan adalah angka Dennis 2.0 atau tidak. Anda dapat mengambil input dan output dalam format input yang masuk akal, misalnya sebagai string, sebagai angka, dari file, argumen funtion / return, dari STDIN / STDOUT, dll. Dan kemudian mengembalikan nilai kebenaran jika angka ini adalah Dennis 2.0 angka, dan nilai palsu jika tidak. Untuk referensi, ini adalah setiap nomor Dennis 2.0 hingga 1.000:
1
2
3
4
5
6
7
8
9
11
12
13
14
15
16
17
18
19
22
23
24
25
26
27
28
29
33
34
35
36
37
38
39
44
45
46
47
48
49
55
56
57
58
59
66
67
68
69
77
78
79
88
89
99
101
111
123
124
125
126
127
128
129
134
135
136
137
138
139
145
146
147
148
149
156
157
158
159
167
168
169
178
179
189
202
222
234
235
236
237
238
239
245
246
247
248
249
256
257
258
259
267
268
269
278
279
289
303
312
333
345
346
347
348
349
356
357
358
359
367
368
369
378
379
389
404
413
444
456
457
458
459
467
468
469
478
479
489
505
514
523
555
567
568
569
578
579
589
606
615
624
666
678
679
689
707
716
725
734
777
789
808
817
826
835
888
909
918
927
936
945
999
Celah standar berlaku, dan jawaban terpendek yang diukur dalam byte menang!
sumber
1236|6
,
antara mereka? Ini mungkin peregangan banyak.Jawaban:
Jelly,
1312 byteTerima kasih 1 byte ke @Dennis.
Cobalah online!
Penjelasan
sumber
JavaScript (ES6),
7270 byteMengambil string sebagai input. Mengembalikan nilai salah atau benar (yang bisa berupa angka).
Itu menggunakan ekspresi reguler untuk mengubah string input seperti
"2846145"
menjadi:Kemudian panggil
eval()
ungkapan ini.sumber
2011
terbagi menjadi2 / 01 / 1
dan bukan angka D2.0. Adapun189
, itu adalah nomor D2.0 dan18
merupakan nilai yang sebenarnya.Python, 50 byte
Diharapkan
input()
untuk mengevaluasi ke string, sehingga input membutuhkan tanda kutip sekitarnya di Python 2. Output adalah melalui kode keluar , di mana 0 menunjukkan keberhasilan (kebenaran) dan 1 menunjukkan kegagalan (kepalsuan).Uji di Ideone .
Bagaimana itu bekerja
Kami menginisialisasi r ke string 0 dan mengulangi semua digit d pada input.
Jika d lebih besar dari digit pertama r (awalnya 0 , maka sama dengan nilai d sebelumnya ),
r<d
mengevaluasi ke True dan'=+'[r<d]*2
menghasilkan++
.Jika d lebih kecil dari digit pertama r ,
'=+'[r<d]*2
hasilkan==
.Jika d sama dengan digit pertama r , r akan lebih panjang dari string singleton d , jadi
'=+'[r<d]*2
hasilkan sekali lagi==
.Dalam semua kasus, angka d dan dua karakter yang dihasilkan akan ditambahkan ke r .
Setelah semua digit input diproses,
eval(r)
evaluasi ekspresi yang dihasilkan.Jika input terdiri dari satu urutan yang benar-benar meningkat dari digit (positif), ekspresi mengevaluasi ke jumlah mereka.
Misalnya, bilangan bulat 12345 menghasilkan ekspresi
5++4++3++2++1++0
, yang menghasilkan 15 ketika dievaluasi. Perhatikan bahwa setiap + detik adalah plus unary , sehingga tidak mempengaruhi hasilnya. Membagi 1 dengan 15 valid (hasilnya tidak penting); program keluar secara normal.Jika input terdiri dari dua urutan digit yang meningkat secara ketat, ekspresi terdiri dari perbandingan sederhana.
Misalnya, bilangan bulat 12012 menghasilkan ekspresi
2++1++0==2++1++0
, yang menghasilkan Benar ketika dievaluasi karena kedua istilah memiliki jumlah 3 . Membagi 1 dengan Benar ( 1 ) valid (hasilnya tidak penting); program keluar secara normal.Di sisi lain, bilangan bulat 12366 menghasilkan ekspresi
6==6++3++2++1++0
, yang menghasilkan False ketika dievaluasi karena istilah memiliki jumlah 6 dan 12 . Membagi 1 dengan Salah ( 0 ) menimbulkan ZeroDivisionError ; program keluar dengan kesalahan.Jika input terdiri dari tiga atau lebih sekuens yang meningkat secara ketat, ekspresi terdiri dari perbandingan berantai , yang mengembalikan True jika dan hanya jika semua perbandingan yang terlibat mengembalikan True .
Misalnya, bilangan bulat 94536 menghasilkan ekspresi
6++3==5++4==9++0
, yang menghasilkan Benar ketika dievaluasi karena semua istilah memiliki jumlah 9 . Seperti sebelumnya, program keluar secara normal.Di sisi lain, bilangan bulat 17263 menghasilkan ekspresi
3==6++2==7++1++0
, yang menghasilkan False ketika dievaluasi karena istilah memiliki jumlah 3 , 8 , dan 8 . Seperti sebelumnya, program keluar dengan kesalahan.sumber
Brachylog , 13 byte
Cobalah online!
Penjelasan
~c
akan menyatukan dengan sublists terbesar terlebih dahulu.sumber
Pyke, 18 byte
Coba di sini!
sumber
PowerShell v2 +,
1006461 byteSatu-liner literal, karena ini semua satu pipa Mengambil input sebagai string
$args[0]
. Loop melalui itu sebagaichar
-array, setiap iterasi menempatkan elemen saat ini dengan+
atau-eq
di depannya ke pipa berdasarkan pada apakah nilai saat ini adalah-l
ess-than-or-e
qual dengan nilai sebelumnya$i
. String-string itu-join
disatukan dan disalurkan keiex
(kependekan dariInvoke-Expression
dan mirip denganeval
. Misalnya, untuk input2846145
ini akan dievaluasi sebagai+2+8-eq4+6-eq1+4+5
, yang manaTrue
.Bahwa Boolean ditinggalkan di jalur pipa, dan
True
/False
secara implisit ditulis pada saat penyelesaian program.NB - untuk input satu digit, digit yang dihasilkan ditinggalkan di jalur pipa, yang merupakan nilai sebenarnya di PowerShell.
Contohnya
sumber
GNU sed 217 atau 115
Keduanya termasuk +1 untuk -r
217:
Mengambil input dalam desimal normal
Cobalah online!
115:
Mengambil input sebagai daftar digit angka yang dipisahkan koma, unary. misalnya
123
akan1,11,111
Cobalah online!
sumber
Perl, 38 + 3 (
-p
) = 41 byte-9 byte berkat @Ton Hospel !
Karena ada
$'
, kode harus ada dalam file untuk dijalankan. Jadi-p
terhitung 3 byte. Output 1 jika angka tersebut adalah angka Dennis 2.0, atau string kosong jika tidak:sumber
s%.%2x$&.($&.O ge$')%eg;$_=/^(2+1)\1*$/
dengan-p
opsi (+3 karena kodenya$'
)A
itu jauh lebih baik! Terima kasih! Saya tidak mengerti.O
... Tanpa itu, gagal pada beberapa kasus, tapi saya tidak bisa melihat mengapa.$'
adalah digit berikutnya dan semua yang sesudahnya. Jadi, misalnya778
membandingkan7
dengan78
yanglt
terlihat seperti urutan naik. TheO
istirahat itu dan membandingkan7O
untuk78
(apa pun di atas9
dalam karya ASCII)$' or $
`bukan grup tangkapan saya, tetapi tidak dapat menemukannya, karena itu" dan semua yang setelahnya ". Terima kasih atas tipnya!~$&le~$'
harus lebih pendek 1JavaScript (ES6),
666563 byteDisimpan 2 byte berkat @ edc65
Mengambil input sebagai string. Versi lama (hanya berfungsi di Firefox 30+):
sumber
[...x,0]
->[...x,p=t=z=0]
Mathematica, 38 byte
Fungsi anonim. Mengambil angka sebagai input, dan mengembalikan
True
atauFalse
sebagai output.sumber
Brachylog 2, 10 byte, tantangan tanggal akhir bahasa
Cobalah online!
Ini pada dasarnya adalah algoritma yang sama dengan jawaban @ Fatalize (yang saya tidak melihat sampai setelah saya menulis ini), tetapi agak diatur ulang untuk membuatnya golfier di bawah sintaks Brachylog 2.
Ini adalah program lengkap, kembali
false.
jika bukan nomor Dennis 2.0, atautrue
jika itu nomor .Penjelasan
Seperti biasa untuk program penuh Brachylog, jika semua asersi dapat dipenuhi secara bersamaan, kita mendapatkan hasil yang benar, jika tidak falsey. Urutan default untuk
~c
adalah untuk mengurutkan partisi dengan elemen lebih sedikit, lebih lama terlebih dahulu, dan dalam Prolog (dengan demikian Brachylog), urutan default ditentukan oleh predikat pertama dalam program (menggunakan yang kedua sebagai tiebreak, dan seterusnya; di sini,~c
mendominasi, karenaẹ
deterministik dan dengan demikian tidak memiliki apa pun untuk dipesan).sumber
MATL,
2423201816 byteMengembalikan kebenaran matriks falsey
Cobalah secara Online!
Juga, selamat @Dennis!
Penjelasan
sumber
&=
!PHP,
10810592 bytemengambil input dari argumen, keluar dengan
0
nomor Dennis-2.0, dengan yang1
lain.kerusakan
sumber
05AB1E , 18 byte
Penjelasan
N = 12012
digunakan sebagai contoh.Cobalah online!
sumber
Ruby 2.3, 56 byte
Hampir pasti bukan cara golf untuk melakukan ini, tetapi itu memamerkan beberapa fitur bahasa yang bagus.
(Tidak toleran baris, jadi jalankan seperti
ruby dennis2.rb <<< '12012'
)sumber
PHP, 144 byte
Saya yakin ada cara yang jauh lebih pintar (dan lebih pendek) untuk melakukan ini tetapi itu akan dilakukan untuk saat ini.
sumber
Python 2, 69 byte
Mengambil input sebagai string.
Penjelasan:
ex
1201212012
Mengonversi ke daftar jumlah:
1+2,0+1+2,1+2,0+1+2,
Nilai dan konversi untuk ditetapkan.
set([3])
Jika panjang himpunan adalah 1, semua jumlah adalah sama.
sumber
JavaScript (ES6), 58
Menerapkan tip saya yang jarang bermanfaat https://codegolf.stackexchange.com/a/49967/21348
Itu memindai string char dengan char mengidentifikasi menjalankan menaik chars, pada akhir setiap rum memeriksa apakah jumlahnya selalu sama
Uji
sumber
Pyth , 20 byte
Dua versi
Coba yang pertama online!
Coba yang kedua online!
sumber
Rubi,
11710585 byteIni akan mengembalikan bilangan bulat dari nomor dennis ini atau
nil
jika bukan angka dennis. Semua bilangan bulat akan dianggap benar di ruby juganil
dianggap salah.i
adalah bilangan bulat yang sedang diperiksa.Versi ketiga sebenarnya mengembalikan
true
danfalse
.PS diuji untuk mengembalikan 172 bilangan bulat dari 1 hingga 1000 seperti pada jawaban.
sumber
APL, 23 byte
Penjelasan:
N←⍎¨⍕⍵
: dapatkan masing-masing digit di input, simpan diN
N⊂⍨1,2>/N
: temukan sublists angka yang meningkat secara ketat diN
+/↑
: jumlah masing-masing sublist1=≢∪
: lihat apakah daftar yang dihasilkan hanya memiliki satu elemen uniksumber
Tambahkan ++ , 109 byte
Cobalah online!
Bagaimana itu bekerja
€
[1 2 0 1 2 2]
sumber