Code-Bowling
Brunswick Bowling lo contrató para crear un programa simple para generar el texto Code Bowling
en sus monitores. Esta empresa vale un centavo y cree que puede estafarlos por un poco de dinero.
La descripción del trabajo establece claramente que pagan en base a puntajes y usted está bastante seguro de que puede manipular su sistema de puntaje para su ventaja y obtener el mayor cheque de pago posible de estos tipos. Para hacerlo, será necesario que empaque todo el código que pueda en su programa / función, a pesar de que su sistema de puntuación está diseñado para evitar que lo haga.
¡Saca tus huchas, codifiquemos!
Desafío
El desafío es simplemente generar el texto Code Bowling
, exactamente como está escrito aquí, con el puntaje más alto posible. (Consulte la sección: Sistema de puntuación a continuación)
Las nuevas líneas iniciales y finales (saltos de línea) son aceptables.
Su código puede ser un programa completo o simplemente una función ejecutable.
Reglas
Obligatorio: este desafío está utilizando Code-Bowling: Reglas comunes, Revisión 1.0.0 ; Ver Meta para más detalles.
Carácter: Relación de bytes
En Code-Bowling se prefiere un conteo de caracteres sobre un conteo de bytes. El razonamiento obvio para esto es que los caracteres unicode de varios bytes (p. Ej. que quien más estratégicamente crea un código complejo significativo.Nombres de variables / funciones / objetos
Todos los nombres de variables (o punteros de objetos, nombres de funciones, etc.) deben tener 1 carácter. El único momento aceptable para usar nombres de variables de 2 caracteres es después de que se hayan utilizado todas las posibles variables de 1 carácter. El único momento aceptable para usar nombres de variables de 3 caracteres es después de que se hayan utilizado todas las variables de 2 caracteres posibles. Etc.Código no utilizado Se
debe usar todo el código. Lo que significa que el programa debe fallar para completar siempre la tarea correctamente si se elimina / elimina cualquier carácter individual (o conjunto (s) variable (s) de caracteres). Naturalmente, un subconjunto del programa no debería poder completar la tarea por sí solo sin el resto del programa.Comentarios
No se permiten comentarios sobre el recuento de caracteres, a menos que su programa / función lo utilice de alguna manera.
Sistema de puntuación:
Pangram Challenge:
Un pangrama es una oración que usa cada letra al menos una vez. (El rápido zorro marrón salta sobre el perro perezoso).
Este tipo de desafío tiene un sistema de puntuación diseñado en el que un pangrama perfecto alcanzaría la puntuación máxima teórica (aunque no es necesario que uses todos los personajes al menos una vez). Además, usar cualquier personaje más de una vez comenzará a incurrir en una penalización. Este desafío también se expande a más que solo los caracteres alfabéticos.
Métrica de puntuación:
- Cada personaje utilizado aumenta tu puntuación en 1.
- El uso repetido de cualquier carácter alfanumérico (az, AZ, 0-9) dará como resultado una deducción de 3 puntos por repetición (el primer uso no resulta en una deducción).
- El uso repetido de la puntuación básica
([!?.-,":';])
, incluidos los corchetes, dará como resultado una deducción de 2 puntos por repetición.- El uso repetido de otros caracteres ASCII
{`~@#$%^&*_+=|\/><}
, incluidos los corchetes, dará como resultado una deducción de 4 puntos por repetición.- El uso de espacios, pestañas y líneas nuevas dará como resultado una deducción de 1 punto por uso. Es decir, no cuentan para el carácter total.
- Los caracteres no mencionados anteriormente (Caracteres exóticos) resultarán en una deducción de 1 punto por uso. Es decir, no cuentan para el carácter total.
Herramienta de puntuación:
Se ha creado un widget de puntuación automatizado y se puede encontrar aquí .
Esta es una variante de código de boliche . ¡El programa con la puntuación más alta gana! (Dado que hay un puntaje máximo de 94
, quien lo alcance primero (si se puede alcanzar) se marcará como la respuesta aceptada, aunque otros son libres de seguir respondiendo por diversión)
fuente
Respuestas:
Glifo , 94
El archivo fuente está codificado en CP437 .
Pruébalo en línea!
Explicación
Glypho es bastante útil para desafíos como este porque no le importan los personajes reales que se utilizan en absoluto. En cambio, analiza cada fragmento de 4 caracteres y el comando que se utiliza está determinado por el patrón que forman estos cuatro caracteres:
Eso significa que podemos resolver el problema y luego completar caracteres únicos en cada cuarteto con los caracteres imprimibles y todos los repetidos con algunos de los caracteres "exóticos", que la puntuación ignora. Glypho es lo suficientemente detallado como para que una solución manuscrita normal contenga suficientes caracteres únicos para que quepan dentro de los 94 imprimibles. De hecho, terminé jugando golf hasta que tenía exactamente 94, solo para poder usar personajes exóticos únicos para los repetidos (con suerte, para que sea más difícil reducir el programa).
La forma abreviada del programa anterior es esta:
Donde cada línea imprime uno de los caracteres.
He usado este script Retina para convertirlo a Glypho usando
0123
. Después, acabo de completar los caracteres en lugar de los dígitos.En teoría, podría ser posible reducir esto aún más, si alguien lograra jugar golf en el programa abreviado y luego lograra recombinar los caracteres de manera que aparezcan los patrones correctos, pero no estoy seguro de cómo demostrar o refutar que esto es posible . Si alguien logra formar una solución válida desde un subconjunto de mi programa, avíseme para que pueda eliminar la respuesta hasta que se solucione. Hasta entonces, tendré que suponer que esto es válido.
fuente
94
es el puntaje máximo. Sin embargo, todos los demás son libres de seguir enviando respuestas por diversión .Pitón 3,
828788Gracias a @JonathanAllan por +1 puntaje
Pruébalo en línea!
Nada especial, solo rebanar y saltar caracteres. La cadena se invierte para que no pueda eliminar caracteres y se imprima la cadena original.
fuente
HIJKLMN...
) excepto por cada 8vo carácter, por supuesto?> <> ,
9294¡YAY, LO HICE!
␑
es el carácter exótico\x11
con valor decimal 17. El programa sale con un error después de imprimir el resultado (es un desbordamiento de pila). Tuve que administrar qué espejos y comandos direccionales usé con cuidado, ya que solo puedo usar cada uno una vez.Pruébalo en línea
El programa central:
Explicación:
Empuje la cadena
vCoUV␑3`h]Z_X >
(envolturas de ejecución). Moverse hacia abajo Invierta la pila y retire elv
.Empujar
9
yc
(12). Multiplica para obtener108
(l
). Empujar7
. Presioned
(13), reste1
, divida entre2
para obtener6
. Ponerl
en (x, y) de (13,6), que está debajo dee
. Podría haber hecho esto de manera más corta, pero esto se alarga, así que tengo espacio para poner más caracteres ASCII.Mover hacia arriba en un bucle. Empuje la longitud de la pila con
l
. Si es mayor que 14, el carácter de salida, de lo contrario, cree una nueva pila con los 10 elementos principales, agregue 15 y luego refleje la ejecución, luego hacia arriba y la salida. Esto se usa para evitar que>
se impriman los espacios adicionales al final, así como para convertir la cadena de aspecto aleatorio en lo que debe imprimirse. Continuar en bucle.Si alguna de las líneas es más corta (al eliminar un carácter), el programa ya no funcionará, ya sea porque las partes verticales del programa ya no se alinean o porque la cadena para imprimir ya no es correcta. Intentar eliminar un personaje delante de cada línea cambiará la profundidad de la pila y el lugar donde
l
se coloca, lo que también causará problemas.Pescado
fuente
"
yl
con bastante trabajo. Una vez que llegué a 92, estaba seguro de que debía haber una forma de eliminar el últimoo
. Sin embargo, tomó un poco de esfuerzo. Puedes verlo por el historial de revisiones.Octava,
202122252733Lo mejor que he logrado hasta ahora es
Esto crea una función anónima
f
que no toma entrada. Puedes llamarlof()
. Yo diría que el punto y coma al final es necesario, para evitar la impresión del cuerpo de la función.Es posible que esto pueda mejorarse combinando
eval
yprintf
, pero lo he intentado y he fallado una y otra vez.Esto usa todos los dígitos una vez, explotando el hecho de que Octave realiza una
mod(x,256)
operación cuando convierte implícitamente números a caracteres. Esto significa que podemos usar números negativos, así como números fuera del32-126
rango normal . Los siguientes números de todo el resultado en la letrai
cuando se convierte a caracteres:... -2455 -2199 -1943 ... 105 361 ...
. En lugar de usar'owling'
al final, usamos"nvkhmf"
y agregamos 1. Esto crea un vector de enteros que se convierten implícitamente en caracteres. En lugar de1
, usamos!0
(onot(false)
. Además, usamos en"
lugar de'
para evitar dos puntos de penalización.Necesitamos encontrar el conjunto de números que da la puntuación más baja. El
Code Bowling
resultado de la cadena en la siguiente matriz, cuando restamos y sumamos -10 * 256 - 10 * 256.Entonces, los
['',2627 2415 2148 1893 -2528 66 -1169 -1161 2668 105 -146 103]
resultados enans = Code Bowling
. El desafío es encontrar el conjunto de números y caracteres que reduzca más la puntuación. Por supuesto, usar todos los dígitos es bueno, pero los duplicados son malos. Como se usan todos los dígitos, y los que no se usan dos veces, esta es la mejor combinación posible. Además, podemos usar-
, lo que resulta en un punto.Se podría afirmar que se puede reducir a la línea de abajo (31 puntos), pero que ya no sería una "función ejecutable" y, por lo tanto, tendría una funcionalidad diferente.
fuente
function q();disp(...)
también? Excepto por eli()
, están muy bien sin superposición.cot
dentrohorzcat
ynf
dentro de la cadena bajará el puntaje de manera drástica. Sin embargo, podría ser mejor si eliminohorzcat
y creo la cadena de otra manera, pero tampoco puedo usar+!0
ninguno. Para ser honesto, me sorprendería si aumenta el puntaje ... Es solo 7 caracteres más largo que la respuesta actual, y obtendré una penalización de 7 bytes, además de los que mencioné.function
, pero luego pensé que ya lo habrías intentado y estaría perdiendo mi tiempo (en lugar de, ya sabes, pasar mi tiempo útilmente en PPCG)QBasic, 34
Este es un código sin formato (yay para la mayúsculas y minúsculas). Puede ejecutarlo en QB64 o en archive.org (aunque tenga en cuenta que este último formateará el código a medida que lo escriba). Yo creo que he logrado cumplir con todas las reglas.
El
CLS
es necesaria: sin ella, elC
no está garantizado para imprimir en la esquina superior izquierda de la pantalla, donde se alineará conode Bowling
. ElLOcatE
es necesaria: sin ella,ode Bowling
se imprimirá en la línea de abajoC
. No creo que haya ningún subconjunto del programa (excepto los espacios en blanco) que se pueda eliminar y mantener el mismo resultado.fuente
Parse failed: Syntax error at 3:36: Token(Bowling)
LOCATE 1, 2
el que lo hizoC,
2729¡+2 puntos gracias a @ceilingcat!
fuente
char q<:]
lugar dechar q[]
y enputs(q);%>
lugar deputs(q);}
+2 points thanks to ...
Haskell , puntaje
213846472170Pruébalo en línea! La idea es obtener el liderazgo
C
construyendo una cadena de longitud 67 que contenga todos los caracteres no utilizados de otra manera y convirtiendo la longitud de esta cadena en un carácter. Comencé conputStr$toEnum(length""):"ode B\x6Fwling"
('\x6F'
es hexadecimal para el'\111'
que produce'o'
) y calculé todos los caracteres ASCII imprimibles que no figuran en el programa:Por cierto, quedan exactamente 67 caracteres ASCII imprimibles que pueden colocarse en la cadena, y en
C
sí mismos que no pueden aparecer en la cadena porque entonces el programa sería reducible a soloputStr"Code B\x6Fwling"
.Solución anterior: (puntaje 21)
Define una función
f
que no toma entrada e imprime la cadena. Pruébalo en línea!fuente
95
la cadena y restando4621
? (No tengo tiempo para comprobarlo ahora mismo, pero lo investigaré más adelante)JavaScript, 19
No es un puntaje muy alto.
fuente
z(){var x=alert('Code \nBowling');}
function
antesf
o
no se usóprompt('C\157de B\x6fwlin'+"g")
Gelatina , 94
Pruébalo en línea!
105 personajes únicos, 11 exóticos (
“¹³⁵⁷°⁹⁻”ḄỌ
).¿Cómo?
Forma la cadena de ASCII invertido de 8 bits donde cada bit se codifica utilizando el LSB del valor Unicode de un carácter.
fuente
Röda , 33
Pruébalo en línea!
Traté de seguir todas las reglas. Funciona empujando primero la cadena
ode Bowling!
a la secuencia y luego insertandoC
= 3 * 4 + 57-2 al frente.fuente
Cardenal 20
23 caracteres que no son espacios en blanco
% #> / NI "CodeB8 ^ o) wl, ing
-3 por "o" repetido
Trayectorias de puntero:
Paso 1:
puntero creado en% a la derecha
Paso 2: el
puntero se divide en # para subir, derecha y abajo (P1, P2, P3)
Paso 3 :
P1 Enviado directamente por>
P2 Ir a la derecha
P3 Establecer esperar 3 pasos a las 8
Paso 4:
P1 Reflejado hacia abajo por \. \ cambiado a /
P2 Establecido en modo de impresión por "
P3 Espere 2 tics a las 8
Paso 5:
P1 Encabezado hacia abajo
P2 Imprimir C
P3 Esperar 1 marca a 8
Paso 6:
P1 enviado por ^
P2 Imprimir o
P3 Finalizar esperar al continuar, recoger el valor ASCII de "" (32) de)
Paso 7: P1 Encabezado hacia arriba
P2 Imprimir d
P3 Encabezado hacia abajo
Paso 8: P1 Reflejado a la derecha por \ que se cambió a /
P2 Imprimir e
P3 Imprimir carácter con valor ASCII = 32 desde, operación
Paso 9:
P1 Reflejado hacia arriba por / que se cambia a \
P2 Imprimir B
P3 Al final del campo alcanzado y se detiene
Paso 10:
P1 Reflejado hacia abajo por I
P2 Alcanzado el final del campo y se detiene
Paso 11:
P1 Reflejado a la derecha por / que se cambió a \. Los cambios vuelven a /
Paso 12:
P1 Reflejado a la izquierda por N
Paso 13:
P1 Reflejado hacia abajo por /
Paso 14:
P1 Configure el modo de impresión con "
Paso 15:
P1 Imprimir o
Paso 16:
P1 Imprimir w
Paso 17:
P1 Imprimir l
Paso 18:
P1 Imprimir i
Paso 19:
P1 Imprimir n
Paso 20:
P1 Imprimir g
Paso 21:
P1 llega al final del campo y se detiene.
Pruébalo en línea
fuente
C, 73
Gracias a @Laikoni!
Pruébalo en línea!
C,
313335¡Gracias a @ceilingcat y @DLosc por dos puntos más y gracias a @ Ørjan Johansen por otros dos puntos más!
Pruébalo en línea!
fuente
8-
código válido y todavía.0xA-4+8
Sin embargo, debería funcionar.0xA+32/8
? (Sin que algo sea removible, eso es)+32
,+3
,+2
,+3/8
,+2/8
,/8
o+8
produce la salida derecha. ¡Gracias!0xD+4*8/32
. No, espera, eso se acortaría,0xD+4/3
¿no?Lote, 19 caracteres.
Comenzando con Windows Vista,
TMP
comienza conC:\Users\
y, por%TMP:~5,1%
lo tanto, es una forma detallada de escribire
, a pesar de requerir una%
penalización doble de -4.fuente
Brainfuck: -204
Bueno, puntaje horrible, pero fue divertido de escribir.
fuente
Java 8,
235131718192021247778 puntosPuntuación +53 (24 → 77) gracias a @Laikoni .
104 caracteres de largo
- alnum repetido: -15 (
helng
)- puntuación repetida: -10 (
"()""
)- otros caracteres ASCII repetidos: ninguno
- caracteres de espacio en blanco: -1
PUNTUACIÓN: 78
Pruébalo en línea.
Antigua respuesta de 24 bytes :
30 caracteres de largo
- alnum repetido: -3 (
1
)- puntuación repetida: -2 (
"
)- otros ASCII repetidos: ninguno
- caracteres de espacio en blanco: -1
PUNTUACIÓN: 24
Pruébalo en línea.
fuente
Object x(){return"C\157de Bowling";}
hace unas horas por 17 puntos ... Aparentemente, no lo he editado / guardado en mi envío, aunque ...: S En cuanto a la lambda, uso Java 7 que no tengo lambdas todavía. Sin embargo, podría agregar una respuesta Java 8 con lambda.7
. (Pero no olvide la concatenación.),,
con,;
otro +1. Es curioso cómo la cadena que usa todos los ASCII imprimibles disponibles que quedaron EXACTAMENTE 97 caracteres para el código de caracteresC
. :)apilados , 42
Pruébalo en línea!
Deja la salida en la pila. Aquí está el desglose:
Probablemente podría hacerlo más alto, pero está en 42 soo ...
Otro contendiente, 40:
Usé este script para calificarlo.
fuente
mal , -81
¡Mejor que Brainfuck!
Explicación
Enviado porque nadie hace nada malo, pero es divertido.
Puntuación:
Longitud = 63
Pruébalo en línea!
EDITAR: TiO parece manejar incorrectamente la creación y eliminación de nuevas celdas de Wheel: he presentado un informe de error sobre el tema. No funcionará correctamente allí, pero lo ejecuté en mi propio intérprete y funciona y puedes confiar en mí para que no me preocupe por eso;)
fuente
Perl:
29, 33Puntuación:
fuente
05AB1E , 94 puntos
Pruébalo en línea!
Básicamente convierte (El ASCII binario de Bowling de código):
En una cadena de 1 y 0, reemplaza cada 1 con una letra en el alfabeto y cada 0 con un carácter de espacio o un símbolo o un dígito.
Es la cadena, donde los 1 son letras y los 0 son símbolos, números o cualquier otra cosa. Luego iteramos, viendo cuáles son alfabéticos, presionando 1 para alfabético 0 para no alfabético. Luego nos dividimos en grupos de 7, convertimos nuevamente a ASCII e imprimimos cada carácter.
fuente
T-SQL,
651832! puntosInspirado por un truco en la respuesta QBasic de Dlosc , encontré una manera de incluir los 10 dígitos y la mayoría de los operadores matemáticos (
%
es el resto / módulo, solo falta/
), principalmente a través de prueba y error. No creo que haya ninguna forma de obtener un 67 eliminando cualquier combinación de dígitos / símbolos, pero puede intentarlo.Versión 2 (18 puntos, trivial):
No es un gran puntaje, pero esto es lo que simplificó mi primera versión (gracias, MickyT). Todo lo demás que intenté (codificar y decodificar hex64, seleccionar elementos individuales de una cadena, convertir valores ASCII, etc.) tenía demasiados caracteres repetidos (especialmente
ECR
y símbolos(),@
) que lo llevan a lo negativo.Versión 1 (65 puntos, inválido):
Usé la longitud de la cadena para determinar cuántos caracteres uso desde el lado izquierdo, por lo que eliminar cualquier carácter individual de la cadena reducirá el resultado de la división entera a 11, produciendo solo
Code Bowlin
.fuente
DECLARE @ char(12)='Code Bowling'PRINT @
las reglas.; # , puntaje -1163, no competitivo
No creo que esto sea mucha competencia, incluso si pudiera competir.
Pruébalo en línea! Nota: TIO no tiene; # intérprete, solo; # +.
fuente
CJam , puntaje 47
Esperemos que no haya problemas con esto ...
Utiliza un carácter exótico (Separador de unidades, ASCII 31, representado por
␟
) y un carácter repetido ("
). Creo que podría alargarse aún más, pero lo dejaré como está por ahora.Pruébalo en línea!
El programa funciona tomando esa cadena larga y dividiéndola en subcadenas de longitud 3. Cada subcadena se asigna al bloque, que convierte sus caracteres a sus valores ASCII, volca los valores en la pila, toma la diferencia absoluta de los segundos dos, agrega el resultado con el primero y luego convierte el resultado final de nuevo en un ASCII personaje.
fuente
CJam, puntaje 93
Pruébalo en línea
Inspirado en la respuesta Python de TidB .
No estoy seguro de si hay alguna forma de evitar la repetición de las comillas dobles.
Explicación:
La cadena contiene "Cpde Bowling" en reversa, cada 8 caracteres.
7~%
extrae "Cpde Bowling" (7~
=-8
)2,.-
disminuye el carácter p (2,
=[0 1]
)fuente
PHP, 33 puntos
Esto fue bastante difícil de resolver.
El puntaje puede ser mejorado en el futuro.
¡Se supone que la nueva línea es una nueva línea de estilo Linux! El estilo Windows y el estilo Old-Mac no funcionarán correctamente.
fuente
Rubí, 75
Aproximadamente un puerto de la respuesta de Python, pero Ruby no tiene esa función de paso genial, así que la uso
gsub
en su lugar. También decidí divertirme un poco con los personajes exóticos lanzando frases en el Traductor de GooglePruébalo en línea!
fuente
USML, 12 o 9 puntos (no competidor)
Pruébalo en línea!
Esta respuesta engaña un poco al abusar de cómo se representa HTML. La cadena realmente creada por esto es
"Code\tBowling "
. Se pierden puntos por repetir el carácter "o".Para una respuesta no engañosa:
USML todavía está bastante temprano en el desarrollo y aún no es capaz de aumentar el tamaño del programa.
fuente
"Code&'Bowling
(* Nota: Reemplazar&
con un salto de línea, no me deja escribirlos en los comentarios)s
a la siguiente línea (obteniendo una subcadena de nada, sin cambiar la salida) para obtener su puntaje competitivo hasta 12, lo mismo que su puntaje no competitivo, excepto un real presentación válida: DCubix , 85
Pruébalo en línea!
Cubicado con caracteres insignificantes reemplazados por.
Creo que he hecho el camino lo suficientemente frágil como para que eliminar personajes lo rompa bastante mal.
Míralo correr
fuente
VB.net, 68
Una prueba rápida que aprovecha la insensibilidad de mayúsculas y minúsculas de VB y la falta de necesidad de "sistema".
fuente
cONSOLE.WRITE("Code Bowling")
?Shell: puntaje 17
Puntuación total: 17
fuente
Acc !! 171 caracteres
Pruébalo en línea!
Acc !! funciona bien para este desafío ya que los espacios en blanco son necesarios y los bucles son costosos. Hice uso del Acc umulator aquí, pero mal, para aumentar los caracteres. Aquí hay una breve descripción de la página:
Los bucles en Acc, al menos para jugar al golf, son un dolor. Requieren llaves, y todo el espacio en blanco es necesario. De lo contrario, se explica por sí mismo.
fuente