输出PPCG Prime


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
您到底是怎么找到的?
Stewie Griffin

5
@StewieGriffin一个数字n为质数的平均概率与成正比1/log(n),反正不是很小。只需检查大量数字,直到它成为质数。
user202729

2
评论不作进一步讨论;此对话已转移至聊天
丹尼斯,

1
在这种情况下,@ user202729 log(n)是关于1436.6
杰普·斯蒂格·尼尔森

3
@Fabian我认为这种方法不是有效的...对于这么大的Prime(624位数字),您要输入的数字为621位数字(甚至更难打高尔夫球),除非这是第10 ^ 621位主要!!!如果您想找到自己的数字,这是x/logx高斯的简单近似值

Answers:


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’

与上面的相似,但第二个分隔两个编码的整数。返回值将替换为编码数组[777711,113]

Dx39

D将返回值转换为十进制([[7,7,7,7,1,1],[x39 1,1,3 ]]),然后将结果中的每个整数/数字重复39次。这将产生一对数组,其中分别包含7个字符的高文本之前和之后的数字。让我们把这个数组一个

jB

首先,B将(左)参数n转换为二进制。这将产生构成7个字符的高位文本的数字,其中每个88已被0代替。

然后,使用二进制数组作为分隔符j加入数组A。

o88

这将对88执行逻辑或,将每个0替换为88

V

我们现在具有正确的数字,但在阵列7的,1 'S,88年代,和3的。V将该数组隐式地转换为字符串,然后对其求值,得到一个整数。


6

泡泡糖,51字节

00000000: 331f c4c0 90ba c002 0a90 5986 d818 50d5  3.........Y...P.
00000010: 282c 3406 6e65 5036 1e4b 9195 8109 649d  (,4.neP6.K....d.
00000020: 5858 1896 4279 68b2 f895 61fa 94ca c098  XX..Byh...a.....
00000030: 3800 00                                  8..

在线尝试!


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和2。

52字节普通压缩版本:

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

在这里尝试!


我不确定您发布的内容是否完全是正确的代码...
Egg the Outgolfer

1
如何...‘获得这些数字?
Pureferret

1
@Pureferret字符串压缩。
完全人类

@totallyhuman所以它如何“编码” /压缩那些字符串成...‘
Pureferret

@dzaima不幸的是,我认为这实际上并不能帮助我理解。在CG该工具中输入对进行编码的第一部分并不会给...‘该工具带来任何好处。
Pureferret

4

Mathematica,107个字节

Uncompress@"1:eJxTTMoP8ixgYmAwH8TAkLrAAgqQWYbYGFDVGCxkBh5lCDNwWIqqDCyGrAGDhWEpFmXY3IaiDItPqQqMiQMA+yaAoA=="


在线尝试!


如果我错了,请纠正我,但这是仅REPL的解决方案吗?那似乎不是一个函数(我想您可以&在最后修复一个)。
numbermaniac

这不应该是一个功能。此代码仅输出PPCG质数,就像要求的OP一样
J42161217 17-10-26

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和8,并为7、3和1定义一个位置来获得更低的价格(约450ish)
Tas

@Keyu Gan:我正在使用GCC的当前版本(7.2.0-debian11)进行编译,这允许使用几年。我不太确定语法是否可以在较新的C标准之一中使用。
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);}

在线尝试!

学分

  • -10字节感谢aditsu!

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

视网膜,129字节


h155b78i7b1i7b2i5b2i5b2!4!!4!""1!4!!4!!6#i7b1i7b1!6!2i3b##!6"1##""1#!8i5b2i5b79d38
#
!7
"
!3!
!
i1b
\d+
$*
+`(\D)1
$1$1
1

T`l`d

在线尝试!


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,

谢谢,我知道那儿要短一些,但是不记得了
schnaader

此外,(1,1,156) do可以缩短为(1,1,156)do
stevefestl

2

使用Javascript(ES6),187个 181字节

-6个字节,感谢@JustinMariner

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

示例代码段(带有一些帮助程序代码以在输出中添加换行符)


你可以节省一些字节,如果你定义一个辅助功能,rr=s=>s[0].repeat(39)再更换ab以及kr`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¤Ḍ

在线尝试!

-12字节归功于user202729


88个字节:TIO罐头separates a list of strings inside a string literal
user202729

在你们国家是几点?你怎么现在醒了
user202729

@ user202729哦,对了,谢谢。我在UTC-4时做的很愚蠢,不得不熬夜,所以我想在睡觉之前做个挑战,因为重新打开了。如果您愿意的话,我可以在聊天中详细介绍:P
HyperNeutrino

1

Python 2中309个 158 155 136 135字节

x='1'*78
s='7'*156+x
a=1
for c in str(int('109PDKEZ3U32K97KJQVELW8GKXCD42EGEYK715B6HPMPL0H8RU',36)):s+=`a`*int(c);a^=9
print s+x+'3'*39

在线尝试!

Python 2,137字节

s='7'*156
a=1
for c in'90'*8+str(int('PL6PU5TXIC24LCKIQY50C2LPAIC9TVZEVQGTMM63IHGBBUV1XSA6',36))+'09'*8:s+=`a`*int(c);a^=9
print s+'3'*39

在线尝试!


1

果冻,85字节

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

在线尝试!

根据丹尼斯处理三位一体大厅挑战的方法,减去对称性,再加上前导7s和尾随3s。


3
丹尼斯以不同的方式应对这一挑战,因为它是不同的挑战。我认为您已经失望了!

@JoseZaman他制作了Jelly BTW。
Erik the Outgolfer '17

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没有基数为36或类似的东西,因此大量压缩选项受到限制。也许有更好的方法来“压缩”中间部分-我仍在检查中。


1

Wolfram语言(Mathematica),89(17 + 71 + 1)字节

首先,将数字导出到GZIP文件。名为“ o”且不带扩展名的文件将恰好为71个字节,计入总数。默认情况下,它将转到您的$TemporaryDirectory。省略数字以提高可读性。

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

然后

"o"~Import~"GZIP"

将重建数字。文件名是一个字节,因此+1来自此字节。

在线尝试!


1

Ruby,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所以我不需要设计和研究自己的减压算法。我使用DATAwith __END__是因为压缩的字符串不是有效的UTF-8。Ruby代码必须是有效的ASCII(在Ruby 1.9.x中)或UTF-8(在Ruby 2.0中),或者必须具有魔术注释#coding:binary才能更改编码,但是Ruby不会在之后检查编码__END__



1

6502机器代码(C64),142122字节

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,因此每个字节中会编码两个。

已评论拆卸清单:

         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不错!
gastropner '18


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"<

在线尝试!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.