ポールとチキンを食べる5人の友達を見つける


15

Paulはあなたのベルギーの知人の一人であり、次の5つの文字列のうち少なくとも1つ出力するプログラムを作成してほしいと考えています

12496=>14288=>15472=>14536=>14264

14264=>12496=>14288=>15472=>14536

14536=>14264=>12496=>14288=>15472

15472=>14536=>14264=>12496=>14288

14288=>15472=>14536=>14264=>12496

それは彼が最も誇りに思っている友人を表し、彼は彼らと一緒に食事をしたいと思います。ポールはまた、6番は完璧であり、それだけが使用する価値があると考えています。したがって、コードで「6」以外の数字を使用することはできません(0〜5および7〜9は禁止されています)。あなたのプログラムは何も入力できません。出力には、文字列の前後にゴミが含まれる場合がありますが、上記の文字列の少なくとも1つが含まれている必要があります。

たとえば、これは有効な出力です。

220frefze
f**14288=>15472=>14536=>14264=>12496**fczfe fz**15472=>14536=>14264=>12496=>14288**zfe
fzehth

私はこれをどのように解決すると期待しているのかという質問で「軽く」ほのめかしましたが、どのように知っていますか?もっと良い方法があるかもしれません...楽しんでください。

これはcode-golfです。バイト単位の最低スコアが勝ちます。


3
関連するOEISシーケンス。
エミグナ

5
ポールや鶏がこれに何の関係があるのか​​わかりません。
魔法のタコUr

6
@carusocomputing:社交的なチェーン '12496 => 14288 => 15472 => 14536 => 14264 "は、1918年(ベルギーの数学者)ポール・プーレによって発見されました。除数の合計が6であるという意味での完全な数
Jylo

8
待ってください。だから、1918年にマンチキンは数字のシーケンスを見つけました...そして、ポールという名前の数学的マンチキンよりも数字のシーケンスの方が重要ですか?
魔法のタコUr

1
@デニス、まあこれは本当です、私はブルートフォースの4バイトの答えを期待していませんでした、あなたはいつも驚きです:p私はこのルールを追加しました複雑な数値を最初にハードコーディングせずにチェーンします。しかし、最終的には、基本的な変換、および非ゴルフ言語でも文字変換を大いに好むようです。質問のデザインは本当に難しいと思います!それでも、エニグマは出力のプロパティを使用し、これまでより高いスコアを持っています:)
Jylo

回答:


12

05AB1E18 17バイト

•w[•Y·FDѨO})„=>ý

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

説明

•w[•                # base 214 encoding of 12496
    Y·F             # loop 2*2 times
       D            # duplicate top of stack
        Ñ           # push divisors
         ¨          # remove the last element (itself)
          O         # sum
           }        # end loop
            )       # wrap in list
             „=>ý   # join list on "=>"

つまり、各数を次のように計算します f(n+1) = sum(divisors(f(n)) - f(n)


5

パイク、16バイト

wヰw$VDlsh)J"=>

ここで試してみてください!

wヰ             -  12496
  w$            -   4
    V    )      -  repeat ^:
     D          -   duplicate(^)
      l         -     factors(^)
       s        -    sum(^)
        h       -   ^ + 1
          J     - v.join(^)
           "=>  -  "=>"

文字列リテラルがプログラムの最後にあるときはいつでも、直前のトークンと交換し、このような場合に1バイトを節約します。Pykeのfactors関数には、数値自体も1も含まれていません。数値が許可されている場合はw$4

Pyke、21バイト

uバ㟐㱰㣈㞸J"=>

ここで試してみてください!

必要な番号のリストを作成し、それらを結合します。文字列のトリックを除けば、あまり面白くない。


4

MATLAB、44バイト

['','=>@EBIJ=@>DDIJ=A@C>IJ=@A?BIJ=@>B@'-6-6]

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

数字にパターンが見つかりませんでした(数字を使用できないので、パターンを使用するのは難しいでしょう)。

'=>@EBIJ=@>DDIJ=A@C>IJ=@A?BIJ=@>B@''12496=>14288=>15472=>14536=>14264'12がASCII値に追加されるときの文字列です。次に、その文字列を入力し、減算6+6し、空の文字列と連結して''文字配列に変換します。


ええ、すみません、数字のハードコーディングを防止したかったのですが、確かに「ゴルフ」言語に優位性を与えています。パターンはありませんが、各数値は前の数値の約数の合計です。
-Jylo

1
コード化された文字列がまだ含まれている方法が好き=>です。
ニール

3

JavaScript(ES6)、57バイト/ 47(UTF-8)文字

10 Bセーブのuser5090812に感謝

_=>[...'バ㟐㱰㣈㞸'].map(a=>a.charCodeAt()).join`=>`

説明

最初に、配列を作成し、文字列の文字を入力しますバ㟐㱰㣈㞸。次に、文字列をループし(a現在の要素の値を持っています)、文字を文字コードに変更します。次に、配列内のすべての値をで結合します=>

古い:67バイト

_=>[6,6,6,6,6].map((_,a)=>`バ㟐㱰㣈㞸`.charCodeAt(a)).join`=>`

説明

まず長さ5の配列を作成します。次に、文字列内の同じインデックスにある文字の文字コードの各インデックスで配列の値を変更しますバ㟐㱰㣈㞸。これは、ポールのすべての友人の番号です。それが得られたら、配列を結合し、=>セパレータとして使用します。

使用法

使用するには、これを実行するだけです:

f=_=>[...'バ㟐㱰㣈㞸'].map(a=>a.charCodeAt()).join`=>`;alert(f())

出力

12496=>14288=>15472=>14536=>14264

_ => [... 'バ㟐㱰㣈㞸'] .map(s => s.charCodeAt())。join` => `は
どうですか

@ user5090812提案をありがとう!
ルーク

3

Ruby、36バイト(26文字)

p"バ㟐㱰㣈㞸".unpack("U*")*"=>"

なぜなら、なぜだ。地獄のように退屈。

古いバージョン-53バイト

p %w(jol mld oim n6b mke).map{|x|x.to_i ~-6*~-6}*'=>'

説明:基数25の数値をエンコードすると、5つの6自由文字列が得られます。それらをデコードするには、6だけを使用して数値25を表す必要があります:(6-1)(6-1)=>〜- 6〜-6


26バイトではなく、UTF8で36バイトをカウントします
。– smls

1
彼はバイトではなく文字を数えたと思います。私はこのサイトを常にバイトカウントに使用しています。
ルーク

カウントを修正しました。
GB

3

Perl 6の63の 59バイト

{$/=6;$/--;join "=>",<JOL MLD OIM N6B MKE>».parse-base($/*$/)}

{join "=>",<JOL MLD OIM N6B MKE>».parse-base(--($_=6)*$_)}

基数が25からデコードされ.parse-baseます。これは、(2〜36)でサポートされている唯一の基数で、無効な数字がないものです。

-3バイトのNeilに感謝します。

Perl 6の82の 75バイト

{my \a="BXS".parse-base(6*6);join "=>",(a,{sum grep $_%%*,^$_}...^{$_==a if $++})}

{my \a="BXS".parse-base(6*6);join "=>",({$/=$_//a;sum grep $/%%*,^$/}...a)}

15472基数36 の数値をデコードし、各数値を前の数値の適切な除数の合計として計算してシーケンスを生成します。

Perl 6、69バイト(47文字)-非競合

{"{١٢۴۹6}=>{١۴۲۸۸}=>{١۵۴۷۲}=>{١۴۵۳6}=>{١۴۲6۴}"}

禁止されているASCII数字は使用せず、代わりにアラビア語-インド語ブロックのUnicode数字を使用します(各2バイト)!の{ }文字列の補間は、彼らがPerl 6の数リテラルとして解析され、その後、そのASCII表現に文字列化していることを確認してください。

さて、これは不正行為です-だから私は私の主な答えとしてそれを使用しませんでした... :)


私はPerl 6インタプリタに簡単にアクセスできないため、次のように記述できますか? --$/*$/ますか?
ニール

@ニール:そうです。ありがとう!実際、のように割り当てをインライン化しても機能し--($/=6)*$/)ます。
smls

3

ゼリー5 4バイト

ȷṗȷỌ

5つの文字列すべてを出力します。「ガベージ」出力が許可されるという事実を利用し、10 3003の 5つの文字列を埋めます文字の出力ます。

使い方

ȷṗȷỌ  Main link. No arguments.

ȷ     Set the return value to 1000.
 ṗȷ   Cartesian power; form all arrays of length 1000 that consist of integers in
      [1, ..., 1000].
   Ọ  Unordinal; convert all integers to characters.

出力内の必要な文字列のバイトオフセットは何ですか?
ニール

必要な文字列のいずれかが実際に印刷されることをサポートする証拠はありますか?
エリックアウトゴルファー

1
@Neil文字オフセットは4804905105605306006104805104905505506006104805205​​105404906006104805105205​​0053060061048051049053051000でなければなりません。バイトについてはわかりません。
デニス

@EriktheOutgolfer 実際にあなたが合理的な時間とメモリの制約で意味する場合、いいえ。ただし、このチャレンジでは制限が指定されておらず、デフォルトで制限はありません。
デニス

@デニスいいえ、私はこれまでにない。もちろん、すぐに仕事を終わらせないことを暗示しています。ただし、コードから判断すると、これらの文字列のいずれかを印刷することは本当にありそうもないと思います。その後、再び、私はいくつかの合理的な証拠...と思った
エリックOutgolfer

2

C、 94 84 77バイト

愚かなシンプル。特別な感謝@ニール

g(){char*m="!mnpuryzmpnttyzmqpsnyzmpqoryzmpnrp";for(;*++m;)putchar(*m-66+6);}

f(){printf( "%d =>%d =>%d =>%d =>%d"、 '〜' 'r'-'d'、 '〜' 'd'-'h'、 ' 〜 ' ' r '-' L '、'〜 ' ' z '+' d '、'〜 '*' t '-' P ');}


少なくともideoneでは、char*m内部を移動しfor()てバイトを保存できます。また、関数を再利用可能にします(関数の必要条件)。また、末尾のヌルを出力します。*++mそれを修正します。また、66:の代わりに60を引くことで、いくつかのバイトを節約できますg(){for(char*m="!mnpuryzmpnttyzmqpsnyzmpqoryzmpnrp";*++m;)putchar(*m-66+6);}
ニール

または、MATLABの回答からアプローチをコピーして、その上に別のバイトを保存することもできます。
ニール

@Neil私のコンパイラはforループ内で宣言させませんinitial declaration used outside C99 modeが、putcharを単純化して満足しています。ありがとう!
cleblanc

1

PHP、73 63 60バイト

for(;$c="|`*X6H-$*@"[$i];)echo!!$i&++$i?"=>".!!6:"",ord($c);

で実行し-nrます。

少し怠惰:のリストとして文字列を取った=>1(ascii)(ascii)
:すなわち12496=>14288=>15472=>14536=>14264、文字列インデックスによる
印刷=>1、ASCIIコードの追加

壊す

            # loop through string with index $i
for(;$c="|`*X6H-$*@"[$i];)echo
            # string ascii values: 124,96,42,88,54,72,45,36,42,64
    !!$i        # true if $i>0
    &++$i       # odd if (old) $i is 0,2,4,6,8
                # -> true for 2,4,6,8
        ?"=>".!!6   # if true, print "=>1"
        :"",        # else print nothing
    ord($c);    # print ascii value


1

PHP、53バイト

<?=join('=>',unpack('v*',gzinflate('�`p������s')));

六角ダンプ:

00000000: 3c3f 3d6a 6f69 6e28 273d 3e27 2c75 6e70  <?=join('=>',unp
00000010: 6163 6b28 2776 2a27 2c67 7a69 6e66 6c61  ack('v*',gzinfla
00000020: 7465 2827 bb60 70c1 bcc0 e684 c50e 7300  te('.`p.......s.
00000030: 2729 2929 3b                             ')));

出力:

12496=>14288=>15472=>14536=>14264

説明:

5桁の整数セクションはそれぞれ、符号なしの短いリトルエンディアンとしてエンコードされ、連結されて結果がgzip圧縮されます。これにより、問題のある数字を持たないバイトスチームが生成され、文字列にハードコーディングされます。抽出するには、ストリームを解凍し、2バイトのショートを解凍し、それぞれを文字列として解釈し、で結合し>=ます。


故障はどうですか?
タイタス

1

Java 8、134バイト

ゴルフ:

()->{String s="";for(String a:new String[]{"JOL","MLD","OIM","N6B","MKE"}){if(!s.isEmpty())s+=("=>");s+=Long.valueOf(a,25);}return s;}

Ungolfed、フルプログラム:

import java.util.function.*;

public class FindFiveFriendsToEatChickenWithPaul {

  public static void main(String[] args) {
    System.out.println(toString(() -> {
      String s = "";
      for (String a : new String[] { "JOL", "MLD", "OIM", "N6B", "MKE" }) {
        if (!s.isEmpty()) s += ("=>");
        s += Long.valueOf(a, 25);
      }
      return s;
    }));

  }

  private static String toString(Supplier<String> s) {
    return s.get();
  }

}

1

バッチ、191バイト

@set/as=n=66*(66+66+66+6*6)+66/6+66/6+6,u=6/6
@call:t
@call:t
@echo %s: ==^>%
@exit/b
:t
@call:c
:c
@for /l %%i in (%u%,%u%,%n%)do @set/an-=%%i*!(%n%%%%%i)
@set/an=-n
@set s=%s% %n%

6s のみを使用して各数値を計算するのに最低32バイトが必要であり、さらに192バイトである32を使用してすべてを印刷すると見積もっているので、友好的なチェーンを計算して勝ちます。また、私%は連続して5 秒が記録だと思います。また、きちんとしたバッチトリック:はループが評価さ%n%れる前に置換されるforため、ループはのすべての因子を計算し、nからそれらを減算しますn。その結果、望ましい結果が否定されます。


1

ゼリー、12バイト

“<ọ’ÆṣÐĿj“=>

4番目の文字列のみを出力します。

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

使い方

“<ọ’ÆṣÐĿj“=>  Main link. No arguments.

“<ọ’          Yield the 1-based indices of '<' and 'ọ' in Jelly's code page, i.e.,
              [61, 222], and convert the array from base 250 to integer.
              This yields 15472.
      ÐĿ      Iteratively call the link to the left until the results are no longer
              unique and return the array of all unique results.
    Æṣ        Compute the proper digit sum of the previous value (initially 15472).
        j“=>  Join, separating by the string "=>".

0

Python 2、78 72バイト

print''.join(chr(ord(x)-6-6)for x in'=@>DDIJ=A@C>IJ=@A?BIJ=@>B@IJ=>@EB')

編集 -6バイトを節約してくれたStewie Griffinに感謝します!

また、別の解決策は、可能なすべての順列を出力することです。OPはゴミは問題ないと言います。

from itertools import permutations
print str(list(permutations(''.join(str(x)+'.'for x in range(int('9'*5)).replace(',','').replace('\'','') 
# also 9 and 5 need to be converted using ord and chr

以下からの変換でも多くの冗長性があるintlistにはstr。難解な言語ではこれが簡単になると思いますが、どれもわかりません。


12ではなく66を追加できますか?これは別のバイトを節約します。
GB

通常のASCII範囲@GBから外れます。つまり、文字ごとに2バイトをカウントする必要があります。
スティーヴィーグリフィン

なるほど、「=>」文字は数えませんでした。
GB
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.