Який день (на 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.