ソースコードを解読する[クラッキング試行のための強盗スレッド]


44

これは、メインのUnscramble the Source Codeチャレンジのコンパニオンスレッドです。 警官の回答の1つを解読できたと思われる場合は、このスレッドへの回答としてソリューションを投稿してください。

念のため、各サブミッションをクラックする試みが1回あります。クラッキングの試みは、ソースコードのスクランブルされていないバージョンになります。推測が説明(同じ文字、出力、そしてもちろん言語)と一致し、あなたが最初の正しい推測である場合、あなたはポイントを獲得します。プログラムがオリジナルと完全に一致する必要はなく、単に同じ文字を使用し、同じ機能を持っていることに注意することが重要です。これは、複数の正解がある可能性があることを意味します。

最も多くのポイント(成功したクラック)を持つ強盗が勝ちます。

リーダーボード

解法が多すぎる

20ソルブ

15解く

10ソルブ

7解く

5解く

4解く

3解く

2解く

1解く


1
Perl 5、サイズ27、Morotによる -print'pin '=〜tr(a-za)(za-z)r

@ WumpusQ.Wumbley私たちはすべてそこにいた...;)
マーティンエンダー

3
私はそれをなだめようとする私の時間を無駄にすることを拒否します。

2人の質問遺体を考えると、スクランブル/スクランブルされていない答えが逆転していることが表示されます
ダックMooing

ルビー、MegaTomによる23 = p%++。methods [80] [1 ..- 1]
histocrat 14

回答:


32

CJam、サイズ20、MartinBüttner著

Hi "petStorm!", mame

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

使い方

Hi                      "           int(17)                     ";
   "petStorm!",         "                    len('petStorm!')   ";
                ma      "     atan2(       ,                 )  ";
                  me    " exp(                                ) ";
                        " exp(atan2(int(17), len('petStorm!'))) ";

コードのクラッキング

目的の出力2.956177636986737は、DoubleまたはDoubleの後にLongが続きます。

の文字のみを使用すると、"Stop, Hammer time!"整数以外のDoubleを返す4つの組み込み演算子があります。

  • mSasin
  • maatan2
  • meexp
  • mttan

すべてにが含まれているmため、最大3つまで使用できます。一つだけありますSと、1 a

これらの演算子はすべて入力が必要であり、ma2つの入力を消費する唯一の演算子です。ロングをプッシュする方法は3つしかありません。

  • "...",、文字列の長さをプッシュします(厳密に18未満)。
  • H、17をプッシュします。
  • ...!、の論理否定をプッシュし...ます。

のように偽の何かをプッシュする方法がない...ため、最後のオプションは常に0をプッシュします。

出力が始まるかで終わっていません170。Doubleの通常の桁数は15桁の10進数であるため、出力は単純なDoubleである可能性があります。

これを前提として、コードは次のカテゴリのいずれかに該当する必要があります。

  • <Long> <mS|me|mt>{1,3}
  • <Long> <mS|me|mt>{x} <Long> <mS|me|mt>{y} ma <mS|me|mt>{z}
  • 上記のいずれかで、一部がLong(i)または丸め(mo)にキャストされ、Doubleに適用されます。

2番目のケースでx + y + zは、は1または2であり、Longsの1つは0または17です。

残りは基本的に総当たりでした。数回試した後、

18 , {H \ ma me 2.956177636986737 =} =

返された9、つまり

H 9 ma me

目的の出力を生成します。

残っているのは、文字列から9文字を除くすべてを削除することです。スペースは空欄でiあり、Longsでは空欄であるため"petStorm!"、可能な選択肢の1つです。


1
それは非常識です-どのように数字が何であるかを理解しましたか?
Sp3000 14年

1
その数の対数(およびその他)を検索しましたが、結果が得られませんでした。今、私はあまりにも高い精度を使用していたことがわかりました。
jimmy23013 14年

2
@ Sp3000:回答を編集しました。
デニス14年

1
非常に素晴らしい!推測した文字列からさらに2文字を取り出す必要がありました。私のオリジナルでは、実際にはまだ文字列の中にスペースがありましたがmr、長さを取る前に。ある時点でそれを理解していなかったというわけではありません。;)
マーティン・エンダー14年

25

Python 3、サイズ12、xnorによる

()and bciprt

何もしません(式は空のタプルを生成しますが、出力されません)。これは、短絡評価のために機能します。


1
Python 3 IDLEでは、これはを出力します()
Hosch250

@ hosch250はプログラム(Pythonファイル)内にあるため、がないため、何も出力されませんprint
matsjoyce 14年

そうですか。私はコマンドラインから実行していました。
Hosch250 14年

47
.... "thing" ....
TheDoctor 14年

4
@Imray短絡のため-Pythonはタプルをロードし、タプルの値が空であるためtrueであるかどうかをチェックします。変数をロードするコードbciprtは実行されないため、NameErrorを生成することはありません。
Mateon1

20

Python、サイズ74、xnor

any(print(set is
set)for i in oct(chr is
map))and aeeeeeggiilnnpprrrrrstvw

まあそれは楽しかったです。FryAmTheEggman、hosch250、およびisaacgに感謝します。


1
良くやった!私の解決策は非常に似ていました:list(\nprint(range is range)for aacdeeeeehmppprrrrssvwy in\noct(int is int))
xnor 14年

@xnor LOLその変数名。私がそれを考えたことがなかったのは悪いことですか?:P
FryAmTheEggman 14年

2
@FryAmTheEggman私は誰もが私の最初の警官からのトリックを使用することを期待していたと思います。
xnor 14年

@FryAmTheEggman心配しないで、あなただけではありません:P
Sp3000 14年


13

GolfScript、サイズ13、ピーターテイラー

,22,{.4&?+.}/

ここでテストしてください。

もう1つは、Sp3000から大きな助けを借りてクラックしたことです。ありがとう!

だからここに我々はそこに着いた方法です。Sp3000は、出力に一連の連続した番号の実行に気付きました。

1,2,3,4,[2608852181],4582,4583,4584,4585,4586,[253225388392299],
142924,142925,142926,142927,142928,[302928],497409,497409

これに基づいて、これは増加するシーケンスであり、残りの数の可能な分割を1つしか許可しないと仮定しました。

1,2,3,4,260,885,2181,4582,4583,4584,4585,4586,25322,53883,92299,
142924,142925,142926,142927,142928,302928,497409,497409

これは23個の数字で、ブロックを22回繰り返し、ブロックを.(重複する最上位スタック要素)で終了させるための強力な指標であり、前の結果がスタックに残され、最後の反復が表示されるようになりましたスタックを2回。それがあります22,{____.}/

(私たちは持っているので、すてきである今のギャップを見て、それらは第四大国であることが判明4して?)。より正確には、それらは現在の数のインデックスの4乗です。そこで、次に、どのインデックスがギャップを作成したかを調べました。

4,5,6,7, 12,13,14,15, 20,21,..?

バイナリではそれらは

00100
00101
00110
00111
01100
01101
01110
01111
10100
10101

それらはすべて3番目のビットセットを持っています。つまり、インデックスはおそらくビット単位のand'edで4あるということです(これは、別のもの4を作成し.、a を使用できるので、これもまた素晴らしいことです&)。これは特にうまく機能します。なぜなら、この操作の結果はまたはのいずれ04であり、それを指数として使用すると、1必要なのはまさに4乗のいずれかになるからです。それをまとめましょう:

22,{.4&?+.}/

ブロックの機能は次のとおりです。

.      # Duplicate current index
 4     # Push a 4
  &    # Bitwise and
   ?   # Raise index to resulting power
    +  # Add to previous result
     . # Duplicate for use in next iteration

残りの2つの問題,があります。まだ使用していない迷いがあり、最初の反復は特殊なケースです。つまり、遭遇したときに追加できる値が前の反復からないという点です+。私たちは、GolfScriptがスタックの空の文字列で始まることをさりげなく言及したuser23013による無関係なコメントのおかげであることがわかりました(STDINに何もない場合)。そのため、他の,文字列を先頭で使用して0、その文字列をa に変換できます。これは、反復の開始点として必要なものでした。


スポットオン。これは、今は見つけられないOEISのシーケンスに触発されました。
ピーターテイラー14年

3
そして、これが、強盗用に別のスレッドを持つことが得策である理由です。良くやった!
デニス14年


11

ルビー、サイズ17、ドアノブ

p 2,%r~n~i=~'*tN'

それはとても楽しかったです。これを手伝ってくれたSp3000に感謝します!そして、%r?...?リテラルには区切り文字を使用できることを学びました。:)


10
で誤解を招くため、Doorknobに賛成します。printこれはp、印刷、%r正規表現、i大文字と小文字を区別しない正規表現照合のために分割するためだけです。
Sp3000 14年

11

PHP、サイズ49、bwoebi

print@substr(new exception,+~$$a+=++$$m+$$i+2+n);

それは絶対に 精神的だった

になった

print@substr(new exception,);

かなり迅速に、その時点で何かを必要としていた -6、コンマの後に出て行く$++$++$++$+=$~main$2

主なキャッチは、$a$mあり$i、すべてなNULLので、変数変数で間接的に使用するで意味し、それらはすべて同じ変数を指します。しかし、PHPは変数変数の解決について奇妙なことをしているようです。通常の変数を使用すると、次のようなことができます

echo $a+$a=2;

どの印刷4(に2割り当てられます$a追加されます)。しかし、変数変数で同じことをすると:

echo $$a+$$a=2;

私は得る 2。なぜなら、最初$$aは割り当ての前に評価されるからです。

最終的に、+=その追加割り当ての前に評価する必要があったRHSにいくつかの増分を加えることで、なんらかの順序を強制することができました。そうする5ことで、ビット補完ができるようになりました。それでも...いくつかの不思議なことが起こっていますが、なぜ私が試したものの半分が機能し、機能しなかったのか分かりません。


参考のため、私のオリジナル:print@substr(new exception,~$$mn+=2+$$a+++$$i++);
bwoebi 14年

ところで すべてのドル記号と、すべての文字mainが文字列に含まれているという事実が、あなたを誤解させることを願っています。また、抽出のためのかなり珍しい方法{main}、私は思う;-)
bwoebi 14年

@bwoebi main本当にスポッティングした後、私を誤解していないexceptionnewsubstr。それらは単なる変数名だと思いました。変数変数を使用するのに少し時間がかかりました。ほとんどの時間を費やし5て、別の括弧を使用せずに補完できる実際の操作の順序を見つけました。
マーティンエンダー14年

さて、次回は、文字よりもドルが多い場合、通常は変数です。(この場合、左から右への評価を強制するためにvarvarsも乱用しました。)substrの新しい例外を見つけるのにどれくらいの時間がかかりましたか?ちなみに、私はZendエンジンのより深い知識を持っているので、物事がどの順序で評価されるのかを完全に自分自身に説明することができます。喜んで説明します。
bwoebi 14年

@bwoebi 明日チャットに来て、それについて話すことができますが、今日はこれに十分な時間を費やしました。;)あなたの最初の質問については、exceptionのために浮遊文字を残している、明らかだったsubstrnew転がっ。文字通り、作業を開始したときに最初に目にしたものでした。
マーティンエンダー14年

9

ルビー、サイズ38、ドアノブ

[$><<(!$pece60).to_s[rand($win)].succ]

これは元のソースのどこにも近いと確信しています。使用しても決定論的ですrandです。

これがこの仕組みです。$><<単なる出力です。$pece60$winは未定義のグローバル変数であるため、これらは単なるものですnil(また、余分な文字を取り除くことができました)。!$pece60を作成し、文字列trueto_s与えます"true"

長い間、私はを取得する2か、そこ-2にアクセスしようとしuましたが、を取得しt、それを呼び出して.succ(エッサー)を作成できることに気付きましたu

rand とともに nilパラメータ間隔[0,1)でランダム浮動小数点数を返します。floatを使用して文字列にインデックスを付けると、整数に切り捨てられるため、常に最初の文字が返されます。

最後に、私は予備のペアを持っていた[]ので、ありがたいことにすべてがRubyの表現であるため、すべてをその中にラップしました。

チャットでアイデアを投げかけてくれたSp3000に感謝します。


8
Rubyは怖い言語です。
feersum

8

C、51 by es1024

c=0xf.cp9,hhtaglfor;main() {;; printf("%d",(++c));}

Cを20年間プログラミングした後、16進浮動小数点定数について学びました。


8

ルビー、45(歴史家)

%q[zyfnhvjkwudebgmaclprs x].to_i(36)/51074892

やったー!これはコードゴルフの問題に対する最初のクラックであり、元の投稿にコメントするのに十分な担当者がいません。実際に本番コードで頻繁に使用されることがわかったため、使用されたトリックをすぐに認識しました。構造の大部分を把握するのに約5分かかり、完全な回答を得るのに数時間かかりました。

説明:

  • %q[]文字列を作成するための代替方法です。括弧と中括弧も使用できます。
  • String#to_i Rubyでは、2〜36の任意のベースの数字を受け入れます。数字の一部ではない文字列の最初の文字は無視されるため、余分な文字はスペースの後に「捨てられる」ことができます。

そして、ここで私がそれをクラックするために使用したコードです:

require 'set'

# return true if the string is made up of unique characters
def uniq(s)
  a = s.each_char.to_a
  return a == a.uniq
end

def uniq_while_same(a,b)
  s = Set.new
  a.each_char.zip(b.each_char).each do |ai, bi|
    return true if ai != bi
    return false if s.include? ai
    s << ai
  end
  return true
end

def ungolf(answer)
  # For each base that even makes sense
  [            36, 35, 34,     32, 31, 30,
   29, 28, 27, 26, 25, 24, 23,     21, 20,
   19, 18, 17, 16, 15, 14, 13, 12,     10].each do |base|
    # Ignore bases where it is not possible to create a unique-string number greater than answer
    next if answer > base ** base
    # Pick digits for the denominator that are not duplicates of the digits in base
    denominator_digits = ('1234567890'.each_char.to_a - base.to_s.each_char.to_a)
    # For each permutation of those digits for the denominator
    (1..10).each do |denominator_length|
      denominator_digits.permutation(denominator_length) do |denominator_s|
        # Maybe the denominator is in octal
        denominator_base = 10
        if denominator_s[0] == '0'
          next if denominator_s.include?('8') || denominator_s.include?('9')
          denominator_base = 8
        end
        denominator_s = denominator_s.join
        denominator = denominator_s.to_i denominator_base
        print "#{"\b"*64}(%q[#{(answer * denominator).to_s(base).ljust(36)}].to_i #{base})/#{denominator_s.ljust(10)}" if rand < 0.01
        # Ignore denominators that are definitely impossible to have answers for
        next unless uniq_while_same "qtoi#{base}#{denominator_s}#{(answer * denominator).to_s(base)}",
                                    "qtoi#{base}#{denominator_s}#{((answer + 1) * denominator).to_s(base)}"

        # For each numerator that gives answer when divided by the denominator
        (answer * denominator...(answer + 1) * denominator).each do |numerator|
          print "#{"\b"*64}%q[#{numerator.to_s(base).ljust(36)}].to_i(#{base})/#{denominator_s.ljust(10)}" if rand < 0.01
          # Remove any that are still not unique
          s = "#{numerator.to_s(base)}#{base}#{denominator_s}qtoi"
          next unless uniq s
          # Done. Compute which characters need to be thrown away to fill the remaining space
          remains = ('0123456789abcdefghijklmnopqrstuvwxyz'.each_char.to_a - s.each_char.to_a).join
          print "#{"\b"*64}#{" "*64}#{"\b"*64}"
          return "%q[#{numerator.to_s(base)} #{remains}].to_i(#{base})/#{denominator_s}"
        end
      end
    end
  end
  print "#{"\b"*64}"
  puts "\nnone"
  return nil
end


print ungolf 9410663329978946297999932

なぞの中にNP問題を埋め込む方法。私は徹底的にオタクになりました。よくやった!


元の回答にコメントを追加しました。
FireFly

これは素晴らしい(および意図した答えに近い)ですが、出力がないため技術的には無効です。
histocrat

* facepalmさて、私はまだ楽しかったです。
charredUtensil

2
@charredUtensilスクリプトをもう少し実行してもかまわないのであれば、印刷はp式の前に移動しているだけだと思います。おそらく、残りの文字を使用して、これまでのように定数を形成できます。
FireFly

実際に再度実行する必要はありません。文字列の最後の数文字は、結果を変更せずに再配置できます- p %q[zyfnhvjkwudebgmaclrsx].to_i(36)/51074892実際のクラッキング試行を
中断したことはわかって



7

CJam、サイズ13、ユーザー23013

G,Cf#If/sE*K%

ここでテストしてください。

次のように手で解決しました:

まず、非CJammerの背景:

  • CEGIK事前に初期化されているすべての変数が、ある1214161820、それぞれ。
  • s 一番上のスタック要素を文字列に変換します。
  • 文字列は技術的には単なる文字の配列です。
  • fとても魔法です。この答えの目的のために、簡略化されたバージョンは、array a、他の値b、およびoperatorのg場合、シーケンスが(の各要素がスロットに入る場所)にabfgマップg(_,b)されることです。aa_
  • / (特に)配列の分割と分割です。
  • * (とりわけ)乗算と配列の繰り返しです。
  • %はモジュロでありad%、配列aと整数の形式のdすべてのdth要素をとる奇妙な操作ですa(Pythonのステップ幅によるスライスのようにd)。
  • # (特に)べき乗です。
  • ,数値を範囲(0n-1)に変換し、配列の長さを返します。

さて、それは邪魔にならない...

,配列を取得する他の唯一の方法は、より大きな数値を作成して文字配列に変換することであるため、数値を範囲に変換する必要があることはかなり明白でしたsが、その後は何もできませんでしたそれに関するさらなる算術。そして、fsで何かをするための配列が必要です。

最初にfsが#and とともに使用されると仮定しましたが%、それは正しい桁数を最終的に得るために約90の数値が必要だったことを意味します。また、これは何をすべきかを説明しませんでした、そしてs答えは本当にゴルフっぽいので、私はuser23013がsどこかに人々を捨てる効果的なノーオペレーションとして追加したのではないかと疑っていました。

だから、私は、おそらく彼は数字を小さく維持していないかもしれません%が、代わりに巨大な数字の配列を構築し、文字列表現を連結しますsが、それから奇数のスライスを選択し%ます。そこで、次のフレームワークで少し遊んでみました。

__*,_f#_f/s_%

_f/少なくとも最初の12要素についてはゼロになるため、最初に行うことはできません。)

どこに_変数の順列があります。私は退屈する前にそれらのすべてを試しませんでした、そして、これの主な問題は数字の結果のシーケンスがいつものように長すぎるということでした。

ある時点で*、結果の文字列を繰り返すためにを使用した場合、そのような大きな範囲(つまり2つの数字の積)は必要ないことがわかりました。パラメータの不整合による*%、これは結果に何の繰り返しを得ないだろう。

_,_f#_f/s_*_%

これは、私が探していたものに非常に近い長さの結果をもたらしました。240個すべてを実際に試してみましたが、かなり早く(3番目または4番目の試行)、つまずいた

E,Cf#If/sG*K%

もたらす

03081942753650251594592190492275006661328850322159030034930530649722385533653290754678977

そして、最初の6桁の一致は偶然ではないと考えました。そこで問題は、実際の計算を混乱させることなく再配置する方法でした。

  • 変更するKことはできませんでした。異なる数字をすべて選択してしまうからです。
  • 変更できなかった、CまたはI2つのマップ操作の結果の数値が変更されたためです。
  • 変更Gすると、繰り返し回数が変更されるだけで、結果の長さが変更されるだけです。(どっちがいい。)
  • 私が変更した場合E、それは、配列の範囲を変更するだろうが、範囲はまだで開始すると[0 1 2 3 ...]、それは計算に影響を与えないように、。これ、によって返される基本文字列の長さに影響しますs。これはK%、追加の繰り返しで異なる数字を選択することも意味します。

私は試してみましたので、交換するEG出来上がり。

030819828850379075460427536222159187897761502517030034671154875945928930530907551421904962649729

要約すると、コードの機能は次のとおりです。

G,            "Push [0 1 2 3 ... 13 14 15].";
  Cf#         "Raise each element to the 12th power.";
     If/      "Divide each element by 18.";
        s     "Concatenate all numbers into a string.";
         E*   "Repeat 14 times.";
           K% "Pick every 20th digit.";


6

Pyth、サイズ11、isaacgによる

:\\w$ ",d,N

バグを悪用するという意味です。これは次のようにコンパイルされます。

Pprint("\n",at_slice("\",input(), ",d,N))

関連するバグは、の代わりにに\\コンパイルされる"\"ことで"\\"、これによりPythを文字列にコンパイルできます。


なければならないPprintことがprint、少なくとも、またはpprint
FireFly 14年

@FireFlyこれがデバッグ出力の説明です。たぶん、Pythインタープリターは独自のPprintを定義していますか?
マーティンエンダー14年

ああ、大丈夫、気にしないで。
FireFly 14年

6

Python、サイズ69、Sp3000

print(sum(list(map(ord,str((dict(((str(dict()),list()),)),str()))))))

大変でした...


1
いいね!参考までに、オリジナルはでしたがprint(sum(map(ord,str((dict(list(((str(),str(dict())),))),list())))))、明らかにキーワードのさまざまな組み合わせが機能します。
Sp3000 14年

2
それは、LISPレベルのかっこです!
xnor 14年

6

Python 3、37バイト、Sp3000

print(sum(b"a".zfill(len(str(...)))))

恥ずかしいことに、文字列をバイトに変換するのが一番難しい部分でした。私はそれで寝なければならなかった、そして夜に「あ、それは文字通りのバイトだ!」


AHAHAうまく行って、私は省略記号は、人をつまずかかもしれないと思ったが、私はないと思います
SP3000

省略記号とzfillを見ましたが、バイトオブジェクトについては知りませんでした。これらは、整数のゴルフアレイに役立つ可能性があります!
feersum 14年

よくやった!印刷物と.zfillだけを見て、合計がその一部である可能性があることは知っていましたが、解決できませんでした。+1します。
Hosch250 14年

6

PHP、53、PleaseStandによる

やっとひびが入った:

for($d=57,$o=35;$o+$d<999;)$o+=printf("$d%o",$d+=$o);

シーケンスが交互の10進数と8進数で構成されていることに気付いたとき、解決策はすぐに見つかりました。

Dec: 57...92...132...177...228...285...348...417...492....573....661....756....858....
     571349220413226117734422843528553434864141775449210755731225661136475615328581707
Oct: ..134..204...261...344...435...534...641...754...1075...1225...1364...1532...1707
==Dec:  92  132   177   228   285   348   417   492    573    661    756    858    967

また、各数値セット間の間隔は、返される値printf()(つまり、書き込まれた文字数)と等しい速度で増加しました。


3
うわー、素敵な探偵の仕事!
Sp3000 14年

6

Python 2、サイズ132、Vi

exec('from string import printable as e\nprint "cqance"\x2Ereplace("q",e[len("fgiillmmooprrsstt")])or ",,,\016:::S[]____tuuvyy" ""')

すべてのバックスラッシュと引用符をありがとう:)


編集:更新された96文字バージョン:

exec "try:exec'from __future__ import braces\\nt(12)'\nexcept SyntaxError as q:print(q[0][6:])"

これは完全にhttps://codegolf.stackexchange.com/a/41451/32353の Alexのソリューションから取得されます


いいね 意図した解決策が何であるか疑問に思います...
FireFly 14年

これは意図した解決策ではありません。元のソリューションには、fgiillmmooprrssttまたはのような「使い捨て」のものはありません,,,\016:::S[]____tuuvyy
Vi。

exec?私のコードはもっと短かったはずです... 忘れていたため、compile+でエミュレートしてevalいましたexec...
Vi。

短いバージョンを実装しました。元のトリックを理解してみてください。
Vi。

5

CJam、サイズ15、Ypnypn作成

98,{7%}%{6+}%:+

指定された文字から、次の3つの形式のいずれかである必要があると推測しました。

__,{_%}%{_+}%:+
_,{_%}%{__+}%:+
__,{_+}%{_%}%:+

2桁の範囲を作成し、加算またはモジュロ演算を(いずれかの順序で)範囲にマッピングしてから、合計します。だから私は最初のものから始めて、体系的6789にギャップの順列を試しました。


くそー、私もそれを解決した:/
オプティマイザー14年

5

PHP、サイズ52、PleaseStandによる

for(mt_srand($i=46);$i--;)echo chr(mt_rand()%95+32);

これは最終的に非常に簡単であることが判明しました。出力は非常にランダムに見える、との文字mt_ranおよびdすべてが二回登場し...


5

Python 2、サイズ61、FryAmTheEggmanによる

print(dir('~s]l.c:st_''-p_tp.l]-~.:o:Te[_u[.i_')[10][2:][:3])

これがオリジナルと一致する場合、私は非常に驚くでしょう。


ありませんが、とにかくおめでとうございます!私のコードはでした:print''.__doc__[::2][::3].split()[1].split('.')[0][:-~-~True]
FryAmTheEggman

後知恵で、私は引用符を含めるべきではありませんでした...;)
FryAmTheEggman 14年

@FryAmTheEggmanああすごい-すてきなプログラム!私はあなたが少なくともdir()「get」を見つけるのに慣れていたと確信しました。そしてはい、引用なしでそれは非常に困難だったでしょう。
GRC

5

Python 3、Sp3000、サイズ44

print(~(~(()<((),))<<(()<((),))))<<((()<()))

Python 3はNone、答えを印刷した後にエラー(左シフト)を引き起こすことができたので、ここで助けてくれました。


うーん...私はカッコでかなり無駄だったようです。print(~(~(()<())<<((()<((),))<<(()<((),)))))元々持っていた。
Sp3000 14年

5

PHP、サイズ52、kenorb作成

_:@print_r(chr(@++$i+pow(3<<5,1)));if($i<2*4)goto _;

(神、残りの_r接尾辞をどうするかを考えるのにどれくらい時間がかかったか。気づくまではそうではなかったprintprint_r...)


そして、どうやってそれを理解したのかわかりません:)オリジナル:_:print_r(chr(3*pow(2,5)+@++$i));if(@$i<4<<1)goto _;
ケノーブ14年

3
@kenorb a)何かを印刷する必要があるためecho、不可能です。print残った; b)ループが必要ですが、forループの場合はセミコロンが足りず、コロンがあります...おそらくgotoと組み合わせたラベルがあります。c)goto-loopを中止するにはifが必要です。現在X:print($Y);if($Y)goto X;(XおよびYはプレースホルダー); d)があります++が、ありません=ので、おそらく++$Z1から8までです。e)整数から文字を取得するには、chr()(通常)必要です-そこにありました。f)今、chrとifの96と8の数字を見つける必要がありました。次に、プレースホルダーとボリュームを入力します。
bwoebi 14年


5

C、es1024、長さ70

e='C',f;main(g){Chorkil:f=printf("40%.d",e+e-  -g);}hAx;*hotpoCkats();

難しい部分は、すべての不要なキャラクターを追跡することでした...真剣に...私はそれらを約10回やり直さなければなりませんでした。私を心配していたのは唯一のものでした.が、どういうわけか私はそれをprintfフォーマット文字列の真ん中に貼り付けて、見えなくなりました!



5

ハスケル、サイズ34、PetrPudlák作

main=print(0xb2f3d5^0x7f1f27::Int)

このプログラムは32ビットマシンで実行する必要があることに注意してください。これが正しいプログラムであり、64ビットマシンを使用していることを確認したい場合は、代わりにこれを使用できます。

import Data.Int
main=print(0xb2f3d5^0x7f1f27::Int32)

プログラムの「フレーム」を推測するのはかなり簡単でしたmain=print(0x<hex digits>^0x<hex digits>::Int)。すべての魔法は、数字を分割して順序付ける正しい方法を探すことでした。ここではあまり力を入れず、ブルートフォース検索を行いました...一部の数字が重複しており、おそらく基数と指数にほぼ同数の数字があるという事実を悪用することに注意しましたが、ベースの最後の桁はほぼ確実に偶数ではありませんでした。完全な検索コードは以下に含まれています。multiset-combパッケージを使用します。私のマシンでは、完全な検索には10:33ほどかかります(もちろん、正しい答えは1つしか生成されません)。

{-# LANGUAGE NoMonomorphismRestriction #-}
import Control.Monad
import Data.Int
import Data.List (inits, tails, group)
import Numeric
import Math.Combinatorics.Multiset

main = print (searchFor (-1121766947))

searchFor n = do
    nl <- [6,5,7,4,8,3,9,2,10,1,11]
    (l_, r_)  <- chooseSubbag nl digits
    l <- perms l_
    guard (last l /= '2')
    r <- perms r_
    guard ((fromString l :: Int32) ^ (fromString r :: Integer) == n)
    return (l, r)

chooseSubbag n = chooseSubbag' n . group
chooseSubbag' n xss = go (drop (n-1) (concat xss)) n xss where
    go _  n xss | n < 0 = []
    go _  0 xss = [([],concat xss)]
    go [] n xss = []
    go m  n (xs:xss) = do
        (kx, tx) <- zip (tails xs) (inits xs)
        (k , t ) <- go (drop (length tx) m) (n-length kx) xss
        return (kx++k, tx++t)

digits = "1223577bdfff"
fromString = fst . head . readHex
perms = permutations . fromList

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