CSI:Minecraftのアイテム


22

Minecraft 1.12は明日リリースされるので、お祝いしましょう!

Minecraftの何かのアイテムの数を表す負でない整数Nを取り込むコードを記述します。チェスト、スタック、アイテムの数をNにすると、プレーヤーにとってより役立つ方法で出力します。形式を使用する

XcYsZi

どこで

  • X N個のアイテムで完全に満たせるチェストの数、
  • Y は、チェストを満たした後に残っているアイテムで埋めることができるスタックの数です。
  • Z チェストとスタックを満たした後に残っているアイテムの数。

ご了承ください:

  • 64個のアイテムがスタックに収まります。(16にスタックするか、スタックしないアイテムは無視します。)
  • 27スタックが胸に収まります。(これらはダブルチェストではなく、シングルチェストです。)

したがってY、26を超える場合、またはZ 63を。

この形式の注意点は、何かがゼロの場合、その用語は印刷されないことです。

  • したがって、たとえば、YゼロXおよびZゼロ以外の場合、形式はのようになりXcZiます。

  • 同様に、YZがゼロとX非ゼロの場合、形式はになりますXc

  • ここでの例外は、Nがゼロの場合です。その後0iは、空の文字列ではなく出力です。

N個のアイテムはすべて同じタイプであり、すべてスタック可能であると想定できます。

3つの数字のリストまたはタプルを出力することはできません。スペースまたはコンマを使用せずに、正確な「csi」表記の文字列をこの順序で指定する必要があります。

参考までに、アイテムのスタックで完全に満たされたチェストは次のとおりです。

Minecraftのシングルチェストに27個のダイヤモンドスタック

テストケース

in -> out
0 -> 0i
1 -> 1i
2 -> 2i
62 -> 62i
63 -> 63i
64 -> 1s
65 -> 1s1i
66 -> 1s2i
127 -> 1s63i
128 -> 2s
129 -> 2s1i
200 -> 3s8i
512 -> 8s
1337 -> 20s57i
1664 -> 26s
1727 -> 26s63i
1728 -> 1c
1729 -> 1c1i
1791 -> 1c63i
1792 -> 1c1s
1793 -> 1c1s1i
4096 -> 2c10s
5183 -> 2c26s63i
5184 -> 3c
5200 -> 3c16i
9999 -> 5c21s15i
385026 -> 222c22s2i
1000000000 -> 578703c19s

バイト単位の最短コードが優先されます。



33
[OK]どうやらこれは、犯罪現場の調査である
Okx


@Okxタイトルを読んで、それが何らかの形のClue / Cluedoであるが、Minecraftのためだと思った。
コイナーリンガーアーイング

@Okxには、驚くことのないすべてのスピンオフがあります。たぶんクリーパーの-今、私たちはチョークの輪郭線を描画して挑戦を必要とする
クリス・H

回答:


11

ゼリー 26  24 バイト

d64d1¦27Fża¥“csi”Fḟ0ȯ⁾0i

番号を取得して結果を出力する完全なプログラム。
私には長すぎるようです...

オンラインでお試しください!またはテストスイートをご覧ください。

どうやって?

更新しています...

d64d1¦27Fża¥“csi”Fḟ0ȯ⁾0i - Main link: number n
 64                      - literal 64
d                        - divmod (whole divisions and remainder)
      27                 - literal 27
    1¦                   - apply to index 1 (the whole division from above)
   d                     - divmod
        F                - flatten into a single list (of three items i.e. [(n/64)/27, (n/64)%27, n%64]
            “csi”        - literal ['c','s','i']
           ¥             - last two links as a dyad:
         ż               -   zip
          a              -   logical and (any 0s in the divmod result become [0,0], others become [integer, character]
                 F       - flatten (from list of three lists to one list)
                  ḟ0     - filter discard zeros
                     ⁾0i - literal ['0','i']
                    ȯ    - logical or (non-vectorising)
                         - implicit print (smashed together representation, so [578703,'c',19,'i'] prints as 578703c19i)

7

網膜49 48 41バイト

.+
$*i
i{64}
s
s{27}
c
(.)\1*
$.&$1
^$
0i

オンラインでお試しください!TIOが過負荷になった場合に備えて、最後を除くすべてのテストケースが含まれます。編集:@MartinEnderのおかげで7バイトを保存しました。説明:

.+
$*i

is を使用して入力番号を単項に変換します。

i{64}
s

64個のアイテムが1つのスタックを満たします。

s{27}
c

27個のスタックが1つのチェストを満たします。

(.)\1*
$.&$1

チェスト、スタック、または残りのアイテムを10進数に変換しますが、タイプは接尾辞のままにします。

^$
0i

入力がゼロの場合、結果を作成し0iます。


ああ、これは本当に単項式に変換してから置き換えますか?
ジョナサンアラン

@JonathanAllan説明を追加しました(以前に申し訳ありませんでした)。(説明を書くことで、バイトを節約する機会も与えられました!)
ニール

2
次の$.&ような重複を避けることができます。tio.run
Martin Ender

@MartinEnderああ、私はそれをのi代わりに直接変換する価値があるかどうか疑問に思っていましたが1、その単純化を見ることができませんでした、ありがとう!
ニール

4

C#、84 86バイト

_=>(_/1728>0?_/1728+"c":"")+((_-=_/1728*1728)/64>0?_/64+"s":"")+(_%64>0?_%64+"i":"")

インライン減算に注意してください、それが可能であることに気づいていませんでしたがi--、なぜそうではないのですか?i-=10

編集:

_=>_>0?(_/1728>0?_/1728+"c":"")+((_%=1728)/64>0?_/64+"s":"")+(_%64>0?_%64+"i":""):"0i"

0エッジケースおよび提案の場合。


1
+1。そして、あなたは変更することができます_-=_/1728*1728_%=1728数バイトのゴルフへ。
ケビンCruijssen

また、エッジケースを忘れてしまいましたが0、これは結果として0i何も出力しないはずです。単純に追加すると、_>0?...:"0i"これが修正されます。
ケビンCruijssen

@KevinCruijssenああ、ありがとう。
-LiefdeWen

3
>_>編集されたものの+1
ケアード・コミンヘリングアーイング


3

05AB1E、24バイト

1728‰`64‰)˜…csiøvyJ¬0Êi?

オンラインでお試しください!

説明

1728‰                      # input divmod 1728 (64*27)
     `                     # split as separate with mod result on top of stack
      64‰                  # divmod 64
         )˜                # wrap stack in flattened list
           …csiø           # zip with the string "csi"
                vy         # for each
                  J        # join amount with storage-type
                   ¬0Êi    # if head != 0
                       ?   # print

0入力の場合はどのように機能しますか?また、なぜ他の入力はそうではないのに末尾の改行も出力するのですか?
ジョナサンアラン

@JonathanAllan:何も印刷されていない場合、05AB1Eは実行の最後にスタックの最上部を暗黙的に印刷します(改行あり)。forループはリストを分割し、要素をスタックにプッシュするため、印刷されないアイテムはスタックに追加されます。0ケースのループの最後で0iスタックの一番上になり(0sそしてその0c下になります)、印刷されます。
エミニャ

3

C、85 87 105 110 111 112 バイト

#define a(x,y)x?printf("%d%c",x,y+99):0;
f(z){a(z/1728,0)a(z%1728/64,16)!z+a(z%64,6)}

ここで試してみてください

コードは負の数でも適切に機能します。サーバーOPブロックを借りることができるようになりました!


関数はPPCGの標準として受け入れられます
ベータ崩壊

3

JavaScript(ES6)、77 76バイト

n=>[n+1,1728,64,1].map((v,i,a)=>(v=n%a[--i]/v|0)?v+'csi'[i]:'').join``||'0i'

テストケース



2

CJam、31バイト

ri64md\27md@]"csi"]z{0=},"0i"e|

オンラインでお試しください!

説明

ri                               e# Read an int from input.
  64md                           e# Divmod by 64, gives total #stacks, #items.
      \27md                      e# Divmod total #stacks by 27, gives #chests, #stacks.
           @                     e# Bring #items back to top.
            ]                    e# Wrap in an array: [#chests, #stacks, #items]
             "csi"               e# Push "csi".
                  ]z             e# Zip with the other array.
                    {0=},        e# Filter out subarrays where the first element is 0.
                         "0i"e|  e# Logical or with "0i". An input of 0 gives an empty array
                                 e# from the rest of the program, in that case yield "0i"
                                 e# instead.

1

JavaScript(ES6)71バイト

n=>[n/1728|0,(n/64|0)%27,n%64].map((a,i)=>a?a+'csi'[i]:'').join``||'0i'

スニペット:



1

バッチ、347335283246234202199191191189バイト

@set/al=%1,c=%1/1728,l-=c*1728,s=l/64,l-=s*64
@set c=%c%c
@set s=%s%s
@set i=%l%i
@if %c%==0c set c=
@if %s%==0s set s=
@if %i%==0i set i=
@if %c%%s%%i%.==. set i=0i
@echo(%c%%s%%i%

set/a式で除算とモジュラスを使用できることを知っていますか?
ニール

@Neil私は知っている、私は今と同じように働いている
-stevefestl

@ニール私はちょうど問題に遭遇していif %c%==0 (set c=)else remます:このコードは私に「(set期待されていません」
-stevefestl

ええ、それはcが空の場合にのみ発生するはずです
ニール

1
JFTR私のソリューション(同じ長さのわずかに異なる2つのバリエーション)は、122バイトまでです。
ニール


0

Mathematica、155バイト

A=AppendTo;G={};P=Print;(z=Mod[t=Mod[#,1728],64];If[(x=⌊#/1728⌋)>0,A[G,{x,c}]];If[(y=⌊t/64⌋)>0,A[G,{y,s}]];If[z>0||#==0,A[G,{z,i}]];Row@Flatten@G)&


0

T-SQL、139 134139バイト

入力は既存のテーブルtのaに格納されます。

SELECT IIF(a=0,'0i',REPLACE(IIF(a<1728,'',STR(a/1728)+'c')
                           +IIF(a%1728<64,'',STR(a%1728/64)+'s')
                           +IIF(a%64=0,'',STR(a%64)+'i'),' ',''))FROM t

読みやすさのための改行。合計バイト数には含まれません。MS SQL Server 2012でテスト済み。

編集1: 5バイトを節約するために複数REPLACEに変更さIIFれました。いらいらするように10文字までスペースを埋めるREPLACEため、ファイナルはまだ必要STRです。

編集2: SQLの承認された入力タイプ、名前付きテーブルに保存された値を使用してルールに従うように修正。ののバイト数は、の代わりにがFROM必要SELECTですPRINT。不要な括弧を削除して2バイトを回復しました。


0

PowerShell、113バイト

param($i)("$(($c=[math]::floor($i/1728)))c","")[!$c]+("$(($s=[math]::floor(($i%1728)/64)))s","")[!$s]+"$($i%64)i"

これは非常に正確にPowershellの多くの問題点に当たります。

[math]::Floor PSはデフォルトでバンカーの丸めを行うため、これが必要です。

PS Ternaryは、他の言語と比較してバイトの負荷もかかり、単純なヌルの合体($a="This";$a?$a:"That"または"This"?:"That")を行う必要があります(($a="This"),"That")[$a-ne$null]

次に、これらすべてを2回使用する必要があります。また、powershellのデフォルトの操作順序により、いくつかの場所に別のブラケットセットを追加する必要があります。



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