Hãy đứng lên chống lại đường dài


28

hoặc: Xây dựng một quine dọc

Lấy cảm hứng từ Hãy đứng trên hàng dài .

Nhiệm vụ của bạn là xây dựng một quine dọc với chiều dài dòng càng ngắn càng tốt.

Chấm điểm

Độ dài dòng ngắn nhất (không bao gồm dòng mới) sẽ giành chiến thắng, với tiêu chí bằng như một bộ ngắt kết nối.

Độ dài dòng được xác định là dòng dài nhất trong chương trình của bạn, ngoại trừ ký tự ngắt dòng.

Ví dụ:

$_=
Q.
P

có độ dài dòng là 3 và số byte là 8, trong khi:

Q
$
_
P

Có độ dài dòng là 1 và số byte là 7 (giả sử không có dòng mới nào).

Quy tắc

Các quines phải đáp ứng định nghĩa của cộng đồng về một quine .

Sơ hở tiêu chuẩn bị cấm.


Liệu quy tắc của thách thức này được lấy cảm hứng từ việc áp dụng ở đây là tốt? (" Tất cả các ngắt dòng phải có ý nghĩa. Các ngắt dòng có thể được loại bỏ và các dòng liền kề được nối trực tiếp mà không ảnh hưởng đến đầu ra, phải được loại bỏ. ")
Kevin Cruijssen 19/2/18

6
@KevinCruijssen Không, tôi muốn thử thách này có thêm một chút tự do để khuyến khích độ dài dòng ngắn hơn! Đó là điều tôi muốn thay đổi trong thử thách khác!
Dom Hastings

Câu trả lời:


31

Lenguage , đường dài 0, ≈ 1,01 × 10 805 byte

Mã nguồn bao gồm

10124204951141713202533972929121310016060433092338061822344361345785088607872212687519180665846846689047959498775873817205954910072327976407177053174071436371843670134990737172675632938993247496933911137703773908536875512359091727633452506044935740750830240213878294804481182083555147915724921824921475110508228264569693355158523956426011218344830576542194309867719995259333487662608933990607888012376767799159279952780093033761421596267435996052643805835600325453580090964941176722519904997142820547696122795384058768166716813179490118821654787005844786013890425692181280317909786461426684986082270532414940905922244777135016193088362341771414388821075092853157152933099269703875111747946164773211049512395358715902962437487134522781505709420586981997748912591875626029183292826655753251235587052422561943

linefeed, mã hóa chương trình brainfuck theo sau.

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

Mã nguồn hầu như giống hệt với quine Lenguage được làm mềm bằng bức xạ của @ jimmy23013 , trừ phần .cuối, bằng cách ++++++++++.[-]thay thế .để in các nguồn cấp dữ liệu thay vì byte rỗng và các thay đổi tương ứng cho phần dữ liệu trên dòng 1.


Tôi biết đó là điều không thể tránh khỏi! Tôi đã muốn một câu hỏi bao gồm mặc dù. Tôi tự hỏi liệu có ai có thể đánh bại điều này không ...
Dom Hastings

Chúa ơi, ngôn ngữ này là định nghĩa về lý do tại sao trò chơi bowling không được đón nhận, chắc chắn đó là một điều tuyệt vời ... Không thể tin "Hello World" sẽ yêu cầu"about 1.75*10**76 yottabytes in ASCII"
Magic Octopus Urn


Bạn có thể chơi gôn hơn 99% mã bằng cách sử dụng]++++++++ ++.-->
jimmy23013

28

JavaScript, độ dài dòng 1, 960 956 928 byte


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

Phiên bản dễ đọc hơn cũng là một quine (loại bỏ dòng mới không liên quan):


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

Giải trình

Phù Giải quyết một chuyến đi đến đây, bởi vì đây sẽ là một hành trình nguy hiểm ...

Tôi đã mất một thời gian dài để cố gắng tìm ra cách giải quyết thử thách này với độ dài 1 không có tích hợp (trực tiếp, dù sao), từ khóa hoặc thậm chí là các hàm mũi tên trước khi nhận ra rằng có thể dễ dàng với JSF *** , có thể đánh giá bất kỳ mã JavaScript nào trong khi tránh mọi mã thông báo nhiều byte. Nhưng một giải pháp JSF sẽ dễ dàng dài hàng nghìn byte, nếu không nói là hàng chục hoặc hàng trăm nghìn. Rất may, chúng tôi không giới hạn ở chỉ ()[]+!chúng tôi có tất cả ASCII theo ý của chúng tôi!

Tôi đã quyết định bắt đầu bằng cách chơi golf các khối xây dựng thiết yếu của JSF, các nhân vật có thể được xây dựng thành chuỗi để "mở khóa nhiều tính năng hơn", có thể nói như vậy. Chúng tôi không thể sử dụng các chuỗi trực tiếp để nhận các ký tự, vì điều đó sẽ yêu cầu các dòng có độ dài 3. Vì vậy, thay vào đó, chúng tôi đánh cắp một mẹo từ JSF, nhận một vài ký tự từ các chữ có thể được xây dựng bằng các thẻ đơn byte:

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

Từ những thứ này, chúng ta có thể mở rộng ra bên ngoài, bắt đầu với [].find, đó là một đối tượng Function. Chuyển đổi này thành một chuỗi function find() { ...cho chúng ta truy cập vào c, okhông gian ( _), và dấu ngoặc ( yz). Có lẽ quan trọng hơn, giờ đây chúng ta có quyền truy cập vào hàm của nó constructor, Functionchức năng mà nó có thể phát ra, cho chúng ta khả năng thực thi mã bằng cách xây dựng một chuỗi, chuyển nó đến Function()và sau đó gọi hàm được tạo.

Tôi có lẽ nên đề cập đến phương pháp tổng thể được sử dụng bởi chính chương trình. Kể từ năm 2015, JavaScript có tính năng thực sự thú vị này được gọi là "các mẫu được gắn thẻ ", nó không chỉ cho phép các dòng mới không bị bỏ sót trong chuỗi, mà còn cho phép chúng ta gọi một hàm với một chuỗi bằng chữ trực tiếp (theo cách nào đó, myFunc`abc`;tương đương với myFunc(["abc"])). Nếu chúng ta đặt lệnh gọi là điều cuối cùng trong chương trình, cấu trúc chung sẽ trông như thế này:

code;func`code;func`

Tất cả funcphải làm sau đó là đưa ra đối số của nó, theo sau là một backtick, sau đó lại là đối số của nó và một backtick thứ hai. Giả sử chúng ta có đối số trong avà một backtick được lưu trữ f, chúng ta có thể thực hiện điều này với mã alert(a+f+a+f). Tuy nhiên, tại thời điểm này, chúng tôi đang mất tích +và backtick chính nó. +(được lưu trữ trong P) không khó; chúng tôi đánh cắp một thủ thuật khác từ JSF, xây dựng chuỗi 1e23, chuyển đổi thành số, sau đó quay lại chuỗi, đưa ra "1e+23".

Bắt backtick phức tạp hơn một chút. Lúc đầu, tôi đã cố gắng để có được String.fromCharCode, nhưng việc tìm ra Chóa ra gần như khó khăn. May mắn thay, atobđủ dễ dàng để có được ( Function("return atob")(); bđược tạo từ 0+{}, cung cấp [object Object]) và có thể cung cấp bất kỳ char ASCII nào, nếu tìm thấy một chuỗi ma thuật thích hợp. Một kịch bản ngắn đã cho tôi 12Alà một trong những lựa chọn, mà thuận tiện có thể được tìm thấy trong 12Array(ngắn hơn một chút để tạo ra, nhờ [].constructor[n+a+m+e]; mđược tìm thấy trong 0 .constructor+0: "function Number() { ...").

Cuối cùng, chúng tôi gắn bó mọi thứ với nhau. Chúng tôi gán backtick cho biến f, nhưng vì chúng tôi không thể sử dụng nó trực tiếp trong chuỗi chức năng, thay vào đó, chúng tôi đặt biến qcho chữ cái fvà thay vào đó sử dụng biến đó. Điều này làm cho chuỗi cuối cùng của chúng tôi a+l+e+r+t+y+a+P+q+P+a+P+q+z, hoặc "alert(a+f+a+f)". Sau đó, chúng tôi cung cấp mã này cho Function(), cung cấp mã hoàn thành của chúng tôi cho kết quả và voila, chúng tôi có một mã JavaScript với không quá một char trên mỗi dòng!


Hiện tại đầu tôi cảm thấy rất tệ, vì vậy hãy hỏi về bất kỳ sai lầm nào tôi đã mắc phải hoặc những điều tôi đã bỏ qua trong lời giải thích này và tôi sẽ quay lại với bạn sau khi tôi nghỉ ngơi ...


Tốt đẹp! Mặc dù thực sự không phải là một lập trình viên JS, tôi có thể đoán ý chính của điều này từ những gì tôi đã đọc về JSFuck, nhưng tôi muốn một lời giải thích đặc biệt về f=dòng đó .
Ørjan Johansen

1
@ RjanJohansen Xin lỗi, tôi đã cố gắng viết một lời giải thích cho toàn bộ sự việc, nhưng nó sẽ không được tốt lắm nên tôi sẽ trả lời nhanh câu hỏi của bạn: đó là một cách dễ hiểu để đặt fthành một backtick duy nhất. Các dòng chính nó là tương đương với f=atob("12Array")[1]. Thủ thuật khác qlà thực sự được đặt thành chữ cái ftrong dòng đầu tiên, để trong F(...)dòng, tôi có thể sử dụng nó để đặt chữ cái ftrong chuỗi được đánh giá, vì biến fkhông còn được đặt thành chữ cái đó. Điều a+l+e+r+t+y+a+P+q+P+a+P+q+znày tương đương với "alert(a+f+a+f)".
Sản phẩm ETH

Tuyệt, giờ tôi đã hiểu rồi! Bạn có thể đề cập đến những gì 0+{}0[E]xâu chuỗi để có được bm.
Ørjan Johansen

Thực sự tốt đẹp! Nhỏ hơn nhiều so với nỗ lực của tôi , mặc dù chúng tôi đã sử dụng một phương pháp simar!
Dom Hastings

@DomHastings Rất lâu, liên kết thậm chí không hoạt động ;-)
Sản phẩm ETH

15

Haskell , độ dài dòng 6, 400 343 336 byte

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

Hãy thử trực tuyến! Tôi không biết cách nào putStr, do đó, độ dài của dòng là 6. Các dấu ngoặc nhọn bên ngoài cho phép loại bỏ sự chú ý theo yêu cầu khác sau một dòng mới trong một khai báo.



12

CJam , độ dài dòng 1, 16 13 byte

"
_
p
"

_
p

Hãy thử trực tuyến!

Đó là một phép màu nhỏ rằng việc chèn các dòng mới vào quine tiêu chuẩn{"_~"}_~ thậm chí cả quine tiêu chuẩn ngắn hơn "_p"␊_pcũng làm điều đúng đắn. (Cảm ơn, Martin!) Dòng mới này là cần thiết.

Giải thích (với • là dòng mới)

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

Khi chấm dứt, những gì còn lại trên ngăn xếp được in ( •_•p•), mang lại tổng sản lượng "•_•p•"••_•p•.


2
Tất cả những gì tôi phải nói là ... • _ •
corsiKa

6

Haskell + CPP, độ dài dòng 2, 705 237 byte

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

Hãy thử trực tuyến! Sử dụng cờ -CPPcho phép bộ xử lý trước C cho phép chúng ta sử dụng dấu gạch chéo ngược ở cuối dòng để tiếp tục nó trên dòng tiếp theo.

Mã thực tế là main=putStr$(:"\\\n")=<<s++show s;s="<data>".

Chỉnh sửa: Một -468 byte thông thường nhờ rjan Johansen !


1
Nó tiết kiệm rất nhiều lối thoát để thay đổi điều đó main=putStr$(:"\\\n")=<<s++show s;s="<data>". Hãy thử trực tuyến!
Ørjan Johansen

5

Rust, độ dài dòng: 5, byte: 301 299

Dùng thử trực tuyến

Mặc dù trông như thế nào, đây không phải là ngôn ngữ lập trình bí truyền, chỉ có rất nhiều tiếng ồn định dạng.

Chiều dài 5 được chọn để có thể sử dụng print. Tôi không nghĩ có một cách in sẽ có độ dài dọc ngắn hơn, khai báo các hàm C sử dụng externtừ khóa, stdoutdài 6 byte, dài write5 byte, dài no_main7 byte (chính thường là một hàm;)).

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

Nó không phải là chiều dài ngang ?
anatolyg

@anatolyg đã sửa
Konrad Borowski

Việc lồng chuỗi thô mà không làm nổi bật cú pháp làm cho điều này không thể diễn giải. Tôi không nghĩ cargo fmtthậm chí sẽ giúp ở đây ...
CAD97

@ CAD97 Nếu những gì bạn muốn là tô sáng cú pháp, play.rust-lang.org làm nổi bật chính xác điều này, đó là lý do tại sao tôi sử dụng nó thay vì TIO cho liên kết "Dùng thử trực tuyến".
Konrad Borowski




2

Màu đỏ , độ dài dòng: 10, 49 byte

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

Hãy thử trực tuyến!

Đây thực tế là một quine Rebol

Giải thích: Red / Rebol moldtheo phong cách mã hóa của việc đặt 4 khoảng trắng.

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 byte, độ dài dòng 1

0
0

Hãy thử trực tuyến!

Một bản sao câu trả lời của Dennis ở đây (đi lên cũng vậy)

Đây là một định nghĩa phù hợp với định nghĩa hiện tại của chúng tôi về một quine thích hợp, vì 0 đầu tiên mã hóa 0 thứ hai và ngược lại.


3
Thật tệ khi chúng ta không đi đến thống nhất về một định nghĩa tốt hơn: - /
Sản xuất ETH

@ETHproductions Vâng, có một số hỗ trợ cho định nghĩa này .
Martin Ender

2

RProgN 2 , L = 1, B = 15 byte

«
Ø
.
`
-
S
`
.

Điều này tương đương với chương trình:

«Ø.`
-S`
.

Phá vỡ

«đầu tiên đẩy một hàm đại diện cho phần còn lại của chương trình vào ngăn xếp và sau đó tiếp tục thực thi. Ø.nối thêm một chuỗi rỗng vào hàm, nó xâu chuỗi nó. Điều này sẽ luôn luôn xâu chuỗi như chương trình tương đương, do các dòng mới là không có. `\n-Loại bỏ tất cả các dòng mới từ chuỗi, bây giờ trông như thế nào «Ø.`=S`.. Ssau đó chuyển đổi nó thành một chồng các ký tự đơn và `\n.tham gia ngăn xếp theo dòng mới, trả về chương trình dự kiến.

Hãy thử trực tuyến!


2

Tải trọng , độ dài dòng 1, 20 byte

(
:
a
S
S
)
:
a
S
S

Hãy thử trực tuyến!

Đây chỉ là tiêu chuẩn Underload tiêu chuẩn với các dòng mới được nối thêm. Yêu cầu thực hiện như TIO mà bỏ qua các ký tự lệnh không xác định.

Phần trong ()là một chuỗi ký tự được đặt trên ngăn xếp, :sao chép nó, abọc mục nhập ngăn xếp trên cùng trong ngoặc đơn và Sin.


2

Perl 5 , 259 byte


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

Hãy thử trực tuyến!

Xác minh .


1

Javascript (ES6 REPL), toàn bộ chương trình, độ dài dòng: 3, đếm byte: 31

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

Đây là một câu trả lời của @ kamoroso94 cho một chương trình đầy đủ khép kín.

Nếu bất cứ ai tìm thấy cách loại bỏ một số byte mà không cần thêm nhiều hơn vào độ dài dòng, hãy bình luận :)


Lưu ý rằng điều này vẫn không thực sự xuất ra bất cứ thứ gì, trừ khi bạn chạy nó trong REPL. Tôi sẽ gọi nó là JavaScript (ES6 REPL)
Sản phẩm ETH

ồ, cách sử dụng bảng điều khiển của chrome ...
Brian H.

1

Pip , độ dài dòng 1, 35 byte


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

Hãy thử trực tuyến!

Dựa trên quine Pip được biết đến ngắn nhất , V Y"`V Y`.RPy". Khó khăn chính trong việc squishing nó đến độ dài dòng 1 là RP, không thể chia thành hai dòng. Nhưng trong trường hợp này, tất cả RP(repr) thực hiện là bọc chuỗi trong dấu ngoặc kép, điều mà chúng ta có thể làm trực tiếp.

Đây là một lời giải thích dựa trên một phiên bản nằm ngang:

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.