6を9倍すると何が得られますか?(42)


60

数学が大好き。しかし、正しく乗算できる単一の計算機は見つかりません。彼らは6 * 9を除くすべてを正しくしているようです(それは人生、宇宙、そしてすべてに対する質問です!どうしてそれを間違えますか?!)。したがって、2つの数値を正しく乗算できる関数を作成してください(6 * 9は54ではなく42になります。9* 6は54に等しくなります)。

ああ、Minecraftでソースを構築する必要があるので、...最少のバイトで勝ちます!

要約

  • 入力として2つの数字を入力します(タイプは関係ありませんが、渡されるアイテムは2つだけで、順序は一貫している必要があります。順序が保持されないため機能しません)
  • 6と9の場合を除き、両方の数値の倍数を出力し、42を出力します(順序が重要です!)
    • PS。私はカウントが本当に上手くなかったので、0から99までの整数だけが実数であると思います(使用されるタイプは関係ありません)
  • 言語あたりのバイト数が少なくなります!

リーダーボード:


1
@JonathanAllanはい、そのためのルールを追加しました。
テズラ

73
偶然にも質問IDには422回含まれています。
エリックアウトゴルファー

1
99までの整数のみが実数である場合、たとえば9 * 11は有効なプロンプトですが、10 * 10はそうではありませんか?
暗い放浪者

14
@EriktheOutgolfer…そして12は、入力が6と9の場合に減算するものを表します
。–アダム

11
@EriktheOutgolfer IDを逆読みしても。
T.サー-モニカーの復活

回答:


65

Mathematica、15バイト

バイトカウントは、Windows ANSIエンコーディング(CP-1252)を想定しています。

6±9=42
±n__:=1n

±問題を解決する二項演算子を定義します。単純に6±9=42優先する特別なケースとして定義し、±乗算と等しくなるフォールバック定義を追加します。後者は、かなり興味深いゴルフトリックを使用します。これがうまくいく理由は実際には非常に複雑で、シーケンスを調べる必要があります。シーケンスは、他の言語でスプラットとして知られているものに似ています。基本的には、ラッパーを持たない「リスト」です。例えばf[1, Sequence[2, 3, 4], 5]、本当にただf[1, 2, 3, 4, 5]です。他の重要な概念は、すべての演算子が単なる構文上の砂糖であるということです。特に、±単項演算子または二項演算子として使用でき、headを表しPlusMinusます。そうで±xありPlusMinus[x]a±bですPlusMinus[a,b]

これで定義ができました±n__。これはを定義するための略記ですPlusMinus[n__]。しかし、引数のn__任意のシーケンスを表します。したがって、これは実際にバイナリ(およびn進数)の使用法の定義も追加PlusMinusします。この定義の値は1nです。これはどのように引数を乗算しますか?まあ、1nMathematicaの並置による暗黙的な乗算を使用するので、と同等1*nです。しかし*、これも単に略記ですTimes[1,n]。さて、n引数のシーケンスです。したがって、呼び出すa±bと、実際にになりTimes[1,a,b]ます。そしてそれはただa*bです。

この構文の乱用により、単項構文を使用して2項演算子を定義できるのは非常に適切だと思います。PlusMinus[2,3,4]計算することさえ24できるようになりました(±##&[2,3,4]または2±Sequence[3,4]、と書くこともできますが、その時点で狂っています)。


私はこれが基本的に私の「電卓」のパッチである方法が特に好きです:3楽しみのために、これは*でも動作しますか?:3
テスラ

3
@Tezra *は組み込みの演算子なのでUnprotect、さらに定義を追加するUnprotect[Times];6*9=42必要がありますが、動作するはずです(ただし、今はテストできません)。
マーティンエンダー

1
これを*演算子に行うのはとても悪いことです。>:3
テズラ

1
他に正確に42人いる場合、どうすれば投票できますか?!?他の誰かがそれを破った後に授与される私の「未来+1」です!:-)
The Vee

1
@MartinEnder Aww; しかし、これはMathematicaで最も短く、これまでのところ私のお気に入りです。:3-
テスラ


25

C、32 31 29 28バイト

-2 Digital Traumaの
おかげで-1 musicman523のおかげで

#define f(a,b)a^6|b^9?a*b:42

ものすごく単純。マクロ機能宣言f二つの引数を取る、ab
場合aである6bされ9、戻ります42。それ以外の場合はaxを返しbます。

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


2
ロジックの^代わりに使用し==、少し調整し#define f(a,b)a^6||b^9?a*b:42ます。-2バイトを節約します。
デジタル外傷

@DigitalTrauma乾杯:D
MD XF

1
私はあなたが使用することができると思う|の代わりに||、それはまだよりも低い優先順位を持っているので、別のバイトを保存するために^
musicman523

@ musicman523ありがとう!編集。
MD XF

1
あなたにも、これらの変更を取るためにあなたのshortCバージョンをアップデートする必要がある
musicman523

17

JavaScript(ES6)、20バイト

x=>y=>x-6|y-9?x*y:42

説明:

f x == 6およびy == 9の場合、x-6|y-90(偽)になり、結果は42になります。

スニペット:

f=

x=>y=>x-6|y-9?x*y:42

console.log(f(6)(9));
console.log(f(9)(6));


4
とてもうまくできました。私はそれを考えていたらよかった。+1
シャギー

14

パイソン230の 29バイト

バイトを節約してくれたJonathan Allanに感謝します!

lambda x,y:x*[y,7][6==x==y-3]

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


2
6 * 7であるという事実を使用してバイトを保存している:42lambda x,y:x*[y,7][6==x==y-3]
ジョナサン・アラン

@JonathanAllan Ohh、それはすてきです!ありがとう!:)
アドナン

このソリューションは、Python 3
AMK

まさに私が得たもの!さらにゴルフをする方法を見つけることができないようです。
FlipTack

12

05AB1E15 11 9バイト

@Emignaのおかげで-4バイト

@Adnanのおかげで-2バイト

P¹69SQi42

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

使い方

P          # multiply input
 ¹         # push first number
  69       # the number 69
    S      # split per character
     Q     # equality for both inputs
       i42 # if so, print 42
           # otherwise print product

で4バイトを節約できます‚D96SQi42ëP
エミニャ

@エミグナハァ...なぜ,始めに?
ニールA.

2つの入力をペアにして、リストとして一度だけ比較します。
エミグナ

6Qs9Q*同じバイト数でも同じように機能すると思います。
エミグナ

入力形式を変更すると、2バイト節約されますP¹69SQi42
。– Adnan

10

Java(OpenJDK 8)24 22バイト

@OlivierGrégoireのおかげで-2バイト

a->b->a==6&b==9?42:a*b

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


3
PPCGへようこそ!Javaについてはあまり知りませんが、System.out.println()呼び出しを削除して、関数に結果を返すだけでいいですか?
-ETHproductions

2
@LưuVĩnhPhúcはJavaで(a^6|b^9)==0はありません。暗黙の「0以外」の比較がないため、私は書く必要があるからです。結果のコードスニペットは27バイト長になります。とにかく、提案をありがとう、そして私があなたの先端を間違えたかどうか教えてください。
内気なベルーガ

1
@Rikerいや、それはjavaのようには機能しません。たとえば、スニペットint a = 5; if (a) do_some_stuff(); else do_other_stuff();Type mismatch: cannot convert from int to booleanコンパイルエラーを返します。ブール値で明示的に作成する必要があります。SOおよびORACLEを参照してください。
内気なベルーガ

3
カレーを使用して1バイトを節約できます。また、セミコロンはラムダの一部ではないため、別のバイトを節約できますa->b->a==6&b==9?42:a*b
オリヴィエグレゴワール

1
0が偽ではない理由に注意してください。Javaは0が整数でないあなたがfalsy値を使用することはできませんので、ブールと危険な型キャストが許可されていないですので、安全なタイプです
マーティン・バーカー

6

ルビー、24バイト

->a,b{a==6&&b==9?42:a*b}

a^6|b^9<1ブール値として機能する場合があります。スマートフォンでテストするのは難しい。
エリックドゥミニル

1
@EricDuminil残念ながら、その式は(((a^6)|b)^9)、つまりとして解析されるa.^(6).|(b).^(9)ため、正しく機能しません。a-6|b-9==0動作しますが、それは短くありません。
ヴェンテロ

@Ventero:私はそれについて考えませんでした。ありがとう。a,b==6,9いいでしょうが、それも動作しません。
エリックドゥミニル

6

脳フラック158の 154 148 140 138 126バイト

(({}<>)(((([()()()]<>)){})<({}{}({}))>{(()()()){}(<{}>)}{}))([()]{()(<{}>)}{})(({<{}>{}((<>))}{}){}<{}>{<({}[()])><>({})<>}{})

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

説明

このコードは非常に単純です。スタックの上の2つのアイテムのコピーを作成し、一方から6を減算し、他方から9を減算します。次にnot、2つの値を取ります。我々andこれらの値は、12乗算により入力結果を乗算し、二つの結果を減算します。


2
あなたは説明を読んで、大文字にしnotたりand(バッククックしたり)したいかもしれません。
MD XF

6

Factorio、661バイト、9接続の6コンビネータ

出力AとBに設定された1つの定数コンビネーターがあります。これらを変更して入力を設定します。

ブループリント文字列(0.15.18):

0eNrNVm2O2jAQvcv8rEKFvSHLRuqPtrfYCkUhGWAkYkfOGDVCOUBv0bP1JLWTLQuB3U0QbfcPYvzxZt68eYr3sNxaLA0phngPlGlVQfxtDxWtVbr1a1yXCDEQYwEBqLTwUY4Z5WgmmS6WpFLWBpoASOX4HWLRBG8C+EScKr6MIJtFAKiYmLCrpw3qRNliicaleK2SAEpduata+fQObiI+zgKo/R+XIyeDWbcrA18IG71NlrhJd+RuuytPmInby1ucyq+uyFScnPHakWHrVg4VdScmnz2fPzQhjnxQlKlpS4zhk7ugLZd2BCTu0NS8IbXusMvalWgVJyuji4SUA4OYjcWmS606nm31wv8YzI+7SS66axbusHxh1zeITGaJ21C4w41XtyeHHCXH9D+o8eVUjYd3qoY47bc86rWPo158/yze2iCqPtxsmHx3r9ry3E6ylU9cTUv0aITDygwPZaaGeFMgUzbM99NBg/aMegPnV+gxRg6oLtFNZFsjfLhiJB+huZn1B87O7Crr/0Pnfz11vug5/9ePn+/E+2Hf++4beNHV8uzgRWWica6ejnDKiraM5oWXwhtC2CcVDo+FxfAWDfwc3Y9jLv4288cj5qG8IXU3Ie2zKj56xgXgZrNqOURhKGfR/GE6nzfNb7OMaxo=

出力は信号Zであり、上部および下部決定子から取得されます。

スクリーンショット


waaa ...初めてppcg xDでfactorioの回答を見る
V. Courtois


6

ゼリー8 7バイト

Vf96SạP

入力は2つの整数の配列です。最初は右側のオペランド、次に左側のオペランドです。

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

使い方

Vf96SạP  Main link. Argument: [b, a]

V        Cast [b, a] to string, then eval the resulting string.
         For [b, a] = [9, 6], this yields 96.
 f96     Filter with 96, yielding [96] if V returned 96, [] otherwise.
    S    Take the sum, yielding either 96 or 0.
      P  Compute the product of [b, a], yielding ba = ab.
     ạ   Compute the absolute difference of the results to both sides.
         When the sum is 0, this simply yields the product.
         However, when [b, a] = [9, 6], this yields 96 - 54 = 42.

これは-1程度の自由度があります。これらの偶然はどのようにあなたにも起こりますか?
リルトシアスト

5

Factorio、581バイト、4つの接続を備えた3つのコンビネータ

ブループリント文字列(0.16.36):

0eNqllNtu4jAQht9lLldmldNCFWkvto/RCkUhGWAkYkfOGDVCefeOnV1Km7ACemPJ9vibf04+webgsLWkGfITUGV0B/nrCTra6fLgz7hvEXIgxgYU6LLxO2/HpeZFZZoN6ZKNhUEB6RrfII+HtQLUTEw44sKmL7RrNmjF4AyqsaIa7SVHQWs6eWq0dy+46OcvBT3ki1hc1GSxGi8T5XWwNYdig/vySPJYXvxFFnJXB0znT7dkOy4mYR3JspOTs6DRYoFHtD3vSe98XP/CFZ9xtsqe0mW29KdNW9qgOYffgjCOW3eHk+eR3fai1WkuttY0BWlhQM7W4TC61mPAIYzYLxbry6yS7FKxJFs54rANFdhZRP3VMBnWQk08ZvZ+ChpExqSCyX9bYVLCRfxRwbmabenAaK+03rX0/RnT5z7VJbroQnUH7HkGlq7OsDFtc8WYzWJ8WxbTs4rSEu8bZKpuGoXopkn4gH5vGEKiO/SMO5vbtCgDEjTCjwcm5AWGO4ZgknX16Tq7OhRfHiZXypU91PTRd6ZYdIjo8PnmF3+1AvmfuuBq+bRKYmnWKM2G4R1hAPnz

左下の定数コンビネータは、入力として出力AおよびBに設定する必要があります。出力は、右下の算術コンビネーターからの信号Zです。

ここに画像の説明を入力してください

Top left: 2147483640 A, 2147483637 B
Top right: If everything = 2147483646 output B, input count
Bottom left: (input) A, (input) B
Bottom right: A * B -> Z


4

GW-BASIC、55バイト

1INPUT A:INPUT B
2IF A=6THEN IF B=9THEN ?"42":END
3?A*B

出力:

出力

pcjsの最初のマシンにはIBM BASICがありますが、これは実質的に同じものです。これをテストするには、あちらこちらに行きRun、マシンを押してEnter- Enterを押し、タイプBASICAしてBASICモードに入ります。次に、ソースコードを入力し(自動的にプリティプリントされます)、タイプしRUN、2つの整数を入力して、完了です!


3
バイトカウントは正しいですか?GW-BASICは、などの一部の単語が、INPUTそれらを構成する文字が示唆するよりも少ないバイトでエンコードされるエンコードを使用します。したがって、カウントは私には高いようです。

@ ais523まあ、私はそれを実行しwc、55を得ました...エミュレータにコピーアンドペーストし、期待どおりの動作をしました。
MD XF

3
右、私のポイントは、おそらくあなたが必要以上にあなたの提出物を採点しているということです。GW-BASICを取得してファイルを保存し、ディスク上の結果ファイルのサイズを確認します。小さくする必要があります。

@ ais523名前を付けて保存OUT.BASi.stack.imgur.com/32eH1.pngバイトカウントは中央の値です。
MD XF

OK、私はそれを期待していませんでしたが、私はそれがこの状況で洗浄であると思います。(または、おそらく複数の保存形式がありますか?)


4

チェック34 33バイト

.:+&>#v
#>42#v#9-!\>6-!*?
 d* ##p

チェックは私の新しいエソランです。2Dセマンティクスと1Dセマンティクスの組み合わせを使用します。

入力は、コマンドライン引数を介して渡される2つの数値です。

説明

スタックは、コマンドライン引数で始まります。引数aとを呼び出しましょうb

最初の部分は.:+&、本質的にスタックを複製し、そのままにしa, b, a, bます。>スタックに0をプッシュします(これはによって補完される数値リテラルの一部です9)。

#2Dセマンティクスに切り替えv、IPを下方にリダイレクトします。IPはすぐにに実行され、#再び1Dセマンティクスに戻ります。

9-!b9に等しいかどうかをチェックします(9を減算し、論理否定を取ります)。\>6-!次にかどうかをチェックaスタックは今含ま6に等しいa, b, 1, 1場合にのみb==9としますa==6。との乗算*は、これらの2つの値の論理AND を取り、a, b, 1入力が6and 9であるかどうか、a, b, 0それ以外の場合を示します。

この後、IPはに実行されます?。一番上のスタック値がゼロ以外の場合、これは2Dモードに切り替わり、それ以外の場合は1Dモードで続行します。

一番上のスタック値がだった場合1、これは他のスタック値が69であることを意味します。したがって、42をスタックにプッシュし、最後の行の>422番目#に移動します。

一番上のスタック値がの0場合、実行は次の行に移動します。(そうしないように)をd削除し、2つの入力にを掛けます。2Dモードの内と外のスイッチ、何もしません。0?*##

ブランチが再び参加しました。スタックには6, 9, 1, 42、またはが含まれますa*bp一番上のスタック値を出力してから、プログラムを終了し、残りのスタックを破棄します。


これは気の利いた言語のように見えます!
木ではない


3

Pythonの336の 33バイト

lambda x,y:42if x==6==y-3else x*y

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


1
代替バージョン、同じサイズ:lambda x:x[0]*x[1]if x!=(6,9)else 42。唯一の違いは入力タイプです。
musicman523

ネバーマインド-編集したバージョンが短くなりました:)
musicman523

投稿したコードは実際には機能しないため、リンク先のTIOで機能するバージョンに切り替えました。
ETHproductions

それは私のために働く:In [1]:f = lambda x、y:42if 6 == x == y-3else x * y In [2]:f(6,9)Out [2]:42 In [3 ]:f(9,6)アウト[3]:54 @ETHproductions
Martmists

@Martmistsあなたのコードはf=lambda x,y:42if6==x==y-3else x*y
ETHproductions

3

APL(Dyalog)、10バイト

×-12×6 9≡,

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

× (引数の)積

- マイナス

12× 12回

6 9≡ (6,9)が等しいかどうか

, (引数の)連結


ああ、これを見たばかりで、Jの答えはこれとまったく同じです:/ 1バイト長いことを除いて
コナーオブライエン

@ ConorO'Brienは理にかなっています。Jと暗黙のAPLはほぼ同等です。ただし、Jのマルチ文字プリミティブを除きます(最終的にはCapが必要です)。
アダム

3

R、41私は新しいバイトを数える方法がわからないと思う:D

function(a,b){

if(a==6&b==9){42} else {a*b}

}

引数がこの順序で aとb ある関数を定義します。aが6に等しく、bが9に等しい場合、42を返します。それ以外の場合、a倍b


サイトへようこそ!:)
DJMcMayhem

ようこそ。改行とスペースも重要であることを考慮してください。あなたの場合、改行やスペースを削除すると(
可能であれば

1
を使用して2バイトをカットできますifelse(a==6&b==9,42,a*b)
-Masclins

全体を33バイトに減らすことができますfunction(a,b)`if`(a-6|b-9,a*b,42)
rturnbull

これは、不要な空白を削除してから41バイトになります。その後、47バイトになります。
パベル

3

SPL、356バイト

a.Ajax,.Puck,.Act I:.Scene I:.[Enter Ajax and Puck]Ajax:Listen to your heart!Puck:Listen to your heart!Are you as big as the sum of a big big big cat and a cat?If so, am I as big as the sum of a big big cat and a big cat?If so, you are as big as the product of I and the sum of I and a cat.If not, you are as big as the product of you and I.Open your heart

改行とスペースを使用:

a.                       *Title*
Ajax,.                   *Declare variable Ajax*
Puck,.                   *Declare variable Puck*
Act I:.
Scene I:.
[Enter Ajax and Puck]
Ajax: Listen to your heart!                  *Set Puck's value to user input*
Puck: Listen to your heart!                  *Set Ajax's value to user input*
      Are you as big as the sum of a big 
       big big cat and a cat?                *Is Ajax=9?* 
      If so, am I as big as the sum of a 
       big big cat and a big cat?            *Is Puck=6?* 
      If so, you are as big as the product 
       of I and the sum of I and a cat.      *If so, set Ajax=42* 
      If not, you are as big as the product 
       of you and I.                         *If not set Ajax=(Ajax)(Puck)*
      Open your heart                        *Print Ajax's value*


3

標準ML(MLton)22 20バイト

@Laikoniのおかげで2バイト節約できました!

fun$6 $9=42| $x y=x*y

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

これはSMLが意図している種類のことであり、これがshortCやPythonに勝る理由です。

古いバージョンの方がずっときれいに見えました。:P



@ライコニうわー、あなたが$識別子として使用できるとは思いませんでした!|との間のスペースを削除すると、なぜコンパイルされないのです$か?
musicman523

SMLは英数字記号の識別子を区別します。これはゴルフに非常に便利です。|$は単一のシンボリック識別子として解析されるため、すべてが壊れます。SMLに関するヒントの質問をすぐに作成し、これら2種類の識別子に関する回答を追加する予定です。
ライコニ

2

Pyth、12バイト

-*FQ*12q(6 9

オンラインで試す

説明

 -*FQ*12q(6 9
  *FQ             Take the product
        q(6 9)Q   Check if the (implicit) input is (6, 9)
 -   *12          If so, subtract 12

賢い解決策。:私は15で三元の文でそれを試してみましたAQ?&q6Gq9G42*GH
Tornado547


2

ゼリー、10 バイト

⁼6,9ȧ42ȯ⁸P

2つの数値のリストを取る単項リンク。

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

どうやって?

⁼6,9ȧ42ȯ⁸P - Link: list of numbers [a,b]
 6,9       - 6 paired with 9, [6,9]
⁼          - equals? (non-vectorising) (1 or 0)
     42    - literal answer, 42
    ȧ      - logical and               (42 or 0)
        ⁸  - link's left argument, [a,b]
       ȯ   - logical or                (42 or [a,b])
         P - product                   (42 or a*b)

私がした?ように、あなたはちょうど使用することができました。;)
アウトゴルファーのエリック

Ah ,は、リテラル正規表現パターンの一部であるという点で特別なため6,9、単一のトークンとして解析され、クイック$はそれをと組み合わせることができます。あなたはそれを理由付けましたか、それとも試してみて、それが機能したことに気付きましたか?
ジョナサンアラン

1
私はそれを推論しました。
エリックアウトゴルファー


2

SILOS81 67バイト

readIO
J=i
readIO
a=(J-6)^2+(i-9)^2
a/a
a-1
a*12
x=J*i+a
printInt x

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

ある意味では、追加はSILOSの興味深いNANDゲートとして機能します。

@Leaky Nunのおかげで-14バイト

基本的に、jが6でi = 9の場合、0(偽)の数値「a」を作成し、それを1で割って12を掛けて製品に加算します。

「a」が1を減算して乗算した後に1だった場合、それはノーオペレーションになりますが、aが0の場合、0/0はエラーを自動的にスローし(これは自動的にキャッチされます)、aが0になり、その後-1。最終的に製品から12を引きます。




@LeakyNunおお、それは賢い。
ローハン

実際、に0/0なり0ます。
リーキー修道女

@LeakyNunは、0になったと言ってから、デクリメントします。修正。
ローハン


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