Su desafío es escribir un políglota que funcione en diferentes versiones de su idioma. Cuando se ejecuta, siempre generará la versión del idioma.
Reglas
- Su programa debería funcionar en al menos dos versiones de su idioma.
- La salida de su programa solo debe ser el número de versión. No hay datos extraños.
- Su programa puede usar cualquier método que desee para determinar el número de versión. Sin embargo, el resultado debe seguir la regla 2; sin embargo, usted determina el número de versión, la salida solo debe ser el número.
- Su programa solo necesita generar la versión principal del idioma. Por ejemplo, en FooBar 12.3.456789-beta, su programa solo necesitaría la salida 12.
- Si su idioma coloca palabras o símbolos antes o después del número de versión, no es necesario que los muestre, y solo el número. Por ejemplo, en C89, su programa solo necesita imprimir
89
, y en C ++ 0x, su programa solo necesita imprimir0
. - Si se opta por imprimir los números de nombre o menor de la versión completa, por ejemplo, C89 a C99 en contraposición, se debe solamente imprimir el nombre.
C89 build 32
es válido, mientraserror in C89 build 32: foo bar
que no lo es. - Su programa no puede usar indicadores de compilación integrados, macros o personalizados para determinar la versión del idioma.
Puntuación
Su puntaje será la longitud del código dividido por el número de versiones en las que funciona. El puntaje más bajo gana, ¡buena suerte!
(number of languages)^3 / (byte count)
.Respuestas:
En serio y en realidad , 3 bytes, puntaje 1.5
Pruébelo en línea: en realidad , en serio
Explicación:
u
yD
tener funcionalidad en las cadenas solo se agregó en Actually (que es Seriously v2).fuente
v1
rama. Antes de ser seriamente desaprobado, en realidad residía en lav2
sucursal. Además, usó seriamente1.x
números de versión en lanzamientos , mientras que en realidad usa2.x
(tanto allí como en PyPI ).Python 3.0 y Python 2, puntaje 6
(12 bytes, 2 versiones)
Pruébelo en línea:
Python 2
Python 3
Se basa en el hecho de que Python 3+ usa la división flotante de forma predeterminada, a diferencia de Python 2, que usa la división de piso.
fuente
Your program should work in at least two versions of your language.
Funciona en al menos dos versiones 2.7 y 3.0. He elegidoto print the full name or minor version numbers
.from __future__ import division
, problema resuelto :)Java, 189 bytes, 10 versiones, puntaje = 18.9
Las versiones compatibles:
1.0
,1.1
,1.2
,1.3
,1.4
,1.5
,1.6
,1.7
,1.8
y9
(¡Para puntajes anteriores, verifique el historial !)
Ejecútelo en Java 8
Ejecútelo en Java 9 o posterior
Sin golf
Tenga en cuenta que la parte del código
return v<9?"1."+v:v;
(anteriormentereturn(v<9?"1.":"")+v;
) debe verificarse con cualquier versión incluida entre Java 1.0 y Java 1.3. No tengo ninguna instalación Java 1.3 o anterior a mi disposición para probar esta sintaxis.Introducción
El control de versiones de Java tiene una historia especial. Todas las versiones han sido históricamente
1.x
incluidas1.0
. Pero ... desde Java 9 en adelante y el JEP223 , el esquema de la versión ha cambiado de usar1.x
ax
. Esa es la versión como se conoce internamente. Entonces tenemos la siguiente tabla (junto con el Javadoc y Wikipedia ):Esta entrada de desafío coincide con la columna de versión en la tabla anterior, que es lo que está contenido en la propiedad del sistema
"java.version"
.Explicación
El objetivo es verificar desde qué versión comienza a existir una clase, porque Java deja en desuso el código pero nunca lo elimina. El código se ha escrito específicamente en Java 1.0 para que sea compatible con todas las versiones, una vez más, porque el JDK es (en su mayoría) compatible con la fuente .
La implementación intenta encontrar los nombres de clase más cortos que introdujo cada versión. Sin embargo, para ganar bytes, es necesario tratar de elegir un subpaquete común. Hasta ahora encontré que el paquete más eficiente es
java.util
porque contiene varias clases con nombres muy cortos distribuidos en todas las versiones de Java.Ahora, para encontrar el número de versión real, los nombres de clase se ordenan introduciendo la versión. Luego trato de instanciar cada clase secuencialmente e incrementar el índice de la matriz. Si la clase existe, saltamos a la siguiente, de lo contrario, dejamos que la excepción sea detectada por el
try
bloque. Cuando se hace, se lanza otra excepción porque no hay más clases cuya existencia necesitemos verificar.En cualquier caso, el hilo dejará el
try
bloque con una excepción. Esa excepción no sefinally
detecta , sino que simplemente se pone en espera gracias al bloque, que a su vez anula la excepción en espera al devolver un valor que es"1."+v
dondev
está el índice utilizado anteriormente. También sucede que hicimos que este índice coincida con el número de versión menor de Java.Una parte importante del golf era encontrar el nuevo nombre de clase más corto en el paquete
java.util
(o cualquier paquete secundario) para cada versión. Aquí está la tabla que usé para calcular ese costo.Créditos
caja!finally
truco portátil .return(i<9?"1.":"")+i;
conreturn i<9?"1."+i:i;
(esto debe ser validado contra 1.0 o como máximo 1.3 ya que no se produjeron cambios de sintaxis antes de 1.4)Con builtins
Si se permitieron las construcciones:
54 bytes para 13 versiones (de 1.0 a 12), por lo que el puntaje sería 4.1538.
fuente
return"...
sin espacio es posible en todas las versiones tbh.)String v(){return "1."+(e("time.Year")+e("nio.file.Path")+e("io.Console")+e("util.UUID")+e("text.Bidi")+e("util.Timer")+e("sql.Ref")+e("lang.Void"));}int e(String c){try{Class.forName("java."+c);return 1;}catch(Exception e){return 0;}}
String v(){int i=0;try{for(String[]s={"lang.Void","sql.Ref","util.Timer","net.URI","util.UUID","net.IDN","nio.file.Path","time.Year","lang.Module"};;i++)Class.forName("java."+s[i]);}catch(Exception e){}return"1."+i;}
finally{return"1."+i;}
.Python , 606 bytes / 15 versiones = puntaje 40.4
-67 bytes (lol) gracias a NoOneIsHere.
Las versiones son 0.9.1, 2 (.0), 2.2, 2.2.2, 2.5.0, 2,5.1, 3 (.0), 3.1, 3.1.3, 3.2.1, 3.3, 3.4, 3.5 aa y 3.6 .
Todo el crédito a la sorprendente respuesta de Sp3000 . La nueva línea final es necesaria.
Whee, eso fue divertido para el golf. Esto debería funcionar (sí, instalé cada una de estas versiones), pero podría haber descifrado algo accidentalmente. Si alguien encuentra un error, avíseme.
fuente
print'0.9.1'
una sintaxis no válida.print
llamada ... ¡Gracias por hacérmelo saber!except
s conexcept:
).x=<string inside eval>
Funcionaría esto si lo hicieras en lugar de solo evaluar el código manualmente?1/0
, pero luego me di cuenta. ¡Gracias!C ++ 14/11/17, puntaje = 147/3 = 49
Para distinguir entre C ++ 11 y C ++ 14/17, utiliza el cambio en la función predeterminada
const
de lasconstexpr
funciones miembro en C ++ 14 (con crédito al ejemplo en https://stackoverflow.com/questions/23980929/ what-cambios-introducidos-en-c14-puede-potencialmente-romper-un-programa-escrito-en-c1 ). Para distinguir entre C ++ 14 y C ++ 17, utiliza el hecho de que C ++ 17 deshabilitó los trigrafos.Sin golf:
(Probado con Debian gcc 7.1.0 usando
-std=c++{11,14,17}
.)fuente
include
y el<
en las declaraciones de inclusión, por ejemplo#include<iostream>
.__cplusplus
macro), entonces para distinguir C ++ 17 de C ++ 14 me inclinaría por usar el cambio en el rango para la semántica Tal vez cree clases mínimas de iterador / centinela a lo largo de las líneas deboost::integer_iterator
tal manera que la conversión de centinela a iterador tenga un comportamiento "sorprendente".return 0;
está implícito paramain
que pueda guardar 9 bytes allí. También segúnwc -c
su solución está usando 251 bytes y no 252 (su editor puede haber insertado una nueva línea al final).return *
=>return*
EcmaScript 3/5/2015 / 2016/2017 en el navegador, 59 bytes / 5 versiones = 11.8 puntos
Ahorre 1 byte gracias a GOTO 0
fuente
-!
lugar de+!!
donde tiene sentido (y cambiar las constantes numéricas en consecuencia).JavaScript (ES5 y ES6), 14 bytes / 2 versiones = 7
0o
las constantes octales de estilo son nuevas en ES6; ES5 convierte la cadena a laNaN
que no afecta el resultado del XOR bit a bit.fuente
JavaScript (ES 2, 3 y 5 - Para
89),59/6 = 9,83375/7 = 10,714También puede enviar la solución con más versiones, incluso si tiene un puntaje ligeramente más alto que la solución de 2 versiones.
Pruébalo en línea
Comprueba la presencia de varios métodos en los prototipos Array, RegExp & String, los niega, da un valor booleano y resta ese valor booleano de un valor inicial de 9. La multiplicación de
![].map
cuentas por el hecho de que ES4 fue abandonado.dotAll
propiedad (y els
indicador relacionado ) para Expresiones regulares se introdujo en ES2018 (v9).padEnd
método String se introdujo en ES2017 (v8).includes
método de matriz se introdujo en ES2016 (v7).keys
método Array se introdujo en ES2015 (v6).map
método Array se introdujo en ES5.1 (v5).pop
método Array se introdujo en ES3 (v3).fuente
PHP 5/7, puntaje 5.5
¡3V4L en línea!
PHP 5.3.9 / 5.3.11, puntaje 10
¡3V4L en línea!
La versión en línea es más larga porque las versiones antiguas de PHP en el sandbox no tienen etiquetas cortas habilitadas.
fuente
Befunge:
15versionesde11 bytes / 2 = 5.54 bytes recortados por @ Pietu1998
Pruébelo en línea:
Befunge 93
Befunge 98
Utiliza el operador de punto y coma exclusivo de Befunge 98 ("saltar al siguiente punto y coma") para diferenciar las versiones. Ambos imprimirán "9". Befunge 93 ignorará los puntos y comas, restará 5 de "8" (valor restante en la parte superior de la pila), imprimirá el "3" resultante y terminará. Befunge 98, por otro lado, saltará, imprimirá "8" y terminará.
fuente
"89",;5-;,@
para 11 bytes;
parte.Pyth 4/5 - 6 bytes / 2 versiones = 3
En Pyth 5, se ignora una cantidad uniforme de espacios al comienzo de la línea para su uso en la sangría, mientras que en Pyth 4, simplemente actúa como un solo espacio y evita imprimir
5
. En Pyth 4, los puntos y comas solo terminan las declaraciones, lo que permite4
que se imprima, mientras que en Pyth 5, un espacio y un punto y coma hacen que el resto de la línea sea un comentario.fuente
Python 3 y Python 2.0, 18 bytes, puntaje 18/2 = 9
Redondeo bancario en Python 3, redondeo estándar en Python 2.
Pruébelo en línea: ¡Python 3!
Pruébelo en línea: ¡Python 2!
fuente
Cúbicamente, 4 bytes, puntaje 4 / ∞
Funciona en todas las versiones, su sistema tiene suficiente memoria para ejecutarse. No competir porque es cojo. Válido según esta meta publicación .
Básicamente, B3 gira una fila desde la cara izquierda hacia la cara superior. F3 funcionaría igual de bien, como lo haría F₁3 o B₁3. Como una fila en Cubically 3x3x3 es tres cubelets por un cubelet, esto pone tres
1
en la cara superior, dándole una suma de caras de 3.%0
imprime esa suma de caras superiores, imprimiendo 3 para Cubically 3 x3x3.En Cubically 4x4x4, las filas son cubos 4x1. Pone 4 1's en la cara superior, produciendo una suma de 4.
fuente
Código de máquina x86 de 16/32/64 bits: 11 bytes, puntaje = 3.66
Esta función devuelve el modo actual (tamaño de operando predeterminado) como un entero en AL. Llámalo desde C con firma
uint8_t modedetect(void);
Código de máquina NASM + lista de fuentes (que muestra cómo funciona en modo de 16 bits, ya que
BITS 16
le dice a NASM que arme los mnemónicos de fuente para el modo de 16 bits).Justificación :
El código de máquina x86 no tiene oficialmente números de versión, pero creo que esto satisface la intención de la pregunta al tener que producir números específicos, en lugar de elegir lo que es más conveniente (que solo toma 7 bytes, ver más abajo).
La CPU x86 original, la Intel 8086, solo admitía código de máquina de 16 bits. 80386 introdujo el código de máquina de 32 bits (utilizable en modo protegido de 32 bits y más tarde en modo compatible bajo un sistema operativo de 64 bits). AMD introdujo el código de máquina de 64 bits, utilizable en modo largo. Estas son versiones del lenguaje de máquina x86 en el mismo sentido que Python2 y Python3 son versiones de idiomas diferentes. En su mayoría son compatibles, pero con cambios intencionales. Puede ejecutar ejecutables de 32 o 64 bits directamente en un núcleo del sistema operativo de 64 bits de la misma manera que podría ejecutar los programas Python2 y Python3.
Cómo funciona:
Comenzar con
al=64
. Cambie a la derecha en 1 (modo de 32 bits) o 2 (modo de 16 bits).16/32 vs. 64 bits: Las 1-byte
inc
/dec
codificaciones son prefijos rex en 64 bits ( http://wiki.osdev.org/X86-64_Instruction_Encoding#REX_prefix ). REX.W no afecta en absoluto algunas instrucciones (por ejemplo, unajmp
ojcc
), pero en este caso para conseguir 16/32/64 quería inc o DECecx
en lugar deeax
. Eso también estableceREX.B
, lo que cambia el registro de destino. Pero afortunadamente podemos hacer que eso funcione, pero configurar las cosas para que no sea necesario cambiar de 64 bitsal
.Las instrucciones que se ejecutan solo en modo de 16 bits podrían incluir a
ret
, pero no me pareció necesario o útil. (Y haría imposible alinearse como un fragmento de código, en caso de que quisiera hacerlo). También podría estarjmp
dentro de la función.16 bits frente a 32/64: los inmediatos son de 16 bits en lugar de 32 bits. Cambiar los modos puede cambiar la longitud de una instrucción, por lo que los modos de 32/64 bits decodifican los siguientes dos bytes como parte de la instrucción inmediata, en lugar de una instrucción separada. Mantuve las cosas simples usando una instrucción de 2 bytes aquí, en lugar de descodificar la sincronización de modo que el modo de 16 bits decodificaría desde límites de instrucción diferentes a 32/64.
Relacionado: El prefijo de tamaño de operando cambia la longitud del inmediato (a menos que sea un signo de 8 bits inmediato extendido), al igual que la diferencia entre los modos de 16 bits y 32/64 bits. Esto hace que la decodificación de longitud de instrucción sea difícil de hacer en paralelo; Las CPU Intel tienen puestos de decodificación LCP .
La mayoría de las convenciones de llamadas (incluidas las psABI x86-32 y x86-64 System V) permiten que los valores de retorno estrechos tengan basura en los bits altos del registro. También permiten clobbering CX / ECX / RCX (y R8 para 64 bits). IDK si eso era común en las convenciones de llamadas de 16 bits, pero este es el código golf, por lo que siempre puedo decir que es una convención de llamadas personalizada de todos modos.
Desmontaje de 32 bits :
Desmontaje de 64 bits (¡ Pruébelo en línea! ):
Relacionado: mi x86-32 / x86-64 polyglot machine-code Q&A en SO.
Otra diferencia entre 16 bits y 32/64 es que los modos de direccionamiento se codifican de manera diferente. por ejemplo
lea eax, [rax+2]
(8D 40 02
) decodifica comolea ax, [bx+si+0x2]
en modo de 16 bits. Obviamente, esto es difícil de usar para el golf de código, especialmente desde entoncese/rbx
ye/rsi
se conservan en muchas convenciones de llamadas.También consideré usar el byte 10
mov r64, imm64
, que es REX +mov r32,imm32
. Pero como ya tenía una solución de 11 bytes, sería, en el mejor de los casos, igual (10 bytes + 1 pararet
).Código de prueba para el modo de 32 y 64 bits. (Realmente no lo he ejecutado en modo de 16 bits, pero el desmontaje le dice cómo se decodificará. No tengo un emulador de 16 bits configurado).
Este programa de Linux sale con exit-status =
modedetect()
, así que ejecútelo como./a.out; echo $?
. Ensamble y vincule en un binario estático, por ejemplo7 bytes (puntuación = 2,33) si puedo numerar las versiones 1, 2, 3
No hay números de versión oficiales para diferentes modos x86. Solo me gusta escribir respuestas. Creo que violaría la intención de la pregunta si solo llamara a los modos 1,2,3 o 0,1,2, porque el punto es forzarlo a generar un número inconveniente. Pero si eso estaba permitido:
Que decodifica en modo de 32 bits como
y 64 bits como
fuente
python2
vs.python3
intérpretes en el mismo programa Python. Las nuevas CPU x86 siempre incluyen un modo que es compatible con las CPU más antiguas (esta es su única excusa para usar un formato de código de máquina tan complicado y difícil de decodificar), pero el modo protegido de 32 bits de 386 y el modo largo de x86-64 realmente son Nuevas versiones del código de máquina x86. El modo largo incluso eliminó algunos códigos de operación, haciéndolos inválidos.Brachylog / Brachylog v1 , 5/2 = 2.5
Pruébalo en línea! (Brachylog)
Pruébalo en línea! (Brachylog v1)
Explicación para Brachylog:
Explicación para Brachylog v1:
fuente
2,1
en Brachylog v2 no construye la lista[2,1]
(2;1
would), sino el número21
(que no cambia la forma en que pretendía que su respuesta funcionara).2;1
no habría funcionado en Brachylog v1 como;
lógico O allí.C89 / C99, 25 bytes, 2 versiones, puntaje = 12.5
//
los comentarios de estilo no se reconocen en C89.Versión de golf:
Pruébelo en línea: C89 , C99
fuente
int v()
conmain()
, es más corto y en realidad se compilará como un programa completo!Perl 5 y Perl 6,
23 bytes19 bytes, puntaje 9.5La
grep
primera operación de Perl 5 siempre se trata como una expresión regular, no así en Perl 6.fuente
Bash, las 4 versiones,
727132 bytes ⇒ puntuación = 8Este código utiliza diferentes interpretaciones de
$'...'
cadenas en cada versión de Bash.Emite el número de versión principal, y eso es todo.
Doc encontrado aquí .
Sin golf:
Esta respuesta es una conjetura; Solo lo probé en bash 4 y 3, pero también debería funcionar en otras versiones.
Avíseme si lo hace / no, intentaré con otras versiones tan pronto como las tenga disponibles.
-1 char gracias a Jens.
-29 bytes gracias a Digital Trauma (toda la
expr
idea)!fuente
;;
en la última alternativa. Úselo;
para afeitarse un byte.$'\xN
función de interpretación parece haberse agregado en 2.01.1 ... Tendré que actualizar mi respuesta. Trabajando en ellos="$'\ua\xa\n'";case ${#s} in 3)echo 4;;5)echo 3;;7)echo 2;;9)echo 1;esac
s=$'\ua\xa\n';expr 5 - ${#s} / 2
. Esto funciona en v3 y v4. No tengo versiones anteriores que funcionen para probar en este momento.R, versiones 2 y 3, puntuación: 10,5 puntos
Este comando regresa
2
para R 2.xx y3
para R 3.xx La funcióncite
se agregó en R versión 3.0.0. Por lo tanto, el comandoexists("cite")
vuelveFALSE
para R 2.xx yTRUE
para R 3.xxR, todas las versiones (1, 2 y 3), puntaje: 12 puntos
La función
eapply
se introdujo en R 2.0.0.fuente
R.version$major
. 15 caracteres No lo hago desde cuando existe.Python , 196 bytes / 16 versiones = puntaje 12.25
Las versiones son 1.5, 1.6, 2.0, 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 3.0, 3.1, 3.2, 3.3, 3.4, 3.5 y 3.6
Lamentablemente tuve que dejar de lado 2.7 porque no hay ningún módulo en (por lo que puedo decir) que no están en 2.6 pero están en 3.0.
Recorremos un montón de módulos que se introdujeron en diferentes versiones de python, y en el primer error dejamos y devolvemos la versión. Los espacios entre las versiones principales se completan importando repetidamente
os
. La prueba para python 1.5 se basa enstring.split
no estar presente hasta 1.6.Gracias a la respuesta de Olivier Grégoire por la idea de probar nuevas clases / módulos en un bucle.
Ahora finalmente probé en todas las versiones relevantes de python ... que requería editar el código fuente 1.5 para que se compilara ...
fuente
Archivo por lotes de Windows , 35 bytes / 2 versiones = puntaje 17.5
Imprime
DOS
en MS-DOS (duh) yNT
en Windows NT. (duh)Ahora, para alguna explicación.
Windows ha tenido secuencias de comandos por lotes desde tiempos de MS-DOS y no ha cambiado mucho desde entonces. Sin embargo, cuando apareció Windows NT , Microsoft cambió el intérprete predeterminado para las secuencias de comandos por lotes, de
COMMAND.COM
acmd.exe
(ahora también permite la extensión.cmd
como alternativa al original.bat
).Con eso, también implementaron algunos cambios , como la
/i
bandera para ignorar las mayúsculas y minúsculas en los condicionales. Es decir, si bienZ==z
es falso,/i Z==z
es cierto.Explotamos que DOS no tenía mayúsculas y minúsculas y comparamos mayúsculas
Z
con minúsculasz
. Al usar la/i
bandera, terminamos con unZ==z
(falso) condicional en DOS yz==z
(verdadero) en NT.Ahora, me doy cuenta de que el desafío especifica que se debe imprimir un número de versión. Pero, hasta donde yo sé, no hay un 'número de versión' para las secuencias de comandos por lotes, por lo que esto es lo más cercano que podría obtener.
Probado en Windows 10, DOSBox y vDos:
Windows 10
(ejecutar con
cmd /k
para evitar que la ventana se cierreexit
)DOSBox:
vDos:
fuente
7
es más corto que WindowsNT
.7
no es realmente una versión de idioma, ha sido la misma en todos los Windows desde 3.1. Así que no pensé que sería muy justo llamarlo un7
momento en que quizás debería serlo3.1
Wolfram Language / Mathematica 10/11, 37 bytes / 2 versiones = 18.5
Considerar
(Length@DateRange[{1},{1}][[1]]+27)/3
, a 37 bytes y trabajar con 2 versiones, me da una puntuación de 18.5.y
Estoy seguro de que hay una forma más eficiente, pero la discrepancia entre la salida de DateRange me mordió en el trasero recientemente, por lo que estaba configurado para usar eso.
Como seguimiento, alguien probablemente podría aprovechar la
Length@DateRange[{1}, {1}][[1]]
evaluación1
en las versiones de Mathematica 1- ~ 8, pero no tuve tiempo de incorporar eso.fuente
$Version
:Your program may not use a builtin, macro, or custom compiler flags to determine the language version.
$Version
para demostrar que muestra el resultado correcto en la versión correcta,$Version
no es parte de mi respuesta ...$VersionNumber
, pero en cambio lo estás llamando$Version
. En mi opinión, aunque la esencia de su programa es elLength@DateRange
material, eso no funcionaría sin$Version
solo proporcionar la información de la versión completa que luego procesa, lo que por lo tanto viola las reglas.{1} Tr[1^#&@@%~DateRange~%]/3+9
(31 bytes), o incluso7+Length@Now
(12 bytes)Ruby 1.xy 2.x, 20 bytes, puntaje 10
Basado en el
to_h
método que se introdujo en laArray
clase en Ruby 2.fuente
p [].to_h&&2rescue 1
es un poco más corto.Erlang, 180 bytes, 11 versiones, puntaje 16.36
Con sangría y saltos de línea:
Probado en una versión menor de cada versión principal desde 10:
La idea es que cada versión principal haya agregado al menos un nuevo argumento permitido para la función
erlang:system_info
, así que intentemos con los de la lista, cuente cuántos fallan y restemos el número de fallas de 20, que es la versión actual.fuente
Julia 0.4, 0.5, 46 bytes, puntaje 22
Julia ha cambiado el nombre de tipo de los tipos de cadena concretos y abstractos en muchas versiones.
Este código en particular aprovecha:
Julia 0.4 :
ASCIIString
,AbstractString
,String
.Julia 0.5 :
String
,ASCIIString
,AbstractString
, (aunque eso no importa aquí)Vea también mi nueva solución más efectiva basada en diferentes principios
fuente
Japt (1 y 2),
86/2 =43Prueba v1 | Prueba v2
Explicación
Antes de v2, Japt usaba una sintaxis RegEx personalizada, por lo que podemos aprovechar eso.
El número 1 como una cadena.
Reemplace (
r
) el siguiente con a2
.Japt 2 ve esto como el RegEx
/\S/g
, que coincide con el1
. Japt 1 ignora el\
carácter de escape y solo ve elS
, que es la constante de Japt para un personaje espacial y, obviamente, no coincide con el1
.fuente
Befunge, puntuación = 3.5
7 bytes, 2 versiones
Pruébelo en línea en Befunge-93
Pruébelo en línea en Befunge-98
"]"
es un literal de cadena en ambas versiones, que empuja 93 (el valor ASCII de[
) en la pila.'b
es un carácter literal en Befunge-98, empujando 98 (el valor ASCII deb
), pero esas son instrucciones no válidas en Befunge-93, por lo que simplemente se ignoran. Así terminamos con 93 en la parte superior de la pila en Befunge-93 y 98 en Befunge-98..@
escribe el valor en la parte superior de la pila y luego sale.fuente
]"[email protected]'
o][email protected]'
también trabajarRuby 1.x (<1.9) y 2.x,
108 bytes, puntaje = 4Intentalo:
Esto funciona explotando los diferentes comportamientos
?x
entre Ruby 1.xy 2.x. En Ruby 1.x,?A
(por ejemplo) devuelve65
(el valor ASCII del carácterA
), pero en Ruby 2.0 devuelve la cadena de un carácter"A"
.El código anterior es equivalente a esto:
En Ruby 1.x (<1.9), el valor de
val
es50
(el valor ASCII del personaje2
), un Fixnum.Fixnum#%
es el operador de módulo, por lo que50 % 7
devuelve1
.En Ruby 2.x,
val
es la cadena"2"
.String#%
es una versión infija desprintf
, por lo que"2" % 7
es equivalente asprintf("2", 7)
, donde"2"
está la cadena de formato. Como la cadena de formato no contiene ninguna secuencia de formato (por ejemplo%d
), los argumentos posteriores se descartan y"2"
se devuelven.Finalmente,
$>
es un alias para$stdout
, por lo que$> << ...
imprime el resultado.fuente
?A==66?1:2
antes de encontrar tu respuestaPython 2 y Python 3 ,
3634 bytes, puntaje1817En Python 2 , el hash de infinito negativo es -271828 pero en Python 3 es -314159. Editar: Guardado 2 bytes, 1 punto de puntuación, gracias a @ArBo.
fuente
hash
se corrigió por primera vez para trabajar en infinitos de punto flotante, el desarrollador relevante usó pi * 1e5 y e * -1e5 como valores hash. En algún momento en Python 3, el valor de has para el infinito negativo se cambió para ser la negación del valor de hash para el infinito.Python 3 , Python 2 , puntaje 17.5
(35 bytes, 2 versiones)
Python 2 , 35 bytes
Pruébalo en línea!
Python 3 , 35 bytes
Pruébalo en línea!
Guardado 5 bytes gracias a ETHproductions
¡No es una buena respuesta de código de golf, pero es un cambio masivo!
fuente
try:exec("print 2")\nexcept:print(3)