var QUESTION_ID=86647,OVERRIDE_USER=48934;function answersUrl(e){return"http://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"http://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:
V ,
1514 bytesPruébalo en línea!
Una solución bastante sencilla. ¡El desafío perfecto para V!
Explicación:
Convenientemente, en función de cómo funciona la recursividad, esto se ejecutará una vez por cada cuidado.
fuente
Cheddar,
777267 bytesNo regex!
Me encanta esta respuesta ya que es una maravillosa demostración de las habilidades de Cheddar. Principalmente gracias a la función de reemplazo agregada por Conor. El PR to dev nunca se realizó, por lo que la función de reemplazo solo existe en esta rama (actualización: hice el PR y ahora está en la última rama beta con la que puede instalar
npm install -g cheddar-lang
)He encontrado una forma de jugar al golf, pero desafortunadamente una supervisión resulta en que esto suceda cuando las longitudes de los artículos no son las mismas:
Podría haber guardado muchos bytes usando expresiones regulares , y de hecho, acabo de hacer expresiones regulares para Cheddar ... el único problema es que no hay funciones de expresión regular: /
Explicación
Para obtener una mejor comprensión. Esto es lo que
.lines
vuelve para1^2
el
.turn
con gire esto:dentro:
Otro ejemplo que lo hará más claro:
se convierte en:
¿Por qué formatear?
Lo que
%-2s
está haciendo es bastante simple.%
especifica que estamos comenzando un "formato", o que una variable se insertará en esta cadena en este punto.-
significa rellenar a la derecha la cadena y2
es la longitud máxima. Por defecto, se rellena con espacios.s
solo especifica que es una cadena. Para ver lo que hace:fuente
turn
método para cuerdas?Perl, 21 + 1 = 22 bytes
Corre con la
-p
bandera. Reemplace♥
con unESC
byte sin formato (0x1b
) y↓
con una pestaña vertical (0x0b
).La pestaña vertical es idea de Martin Ender. ¡Ahorró dos bytes! Gracias.
fuente
JavaScript (ES6),
5655 bytesRegexps al rescate por supuesto. El primero reemplaza todos los caracteres con espacios, a menos que encuentre un símbolo de intercalación, en cuyo caso elimina el símbolo de intercalación y mantiene el carácter después de él. (Se garantiza que estos personajes existen). El segundo es el obvio para reemplazar cada símbolo y su siguiente personaje con un espacio.
Editar: se guardó 1 byte gracias a @Lynn que ideó una forma de reutilizar la cadena de reemplazo para el segundo reemplazo permitiendo que el reemplazo se asigne sobre una matriz de expresiones regulares.
fuente
s=>[/.(\^(.))?/g,/\^.(())/g].map(r=>s.replace(r,' $2'))
es un byte más corto.Python 3,
15710198858374 bytesEsta solución realiza un seguimiento de si el carácter anterior era
^
, luego decide si se debe enviar a la primera o segunda línea en función de eso.Salidas como una matriz de
['firstline', 'secondline']
.¡Guardado
1315 bytes gracias a @LeakyNun!¡Guardado 7 bytes gracias a @Joffan!
fuente
a=['','']
y concatenar' '
yc
directamente ena[l]
ya[~l]
?Python 2, 73 bytes
Sin expresiones regulares. Recuerda si el carácter anterior era
^
, y coloca el carácter actual en la línea superior o inferior en función de eso, y un espacio en el otro.fuente
Pyth, 17 bytes
Devuelve una matriz de 2 cadenas. (Prepárese
j
para unirlos con una nueva línea).Pruébalo en línea .
fuente
MATL , 18 bytes
Pruébalo en línea!
fuente
Ruby, 47 + 1 (
-n
bandera) = 48 bytesEjecútelo así:
ruby -ne 'puts$_.gsub(/\^(.)|./){$1||" "},gsub(/\^./," ")'
fuente
$_=$_.gsub(/\^(.)|./){$1||" "}+gsub(/\^./," ")
y en-p
lugar de-n
.+$/
significa que no va a guardar bytes.puts
lanza la nueva línea automáticamente cuando,
está presente entre argumentos.ruby -p ... <<< 'input'
pero estoy de acuerdo, si falta la nueva línea, ¡no es bueno! En realidad, podría haber agregado una nueva línea en mis pruebas antes ... ¡Estaba en el trabajo, así que no puedo verificar!gets
incluye la nueva línea final la mayor parte del tiempo, pero si canaliza en un archivo que no contiene la nueva línea final, entonces no aparecerá y la salida será incorrecta . Pruebe su códigoruby -p ... inputfile
ya que Ruby lo redirigegets
al archivo si es un argumento de línea de comando.Python (2),
766867 Bytes-5 Bytes gracias a @LeakyNun
-3 Bytes gracias a @ KevinLau-notKenny
-1 Byte gracias a @ValueInk
-0 bytes gracias a @DrGreenEggsandIronMan
Esta función Lambda anónima toma la cadena de entrada como su único argumento y devuelve las dos líneas de salida separadas por una nueva línea. Para llamarlo, dale un nombre escribiendo "f =" antes.
Regex bastante simple: la primera parte reemplaza lo siguiente por un espacio: cualquier personaje y un símbolo de
zanahoriao solo un char, pero solo si no hay ningún símbolo de interrogatorio antes de ellos. La segunda parte reemplaza cualquier símbolo de intercalación en la cadena y el carácter posterior por un espacio.fuente
from re import*
lambda i,s=re.sub:[s("(?<!\^).\^?"," ",i),s("\^."," ",i)]
por -1 byteConvexo, 24 bytes
Pruébalo en línea!
fuente
Retina, 16 bytes
Un puerto de mi respuesta Perl, señalado por Martin Ender. Reemplace
♥
por unESC
byte sin formato (0x1b
) y↓
con una pestaña vertical (0x0b
).fuente
shell + TeX + catdvi,
5143 bytesUsa
tex
para componer algunas matemáticas hermosas, y luego usacatdvi
para hacer una representación de texto. El comando head elimina la basura (numeración de páginas, nuevas líneas finales) que de otro modo estaría presente.Editar: ¿Por qué hacer lo largo, correcto, y redirigir a
/dev/null
cuando puede ignorar los efectos secundarios y escribir en un solo archivo de carta?Ejemplo
Entrada:
abc^d+ef^g + hijk^l - M^NO^P (Ag^+)
Salida de TeX (recortada a la ecuación): Salida final:
Suposiciones: Comience en un directorio vacío (o específicamente un directorio sin nombre que termine en "i"). La entrada es un argumento único para el script de shell. La entrada no es una cadena vacía.
Alguien me dice si esto es abuso de reglas, especialmente
catdvi
.fuente
Haskell,
745655 bytesDevuelve un par de cadenas. Ejemplo de uso:
unzip.g $ "abc^d+e:qf^g + hijk^l - M^NO^P: (Ag^+)"
->(" d g l N P + ","abc +e:qf + hijk - M O : (Ag )")
g
hace una lista de pares, donde el primer elemento es el carácter en la línea superior y el segundo elemento es el carácter en la línea inferior.unzip
lo convierte en un par de listas.Editar: @xnor sugirió
unzip
que ahorra 18 bytes. @Laikoni encontró un byte más para guardar. ¡Gracias!fuente
j=unzip.g
?g[]=[]
cong x=x
para guardar un byte.Perl, 35 bytes
Código de 34 bytes + 1 para
-p
Uso
Nota: Esto es exactamente lo mismo que la respuesta de Value Ink que espié después. Se eliminará si es necesario, ya que esto realmente no se agrega a la solución Ruby.
fuente
Java 8 lambda,
132128112 caracteresLa versión sin golf se ve así:
Se muestra como una matriz, simplemente verificando si hay un símbolo de intercalación y, de ser así, el siguiente carácter se colocará en la fila superior, de lo contrario, habrá un espacio.
Actualizaciones
Se reemplazaron los caracteres con sus valores ascii para guardar 4 caracteres.
Gracias a @LeakyLun por señalar el uso de una matriz de caracteres como entrada en su lugar.
También gracias a @KevinCruijssen por cambiar
int
achar
para guardar algunos personajes más.fuente
char[]
y usarfor(char c:i)
para ver si se puede reducir el conteo de bytes.i->{String[]r={"",""};for(char j=0,c;j<i.length;j++){c=i[j];r[0]+=c==94?i[++j]:32;r[1]+=c==94?32:c;}return r;}
con"abc^d+ef^g + hijk^l - M^NO^P (Ag^+)".toCharArray()
como entrada. ( Ideona de estos cambios. )Coco ,
12211496 bytesEditar:
826 bytes hacia abajo con la ayuda de Leaky Nun.Entonces, como aprendí hoy, python tiene un operador condicional ternario, o de hecho dos de ellos:
<true_expr> if <condition> else <false_expr>
y el<condition> and <true_expr> or <false_expr>
último viene con un carácter menos.Se puede idear una versión conforme a Python .
Primer intento:
Llamando con
f("abc^d+ef^g + hijk^l - M^NO^P (Ag^+)")
huellas¿Alguien ha intentado jugar al golf en coco todavía? Enriquece a Python con conceptos de programación más funcionales como la coincidencia de patrones y la concatenación de funciones (con
..
) utilizadas anteriormente. Como este es mi primer intento con coco, cualquier consejo sería apreciado.Esto definitivamente podría acortarse ya que cualquier código válido de Python también es válido y se han publicado respuestas más cortas de Python, sin embargo, intenté encontrar una solución puramente funcional.
fuente
x and y or z
) para reemplazar elcase
.s[0]=="^"
lugar dematch['^',c]+r in l
match['^',c]+r
cons[0]=="^"
, entoncesc
yr
ya no estoy vinculado. ¿Cómo ayudaría esto?s[1]
para reemplazarc
ys[2:]
para reemplazarr
.Dyalog APL, 34 bytes
Devuelve un vector de dos elementos con las dos líneas.
Ejecución de muestra (la uparrow en frente es formatear el vector de dos el. Para consumo humano):
fuente
PowerShell v2 +,
8883 bytesUn poco más largo que los otros, pero muestra un poco de magia de PowerShell y una lógica un poco diferente.
Esencialmente, el mismo concepto que las respuestas de Python: iteramos sobre la entrada carácter por carácter, recordamos si el anterior era un símbolo de intercalación (
$c
) y colocamos el carácter actual en el lugar apropiado. Sin embargo, la lógica y el método para determinar dónde emitir se manejan de manera un poco diferente, y sin una tupla o variables separadas: probamos si el carácter anterior era un símbolo de intercalación, y si es así, emite el carácter a la tubería y concatena un espacio en$b
. De lo contrario, verificamos si el carácter actual es un símbolo de intercalaciónelseif($_-94)
y, siempre que no lo sea, concatenamos el carácter actual$b
y enviamos un espacio a la tubería. Finalmente, establecemos si el personaje actual es un símbolo para la próxima ronda.Recopilamos esos caracteres de la tubería en parens, los encapsulamos en una
-join
que los convierte en una cadena y los dejamos junto con$b
la tubería. La salida al final está implícita con una nueva línea intermedia.A modo de comparación, aquí hay un puerto directo de la respuesta Python de @ xnor , a 85 bytes :
fuente
Gema,
4241 caracteresGema procesa la entrada como flujo, por lo que debe resolverla de una sola vez: la primera línea se escribe inmediatamente como procesada, la segunda línea se recopila en la variable $ s y luego la salida al final.
Ejecución de muestra:
fuente
Chicle de canela, 21 bytes
No competidor Pruébalo en línea.
Explicación
No soy un gran golfista de expresiones regulares, por lo que probablemente haya una mejor manera de hacerlo.
La cadena se descomprime a:
(tenga en cuenta el espacio final)
La primera
S
etapa recibe información y usa una mirada hacia atrás negativa para reemplazar todos los caracteres que no sean trazos sin un trazo anterior con un espacio, luego elimina todos los trazos. Luego emite inmediatamente la cadena de entrada modificada con una nueva línea y elimina esaS
etapa. Dado que STDIN ahora está agotado y la etapa anterior no proporcionó ninguna entrada, la siguienteS
etapa recibe la última línea de STDIN nuevamente y luego reemplaza todos los caracteres seguidos por cualquier carácter con un espacio y lo genera.En el código psuedo de Perl:
fuente
J ,
2827 bytesPruébalo en línea!
Tiene que haber una mejor manera...
fuente