Произведите число 2014 без каких-либо чисел в вашем исходном коде


579

Примечание, чтобы бросить вызов авторам в соответствии с мета-консенсусом : этот вопрос был хорошо принят, когда он был опубликован, но такие вызовы, когда просят ответчиков сделать X без использования Y , вероятно, будут плохо приняты. Попробуйте воспользоваться песочницей, чтобы получить отзыв о том, хотите ли вы опубликовать аналогичный запрос.


Уже 2017 2018 2019, ребята, идите домой.

Итак, теперь, когда наступил 2014 год, пришло время для кодового вопроса, связанного с номером 2014.

Ваша задача - создать программу, которая печатает число 2014, без использования каких-либо символов 0123456789в вашем коде и независимо от каких-либо внешних переменных, таких как дата или время, или случайное начальное число.

Самый короткий код (считая в байтах), чтобы сделать это на любом языке, на котором числа являются действительными токенами, выигрывает.


Leaderboard:


10
Даже при том, что цифры игнорируются в мозговом потоке, я все равно решил опубликовать его. 32 символа:++++++[>++++++++<-]>++.--.+.+++.
Брэден Бест

4
Brainfuck не является подходящим языком для этой задачи.
Джо З.

8
Интересно, этот вопрос набирает популярность в преддверии Нового года?
Джо З.

3
В ожидании "Давай люди, разве вы не понимаете, что это 2016 год?" :)
падаван

1
@BradenBest Это можно сделать из 31 символа как минимум двумя различными способами: +++++++ [> +++++++ <-]> + .--. +. +++. и ++++++++++ [> +++++ <-]> .--. +. +++.
Зубин Мукерджи

Ответы:


126

Мышь-2002 , 4 байта.

Это 4 байта чистого, сладкого ASCII.

В Mouse буквы алфавита инициализируются значениями 0-25. !является оператором для печати целых чисел, поэтому он печатает 20затем 14(без прерывистого перевода строки).

U!O!

Нет доступного онлайн-интерпретатора, но здесь вы найдете интерпретатор, написанный на C (требующий некоторых настроек, чтобы можно gccбыло его скомпилировать) и тот же скомпилированный интерпретатор, Win32но прекрасно работающий на Linux wine.

Здесь вы можете найти исправленную версию интерпретатора, который компилируется.


7
Вау, это удивительная находка намного позже после испытания. И с таким эзотерическим языком здесь никто еще не слышал!
Джо З.

3
Кстати: это делает то же самое, что и CJam KE, но на самом деле действительно, потому что это язык до 2014 года.
Джо З.

7
Самодовольное выражение моего лица прямо сейчас напоминает волшебника Фортрана-77 после победы над одним из сторонников Python в быстром коде .
кот

56
Это игра @cat and Mouse-2002.
Цифровая травма

5
@DigitalTrauma действительно: 3
кот

1300

Python, 52 байта

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

Обновлено за 2015 год благодаря @Frg:

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

Наведите курсор мыши, чтобы увидеть версию 2016 года:

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

Попробуйте онлайн!


186
Вы заслуживаете награду за ум
Картер Папе

167
вау - это так в духе этого вопроса. <3
Йоханнес

80
Я был немного удивлен, что это была только 4-я фраза, которую я попробовал после «С новым годом!»,
Которая

55
print sum(ord(c) for c in 'HAPPY NEW YEAR To you too.') Ой, подождите, я опоздал на год. Это 2013 год.
Уоррен П

164
sum(map(ord,'Happy new year to you!'))спас бы 7 символов.

243

Befunge 98 - 17 11 9 8 байт

'-:*b-.@

Похоже на старую версию, но я вспомнил про '

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

Интересно, что 45 2 -11 является единственной парой чисел a, b, где Значимость этих наборов заключается в том, что [32,126] это набор печатных символов ascii, а [10,15] это набор легко доступных номеров Befunge. Я нашел эту пару с этой программой на 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))

Или, если ваш интерпретатор поддерживает Unicode, то это работает:

Befunge 98 - 5 байт (4 символа)

'ߞ.@

По крайней мере, он работает на http://www.quirkster.com/iano/js/befunge.html со следующим кодом (Befunge 93 - 6 байт / 5 символов):

"ߞ".@

Старая версия

cdd**e-.@

вычисляет число, а затем печатает его:

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

Старая версия:

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

Подталкивает значения ASCII за 2014 год, -10. Затем печатает каждый после добавления 10 к нему.


78
en.wikipedia.org/wiki/Befunge ... что это я даже не знаю ...
Платон

36
«Язык был изначально создан Крисом Пресси в 1993 году как попытка разработать язык, который настолько сложно составить, насколько это возможно» ...
будет

7
@ 11684 Вывод довольно четко определен в вопросе. Если программа напечатана: randomstuff2randomstuff0randomstuff1randomstuff4я бы не посчитал это правильным решением.
Cruncher

7
@Plato Вместо того, чтобы читать статью в Википедии (которая включает только Befunge 93), если вы хотите узнать о Befunge 98, прочитайте официальные спецификации
Джастин

3
Вики: «Язык был изначально создан Крисом Пресси в 1993 году как попытка разработать язык, который настолько сложно составить, насколько это возможно» ... но почему?
Кузен Кокаин

239

Руби, 15

p Time.new.year

Временный;)


Обратите внимание, что раздел вопроса

независимо от каких-либо внешних переменных, таких как дата или время или случайное начальное число

не редактировалось, пока я не опубликовал свой ответ ...


Ян Дворжак предлагает отличную альтернативу в комментариях :

Happy = Time
Happy.new.year

Но это так без энтузиазма. Я предпочитаю:

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

Happy.new.year!

Или даже:

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!

И вот правильная английская пунктуация:

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!

Хорошо, хорошо, я не мог с этим поделать:

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
Джон Дворак

5
@hobbs Нет, это не так; вопрос ничего не говорит об этом
дверная ручка

12
Это будет работать правильно только в некоторых случаях.
hippietrail

119
На сегодняшний день это хорошо работает во всех тестах
CoderTao

7
Я полагаю, что суть вопроса заключалась в том, чтобы сказать текущий год [который случается в этом году 2014]. Следовательно, это решение более «переносимо» во времени, чем принятое;). Вы (и Ян Дворжак) получите мой голос!
Оливье Дюлак

223

Go, 2 байта (UTF-16)

Один символ Unicode (2 байта в UTF-16, 3 байта в формате UTF-8), вывод 2014 как часть ошибки

http://ideone.com/dRgKfk

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

7
Это очень умно, но вопрос запрашивает программу, которая печатает номер.
Привет, до свидания,

40
Если напечатанные коды ошибок учитываются, это представление должно выиграть.
ToastyMallows

37
+1. Вопрос не говорит: «печатает только номер и ничего больше».
Каз

1
Мне все равно, если он действителен или нет, это довольно здорово.
Программы Redwolf


177

Python, 26

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

53
Би-би-си 2014 в базе 13
Даррен Стоун

71
Я предполагаю использование символов 'bbc', а использование базы 13 - дань уважения Дугласа Адамса. «Я могу быть извините, но я не пишу анекдоты в базе 13».
Брайан Минтон

10
13 лет назад ПОКОЙСЯ С МИРОМ.
Даррен Стоун

4
ИМО, этот ответ в "Истинном Pythonese"
kmonsoor

8
@BrianMinton: использование Base 13 возможно потому, что это единственная база от 2 до 36, которая позволяет отображать число 2014 без каких-либо символов 0- 9.
dan04

146

MATLAB, Scala (4 символа, 5 байтов)

Вы можете воспользоваться сравнительно слабой системой типов MATLAB (и Scala) здесь. Хитрость заключается в применении унарной +операции к строке, состоящей только из символа ߞ(из кодовой точки UTF-8 U + 07DE или 2014 в десятичном виде). Эта операция неявно преобразует строку в double (в MATLAB) и в Int(в Scala):

+'ߞ'

Подробности подсчета байтов:

  • + является ASCII и считается за 1 байт
  • ' является ASCII и считается за 1 байт (но появляется в выражении дважды)
  • ߞ является 2-байтовым символом UTF-8

Всего: 5 байт

TeX (32 26 символов, столько же байтов)

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

Еще более короткая альтернатива (предложенная Джозефом Райтом )

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

XeTeX / LuaTeX (13 символов, 14 байтов)

Если разрешены XeTeX или LuaTeX, вход UTF-8 может использоваться напрямую (как предложил Джозеф Райт ):

\number`ߞ\bye

\let~\number~`^^T~`^^N\bye25 символов / байтов. Вы, ИМХО, считаете неверным, это 25 для вашего решения.
'

1
@tohecz Я думаю, что оба наших решения на самом деле имеют длину 26 байт.
jub0bs

1
Если требуется текущий год, то 13 байтов:\the\year\bye
yo '

2
+'ߞ'также работает в Scala (и нескольких других языках, которые я представляю)
theon

118

постоянный ток, 6 символов

DiBBCp
  • D помещает 13 в стек, даже если входной радиус равен 10 изначально
  • i меняет основание входа (с 13 на 13)
  • BBC это 2014 база 13.
  • p печать.

Консольный вывод:

$ dc <<< "DiBBCp"
2014

10
Правда, но реальная программа постоянного тока все еще DiBBCp(6 символов), остальное - просто способ ее запустить.
daniero

11
Я собирался объявить это, но у него 42 очка! использует базу 13 и слово BBC. Как это круто! Похоже, в этом году мы найдем вопрос о жизни, вселенной и вечности ;-) en.wikipedia.org/wiki/Base_13 . Вместо этого я добавляю комментарий @ daniero и оставляю ответ с этой великолепной репутацией 42 ;-)
Пабло Марин-Гарсия

4
@ PabloMarin-Garcia, к сожалению, какой-то неосведомленный человек сломал его ... Сейчас у него 43 голоса. Пожалуйста, вернитесь и понизьте! :)
Томас

3
@ Томас Вогонс всегда вогоны. Сопротивление бесполезно против межгалактической бюрократии.
Пабло Марин-Гарсия

2
Я даже не могу найти Dкоманду на странице руководства. Что оно делает? Не берите в голову ... D является шестнадцатеричным для 13.
kzh

93

Азбука Морзе, 23

;)

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

21
«На любом языке, на котором числа являются действительными токенами»
Ручка двери

14
«..---» - действительный токен, из 5 ударов, для числа два, верно? Так же, как «4» является действительным токеном, в три удара, для числа «четыре».
DavidC

8
Брайль может быть короче :)
Доктор Белизарий

31
Хорошая точка зрения. Кстати, я был рад, что никто не спросил, как мне заставить азбуку Морзе работать на моем компьютере.
DavidC

14
@DavidCarraher Что ты имеешь в виду? Я естественно предположил, что вы использовали этот репо для его декодирования. github.com/Nyubis/mspa-morse-decoder Все делают это ...
Майкл Дж. Калкинс

88

72 45 символов в коде; Нулевые коды символов

Это далеко не самый короткий опубликованный ответ, но еще никто не опубликовал ответ, который

  • не использует коды символов в качестве замены чисел, и
  • не называет системную дату.

Используя чистую математику (и автоматическое логическое преобразование) в R из консоли R:

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

Распечатывает число 2014. TЭто предопределенный синоним для true в R. Функции floorи expдоступны непосредственно в базовом пакете, как и piконстанта. R не имеет оператора приращения, но повторение (x*x)оказалось меньше символов, которые делают приращение и уменьшение по два каждый.


Оригинальная версия в Javascript (72 символа)

По той простой причине, что я мог протестировать в консоли, и это не против полного отсутствия пробелов:

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

запустить в вашей консоли, и он напечатает обратно номер 2014.


Перейдите к xkcdтакже ), чтобы заставить меня задуматься об exp (pi): е пи пи минус пи

PS Если вы можете сократить этот же алгоритм на другом языке, оставьте комментарий.


1
o =! ""; (o + o) + "" + (oo) + (o + oo) + (o + o + o + o)
Ядро Джеймс

4
25 байт: alert ('ߞ'. CharCodeAt ())
oberhamsi

1
+1. Однако вы утверждаете, что ваш ответ был первым ответом, который «не использует коды символов вместо чисел и не вызывает системную дату». Это на самом деле неверно. В моем ответе есть это решение cdd**e-.@(опубликованное раньше вашего), в котором не используются коды символов или системная дата. Он вычисляет число 2014. c, dи eэто шестнадцатеричное число цифр. a, b..., fтолчок (соответственно) 10,11, ... 15 , так 12 * 13 * 13 - 14это вычисление.
Джастин

Это был не первый ответ, чтобы не использовать коды символов; У меня есть несколько более ранних.
Timtech

1
@Quincunx: ты прав; просматривая я не уловил, что ваша версия использует шестнадцатеричные цифры, а не коды символов.
AmeliaBR

85

Scala REPL

34 29 символов.

+"Happy new year to you!".sum

Хорошо, если вы действительно хотите играть в гольф с любыми символами, вы можете использовать:

'@'*' '-'"'

или же

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

которые имеют 11 и 22 символа соответственно.


4
Интересная идея, даже если это не особенно гольф. Но сама строка делает ее более интересной, чем что-то, использующее старшие байты, или что-то в этом роде.
Конрад Боровски

Я добавил версию для гольфа.
Микаэль Майер

Вы можете сохранить пару символов из toIntэтого: +"Happy new year to you!".sum Тест
theon

Обновлено. Я не знал, что + также может быть префиксом.
Микаэль Майер

68

PHP, 9 байт

Это требует PHP 7.1 или ниже. Это будет работать в PHP 7.2, но приведет к предупреждению. Никаких гарантий для любой будущей версии.

xxdнеобходимо из-за двоичных данных (поэтому копирование и вставка будет проще). Может вернуться E_NOTICE, но это не имеет значения, не так ли?

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

Либо сохраните его, используя кодировку ISO-8859-1.

<?=~ÍÏÎË;

@Quincunx: загрузить это было относительно сложно, но вот Ideone - ideone.com/APHKhn .
Конрад Боровски

1
Это выглядит интересно; Что это делает?
Джастин

7
@Quincunx: он не выполняется по битам (0x00 изменяется на 0xFF, а 0x7F изменяется на 0x80) для каждого символа строки. Поскольку строка является допустимым идентификатором (что-либо с установленным старшим битом является символом идентификатора для PHP, возможно, для поддержки других кодировок), PHP считает его константой, но поскольку он не определен, он обрабатывает его как строку.
Конрад Боровски,

2
Так как вопрос был "Теперь, когда это 2014 ...", как насчет echo date('Y');?
Джон

6
@ Джон: Нет. Если вы прочитаете комментарии к этому вопросу, вы заметите, что OP не хочет, чтобы текущий год был в качестве ответа. Кроме того, <?=date(Y);было бы 11 символов, и у меня есть решение в 9 символов.
Конрад Боровски

67

C, 33 байта

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

19
Как досадно, что для первичной факторизации 2014 года требуется ASCII 5!
Бен Джексон

Я получил (int a; YES; a ++) {NSLog (@ "% i", a);} за цель C, касающуюся какао, но не могу добавить (пока недостаточно оценен). В конце концов, он показывает 2014 год, и в нем есть ошибка компилятора, и, возможно, он может вообще не работать, а размер скомпилированного файла составляет около 4,2 мегабайта - но эй.
переработанная сталь

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

1
@mjy Порядок байтов многосимвольных литералов не гарантируется.
Джонатон Рейнхарт

Многосимвольные литералы @JonathonReinhart полностью зависят от реализации.
FUZxxl

54

Mathematica, 14 символов (или 15, если вы считаете растровое изображение символом)

TextRecognize @введите описание изображения здесь


50
На самом деле, вы должны считать байты, так что это 14 + размер растрового изображения.
Сильвестр

22
Растровое изображение будет, вероятно, 7357 символов.
Джо З.

5
Кроме того, я считаю, что некоторые байты на изображении попадают в \dдиапазон. А именно, если это GIF, то сам заголовок гарантированно будет содержать некоторые.
Джон Дворак

13
Вы все убийцы. Хорошо, используйте First @ ToCharacterCode @ "ߞ" для 25 символов, 26 байтов.
Майкл Стерн

9
В качестве бонуса, вот решение Mathematica в 30 символов --URLFetch @ " goo.gl/miVwHe "
Майкл Стерн

53

Python3.4.0b2 (0 байт)

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

Это не сработает, когда люди обновят свою версию Python 3 через год.
Джо З.

21
Вот почему я упомянул python3.4.0b2 , это не произойдет дважды. Дата его выпуска, а не системная дата.
ВЫ

6
Это заставило меня улыбнуться!
Мэтт Флетчер

2
Также работает в Python 3.4.2.
Эрик Outgolfer

Вам не разрешено добавлять посторонние результаты.
MilkyWay90

48

Javascript, 23 байта

Использует Base 64 Conversion

alert(atob("MjAxNA=="))

23 символа (16 с атобом отдельно)

Или же

alert("MMXIV") // ;)

27
MMXIVне имеет общих символов 2014, последний раз я проверял ...// ;)
Джо З.

23
Древние римляне могли не согласиться. Первый производит 2014, хотя, на современном английском языке.
logic8

1
Ваш первый не выводит хотя ...
Doorknob

1
если вы откроете консоль в Chrome, вставите ее и нажмете клавишу ввода, она вернет значение - я все равно добавлю к нему предупреждение, так как оно длиннее других.
logic8

5
@ logic8: Хороший +1. Еще одна версия JavaScript, которая также работает: (4 байта) [!+[]+!+[]]+[+[]]+[+!+[]]+[!+[]+!+[]+!+[]+!+[]]- alert([!+[]+!+[]]+[+[]]+[+!+[]]+[!+[]+!+[]+!+[]+!+[]]);хотя я не уверен, что она соответствует Joe Zтребованиям.
Нет

41

Perl - 10 символов

Это решение любезно предоставлено BrowserUK на PerlMonks , хотя я избавился от ненужных знаков препинания и пробелов в решении, которое он опубликовал. Это побитовое «не» в двоичной строке из четырех символов.

say~"ÍÏÎË"

Отображаемые выше символы представляют двоичные октеты cd: cf: ce: cb и соответствуют тому, как они выглядят в ISO-8859-1 и ISO-8859-15.

Вот весь скрипт в шестнадцатеричном формате, а также пример его запуска:

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

Perl (без старших битов) - 14 символов

say'````'^RPQT

Это использует побитовое «или» на двух четырехсимвольных строках "RPQT"и"````" (то есть четырех обратных галочках).

$ ~/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

(У меня изначально были две строки наоборот, что требовало пробела между print и RPQTдля разделения токенов. @DomHastings указали, что переключая их, я могу сохранить символ.)

Perl (читерство) - 8 символов

Вероятно, это не в духе конкуренции, но hdb на PerlMonks указал, что Perl предоставляет переменную с именем, $0которая содержит имя текущей исполняемой программы. Если нам разрешено назвать файл, содержащий скрипт «2014», то $0он будет равен 2014. $0содержит цифру, поэтому мы не можем использовать ее напрямую, но ${...}с выражением, которое оценивается как 0, все будет в порядке; например:

say${$|}

Для согласованности давайте сделаем с ним что-нибудь вроде hexcat-then-perl:

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

Я думаю, что это обман, но тем не менее это интересное решение, так что стоит упомянуть.


2
Эй, если вы полностью изменить строку и barewords, вы можете сохранить символ: print"````"^RPQT. Можно было бы использовать sayи на 5.10+, используя -E вместо -e, но я не знаю, влечет ли это штраф +2 за разные аргументы командной строки?
Дом Гастингс

2
Допустимо указывать, что вы используете Perl 5 и используете sayбез штрафа.
Питер Тейлор

@DomHastings, лично я думаю, что если вы собираетесь делать это с "-e" или "-E", я бы сказал, что вам нужно будет включить всю команду, включая "perl -E" в число символов ,
tobyink


4
Вы также можете сохранить другой байт, используя строковые литералы, которые не требуют кавычек, например say ABCD^srrp.
Прим

40

Руби, 20

p 'bbc'.to_i ?\r.ord

Пояснение: bbcнаходится 2014в базе 13. Короче, чем Python. Не такой короткий, как Форт.


23
«Никто не пишет анекдоты в базе 13!»
Жан-Мишель Селерье

1
? ш = $, "^ XA [_AXeMFGIAHJLjKNAEFEJJNHQHNKLAEMINJOJOHLAGKHOJOJ [AG [HQHRFJAH} IHAIGGwIIAHHGwKHAHGHrEUAGQFiGVAGQGfIPAFHKHHbJHAQII] MGASHNSOHATIdIAUJJRLIAWLIQGKAZOFUA] ZAeSAiPAjOAkLA" .codepoints {| г | r- = 68; $> << (г <0 ?? \ п (ш = ш = =? $? '':? $) * r)}
Даррен Стоун

1
p 'ߞ'.ordдля полнофункциональной программы, 'ߞ'.ordвнутри irb. Работает на 1.9+
Рикардо Панаджо

1
Без «странных» символов Юникода: ?-*?--?\v(45 * 45 - 11) (Ruby 1.8)
Рикардо Панаджио

На один символ меньше: ?.*?.-?f(46 * 46 - 102) (только в Ruby 1.8 снова)
Рикардо Панаджио

29

Powershell, 9

+"ߞ"[""]

ߞ( U + 07DE NKO LETTER KA ) считается как два байта в соответствии с информацией тега code-golf .

[""]возвращает первый символ из строки ( ""преобразуется в 0). Унарный плюс opeartor ( +) преобразует символ в целое число.


1
Согласно codegolf.stackexchange.com/tags/code-golf/info , оно должно насчитывать 9 символов.
Конрад Боровски,

@ GlitchMr, спасибо, я исправил свой ответ.
Данко Дурбич

3
Это ['']хороший трюк. Я обычно использовал, [char]но это действительно короче :)
Joey

27

Scala REPL - 6 символов

"?="##

( ##это символьное значение Scala hashCode, а строки Java "?="хешируются до 2014 года.)

Scala REPL - 4 символа, 5 байтов

+'ߞ'

Математика на нашем любимом персонаже Unicode производит Int.


27

Javascript, 18 символов

alert(btoa('ÛMx'))

Обновление: в ES6 при использовании литерала шаблона можно сохранить два символа:

alert(btoaMx`)

Приведенный выше код довольно легко понять, если учесть, что он btoaпреобразует строку в другую в соответствии с набором четко определенных правил ( RFC 4648 ). Чтобы увидеть, как работает преобразование, мы запишем входную строку «xMx» в виде последовательности двоичных цифр, где каждый символ отображается как его 8-битный код символа.

Введите символ | Û | М | Икс
Код символа (десятичный) | 219 | 77 | 120
Код символа (двоичный) | 11011011 | 01001101 | 01111000

После реорганизации двоичных цифр в последнем ряду в группы по 6 мы получаем двоичное представление 4 новых чисел, соответствующих индексам Base64 для 4 символов в строке «2014».

Индекс Base64 (двоичный) | 110110 | 110100 | 110101 | 111000
Индекс Base64 (десятичный) | 54 | 52 | 53 | 56
Выходной символ | 2 | 0 | 1 | 4

Согласно спецификации HTML выходные символы могут быть получены из их индексов Base64 в соответствии с этой таблицей: http://dev.w3.org/html5/spec-LC/webappapis.html#base64-table .

Если вас не волнуют детали, вы можете позволить браузеру выполнить вычисления за вас и узнать, что «xMx» является результатом оценки atob('2014')в Javascript.


вопрос упоминает печать числа. Я знаю, что оценка в консоли приведет к возвращению результата, но в Code Golf обычно ожидается, что ответы JS будут включать в себя некоторую форму ввода-вывода ( alertнаиболее распространенную).
zzzzBov

@zzzzBov Да, мой первоначальный ответ включал alertзвонок.
ПОЙТИ 0

Это перечисляет Сообщество как удалив alert. Интересно, изменились ли стандарты для JS codegolf или это просто изменение, принятое Сообществом.
zzzzBov

@zzzzBov: анонимный пользователь согласился с изменениями, принятыми SHiNKiROU и luser droog. В любом случае, это изменение вызвало дискуссию о Meta ( meta.codegolf.stackexchange.com/questions/803/… ).
Конрад Боровски

@xfix, не только это редактирование заставило меня задать этот вопрос по мета, я видел достаточно гольфов кода, где у людей возникают разногласия по поводу того, считается ли консоль разработчика печатной, и я подумал, что стоит запросить стандарт.
zzzzBov

24

Еще одна запись GolfScript, 9 печатных символов

Я считаю, что это короче, чем любая из печатаемых записей GolfScript до сих пор:

"!="{*}*)

( 7-символьная запись Питера Тейлора превосходит ее, но содержит непечатные управляющие символы.)

Я называю это "это так в прошлом году!" запись, потому что он на самом деле генерирует число 2013 в 8 символов, как 33 × 61, а затем увеличивает его на единицу. ;-)


Вы выиграли (для ascii golfscript)
aditsu

21

С (31)

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

С (32)

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

С (30)

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

С (30)

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

Как насчет просто "%x"и 'b'*'S'? Это 8212 декабря или гекс 2014 года. Сохраняет один символ, один литерал и два в строке формата.
MSalters

@MSalters Нет, 'b'*'S'это 8134. Первичная факторизация 8212 - это 2 * 2 * 2053, поэтому я не вижу простого способа ее производства.
fredoverflow

Бах, проверил с целочисленным делением, что 8212/'b' == 'S':(
MSalters

и восьмеричное тоже не работает (02014 = 1036 = 37 * 28, 28 не
печатается

1
@FredOverflow как насчет моего решения на 28 символов? main () {ставит (___ ДАТА __ + '\ a');}
Арунпрасад Раджкумар

20

Далее 14

'> '" * '^ - .      

1
Можете ли вы объяснить, как это работает?
ProgramFOX

1
Я выражаю целочисленные константы как символьные литералы, используя их порядковые (ASCII) значения. Так вот: 62 34 * 94 - . если вы не говорите дальше, это значит print (62 * 34 - 94).
Даррен Стоун

Forth (Gforth 0.7.0), 5 байтов, 4 'ߞ .символа : это печатает символ.
18446744073709551615

20

GolfScript, 14

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

Как это работает: ASCII выглядит так:

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

Таким образом, он берет коды ASCII каждого символа, вычитает пять и вставляет их в строку.

{...}%возвращает массив символов отображаемой строки, если в качестве аргумента указана строка. Таким образом, он увеличивает каждый символ на 5 ( )означает увеличение).


В +конце нет необходимости. Кроме того, вместо увеличения в 5 раз, просто добавьте пять. Общая экономия: 4 символа. '-+,/'{5+}%
Джастин

15
@Quincunx, 5это число.
Питер Тейлор

5
@PeterTaylor Я продолжаю забывать.
Джастин

Умное решение
Sumurai8

Версия CJam этого: "-+,/"_,)f+. :) (Опять же, CJam имеет KD.)
Мартин Эндер

19

Python, 32 символа

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

Вероятно, возможно уменьшить его, используя 2014-й символ Unicode ߞ, но я не пробовал.

Quincunx отмечает, что

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

короче на три символа.


Версия Юникода работает, по крайней мере , в Python 3 с IDLE: print(ord("ߞ")). Он не работает в Python 2; Python 2, вероятно, не поддерживает Unicode.
Джастин

3
Также, по вашей версии, a=ord('.');print(a*a-ord('f'))на 2 символа короче.
Джастин

@Quincunx Он поддерживает, однако вам нужно задать определенную кодировку для вашего файла и добавить uв конец строки (будет "ߞ"u)
Kroltan

2
@Kroltan На самом деле, я уверен, что вторая часть не соответствует действительности. В Python 2 вам нужно было добавить строки, uчтобы сказать, что они были Unicode, но в Python 3 все строки автоматически Unicode
murgatroid99

1
Аналогично , как отметил выше, без юникода print ord('.')**2-ord('f')немного короче.
MLS

18

APL (6 байтов, 4 символа)

⊃⎕TS

Работает только в этом году.

Почему это работает:

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

Не полагаясь на системную дату, это 10 байтов (7 символов):

⎕UCS'ߞ'

6
К сожалению, ответы, которые работают только в этом году, являются недействительными.
Джо З.

Я не знаю APL: этот квадрат - это символ APL, или мне не хватает представления шрифта (Chrome)?
Карл Виттофт

@JoeZ .: Вопрос не говорит об этом, но я добавил тот, который не полагается на то, что это 2014 год.
marinus

4
@CarlWitthoft: он называется quad ( ), он должен выглядеть так.
Маринус

18

Python 32 10 байтов, 91 85 (66 с mathимпортированными по умолчанию) байтами чистой математики

Было весело писать это:

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)

Печатает все возможные способы, которые я могу написать, 2014используя метод Бруно Ле Флоха (32 символа):

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

Но это явно избыточно, поэтому, если ваш интерпретатор по умолчанию настроен на utf-8, то все, что нужно, это:

>>> ord(u'ߞ')
2014

Также, благодаря AmeliaBR (за идею), я старался изо всех сил реализовать чистую математическую версию:

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 Ну, в этом есть цифра :)
Иоахим Исакссон

2
Я немного оптимизировал вашу математическую версию: a,b=int(e),int(pi);c=a+a;print a**(b*c-c+b)-a*a**c-aи вы можете полностью исключить математический импорт, используя тот факт, что Trueв Python 2.x идентично целому числу 1 в операции, o=True;a=o+o;b=a+o;c=b+o;print a**(b*c-o)-a*a**c-a
уменьшив

Вы можете сохранить персонажа, если используете Python 3:ord('ߞ')
asmeurer

@JoachimIsaksson Цифра не является числом;)
Mega Man

17

R (20 символов)

@popojan (ему пока не разрешено публиковать ответ) предоставил решение в пределах 20 символов.

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

Выход:

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

R (22 символа)

Анонимный пользователь предложил более короткое решение.

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

2014находится BBCв базе 13. pi*pi+pi(= 13.0112) R рассматривается в этом контексте как целое число 13. Вывод:

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

R (30 символов)

Благодаря @ Томас!

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

Выход:

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

R (31 символ)

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

Вдохновленный ответом AmeliaBR . Выход:

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

Вау, +1! И я надеялся, что мое решение с римскими цифрами будет лучшим ... :( ;-)
Томас

Варианты ниже могут быть сокращены: cat(a<-T+T,T-T,T/T,a^a,sep="")(30 символов), paste0(aT+T,T-T,T/T,a^a)(26 символов)
Томас

@Tomas, функция paste0не разрешена, так как содержит символ 0. Ваше решение составляет 30 символов при использовании cat.
Джурио

создать файл 2014в текущем каталоге и написать list.files()- 12 символов
Zbynek

@Zbynek, я ожидаю, что ваше решение не будет действительным в общем объеме правил Codegolf.
Джурио

15

Ява - 77 75 символов

75 символов, если printдобавлено в класс методом main:

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

Это означает, 35*60-86что равен 2014


2
Мне нравится твоя формула.
Йоханнес

7
Это на самом деле должно быть длиннее, потому что определение класса должно быть в нем для запуска. Кратчайший путь, который я знаю (с Java 6):class a{static{System.out.println('#'*'<'-'V');}}
Джастин

1
@Quincunx, для Java 7 необходим основной метод
True Soft

2
Примечание @TrueSoft Я сказал "с Java 6". Вы должны выбрать самую короткую версию Java.
Джастин

2
Вы можете удалить 'ln' в println, чтобы уменьшить число символов ...
laksys
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.