सीक्वेंटिया फिलाइ बोनशिएक


14

लियोनार्डो ऑफ पीसा (सीए 1175 - सीए 1245) को फाइबोनैचि के रूप में जाना जाता है । लेकिन यह वास्तव में लैटिन "फ़िलियस बोनसीस" (बोनेसिया के बेटे) के लिए एक छोटी है जो 18 वीं शताब्दी ( विकिपीडिया के अनुसार ) के दौरान बनाई गई थी ।

इस चुनौती में, आपको 1 सेंट और 20 वें के बीच एक क्रमिक संख्या (शाब्दिक अर्थ में) दी जाएगी और आपको फाइबोनैचि अनुक्रम में संबंधित शब्द वापस करना होगा ।

ट्विस्ट यह है कि ऑर्डिनल नंबर लैटिन में दिया जाएगा।

उदाहरण : "डुओडेसिमस" → ।89

पूर्ण I / O तालिका

 input              | meaning | output
--------------------+---------+--------
 "primus"           |   1st   |    0
 "secundus"         |   2nd   |    1
 "tertius"          |   3rd   |    1
 "quartus"          |   4th   |    2
 "quintus"          |   5th   |    3
 "sextus"           |   6th   |    5
 "septimus"         |   7th   |    8
 "octavus"          |   8th   |   13
 "nonus"            |   9th   |   21
 "decimus"          |  10th   |   34
 "undecimus"        |  11th   |   55
 "duodecimus"       |  12th   |   89
 "tertius decimus"  |  13th   |  144
 "quartus decimus"  |  14th   |  233
 "quintus decimus"  |  15th   |  377
 "sextus decimus"   |  16th   |  610
 "septimus decimus" |  17th   |  987
 "duodevicesimus"   |  18th   | 1597
 "undevicesimus"    |  19th   | 2584
 "vicesimus"        |  20th   | 4181

नियम

  • इनपुट होने की गारंटी है वास्तव में ऊपर वर्णित तार में से एक।
  • यदि वह मदद करता है, तो आप इसे पूर्ण अपरकेस के बजाय ले सकते हैं। लेकिन यह सभी प्रविष्टियों के लिए संगत होना चाहिए। मिश्रित मामलों की अनुमति नहीं है।
  • आपके एल्गोरिथ्म और भाषा के आधार पर, अनुक्रम की शर्तों को हार्डकोड या कंप्यूटिंग या तो बाइट्स जीत या खो सकते हैं। दोनों दृष्टिकोण स्पष्ट रूप से अनुमत हैं।
  • यह !

मजेदार तथ्य: एक latin.stackexchange.com है
JayCe

जवाबों:


8

आर , 91 86 बाइट्स

एक brute-मजबूर UTF8 लुकअप टेबल में बाइट्स के योग के सूचकांक को देखें और उत्तर देने के लिए जादू फाइबोनैचि उत्पन्न करने वाले फ़ंक्शन का उपयोग करें ।

function(x)round(1.618^match(sum(!x)%%93,!'%(-1!5+3JOSCW6')*.2765)
"!"=utf8ToInt

इसे ऑनलाइन आज़माएं!

संपादित करें: बेहतर संख्यात्मक गोलाई द्वारा -2 बाइट्स

संपादित करें: लुक में बदलाव के साथ -3 बाइट्स (संकेत के लिए धन्यवाद, @Giuseppe!)


UTF8 लुकअप के साथ कुछ ऐसा ही करना चाहते थे। कोई सुराग नहीं था कि आप इस तरह से Fibonnaci कर सकते थे। शायद मैं जो करना चाहता था, उससे कम ( chartrUTF8 के योग के UTF8 के साथ, और वैल्यू intToUtf8का आउटपुट chartr
JayCe


"sextus decimus"Giuseppe के लिए असफल होने लगता है ।
जे। डउ

1
आप सही बात पर थे @Giuseppe, पता चला कि 3 मैजिक 2-अंकीय मोडुली थे, जिसके लिए बाइट्स का योग अद्वितीय था, 69, 88 और 93, और 88 वह था जिसे बनाने के लिए किसी स्थिरांक की आवश्यकता नहीं थी समझदार स्ट्रिंग।
जे। डोडे

9
कभी-कभी मुझे ऐसा लगता है कि कोडगुल्फ के आधे हिस्से में मापांक के रूप में सही संख्या का उपयोग हो रहा है ...
Giuseppe

4

रूबी, 104 93 बाइट्स

->x{[8,4181,3,144,21,13,0,1,233,5,987,0,377,55,0,89,1,1597,34,610,0,2,2584][x.sum%192%76%23]}

इसे ऑनलाइन आज़माएं!

बस बाइट्स की राशि लेता है, modulo 192 modulo 76 modulo 23, और अनुक्रमणिका एक लुकअप तालिका में। (ब्रूट बल द्वारा पाए गए मैजिक नंबर।)


4

साफ , 87 बाइट्स

\nवास्तविक कच्चे मूल्यों के साथ संकलक के जुर्माने के बाद छोड़कर सभी बच जाते हैं। (TIO और SE के पास समस्याएँ हैं, हालांकि यह UTF-8 के वैध नहीं हैं, और इसलिए यह यहाँ से बच गया है)

FryAmTheEggman ने एक अच्छा प्रदर्शन / वर्कअराउंड बनाया: यहां

import StdEnv
$s=hd[i\\i<-k 1 0&c<-:"\340\152\060\065\071\354\172\045\223\n\255\362\132\137\143\026\244\051\344\270"|c==sum s]
k b a=[a:k(a+b)b]

इसे ऑनलाइन आज़माएं!

फ़ंक्शन को परिभाषित करता है $ :: [Char] -> Int, जो अपरकेस वर्ण मानों के योग में विशिष्टता का उपयोग करता है ताकि यह निर्धारित किया जा सके कि किस क्रम में (हेल्पर फ़ंक्शन द्वारा उत्पन्न k) वापस लौटने के लिए।


4

6502 मशीन कोड (C64), 82 बाइट्स

00 C0 20 9E AD 20 A3 B6 A8 88 A9 05 4A 90 02 49 B1 71 22 88 10 F6 29 1F C9 07
B0 02 69 0D A8 BE 32 C0 B9 1E C0 4C CD BD 00 00 00 00 03 00 0A 00 06 10 01 00
FF 00 02 00 00 00 00 00 08 00 15 0D DB 02 18 90 3D 55 79 05 FF E9 62 22 01 59
01 37 FF 03

यह हैशिंग (बेशक) का उपयोग करता है, लेकिन 6502 पर लघु कार्यान्वयन के लिए अनुकूलित है, जो कि शिफ्टिंग द्वारा निर्धारित कैरी फ्लैग का लाभ उठाता है और इसके अतिरिक्त उपयोग किया जाता है। हैशिंग के लिए मैजिक नंबर एक छोटे सी प्रोग्राम के साथ क्रूरता से पाए गए; FFबाइट्स हैश तालिका में दुर्भाग्यपूर्ण छेद कर रहे हैं;)

बाइट गणना: 2 बाइट्स लोड पता, 38 बाइट्स कोड, 42 बाइट्स मान के लिए हैशटेबल।

ऑनलाइन डेमो

उपयोग: SYS49152"[ordinal]"उदाहरण के लिए SYS49152"DUODECIMUS"। (नोट डिफ़ॉल्ट C64 कॉन्फ़िगरेशन में ऊपरी मामले दिखाई देते हैं)।

महत्वपूर्ण : पहली शुरुआत से पहले, एक NEWकमांड जारी करें । इसकी आवश्यकता इसलिए है क्योंकि C64 बेसक LOADकमांड कुछ बेसिक वैक्टर के साथ फिडेल करता है, यहां तक ​​कि मशीन प्रोग्राम को कुछ निरपेक्ष पते (जैसे $C000/ 49152) पर लोड करते समय ।

असंतुष्ट टिप्पणी :

         00 C0                          ; load address
.C:c000  20 9E AD    JSR $AD9E          ; evaluate expression
.C:c003  20 A3 B6    JSR $B6A3          ; evaluate as string
.C:c006  A8          TAY                ; length to y register
.C:c007  88          DEY                ; decrement (start at last char)
.C:c008  A9 05       LDA #$05           ; start value for hash
.C:c00a   .hashloop:
.C:c00a  4A          LSR A              ; shift right
.C:c00b  90 02       BCC .skip          ; shifted bit zero? -> skip xor
.C:c00d  49 B1       EOR #$B1           ; xor "magic" value
.C:c00f   .skip:
.C:c00f  71 22       ADC ($22),Y        ; add current character (plus carry)
.C:c011  88          DEY                ; previous character
.C:c012  10 F6       BPL .hashloop      ; pos >= 0? -> repeat
.C:c014  29 1F       AND #$1F           ; mask lowest 5 bits
.C:c016  C9 07       CMP #$07           ; larger than 7 ?
.C:c018  B0 02       BCS .output        ; -> to output
.C:c01a  69 0D       ADC #$0D           ; add 13
.C:c01c   .output:
.C:c01c  A8          TAY                ; hash to y register
.C:c01d  BE 32 C0    LDX .lb-8,Y        ; load low byte from hashtable
.C:c020  B9 1E C0    LDA .hb-8,Y        ; load high byte from hashtable
.C:c023  4C CD BD    JMP $BDCD          ; to output of 16bit number
.C:c026   .hb:
.C:c026  00 00 00 00 .BYTE $00,$00,$00,$00
.C:c02a  03 00 0A 00 .BYTE $03,$00,$0A,$00
.C:c02e  06 10 01 00 .BYTE $06,$10,$01,$00
.C:c032  FF 00 02 00 .BYTE $FF,$00,$02,$00
.C:c036  00 00 00 00 .BYTE $00,$00,$00,$00
.C:c03a   .lb:
.C:c03a  08 00 15 0D .BYTE $08,$00,$15,$0D  ; second byte used in .hb as well
.C:c03e  DB 02 18 90 .BYTE $DB,$02,$18,$90
.C:c042  3D 55 79 05 .BYTE $3D,$55,$79,$05
.C:c046  FF E9 62 22 .BYTE $FF,$E9,$62,$22
.C:c04a  01 59 01 37 .BYTE $01,$59,$01,$37
.C:c04e  FF 03       .BYTE $FF,$03

C64 बुनियादी V2 परीक्षण सूट

( DATAलाइनों में मशीन प्रोग्राम युक्त )

ऑनलाइन डेमो

0fOa=49152to49231:rEb:pOa,b:nE
1?"primus",:sY49152"primus":?
2?"secundus",:sY49152"secundus":?
3?"tertius",:sY49152"tertius":?
4?"quartus",:sY49152"quartus":?
5?"quintus",:sY49152"quintus":?
6?"sextus",:sY49152"sextus":?
7?"septimus",:sY49152"septimus":?
8?"octavus",:sY49152"octavus":?
9?"nonus",:sY49152"nonus":?
10?"decimus",:sY49152"decimus":?
11?"undecimus",:sY49152"undecimus":?
12?"duodecimus",:sY49152"duodecimus":?
13?"tertius decimus",:sY49152"tertius decimus":?
14?"quartus decimus",:sY49152"quartus decimus":?
15?"quintus decimus",:sY49152"quintus decimus":?
16?"sextus decimus",:sY49152"sextus decimus":?
17?"septimus decimus",:sY49152"septimus decimus":?
18?"duodevicesimus",:sY49152"duodevicesimus":?
19?"undevicesimus",:sY49152"undevicesimus":?
20?"vicesimus",:sY49152"vicesimus":?
21dA32,158,173,32,163,182,168,136,169,5,74,144,2,73,177,113,34,136,16,246,41,31
22dA201,7,176,2,105,13,168,190,50,192,185,30,192,76,205,189,0,0,0,0,3,0,10,0,6
23dA16,1,0,255,0,2,0,0,0,0,0,8,0,21,13,219,2,24,144,61,85,121,5,255,233,98,34,1
24dA89,1,55,255,3


3

सी (जीसीसी) , 135 129 बाइट्स

छत और लॉगर्न के सुझाव से 6 बाइट्स नीचे

f;i;b;o;n(char*a){for(f=i=b=o=0;*a;o+=21*b+++*a++-70);for(b=1,o="TACIHAAJQFSAAARCAMGKDANPEAOAAL"[o%30];--o>65;f=b,b=i)i=f+b;a=i;}

इसे ऑनलाइन आज़माएं!

स्पष्टीकरण:

f; i; b; o; // Variables

n (char *a)
{
     // Calculate a silly hash of incoming string
     for (f = i = b = o = 0; *a; o += 21 * b++ + *a++ - 70);

     // Use the hash to index into the array of number values
     // and calculate the corresponding Fibonacci sequence element
     for
     (
         b = 1, 
         o = "TACIHAAJQFSAAARCAMGKDANPEAOAAL"[o % 30]; 

         --o > 65; 
         f = b, b = i
     )
         i = f + b;

     // implicit return
     a = i;
}

आप बदल सकते हैं return i;के साथa=i;
Logern

2

पायथ , 54 बाइट्स

L?>b1+ytbyttbbyxc."axnÛ±r†XVW‹(„WîµÏ£"2+hQ@Q618

परीक्षण सूट

सूचना: जैसा कि कोड कुछ अनपेक्षित वर्णों का उपयोग करता है, यह स्टैक एक्सचेंज पर सही ढंग से प्रदर्शित नहीं हो सकता है। प्रदान किए गए लिंक से कार्यशील और कॉपी-पेस्ट करने योग्य स्रोत बन जाता है।

लंबी कहानी छोटी, Q[0]+Q[618%len(Q)]सभी स्वीकृत इनपुट के लिए अद्वितीय परिणाम देती है Q


1

पायथन 2 , 292 बाइट्स

f=lambda x:x>1and f(x-1)+f(x-2)or x
def g(t):
	for i,c in zip("pr secun ter qua qui sex sep oc no ec".split(),range(1,11))+zip("un duo es ev".split(),(1,2,20,"-")):t=t.replace(i,str(c))
	return f(abs(eval("+".join("".join((" ",c)[c in"0123456789-"]for c in t).split()).replace("+-+","-")))-1)

इसे ऑनलाइन आज़माएं!

इस उत्तर से फाइबोनैचि जनरेटर बेशर्मी से चुराया गया है ।

प्रत्येक शब्द को उसके सार्थक घटक भागों में तोड़ता है और बाकी को "डुओडेविसिमस" में जोड़ता है, उदाहरण के लिए, हम केवल "डुओ ईएस ईएस" -> "2 - 20" -> एब्स ("2-20")>> के बारे में परवाह करते हैं। 18)।

फाइबोनैचि जनरेटर फ़ंक्शन के लिए परिकलित मान (माइनस 1 से 0-ऑफ़सेट) पास करता है।

असंगठित व्याख्या:

# Fibonacci function
f=lambda x:x>1and f(x-1)+f(x-2)or x

def g(t):
    # generates a list of key, value pairs like [("pr", 1, ..., ("ec", 10)] +
    values = zip("pr secun ter qua qui sex sep oc no ec".split(), range(1,11))

    # adds values to existing list
    values += zip("un duo es ev".split(),(1,2,20,"-"))

    # replace the matching values in the string with the appropriate number/sign.
    # ORDER MATTERS - if "un" is searched for before "secun", this generates incorrect values.
    for i,c in values:
        t = t.replace(i,str(c))

    # replace each non-digit, non-minus character in string with "c"
    t = [(" ",c)[c in"0123456789-"]for c in t]

    # convert space-replaced array back to a string
    # then split it on spaces, creating an array of values
    t = "".join(t).split()

    # turn the array back into a string, with each individual item separated by "+"
    # this will cause "-" to become "+-+" (since "-" is ALWAYS between two numbers), so prelace that sequence with "-"
    t = "+".join(t).replace("+-+","-")

    # evaluate the string as an expression, and take the absolute value for when - occurs
    t = abs(eval(t))

    # pass the value, minus 1 for 0-offset, to the Fibonacci function.
    return f(t-1)

1

पायथन 2 , 97 79 बाइट्स

lambda s:int(1.618**('RV3NJ^[KDP=Z62AWeG<C'.find(chr(hash(s)%69+48)))*.4474+.5)

इसे ऑनलाइन आज़माएं!

पहले, हम लैटिन से एक संख्या में बदलना चाहते हैं n; यह सुनिश्चित करने के लिए पर्याप्त बार इनपुट स्ट्रिंग की नकल310 करके पूरा किया जाता है ताकि कम से कम 11 वर्ण हों; और फिर rd और th अक्षर (शून्य अनुक्रमित) हैश मॉड 69 को ले कर एक अनोखी जोड़ी बनाते हैं और इसे प्रिंट करने योग्य चार में बदल देते हैं।

अब हमारे पास है nnवें फाइबोनैचि संख्या को खोजने के लिए , हम राउंडिंग विधि का उपयोग कर सकते हैं , केवल सटीक के कई अंकों का उपयोग करते हुए, जैसा कि हमें फिब (20) तक की आवश्यकता है।


1

जावास्क्रिप्ट (Node.js) , 100 97 95 92 91 बाइट्स

x=>1.618**(p=parseInt)("1 jgf7  ei 490dbch62385a"[p(x.length+x,32)%12789%24],36)*.4474+.5|0

इसे ऑनलाइन आज़माएं!

चेतावनी: फ़्लोटिंग प्वाइंट की सुरक्षा का उल्लंघन

जावास्क्रिप्ट में न तो एक अंतर्निहित हैश फ़ंक्शन है, और न ही पर्याप्त छोटा चरित्र-से-एएससीआईआई फ़ंक्शन ( String.charCodeAtयह पहले से सबसे छोटा है), इसलिए मुझे अपने आप से एक साधारण हैश फ़ंक्शन को परिभाषित करने की आवश्यकता है।

चास ब्राउन ने हैश की गणना के बाद उसी तरह की गोलाई पद्धति का उपयोग किया।

ब्रूट-फोर्सिंग के एक पूरे दिन के बाद एक बेहतर पाया जाता है:

b32_to_dec(x.length + x) % 12789 % 24 (* फ्लोटिंग पॉइंट अशुद्धि)

b32_to_dec(x.length + x) % 353 % 27 (* फ्लोटिंग पॉइंट अशुद्धि)

b36_to_dec(x.length + x[2]) % 158 % 29 - 4

b36_to_dec(x[2] + x.length) % 741 % 30

b36_to_dec(x[0] + x[2] + x.length) % 4190 % 27

parseInt(x.length + x, 32) परिणाम

primus 7310236636
secundus 9773632960476
tertius 272155724764
quartus 269453490140
quintus 269461747676
sextus 7054
septimus 9774067964892
octavus 266721394652
nonus 192700380
decimus 254959770588
undecimus 350449413217244
duodecimus 36520018280274912 **NOT PRECISE**
tertius decimus 1302947875804
quartus decimus 1300245641180
quintus decimus 1300253898716
sextus decimus 37774
septimus decimus 42759416798172
duodevicesimus 43016381192006637977600 **NOT PRECISE**
undevicesimus 1326703556626028691456 **NOT PRECISE**
vicesimus 351376069188572

फ्लोटिंग पॉइंट अशुद्धि के शोषण के बिना संस्करण: 95 बाइट्स

x=>1.618**(p=parseInt)("52d7i 6  he 8309jafc 41bg"[p(x.length+x[2],36)%158%29-4],36)*.4474+.5|0

इसे ऑनलाइन आज़माएं!

b36_to_dec(x.length + x[2]) % 158 % 29 - 4

हैश टेबल

 Latin word           | Length | 3rd | Hash | Decimal | %158 | %29-4
----------------------+--------+-----+------+---------+------+-------
 primus               |      6 | i   | 6i   |     234 |   76 |    14
 secundus             |      8 | c   | 8c   |     300 |  142 |    22
 tertius              |      7 | r   | 7r   |     279 |  121 |     1
 quartus              |      7 | a   | 7a   |     262 |  104 |    13
 quintus              |      7 | i   | 7i   |     270 |  112 |    21
 sextus               |      6 | x   | 6x   |     249 |   91 |     0
 septimus             |      8 | p   | 8p   |     313 |  155 |     6
 octavus              |      7 | t   | 7t   |     281 |  123 |     3
 nonus                |      5 | n   | 5n   |     203 |   45 |    12
 decimus              |      7 | c   | 7c   |     264 |  106 |    15
 undecimus            |      9 | d   | 9d   |     337 |   21 |    17
 duodecimus           |     10 | o   | 10o  |    1320 |   56 |    23
 tertius decimus      |     15 | r   | 15r  |    1503 |   81 |    19
 quartus decimus      |     15 | a   | 15a  |    1486 |   64 |     2
 quintus decimus      |     15 | i   | 15i  |    1494 |   72 |    10
 sextus decimus       |     14 | x   | 14x  |    1473 |   51 |    18
 septimus decimus     |     16 | p   | 16p  |    1537 |  115 |    24
 duodevicesimus       |     14 | o   | 14o  |    1464 |   42 |     9
 undevicesimus        |     13 | d   | 13d  |    1417 |  153 |     4
 vicesimus            |      9 | c   | 9c   |     336 |   20 |    16
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.