Este rompecabezas se deriva del rompecabezas "Corazón de la ciudad" de CodinGame SamSi.
Descripción
Decides dar un paseo por una ciudad n
* de n
baldosas e ir al centro de baldosas. Todos los edificios son infinitamente pequeños, pero tienes una excelente visión y puedes ver todo de cerca y de lejos.
Restricciones
n
siempre es extraño
Puedes ver cualquier edificio que no esté directamente obstruido por otro
Tarea
Marque cada edificio visible con *
. El edificio es visible si no está bloqueado por otro edificio en la misma línea de visión.
En otras palabras, si @
es el origen, el edificio es visible si la coordenada xy la coordenada y son primos entre sí.
Ejemplo de entrada y salida
Entrada:
7
Salida:
** **
* * * *
*******
*@*
*******
* * * *
** **
*
es un edificio visible,
es un edificio invisible y
@
es donde estás.
Puntuación
Recuerde, este es el código de golf , por lo que gana la respuesta con la menor cantidad de bytes.
var QUESTION_ID=91394,OVERRIDE_USER=59057;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}*{font-family:"Helvetica",sans-serif}
<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:
Excel-VBA, (47 * n ^ 2) bytes y 121 bytes
Instrucción:
Excel resulta muy útil para este desafío y hay una combinación de fórmulas de Excel para obtener el patrón exacto como los OP que se muestran para una entrada determinada. Afortunadamente para mí, Excel tiene una función GCD: una fórmula incorporada para devolver el máximo divisor común de enteros positivos, por lo que no tengo que crear uno con el algoritmo euclidiano . ¿Por qué necesito una función GCD aquí? Es porque dos números se llaman coprimos, si su máximo común divisor es igual a 1 . Los números aquí son las coordenadas de la posición
x
yy
, en relación con el origen@
,. Aquí está la fórmula de Exceldonde
m
es el nombre de una celda de referencia y es igual al entero más pequeño mayor o igual quen/2
, ceiling (n/2
), donden
es el nombre de una celda de referencia para la entrada. Pegue esta fórmula en la celda A1, luego arrastre todo el rango con el tamañon x n
. La longitud de la fórmula es de 47 bytes, pero debe replicarlan x n
veces, por lo que es igual a (47 * n ^ 2) bytes.Para automatizar el proceso y reducir el uso de caracteres, podemos usar VBA ya que está integrado con Excel. Lo primero es lo primero, configure una hoja de cálculo Excel como la siguiente:
Luego ponga el siguiente código en la ventana Inmediato
Ungolfed el código:
Explicación:
n = [A1]
: Establezca n como entrada y asigne el valor de la celda A1 a n.m = Int(n / 2) + 1
: Forma personalizada de devolver la misma salida que la función de techo para el argumenton/2
.Range("A1", Cells(n, n)) = "=IF(GCD(ABS(COLUMN()-" & m & "),ABS(" & m & "-ROW()))=1,""*"" ,"""")"
: Pegue la fórmula anterior en cada celda del rango con tamañon x n
comience desde la celda A1.Cells(m, m) = "@"
: Asigna el centro del rango con un personaje@
.Salida:
La figura a continuación es la salida de ejemplo para la entrada
n = 11
Establezco el color de fuente en rojo para que se vea más atractivo. Aun mejor
fuente
n x n
varias veces, por lo que es igual a (47 * n ^ 2) bytes " en mi respuesta. Vea también la discusión en la sección de comentarios de la respuesta de ugoren . Espero que aclare las cosas.121 bytes
ya que solo el programa mismo contribuye al recuento de bytes. En el caso al que hizo referencia, la fuente debe copiarse y pegarse en cada celda individual, mientras que en su solución todo se hace mediante programación.Jalea , 16 bytes
Pruébalo en línea!
Cómo funciona
fuente
J, 24 bytes
Un puerto de la respuesta de Dennis en Jelly .
fuente
Perl 6 , 77 o 74 bytes
Programa completo (77 bytes) :
( pruébalo en línea )
Si es aceptable devolver el resultado de un lambda como una lista de listas de cadenas de 1 carácter (74 bytes) :
( pruébalo en línea )
fuente
SILOS , 236 bytes
Pruébalo en línea!
Puerto de mi respuesta en C .
fuente
C,
147145135133 bytes2 bytes gracias a Dennis.
10 bytes gracias a Arnauld.
2 bytes gracias a H Walters.
Ideone it!
Consejos de golf bienvenidos como siempre.
fuente
x
) y hace enx=
lugar dereturn
en lag()
función, creo que puede hacer{g(i,j-m);putchar(x?x*x-1?32:42:64);}
y guardar 7 bytes. (O 8 bytes si también elimina el salto de línea. ¿Es realmente necesario?)m,i,j
dos veces, ¿verdad?++j
a++j%n
(+2 bytes) yj-m
aj%n-m
(+2 bytes). Luego puede eliminar,j%=n
(-5 bytes).Javascript (ES6),
114113105 bytesEsto comenzó como un puerto de la versión C de Leaky Nun y luego se optimizó aún más. La mayoría de las optimizaciones son específicas de JS.
Ejemplo:
fuente
Pyth, 40 bytes
Soy muy nuevo en Pyth, por lo que es probable que esto pueda jugarse más.
Pruébalo en línea
Cómo funciona
fuente
GolfScript,
9883 bytesPruébalo en línea!
Entrada = 11
fuente
APL (Dyalog Classic) , 23 bytes
Pruébalo en línea!
fuente