複数回クイン


16

あなたの仕事は、以下を行うプログラムの作成です。

  1. あなたは数を取る必要があります。(正、負、小数は入力可能です)
  2. 負の場合は、クインを逆にします。そしてその数を否定する(正になる)
  3. 次に、<入力数の整数部分>回繰り返し、ソースプログラムから最初に<floor(入力数の小数部分*長さ)>を出力します。整数の場合、小数部はゼロです。

プログラムが回文ではない場合、-10%のボーナス。

プログラムが「ABCDEFG」の場合、

1。

5
ABCDEFGABCDEFGABCDEFGABCDEFGABCDEFG

説明

ABCDEFGを5回

2。

-2
GFEDCBAGFEDCBA

説明

GFEDCBA(反転ABCDEFG)2回

3。

7.5
ABCDEFGABCDEFGABCDEFGABCDEFGABCDEFGABCDEFGABCDEFGABCDEFGABC

説明

ABCDEFGを7回、続いてABC(ABCDEFGの最初の3(floor(0.5 * 7)= floor(3.5)= 3)文字)

4。

-0.3
GF

説明

GFEDCBA(反転ABCDEFG)0回、続いてGF(GFEDCBA(reversed ABCDEFG)の最初の2(floor(0.3 * 7)= floor(2.1)= 2)文字)

5。

0
<empty>

説明:

<空>は、プログラムが出力されないことを意味します。空の文字列として定義されるのは、ABCDEFGゼロ回です。


指示を明確にしてください。
LegionMammal978


@ LegionMammal978私は実際に物事を表現するのが苦手ですが、それがより明確になることを願っています。
アカンカ

2
mbomb007 @私はあなたが、文字列自身とハンドルを解析することができます推測する-.、手動で(正の整数として分数を表します)。または、次の課題に注意を向けることができます。;)(すべての言語がすべてのチャレンジに参加できるわけではありませんが、チャレンジが意図的に任意の個々の言語を除外しない限り、それはまったく問題ありません。オーディオ/画像処理またはファイルシステムのチャレンジをすべて考えてください。)
Martinエンダー

1
これは、プログラムに10%のボーナスを与えるために、より論理的に感じているだろうしている回文
Bassdrop Cumberwubwubwub

回答:


8

CJam、28 26バイト* 0.9 = 23.4

2バイトを節約してくれたSp3000に感謝します。

{`"_~"+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に感謝します!

わあ 私の物理の先生は、私がこれを手伝うパワー機能を持っていたことを思い出した。図を移動します。

'r(; Vd3 * V2 ^ 12 / ^ DvV / 1 +(rvl1-* \ [DO {]
'文字列として記録を開始-これはすべてを取得し、文字列としてスタックにプッシュします。
 rスタックの順序を逆にします。
  (;一番上の項目がゼロの場合、プログラムを終了します。
    V入力を最終的なグローバル変数として取得します。
     d3 *文字 'をスタックにプッシュします。
        V2 ^ 12 / ^入力値の絶対値を取得します。
               Dv一時変数に複製して保存します。
                 Vグローバル変数をスタックにプッシュします。
                  /上の2つの項目を分割します-これは、入力の極性に応じて-1または1になります。
                   1+(-1の場合、次の命令を実行します。そうでない場合、実行しません。
                      rスタックを逆にします
                       v一時変数をスタックにプッシュします。
                        l1- *スタックの長さから1を引いた値を掛けます。
                            \ []括弧内のすべてをスタック時間の最上部に繰り返します。
                              DO {アイテムを複製し、スタックからポップして出力してから、スタック内の1つのアイテムを移動します。

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、1つの引数、文字列リテラルで呼び出します:

"\$_=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="

クイン関数。

*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を無視すると、空の出力が得られます。


現時点ではこれが最も長い解決策ですが、短い解決策を見つけて、可能であれば返信してください。
エリックアウトゴルファー16
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.