Codegolf - Может Ли Число Достичь 1, Если Многократно Вычитать Наибольшее Простое Число Меньше Его?

  • Автор темы PTasha
  • Обновлено
  • 22, Oct 2024
  • #1

Испытание:

Учитывая число, возьмите самое большое простое число строго меньше его, вычтите его из этого числа, проделайте то же самое снова с этим новым числом, в котором самое большое простое число меньше его, и продолжайте делать это, пока оно не станет меньше 3. Если оно достигнет 1, ваш программа должна выводить истинное значение, в противном случае программа должна выводить ложное значение.

Примеры:

Все это должно давать правдивое значение:

 
 5
7
9
13
15
19
21
25
28
31
33
36
39
43
45
49
 

Все это должно давать ложные значения:

3 4 6 8 10 11 12 14 16 17 18 20 22 23 24 26 27 29 30 32 34 35 37 38 40 41 42 44 46 47 48 50

Правила:

  • Вы можете написать программу или функцию.
  • Вы можете предположить, что входное значение больше 2.
  • Применяются стандартные лазейки
  • Вот так побеждает самый короткий ответ!

#код-гольф #код-гольф #число #простые числа #проблема-решения

PTasha


Рег
29 Oct, 2011

Тем
59

Постов
188

Баллов
513
  • 26, Oct 2024
  • #2

Сетчатка, 31 байт

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 v=@(x)x-max(primes(x-1));while(x>=3)x=v(x);end;x==1
 

Принты (<2).until(<3)(until(flip(`until`(+1))2.(.)(<1).mod>>=(==))pred.pred>>=flip(-)) (falsy) or (defn subprime [n] (loop [x n] (if (> x 2) (recur (- x (loop [y (dec x)] (if (some zero? (vec (for [z (range 2 y)] (mod y z)))) (recur (dec y)) y)))) (quot 1 x)))) (правда).

Попробуйте онлайн! (Первая строка включает набор тестов, разделенных переводом строки.)

Объяснение

#(loop[x %](if(> x 2)(recur(- x(loop[y(dec x)](if(some zero?(vec(for[z(range 2 y)](mod y z))))(recur(dec y))y))))(quot 1 x)))

Преобразование ввода в унарный путем поворота ввода f=Bb:b<2Fb<3Gf(b-en(b-1)[-1]) into PS C:\Tools\Scripts\golfing> 3..20|%{"$_ --> "+(.\can-the-number-reach-one.ps1 $_)} 3 --> True 4 --> True 5 --> False 6 --> True 7 --> False 8 --> True 9 --> False 10 --> True 11 --> True 12 --> True 13 --> False 14 --> True 15 --> False 16 --> True 17 --> True 18 --> True 19 --> False 20 --> True копии ! .

1

Несколько раз удаляйте самое большое простое число, меньшее входного. Это основано на стандартный тест на простоту с регулярным выражением.

0

Проверьте, является ли результат единственным $n .

 

Kosyak


Рег
11 Apr, 2011

Тем
66

Постов
181

Баллов
521
  • 26, Oct 2024
  • #3

Желе, 9 8 байты

2

Попробуйте онлайн! или проверить все тестовые случаи.

Как это работает

1 ||answer||

Пиф, 18 15 14 байт

Спасибо @Maltysen за -1 байт

$n

Программа, которая принимает входные данные на STDIN и выводит [0] или ? по мере необходимости.

Попробуйте онлайн

Как это работает

Where-Object

Старая версия с сокращением, 18 байт

($n-1)..2

Попробуйте онлайн

Как это работает

$n ||answer||

Regex (ECMAScript или лучше), 33 32 байта

3

Принимает свои входные данные в унарном виде, как последовательность $n characters whose length represents the number.

Попробуйте онлайн! - ECMAScript
Попробуйте онлайн! - Перл
Попробуйте онлайн! - Ява
Попробуйте онлайн! - Питон
Попробуйте онлайн! - Руби
Попробуйте онлайн! - ПКРЕ
Попробуйте онлайн! - .NET (С#)
Попробуйте онлайн! - .NET (PowerShell)

Наконец-то я нашел применение положительному упреждающему тесту на простоту, который придумал 7 декабря 2018 г.! Это на 2 байта длиннее, чем "стандартный" отрицательный упреждающий тест на простоту, но позволяет сделать полное регулярное выражение на 1 байт короче:

while

Вот регулярное выражение, реализованное на некоторых основных языках, где оно либо превосходит другие представленные решения, либо является единственным на своем языке:

\$\large\textit{Анонимные функции}\$

Юлия v0.4+, 58 байт

$n

Попробуйте онлайн!

Вышеупомянутое возвращает истинность для ввода param($n)while($n-gt2){$n-=(($n-1)..2|?{'1'*$_-match'^(?!(..+)\1+$)..'})[0]}!--$n . If returning falsey for 1(?!(11+)\1+$)11+~1 ^11$~0 N были необходимы, это было бы 60 байт:

0

Попробуйте онлайн!

или 59 байт в Julia v0.7 и более ранних версиях с 11 : Попробуйте онлайн!

Конечно, что касается Джулии v0.4, Ответ Глена О превосходит это при размере 32 байта, но для версии 0.5 и более поздних этот и последующие варианты могут быть оптимальным гольфом.

Юлия v0.7+, 54 байта

11

Попробуйте онлайн!

Юля v1.2+, 53 байта

1

Попробуйте это онлайн!

PowerShell, 52 51 байт

p~?1_$-1p:; _~ n=i(0)?1_$-1p:;

Попробуйте онлайн!

-1 байт благодаря Джулиану

Питон, 70 69 байт

break

Попробуйте онлайн!

Питон, 73 байта

_

Попробуйте онлайн!

(Если это должна быть чистая лямбда.)

JavaScript (ES6), 58 54 байта

1_

Попробуйте онлайн!

-4 байта благодаря технологии, используемой РК. и CubeyTheCube

Перл, 49 47 байт

-2 байта Спасибо дингледупер

p~?1_$-1p:; n=i(0)?1_$-1p:; _~ N=n

Попробуйте онлайн!

Это лучше, чем порт Тон Хоспел 41 байт отвечать (57 байт):

p~?1_$-1p:; n=i(0)?1_$-1p:; _~ N=n 1(?!(11+)\1+$)11+~1 ^11$~0 N

Попробуйте онлайн!

Даже если разрешено изменять глобальную переменную # show what is returned and if it is truthy sub show ($_) { # 「.&{…}」 uses the block as a method and implicitly against 「$_」 my $value = .&{any($_,{$_-(^$_).grep(*.is-prime)[*-1]}...3>*)==1} say join "\t", $_, ?$value, $value.gist; } show 3; # 3 True any(False, True) show 4; # 4 True any(False, True) show 5; # 5 False any(False, False) show 10; # 10 True any(False, False, True) show 28; # 28 False any(False, False, False) show 49; # 49 False any(False, False) show 50; # 50 True any(False, False, True) (51 байт):

# bare block lambda with implicit parameter 「$_」 # used to generate all of the rest of the elements of the sequence { # create an any Junction of the following list any( $_, # initialize sequence with the inner block's argument # bare block lambda with implicit parameter 「$_」 { # take this inner block's argument and subtract $_ - ( ^$_ ) # Range up-to and excluding 「$_」 .grep(*.is-prime)\ # find the primes [ * - 1 ] # return the last value } ... # keep doing that until 3 > * # the result is less than 3 # test that Junction against 「1」 # ( returns an 「any」 Junction like 「any(False, False, True)」 ) ) == 1 }

Попробуйте онлайн!

Рубин, 48 45 байт

{any($_,{$_-(^$_).grep(*.is-prime)[*-1]}...3>*)==1}

Попробуйте онлайн!

-2 байта, переключая истинное значение с «строки {($_,{$_-($_-1...2).first: *.is-prime}...3>*)[*-1]==1} {($_,{$_-($_-1...2).first: *.is-prime}...3>*).any==1} {any($_,{$_-($_-1...2).first: *.is-prime}...3>*)==1} characters whose length is the input number" to "the integer value < Traverse the code in this direction, rotating on the line. For the sake of reading the code easier, I'm reversing the code on this line. This will be the order executed. D[1-Dp(;]-D3/)[1-)1l)0Nx] D Duplicate the top member of the stack. [ ] Do the stuff in brackets until break is called. 1- Subtract 1 from the top item of the stack. D Duplicate the top member of the stack. p( If the top member is a prime... ; break; - Pop a, b, push a - b. D3/)[ ] If this value is less than 3, do the bracketed code. 1- Subtract the top item of the stack by 1. ) If the top item is zero... 1 Push 1. l) If the length of the stack is zero... 0 Push 0. N Output the top member of the stack. x System.exit(0); ", сохраняя при этом то же ложное значение <]xN0)l1)-1[)/3D-];(pD-1[D
-1 байт с помощью [ [ dup 1 - primes-upto last - dup 2 > ] loop 1 = ] instead of math.primes

PHP, 89 75 71 байт

r=lambda n:n>2and r(n-[a for a in range(2,n)if all(a%b for b in range(2,a))][-1])or n<2

Попробуйте онлайн!

-4 байта при переключении с (?!<$) to as the repeated character

Р, 73 72 68 63 байта

..+

Попробуйте это онлайн! / Попробуйте онлайн!

^\1

Попробуйте это онлайн! / Попробуйте онлайн!

-1 байт спасибо Джузеппе
-4 байта с помощью (?<!^\1\2+(.+.)) instead of (?<!^\1\2+(.+.)|$) или ..+
-5 байт за счет использования нового синтаксиса анонимной функции, представленного в R v4.1.0.

Поскольку TIO использует R v3.5.2, ссылки TIO имеют старую версию. 68 байт версии функции.

Java 8, 92 89 88 71 байт

(?<=(.*))

Попробуйте онлайн!

(?<=(.*))..+(?<!^\1\2+(.+.)|$)

Попробуйте онлайн!

-17 байт, просто сопоставляя регулярное выражение со строкой символов NUL вместо замены NUL на +

Java 11, 61 байт

(?>(?<=(.*))..+(?<!^\1\2+(.+.)|$))+

Попробуйте онлайн!

-10 байт относительно Java <11, спасибо Кевину Круйссену

\$\large\textit{Полные программы}\$

Питон 2, 69 байт

^(?>(?<=(.*))..+(?<!^\1\2+(.+.)|$))+.$

Выходы через код выхода, ценить #!/usr/bin/perl -p $_=1x$_;$_=$`while/\B(?!(11+)\1+$|$)|11$/ for truthy (by exiting normally), and reach1.pl для фальси (вызвав -p ).

Попробуйте онлайн!

Питон 2, 71 байт

ri e# Read input and convert to integer N. { e# Run this block as long as N is positive (or until the program aborts e# with an error)... _1| e# Duplicate and OR 1. This rounds up to an odd number. For N > 2, this e# will never affect the greatest prime less than N. {mp}, e# Get all primes from 0 to (N|1)-1. e# For N > 2, this will contain all primes less than N. e# For N = 2, this will contain only 2. e# For N = 1, this will be empty. W= e# Select the last element (largest prime up to (N|1)-1). e# For N = 1, this will result in an error and terminate the program, which e# still prints the stack contents though (which are 1, the desired output). - e# Subtract from N. Note that this gives us 0 for N = 2, which terminates the e# loop. }h

Выходы через код выхода, ценить ri{_1|{mp},W=-}h for truthy (by triggering a ` % Do...while t % Duplicate. Takes input implicitly in the first iteration qZq % All primes less than that 0) % Get last one - % Subtract (this result will be used in the next iteration, if any) t % Duplicate 2> % Does it exceed 2? If so: next iteration. Else: execute the "finally" % block and exit do...while loop } % Finally o % Parity. Transforms 2 into 0 and 1 into 1 % End do...while implicitly % Display implicitly ), и `tqZq0)-t2>}o for falsey (by exiting normally).

Попробуйте онлайн!

Питон 2, 79 байт

‡∆ṗεẊ1= ‡∆ṗε # lambda x: abs(x - prev_prime(x)) Ẋ # repeat that on the input until it doesn't change 1= # does that equal 1?

Выходы ‡∆ṗεẊ1= or 1 The input is 1, | or: X≜ X is the integer with the least absolute value such that -↙X it is positive, and if it is subtracted from the input ṗ∧ the result is prime. ! Consider no other value of X. ↰ Call this predicate again with X as the input. через стандартный вывод.

Попробуйте онлайн!

Питон 3, 84 байта

1|-↙Xṗ∧X≜!↰

Попробуйте онлайн!

Перл {⍵<3:⍵=1⋄∇⍵-⊃⌽(⊢~∘.×⍨)2↓⍳⍵} ⍵<3 ⍝ Termination condition :⍵=1 ⍝ return value ⋄ ⍝ Separator ∇ ⍝ Recursive call ⍵-⊃⌽ ⍝ Subtract largest prime (⊢~∘.×⍨) ⍝ Calculate primes less than argument 2↓⍳⍵ ⍝ Range 2–(N-1) , 45 43 bytes

-2 байта Спасибо дингледупер

f=lambda n,p=0:n>2and(any(p%x==0for x in range(2,p))and f(n,p-1)or f(n-p,n+~p))or n

Попробуйте онлайн!

Избитый Тон Хоспел 41 байт отвечать который смешивает регулярное выражение и код.

Перл, 46 44 байта

import sympy f=lambda n:n>2and f(n-sympy.prevprime(n))or n<2

Попробуйте онлайн!

Теперь превосходит порт ответа Тона Хоспела (45 байт):

# This is simply the argument of the function. //. This is the 'ReplaceRepeated' operator, which applies a substitution until the its left-hand argument stops changing. x_/;x>2 The substitution pattern. Matches any expression x as long as that expression is greater than 2. :> Replace that with... NextPrime@-x Mathematica has a NextPrime built-in but no PreviousPrime built-in. Conveniently, NextPrime works with negative inputs and then gives you the next "negative prime" which is basically a PreviousPrime function (just with an added minus sign). x+ This gets added to x, which subtracts the previous prime from it. 2>( ) Finally, we check whether the result is less than 2.

Попробуйте онлайн!

 

Stas1234


Рег
17 Sep, 2007

Тем
73

Постов
211

Баллов
606
  • 26, Oct 2024
  • #4

JavaScript (ES6), 64 63 байта

Сэкономлен 1 байт благодаря @Neil

2>(#//.x_/;x>2:>x+NextPrime@-x)&

Я написал это за 2 минуты... и с первого раза все отлично сработало. Побеждает первый пользователь, обнаруживший неизбежную ошибку....

Попробуйте это

f n|n>2=f$n-last[p|p<-[2..n-1],all((>0).mod p)[2..p-1]]|1>0=n<2 εωλ-→fṗŀ¹ ωλ iterate on the input till fixpoint ŀ¹ range 0..n-1 fṗ filter out nonprimes → last element - subtract from n ε is fixed point insignificant? (<= 1?)

Как это работает

Сначала мы определяем г(х) как функция, которая находит первое простое число р <= х. Это делается с помощью следующего процесса:

  1. Начните с п = х-1.
  2. Если п < 2, х является простым; возвращаться х.
  3. Если х делится на н, декремент х и перейдите к шагу 1.
  4. В противном случае уменьшите н и перейдите к шагу 2.

Решение этой задачи, е(х), теперь довольно просто:

  1. Если х < 3, возвращаться х = 1.
  2. В противном случае вычтите г(х-1) и попробуйте еще раз.
 

Wz11


Рег
28 Dec, 2008

Тем
72

Постов
202

Баллов
562
  • 26, Oct 2024
  • #5

Юлия (0.4), 32 байта

(Обновление (по состоянию на 1.4): Сейчас это довольно устарело - n-1 is no longer in Base, and n необходимо пространство вокруг εωλ-→fṗŀ¹ and the h )

Хотя это не самое короткое решение среди языков, оно может быть самым коротким из удобочитаемых человеком...

s

Попробуйте онлайн!

Или, выражаясь немного яснее

f=lambda n:n<2if n<3else f(n-[x for x in range(2,n)if all(x%y for y in range(2,x))][-1]) s="3 4 6 8 10 11 12 14 16 17 18 20 22" h="5 7 9 13 15 19 21 25 28 31 33 36 39" for j in s.split(" "):print(f(int(j))) for j in h.split(" "):print(f(int(j)))

Вызывается, например, с помощью next_prime .

 

November


Рег
31 Jan, 2010

Тем
66

Постов
193

Баллов
533
  • 26, Oct 2024
  • #6

Пайк, 15 11 байт

gmpy

Попробуйте здесь!

f=lambda n:n<2if n<3else f(n-[x for x in range(2,n)if all(x%y for y in range(2,x))][-1])

Возврат 1 if true and raises an exception if false

 

BaraBulka


Рег
03 Mar, 2020

Тем
105

Постов
193

Баллов
728
  • 26, Oct 2024
  • #7

Python3, 102 92 90 89 88 байт

- stack = input W - while continue: U#_P) - filter(is_prime, range(stack)) e - ^[-1] D - - stack-^ Dt - continue = ^ != 1

Предложения по игре в гольф приветствуются! Я вижу это WDU#_P)e-Dt contains a function !37 , но пока не могу проверить :(

-2 байта, благодаря @ДжонатанАллан!

-1 байт, спасибо @Аарон!

Тестовые случаи

function !(n) if n>2 m=primes(n-1)[end] # Gets largest prime less than n return !(n-m) # Recurses else return n<2 # Gives true if n is 1 and false if n is 2 end end

На выходе получается 13 истинных значений и 13 ложных значений. !n=n>2?!(n-primes(n-1)[end]):n<2 contains the truthy cases and : фальшивки.

 

Avera


Рег
25 Apr, 2012

Тем
89

Постов
187

Баллов
662
  • 26, Oct 2024
  • #8

Шелуха, 11 9 байт

?

Попробуйте онлайн!

-2 байта от Лео.

Ни один из тестовых примеров не достигает нуля, потому что максимальное число, из которого мы можем вычесть ?: can only be primes . Следовательно, мы можем проверять незначительность вместо равенства с 1.

Объяснение

<input type="number" value=3 min=3 onchange="A.innerHTML=f(this.value)"><br> <p id=A>1</p> ||answer||

Хаскелл, 65 63 байта

g=(x,n=x-1)=>n<2?x:x%n?g(x,n-1):g(x-1) f=x=>x<3?x%2:f(x-g(x-1))

Попробуйте онлайн!

 

Unsuptusy


Рег
29 Oct, 2020

Тем
99

Постов
228

Баллов
753
  • 26, Oct 2024
  • #9

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

g=(x,n=x-1)=>n<2?x:x%n?g(x,n-1):g(x-1) f=x=>x<3?x%2:f(x-g(x-1))

Это безымянная функция, которая принимает целое число и возвращает логическое значение.

Объяснение

Здесь много синтаксиса и забавный порядок чтения, так что...

$_=1x<>;$_=$`while/\B(?!(11+)\1+$|$)|11$/;say ||answer||

Python, с Sympy, 60 байт

say 1x<>~~/^((?=.+?(?=(..+?)\2*$)\2$)\2)*.$/

Мой предыдущий метод составлял 83 байта без симпатии с использованием рекурсии, но я понял, что истинность/ложность означает различимость и согласованность, но меня проинформировали, что это неверная интерпретация. Кажется, я не могу его спасти из-за хвоста, но оставлю здесь, на случай, если кто-нибудь знает, как это сделать:

$_=1x$_~~/^((?=.+?(?=(..+?)\2*$)\2$)\2)*.$/ ||answer||

APL (Диалог Юникод), 27 байт

-pl

Попробуйте онлайн!

 

Cocaatmomphot63


Рег
25 Oct, 2024

Тем
73

Постов
188

Баллов
603
  • 26, Oct 2024
  • #10

Брахилог, 11 байт

import re print(bool(re.match(r'((?=.+?(?=(xx+?)\2*$)\2$)\2)*x$','x'*int(input()))))

Попробуйте онлайн!

False ||answer||

Виксал, 7 байт

True

Попробуйте онлайн!

Очень хороший и аккуратный ответ (тоже без флага!)

Объяснено

import re print(bool(re.match(r'((?=.+?(?=(xx+?)\2*$)\2$)\2)*x$','x'*input()))) ||answer||

МАТЛ, 13 байт

0

Попробуйте онлайн! Или проверять все тестовые случаи одновременно.

Объяснение

NameError ||answer||

CJam, 21 16 байт

Спасибо Деннису за экономию 4 байт.

1

Попробуйте онлайн!

Объяснение

import re if re.match(r'((?=.+?(?=(xx+?)\2*$)\2$)\2)*x$','x'*input()):z ||answer||

Перл, 42 байта

Включает +1 за AttributeError

Запуск с вводом на STDIN

1 :

0

Использует классическое регулярное выражение простоты.

 

Volax


Рег
29 Nov, 2008

Тем
61

Постов
188

Баллов
503
  • 26, Oct 2024
  • #11

.NET Regex, 38 байт

Просто чтобы показать, что это можно проверить в одном регулярном выражении.

import re re.match(r'((?=.+?(?=(xx+?)\2*$)\2$)\2)*x$','x'*input()).re

Предполагается, что ввод является унарным.

Объяснение

Он просто реализует требование к слову, многократно удаляя самое большое простое число и проверяя, равен ли остаток 1.

  • n->"x".repeat(n).matches("((?=.+?(?=(xx+?)\\2*$)\\2$)\\2)*x") : Non-backtracking group makes sure the biggest prime we found is not overriden, and x просто повторите процесс сопоставления самого большого простого числа.

    • n->new String(new char[n]).matches("((?=.+?(?!(..+)\\2+$)(..+))\\3)*.") : Match the biggest prime less than the remaining number

      • n->new String(new char[n]).matches("((?=.+?(?=(..+?)\\2*$)\\2$)\\2)*.") : Record how much we have subtracted to establish an "anchor" point for assertion.

      • any(grep()) : Look for the biggest number...

      • sum(grep()) : ... which is prime and less than the remaining number.
        • grepl() : The usual prime test routine, with \(n)grepl('^((?=.+?(?!(..+)\\2+$)(..+))\\3)*.$',strrep(1,n),,1) прикреплено впереди, чтобы убедиться, что мы проверяем сумму, совпадающую с \(n)grepl('^((?=.+?(?=(..+?)\\2*$)\\2$)\\2)*.$',strrep(1,n),,1)
        • x : Assert less than the remaining number
 

Viktor65


Рег
28 Jan, 2007

Тем
72

Постов
216

Баллов
586
  • 26, Oct 2024
  • #12

Питон 2.7: 88 87 байт

fn($n)=>preg_match('/^((?=.+?(?=(..+?)\2*$)\2$)\2)*.$/',str_pad('',$n))

Спасибо @TuukkaX за еще -1 байт!

 

Doshkolnik


Рег
07 Dec, 2020

Тем
74

Постов
192

Баллов
582
  • 26, Oct 2024
  • #15

Perl 6, 54 53 52 51 байт

x ->n{?x*n=~/^((?=.+?(?=(xx+?)\2*$)\2$)\2)*x$/}

Объяснение:

sub{$_=1x pop;$_=$`while/\B(?!(11+)\1+$|$)|11$/;$_}

Пример:

$_ ||answer||

Нерегулярный, 63 байта

sub{my$x=1x pop;$x=$`while$x=~/\B(?!(11+)\1+$|$)|11$/;$x}

Я создал этот язык два дня назад, и его основные предпосылки заключаются в том, что в нем нет встроенных циклов, единственными функциями являются базовая арифметика и принятие решений, а оценка программы основана на регулярных выражениях.

Объяснение

sub{1x pop~~/^((?=.+?(?=(..+?)\2*$)\2$)\2)*.$/}

Эта часть преобразует входные данные в унарные. Он неоднократно вычитает 1 из входных данных, пока оно не станет равным 0, добавляя к началу n=>/^((?=.+?(?=(..+?)\2*$)\2$)\2)*.$/.test(Array(n+1)) each time. It then removes all of the lambda n:__import__('re').match(r'((?=.+?(?=(xx+?)\2*$)\2$)\2)*x$','x'*n) с. Если бы я не забыл lambda n:re.match(r'((?=.+?(?=(xx+?)\2*$)\2$)\2)*x$','x'*n);import re in my code it could be written as so:

'x'*"$args"-match'^((?=.+?(?=(xx+?)\2*$)\2$)\2)*x$'

Следующая часть многократно удаляет наибольшее простое число из входных данных, пока оно не станет равным n->endswith('x'^n,r"^((?=.+?(?=(xx+?)\2*$)\2$)\2)*x") or n->occursin(r"^((?=.+?(?=(xx+?)\2*$)\2$)\2)*x$",'x'^n) , с !=Void() being replaced with n->match(r"^((?=.+?(?=(xx+?)\2*$)\2$)\2)*x$","x"^n)!=nothing .

0

Я использовал регулярное выражение из Ответ Мартина Эндера.

 

Foruru


Рег
07 Sep, 2004

Тем
78

Постов
210

Баллов
610
  • 26, Oct 2024
  • #16

PowerShell v2+, 81 байт

0

Принимает ввод n->split("x"^n,r"^((?=.+?(?=(xx+?)\2*$)\2$)\2)*x$")[1]=="" . Enters a ^ # tail = input number ( # Loop the following: (?= # Atomic lookahead - finds the first match, and once # finished, its result won't be changed by backtracking .+? # tail = largest number that is less than the current tail, # for which the following matches: (?=(xx+?)\2*$)\2$ # Assert tail is prime; \2 = tail ) \2 # tail -= \2 )* # Iterate the above loop zero or more times x$ # Assert tail==1 цикл до тех пор, пока x is still ^((?=.+?(?=(xx+?)\2*$)\2$)\2)*x$ или больше. Каждая итерация вычитает число из qu-G*<HGH_fP_TSQQ1 Program. Input: Q SQ Yield [1, 2, 3, ..., Q] fP_T Filter that by primality _ Reverse it u Reduce it: Q with base case Q and function G, H -> <HG H<G * H *H (yields H if H<G, else 0) -G Subtract that from G q 1 The result of that is 1 Implicitly print . The number is the results of the проверка простоты регулярного выражения применяется к диапазону qu-G*<HGH_fP_TSQQ1 via the #=-QefP_TUQ)q1 Program. Input: Q # ) Loop until error statement (which occurs when Q<3): UQ Yield [0, 1, 2, 3, ..., Q-1] fP_T Filter that by primality e Yield the last element of that =-Q Q = Q - that q1 Q is 1 (implicit variable fill) Implicitly print ( False ) operator, then the first True результатов (поскольку диапазон уменьшается, в результате выбирается самый большой). После завершения цикла #=-QefP_TUQ)q1 is either going to be ’ÆRṪạµ¡Ḃ Main link. Argument: n µ Combine all atoms to the left into a chain. ’ Decrement; yield n - 1. ÆR Prime range; yield all primes in [2, ..., n -1]. Ṫ Tail; yield p, the last prime in the range. If the range is empty, this yields p = 0. ạ Compute the absolute difference of p and n. ¡ Call the chain to the left n times. This suffices since each iteration decreases n, until one of the fixed points (1 or 2) is reached. Ḃ Bit; return the parity of the fixed point. or ’ÆRṪạµ¡Ḃ , by definition, so we pre-decrement 1 (превращая его либо в ^1$ or +`1(?!(11+)\1+$)11+ 1 ), и возьмем логическое-не 1 thereof. That's left on the pipeline and output is implicit.

Примеры

N ||answer||

Флорид, 45 30 29 байт

N ||answer||

Кложур, 125 байт

.+ $*

Да, это один длинный кусок кода. Самый многословный язык снова наносит удар!

Негольфед:

1 ||answer||

Хаскель, 79 байт

Не совсем коротко, но бессодержательно :)

0 ||answer||

Матлаб, 51 байт

.+ $* +`1(?!(11+)\1+$)11+ 1 ^1$

Это ОЧЕНЬ похоже на решение JS6 от ETHПродукции, но необходимо, чтобы переменная находилась в рабочей области.

 

Adverdecy12


Рег
25 Oct, 2024

Тем
64

Постов
187

Баллов
537
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно