Вызов
Напишите непустую программу / функцию, p
которая, учитывая непустую входную строку s
, выводит позицию первого вхождения каждого символа s
в исходном коде p
.
Например, если ваша программа
main() { cout << magic << cin }
^0 ^5 ^10 ^15 ^20 ^25
и он получает вход abcd{
, выход должен быть
[1, x, 9, x, 7] (0-based) [2, x, 10, x, 8] (1-based)
Здесь, x
представляет любой вывод , который не является допустимым для вывода позиции символа (например, отрицательное число, 0
если вы используете индексацию 1 на основе, NaN
, Inf
, строка potato
, число больше длины вашей программы, и т.д.).
ограничения
Чтение исходного кода не допускается (как в правильном квине). Использование комментариев разрешено, но учитывается при подсчете очков.
Ввод и вывод могут быть выполнены в разумном формате, но должны быть однозначными (только дополнительные разделители, нет rand
потока и утверждение, что ответ где-то там), согласованным (например, приведенное x
выше значение всегда должно быть одинаковым) и человеком читаемый ; например, строка или массив символов. Вы можете предположить, что ввод представляет собой строку (или массив) печатных символов ASCII; нет необходимости обрабатывать весь набор Unicode.
Пользовательская кодовая страница или непечатаемая ascii в вашем коде?
Если ваш язык использует пользовательскую кодовую страницу (Jelly, APL и т. Д.), Вы должны принять это во внимание (поэтому программа €æÆ
должна выводить данные [1, x, 2]
для ввода €%æ
). Использование только не-ASCII символов для вывода -1
всегда (так как ввод только ASCII) не является допустимым решением. Вы можете предположить, что ваша программа изначально принимает вашу пользовательскую кодовую страницу, т. Е. Если ваша программа имеет метод преобразования символа A
в целое число 65
(кодировка ASCII), вы можете предположить, что теперь она преобразует 65-й символ в вашей кодовой странице 65
.
Вдохновлен следующей задачей: Позиционная осведомленность
01030708070
,?Ответы:
Python2, 55 байт
Начинается со строки, содержащей все символы, используемые в коде, а затем выполняет поиск по индексам.
источник
raw_input
.Lenguage , 56 623 байта
Ниже приведен шестнадцатеричный дамп первых 256 байтов. Остальные байты могут быть выбраны произвольно.
Вывод в байтах, как обычно для brainfuck et al.
Как это работает
Это простая программа для кошек, в частности
,[.,]
.Исходный код содержит все 256-байтовые значения по порядку, поэтому индекс каждого байта в нем соответствует своему значению.
источник
+[,.]
бы гораздо лучше?Lenguage , 1.22e7 байт
Состоит из
12263215
NUL
байтов, (Hex 0x00) .Выводит a
NUL
для каждого символа, который не отображается в источнике.Это переводит в следующую программу Brainfuck
И с поломкой ...
Это просто показывает всю мощь Lenguage как языка игры в гольф. Бойся этого
источник
,[>.,]
будет короче?Желе ,
109 байтПопробуйте онлайн!
Как это работает
источник
pbrain,
402356340338329 байтФу, @KritixiLithos и я работаем над этим уже 4 дня.
Печатается,
0x00
если входной символ не находится в программе, в противном случае индекс символа (на основе 1) в шестнадцатеричном виде. Попробуйте онлайн!Объяснение:
Эта последняя функция - цикл. Он просматривает выбранные символы
[(:<>)+,-.]
по порядку и сравнивает ввод с символом. Теперь я собираюсь дать более глубокое объяснение того, как работает этот цикл.Стек выглядит так, когда находится в цикле. Цикл будет работать, пока не
12-n
будет0
. Тогда у нас есть счетчик, который естьn+2
. Этот счетчик также является номером функции для каждого из выбранных символов. Поэтому , когдаn=0
,n+2
будет соответствующее первому символу, то есть[
.>[->+>+<<]>>[-<<+>>]<:
делает это, он конвертирует счетчик в символ.Как только указатель окажется там, где находится курсор, мы сравним символ, полученный из переменной counter, с вводом, сохранив их.
Z
это0
когда символ равен вводу или другому ненулевому целому числу в противном случае.Теперь мы придумали оператор if, чтобы проверить это равенство.
Если
Z
не ноль, то есть символ и ввод не совпадают, мы увеличиваем следующее место в памяти.После того, как мы выйдем из этого оператора if, мы уменьшим следующую ячейку памяти. Теперь это место памяти содержит
!Z
. Наконец, используя это, мы выводим индекс символа, если он совпадает с вводом, а затем принудительно покидаем цикл. Иначе, мы продолжаем цикл пока он не закончится или совпадение не будет найдено.источник
CJam ,
1412 байтовИспользует индексирование
-1
на основе 0 и для символов, которые не отображаются в источнике.Попробуйте онлайн!
источник
Javascript, 34 байта
Он принимает входные данные в виде массива строк,
x
is-1
(индексация на основе 0).источник
s='s=%s;print s%%s';print s%s
в Python. Это не включаетf=
, так что все в порядкеa
должен быть строкой. Там нетmap
функции для строк.C
153152143 байтаПопробуйте онлайн!
источник
Рубин,
41 88 86 71 69 67 6156 байтThx Линн за убийство 6 байтов
источник
a='p$<.chrsm{| #index};"';p$<.chars.map{|c|"a='#{a}".index c}
должен работать тоже, принимая во внимание STDIN.> <> (Рыба) 70 байт
Возможно, самый длинный> 1> лайнер, который я когда-либо делал.
Он напечатает вывод для каждого символа, найденного в отдельной строке (0 проиндексирован).
Не найденный символ всегда будет печатать длину кода + 1 (я мог бы изменить это, если в текущем состоянии это будет считаться не в порядке), поэтому в этом случае 71 всегда будет символом «Не найден».
Я найду объяснение, как только у меня будет время.
Некоторые тестовые случаи;
## K = 1 \ n1 \ n71
# "# = 1 \ n69 \ n1
Попробуйте онлайн
> <> язык
источник
Perl 6 ,
5052 байтаПеревод решения рубинового GB в и решения Python Рода .
Лямбда, которая вводит список символов и выводит список индексов, начинающихся с нуля (
Nil
для несуществующих символов).РЕДАКТИРОВАТЬ: Исправлен недосмотр - требуется добавить 2 байта :(
источник
Clojure,
435648 байтовРедактировать: Черт, я забыл о
2
! Увеличено с 43 до 56.Редактировать 2: Обновлен пример кода под этим текстом, обновлено количество байтов (не включать
(def f ...
), но только часть хеш-карты.Хэш-карта состоит только из символов
01234{\\}
и кодирует их местоположение. В Clojure hash-maps могут использоваться функции, как показано в этом полном примере (f
может быть заменено определением hash-map):Я думаю, это имеет значение :)
источник
JavaScript, 39 байт
источник
[...s]
пожалуйста?Pyth, 11 байт
Программа, которая принимает входные данные
"quoted string"
, с любыми кавычками в строке, с предыдущей\
, и печатает список значений с нулевым индексом-1
для символов, отсутствующих в источнике.Попробуйте онлайн!
Как это работает
источник
05AB1E , 19 байтов
Попробуйте онлайн!
Это выводит -1 вместо отсутствующих символов.
Луис Мендо опубликовал это (слегка измененное) на Golf, что вам очень понравилось! добавление "s" и "k" к этой квине приводит и к этому ответу. Тем не менее, я не могу взять кредит на эту тривиальную модификацию ... Луис, вы можете написать мне, если вы хотите опубликовать это, и я просто удалю его. Если вы хотите увидеть мой прогресс, прежде чем найдете этот вопрос, просмотрите изменения. Ну ... В какой-то момент это было очень похоже на его.
источник
SmileBASIC,
128968886 байтВажно понимать, что на самом деле это не сложная задача. Вам нужен только исходный код до последнего уникального символа .
Я помещаю по крайней мере 1 из каждого символа в начале кода:
?R<3+CD,4LINPUT(S$)WHILE"
поэтому мне нужно только сохранить копию программы до первой кавычки.источник
Python,
9088 байтПрецедент:
источник
Сложенный , неконкурентный, 36 байтов
Когда я сказал, что этот язык все еще в разработке, я имел в виду это. Видимо,
prompt
раньше потреблял весь стек. Вот почему я не могу иметь хорошие вещи. Попробуй это здесь!Это стандартная структура Quine. По сути,
:
дублирует функцию[...]
в стеке, которая затем выполняется с!
. Затем внутренняя часть[...]
выполняется с функцией в стеке. Он преобразует его в строку, добавляет:!
(саму программу), а затем принимает строку ввода сprompt
.CS
преобразует его в символьную строку. Символьная строка немного отличается от обычной строки тем, что в ней есть операторы векторизации. В этом случае,index
векторизация по вводу, выдача каждого индекса входной строки в программе, наконец,out
вставляется.Для ввода
Hello, World!
это дает:Я попытался использовать тот, который не имеет кавычки (т. Е. Кодировать строку символов, которые появляются в вашем источнике), но в Stacked есть только один тип кавычек, а именно
'
, поэтому решение такого типа будет длиннее.источник
Шелуха , 12 байт
Попробуйте онлайн!
объяснение
Объяснение используется
¨
для разделения строк и'
для разделения символов:источник
Java 8,
172122 байта0 индексируется, и дает
-1
для символов, которые не являются частью исходного кода.Объяснение:
Попробуйте онлайн.
источник
J ,
3122 байтаПопробуйте онлайн!
1-индексированный, 0 для символов, которых нет в коде.
''
обозначает одну цитату. Найдите каждый символ в строке11|1+i.~&'
, добавьте 1, по модулю 11.источник
> <> , 31 байт
Попробуйте онлайн!
Вывод имеет индекс 1, что
32
означает, что символ отсутствует в коде.источник
Perl 5 с
-pl
, 43 байтаИспользует ввод с разделителями новой строки и печатает
-1
для символов, не появляющихся в программе.Попробуйте онлайн!
источник
Stax , 19 байт
Запустите и отладьте его
Выводит индекс на основе 0, по одному символу на строку. Оказывается, это короче, чем изменение
"34bL"34bL
квин, которое я написал ранее.источник