Займіться позицією проти довгих ліній кити


28

або: Побудуйте вертикальну квітку

Натхненний зайняти позицію проти довгих ліній .

Ваше завдання - побудувати вертикальну квітку з якомога коротшою довжиною лінії.

Оцінка балів

Найкоротша довжина рядка (без урахування нових рядків) виграє, з критеріями як безперервного переривання.

Довжина рядка визначається як найдовший рядок у вашій програмі, виключаючи символ розриву рядка.

Наприклад:

$_=
Q.
P

має довжину рядка 3 і кількість байтів 8, при цьому:

Q
$
_
P

Має довжину рядка 1 та кількість байтів 7 (якщо не бракує нового рядка).

Правила

Квіни повинні відповідати визначенню спільноти лайни .

Стандартні лазівки заборонені.


Чи поширюється також правило виклику, на яке це поширюється, і тут? (" Усі розриви рядків повинні бути значущими. Розриви рядків, які можна видалити, а сусідні лінії прямо зв'язати без впливу на вихід, повинні бути усунені. ")
Кевін Круїйсен

6
@KevinCruijssen Ні, я хотів, щоб цей виклик мав трохи більше свободи для заохочення коротшої довжини лінії! Це було одне, що я хотів змінити в іншому виклику!
Дом Гастінгс

Відповіді:


31

Язик , довжина рядка 0, ≈ 1,01 × 10 805 байт

Вихідний код складається з

10124204951141713202533972929121310016060433092338061822344361345785088607872212687519180665846846689047959498775873817205954910072327976407177053174071436371843670134990737172675632938993247496933911137703773908536875512359091727633452506044935740750830240213878294804481182083555147915724921824921475110508228264569693355158523956426011218344830576542194309867719995259333487662608933990607888012376767799159279952780093033761421596267435996052643805835600325453580090964941176722519904997142820547696122795384058768166716813179490118821654787005844786013890425692181280317909786461426684986082270532414940905922244777135016193088362341771414388821075092853157152933099269703875111747946164773211049512395358715902962437487134522781505709420586981997748912591875626029183292826655753251235587052422561943

linefeeds, що кодує програму, що випливає.

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

Вихідний код здебільшого ідентичний пом'якшеній радіацією. кінці Lenguage @ ummy23013 , мінус значення в кінці, ++++++++++.[-]заміною .для друку стрічкових рядків замість нульових байтів та відповідних змін у розділі даних у рядку 1.


Я знав, що це неминуче! Я хотів, але всебічне запитання. Цікаво, чи може хтось здолати це ...
Дом Гастінгс

Господи, ця мова є визначенням того, чому боулінг з кодами не сприйнятий, це точно класно ... Не можу повірити, що "Hello World" знадобиться"about 1.75*10**76 yottabytes in ASCII"
Magic Octopus Urn


Ви можете ]++++++++ ++.-->
пограти

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

Пояснення

Вау. Поспіліть сюди, тому що це буде підступна подорож ...

Я довгий час намагався розібратися, як вирішити цю задачу довжиною 1 - ніяких вбудованих (безпосередньо, так чи інакше), ключових слів або навіть функцій зі стрілками - перш ніж усвідомити, що це легко можливо з JSF *** , який може оцініть будь-який код JavaScript, уникаючи багатобайтних маркерів. Але рішення JSF легко було б мати тисячі байтів, якщо не десятки чи сотні тисяч. На щастя, ми не обмежені лише - у ()[]+!нас є всі ASCII!

Я вирішив почати з гри в гольф важливих будівельних блоків JSF - символів, які можна вбудувати в рядки, щоб "розблокувати більше можливостей", так би мовити. Ми не можемо використовувати рядки безпосередньо для отримання символів, оскільки для цього знадобляться рядки довжиною 3. Тому замість цього ми вкрадемо трюк у JSF, отримуючи кілька символів з літералів, які можна скласти однобайтовими лексемами:

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

Від цього ми можемо розширюватися назовні, починаючи з того [].find, що є об'єктом Функції. Перетворення цього в рядок function find() { ...дає нам доступ до c, oпростір ( _), а також круглі дужки ( yі z). Можливо , що ще більш важливо, ми тепер маємо доступ до його constructor, в Functionфункції-якої, inceptional , як це може здатися, дає нам можливість виконання коду шляхом створення рядка, передаючи її Function(), а потім викликати функцію генерується.

Я, мабуть, повинен згадати загальний метод, який використовує сама програма. Станом на 2015 рік, у JavaScript є ця дійсно класна функція під назвою " позначені шаблони ", яка не тільки дозволяє нерозмірковувати нові рядки в рядках, але й дозволяє нам безпосередньо викликати функцію з літеральним рядком (певним чином; myFunc`abc`;приблизно аналогічно myFunc(["abc"])). Якщо ми поставимо виклик функції як останнє в програмі, загальна структура буде виглядати приблизно так:

code;func`code;func`

Все, funcщо потрібно зробити, - це вивести свій аргумент, після чого - backtick, потім його аргумент і другий backtick. Якщо припустити, що у нас є аргумент в aі backtick f, який ми зберігаємо , ми можемо досягти цього за допомогою коду alert(a+f+a+f). Однак на даний момент нам не вистачає +і самого бейтіка. +(зберігається в P) не важко; ми викрадаємо ще один трюк у JSF, будуючи рядок 1e23, перетворюючи на число, потім повертаючись до рядка, даючи "1e+23".

Отримати зворотний вибір - трохи складніше. Спочатку я спробував отримати String.fromCharCode, але знайти Cвиявилося майже так само складно. На щастя, atobйого досить легко отримати ( Function("return atob")(); bгенерується з 0+{}, що дає [object Object]) і може дати будь-яку таблицю ASCII, якщо буде знайдена правильна магічна рядок. Короткий сценарій дав мені , 12Aяк один з варіантів, які зручно можна знайти в 12Array(трохи коротше , щоб генерувати, завдяки [].constructor[n+a+m+e], mможна знайти в 0 .constructor+0: "function Number() { ...").

Нарешті, ми склеюємо все разом. Ми призначаємо перемичку для змінної f, але оскільки ми не можемо використовувати її безпосередньо у рядку функції, ми замість цього встановлюємо змінну qна букву fта використовуємо її замість неї. Це робить наш заключний рядок a+l+e+r+t+y+a+P+q+P+a+P+q+z, або "alert(a+f+a+f)". Потім Function()ми подаємо це, подаємо наш готовий код до результату, і вуаля, у нас є квота JavaScript з не більше одного знака на рядок!


Моя голова відчуває себе жахливо на даний момент, тому, будь ласка, розпитайте про будь-які помилки, які я допустив, або про речі, які я пропустив у цьому поясненні, і я повернуся до вас після того, як я трохи відпочив ...


Приємно! Хоча насправді не JS-програміст, я можу здогадатися про суть цього з того, що я читав про JSFuck, але я хотів би пояснення, особливо цього f=рядка.
Ørjan Johansen

1
@ ØrjanJohansen Вибачте, я намагався написати пояснення для всієї справи, але це не дуже добре, тому я просто швидко відповім на ваше запитання: це звичний спосіб встановити fєдиний зворотній зв'язок. Сама лінія еквівалентна f=atob("12Array")[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 Johansen

Гарно! Набагато менше моєї спроби , хоча ми використовували симарний підхід!
Дом Гастінгс

@DomHastings Поки посилання навіть не працює ;-)
ETHproductions

15

Haskell , довжина рядка 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\
=\
"\

Спробуйте в Інтернеті! Використання прапора, -CPPщо дозволяє попередньому процесору C, дозволяє використовувати зворотний проріз у кінці рядка, щоб продовжити його в наступному рядку.

Фактичний код є main=putStr$(:"\\\n")=<<s++show s;s="<data>".

Редагувати: випадкові -468 байт завдяки Ørjan Johansen !


1
Це економить багато втечі, щоб змінити це main=putStr$(:"\\\n")=<<s++show s;s="<data>". Спробуйте в Інтернеті!
Ørjan Johansen

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

@anatolyg зафіксовано
Конрад Боровський

Сире рядок, що вкладається без виділення синтаксису, робить це неможливим для інтерпретації. Я не думаю, cargo fmtщо тут навіть допоможе ...
CAD97

@ CAD97 Якщо ви хочете виділити синтаксис, play.rust-lang.org підкреслює це правильно, тому я використовував його замість TIO для посилання "Спробуйте онлайн".
Конрад Боровський




2

Червоний , довжина рядка: 10, 49 байт

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

Спробуйте в Інтернеті!

Насправді це квітка Ребола

Пояснення: Red / Rebol's 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 кодує другий 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

Спробуйте в Інтернеті!

Це просто стандартна анкета Underload з доданими новими рядками. Потрібна така реалізація, як TIO, яка ігнорує невідомі символи команди.

Частина в ()- це рядковий літерал, поставлений на стек, :дублює його, aзагортає верхній запис стека в дужки та Sдрукує.



1

Javascript (ES6 REPL), повна програма, довжина рядка: 3, кількість байтів: 31

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

Це порт відповіді @ kamoroso94 на автономну повну програму.

Якщо хтось знайде спосіб зняти кілька байтів, не додаючи більше до довжини рядка, сміливо коментуйте :)


Зауважте, що це все ще насправді нічого не виводить, якщо тільки ви не запустите його в REPL. Я б назвав це JavaScript (ES6 REPL)
ETHproductions

о стріляй, звик до хромової консолі ...
Брайан Х.

1

Піп , довжина рядка 1, 35 байт


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

Спробуйте в Інтернеті!

На основі відомого найкоротшого Pip Куайном, V Y"`V Y`.RPy". Основна складність у прикріпленні його до довжини 1 полягає в тому RP, що її неможливо розділити на дві лінії. Але в цьому випадку все 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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.