Вызов:
Учитывая массив неотрицательных целых чисел в диапазоне0 to Infinity
, проверьте, являются ли все они простыми числами или нет. (Вы также можете использовать ввод как строку)
Входные данные:
Ввод: массив чисел
Вывод: массив с каждым элементом, замененным одним из них:
-1 -----> If 0, 1
1 -----> If it is a prime number greater than 1
the highest factor -----> If that number is not prime
Вернуть -1 (0, 1), 1 (для простых чисел> = 2) или наибольший коэффициент заданного числа (для не простых)
Примеры:
[1, 2, 3, 4, 10, 11, 13] ---> [-1, 1, 1, 2, 5, 1, 1]
[100, 200, 231321, 12312, 0, 111381209, 123123] ---> [50, 100, 77107, 6156, -1, 1, 41041]
Замечания:
Ввод всегда будет действительным, то есть он будет состоять только из цифр, а десятичные числа не проверяются. Массив может быть пустым, если так, вернуть пустой массив.
Ограничение:
Это код-гольф, поэтому выигрывает самый короткий код в байтах для каждого языка.
LeaderBoard:
Вот фрагмент стека, который генерирует как регулярную таблицу лидеров, так и обзор победителей по языкам.
Чтобы убедиться, что ваш ответ обнаружен, начните его с заголовка, используя следующий шаблон уценки:
# Language Name, N bytes
где N
размер вашего представления. Если вы улучшите свой счет, вы можете сохранить старые результаты в заголовке, вычеркнув их. Например:
# Ruby, <s>104</s> <s>101</s> 96 bytes
Если вы хотите включить в заголовок несколько чисел (например, потому что ваш счет равен сумме двух файлов или вы хотите перечислить штрафы за флаг интерпретатора отдельно), убедитесь, что фактический результат является последним числом в заголовке:
# Perl, 43 + 2 (-p flag) = 45 bytes
Вы также можете сделать название языка ссылкой, которая затем будет отображаться в фрагменте списка лидеров:
# [><>](http://esolangs.org/wiki/Fish), 121 bytes
var QUESTION_ID=163882,OVERRIDE_USER=8478;function answersUrl(e){return"https://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"https://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var r=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(r="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var a=r.match(SCORE_REG);a&&e.push({user:getAuthorName(s),size:+a[2],language:a[1],link:s.share_link})}),e.sort(function(e,s){var r=e.size,a=s.size;return r-a});var s={},r=1,a=null,n=1;e.forEach(function(e){e.size!=a&&(n=r),a=e.size,++r;var t=jQuery("#answer-template").html();t=t.replace("{{PLACE}}",n+".").replace("{{NAME}}",e.user).replace("{{LANGUAGE}}",e.language).replace("{{SIZE}}",e.size).replace("{{LINK}}",e.link),t=jQuery(t),jQuery("#answers").append(t);var o=e.language;/<a/.test(o)&&(o=jQuery(o).text()),s[o]=s[o]||{lang:e.language,user:e.user,size:e.size,link:e.link}});var t=[];for(var o in s)s.hasOwnProperty(o)&&t.push(s[o]);t.sort(function(e,s){return e.lang>s.lang?1:e.lang<s.lang?-1:0});for(var c=0;c<t.length;++c){var i=jQuery("#language-template").html(),o=t[c];i=i.replace("{{LANGUAGE}}",o.lang).replace("{{NAME}}",o.user).replace("{{SIZE}}",o.size).replace("{{LINK}}",o.link),i=jQuery(i),jQuery("#languages").append(i)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<h\d>\s*([^\n,]*[^\s,]),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/,OVERRIDE_REG=/^Override\s*header:\s*/i;
body{text-align:left!important}#answer-list,#language-list{padding:10px;width:290px;float:left}table thead{font-weight:700}table td{padding:5px}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr></thead> <tbody id="answers"> </tbody> </table> </div><div id="language-list"> <h2>Winners by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr></thead> <tbody id="languages"> </tbody> </table> </div><table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table>
Ответы:
Желе ,
76 байтМонадическая ссылка, принимающая список неотрицательных целых чисел и получающая список целых чисел, больших или равных -1.
Попробуйте онлайн!
Как?
Обратите внимание, что:
ÆḌ
выдает список правильных делителей в порядке возрастанияṪ
к пустому списку дает нольисточник
Желе ,
98 байтСохранено 1 байт благодаря @Dennis
Попробуйте онлайн! или запустите все тесты
комментарии
Мы пользуемся тем фактом, что оба
nan
иinf
превращаемся0
в желе, когда к ним применяется побитовое НЕ.источник
~~
.:ÆfṂ€$~~
сохраняет байт, удаляя вспомогательную ссылку.$
это то, что я искал. :) Благодарность!R
68 68байтРешение с использованием только базы R, без библиотек! Спасибо Джузеппе за игру в гольф 6 байтов.
Используется
scan
для чтения в списке разделенных пробелами чисел,%%
чтобы определить, какие факторы.v
затем содержит вектор всех факторов в порядке возрастания (включая 1 и n). Это имеет приятное свойство: когда мыrev
ошибаемсяv
, номер, который мы хотим, будет на втором месте, избегая дорогого вызоваlength
илиtail
(если онn
был простым,v
содержитn 1
, иначе он содержитn (factors in descending order) 1
).Пример вывода (ссылка TIO здесь ):
Если вы считаете, что список не является приемлемым возвращаемый тип, а затем поменять
Map
дляsapply
и добавьте 3 байта.источник
!
05AB1E ,
1198 байт-3 байт благодаря @Emigna , изменения
©d1-®+
вDd<+
и€¨€à
вε¨à
.Только мой второй ответ 05AB1E,
так что определенно можно играть в гольф.Попробуйте онлайн.
Объяснение:
источник
Dd<+
должен работать вместо©d1-®+
. Вам также не нужно, такï
как они все еще целые. Вы могли бы иметь это в нижнем колонтитуле для более приятного взгляда, хотя.1-
вместо того , чтобы быть<
довольно глупым .. Спасибо заD
вместо©...®
! И я действительно поместилï
нижний колонтитул сейчас.Ñε¨àDd<+
J , 21 байт
Попробуйте онлайн!
Объяснение:
(>&1)"0
каждое число больше 1?@.
если нет, верните_1:
(%{.@q:)
если его 2 или больше, разделите%
число на первый{.
из простых факторовq:
источник
Japt , 6 байт
После игры в гольф он оказался почти таким же коротким, как и решение Джонатана.
Попытайся
объяснение
источник
-m
Python 3 , 62 байта
Попробуйте онлайн!
Ибо
0
и1
range(1,n)
пусто, поэтому код оценивается какmax([]+[-1]) = -1
. Для простых чисел единственный делитель в [1, n) -1
это желаемый результат.Кокос , 50 байтов
Попробуйте онлайн!
источник
Java 8,
10510387 байтИзменяет массив ввода вместо возврата нового для сохранения байтов.
Попробуйте онлайн.
Объяснение:
источник
Haskell,
5249 байтПопробуйте онлайн!
источник
Шелуха , 8 байт
Попробуйте онлайн!
объяснение
источник
Атташе , 23 байта
Попробуйте онлайн!
29 байт, pointfree:
@(Max&-1@Last@ProperDivisors)
24 байта, также pointfree:
@(Max&-1@`@&-2@Divisors)
Это просто получает второй до последнего делитель,
n
затем берет его максимум и-1
. Вторым по порядку элементом в массиве с менее чем двумя элементами являетсяnil
иMax[-1, nil]
есть-1
.@
просто векторизует эту функцию, применяя ее к каждому атому.источник
Wolfram Language (Mathematica) , 33 байта
Попробуйте онлайн!
источник
R +
numbers
,8879 байтСпасибо за комментарии за некоторые советы, в основном о том, как делать представления.
Использует произведение всех простых факторов, кроме наименьшего, и тот факт, что произведение элементов пустого вектора определено как
1
.Попробуйте онлайн!
источник
library
вызов и использоватьnumbers::primeFactors
напрямую.Брахилог , 10 байт
Попробуйте онлайн!
Следующее объяснение в основном сформулировано для краткости и не совсем точно отражает декларативный характер Брахилога.
Я решил, что буду изучать Brachylog, чтобы я мог немного поиграть с кодовым гольфом, в то же время надеясь изучить некоторые особенности реального Пролога с помощью осмоса, и я до сих пор наслаждаюсь им, даже если я не совсем уверен, как символы управления выполнением работы.
источник
.∨
вместо|∧
(я полагаю, вы забыли.
), но это тот же счетчик байтов. Добро пожаловать в PPCG (и Brachylog, что более важно: р), кстати!Stax ,
1413 байтЗапустите и отладьте его
Пояснение (без упаковки):
Псевдокод внутри карты:
источник
Pyth, 12 байт
Попробуй здесь
объяснение
источник
J , 14 байт
Попробуйте онлайн!
Для каждого числа n возьмите максимум (n, 1).
Добавьте отрицательный номер к списку его простых факторов (пустой список для 1) и разделите число на первый элемент в списке.
Также 14 байтов
Попробуйте онлайн!
Разделите каждое число на первый из его основных факторов. 0 вызывает ошибку домена
q:
, и мы ищем 0-й элемент в пустом списке для 1 - это тоже ошибка. Для любого числа с ошибками верните -1.источник
Japt ,
14118 байтПопробуйте онлайн!
Скинули эти три надоедливых байта благодаря Шегги .
источник
k
возвращает основные факторыN
- так что это становится 8 байтов:®/k v)ªÉ
JavaScript (Node.js) ,
6155 байт-6 байт благодаря @shaggy
Попробуйте онлайн!
Пояснение:
Это все еще для старого кода не обновили это.
ES5 дружественный, а также:
источник
Утилиты Bash + GNU, 49
объяснение
factor
читает входные номера из STDIN, по одному на строку и выводит в формате<input number>: <space-separated list of prime factors (ascending)>
sed
обрабатывает это следующим образом:/:$/c-1
Входные числа 0 и 1 не имеют простых множителей и заменяются на-1
/: \w+$/c1
Числа с одним простым множителем (сами по себе) являются простыми. Замените их на1
s%: %/%
Заменить:
на/
. Это создает арифметическое выражение для деления (не простого) входного числа на его наименьший простой множитель, чтобы получить наибольший коэффициентy/ /#/
Удалить список других (ненужных) факторов (закомментировав)bc
Арифметическая оценка и отображениеПопробуйте онлайн!
источник
-r
, и для первых двухs
вы можете использовать/regex/cvalue
для игры в гольф байт, дальнейшее упрощение этого регулярного выражения может сэкономить больше, и вы можете сохранить байт в последних двух регулярных выражениях, только заменив их:
на/
, и затем комментируя нежелательную часть, вот так, tio.run/##JYlBCoMwFET3c4qABhdSfuZ/…Python 2 ,
6159 байтПопробуйте онлайн!
улучшения
источник
JavaScript (Node.js) , 37 байт
Попробуйте онлайн!
Рекурсивное переполнение стека для большого ввода
JavaScript (Node.js) , 41 байт
Попробуйте онлайн!
источник
Пари / ГП , 37 байт
Попробуйте онлайн!
источник
Ракетка , 105 байт
Попробуйте онлайн!
источник
Befunge-98 (FBBI) , 39 байт
Попробуйте онлайн!
Заканчивается с
&
when there are no more numbers. This causes the program to stall for 60 seconds until TIO ends the program. This is unavoidable for Befunge-98, at least on TIO because both interpreters do this. After hitting play, you can stop the program after a bit in order to see what would be output if you did wait the minute.По сути, для каждого нового числа, если оно равно 0, оно превращает его в 1. Затем оно помещает -1 в стек, за которым следует число, которое начинается с 1 и продолжается до тех пор, пока не достигнет входного числа, в этом случае печатает второе число в стеке (-1 для ввода 0 или 1 и самый высокий коэффициент для других). Каждый раз в цикле мы добавляем значение итератора в стек позади него if (
input % iterator == 0
). Это означает, что когда мы попадаем на вход, нам просто нужно выбросить итератор и напечатать. Затем мы очищаем стекn
and return to the read input function.Я могу расширить объяснение позже, посмотрим ...
источник
Retina 0.8.2, 33 bytes
Try it online! Link includes those test cases that aren't too slow. Explanation:
Loop over each input number.
Special-case 0 and 1.
Convert to unary (doesn't affect -1).
Replace each number with its largest proper factor in decimal.
источник
tinylisp, 75 bytes
Try it online! (Contains 4 extra bytes to give the anonymous function a name so we can call it in the footer.)
Ungolfed/explanation
Observe that returning 1 for primen and the largest factor less than n for composite n can be combined into returning n/p where p is the smallest prime factor of n .
источник