Виведіть PPCG Prime


69

Це Прем'єр-міністр PPCG

624 цифри завдовжки

777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777111111111111111111111111111111111111111111111111111111111111111111111111111111188888888118888888811188888811188888811188111118818811111881881111881881111881188111118818811111881881111111881111111188888888118888888811881111111881118888188111111118811111111881111111881111881188111111118811111111881111881881111881188111111118811111111188888811188888811111111111111111111111111111111111111111111111111111111111111111111111111111111333333333333333333333333333333333333333



Якщо розділити кожні 39 цифр, які ми отримаємо

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

Ваше завдання - вивести PPCG-Prime

Це Найкоротший код у байтах виграє.

Якщо ви введете PPCG-Prime у функцію Mathematica нижче, ви отримаєте цей результат

ArrayPlot@Partition[IntegerDigits@#,39]&   

введіть тут опис зображення


37
Як на землі ти це знайшов?
Стюі Гріффін

5
@StewieGriffin Середня ймовірність того, що число nбуде простим, пропорційне 1/log(n), що все-таки не дуже мало. Просто перевірте велику кількість, поки вона не стане основною.
користувач202729

2
Коментарі не для розширеного обговорення; ця розмова перенесена в чат .
Денніс

1
@ user202729 log(n)приблизно 1436.6в цьому випадку.
Джеппе Стіг Нільсен

3
@Fabian Я не думаю, що цей метод був би ефективним ... Для прем'єра це велике (624 цифри) число, про яке ви запитуєте, має 621 цифру (і це ще важче для гольфу), якщо тільки це 10 ^ 621 прем'єр !!! Якщо ви хочете знайти свій номер, ось просте наближення x/logxвід Gauss

Відповіді:


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], [1, 1, 3]] ), а потім x39повторює кожне окреме ціле число / цифру в результаті 39 разів. Це дає пару масивів, які містять цифри до і після 7-символьного тексту відповідно. Давайте назвемо цей масив A .

jB

По-перше, Bперетворює (лівий) аргумент n у двійковий. Це дає цифри, які утворюють високий 7-символьний текст, де кожен 88 замінено на 0 .

Потім jприєднується до масиву A , використовуючи двійковий масив як роздільник.

o88

Це виконує логічну АБО з 88 , замінюючи кожен 0 на 88 .

V

Зараз у нас є правильні цифри, але в масиві 7 ', 1 ', 883 ' s. Vнеявно перетворює цей масив у рядок, а потім його оцінює, отримуючи єдине ціле число.



6

SOGL V0.12 , 52 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 вправо і вниз, потім вгору, і т.д.

Версія з простою компресією на 52 байти:

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

Спробуйте тут!


Я не впевнений, що те, що ви розмістили, взагалі є правильним кодом ...
Ерік Атголфер

1
як ...‘отримують ці цифри?
Pureferret

1
@Pureferret String стиснення.
повністюлюдсько

@totallyhuman. Так як це "кодувати" / стискати струнні рядки ...‘?
Pureferret

@dzaima Я не думаю, що насправді допомагає мені зрозуміти, на жаль. Введення першої частини, що кодує CGцей інструмент, ніде не містить ...‘цього інструменту.
Pureferret

4

Математика, 107 байт

Uncompress@"1:eJxTTMoP8ixgYmAwH8TAkLrAAgqQWYbYGFDVGCxkBh5lCDNwWIqqDCyGrAGDhWEpFmXY3IaiDItPqQqMiQMA+yaAoA=="


Спробуйте в Інтернеті!


Виправте мене, якщо я помиляюся, але це рішення, яке відповідає лише REPL? Це, здається, не є функцією (яку, мабуть, ви могли б виправити з одиницею &в кінці).
numbermaniac

це не повинно бути функцією. цей код просто виводить 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 байт

Завдяки Тасу, Феліксу Палмену та Лінні.

#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
Ви можете отримати набагато нижчу (~ 450 в.ч.), просто надрукувавши 1 і 8, як вони є, і визначившись для 7, 3 і 1
Tas

@Keyu Gan: Я компілюю з поточною версією GCC (7.2.0-debian11), яка дозволяє це робити протягом декількох років. Я не зовсім впевнений, чи є синтаксис, можливо, в одному з новіших стандартів С.
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

Пакетна, 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

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

Приклад фрагмента коду (з деяким допоміжним кодом для додавання розривів рядків у висновку)


Ви можете зберегти кілька байт , якщо ви визначаєте допоміжну функцію , rяк r=s=>s[0].repeat(39)і замінити a, bі kз і r`7` т.д. Спробуйте його в Інтернеті! .
Джастін Марінер

2

C (gcc) , 269 267 байт

функція, використовує просту RLE.

x[]={39,79,80,156};k;f(i){for(char*c="d7b1882188316831683128512811285128112841281128412821285128112851281128712881882188212871283148112881288128712841282128812881284128112841282128812891683168c1a3";i=*c++;++c)for(i=i<97?i-48:x[i-97];i--;++k%39||puts(""))putchar(*c);}

Спробуйте в Інтернеті!


Запропонувати L"'OP\x9c"замістьx
roofcat

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 байт завдяки користувачу202729


88 байт: TIO ( можна separates a list of strings inside a string literal)
користувач202729

Котра година у вашій країні? Чому ти зараз прокинувся?
користувач202729

@ user202729 О так, дякую. А я в UTC-4 я зробив дурненький і мусив залишатись пізно пізно, тому я відчував, що роблю виклик перед сном, оскільки це відновилося. Я можу детально розмовляти в чаті, якщо ви хочете: P
HyperNeutrino


1

Желе , 85 байт

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

Спробуйте в Інтернеті!

Заснований на підході Денніса до виклику Trinity Hall, мінус симетрія, плюс провідні 7та кінцеві 3.


3
Денніс підходив до цього виклику по-різному, тому що це інший. Я думаю, ти перевершив!

@JoseZaman Він зробив Jelly 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 не має бази 36 чи подібних, тому варіанти стиснення великої кількості обмежені. Можливо, буде кращий спосіб «стиснути» середню частину - я все ще перевіряю це.


1

Мова Вольфрама (Mathematica) , 89 (17 + 71 + 1) байт

Спочатку ви експортуєте номер у файл GZIP. Цей файл з назвою "o" без розширення становитиме рівно 71 байт, що зараховується до загальної суми. За замовчуванням він перейде до вашого $TemporaryDirectory. Пропуск цифр для читабельності.

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

Тоді

"o"~Import~"GZIP"

відновить число. Назва файлу - один байт, тому звідси походить +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 байт з кращою реалізацією того ж методу та таблиць даних також для великих блоків.

Пояснення

Тут також використовуються довжини 1та 8послідовності в середній частині; оскільки вони коротші за 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 дякую Джонатану Фреху.

-2 завдяки стельовій кішці.

#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, приємна перша відповідь!
ов

Я думаю, ви можете змістити рядок, щоб дістатися до рядка, який не потребує ухилення від зворотної косої риси, в результаті чого 187 байт .
Джонатан Фрех

@JonathanFrech Ах, приємний!
гастропнер

@ceilingcat Хороший улов!
гастропнер


0

Befunge-93 , 500 байт

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

Спробуйте в Інтернеті!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.