Produzca el número 2014 sin ningún número en su código fuente


579

Nota para desafiar a los escritores según el meta consenso : esta pregunta fue bien recibida cuando se publicó, pero desafíos como este, pedir a los respondedores que hagan X sin usar Y probablemente sean mal recibidos. Intente usar el sandbox para obtener comentarios sobre si desea publicar un desafío similar.


Ya es 2017 2018 2019, amigos, vete a casa.

Entonces, ahora que es 2014, es hora de una pregunta de código que involucra el número 2014.

Su tarea es hacer un programa que imprima el número 2014, sin usar ninguno de los caracteres 0123456789en su código, e independientemente de cualquier variable externa como la fecha o la hora o una semilla aleatoria.

El código más corto (contando en bytes) para hacerlo en cualquier idioma en el que los números sean tokens válidos gana.


Tabla de clasificación:


10
A pesar de que los números se ignoran en el cerebro, pensé que publicaría uno de todos modos. 32 caracteres:++++++[>++++++++<-]>++.--.+.+++.
Braden Mejor

44
Brainfuck no es un lenguaje válido para este desafío.
Joe Z.

8
Me pregunto si esta pregunta tiene un pequeño aumento en popularidad alrededor de Año Nuevo.
Joe Z.

3
Esperando "Vamos amigos, ¿no se dan cuenta de que es 2016?" :)
padawan

1
@BradenBest Es posible hacerlo en 31 caracteres de al menos dos formas diferentes: +++++++ [> +++++++ <-]> + .--. +. +++. y ++++++++++ [> +++++ <-]> .--. +. +++.
Zubin Mukerjee

Respuestas:


126

Ratón-2002 , 4 bytes.

Eso es 4 bytes de puro, dulce ASCII.

En Mouse , las letras del alfabeto se inicializan a los valores 0-25. !es el operador para imprimir enteros, por lo tanto, esto imprime 20entonces 14(no hay nueva línea intermitente).

U!O!

No hay un intérprete en línea disponible, pero aquí encontrará un intérprete escrito en C (que necesita algunos ajustes antes de poder obligarlo gcca compilarlo) y el mismo intérprete compilado Win32pero que funciona perfectamente en Linux wine.

Aquí puede encontrar la versión fija del intérprete, que compila.


77
Wow, este es un hallazgo increíble mucho más tarde después del desafío. ¡Y con un lenguaje tan esotérico que nadie había oído hablar de él todavía!
Joe Z.

3
Por cierto: esto hace lo mismo que CJam KE, pero en realidad es válido porque es un idioma anterior a 2014.
Joe Z.

77
La mirada engreída en mi cara ahora se parece a la de un mago Fortran-77 después de vencer a algún defensor de Python en un código más rápido .
gato

56
Este es un juego de @cat y Mouse-2002.
Trauma digital

55
@DigitalTrauma en efecto: 3
gato

1300

Python, 52 bytes

print sum(ord(c) for c in 'Happy new year to you!')

Actualizado para 2015 gracias a @Frg:

print sum(ord(c) for c in 'A Happy New Year to You!')

Pase el mouse para ver la versión 2016:

print sum(ord(c) for c in 'Happy New Year to you!!!')

Pruébalo en línea!


186
Te mereces el premio de inteligencia
Carter Pape

167
wow, esto es así en el espíritu de esta pregunta. <3
Johannes

80
Me sorprendió un poco que solo fuera la cuarta frase que intenté después de "¡Feliz año nuevo!", Que habría sido perfecta para el año 1374.
dansalmo

55
print sum(ord(c) for c in 'HAPPY NEW YEAR To you too.') Oh espera, llego un año tarde. Eso es 2013.
Warren P

164
sum(map(ord,'Happy new year to you!'))ahorraría 7 caracteres.

243

Befunge 98 - 17 11 9 8 bytes

'-:*b-.@

Similar a la versión anterior, pero me acordé de '

'-:* pushes 45, duplicates it, then squares it, producing 2025
b-   subtracts 11 from it, resulting in 2014
.@   prints the result, then ends the program

Curiosamente, 45 2 -11 es el único par de números a, b donde La importancia de esos conjuntos es que [32,126] es el conjunto de caracteres ascii imprimibles y [10,15] es el conjunto de números Befunge fácilmente accesibles. Encontré ese par coneste programa de Python:

(a,b)[32,126]×[10,15]a2b=2014
for a in range(32,127):
    for c in range(10,16):
        if (a**2-c)==2014:
            print("%s,%s"%(a,c))

O, si su intérprete es compatible con Unicode, entonces esto funciona:

Befunge 98 - 5 bytes (4 caracteres)

'ߞ.@

Al menos funciona en http://www.quirkster.com/iano/js/befunge.html con el siguiente código (Befunge 93 - 6 bytes / 5 caracteres):

"ߞ".@

Versión antigua

cdd**e-.@

calcula el número, luego lo imprime:

cdd pushes numbers to the stack so that it is this: 12,13,13
**  multiplies top three values of stack, which is now: 2028
e   pushes 14
-   subtracts the top two values of the stack, resulting in: 2014
.   prints the numerical value
@   end of program

Versión antigua:

"*'&("#;:a`j@a+,;

Empuja los valores ASCII para 2014, -10. Luego imprime cada uno después de agregarle 10.


78
en.wikipedia.org/wiki/Befunge ... ¿qué es esto? Ni siquiera ...
Platón

36
"El lenguaje fue creado originalmente por Chris Pressey en 1993 como un intento de idear un lenguaje que sea tan difícil de compilar como sea posible" ...
será el

77
@ 11684 El resultado está bastante bien definido en la pregunta. Si se imprimiera un programa: randomstuff2randomstuff0randomstuff1randomstuff4no lo consideraría una solución válida.
Cruncher el

77
@Plato En lugar de leer el artículo de Wikipedia (que solo incluye Befunge 93), si quieres aprender sobre Befunge 98, lee las especificaciones oficiales
Justin

3
Wiki: 'El lenguaje fue creado originalmente por Chris Pressey en 1993 como un intento de idear un lenguaje que sea tan difícil de compilar como sea posible' ... pero ¿por qué?
CousinCocaine

239

Ruby, 15

p Time.new.year

Temporal;)


Tenga en cuenta que la sección de la pregunta

independientemente de cualquier variable externa como la fecha o la hora o una semilla aleatoria

no fue editado hasta mucho después de que publiqué mi respuesta ...


Jan Dvorak ofrece una gran alternativa en los comentarios :

Happy = Time
Happy.new.year

Pero es muy poco entusiasta. Yo prefiero:

Happy = Time
class Time; alias year! year; end

Happy.new.year!

O incluso:

class Have; def self.a; A.new; end; end
class A; def happy; Time; end; end
class Time; alias year! year; end

Have.a.happy.new.year!

Y aquí está la puntuación correcta en inglés:

def noop x = nil; end
alias a noop
alias happy noop
alias new noop
alias year! noop
def Have x
    p Time.new.year
end

Have a happy new year!

Vale, vale, no pude evitarlo:

def noop x = nil; end
eval %w[we wish you a merry christmas! christmas and a happy new].map{|x|"alias #{x} noop"}*"\n"
def year!; p Time.new.year; end

we wish you a merry christmas! we wish you a merry christmas!
we wish you a merry christmas and a happy new year!

168
Happy = Time; Happy.new.year
John Dvorak el

55
@hobbs No, no lo es; la pregunta no dice nada sobre esto
Pomo de la puerta

12
Esto solo funcionará correctamente algunas veces.
hippietrail 01 de

119
Ha funcionado bien en todas las pruebas hasta la fecha
CoderTao

77
Creo que el espíritu de la pregunta era decir el año actual [que es 2014 este año]. Por lo tanto, esta solución es más "portátil" en el tiempo que la aceptada;). ¡Usted (y Jan Dvorak) obtienen mi voto!
Olivier Dulac

223

Ir, 2 bytes (UTF-16)

Un carácter unicode (2 bytes en UTF-16, 3 bytes en formato UTF-8), salida 2014 como parte de un error

http://ideone.com/dRgKfk

can't load package: package : 
prog.go:1:1: illegal character U+2014 '—'

77
Eso es muy inteligente, pero la pregunta solicita un programa que imprima el número.
HelloGoodbye

40
Si los códigos de error impresos cuentan, esta presentación debería ganar.
ToastyMallows

37
+1. La pregunta no dice, "imprime solo el número y nada más".
Kaz

1
No me importa si es válido o no, es bastante impresionante.
Programas Redwolf


177

Python, 26

print int('bbc',ord("\r"))

53
bbc es 2014 en base 13
Darren Stone

71
Supongo que el uso de los caracteres 'bbc' y el uso de la base 13 es un tributo de Douglas Adams. "Puede que sea un caso lamentable, pero no escribo chistes en la base 13."
Brian Minton el

10
hace 13 años. DEP.
Darren Stone el

44
OMI, esta respuesta está en "True
Pythonese

8
@BrianMinton: El uso de Base 13 probablemente se deba a que es la única base entre 2 y 36 que permite representar el número 2014 sin ninguno de los caracteres 0- 9.
dan04

146

MATLAB, Scala (4 caracteres, 5 bytes)

Puede aprovechar el sistema de tipos relativamente débil de MATLAB (y Scala), aquí. El truco consiste en aplicar la +operación unaria en una cadena compuesta solo por el carácter ߞ(del punto de código UTF-8 U + 07DE o 2014 en decimal). Esta operación convierte implícitamente la cadena en un doble (en MATLAB) y en un Int(en Scala):

+'ߞ'

Detalles de conteo de bytes:

  • + es ASCII y cuenta para 1 byte
  • ' es ASCII y cuenta para 1 byte (pero aparece dos veces en la expresión)
  • ߞ es un carácter UTF-8 de 2 bytes

Total: 5 bytes

TeX (32 26 caracteres, tantos bytes)

\def~{\the\catcode`}~}~\\~\%\bye

Una alternativa aún más corta (propuesta por Joseph Wright ) es

\number`^^T\number`^^N\bye

XeTeX / LuaTeX (13 caracteres, 14 bytes)

Si se permiten XeTeX o LuaTeX, la entrada UTF-8 se puede usar directamente (como lo propuso Joseph Wright ):

\number`ߞ\bye

\let~\number~`^^T~`^^N\bye25 caracteres / bytes. En mi humilde opinión, cuenta mal, es 25 para su solución también.
yo '

1
@tohecz Creo que nuestras dos soluciones son en realidad de 26 bytes.
jub0bs

1
Si se desea el año actual, entonces 13 bytes:\the\year\bye
yo '

2
+'ߞ'También trabaja en Scala (y algunos otros idiomas que se imaginan)
theon

118

dc, 6 caracteres

DiBBCp
  • D empuja 13 en la pila, incluso aunque la raíz de entrada sea 10 inicialmente
  • i cambia la raíz de entrada (a 13 de 10)
  • BBC es 2014 base 13.
  • p huellas dactilares.

Salida de consola:

$ dc <<< "DiBBCp"
2014

10
Es cierto, pero el programa de CC actual sigue siendo DiBBCp(6 caracteres), el resto es solo una forma de ejecutarlo.
daniero

11
¡Iba a votar esto pero tiene 42 puntos! usa la base 13 y la palabra BBC. ¡Cuan genial es eso! Parece que este año encontraremos la pregunta para la vida, el universo y todas las cosas ;-) en.wikipedia.org/wiki/Base_13 . En cambio, estoy votando el comentario de @ daniero y dejo la respuesta con esta magnífica reputación 42 ;-)
Pablo Marin-Garcia

44
@ PabloMarin-Garcia, desafortunadamente alguna persona inconsciente lo rompió ... Tiene 43 votos ahora. ¡Por favor regrese y vote a favor! :)
Tomás

3
@Tomas Vogons siempre los Vogons. La resistencia es inútil contra la burocracia intergaláctica.
Pablo Marin-Garcia

2
Ni siquiera puedo encontrar el Dcomando en la página del manual. ¿Qué hace? No importa ... D es hexadecimal para 13.
kzh

93

Código Morse, 23

;)

..--- ----- .---- ....-

21
"en cualquier idioma en el que los números sean tokens válidos"
Pomo de la puerta

14
"..---" es un token válido, en 5 golpes, para el número dos, ¿verdad? Así como "4" es un token válido, en tres trazos, para el número "cuatro".
DavidC

8
Braille podría ser más corto :)
Dr. belisarius

31
Buen punto. Por cierto, me sentí aliviado de que nadie me preguntara cómo puedo ejecutar el Código Morse en mi computadora.
DavidC

14
@DavidCarraher ¿Qué quieres decir? Supuse naturalmente que usaste este repositorio para decodificarlo. github.com/Nyubis/mspa-morse-decoder Todos lo están haciendo ...
Michael J. Calkins

88

72 45 caracteres en el código; Códigos de caracteres cero

Esto está lejos de ser la respuesta más corta publicada, pero nadie ha publicado aún una respuesta que

  • no usa códigos de caracteres como sustituto de números, y
  • no llama a la fecha del sistema.

Usando matemática pura (está bien, y una conversión booleana automática) en R, desde la consola R:

x<-(T+T);x+floor(exp(pi)^x)*x*x-(x*x)^(x*x)/x

Imprime el número 2014. Tes un sinónimo predefinido para verdadero en R. Las funciones floory expestán disponibles directamente en el paquete base, al igual que la piconstante. R no tiene un operador de incremento, pero la repetición (x*x)resultó ser menos caracteres que el incremento y decremento dos veces cada uno.


Versión original en Javascript (72 caracteres)

Por la simple razón de que podría probar en la consola, y no le importa la falta total de espacios en blanco:

m=Math;p=m.pow;t=true;++t+m.floor(p(m.exp(m.PI),t))*t*t++-p(++t,t--)/--t

ejecute en su consola e imprimirá el número 2014.


Apoyos para xkcd (y también ) para hacerme pensar en exp (pi): e a la pi Menos pi

PD: Si puede acortar el mismo algoritmo en un idioma diferente, publique un comentario con él.


1
o =! ""; (o + o) + "" + (oo) + (o + oo) + (o + o + o + o)
Kernel James

44
25 bytes: alerta ('ߞ'. CharCodeAt ())
oberhamsi

1
+1. Sin embargo, usted afirma que su respuesta fue la primera respuesta que "no usa códigos de caracteres como sustituto de números y no llama a la fecha del sistema". Eso es realmente falso. Mi respuesta tiene esta solución cdd**e-.@(publicada antes que la suya) que no utiliza códigos de caracteres ni la fecha del sistema. Calcula el número 2014 c. ,, dy eson dígitos numéricos hexadecimales.a, b, ..., fempuje (respectivamente) 10,11, 15 ... así que 12 * 13 * 13 - 14es el cálculo.
Justin

Esta no fue la primera respuesta para no usar códigos de caracteres; Tengo varios anteriores.
Timtech

1
@Quincunx: tienes razón; hojeando no entendí que tu versión usaba dígitos hexadecimales, no códigos de caracteres.
AmeliaBR

85

Scala REPL

34 29 caracteres.

+"Happy new year to you!".sum

Bueno, si realmente quieres jugar golf con cualquier carácter, puedes usar:

'@'*' '-'"'

o

"{yz}"map(_-'I'toChar)

que tienen 11 y 22 caracteres respectivamente.


44
Idea interesante, incluso si no es particularmente golf. Pero la cadena en sí misma lo hace más interesante, que algo que usa bytes altos, o algo así.
Konrad Borowski el

Agregué una versión de golf.
Mikaël Mayer

Podrías salvar a un par de personajes de toIntesta manera: +"Happy new year to you!".sum Prueba
theon

Actualizado. No sabía que + también podría ser un prefijo.
Mikaël Mayer

68

PHP, 9 bytes

Esto requiere PHP 7.1 o inferior. Funcionará en PHP 7.2, pero generará una advertencia. No hay garantías para ninguna versión futura.

xxdnecesario debido a los datos binarios (por lo que copiar y pegar sería más fácil). Puede volver E_NOTICE, pero realmente no importa, ¿verdad?

~ $ xxd -r > 2014.php
0000000: 3c3f 3d7e cdcf cecb 3b                   <?=~....;
~ $ php 2014.php
2014

Alternativamente, guarde esto usando la codificación ISO-8859-1.

<?=~ÍÏÎË;

@Quincunx: cargar esto fue relativamente complicado, pero aquí está Ideone: ideone.com/APHKhn .
Konrad Borowski el

1
Esto se ve interesante; ¿Qué hace?
Justin

77
@Quincunx: no funciona a nivel de bits (0x00 cambia a 0xFF y 0x7F cambia a 0x80) en cada carácter de la cadena. Como la cadena es un identificador válido (cualquier cosa con un conjunto de bits alto es un carácter identificador para PHP, probablemente para admitir otras codificaciones), PHP piensa que es una constante, pero como no está definida, la trata como una cadena.
Konrad Borowski el

2
Dado que la pregunta era "Ahora que es 2014 ...", ¿qué tal echo date('Y');?
John

66
@John: no. Si leyera los comentarios de la pregunta, se daría cuenta de que OP no desea obtener el año actual como respuesta. Además, <?=date(Y);serían 11 caracteres, y tengo solución en 9 caracteres.
Konrad Borowski

67

C, 33 bytes

main(){printf("%d",'A'*' '-'B');}

19
¡Qué molesto es que la factorización principal de 2014 requiera ASCII 5!
Ben Jackson

Obtuve (int a; YES; a ++) {NSLog (@ "% i", a);} para el objetivo C de Cocoa Touch, pero aún no puedo agregar (no está lo suficientemente calificado). Eventualmente muestra un 2014 y tiene un error de compilación y es posible que no funcione en absoluto y que la compilación sea probablemente de aproximadamente 4.2 meg, pero bueno.
Acero reciclado

main () {printf ("% d", '\ a \ xde');}
mjy

1
@mjy El orden de bytes de literales de varios caracteres no está garantizado.
Jonathon Reinhart

Los literales de varios caracteres de @JonathonReinhart están completamente definidos para la implementación.
FUZxxl

54

Mathematica, 14 caracteres (o 15 si cuenta el mapa de bits como un carácter)

TextRecognize @ingrese la descripción de la imagen aquí


50
En realidad, debe contar los bytes para que sea 14 + el tamaño de la imagen de mapa de bits.
Sylwester

22
El mapa de bits probablemente tendría 7.357 caracteres, de verdad.
Joe Z.

55
Además, creo que algunos de los bytes de la imagen entran en el \drango. Es decir, si se trata del GIF, se garantiza que el encabezado en sí mismo contenga algunos.
John Dvorak el

13
Todos ustedes son killjoys. Bien, use First @ ToCharacterCode @ "ߞ" para 25 caracteres, 26 bytes.
Michael Stern el

99
Como beneficio adicional, aquí hay una solución de Mathematica en 30 caracteres --URLFetch @ " goo.gl/miVwHe "
Michael Stern el

53

Python3.4.0b2 (0 bytes)

% python3.4  
Python 3.4.0b2 (v3.4.0b2:ba32913eb13e, Jan  5 2014, 11:02:52) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 

Esto no funcionará una vez que las personas actualicen su versión de Python 3 dentro de un año.
Joe Z.

21
Es por eso que mencioné python3.4.0b2 , no sucederá dos veces. Su fecha de lanzamiento, no la fecha del sistema.
USTED

66
¡Esto me hizo sonreír!
Matt Fletcher el

2
También funciona en Python 3.4.2.
Erik the Outgolfer

No está permitido agregar salidas extrañas.
MilkyWay90

48

Javascript, 23 bytes

Utiliza la conversión de base 64

alert(atob("MjAxNA=="))

23 caracteres (16 con atob solo)

O

alert("MMXIV") // ;)

27
MMXIVno tiene caracteres en común 2014, la última vez que lo verifiqué ...// ;)
Joe Z.

23
Los antiguos romanos podrían estar en desacuerdo. Sin embargo, el primero produce 2014, en inglés moderno.
logic8

1
Sin embargo, el primero no sale ...
Pomo de la puerta

1
si abres la consola en Chrome, la pegas y presionas Enter, devuelve el valor; de todos modos, agregaré una alerta ya que es más larga que otras.
logic8

55
@ logic8: Buen uno +1. Otra versión de JavaScript que también funciona: (4 bytes) [!+[]+!+[]]+[+[]]+[+!+[]]+[!+[]+!+[]+!+[]+!+[]]- alert([!+[]+!+[]]+[+[]]+[+!+[]]+[!+[]+!+[]+!+[]+!+[]]);Aunque no estoy seguro de que cumpla con Joe Zlos requisitos.
No

41

Perl - 10 caracteres

Esta solución es cortesía de BrowserUK en PerlMonks , aunque eliminé algunos signos de puntuación y espacios en blanco innecesarios de la solución que publicó. Es un "no" bit a bit en una cadena binaria de cuatro caracteres.

say~"ÍÏÎË"

Los caracteres que se muestran arriba representan los octetos binarios cd: cf: ce: cb, y son como aparecen en ISO-8859-1 e ISO-8859-15.

Aquí está el script completo en hexadecimal, más un ejemplo ejecutándolo:

$ hexcat ~/tmp/ten-stroke.pl
73:61:79:7e:22:cd:cf:ce:cb:22
$ perl -M5.010 ~/tmp/ten-stroke.pl
2014

Perl (sin bits altos) - 14 caracteres

say'````'^RPQT

Utiliza un "o" bit a bit en las dos cadenas de cuatro caracteres "RPQT"y "````"(es decir, cuatro backticks).

$ ~/tmp/fourteen-stroke.pl
73:61:79:27:60:60:60:60:27:5e:52:50:51:54
$ perl -M5.010 ~/tmp/fourteen-stroke.pl
2014

(Inicialmente tenía las dos cadenas al revés, lo que requería espacios en blanco entre printy RPQTpara separar las fichas. @DomHastings señaló que al cambiarlas podría salvar un personaje).

Perl (trampa) - 8 personajes

Probablemente esto no esté dentro del espíritu de la competencia, pero hdb en PerlMonks ha señalado que Perl proporciona una variable llamada $0que contiene el nombre del programa actual que se está ejecutando. Si se nos permite nombrar el archivo que contiene el script "2014", entonces $0será igual a 2014. $0contiene un dígito, por lo que no podemos usarlo directamente, pero ${...}contener una expresión que evalúe a 0 estará bien; por ejemplo:

say${$|}

Por coherencia, hagamos lo hexcat-then-perl con eso:

$ hexcat 2014
73:61:79:24:7b:24:7c:7d
$ perl -M5.010 2014
2014

Creo que esto es trampa, pero es una solución interesante, así que vale la pena mencionarlo.


2
Hola, si se invierte la cuerda y barewords, puede guardar un char: print"````"^RPQT. Podría ser posible usar saytambién en 5.10+ usando -E en lugar de -e, pero no sé si eso incurre en una penalización de +2 por diferentes argumentos de línea de comando.
Dom Hastings

2
Se considera aceptable especificar que está usando Perl 5 y usarlo saysin penalización.
Peter Taylor

@DomHastings, personalmente creo que si vas a hacerlo con "-e" o "-E", diría que deberías incluir todo el comando, incluido "perl -E" en tu cuenta de caracteres .
tobyink 01 de


44
También puede guardar otro byte utilizando literales de cadena que no requieren comillas, como say ABCD^srrp.
primo

40

Rubí, 20

p 'bbc'.to_i ?\r.ord

Explicación: bbcestá 2014en la base 13. Más corta que Python. No tan corto como Forth.


23
"¡Nadie escribe chistes en la base 13!"
Jean-Michaël Celerier

1
? w = $; "^ XA [_AXeMFGIAHJLjKNAEFEJJNHQHNKLAEMINJOJOHLAGKHOJOJ [AG [HQHRFJAH} IHAIGGwIIAHHGwKHAHGHrEUAGQFiGVAGQGfIPAFHKHHbJHAQII] MGASHNSOHATIdIAUJJRLIAWLIQGKAZOFUA] ZAeSAiPAjOAkLA" .codepoints {| r | r = 68; $> << (r <0 ?? \ n: (w = w = =? $? '':? $) * r)}
Darren Stone

1
p 'ߞ'.ordpara un programa completamente funcional, 'ߞ'.orddentro irb. Funciona en 1.9+
Ricardo Panaggio

1
Sin caracteres unicode "extraños": ?-*?--?\v(45 * 45 - 11) (Ruby 1.8)
Ricardo Panaggio

Un personaje más pequeño: ?.*?.-?f(46 *
46-102

29

Powershell, 9

+"ߞ"[""]

ߞ( U + 07DE NKO LETTER KA ) se cuenta como dos bytes de acuerdo con la información de la etiqueta de código de golf .

[""]devuelve el primer carácter de la cadena ( ""se convierte a 0). El unario más opeartor ( +) convierte el carácter en un entero.


1
De acuerdo con codegolf.stackexchange.com/tags/code-golf/info , debería contar como 9 caracteres.
Konrad Borowski el

@ GlitchMr, gracias, he corregido mi respuesta.
Danko Durbić el

3
El ['']es un buen truco. Yo solía usar [char]pero eso es más corto :)
Joey

27

Scala REPL - 6 caracteres

"?="##

( ##es el significado del símbolo de Scala hashCodey la cadena de Java"?=" hasta 2014).

Scala REPL - 4 caracteres, 5 bytes

+'ߞ'

Matemáticas en nuestro personaje Unicode favorito produce un Int.


27

Javascript, 18 caracteres

alert(btoa('ÛMx'))

Actualización: en ES6, el uso de una plantilla literal puede guardar dos caracteres:

alert(btoaMx`)

El código anterior es bastante fácil de entender teniendo en cuenta que btoaconvierte una cadena en otra cadena de acuerdo con un conjunto de reglas bien definidas ( RFC 4648 ). Para ver cómo funciona la conversión, vamos a escribir la cadena de entrada "ÛMx" como una secuencia de dígitos binarios, donde cada carácter se representa como su código de carácter de 8 bits.

Carácter de entrada | Û | M | X
Código de caracteres (decimal) | 219 77 | 120
Código de caracteres (binario) | 11011011 | 01001101 | 01111000

Después de reorganizar los dígitos binarios en la última fila en grupos de 6, obtenemos la representación binaria de 4 números nuevos, correspondientes a los índices Base64 de los 4 caracteres en la cadena "2014".

Índice Base64 (binario) | 110110 | 110100 | 110101 | 111000
Índice Base64 (decimal) | 54 52 | 53 56
Carácter de salida | 2 | 0 | 1 | 4 4

Según la especificación HTML, los caracteres de salida se pueden recuperar de sus índices Base64 de acuerdo con esta tabla: http://dev.w3.org/html5/spec-LC/webappapis.html#base64-table .

Si no le importan los detalles, puede dejar que el navegador haga los cálculos por usted y descubra que "ÛMx" es el resultado de la evaluación atob('2014')en Javascript.


La pregunta menciona la impresión del número. Sé que la evaluación en una consola llevará a que se devuelva el resultado, pero en Code Golf generalmente se espera que las respuestas de JS incluyan alguna forma de IO ( alertes lo más común).
zzzzBov

@zzzzBov Sí, mi respuesta original incluía una alertllamada.
GOTO 0

Enumera Comunidad como la que ha eliminado el alert. Me pregunto si los estándares han cambiado para JS codegolf o si es solo un cambio que fue adoptado por Community.
zzzzBov

@zzzzBov: Fue un cambio por parte de un usuario anónimo aceptado por SHiNKiROU y luser droog. De todos modos, esta edición desencadenó una discusión sobre Meta ( meta.codegolf.stackexchange.com/questions/803/… ).
Konrad Borowski el

@xfix, no es solo esta edición la que me hizo hacer esa pregunta en meta, he visto suficientes campos de golf en los que las personas se ponen en desacuerdo sobre si la consola de desarrollo cuenta como impresión, que pensé que valía la pena pedir un estándar.
zzzzBov

24

Otra entrada más de GolfScript, 9 caracteres imprimibles

Creo que esto es más corto que cualquiera de las entradas de GolfScript imprimibles hasta ahora:

"!="{*}*)

( La entrada de 7 caracteres de Peter Taylor lo supera, pero incluye caracteres de control no imprimibles).

Yo llamo a esto el "eso es por lo que el año pasado!" entrada, porque lo que realmente hace es generar el número 2013 en 8 caracteres, como 33 × 61, y luego lo incrementa en uno. ;-)


Usted gana (para ascii golfscript)
aditsu

21

C (31)

main(){printf("%o",' b'/'\b');}

C (32)

main(){printf("%x%o",' ','\f');}

C (30)

main(){printf("%x",' j'^'~');}

C (30)

main(){printf("%d",'\a\xde');}

¿Qué tal justo "%x"y 'b'*'S'? Eso es 8212 dic o 2014 hexadecimal. Guarda un carácter uno, uno literal y dos en la cadena de formato.
MSalters

@MSalters No, 'b'*'S'es 8134. La factorización prima de 8212 es 2 * 2 * 2053, por lo que no veo una manera fácil de producirlo.
fredoverflow

Bah, comprobado con división entera que 8212/'b' == 'S':(
MSalters

y octal tampoco funciona (02014 = 1036 = 37 * 28, 28 no se puede imprimir)
MSalters

1
@FredOverflow, ¿qué pasa con mi solución de 28 caracteres? main () {put (__ DATE __ + '\ a');}
Arunprasad Rajkumar

20

Adelante, 14

'> '" * '^ - .      

1
¿Puedes explicar cómo funciona esto?
ProgramFOX

1
Expreso constantes enteras como literales de caracteres usando sus valores ordinales (ASCII). Entonces esto es: 62 34 * 94 - . si no hablas Forth, esto significa print (62 * 34 - 94).
Darren Stone el

Adelante (Gforth 0.7.0), 5 bytes, 4 caracteres: 'ߞ .imprime el carácter.
18446744073709551615

20

GolfScript, 14

'-+,/'{)))))}%

Cómo funciona: ASCII dice así:

...
+
,
-
.
/
0
1
2
3
4
...

Entonces, esto toma los códigos ASCII de cada carácter, resta cinco y los pega en una cadena.

{...}%produce una matriz de los caracteres de una cadena asignada, cuando se le da una cadena como argumento. Entonces, incrementa cada carácter en 5 ( )significa incremento).


Al +final es innecesario. Además, en lugar de aumentar 5 veces, solo agregue cinco. Ahorro total: 4 caracteres.'-+,/'{5+}%
Justin el

15
@Quincunx, 5es un número.
Peter Taylor

55
@PeterTaylor Me sigo olvidando.
Justin

Solución inteligente
Sumurai8

La versión de este Cjam: "-+,/"_,)f+. :) (Por otra parte, CJam lo ha hecho KD).
Martin Ender

19

Python, 32 caracteres

print ord(',')*ord('-')+ord('"')

Probablemente sea posible reducirlo usando el 2014 th Unicode char ߞ, pero no lo intenté.

Quincunx señala que

a=ord('.');print a*a-ord('f')

es más corto por tres caracteres.


La versión Unicode funciona, al menos en Python 3 con INACTIVO: print(ord("ߞ")). No parece funcionar en Python 2; Python 2 probablemente no es compatible con Unicode.
Justin el

3
Además, con su versión, a=ord('.');print(a*a-ord('f'))es 2 caracteres más corto.
Justin

@Quincunx Es compatible, sin embargo, debe tener una codificación específica establecida en su archivo y agregarla ual final de la cadena (sería "ߞ"u)
Kroltan

2
@Kroltan En realidad, estoy bastante seguro de que la segunda parte no es cierta. En Python 2, tenía que anteponer cadenas upara decir que eran unicode, pero en Python 3, todas las cadenas son automáticamente unicode
murgatroid99

1
Similar a lo comentado anteriormente, sin unicode print ord('.')**2-ord('f')es ligeramente más corto.
MLS

18

APL (6 bytes, 4 caracteres)

⊃⎕TS

Sin embargo, solo funciona este año.

Por qué funciona

      ⎕TS
2014 1 1 11 58 5 811
      ⊃⎕TS
2014

Sin depender de la fecha del sistema, son 10 bytes (7 caracteres):

⎕UCS'ߞ'

66
Desafortunadamente, las respuestas que solo funcionan para este año no son válidas.
Joe Z.

No sé APL: ¿es ese cuadro cuadrado un carácter APL, o me falta una representación de fuente (Chrome)?
Carl Witthoft el

@JoeZ .: La pregunta no dice eso, pero he agregado uno que no se basa en que sea 2014.
marinus

44
@CarlWitthoft: Se llama quad ( ), se supone que debe verse así.
marinus

18

Python 32 10 bytes, 91 85 (66 con mathimportados por defecto) bytes matemática pura

Me divertí mucho escribiendo esto:

my_lst = []
for i in range(33, 126):
    for j in range(i, 126):
        if 2014 - 126 < i * j < 2014 - 33:
            if j not in range(48, 58):
                my_lst.append("ord('" + unichr(i) +
                              "')*ord('" + unichr(j) +
                              "')+ord('" + unichr(2014 - i * j) + "')")

for val in my_lst:
    print val, '->', eval(val)

Imprime todas las formas posibles en que puedo escribir 2014usando el método de Bruno Le Floch (32 caracteres):

ord('!')*ord(':')+ord('d') -> 2014
ord('!')*ord(';')+ord('C') -> 2014
ord('!')*ord('<')+ord('"') -> 2014
ord('"')*ord(':')+ord('*') -> 2014
ord(')')*ord('/')+ord('W') -> 2014
ord('*')*ord('-')+ord('|') -> 2014
ord('*')*ord('.')+ord('R') -> 2014
ord('*')*ord('/')+ord('(') -> 2014
ord('+')*ord(',')+ord('z') -> 2014
ord('+')*ord('-')+ord('O') -> 2014
ord('+')*ord('.')+ord('$') -> 2014
ord(',')*ord(',')+ord('N') -> 2014
ord(',')*ord('-')+ord('"') -> 2014

Pero esto es obviamente redundante, por lo que si su intérprete está configurado en utf-8 por defecto, todo lo que necesita es:

>>> ord(u'ߞ')
2014

Además, gracias a AmeliaBR (por la idea), hice todo lo posible para implementar una versión matemática pura:

from math import*
a,b,c=int(e),round(e),ceil(pi);print int(a**(b*c-(c-b))-a*a**c-a)

ord (',') ** 2 + ord ('N')
MLS

66
@MLS Bueno, eso tiene un dígito :)
Joachim Isaksson

2
Optimicé un poco su versión matemática: a,b=int(e),int(pi);c=a+a;print a**(b*c-c+b)-a*a**c-ay puede eliminar por completo la importación matemática haciendo uso del hecho de que Trueen Python 2.x es idéntico al entero 1 en funcionamiento, reduciéndolo a 50 caracteres:o=True;a=o+o;b=a+o;c=b+o;print a**(b*c-o)-a*a**c-a
Ponkadoodle

Puede guardar un personaje si usa Python 3:ord('ߞ')
asmeurer

@JoachimIsaksson Un dígito no es un número;)
Mega Man

17

R (20 caracteres)

@popojan (todavía no puede publicar una respuesta aquí) ha proporcionado la solución en 20 caracteres.

sum(T+T:exp(T+pi))-T

Salida:

> sum(T+T:exp(T+pi))-T
[1] 2014

R (22 caracteres)

El usuario anónimo ha sugerido una solución más corta.

strtoi("bbc",pi*pi+pi)

2014está BBCen la base 13. pi*pi+pi(= 13.0112) es tratado por R en este contexto como el entero 13. Salida:

> strtoi("bbc",pi*pi+pi)
2014

R (30 caracteres)

Gracias a @Tomas!

cat(a<-T+T,T-T,T/T,a*a,sep="")

Salida:

> cat(a<-T+T,T-T,T/T,a*a,sep="")
2014

R (31 caracteres)

cat(T+T,T-T,T/T,T+T+T+T,sep="")

Inspirado en la respuesta de AmeliaBR . Salida:

> cat(T+T,T-T,T/T,T+T+T+T,sep="")
2014

Wow, +1! Y esperaba que mi solución de números romanos fuera la mejor ... :( ;-)
Tomás

Las siguientes variantes se pueden acortar: cat(a<-T+T,T-T,T/T,a^a,sep="")(30 caracteres), paste0(aT+T,T-T,T/T,a^a)(26 caracteres)
Tomás

@Tomas, la función paste0no está permitida, ya que contiene el símbolo 0. Su solución tiene 30 caracteres si se usa cat.
djhurio

crear archivo 2014en el directorio actual y escribir list.files()- 12 caracteres
Zbynek

@ Zbynek, espero que su solución no sea válida en el alcance general de las reglas de codegolf.
djhurio 01 de

15

Java - 77 75 caracteres

75 caracteres si printse agrega en una clase con el método principal:

class C{public static void main(String[]a){System.out.print('#'*'<'-'V');}}

Significa 35*60-86que es igual a 2014


2
Me gusta tu formula
Johannes

77
Esto realmente debe ser más largo, porque la definición de clase debe estar en él para ejecutarse. El camino más corto que conozco (con Java 6):class a{static{System.out.println('#'*'<'-'V');}}
Justin

1
@Quincunx, con Java 7, se necesita un método principal
True Soft el

2
@TrueSoft Note Dije "con Java 6". Debes elegir el Java más corto posible.
Justin

2
Puede eliminar 'ln' en println para reducir los caracteres ...
laksys
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.