J dili sabitleri belirtmek için çok aptalca bir sözdizimine sahiptir . Özellikle harika bir özelliğe odaklanmak istiyorum: keyfi olarak yazma yeteneği.
Eğer yazarsanız XbY
için X
herhangi bir sayı ve Y
alphanumerics herhangi bir dize, ardından J yorumlayacak Y
bir üs olarak X
dizi 0
boyunca 9
her zamanki anlamı vardır ve a
içinden z
35'e kadar 10 temsil eder.
Ben dediğimde X
herhangi bir sayıda, yani herhangi bir sayı. Bu sorunun amaçları için, X
pozitif bir tam sayı olmayı kısıtlayacağım , ancak J'de her şeyi kullanabilirsiniz: negatif sayılar, kesirler, karmaşık sayılar, her neyse.
Tuhaf olan şey, 0'dan 35'e kadar olan rakamları, basamağınız ne olursa olsun, tabanınız olarak kullanabilmenizdir , çünkü kullanılabilir semboller koleksiyonunuz yalnızca 0-9 ve az'dan oluşur .
Sorun
Bu yöntemi kullanarak 2,933,774,030,998 gibi sihirli sayıları golf etmeme yardımcı olacak bir program istiyorum . Pekala, tamam, belki de o kadar büyük değil, sana kolay geleceğim. Yani...
Görev, bir (genellikle büyük) ondalık sayı alan bir program ya da fonksiyonu yazmak için
N
1 ile 4,294,967,295 (= 2 arasında 32 formunun kısa temsil girdi olarak 1) ve çıkış / dönerXbY
,X
pozitif bir tam sayı olduğuY
bir alfasayısallardan (0-9 ve az, büyük / küçük harfe duyarsız) oluşan veY
tabanX
eşitliğinde yorumlanan bir dizeN
.Her gösterim
XbY
temsilinin uzunluğu, rakam sayısından büyük veya ona eşitseN
,N
bunun yerine çıktı alın . Diğer tüm bağlarda, en kısa gösterimlerin boş olmayan alt kümelerini çıkarabilirsiniz.
Bu kod golf, bu yüzden daha kısa daha iyidir.
Test senaryoları
Input | Acceptable outputs (case-insensitive)
------------+-------------------------------------------------------
5 | 5
|
10000000 | 79bkmom 82bibhi 85bgo75 99bauua 577buld
| 620bq9k 999baka
|
10000030 | 85bgo7z
|
10000031 | 10000031
|
12345678 | 76bs9va 79bp3cw 82bmw54 86bjzky 641buui
|
34307000 | 99bzzzz
|
34307001 | 34307001
|
1557626714 | 84bvo07e 87brgzpt 99bglush 420blaze
|
1892332260 | 35bzzzzzz 36bvan8x0 37brapre5 38bnxkbfe 40bij7rqk
| 41bgdrm7f 42bek5su0 45bablf30 49b6ycriz 56b3onmfs
| 57b38f9gx 62b244244 69b1expkf 71b13xbj3
|
2147483647 | 36bzik0zj 38br3y91l 39bnvabca 42bgi5of1 48b8kq3qv
(= 2^31-1) | 53b578t6k 63b2akka1 1022b2cof 1023b2661 10922bio7
| 16382b8wv 16383b8g7 32764b2gv 32765b2ch 32766b287
| 32767b241
|
2147483648 | 512bg000 8192bw00
|
4294967295 | 45bnchvmu 60b5vo6sf 71b2r1708 84b12mxf3 112brx8iv
(= 2^32-1) | 126bh5aa3 254b18owf 255b14640 1023b4cc3 13107bpa0
| 16383bgwf 21844b9of 21845b960 32765b4oz 32766b4gf
| 32767b483 65530b1cz 65531b1ao 65532b18f 65533b168
| 65534b143 65535b120
Bazı temsillerin bir sayıya eşit olup olmadığından emin değilseniz, Çevrimiçi Deneyin'deki gibi herhangi bir J yorumlayıcısını kullanabilirsiniz . Sadece yazın stdout 0":87brgzpt
ve J geri tükürecektir 1557626714
. Bu sorun büyük / küçük harfe duyarlı olmasa da, J'nin yalnızca küçük harf kabul ettiğini unutmayın.
Bazı yararlı teoriler
N
10.000.000'dan az olan herkes için , ondalık gösterim diğeri kadar kısadır ve bu nedenle kabul edilebilir tek çıktıdır. Herhangi bir şeyi kaydetmek için, yeni tabanda en az dört basamak daha kısa ve taban 99'dan büyükse daha da fazla olması gerekir.- Kare kök tavana kadar üsleri kontrol etmek için yeterlidir
N
. Daha büyük herhangi bir baz için B ,N
baz içinde en fazla iki basamaklı olacak B Geçerli bir ilk rakam ile bir şey çıkacak ilk kez bu kadar etrafında yer almaktadır, B ≈N
/ 35. Ancak bu boyutta her zaman en az ondalık gösterim kadar büyük olacaksınız, bu yüzden denemenin bir anlamı yok. Bunu göz önünde bulundurarak, tavan (sqrt (bu sorunu çözmenizi isteyeceğim en büyük sayı)) = 65536. - Bir bazda 36'dan daha az bir temsilciliğiniz varsa, temel 36 temsili en azından kısa olacaktır. Bu nedenle, 36'dan daha düşük bazlardaki kazara kısa çözümler konusunda endişelenmenize gerek yoktur. Örneğin,
35bzzzzzz
1.892.332.260'ın temsili , bu taban için alışılmadık bir basamak kullanır, ancak36bvan8x0
aynı uzunluğa sahiptir.