長いクインラインに立ち向かう


28

または:垂直クインを作成します

に触発さ長い列に立ち向かいます。

あなたの仕事は、可能な限り短い線の長さで垂直クインを構築することです。

得点

最短の行長(改行を除く)が勝ち、基準がタイブレーカーとして使用されます。

行の長さは、改行文字を除いてプログラムで最も長い行として決定されます。

例えば:

$_=
Q.
P

行の長さは3で、バイト数は8です。

Q
$
_
P

行の長さは1で、バイトカウントは7です(末尾の改行がないと仮定)。

ルール

クインはコミュニティのクインの定義を満たさなければなりません。

標準的な抜け穴は禁止されています。


これからインスパイアされたチャレンジのルールもここに適用されますか?(「すべての改行は意味のあるものでなければなりません。出力に影響を与えることなく、削除および隣接する行を直接連結できる改行を削除する必要があります。」)
ケビンクルーイッセン

6
@KevinCruijssenいいえ、このチャレンジにもう少し自由度を持たせて、短い行の長さを奨励したかったのです!それは私が他の挑戦で変えたかった一つのことでした!
ドムヘイスティングス

回答:


31

言語、行の長さ0、≈1.01 ×10 805バイト

ソースコードは

10124204951141713202533972929121310016060433092338061822344361345785088607872212687519180665846846689047959498775873817205954910072327976407177053174071436371843670134990737172675632938993247496933911137703773908536875512359091727633452506044935740750830240213878294804481182083555147915724921824921475110508228264569693355158523956426011218344830576542194309867719995259333487662608933990607888012376767799159279952780093033761421596267435996052643805835600325453580090964941176722519904997142820547696122795384058768166716813179490118821654787005844786013890425692181280317909786461426684986082270532414940905922244777135016193088362341771414388821075092853157152933099269703875111747946164773211049512395358715902962437487134522781505709420586981997748912591875626029183292826655753251235587052422561943

後に続くBrainfuckプログラムをエンコードするラインフィード。

>>++++++++>+++>+++>+>+>+>+>+>+>+>+++>+>+>+>+>+>+>+>+>+++>+>+>+>+>+>+>+>+>++++++++>++++>++++++++>++++>+++++++>++>+++>+>+++>++>+++>+++>+>+>+>+>+>+>+>+>++++>++++>+++++++>+>++++>++++++++>++>+++++++>+++>++++++++>++>+++++++>+++>++++++++>++>+++++++>+++>++++++++>++>+++++++>+++>++++++++>++>+++++++>+++++>+>+>+>+>+>+>+>+>+>+>++++++++>++++>+++++++>+++++++>+>+>+++>+>+>+>++++++++>+++>+++++++>+>+++>+>+++>+>+++>+>++++++++>++++>++++++++>++++>++++++++>++++>++++>+>+++>+++>++>+++++++>+++++++>+>+>+>++++++++>+++>+>++++++++>++++>+>+++>++>+++++++>++>+++++++>++++>++++>++++++++>+++>++++++++>+++>+++>+>++++>++++>++>+++++++>+++>+++>++++++++>++++>+>+++>++>+++++++>++++>++++>+++++++>+++>+++>+++>+++>++++++++>++++>++++>+>+++>+>+++>++>+++++++>+++++++
[
    [->+>+<<]
    >>>>[<<[->+<]>>[-<<+>>]>]
    <<[-[->+<]+>]+++
    [[->>+<<]<]<
]
+>+>+>+
[>]+++>++
[
    [<]++++++++++.[-]
    >[-]>[-]>[-]>[-]
    <+[<<++++++++>>->+>-[<]<]
    ++++++++>++++++++>+++++++>>
]

ソースコードは、とほとんど同じである@ jimmy23013の放射線軟化LenguageのQUINE、マイナス.と終了時に、++++++++++.[-]交換.改行の代わりにヌルバイト、ライン1上のデータ部に対応する変更を印刷します。


それは避けられないことでした!しかし、包括的な質問が必要でした。誰もこれを打つことができるのだろうか?
ドムヘイスティングス

主は、この言語が必要だろうと...信じることができない「Hello World」のためのクールの一つだコード-ボーリングがうまく受信されない理由の定義は、ある"about 1.75*10**76 yottabytes in ASCII"
マジックタコ壺


使用して次のことができますゴルフのコードの99%以上を]++++++++ ++.-->
jimmy23013

28

JavaScript、行長1、960 956 928バイト


[
t
,
r
,
u
,
e
,
f
,
a
,
l
,
s
]
=
!
0
+
[
!
1
]
;
[
,
n
,
d
,
,
q
,
i
]
=
t
.
a
+
t
V
=
[
]
[
f
+
i
+
n
+
d
]
;
[
,
,
,
c
,
,
,
o
,
,
_
,
,
,
,
,
y
,
z
]
=
V
+
0
F
=
V
[
E
=
c
+
o
+
n
+
s
+
t
+
r
+
u
+
c
+
t
+
o
+
r
]
P
=
(
1
+
e
+
2
+
3
-
4
+
t
)
[
2
]
f
=
F
(
r
+
e
+
t
+
u
+
r
+
n
+
_
+
a
+
t
+
o
+
(
0
+
{
}
)
[
3
]
)
(
)
(
3
*
4
+
[
]
[
E
]
[
n
+
a
+
(
0
[
E
]
+
0
)
[
9
+
2
]
+
e
]
)
[
1
]
F
(
a
,
a
+
l
+
e
+
r
+
t
+
y
+
a
+
P
+
q
+
P
+
a
+
P
+
q
+
z
)
`
[
t
,
r
,
u
,
e
,
f
,
a
,
l
,
s
]
=
!
0
+
[
!
1
]
;
[
,
n
,
d
,
,
q
,
i
]
=
t
.
a
+
t
V
=
[
]
[
f
+
i
+
n
+
d
]
;
[
,
,
,
c
,
,
,
o
,
,
_
,
,
,
,
,
y
,
z
]
=
V
+
0
F
=
V
[
E
=
c
+
o
+
n
+
s
+
t
+
r
+
u
+
c
+
t
+
o
+
r
]
P
=
(
1
+
e
+
2
+
3
-
4
+
t
)
[
2
]
f
=
F
(
r
+
e
+
t
+
u
+
r
+
n
+
_
+
a
+
t
+
o
+
(
0
+
{
}
)
[
3
]
)
(
)
(
3
*
4
+
[
]
[
E
]
[
n
+
a
+
(
0
[
E
]
+
0
)
[
9
+
2
]
+
e
]
)
[
1
]
F
(
a
,
a
+
l
+
e
+
r
+
t
+
y
+
a
+
P
+
q
+
P
+
a
+
P
+
q
+
z
)
`

偶然にも偶然であるより読みやすいバージョン(余分な改行は削除されました):


[t,r,u,e,f,a,l,s]=!0+[!1];[,n,d,,q,i]=t.a+t
V=[][f+i+n+d];[,,,c,,,o,,_,,,,,y,z]=V+0
F=V[E=c+o+n+s+t+r+u+c+t+o+r]
P=(1+e+2+3-4+t)[2]
f=F(r+e+t+u+r+n+_+a+t+o+(0+{})[3])()(3*4+[][E][n+a+(0[E]+0)[9+2]+e])[1]
F(a,a+l+e+r+t+y+a+P+q+P+a+P+q+z)`
[t,r,u,e,f,a,l,s]=!0+[!1];[,n,d,,q,i]=t.a+t
V=[][f+i+n+d];[,,,c,,,o,,_,,,,,y,z]=V+0
F=V[E=c+o+n+s+t+r+u+c+t+o+r]
P=(1+e+2+3-4+t)[2]
f=F(r+e+t+u+r+n+_+a+t+o+(0+{})[3])()(3*4+[][E][n+a+(0[E]+0)[9+2]+e])[1]
F(a,a+l+e+r+t+y+a+P+q+P+a+P+q+z)`

説明

ふう これは危険な旅になるので、ここに乗って落ち着きます...

JSF ***で簡単に実現できることに気付く前に、長さ1(組み込み(直接、とにかく)、キーワード、さらには矢印関数なし)でこの課題を解決する方法を見つけるのに長い時間を費やしました。マルチバイトトークンを回避しながら、JavaScriptコードを評価します。ただし、JSFソリューションの長さは、数万または数十万ではないにしても、数千バイトになります。ありがたいことに、私たちは単なる()[]+!ASCIIに限らず、すべてのASCIIを自由に使用できます!

私は、JSFの基本的な構成要素である「より多くの機能をアンロックする」ために文字列に組み込むことができるキャラクターをゴルフすることから始めることにしました。文字列を直接使用して文字を取得することはできません。長さ3の行が必要になるため、代わりにJSFからトリックを盗み、シングルバイトトークンで構築できるリテラルからいくつかの文字を取得します。

JSF***   Used here   Value        Chars unlocked
!![]     !0          true         true
![]      !1          false        fals
[][[]]   t.a         undefined    ndi

これらから[].find、Functionオブジェクトであるで始まる外側に拡張できます。文字列にこれを変換するとfunction find() { ...私たちへのアクセスを提供しcoスペース(_)、および括弧(yz)。おそらくもっと重要なのはconstructorFunction関数にアクセスできるようになったということです。これは、聞こえるかもしれませんが、文字列を作成し、それをFunction()に渡し、生成された関数を呼び出すことでコードを実行できます。

おそらく、プログラム自体で使用される全体的な方法について言及する必要があります。2015年の時点で、JavaScriptには「タグ付きテンプレート」と呼ばれるこの非常に便利な機能があり、文字列にエスケープなしの改行を許可するだけでなく、文字列リテラルを使用して関数を直接呼び出すことができます(ある意味でmyFunc`abc`;は、おおよそ同等ですmyFunc(["abc"]))。プログラムの最後に関数呼び出しを配置すると、一般的な構造は次のようになります。

code;func`code;func`

すべてはfuncそれから行う必要があり、出力は、その再びバッククォートに続く引数、引数、および第二バッククォートです。引数がa格納されf、バックティックが格納されていると仮定すると、コードでこれを実現できますalert(a+f+a+f)。しかし、現時点では、私たちは不足して+おり、バックティック自体がありません。+(に保存P)は難しくありません。JSFから別のトリックを盗み、文字列を構築1e23し、数値に変換してから文字列に戻し、を与え"1e+23"ます。

バックティックの取得はもう少し複雑です。最初はを取得しようとしましたString.fromCharCodeが、を見つけることはCほぼ困難でした。幸いなことに、適切な魔法の文字列が見つかった場合、atob取得するのに十分簡単で(Function("return atob")(); bはから生成され0+{}ます[object Object])、任意のASCII文字を与えることができます。短いスクリプトが12Aオプションの1つとして私に与えてくれました。これは便利な場所にあります12Array[].constructor[n+a+m+e];のおかげで、生成が少し短くなりmました0 .constructor+0:にあります"function Number() { ...")。

最後に、すべてを結び付けます。バックティックをvariableに割り当てますfが、ファンクション文字列で直接使用することはできないため、代わりにvariable qを文字に設定し、f代わりに使用します。これにより、最終的な文字列a+l+e+r+t+y+a+P+q+P+a+P+q+z、またはが作成され"alert(a+f+a+f)"ます。次に、これをFunction()に送り、完成したコードを結果に送ります。できれば、1行に1文字以下のJavaScriptクインがあります。


私の頭は今恐ろしいので、私が犯した間違いやこの説明で見逃していることについてお問い合わせください。休憩した後、あなたに戻ります...


いいね!実際にはJSプログラマーではありませんが、JSFuckについて読んだことからその要点を推測できますが、特にそのf=行について説明したいと思います。
Ørjanヨハンセン

1
@ØrjanJohansen申し訳ありませんが、すべての説明を書こうとしていましたが、うまくいかないので、すぐに質問に答えます。これfは、単一のバックティックに設定する複雑な方法です。行自体はと同等f=atob("12Array")[1]です。もう1つのトリックは、q実際にf最初の行の文字に設定されることです。そのため、F(...)行でfは、変数fがその文字に設定されなくなったため、評価された文字列に文字を入れることができます。a+l+e+r+t+y+a+P+q+P+a+P+q+zと等価です"alert(a+f+a+f)"
ETHproductions

素晴らしい、今私はそれを理解しています!あなたは何を言及かもしれない 0+{}し、0[E]得るためにに文字列化bしてm
Ørjanヨハンセン

本当にいいね!私の試みよりもはるかに小さいですがシマーアプローチを使用しました!
ドムヘイスティングス

@DomHastingsあまりにも長い間リンクが機能しない;-)
ETHproductions

15

ハスケル、行の長さ6、400の 343 336バイト

{main=
putStr
$s++(s
>>=(++
":\n")
.show)
++
"[]}";
s='{':
'm':
'a':
'i':
'n':
'=':
'\n':
'p':
'u':
't':
'S':
't':
'r':
'\n':
'$':
's':
'+':
'+':
'(':
's':
'\n':
'>':
'>':
'=':
'(':
'+':
'+':
'\n':
'"':
':':
'\\':
'n':
'"':
')':
'\n':
'.':
's':
'h':
'o':
'w':
')':
'\n':
'+':
'+':
'\n':
'"':
'[':
']':
'}':
'"':
';':
'\n':
's':
'=':
[]}

オンラインでお試しください! 私は周りの方法を知らないputStrので、行の長さは6です。外側の中括弧は、単一の宣言内の改行の後に必要なインデントを取り除くことができます。



12

CJam、行の長さ1、16の 13バイト

"
_
p
"

_
p

オンラインでお試しください!

標準クインに{"_~"}_~改行を挿入することは、標準クインをさらに短く"_p"␊_pしても正しいことをするという小さな奇跡です。(ありがとう、マーティン!)末尾の改行が必要です。

説明(•は改行として)

"•_•p•"        Push that string.
       ••      Do nothing.
         _     Duplicate the string.
          •    Do nothing.
           p   Pop it and print it with quotes and a newline: "•_•p•"•
            •  Do nothing.

終了時に、スタックに残っているものが印刷され(•_•p•)、合計出力が生成されます"•_•p•"••_•p•


2
私が言っているすべてはある...•_•
corsiKa

6

Haskell + CPP、行の長さ2、705 237バイト

m\
a\
i\
n\
=\
p\
u\
t\
S\
t\
r\
$\
(\
:\
"\
\\
\\
\\
n\
"\
)\
=\
<\
<\
s\
+\
+\
s\
h\
o\
w\
 \
s\
;\
s\
=\
"\
m\
a\
i\
n\
=\
p\
u\
t\
S\
t\
r\
$\
(\
:\
\\
"\
\\
\\
\\
\\
\\
\\
n\
\\
"\
)\
=\
<\
<\
s\
+\
+\
s\
h\
o\
w\
 \
s\
;\
s\
=\
"\

オンラインでお試しください!-CPPCプリプロセッサを有効にするフラグを使用すると、行の最後にバックスラッシュを使用して次の行に継続できます。

実際のコードはmain=putStr$(:"\\\n")=<<s++show s;s="<data>"です。

編集:カジュアルは-468のおかげバイトØrjanヨハンセンを


1
それをに変更するための多くのエスケープを節約しmain=putStr$(:"\\\n")=<<s++show s;s="<data>"ます。オンラインでお試しください!
Ørjanヨハンセン

5

さび、行の長さ:5、バイト: 301 299

オンラインで試す

見た目にも関わらず、これは難解なプログラミング言語ではなく、フォーマットラインノイズがたくさんあります。

使用できるように、縦の長さ5が選択されましたprint。C関数がexternキーワードを使用し、stdout6バイトの長さ、write5バイトの長さ、no_main7バイトの長さを宣言している(メインは通常関数です;))

fn
main
(){
let
t=(
r#"fn
main
(){
let
t=("#
,r#")
;
print
!(
r#"{}
r#"{
}"{}
,r#"{
}"{},
r#"{
}"{}
{}{}{
}{
}""#,
r#"
,t.0,
t.0,
'#',
t.1,
'#',
t.2,
'#',
t.1,
'#',
t.2,
'}'
)"#
)
;
print
!(
r#"{}
r#"{
}"{}
,r#"{
}"{},
r#"{
}"{}
{}{}{
}{
}"#
,t.0,
t.0,
'#',
t.1,
'#',
t.2,
'#',
t.1,
'#',
t.2,
'}'
)}

横長ではありませんか?
アナトリグ

@anatolyg修正
Konrad Borowski

構文を強調せずに生の文字列をネストすると、これを解釈できなくなります。私は考えていないcargo fmt...でも、ここに役立つだろう
CAD97

@ CAD97構文の強調表示が必要な場合、play.rust-lang.orgはこれを正しく強調表示するため、「Try it online」リンクにTIOの代わりに使用します。
コンラッド




2

、行の長さ:10、49バイト

s: [prin [
    "s:"
    mold s
    "do s"
]] do s

オンラインでお試しください!

これは実際、Rebolの馬です

説明:Red / Rebol moldは、4つのスペースをオフセットするコーディングスタイルに従います。

s: [prin [     ; s is a block; print the following: 
    "s:"       ; literal "s:"
    mold s     ; the representation of the block itself - all between []
    "do s"     ; literal "do s"
]] do s        ; evaluate the block

2

RProgN、3バイト、行の長さ1

0
0

オンラインでお試しください!

デニスの回答のコピーはこちら(彼にも賛成票を投じてください)

これは、最初の0が2番目の0をエンコードし、その逆も同様であるため、適切なクインの現在の定義に準拠しています。


3
より良い定義についてコンセンサスを得ていないのは非常に残念です:-/
ETHproductions

@ETHproductionsさて、この定義にはいくつかのサポートがあります
マーティンエンダー

2

RProgN 2、L = 1、B = 15バイト

«
Ø
.
`
-
S
`
.

これはプログラムと同等です:

«Ø.`
-S`
.

壊す

«最初に暗黙的にプログラムの残りを表す関数をスタックにプッシュし、次に実行を続けます。Ø.関数に文字列化する空の文字列を追加します。改行がないため、これは常に同等のプログラムのように文字列化されます。`\n-文字列からすべての改行を削除します«Ø.`=S`.S次に、それを単一文字のスタックに変換し、`\n.改行でスタックを結合して、予想されるプログラムを返します。

オンラインでお試しください!


2

アンダーロード、行の長さ1、20バイト

(
:
a
S
S
)
:
a
S
S

オンラインでお試しください!

これは、改行が追加された標準のアンダーロードクインです。未知のコマンド文字を無視するTIOのような実装が必要です。

の部分()はスタックに置かれた文字列リテラルであり、:それを複製し、a一番上のスタックエントリを括弧で囲んでS出力します。



1

Javascript(ES6 REPL)、フルプログラム、行長:3、バイト数:31

(
f=
_=>
`(
f=
${f
}
)
()`
)
()

これは、自己完結型の完全なプログラムに対する@ kamoroso94の回答の移植版です。

誰かが行の長さに追加することなくいくつかのバイトを取り除く方法を見つけた場合、コメントしてください:)


REPLで実行しない限り、実際には何も出力されないことに注意してください。私はそれをJavaScript(ES6 REPL)と呼びます
-ETHproductions

ああ撮影、クロムのコンソールに使用への道...
ブライアンH.

1

ピップ、ライン長1、35バイト


V
Y
"
[
`
V
Y
`
y
]
.
C
:
3
.
4
"

オンラインでお試しください!

最短の既知のPipクインに基づきV Y"`V Y`.RPy"ます。行の長さ1に押しつぶす際の主な難点はRP、2行に分割できないことです。しかし、この場合、すべてRP(repr)が行うのは、文字列を二重引用符で囲むことです。これは直接行うことができます。

水平バージョンに基づく説明は次のとおりです。

V Y"[`V Y`y].C:3. 4"
  Y"               "  Yank this string into the variable y
V                     and eval it
                      The code that is eval'd:
    [      ]           Build a list containing:
     `V Y`              this Pattern object (used for regex, but here useful as a
                          string-like object that doesn't need double quotes)
          y             y, the whole string
               3. 4    Concatenate 3 and 4 to make 34 (since the 2-digit number won't work
                         in the vertical version)
             C:        Convert to ASCII character (: forces the precedence lower than .)
            .          Concatenate the " to the end of each list element
                      The resulting list is printed, concatenated together, with a
                        trailing newline

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.