Desafío:
Dada una matriz de números enteros no negativos en el rango de0 to Infinity
, Verifique si todos son números primos o no. (También puede tomar la entrada como una cadena si lo desea)
Entrada:
Entrada: una matriz de números
Salida: la matriz con cada elemento reemplazado por uno de estos:
-1 -----> If 0, 1
1 -----> If it is a prime number greater than 1
the highest factor -----> If that number is not prime
Devuelve -1 (0, 1), 1 (para números primos> = 2) o el factor más alto del número dado (para números no primos)
Ejemplos:
[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:
La entrada siempre será válida, es decir, consistirá solo en números y no se probarán los decimales. La matriz puede estar vacía, de ser así, devuelva la matriz vacía.
Restricción:
Este es el código de golf, por lo que gana el código más corto en bytes para cada idioma.
LeaderBoard:
Aquí hay un fragmento de pila para generar una tabla de clasificación regular y una descripción general de los ganadores por idioma.
Para asegurarse de que su respuesta se muestre, comience con un título, usando la siguiente plantilla de Markdown:
# Language Name, N bytes
¿Dónde N
está el tamaño de su envío? Si mejora su puntaje, puede mantener los puntajes antiguos en el título, tachándolos. Por ejemplo:
# Ruby, <s>104</s> <s>101</s> 96 bytes
Si desea incluir varios números en su encabezado (por ejemplo, porque su puntaje es la suma de dos archivos o desea enumerar las penalizaciones de la bandera del intérprete por separado), asegúrese de que el puntaje real sea el último número en el encabezado:
# Perl, 43 + 2 (-p flag) = 45 bytes
También puede hacer que el nombre del idioma sea un enlace que luego aparecerá en el fragmento de la tabla de clasificación:
# [><>](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>
Respuestas:
Gelatina ,
76 bytesUn enlace monádico que acepta una lista de enteros no negativos y retiene una lista de enteros mayores o iguales a -1.
Pruébalo en línea!
¿Cómo?
Tenga en cuenta que:
ÆḌ
produce una lista de divisores propios en orden ascendenteṪ
, a una lista vacía, se obtiene cerofuente
Jalea ,
98 bytesGuardado 1 byte gracias a @Dennis
Pruébalo en línea! o ejecutar todos los casos de prueba
Comentado
Aprovechamos el hecho de que ambos
nan
y nosinf
convertimos0
en Jelly cuando NO se les aplica un bit a bit.fuente
~~
.:ÆfṂ€$~~
guarda un byte al eliminar el enlace auxiliar.$
es lo que estaba buscando :) ¡Gracias!R,
6862 bytes¡Una solución que usa solo base R, sin bibliotecas! Gracias a Giuseppe por jugar al golf 6 bytes.
Utiliza
scan
para leer en una lista de números separados por espacios,%%
para identificar cuáles son los factores.v
luego contiene un vector de todos los factores en orden ascendente (incluidos 1 yn). Esto tiene la buena propiedad de que cuandorev
escribimosv
, el número que queremos estará en segundo lugar, evitando una llamada costosalength
otail
(sin
era primo,v
contienen 1
, de lo contrario contienen (factors in descending order) 1
).Ejemplo de salida (enlace TIO aquí ):
Si cree que una lista no es un tipo de retorno aceptable, entonces intercambiar
Map
porsapply
y añadir 3 bytes.fuente
!
05AB1E ,
1198 bytes-3 bytes gracias a @Emigna , cambiando
©d1-®+
aDd<+
y۬ۈ
paraε¨à
.Solo mi segunda respuesta 05AB1E,
por lo que definitivamente se puede jugar al golf.Pruébalo en línea.
Explicación:
fuente
Dd<+
debería funcionar en lugar de©d1-®+
. Tampoco necesitas elï
ya que todavía son ints. Sin embargo, podría tenerlo en el pie de página para una salida más bonita.1-
lugar de<
fue bastante estúpido ... ¡Gracias por el enD
lugar de©...®
! Y de hecho he puestoï
el pie de página ahora.Ñε¨àDd<+
J , 21 bytes
Pruébalo en línea!
Explicación:
(>&1)"0
¿Es cada número mayor que 1?@.
si no, regrese_1:
(%{.@q:)
si es 2 o mayor, divida%
el número por el primero{.
de los factores primosq:
fuente
Japt , 6 bytes
Después de jugar al golf, terminó siendo casi idéntico y tan corto como la solución de Jonathan.
Intentalo
Explicación
fuente
-m
Python 3 , 62 bytes
Pruébalo en línea!
Para
0
y1
range(1,n)
está vacío, por lo tanto, el código se evalúa comomax([]+[-1]) = -1
. Para los números primos, el único divisor en [1, n) es1
, que es la salida deseada.Coco , 50 bytes
Pruébalo en línea!
fuente
Java 8,
10510387 bytesModifica la matriz de entrada en lugar de devolver una nueva para guardar bytes.
Pruébalo en línea.
Explicación:
fuente
Haskell,
5249 bytesPruébalo en línea!
fuente
Casco , 8 bytes
Pruébalo en línea!
Explicación
fuente
Adjunto , 23 bytes
Pruébalo en línea!
29 bytes, sin puntos:
@(Max&-1@Last@ProperDivisors)
24 bytes, también sin puntos:
@(Max&-1@`@&-2@Divisors)
Esto simplemente obtiene el penúltimo divisor de,
n
luego toma el máximo de él y-1
. El penúltimo elemento de una matriz con menos de dos elementos esnil
yMax[-1, nil]
es-1
.@
simplemente vectoriza esta función, haciendo que se aplique a cada átomo.fuente
Wolfram Language (Mathematica) , 33 bytes
Pruébalo en línea!
fuente
R +
numbers
,8879 bytesGracias a los comentarios por algunos consejos principalmente sobre cómo hacer presentaciones.
Utiliza el producto de todos los factores primos, excepto el más pequeño, y el hecho de que el producto de los elementos de un vector vacío se define como ser
1
.Pruébalo en línea!
fuente
library
llamada y usarnumbers::primeFactors
directamente.Brachylog , 10 bytes
Pruébalo en línea!
La siguiente explicación se formula principalmente en aras de la brevedad, y no refleja con precisión la naturaleza declarativa de Brachylog.
Decidí que aprendería Brachylog para poder divertirme con el golf de código mientras esperaba aprender algo del comportamiento de Prolog real a través de la ósmosis, y realmente lo estoy disfrutando hasta ahora, incluso si no estoy completamente seguro de cómo Los personajes de control de ejecución funcionan.
fuente
.∨
lugar de|∧
(supongo que olvidó el.
), pero es el mismo conteo de bytes. Bienvenido a PPCG (y Brachylog más importante: p) por cierto.Stax ,
1413 bytesEjecutar y depurarlo
Explicación (sin embalaje):
Pseudocódigo dentro del mapa:
fuente
Pyth, 12 bytes
Pruébalo aquí
Explicación
fuente
J , 14 bytes
Pruébalo en línea!
Por cada número n tome el máximo de (n, 1) en su lugar.
Agregue el número negado a la lista de sus factores primos (lista vacía para 1) y divida el número por el primer elemento de la lista.
También 14 bytes
Pruébalo en línea!
Divide cada número por el primero de sus factores primos. 0 genera un error de dominio con
q:
, y buscamos el elemento 0 en una lista vacía para 1; eso también es un error. Para cualquier número que tenga errores, devuelve -1.fuente
Japt ,
14118 bytesPruébalo en línea!
Afeitó esos tres molestos bytes gracias a Shaggy .
fuente
k
devuelve los factores primos deN
, por lo que esto se convierte en 8 bytes:®/k v)ªÉ
JavaScript (Node.js) ,
6155 bytes-6 bytes gracias a @shaggy
Pruébalo en línea!
Explicación
Esto todavía es para el código antiguo que no ha actualizado esto.
ES5 amigable también:
fuente
Bash + utilidades GNU, 49
Explicación
factor
lee números de entrada de STDIN, uno por línea y salidas en el formato<input number>: <space-separated list of prime factors (ascending)>
sed
procesa esto de la siguiente manera:/:$/c-1
Los números de entrada 0 y 1 no tienen factores primos y se reemplazan con-1
/: \w+$/c1
Los números con un factor primo (ellos mismos) son primos. Reemplace estos con1
s%: %/%
Reemplazar:
con/
. Esto crea una expresión aritmética para dividir el número de entrada (no primo) por su factor primo más pequeño para dar el factor más grandey/ /#/
Elimine la lista de otros factores (innecesarios) (comentando)bc
Evaluar y mostrar aritméticamentePruébalo en línea!
fuente
-r
, y durante los dos primeross
puede usar/regex/cvalue
para jugar golf en un byte, simplificar aún más esta expresión regular puede ahorrar más, y puede guardar un byte en las últimas dos expresiones regulares reemplazando solo por:
el/
, y luego comentando la parte no deseada, así, tio.run/##JYlBCoMwFET3c4qABhdSfuZ/…Python 2 ,
6159 bytesPruébalo en línea!
Mejoras
fuente
JavaScript (Node.js) , 37 bytes
Pruébalo en línea!
Recursivo, desbordamiento de pila para entrada grande
JavaScript (Node.js) , 41 bytes
Pruébalo en línea!
fuente
Pari / GP , 37 bytes
Pruébalo en línea!
fuente
Raqueta , 105 bytes
Pruébalo en línea!
fuente
Befunge-98 (FBBI) , 39 bytes
Pruébalo en línea!
Termina con el
&
cuando no hay más números. Esto hace que el programa se detenga durante 60 segundos hasta que TIO finalice el programa. Esto es inevitable para Befunge-98, al menos en TIO porque ambos intérpretes hacen esto. Después de presionar play, puede detener el programa después de un momento para ver qué se generaría si esperara el minuto.Esencialmente, para cada número nuevo, si es 0, lo convierte en 1. Luego pone un -1 en la pila seguido de un número que comienza desde 1 y cuenta hasta que alcanza el número de entrada, en cuyo caso imprime el segundo número en la pila (-1 para una entrada de 0 o 1, y el factor más alto para otros). Cada vez a través del ciclo, agregamos el valor del iterador a la pila detrás de él if (
input % iterator == 0
). Esto significa que cuando lleguemos a la entrada, solo tenemos que tirar el iterador e imprimir. Luego, limpiamos la pila conn
y volvemos a la función de entrada de lectura.Puedo ampliar la explicación más tarde, ya veremos ...
fuente
Retina 0.8.2 , 33 bytes
Pruébalo en línea! Link incluye aquellos casos de prueba que no son demasiado lentos. Explicación:
Pase sobre cada número de entrada.
Caso especial 0 y 1.
Convierte a unario (no afecta a -1).
Reemplace cada número con su mayor factor propio en decimal.
fuente
tinylisp , 75 bytes
Pruébalo en línea! (Contiene 4 bytes adicionales para dar un nombre a la función anónima para que podamos llamarla en el pie de página).
Ungolfed / explicación
Observe que devolver 1 para primonorte y el mayor factor menor que norte para composite norte se puede combinar para volver n / p dónde pag es el factor primo más pequeño de norte .
fuente