Вхідний номер; Номер вихідного рядка


18

Код гольф

Повністю реальна історія: Я підрядник, що працює на веб-сайті www. Sky.Net і одне з наших завдань - створити якусь усвідомлену програму чи щось таке, я не знаю, що я насправді не слухав боса. У будь-якому разі, намагаючись зробити наш код більш усвідомленим, нам потрібна ІТ, щоб мати можливість знати, який код є на кожному рядку.


Виклик

Створіть програму або функцію, яка приймає введення nта повертає код зазначеної програми чи функції в онлайні n.


Правила

➊ Ваша програма або функція повинна бути не менше 4 рядків. Кожен рядок повинен бути унікальним.

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

➌ Перший рядок у вашій програмі / функції - це рядок 1, а не рядок 0.

➍ Ви не можете отримати доступ до файлу, на якому увімкнено вашу програму. (Якщо хтось повинен запитати "Чи це не технічно порушення правила №4"; це, мабуть, так) "

➎ Рядки не можуть бути порожніми (сюди входить пробіл, якщо пробіли нічого не роблять на вашій мові)

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


Це вигляд, подібний до .
Це , тому подання з найменшими байтами виграє!



1
Я хотів би, щоб це було зроблено в 99 :)
Джонатан Аллан

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

"Рядки не можуть коментувати, але я думаю, що ефективні відсутності операцій добре" (але, чесно кажучи, іноді важко сказати, чи слід вважати рядок як неоперативний чи ні; наприклад, у моїй відповіді Ruby останній рядок має бути лише a фігурна дужка до кінця лямбда)
Значення чорнила

Заголовок може бути кращим "Номер вводу; рядок виводу з цим номером рядка"? Або навіть "Виведення рядка за номером".
Paŭlo Ebermann

Відповіді:


16

Vim, 7 байт

1
2
3
4

Спробуйте в Інтернеті!

Наскільки я можу сказати, це відповідає всім правилам. За замовчуванням vim порожня програма видає весь вхід. З тих пір

<N><CR>

Це ніоп, нічого не змінює вхідний текст, і оскільки кожен вхід відповідає бажаному виводу, цей самий підхід працює з будь-якою кількістю рядків.


2
Працюватимуть іншими мовами - перше доповнення: Pyth
Jonathan Allan

Зачекайте, байти? Vim вимірюється натисканням клавіш.
Павло

@JonathanAllan Схоже, Pyth налаштований неправильно на TIO. Якщо ви подивитеся на вихід налагодження, ви можете побачити, що код, який насправді виконується, - це річ у полі аргументу, а не річ у полі коду. Ось як насправді працює цей код.
isaacg


2
Це також працює в Брахілогу
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
Чорнило про вартість

Мені подобається ваша відповідь на "обман". 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="

Виходячи зі стандартної квітки Haskell. Перший вираз (поширюється на перші три рядки) - це неназвана функція, яка вибирає n-й рядок із квінованого рядка s( s++show s). +2 байти, щоб зробити індексацію на основі 1 (що є непотрібним правилом).

Для Спробуйте це онлайн! версія Я повинен назвати функцію, яка додає 4 байти.


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

Індексація рядків не повинна базуватися на 0, правила явно вимагають 1-індексації.
Значення чорнила

@AlbertRenshaw: фіксований
Ними

@ValueInk: фіксований
Ними

@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в першому рядку. У цьому ж рядку встановлюється перший ( 0го) елемент 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
Значення чорнила

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
@Albert Renshaw Я відредагував це, щоб додати розшифровану версію рядка.
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.