立方体のキューブの面を合計する


13

Cubicallyキューブの面を手動で合計するのは退屈で時間がかかり、Cubically自体でコードを書くようなものです。

最も効率的なcubifier、私は、立体的ソースにASCIIを変換することができ尋ねました。そこでの回答の1つは、キューブの初期化シーケンスを使用し、事前に初期化されたキューブの合計に基づいて結果のキューブを変更します。それ以来、このメソッドは多くのキュービック関連プログラムで使用されています。新しい初期化シーケンスをテストするとき、すべての面のすべての値を加算する必要があります。これには通常2〜3分かかります。

あなたの仕事は、このプロセスを自動化することです!

整数nと文字列の2つの入力を受け取りますc。これらは、コマンドライン引数、関数引数、標準入力、ファイル、またはそれらの任意の組み合わせから読み取ることができます。cなり立体的メモリキューブサイズのnインタプリタによってかなりプリントとして。

Cubicallyインタープリターは、プログラムの終了時にキューブをSTDERRにダンプし、見やすいように適切にフォーマットします。Cubicallyインタープリターで空のプログラムを実行し、デバッグセクションを開いて、初期化されたキューブのキューブダンプを確認します。引数4を追加して、4x4x4 5を表示したり、5x5x5などを表示したりします。

n3の場合、cこの形式に従います(整数は可変です)。

   000
   000
   000
111222333444
111222333444
111222333444
   555
   555
   555

スペース、改行、すべて。nが4の場合、次のcようになります(変数整数も使用):

    0000
    0000
    0000
    0000
1111222233334444
1111222233334444
1111222233334444
1111222233334444
    5555
    5555
    5555
    5555

など。

プログラムは6つの整数を出力します。最初の整数は、上面のすべての数値の合計になります。

   000
   000          top face
   000
111222333444    left, front, right, and back faces, respectively
111222333444
111222333444
   555
   555          bottom face
   555

2番目の整数は、左面、3番目が前面、4番目が右、5番目が背面、6番目が底面の合計になります。

したがって、n3で、これが次の場合c

   242
   202
   242
000131555313
010121535343
000131555313
   424
   454
   424

プログラムが出力されます20 1 14 43 24 33

追加のルール:

  • 出力整数は、非整数文字で区切る必要があります。配列を返すこともできます。
  • 入力が正しいと仮定することができます- n整数でcあり、キューブのデバッグ出力からのキューブです。もしそうnだった3.0cしたfoo bar、あなたのプログラムが破損し、まだ有効である可能性があります。
  • あなたのプログラムはとのみで動作する必要がn > 1ありn < 1260ます。それはあり大きいまたは小さいキューブサイズを処理(しようと)が、必須ではありません。

これはなので、最短のコードが優先されます!ヘルプが必要な場合は、Cubicallyチャットルームでお気軽にお問い合わせください。


入力に長方形になるようにすべての後続スペースが含まれると仮定できますか?
fireflame241

@ fireflame241あなたがnすべての行の後にスペースを意味する場合、いいえ。それらはダンプに含まれません。
MD XF

1
「キュービック」タグが本当に必要です。
ミスターXcoder

@ Mr.Xcoderステータスが完了しました:)私もそれを考えていましたが、さらに4つのCubicallyチャレンジATMに取り組んでいます。
MD XF

回答:



5

パイソン2155の 150 147 123 121 120バイト

おそらくかなりゴルフができる

編集:空白を削除するためのより良い方法を使用して-5バイト

編集:@Leaky Nunのおかげで-3バイト

編集:空白を削除しないことで-24バイト

編集:優先順位を活用して-2バイト

lambda n,a:[sum(sum(map(int,b[j*n:][:n]))for b in a.split("\n")[i*n:][:n])for i in range(3)for j in range(~i%2,i%2*2+2)]

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



3

、15バイト

3 秒と2 m

mṁṁiṁoC⁰TC⁰mf±¶

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

説明

                  Takes input as two arguments, the first being n, the second, the cube
              ¶   Split second argument into a list of lines
           m      For each line
            f±    keep only the digits (remove spaces)
         C⁰       Cut into lists of length n
    ṁ             Map then concatenate
        T           transpose
     oC⁰            then cut into lists of length n
mṁṁi              Takes list of lists of strings (or, in Husk, a list of lists of lists of chars) and returns the sum of the digits in each list
m                 Map function over list of lists
 ṁ                  map then sum
  ṁ                   map then sum
   i                  convert character to integer

1
mṁṁi本当にいいです!
ズガルブ

3

オクターブ、64 59 54バイト

@(c,n)sum(im2col(c'-48,[n n],'distinct'))([2 5:8 10])

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

前の答え:

@(c,n)sparse(kron((1:4)+[0;4;8],!!e(n)),1,c-48)([2 5:8 10])

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

出力として配列を返します。


私が期待したものではなく、完全に有効であり、正直なところ、私はまったく答えを期待していませんでした。+1
MD XF

@MDXF何を期待しましたか?
rahnema1

私はこの短い答えも、文字列を受け入れるこの形式も期待していなかった。しかし、それはOctaveが行う方法です。Octaveは使用したことがありません。
MD XF



1

Haskell、128バイト

s n c=filter(>=0)$map(\[x,y]->sum$map(\[v,w]->fromEnum((lines c)!!(x*n+v)!!(y*n+w))-48)$n%n)$3%4
n%m=sequence[[0..n-1],[0..m-1]]

改行を含む文字列を受け入れます。


1

PowerShell、236バイト

param($n,$z)
function f($y){$y-replace' '-split'(.)'-ne''-join'+'|iex}
$a=$z-split"`n"
f $a[0..($n-1)]
$a[$n..(2*$n-1)]|%{$x="($('.'*$n))";$1,$2,$3,$4=$_-split$x-ne'';$h+=$1;$i+=$2;$j+=$3;$k+=$4}
$h,$i,$j,$k|%{f $_}
f $a[(2*$n)..(3*$n)]

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

うーん、これは長いです。しかし、文字列の分割とスライスは、PowerShellの強みの1つではないため、ある程度期待されていると思います。また-そう。たくさんの。ドル。

パラメーター$n$z、サイズとキューブネットとしてそれぞれ受け取ります。次に、全体で使用される関数を構築します。ここでは、スペースを削除し、各桁で分割し、その間の空の文字を削除し、すべての文字をで結合して+から、結果のステートメントを実行して数値を取得しています。例えば、このターン"123"中に1+2+3実行されるのです6

次の行splitは、入力キューブネットの改行であり、結果をarrayに格納し$aます。次に、最初の$n行で関数を実行し、立方体の上面を出力します。

次のセットでは、キューブサイズに基づいて文字列を接合する必要があります。したがって、各行をループして、構築します$xし、適切な正規表現パターン(たとえば、サイズ$n=3"(...)")としてし、そのパターンに基づいて文字列を分割し、再び空の要素を削除して、4つの面を表す4つの変数に格納します。これらは文字列をh介して連結されますk

次の行はその後、船hによるkは、キューブの側面(左、前、右、後ろ)を出力するために関数をてれます。

最後に、最後の $n関数の行、立方体の底面を出力します。

すべての数値はパイプラインに残り、出力は暗黙的です。


1

APL(Dyalog Classic)30 27バイト

{+/⍎¨6(⍺*2)⍴⍉⊃,⌿3⍺⍴⍵⊂⍨⍵∊⎕D}

@Adámのおかげで3バイト削減

is c

説明

                        ⍵⊂⍨⍵∊⎕D   c partitioned by D (digits 0..9)
                    3⍺⍴           reshape into 3 by n matrix
                 ,⌿              concatenate on first axis (results in n vectors)
              ⍉⊃                  ravel transpose mix (results in a simple string with all digits in side order)
      6(⍺*2)⍴                     reshape into 6 by n squared matrix (one row per side)
 +/⍎¨                            sum rows execute each (execute will turn characters into numbers)

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


私には59バイトのように見えます。と置き換える⎕U2286、5バイトしか追加されません。
アダム

私の悪いことに、私はパーティションに囲まれた状態で、またはパーティションなしで遊んでいて、クラシックバージョンのバイトカウントのみを使用していました。移行レベル3を使用するように私の答えを編集します:)
ギル

1
また、あなたは間にスペースを削除することができます3し、
アダム

1
(6,⍺*2) → 6(⍺*2)
アダム

1
IFAICTは、あなたが必要としません,として常にラヴェルために、その右引数を使用しています。
アダム

0

通常、19バイト

r%0@%1@%2@%3@%4@%5@

STDINからキューブを取得し、インタープリターへのコマンドライン引数としてサイズを取得します。上面、ヌルバイト、左面、ヌルバイト、...底面、ヌルバイトの合計を出力します。

オンラインでお試しください!...ブラウザ上でヌルバイトを何らかの空白として表示するようです。

この言語はこの挑戦のために作られたのではありませんが、挑戦は言語のために作られました....それはまだ不正行為ですか?;)

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