Какой сегодня день (на Флооптонии)?

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?
Дамиан Йеррик

Ответы:

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.

Даты начала - это их кодовые точки в юникоде, без базового преобразования.

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

Попробуйте это онлайн здесь .

Тестовый пакет .

Maltysen
источник
Я очень новичок в Pyth, не могли бы вы сломать это? Я был бы очень благодарен.
Винни
1
@ Винни, я просто хочу сначала закончить очевидные игры в гольф. Все странные символы в том, что я сжал 26 базовых символов (алфавит) в 256 базовых для экономии места.
Maltysen
1
@ Винни, этого достаточно? Не стесняйтесь пинговать меня здесь / в чате, если у вас есть какие-либо вопросы.
Maltysen
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

Объект bytes в zipсодержит непечатаемые символы:

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

(Спасибо @xnor за предложение for/zipцикла для -3 байтов)

Sp3000
источник
11
В тот момент, когда ответ Python --- <s> идет от головы до головы </ s> - побеждает ответ Pyth
Оптимизатор
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 (он будет выглядеть черным, не волнуйтесь), введите число и нажмите кнопку запуска!

Малая программа: Маленькая версия


Увеличено (ширина Codel 10): введите описание изображения здесь

DeadChex
источник
Не dead chexдобавляет к количеству байтов?
бета-распад
1
@Beta Чтобы быть справедливым, количество показов на самом деле является размером меньшего изображения на диске, поэтому независимо от количества фиксированных байтов
DeadChex
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

Постоянная ссылка

Второй в истории гольф, любая обратная связь с Питом будет очень полезна.

объяснение

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
Winny
источник
Вы должны быть в состоянии использовать встроенное назначение, чтобы привести все J=...в троичное состояние.
Maltysen
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\

Выше приведен обратимый hexdump, так как исходный код содержит непечатаемые символы.

Большинство непечатаемых символов не являются проблемой для онлайн-переводчика, но нулевой байт в первой строке является прерывателем сделки.

За счет одного байта мы можем исправить это, добавив 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-Пролог, 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имеет место. Затем мы ищем месяц непосредственно перед этим в списке, чтобы оценить день месяца.

Fatalize
источник
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;

first cut - функция (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
источник
Вы правы - я отредактировал ответ, чтобы сделать его полной программой, а не функцией, чтобы он выводил на стандартный вывод без кавычек в соответствии с правилами вопроса
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

Swift 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 байт

Это не самый эффективный, но мне нравится, как это работает. Он создает весь календарь 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 ]);
    }
}
DeadChex
источник
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" : "");
    }
}
Луиджи Кортезе
источник
Хорошо сыграно Луиджи!
DeadChex
1
Сохраните 6 байтов с помощью «new Short (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>

Редактировать:

Я хотел бы поблагодарить Vihan за помощь в удалении оператора return и уменьшении моего кода на 17 байт.

@ipi, спасибо, что помог мне сэкономить 7 байт

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

Анандарадж
источник
@ vihan1086, спасибо за ваше предложение
Анандарадж
У меня нет доступа к браузеру с поддержкой стрелочных обозначений (поэтому я не проверял это), но вы сможете заменить массив месяцев "Qupu0Blinkorp0Paas0Karpasus0Floopdoor0Dumaflop0Lindilo0Fwup".split(0)и сэкономить 7 байт.
Шон Лэтэм
Спасибо ipi, я разделил пробел, но ноль спас мне два байта! You must write a complete programЯ думаю, что это должно выполняться в одиночку, возможно, вам придется использовать что-то вроде prompt ().
Вартан
@ipi, спасибо за ваш комментарий
Анандарадж
@Vartan, благодаря твоему ответу я сохранил 1 байт
Анандарадж
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()) была удобна здесь.

mathmandan
источник
2

Perl 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]

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

Изменить: @MtnViewMark был идея 18 Karpasusтрюк и сохранил 4 байта.

Ними
источник
Я думаю, что вы можете сэкономить 4 байта, притворившись, что Карпасус длится 18 дней, удаляя ,1и `x` - так как 80 будет поймано совпадением шаблона.
MtnViewMark
@MtnViewMark: очень умный. Большое спасибо.
Ними
1

Swift 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]}

Отредактировано, чтобы исправить ошибку, убрал пробел

GoatInTheMachine
источник
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>

rink.attendant.6
источник
1

Swift 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.

Kametrixom
источник
1

Matlab, 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 .

Hoki
источник
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])

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

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");}
какой-то пользователь
источник