Los caracteres ASCII imprimibles (códigos hexadecimales 20 a 7E) en orden son:
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
(Tenga en cuenta que hay espacio allí).
Esta cadena contiene claramente todos los caracteres ASCII imprimibles al menos una vez en orden creciente cuando se leen de izquierda a derecha, pero no en orden decreciente.
La cuerda
REVERSED:~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"! NORMAL: !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
contiene todos los caracteres ASCII imprimibles al menos una vez en orden creciente y decreciente. En otras palabras, cuando los caracteres se valoran con su código numérico, las subsecuencias que aumentan y disminuyen más tienen longitud 95 (el número de caracteres ASCII imprimibles).
Reto
Elija un subconjunto contiguo de N caracteres ASCII imprimibles, como LMNOP
(N = 5). Escriba un programa usando solo esos N caracteres cuya salida contiene los 95 caracteres ASCII en orden creciente y decreciente como en el ejemplo anterior.
El ganador es el envío con el N. más bajo En caso de empate, gana el código más corto en bytes.
Notas
- Un subconjunto contiguo significa un conjunto de ASCII imprimibles que aparecen todos en una línea continua, como
LMNOP
o89:;<=>
. - Su subconjunto contiguo puede "girar" desde el
~
espacio, pero esto incurre en una penalización de +3 en N. Entonces{|}~
tiene N = 4, pero{|}~ !
tiene N = 6 + 3 = 9. - Su programa solo puede contener los N caracteres ASCII imprimibles del subconjunto contiguo que ha seleccionado. No todos tienen que aparecer y pueden aparecer varias veces en cualquier orden. (Todos los ASCII no imprimibles y todos los no ASCII no están permitidos. Esto significa que las pestañas y las nuevas líneas no están permitidas).
- Su salida solo puede contener caracteres ASCII imprimibles y debe tener menos de 10000 caracteres de longitud.
- Las subsecuencias crecientes y decrecientes más largas de su salida deben tener una longitud de 95 (como se explicó anteriormente).
- Salida a stdout. No hay entrada
- N es un entero positivo menor que 96.
fuente
Respuestas:
Unario, N = 1
14680262330376163203871465704220787333741951071 bytes
Utiliza solo el byte '0' (ASCII 49).
Golfó alrededor de 4.13253e + 60 bytes de la solución de @Comintern. Crédito aún para él :)
En el Brainfuck original:
fuente
Unario , N = 1
4132527913354820031118363262102424570092493175835499123283719 (4.1325279e + 60) bytes
El código fuente en unario es obviamente demasiado grande para publicarlo aquí. Se puede reproducir fácilmente escribiendo (o generando) un archivo lleno de "0" de la misma longitud que el número de bytes anterior.
Aquí está la representación binaria:
Y el código Brainf ** k equivalente (saltos de línea para mayor claridad):
Salida:
EDITAR: Golfed 9.097887e + 87 caracteres innecesarios.
fuente
Brainfuck, N = 2
24,383 bytes. Solo utiliza - y. (ASCII 45 y 46). Pruébelo aquí: http://esoteric.sange.fi/brainfuck/impl/interp/i.html . Probablemente se pueda analizar como código Morse con los espacios correctos.
Requiere un intérprete que cumpla con la definición tradicional de Brainfuck, que utiliza una matriz de (al menos) 30,000 bytes de celdas, todas inicializadas en cero.
fuente
-
, luego la parte descendente y.-.-.etc
luego la parte ascendente (grupos de 255-
seguidos de a.
) Hasta donde puedo decir, está todo ahí. También vea editar mi respuesta para obtener una explicación.-
con solo uno.
al final :). Mi error.CJam - N = 3; 7659 bytes
Pruébalo en http://cjam.aditsu.net/
fuente
Brainf ** k, N = 4
Mi primer programa de brainfuck. Utiliza 3 caracteres fuera del bloque
+,-.
(Ascii 43 a 46.)410 bytes (se
.
puede eliminar uno del programa si el doble~~
se puede reducir a uno~
).Aquí está la lista de comandos en esa área de la tabla ASCII (no necesito el comando de entrada):
Afortunadamente,
<>[]
no se requieren los comandos restantes (mover el puntero de datos y realizar saltos condicionales).Dividir en 3 líneas para mayor claridad: 1: Incrementar hasta que los datos lleguen a 32. 2: Salida e incrementar hasta que los datos alcancen 126. 3: Salida y disminución hasta que los datos lleguen a 32.
Salida
Editar N = 2
Según la respuesta de @ nneonneo, es posible reemplazar cada uno
+
con 255-
signos para N = 2. cierta reorganización del código y la salida (que se muestra hacia abajo y luego hacia arriba) significa que la primera línea se puede reducir a 256-126 = 130-
signos. Esto se me ocurrió después de que me fui a la cama, y nadie me golpeó. https://codegolf.stackexchange.com/a/35801/15599fuente
~
lugar de,~~
ya que las subsecuencias crecientes y decrecientes aún estarían allí.DO; N = 43 = 40 + 3
Aquí evito caracteres tan comunes como
+
-
*
/
los dígitos0-9
, la coma,
y el punto y coma;
.Así que me vi obligado a expresar varios números usando solo las operaciones
&
%
~
.Es posible que pueda seguir jugando al golf (encontrar las representaciones más pequeñas para los números 63 y 95 es un ejercicio para el lector).
El subconjunto ascii es 32 ... 41 y 97 ... 126.
No estoy seguro de si los caracteres de nueva línea están permitidos en el código; si no, simplemente quítelos.
fuente
Giro , N = 2, 6486 bytes
Usando solo 2 caracteres
01
,.Salida:
Creo que puedo jugar más golf usando bucles, pero codificar con 0s y 1s fue horrible, así que no lo haré.
Comentado
Tenga en cuenta que hay
O
yl
como0
y1
.fuente
Python 2.7 N = 45 = 42 + 3
Esto lo usa
string.printable
, lo ordena y lo escupestdout
. Me ahorro unos pocos caracteres mediante la inserción de la.
destdout.write
mediante el usoeval
y la cadena de formatear utilizando losord
valores de caracteres que podría utilizar.Fuera lo viejo - N = 49 = 46 + 3
Desafortunadamente, aunque Python incluye lastring.printable
lista, esto no está en orden ASCII, y no hay forma de usarlo sin una*
o una.
, por lo que se necesitan menos caracteres para hacerlo manualmente.Usando el rango de caracteres:
La versión obvia: N = 63 = 60 + 3
Esta es la versión obvia que usa el rango de caracteres:
fuente
len('x')
me ahorra otros 2 caracteres.import
solución solo funcionará si tiene;
, lo que agrega una cantidad sustancial de caracteres.DO; N = 61 = 58 + 3
Para compensar el uso de un subconjunto tan grande, jugué mi código.
El subconjunto ASCII es 32 ... 59 y 97 ... 126.
¡Fue un desafío divertido evitar al
=
personaje!fuente
;
. Es posible que pueda usar eso para expandir su respuesta, sin que se convierta en una copia de la otra.Python 2.7 N = 28 + 12 + 3 = 43
Usando personajes
cdefghijklmnopqrstuvwxyz{|}~
y luego envolviendo!"#$%&'()*+
Para evitar usar
,.-
tuve que usar algunos trucos. Lo uséexec
para poder convertir el código en cadenas que me permitieron usarchr(ord('+') + len('xxx'))
para.
ychr(ord('+') + len('x'))
para,
. En cualquier lugar donde necesitaba un -1, usé ~ 0 en forma de~len('')
. Para evitarloa
, solíachr(ord('c') + ~len('x'))
(99-2).La cadena que se compone tiene N = 48, usa caracteres
abcdefghijklmnopqrstuvwxyz{|}~
y luego se ajusta a!"#$%&'()*+,-.
Tenga en cuenta que las líneas nuevas y los comentarios son solo para facilitar la lectura.
fuente
Rubí - N = 48
Deje que Ruby sea Ruby y abrace la penalización envolvente.
N = 48 <- 15 ('' - '.') + 30 ('a' - '~') + 3
o
Antiguo:
N = 72 {puntuación en línea recta} <- 72 ('.'-' u ') + nuevas líneas inválidas
Hay algunas sacudidas aquí para evitar la 'v' en "reversa". Lo dejé porque me gusta el hack de pack ("C *").
fuente
x86_64 Código de máquina, formato Mach-O
N = 2, 32768 caracteres (demasiado grande para ajustarse al límite de mensajes)
Editar: Pastebin está inactivo, por lo que puede encontrar el texto completo en: http://www.ionoclast.com/random/golf.bin.txt
fuente
#include <unistd.h> int main() { char const s[] = "~}|{zyxwvutsrqponmlkjihgfedcba`_^]\\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#\"! !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~"; write( 1, s, sizeof s ); }
ensamblaje debería funcionar mucho mejor.Rubí, N = 27
Usos a
$
través>
.fuente
Scala, N = 69
Utiliza los caracteres
01246789\bdefu
(escapes unicode) como una forma elegante de escribir(' 'to'~')++('~'to' ')map print
.fuente