Hôm nay là ngày gì (trên Flooptonia)?


34

Bạn là một du khách không gian trên đường đến hành tinh Flooptonia! Chuyến bay sẽ mất thêm 47.315 năm nữa, vì vậy để vượt qua thời gian trước khi bạn bị đóng băng một cách lạnh lùng, bạn quyết định viết một chương trình để giúp bạn hiểu lịch Flooptonian.

Dưới đây là lịch Flooptonian dài 208 ngày:

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)

Thử thách

Chương trình của bạn, được cung cấp một ngày nguyên trong năm (phạm vi [0-208)) là để xuất ngày tương ứng của tháng và tên của tháng (ví dụ 13 Dumaflop).

Tuy nhiên, có một ngoại lệ: Floopdoor một thời gian đặc biệt cho Floopton dường như xứng đáng với trang lịch của riêng mình. Vì lý do đó, Floopdoor không được viết trong một ngày (tức là đầu ra là Floopdoorkhông 1 Floopdoor).

Các trường hợp thử nghiệm

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

Quy tắc

  • Bạn phải viết một chương trình hoàn chỉnh.
  • Bạn có thể cho rằng đầu vào luôn hợp lệ.
  • Đầu ra của bạn có thể có một dòng mới nhưng phải không có bất kỳ ký tự phụ nào. Các trường hợp cũng phải phù hợp với các ví dụ được cung cấp.
  • Bạn có thể sử dụng các chức năng ngày / giờ.
  • Độ dài mã sẽ được đo bằng byte.

2
Đó là "Floopdo o r" hay "Floopdor"? Biểu đồ đầu tiên có thêm o, nhưng các trường hợp khác của tên thì không.
jwodder 24/07/2015

4
Vậy ... trong 47 năm nữa, sẽ không có gì thay đổi?
Không phải là Charles

2
@NotthatCharles hơn nữa, nếu hành tinh đó ở xa, nó sẽ không bị lỗi thời khi bạn nhận được nó ở nơi đầu tiên?
SuperJedi224

3
Như thể lịch Gregorian không đủ tệ.
Arturo Torres Sánchez

3
@ ArturoTorresSánchez Ít nhất là không có năm nhuận. Nhưng có câu chuyện nào khác về Flooptonia, hay toàn bộ bối cảnh được tạo ra chỉ cho câu đố cụ thể này? Là Fwup từ của họ cho mùa đông? Hay tôi chỉ nên lấy cái đuôi của mình trở lại Thế giới xây dựng?
Damian Yerrick

Câu trả lời:


14

Pyth - 105 103 90 88 byte

Sử dụng chuyển đổi cơ sở. Hai bảng tra cứu đơn giản, với một bảng cho tên và một cho ngày bắt đầu và một bảng tạm thời ở cuối cho Floopdoor.

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

Nén chuỗi không phải là cơ sở 128, mà là cơ sở 23. Đầu tiên, nó dịch nó sang các chỉ mục của bảng chữ cái. Điều này đòi hỏi dấu phân cách ckhông xuất hiện trong bất kỳ tên tháng nào. Sau đó, nó mã hóa thành cơ sở mười từ một số cơ sở 23 (giá trị cao nhất xuất hiện là w), sau đó chuyển đổi thành cơ sở 256.

Ngày bắt đầu là các điểm mã unicode của chúng, không có chuyển đổi cơ sở.

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

Hãy thử trực tuyến tại đây .

Phòng thử nghiệm .


Tôi rất mới với Pyth, bạn có thể phá vỡ nó không? Tôi rất biết ơn.
Winny

1
@Winny Tôi sẽ, chỉ muốn hoàn thành các golf rõ ràng đầu tiên. Tất cả các biểu tượng kỳ lạ là do tôi nén 26 ký hiệu cơ sở (bảng chữ cái) vào cơ sở 256 để tiết kiệm không gian.
Maltysen

1
@Winny là đủ? Vui lòng ping tôi tại đây / trong trò chuyện nếu bạn có bất kỳ câu hỏi nào.
Maltysen 24/07/2015

19

Python 3, 159 156 152 151 150 148 byte

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

Đối tượng byte trong các zipký tự không thể in:

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

(Cảm ơn @xnor đã đề xuất một for/zipvòng lặp cho -3 byte)


11
Khoảnh khắc đó khi một câu trả lời của Python là --- <s> đi từ cổ đến </ s> --- đánh bại câu trả lời Pyth
Trình tối ưu hóa

1
Việc sử dụng một bytestring là khéo léo!
Winny

Tôi cảm thấy như có thể lặp đi lặp lại btrực tiếp forthay vì trong khi, với một cái gì đó như for c in b"...":i+=n>0;n-=c.
xnor

1
Oh, đợi đã, bạn cũng cần đúng giá trị của nviệc ngừng đi xuống. Vẫn có thể với một cái gì đó như x=n>c;n-=c*x;i+=xnhưng không biết nó có đáng không.
xnor

13

Piet 2125 byte

Nó không phải là ngắn nhất, nhưng nó đẹp và đầy màu sắc ...

Mỗi pixel được đặt bằng tay của tôi. Để chạy nó ở đây trong FireFox (Chrome sẽ không hoạt động) và tải nó với chiều rộng codel là 1 (nó sẽ xuất hiện màu đen, đừng lo lắng), nhập số và nhấn nút chạy!

Chương trình nhỏ: Phiên bản nhỏ


Mở rộng (Chiều rộng Codel là 10): nhập mô tả hình ảnh ở đây


Không dead chexthêm vào số byte?
Beta Decay

1
@Beta Để công bằng, số lượng bye thực sự là kích thước của hình ảnh nhỏ hơn trên đĩa, do đó, bất kể số byte được cố định
DeadChex

12

Pyth 178 156 153 147 byte

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

Golf thứ hai bao giờ, bất kỳ thông tin phản hồi Pyth sẽ rất hữu ích.

Giải trình

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

Bạn sẽ có thể sử dụng chuyển nhượng nội tuyến để đưa toàn bộ J=...vào điều kiện ternary.
Maltysen 24/07/2015

7

CJam, 98 96 93 byte

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\

Trên đây là một hexdump có thể đảo ngược, vì mã nguồn chứa các ký tự không thể in được.

Hầu hết các ký tự không thể in là không có vấn đề đối với trình thông dịch trực tuyến, nhưng byte null trong chuỗi đầu tiên là một bộ ngắt thỏa thuận.

Với chi phí là một byte, chúng ta có thể sửa lỗi này bằng cách thêm 1 vào đầu vào và 1 cho mỗi điểm mã của chuỗi đầu tiên. Bạn có thể thử phiên bản này trong trình thông dịch CJam .

Nếu permalink không hoạt động trong trình duyệt của bạn, bạn có thể sao chép mã từ dán này .

Các trường hợp thử nghiệm

$ 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

Làm thế nào nó hoạt động

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 byte

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])).

Ở đây, chúng tôi sử dụng cơ chế quay lui của Prolog để liên tục áp dụng nth1/3vào danh sách L, để có được yếu tố đầu tiên LastDay+1:MonthNametrong số Lđó X < LastDay+1. Sau đó chúng tôi tìm kiếm tháng ngay trước danh sách này để đánh giá ngày trong tháng.


5

Q, 134 146 byte

cắt thứ hai - chương trình (146 byte)

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;

chức năng cắt đầu tiên (134 byte)

{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}

thử nghiệm

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"

bạn đã đúng - tôi đã chỉnh sửa câu trả lời để biến nó thành một chương trình đầy đủ chứ không phải là một chức năng và để nó in ra thiết bị xuất chuẩn với các dấu ngoặc kép theo quy tắc câu hỏi
scottstein37 24/07/2015

4

Julia, 231 216 184 175 byte

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

Điều này đọc một dòng từ STDIN và chuyển đổi nó thành một số nguyên, tìm phần tử đầu tiên của danh sách đảo ngược các ngày bắt đầu tháng trong đó đầu vào lớn hơn hoặc bằng bắt đầu, sau đó in ra.


3

Swift 1,2, 256 byte

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

Để chạy, đặt mã một mình trong một .swifttệp và chạy nó bằng cách sử dụngswift <filename> <inputNumber>


3

Java, 357 339 byte

Nó không phải là hiệu quả nhất, nhưng tôi thích cách nó hoạt động. Nó tạo ra toàn bộ lịch Flooptonia và sau đó tìm kiếm số ngày.

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]);}}

Đầu ra đầu vào:

77 --> 15 Karpasus 80 --> Floopdoor

Khoảng cách và tab ra:

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
Tôi thách bạn Xem câu trả lời của tôi! =)
Luigi Cortese

3

Java, 275 269 266 257 256 252 246 244 243 byte

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]);}}

Định dạng:

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]);
    }
}

Thật thú vị, nó ngắn hơn vài byte

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

Luigi chơi tốt!
DeadChex

1
Lưu 6 byte với "new Short (w [0])" thay vì "Integer.valueOf (w [0])".
Olivia Trewin

@AndrewTrewin mẹo tuyệt vời, cảm ơn bạn!
Luigi Cortese

3

JavaScript sử dụng ES6 171 164 163 byte

Tôi không phải là lập trình viên JavaScript tốt nhất nhưng tôi đã cố gắng hết sức và kết thúc với đoạn mã sau

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;

Để xem kết quả, bạn cần tham khảo mã ở trên trong tệp html và sử dụng tương tự như mã bên dưới

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

Trong đoạn mã trên, fp.js là tệp chứa mã javascript.

Mã HTML và JavaScript kết hợp với thụt lề là

        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>

Chỉnh sửa:

Tôi muốn cảm ơn Vihan vì đã giúp tôi xóa câu lệnh return và giảm mã của tôi xuống 17byte

@ipi, cảm ơn vì đã giúp tôi tiết kiệm 7 byte

Lưu ý: Bạn chỉ có thể thấy kết quả trong các trình duyệt Firefox phiên bản 22+ và Google Chrome 45+ do sử dụng các chức năng mũi tên ES6


@ vihan1086, Cảm ơn lời đề nghị của bạn
Anandaraj

Tôi không có quyền truy cập vào trình duyệt có hỗ trợ ký hiệu mũi tên ngay bây giờ (vì vậy tôi chưa kiểm tra điều này) nhưng bạn sẽ có thể thay thế mảng tháng của mình bằng "Qupu0Blinkorp0Paas0Karpasus0Floopdoor0Dumaflop0Lindilo0Fwup".split(0)và lưu 7 byte.
Sean Latham

Cảm ơn ipi, tôi đã chia tách một khoảng trắng, nhưng số 0 đã tiết kiệm cho tôi hai byte! You must write a complete programTôi nghĩ rằng điều này phải chạy một mình, bạn có thể phải sử dụng một cái gì đó như prompt ().
Vartan

@ipi, Cảm ơn bình luận của bạn
Anandaraj

@Vartan, Nhờ câu trả lời của bạn, tôi đã lưu 1 byte
Anandaraj

2

Python 2, 168 byte

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]

Điều này xử lý ngày 80bên trong như 18 Karpasus, nhưng sau đó bỏ qua nó khi được gọi để in. Ngoài ra, input()chức năng của Python 2 (trái ngược với raw_input()) đã thuận tiện ở đây.


2

Perl 5, 140

Yêu cầu chạy qua 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]

Đầu ra thử nghiệm (mã kiểm tra bị đánh cắp từ @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 byte

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]

Chương trình đọc đầu vào từ stdin không được kết thúc bằng NL. Chấm dứt đầu vào với EOF / ^ D hoặc sử dụng cái gì đó như echo -n 80 | ./what-day-is-it. (Một số người echokhông hiểu-n tắc và bỏ qua NL theo mặc định).

Cách thức hoạt động: mainHàm đọc đầu vào, chuyển đổi nó thành một Integercuộc gọi fvà trả về một chữ Floopdoortrong trường hợp đầu vào 80hoặc xây dựng một danh sách tất cả các ngày có thể, tức là ["1 Qupu", "2 Qupu", ... "1 Blinkorp", ... "67 Fwup"]từ đó nó chọn nphần tử thứ. Tôi làm Karpasuslà một ngày nữa. 18 Karpasusđang ở vị trí 80và sửa chữa thiếu Floopdoortrong danh sách.

Chỉnh sửa: @MtnViewMark đã có ý tưởng về 18 Karpasusthủ thuật và lưu 4 byte.


Tôi nghĩ rằng bạn có thể tiết kiệm 4 byte bằng cách giả vờ Karpasus dài 18 ngày, loại bỏ ,1và `x` - vì 80 sẽ bị bắt bởi khớp mẫu cho nó.
MtnViewMark

@MtnViewMark: rất thông minh. Cảm ơn rất nhiều.
nimi

1

Swift 2.0, 220 byte

Không có gì thông minh, chỉ là các bộ lọc từ bộ sưu tập các bộ ...

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

Đã chỉnh sửa để sửa lỗi, xóa một khoảng trắng


5
"Bạn phải viết một chương trình hoàn chỉnh." Vì vậy, nó không thể là một chức năng.
Alex A.

1

JavaScript (ES6 trên Node.js), 196 byte

Đưa ra một đối số dòng lệnh:

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}

Bản giới thiệu

Vì không có đối số dòng lệnh ( process.argv) trong trình duyệt, mã trong đoạn mã đã được đặt trong một hàm chấp nhận đối số:

// 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

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}!]))

Đây là một chương trình đầy đủ yêu cầu người dùng nhập số trong STDIN.


1

Matlab, 187 byte

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})

Phiên bản mở rộng:

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})

Đọc một dòng từ bàn điều khiển ( stdin), tìm phần tử đầu tiên của danh sách đảo ngược các ngày bắt đầu tháng trong đó đầu vào lớn hơn hoặc bằng phần tử mảng, sau đó in ra.

Điều này gần giống với Juliacâu trả lời, ngoại trừ giai đoạn hiển thị. ( Chúng tôi không thể đánh bại nhà điều hành ternary của họ, không có sẵn trong Matlab ). Để tạo ra một iftuyên bố đầy đủ , chúng tôi sử dụng một mẹo nhỏ (một Backspaceký tự ở định dạng in) để "xóa" số 1 cho ngày / tháng đặc biệtFloopdoor


Phối hợp với người tham gia trò chuyện Matlab và Octave .


1

Javascript ES5 sử dụng 168 byte

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

Ung dung:

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 byte

Không có gì quá thú vị. Có thể đã cạo 27 byte nếu nó cần phải là một chương trình hoàn chỉnh.

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");}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.