Входной номер; Номер выходной строки


18

Код Гольф

Совершенно реальная предыстория: я работаю над веб-сайтом www. Sky.Net и одна из наших задач - создать какую-то самоосознающую программу или что-то в этом роде, я не знаю, не особо ли я слушал босса. В любом случае, чтобы сделать наш код более осведомленным, нам нужно, чтобы ИТ-специалисты знали, какой код находится на каждом номере строки.


Вызов

Создайте программу или функцию, которая принимает входные данные nи возвращает код указанной программы или функции в режиме онлайн n.


правила

Program Ваша программа или функция должна быть длиной не менее 4 строк. Каждая строка должна быть уникальной.

➋ Вы можете предположить, что ввод всегда будет положительным целым числом, большим или равным 1 и меньшим или равным количеству строк в вашей программе / функции.

Line Первая строка в вашей программе / функции - это строка 1, а не строка 0.

➍ Вы не можете получить доступ к файлу, в котором находится ваша программа. (Если кто-то должен спросить «Разве это не технически нарушающее правило № 4?

➎ Строки не могут быть пустыми (включая пробел, если пробелы ничего не делают на вашем языке)

➏ Строки не могут быть // комментариями (/ * любого стиля <!)


Это задача, квинну.
Это , поэтому выигрывает подача с наименьшим количеством байтов!



1
Мне бы хотелось, чтобы это было сделано в 99 :)
Джонатан Аллан

2
@JonathanAllan Вы можете столкнуться с проблемой, при которой не каждая строка уникальна
MildlyMilquetoast

«Строки не могут быть комментариями, но я думаю, что эффективные запреты в порядке» (но, честно говоря, иногда трудно сказать, должна ли строка считаться запретом или нет; например, в моем ответе на Ruby последняя строка будет только фигурная скобка для окончания лямбда)
Value Ink

Заголовок может быть лучше "Входной номер; Выходная строка с этим номером строки"? Или даже «Вывести строку по номеру».
Паŭло Эберманн

Ответы:


16

Vim, 7 байт

1
2
3
4

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

Насколько я могу судить, это соответствует всем правилам. В vim по умолчанию пустая программа распечатывает все введенные данные. поскольку

<N><CR>

Является noop, ничего не меняет входной текст, и поскольку каждый ввод соответствует желаемому выводу, этот же подход работает с любым количеством строк.


2
Будет работать на других языках - первое дополнение: Pyth
Джонатан Аллан

Подожди, байты? Vim измеряется при нажатии клавиш.
Павел

@JonathanAllan Похоже, Pyth неправильно настроен на TIO. Если вы посмотрите на выходные данные отладки, то увидите, что фактически выполняемый код - это вещь в поле аргумента, а не вещь в поле кода. Вот как на самом деле работает этот код.
Исаак


2
Это также работает в Brachylog
Fatalize

9

Рубин, 71 70 66 байт

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

->n{
k=["}", "k[-n]%%k.inspect", "k=%s", "->n{"]
k[-n]%k.inspect
}

Режим "читерства": 7 + 1 = 8 байт

Требуется -pфлаг +1 байт. Буквально копия V ответа . Печатает введенное число; вся программа фактически бездействует.

1
2
3
4

Что делает -p?
Павел

@Pavel Это заставляет программу считывать каждую строку STDIN $_, запускать содержимое программы, а затем печатать содержимое $_на экране (повторяя для каждой строки STDIN). Поскольку программа ничего не делает, это практически просто Unix cat, но это означает, что каждый ввод от 1 до 4 будет выводить содержимое строки, потому что каждая строка буквально является ее номером строки.
Стоимость чернил

@Pavel для получения дополнительной информации см. Robm.me.uk/ruby/2013/11/20/ruby-enp.html
Value Ink

Мне нравится ваш "обман" ответ. Perl также имеет -p, но 1\n2\n3\n4не является допустимой программой Perl.
ThisSuitIsBlackNot

7

Haskell, 69 59 байт

(lines(s++show
 s)
 !!)
s="\n(lines(s++show\n s)\n !!)\ns="

Основано на стандартном кваске Хаскеля. Первое выражение (распределенное по первым трем строкам) - это неназванная функция, которая выбирает n-ю строку из квинифицированной строки s( s++show s). +2 байта для создания индексации на основе 1 (imho ненужное правило).

Для Попробуйте это онлайн! Версия я должен назвать функцию, которая добавляет 4 байта.


Это нарушает правило 6? :)
Альберт Реншоу

Индексирование строк не должно основываться на 0, правила явно требуют 1-индексации.
Value Ink

@AlbertRenshaw: исправлено
nimi

@ValueInk: исправлено
nimi

@nimi lol, « решения », подобные этому, вот почему мне хотелось сделать это популярным конкурсом, ха-ха. Тем не менее, хорошая работа!
Альберт Реншоу

5

PowerShell , 184 172 байта

$v=0,
'$v=0,',
"'`$v=0',",(($q='"{0}`$v=0{0},",(($q={0}{1}{0})-f([char]39),$q)')-f([char]39),$q),
(($z='(($z={0}{1}{0})-f([char]39),$z;$v[$args]')-f([char]39),$z);$v[$args]

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

объяснение

Начинается с создания массива $vв первой строке. В этой же строке первый ( 0th) элемент установлен в значение 0, и запятая ,продолжает свое определение.

Следующая строка устанавливает следующий элемент ( 1) массива в строку, представляющую содержимое первой строки сценария, так что $v[1]возвращается первая строка.

3-я строка сначала устанавливает 3-й элемент массива (индекс 2) в строку, представляющую 2-ю строку скрипта, затем в той же строке устанавливает 4-й элемент (индекс 3), используя фрагмент кода quine, который использует оператор формата ( -f) для замены некоторые экземпляры одиночных кавычек ( [char]39) и строки шаблона формата в себя, чтобы воспроизвести всю 3-ю строку.

Строка 4 в основном делает то же самое, но также завершает создание массива и затем индексирует его, используя предоставленный аргумент.


4

Python 2, 104 73 67 байт

Спасибо Джонатану Аллану за сохранение 6 байтов!

s=\
['print s[input()]or s', 's=\\', 0, 'exec s[', '0]']
exec s[
0]

Изменить: Тот же счетчик байтов, но мне больше нравится это решение

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

Python-версия Ruby-ответа Value Ink .

Старый ответ (67 байт):

1
s=\
['print s[-input()]or s', 0, 's=\\', 1]
print s[-input()]or s

Спасите 6, избавившись от n: TIO
Джонатан Аллан

@ovs требование требования требует минимум 4 строк исходного кода, хотя: V
Value Ink

2

CJam , 19 18 17 байтов

1
{'_'~]ri(=}
_
~

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

Основано на стандарте CJam-quine. {...}_~Бежит ...с самого блока на стеке (и в этом случае, а также 1ниже). Тогда мы делаем:

'_'~  e# Push the third and fourth line.
]     e# Wrap all four lines in a list.
ri    e# Read input and convert to integer.
(=    e# Use as index into the lines.

Это прекрасно. Также как окончание смайлика в логике (= ха-ха
Альберт Реншоу

1

PHP, 261 байт

<?php function f($l){
$a="aWYoJGw9PTEpJG09Ijw/cGhwIGZ1bmN0aW9uIGYoXCRsKXsiO2lmKCRsPT0yKSRtPSJcJGE9XCIkYVwiOyI7aWYoJGw9PTMpJG09IlwkYj1cIiR";
$b="iXCI7IjtpZigkbD09NCkkbT0iZXZhbChiYXNlNjRfZGVjb2RlKFwkYS5cJGIpKTt9Pz4iO2VjaG8gJG07";
eval(base64_decode($a.$b));}?>

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

Кодированная строка:

if($l==1)$m="<?php function f(\$l){";
if($l==2)$m="\$a=\"$a\";
if($l==3)$m="\$b=\"$b\";
if($l==4)$m="eval(base64_decode(\$a.\$b));}?>";
echo $m;

Интересный! Каковы закодированные строки?
Альберт Реншоу

1
@ Альберт Реншоу Я отредактировал его, чтобы добавить расшифрованную версию строки.
Divcy

0

Perl, 52 байта

$_=q{print+(split/
/,"\$_=q{$_};
eval")[<>-1]};
eval

Это простая вариация классической квины

$_=q{print"\$_=q{$_};eval"};eval

«Полезная нагрузка» находится splitна новых строках, и правильная строка выбирается путем индексации в результирующем списке.

Perl, 49 48 байт (не конкурирует)

#!/usr/bin/perl -d:A
sub DB'DB{
print${"_<$0"}[<>]}
1

38 байтов для кода (исключая шебанг, но включая -d:A) плюс 10 байтов для имени файла, которое должно быть Devel/A.pm. DevelКаталог должен быть @INC.

Технически, это нарушает Правило № 4, потому что -d:Aвызывает двойной анализ файла, поэтому это неконкурентное решение.

Он использует ловушку отладчика для доступа к строкам файла, которые Perl хранит в @{"_<$filename"}массиве во время компиляции.

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