Введение
В выходных данных об ошибках некоторых языков, таких как Java, показан указатель, чтобы дать программисту представление о том, где именно произошла ошибка.
Возьмите этот пример на Ideone:
Main.java:12: error: ';' expected
Invalid Java!
^
Обратите внимание, каретка показывает, где находится неверный код?
Вызов
Ваша задача состоит в : заданное число N и строка S , поместите указатель на N - й символ в S .
Примеры
Вход :2, "Lorem ipsum, dollar sit amet."
Выход :
Lorem ipsum, dollar sit amet.
^
правила
- Вход получен через STDIN или функциональные параметры
- Вывод выводится на консоль или
return
редактируется - Завершающие новые строки, пробелы и т. Д. Допускаются в выводе
- Символ указателя должен быть символом ^ и должен находиться на новой строке.
- Это код гольф, поэтому самый короткий ответ выигрывает. Удачи!
Ответы:
С 33
Если разрешена только функция, то даже c может конкурировать.
(Для записи, 2 байта были сохранены благодаря @Cool Guy. Комментарий был неожиданно испарен.)
Еще 1 символ спасен thx @Mig
источник
f(a,c){printf("%s\n%*c",a,c,94);}
*
вариант в строке формата раньше, но полностью забыл об этом. Может пригодиться для решения некоторых задач ascii art в будущем.Brainf * ck - 133 байта
Ожидается ввод,
[0-9]{2}.*
например, "02Hello world !!!" будет производитьисточник
e
в примере. По стоимости 1 байт это можно исправить, добавив-
перед[->.<]
Машинный код IA-32, 24 байта
HexDump:
Это функция (с использованием
fastcall
соглашения MS ), которая обновляет строку на месте:Код сборки:
Он использует
WORD
размерные (16-битные) данные в нескольких местах. Это имеет штраф (1-байтовый префикс) в 32-битном коде, но в любом случае делает код меньше - использование 32-битных данных приведет к добавлению двух нулевых байтов в код!В конце он записывает 4 байта (
eax
) вместо 2 байтов (ax
) - таким образом, код становится меньше, и 2 лишних байта мусора идут после завершения строки, поэтому никто их не замечает.Использование:
источник
66 b8 5e 00
перемещается0x5e
кal
, а не кah
, и к нулюah
вместоal
, поэтому ваш комментарий в коде сборки вводит в заблуждение.naked
там? И почему это первое, что я увидел?naked
: msdn.microsoft.com/en-us/library/h5w10wxs.aspxПиф , 8
Это решение больше не работает, так как коммит после того, с которым я связался в качестве имени языка, изменился
p
на arity 1. Есть несколько других способов достижения того же результата в Pyth, которые до сих пор работают, напримерzp+*dQ\^
.Если строка нуждается в кавычках, добавление
v
в начало кода работает. Если он должен быть разделен запятыми, он занимает до 10 байтов:источник
^
что всегда будет под первым символом. И, кстати, входные параметры передаются в неправильном порядке онлайн-интерпретатору (поэтому он не выполняется).p
была арность 1. Это привело к тому, что сначала печаталась первая строка вывода, а затем каретка на следующей строке с пробелами. Теперь вы можете сделатьz+*dQ\^
для более короткой оценки, но с завершающей новой строкой, или добавитьp
перед,+
чтобы удалить его. Я не уверен, что делать здесь, так как люди проголосовали за эту версию ответа, я думаю, что я попытаюсь найти версию, над которой он работал.T-SQL, 90
Хотя это довольно простой вопрос, всегда интересно пробовать их на языках, которые на самом деле не склонны поддерживать их или играть в гольф в этом отношении.
Этот ответ почти гарантированно будет самым длинным.
Это создает встроенную табличную функцию для SQL Server, которая принимает @n и @ в качестве параметров и возвращает результаты в виде столбца. Возврат каретки значителен, иначе мне нужно было бы использовать char (13).
Используется следующим образом
И возвращает
источник
Python, 27
Это использует два уровня форматирования строки.
И вот 25-байтовое решение, частично украденное из ответа feersum (с обратным порядком аргументов):
источник
Баш, 27
Выход
источник
$
в конце подсказка оболочки. Вопрос указывает, что завершающие символы новой строки разрешены, но не говорит, что они необходимы.Python, 29
Объединяет строку, символ новой строки,
n-1
пробелы и a^
.источник
rjust
не было так долго ...Сед, 16
Это что-то вроде тестового примера этого мета-ответа . В частности, я требую, чтобы число N вводилось в одинарном формате. Например, для каретки в положении 2 вход для N будет
11
. Также строго не указано, какой порядок должен быть S и N , поэтому здесь S идет первым, за которым следует унарный N в новой строке через STDIN.Выход:
источник
2y/1/ /;2s/ $/^/
JavaScript (ES6):
6362565232 байтаСпасибо nderscore за значительное уменьшение размера кода.
Версия, которая работает в нескольких браузерах (47 байт):
источник
Array(a-1)
. 2. Анонимные функции разрешены по умолчанию, поэтому вам не нужноpoint=
. 3. Для версии ES6 вы можете избавиться отreturn
оператора и скобок. Просто используйте(a,b)=>b+"\n"+Array(a-1).join(" ")+" ^"
.\n
на новуюp=(a,b)=>b+`\n${' '.repeat(a-1)}^`
Array(1).join(' ')
приводит к пустой строке :)CJam, 9 байт
Попробуйте онлайн.
Как это устроено
источник
Python, 29
Вот более забавный способ сделать это в 29:
Пример использования:
источник
TI-BASIC, 10 (?) Байтов
Вводится в переменной N, как задает вопрос, но вы не можете использовать букву var S в качестве строки. Вместо этого, он принимает строку ввода от Ans, так , чтобы запустить пример в OP:
2->N:"Lorem ipsum, dollar sit amet.":prgm<program name>
.Я знаю, что это, вероятно, не считается, поскольку каждый разделенный двоеточиями сегмент технически является отдельным утверждением; вот 46-байтовая программа, которая принимает входные данные как
N "S"
(2 "Lorem ipsum, dollar sit amet."
)Оба из них предполагают, что экран был очищен перед запуском.
источник
дк, 19
Ввод из STDIN.
dc
строки являются определениями макросов и содержатся в[
]
. Строка пробелов генерируется путем вычисления числа, которое при выражении в виде 256-байтового потока дает нам нужную строку. Расчет есть((n ^ 256) / 255) * 32)
. Это даетn
пробелы (символ 32 ASCII), но нам нужноn-1
следовать^
, поэтому мы просто добавляем 62 к последнему основному 256 разряду.Выход
источник
C
595747 байтовДовольно просто. Безголовая версия:
Проверьте это здесь.
Спасибо @anatolyg за сохранение 10 байтов!
источник
puts(a)
иputchar(32)
в круглых скобкахfor
цикла - есть ровно два пустых места есть! Кроме того, я не думаю, что вам нужно объявлять типa
иc
- просто используйтеint
для них неявный - будет работать, если вы этого не сделаете#include <stdio.h>
.C # 55
Функция, концепция похожа на мой ответ C, но на этот раз возврат короче, чем вывод.
источник
SAS, 35 байт
Это SAS-эквивалент голой функции; добавить шаг данных для его вызова (эквивалент функции C для вызова) будет немного больше (еще 9 байтов - Ty Alex), но я думаю, что для этого нет необходимости. Как это будет называться:
Существует реализация только для макросов, но она намного длиннее, даже если вы разрешите ей выдавать предупреждение о недопустимых параметрах при n = 1.
Если бы мы могли использовать предопределенные параметры, SAS был бы довольно коротким по сравнению с этим, что является редкостью для языка, который определенно не предназначен быть коротким.
Если набор данных разрешено использовать в качестве источника входных данных, как вы бы это «делали» в SAS (или с помощью инструкций% let), но, вероятно, это не разрешено, это еще короче ( 27 байтов , что на самом деле может быть 25 если вы гарантировали, что набор данных был создан непосредственно перед запуском этого [как вы могли бы просто использовать
set;
]):(существующий набор данных)
(актуальный код)
источник
data a;
, вы можете просто сделать,data;
что сэкономит 2 байта. Но, как вы сказали, это все равно не нужно для этого.Матлаб / Октава, 41
Это анонимная функция, которая возвращает строку. Это создает предупреждение, которое может быть подавлено предыдущим вызовом
warning off
.источник
ans =
бит, так что после исправления разница только в 10 символов.К, 21 байт
Пример:
Пояснение (
x
это число,y
это строка):источник
Р,
494846Как безымянная функция, которая выводит на STDOUT. Спасибо @Flounderer за улучшение.
теперь использует strwrap, чтобы идентифицировать каретку для n-1. cat использует разделитель \ n, а не пустую строку.
Тестовый забег
источник
function(n,x)cat(" ",x,"\n",rep("",n),"^")
и сохраняет несколько символовstrwrap
функцию раньше. Есть ли простой способ сказать, что он делает? Я не могу понять это из документации.Python3,
3836 байтПроверьте это здесь.
Спасибо @Dennis за сохранение 2 байтов!
источник
(i-1)
->~-i
Юлия, 27 байт
Это создает безымянную функцию, которая принимает целое число и строку в качестве входных данных и возвращает строку. Чтобы назвать его, дайте ему имя, например
f=(n,s)->...
.Все, что здесь происходит, - это добавление новой строки,
n-1
пробелов и каретки. Конкатенация строк выполняется с использованием*
и повторения строк с^
.Ungolfed:
Пример:
источник
PHP (CLI) - 42
Вызовите это из командной строки:
источник
<?printf("$S\n%{$P}s",'^');
. Заменить\n
с реальным символом новой строки. Всего 5 байтов. Это работает только на PBP4.1 и ниже.Матлаб, 25
Этот очень нахальный. Видимо отображает распечатки непечатных символов в виде пробелов. Следующий код определяет функцию с именем
ans
, которая соответствует спецификациям.так вызывая эту функцию так:
дает вывод:
Мне всегда не нравилась
ans =
роль в ответах Matlab. Если это проблема, мне нужно добавить 6 байтов ... но я всегда видел это в ответах Matlab. Обратите внимание, что выполнение этого кода перезаписывает переменнуюans
, поэтому вам нужно переопределить функцию, если вы хотите использовать ее во второй раз!источник
x=ans(2, 'asdf');
вы не получите ответ = вещь.Мой первый выстрел в Codegolf
Ява,
13365Я уверен, что это может быть уменьшено еще больше.
Старый код
источник
System.out
нибудь?public
. И изменитьIntStream.range(1,i).forEach(j->System.out.print(" "));
наfor(;--i>0;)System.out.print(" ");
s+="\n"
внутрьfor()
инициализации, чтобы использовать точку с запятой там?Свифт, 41
Вызывает разочарование , что Swift не имеет оператора
*
наArray
илиString
.источник
{$1+(0..<$0).reduce("\n"){$0.0+" "}+"^"}
СпецБАС - 34
Апостроф
PRINT
заставляет новую строку, тогда просто нужно переместить курсор в правильное положение.источник
GolfScript 11
Проверьте здесь .
источник
JavaScript - 52 байта
Вот мой, это довольно просто.
Использование:
Это указывает на седьмой символ.
источник
alert((P=prompt)()+"\n"+Array(P()+1).join(" ")+"^")
. И вы экономите 2 байта. Кроме того, вы можете сделать это в stasksnippet, чтобы продемонстрировать работающий код. Ожидается, что сначала будет строка, а затем позицияPerl 5, 31
источник