Виклик цілого негативного порядку, але це Prime Time!


12

Я говорю про це питання , погляньте на це, якщо ви трохи розгублені.

Основне завдання

Ваше завдання полягає у виведенні об'єднаних цілих чисел у порядку зменшення, але збільшуючи максимальне ціле число кожного разу при натисканні 1 (для цього питання 1 вважатиметься простим числом) . Хоча це і не відрізняється від першого питання, тут випливає хитра частина: Усі виведені числа можуть бути лише прайметами . Вони будуть з'єднані в єдиний рядок без пробілів чи нових рядків. Ваш внесок також буде простим числом .

Приклад:

1
21
321
5321
75321
1175321
Valid output:
1213215321753211175321

Вхідні дані

Ваш код може зайняти лише один вхід: найвищий праймер, який потрібно надрукувати. Цей вхід може надходити з будь-якого місця (графічний, STDIN). Ви впевнені, що вхід є простим числом.

Вихідні дані

Вам доведеться вивести отримане число. Ви можете отримати це число, продовжуючи відлік, лише підрахуйте число, якщо воно є простим, а потім підключіть всі результати разом до одного числа. Останній номер "рядок" (наприклад 7, 5, 3, 2, 1) повинен бути надрукований повністю. Вихід може бути будь-яким (цифри, рядки, графічні), якщо він читається. Для перевірки ваших тестових випадків застосовується та ж схема Regex:

^(\D*(\d)+\D*|)$

Якщо ваш вихід не відповідає цій схемі, ваш код недійсний.

Правила

  • Забезпечено, що введення даних є основним, не включайте поводження з помилками, якщо ви цього не хочете / не потребуєте.
  • Вихід може бути лише повним з'єднаним номером, тому не розбиватися ні на що, навіть на нові рядки.
  • Ваш алгоритм не повинен перевірити перший екземпляр Nз'являється (наприклад, 17по прибуттю 1175321), а перший примірник в Nякості фактичної кількості.
  • Ваш внесок гарантовано позитивний, не додайте обробку, якщо не хочете / не потрібно.

Тестові справи

Input: -2, 0
Output: Any, or none (number isn't positive)

Input: 9
Output: Any, or none (number isn't prime)

Input: 1
Output: 1

Input: 7
Output: 121321532175321

Input: 23
Output: 1213215321753211175321131175321171311753211917131175321231917131175321

Переможець

Це , тому автор коду з найменшою довжиною в байтах виграє!


8
Я не пропоную змінити виклик, але не думаю 1, що це прем'єр за визначенням.
Ерік Аутгольфер

3
1. Тестовий випадок 1прямо суперечить специфікації, яка " запевняє ", що вхідне число буде простим. 2. Здається, специфікація виводу містить численні суперечності та неоднозначності. " Останній номер" рядка "(наприклад, 7, 5, 3, 2, 1) повинен бути надрукований повністю " - так інші не роблять? " Застосовується той самий шаблон Regex для перевірки ваших тестових випадків ", але " Вихід може бути лише повним з'єднаним номером, тому не розбиватися нічим " суперечить цьому регулярному вираженню. Але регулярно виражене виразно все-таки хитне, оскільки воно дозволяє порожній рядок, і немає вводу, який би це міг дати.
Пітер Тейлор

1
1. " Дозволено використовувати один трейлінг нового рядка. " Надлишковий / невідповідний шаблону регулярних виразів, який дозволяє будь-яку кількість символів, що відкладаються. 2. Вступне речення « Ваше завдання - вивести цілі числа » вводить в оману, оскільки згодом ви попросите вивести одне число. 3. Все пояснення послідовності та результату є заплутаним - люди в основному повинні переробити інженер, що ви маєте на увазі, вивчаючи приклади (перелік послідовностей та тестові випадки). Останній виклик також мав ці питання, і я звернувся до них у запропонованій там
редакції

5
Який сенс у довільному здійсненні 1 простою?
Ксандерхолл

1
Виклик цілого від’ємного порядку, але кожен раз, коли він є простим, він стає швидшим;)
SplittyDev

Відповіді:


5

Желе , 9 байт

ÆR1;;\UFV

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

Як це працює

ÆR1;;\UFV  Main link. Argument: n

ÆR         Prime range; yield all primes up to n.
  1;       Prepend the "prime" 1.
    ;\     Cumulative concatenation; yield all prefixes of the prime range.
      U    Upend; reverse each prefix.
       F   Flatten the resulting 2D array.
        V  Eval. This casts the integer array to string first, thus concatenating
           the integers.

Я знаю, що я занадто глибоко вивчаю гольф, коли читаю желе, щоб зрозуміти питання, а не навпаки. (Це насправді досить читабельна програма Jelly, як вони йдуть; єдиним заплутаним моментом для мене був дивний особливий випадок у Vсписку.)

5

Обробка, 161 байт

int p(int n){for(int k=1;++k<=sqrt(n);)if(n%k<1)return 0;return 1;}void t(int n){for(int i=1,j;i<=n;i++){if(p(i)<1)continue;for(j=i;j>0;j--)print(p(j)<1?"":j);}}

Одна функція перевіряє первинність, інша робить друк. Телефонуйте по телефонуt(7)

Безумовно

Перша функція виконує перевірку первинності. Він повертає intзамість того, booleanоскільки таким чином зберігається більше байтів. ( intзамість boolean, 0замість false, 1замість true)

int Q103891p(int n){
  for(int k=1;++k<=sqrt(n);)
    if(n%k<1)return 0;
  return 1;
}

Друга функція виводить рядок. Це повторюється через кожне число, якщо воно не є простим, перейти до наступної ітерації. Якщо він є простим, він продовжується до друку всередині іншої for. Знову ж таки, якщо число просте, то ми друкуємо його, інакше ні.

void Q103891(int n){
  for(int i=1,j;i<=n;i++){
    if(p(i)<1)continue;
    for(j=i;j>0;j--)
      print(p(j)<1?"":j);
  }
}

5

Желе , 12 байт

ÆR;@1
ÇÇ€UVV

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

Якби взагалі не було 1s, мій код був би лише ÆRÆRUVVна 7 байт.

Розширене пояснення:

ÇÇ€UVV Main link. Arguments: z.
Ç      Run link1 on z.
 ǀ    Run link1 on z's elements.
   U   Reverse z's elements.
    V  Flatten z.
     V Concatenate z's elements.

ÆR;@1 Link 1. Arguments: z.
ÆR    Range of primes [2..z].
    1 Integer: 1.
  ;@  Concatenate x to y.

Ірландський хлопець (званий Денніс?) Якось перевершив мене хаха .


4

05AB1E , 19 байт

LDpÏX¸ì€Lí˜ÐXQsp+ÏJ

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

Пояснення

L                     # range [1 ... input]
 DpÏ                  # keep only primes
    X¸ì               # prepend a 1
       €L             # map: range [1 ... n]
         í            # reverse each sublist
          ˜           # flatten list to 1D
           Ð          # triplicate
            XQ        # check elements in one copy for equality with 1
              sp      # check elements in one copy for primality
                +     # add the above lists giving a list with true values at indices
                      # comtaining 1 or a prime
                 Ï    # keep only those elements of the unmodified copy of the list
                  J   # join

Вражений DpÏвисловлюванням. Хороша робота!
devRicher


2

GameMaker Language, 169 байт

Основна функція (68 байт)

b=""for(i=1;i<=argument0;i++){c=i while(j)b+=string(p(c--))}return b

Функція p (46 байт)

for(a=0;a<argument0;a++)while q(++b){}return b

Функція q (55 байт)

n=argument0 for(i=2;i<n;i++)if!(n mod i)p=1return p|n=1

Добре, хто використовує GML
FireCubez

@FireCubez Спасибі :) Раніше я його багато використовував. Це була фактично перша мова програмування, яку я вивчив.
Timtech

1

MATL , 15 байт

Zq"1@ZqP]1v!VXz

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

Zq      % Implicit input. Push array of primes up to that value
"       % For each prime in that array
  1     %   Push 1
  @     %   Push current prime
  Zq    %   Push array of primes up to that
  P     %   Reverse
]       % End
1       % Push 1
&h      % Concatenate all stack horizontally
V       % Convert to string
Xz      % Remove spaces. Implicit display

1

Perl 6 , 41 байт

{[~] flat [\R,] 1,|grep *.is-prime,2..$_}

( Спробуйте в Інтернеті. )

Пояснення:

  • 1, |grep(*.is-prime, 2..$_): Послідовність 1 та простих ліній ... (1 2 3 5)
  • [,] ...: Зменшити ("скласти") над оператором коми ... (1 2 3 5)
  • [\,] ...: З проміжними результатами ( трикутне зменшення ) ...((1) (1 2) (1 2 3) (1 2 3 5))
  • [\R,] ...: Застосувати мета-оператор зворотного зв'язку до коми ...((1) (2 1) (3 2 1) (5 3 2 1))
  • [~] flat ...: Видаліть список вкладки та складіть оператор concat concat ... 1213215321

(Це ґрунтується на моїй відповіді на попередній виклик .)


1

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

ToString/@(1<>Prime@Range[Range@PrimePi@#,0,-1]/.Prime@0->1)&

Безіменна функція, яка бере цілий аргумент і повертає рядок. (Якщо вхід не є простим, він просто "округляє його" до найближчого простого; якщо вхід непозитивний, він робить вигляд, що це 1.)

Ця реалізація використовує неприємний трюк з відповіді Мартіна Ендера на аналогічний попередній виклик (хто каже, що ця стара собака не може навчитися новим хитрощам?): Зловживання <>згладити вкладений список цілих чисел.

Розглянутий вкладений список починається з генерування аналогічного вкладеного списку, як у цій відповіді, з відповідною довжиною (задається PrimePi@#числом простирадків до та вхідних даних); то Primeзастосовується до кожного елемента. Наприклад, для введення , 5який є третім простим числом, кодові Range[Range@PrimePi@#,0,-1]виходами {{1,0},{2,1,0},{3,2,1,0}}, і застосовуючи Primeдо кожного виходів елементів , {{2,Prime[0]},{3,2,Prime[0]},{5,3,2,Prime[0]}}так як 1 - го, 2 - го, 3 - го і прості числа 2, 3 і 5, відповідно. Я відчуваю гордість, що мені вдалося додати ще більше помилок у підході Мартіна Ендера - Mathematica скаржиться щоразу, коли пише Prime[0].

Prime[0]це не річ, але це нормально: /.Prime@0->1перетворює їх усіх на 1s. І ми також хочемо 1на передній панелі, тому замінимо відповідь ""Мартіна Ендера на просто 1, що фактично економить байт.


0

PHP, 72 байти

for(;$n<$argv[1];print$s=$n.$s)for($i=2;$i>1;)for($i=++$n;--$i&&$n%$i;);

Запустити кмітливість -r

зламатися

for(;$n<$argv[1];               // loop $n up to argument:
    print$s=$n.$s)                  // 2. prepend $n to $s, print $s
    for($i=2;$i>1;)                 // 1. find next prime: break if $i<2
        for($i=++$n;--$i&&$n%$i;);      // if $n is prime, $i is 1 after loop (0 for $n=1)

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