var QUESTION_ID=80196,OVERRIDE_USER=20260;function answersUrl(e){return"https://api.stackexchange.com/2.2/questions/80196/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>
/
y\
. Tal vez para otra pregunta ...Respuestas:
Caracoles , 19 bytes
La especificación para este se puede implementar lo más literalmente posible, sin necesidad de pensar.
fuente
udlr
establece la dirección del caracol en arriba / abajo / izquierda / derecha.|
funciona como lo hace en expresiones regulares y)
no necesita un paréntesis abierto coincidente. Entonces, el código se traduce directamente como "Encuentra unov<>^
y establece la dirección de manera apropiada, luego trata de encontrar una O en esa dirección".,
es como la*
expresión regular.Retina,
565242383130 bytesGuardado 1 byte gracias a @ MartinBüttner
Abusa de las propiedades de los rectángulos. Requiere entrada para tener una nueva línea final.
Pruébalo en línea
Explicación
Esto funciona en tres partes:
>
<
^
yv
esto se debe a que la lógica^
y lav
realidad son las mismas, solo los personajes.Validar
<
Esto es simple:
Esto coincide con
O
, opcionalmente seguido por caracteres que no son de nueva línea, luego un<
Validar
>
Esto es muy similar a la forma anterior, excepto al revés. Primero
>
se empareja a, luego elO
Validar
^
yv
Esto fue difícil de jugar al golf y la publicidad de la entrada siempre fue válida. Primero, hacemos coincidir si es
v
o unO
:Si es un
^
, el primer personaje que se encuentre debe ser unO
. Entonces, esto coincide con el primer personaje que coincide. A continuación contamos la cantidad de.
s que lo siguen hasta la nueva línea:A continuación, esto puede ir en dos partes, cubriré la primera:
Entonces, primero, hacemos coincidir hasta lo siguiente
O
, usando:Esto opcionalmente hace coincidir todos los no
O
caracteres hasta queO
se encuentra un, si esto es exitoso, entonces continúa ... si no, entonces sucede lo siguiente ...Ahora, intenta encontrar el
^
uso:^
es un carácter especial en regex, por lo que debe escaparse.[^^]
coincide con todos los caracteres excepto^
, esto funciona igual que el anterior, si esto tiene éxito, entonces sucede lo siguiente ...Entonces, ahora, uno de los anteriores ha coincidido con éxito,
\1
comprueba y ve si el grupo de captura de antes(.*\n)
, este grupo de captura almacenó la cantidad de.
s que había después dev
oO
antes, por lo que ahora\1
solo comprueba si la cantidad de puntos en el mismo.fuente
¶
lugar de\n
(Retina puede manejar el código fuente en ISO 8859-1.)¶
solo estaba \ n en reemplazos, ¡gracias por el consejo!¶
todas partes, antes de realizar cualquier análisis posterior.Java (no regex),
413412246242212211209198 bytesCompetir en desafíos de golf con Java tiene menos sentido que participar en la carrera de Fórmula 1 en bicicleta, pero no siempre estoy pensando lo que tiene sentido.
Aquí está mi solución Java extremadamente larga versión Golfed
y sin golf
Parece que todo mi concepto estaba mal, aquí está mi solución más corta
y versión sin golf
EDITAR Reescribí el código para buscar 'O', ahora contiene un solo bucle, es mucho más corto, y también utilicé la sugerencia de @Frozn para reemplazar algunos de los caracteres con sus valores ascii.
Como resultado, otros 30 bytes muerden el polvo.
Otra sugerencia de @Frozn, y estamos un par de bytes más cerca de la solución Python
Otra reescritura suelta un bucle y combina dos sentencias if
fuente
return
y(
para guardar un byte. El espacio no es necesario cuando el valor de retorno está entre paréntesis (o comillas para cadenas). Fuente de los consejos de golf de código Java'O' = 79
,'>' = 62
,'<' = 60
,'^' = 94
. Para 'v' es 118 pero eso no acorta el código.MATL (sin expresión regular),
26252422 bytesPruébalo en línea!
Versión modificada para todos los casos de prueba.
Explicación
fuente
J
'O'
, no número0
. El código ASCII para la carta'O'
es79
CJam (sin expresiones regulares), 25
Las versiones anteriores estaban mal, esto tendrá que hacer por ahora:
Pruébalo en línea
Explicación:
Probé algunas fórmulas matemáticas para distinguir entre cadenas "buenas" y "malas", y para cada tipo de fórmula intenté conectar varios números. Terminé con lo
HbI%
anterior.Las cadenas "buenas" para la cuadrícula original son "> O" y "O <" y dan el resultado 17
cadenas "buenas" para la cuadrícula transpuesta son "vO" y "O ^" y dan el resultado 15
"malas" las cadenas para ambas cuadrículas son: ">", "<", "^", "v", "O", "", "O>", "Ov", "<O", "^ O" y dan los resultados 8, 6, 4, 10, 7, 0, 1, 3, 1, 3
fuente
Python 3 (sin expresiones regulares), 184 bytes.
¡Hurra por hackear eval!
fuente
TSQL (sqlserver 2012) (sin expresiones regulares), 358 bytes
Tuve que usar el cambio de línea funky en la declaración para obligar a la versión en línea a ejecutarlo (la asignación de valores a las variables de entrada no afecta el cálculo de la longitud de todos modos)
Pruébalo en línea!
fuente
Pyth, 43 bytes
Demo en vivo.
fuente
JavaScript (ES6), 78 bytes
Regexp por supuesto. Resultó ser similar en principio a la respuesta de Ruby.
fuente
Ruby,
715554 bytesSolución Regex, lo que significa que probablemente Retina o Perl la superen fácilmente.
Devuelve un número de índice (verdadero) si hay una coincidencia.
Ahora con un truco similar a la respuesta de Retina @Downgoat, haciendo coincidir las vigas hacia abajo y hacia arriba al mismo tiempo.
fuente
JavaScript (ES6) (sin expresión regular), 126 bytes
Donde
\n
representa el carácter literal de nueva línea.fuente
Clojure (sin expresiones regulares), 293 bytes
No se siente bien Solución directa, encontrar el índice de los caracteres correspondientes y calcular si están en la misma línea.
Puedes probarlo aquí https://ideone.com/m4f2ra
fuente
Python (sin expresiones regulares), 105 bytes
devuelve verdadero o falso
Primero, tiras '.' y '\ n' desde los extremos para que los caracteres de interés, '0 <> v ^', sean el primer y el último carácter.
'>O<vO^'.find(t[0]+t[-1])//3
- comprueba si los caracteres son un arreglo potencialmente válido. Evalúa a 0 para '> O' o 'O <', a 1 para 'vO' o 'O ^', y a -1 para cualquier otra cosa.'\n'in t
- comprueba si los caracteres están en filas diferentes,len(t)%(s.find('\n')+1)!=1
- comprueba si están en columnas diferentes, y1
- es el valor predeterminadoLos
not
invierte el resultado seleccionado de la lista, por lo que lareturn
expresión es equivalente a:fuente
Julia (sin expresiones regulares), 98
Función que opera en una matriz de caracteres, normalizando por rotación, eliminando filas y columnas que contienen solo puntos mediante indexación de rango y finalmente verificando la ubicación de 'O' teniendo en cuenta si el resto b es un vector de columna o fila usando la multiplicación de matrices.
Pruébalo en línea
fuente
Python 2 (sin expresión regular), 268 bytes
Los valores de verdad y falsedad devueltos por la función son 1 y 0, respectivamente.
Todavía no he tenido la oportunidad de jugar al golf. Honestamente, no tengo muchas esperanzas para este ...
Cualquier sugerencia sería muy apreciada!
fuente
C # (sin expresión regular), 282 bytes
Funciona como la versión de Java, pero se transpila y reduce
Ampliado (Explicación incluida):
fuente
C (ANSI) (sin expresión regular), 237 bytes
Expandido:
Creo que tomé un enfoque decentemente diferente aquí en comparación con las implementaciones de Java o C #. Obtuve coordenadas de la 'O' y la flecha ((c, d) y (x, y)) y luego las comparé para ver si la flecha apuntaba en la dirección correcta.
Devuelve 0 si es falso y 1 si es verdadero
fuente
Grime v0.1 , 31 bytes
No es una solución muy interesante. Imprime
1
para casos verdaderos y0
para casos falsos. Pruébalo en línea!Explicación
Simplemente buscamos en el rectángulo de entrada un patrón de tamaño mínimo (n × 1 o 1 × n) que contenga el láser y el objetivo en el orden correcto. La
n`
bandera hace que el intérprete imprima el número de coincidencias, de las cuales siempre habrá como máximo una. El resto de la línea consta de cuatro patrones separados por|
caracteres, lo que significa un OR lógico: un rectángulo coincide si coincide con uno de los patrones. Los patrones funcionan de la siguiente manera:fuente