Desafio:
Dada uma matriz de números inteiros não negativos no intervalo de0 to Infinity
, verifique se todos são primos ou não. (Você pode receber a entrada como uma string também, se desejar)
Entrada:
Entrada: uma matriz de números
Saída: a matriz com todos os elementos substituídos por um destes:
-1 -----> If 0, 1
1 -----> If it is a prime number greater than 1
the highest factor -----> If that number is not prime
Retorne -1 (0, 1), 1 (para números primos> = 2) ou o fator mais alto do número fornecido (para números não primos)
Exemplos:
[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]
Nota:
A entrada sempre será válida, ou seja, consistirá apenas de números e decimais não testados. A matriz pode estar vazia; nesse caso, retorne a matriz vazia.
Restrição:
Este é o código-golfe, pelo que o código mais curto em bytes para cada idioma vence.
Entre os melhores :
Aqui está um snippet de pilha para gerar uma classificação regular e uma visão geral dos vencedores por idioma.
Para garantir que sua resposta seja exibida, inicie-a com um título, usando o seguinte modelo de remarcação:
# Language Name, N bytes
onde N
está o tamanho do seu envio. Se você melhorar sua pontuação, poderá manter as pontuações antigas no título, identificando-as. Por exemplo:
# Ruby, <s>104</s> <s>101</s> 96 bytes
Se você quiser incluir vários números no cabeçalho (por exemplo, porque sua pontuação é a soma de dois arquivos ou você deseja listar as penalidades do sinalizador de intérpretes separadamente), verifique se a pontuação real é o último número no cabeçalho:
# Perl, 43 + 2 (-p flag) = 45 bytes
Você também pode transformar o nome do idioma em um link que será exibido no snippet do placar de líderes:
# [><>](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>
Respostas:
Geléia ,
76 bytesUm link monádico que aceita uma lista de números inteiros não negativos e retura uma lista de números inteiros maior ou igual a -1.
Experimente online!
Quão?
Observe que:
ÆḌ
produz uma lista de divisores adequados em ordem crescenteṪ
em uma lista vazia gera zerofonte
Geléia ,
98 bytesGuardado 1 byte graças a @Dennis
Experimente online! ou execute todos os casos de teste
Comentado
Aproveitamos o fato de que ambos
nan
e nosinf
tornamos0
em Jelly quando um NOT bit a bit é aplicado a eles.fonte
~~
.:ÆfṂ€$~~
salva um byte, eliminando o link auxiliar.$
é o que eu estava procurando. :) Obrigado!R,
68bytes de 62Uma solução usando apenas a base R, sem bibliotecas! Agradecimentos a Giuseppe por jogar fora 6 bytes.
Usa
scan
para ler em uma lista de números separados por espaço,%%
para identificar quais são os fatores.v
então contém um vetor de todos os fatores em ordem crescente (incluindo 1 e n). Isso tem a propriedade legal de que, quandorev
invertemosv
, o número que queremos estará em segundo lugar, evitando uma ligação cara alength
outail
(sen
era primo,v
contémn 1
, ou então contémn (factors in descending order) 1
).Exemplo de saída (link TIO aqui ):
Se você acha que uma lista não é um tipo de retorno aceitável, troque
Map
porsapply
e adicione 3 bytes.fonte
!
05AB1E ,
1198 bytes-3 bytes graças a @Emigna , alterando
©d1-®+
paraDd<+
e۬ۈ
paraε¨à
.Somente minha segunda resposta 05AB1E,
então definitivamente pode serjogada no golfe .Experimente online.
Explicação:
fonte
Dd<+
deve funcionar em vez de©d1-®+
. Você também não precisa doï
como eles ainda são ints. Você pode colocá-lo no rodapé para obter uma melhor aparência, no entanto.1-
vez de<
ser muito estúpido .. Obrigado pelo emD
vez de©...®
! E eu realmente coloqueiï
o rodapé agora.Ñε¨àDd<+
J , 21 bytes
Experimente online!
Explicação:
(>&1)"0
cada número é maior que 1?@.
caso contrário, retorne_1:
(%{.@q:)
se for 2 ou maior, divida%
o número pelo primeiro{.
dos fatores primosq:
fonte
Japonês , 6 bytes
Depois de jogar golfe, acabou sendo quase idêntico à solução de Jonathan e tão curta quanto ela.
Tente
Explicação
fonte
-m
Python 3 , 62 bytes
Experimente online!
Para
0
e1
range(1,n)
está vazio, o código é avaliado comomax([]+[-1]) = -1
. Para números primos, o único divisor em [1, n) é1
qual é a saída desejada.Coco , 50 bytes
Experimente online!
fonte
Java 8,
10510387 bytesModifica a matriz de entrada em vez de retornar uma nova para salvar bytes.
Experimente online.
Explicação:
fonte
Haskell,
5249 bytesExperimente online!
fonte
Casca , 8 bytes
Experimente online!
Explicação
fonte
Anexo , 23 bytes
Experimente online!
29 bytes, sem ponto:
@(Max&-1@Last@ProperDivisors)
24 bytes, também sem ponto:
@(Max&-1@`@&-2@Divisors)
Isso simplesmente obtém o penúltimo divisor de
n
então leva o máximo dele e-1
. O penúltimo elemento em uma matriz com menos de dois elementos énil
eMax[-1, nil]
é-1
.@
simplesmente vectoriza essa função, aplicando-a a cada átomo.fonte
Wolfram Language (Mathematica) , 33 bytes
Experimente online!
fonte
R +
numbers
,88bytesObrigado aos comentários de alguns conselhos, principalmente sobre como fazer envios.
Usa o produto de todos os fatores primos, exceto o menor, e o fato de que o produto dos elementos de um vetor vazio é definido como sendo
1
.Experimente online!
fonte
library
chamada e usarnumbers::primeFactors
diretamente.Braquilog , 10 bytes
Experimente online!
A explicação a seguir é redigida principalmente de modo imperativo por questões de brevidade e não reflete com precisão a natureza declarativa de Brachylog.
Decidi aprender o Brachylog para me divertir um pouco com o código-golfe, na esperança de aprender um pouco do comportamento do Prolog real por osmose, e estou gostando muito até agora, mesmo que não tenha certeza de como caracteres de controle de execução funcionam.
fonte
.∨
vez de|∧
(acho que você esqueceu.
), mas é a mesma contagem de bytes. Bem-vindo ao PPCG (e Brachylog, mais importante: p) por sinal!Stax ,
1413 bytesExecute e depure
Explicação (sem embalagem):
Pseudocódigo dentro do mapa:
fonte
Pitão, 12 bytes
Experimente aqui
Explicação
fonte
J , 14 bytes
Experimente online!
Para cada número n, use o máximo de (n, 1).
Anexe o número negado à lista de seus fatores primos (lista vazia para 1) e divida o número pelo primeiro item da lista.
Também 14 bytes
Experimente online!
Divida cada número pelo primeiro de seus fatores primos. 0 gera um erro de domínio com
q:
, e procuramos o 0º item em uma lista vazia para 1 - isso também é um erro. Para qualquer número que erros, retorne -1.fonte
Japonês ,
14118 bytesExperimente online!
Raspou esses três bytes traquinas graças a Shaggy .
fonte
k
retorna as principais fatores deN
- de modo que este se torna 8 bytes:®/k v)ªÉ
JavaScript (Node.js) ,
6155 bytes-6 bytes graças a @shaggy
Experimente online!
Explicação:
Ainda é para código antigo que não atualizou isso.
ES5 amigável também:
fonte
Utilitários Bash + GNU, 49
Explicação
factor
lê os números de entrada do STDIN, um por linha e sai no formato<input number>: <space-separated list of prime factors (ascending)>
sed
processa da seguinte maneira:/:$/c-1
Os números de entrada 0 e 1 não possuem fatores primos e são substituídos por-1
/: \w+$/c1
Números com um fator primo (eles mesmos) são primos. Substitua-os por1
s%: %/%
Substitua:
por/
. Isso cria uma expressão aritmética para dividir o número de entrada (não primo) pelo menor fator primo para gerar o maior fatory/ /#/
Remova a lista de outros fatores (desnecessários) (comentando)bc
Avaliar e exibir aritmeticamenteExperimente online!
fonte
-r
, e para os dois primeiross
é que você pode usar/regex/cvalue
para golf um byte, simplificando esse regex ainda pode economizar mais, e você pode salvar um byte nos últimos dois regex de substituindo apenas o:
com o/
, e em seguida, comentando a parte indesejada, assim: tio.run/##JYlBCoMwFET3c4qABhdSfuZ/…Python 2 ,
6159 bytesExperimente online!
Melhorias
fonte
JavaScript (Node.js) , 37 bytes
Experimente online!
Excesso de pilha recursivo para entrada grande
JavaScript (Node.js) , 41 bytes
Experimente online!
fonte
Pari / GP , 37 bytes
Experimente online!
fonte
Raquete , 105 bytes
Experimente online!
fonte
Befunge-98 (FBBI) , 39 bytes
Experimente online!
Termina com
&
quando não houver mais números. Isso faz com que o programa pare por 60 segundos até que o TIO termine o programa. Isso é inevitável para o Befunge-98, pelo menos no TIO, porque ambos os intérpretes fazem isso. Depois de pressionar o play, você pode parar o programa depois de um pouco para ver o que seria produzido se você esperasse um minuto.Essencialmente, para cada novo número, se for 0, ele o transforma em 1. Em seguida, coloca -1 na pilha, seguido por um número que começa em 1 e conta até atingir o número de entrada; nesse caso, ele imprime o segundo número na pilha (-1 para uma entrada de 0 ou 1 e o fator mais alto para outras). Sempre que o loop é adicionado, adicionamos o valor do iterador à pilha atrás dele, se (
input % iterator == 0
). Isso significa que, quando chegamos à entrada, precisamos apenas jogar fora o iterador e imprimir. Em seguida, limpamos a pilha comn
e retornamos à função de entrada de leitura.Posso expandir a explicação mais tarde, veremos ...
fonte
Retina 0.8.2 , 33 bytes
Experimente online! O link inclui os casos de teste que não são muito lentos. Explicação:
Faça um loop sobre cada número de entrada.
Caso especial 0 e 1.
Converter em unário (não afeta -1).
Substitua cada número pelo maior fator adequado em decimal.
fonte
tinylisp , 75 bytes
Experimente online!(Contém 4 bytes extras para dar um nome à função anônima, para que possamos chamá-la no rodapé.)
Ungolfed / explicação
Observe que retornando 1 para primen e o maior fator menor que n para compósito n pode ser combinado em retornar n / p Onde p é o menor fator primordial de n .
fonte