Produza o número 2014 sem números no seu código-fonte


579

Nota para desafiar os escritores de acordo com o meta consenso : Esta pergunta foi bem recebida quando foi publicada, mas desafios como esse, pedir respostas ao Do X sem usar Y provavelmente serão mal recebidos. Tente usar a sandbox para obter feedback, se você quiser postar um desafio semelhante.


Já é 2017 2018 2019, pessoal, vão para casa.

Então, agora que é 2014, é hora de uma pergunta de código envolvendo o número 2014.

Sua tarefa é criar um programa que imprima o número 2014, sem usar nenhum dos caracteres 0123456789no seu código, e independentemente de quaisquer variáveis ​​externas, como data ou hora ou uma semente aleatória.

O código mais curto (contando em bytes) para fazê-lo em qualquer idioma em que os números sejam tokens válidos vence.


Entre os melhores:


10
Mesmo que os números sejam ignorados no cérebro, pensei em publicar um de qualquer maneira. 32 caracteres:++++++[>++++++++<-]>++.--.+.+++.
Braden Best

4
Brainfuck não é um idioma válido para esse desafio.
Joe Z.

8
Gostaria de saber se esta pergunta recebe um pequeno aumento na popularidade em torno do ano novo.
Joe Z.

3
Esperando por "Vamos lá pessoal, você não percebe que é 2016?" :)
padawan

1
@BradenBest É possível fazer isso em 31 caracteres de pelo menos duas maneiras diferentes: +++++++ [> +++++++ <-]> + .--. +. +++. e ++++++++++ [> +++++ <-]> .--. +. +++.
Zubin Mukerjee

Respostas:


126

Mouse-2002 , 4 bytes.

São 4 bytes de puro e doce ASCII.

No mouse , as letras do alfabeto são inicializadas com os valores de 0 a 25. !é o operador para imprimir inteiros, assim este gravuras 20em seguida 14(nenhuma nova linha intermitente).

U!O!

Não há intérprete on-line disponível, mas aqui você encontrará um intérprete escrito em C (que precisa de alguns ajustes antes que se possa coagir gccpara compilá-lo) e o mesmo intérprete compilado, Win32mas que funciona perfeitamente no Linux wine.

Aqui você pode encontrar a versão fixa do intérprete, que é compilada.


7
Uau, essa é uma descoberta incrível muito depois do desafio. E com uma linguagem tão esotérica que ninguém aqui tinha ouvido falar dela ainda!
Joe Z.

3
BTW: isso faz a mesma coisa que o CJam KE, mas é realmente válido porque é um idioma anterior a 2014.
Joe Z.

7
O olhar presunçoso no meu rosto agora se parece com o de um assistente do Fortran-77 depois de derrotar algum defensor do Python em um código mais rápido .
gato

56
Este é um jogo de @cat e Mouse-2002.
Digital Trauma

5
@DigitalTrauma de fato: 3
cat

1300

Python, 52 bytes

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

Atualizado para 2015 graças a @Frg:

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

Passe o mouse sobre a versão 2016:

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

Experimente online!


186
Você merece o prêmio esperteza
Carter Pape

167
uau - isso é verdade no espírito desta pergunta. <3
Johannes

80
Eu estava um pouco surpreso que ele foi apenas o quarto frase Tentei depois, que teria sido perfeito para o ano de 1374. "Feliz ano novo!"
dansalmo

55
print sum(ord(c) for c in 'HAPPY NEW YEAR To you too.') Oh espere, estou um ano atrasado. É 2013.
Warren P

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

243

Befunge 98 - 17 11 9 8 bytes

'-:*b-.@

Semelhante à versão antiga, mas lembrei 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 é o único par de números a, b onde A significância desses conjuntos é que [32,126] é o conjunto de caracteres ascii imprimíveis e [10,15] é o conjunto de números Befunge facilmente acessíveis. Eu encontrei esse par com este programa 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))

Ou, se o seu intérprete suportar unicode, isso funcionará:

Befunge 98 - 5 bytes (4 caracteres)

'ߞ.@

Pelo menos, funciona em http://www.quirkster.com/iano/js/befunge.html com o seguinte código (Befunge 93 - 6 bytes / 5 caracteres):

"ߞ".@

Versão antiga

cdd**e-.@

calcula o número e depois o 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

Versão antiga:

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

Empurra os valores ascii para 2014, -10. Em seguida, imprime cada um após adicionar 10 a ele.


78
pt.wikipedia.org/wiki/Befunge ... o que é isso, eu nem ...
Platão

36
"O idioma foi criado originalmente por Chris Pressey em 1993 como uma tentativa de criar um idioma o mais difícil de compilar possível" ...
será

7
@ 11684 A saída está bastante bem definida na pergunta. Se um programa randomstuff2randomstuff0randomstuff1randomstuff4fosse impresso: eu não consideraria uma solução válida.
Cruncher

7
@Plato Em vez de ler o artigo da wikipedia (que inclui apenas o Befunge 93), se você quiser aprender sobre o Befunge 98, leia as especificações oficiais
Justin

3
Wiki: 'O idioma foi criado originalmente por Chris Pressey em 1993 como uma tentativa de criar um idioma o mais difícil de compilar possível' ... mas por quê?
CousinCocaine

239

Ruby, 15

p Time.new.year

Temporário;)


Observe que a seção da pergunta

independentemente de quaisquer variáveis ​​externas, como data ou hora ou uma semente aleatória

não foi editado até muito tempo depois que eu postei minha resposta ...


Jan Dvorak oferece uma ótima alternativa nos comentários :

Happy = Time
Happy.new.year

Mas é tão pouco entusiasmado. Eu prefiro:

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

Happy.new.year!

Ou até:

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!

E aqui está a pontuação correta em 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!

Ok, ok, eu não pude evitar:

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

5
@ Hobbs Não, não é; a questão não diz nada sobre isso
Doorknob

12
Isso funcionará corretamente apenas algumas vezes.
Hippietrail 01/01

119
Tem funcionado bem em todos os testes até à data
CoderTao

7
Eu acredito que o espírito da pergunta era dizer o ano atual [que acontece em 2014 este ano]. Esta solução é, portanto, mais "portátil" no tempo do que a aceita;). Você (e Jan Dvorak) recebem meu voto!
Olivier Dulac

223

Ir, 2 bytes (UTF-16)

Um caractere unicode (2 bytes em UTF-16, 3 bytes em formato UTF-8), saída 2014 como parte de um erro

http://ideone.com/dRgKfk

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

7
Isso é muito inteligente, mas a pergunta solicita um programa que imprima o número.
HelloGoodbye

40
Se os códigos de erro impressos contarem, esse envio deverá vencer.
precisa saber é o seguinte

37
+1. A pergunta não diz "imprime apenas o número e nada mais".
Kaz

1
Eu não me importo se é válido ou não, é incrível.
Programas Redwolf

1
Esta é uma brecha padrão
MilkyWay90

177

Python, 26

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

53
bbc é 2014 na base 13
Darren Stone

71
Suponho que o uso dos caracteres 'bbc' e o uso da base 13 sejam uma homenagem a Douglas Adams. "Posso ser um caso lamentável, mas não escrevo piadas na base 13."
Brian Minton 02/01

10
13 anos atrás. DESCANSE EM PAZ.
Darren Stone

4
IMO, esta resposta está em "True
Pythonese

8
@BrianMinton: O uso da Base 13 é provavelmente porque é a única base entre 2 e 36 que permite que o número 2014 seja representado sem nenhum dos caracteres 0- 9.
dan04

146

MATLAB, Scala (4 caracteres, 5 bytes)

Você pode tirar proveito do sistema do tipo relativamente fraco do MATLAB (e Scala), aqui. O truque é aplicar a +operação unária em uma sequência composta apenas pelo caractere ߞ(do ponto de código UTF-8 U + 07DE ou 2014 em decimal). Esta operação converte implicitamente a string em um duplo (no MATLAB) e em um Int(no Scala):

+'ߞ'

Detalhes da contagem de bytes:

  • + é ASCII e conta com 1 byte
  • ' é ASCII e conta com 1 byte (mas aparece duas vezes na expressão)
  • ߞ é um caractere UTF-8 de 2 bytes

Total: 5 bytes

TeX (32. 26 caracteres, tantos bytes)

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

Uma alternativa ainda mais curta (proposta por Joseph Wright ) é

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

XeTeX / LuaTeX (13 caracteres, 14 bytes)

Se o XeTeX ou o LuaTeX forem permitidos, a entrada UTF-8 poderá ser usada diretamente (como proposto por Joseph Wright ):

\number`ߞ\bye

\let~\number~`^^T~`^^N\bye25 caracteres / bytes. Você IMHO conta errado, é 25 para a sua solução também.
yo '

1
@tohecz Acho que nossas duas soluções têm, na verdade, 26 bytes de comprimento.
Jb0bs

1
Se o ano atual for desejado, então 13 bytes:\the\year\bye
yo '

2
+'ߞ'também trabalha em Scala (e algumas outras línguas eu imagino)
theon

118

dc, 6 caracteres

DiBBCp
  • D empurra 13 na pilha, mesmo que o raio de entrada seja 10 inicialmente
  • i altera o raio de entrada (de 13 para 13)
  • BBC é 2014 base 13.
  • p impressões.

Saída do console:

$ dc <<< "DiBBCp"
2014

10
É verdade, mas o programa dc real ainda é DiBBCp(6 caracteres), o resto é apenas uma maneira de executá-lo.
Daniero

11
Eu ia aprovar isso, mas tem 42 pontos! usa a base 13 e a palavra BBC. Quão legal é isso! Parece que este ano encontraremos a questão da vida, do universo e de tudo ;-) en.wikipedia.org/wiki/Base_13 . Estou upvoting @ comentário de daniero vez e deixar a resposta com este magnífico 42 reputação ;-)
Pablo Marin-Garcia

4
@ PabloMarin-Garcia, infelizmente uma pessoa inconsciente quebrou ... Tem 43 votos agora. Por favor, volte e vote! :)
Tomas

3
@ Tomas Vogons sempre os Vogons. A resistência é fútil contra a burocracia intergaláctica.
Pablo Marin-Garcia

2
Não consigo nem encontrar o Dcomando na página de manual. O que isso faz? Não importa ... D é hexadecimal para 13.
kzh

93

Código Morse, 23

;)

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

21
"em qualquer idioma em que os números sejam tokens válidos"
Maçaneta da porta

14
"..---" é um token válido, em 5 tempos, para o número dois, certo? Assim como "4" é um token válido, em três toques, para o número "quatro".
DavidC

8
Braille poderia ser mais curto :)
Dr. belisarius

31
Bom ponto. Aliás, fiquei aliviado que ninguém perguntou como eu conseguia que o Código Morse fosse executado no meu computador.
DavidC

14
@DavidCarraher O que você quer dizer? Naturalmente, presumi que você usou esse repositório para decodificá-lo. github.com/Nyubis/mspa-morse-decoder Todo mundo está fazendo isso ...
Michael J. Calkins

88

72 45 caracteres no código; Zero códigos de caracteres

Isso está longe de ser a resposta mais curta publicada, mas ninguém postou ainda uma resposta que

  • não usa códigos de caracteres como substitutos de números e
  • não chama a data do sistema.

Usando matemática pura (ok, e uma conversão booleana automática) em R, no console do R:

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

Imprime o número 2014. Té um sinônimo predefinido para true em R. As funções floore expestão diretamente disponíveis no pacote base, assim como a piconstante. R não possui um operador de incremento, mas repetir o (x*x)número de caracteres que menos incrementa e diminui duas vezes cada.


Versão original em Javascript (72 caracteres)

Pela simples razão de que eu poderia testar no console, e ele não se importa com uma completa falta de espaço em branco:

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

executar no seu console e imprimirá de volta o número 2014.


Adereços para xkcd (e também ) para que eu pense sobre exp (pi): e para o pi menos pi

PS Se você pode tornar o mesmo algoritmo mais curto em um idioma diferente, poste um comentário com ele.


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

4
25 bytes: alert ('ߞ'. CharCodeAt ())
oberhamsi

1
+1. No entanto, você alega que sua resposta foi a primeira resposta que "não usa códigos de caracteres como substitutos de números e não chama a data do sistema". Isso é realmente falso. Minha resposta tem esta solução cdd**e-.@(postada antes da sua) que não utiliza códigos de caracteres ou data do sistema. Ele calcula o número 2014 c. ,, de esão dígitos numéricos hexadecimais. a, b, ..., fimpulso (respectivamente) 10,11, ... 15, de modo 12 * 13 * 13 - 14é a computação.
Justin

Esta não foi a primeira resposta para não usar códigos de caracteres; Eu tenho vários anteriores.
Timtech 4/14

1
@ Quincunx: você está certo; olhando rapidamente, não percebi que sua versão estava usando dígitos hexadecimais, não códigos de caracteres.
AmeliaBR

85

Scala REPL

34 29 caracteres.

+"Happy new year to you!".sum

Bem, ok, se você realmente quer jogar golfe com algum caractere, pode usar:

'@'*' '-'"'

ou

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

que possuem 11 e 22 caracteres, respectivamente.


4
Idéia interessante, mesmo que não seja particularmente golfe. Mas a própria string a torna mais interessante do que algo usando bytes altos, ou algo assim.
21978 Konrad Borowski

Eu adicionei uma versão golfed.
Mikaël Mayer 01/01

Você pode salvar alguns caracteres toIntassim: +"Happy new year to you!".sum Teste
theon

Atualizada. Eu não sabia que + também poderia ser um prefixo.
Mikaël Mayer

68

PHP, 9 bytes

Isso requer PHP 7.1 ou inferior. Ele funcionará no PHP 7.2, mas resultará em um aviso. Não há garantias para nenhuma versão futura.

xxdnecessário devido a dados binários (para copiar e colar seria mais fácil). Pode voltar E_NOTICE, mas isso realmente não importa, não é?

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

Como alternativa, salve isso usando a codificação ISO-8859-1.

<?=~ÍÏÎË;

@ Quincunx: Carregar isso foi relativamente complicado, mas aqui está Ideone - ideone.com/APHKhn .
precisa saber é o seguinte

1
Isso parece interessante; O que isso faz?
Justin Justin

7
@ Quincunx: Não é bit a bit (0x00 muda para 0xFF e 0x7F muda para 0x80) em todos os caracteres da string. Como a string é um identificador válido (qualquer coisa com conjunto de bits alto é um caractere identificador para o PHP, provavelmente para suportar outras codificações), o PHP pensa que é uma constante, mas, como não está definido, trata-o como uma string.
precisa saber é o seguinte

2
Como a pergunta era "Agora que é 2014 ...", que tal echo date('Y');?
John

6
@ John: Não. Se você ler os comentários da pergunta, perceberá que o OP não deseja que o ano atual seja uma resposta. Além disso, <?=date(Y);seriam 11 caracteres, e eu tenho solução em 9 caracteres.
precisa saber é o seguinte

67

C, 33 bytes

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

19
Como é irritante que a fatoração principal de 2014 exija ASCII 5!
Ben Jackson

Eu obtive para (int a; YES; a ++) {NSLog (@ "% i", a);} para o objetivo C do Cocoa Touch, mas ainda não consigo adicionar (não classificado o suficiente). Ele mostra um 2014 eventualmente e tem um erro do compilador e é possível que não funcione e o compilado é provavelmente de cerca de 4,2 meg - mas ei.
Aço reciclado

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

1
@mjy A ordem de bytes de literais com vários caracteres não é garantida.
Jonathon Reinhart

Os literais com vários caracteres do @ JonathonReinhart são totalmente desativados na implementação.
FUZxxl

54

Mathematica, 14 caracteres (ou 15, se você contar o bitmap como um caractere)

TextRecognize @insira a descrição da imagem aqui


50
Na verdade, você deve contar bytes para que seja 14 + o tamanho da imagem de bitmap.
Sylwester

22
O bitmap provavelmente teria 7.357 caracteres, na verdade.
Joe Z.

5
Além disso, acredito que alguns dos bytes da imagem se enquadram no \dintervalo. Ou seja, se for o GIF, é garantido que o próprio cabeçalho contenha alguns.
John Dvorak

13
Vocês são todos killjoys. Tudo bem, use First @ ToCharacterCode @ "ߞ" para 25 caracteres, 26 bytes.
Michael Stern

9
Como um bônus, aqui está uma solução Mathematica em 30 caracteres --URLFetch @ " goo.gl/miVwHe "
Michael Stern

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.
>>> 

Isso não funcionará quando as pessoas atualizarem sua versão do Python 3 daqui a um ano.
Joe Z.

21
É por isso que mencionei python3.4.0b2 , isso não acontece duas vezes. Sua data de lançamento, não a data do sistema.
VOCÊ

6
Isso me fez sorrir!
Matt Fletcher

2
Também funciona no Python 3.4.2.
Erik the Outgolfer

Você não tem permissão para adicionar saída estranha.
MilkyWay90 5/07

48

Javascript, 23 bytes

Usa a Conversão Base 64

alert(atob("MjAxNA=="))

23 caracteres (16 com atob por si só)

Ou

alert("MMXIV") // ;)

27
MMXIVnão tem caracteres em comum com 2014, última vez que verifiquei ...// ;)
Joe Z.

23
Os romanos antigos podem discordar. O primeiro produz 2014, porém, em inglês moderno.
precisa saber é o seguinte

1
Seu primeiro não faz saída embora ...
Doorknob

1
se você abrir o console no chrome, cole-o e pressione enter, ele retornará o valor - adicionarei um alerta a ele por mais tempo do que outros.
logic8

5
@ logic8: Agradável +1. Outra versão do JavaScript que também funciona: (4 bytes) [!+[]+!+[]]+[+[]]+[+!+[]]+[!+[]+!+[]+!+[]+!+[]]- alert([!+[]+!+[]]+[+[]]+[+!+[]]+[!+[]+!+[]+!+[]+!+[]]);Embora não tenha certeza de que atende Joe Zaos requisitos.
Nope

41

Perl - 10 caracteres

Esta solução é cortesia do BrowserUK no PerlMonks , embora eu tenha excluído algumas pontuações e espaços em branco desnecessários da solução que ele postou. É um "não" bit a bit em uma string binária de quatro caracteres.

say~"ÍÏÎË"

Os caracteres exibidos acima representam os octetos binários cd: cf: ce: cb e são como eles aparecem nas ISO-8859-1 e ISO-8859-15.

Aqui está o script inteiro em hexadecimal, além de um exemplo executando-o:

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

Perl (sem bits altos) - 14 caracteres

say'````'^RPQT

Isso usa um bit a bit "ou" nas duas seqüências de quatro caracteres "RPQT"e "````"(isto é, quatro reticulares).

$ ~/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, eu tinha as duas strings ao contrário, o que exigia espaço em branco entre printe RPQTpara separar os tokens. @DomHastings apontou que, trocando-os, eu poderia salvar um personagem.)

Perl (trapaça) - 8 caracteres

Provavelmente isso não está dentro do espírito da competição, mas o hdb no PerlMonks apontou que o Perl fornece uma variável chamada $0que contém o nome do programa atual sendo executado. Se for permitido nomear o arquivo que contém o script "2014", $0será igual a 2014. $0contém um dígito; portanto, não podemos usá-lo diretamente, mas ${...}conter uma expressão que avalia como 0 ficará OK; por exemplo:

say${$|}

Para maior consistência, vamos fazer a coisa hexcat-then-perl com isso:

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

Eu acho que isso é trapaça, mas é uma solução interessante, no entanto, vale a pena mencionar.


2
Ei, se você inverter a corda e barewords, você pode salvar um char: print"````"^RPQT. Pode ser possível usar saytambém no 5.10+ usando -E em vez de -e, mas não sei se isso gera uma penalidade de +2 para diferentes argumentos de linha de comando?
Dom Hastings

2
É considerado aceitável especificar que você está usando Perl 5 e não usa saynenhuma penalidade.
Peter Taylor

@DomHastings, pessoalmente, acho que se você fizer isso com "-e" ou "-E", eu diria que você deve incluir o comando inteiro, incluindo "perl -E" na contagem de caracteres .
tobyink


4
Você também pode salvar outro byte usando literais de string que não exigem aspas, como say ABCD^srrp.
primo

40

Ruby, 20

p 'bbc'.to_i ?\r.ord

Explicação: bbcestá 2014na base 13. Mais curta que Python. Não tão curto quanto Forth.


23
"Ninguém escreve piadas na base 13!"
Jean-Michaël Celerier 01/01

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

1
p 'ߞ'.ordpara um programa totalmente funcional, por 'ߞ'.orddentro irb. Funciona em 1.9+
Ricardo Panaggio

1
Sem caracteres unicode "estranhos": ?-*?--?\v(45 * 45 - 11) (Ruby 1.8)
Ricardo Panaggio

Um personagem menor: ?.*?.-?f(46 * 46 - 102) (Ruby 1.8 única vez)
Ricardo Panaggio

29

Powershell, 9

+"ߞ"[""]

ߞ( U + 07DE NKO LETTER KA ) é contado como dois bytes de acordo com as informações da tag code-golf .

[""]retorna o primeiro caractere da sequência ( ""é convertido em 0). O unário mais opeartor ( +) converte o caractere em um número inteiro.


1
De acordo com codegolf.stackexchange.com/tags/code-golf/info , ele deve contar com 9 caracteres.
Konrad Borowski

@ GlitchMr, obrigado, corrigi minha resposta.
Danko Durbić

3
O ['']truque é bom. I normalmente usado [char], mas isso é de fato menor :)
Joey

27

Scala REPL - 6 caracteres

"?="##

( ##é o significado do símbolo de Scala hashCodee a cadeia de caracteres de Java é "?="hash para 2014.)

Scala REPL - 4 caracteres, 5 bytes

+'ߞ'

A matemática em nosso personagem unicode favorito produz um Int.


27

Javascript, 18 caracteres

alert(btoa('ÛMx'))

Atualização: no ES6, o uso de um literal de modelo pode salvar dois caracteres:

alert(btoaMx`)

O código acima é bastante fácil de entender, lembrando que btoaconverte uma string em outra string de acordo com um conjunto de regras bem definidas ( RFC 4648 ). Para ver como a conversão funciona, vamos escrever a sequência de entrada "ÛMx" como uma sequência de dígitos binários, onde cada caractere é renderizado como seu código de 8 bits.

Caractere de entrada | Û M x
Código de caracteres (decimal) | 219 77 120
Código de caractere (binário) | 11011011 01001101 01111000

Após reorganizar os dígitos binários na última linha em grupos de 6, obtemos a representação binária de 4 novos números, correspondendo aos índices Base64 dos 4 caracteres na cadeia "2014".

Índice Base64 (binário) | 110110 110100 110101 111000
Índice Base64 (decimal) | 54 52 53 56.
Caractere de saída | 2 0 1 | 4

Conforme a especificação HTML, os caracteres de saída podem ser recuperados de seus índices Base64 de acordo com esta tabela: http://dev.w3.org/html5/spec-LC/webappapis.html#base64-table .

Se você não se importa com os detalhes, pode deixar o navegador fazer os cálculos e descobrir que ""Mx" é o resultado da avaliação atob('2014')em Javascript.


a pergunta menciona imprimir o número. Sei que a avaliação em um console levará o resultado a ser retornado, mas no Code Golf geralmente é esperado que as respostas JS incluam alguma forma de IO ( alerté mais comum).
precisa saber é o seguinte

@zzzzBov Sim, minha resposta original incluiu uma alertligação.
GOTO 0

Ele lista a Comunidade como tendo removido o arquivo alert. Gostaria de saber se os padrões foram alterados para o codegolf JS ou se é apenas uma alteração que foi adotada pela Comunidade.
precisa saber é o seguinte

@zzzzBov: Foi uma mudança por usuário anônimo aceito por SHiNKiROU e luser droog. De qualquer forma, essa edição desencadeou uma discussão sobre o Meta ( meta.codegolf.stackexchange.com/questions/803/… ).
Konrad Borowski

@xfix, Não é só esta edição que me leva a fazer essa pergunta no meta, já vi códigos de golfe suficientes para que as pessoas entrem em desacordo sobre se o console de desenvolvimento conta como impressão, e achei que valia a pena pedir um padrão.
precisa saber é o seguinte

24

Mais uma entrada GolfScript, 9 caracteres imprimíveis

Acredito que isso seja mais curto do que qualquer uma das entradas imprimíveis do GolfScript até agora:

"!="{*}*)

( A entrada de 7 caracteres de Peter Taylor supera, mas inclui caracteres de controle não imprimíveis.)

Eu chamo isso de "isso é tão no ano passado!" entrada, porque o que ele realmente faz é gerar o número 2013 em 8 caracteres, como 33 × 61 e, em seguida, incrementa-o em um. ;-)


Você ganha (para ascii golfscript)
aditsu 01/01

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');}

Que tal apenas "%x"e 'b'*'S'? Isso é 8212 dez ou 2014 hexadecimal. Salva um caractere, um literal e dois na string de formato.
MSalters

@MSalters Não, 'b'*'S'é 8134. A fatoração principal de 8212 é 2 * 2 * 2053, então não vejo uma maneira fácil de produzi-lo.
Fredoverflow

Bah, verificado com a divisão inteira que 8212/'b' == 'S':(
MSalters

e octal não funciona quer (02014 = 1036 = 37 * 28, 28 é não imprimível)
MSalters

1
@FredOverflow e a minha solução de 28 caracteres? main () {puts (__ DATE __ + '\ a');}
Arunprasad Rajkumar

20

Quarto, 14

'> '" * '^ - .      

1
Você pode explicar como isso funciona?
ProgramFOX 01/01

1
Estou expressando constantes inteiras como caracteres literais usando seus valores ordinais (ASCII). Então é isso: 62 34 * 94 - . se você não fala adiante, isso significa print (62 * 34 - 94).
Darren Pedra

Quarto (Gforth 0.7.0), 5 bytes, 4 caracteres: 'ߞ .imprime o caractere.
precisa saber é o seguinte

20

GolfScript, 14

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

Como funciona: o ASCII é assim:

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

Portanto, isso pega os códigos ASCII de cada caractere, subtrai cinco e coloca-os em uma string.

{...}%produz uma matriz dos caracteres de uma sequência mapeada, quando recebe uma sequência como argumento. Portanto, incrementa cada caractere em 5 ( )significa incremento).


O +no final é desnecessário. Além disso, em vez de incrementar 5 vezes, basta adicionar cinco. Economia total: 4 caracteres. '-+,/'{5+}%
Justin Justin

15
@ Quincunx, 5é um número.
Peter Taylor

5
@ PeterTaylor Eu continuo esquecendo.
Justin Justin

Solução inteligente
Sumurai8

A versão CJam desta: "-+,/"_,)f+. :) (Então, novamente, CJam tem KD.)
Martin Ender

19

Python, 32 caracteres

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

Provavelmente é possível reduzi-lo usando o char Unicode de 2014 ߞ, mas não tentei.

Quincunx observa que

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

é mais curto em três caracteres.


A versão unicode funciona, pelo menos em Python 3 com IDLE: print(ord("ߞ")). Não parece funcionar no Python 2; O Python 2 provavelmente não suporta unicode.
Justin Justin

3
Além disso, com sua versão, a=ord('.');print(a*a-ord('f'))são 2 caracteres mais curtos.
Justin Justin

@Quincunx Ele faz suporte, no entanto você precisa ter uma codificação específica definida para o arquivo e anexe uno final da cadeia (seria "ߞ"u)
Kroltan

2
@ Kroltan Na verdade, tenho certeza de que a segunda parte não é verdadeira. Em Python 2, você tinha que preceder cordas com ua dizer que eles eram unicode, mas em Python 3, todas as cordas são automaticamente unicode
murgatroid99

1
Semelhante ao comentado acima, sem unicode print ord('.')**2-ord('f')é um pouco menor.
MLS

18

APL (6 bytes, 4 caracteres)

⊃⎕TS

Só funciona este ano.

Por que funciona:

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

Sem contar com a data do sistema, são 10 bytes (7 caracteres):

⎕UCS'ߞ'

6
Infelizmente, as respostas que funcionam apenas para este ano são inválidas.
Joe Z.

Não sei a APL: essa caixa quadrada é um caractere da APL ou estou faltando uma representação de fonte (Chrome)?
Carl Witthoft

@JoeZ .: A questão não diz isso, mas eu adicionei um que não contar com ele sendo 2014.
marinus

4
@CarlWitthoft: É chamado de quad ( ), deveria ser assim.
Marinus

18

Python 32 10 bytes, 91 85 (66 com mathimportados por padrão) matemática pura

Diverti-me escrevendo isso:

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 as formas possíveis de escrever 2014usando o 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

Mas isso é obviamente redundante; portanto, se o seu intérprete estiver definido como utf-8 por padrão, basta que:

>>> ord(u'ߞ')
2014

Além disso, graças a AmeliaBR (pela ideia), tentei o meu melhor para implementar uma versão 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

6
@MLS Bem, que tem um dígito nele :)
Joachim Isaksson

2
Otimizei um pouco sua versão matemática:, a,b=int(e),int(pi);c=a+a;print a**(b*c-c+b)-a*a**c-ae você pode eliminar completamente a importação matemática, fazendo uso do fato de que Trueno Python 2.x é idêntico ao número inteiro 1 em operação, reduzindo-o para 50 caracteres:o=True;a=o+o;b=a+o;c=b+o;print a**(b*c-o)-a*a**c-a
Ponkadoodle

Você pode salvar um personagem se usar o Python 3:ord('ߞ')
asmeurer

@JoachimIsaksson Um dígito é nenhum número;)
Mega Man

17

R (20 caracteres)

@popojan (ele ainda não está autorizado a postar uma resposta aqui) forneceu a solução em até 20 caracteres.

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

Resultado:

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

R (22 caracteres)

Usuário anônimo sugeriu uma solução mais curta.

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

2014está BBCna base 13. pi*pi+pi(= 13.0112) é tratado por R neste contexto como o número inteiro 13. Saída:

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

R (30 caracteres)

Graças a @Tomas!

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

Resultado:

> 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 na resposta de AmeliaBR . Resultado:

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

Uau, +1! E eu esperava que a minha solução algarismos romanos será a melhor ... :( ;-)
Tomas

As variantes abaixo podem ser reduzidas: cat(a<-T+T,T-T,T/T,a^a,sep="")(30 caracteres), paste0(aT+T,T-T,T/T,a^a)(26 caracteres)
Tomas

@ Tomas, a função paste0não é permitida, pois contém o símbolo 0. Sua solução cria 30 caracteres se estiver usando cat.
djhurio

crie um arquivo 2014no diretório atual e escreva list.files()- 12 caracteres
Zbynek

@Zbynek, espero que sua solução não seja válida no escopo geral das regras do codegolf.
djhurio

15

Java - 77 75 caracteres

75 caracteres se printforem adicionados em uma classe com o método principal:

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

Isso significa 35*60-86que é igual a 2014


2
Eu gosto da sua fórmula.
Johannes

7
Na verdade, isso precisa ser mais longo, porque a definição de classe precisa estar nela para ser executada. Maneira mais curta que eu conheço (com Java 6):class a{static{System.out.println('#'*'<'-'V');}}
Justin

1
@Quincunx, com Java 7, um método principal é necessário
True Soft

2
@TrueSoft Note que eu disse "com Java 6". Você deve escolher o Java mais curto possível.
Justin Just3

2
Você pode remover 'ln' no println para reduzir caracteres ...
laksys
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.