何日ですか(Flooptoniaで)?


34

あなたは惑星Flooptoniaに向かう途中の宇宙旅行者です!飛行にはさらに47,315年かかるため、極低温に凍結するまでの時間を経過するために、Flooptonianカレンダーの理解に役立つプログラムを作成することにします。

これは、208日間のFlooptonianカレンダーです。

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は、独自のカレンダーページにふさわしいFlooptonianの特別な時間です。そのため、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まあ、少なくともle年はありません。しかし、Flooptoniaについて他の物語はありますか、それともこの特定のパズル専用に設定全体が作成されましたか?Fwupは彼らの冬の言葉ですか?それとも、テールをワールドビルディングに戻す必要がありますか?
ダミアンジェリック

回答:


14

Pyth - 105の 103 90 88バイト

基本変換を使用します。2つの単純なルックアップテーブル。1つは名前用、もう1つは開始日用で、3つ目はFloopdoor用です。

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

文字列をベース128としてではなく、ベース23として圧縮します。最初に、アルファベットのインデックスに変換します。これにcは、どの月名にも表示されない区切り文字が必要でした。次に、それを基数23から基数10(出現した最高値は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
@Winny明らかなゴルフを最初に終わらせたいだけです。奇妙なシンボルはすべて、スペースを節約するためにベース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

内のbytesオブジェクトには、zip印刷できない文字が含まれています。

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

for/zip-3バイトのループを提案してくれた@xnorに感謝します)


11
Pythonの答えが--- <s>首から首へ</ s> ---- Pythの答えを破った瞬間
オプティマイザー

1
バイト文字列の使用は独創的です!
ウィニー

whileの代わりに、などのように、b直接繰り返し処理を行うことが可能であるべきだとfor思いfor c in b"...":i+=n>0;n-=cます。
xnor

1
ああ、待って、あなたnもダウンするのを止めるための正しい価値が必要です。のようなものでも可能x=n>c;n-=c*x;i+=xですが、それが価値があるかどうかはわかりません。
xnor

13

Piet 2125バイト

決して最短ではありませんが、きれいでカラフルです...

各ピクセルは手作業で自分で配置されます。それが行くを実行するには、ここで(それが黒表示されます、いない心配を行う)FireFoxの(クロームは動作しません)にし、1のCODEL幅でそれをロードし、番号を入力して実行ボタンをヒット!

小規模プログラム: 小型版


拡大(コーデル幅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

パーマリンク

2番目のゴルフ、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=...を3項状態にできる必要があります。
マルティセン

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\

ソースコードには印刷できない文字が含まれているため、上記は可逆の16進ダンプです。

印刷できない文字のほとんどはオンラインインタープリターにとっては問題ありませんが、最初の文字列のヌルバイトはディールブレーカーです。

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

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:MonthNameLどののためのX < LastDay+1保持を。次に、リスト内でこの月の直前の月を探して、月の日を評価します。


5

Q、134 146バイト

2番目のカット-プログラム(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"

あなたは正しいです-私はそれを関数ではなく完全なプログラムにするために答えを編集しましたので、質問規則に従って引用符なしでstdoutに出力します
-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

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
「Integer.valueOf(w [0])」ではなく「new Short(w [0])」で6バイトを保存します。
オリビアトレウィン

@AndrewTrewinの素晴らしいヒント、ありがとう!
ルイージコルテーゼ

3

ES6 171 164 163バイトを使用するJavaScript

私は最高の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>

編集:

return文を削除してコードを17バイト削減したVihanに感謝します

@ ipi、7バイトの節約にご協力いただきありがとうございます

注:ES6矢印機能を使用しているため、Firefoxバージョン22以降およびGoogle Chrome 45以降のブラウザーでのみ結果を表示できます


@ vihan1086、あなたの提案をありがとう
-Anandaraj

現在、矢印表記をサポートしているブラウザにアクセスできません(したがって、テストしていません)が、月の配列を"Qupu0Blinkorp0Paas0Karpasus0Floopdoor0Dumaflop0Lindilo0Fwup".split(0)7バイトに置き換えて保存できるはずです。
ショーンレイサム

ipiのおかげで、スペースで分割していましたが、ゼロで2バイト節約できました!You must write a complete programこれは単独で実行する必要があると思うので、prompt()のようなものを使用する必要があるかもしれません。
バルタン

@ipi、コメントありがとうございます
-Anandaraj

@バルタン、あなたの答えのおかげで、私は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が、印刷するために呼び出されたときにそれを無視します。また、ここではPython 2のinput()関数(とは対照的にraw_input())が便利でした。


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で終了してはならないstdinからの入力を読み取ります。EOF / ^ Dで入力を終了するか、などを使用しますecho -n 80 | ./what-day-is-it。(一部echo-nスイッチはスイッチを理解せず、デフォルトでNLを省略します)。

仕組み:main関数は入力を読み取り、それをに変換してInteger呼び出し、入力の場合にfリテラルを返すか、すべての可能な日付のリストを作成します。つまり、th要素を選択します。私は1日長くなります。 位置にあり、リストの欠落を修正します。Floopdoor80["1 Qupu", "2 Qupu", ... "1 Blinkorp", ... "67 Fwup"]nKarpasus18 Karpasus80Floopdoor

編集:@MtnViewMarkは18 Karpasusトリックのアイデアを持っていて、4バイトを節約しました。


Karpasusが18日間のふりをし,1、 ` x`を削除することで4バイト節約できると思います-80がパターンマッチでキャッチされるからです。
MtnViewMark

@MtnViewMark:非常に賢い。どうもありがとう。
nimi

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

バグを修正するために編集し、スペースを削除しました


5
「完全なプログラムを作成する必要があります。」したがって、関数にはなりません。
アレックスA.

1

JavaScript(Node.jsのES6)、196バイト

1つのコマンドライン引数を取ります。

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

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に番号を入力するようユーザーに求める完全なプログラムです。


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チャット参加者とのコラボレーション。


1

168バイトを使用するJavascript ES5

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");}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.