宝くじにハック


44

最近、危険なギャンブルサイトでアカウントを作成しました。25ドルの手数料で、0〜50ドルのランダムな金額が返されます。5ドルを2回取得した後、サイトが詐欺であることを証明することにします。デフォルトのパスワードで外部ファイアウォールにアクセスした後、データベースサーバーにアクセスし、最小値と最大値の値がどこにあるかを見つけます。最大値として25個の「9」を接続することにしましたが、最大値は「uint64」型でなければならないというエラーメッセージが表示されます。ただし、一部の数字キーがリモートコンソールに正しく入力されていないように見えるようになりました。チャレンジは、Q + Aサイトでタイプアップされたかのように、あなたの前に現れます。

特定の言語をテストおよび実行するために便利にインストールされたプログラムのみを使用して、符号なし64ビット整数値の最大サイズを出力しますが、プログラミングツールを除くほとんどすべてがこのマシンで破損し、数字1を使用せずに残ります2,4,6,8-ソースコードまたはリテラルのいずれかで、コードの追加部分ごとにプログラムを実行するのに指数関数的に長い時間がかかるようであることに気付くので、抽選の前に金持ちになりたい!


挑戦

  • 数値または単一の文字列として、符号なし64ビット整数の最大値18446744073709551615を出力するプログラムを作成します。

  • ソースコードに「1」、「2」、「4」、「6」、「8」の文字を含めることはできません

  • 言語に符号なし64ビット整数または同等の言語がない場合、出力は文字列形式などになりますが、上記の数値でなければなりません。

  • これはので、各言語で最短のコードが優先されます。


14
定義済みの値。pfft
マシュー

16進数で出力できますか?
user902383

1
@ user902383は正確な形式である必要があります。出力が通常の10進表記である限り、16進数として自由に解析できます。
colsw

10
ストーリーが大好きです。より多くの課題には、このようなバックストーリーが必要です
ランチャー

2
選択肢がたくさんある今、ギャンブルサイトは詐欺でしたか?
トミネーター

回答:


20

蜜蝋、3バイト

_M{

説明:

_   # Create a bee going horizontally across the line, reading the code
 M  # Decrement the bee's counter, which starts at 0.
    # This will set the counter to 2^64-1, because as bees don't have a concept of
    # negative numbers, all values that are negative are translated to 2^64-n,
    # and in this case, n = -1, as we are calculating 0 - 1.
  { # Print the value

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

この言語は、この課題に最適です。

BeeswaxのEsolangページからの抜粋は次のとおりです

誰もが知っているように、ミツバチには負の数の概念はありませんが、アドレスの最上位ビットを使用してそれを回避できることを発見しました。したがって、ミツバチの位置に対する相対座標は、座標の2の補数によって実現されます。このように、64ビットアドレス空間の半分は、各方向にラップアラウンドすることなくローカルアドレス指定に使用できます。

正の最大64ビット2の補数アドレスは9223372036854775807または64ビット16進数の0x7fffffffffffffffです。0からこの値までのすべての値は、同じ64ビット値に同じように変換されます。反対(負)方向のすべての値nは、2 ^ 64-nに変換されます。たとえば、n = -1は18446744073709551615によってアドレス指定されます。n= -9223372036854775808は9223372036854775808によってアドレス指定されます。

これは基本的に符号なしlongです。

編集:私はまだデニスが2バイトの解決策で私を凌gすることを期待しています。


フォームが値を返す場合は、印刷する必要はありません。他の回答をご覧ください。
マシューロック

41

C、26バイト

main(){printf("%lu",~0l);}

印刷しunsigned longた値を。

long64ビットのサイズが必要です。


良いですね。Perlでもほぼ同じですprint~0
ダダ

2
~0l動作するはずです。
クリストフ

11
@AnixPasBesoinそれは小文字の「L」です:)
クエンティン

2
あなたは仮定していsizeof(long) * CHAR_BIT == 64ます。ゴルフの合理的な仮定ですが、指摘する価値があります。
レイ

1
@Chrisそれはビット単位のnot演算子です。
ヴェン



22

Python3 REPL、12バイト

REPLの場合: ~-(~-3<<9*7)

REPLの外部:print~-(~-3<<9*7)<-> Python2!

もう1つ、17バイトです~-(~-3<<ord("?"))

説明

特別なことは何もありません。以下に分類します。

~-           | Subtract 1 from the next value.
  (          | 
   ~-3       | Subtract 1 from 3, resulting in 2
      <<     | Binary shift 2's digits to left,
        9*7  | by 9*7 (63).
           ) | The value inside the parentheses is now 2**64.

結果の式は大体(ただし完全ではありません) ~-(2<<63)-> (2**64)-1です。ここではオタマジャクシ演算子を 2回使用しています。それに関するゴルフのヒントはここにあります

そこにもあるsys.maxint使用することができPython2で、私はそれを見ていられないだろう。

repl.it <-テストリンク。


このコードが別の猫を食べた猫のように見えるのはなぜですか?
OldBunny2800

@ OldBunny2800その~-(~部分は最初の猫の目ですか?私は...よく二猫を見ることができない
Yytsi


13

dc、7バイト

スタックベースの言語では、関数の戻り値と同様に、スタックの一番上のセルに答えを残すことができます。明示的な印刷が必要な場合pは、コードの最後に追加します。

AZ5E^z-

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

これは、(2計算64:いくつかのトリックを使用して- 1)

  • 2Z整数10(A)にある桁数()として与えられます
  • 64として与えられます5E。デフォルトでは、dcは入力基数として10を使用します。それでも、16進表記の数値を受け入れることができますが、予想とは異なる方法で変換されます。例:(5E)default =(5E)(input radix = 10) =(5 * 10 1)+(14 (E) * 10 0)= 50 + 14 = 64

  • 1スタックの深さ(z)として与えられるのは、(2 64)のみが存在したため

代替ストーリー:

ただし、一部の数字キーがリモートコンソールに正しく入力されていないように見えるようになりました。深呼吸をして、各数値キーのテストを開始します。思っていたより悪いです!動作するものは1つではなく、文字と記号のみを使用して目的の整数を生成するタスクが残っています。

DCのソリューション:コンピューティング(16 16 - 1)、まだ7バイト!

Fz+d^z-          # push 15, push 1, add, duplicate, exponentiate, push 1, subtract

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


2
素晴らしい代替ストーリー
カスケードスタイル


10

05AB1E、4バイト

žJn<

説明:

žJ   # Push 4294967296
  n  # Squared
   < # Decreased by one

最後に!05AB1Eの組み込み関数を2のべき乗で使用するチャンスです!

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

別の4バイトの答え:

žxo<

説明:

  o  # 2 to the power of
žx   # 64
   < # Decreased by one

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

(誰かが疑問に思っている場合、この質問は他のすべての4バイトの回答よりも古いです)


に沿って短い解決策があるように感じますが64o<、私はまだそれを見つけていません。'@Ço<クリエイティブ64プッシュのようなもの... 1バイトで64をプッシュできた場合、3を取得することができます。
魔法のタコ

10

MATLAB /オクターブ、5バイト

@Sanchisesは優れたMATLABの回答を投稿しましたが、これはかなり異なるアプローチなので、とにかく投稿します。

tic/0

MATLABでは、ticプログラムが開かれてから経過したミリ秒数を返します。重要なのは、それが返す値はuint64型です。これによりuint64、MATLABのデフォルトタイプから数値をキャストする必要がなくなりますdouble

MATLABで0で除算された数値は無限と見なされ、非浮動小数点型の場合、MATLABはこれをその型の最大整数値として表します。


これはOctaveでも機能しますが、使用するインタープリターによっては、「ゼロ除算」警告が吐き出される場合もあります。ここでコードをオンラインで試すことができますが、MATLABには表示されない/ 0警告が表示されると言います。


本当に巧妙なアプローチ、素晴らしいもの。
COLSW

私は今この答えを見ているだけです。非常に賢い!(もちろん、tic==0起動時にthat などの非常に高速なコンピューターでこれを実行すると機能しません)
Sanchises


7

PHP、16バイト

これは、Venからの回答によく似ています:https : //codegolf.stackexchange.com/a/110751/38505

printf("%u",~0);

https://repl.it/Frcy/0

これが機能するには、64ビットアーキテクチャである必要があります。これは、〜0が-1であり、これは32ビットの11111111111111111111111111111111111と比較して、64ビットのバイナリで111111111111111111111111111111111111111111111111111111111111111111111111111111‌ 1111であり、数値はプラタフォームに依存しているためです-Ismael Miguel


1
笑。これも機能しbashます:printf %u $[~0]
マナトワーク

なるほど、素敵な@manatwork
ʰᵈˑ

これはアーキテクチャに依存しており、i386では機能しません。
PTS

1
@pts明らかに!i386は16/32ビットです。PHPはそれについて非常にうるさいです。これが機能するには、64ビットアーキテクチャである必要があります。これは、~0ある-1ある、1111111111111111111111111111111111111111111111111111111111111111と比較して、64ビットで、バイナリで1111111111111111111111111111111132ビットであり、数字は厚底に依存しています。
イスマエルミゲル

@ʰᵈˑどういたしまして。私は少し怠けたことを認めなければなりません。32個の1をコピーして貼り付けました。必要に応じて、回答の文法を少し修正できます。
イスマエルミゲル

6

MATLAB /オクターブ、22バイト

eye(['~rw}?='-9 ''])/0

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

eyeは、単位行列(1対角線上の行列、そうでない場合はゼロ)を作成するために使用されます。引数なしで、これは1x1単位行列、または言い換えればaを作成し1ます。オプションの引数を取ります。これは、作成された行列のデータ型(MATLAB用語では「クラス」)です。したがって、a 1のclass を要求し、uint64それをゼロで除算するとInf、MATLAB が得られます。MATLABはでクリップされintmax('uint64')ます。

ベクトルはと['~rw}?='-9 '']評価され'uint64'ます。空のcharをベクトルに連結すると、を使用するよりも1バイト短くなりchar('~rw}?='-9)ます。

この答えに向かう理由:ビルトインはintmax悲しいことに最大32ビット符号付き整数に評価されます。明らかな次のオプションはuint64()、禁止された文字を含むです。別の方法は、データ型として文字列を受け取る関数を使用することです。明白な候補であるintmaxcast、しかし、選択肢が含まれzerosoneseye

eye(['~rw}?='-9 ''])/0    % Winning version! 22 bytes.
intmax(['~rw}?='-9 ''])   % Obvious candidate. 23 bytes.
1/zeros(['~rw}?='-9 ''])  % 24 bytes
cast(Inf,['~rw}?='-9 '']) % 25 bytes. Also an obvious candidate, but actually very long.

メモ:MATLABは、ほぼすべての危険なギャンブルサイトにデフォルトでインストールされます。


6

JavaScript、39 38 33 32バイト

alert(0xafebff0+'737095'+0xc99f)

編集:@Arnauldのおかげで5バイト保存されました。


2
これはコンソールで実行できるため、アラートを削除します。
アレクシスタイラー

6

Java 8、30バイト

()->Long.toUnsignedString(~0L)

オンラインでテストする


Javaの「定型」とsystem.out.print一部欠落
ヴィクトルMellgren

2
@ViktorMellgrenこれはラムダ式を宣言しますが、これはまったく問題ありません。
Sanchises

これにはJava 8が必要です
mbomb007

20
はい、Java 8以降、定型文はありません!コードゴルファーを恐れる!Javaは今や真の競争相手です。これはあなたがすべてとても怖がっていたときです、あなたのコードゴルフ言語はすべて無料です!まだ30バイト待ってください... 非表示
dwana

5
確かに「より短い解決策」は不正な文字を使用します1846
ニール

5

BF、108バイト

-[----->+<]>--.+++++++.----..++.+.---..----.+++++++.----.++++.-------.+++++++++.----..----.+++++.-----.++++.

各コマンドが3ビットと見なされる場合、これは潜在的に41バイトです。


3
各コマンドは1バイトです。3ビットではありません。
mbomb007

私は108バイトとしてそれを置くなぜそうまあ、それは...だ
Timtech

ええ、しかしあなたは「これは潜在的に41バイトです」と言ったが、そうではない。
mbomb007

インタプリタは、8つのコマンドの一つとして、3ビットのグループを解釈するために作ることができる+-<>[].,
Timtech

それはすでに存在します。それはesolangs.org/wiki/Binaryfuck
mbomb007

5

網膜28 27バイト

Kritixi Lithosのおかげで1バイト節約


bieegheeahdhajffbgbf
T`l`d

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

説明


bieegheeahdhajffbgbf

存在しない/空の入力をこの文字列で置き換えます。この特定の文字列は、このプログラムの「逆」によって生成されました。これは、コードaを介してjのよう0介して9、それぞれ、。

T`l`d

これはT転記段階です。音訳のために使用される文字セットです。小文字のアルファベットを表し、すべて数字です。したがって、それはにマップし直します。ldldabcdefghij0123456789


tio.run/nexus/retina#@8/l5Onq6u7h6uro4eLh6OXm5uTu5MYVkuCTkPL/…は1バイト短くなります(私はのd代わりに使用EO
Kritixi Lithos

@KritixiLithosそうそう。私はまだ完全に目を覚ましていないよ:P
ビジネスキャット

5

C ++、46バイト。

int m(){std::cout<<unsigned long long(5+3-9);}

初めてコードゴルフをすることはできましたが、私はかなり満足しています。どんな批評/提案も喜んで受けます:)


5

脳高射砲64、62、58、54バイト

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

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

[オンラインで試してみてください!]

@Rileyのおかげで4バイト節約されました!

説明:

#Push a 64
(((((()()()()){}){}){}){})

#While true
{

  #Pop the top of the stack. We'll store this value for later, but first
  ({}

  #Before pushing the value
  <

    #Push (N + 1) * 2 - 1
    # (where N is the number underneath, originally 0)
    (({}()){}[()])

  >

  #And push the TOS minus one back on
  [()])

#endwhile
}

#Pop the zero left over
{}

#And decrement the number underneath
({}[()])

レコードについては、32をプッシュして4倍にしようとしましたが、同じバイトカウントです。


次のいずれか使用して4つのバイトを保存することができます()1をプッシュする64から複数可:((((((())()()()){}){}){}){})
ライリー

@Riley Aha、もちろん!おかげで
DJMcMayhem



ええと、N*2+1代わりにやることはできません(N+1)*2-1か?
ジョーキング

4

C#6、31バイト

()=>System.Console.Write(~0UL);

Javaとほぼ同じです。

C#5、56バイト

class P{static void Main(){System.Console.Write(~0UL);}}

C#6の答えは匿名アクションのみで、C#5にも存在します。
TheLethalCoder17年

あなたがコンパイルできるようにも課題は、出力のみに番号をお願いしますFunc<ulong>:として()=>~0UL;
TheLethalCoder

また、入力を使用できないFunc<int, ulong>ため、a にコンパイルして1バイトを保存できるとは言っていません_=>~0UL;。これはまだ有効だと思います。
TheLethalCoder

4

Forth(gforth)、11 9 7バイト

true U.

オンラインで試す

trueはと同じ-1です。U.数値を符号なし整数として出力します。

これは、おそらく64ビットアーキテクチャを持っているために、TIOで動作しますか?よく分かりません。-1 U.たとえば、repl.itで実行すると、2 ** 32-1になります。repl.itが倍長整数をサポートしている場合、それらを出力するUD.代わりに使用します。


おそらく、これを減らすことができます-3 3 / U.
ツェッペリン

または、さらに良い:true U. (もうまくリズムがある)
ツェッペリン

ああ、私は約忘れてtrue、私はとても使用に慣れているため、01。ありがとう。
mbomb007

4

Python3 REPL、11バイト

~0^~0>>~077

使い方

  • 〜0は-1(2の補数、「1」の無限シーケンス)
  • 077は8進数で63なので、〜077は-64です
  • 負のパラメータで右にシフトすると左にシフトします
  • すべてをまとめると、-1 xor(-1 << 64)は探している数字です

4

PowerShell29 14バイト

0xC000PB/3-3/3

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

本質的にこれを半分にゴルフしてくれた@ n0rdに感謝します。

これは、PB基本的に「前の数に乗算する1125899906842624」(つまり、ペビバイトのバイト数)として機能する組み込みの単項演算子を活用します。それはヘックス0xC000と結びついているか49152、そう49152 pebibytesです。私たちは、であること割り3、得18446744073709551616、そして引く3/3最終的な値を取得します。


"0x$(7-3)000PB-9/9"|iex
n0rd

2
0xC000PB/3-3/3
n0rd

@ n0rdああ、それはとても賢く、PBそのように使用しています。ありがとう!
AdmBorkBork

@ n0rdはとても印象的で、PPCGへようこそ!
colsw


3

x64アセンブリ、7バイト

16進(組み立て済み):4831C048FFC8C3

分解、コメント:
XOR RAX,RAX ;Zero the value of 64 bit register RAX DEC RAX ;Decrement the value of RAX RET ;Return this value

RAXは64ビットのレジスタであり、整数引数(Cなど)を返すために最もよく使用されます。1をデクリメントすると、その値は0から... 2 ^ 64-1にロールオーバーします。これはまさに必要です。
ただし、アセンブルされたバイナリには1と4と8が含まれますが、アセンブリは含まれませんが、アセンブルされたファイルはアセンブリでカウントされるので、カウントされますか?わあ、私の頭。
また、この場合の出力は戻り値です。


3

Brain-Flak223 193バイト

-A
DJMcMayhemのおかげで-30の+1が含まれます

((((((((((((((((((((((((()()()){}){}()){}){}())[()()()()])[][]())[[]()()])[]))()()()())[[]()()])[][()])[()()()()])()()()())[(()()()){}()])()()()()))()()())[()])[()()]))()()()())[(()()()){}()])

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

これは単にASCII値をプッシュし、文字として出力します。

参考までに、整数メタゴルファーを使用して実際の数値を生成するには338バイトかかります。

((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((()()()){}()){}){}()){}()){({}[()])}{}()){}()){}())){}{})){}{})()){}{})){}{})){}{})()){}{})){}{})){}{}){}){}())){}{}){}())()){}{})){}{}){}){}){}())()){}{})()){}{})){}{}){}())){}{})()){}{})){}{})){}{})){}{})()){}{})()){}{})){}{}){}())){}{}){}){}())()){}{})()){}{})){}{})

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



また、私はあなたのために1つのバイトを追加することができると思い-A標準呼び出しが既に含まれているため-fので、それは何をする唯一のオフだ、-fA代わりに
DJMcMayhem

@DJMcMayhem引数に+1を使用し始めたのはいつですか?[]機会があれば、それを見るとは思いませんでした。ありがとう。
ライリー

3

MATL、8バイト

l_5Z%EZD

これはおそらく改善される可能性がありますが、私はまだMATLの文字列と型に精通していません。

matl.suever.netでお試しください

説明:

l       % push 1
_       % unary minus
5       % push 5, corresponds to type 'uint64'
Z%      % convert 1 to this type
E       % double
ZD      % display as a string

...それはuint64型タイプを強制的にYY5Z%ZDする必要があると思いますが、代わりに1 5Z%を使用しただけで動作しますなぜ私は知らない
B. Mehtaの

8は使用できません。
xnor17年

@xnorおっと、修正。
B. Mehta

matl.suever.netまたはmatl.tryitonline.netを使用してデモリンクを追加できますか?
Suever

1
@LuisMendoああ、もちろん-私castは使われたと思っていましたが、使われれば意味がありますtypecast。それを片付けてくれてありがとう。
Sanchises

3

Javascript 55バイト

alert(""+(590300>>5)+(59530-3>>3)+7370955+(3*59*73>>3))

コードは、ビットごとの演算を使用して文字列18446744073709551615を生成し、アラートを出します

590300 >> 5 18446
59530-3 >> 3 7440
7370955
3 * 59 * 73 >> 3 1615


表示2588673709551615私のために...
n0rd

alert(0xafebff0+'7370955'+(3*59*73>>3))正常に動作します
n0rd

現在、他の誰かをコピーするのではなく、使用した方法を維持するために、そのままにしておきます。
fəˈnɛtɪk


2

TI-Basic、10バイト

9+7
Ans^Ans-0!

TI-BASICはこの数値を正確に計算、保存、または表示できません。浮動小数点数の精度は14桁(約44ビット)しかありません。
リルトシアスト
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.