Транспонований, прайме, ой мій!


15

Завдання проста: ваша програма читає ціле число як вхідне і друкує, чи є простим чи ні. Ви можете надрукувати "так / ні", "правда / неправда" або все, що однозначно ідентифікує результат.

Завдання полягає в тому, що код повинен працювати зі своїми транспонованими рядками та стовпцями.

Щоб виключити очевидне рішення (найкоротше "просте" рішення, повторне вертикально "за схемою" із застосуванням коментарів), показник трохи відрізняється від звичайного коду-гольфу:

Оскільки форматування є дуже важливим у цьому виклику , розмір коду вимірюється в області найменшого прямокутника, до якого вписується код. Іншими словами, пробіл налічується, і рядки повинні бути заповнені однаковою довжиною (ви не насправді це потрібно робити, коли ви публікуєте рішення, для простоти). Наприклад

int main()   
{            
    return 0;
}            

мав би розмір 4 * 13 = 52, (і очевидно, що він не відповідає жодному з двох критеріїв: первинного виявлення та переміщення).

Найменший розмір виграє.

Ви можете використовувати будь-яку мову та будь-яку функцію бібліотеки, за винятком випадків, коли єдиною метою цієї функції є пошук, генерування чи виявлення праймерів.

Редагувати:

Хоча переможцем, мабуть, стане рішення Golfscript, я присуджую 50 балів за найкраще рішення C або C ++!


Ваша метрика прямокутника не відлякує очевидного рішення - краще було б взяти найдовшу бічну довжину. Хоча, це призведе до зменшення відповіді GS на бал 4.
Стійка

Ти правий. Наступна перенесена проблема повинна мати іншу метрику і забороняти симетричні рішення. Однак я думаю, що навіть тоді знайдеться хтось, хто обійде правила або, принаймні, знайде рішення, якого QA не очікував при складанні правил.
vsz

Відповіді:


7

GolfScript, 13 × 1

~.,2>{1$\%!}?

GolfScript вражає знову!

Повторює вхід, якщо він простий, інакше друкує вхід, з'єднаний з найменшим належним дільником. Так, я знаю, що це розтягнення визначення "все, що однозначно ідентифікує результат", але робити все, що завгодно фантазії, коштуватиме декількох зайвих символів. Якщо ви хочете приємніше вивести, додавання трьох символів ;]!до коду отримує 1для простих чисел і 0для складених чисел.

Алгоритм дійсно неефективний, просто груба сила пробного поділу від 2 до n −1. Більшість операторів GolfScript - це лише поодинокі символи, тому цей код працює так само добре. Прикро, однак, оператор присвоєння :не допускає пробілу між собою та ціллю, тому мені довелося це робити повністю без змінних.


Wrt "що-небудь більш фантазійне коштувало б декількох зайвих символів" - ви можете отримати булелівський стиль у стилі GolfScript лише за 2.
Пітер Тейлор

@ Peeter: Ви маєте на увазі щось на зразок моєї редакції вище, тільки без !? Або ти мав на увазі щось фантазії?
Ільмарі Каронен

1
Я думав )раніше, ,щоб завжди знаходити дільник і =в кінці.
Пітер Тейлор

:Далі новий рядок, призначає символ нового рядка - значить, пробіл не дозволений, це просто те, що пробіл - це те, що присвоюється
gnibbler

@gnibbler: З технічної точки зору ми обидва праві. :не дозволяє пробіл або що-небудь інше між собою та ціллю: все, що негайно слідує за ним, будь то пробіл чи будь-який інший маркер (так, парні числа, рядки чи блоки коду), - це те, що присвоюється. Однак пробіл - це те, про що спеціально попереджується офіційна документація, і з поважної причини - оскільки в більшості інших місць додавання пробілів між маркерами в GolfScript нічого не робить (як правило, якщо це не призначено для ...).
Ільмарі Каронен

21

C, 2 * 70 2 * 60

Відбитки yдля праймерів, нічого іншого.
EDIT : Змінено код, щоб зберегти 10 символів. Повинно працювати без параметрів (так m=1).

main(m,n){for(scanf("%d",&n);n%++m&&n>1;);n-m||puts("y");}/*
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/ 

Спосіб обробки транспозиції досить загальний і може бути застосований до будь-якої програми.
Він заснований на перетворенні цього:

abcd/*
\\\\*/

До цього:

a\
b\
c\
d\
/*
*/

І те й інше означає просто abcd.


уау, розумне зловживання конкатенацією ліній :)
vsz

2
Це сайт для гольфу / пазлів. Не існує такого поняття, як зловживання.
виставка

2
@boothby, я думаю, він означає зловживання. Але я не сперечаюся з компліментами.
ugoren

14

С - 13х13

Читає вхід зі stdin та друкує a 1для prime та a 0for not prime.

////m(i;(a=)<
////aans")a;2
//:Di)tc%;;p)
//O n{ adfau+
main//bn"o%t4
(a){///f,r-c8
int b///&(-h)
;scanf///bba;
("%d",&///;r}
a);for(b///( 
=a;a%--b;//( 
);putchar((b 
<2)+48);}    

редагувати: компіляції з gcc та clang зараз, інші компілятори не проходили тестування


12

C, 12x12 символів

Двовимірне рішення, на відміну від моєї іншої відповіді , заснованого на тому самому коді (і як він, друкує yдля простих, нічого не для складених).
Структура схожа на відповідь Квазімодо , але мій код коротший, і я вважаю, що моє використання коментованих даних є дещо ефективнішим, тому я можу відповідати 12x12.

////m()s";np
////am{c%n>u
////i,fad%1t
////nnon"+;s
main//rf,+)(
(m,n//((&m;"
){for(//n&ny
scanf(//)&-"
"%d",&n)//m)
;n%++m&&//|;
n>1;);n-m|| 
puts("y"); }

7

Perl, 14 x 14

Я думаю, що я зависаю від цього. Вкажіть число як аргумент командного рядка, виходи 0або 1. Напевно, більше можливостей для вдосконалення.

$   n=pop;$p|=
 !  ($n%$_)for
  2 ..$n/2;   
   print!$p+m~
n(.r          
=$.i          
pn$n          
o%nt          
p$/!          
;_2$          
$);p          
pf +          
|o m          
=r ~          

3

Q

Захоплені коментарями для симетричного, неефективного рішення.

/{/////////////////////////////////
{(~)any 0=mod[x;2+(!)x-2]}"I"$(0:)0
/~
/)
/a
/n
/y
/ 
/0
/=
/m
/o
/d
/[
/x
/;
/2
/+
/(
/!
/)
/x
/-
/2
/]
/}
/"
/I
/"
/$
/(
/0
/:
/)
/0

Бере вхід зі STDIN, повертає булева.


Помітив sqrtтам. Шукаючи праймери в коді-гольфі, зазвичай вигідніше (марно) ділити всю дорогу до n, а не зупинятися на sqrt n.
гніблер

Дуже правда, дякую. У мене ще не було можливості спробувати отримати кращу оцінку.
skeevey

У відповідь слід включити рахунок
FlipTack

2

Желе , 2х2 кв

PÆ
ÆP

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

Я думаю, що я маю правильну частину транспозиції, і якщо так, то перекладена версія цього є

PÆ
ÆP

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

(який той самий код)


4
Це є неприпустимим: « Ви можете використовувати будь-яку мову, і будь-якої бібліотеки функції , крім , якщо єдина мета цієї функції знайти, генерувати, або виявити прості числа . »
Кевін Cruijssen

1

05AB1E , 1x5 1x3 ( 5 3 байти )

Це не одна велика програма; кожен рядок є окремою альтернативною програмою для вирішення першої перевірки (без використання основного вбудованого).

ÑPQ
ÒgΘ
ÒQP
ÕαΘ
fQO
fs¢
f`Q

-2 байти завдяки Гримі .

Пробіли між рядками не мають опісу 05AB1E, і оскільки я використовую лише 1-байт команди, це добре працює після транспонування.

Виходи 1/ 0для truthy / falsey відповідно.

Спробуйте перший в Інтернеті або перевірте ще кілька тестових випадків для всіх (із eval buildin .V) .
Перенесено: Спробуйте перше в Інтернеті .

Пояснення:

Ñ    # Get a list of all divisors of the (implicit) input-integer
     # (which would be only 1 and the integer itself for primes)
 P   # Take the product of that list
  Q  # And check if it's equal to the (implicit) input-integer

Ò    # Get a list of all prime factors of the (implicit) input-integer 
 g   # Get the amount of those prime factors by taking the length of the list
  Θ  # Check if that's equal to 1 (so only itself is a prime factor)

Ò    # Get a list of all prime factors of the (implicit) input-integer including duplicates
 Q   # Check for each if it's equal to the (implicit) input-integer
     # (1 if truthy; 0 if falsey)
  P  # Take the product of those checks (resulting in either 1 or 0 as well)

Õ    # Get the Euler totient of the (implicit) input-integer
 α   # Take the absolute difference with the (implicit) input-integer
  Θ  # Check if that's equal to 1

f    # Get a list of all prime factors of the (implicit) input-integer without duplicates
 Q   # Check for each if it's equal to the (implicit) input-integer
  O  # And take the sum of that (resulting in either 1 or 0)

f    # Get a list of all prime factors of the (implicit) input-integer without duplicates
 s   # Swap to get the (implicit) input-integer
  ¢  # And count how many time it occurs in the list

f    # Get a list of all prime factors of the (implicit) input-integer without duplicates
 `   # Dump all the content of this list onto the stack
  Q  # Check if the top two values are equal, or if only a single value is present, it will
     # use the (implicit) input-integer as second value

     # For all these program the same applies at the end:
     # (implicitly output the result with trailing newline)

ПРИМІТКА. Якщо дійсне лише значення truthy / falsey, і воно не обов'язково повинне бути виокремленим, Ògабо воно Õαможе бути використане як дійсне 2-байтове значення, оскільки тільки 1truthy в 05AB1E, а все інше - фальси. Спробуйте обидва їх для деяких тестових випадків .

Якби вбудовані дозволені, одного pвистачило б: спробуйте в Інтернеті або перевірте ще кілька тестових випадків .


1
ÑPQабо ÒgΘабо ÒQPдля 3 байт. ( Ñі в Òобох є інші цілі, ніж "знайти, генерувати або виявляти праймери", тому вони не включаються до заборони, якщо я читаю).
Grimmy

1
Більше 3-byters: ÕαΘ, fQO, fs¢,f`Q
Grimmy

@Grimy Ах, не можу повірити, що я не думав про дільники чи простий фактор вбудованих .. Я відповів занадто швидко, напевно. Не знав про це Õα, хоча! Це дуже приємно.
Kevin Cruijssen

0

Рунічні чари , 7 × 1

v̀i'PA@

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

Рунік дбає не про ваші слабкі спроби перестановки джерела! Відповідно до вимоги, що все ще функціонує після того, як джерело перенесло вартість +3 байтів (+2 ширини прямокутника) для модифікатора відображення та точки входу.

Транспонований або перенесений, але залишаючи символ, що поєднує, прикріплений до його батьківського .





0

APL (Dyalog Unicode) , 10x11

{⍵∊∘.×⍨1↓⍳⍵          
           
           
 .          
 ×          
           
 1          
           
           
          }

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

Виправлена ​​функція на відповідність технічним умовам. Дякуємо @ Adám за голову.

Повертає 0 для трибуни, 1 - для помилки .

Як

{⍵∊∘.×⍨1↓⍳⍵  Dfn. everything below this is a noop up until closing the brace
         ⍳⍵  Range [1..arg]
       1    Dropping the first element (yields [2..arg])
   ∘.×⍨      Multiplication table for each element in the vector
 ⍵∊          Check if the argument is in the table.

Транспонована версія точно така ж.

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