यह किस दिन (फ्लोटटोनिया पर) है?


34

आप फ्लॉपटोनिया ग्रह के लिए अपने रास्ते पर एक अंतरिक्ष पर्यटक हैं! फ्लाइट को एक और 47,315 साल लगने वाले हैं, इसलिए समय बीतने से पहले आप क्रायोजेनिकली फ्रोजन हो जाते हैं ताकि आप फ्लॉपटोनियन कैलेंडर को समझने में मदद करने के लिए एक प्रोग्राम लिखने का फैसला करें।

यहाँ 208-दिवसीय फ्लॉपटोनियन कैलेंडर है:

Month       Days    Input Range
Qupu        22      [0-22)
Blinkorp    17      [22-39)
Paas        24      [39-63)
Karpasus    17      [63-80)
Floopdoor   1       [80]
Dumaflop    28      [81-109)
Lindilo     32      [109-141)
Fwup        67      [141-208)

चुनौती

आपका कार्यक्रम, वर्ष में एक पूर्णांक दिन (रेंज [0-208)) महीने के इसी दिन और महीने के नाम का उत्पादन करने के लिए है;13 Dumaflop ) के उत्पादन के लिए है।

हालाँकि, इसका एक अपवाद है: फ्लॉप्टर फ़्लॉप्टेनियंस के लिए एक विशेष समय जो जाहिरा तौर पर अपने स्वयं के कैलेंडर पेज का हकदार है। कारण है कि, Floopdoor एक दिन के साथ लिखा है (यानी उत्पादन होता है Floopdoor, नहीं1 Floopdoor ) के ।

परीक्षण के मामलों

0   => 1 Qupu
32  => 11 Blinkorp
62  => 24 Paas
77  => 15 Karpasus
80  => Floopdoor
99  => 19 Dumaflop
128 => 20 Lindilo
207 => 67 Fwup

नियम

  • आपको एक पूरा कार्यक्रम लिखना होगा।
  • आप मान सकते हैं कि इनपुट हमेशा मान्य है।
  • आपके आउटपुट में एक अनुगामी न्यूलाइन हो सकती है, लेकिन अन्यथा किसी भी अतिरिक्त वर्ण से मुक्त होनी चाहिए। मामले को प्रदान किए गए उदाहरणों से भी मेल खाना चाहिए।
  • आप दिनांक / समय फ़ंक्शन का उपयोग कर सकते हैं।
  • कोड की लंबाई बाइट्स में मापी जानी है।

2
क्या यह "फ्लॉप्डो आर" या "फ्लॉप्डोर" है? पहले चार्ट में अतिरिक्त है o, लेकिन नाम के अन्य उदाहरण नहीं हैं।
jwodder

4
तो ... 47k वर्षों में, कुछ भी नहीं बदलेगा?
नहीं कि चार्ल्स

2
@NothatCharles इसके अलावा, यदि ग्रह दूर है, तो क्या यह तब तक पुराना नहीं होगा जब तक आप इसे पहली जगह पर नहीं पा लेते?
सुपरजेडी २२४

3
जैसे कि ग्रेगोरियन कैलेंडर काफी खराब नहीं था।
आर्टुरो टॉरेस सेंचेज

3
@ ArturoTorresSánchez वैसे तो कम से कम कोई लीप वर्ष नहीं है। लेकिन क्या फ्लॉपटोनिया के बारे में कोई अन्य कहानियां हैं, या पूरी सेटिंग केवल इस विशिष्ट पहेली के लिए बनाई गई थी? क्या Fwup सर्दियों के लिए उनका शब्द है? या मुझे सिर्फ अपनी पूंछ वापस वर्ल्डबिल्डिंग में मिलनी चाहिए?
डैमियन येरिक

जवाबों:


14

पायथ - 105 103 90 88 बाइट्स

आधार रूपांतरण का उपयोग करता है। दो सरल लुकअप टेबल, एक नाम के लिए और एक शुरुआत तिथियों के लिए, और फ्लोपर के लिए अंत में एक टर्नरी।

KhfgQhTC,aCM"mQP?'"Zcs@LGjC"îºBüÏl}W\"p%åtml-¢pTÇÉ(°±`"23\c+?nQ80+-hQhKdkreK3

स्ट्रिंग को आधार 128 के रूप में नहीं, बल्कि आधार 23 के रूप में संपीड़ित करता है। सबसे पहले, यह इसे वर्णमाला के सूचकांकों में बदल देता है। इसके लिए विभाजक की आवश्यकता थी cजो महीने के किसी भी नाम में प्रकट नहीं होता है। फिर यह एनकोड करता है कि बेस 23 नंबर से दस बेस करने के लिए (सबसे अधिक मूल्य जो दिखाई दिया था w), फिर बेस 256 में कनवर्ट होता है।

प्रारंभ तिथियां उनके यूनिकोड कोडपॉइंट हैं, कोई आधार रूपांतरण नहीं।

K                       K =
 hf                     First that matches the filter
  gQ                    >= Q
   hT                   First element of filter var
  C,                    Zip two sequences
   a       Z            Append 0 (I could save a byte here but don't want to mess with null bytes)
    CM"..."             Map the string to its codepoints
   c          \c        Split by "c"
    s                   Sum by string concatenation
     @LG                Map to location in alphabet
      j     23          Base 10 -> Base 23
      C"..."            Base 256 -> Base 10
+                       String concatenation
 ?nQ80                  Ternary if input != 80
  +-hQhK                Input - start date + 1
  k                     Else empty string
 r  3                   Capitalize first letter
  eK                    Of month name

इसे यहाँ ऑनलाइन आज़माएँ

टेस्ट सूट


मैं पायथ के लिए बहुत नया हूं, क्या आप इसे तोड़ सकते हैं? मैं बहुत आभारी रहूंगा।
विनी

1
@ मैं पहले सिर्फ स्पष्ट गोल्फ खत्म करना चाहता था। सभी अजीब प्रतीक इसलिए हैं क्योंकि मैंने अंतरिक्ष को बचाने के लिए बेस 26 प्रतीकों (वर्णमाला) को बेस 256 में संकुचित कर दिया।
माल्टसेन

1
@ क्या यह पर्याप्त है? यदि आपके कोई प्रश्न हों, तो मुझे यहाँ / चैट में बेझिझक पाइए ।
माल्टसेन

19

पायथन 3, 159 156 152 151 150 148 बाइट्स

n=int(input())+1
for c,x in zip(b" C","Qupu Blinkorp Paas Karpasus Floopdoor Dumaflop Lindilo Fwup".split()):c>=n>0and print(*[n,x][-c:]);n-=c

बाइट्स ऑब्जेक्ट में zipअनपेक्षित वर्ण हैं:

for c,x in zip(b"\x16\x11\x18\x11\x01\x1c C", ...): ...

( for/zip-3 बाइट्स के लिए लूप सुझाने के लिए @xnor का धन्यवाद )


11
उस पल जब एक अजगर जवाब --- है <रों> </ s> के लिए गर्दन को गर्दन जा रहा --- एक Pyth जवाब पिटाई
अनुकूलक

1
एक bytestring का उपयोग सरल है!
विनी

मुझे ऐसा लग रहा है कि ऐसा होने bके forबजाय सीधे उसके साथ सीधे हाथ मिलाना चाहिए for c in b"...":i+=n>0;n-=c
xnor

1
ओह, रुको, आपको nनीचे जाने से रोकने के लिए सही मूल्य की आवश्यकता है। फिर भी ऐसा कुछ संभव होना चाहिए, x=n>c;n-=c*x;i+=xलेकिन पता नहीं कि क्या यह इसके लायक है।
xnor

13

पीट 2125 बाइट्स

यह सबसे छोटा नहीं है, लेकिन यह सुंदर और रंगीन है ...

प्रत्येक पिक्सेल को हाथ से अपने द्वारा रखा जाता है। इसे चलाने के लिए यहां फायरफॉक्स (क्रोम काम नहीं करेगा) और इसे 1 की कोडेल चौड़ाई के साथ लोड करें (यह काला दिखाई देगा, चिंता न करें), नंबर दर्ज करें और रन बटन दबाएं!

छोटा कार्यक्रम: छोटा संस्करण


बढ़े हुए (10 की कोडेल चौड़ाई): यहाँ छवि विवरण दर्ज करें


dead chexबाइट की गिनती में नहीं जोड़ा जाता है?
बीटा डिके

1
@ बाइट को उचित मानने के लिए वास्तव में डिस्क पर छोटी छवि का आकार है, इसलिए भले ही बाइट की संख्या निर्धारित हो
डेडचेक्स

12

पायथ 178 156 153 147 बाइट्स

J?<Q22,_1"Qupu"?<Q39,21"Blinkorp"?<Q63,38"Paas"?<Q80,62"Karpasus"?<Q81,k"Floopdoor"?<Q109,80"Dumaflop"?<Q141,108"Lindilo",140"Fwup"?nhJkjd,-QhJeJeJ

Permalink

दूसरा गोल्फ कभी, कोई भी पाइथ फीडबैक बहुत मददगार होगा।

व्याख्या

J                       (Auto)Assign J a tuple of the first day & month name
 ?<Q22,_1"Qupu"         Recall that Q auto-initialized to raw_input()
 ?<Q39,21"Blinkorp"     ? is ternary
 ?<Q63,38"Paas"         , is a two-pair tuple
 ?<Q80,62"Karpasus"
 ?<Q81,k"Floopdoor"     Special case handled by empty string as first day
 ?<Q109,80"Dumaflop"
 ?<Q141,108"Lindilo"
 ,140"Fwup"             Since input assumed valid, no need to test for Fwup
?nhJk                   Is day not an empty string?
jd,                     join on space
   -QhJ                 Q-(first day or -1 on first month) + 1
   eJ                   The month itself
eJ                      Else print only the month name on Floopdoor

आपको संपूर्ण J=...टर्नरी स्थिति में डालने के लिए इनलाइन असाइनमेंट का उपयोग करने में सक्षम होना चाहिए ।
माल्टीसेन

7

CJam, 98 96 93 बाइट्स

0000000: 72 69 63 22 00 16 27 3f 50 51 6d 8d d0 22 66 2d  ric"..'?PQm.."f-
0000010: 5f 7b 30 3c 7d 23 28 5f 40 3d 29 53 40 22 06 32  _{0<}#(_@=)S@".2
0000020: 88 b2 ce d2 87 2f 1e 79 62 1b 7a 11 53 a6 cc 02  ...../.yb.z.S...
0000030: 40 c5 c6 82 d0 dd b7 4b ed ee 1c dc 4f f5 ec 67  @......K....O..g
0000040: 22 32 35 35 62 32 33 62 27 61 66 2b 27 63 2f 3d  "255b23b'af+'c/=
0000050: 5f 2c 39 3d 7b 5c 3f 7d 26 28 65 75 5c           _,9={\?}&(eu\

ऊपर एक प्रतिवर्ती हेक्सडंप है, क्योंकि स्रोत कोड में अनपेक्षित वर्ण हैं।

अधिकांश अनपेक्षित वर्ण ऑनलाइन इंटरप्रेटर के लिए कोई समस्या नहीं हैं, लेकिन पहले स्ट्रिंग में नल बाइट एक डील ब्रेकर है।

एक बाइट की कीमत पर, हम इसे 1 और 1 स्ट्रिंग के प्रत्येक कोड बिंदु पर 1 इनपुट में जोड़कर ठीक कर सकते हैं। आप इस संस्करण को CJam दुभाषिया में आज़मा सकते हैं

यदि पर्मलिंक आपके ब्राउज़र में काम नहीं करता है, तो आप इस पेस्ट से कोड कॉपी कर सकते हैं

परीक्षण के मामलों

$ LANG=en_US
$ xxd -ps -r > flooptonia.cjam <<< 726963220016273f50516d8dd022662d5f7b303c7d23285f403d29534022063288b2ced2872f1e79621b7a1153a6cc0240c5c682d0ddb74bedee1cdc4ff5ec6722323535623233622761662b27632f3d5f2c393d7b5c3f7d262865755c
$ wc -c flooptonia.cjam 
96 flooptonia.cjam
$ for d in 0 32 62 77 80 99 128 207; do cjam flooptonia.cjam <<< $d; echo; done
1 Qupu
11 Blinkorp
24 Paas
15 Karpasus
Floopdoor
19 Dumaflop
20 Lindilo
67 Fwup

यह काम किस प्रकार करता है

ric     e# Read a Long from STDIN and cast to Character.
"…"     e# Push the string that corresponds to [0 22 39 63 80 81 109 141 208].
f-      e# Subtract each character from the input char.
        e# Character Character - -> Long
_{0<}#  e# Find the index of the first negative integer.
(_      e# Subtract 1 from the index and push a copy.
@=)     e# Select the last non-negative integer from the array and add 1.
S@      e# Push a space and rotate the decremented index on top of it.
"…"     e# Push a string that encodes the months' names.
255b23b e# Convert from base 255 to 23.
'af+    e# Add the resulting digits to the character 'a'.
'c/     e# Split at occurrences of 'c' (used as separator).
=       e# Select the chunk that corresponds to the index.
_,9=    e# Check if its length is 9 (Floopdoor).
{\?}&   e# If so, swap and execute ternary if.
        e# Since the string " " is truthy, S Month Day ? -> Month.
(eu\    e# Shift out the first char, convert it to uppercase and swap.

5

एसडब्ल्यूआई-प्रोलॉग, 237 232 213 बाइट्स

a(X):-L=[22:"Qupu",39:"Blinkorp",63:"Paas",80:"Karpasus",81:"Floopdoor",109:"Dumaflop",141:"Lindilo",208:"Fwup"],nth1(I,L,A:B),X<A,J is I-1,(nth1(J,L,Z:_),Y=X-Z;Y=X),R is Y+1,(X=80,write(B);writef("%w %w",[R,B])).

यहाँ हम Prolog का बैक ट्रैकिंग प्रणाली का उपयोग बार बार लागू करने के लिए nth1/3सूची में L, पहला तत्व प्राप्त करने के लिए LastDay+1:MonthNameकी Lहै, जिसके लिए X < LastDay+1आयोजित करता है। फिर हम महीने के दिन का मूल्यांकन करने के लिए सूची में इस एक के ठीक पहले महीने की तलाश करते हैं।


5

क्यू, 134 146 बाइट्स

दूसरा कट - प्रोग्राम (146 बाइट्स)

v:bin[l:0 22 39 63 80 81 109 141 208;x:(*)"I"$.z.x];1(,/)($)$[v=4;`;(1+x-l v)," "],`Qupu`Blinkorp`Paas`Karpasus`Floopdoor`Dumaflop`Lindilo`Fwup v;

पहला कट - फंक्शन (134 बाइट्स)

{v:bin[l:0 22 39 63 80 81 109 141 208;x];(,/)($)$[v=4;`;(1+x-l v)," "],`Qupu`Blinkorp`Paas`Karpasus`Floopdoor`Dumaflop`Lindilo`Fwup v}

परिक्षण

q){v:bin[l:0 22 39 63 80 81 109 141 208;x];(,/)($)$[v=4;`;(1+x-l v)," "],`Qupu`Blinkorp`Paas`Karpasus`Floopdoor`Dumaflop`Lindilo`Fwup v} each 0 32 62 77 80 99 128 207
"1 Qupu"
"11 Blinkorp"
"24 Paas"
"15 Karpasus"
"Floopdoor"
"19 Dumaflop"
"20 Lindilo"
"67 Fwup"

आप सही हैं - मैंने इसे एक फ़ंक्शन के बजाय एक पूर्ण कार्यक्रम बनाने के लिए उत्तर संपादित किया और ताकि यह प्रश्न नियमों के अनुसार उद्धरण चिह्नों को w / o को प्रिंट करने के लिए प्रिंट करता है
scottstein37

4

जूलिया, 231 216 184 175 बाइट्स

r=readline()|>int
l=[141,109,81,80,63,39,22,0]
m=split("Qupu Blinkorp Paas Karpasus Floopdoor Dumaflop Lindilo Fwup")
i=findfirst(j->r>=j,l)
print(i==4?"":r-l[i]+1," ",m[9-i])

यह एसटीडीआईएन से एक पंक्ति पढ़ता है और इसे एक पूर्णांक में परिवर्तित करता है, महीने की शुरुआत के दिनों की उलटी सूची का पहला तत्व पाता है जहां इनपुट शुरू से अधिक या उसके बराबर होता है, फिर उसी के अनुसार प्रिंट होता है।


3

स्विफ्ट 1.2, 256 बाइट्स

var d=Process.arguments[1].toInt()!,f="Floopdoor",n=[("Qupu",22),("Blinkorp",17),("Paas",24),("Karpasus",17),(f,1),("Dumaflop",28),("Lindilo",32),("Fwup",67)]
for i in 0..<n.count{let m=n[i]
if d>=m.1{d-=m.1}else{println((m.0==f ?"":"\(d+1) ")+m.0)
break}}

कोड को .swiftफाइल में अकेले चलाने के लिए और इसका उपयोग करके चलाएंswift <filename> <inputNumber>


3

जावा, 357 339 बाइट्स

यह सबसे कुशल नहीं है, लेकिन मुझे पसंद है कि यह कैसे काम करता है। यह पूरे फ्लॉपटोनिया कैलेंडर को बनाता है और फिर यह देखता है कि संख्या क्या है।

class X{public static void main(String[]q){String n[]={"Qupu","Blinkorp","Paas","Karpasus","Floopdoor","Dumaflop","Lindilo","Fwup"},l[]=new String[209];int m=0,d=0,i,b[]={0,22,39,63,80,81,109,141,208};for(i=0;i++<208;d++){l[i]=(m==4?"":d+" ")+n[m];if(i>b[m+1]){m++;d=0;}}System.out.print(l[new java.util.Scanner(System.in).nextInt()+2]);}}

इनपुट आउटपुट:

77 --> 15 Karpasus 80 --> Floopdoor

दूरी और टैब किए गए:

class X {
    public static void main(String[] q) {
        String n[] = { "Qupu", "Blinkorp", "Paas", "Karpasus", "Floopdoor", "Dumaflop", "Lindilo", "Fwup" },
          l[]=new String[209];
        int m = 0,
          d = 0,
          i,
          b[] = { 0, 22, 39, 63, 80, 81, 109, 141, 208 };
        for(i = 0; i++ < 208; d++) {
            l[i]=(m == 4 ? "" : d + " ") + n[m];
            if(i > b[m+1]){
                m++;
                d = 0;
            }
        }
        System.out.print(l[ new java.util.Scanner(System.in).nextInt() + 2 ]);
    }
}

1
मैं तुम्हें चुनौती देता हूँ! मेरा जवाब देखिए! =)
लुइगी कॉर्टेज जूल

3

जावा, 275 269 266 257 256 252 246 244 243 बाइट्स

class X{public static void main(String[]w){int x=new Short(w[0]),i=1,a[]={-1,21,38,62,79,80,108,140,207};w="Qupu,Blinkorp,Paas,Karpasus,Floopdoor,Dumaflop,Lindilo,Fwup".split(",");while(x>a[i++]);System.out.print((i==6?"":x-a[i-=2]+" ")+w[i]);}}

प्रारूपित:

class X {
    public static void main(String[] w) {
        int x = new Short(w[0]), 
            i = 1, 
            a[] = { -1, 21, 38, 62, 79, 80, 108, 140, 207 };
            w = "Qupu,Blinkorp,Paas,Karpasus,,Dumaflop,Lindilo,Fwup".split(",");
        while (x > a[i++]);
        System.out.print(i == 6 ? "Floopdoor" : x - a[i-=2] + " " + w[i]);
    }
}

दिलचस्प बात यह है कि यह इससे कुछ छोटा है

class X {
    public static void main(String[] w) {
        int x = new Short(w[0]);
        System.out.print(x < 22 ? x + 1 + " Qupu" : x < 39 ? x - 21
                + " Blinkorp" : x < 63 ? x - 38 + " Paas" : x < 80 ? x - 62
                + " Karpasus" : x < 81 ? "Floopdoor" : x < 109 ? x - 80
                + " Dumaflop" : x < 141 ? x - 108 + " Lindilo" : x < 208 ? x
                - 140 + " Fwup" : "");
    }
}

अच्छा खेला लुइगी!
डेडचेक्स

1
"Integer.valueOf (w [0])" के बजाय "नई शॉर्ट (w [0])" के साथ 6 बाइट्स सहेजें।
ओलिविया ट्रेविन

@AndrewTrewin महान टिप, धन्यवाद!
लुइगी कोर्टीज

3

जावास्क्रिप्ट ES6 171 164 163 बाइट्स का उपयोग कर

मैं सबसे अच्छा जावास्क्रिप्ट प्रोग्रामर नहीं हूं, लेकिन मैंने अपनी पूरी कोशिश की और निम्नलिखित कोड के साथ समाप्त हुआ

f=(n)=>[0,22,39,63,80,81,109,141,208].some((e,j,a)=>n<a[j+1]&&(r=(j-4?n-e+1+' ':'')+"Qupu0Blinkorp0Paas0Karpasus0Floopdoor0Dumaflop0Lindilo0Fwup".split(0)[j]))&&r;

परिणाम को देखने के लिए आपको एक html फ़ाइल में उपरोक्त कोड का उपयोग करना होगा और नीचे दिए गए कोड के समान उपयोग करना होगा

<html><body><p id="o"></p><script src="Fp.js"></script><script>t=[0,32,62,77,80,99,128,207];for(i=0;i<t.length;i++)document.getElementById('o').innerHTML+=f(t[i])+'<br/>';</script></body></html>

उपरोक्त कोड fp.js में वह फाइल होती है जिसमें जावास्क्रिप्ट कोड होता है।

इंडेंट के साथ संयुक्त HTML और जावास्क्रिप्ट कोड है

        f=(n)=>[0,22,39,63,80,81,109,141,208].some(
          (e,j,a)=>n<a[j+1]&&(r=(j-4?n-e+1+' ':'')+"Qupu0Blinkorp0Paas0Karpasus0Floopdoor0Dumaflop0Lindilo0Fwup".split(0)[j]))
        &&r;
        
        
        t = [0, 32, 62, 77, 80, 99, 128, 207];
        for (i = 0; i < t.length; i++) 
            document.getElementById('o').innerHTML += f(t[i]) + '<br/>';

    
<html>
<body>
    <p id="o"></p>    
</body>
</html>

संपादित करें:

मैं विहान को धन्यवाद देता हूं कि उसने मुझे रिटर्न स्टेटमेंट निकालने और मेरे कोड को 17bytes कम करने में मदद करने के लिए धन्यवाद दिया

@ipi, मुझे 7 बाइट बचाने में मदद करने के लिए धन्यवाद

नोट: आप ES6 तीर फ़ंक्शन का उपयोग करने के कारण केवल ब्राउज़र फ़ायरफ़ॉक्स संस्करण 22+ और Google Chrome 45+ में परिणाम देख सकते हैं


@ vihan1086, आपके सुझाव के लिए धन्यवाद
आनंदराज

मेरे पास अभी तीर संकेतन समर्थन के साथ एक ब्राउज़र तक पहुंच नहीं है (इसलिए मैंने यह परीक्षण नहीं किया है) लेकिन आपको अपने महीने की सरणी को "Qupu0Blinkorp0Paas0Karpasus0Floopdoor0Dumaflop0Lindilo0Fwup".split(0)7 बाइट्स के साथ बदलने और सहेजने में सक्षम होना चाहिए ।
सीन लैथम

धन्यवाद ipi, मैं एक स्थान से विभाजित था, लेकिन शून्य ने मुझे दो बाइट्स बचाए! You must write a complete programमुझे लगता है कि इसे अकेले चलाना होगा, आपको प्रॉम्प्ट () जैसे कुछ का उपयोग करना पड़ सकता है।
वार्तन

@ipi, आपकी टिप्पणी के लिए धन्यवाद
आनंदराज

@ वर्तन, आपके उत्तर के लिए धन्यवाद, मैंने 1 बाइट बचाई
आनंदराज जूल

2

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

n=input();e=[-1,21,38,62,80,108,140,207];m=1
while n>e[m]:m+=1
print[`n-e[m-1]`+' '+'Qupu Blinkorp Paas Karpasus Dumaflop Lindilo Fwup'.split()[m-1],'Floopdoor'][n==80]

यह दिन के 80रूप में आंतरिक रूप से व्यवहार करता है 18 Karpasus, लेकिन तब इसे अनदेखा करता है जब प्रिंट करने के लिए बुलाया जाता है। साथ ही, पायथन 2 का input()कार्य (विरोध के अनुसार raw_input()) यहां सुविधाजनक था।


2

पर्ल 5, 140

इसके माध्यम से चलने की आवश्यकता है perl -E:

$i=<>+1;$i-=$b=(22,17,24,17,1,28,32,67)[$c++]while$i>0;say$b>1&&$i+$b.$",(x,Qupu,Blinkorp,Paas,Karpasus,Floopdoor,Dumaflop,Lindilo,Fwup)[$c]

टेस्ट आउटपुट (@ डेनिस से चुराया गया टेस्ट कोड):

$for d in 0 32 62 77 80 99 128 207; do perl -E '$i=<>+1;$i-=$b=(22,17,24,17,1,28,32,67)[$c++]while$i>0;say$b>1&&$i+$b.$",(x,Qupu,Blinkorp,Paas,Karpasus,Floopdoor,Dumaflop,Lindilo,Fwup)[$c]' <<< $d; echo; done
1 Qupu

11 Blinkorp

24 Paas

15 Karpasus

Floopdoor

19 Dumaflop

20 Lindilo

67 Fwup

2

हास्केल, 171 167 बाइट्स

main=interact$f.read
f 80="Floopdoor"
f n=(g=<<zip[22,17,24,18,28,32,67](words"Qupu Blinkorp Paas Karpasus Dumaflop Lindilo Fwup"))!!n
g(n,s)=map((++' ':s).show)[1..n]

कार्यक्रम में लिखा है कि यह स्टड से इनपुट है जो एनएल में समाप्त नहीं होना चाहिए। EOF / ^ D के साथ इनपुट को समाप्त करें या जैसे कुछ का उपयोग करेंecho -n 80 | ./what-day-is-it । (कुछ echoसमझ में नहीं आता है-n स्विच को और डिफ़ॉल्ट रूप से NL को छोड़ देते हैं)।

यह कैसे काम करता है: mainफ़ंक्शन इनपुट को पढ़ता है, इसे ए Integerऔर कॉल में परिवर्तित करता हैf जो Floopdoorइनपुट के मामले में एक शाब्दिक रिटर्न देता है 80या सभी संभावित तिथियों की एक सूची बनाता है, अर्थात ["1 Qupu", "2 Qupu", ... "1 Blinkorp", ... "67 Fwup"]जहां से यह nतत्व को चुनता है । मुझे लगता है Karpasusकि एक दिन लंबा है। 18 Karpasusस्थिति में है 80और Floopdoorसूची में लापता को ठीक करता है ।

संपादित करें: @MtnViewMark ने 18 Karpasusचाल का विचार रखा और 4 बाइट्स बचाए।


मुझे लगता है कि आप कारपेसस का नाटक करके 4 बाइट्स बचा सकते हैं 18 दिन लंबा है, हटाने ,1और `x` - क्योंकि 80 इसके लिए पैटर्न मैच द्वारा पकड़ा जाएगा।
माउंटन व्यूमार्क

@MtnViewMark: बहुत चालाक। बहुत बहुत धन्यवाद।
निम्मी

1

स्विफ्ट 2.0, 220 बाइट्स

कुछ भी नहीं है, बस tuples के संग्रह से फिल्टर ...

func d(n:Int)->String{return n==80 ?"Floopdoor":[("Qupu",21,0),("Blinkorp",38,22),("Paas",62,39),("Karpasus",79,63),("Dumaflop",108,81),("Lindilo",140,109),("Fwup",208,141)].filter{$0.1>=n}.map{"\($0.0) \(n-$0.2+1)"}[0]}

बग को ठीक करने के लिए संपादित, एक स्थान को हटा दिया


5
"आपको एक पूरा कार्यक्रम लिखना होगा।" तो यह एक समारोह नहीं हो सकता।
एलेक्स ए।

1

जावास्क्रिप्ट (ES6 on Node.js), 196 बाइट्स

एक कमांड लाइन तर्क लेता है:

a=+process.argv[2];for(d of['22Qupu','17Blinkorp','24Paas','17Karpasus','01Floopdoor','28Dumaflop','32Lindilo','67Fwup']){if(a<(z=parseInt(d)))return console.log((z>1?a+1+' ':'')+d.slice(2));a-=z}

डेमो

चूंकि process.argvब्राउज़र में कोई कमांड-लाइन तर्क ( ) नहीं है, स्निपेट में कोड एक फ़ंक्शन में रखा गया है जो एक तर्क को स्वीकार करता है:

// Snippet stuff
console.log = function(x){O.innerHTML += x + '\n'};

// Flooptonia function
function flooptonia(a) {
  a = +a;
  for (d in y=['22Qupu', '17Blinkorp', '24Paas', '17Karpasus', '01Floopdoor', '28Dumaflop', '32Lindilo', '67Fwup']) {
    if (a < (z = parseInt(y[d]))) return console.log((z > 1 ? a + 1 + ' ' : '') + y[d].slice(2));
    a -= z
  }
}

// Test
['0', '32', '62', '77', '80', '99', '128', '207'].map(flooptonia);
Test values: [0, 32, 62, 77, 80, 99, 128, 207]

<pre id=O></pre>


1

स्विफ्ट 2.0, 215 204

let(n,t)=(Int(readLine()!)!,[(141,"Fwup"),(109,"Lindilo"),(81,"Dumaflop"),(63,"Karpasus"),(39,"Paas"),(22,"Blinkorp"),(0,"Qupu")])
print({(n==80 ?"Floopdoor":"\(n-$0.0+1) "+$0.1)}(t[t.indexOf{$0.0<=n}!]))

यह एक पूर्ण कार्यक्रम है जो उपयोगकर्ता को STDIN में नंबर इनपुट करने के लिए कहता है।


1

मतलाब, 187 बाइट्स

d=input('');l=[141 109 81 80 63 39 22 0];t=find(d>=l,1);m=strsplit('Fwup Lindilo Dumaflop Floopdoor Karpasus Paas Blinkorp Qupu');f='%d %s';if t==4;f='%d\b%s';end;fprintf(f,d-l(t)+1,m{t})

विस्तारित संस्करण:

d=input('');
l=[141 109 81 80 63 39 22 0];
t=find(d>=l,1);
m=strsplit('Fwup Lindilo Dumaflop Floopdoor Karpasus Paas Blinkorp Qupu');
f='%d %s';
if t==4;
    f='%d\b%s';
end
fprintf(f,d-l(t)+1,m{t})

कंसोल से एक पंक्ति पढ़ता है ( stdin), महीने के दिनों की उलटी सूची का पहला तत्व पाता है जहां इनपुट सरणी तत्व से अधिक या बराबर होता है, फिर उसी के अनुसार प्रिंट होता है।

यह Juliaप्रदर्शन चरण को छोड़कर, लगभग उत्तर के समान है । ( हम मतलबी ऑपरेटर को मात नहीं दे सकते, मतलब में अनुपलब्ध )। एक पूर्ण ifविवरण स्पष्ट करने के लिए , हम Backspaceविशेष दिन / महीने के लिए नंबर 1 को "मिटाने" के लिए एक छोटी सी चाल ( प्रिंट प्रारूप में एक चरित्र) का उपयोग करते हैं।Floopdoor


मतलाब और ऑक्टेव चैट प्रतिभागियों के सहयोग से ।


1

जावास्क्रिप्ट ईएस 5 168 बाइट्स का उपयोग कर

m=[-1,21,38,62,79,80,108,140];for(n=prompt(i=0);n>m[i+1]&&i++<8;);alert((i-4?n-m[i]+" ":"")+"Qupu0Blinkorp0Paas0Karpasus0Floopdoor0Dumaflop0Lindilo0Fwup".split(0)[i])

Ungolfed:

m=[-1,21,38,62,79,80,108,140];   // create range of starting indexes - 1

for(                             // begin for loop
  n=prompt(i=0);                 // initialize i to zero and prompt user
  n>m[i+1] && i++ < 8;           // exit if n>0; increment i; exit if i was < 8
  );                             // end for loop

alert(
  (i-4 ? n-m[i]+" ":"") + // special floopdoor case
  "Qupu0Blinkorp0Paas0Karpasus0Floopdoor0Dumaflop0Lindilo0Fwup".split(0)[i]);

  //^  create an array of strings by splitting at zero. Then, select element i

0

सी, 241 बाइट्स

कुछ भी रोमांचक नहीं है। 27 बाइट्स मुंडवा सकते थे, इसके लिए एक पूरा कार्यक्रम होना चाहिए।

main(c,s)char**s;{c=atoi(s[1]);c-80?printf("%d ",c<22?c+1:c<39?c-21:c<63?c-38:c<80?c-62:c<109?c-80:c<141?c-108:c-140):0;puts(c<22?"Qupu":c<39?"Blinkorp":c<63?"Paas":c<80?"Karpasus":c<81?"Floopdoor":c<109?"Dumaflop":c<141?"Lindilo":"Fwup");}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.