Задача состоит в том, чтобы отобразить п символов из таблицы ASCII .
Вы можете написать функцию (или программу, которая принимает аргумент в качестве параметра, также допустим STDIN), который принимает параметр n , который будет индексом последнего символа для печати.
Задача довольно проста, поэтому в качестве примера приведена возможная реализация в Python 2.7:
(lambda n:map(chr, range(n)))(256)
Как я уже сказал, это простая задача. Так что это код-гольф, и выигрывают самые короткие коды!
РЕДАКТИРОВАТЬ
Как некоторые из вас указали, этот код не печатает результат. Это всего лишь пример, так как я могу изо всех сил объяснять проблему на английском языке ;-).
EDIT2
Не стесняйтесь размещать ответ на любом языке программирования, даже если это не самый короткий код. Может быть, есть некоторые интересные реализации там!
EDIT3
Исправлен пример, чтобы он печатал результат.
for x in range(input()):print chr(x)
Будет на самом деле печатать символы, если вы хотите редактировать свой пример.[i for i in range(n)]
в достаточной степени похож наrange(n)
Ответы:
CJam, 4 байта
Полная программа, которая читает из STDIN (поле ввода в онлайн-переводчике ).
Это просто выполняется
range(chr(int(input())))
, используя тот факт, что,
возвращает массив символов, если его аргумент является символом.Я вызываю dibs
c,
(2 байта), на случай, если допущение, что вход уже находится в стеке, оказывается разрешенным.источник
n
, поскольку первые несколько десятков символов ASCII являются непечатными символами. Интересный факт: эта программа также выводит таблицу Unicode, например, n = 9999брейкфук -
169146142 байтаОграничения:
Не самый короткий ответ здесь, но эй, придурок! Это было бы действительно, действительно хорошей задачей, за исключением того факта, что она требует читабельного ввода человеком без гарантии количества цифр. Я мог бы потребовать, чтобы ввод имел начальные нули, чтобы он был длиной 3 символа, но что это интересно? : D Одной из основных проблем, связанных с таким вводом данных, является то, что единственная структура разветвления или циклирования в мозговом матче проверяет, равна ли текущая ячейка нулю или нет. Когда входные данные могут содержать нули, это может привести к тому, что ваш код получит ответвления, которые он не должен брать. Чтобы решить эту проблему, я сохраняю каждую цифру ввода плюс 1 , а затем вычитаю излишки в последнюю возможную секунду. Таким образом, я всегда знаю, где мои нули.
Я сказал, что это было бы серьезной проблемой, без разбора входных данных. Почему это? Что ж, давайте представим, что мы не берем числовой ввод. Мы скажем, что проблема заключается в том, что «учитывая байты ввода, выведите все символы ASCII ниже этого байта». Вот что мой ответ будет:
брейкфук - 8 байт
Это большая разница! Настоящая программа использует 135 инструкций для сбора ввода (более 95% программы!), Просто потому, что его печатает человек. Сохранение номера в качестве байта и дать , что для меня, и он принимает только один.
(Забавный факт: если вы поняли гипотетическую программу, то поздравляю! Вы понимаете «мозговитость» во всей ее полноте. Весь язык имеет только восемь команд, и эта программа использует каждую из них ровно один раз.)
объяснение
источник
>[-]<[->.+<]
установите для ячейки рядом с текущей ячейкой значение 0, затем начните обратный отсчет текущей ячейки, увеличивая ячейку рядом с ней и одновременно печатая значение.>[-]<
роль, потому что я уже был рядом с пустой камерой. :)Pyth , 4 байта
В основном перевод программы Python 3:
источник
Befunge 93 -
2321Befunge 93 -
1513 (Инго Бюрк)Этот выводит список в обратном порядке, но OP только сказал, что нам нужно напечатать первые
n
символы, а не то, что он должен быть в порядке.Больше нельзя играть в гольф, не переходя на Befunge98 (оператор ";" см. В ответе @ Kasran )
Попробуйте это здесь:
Показать фрагмент кода
источник
&> #- #1:# :#,_@
(он просто печатает его в обратном порядке)Java,
151128776256 байтСначала попробуйте сыграть в гольф.
Использование:
Спасибо @Shujal, @flawr, @Ingo Bürk и @Loovjo за серьезное сокращение байтов.
источник
int i,n=new Scanner(...
и изменив цикл наfor(;++i<n;)
. Кроме того, вам не нужно вызыватьCharacter.toString
. Вы можете просто передать System.out значение char, и оно с радостью выведет его.a
качестве входных данных. И я думаю, что вы можете сократитьfor
цикл, используя место приращения как тело цикла:for(;++i<n;System.out.print((char)i));
(но вам, возможно, придется изменить значение инициализации или конечное значение на + - 1)++i<n+1
должно быть эквивалентно++i<=n
. Обратите внимание на=
там, однако! Это просто сохраняет один байт. Меня устраивает.void f(int n){int i=0;for(;++i<=n;System.out.print((char)i));}
62 байтов. По крайней мере, я не вижу больше в гольфе сейчас. :)АПЗ, 5
Пример использования:
источник
JavaScript, ES6 -
525856534442 байтаВставьте это в консоль Firefox. Запустить как
f(NUM)
.Пришлось сделать это дольше, потому что первый не правильно принял ввод.Даун 3, спасибо edc65! До 44 благодаря Swivel!
источник
f=n=>String.fromCharCode(...Array(n).keys())
Haskell,
1723 байтаНе уверен, что это возможно сделать лучше без импорта.
редактировать
Мое первое решение на самом деле не печатало результат, поэтому добавьте еще 6 символов для этого:
Кроме того, не короче (25 символов с печатью, 19 без), но интересный альтернативный подход (хотя и требует 'Data.List'):
источник
(`take`['\0'..])
сохраняет байт.Общие утилиты Bash + BSD, 9 байт
GNU dc, 20 байтов
источник
C,
31302827Так как putch нестандартный, вот полностью совместимая версия:
Должен быть вызван из основного:
РЕДАКТИРОВАТЬ: Улучшено за счет использования возвращаемого значения путчар
РЕДАКТИРОВАТЬ 2: Уменьшено на другого персонажа через рекурсию
источник
Perl, 17 байт
источник
print chr for 0..$ARGV[0]
shift
вместо того,$ARGV[0]
чтобы сохранить 2 байта.say
. Кроме того, количество символов короче, если вы делаете это как одну строку с-n
.echo "90" | perl -nE'say chr for 0..$_'
будет считаться как18
персонажи.17
заsay chr for 0..$_
плюс1
заn
.say
не будет работать с каждой версией Perl.CJam, 3
Я предположил, что аргумент является верхним элементом стека.
Пример использования:
источник
Рубин, 30 символов
источник
awk - 27
Чтобы задать параметр на stdin, запустите его следующим образом:
Просто для удовольствия: «Подумайте позитивно», начиная с окончательного
yes
:NR-1
необходимо напечатать(char)0
дляNR==1
. :-(И почему у нас нет
no
команды? Это своего рода подло!источник
alias no='yes no'
J - 5 байт
{.
is Head,a.
is Alphabet (список всех символов) и&
связывает их, генерируя монадический глагол, называемый как:Примечание : кажется, что это не работает в интерактивном режиме: Jconsole и jQt, кажется, устанавливают перевод, выводя символы ящика вместо некоторых управляющих символов. В скрипте или из командной строки это работает, хотя:
источник
{.&a. 127
, это не так?char
или эквиваленты.gs2, 2 байта
Это должно конкурировать, я думаю! Это сработало бы даже в первые дни GS2. Попробуй это здесь.
источник
Brainfuck, 44 байта
Ожидается десятичная строка без завершающей строки.
Попробуйте онлайн.
Чтение целых чисел в диапазоне
[0, max_cell_size]
в Brainfuck не сложно. Я призываю вас изобрести чистый метод самостоятельно. Я считаю это упражнение для начинающих. (Обратная операция печати числового значения ячейки более сложна и может рассматриваться как задача промежуточного уровня.)Вот 58-байтовая версия, которая может обрабатывать
256
8-битные реализации:источник
Гольфскрипт - 5
Благодаря @Dennis
источник
~,""+
Короче и правильно обрабатывает ввод из STDIN.;"65"
, так как ввод из STDIN всегда будет строкой.Lua -
4341 байтисточник
a=""for i=1,arg[1]do print(a.char(i))end
for i=1,arg[1]do print(("").char(i))end
Befunge 98, 22
Вид грустно, что это так долго.
источник
Python 3.4 - 36 байт / 43 байт
255 вход ()
Как это работает:
Второй просто удаляет пробел, отделяющий каждый символ в обмен на 7 байтов.
источник
map
возвращает список, так что вы можете просто сделатьf=lambda i:map(chr,range(i))
Паскаль 87
Паскаль 73
Сборка и работает нормально с http://www.onlinecompiler.net/pascal
источник
var c,n:byte;begin read(n);for c:=0to n do write(chr(c))end.
pastebin.com/aFLVTuvhx86 ASM (Linux) (много-много байтов, если вы его не скомпилируете)
Записано как функция, предполагает, что параметр передается в AX (я забыл номер для системного вызова read). Также не сохраняет [SP] или BX.
источник
Perl - 29
источник
Руби, 23
объяснение
*
) вызывает#to_ary
Range для печати каждого символа в отдельной строке.источник
Юлия: 20 символов (REPL)
Это близко к примеру вопроса: просто сгенерируйте символы и позвольте REPL делать с ними все, что он хочет.
Юлия: 33 персонажа
Печатает каждый символ в отдельной строке.
источник
М (MUMPS) - 21
R n F i=1:1:n W $C(i)
В развернутом виде:
READ n FOR i=1:1:n WRITE $CHAR(i)
источник
T-SQL:
6863Как печатная петля
T-SQL:
9586Как запрос
Изменить: Внесены изменения и исправления, указанные Muqo. Спасибо. Исправления и игра в гольф, предложенные @ t-clausen.dk
источник
GOTO
метку с. Для запроса, возможно, укажите,msdb.sys.objects
чтобы гарантировать достаточно объектов. Кроме того, он не выводит CHAR (0). Однако, как утешение, вы можетеORDER BY @
.BrainFuck -
140112 байтПопробуй здесь!
Сохранено 28 байтов путем изменения
[<<<->>>->+<]>[<<<->>>->+<]>[<<<->>>-]
на[<<<->->->-]
.Что оно делает
источник
Кег , 4 байта (SBCS)
TIO
Нажмите вход, выход ASCII таблицы.
источник