输入号码;输出行号


18

高尔夫代码

完全真实的背景故事:我是在网站www上工作的承包商。Sky.Net和我们的任务之一就是创建一些自我意识的程序或其他东西,我不知道我不是在听老板的话。无论如何,为了使我们的代码更具自我意识,我们需要IT部门能够知道每个行号上的代码。


挑战

创建一个接受输入n并在线返回所述程序或函数代码的程序或函数n


规则

program您的程序或函数必须至少有4行。每行必须唯一。

➋您可以假设输入将始终是一个大于或等于1且小于或等于程序/函数中的行数的正整数。

program程序/功能的第一行是第1行,而不是第0行。

can您无法访问程序所在的文件。(如果有人要问“这在技术上是否违反规则4”,可能是)

➎行不能为空(如果空格对您的语言没有任何作用,则必须包含空格)

➏行不能是//注释(任何<!-style的/ *)


这是一个的挑战,
这是,所以字节最少的提交会获胜!



1
我想在99
乔纳森·艾伦

2
@JonathanAllan您可能会遇到并非每行都是唯一的问题
MildlyMilquetoast

“行不能是注释,但我想有效的无操作行是可以的”(但老实说,有时很难说一行是否应该算作无操作;例如,我的Ruby回答的最后一行只有一个大括号以结束lambda)
值号墨水

标题可能更好:“输入数字;使用该行号输出行”?甚至“按数字输出行”。
圣保罗Ebermann

Answers:


16

Vim,7个字节

1
2
3
4

在线尝试!

据我所知,这符合所有规则。默认情况下,在vim中,空程序会打印出所有输入。以来

<N><CR>

是noop,不会更改输入文本,并且由于每个输入都与所需的输出匹配,因此这种相同的方法适用于任意数量的行。


2
将以其他语言工作-首次添加:Pyth
Jonathan Allan

等等,字节?Vim以击键进行度量。
帕维尔

@JonathanAllan似乎Pyth在TIO上配置错误。如果查看调试输出,则可以看到实际上正在运行的代码是参数字段中的东西,而不是代码字段中的东西。就是实际运行该代码的样子。
isaacg


2
这也适用于Brachylog
Fatalize

9

Ruby,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 '17

7

Haskell,69 59字节

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

基于标准的Haskell奎因。第一个表达式(分布在前三行中)是一个未命名的函数,该函数从四分之一的字符串ss++show s)中选择第n行。+2字节用于使索引从1开始(恕我直言是不必要的规则)。

对于网上试试吧!版本我必须命名该函数,它增加了4个字节。


这违反规则6吗?:)
艾伯特·伦肖

行索引不应该基于0,规则明确要求1索引。
价值墨水

@AlbertRenshaw:固定
NIMI

@ValueInk:固定
NIMI

@nimi大声笑,像这样的“ 解决方案 ”就是为什么我很想让它成为一场人气竞赛哈哈。不过,辛苦了!
艾伯特·伦肖

5

PowerShell184172字节

$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]返回第一行。

第三行首先将数组的第三元素(index 2)设置为表示脚本第二行的字符串,然后在同一行3上使用使用格式运算符(-f)替换的quine代码片段将第四元素(index )设置为单引号([char]39)和格式模板字符串的某些实例本身可以重现第三行的全部内容。

第4行基本上执行相同的操作,但也结束了数组的创建,然后使用提供的参数对其进行了索引。


4

Python 2,104 73 67字节

感谢Jonathan Allan节省了6个字节!

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

编辑:相同的字节数,但我更喜欢此解决方案

在线尝试!

Value Ink的Ruby Answer的 Python版本。

较早的答案(67个字节):

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

通过摆脱以下方法来节省6 nTIO
Jonathan Allan

@ovs挑战要求虽然需要最少4行源代码:V
Value Ink,

2

CJam19 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.

这很漂亮。也就像逻辑的笑脸结束了(=哈哈
Albert Renshaw

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

这是经典quine的简单变化

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

“有效负载” split在换行符上,并通过索引到结果列表中来选择正确的行。

Perl,49个48字节(无竞争)

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

代码的38个字节(不包括shebang,但包括在内-d:A)加上文件名的10个字节(必须为)Devel/A.pm。该Devel目录必须位于中@INC

从技术上讲,这违反了规则4,因为它-d:A导致文件被解析两次,因此这是一个非竞争解决方案。

它使用调试器挂钩访问文件的行,这些行在@{"_<$filename"}编译时存储在perl中。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.