アナグラムコード


10

もう一度やってみましょう。

このコンテストの目的は、互いにアナグラムである2つのコードを作成することです(2つは同じバイトを異なる順序で含む必要があります)。次のタスクを実行します。

  • 入力された数値が幸せ素数かをテストし、数値がどちらかである場合は出力する7必要があります(たとえば、出力happy prime4出力が必要sad non-prime)。

  • もう1つは、コードサイズをバイト単位でワードとして出力する必要があります(60バイトのプログラムが出力しsixty、39バイトのプログラムが出力しますthirty-nine)。

ルールの説明が必要な場合は、遠慮なく教えてください。

これはコードゴルフ大会なので、最短のプログラムが勝ちます!


やってから1何を防ぎ/*program1*/program2、その後はprogram1/*program2*/?コメントは禁止すべきだと思います。
William Barbosa

@WilliamBarbosaなんで?それは最適なソリューションにはなりません。
マーティンエンダー

しかし、あなたはまた、それがはるかに容易になり、いくつかの部品ではなく、共有他人共有することができます
誇りhaskeller

1
@proudhaskellerコメントを禁止しても問題は解決しません。他の理由で実行されない文字列、変数名、またはコードの一部にいつでも文字を詰め込むことができます。
マーティンエンダー

1
FWIW、私あなたが自分の提出物を削除すべきだったとは思いません。OPかどうかは、興味深い答えでした。
Dennis

回答:


6

CJam、80 49 48文字

更新:デニスの実装に触発されて数字の二乗和を計算します。これは短いバージョンです

幸せ/悲しい首相/非首相:

ri:T{Ab2f#:+}G*X="happy""sad"?STmp4*"non-prime">

使い方:

ri:T                                "Read input as integer and store it in T"
    {       }G*                     "Run this code block 16 times"
     Ab                             "Convert the number into base 10"
       2f#                          "Calculate square of each digit"
          :+                        "Sum all the squared digits and put the sum on stack"
X=                                  "Compare the sum after 16th iteration to 1"
  "happy""sad"?                     "If sum is 1, put `happy` to stack, otherwise `sad`"
               ST                   "Put space on stack then put the value of T on stack"
                 mp4*               "Put 4 to stack if input is prime, otherwise 0"
                     "non-prime">   "Put `non-prime` to stack and slice out first four characters if the input number is prime"

48

""A"forTy-eiGhT""ri:{b2#:+}*X=appsadSmp4*nnpm>"?

仕組み:

""                                  "Push empty string to stack"
  A                                 "Push 10 to stack"
   "forTy-eiGhT"                    "Push `forTy-eiGhT` to stack"
                "ri:....pm>"        "Push this string to stack too"
                            ?       "Keep `forTy-eiGhT` on stack and pop the other string"

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

最初のプログラムはSTDINから番号を読み取ります


私の元の80文字のソリューション

幸せ/悲しい首相/非首相:

r:N{1/~]{i_*T+:T;}/T_s\1=:H!X):XK<&0:T;}g;H"happy""sad"?SNimp"prime"_"non-"\+?:Y

80人

"eigHTY""r:N{1/~]{i_*T+:T}/_s\1=:H!X):XK<&0:T}happysad?SNmp";"prim_";"non-\?:+";


3

Golfscript-81

このプログラムは、数値が幸せまたは素数であるかどうかをテストします。

~.:a;0.{).a\%!@+\}a*;2="""non-"if"prime"@ {`0\{48-.*+}/}9*("sad ""happy "if@@#get

最後のアナグラムであるこのプログラムは、「81」(単語としてのバイトサイズ)を出力します。

;"eighty-one"#   !""""""""%()***++-..../002489:;=@@@@\\\`aaaaadffiimnppprs{{{}}}~

これは例として役立つはずです。


2
ええと、GolfScriptでコードゴルフチャレンジのリファレンス実装を提供することは、最良のアイデアではないかもしれません。これは打つのが非常に難しいので、参加者を少し落胆させると思います。
マーティンエンダー

あなたが質問を書いたことに気づかず、あなたが賛成票を投じていることを人々は見ていないようです...私は完全にマーティンに同意します。
誇り高いハスケラー、2014

@proudhaskeller自己回答に問題はありません。
Justin

私は自分自身に答えたり、コードにコメントしたりしても何も問題はないと言います。
ジョサイアウィンスロー

2
@JosiahWinslow それ何も悪いことではありません。私が言っているのは、非常に良い解決策を自分ですぐに投稿した場合、興味深い長い回答を見逃している可能性があるということです。
マーティンエンダー

1

J-87文字

Jでこれを行う単純な試み。標準ライブラリを使用しない。ただし、これを使用することで短縮されるとは思えない。

((sad`happy{~1 e.(,[:+/@:*:,.&.":@{:)^:(1-{:e.}:)^:_);@,' ';'gtv]non-prime'}.~4+4*1&p:)
'((ad`app{~1 .(,[:+/@:*:,.&.":@{:)^:(1-{:.}:)^:_);@, ;onprm}.~4+4*1&p:)']'eighty-seven'
('(ad`app{~1 .(,[:+/@:*:,.&.:@{:)^:(1-{:.}:)^:);@, ;onprm}.~4+4*1&p:']'eighty-seven'"_)

一番上の行は、整数を取り、その幸福と素数を出力文字列として診断する動詞です。2行eighty-seven目は文字列を返す式で、3行目は同じことをする定数関数です。どちらも可能であり、プログラムの回答とは対照的に、関数の回答に対する判決がどうなるかわからないため、両方を含めました。Jには引数のない関数などはありません。関数に仮引数。

私たちは幸福をチェックするイワナのほとんどを失います。(,[:+/@:*:,.&.":@{:)は、数値の数字の2乗を合計する本体であり、(1-{:e.}:)その数値がまだ発生しているかどうかのテストです。sad`happy{~1 e.これを単語の結果に変え、それを文字列の前に付けnon-primeます。数字が実際に素数である場合、4文字を切り落とす可能性があります。

アナグラム'eighty-seven'では、無視する文字列にないすべてのビットを非表示にします。Jに再利用する文字が多ければもっとうまくいくはずですが、そうではないので、まあ。


それは良い解決策です。
ジョサイアウィンスロー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.