n%12を計算


27

符号なし32ビット整数のnモジュロ12を計算します。

ルール:

  • 0〜23のすべてnで機能する必要があります。その他の番号はオプションです。
  • 演算子のみのいずれかを使用しなければならない+-*~&^|または<<>>一般に32ビットするuintで定義した通りです。
  • 任意の数の定数uintを使用できます。
  • 配列を含むポインター、またはif三項演算子や「より大きい」演算子などのifステートメントにコンパイルされるものを含むステートメントを使用することはできません。

得点:

  • 演算子+ -とビット演算子~ & ^ | << >>(NOT、AND、XOR、OR、ビットシフトが)のスコアを与える1*のスコアを与えます2
  • 最も低い合計スコアが勝ちます。

6
C / Java以外の言語のユーザー用に演算子を定義することもできます。私は理解し+-*、乗算、加算、減算されています。~&^|ビット単位のNOT、AND、XOR、ORです。そして<< >>ビットシフトです。
レベルリバーセント14年

@steveverrill-ありがとう。それは確かに意図です。
nbubis 14年

使用できますfor i in x:y:z, .dostuffか?
美麗な14年

式で使用する値と等しい変数を設定できますか?
xnor 14年

4
ほとんどのコンパイラは最適化されますn % 12、これは組立、単に出力自明であるので、乗算やハッカーの喜びのようにシフトしてご覧ください
phuclv

回答:


29

4

(言語は無関係です)

n-((48&(11-n))>>2)

わー!4に行きました。

11-n n> = 12の場合にのみ、すべての高位ビットが設定されます。

48&(11-n) == n> 11の場合は48、それ以外の場合は0

(48&(11-n))>>2 == n> 11の場合は12、それ以外の場合は0

n-((48&(11-n))>>2) 答えです


1
Aww shucks、あなたはこのアプローチに私を打ち負かした!私は投稿からほんの一瞬離れていましたn - (((11 - n) & 0xC0000000) >> 28)。よくやった、私はそれが4つ未満で行うことができるとは思わない。
Runer112 14年

1
@ Runner112ええ、私はそれを投稿したときに誰も私に打ち負かさないことを望んでいました。まあかかわらず、自分自身でそれを見つける上で行わ
isaacg

1
素晴らしい:) 4は確かに成果です。
nbubis 14年

11

4

ルックアップテーブルを使用したソリューション(ルックアップi ^ (i % 12)):

i ^ (0x1d4c000 >> (i & 0xfc) & 30)

4

4つの操作を含む別のソリューションを次に示します。

i - ((0xffff >> (i - 12)) & 12)

ビットシフトのカウントオペランドは暗黙的にmod 32をとる、つまりx >> -1、と同じであると仮定しx >> 31ます。

5

ルックアップテーブルを使用する別のアプローチ:

i - (16773120 >> i & 1) * 12

7

bash – 1

echo `seq 0 11` `seq 0 11` | awk '{print $(number+1)}'

例えば

$ echo `seq 0 11` `seq 0 11` | awk '{print $(0+1)}'
0

$ echo `seq 0 11` `seq 0 11` | awk '{print $(11+1)}'
11

$ echo `seq 0 11` `seq 0 11` | awk '{print $(12+1)}'
0

$ echo `seq 0 11` `seq 0 11` | awk '{print $(23+1)}'
11

1
ポインターを使用するため、これは無効です。
curiousdannii 14年

@curiousdanniiどんなポインターを指しているのですか?stdinそしてstdoutストリーム?もちろん、内部的にはそれらはポインターですが、Java Integerが多くの目的で内部的にクラスを使用するため、Javaを失格にすることもできます。
コールジョンソン14年

$()は実質的にポインターと同等ではありませんか?
curiousdannii 14年

@curiousdannii-awkのドキュメントには、それらが組み込み変数であると書かれています。

5

C、リトルエンディアン-2

これはおそらく不正行為ですが、ルールを満たしていると思います...

union {
    int i;
    struct {
        int a:4;
        int b:2;
        int c:10;
    } s;
    struct {
        int a:2;
        int b:14;
    } t;
} u;

u.i = 11-n;
u.s.a = 0;
u.s.c = 0;
result = n-u.t.b;

どのように機能しますか?
nbubis 14年

1
= 0 代わりに使用しているので、ちょっとした不正行為は& 0x0、追加の2つの操作としてカウントされます。しかし、創造性のために+1 :)
nbubis 14年

4

PHP-スコア0

私の前に誰もこれを持って来なかったのはどうしてだろう!

$n = 18;
$s = str_repeat("a", $n);
$s2 = preg_replace('/aaaaaaaaaaaa/', '', $s);
echo strlen($s2);

2
いいね ただし、配列は許可されていないため、問題があると思います。本当にいい。
AJMansfield 14年

@AJMansfieldこれは配列ではなく文字列を持っていると主張することができます(はい、低レベルの文字列はバイト配列です)。:)
seequ 14年

1
@seequ一つはまた、(ツ)_ /¯_(はい、低レベルで、ラムは技術的にインデックス付きの配列です)ので、RAMのそれの使用で、この無効を主張することができ
スタン・ストラム

2

C、スコア5

23まで機能しますが、それ以上は保証されません。

( ((n+4)>>2)&4 ) + n & 15

((n+4)>>2)&4n> = 12の場合、4を返します。nに追加すると、最下位の4ビットで正しい答えが得られ、他のビットは切り捨てられます。


よくやった!!では、誰かが4.に到達できるかどうかを見てみましょう。
nbubis 14年

2

どんな言語でも:5

勝つつもりはありませんが、楽しくて、おそらく他の人よりも理解しやすいから参加します。

n - ((n+20)>>5)*12

これは同等です

n - (n>11)*12

これは、20から12を追加すると32になるため、5番目のビットが1になるため、これは同等です。これは、n> 1の場合のみです。

また、あなたができるように、より高い範囲に簡単に拡張できることに注意してください

n - ((n+20)>>5)*12 - ((n+41)>>5)*12

35までの範囲に到達するには


1

Python 2.x-4

j=input();m=lambda a,b:a*b;a=(m(j,357913942)>>32);print j-m(12,a)

ある=オペレータ?

その場合、スコアは6です。

j-12*(j*357913942>>32)

BTW @steveverrillのソリューションは、Pythonでも直接使用できます。

範囲0〜23で機能します。

どうしたの ?357913942で乗算し、2 ^ 32(または右シフト32)で除算します


関数を使用して1回だけ複製する方法が気に入っています。しかし、私はあなたが乗算を関数m(、)に名前変更しただけです。
Pinna_be 14年

ルールの解釈方法によって異なりますが、有効なポイントがあります
ウィレム14年


0

コブラ-2(または3)

def modulo12(n as uint32) as uint32
        for i in 11:n to int64:12,n-=12
        return n

これ少し規則を曲げるかもしれませんが、私は尋ねて、これを使うことを許可されました。

任意の数でも機能します。


0

コナ -5

フロア演算子が許可されているかどうかわからないため、無効になる場合がありますが、2つと*マイナスがあります。

mod:{x-(_0.08333*x)*12}

どの整数でも機能するはずです。


フロア演算についてはわかりませんが、最初の乗算が32ビット整数以外の演算を行っていることは間違いありません。
Runer112 14年

@ Runer112:OPは、入力は32ビットでなければならず、演算子は通常32ビットuintで定義されているとおりであると言います。コード内の非整数値については何も述べていません。
カイルカノス14年

誤解しない限り、0.08333は32ビットuintではないため、0.08333 * xは32ビットuintで定義された乗算のようには見えません。
Runer112 14年

1
「任意の数の定数uintを使用できます。」-つまり、任意のフロートを使用できません。
nbubis

1
@nbubis:その行は実際にはフロートに制限を加えません。
カイルカノス14年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.