var QUESTION_ID=188988;
var OVERRIDE_USER=53748;
var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;function answersUrl(d){return"https://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+d+"&pagesize=100&order=asc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(d,e){return"https://api.stackexchange.com/2.2/answers/"+e.join(";")+"/comments?page="+d+"&pagesize=100&order=asc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(d){answers.push.apply(answers,d.items),answers_hash=[],answer_ids=[],d.items.forEach(function(e){e.comments=[];var f=+e.share_link.match(/\d+/);answer_ids.push(f),answers_hash[f]=e}),d.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(d){d.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),d.has_more?getComments():more_answers?getAnswers():process()}})}getAnswers();var SCORE_REG=function(){var d=String.raw`h\d`,e=String.raw`\-?\d+\.?\d*`,f=String.raw`[^\n<>]*`,g=String.raw`<s>${f}</s>|<strike>${f}</strike>|<del>${f}</del>`,h=String.raw`[^\n\d<>]*`,j=String.raw`<[^\n<>]+>`;return new RegExp(String.raw`<${d}>`+String.raw`\s*([^\n,]*[^\s,]),.*?`+String.raw`(${e})`+String.raw`(?=`+String.raw`${h}`+String.raw`(?:(?:${g}|${j})${h})*`+String.raw`</${d}>`+String.raw`)`)}(),OVERRIDE_REG=/^Override\s*header:\s*/i;function getAuthorName(d){return d.owner.display_name}function process(){var d=[];answers.forEach(function(n){var o=n.body;n.comments.forEach(function(q){OVERRIDE_REG.test(q.body)&&(o="<h1>"+q.body.replace(OVERRIDE_REG,"")+"</h1>")});var p=o.match(SCORE_REG);p&&d.push({user:getAuthorName(n),size:+p[2],language:p[1],link:n.share_link})}),d.sort(function(n,o){var p=n.size,q=o.size;return p-q});var e={},f=1,g=null,h=1;d.forEach(function(n){n.size!=g&&(h=f),g=n.size,++f;var o=jQuery("#answer-template").html();o=o.replace("{{PLACE}}",h+".").replace("{{NAME}}",n.user).replace("{{LANGUAGE}}",n.language).replace("{{SIZE}}",n.size).replace("{{LINK}}",n.link),o=jQuery(o),jQuery("#answers").append(o);var p=n.language;p=jQuery("<i>"+n.language+"</i>").text().toLowerCase(),e[p]=e[p]||{lang:n.language,user:n.user,size:n.size,link:n.link,uniq:p}});var j=[];for(var k in e)e.hasOwnProperty(k)&&j.push(e[k]);j.sort(function(n,o){return n.uniq>o.uniq?1:n.uniq<o.uniq?-1:0});for(var l=0;l<j.length;++l){var m=jQuery("#language-template").html(),k=j[l];m=m.replace("{{LANGUAGE}}",k.lang).replace("{{NAME}}",k.user).replace("{{SIZE}}",k.size).replace("{{LINK}}",k.link),m=jQuery(m),jQuery("#languages").append(m)}}
body{text-align:left!important}#answer-list{padding:10px;float:left}#language-list{padding:10px;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="https://cdn.sstatic.net/Sites/codegolf/primary.css?v=f52df912b654"> <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><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><table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td><a href="{{LINK}}">{{SIZE}}</a></td></tr></tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td><a href="{{LINK}}">{{SIZE}}</a></td></tr></tbody> </table>
void foo(char *c, size_t len)
es legal que tome un búfer de entrada / salida y una longitud, y no tenga ningún valor de retorno, solo un efecto secundario sobre el objeto al que tiene un puntero.Respuestas:
Malbolge , 20775 y 2334 bytes
Probablemente no le gané a nadie, pero fue increíblemente divertido de hacer.
Pruébalo en línea!
Si el desafío no requirió detenerse en algún momento (por ejemplo, eof), se vuelve bastante trivial, obteniendo 2334 bytes :
Pruébalo en línea!
Explicación
Me han pedido que explique cómo funciona el programa. Elegiré el segundo, ya que es mucho más fácil explicarlo que el primero, pero la forma en que ambos funcionan es realmente similar.
Comencemos por descifrar el código. Como alguien en los comentarios lo hizo antes de comenzar a trabajar en la explicación, realmente le aconsejo que lo revise.
No hace que sea más fácil leer el programa, pero antes de saltar directamente al código, repasemos los conceptos básicos de Malbolge.
La máquina virtual se basa en trits ( tri dígitos nary s ). Cada palabra de máquina tiene diez trits de ancho, por lo que varía de 0 a 2222222222t (= 59048d). Cada posición de memoria contiene una palabra de máquina; las direcciones son una sola palabra de máquina también. Tanto los datos como el código comparten el mismo espacio de memoria.
Hay tres registros, cada uno de los cuales contiene una palabra de máquina, inicialmente 0: el registro de código C, que es un puntero a la instrucción que está a punto de ejecutarse, el registro de datos D utilizado para la manipulación de datos y el acumulador A también utilizado por varios instrucciones para manipular datos.
Si la instrucción para ejecutar no está en el rango 33-126, la ejecución se detiene (el intérprete de referencia se bloquea en este caso debido a un error). De lo contrario, para determinar la instrucción real a ejecutar, el valor señalado por el registro C se agrega al registro C en sí y el resultado se divide por 94, tomando el resto.
Aquí hay una tabla con todas las instrucciones posibles.
Ahora que el código es más comprensible y en realidad es posible saber qué está sucediendo allí, podemos saltar a la idea general de lo que está sucediendo allí.
Sin ningún salto, la programación de Malbolge es bastante trivial. Sin embargo, cuando se usan los saltos, es necesario realizar una tarea de descifrado antes de ejecutar este código nuevamente. Cada vez que se ejecuta una instrucción, se pone directamente después de cifrada, por lo que no se comporta de la misma manera que antes.
Para ilustrar la solución, veamos el programa normalizado de gato de Malbolge:
Así como se puede ver, en la segunda línea tenemos
/
y<
las instrucciones de negociación con I / O cosas. Utilizando el hecho de que elC
registro es el puntero de instrucción, podemos modificarlo usando lai
instrucción creando efectivamente una rama. Sin embargo, antes de que ocurra la bifurcación, debemos descifrar las instrucciones que se encuentran a solo unos pocos ciclos de lectura y escritura de salida hacia y desde TTY, combinado con un salto. Como no hay una forma real de almacenar constantes de manera efectiva, necesitamos incorporar muchas instrucciones no relacionadas y usar su valor para calcular otras constantes necesarias (utilizando el hecho de que Malbolge no separa el programa y los datos)Nota: partes de esta respuesta se tomaron de la página Malbolge wiki de Esolang con licencia bajo CC0 - enlace .
Posiblemente, es posible que desee consultar mi otra respuesta con Seed
fuente
brainfuck , 6 bytes
Pruébalo en línea!
Por una vez, una respuesta realmente competitiva en brainfuck. :-) Simplemente se lee desde la entrada estándar (
,
), luego se repite mientras el carácter leído no es cero ([
), se escribe el carácter leído dos veces (..
) y finalmente se lee un nuevo carácter (,
) antes de volver al inicio del ciclo (]
)Respuesta alternativa de 6 bytes:
Pruébalo en línea!
fuente
Semilla ,
60133942388438653848 bytesPruébalo en línea!
fuente
Gelatina , 1 byte
Programa completo
Pruébalo en línea!
fuente
Ḥ
ż`F
), mientras que el mío no lo puedo creer)Lenguaje de programación Shakespeare ,
139129109106 bytes-3 bytes gracias a Jo King
Pruébalo en línea!
Lanza advertencias y termina con un error. Tratar con él.
fuente
Haskell ,
151413 bytesPruébalo en línea!
o legible:
Explicación: Las listas son a
Monad
en Haskell, y usar el operador de enlace>>=
es aconcatMap
, ejecutar una función que toma un elemento y devuelve una lista en cada elemento de la lista y luego concatena las listas resultantes en una lista grande.Ahora sólo tenemos que construir una función que, dado un valor, devuelve una lista de ese valor dos veces, lo cual se logra
(<$"dd")
, que se puede leer como "Tomar la lista['d','d']
y vuelva a colocar todos los elementos con el argumento de esta función. El"dd"
podría haber cualquier expresión que dé como resultado una lista de exactamente dos elementos, pero esta es la más corta que se me ocurre.fuente
<$
era algo en lo que nunca hubiera pensado05AB1E , 2 bytes
Esta bien me rindo. No puedo encontrar un byte para resolver esto. Cargas de 2-byters, sin embargo ...
Prueba en
ø˜
línea o prueba enøS
línea .Prueba en
ζ˜
línea o prueba enζS
línea .Prueba en
€D
línea o prueba en€Â
línea .Probar en
.ι
líneaProbar en
ºS
líneaPrueba en
·S
línea o prueba enxS
línea .Probar en
+S
líneaE / S como una lista de caracteres.
Explicación:
El único programa que funciona igual en ambas versiones de 05AB1E. :)
Esta versión básicamente funciona igual que la anterior para la nueva versión. En la versión anterior
‚
, primero necesitaría un par explícito , y luego podría comprimirlo / transponerlo. Soloζ
en una lista de 1D será un no-op en la versión heredada de 05AB1E.En la nueva versión de 05AB1E, mantiene todos los valores en la pila en la lista resultante al hacer un mapa. Mientras que con la versión heredada de 05AB1E solo mantendría el valor máximo. Es por eso que solo funcionan en la nueva versión.
Este incorporado aún no estaba allí en la versión heredada de 05AB1E.
En la versión heredada de 05AB1E, el espejo horizontal integrado sería en
∞
lugar deº
. Sin embargo,∞S
no funciona en la versión heredada, ya que implícitamente convertiría la lista en una cadena delimitada por una nueva línea antes de reflejarla por completo ( Pruébelo aquí ), después de lo cualS
también incluiría estas nuevas líneas.El doble es la abreviatura de
2*
. En la nueva versión de 05AB1E, construida en Elixir, esto solo funciona en valores numéricos. Sin embargo, la versión heredada de 05AB1E se creó en Python, por lo que2*
funciona de manera similar y repite el personaje.Una vez más, debido a que la versión heredada de 05AB1E se creó en Python,
"a"+"a"
da como resultado"aa"
, mientras+
que no se puede usar para agregar cadenas en la nueva versión. (PD: hay un apéndice para cadenas que funciona en ambas versiones, que es«
, pero al dar dos argumentos de lista los concatenará en lugar de fusionar cada cadena en los mismos índices como el programa anterior ( Pruébelo aquí ).)fuente
ζ˜
para el moderno 05AB1E.ø˜
, así que no me molesté en agregarlo también. Lo he agregado (así comoøS
/ζS
/xS
).Esquema piramidal ,
229 218213 bytesPruébalo en línea!
Esto definitivamente puede ser más corto. La entrada se toma a través de argumentos de línea de comando. Esto equivale básicamente a:
Con algunas advertencias, como la impresión que realmente se maneja tanto en la condición del bucle como en el cuerpo del bucle.
Alternativa 215 byter:
Pruébalo en línea!
fuente
set
puede desplazarse hacia arriba y hacia la izquierda sin interferir con nada. Pruébalo en línea!Gelatina , 1 byte
Un programa completo que imprime el resultado.
Pruébalo en línea!
¿Cómo?
Utiliza una función de
error...El átomo "doble" de Jelly
Ḥ
se implementa con Python*
y se vectoriza, mientras que las listas de caracteres de Jelly (sus únicas "cadenas") se implementan como listas de cadenas de Python que generalmente tienen solo un carácter de largo, es decir hasta que nos demos cuenta de que en Python'blah'*2='blahblah'
...fuente
ḤṾV
$ echo -n "Ḥ" | hexdump -C
<nueva línea>00000000 e1 b8 a4 |...|
af
,Ḥ
es sólo una representación visual de ese byte, consulte la jalea de la página de códigos (también vinculado en la cabecera del post).Gelatina, 1 byte
Pruébalo en línea!
Perdón por mi inexperiencia, recién estoy comenzando con Jelly. Lo que creo que está sucediendo es que hemos definido una cadena diádica, que trata un argumento único como los argumentos izquierdo y derecho. En este caso, la cadena consiste en "zip; intercalar x e y", intercalando la cadena de entrada consigo misma.
Alguien ya publicó una solución Jelly de 1 byte, así que espero que no sea de mala educación publicar la mía.
fuente
Pitón,
3425 bytesPruébalo en línea! Otro que devuelve una cadena en lugar de una lista de caracteres:
Pruébalo en línea!
fuente
lambda i:sum(zip(i,i),())
debería hacer por -9.for i in input():print(i,end=i)
lambda i:''.join(c*2 for c in i)
32 bytes pero devuelve una cadena y no una listalambda i:''.join(c*2for c in i)
PowerShell ,
292321 bytes-6 bytes gracias a Andrei Odegov
-2 bytes gracias a mazzy
Pruébalo en línea!
Toma información a través de salpicaduras, esencialmente haciéndolo una serie de caracteres
fuente
8088 Assembly, IBM PC DOS,
dieciséis10 bytesxxd
Volcado de bytes ensambladoListado sin ensamblar:
PC independiente ejecutable de DOS. Entrada desde
STDIN
, salida a consola.Entrada de consola interactiva:
Entrada por tubería:
Respuesta original de 16 bytes :
xxd
Volcado de bytes ensambladoListado sin ensamblar:
PC independiente ejecutable de DOS. Entrada a través de la línea de comando, salida a la consola.
fuente
LODSW
se va a poner el espacio inicial (20H
) desde81H
dentro deAH
la cual la voluntad del desorden supuesto losLOOP
si eso es enCH
... Charlatán.sed ,
108 bytesPruébalo en línea!
Gracias a @manatwork por -2 bytes.
fuente
s/./&&/g
.JavaScript (Node.js) , 22 bytes
Toma la entrada como una matriz de caracteres.
Pruébalo en línea!
JavaScript (ES6), 26 bytes
Toma la entrada como una cadena.
Pruébalo en línea!
Versión alternativa sugerida por @PabloLozano:
Pruébalo en línea!
Hacerlo de forma recursiva también es igual de largo:
Pruébalo en línea!
fuente
s=>s.replace(/./gs,c=>c+c)
así que.
también coincide con las nuevas líneasjoin('')
debería encargarse de eso. Pensándolo bien, eso puede aumentar la salida de una manera no estándar, por lo que puede no ser válido.["aa","bb","cc"]
sin embargo, es una lista de cadenas, ni una cadena ni una lista de caracteres en sí misma. Agregar una unión o aplanarlo a una lista de caracteres es válido, pero debería contarse para el recuento de bytes.Haskell , 8 bytes
Pruébalo en línea!
Cualquier cadena de dos caracteres funciona en lugar de
"x2"
.fuente
Brachylog , 2 bytes
Pruébalo en línea!
Explicación
fuente
Befunge-98 (PyFunge) , 6 bytes
Pruébalo en línea!
fuente
C (gcc) , 40 bytes
Pruébalo en línea!
Asume que
t
es un búfer lo suficientemente grande como para almacenar la salida.Probablemente no cumple con los estándares, pero funciona en TIO.
fuente
J ,
63 bytes-3 bytes gracias a Richard Donovan
Pruébalo en línea!
K (oK) ,
84 bytes-4 bytes gracias a ngn!
Pruébalo en línea!
fuente
{2}#
APL (dzaima / APL) , SBCS de 2 bytes
Función de prefijo tácito anónimo.
Pruébalo en línea!
⌿
es "replicar" :-)fuente
Haskell , 15 bytes
Aquí
(:)<*>pure
toma un argumento y devuelve una lista que contiene este argumento dos veces. Luego>>=
asigna esta función sobre cada entrada de la lista de entrada (que es una cadena en nuestro caso) y aplana el resultado (una lista de listas) de nuevo a una lista.Pruébalo en línea!
fuente
Óxido ,
8346 bytesPruébalo en línea!
No me gusta esto, pero no es trampa .
fuente
Laberinto , 12 bytes
Pruébalo en línea!
Acabo de descubrir este lenguaje, por lo que esta respuesta puede mejorarse notablemente ...
fuente
","
lugar de"",
), he logrado un once ahora, ¿podría haber un diez o mejor?Stax , 2 bytes
¡Ejecútelo y depúrelo en staxlang.xyz!
Copiar. Código Postal. Impresión implícita.
fuente
R ,
5033 bytes-17 bytes gracias a Giuseppe
Pruébalo en línea!
fuente
gsub('(.)','\\1\\1',a)
?gsub
reemplaza la expresión regular: reemplaza una coincidencia de un solo personaje(.)
en el grupo de captura 1 con dos copias del grupo de captura 1\\1\\1
, para todas las coincidencias posibles, en oposición a lasub
que solo hace una.Retina , 4 bytes
Pruébalo en línea!
Coincide con la cadena vacía (es decir, la posición antes / después de cada carácter) e inserta la cadena entre esta y la coincidencia anterior (que siempre es exactamente el carácter anterior; excepto la primera coincidencia donde no hace nada).
fuente
Java 8, 27 bytes
Pruébalo en línea.
Antigua respuesta de 31 bytes antes de que las reglas cambiaran:
NOTA: La sugerencia de @EmbodimentOfIgnorance (en
\n|.
lugar de(?s).
ha sido revertida, ya que falla si la entrada contiene\r
. Gracias por informar a @ OlivierGrégoire .Pruébalo en línea.
Explicación:
Explicación de expresiones regulares:
fuente
(?s).
puede ser reemplazado por\n|.
\n|.
versión no funciona correctamente con la entrada"\r"
. Sin embargo, la(?s).
versión funciona correctamente con\r
.\n
es imprimible pero no forma parte del rango de impresión ASCII.Pyth , 2 bytes
Pruébalo en línea!
.i
Intercala dos copias de la entrada juntas. La entrada es implícita, por lo que sería una versión 'completa' de este programa.iQQ
, dondeQ
está la entrada del programa.fuente
MarioLANG ,
23 2017 bytesPruébalo en línea!
A diferencia de Brainfuck, MarioLANG devuelve -1 en EOF, por lo que debemos incrementar el valor leído antes de compararlo con cero, y luego disminuirlo antes de imprimirlo. Esta es probablemente la respuesta más corta posible en MarioLANG.
fuente