Requisitos:
- Tome una entrada en stdin incluyendo nuevas líneas / retornos de carro de longitud ilimitada (solo limitada por la memoria del sistema; es decir, no hay un límite inherente en el programa).
- Salida del reverso de la entrada en stdout.
Ejemplo:
Entrada:
Quick brown fox
He jumped over the lazy dog
Salida:
god yzal eht revo depmuj eH
xof nworb kciuQ
Las victorias más cortas.
Tabla de clasificación:
var QUESTION_ID=242,OVERRIDE_USER=61563;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>
strrev
ƃop ʎzɐʃ ǝɥʇ ɹǝʌo pǝdɯnɾ ǝH
xoɟ uʍoɹq ʞɔınΌ
;-PRespuestas:
Golfscript - 3 caracteres
La versión ofuscada también tiene 3 caracteres
Aquí hay una explicación de cómo funciona %
fuente
Golpe - 7
tac
invierte el orden de las líneas, mientras querev
invierte el orden de los caracteres.fuente
alias z='tac|rev'
rev|tac
la misma puntuación: solo agregué una nota para decir que esto funciona para cualquier shell POSIX, no solo Bash.BrainFuck, 10 personajes
Supera una buena cantidad de respuestas para un lenguaje tan simple.
fuente
C, 37 bytes
fuente
Haskell - 21
fuente
Pila de panqueques ,
342316 bytesSe supone que la entrada termina con un carácter nulo (
^@
en la línea de comandos). Ejemplo de ejecución, utilizando el intérprete :fuente
Python,
4140 bytes41 -> 40 - se eliminó el punto y coma al final del programa.
¡Probablemente podría optimizarse!
fuente
print raw_input()[::~0]]
? Todavía es Python 2 debido aprint
# Language Name, Character/Byte Count
APL, 2
O CircleBar QuoteQuad si los caracteres no llegan, simplemente significa: invertir la entrada de caracteres del teclado.
fuente
⍞
.⌽
es una función anónima completa que se puede asignar y utilizar:f←⌽
f 'The quick brown fox'
.Perl - 23
fuente
print"".reverse<>
son solo 17 caracteres. Y con Perl 5.10+ puede guardar dos caracteres más al usar ensay
lugar deprint
.print~~reverse<>
por 16 caracteressay~~reverse<>
¿funcionaría? 14 caracteresRuby - 19 caracteres
fuente
C - 47 caracteres
Tenga en cuenta que esto usa espacio de pila O (n). Pruébalo en línea!
fuente
main(c){(c=getchar())>0&&main(),putchar(c);}
c>=0
puede convertirse~c
Windows PowerShell, 53
5430-01-2011 (54) - Primer intento
30-01-2011 (53) - Los saltos de línea son divertidos.
2011-01-3- (52) - Asignaciones de variables en línea también.
fuente
-join($a="$args")[$a.Length..0]
por sí solo parece funcionar para el ejemplo proporcionado, no tengo ningún problema con los saltos de línea que se ejecutan con Windowscrlf
, no estoy seguro acerca de psv2 o lo que haya utilizado cuando se escribió esto.$input
es un enumerador que produce líneas, por lo que no puede encadenarlo así.Perl 5.1, 14
fuente
Befunge-93 - 11x2 (22 caracteres)
Probado con este intérprete .
fuente
Cálculo binario de Lambda - 9 bytes
Fuente: http://ioccc.org/2012/tromp/hint.html
fuente
Fisión ,
161412 bytesExplicación
El flujo de control comienza
D
con un(1,0)
átomo descendente . Las?
lecturas de STDIN, un carácter a la vez, configuran la masa para el código de carácter leído y la energía para0
. Una vez que lleguemos a EOF,?
estableceremos la energía en su lugar1
. El[
redirige el átomo a unZ
interruptor. Mientras leamos los caracteres, la energía será0
así que el átomo es desviado hacia arriba por elZ
. Clonamos el átomo, colocando una copia de nuevo en el?
para seguir leyendo la entrada. Incrementamos la energía de la otra copia1
con$
y la empujamos a la pilaK
. Entonces el bucle de entrada es este:Cuando la energía se
1
debe a EOF, laZ
voluntad dejará que el átomo pase directamente y disminuya la energía0
nuevamente.~
disminuye la energía más allá-1
. Los átomos con energía negativa aparecen en la pila, por lo que podemos recuperar los caracteres en orden inverso e imprimirlos!
. Ahora tenga en cuenta que la cuadrícula es toroidal, por lo que el átomo vuelve a aparecer en el borde izquierdo de la misma fila. Recuerde que incrementamos la energía de los átomos empujados anteriormente$
, por lo que los átomos ahora tienen energía1
como la última salida de?
y pasarán de nuevo directamente a través delZ
. El camino después de EOF es por lo tantoEste bucle en la fila inferior continúa hasta que la pila esté vacía. Cuando eso sucede, el átomo se refleja desde el
K
y su energía se vuelve positiva (+1
). Lo~
decrementa una vez más (moviéndose hacia la izquierda), de modo que ahora golpeamosZ
con energía no positiva. Esto desvía el átomo hacia abajo, de modo que termina en la cuña deY
donde está almacenado, y debido a que no hay más átomos en movimiento, el programa termina.fuente
> <>,
1614 bytes-2 bytes por @JoKing
dos años (!) más tarde, elimina el -1 extra de la entrada de lectura al cambiar la lógica para detenerse.
Pruébalo en línea!
Similar a la otra respuesta> <>, esto no necesita revertir la pila debido a la forma en que se lee la entrada en la primera línea. En realidad, no estoy muy seguro de si esto debería ser una sugerencia para la otra respuesta> <>, ya que es bastante diferente en apariencia pero similar en concepto.
La principal diferencia es que mi respuesta compara la entrada a 0, y si es menor (es decir, no hay entrada -
i
devuelve -1 si no hay entrada) salta a (1,7), si no, (0, 7) Si salta al primero, muestra el valor superior (-1) e inicia un ciclo de impresión. Si salta a este último, continúa el bucle de entrada.11 bytes, sale con un error
Cortesía de @JoKing
Pruébalo en línea!
Creo que esto es válido ahora a través del meta consenso.
Respuesta anterior (14 bytes)
fuente
o
después de;
o
parte; No lo noté en ese momento. Y gracias por el ahorro. Uso inteligente de la comparación a cero para deshacerse del último -1.0=?
a?!
)PHP -
3817 caracteresfuente
cat
??stdin
Pila de gatos , 7 bytes
Pruébalo en línea!
Hay un montón de alternativas para el mismo número de bytes, la mayoría de las cuales son esencialmente equivalentes en cómo funcionan:
Explicación
Una cartilla corta de Stack Cats:
-1
encima de esos ceros y luego los bytes de entrada encima de eso (con el primer byte en la parte superior y el último byte encima de-1
).-1
en la parte inferior si hay una, y luego imprimimos todos los valores como bytes en STDOUT.Ahora para el programa actual:
Sp3000 configuró su búsqueda de fuerza bruta para encontrar todas las demás soluciones de 7 bytes, así que aquí hay algunas alternativas:
Estas tres variantes son esencialmente las mismas, excepto que difieren cuando no se calcula el NOT bit a bit y si usamos la pila vacía a la izquierda o a la derecha.
Como dije en la explicación anterior,
T
no hace nada cuando la parte superior de la pila es cero. Eso significa que podemos poner!
el medio en su lugar. Eso significa que el primeroT
es un no-op, luego giramos el cero en la parte superior en una-1
y luego a continuación, la segundaT
realiza la inversión. Por supuesto, esto significa que el estado de memoria final tiene una-1
pila en la pila al lado de la original, pero eso no importa ya que solo la pila en la posición actual del cabezal de la cinta afecta la salida.Esta variante usa
*
(XOR 1) en lugar de!
, de modo que convierte el cero en+1
, yI
es un impulso condicional que empuja valores positivos y derechos, valores negativos a la izquierda, y los niega en cualquier caso (de modo que todavía terminamos con un-1
en la parte superior de la pila original cuando nos encontramosT
), por lo que en última instancia, funciona igual que la<!]T[!>
solución original .fuente
PHP,
8229242928 caracteres82 -> 29: el nuevo carácter de línea se conserva cuando se invierte con
strrev
.29 -> 24: utiliza la sintaxis de acceso directo ahora
24 -> 29: ahora lee todas las líneas en lugar de una sola línea
fuente
fgets(STDIN)
solo lee la primera línea.Befunge-98 -
1110(Probado con cfunge)
La siguiente variante rompe ligeramente el requisito: realiza la tarea pero genera una secuencia infinita de bytes nulos después (y no termina).
La forma en que funciona es que lee repetidamente la entrada a la pila (
~
) un carácter a la vez, saltando (#
) la coma. Cuando se alcanza EOF,~
actúa como un reflector y la PC se voltea, haciendo estallar repetidamente y emitiendo un carácter (,
) mientras salta (#
) la tilde.fuente
#v~
línea 2::<,_@#
. Es curioso que el usoj
no lo mejore aquí.Pyth -
354 bytesEntonces, la versión original de 3 caracteres no invirtió el orden de las líneas, solo las líneas. Luego se me ocurrió esta versión de 5 caracteres:
Ahorré 1 byte gracias a @FryAmTheEggman para obtener el resultado:
Demo en vivo.
Explicación:
Solución original (incorrecta):
Esto técnicamente no cuenta porque Pyth fue creado en 2014, pero aún está claro que está vinculado con GolfScript.
Explicación:
fuente
Fk_.z_k
Estoy seguro de que alguien puede obtener algo más corto que esto, pero eso es lo que obtuve.Cubix ,
98 bytesMuchas gracias a Martin Ender por este golf:
¡Véalo trabajar en línea!
Este se convierte en el siguiente cubo (
>
indica el puntero de instrucción inicial):El primer paso del programa es tomar todas las entradas.
i
pone 1 byte de entrada en la pila. A menos que la entrada esté terminada,?
la IP gira a la derecha y se envuelve alrededor del cubo hasta que llegaw
, lo que lo envía de nuevo ai
.Cuando finaliza la entrada, la
?
IP se dirige hacia el norte, ingresando al bucle de salida:o
: imprime el personaje en la parte superior de la pilaw
: 'esquiva' el puntero a la derecha;
: resalta el carácter que acaba de imprimirse\
: refleja la IP, enviándola al Este?
: si quedan caracteres para imprimir, gire a la derecha y vuelva al bucle.La última vez que
?
se golpea, cuando no queda nada en la pila, la IP continúa en su lugar:i
: toma un byte de entrada. Esto será-1
cuando la entrada haya terminado.\
: refleja la IP, enviándola al norte, a:@
: termina el programa.Solución de 9 bytes
¡Véalo trabajar en línea!
En forma de cubo:
El primer personaje que se encuentra es
i
, que toma un código de entrada de caracteres. Si no queda ninguna entrada, esta es-1
.El siguiente personaje es
?
: una decisión. Si la parte superior de la pila es positiva, gira a la derecha, envolviendo el cubo hasta que golpea, lo/
que lo envía de vuelta ali
, creando un bucle de entrada. Sin embargo, si el TOS es negativo, la entrada ha finalizado, por lo que gira a la izquierda en el bucle de salida.El bucle de salida es simple.
o;
salidas y muestra los TOS. La primera vez que se ejecuta esto,-1
es la parte superior de la pila, pero no se asigna a un personaje y, por lo tanto, se ignora./
refleja la IP para moverse hacia la izquierda, donde se encuentra!@
, lo que termina el programa si la pila está vacía. De lo contrario, la IP continúa, golpeando de?
nuevo, ya que la pila no está vacía, el TOS debe ser un código de acceso, todos los cuales son positivos 1 , por lo que esto hace que la IP gire a la derecha y continúe el ciclo de salida.1 Ambas soluciones suponen que la entrada no contendrá bytes nulos.
fuente
05AB1E, 1 byte
R invierte la entrada.
fuente
,
al final, porque la parte superior de la pila se imprime automáticamente cuando no se imprime nada.Wumpus , 12 bytes
Pruébalo en línea!
La respuesta de Martin muestra bien el flujo de control de cuadrícula triangular de Wumpus, pero pensé en probar este desafío con una sola línea.
La versión más fácil de entender (un byte más largo) es:
que funciona así:
Ahora echemos un vistazo a la versión de golf, que difiere en el medio:
La versión de golf guarda un byte al no necesitar un comando explícito
;
para hacer estallar el -1 extraño. En EOF, este programa salta a(4, 0)
lugar de(8, 0)
donde se ejecuta4*0.
nuevamente, ¡excepto que esta vez el -1 extraño está en la parte superior! Esto hace que saltemos(-4, 0)
, lo que debido al ajuste es el mismo que(8, 0)
para esta cuadrícula, llevándonos a donde queremos mientras consumimos el valor extraño al mismo tiempo.fuente
Wumpus ,
1311 bytesPruébalo en línea!
Explicación
Dado que Wumpus es un lenguaje basado en la pila, la idea básica es leer todo el STDIN en la pila y luego simplemente imprimir la pila completa de arriba a abajo. La parte interesante aquí es el flujo de control a través de la cuadrícula.
Para comprender el flujo de control, debemos observar el diseño de la cuadrícula triangular real:
La IP comienza en la esquina superior izquierda hacia el este. Podemos ver que hay un bucle a través del grupo de seis celdas a la izquierda, y una rama de la
\
. Como es de esperar, el bucle lee todas las entradas y la sección lineal al final escribe el resultado en STDOUT.Veamos primero el bucle. Tiene más sentido pensar que el primero
)?\
no es parte del ciclo, con el ciclo real que comienza eni
. Así que aquí está el bit inicial:Entonces comienza el ciclo:
Eso deja la sección lineal al final:
fuente
PHP - 44 caracteres
fuente
Perl
fuente
Fisión ,
2015 bytesEl algoritmo es muy similar al de Martin, pero la implementación difiere significativamente.
Cómo funciona
Todo comienza en
R
, lo que libera un átomo hacia el este con masa 1 y energía 0.Al golpear
?
, un carácter de entrada se guarda como la masa del átomo, y la energía se deja en 0 a menos que stdin devuelva EOF, en cuyo caso la energía se convierte en 1.J
es el comando de salto de Fission, y salta un átomo hacia adelante una cantidad de celdas equivalente a su energía actual, dejando al átomo con energía 0. Por ahora, nuestro átomo tiene energía 0 e ignora este comando.Luego atacamos
%
, que es un cambio. Con una energía mayor que 0, nuestro átomo se dirigiría hacia abajo (como si fuera reflejado por un\
espejo), pero como tenemos exactamente 0 energía, el espejo opuesto nos envía hacia arriba/
.Nuestro átomo continúa hasta que golpea un segundo espejo,
\
esta vez dirigiéndolo hacia la izquierda.Incrementamos la energía del átomo a 1 con
$
, y usamosX
para duplicar el átomo. Una copia reflejará de nuevo en el$
comando (dejando esa copia con 2 energía) y la otra copia será llevado a la pila,K
.Nuestra copia reflejada viaja hacia atrás desde donde vino hasta que toca el
%
interruptor nuevamente. Ahora que tenemos una energía positiva, reflexionamos como si hubiéramos golpeado un\
espejo, envolviendo el tablero en el siguienteS
y disminuyendo nuestra energía a 1.El
S
comando consumirá 1 energía para preservar nuestra dirección. Si no tuviéramos energía, el átomo se habría desviado como golpeado por un\
espejo, hacia abajo. En cambio, nos movemos hacia la derecha nuevamente y recogemos más información con?
y el ciclo se repite.Una vez que nuestro átomo alcanza EOF, el
?
comando almacenará 1 energía en el átomo. Por lo tanto, cuando golpeamos elJ
comando esta vez, saltamos por completo el%
interruptor y aterrizamos en elS
interruptor con 0 de energía.Ahora, dado que nuestra energía se consumió en el salto, nuestra dirección no es preservada por el
S
interruptor, sino que estamos más bien dirigidos hacia abajo. Luego disminuimos nuestra energía a -1 con el~
comando y envolvemos el tablero. Cuando se golpea con una energía negativa, elK
comando muestra un átomo en lugar de empujar uno. Generamos nuestro átomo recientemente reventado!
y usamos la energía 1 de ese átomo para evitar elS
interruptor, y el ciclo se completa.Si la pila
K
estaba vacía, la energía de nuestro átomo se niega (lo que resulta en +1 energía) y se refleja de nuevo en el~
comando, dejándolo con energía 0. Al golpearS
nuevamente, nos desviamos hacia la derecha, hasta que?
se golpea. Desde que se llegó a EOF,?
destruye el átomo y termina el programa.fuente
Laberinto , 10 bytes
Normalmente, se supone que los programas Labyrinth se parecen a los laberintos, pero pude comprimir los bucles en este tan fuertemente, que el código terminó como un solo bloque (¿habitación?). Aquí hay una versión ligeramente expandida que facilita el seguimiento del flujo de control:
,
lee un byte a la vez desde STDIN hasta que alcanza EOF y regresa-1
. Los)
incrementos de este valor para que podamos obtener algo positivo para cada byte de lectura y cero en EOF. Los:
duplicados de cada byte leído.Una vez que presionamos EOF, el puntero de instrucción pasa al segundo ciclo, donde descarta repetidamente un valor con
;
(inicialmente el EOF, luego la segunda copia de cada byte), luego disminuye el siguiente valor con(
y lo imprime con.
. Debido a esa segunda copia (que siempre es positiva) sabemos que la IP girará a la derecha en la parte superior y continuará en este ciclo.Una vez que se han impreso todos los bytes, la parte superior de la pila vuelve a ser cero y la IP continúa directamente hacia adelante
@
y el programa finaliza.La duplicación aparentemente innecesaria de cada byte es lo que me permite asegurar que (incluso en los circuitos cerrados de la versión de golf) la IP siempre toma el giro correcto y nunca cruza de un circuito a otro.
Un consejo para TheNumberOne y Sp3000, cuyos propios intentos ayudaron mucho a encontrar esta solución altamente comprimida.
fuente