多次查询


16

您的任务是执行以下操作的make程序:

  1. 你应该拿号码。(可以输入正,负,分数)
  2. 如果它是负数,则反转奎纳。并否定该数字(变为正数)
  3. 然后,重复<输入数字的整数部分>次并从源程序中首先打印<地板(输入数字的分数部分*长度)>。如果是整数,则小数部分为零。

如果您的程序不是回文,则可获-10%的奖金。

如果您的程序是“ ABCDEFG”,则

1。

5
ABCDEFGABCDEFGABCDEFGABCDEFGABCDEFG

说明

ABCDEFG五次

2。

-2
GFEDCBAGFEDCBA

说明

GFEDCBA(反向ABCDEFG)2次

3。

7.5
ABCDEFGABCDEFGABCDEFGABCDEFGABCDEFGABCDEFGABCDEFGABCDEFGABC

说明

ABCDEFG 7次,然后是ABC(ABCDEFG上的前3个字母(底数(0.5 * 7)=底数(3.5)= 3))

4。

-0.3
GF

说明

GFEDCBA(反向ABCDEFG)0次,然后是GF(GFEDCBA(反向ABCDEFG)上的前2个(底(0.3 * 7)=底(2.1)= 2)字母)

5,

0
<empty>

说明:

<empty>在这里意味着您的程序不输出。ABCDEFG零次被定义为空字符串。


您能说明一下吗?
LegionMammal978


@ LegionMammal978我实际上不太擅长表达事物,但我希望它能使它更清晰。
Akangka,2015年

2
@ mbomb007我想您可以自己解析字符串-.手动处理(将分数表示为正整数)。或者,您可以将注意力转移到下一个挑战。;)(并非每种语言都可以参加每个挑战,但是只要挑战没有刻意排除任意一种单独的语言,那是完全可以的。只需考虑所有音频/图像处理或文件系统挑战。)
Martin Ender

1
它会感到更合乎逻辑的给予10%的奖金,其方案回文
Bassdrop Cumberwubwubwub

Answers:


8

CJam,28 26字节* 0.9 = 23.4

感谢Sp3000节省2个字节。

{`"_~"+rd_z26*,\g1|@%f=}_~

在这里测试。

说明

{`"_~"+ e# Generalised quine framework. Leaves the source code on the stack.
  rd    e# Read input and parse as double.
  _z    e# Copy and get absolute value.
  26*   e# Multiply by 26, the length of the quine to get length N of the output.
  ,     e# Get a range [0 1 ... floor(N-1)].
  \g    e# Swap with other copy and computer signum to determine direction of string.
  1|    e# This might be zero though, so take bitwise OR with 1 to avoid an error.
  @%    e# Pull up source string. Reverse it if the signum was -1 (no-op otherwise).
  f=    e# The range we pushed earlier corresponds to the (cyclic) indices of the source
        e# which make up the desired result, so we map each index to the corresponding
        e# character to get the final result.
}_~

5

Vitsy,34 * 0.9 = 30.6字节

感谢@ Sp3000指出我的代码中的缺陷!

W 我的物理老师提醒我,我有幂函数可以帮助我。去搞清楚。

'r(; Vd3 * V2 ^ 12 / ^ DvV / 1 +(rvl1-* \ [DO {]
'以字符串开始录制-这将捕获所有内容并将其作为字符串推送到堆栈中。
 r反转堆叠顺序。
  (;如果最上面的项目为零,则退出程序。
    V将输入作为最终全局变量。
     d3 *将字符'推入堆栈。
        V2 ^ 12 / ^获取输入值的绝对值。
               Dv复制并保存到临时变量中。
                 V将全局变量推入堆栈。
                  /将最上面的两个项相除-根据输入的极性,该值为-1或1。
                   1+(如果为-1,请执行下一条指令。否则,请不要。
                      r反转堆栈
                       v将临时变量推入堆栈。
                        l1- *乘以堆栈长度减去1。
                            \ []重复堆叠时间中括号内所有内容。
                              DO {复制一个项目,将其从堆栈中弹出并输出,然后将一个项目移到堆栈中。

2

Perl,104个字节-10%= 93.6

perl -i-0.3 -e '$_=q{$_="\$_=q{$_};eval";$_=reverse if$^I<0;$n=abs$^I;print+($_ x$n).substr$_,0,y///c*($n-int$n)};eval'

102个字节+ 2个字节-i-10%的不是回文。输入作为参数传递给-i(例如,-0.3上面)。

怎么运行的

该解决方案基于以下方面:

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

其工作原理如下。首先,设置$_为字符串:

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

接下来,调用eval$_默认情况下启用。这print使用一个参数(字符串文字)进行调用:

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

由于此字符串被双引号引起来,因此将对变量进行插值。插值后$_,字符串的值为:

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

打印时,输出:

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

这是程序本身的源代码。

关于这种方法的好处是,您可以将任意代码嵌入要被字符串eval'd'内。


以下是完整解决方案的细分:

perl -i-0.3 -e'
    $_=q{                     # string to be eval'd
        $_="\$_=q{$_};eval";  # append beginning and end of quine so the
                              #  entire thing can be reversed if necessary
        $_=reverse if $^I<0;  # reverse if input < 0
        $n=abs $^I;           # set $n to absolute value of input
        print                 # print
            +($_ x $n)        # $_ repeated $n times
            .                 # concatenated with
            substr $_,        # substring of $_
                   0,         # starting at the beginning
                   y///c      # having length x, where x is length of $_
                   *          # multiplied by
                   ($n-int$n) # fractional part of $n
    };
    eval                      # eval $_
'

0

Mathematica,139-10%= 125.1字节

StringJoin[Table[s = If[#1 > 0, #1 & , StringReverse][ToString[#0, InputForm]], {Abs[Floor[#1]]}], StringTake[s, Floor[Mod[#1, 1]*139]]] & 

注意尾随空格。空格,标准符号等是的结果ToString[#0, InputForm]


0

Haskell,158 * 0.9 = 142.2字节

c i|i<0=reverse|1<2=id;f i=putStr$take(floor$abs i*158)$cycle$c i$s++show s;s="c i|i<0=reverse|1<2=id;f i=putStr$take(floor$abs i*158)$cycle$c i$s++show s;s="

quine函数。

*Main> f (-0.3)
"=s;s wohs++s$i c$elcyc$)851*i sba$roolf(ekat$r

*Main> f 1.1
c i|i<0=reverse|1<2=id;f i=putStr$take(floor$abs i*158)$cycle$c i$s++show s;s="c i|i<0=reverse|1<2=id;f i=putStr$take(floor$abs i*158)$cycle$c i$s++show s;s="c i|i<0=reverse

*Main> f 0
              <-- empty

0

Python 2,193个字节-10%= 173.7

x=input();y=int(x);_='x=input();y=int(x);_=%r;_=(_%%_)[::y/abs(y)];x,y=abs(x),abs(y);_=_*y+_[:int(y*(x-y)*193)];print _';_=(_%_)[::y/abs(y)];x,y=abs(x),abs(y);_=_*y+_[:int(y*(x-y)*193)];print _

出现错误0,但是忽略STDERR,您仍然会得到空输出。


目前,这是最长的解决方案,但请尝试找到一个更短的解决方案,如果可以,请答复。
暴民埃里克(Erik the Outgolfer)
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.