PPCGプライムを出力する


69

これはPPCG Primeです

624桁の長さ

777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777111111111111111111111111111111111111111111111111111111111111111111111111111111188888888118888888811188888811188888811188111118818811111881881111881881111881188111118818811111881881111111881111111188888888118888888811881111111881118888188111111118811111111881111111881111881188111111118811111111881111881881111881188111111118811111111188888811188888811111111111111111111111111111111111111111111111111111111111111111111111111111111333333333333333333333333333333333333333



39桁ごとに分割すると、

777777777777777777777777777777777777777
777777777777777777777777777777777777777
777777777777777777777777777777777777777
777777777777777777777777777777777777777
111111111111111111111111111111111111111
111111111111111111111111111111111111111
188888888118888888811188888811188888811
188111118818811111881881111881881111881
188111118818811111881881111111881111111
188888888118888888811881111111881118888
188111111118811111111881111111881111881
188111111118811111111881111881881111881
188111111118811111111188888811188888811
111111111111111111111111111111111111111
111111111111111111111111111111111111111
333333333333333333333333333333333333333

あなたの仕事はPPCG-Primeを出力することです

これはです。バイト単位の最短コードが勝ちます。

以下のMathematica関数でPPCG-Primeを入力すると、この結果が得られます

ArrayPlot@Partition[IntegerDigits@#,39]&   

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


37
一体どうやってこれを見つけたの?
スティーヴィーグリフィン

5
@StewieGriffin数nが素数になる平均確率はに比例しますが1/log(n)、とにかくそれほど小さくはありません。素数になるまでたくさんの数字をチェックするだけです。
user202729

2
コメントは詳細なディスカッション用ではありません。この会話はチャットに移動さました
デニス

1
この場合、@ user202729 log(n)は約1436.6です。
ジェッペスティグニールセン

3
@Fabianこの方法は効率的だとは思わない...この大きさ(624桁)の素数の場合、あなたが求めている数字は621桁です(そしてゴルフがさらに難しくなります)。プライム!!! 番号を見つけたい場合は、x/logxガウスによる簡単な概算

回答:


22

ゼリー55 54 52 47 46バイト

“=÷¡v⁺ʋiṂYR¤"bİɲ}Ñ1Ṇ⁴ẠV⁹yȥGẇ’“¿mŻ“p’Dx39jBo88V

改訂履歴にはもっと複雑なアプローチがありますが、この単純なアプローチはそれらすべてに勝ります。

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

使い方

“=÷¡v⁺ʋiṂYR¤"bİɲ}Ñ1Ṇ⁴ẠV⁹yȥGẇ’

これは、全角ベース250でエンコードされた数値リテラルで、数字はJellyのコードページから取得されます。チェーンの(左)引数と戻り値はエンコードされた整数
n:= 0x21871c77d7d7af6fafafeff0c37f72ff7fbfbdbfdfef5edfeff8e3に設定されます。

“¿mŻ“p’

上記のリテラルに似ていますが、2番目は2つのエンコードされた整数を分離します。戻り値は、エンコードされた配列[777711、113]に置き換えられます。

Dx39

D戻り値を10進数([[ 7、7、7、7、1、1 ]、[x39 1、1、3 ]])に変換し、結果内の個々の整数/数字を39回繰り返します。これにより、1対の配列が生成されます。これには、7文字の高テキストの前後の数字がそれぞれ含まれます。この配列をAと呼びましょう。

jB

まず、B(左の)引数nをバイナリに変換します。これにより、各880に置き換えられた7文字の高さのテキストを形成する数字が生成されます

次に、バイナリ配列をセパレータとして使用してj、配列Aを結合します。

o88

これにより、88で論理ORが実行され、各088に置き換えられます。

V

私たちは今、正しい数字を持っているが、アレイ内の7年代、1年代、88年代、および3年代。V暗黙的にこの配列を文字列に変換してから評価し、1つの整数を生成します。



6

SOGL V0.1252の 51 バイト

≡=vā⁷H↕↕jΥ_Ν↑∆∫▲pΖo	‘θδžΟwd╬2n?q[‘²Κ7n⌡"α¼■╤ģ⅞¹‘¹H∑

バブルガムを結ぶ!
この回答にはタブが含まれていることに注意してください

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

両方のPsに同じ文字列を再利用して、バイトを節約しようとします。

説明:

...‘...‘²Κ7n⌡"..‘¹H∑  compressed strings replaced with ellipses to shorten the width
...‘                  pushes "1111111188888188888888111118811111881111188111118881118818111811111111188888188888888111118811111881111188118118888818818881811118111" - CG
    ...‘              pushes "1111111888888888888881118118111811811181181118118111811811188881111881" - P
        ²             join with itself - double the P
         Κ            reverse add - prepend the PP to CG
          7n          split to line lengths of 7
            ⌡         for each
             "..‘       push "311ŗ117777" with ŗ replaced with the ToS - current item looping over
                 ¹    wrap the results tn an array
                  H   rotate it counter-clockwise
                   ∑  join to a single string

そこにある番号は、左下から始まり、上に向かって、右に1つ、下に1つ、さらに上に1など、元のものから保存されます。

52バイトのプレーン圧縮バージョン:

#⅓→9E■Ν►1&⅝θ⅞%øøμ←N═]y)u⅝↓$A○░(ZF16Φ⅓Mč▓d⅛Hι‼∑υnη▲Z‘

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


私は...あなたが投稿したことは全く正しいコードであるかどうかわからないんだけど
エリックOutgolfer

1
...‘これらの数字はどのように取得しますか?
Pureferret

1
@Pureferret文字列圧縮。
完全に人間の

@totallyhumanでは、これらの文字列をどのように「エンコード」/圧縮するの...‘ですか?
Pureferret

@dzaima残念ながら、それが実際に私を理解するのに役立つとは思わない。をエンコードする最初の部分をCGそのツールに入力して...‘も、そのツールには何も表示されません。
-Pureferret

4

Mathematica、107バイト

Uncompress@"1:eJxTTMoP8ixgYmAwH8TAkLrAAgqQWYbYGFDVGCxkBh5lCDNwWIqqDCyGrAGDhWEpFmXY3IaiDItPqQqMiQMA+yaAoA=="


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


間違っている場合は修正しますが、それはREPLのみのソリューションですか?それは関数ではないようです(&最後にシングルで修正できると思います)。
numbermaniac

これは関数ではないはずです。このコードは、OPが尋ねたようにPPCGプライムを出力するだけです
-J42161217

4

CJam、ASCII、61

Hs78f*~_@"'hfv;HH`>O4RU(_o^.U)9q&-1iadr`4tk"90b2b88fe|1$'339*

オンラインで試す

]s39/N*素敵なラッピングに追加します。

説明:

Hs         generate "17" (H=17)
78f*       repeat each character 78 times, getting an array of 2 strings
~_         dump the 2 strings on the stack, and duplicate the '7's
@          move the '1's to the top of the stack (first 6 lines done so far)
"…"90b     convert that string from base 90 (treating characters as numbers)
2b         convert the resulting number to base 2,
            obtaining a bit map for the "PPCG" part, with 1 for "1" and 0 for "88"
88fe|      replace (boolean OR) all the zeros with 88
1$         copy the string of 78 '1's
'339*      repeat '3' 39 times

4

C、519 427 414 396 377バイト

Tas、Felix Palmen、Lynnに感謝します。

#define p(n,l)for(i=40*l;i;)putchar(--i%40?n+48:10);
f(i){p(7,4)p(1,2)puts("188888888118888888811188888811188888811\n188111118818811111881881111881881111881\n188111118818811111881881111111881111111\n188888888118888888811881111111881118888\n188111111118811111111881111111881111881\n188111111118811111111881111881881111881\n188111111118811111111188888811188888811");p(1,2)p(3,1)}

興味のある方のために、こちらはより長く読みやすいバージョンです。

#define p(n,l) for(i=40*l;i;) putchar(--i%40?n+48:10);
f(i) {
    p(7,4)
    p(1,2)
    puts("188888888118888888811188888811188888811\n\
       188111118818811111881881111881881111881\n\
       188111118818811111881881111111881111111\n\
       188888888118888888811881111111881118888\n\
       188111111118811111111881111111881111881\n\
       188111111118811111111881111881881111881\n\
       188111111118811111111188888811188888811");
    p(1,2)
    p(3,1)
}

1
あなたはできるはるかに低い取得するだけで、彼らがそうであるように、1と8Sを印刷し、7、3、1のために定義されたことで(〜450ish)
タス

@Keyu Gan:現在のバージョンのGCC(7.2.0-debian11)でコンパイルしています。これにより、これが数年間可能になります。構文が新しいC標準の1つである可能性があるかどうかはわかりません。
xanoetux

2
@Keyu Gan:C99およびC11で許可されています。
xanoetux


このバージョンは非常に注意が必要です。少なくとも私はそれを理解しています。ありがとう。
xanoetux

4

Java(OpenJDK 8)、165バイト

n->{for(int i=0;++i<566;)System.out.print(i<157?7:i>526?3:i<236|i>446||new java.math.BigInteger("vnku5g6l0zenpa1kydel5rxw162k4fk4xapa154o",36).testBit(446-i)?1:88);}

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

クレジット

  • aditsuのおかげで-10バイト!

165:n->{for(int i=0;++i<566;)System.out.print(i<157?7:i>526?3:i<236|i>446||new java.math.BigInteger("vnku5g6l0zenpa1kydel5rxw162k4fk4xapa154o",36).testBit(446-i)?1:88);}
aditsu

素敵なキャッチ、ダブル88、ありがとう!
オリビエグレゴワール


2

バッチ、364 335 333バイト

@set a=888888&set b=1111111111111&set e=1881111&set d=1%e%&set f=333333333&for /L %%x in (1,1,156) do @cd|set/p=7
@echo %b%%b%%b%%b%%b%%b%1%a%8811%a%88111%a%111%a%1%d%188%e%188%e%88%e%88%d%188%e%188%e%1%d%1111%a%8811%a%88%d%111881118888%e%11%d%11%d%1%d%88%d%11%d%11%d%88%e%88%d%11%d%11111%a%111%a%%b%%b%%b%%b%%b%%b%11%f%%f%%f%%f%333

1
echo|cd|
-stevefestl

おかげで、もっと短いものがあることは知っていましたが、思い出せませんでした
シュナダー

また、(1,1,156) do短縮することができます(1,1,156)do
-stevefestl

2

ジャバスクリプト(ES6)、187の 181バイト

@JustinMarinerのおかげで-6バイト

r=s=>s[0].repeat(39),a=r`7`,b=r`1`,i="8888881",c=188+i,d=11+i,j="188111",e=j+1188,f=j+188,g=j+111,h=g+1,k=r`3`
z=>"aaaabbccdd1eeff1eeghccgj8888hhgf1hhff1hhdd1bbk".replace(/./g,eval)

超シンプルなアプローチ。おそらくもう少しゴルフができるでしょう。

説明

r=s=>s[0].repeat(39),                               // helper function to repeat character
a=r`7`,b=r`1`,i="8888881",c=188+i,d=11+i,j="188111",// Set the variables (a-k) to different
e=j+1188,f=j+188,g=j+111,h=g+1,k=r`3`               // parts of the prime       

_=>"aaaabbccdd1eeff1eeghccgj8888hhgf1hhff1hhdd1bbk" // Replace all letters in the string
    .replace(/./g,eval)                             // with the value of the variable

サンプルコードスニペット(出力に改行を追加するためのヘルパーコード付き)


あなたはヘルパー関数を定義する場合、いくつかのバイトを保存することができますrようr=s=>s[0].repeat(39)、次に置き換えるabkしてr`7` など、オンラインでそれを試してみてください!
ジャスティンマリナー


2

C(gcc)、224バイト

f(i,j,c){for(i=0;c="wwdfFdfFDfFDfFDFDDFFDDFFDddDDFdDDddDDddDDDdDDDDffDffDFDDDFDfdDDDDFDDDdDDDdDDFdDDDDFDDDdDDFFDdDFDDDdDDDDdfDdfD"[i/2]>>i++%2*4&15;c-6?putchar(c-4?c+48:49):printf("88"))for(j=0;j++<c%2*38;)putchar(c+48);}

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

いくつかの印刷できないものが含まれています"ww\x11dfFdfFDfFDfFDFDDFFDDFFDddDDFdDDddDDddDDDdDDDDffDffDFDDDFDfdDDDDFDDDdDDDdDDFdDDDDFDDDdDDFFDdDFDDDdDDDDdfDdfD\x11\x03"。文字列リテラルはです。


1

ゼリー、86バイト

Lẋ@1,8żḣLẋ/€F
7ẋ156;1ẋ78¤©;“½Ẹ^o“2FẒ⁶ġbȥ“¡E⁷£cṿ“t¡ɗḋ“£F¢Xȥ“¡McṾbȥ“¬3Ṭo’DÇ€F¤;®;3rẋ39¤Ḍ

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

user202729のおかげで-12バイト


88バイト:TIOcan separates a list of strings inside a string literal
-user202729

あなたの国では何時ですか?なぜ今目覚めているのですか?
user202729

@ user202729そうそう、ありがとう。そして、私はUTC-4にいるので、私は愚かなことをして、遅くまで起きなければならなかったので、これが再開されてから寝る前に挑戦をしたい気がしました。必要に応じてチャットで詳しく説明できます
。P– HyperNeutrino


1

ゼリー、85バイト

”7ẋ“ɓ’80“¡Ȯ⁶LÑɓĠ⁶-€Øġ°$¤ṛọḳƓƒṭ⁽@^ḥ⁷Ofạ<e½Ṇż;,RṘ¶ṀḊ+`⁸ⱮḃĿþṛ9.wƑ¡kḟUẎgLLµ’ḃĖŒṙị⁾1839”3ẋ

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

トリニティホールの課題に対するデニスのアプローチに基づいて、対称性に加えて、先頭7のsと末尾3のsを削除します。


3
デニスはこの課題に別のアプローチをとっていたため、アプローチが異なりました。あなたはアウトゴルフされたと思います!

@JoseZaman彼はゼリーBTWを作りました。
エリックアウトゴルファー

1

PowerShell、164バイト

$a='136361616151315131531532513151315215436365213213315454521532545453153254541616';6..2|%{$a=$a-replace$_,(11,88,22,34,3332)[$_-2]};'7'*156+'1'*78+$a+'1'*78+'3'*39

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

文字列の乗算、連結、および置換。PowerShellにはbase 36などがないため、多数の圧縮オプションは制限されています。中間部分を「圧縮」するより良い方法があるかもしれません-私はまだそれをチェックしています。


1

Wolfram言語(Mathematica)、89(17 + 71 + 1)バイト

まず、番号をGZIPファイルにエクスポートします。拡張子なしの「o」という名前のこのファイルは、合計でカウントされる71バイトになります。デフォルトでは、に移動します$TemporaryDirectory。読みやすくするために数字を省略しています。

Export["o",777777...,"GZIP"]

それから

"o"~Import~"GZIP"

番号を再構築します。ファイル名は1バイトなので、+ 1の元になります。

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


1

ルビー、109バイト

スクリプトはZlib.inflate、番号を圧縮解除するために呼び出します。少なくともRuby 1.9.3が必要です。印刷できないバイトが含まれているため、ここに貼り付けることはできません。

出力を貼り付けますvis prime-inflate.rb

require'zlib'
puts Zlib.inflate DATA.read
__END__
x\M-Z37\^_\M-<\M-@\M^P\M-:\M-@\^B
\M^PY\M^F\M-X\^XP\M-U\^X,d\^F\^^e\^H3pX\M^J\M-*\^L,\M^F\M-,\^A\M^C\M^Ea)\^Ve\M-X\M-\\M^F\M-"\^L\M^KO\M-)
\M^L\M^I\^C\^@\^P\M-p~\M-!

unvis(1)がある場合は、実行unvis prime-inflate.vis > prime-inflate.rbして109バイトのスクリプトを復元します。または、以下のBase64をデコードできますruby -e 'print *STDIN.read.unpack(?m)' < prime-inflate.b64 > prime-inflate.rb

cmVxdWlyZSd6bGliJwpwdXRzIFpsaWIuaW5mbGF0ZSBEQVRBLnJlYWQKX19F
TkRfXwp42jM3H7zAkLrAAgqQWYbYGFDVGCxkBh5lCDNwWIqqDCyGrAGDhWEp
FmXY3IaiDItPqQqMiQMAEPB+oQ==

Zlib.inflate独自の圧縮解除アルゴリズムを設計およびゴルフする必要がないので、電話します。使用するのDATA__END__、圧縮された文字列が有効なUTF-8ではないためです。Rubyコードは、有効なASCII(Ruby 1.9.x)またはUTF-8(Ruby 2.0から)であるか#coding:binary、エンコーディングを変更するためのマジックコメントを持っている必要がありますが、Rubyはエンコーディングをチェックしません__END__



1

6502マシンコード(C64)、142 122バイト

00 C0 A9 27 85 FB A2 00 86 FC A2 04 CA 10 01 60 BC 70 C0 BD 74 C0 20 D2 FF C6
FB D0 0B 48 A9 27 85 FB A9 0D 20 D2 FF 68 88 D0 EB E0 02 D0 DD 48 A5 FC 4A A8
B9 4A C0 90 04 4A 4A 4A 4A 29 0F F0 08 E6 FC A8 68 49 09 D0 CD 68 D0 C0 28 38
36 36 52 12 52 12 42 12 42 22 52 12 52 12 72 82 28 28 72 32 14 82 82 72 42 22
82 82 42 12 42 22 82 92 36 06 27 50 4F 9C 33 31 31 37

オンラインデモ

使用法: sys49152

  • 大きなブロックに対しても同じメソッドとデータテーブルのより良い実装で-20バイト。

説明

これは、中央部分の18シーケンスの長さも使用します。それらはすべて16より短いため、2つはバイトごとにエンコードされます。

コメントされた分解リスト:

         00 C0        .WORD $C000       ; load address
.C:c000  A9 27        LDA #$27          ; counter for newlines (39)
.C:c002  85 FB        STA $FB
.C:c004  A2 00        LDX #$00          ; index for run-length data
.C:c006  86 FC        STX $FC
.C:c008  A2 04        LDX #$04          ; index for "blocks" (counting down)
.C:c00a   .blockloop:
.C:c00a  CA           DEX
.C:c00b  10 01        BPL .continue     ; block index underflow -> done
.C:c00d  60           RTS
.C:c00e   .continue:
.C:c00e  BC 70 C0     LDY .lseqlens,X   ; load length of next block to Y
.C:c011  BD 74 C0     LDA .chars,X      ; load character of next block to A
.C:c014   .outloop:
.C:c014  20 D2 FF     JSR $FFD2         ; output character
.C:c017  C6 FB        DEC $FB           ; decrement newline counter
.C:c019  D0 0B        BNE .skipnl
.C:c01b  48           PHA               ; newline needed -> save accu
.C:c01c  A9 27        LDA #$27          ; restore newline counter
.C:c01e  85 FB        STA $FB
.C:c020  A9 0D        LDA #$0D          ; load newline character
.C:c022  20 D2 FF     JSR $FFD2         ; output character
.C:c025  68           PLA               ; restore accu
.C:c026   .skipnl:
.C:c026  88           DEY               ; decrement repeat counter
.C:c027  D0 EB        BNE .outloop      ; repeat until 0
.C:c029  E0 02        CPX #$02          ; check for block index of text part
.C:c02b  D0 DD        BNE .blockloop    ; not in text part -> repeat
.C:c02d   .textpart:
.C:c02d  48           PHA               ; save accu
.C:c02e  A5 FC        LDA $FC           ; load index for run-length data
.C:c030  4A           LSR A             ; and shift right
.C:c031  A8           TAY               ; -> to Y register
.C:c032  B9 4A C0     LDA .seqlens,Y    ; load run-length data
.C:c035  90 04        BCC .lownibble    ; carry clear from shift -> low nibble
.C:c037  4A           LSR A             ; shift high nibble into low nibble
.C:c038  4A           LSR A
.C:c039  4A           LSR A
.C:c03a  4A           LSR A
.C:c03b   .lownibble:
.C:c03b  29 0F        AND #$0F          ; mask low nibble
.C:c03d  F0 08        BEQ .textdone     ; run-length zero? then text block done
.C:c03f  E6 FC        INC $FC           ; increment index for run-length data
.C:c041  A8           TAY               ; run-length to y-register
.C:c042  68           PLA               ; restore accu
.C:c043  49 09        EOR #$09          ; toggle between '8' and '1'
.C:c045  D0 CD        BNE .outloop      ; and back to output loop
.C:c047   .textdone:
.C:c047  68           PLA               ; restore accu
.C:c048  D0 C0        BNE .blockloop    ; back to loop for next block
.C:c04a   .seqlens:
.C:c04a  28 38 36 36  .BYTE $28,$38,$36,$36
.C:c04e  52 12 52 12  .BYTE $52,$12,$52,$12
.C:c052  42 12 42 22  .BYTE $42,$12,$42,$22
.C:c056  52 12 52 12  .BYTE $52,$12,$52,$12
.C:c05a  72 82 28 28  .BYTE $52,$82,$28,$28
.C:c05e  72 32 14 82  .BYTE $72,$32,$14,$82
.C:c062  82 72 42 22  .BYTE $82,$72,$42,$22
.C:c066  82 82 42 12  .BYTE $82,$82,$42,$12
.C:c06a  42 22 82 92  .BYTE $42,$22,$82,$92
.C:c06e  36 06        .BYTE $36,$06
.C:c070   .lseqlens:
.C:c070  27 50 4F 9C  .BYTE $27,$50,$4F,$9C
.C:c074   .chars:
.C:c074  33 31 31 37  .BYTE "3117"

1

C(gcc)188 187 185バイト

-1 JonathanFrechに感謝します。

-2 ceilingcatに感謝します。

#define F(c,n)for(c=0;c<n;c++)
i,j,k;r(d,n){F(k,n)printf("%d",d);}f(){r(7,156);r(1,79);F(i,45)F(j,6)r("pdpi8pIa7]R>=4gQ>Q2iPoX2=O4a1=QRJ17QR>=4a1i8p"[i]-49>>j&1?8:1,1);r(1,80);r(3,39);}

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


2
PPCGへようこそ、最初の回答です。
ovs

文字列をバックスラッシュをエスケープする必要のない文字列にシフトして、187バイトにすることができると思います。
ジョナサンフレッチ

@JonathanFrechああ、いいね!
ガストナー

@ceilingcat良いキャッチ!
ガストロプナー


0

Befunge-93バイト

v F         >20g1-20p
>"3"20g10g`#^_>52*"F"20p30g10g`#v_"^!1"21p30p84*2+1p
^                       p03-1g03<
^>"81118888888811888888881>!"30p84*2+1p52*
^^"8888811188888811"*25"188111118"<>">#7"21p30p57*5p
>*"188111188188111188188111118818"^ $>:#,_@
^25"18811111881881111188188111111"<
>"8888811888888881"25*"1111111881"^
^"88811881111111881118888"*25"188"<
>"1188111111188111111118811111111"^
^"11881"*52"188111111118811111111"<
>"11111881"52*"188111188188111188"^
^"1118811111111188888811188888811"<

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

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