Введение
Это может звучать странно, но у нас нет ОДНОЙ задачи для подсчета от 1
до n
, включительно.
Это не одно и то же. Это один (закрытый) плохо объясненный вызов.
Это не одно и то же. Это о подсчете до бесконечности.
Вызов
Написать программу или функцию , которая печатает каждое целое число от 1
до n
включительно.
правила
- Вы можете получить
n
любым способом. - Вы можете предположить, что
n
это всегда будет положительное целое число. - Вы можете получить
n
в любой базе, но вы должны всегда выводить в десятичном виде. - Вывод должен быть отделен любым символом (или шаблоном), не входящим в
0123456789
. Допускаются недесятичные начальные или конечные символы (например, при использовании таких массивов, как[1, 2, 3, 4, 5, 6]
). - Стандартные лазейки запрещены.
- Мы хотим найти кратчайший подход к каждому языку, а не самый короткий, поэтому я не приму ответа.
- Вы должны обновить свой ответ (ы) после этого редактирования, ответы, опубликованные до последнего редактирования, должны соответствовать правилу изменения стандартных лазеек (я не хотел их отрицать, но я не хотел, чтобы сообщество ревело, поэтому Я их отрицал).
- Вы можете использовать любую версию языка пост-знакомства (или язык). Вы не можете использовать какой-либо язык или языковую версию, созданную только для этого вызова.
Бонусы
20%
- Ваша программа должна иметь возможность рассчитывать как минимум до
18446744073709551615
(2^64-1
). Например, если новый тип данных является единственным способом поддержки больших целых чисел, вы должны создать его. Если ваш язык не имеет возможности поддерживать огромные целые числа до 2 ^ 64-1, вместо этого должен поддерживаться верхний предел этого конкретного языка.
EDIT : Я изменил предел от 2^64
до , 2^64-1
чтобы больше ответов.
РЕДАКТИРОВАТЬ : я сделал правило 2 ^ 64-1 бонус, так как не было большого интереса к этому испытанию. Если ваш ответ поддерживает 2 ^ 64-1, вы можете отредактировать его, чтобы включить бонус. Также вы можете опубликовать ответ, не поддерживающий его, если он короче.
n
любым способом." Означает ли это, что мы можем предполагать,n
что сохранены в переменной?n
любым способом. Вы можете сохранить его в переменной, но он не должен быть жестко закодирован.Ответы:
MarioLANG , 29 байт
Попробуйте онлайн!
Я знаю, что мой код, к сожалению, супер-грустный или злой:
Happy MarioLANG, 46 байтов
Попробуйте онлайн!
Более счастливый подход:
Неэмоциональный MarioLANG, 41 байт
Попробуйте онлайн!
источник
:!
;)=#
, или>(
, или(-[
, и т. д. Кроме того, не знаю почему, но, очевидно, есть страница Википедии со списком смайликов , которая не содержит:!
ни любой из тех, что я упомянул.Pyth, 1 байт
Тело должно быть не менее 30 символов; Вы вошли 14.
источник
Cjam, 5 байтов
Попробуйте онлайн!
Это неназванный блок, который ожидает
n
в стеке и оставляет список с диапазоном[1...n]
в нем.Работает, просто создав диапазон с помощью,
,
а затем увеличивая каждый элемент диапазона,:)
чтобы сделать диапазон единым.источник
:)
Mathematica, 5 байтов
Достаточно просто.
источник
Гексагония, 19
Или в расширенном формате шестиугольника:
Огромное спасибо Мартину за то, что он в основном придумал эту программу, я просто сыграл ее в гольф, чтобы уместить его в шестиугольнике с длиной стороны 3.
Попробуйте онлайн!
У меня нет фантастических программ Тимви, связанных с Hexagony, поэтому это объяснение не будет очень ярким. Вместо этого вы можете прочитать огромный текстовый блок. Разве это не мило?
В любом случае, IP начинается в верхнем левом углу, на
$
востоке, если вы представляете, что эта программа была размещена севером вверх на карте.$
Заставляет нас пропустить следующую команду, которая была бы@
, что бы закончить программу. Вместо этого мы выполняем,?
который устанавливает текущий край памяти в качестве входного числа. Теперь мы достигаем конца ряда, который ведет нас к среднему ряду шестиугольника, все еще двигаясь на восток.Большая часть остальной части программы представляет собой цикл. Начнем с того,
.
что это неоперация. Затем мы сталкиваемся с разветвлением в ... э-э ... шестиугольнике ...<
инструкция заставляет IP поворачиваться на 60 градусов вправо, если текущий край памяти положительный, в противном случае мы поворачиваем на 60 градусов влево. Поскольку мы движемся на восток, мы в конечном итоге либо идем на юг, либо на северо-восток. Поскольку входное значение больше нуля (и, следовательно, положительное), мы всегда начинаем с юго-востока.Затем мы ударяем о,
>
который перенаправляет нас на восток; эти операторы только разветвляются, если вы нажмете часть разветвления. Затем мы нажимаем,'
что меняет то, на какой край памяти мы смотрим. Затем мы нажимаем,)
что увеличивает значение текущего края памяти. Так как все края памяти начинаются с 0, в первый раз, когда мы делаем это, мы получаем значение 1. Затем мы переходим к строке со второй на верхнюю и выполняем,!
которая выводит наш номер. Затем мы переходим к другому ребру{
и сохраняем значение M в ASCII, умноженное на 10 плюс 8 (778). Затем мы возвращаемся ко второй и последней строке шестиугольника и нажимаем/
. Это приводит нас к перемещению на северо-запад. Мы проходим мимо в.
среднем ряду, и выходим на;
внизу справа. Это распечатывает текущий край памяти мод 256 как ASCII. Это происходит с новой строки. Мы нажимаем,'
что возвращает нас к первому краю, в котором есть значение, которое мы прочитали. Мы нажимаем,/
что заставляет нас снова двигаться на восток. Затем мы нажимаем,(
что уменьшает значение.=
заставляет нас снова повернуть в правильном направлении для будущих прыжков по краям памяти.Теперь, поскольку значение положительное (если оно не равно нулю), мы возвращаемся к нижней части шестиугольника. Здесь мы нажимаем,
.
затем перепрыгиваем,;
чтобы ничего не происходило, и мы возвращаемся к началу цикла. Когда значение равно нулю, мы возвращаемся к началу программы, где то же самое происходит снова, но?
не может найти другое число, и мы выбираем другой путь ветвления. Этот путь относительно прост: мы нажимаем,{
который меняет край памяти, но нам уже все равно, тогда мы нажимаем,@
который завершает программу.источник
MATL, 1 байт
Пример вывода:
Попробуйте онлайн здесь
источник
GNU Coreutils, 6 байтов
разделенный ответ на чистый bash, см. ниже ...
источник
R 13 байт
Тело должно быть не менее 30 символов.
источник
Javascript
182177160154139138132 байт (действительный)1 байт сохранен благодаря @ShaunH
Арбитражная точность на помощь!
Поскольку javascript может рассчитывать только до 2 ^ 53-1 (спасибо @ MartinBüttner за указание на это), мне нужно было создать произвольную точность, чтобы сделать это. Он хранит данные в массиве, и каждый «тик» добавляет 1 к последнему элементу, затем проходит через массив, и если что-то превышает 9, он устанавливает этот элемент в 0 и добавляет 1 к элементу слева.
Попробуй это здесь! Примечание: нажмите F12, чтобы увидеть результат, так как я не хотел заставлять вас ждать текстовых полей.
Кстати: я был единственным, кто не знал, троичные операторы так полезны в Codegolf?
длиннее чем
на 1 байт.
Javascript, 28 байт (неверно - не может сосчитать до 2 64 )
источник
&&
может быть полезным, просто нужно быть осторожным в сплоченности.condition&&action()
e?c.unshift(1):0
чтобыe&&c.unshift(1)
сэкономить байтJava 8, 43/69/94 байта
Вычеркнутый 44 - все еще обычный 44 - подождите, я не вычеркнул это, я только заменил это :(Если я могу вернуть
LongStream
: (43 bytes
)Это лямбда для
Function<Long,LongStream>
. Технически, я должен использоватьrangeClosed
вместоrange
, так как я отсекаю один из моего максимального ввода таким образом, ноrangeClosed
дольше, чемrange
.Если я должен напечатать в функции: (
69 bytes
)Это лямбда для
Consumer<Long>
. Технически я злоупотребляюpeek
, поскольку это промежуточная операция , означающая, что эта лямбда технически возвращаетLongStream
аналогично первому примеру; Я должен использоватьforEach
вместо этого. Опять же, гольф не хороший код.К сожалению, так как
long
диапазон «S является подписанным 64-разрядным целым числом, не доходит до запрашиваемого2^64-1
, а просто2^63-1
.Однако Java SE 8 предоставляет функциональные возможности для обработки
long
s, как если бы они были без знака, путемLong
явного вызова определенных методов класса. К сожалению, поскольку Java по-прежнему является Java, она довольно многословна, хотя и короче, чем версия BigInteger, которую она заменяет. (94 bytes
)Это
Consumer<Long>
, как и предыдущий.И слишком долго, чтобы избежать прокрутки.
источник
n->java.util.stream.LongStream.range(1,n+1)
?BigInteger
заключается в том, что использованиеint
(или дажеlong
) для итератора недостаточно велико.long
без знака, поэтому их использование короче, чемBigInteger
подход. (Это не было бы, если бы нам пришлось внедрить собственную длинную обработку без знака, как это было до J8.)05AB1E , 1 байт
Код:
Попробуйте онлайн! ,
Более интересный подход:
Объяснение:
Попробуйте онлайн! ,
источник
MATLAB, 7 байтов
Безымянная анонимная функция:
Беги как:
Проверьте это здесь!
Если требуется полная программа, 17 байт:
Проверьте это здесь!
источник
Haskell, 10 байт
Пример использования:
f 4
->[1,2,3,4]
.источник
n
, вы должны принятьn
.n
здесь не жестко закодировано - это аргумент функции. Синтаксис Haskell может быть странным для людей, привыкших к C-подобному синтаксису.MarioLANG , 19 байтов
Попробуйте онлайн!
Вертикальные программы, как правило, более удобны для игры в простые петли в MarioLANG. Я не уверен что интерпретатор делает, когда встречается
[
внутри лифта, но он, кажется, завершает программу, когда текущая ячейка равна 0. Это, вероятно, полезный трюк в целом.объяснение
MarioLANG - это язык, похожий на Brainfuck (с бесконечной лентой памяти целых чисел произвольной точности), где указатель инструкций напоминает ходьбу и прыжок Марио.
Марио начинается в левом верхнем углу и падает вниз.
;
читает целое число из STDIN и помещает его в текущую ячейку памяти. Теперь обратите внимание , что=
является основанием для сотового Марио ходить дальше,"
и#
сформировать лифт (с#
являющийся началом) и!
делает Марио остановку на лифте , так что он не ходит покинуть сразу.>
И<
установить его направление движения. Мы видим, что это дает простой цикл, содержащий следующий код:Теперь обычно
[
Марио условно пропускает следующее в зависимости от того, равна ли текущая ячейка нулю или нет. То есть, пока счетчик ненулевой, это ничего не делает. Тем не менее, кажется, что, когда Марио встречается во[
время поездки на лифте, а текущая ячейка есть0
, программа просто немедленно завершает работу с ошибкой, что означает, что нам даже не нужно искать способ его перенаправить правильно.источник
[
, что на самом деле еще более удобно.Джо - 2 или 6
Пока вы можете использовать инклюзивный вариант функции диапазона.
..это скучно! Давайте вместо этого возьмем кумулятивную сумму (
\/+
) таблицы форм n (1~T
).источник
Pyth -
32 байта1 байт сохранен благодаря @DenkerAffe.
Без использования встроенного.
Попробуйте онлайн .
источник
hM
если вы хотите по-настоящему модно :)-.-
Пайк, 1 байт
Попробуй это здесь!
Или 2 байта без встроенного
Попробуй это здесь!
Попробуй это здесь!
Попробуй это здесь!
источник
дк, 15
Ввод читать из стандартного ввода. Это отсчитывает от
n
, толкая копию каждого числа в стек. Стек выводится как единое целое сf
команды, поэтому числа печатаются в правильном порядке возрастания.Поскольку все числа помещаются в стек, весьма вероятно, что в памяти не хватит памяти, прежде чем приблизиться к 2 ^ 64. Если это проблема, то мы можем сделать это вместо этого:
дк, 18
источник
dc
, вроде быbc
, использует математику произвольной точности по умолчанию, и, таким образом, такие границы не имеют значения для этого языка.ArnoldC, 415 байт
Единственное, что нас интересует, - это использовать nx (где n - это цель, а x - увеличенную переменную), чтобы проверить конец цикла while, вместо того, чтобы иметь выделенную переменную, поэтому я в итоге получаю nx и n- (nx) = x в каждом цикле
Примечание : я могу рассчитывать только до 2 ^ 31-1. Ну, я думаю, что терминаторы не представляют реальной опасности в конце концов.
источник
Пит, 64 Кодекса
С размером кода 20:
Npiet след изображения
Первый цикл:
Оставшийся след для
n=2
:Заметки
Пита нет ответа? Позвольте мне исправить это с моей первой в мире программой Пиет! Это может быть короче с лучшими бросками и меньшими манипуляциями с указателями ...
Верхний поддерживаемый предел зависит от реализации интерпретатора. Теоретически было бы возможно поддержать произвольно большие числа с правильным интерпретатором.
Делиметр
ETX
(Ascii3
), однако это не может быть правильно отображено в этом ответе, поэтому я просто опущу их. Работает в консоли:Выход
Npiet след для
n=2
источник
ETX
символ (Ascii3
), разделяющий выходные данные, хотя символ ETX не может быть отображен на этом сайте.JavaScript (ES6),
7776635958 байтПринимает ввод
n
в виде строки, должен поддерживать до 9007199254740991999999999Разъяснение:
источник
2^64-1
Хорошо, я изменил спецификацию.n=>{for(a=b="";a+""+b!=n;console.log(a+""+b))++b-1e9||(++a,b=0)}
a+""+b
на[a]+b
GNU bc, 23
Ввод читать из стандартного ввода.
bc
по умолчанию обрабатывает числа произвольной точности, так что максимум 2 ^ 64 не проблема.источник
На самом деле, 1 байт
Скучно встроено скучно. Требуется 64-битная версия Python 3, чтобы получить все до
2**64
.Попробуйте онлайн!(из-за ограничений по памяти и длине вывода, онлайн-переводчик не может идти очень высоко).
Вот 5-байтовая версия, которая не требует 64-битного Python 3 и немного лучше использует память:
Попробуйте онлайн! (см. выше предостережения)
источник
Fuzzy-Octo-Guacamole, 7 байтов
Объяснение:
источник
X
работает вместоo;
, на 7 байтов.n
:
печатает полный стек.X
новый.^!$[_;]
.$
это диапазон.Oration, 31 байт (не конкурирует)
источник
literally,
перед каждым утверждением? (Вопрос 2: Предварительные или последующие даты, если это ваше? Оба приемлемы, если вы не сделали это для этого испытания, в этом случае это лазейка)QBASIC, 43 байта
источник
INPUT e;a
илиINPUT a
достаточно? Я не вижу, что вы снова используетеe
.1 TO
?:
между утверждениями вместо возврата и номер строки? QB4.5 позволяет мне сделать это:INPUT a: FOR b=1 TO a (\n) ?b:NEXT
Cubix , 17 байтов
Попробуй здесь
Cubix - это двумерный язык, созданный @ETHProductions, где команды помещаются в куб. Эта программа переносится на куб с длиной ребра 2 следующим образом.
I
получает целочисленный ввод0
положить 0 в стек-
вычесть верхние элементы стека!
если верный прыжок, следующая команда@
завершится;
вытолкнуть результат вычитания из стека)
увеличение вершины стекаw
переместите IP вправо и продолжайте. Это вызывает его падение на следующую строкуO
вывести вершину стека в виде числаN
вставьте перевод строки (10) в стекo
вывести перевод строкиw
переместите IP вправо и продолжайте. Это заставляет это падать к следующему лицу!
потому что правдиво прыгать@
прекратить;
вытолкнуть перевод строки из стекаU
повернуть налево на-
вычитание и продолжить оттудаисточник
Python 2,
37333233 байтаПредположительно работает до
2**64
и за пределами.Сбросил четыре байта благодаря @dieter , и еще один благодаря @orlp . Но, очевидно, как выяснил @ Sp3000,
range()
могут быть проблемы с более высокими значениями, поэтому функция была изменена наxrange()
. Примечание: дажеxrange()
могут возникнуть проблемы, по крайней мере, в 2.7.10 .источник
for i in range(input()):print i+1
for i in range(input()):print-~i
2**64
и за пределами». - сомневаюсь в этом в Python 2, но это может быть сxrange
(править: дажеxrange
могут возникнуть проблемы, по крайней мере, в 2.7.10)-~
работает? Редактировать : я понял это. Кроме того, хороший трюк!Зш, 12 байт
Это работает, потому что переменные раскрываются перед фигурными скобками.
источник
2^64-1
сейчас в порядке.2^63 - 1
V 11 байт
Так как он содержит неприятный UTF-8 и непечатаемые, вот обратимый hexdump:
V - незаконченный язык, который я написал, но он работает с коммита 19 . Этот ответ был немного более подробным, чем мне хотелось бы, но в основном потому, что V не знает целых чисел, только строки. Так что это достойный ответ! Это будет работать до 2 ^ 64, но это, вероятно, займет очень много времени.
Чтобы облегчить чтение / запись моего объяснения, я поработаю с этой «удобочитаемой для человека формой», которая, собственно, и будет введена в vim.
Объяснение:
Если разрешены лазейки, вот более короткая версия, которая печатает от 1 до n, но также печатает 0 (8 байт):
И в читабельном виде:
Это короче, потому что
<A-q>
в конце неявно, поэтому нам это не нужно, если нам не нужно удалять последнюю строку.источник