Uzun quine çizgilere karşı durun


28

veya: Dikey bir sineği oluşturun

Esinlenerek Uzun çizgilere karşı durun .

Göreviniz, mümkün olduğunca kısa bir çizgi uzunluğuna sahip dikey bir sine oluşturmaktır.

puanlama

En kısa hat uzunluğu (yeni hatlar hariç), kravat kırıcı olarak kriterleri ile kazanır .

Satır uzunluğu, programınızdaki satır sonu karakteri hariç en uzun satır olarak belirlenir.

Örneğin:

$_=
Q.
P

3 satır uzunluğuna ve 8 bayt sayısına sahiptir.

Q
$
_
P

1 satır uzunluğuna ve 7 bayt sayısına sahiptir (izleyen satır sayılmaz).

kurallar

Quines, topluluğun tanımını yerine getirmelidir .

Standart boşluklar yasaktır.


Bundan ilham alan mücadelenin kuralı burada da geçerli midir? (" Tüm satır sonları anlamlı olmalıdır. Çıktıyı etkilemeden doğrudan kaldırılabilen ve bitişik satırların birleştirilebildiği satır sonları kaldırılmalıdır. ")
Kevin Cruijssen

6
@KevinCruijssen Hayır, bu mücadelenin daha kısa çizgi uzunluklarını teşvik etmek için biraz daha özgür olmasını istedim! Diğer mücadelede değiştirmek istediğim tek şey buydu!
Dom Hastings

Yanıtlar:


31

Uzunluk , çizgi uzunluğu 0, ≈ 1,01 × 10 805 bayt

Kaynak kodu oluşur

10124204951141713202533972929121310016060433092338061822344361345785088607872212687519180665846846689047959498775873817205954910072327976407177053174071436371843670134990737172675632938993247496933911137703773908536875512359091727633452506044935740750830240213878294804481182083555147915724921824921475110508228264569693355158523956426011218344830576542194309867719995259333487662608933990607888012376767799159279952780093033761421596267435996052643805835600325453580090964941176722519904997142820547696122795384058768166716813179490118821654787005844786013890425692181280317909786461426684986082270532414940905922244777135016193088362341771414388821075092853157152933099269703875111747946164773211049512395358715902962437487134522781505709420586981997748912591875626029183292826655753251235587052422561943

Aşağıdaki beyin fırtınası programını kodlayan satır beslemeleri.

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

Kaynak kodu çoğunlukla aynıdır jimmy23013 radyasyon yumuşatılmış oranlarda konuşma Quine'ın @ , eksi .ile sonunda, ++++++++++.[-]değiştirilmesi .linefeeds yerine boş bayt ve hat 1 veri bölümüne karşılık gelen bir değişiklik baskı.


Kaçınılmaz olduğunu biliyordum! Kapsayıcı bir soru olsa istedim. Acaba kimse bunu yenebilir mi ...
Dom Hastings

Tanrım, bu dil neden kod atmanın iyi karşılanmadığının tanımı, kesinlikle havalı bir dil ... "Merhaba Dünya" nın gerektirdiğine inanamıyorum"about 1.75*10**76 yottabytes in ASCII"
Magic Octopus Urn


Kodun% 99'undan fazlasını kullanarak golf ]++++++++ ++.-->
oynayabilirsiniz

28

JavaScript, satır uzunluğu 1, 960 956 928 bayt


[
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
)
`

Aynı zamanda bir kuyruk parçası olan daha okunabilir bir versiyon (yabancı yeni satırlar kaldırıldı):


[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)`

açıklama

Whew. Burada gezintiye çıkın, çünkü bu hain bir yolculuk olacak ...

Ben uzunluğu 1-hayır (doğrudan, her neyse) Ankastre, anahtar kelimeleri yazarak bu soruyu çözün ve hatta ok anlamaya çalışıyorum uzun zaman geçirdiği onunla kolayca mümkün olduğunu anlayarak işlevleri daha önce JSF *** , hangi kutu Çok baytlık simgelerden kaçınırken herhangi bir JavaScript kodunu değerlendirin. Ancak bir JSF çözümü, onlarca ya da yüzbinlerce olmasa da kolayca binlerce byte uzunluğunda olacaktı. Neyse ki, sadece sınırlı değiliz; ASCII'nin ()[]+!tümü elimizde!

Konuşmak için daha fazla özelliğin kilidini açmak için dizgilere yerleştirilebilecek karakterler olan JSF'nin temel yapı taşlarına golf oynamaya başladım. Dizeleri karakterleri elde etmek için doğrudan kullanamayız, çünkü bu, 3 uzunluğundaki satırları gerektirir. Bunun yerine, JSF'den bir numara çaldık, tek baytlık simgelerle oluşturulabilecek hazır bilgi öğelerinden birkaç karakter edindik:

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

Bunlardan [].find, bir Function nesnesi olan başlayarak dışa doğru genişleyebiliriz . Bir dizeye bu dönüştürme function find() { ...bize erişim sağlar c, ouzay ( _) ve parantez ( yve z). Belki daha da önemlisi, artık onun erişebilir constructor, Functionfonksiyonun-bize, bir dize inşa etmeye geçirilerek kodu çalıştırmak olanağı verir gelebilir gibi inceptional, Function()oluşturulan işlevi çağırarak sonra, vb.

Muhtemelen programın kendisi tarafından kullanılan genel yöntemden bahsetmeliyim. JavaScript, 2015'ten itibaren " etiketli şablonlar " olarak adlandırılan ve dizgelerde yalnızca yeni olmayan satırsonlarına izin vermekle kalmıyor, aynı zamanda doğrudan değişmez bir dizgeyi içeren bir işlevi çağırmamızı sağlıyor (bir şekilde myFunc`abc`;kabaca eşittir myFunc(["abc"])). İşlev çağrısını programdaki son şey olarak koyarsak, genel yapı şöyle görünecektir:

code;func`code;func`

Tüm funcyapması gereken, argümanını, ardından bir backtick'i, ardından tekrar argümanını ve ikinci bir backtick'i çıktılamaktır. Argüman içinde ave saklı bir backtick olduğunu varsayarsak f, bunu kodla başarabiliriz alert(a+f+a+f). Ancak, şu anda +eksikiz ve geri tepme kendisi. +(saklanır P) zor değildir; JSF'den başka bir numara çaldık, dizgeyi oluşturduktan 1e23sonra sayıya dönüştükten sonra dizgiye geri döndük "1e+23".

Bir backtick almak biraz daha karmaşık. İlk başta, elde etmeye çalıştım String.fromCharCode, ancak bulmanın Cneredeyse zor olduğu ortaya çıktı. Neyse ki, atobelde etmek yeterince kolaydır ( Function("return atob")(); belde edilen 0+{}, veren [object Object]) ve uygun bir sihirli dize bulunursa, herhangi bir ASCII char verebilir. Kısa bir senaryo bana verdi 12Arahatlıkla bulunabilir seçeneklerden bir şekilde 12Array(bir oluşturmak için daha kısa ısırdı sayesinde [].constructor[n+a+m+e]; mbulunur 0 .constructor+0: "function Number() { ...").

Sonunda her şeyi birbirine bağlıyoruz. Backtick'i değişkene atarız f, ancak onu doğrudan işlev dizesinde kullanamadığımız için, bunun yerine değişkeni qharfe ayarlarız fve onu kullanırız. Bu bizim son dizgimizi yapar a+l+e+r+t+y+a+P+q+P+a+P+q+z, ya da "alert(a+f+a+f)". Daha sonra bunu Function()besliyoruz, bitmiş kodumuzu sonuca besliyoruz ve işte, satır başına birden fazla char olmayan bir JavaScript quine sahibiz!


Şu an kafam çok kötü geliyor, bu yüzden lütfen yaptığım hataları veya bu açıklamada kaçırdığım şeyleri araştırın ve biraz dinlendikten sonra size geri döneceğim ...


Güzel! Her ne kadar bir JS programcısı olmasa da, bunun asıl amacını JSFuck hakkında okuduklarımdan tahmin edebilirim, ancak özellikle bu f=satır hakkında bir açıklama istiyorum .
Ørjan Johansen

1
@ ØrjanJohansen Üzgünüm, her şey için bir açıklama yazmaya çalışıyorum, ama çok iyi gitmiyor, bu yüzden sorunuzu hızlıca cevaplayacağım: ftek bir geri tepme ayarlamak için kıvrımlı bir yol . Satırın kendisi eşittir f=atob("12Array")[1]. Diğer bir püf nokta qaslında filk satırdaki harflere ayarlanmış olmasıdır , böylece F(...)satırda, mektubu fdeğerlendirilen dizeye koymak için onu kullanabilirim , çünkü değişken fartık o harfe ayarlanmamıştır. a+l+e+r+t+y+a+P+q+P+a+P+q+zEşdeğerdir "alert(a+f+a+f)".
ETHProductions

Harika, şimdi anlıyorum! Sen ne söz olabilir 0+{}ve 0[E]almak için için stringify bve m.
Ørjan Johansen

Gerçekten güzel! Benim girişimimden çok daha küçük , her ne kadar basit bir yaklaşım kullanmamıza rağmen!
Dom Hastings

@DomHastings Bağlantı çok uzun zamandır çalışmaz ;-)
ETHproductions

15

Haskell , satır uzunluğu 6, 400 343 336 bayt

{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':
'=':
[]}

Çevrimiçi deneyin! Etrafta bir yolun farkında değilim putStr, bu yüzden 6 satır uzunluğu. Dış kaşlı ayraçlar, tek bir bildirimde yeni bir satırdan sonra diğer yönden istenen girintiden kurtulmaya izin verir.



12

CJam , satır uzunluğu 1, 16 13 bayt

"
_
p
"

_
p

Çevrimiçi deneyin!

Standart{"_~"}_~ satırlara yeni satırlar eklemek bile küçük bir mucize "_p"␊_p, doğru olanı yapar. (Teşekkürler, Martin!) Sondaki yeni hat gereklidir.

Açıklama (newline olarak • ile)

"•_•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.

Sonlandırıldığında, yığında kalanlar yazdırılır ( •_•p•) ve toplam çıktı elde edilir "•_•p•"••_•p•.


2
Söylemem gereken tek şey ... • _ •
corsiKa

6

Haskell + CPP, satır uzunluğu 2, 705 237 bayt

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

Çevrimiçi deneyin! -CPPC ön işlemcisini etkinleştiren bayrağı kullanmak, bir sonraki satırda devam etmek için satırın sonunda ters eğik çizgi kullanmamızı sağlar.

Gerçek bir koddur main=putStr$(:"\\\n")=<<s++show s;s="<data>".

Düzenleme: Ørjan Johansen sayesinde rahat bir -468 bayt !


1
Bunu değiştirmek için kaçan çok tasarruf sağlar main=putStr$(:"\\\n")=<<s++show s;s="<data>". Çevrimiçi deneyin!
Ørjan Johansen

5

Pas, çizgi uzunluğu: 5, bayt: 301 299

Çevrimiçi deneyin

Görünüşüne rağmen, bu ezoterik bir programlama dili değil, sadece çok fazla format çizgisi gürültüsü var.

Dikey uzunluğu 5 kullanmak mümkün seçildi print. Daha kısa dikey uzunluğa sahip, C işlevlerinin externanahtar sözcüğü kullandığını stdout, 6 bayt uzunluğunu, write5 bayt uzunluğunu, no_main7 bayt uzunluğunu (ana genellikle bir fonksiyondur;)) bildirmenin bir yolunun olduğunu sanmıyorum .

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,
'}'
)}

Yatay uzunluk değil mi?
anatolyg

@anatolyg düzeltildi
Konrad Borowski

Sözdizimi vurgulama olmadan ham dize iç içe geçmesi, yorumlamanın imkansız olmasını sağlar. Sanmıyorum cargo fmt... Hatta burada yardımcı olacağını
CAD97

@ CAD97 İstediğiniz şey sözdizimi vurgulama ise, play.rust-lang.org bunu doğru şekilde vurguluyor, bu yüzden "Çevrimiçi deneyin" bağlantısı için TIO yerine kullandım.
Konrad Borowski




2

Kırmızı , çizgi uzunluğu: 10, 49 bayt

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

Çevrimiçi deneyin!

Bu aslında bir Rebol quine

Açıklama: Red / Rebol's mold, 4 boşluk koyma kodlama stilini takip ediyor.

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

RProgN2 , L = 1, B = 15 bayt

«
Ø
.
`
-
S
`
.

Bu programa eşittir:

«Ø.`
-S`
.

Yıkmak

«ilk önce programın geri kalanını örtülü olarak temsil eden bir işlevi iterek iterek yürütmeye devam eder. Ø.işleve, onu dizeleyen boş bir dize ekler. Bu, her zaman eş anlamlı program gibi kısıtlanacaktır, çünkü yeni satırlar çalışmaz. `\n-Şimdiki gibi, tüm yeni satırları dizeden kaldırır «Ø.`=S`.. Sdaha sonra tek karakterli bir yığına dönüştürür `\n.ve beklenen programı döndürerek yığına yeni satırlarla birleştirir.

Çevrimiçi deneyin!


2

Düşük yük , satır uzunluğu 1, 20 bayt

(
:
a
S
S
)
:
a
S
S

Çevrimiçi deneyin!

Bu sadece eklenen yeni satırlarla birlikte standart Underload quine'dir. Bilinmeyen komut karakterlerini görmezden gelen TIO gibi bir uygulama gerektirir.

İçindeki kısım (), yığına yerleştirilmiş, :onu kopyalayan a, üst yığın girişini parantez içine alan ve Sbasılan bir dizedir .


2

Perl 5 , 259 bayt


$
_
=
p
.
r
.
i
.
n
.
t
.
q
{

'
$
_
=
p
.
r
.
i
.
n
.
t
.
q
{
'
,
&
{
I
.
"
X
0
y
h
~
"
^
"
E
O
0

y
"
.
x
}
(
$
_
,
6
,
-
1
)
,
'
}
;
&
{
I
.
"
X
0
o
k
h
~
"
.
(
Y
|
p
)
^
"
E
O
0
|
f
s
o
"
}
'
}
;
&
{
I
.
"
X
0
o
k
h
~
"
.
(
Y
|
p
)
^
"
E
O
0
|
f
s
o
"
}

Çevrimiçi deneyin!

Doğrulama .


1

Javascript (ES6 REPL), tam program, satır uzunluğu: 3, bayt sayısı: 31

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

Bu, @ kamoroso94'ün bağımsız bir tam programa verdiği cevabın bir limanıdır.

Herhangi biri satır uzunluğuna daha fazla eklemeden bazı baytları atmak için bir yol bulursa yorum yapmaktan çekinmeyin :)


Bir REPL'de çalıştırmazsanız, bunun hala hiçbir şey çıkmadığını unutmayın. Ben buna JavaScript derdim (ES6 REPL)
ETHproductions

ateş, krom konsola
Brian H.

1

Pip , satır uzunluğu 1, 35 bayt


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

Çevrimiçi deneyin!

Bilinen en kısa Pip quine göre V Y"`V Y`.RPy". Satır uzunluğu 1'i ezmek için ana zorluk, RPiki satıra bölünemez. Ancak bu durumda, RP(repr) 'ın yaptığı, dizeyi doğrudan yapabileceğimiz çift tırnak işaretleri içine almaktır.

İşte yatay sürüme dayalı bir açıklama:

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.