Який день (на Flooptonia)?


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 - особливий час для Flooptonians, який, очевидно, заслуговує на власну сторінку календаря. З цієї причини 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
Це "Floopdo o r" чи "Floopdor"? Перша діаграма має додаткові o, але інші екземпляри назви не мають.
— jwodder

4
Отже ... через 47к років нічого не зміниться?
— Не те, що Чарльз

2
@NotthatCharles окрім того, якщо планета така далека, вона не застаріє до того часу, коли ви отримаєте її в першу чергу?
— SuperJedi224

3
Наче григоріанський календар був недостатньо поганий.
— Артуро Торрес Санчес,

3
@ ArturoTorresSánchez Ну принаймні немає високосного року. Але чи є якісь інші історії про Flooptonia, чи вся постановка створена виключно для цієї конкретної головоломки? Чи Fwup їх слово на зиму? Або мені просто повернути свій хвіст до Worldbuilding?
— Damian Yerrick

Відповіді:


14

Pyth - 105 103 90 88 байт

Використовує базове перетворення. Дві прості таблиці пошуку, одна для імен та одна для дат початку, а потрійний в кінці для Floopdoor.

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

Стискає рядок не як база 128, а як база 23. По-перше, вона переводить її в індекси алфавіту. Для цього потрібен відокремлювач, cякий не відображається в жодному із назв місяця. Потім він кодує те, що базує десять з базового 23 числа (найвище значення, яке з'явилося w), а потім перетворюється на базу 256.

Дати початку - це їхні кодові точки unicode, не базова конверсія.

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

Спробуйте його онлайн тут .

Тестовий сюїт .


Я дуже новачок у Pyth, ти міг би його зламати? Я був би дуже вдячний.
— Вінні

1
@ Вінні я, просто хотів спочатку закінчити очевидні гольфи. Усі дивні символи полягають у тому, що я стиснув основні 26 символів (алфавіт) у основу 256, щоб заощадити місце.
— Малтісен

1
@Winny цього достатньо? Якщо у вас виникли запитання, не соромтеся надіслати мені тут / у чаті .
— Мальтісен

19

Python 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", ...): ...

(Дякуємо @xnor за пропозицію for/zipциклу на -3 байти)


11
У той момент, коли відповідь Python --- <s> збирається "шиєю до шиї" </s> --- побиттям відповіді Pyth
— Optimizer

1
Використання атестатора геніальне!
— Вінні

Я відчуваю, що це має бути можливість повторити 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 байт

Це аж ніяк не найкоротше, але це красиво і барвисто ...

Кожен піксель розміщується власноруч. Щоб запустити його, перейдіть сюди у FireFox (Chrome не працюватиме) та завантажте його шириною коделі 1 (він стане чорним, не хвилюйтесь), введіть номер та натисніть кнопку запуску!

Мала програма: Мала версія


Збільшений (ширина кодела 10): введіть тут опис зображення


Не dead chexдодається до кількості байтів?
— Бета-розпад

1
@Beta Справедливим вважається, що кількість бай - це насправді розмір меншого зображення на диску, тому незалежно від кількості байтів виправлено
— DeadChex

12

Pyth 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

Постійна посилання

Другий гольф коли-небудь, будь-які відгуки Pyth будуть дуже корисними.

Пояснення

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 до кожної точки коду першого рядка. Ви можете спробувати цю версію в інтерпретаторі 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

SWI-Prolog, 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])).

При цьому ми використовуємо механізм пошуку з поверненням Прологу повторно звернутися nth1/3до списку L, щоб отримати перший елемент LastDay+1:MonthNameз , Lдля якого X < LastDay+1має місце. Потім ми шукаємо місяць безпосередньо перед цим у списку, щоб оцінити день місяця.


5

Q, 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"

ви правильні - я відредагував відповідь, щоб зробити її повноцінною програмою, а не функцією, і вона друкує для викреслювання без лапок відповідно до правил запитання
— 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])

Це зчитує рядок зі STDIN і перетворює його на ціле число, знаходить перший елемент зворотного списку днів початку місяця, де вхідний показник більший за рівний або рівний початковому, а потім друкує відповідно.


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

Java, 357 339 байт

Це не найефективніше, але мені подобається, як це працює. Він створює весь календар Flooptonia, а потім шукає, яка дата є номером.

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

Java, 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" : "");
    }
}

Добре зіграний Луїджі!
— DeadChex

1
Збережіть 6 байт з "новим коротким (w [0])" замість "Integer.valueOf (w [0])".
— Олівія Тревін

@AndrewTrewin чудова порада, дякую!
— Луїджі Кортес

3

JavaScript за допомогою ES6 171 164 163 байт

Я не найкращий програміст JavaScript, але я постарався, і в кінцевому підсумку був наступний код

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 - файл, що містить код javascript.

Комбінований код HTML та JavaScript з відступом є

        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>

Редагувати:

Я хотів би подякувати Віхан за те, що він допомагав мені видалити заяву про повернення та зменшив код на 17 байт

@ipi, дякую, що допомогли мені зберегти 7 байт

Примітка. Результат ви можете бачити лише в браузерах Firefox версії 22 та новіших версій Google Chrome 45+ через використання стрілочних функцій ES6


@ vihan1086, дякую за вашу пропозицію
— Anandaraj

Зараз у мене немає доступу до браузера із підтримкою позначень стрілок (тому я цього не перевіряв), але ви повинні мати можливість замінити свій місячний масив "Qupu0Blinkorp0Paas0Karpasus0Floopdoor0Dumaflop0Lindilo0Fwup".split(0)і зберегти 7 байт.
— Шон Латем

Дякую ipi, я розділяв пробіл, але нуль врятував мені два байти! You must write a complete programЯ думаю, що це має запускатися поодинці, можливо, вам доведеться використовувати щось на зразок prompt ().
— Вартан

@ipi, Дякую за Ваш коментар
— Anandaraj

@Vartan, Завдяки вашій відповіді я врятував 1 байт
— Anandaraj

2

Python 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, але потім ігнорує його, коли його викликають до друку. Також тут була зручна input()функція Python 2 (на відміну від 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]

Тестовий вихід (викрадений код тесту у @Dennis):

$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

Haskell, 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]

Програма читає, що це вхід із stdin, який не повинен закінчуватися в NL. Припиніть введення за допомогою 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"]з яких він вибирає nth елемент. Я роблю Karpasusце на один день довше. 18 Karpasusзнаходиться в положенні 80та виправляє відсутніх Floopdoorу списку.

Редагувати: @MtnViewMark мав ідею про 18 Karpasusтрюк і врятував 4 байти.


Я думаю, що ви можете зберегти 4 байти, зробивши вигляд, що Карпас довгий 18 днів, видаляючи ,1та `x` - оскільки 80 буде спіймано за відповідність шаблону.
— MtnViewMark

@MtnViewMark: дуже розумний. Дуже дякую.
— німі

1

Швидкий 2.0, 220 байт

Нічого розумного, просто фільтри з колекції кортежів ...

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

JavaScript (ES6 на 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відповіді, за винятком етапу відображення. ( Ми не можемо перемогти їхнього потрійного оператора, недоступного в Matlab ). Щоб скласти явний повний ifвислів, ми використовуємо невелику хитрість ( Backspaceсимвол у форматі друку), щоб "стерти" номер 1 для спеціального дня / місяцяFloopdoor


У співпраці з учасниками чату Matlab та Octave .


1

Javascript ES5, використовуючи 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])

Безголівки:

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

C, 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 та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.