Kaç bölümüm var?


18

Mukaddes Kitap bugüne kadar yazılan ve tüm zamanların en çok satan kitabı olarak anılan en etkili kitaplardan biridir. Mevcut haliyle derlenmeden önce yüzlerce yıl boyunca yaklaşık 40 farklı yazar tarafından yazılmıştır. Ancak Mukaddes Kitap hakkında ilginç olan şey, bölünme şeklidir. Her biri bireysel ayetlere ayrılan daha küçük bölümlere ayrılmış olan 66 küçük kitaba bölünmüş 2 farklı vasiyete ayrılmıştır.

Mümkün olan en kısa kodda her kitaptaki bölüm sayısını kodlamaya çalışmak eğlenceli bir mücadele olacağını düşündüm. Bugünün meydan okuması için, kitaplardan birini girdi olarak alan ve King James Versiyonuna göre bu kitaptaki bölüm sayısını çıkaran bir program veya işlev yazmalısınız .

ES'yi herhangi bir makul formatta alabilirsiniz, örneğin STDIN / STDOUT veya bir dosyayı okuma / yazma, işlev bağımsız değişkenleri / dönüş değerleri, kullanıcıya sorma vb. İzin verilir. Giriş her zaman İncil'in 66 kitabından biri olacak ve sadece küçük harf olacaktır. Bu, size başka bir girdi verilirse, tanımlanmamış davranışa izin verildiği anlamına gelir. Sadece 66 olası giriş ve çıkış olduğundan, Wikipedia'nın King James Versiyonu'ndaki İncil bölümleri sayfasına göre hepsi burada sağlanmıştır :

genesis         50
exodus          40
leviticus       27
numbers         36
deuteronomy     34
joshua          24
judges          21
ruth            4
1 samuel        31
2 samuel        24
1 kings         22
2 kings         25
1 chronicles    29
2 chronicles    36
ezra            10
nehemiah        13
esther          10
job             42
psalms          150
proverbs        31
ecclesiastes    12
song of solomon 8
isaiah          66
jeremiah        52
lamentations    5
ezekiel         48
daniel          12
hosea           14
joel            3
amos            9
obadiah         1
jonah           4
micah           7
nahum           3
habakkuk        3
zephaniah       3
haggai          2
zechariah       14
malachi         4
matthew         28
mark            16
luke            24
john            21
acts            28
romans          16
1 corinthians   16
2 corinthians   13
galatians       6
ephesians       6
philippians     4
colossians      4
1 thessalonians 5
2 thessalonians 3
1 timothy       6
2 timothy       4
titus           3
philemon        1
hebrews         13
james           5
1 peter         5
2 peter         3
1 john          5
2 john          1
3 john          1
jude            1
revelation      22

Bu zorluk, her kitap adını ve bölüm sayısını kodlamanın en uygun yolunu bulmakla ilgili olduğundan, Kutsal Kitap hakkında bilgi veren herhangi bir yerleşikin kullanımına izin verilmez. Ancak, hangi dillerin bu tür yerleşiklere sahip olduğunu görmek ilginç olacağından, cevabınızla birlikte rakip olmayan ikinci bir sürümü paylaşmaktan çekinmeyin. Harici kaynaklardan bilgi almaya da izin verilmez (standart boşlukların hiçbirine izin verilmez, ancak bundan açıkça bahsetmenin yararlı olacağını düşündüm).

Her zamanki gibi, bu bir mücadelesi, bu yüzden olabildiğince mümkün olan en kısa programı (bayt olarak ölçülür) yapmaya çalışın. İyi eğlenceler golf!


3
Çıktı sabit değil, neden bu kolmogorov karmaşıklığı ?
LyricLy

3
@LyricLy Çıktı sabit olmasa da, yine de iki farklı veri kümesi oluşturmanın en etkili yolunu görmekle ilgilidir: 1) Kitapların adları (veya adın tanıyabilecek kadar uzun bir kısmı) ve 2 ) İlgili bölüm sayısı.
DJMcMayhem

3
sadece normal bir miktarda olanları görüyorsunuz ve sonra sadece
İncil'i yarıya indirmek

4
enklactBu zorluktan kurtulmak istiyorum ama yapamam ...
17:32

3
@DJMcMayhem 66 benzersiz harf olmadığı gerçeğini unuttun. : P
totallyhuman

Yanıtlar:


12

Jöle , 127 bayt

“£ÐgƁ÷ḅ*Wßßɦ*⁷ċṗṿỵ×Ɓṿ⁷ḢQ’b7+\;“BƝ‘
OḄ;407;270;“ọḷḊḲɦ‘%/i@“¡Ṙ×!⁸Ọ5`ỊV-ṙQȷṖÞ(sĿȮ^k³M"ɓmEf¤*0C[ạƇŻȥ#BṚñİmZẓeȦUƈ!ċ€@Ȧʋ)ƙḅyẉ’b158¤ị¢

Çevrimiçi deneyin!

Test Durumları

Nasıl çalışır

Esasen, bu, girilen karakterlerin ords'larını ikili bir değere dönüştürmeye çalışır, örneğin "joel"-> [106, 111, 101, 108]-> 2^3*106 + 2^2*111 + 2^1*101 + 2^0*108.

Daha sonra, bu değer mod 407, sonra mod 270, sonra [birkaç mod daha], sonra mod 160 alınır. Bu, 66 dize girişinin tümünü 0 ile 158 arasındaki tamsayılarla eşleştirdiği için (son modda şanslı).

Tamsayı, girdinin en az sayıda bölüm içereceği “ọḷḊḲɦ...ƙḅyẉ’b158¤şekilde değerini bulmak için tamsayı listesinden indekslenir . Joel en az 7. bölüme sahip olur.nn

Bu değer , bölümlerin tam sayısını bulmak için nlisteye eklenir “£ÐgƁ÷ḅ*Wßßɦ*⁷ċṗṿỵ×Ɓṿ⁷ḢQ’b7+\;“BƝ‘.

Olası iyileştirme: aynı sayıda bölüme sahip girişler modlardan aynı değere hash edebilir (% 0 çarpışma gerekli değildir), ancak modların sırasını belirlemek için programımda bunu hesaba katmadım.



@( %/i@“...’b158¤ị¢-> %/“...’b158¤iị¢) 'dan kaçınarak bir bayt kaydedin . Başlangıçtaki tek bir kod sayfası dizin listesine 160 ofsetini kullanarak başka bir bayt kaydedin ( OḄ;407;270;“ọḷḊḲɦ‘-> OḄ;“ẋn=:!ס‘+160¤).
Jonathan Allan

10

Excel, 373 bayt

@ Misha'nın Mathematica yanıtından yaklaşımını yeniden kullanmak ( 6a+b+8c+5d+3e modulo 151):

=CHOOSE(MOD(6*CODE(LEFT(A1,1))+CODE(MID(A1,2,1))+8*CODE(MID(A1,3,1))+5*CODE(MID(A1&A1,4,1))+3*CODE(MID(A1&A1,5,1)),151)+1,30,,,,27,,,,3,12,,,9,,149,,,28,,,13,,,35,3,,35,7,,8,,20,,49,23,13,4,,,4,,,,,,,2,,,39,,,15,3,,3,9,,12,27,,,,,,51,15,,,,70,,65,,21,11,,,4,,24,,,6,,2,1,,,,,,2,,,30,,,,,,23,,,33,,20,,,15,,,4,,4,,,12,2,,2,47,23,,2,,,,,41,,,3,,,5,,,,,11,,21,5,,,,5,2,3,26)+1

Arama, bölümleri döndürür -1ve sonra bir bölüm ekler. Bu değişiklikleri 10içine 9iki kere ve ,1,içine ,,4 kat.

Eski yaklaşımla güncellendi. Excel, 460401 bayt

İlk satırın sonuna ( C1) girilen CSV olarak kaydedin , sonuç şu şekilde görüntülenir C2:

1c,16,revelation
1co,29,"=VLOOKUP(LEFT(C1,1)&MID(C1,3,1)&MID(C1,6,1),A:B,2)"
1j,5
1k,22
1p,5
1s,31
1t,6
1ts,5
2c,13
2co,36
2j,1
2k,25
2p,3
2s,24
2t,4
2ts,3
3j,1
a,9
at,28
c,4
d,12
du,34
e,12
ee,48
eh,6
eo,40
er,10
g,6
gn,50
h,3
hbw,13
hg,2
hs,14
i,66
j,42
jd,1
jds,21
je,3
jh,21
jm,5
jn,4
jr,52
js,24
lm,5
lv,27
m,7
ml,4
mr,16
mt,28
n,3
nhi,13
nm,36
o,1
p,150
pi,1
pip,4
po,31
r,16
rt,4
rv,22
s,8
t,3
zc,14
zp,3

Arama tablosu için dışarıda bırakabiliriz et 10ve l 24bunlar sırasıyla er 10ve eşleşir js 24.


Arama tablosu gerektiren excel formül yanıtlarını çok sık görmüyoruz. Yenilik ve yürütme için oy verin. Excel'de puanlamayla ilgili bazı meta soruları aramak / göndermek isteyebilirsiniz. Özellikle, A sütununun düzeni için birkaç bayt daha borçlu olabileceğinizi düşünüyorum. Ayrıca, muhtemelen A'dan C'ye ve B: C'yi A: B'ye taşımak istersiniz, böylece A'daki tüm boş hücreler için "şarj edilmez". Kafanın üstünde, TSV / Tüm sayfa için CSV metin dosyası doğru puan olabilir mi?
Sparr

Genel olarak, .csv dosyasındaki karakterlerin bayt sayısının (bu durumda ekli giriş değerinin baytının eksi olması), bu tür Excel yanıtlarının puanı olması gerektiğini düşünüyorum - ki sayım yukarıdakileri bir puanla bırakır 401 bayt
Taylor Scott

@TaylorScott, yeni satır karakterleri olarak CR-LF vardı. Diyelim ki 401 - 464 bu nedenle mi?
Wernisch

@Wernisch, kısacası, evet - satır beslemelerinin 10 kodlu ASCII karakter değişmezi olarak saklandığını varsayabilirsiniz, yani 1 bayt olarak sayılırlar
Taylor Scott

9

JavaScript (ES6), 251 197 bayt

s=>`-  cE1$ " +%&  %  &!!· $!#&!!)!'=6 &!6".!  -!!Q$"/  779@@= % & $'1 U( I>!!  K * "S< :  9$!C %  . $. 9E1/ %!!'" + $ % `.split`!`.join`   `.charCodeAt(parseInt(s[2]+s[0]+s[5],36)%913%168%147)-33

Ölçek

Biçimlendirilmiş ve yorumlanmış

s =>                                 // s = book name
  `-  cE1$ " +%&  %  &!!· (...)`     // data string (truncated)
  .split`!`.join`   `                // inflate padding characters '!' -> 3 spaces
  .charCodeAt(                       // read the ASCII code at the position found by
    parseInt(s[2] + s[0] + s[5], 36) // parsing 3 characters of the input in this exact
    % 913 % 168 % 147                // order as base 36 and applying three consecutive
  ) - 33                             // modulo operations, then subtract 33

2
Resmi olarak JS'deki en etkili karma yöntemini bulma ustasısınız ... Yoksa sizin için yöntemler bulan bir programınız var mı? ;)
ETHproductions

@ETHproductions Bir noktada genel bir Düğüm programı yazdım, ancak özellikle hızlı değil, bu yüzden çoğu zaman özel kod yazıyorum ... O_o
Arnauld

9

Mathematica: 323 294 bayt

Uncompress["1:eJxTTMoPSpvOwMBQzAIkfDKLSzJlgAwCBEhtJi8qwQUnpqESsqgEHyqhAjePBc7lgBOccEIUThiBCAm4AayECUZUghmV0EAlBFAdxILqN17CgWMCNwUn4QQnxEAEDyqBcLgkKsGO6gUmLAROX8rjJSRQCSU4IYpKILzAiDfEebG4wADVDmZchBYqgRYVbLgIRPiJ4VXHDDdKGuZ9AAP6TUg="][[Mod[ToCharacterCode@StringTake[#<>#,5].{6,1,8,5,3},151,1]]]&

Nasıl çalışır

Karakter kodları ile başlayan bir kitap için a, b, c, d,e değerlerini hesaplar (gerekirse etrafında sarma) 6a+b+8c+5d+3ebenzersiz olur ve sonra listede olan uzunluk 151. (Kullanılmayan girişlerin sıkıştırılmış listesindeki fasıl sayısını yukarı bakar, hangi 151 modulo önceki girişin kopyaları ile doldurulur. Bu, çalışma uzunluğu kodlamasını teşvik eder, belki de?

@Numbermaniac için liste sıkıştırma fikri için bir sayı koymak zor ama buradaki iyileştirmenin büyük bir parçası.

Eski versiyon: Mathematica, 548 435407 bayt

Join["111112333333344444455555666789"~(p=StringPartition)~1,"1010121213131314141616162121222224242425272828293131343636404248505266"~p~2,{"150"}][[Max@StringPosition["2jn3jnjduoaapimhgi2pe2tshbkjeonhntttzpn2toclsjnjmlhpiprtu1jn1pe1tsjmjlmt1toehiglimcmsnoaometrerzdnlecs2cihbwnhihshzcr1cimrarmsjhojds1kgrva2sujsalku2kglviatcmte1co1supordur2conmreosjbbeeegnijriiahpas",""<>#&@Characters[#<>#][[{1,3,6}]]]/3]]&

Nasıl çalışır

Her adı name1, 3 ve 6 karakterlerine dönüştürüyoruz namename(ör. leviticusOlur lvi, jobolurjbb bakmadan önce ).

İçine baktığımız liste, 1 basamaklı ve 2 basamaklı bölüm numaralarını dizelerde bir araya getirerek biraz sıkıştırılır.

Mathematica: 40 bayt, rakip olmayan

WolframAlpha["# chapters "<>#,"Result"]&

Evet.


Listede kullanırsanız Compress, programınızdaki listeye geri döndürülebilecek bir dize alırsınız Uncompress; tüm fonksiyon 430 bayta çıkar, 5 tasarruf sağlar :)
numbermaniac

Teşekkürler! Programın bu versiyonunun listeyi kısaltmanın daha iyi yolları vardı, ama bu bulduğum yeni yaklaşım için çok işe yaradı :)
Misha Lavrov

4
Gerçekten ikinci bir Mathematica cevabının İncil Yerleşik olmasını umuyordum
SztupY

Yerleşik yok; var WolframAlpha["number of chapters of "<>#,"Result"]&, ama bir şekilde bu aynı şey gibi hissetmiyor.
Misha Lavrov

1
Hem standart boşluklarda hem de açıkça soruda hile olarak adlandırılan Wolfram Alpha'daki cevaba bakar. (Her ne kadar Wolfram Alpha'nın kaynak kodunu ve veritabanını bayt sayısına dahil etsem, yine de iyi olur diye düşünüyorum.)
Misha Lavrov


4

Jöle ,  117  115114 bayt

OP%⁽µW%⁽£İ%237
“ĿḊƘ⁹ƙƬṂ;ɓṭ6-ạʋ⁵%$Ẋf,¥ÆÑƈø¬ȦṘd⁾“ʂụṿⱮẆƊ¦ẠLjƒ~Ḅr©“Ẏw|!¡¢o“ŻɗṢ“3ɠ‘Zċ€ÇTḢị“£ẆJQ+k⁽’ḃ6¤+\;“£¬®µıñø"BƝ¤‘¤

Çevrimiçi deneyin! veya test takımına bakın

Nasıl?

Üç tane alarak girdi dizesinin karakter sıralarının çarpımını karıştırır üç bölme kalanı listeler, sonucu liste listesinde arar ve sonucu kitap uzunlukları listesinde aramak için bulunan dizini kullanır.

Bir karma işlevi bulurken, yalnızca kod sayfası dizine eklemeye izin vermek için 255'ten fazla sonuç içeren en fazla bir kova ile sonuçlananları ve daha sonra kodlanacak toplam değer sayısını en aza indirenleri ("rahatsız edici" grup kaldırıldıktan sonra veya hiçbiri en uzun kova yoktu). 66'dan üç modüle sahip bir 59 ( %731%381%258) bir 58 ( %731%399%239) sonra 56 girişli ( %1241%865%251) [117 bayt üretiyor ] buldum ... Daha sonra sadece iki kalan ( %1987%251) kullanarak 115 buldum [115 bayt yapıyor]
. Daha sonra, iki sahte giriş eklendiğinde arama listesinin daha fazla sıkıştırılmasına izin veren üç kalan kullanarak bir 55 buldum ...

Kod:

1.

“ĿḊƘ⁹ƙƬṂ;ɓṭ6-ạʋ⁵%$Ẋf,¥ÆÑƈø¬ȦṘd⁾“ʂụṿⱮẆƊ¦ẠLjƒ~Ḅr©“Ẏw|!¡¢o“ŻɗṢ“3ɠ‘

kod sayfası dizinlerinin beş listesinin bir listesidir ( “...“...“...“...“...“...‘):

[[199,193,148,137,161,152,179,59,155,224,54,45,211,169,133,37,36,208,102,44,4,13,16,156,29,7,190,204,100,142],[167,225,226,149,207,145,5,171,76,106,158,126,172,114,6],[209,119,124,33,0,1,111],[210,157,183],[51,159]]

Bu, Zkovaları elde etmek için atom kullanılarak transpoze edilir; buna B diyelim:

[[199,167,209,210,51],[193,225,119,157,159],[148,226,124,183],[137,149,33],[161,207,0],[152,145,1],[179,5,111],[59,171],[155,76],[224,106],[54,158],[45,126],[211,172],[169,114],[133,6],37,36,208,102,44,4,13,16,156,29,7,190,204,100,142]

(ve 0ve 1kukla anahtarlar,[179,5,111] ve sağda iki daha fazla olmasını sağlar - devrik, solda daha uzun girişlerin olmasını gerektirir)

2.

“£ẆJQ+k⁽’ḃ6¤+\;“£¬®µıñø"BƝ¤‘¤

Buna C (bölüm sayılır) - tamsayıların bir listesi:

[1,4,5,6,10,12,13,14,16,21,22,24,28,31,36,40,42,48,50,52,2,7,8,9,25,27,29,34,66,150,3]

ve aşağıdaki gibi yapılandırılmıştır (yukarıdaki iki kukla anahtar bu nedenle 10,12,13artan sırada olmasına izin verir ):

“£ẆJQ+k⁽’ḃ6¤+\;“£¬®µıñø"BƝ¤‘¤
                            ¤ - nilad followed by link(s) as a nilad:
           ¤                  -   nilad followed by link(s) as a nilad:
“£ẆJQ+k⁽’                     -     base 250 number = 935841127777142
         ḃ6                   -     converted to bijective base 6 = [1,3,1,1,4,2,1,1,2,5,1,2,4,3,5,4,2,6,2,2]
            +\                -     cumulative reduce with addition = [1,4,5,6,10,12,13,14,16,21,22,24,28,31,36,40,42,48,50,52]
               “£¬®µıñø"BƝ¤‘  -   code-page indices = [2,7,8,9,25,27,29,34,66,150,3]
              ;               -   concatenate = [1,4,5,6,10,12,13,14,16,21,22,24,28,31,36,40,42,48,50,52,2,7,8,9,25,27,29,34,66,150,3]

Şimdi kodun basitleştirilmiş sürümü:

OP%⁽µW%⁽£İ%237 - Link 1, hash function: list of characters   e.g. "genesis"
O              - cast to ordinals             [103,101,110,101,115,105,115]
 P             - product                                    160493569871250
   ⁽µW         - base 250 literal                                      3338
  %            - modulo                                                1050
       ⁽£İ     - base 250 literal                                      1699
      %        - modulo                                                1050
           237 - literal                                                237
          %    - modulo                                                 102

Bċ€ÇTḢịC - Main link: list of characters                     e.g. "genesis"
B        - the list of buckets, B, described  in (1) above
   Ç     - call the last link as a monad (get the hashed value)         102
 ċ€      - count for €ach - yields 29 zeros and a one or 30 zeros       [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0]
    T    - truthy indexes - yields a list of length one or zero         [19]
     Ḣ   - head - extracts that value or zero if it was empty            19  ----------------------------------------------v
       C - the list of chapter lengths, C, described in (2) above       [1,4,5,6,10,12,13,14,16,21,22,24,28,31,36,40,42,48,50,52,2,7,8,9,25,27,29,34,66,150,3]
      ị  - index (the head value) into (the chapter list, c)             50
         -       - 1-indexed and modular so 0 yields 3 (the rightmost)

3

Python 2 , 438 429 416 411 409 bayt

lambda s:[c for x,c in zip('A|m|C|h|2|th|2 Co|D|y|E|Ep|Ec|x|ze|G|Ge|H|gg|He|Ho|I|Jo|oe|oh|na|sh|Ju|dg|Ja|Je| J|1 J|K|2 K|L|Le|Lu|M|ch|rk|tt|N|Ne|Nu|O|P|Pr|Ph|pp|Pe|2 P|R|Ro|Ru|S|Sa|2 S|T| T|2 T| Ti|2 Ti|Z|Zep'.split('|'),(28,9,4,29,36,16,13,12,34,10,6,12,40,48,6,50,3,2,13,14,66,42,3,21,4,24,1,21,5,52,1,5,22,25,5,27,24,7,4,16,28,3,13,36,1,150,31,1,4,5,3,22,16,4,8,31,24,3,5,3,6,4,14,3))if x in s.title()][-1]

Çevrimiçi deneyin!

Girişi Başlık Büyüklüğü olarak değiştirerek ve listedeki son eşleşen alt dizeyi bularak çalışır.

[('A', 28), ('m', 9), ('C', 4), ('h', 29), ('2', 36), ('th', 16), ('2 Co', 13), ...

Örneğin. '1 samuel' -> '1 Samuel'eşleşir ('m', 9), ('2', 36), ('S', 8), ('Sa', 31), ('2 S', 24). Son maç ('2 S', 24), yani cevap24


3

6502 makine kodu (C64), 204 bayt

00 C0 20 FD AE 20 9E AD 85 FD 20 A3 B6 A9 1E 85 FB A9 00 85 FC A8 B1 22 18 69
4A 65 FC 45 FB 85 FC E6 FB C8 C4 FD D0 EE A5 FC 4A 4A 4A 4A A8 A5 FC 29 0F 19
BA C0 A8 BE 3D C0 A9 00 4C CD BD 16 34 42 0D 01 00 04 03 04 1C 0A 00 06 15 07
00 16 00 22 03 02 0E 00 24 00 00 01 00 08 03 00 1C 03 01 00 00 00 00 00 03 03
00 00 00 24 10 1F 18 0E 10 00 00 00 32 30 1F 2A 00 0D 00 05 00 1B 00 0A 00 01
28 00 00 0C 96 00 10 00 00 00 18 00 00 03 00 00 00 00 00 00 15 09 00 05 00 04
00 00 04 00 00 04 00 00 18 00 1D 05 00 00 19 00 0D 00 00 06 06 0C 00 00 00 00
05 00 01 00 05 00 04 30 10 20 10 40 70 00 00 20 50 00 10 60 30 20

açıklama :

Burada anahtar değerlerine collissions olmadan eşleştiren bir özel karma işlevi kullanmaktır 0için125 *). Bölüm numaraları daha sonra 126 baytlık bir tabloya yerleştirilir. Karma tam 8 bitte yapılır, son değer, başka bir tabloda yüksek nibbles aranarak ayarlanır, bu şekilde düşük nibblesin çarpışamadığı farklı yüksek nibbles birleştirilir.

Kod parçasının yorumlanmış bir sökme listesi:

.C:c000  20 FD AE    JSR $AEFD          ; consume comma
.C:c003  20 9E AD    JSR $AD9E          ; evaluate argument
.C:c006  85 FD       STA $FD            ; remember string length
.C:c008  20 A3 B6    JSR $B6A3          ; free string ....
.C:c00b  A9 1E       LDA #$1E           ; initial xor key for hash
.C:c00d  85 FB       STA $FB
.C:c00f  A9 00       LDA #$00           ; initial hash value
.C:c011  85 FC       STA $FC
.C:c013  A8          TAY
.C:c014   .hashloop:
.C:c014  B1 22       LDA ($22),Y        ; load next string character
.C:c016  18          CLC                ; clear carry for additions
.C:c017  69 4A       ADC #$4A           ; add fixed offset
.C:c019  65 FC       ADC $FC            ; add previous hash value
.C:c01b  45 FB       EOR $FB            ; xor with key
.C:c01d  85 FC       STA $FC            ; store hash value
.C:c01f  E6 FB       INC $FB            ; increment xor key
.C:c021  C8          INY                ; next character
.C:c022  C4 FD       CPY $FD            ; check for string length
.C:c024  D0 EE       BNE .hashloop      ; end of string not reached -> repeat
.C:c026   .hashadjust:
.C:c026  A5 FC       LDA $FC            ; load hash
.C:c028  4A          LSR A              ; shift left four times
.C:c029  4A          LSR A
.C:c02a  4A          LSR A
.C:c02b  4A          LSR A
.C:c02c  A8          TAY                ; and copy to y index register
.C:c02d  A5 FC       LDA $FC            ; load hash again
.C:c02f  29 0F       AND #$0F           ; mask low nibble
.C:c031  19 BA C0    ORA $C0BA,Y        ; and add high nibble from table
.C:c034  A8          TAY                ; copy to y index register
.C:c035  BE 3D C0    LDX .chapters,Y    ; load chapter number from table
.C:c038  A9 00       LDA #$00           ; accu must be 0 for OS function:
.C:c03a  4C CD BD    JMP $BDCD          ; print 16bit value in A/X

bundan sonra bölüm numaralarının bir tablosunu ve son olarak karma değeri için yüksek kemirgenlerin bir tablosunu takip eder.

Çevrimiçi demo

Kullanım: sys49152,"name" örneğin sys49152,"genesis"(çıktı50 ).

Önemli: Program diskten yüklendiyse (çevrimiçi demoda olduğu gibi), newönce bir komut verin! Bu, bir makine programının yüklenmesi bazı C64 BASIC göstergelerini çöpe attığından gereklidir.

Kasa hakkında ipucu: C64'ün varsayılan modunda, giriş büyük harf olarak görünür. Bu ise aslında küçük harflerle, ancak C64 iki modu vardır ve büyük harf ve büyük harf karakterleri grafik sembolleri olarak göründükleri gibi üst varsayılan / grafik modu, küçük karakterler görünür.


*) Tabii ki, bu olabildiğince yoğun değil ... ah, belki daha sonra daha iyi bir çözüm buluyorum;)


1

Java 8, 623 597 590 bayt

s->{int i=s.chars().map(c->c*c*c).sum()/13595;return s.contains("tt")?28:i<258?42:i<355?1:i<357?3:i<362?16:i<366?28:i<369?21:i<375?9:i<377?24:i<380?5:i<382?1:i<386?10:i<402?7:i<436?4:i<438?5:i<439?14:i<461?3:i<463?2:i<477?22:i<478?25:i<490?5:i<491?3:i<493?12:i<500?66:i<545?3:i<546?1:i<548?21:i<562?4:i<568?24:i<570?10:i<572?31:i<573?24:i<582?16:i<583?150:i<607?40:i<629?48:i<639?50:i<663?13:i<675?3:i<677?36:i<679?52:i<734?1:i<735?6:i<736?4:i<775?14:i<785?6:i<796?3:i<800?31:i<812?6:i<876?27:i<910?29:i<911?36:i<940?22:i<1018?4:i<1035?16:i<1036?13:i<1066?12:i<1092?34:i<1229?5:i<1230?3:8;}

@Nevay sayesinde -7 bayt for- bir akışa değiştirerek .

Kesinlikle daha golf olabilir .. Sadece biraz daha test yapmak gerekir.
Uzun bir atışla en kısa cevap olmayabilir ve mevcut bazı cevapları taşıyarak golf oynayabilir, ancak yine de kendim bir şey bulmaktan gurur duyuyorum .. :)

Açıklama:

Burada deneyin.

  1. Dize girişindeki her karakterin 3'ünü (ASCII değeri olarak) alır
  2. Bunların toplamını alır
  3. Sonucu şuna böler: 13595 tamsayı bölme olarak (Java'da bu sonuç otomatik olarak kesilir / katlanır).
  4. Bu, 65 benzersiz değer bırakır (yalnızca habakkukve matthewher ikisinin de değeri vardır 674)
  5. Ve sonra bir dev üçlü - eğer doğru sonucu döndürürse (mümkünse tek bir üçlü ifadede birleştirilen birkaç değerle ( 381ve 382her ikisi 1; 425ve 436her ikisi 4; 649ve 663her ikisi 13; 952ve 1018her ikisi 4; 1122ve 1229her ikisi de 5).

1
Bunun int i=s.chars().map(c->c*c*c).sum()/13595;yerine kullanabilirsiniz int i=0;for(int c:s.getBytes())i+=c*c*c;i/=13595;.
Nevay
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.