Si te gusta esto, considera participar en:
El desafío mensual de golf de código Dyalog APL 2017
Haga 12 fragmentos / expresiones , en el mismo idioma, que den como resultado los números del 0 al 10 y 42 respectivamente, pero sin escribir ningún dato numérico literal, cadena o carácter.
Los datos incorporados , como PI()
y ALPHABET()
, están bien, y también lo están, por ejemplo, las constantes U, X, Y, Z y A de CJam, y las MEZCLAS, ACORDES, CENTROS, INTERRUPCIONES y LÍNEAS de Processing.
Cada fragmento debe poder sostenerse por sí mismo, es decir, puede que no sean interdependientes. Sin embargo, dentro de un solo fragmento, puede asignar una variable y usarla libremente, siempre que se refiera directamente a ella por nombre y no a través de una cadena que contenga su nombre.
Todos los fragmentos deben ser válidos en la computadora del remitente en el momento del envío (según lo informado por SE), pero no pueden depender de condiciones locales inusuales como el número de archivos en un directorio, la fecha u hora exacta o la entrada específica del usuario .
Ejemplos de fragmentos válidos
3: INT(LOG10(YEAR(TODAY())))
porque sigue siendo cierto en el futuro previsible
4: CUBICROOT(LEN(CHARACTERSET()))
porque un juego de caracteres de 256 letras es muy común
8: SQRT(SYSTEMTYPE())
porque los sistemas de 64 bits son muy comunes
Ejemplos de fragmentos inválidos
5: LEN(USERNAME())
porque la mayoría de las personas no usan "Admin" como inicio de sesión :-)
9: LOG10(SYSTEMMEMORY())
porque solo funciona en sistemas con exactamente 1 GB de memoria
42: CODE("*")
porque contiene una cadena / carácter literal
El resultado de cada fragmento debe dar como resultado un número real (valor, int, flotante, etc.) que se pueda usar para cálculos adicionales utilizando el mismo idioma que el fragmento, es decir, no una cadena de texto que represente ese número.
Solo se permiten idiomas basados en caracteres.
La puntuación es el recuento total de bytes de los 12 fragmentos combinados. Las nuevas líneas que separan los fragmentos no se cuentan.
Tenga en cuenta que las reglas anteriores pueden evitar que algunos idiomas participen, incluso si están completos en Turing.
Preguntas más frecuentes
P ¿Pueden los programas aceptar alguna entrada?
A Sí, pero puede que no solo solicite información e ingrese el número relevante.
P ¿Están permitidos los dígitos físicos (sin datos)?
Un sí, por ejemplo LOG10()
.
P ¿Los símbolos en Ruby cuentan como literales?
Un sí.
P ¿La puntuación incluye nuevas líneas entre cada fragmento?
Un no
P ¿TI-BASIC está "suficientemente basado en caracteres" para ser válido?
Un sí.
P ¿Cuentan falso y verdadero como literales numéricos?
A No, son aceptables.
P ¿Podemos usar un número literal para llamar a una función si esa es la única forma y el número no influye en la salida de la función?
A Sí, si esa es la forma normal de escribir código en su idioma.
P Mi lenguaje supone que hay un [algo] al comienzo de cada programa / expresión. ¿Debo incluirlo o mis fragmentos deberían funcionar si se colocan en el medio de un programa / expresión?
A Deberían funcionar en el medio de un programa / expresión.
P ¿Qué pasa con los literales regex?
Una prohibido, excepto para los idiomas que sólo hacen expresiones regulares.
P ¿Es aceptable una pieza de código que pueda imprimir todos los números especificados?
R No, tienen que estar separados y ser independientes entre sí.
P ¿ Puedo suponer una placa repetitiva como int main() {}...
o equivalente?
Un sí.
P ¿Qué tipos de datos de salida están permitidos?
A Cualquier tipo de datos numéricos, como int, float, etc.
P ¿Necesito imprimir el resultado de cada fragmento?
R No, hacer que el resultado esté disponible para su uso posterior es suficiente.
P ¿Se permiten variables preestablecidas?
A Sí, y se restablecen (si se cambia) para cada fragmento.
P ¿Se consideran π y e literales numéricos?
A No, puedes usarlos.
P ¿ Puedo devolver 4 y 2 en celdas diferentes para 42?
A No, deben estar conectados como un número.
Q Bytes o caracteres?
A Bytes, pero puede elegir cualquier página de códigos deseada.
P ¿Se pueden utilizar funciones constantes y variables preestablecidas como J's 9:
, Actually 9
y Pretzel's 9
?
A Sí, si el vocabulario es finito (19 para J, 10 para Actually y Pretzel).
Respuestas:
Hexagonía , 13 bytes.
Pruébalo en línea!
En Hexagony,
0
through9
son funciones que multiplican la memoria actual por 10 y luego suman el número representado por el nombre de la función. Por lo tanto, el primer fragmento está vacío ya que los recuerdos comienzan como0
.Por ejemplo, si la memoria actual es
65
, ejecutar la función3
hará que la memoria actual653
.(Para los votantes que votan a favor: denieguen todo lo que quieran; estoy listo).
fuente
Funciton , 1222 bytes
Además de los literales numéricos, hay dos formas en que puedo producir un valor (cualquier valor) en Funciton: expresiones stdin y lambda. Stdin es un cuadro único, mientras que una expresión lambda completa requiere más sintaxis, así que voy con stdin. Sin embargo, aunque stdin podría ser cualquier cosa, todo lo siguiente funciona independientemente de qué entrada se proporcione.
Todas las funciones de la biblioteca utilizadas aquí existían antes de que se publicara el desafío.
0 (40 bytes en UTF-16)
Esto usa la sintaxis en bruto para menor que. Un valor nunca es menor que sí mismo, por lo que el resultado es 0.
1 (52 bytes en UTF-16)
⌑
devuelve una secuencia perezosa que contiene un único elemento yɕ
cuenta el número de elementos. (¡La secuencia perezosa es lo suficientemente perezosa como para que este fragmento no evalúe el stdin en absoluto!)2 (70 bytes en UTF-16)
= 2¹.
ʂ
genera todas las subsecuencias de una secuencia y, por lo tanto, convierte una secuencia de n elementos en uno con 2ⁿ.3 (88 bytes en UTF-16)
= 2 + 1.
♯
incrementa un valor en 1.4 (88 bytes en UTF-16)
= 2².
5 (106 bytes en UTF-16)
= 4 + 1.
6 (106 bytes en UTF-16)
= 3 factorial.
7 (110 bytes en UTF-16)
= A (2, 2) (función de Ackermann).
8 (118 bytes en UTF-16)
= 2 << 2 (desplazamiento a la izquierda).
9 (128 bytes en UTF-16)
= 3 × 3.
10 (146 bytes en UTF-16)
= 5 + 5.
42 (170 bytes en UTF-16)
= 6 × (6 + 1).
fuente
JavaScript,
144141140138132125123 bytesCon la ayuda de @ edc65 , @Sjoerd Job Postmus , @DocMax , @usandfriends , @Charlie Wynn y @ Mwr247 .
fuente
-~-~Math.PI
y-~-~-~Math.PI
guardar otro byte (dos veces).(escape+NaN).length
. PS Hoy aprendí que JavaScript es muy raro ...NaN
Mouse-2002 ,
27261714 bytesLos primeros fragmentos empujan 0-10, y luego
ZR+
empuja y es .25
17
25 17 + 42 =
1
fuente
int main() {}...
equivalente repetitivo que lo hará funcionar.CJam,
2724 bytes¡Gracias a @ MartinBüttner por -1 byte!
Pruébalo en línea!
fuente
Brainfuck, 70 bytes
Cada línea debe ejecutarse individualmente.
Los primeros 10 se explican por sí mismos: incrementamos el valor de la celda a través de cada signo más.
El 42 es mucho más complejo. Se basa en el hecho de que el intérprete más loco utiliza celdas de 8 bits, lo que significa que todas las operaciones se realizan en el módulo 256.
--
Establece la celda # 0 a 254. Luego ingresamos un bucle que se ejecuta hasta que la celda # 0 es 0. Cada iteración agrega 1 a la celda # 1 y agrega 6 a la celda # 0. Este bucle se ejecuta 43 veces, por lo que la celda # 1 es 43. Finalmente, restamos 1 de la celda # 1 para que sea 42.Obtuve los 42 más eficientes encontrados de http://esolangs.org/wiki/Brainfuck_constants
fuente
Oscuridad ,
339303bytesAquí es donde la oscuridad realmente brilla . ¿Consíguelo? : ~)!
Sin imprimir (reemplazó el espacio con
\s
en la primera línea ya que no se mostrará de otra manera):Con impresión:
Cada línea debe ejecutarse individualmente en este caso ya que el programa termina en la luz (un espacio). Sin embargo, es posible escribir esto en una o varias líneas en el mismo programa.
La oscuridad regular (█) incrementa un registro en 1, y la instrucción ■ (algún tipo de mini-oscuridad) genera el contenido del registro.
fuente
Perl 5,
86757166 bytesTodos los
^F
s son caracteres de control literal (0x06 en ASCII) y, por lo tanto, un solo byte.¡Gracias a msh210 por guardar 11 bytes y Dom Hastings por 9 bytes!
fuente
!$[+ord$/ # -1 + 10
No lo entiendo. En la línea 2 dices que!$[
te da 1, no -1, por lo que este fragmento da 11.MATL, 30 bytes
H
,I
yK
son constantes predefinidas para 2, 3 y 4 (comopi
).O
yl
son funciones que devuelven una matriz de ceros (O
) o unos (l
), el tamaño predeterminado es 1x1.:
hace un vector y los
suma, así queK:s
hace un vector del 1 al 4 y lo suma para obtener 10.Yq
es la función n-ésima, asíKYq
es el 4º primo, 7.fuente
Yq
función (y su implementación) fue una muy buena sugerencia tuya :-)IK+
funcionaría igual de bien para 7, pero es un poco aburrido: PPrólogo,
11399 bytesFragmentos
Combina las constantes matemáticas e y pi de diferentes maneras convertidas en int.
Editar: se guardaron 14 bytes utilizando flotantes para 0-2.
fuente
PHP,
15714591 bytesPublicando por primera vez en Code Golf, pensé que le daría una oportunidad. Eventualmente mejoraré: P Si ves algún lugar obvio (para ti) donde pueda guardar personajes, avísame.
EDITAR: Me di cuenta de que no necesitaba los puntos y comas, ya que estos son solo fragmentos.
EDIT2: ¡Gracias a Blackhole por muchas sugerencias!
fuente
LC_ALL
para 0 (-1 byte),DNS_A
para 1 (-3 bytes),LOCK_NB
para 4 (-3 bytes),LC_TIME
para 5 (-7 bytes),LOG_INFO
para 6 (-8 bytes),INI_ALL
para 7 (-5 bytes), ...IMG_WBMP
Para 8 (-4 bytes),SQL_DATE
para 9 (-9 bytes),SQL_TIME
para 10 (-3 bytes) yLOG_INFO*INI_ALL
para 42 (-11 bytes). ¡De ahí un total de 51 bytes guardados! Estas constantes son válidas al menos en PHP 5.6.1 en Windows.LC_ALL
una cosa dependiente de la localidad?setlocale()
para cambiar todas las categorías de configuraciones regionales. Pero el valor de la constante en sí es, por supuesto, independiente de la configuración regional :).Python 2,
191159158157156149146 bytesMi primera presentación, ¡espero haberlo hecho todo bien! Según el tiempo que pasé en esto, creo que seguramente hay uno mejor para algunos de ellos.
Muchas gracias a FryAmTheEggman!
fuente
True
como modismo para 1 debería ser aceptable, ya que no sé cuándo no son equivalentes como fragmentos.True is not 1
pero para todos los cálculos basados en 1, ayuda! Editando ahora.#8 len(`id(id)`)
. Entonces 8, 9 y 10 serán más cortos. Además, quizás agregue un hipervínculo para Probar en línea .len(`{()}`)
11 bytes, y eso le da 7 a 10 más corto.C #, sin usos, 234 bytes
Esto es mucho más aburrido de lo que inicialmente pensé que iba a ser. Tenía ideas muy variadas, como
new[]{true}.Length
ytrue.GetHashCode()
ytypeof(int).Name.Length
yuint.MinValue
etc., pero lasnew int()
superaba a todas.fuente
var a = new int();
y luego usarloa
en cada fragmento?using
declaración.int a=-~-~new int();a<<a
PowerShell, 147 bytes
Estos se utilizan
+
para convertir cosas implícitamente en enteros. Los números posteriores usan Enums de las bases de .Net Framework de PowerShell que tienen los valores correctos.-~-~-~
usado en JavaScript, C # y las respuestas de PHP estarían- -bnot - -bnot - -bnot
en PowerShell.x^y
la exponenciación utilizada en las respuestas de Perl, ox**y
en Python o JavaScript ES7, sería[Math]::Pow($x,$y)
las constantes e y Pi son las de carácter pesado
[Math]::E
y[Math]::PI
fuente
x^y
es xor en JavaScript. JavaScript (ES7) tiene**
para exponentes. FuenteDC , 35 bytes
Para probar los fragmentos, agregue un
f
para imprimir la pila y pasar esa cadena adc
:fuente
E
yF
aquí hay dígitos (incluso cuando son mayores que la raíz de entrada). La evidencia de esto es que se combinan como dígitos; por ejemploF0
->150
. Puede ver el mismo comportamiento con los dígitos decimales una vez que cambie la raíz de entrada y salida.TI-BASIC, 41 bytes
0 ~ 10:
42:
En TI-BASIC, todas las variables de una sola letra no inicializadas comienzan en 0 y
Xmax
(el límite de la ventana derecha de la pantalla del gráfico) comienza en 10.La constante matemática
π
es un byte , peroe
tiene dos bytes.fuente
Python 2,
306275274 bytesUtilicé el hecho de que para cualquier x (entero y no 0) la expresión
x/x
es igual a 1 y jugué con algunas operaciones bit a bit.Ajusté los fragmentos de modo que todavía cumplan con los requisitos (gracias @nimi, esto me ahorró 24 bytes), pero tienes que probarlos manualmente. Aquí está el código y el recuento de bytes individuales:
fuente
i=id(id);r=~i/i
Math ++, 92 bytes en total
0 (1 bytes):
a
1 (2 bytes):
!a
2 (3 bytes):
_$e
3 (4 bytes):
_$pi
4 (7 bytes):
_$e+_$e
5 (8 bytes):
_($e+$e)
6 (9 bytes):
_$pi+_$pi
7 (8 bytes):
_($e*$e)
8 (9 bytes):
_($e*$pi)
9 (10 bytes):
_($pi*$pi)
10 (12 bytes):
_$e*_($e+$e)
42 (19 bytes):
_($pi+$pi)*_($e*$e)
fuente
Javascript (Browser Env),
155136130 bytesGracias a:
@Ismael Miguel : 155 -> 136 -> 130 bytes
fuente
-~[]+[]+-[]
para producir10
. Devolverá una cadena, pero aún se puede usar como un número. Además, puede usar-~(top+top.s).length
para calcular42
(-8 bytes) y eliminar su dependencia de Google Chrome. Para guardar más 3 bytes, use(P=Math.PI)*P>>+[]
para calcular 9.~(~[]+[]+-[])
para generar9
. Eso debería reducir algunos bytes más.+[12]
da12
y+[1, 2]
daNaN
. Odio a JS[1,2,3]
=>"1,2,3"
y las cadenas se convierten en números como"12"
=>12
pero si hay caracteres que no son números en la cadena, la conversión vuelveNaN
.+[1,2]
se"1,2"
convierte en una cadena y luego en un número, pero la cadena contiene una coma, por lo que se convierteNaN
.En serio,
3933 bytesLas cosas entre paréntesis son explicaciones:
Hexdumps de programas:
¡Gracias a quintopia por 6 bytes!
fuente
HlPD
ahorra 2 bytes en 42, yQlP
guarda un byte en 7, yQlª
guarda un byte en 9, yQl╙
guarda un byte en 8. Creo que eso se reduce seriamente a 33 bytes, relacionando a Pyth.dc, 42 bytes
Resultados
No hay muchas maneras de generar nuevos números con CC. Yo uso
O
: base de salida, inicialmente 10;K
: precisión, inicialmente 0;z
profundidad de la pila, inicialmente 0;Z
dígitos significativos del operando. Combinamos estos con los operadores aritméticos habituales.Programa de prueba
fuente
Mathematica, 101 bytes
Estoy bastante seguro de que algunos de estos son subóptimos. Esos corchetes son realmente caros.
Por coherencia, los dos primeros también podrían serlo
E-E
y,E/E
por supuesto, pero pensé que es bastante ingenioso obtener0
y1
de un cálculo con variables indefinidas.fuente
0
. Sia
obtiene el valor0
después, eso no es un problema, siempre que no se use cuandoa/a
se evalúa.Japt ,
343330 bytes1 byte guardado gracias a @ThomasKwa
Esto es lo que significa cada uno de los diferentes caracteres:
fuente
A-I
son variables que, por defecto, se asignan a varios números, como se muestra arriba.A-F
son asignados a 10-15. ¿Esto invalida esas variables?Maravilloso , 98 bytes
No es terriblemente emocionante, se basa en los
?n
dispositivos que convierten cualquier canica en un valor aleatorio en el rango 0..n (inclusive) un efecto secundario de esto es que?0
convierte cualquier canica en 0 independientemente de la entrada. Creo que el uso de literales está permitido porque el valor no afecta el resultado y no hay otra forma de llamar a una función una vez en Marbelous.0:
1:
...
9:
10:
42:
fuente
> <> , 86 bytes
ln;
lln;
llln;
lll+n;
lll:+n;
llll+n;
llll++n;
ollll:+n;
lllll+n;
lllll:+n;
lllll++n;
ollllll+n;
llll+:+n;
olll:l+*n;
llll*ll+*n;
Se basa en el tamaño de la pila para obtener sus literales.
fuente
n
en cada uno porque las funciones en lenguajes basados en la pila pueden dejar la salida en la pila por -11 bytes.;
un total de 22 bytes y considerar el final de la función alcanzada al final de la línea, pero es un poco ambiguo ya><>
que no tiene funciones listas para usar .><>
, sus funciones tienen que aceptar una posición de retorno (x & y) en la pila además de sus parámetros, asegúrese de que no estén en el camino al hacer los cálculos ([
es útil en ese contexto), luego salte a la posición de retorno después de haber terminado la ejecución. Había hecho un POC hace un tiempo, échale un vistazo si estás interesado;
. La razón por la que digo dejar;
es porque de lo contrario no hay forma de denotar cuando la función termina sin a.
. La mayoría de la gente parece considerar esto justo, pero podría tratar de escribir una meta publicación específica aquí si le preocupa.><>
fragmentos.
sería la mejor manera de apegarse a la definición de función como se describe en la respuesta más votada de la meta publicación, sin embargo, estoy de acuerdo en que;
es una buena alternativa que requiere menos explicación.Fórmulas de MS Excel,
163151150143 bytesNo es exactamente un lenguaje de programación, pero aquí va ...
PI()
se usa en la mayoría de los casos, ya que es la forma más corta (que yo sepa) de introducir un valor numérico sin usar un número o un literal de cadena.N
convierte varias cosas (incluidos booleanos) en números, yT
convierte varias cosas en texto.TYPE
devuelve 2 para un argumento de texto y 4 para un argumento booleano.TRUNC
descarta la parte fraccionaria (es decir, redondea los números positivos hacia abajo),EVEN
redondea al siguiente número par yODD
redondea al siguiente número impar.CODE(-PI())
es el código ASCII del primer carácter de la conversión a texto de -π, es decir, 45 (para "-").EDITAR: Se eliminaron los signos de igual del recuento de bytes (-12!) - como lo señaló Nᴮᶻ en los comentarios, no se supone que estén incluidos.
EDITAR 2: suponiendo que el resto de la hoja de trabajo esté vacía, es posible usar una referencia a una celda vacía como cero (nuevamente, sugerido por Nᴮᶻ) siempre que incluyamos un signo menos (o lo usemos en otra expresión numérica) para resolver ambigüedad tipo.
fuente
=Z9
=
s, gracias. Con respecto a su sugerencia, evité las referencias de celda a propósito, para asegurarme de que las fórmulas sean independientes del contenido de la tabla; siZ9
contiene un texto,=Z9
ya no devolverá cero. Decidí no asumir nada sobre la mesa.Z9
en una hoja vacía hay un valor vacío que se convierte0
en muchos casos, pero que puede convertirse a""
(cadena vacía) si se usa en algunas expresiones, al igual que una variante no inicializada de VBA, por lo que no es estrictamente equivalente a0
. Por ejemplo,= 0&"a"
se evalúa como"0a"
pero se= Z9&"a"
evalúa como"a"
. Sin embargo, esto se puede resolver agregando un unario-
a la referencia (lo que obliga a que sea numérico, nuevamente, al igual que en VBA). Entonces-Z9
se puede usar como cero. Acabo de actualizar la respuesta. Gracias de nuevo.DUP , 68 bytes
Try it here.
Hay MUCHAS formas de hacer esto, pero estoy abusando de la pila de retorno para esta.
Explicación
Para resolverlo completamente, debe comprender el comportamiento de DUP con respecto a las lambdas. En lugar de empujar el lambda a la pila, en realidad empuja la IP actual a la pila cuando se detecta el lambda. Eso puede explicar los primeros 3 fragmentos, que involucran lambdas.
Los siguientes fragmentos usan la pila de retorno. Cuando
!
se ejecuta, la IP actual se empuja a la pila de retorno, y la parte superior de la pila se establece como la nueva IP para iniciar la ejecución lambda.)
saca un número de la pila de retorno a la pila de datos.Eso es más que suficiente para explicar el resto de los fragmentos. Si aún no lo entiende, tenga en cuenta que el Stepbotón es bastante útil.
fuente
05AB1E,
403824 bytesfuente
Y·
es más limpio de pila queYx
,X
se puede usar en lugar deº
aquí (por defecto1
,º
significalen(stack)>1
, por lo que no se predetermina a nada). Además, su bytecount es 24, no 35 (CP-1252, las líneas nuevas no cuentan si son fragmentos separados).₆t
ahora (presione 36, raíz cuadrada) para guardar un byte ( Pruébelo en línea ).D1ffe7e45e , 112
Cada línea es un fragmento diferente.
Los números en el programa no cuentan como literales numéricos ya que solo se usan como comandos.
El último definitivamente se puede jugar más al golf.
EDITAR: Obtuve el intérprete funcionando y todos los fragmentos funcionan. Si desea probar si usted mismo, agregue
0f0f
al final del fragmento para que el programa finalice.fuente
+
en Brainf ** k). Pensé que, dado que se usan como comandos y no como literales numéricos, todavía contaba. Eliminaré la respuesta si no lo hace.Pyth,
353433 bytes-1 byte por @Mimarik
Hay varias posibilidades para algunos programas.
0, 1 byte
1, 2 bytes
2, 3 bytes
3, 3 bytes
4, 3 bytes
5, 4 bytes
6, 3 bytes
7, 4 bytes
8, 3 bytes
9, 2 bytes
10, 1 byte
42, 4 bytes
Todos estos involucran comandos básicos double (
y
), +1 (h
) y -1 (t
), ol
(longitud de una cadena). La variable Z se inicializa a cero.Para 5,
b
se inicializa a un carácter de nueva línea. Backtick da"\n"
(incluidas las comillas, y la longitud de esa cadena es 4.Pruébalos aquí !
fuente
yhyT
. ( Rechacé la edición según meta.codegolf.stackexchange.com/questions/1615/… )