Тривалість рядка за допомогою теорії задань


20

З Вікіпедії Набір-теоретичне визначення натуральних чисел

Множина N натуральних чисел визначається як найменший набір, що містить 0, і закритий під функцією спадкоємця S, визначеної S (n) = n ∪ {n}.

Перші кілька визначених таким чином чисел: 0 = {}, 1 = {0} = {{}}, 2 = {0,1} = {{}, {{}}}, 3 = {0,1,2 } = {{}, {{}}, {{}, {{}}}}.

Використовуючи це визначення натуральних чисел, підраховують довжину рядка.

Введіть рядок символів з a-zA-Z будь-якої довжини

Виведіть довжину рядка в заданих позначеннях без роздільників

Приклади

Введіть порожній рядок

Вихід {}

Введення a

Вихід {{}}

Вхід aaaa

Вихід {{} {{}} {{} {{}}} {{} {{}} {{} {{}}}}}

Для читабельності вихід для 'aaaa' з роздільниками є

{ 
    {} 
    {{}} 
    {{} {{}} } 
    {{}   {{}}   {{} {{} } }   }
}

Умови

  1. У коді немає цифр від 0 до 9;
  2. Немає використання перетворення символьного коду для генерації чисел;
  3. Не застосовувати + - * / для арифметичних обчислень, включаючи збільшення та зменшення;
  4. Немає математичних операцій, крім логічної логіки;
  5. Рядок введення не враховується при визначенні довжини байтів;

Найкоротша довжина коду переможця в байтах.

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


Гм, чи можна реалізувати рекурсивне визначення без виклику f(n-1)?
Мартін Ендер

1
У мене є рішення (неоптимальне з точки зору довжини байтів), яке не використовує рекурсії. Якщо A - масив, то A.pop (); f (A) є рекурсивним.
jing3142

Це хороший момент.
Мартін Ендер

1
@ jing3142 Кудо для самостійного впровадження рішення, щоб переконатися, що це можливо. +1 за велике запитання.
Кайл Странд

Що означає обмеження на a-zA-Z? Чи слід виявити пробіл / сміття? чи варто просто очікувати цього і повідомляти про довжину рядка, що стосується вмісту?
VX

Відповіді:


7

GolfScript ( 18 17 байт)

'{'\{;.'}'++}/'}'

Здійснює введення даних у стеці (тому, якщо запускати як програму, через stdin). Залишає вихід у вигляді двох рядків на стеку (тому, якщо він працює як програма, правильний вихід надсилається до stdout).

Щоб залишити один стек в стеці, або додайте +до concat, або скористайтеся альтернативою

'{}'\{;.);\'}'++}/

Розсічення

# Stack: input-str
'{'\
# Stack: <0< input-str  where <0< means the string representing 0 without its final }
# Loop over each character of the input string
{
    # Stack: <n< char
    # Discard the input character
    ;
    # Concatenate two copies of <n< and a }
    .'}'++
}/
# Push the final } to the stack
'}'

Альтернатива:

# Stack: input-str
'{}'\
# Stack: <0> input-str  (where <0> means the string representing 0)
# Loop over each character of the input string
{
    # Stack: <n> char
    # Discard the input character
    ;
    # Duplicate <n> and remove the final '}'
    .);
    # Stack manipulations
    \'}'
    # Stack: <n>-less-final-'}' <n> '}'
    # Concatenate the three strings to get <n+1>
    ++
}/

Вплив обмежень

Якщо декремент був дозволений, це дозволило б 15-байтне рішення

'{}'\{;..,(/*}/

12

Функція Haskell, 35 34 символи

f[]="{}";f(_:x)='{':f x++tail(f x)

Програма Haskell з жорстким кодом, 48 або 49 47 або 48 символів

 f[]="{}";f(_:x)='{':f x++tail(f x);main=print$f"aaaa"

(47 символів, якщо ви не заперечуєте проти додаткових лапок навколо виводу; якщо це так, використовуйте putStrзамість print48 символів)

Програма Haskell, 51 50 символів

f[]="{}";f(_:x)='{':f x++tail(f x);main=interact f

Якщо ви все в порядку з відміною замовлення, оскільки це набір, ви можете використовувати: f [] = "{}"; f (_: x) = '{': f x ++ (tail.f) x для збереження a характер.
isaacg

@isaacg Хороший. ОП повинен сказати нам, чи він проти.
Джон Дворак

Оскільки його порядок набору не має значення, тому пропозиція
@isaacg

5

Пітон 3 - 64

o=['{}']
for a in input():o+=['{'+''.join(o)+'}']
print(o.pop())

Якщо вбудований вхід дозволений:

Пітон 2 - 54

o=['{}']
for a in'whatever':o+=['{'+''.join(o)+'}']
print o.pop()

Чи не raw-input () метод введення, не сам рядок введення. Не будучи знайомим з можливим діапазоном мов, я забороняв довжину рядка, якщо в коді було щось на зразок w = 'aaaaaaaaaaaaa'. Вибачте, якщо не ясно. Будь-яка допомога в переформулюванні питання прийнята.
jing3142

Я бачу. Я відповідно перепишу свій код. В цілому, однак, я думаю, вам слід просто залишити цю лінію. По суті, кожна мова має систему вводу / виводу.
isaacg

Можна зберегти символ, скориставшись o[-1]замістьo.pop()
aland

1
"У коді немає цифр від 0 до 9;"
isaacg

1
Дивний збереження символів для першого: ініціалізуйте o=[], який стає o=['{}']після одного кроку, і подовжте введення на один, замінивши його '_'+input(), скорочуючи пробіл після in.
xnor

3

Javascript 70 (символи)

s='';c=prompt().split('');while(c.pop()){s+='{'+s+'}'}alert('{'+s+'}')

Це було моїм зусиллям, перш ніж ставити питання. Я б припустив, що хтось, хто має більше знань Javascript, ніж я, можливо, може його перемогти.

Дякую Яну Двораку та Пітеру Тейлору за подальші скорочення

зараз 62

s='{';c=prompt().split('');while(c.pop())s+=s+'}';alert(s+'}')

а тепер 61

s='{';for(c=prompt().split('');c.pop();)s+=s+'}';alert(s+'}')

Пояснення оригінального коду

встановити s пустим

вхідний рядок в c і розділений на масив

в той час як можна поп () символ з c зробити це і скинути s = s {s} як наступник

вихідний струм s, але його потрібно оточити встановленими дужками.


Після цього вам не потрібні дужки while(зберігається один символ).
Джон Дворак

1
Економлять 7 знаків, не вимагаючи більше знань про JS: ініціалізуйте s='{'та вирийте два '{'+. (Це поводиться як моє рішення GS). Є додаткова економія на 1-шарі, використовуючи forзамість whileта потягнувши одну з двох ініціалізацій для ініціалізації для циклу.
Пітер Тейлор

@ peter-taylor не впевнений, як ти маєш намір застосувати для-loop. Я коли-небудь використовував це для підрахунку.
jing3142

3
for(a;b;c){d}прямо еквівалентний a;while(b){d;c}більшості мов, які мають обидва. Таким чином, хоча for(;b;)він ідентичний while(b)за ефектом та кількістю персонажів, for(a;b;)економить один ліміт a;while(b)та однаковий за своєю суттю.
Пітер Тейлор

@ peter-taylor +1 для дуже чіткого та стислого пояснення в коментарі
jing3142

3

J - 22 20 char

'{','}' '{'&(,,~)~#

Як це можна отримати:

   #'123'                      NB. string length
3
   'Left' (,,~) 'Right'        NB. dyad to concat L,R,R
LeftRightRight
   '{' (,,~) '}'               NB. using braces
{}}
   '{'&(,,~) '}'               NB. bind left argument, now it's a monad
{}}
   '{'&(,,~) '{'&(,,~) '}'     NB. twice
{{}}{}}
   '{'&(,,~)^:2 '}'            NB. ^: is monad functional power
{{}}{}}
   '{'&(,,~)^:3 '}'            NB. any integer
{{{}}{}}{{}}{}}
   3 '{'&(,,~) '}'             NB. convenient feature of dyadic &
{{{}}{}}{{}}{}}
   '}' '{'&(,,~)~ 3            NB. swap argument order
{{{}}{}}{{}}{}}
   '}' '{'&(,,~)~ #'123'       NB. using string length
{{{}}{}}{{}}{}}
   '{', '}' '{'&(,,~)~ #'123'  NB. add final brace
{{{{}}{}}{{}}{}}
   ('{','}' '{'&(,,~)~#) '123' NB. works as a verb
{{{{}}{}}{{}}{}}

Як варіант, це можна написати '{','{'&(,,~)&'}'@#, маючи на увазі те саме.

Використання:

   '{','}' '{'&(,,~)~# 'aaaa'
{{{{{}}{}}{{}}{}}{{{}}{}}{{}}{}}
   f =: '{','}' '{'&(,,~)~#  NB. can be assigned to a function
   f 'VeryBig'
{{{{{{{{}}{}}{{}}{}}{{{}}{}}{{}}{}}{{{{}}{}}{{}}{}}{{{}}{}}{{}}{}}{{{{{}}{}}{{}}{}}{{{}}{}}{{}}{}}{{{{}}{}}{{}}{}}{{{}}{}}{{}}{}}{{{{{{}}{}}{{}}{}}{{{}}{}}{{}}{}}{{{{}}{}}{{}}{}}{{{}}{}}{{}}{}}{{{{{}}{}}{{}}{}}{{{}}{}}{{}}{}}{{{{}}{}}{{}}{}}{{{}}{}}{{}}{}}

2

Хаскелл - 35 символів

g[]="{}";g(_:x)=(init.g)x++g x++"}"

На рішення впливає той, Яно Дворака, але без зміни порядку.


2

Скала, 64 символи

def f(s:String):String=s"{${s.tails.toSeq.tail.map(f)mkString}}"

Зверніть увагу на подвійні ролі, які обидва дужки і sграють у цьому коді.

EDIT: вилучено цифру


У коді є цифра
jing3142

@ jing3142 На жаль Більше не.
Karol S

2

Пітон 3 (44)

s='{'
for _ in input():s+=s+'}'
print(s+'}')

На кожному кроці sє рядок, що представляє набір з остаточним }вилученим. Ми створюємо множину, що представляє n+1із множини, що представляє nчерез співвідношення f (n + 1) = f (n) ∪ {f (n)}. Для реалізації об'єднання за допомогою рядків ми додаємо рядок для {f (n)}, що точно, sале з остаточним }поверненим, і нехтуємо включенням результату у фінал }. Нарешті, ми додаємо ще фінал '}'перед друком.

Якщо я можу жорстко кодувати рядок, кількість символів скорочується до 35 символів, перемикаючись на Python 2, щоб зберегти парантези на print.

s='{'
for _ in'string':s+=s+'}'
print s+'}'

Можливо, є спосіб заощадити простір після того, printяк зробити щось на кшталт print'{'+sреверсу s, але це зіпсується з +=додаванням справа.


2

gs2, 12 байт

7b 7d 05 27 a0 42 30 30 e4 43 2e 32

мнемоніка:

"{}"
right-uncons @0 swap + + b5
rot length times

1

Математика, 115 символів

StringReplace[ToString@Function[s,NestWhile[#~Append~#&,{},(s~Read~Character//StringQ)&]]@StringToStream@"test",", "->""]

Повний код, як показано, містить 121 символ, але 6 з них використовуються для введення рядка ( "test"), який, згідно з правилами, не враховується.

Без вимоги відсутні обмежувачі, довжину коду можна було б зменшити ще на 24 символи; без явного перетворення в рядок, тоді ще 9 символів можна буде видалити.


1
Я думав, що усунення потреби в розмежувачах, які зазвичай потрібні в набірних позначеннях, я допомагав зменшити розмір коду. Тож якщо їх використання зменшує розмір коду, продовжуйте користуватися ними.
jing3142

1

Рубі, 27, вид обману

a=*a
gets.chars{a=*a,a}
p a

Сумнівні речі:

  1. Вихід виглядає так [[], [[]], [[], [[]]], [[], [[]], [[], [[]]]]]
  2. Більшість методів введення в рубін включатимуть нову лінію, яка збільшується на 1.

1
Це має бути ідеально законним, якщо ви inspectмасив вручну і отримаєте trрезультат.
Джон Дворак

1

Чистий Баш, 54

f()([ $@ ]&&(a=`f ${@%?}`
echo $a{$a}))
echo {`f $@`}

Вихід:

$ ./strlenset.sh
{}
$ ./strlenset.sh a
{{}}
$ ./strlenset.sh aa
{{} {{}}}
$ ./strlenset.sh aaa
{{} {{}} {{} {{}}}}
$ ./strlenset.sh aaaa
{{} {{}} {{} {{}}} {{} {{}} {{} {{}}}}}
$ 

1

Джулія 43

f(z)="{"foldl((x,y)->"$x{$x}","",{z...})"}"

Конструкція {z ...} розширює рядок z в масив. Складайте петлі над усіма елементами масиву, ігноруючи вміст, а замість цього збирайте з порожнього рядка. Функція foldl доступна в Julia 0.30.

Вибірка зразка

julia> f("")
"{}"
julia> f("aa")
"{{}{{}}}"
julia> f("aaaa")
"{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}"
julia> f("aaaaaa")
"{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}}}"


1

Математика, 45 57 48 байт

"{"~~Fold[#~~"{"~~#~~"}"&,"",Characters@#]~~"}"&

Розчин на 36 байт:

Fold[{##{##}}&@@#&,{},Characters@#]&

Однак він використовує деякі арифметичні обчислення.


0

Delphi XE3 (264)

Гаразд я навіть не
підходжу близько до іншого, але це було весело робити :) Напевно, переосмисливши це. Збираємось подивитися, чи є кращий спосіб зробити це.

Гольф

uses System.SysUtils;var s,f:string;a:TArray<char>;b:TArray<string>;i,x:integer;begin readln(s);a:=s.ToCharArray;f:='{';setlength(b,Length(a));for I:=Low(a)to High(a) do begin s:='{';for x:=Low(b)to High(b)do s:=s+b[x];b[i]:=s+'}';f:=f+b[i];end;writeln(f+'}');end.

Безумовно

uses
  System.SysUtils;
var
  s,f:string;
  a:TArray<char>;
  b:TArray<string>;
  i,x:integer;
begin
    readln(s);
    a:=s.ToCharArray;
    f:='{';
    setlength(b,Length(a));
    for I:=Low(a)to High(a) do
    begin
      s:='{';
      for x:=Low(b)to High(b)do
        s:=s+b[x];
      b[i]:=s+'}';
      f:=f+b[i];
    end;
    writeln(f+'}');
end.

Результати тестування

Випробувані рядки довжиною 0..10

{}
{{} }
{{} {{}} }
{{} {{}} {{}{{}}} }
{{} {{}} {{}{{}}} {{}{{}}{{}{{}}}} }
{{} {{}} {{}{{}}} {{}{{}}{{}{{}}}} {{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}} }
{{} {{}} {{}{{}}} {{}{{}}{{}{{}}}} {{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}} {{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}} }
{{} {{}} {{}{{}}} {{}{{}}{{}{{}}}} {{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}} {{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}} {{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}}} }
{{} {{}} {{}{{}}} {{}{{}}{{}{{}}}} {{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}} {{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}} {{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}}} {{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}}}} }
{{} {{}} {{}{{}}} {{}{{}}{{}{{}}}} {{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}} {{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}} {{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}}} {{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}}}} {{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}}}}} }
{{} {{}} {{}{{}}} {{}{{}}{{}{{}}}} {{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}} {{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}} {{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}}} {{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}}}} {{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}}}}} {{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}{{}{{}}{{}{{}}}{{}{{}}{{}{{}}}}}}}}}} }

Дякуємо за спробу. На моєму розумінні я розглядав довжину як математичну операцію, оскільки вона повертає число, а також використання циклу 'for', який включає підрахунок.
jing3142

0

Perl 5: 33 символи

Не зовсім зрозуміло, яких персонажів я повинен вважати частиною рішення. Можливо, це не echo ... |частина, тому що це просто використовується для подачі рядка в stdin. Напевно, не назва бінарного файлу perl, тому що ви можете перейменувати те, що хочете.

Тож я порахував перемикачі командного рядка, передані в perl, цитати, обмотані кодом Perl, і сам код Perl.

#                                1         2         3
#                     12  3456789012345678901234567890123
$ echo "aaaa" | perl -ple'$s.="{$s}"while s/.//;$_="{$s}"'

Також пов'язані .


1
Вам слід вважати plастандарт, але ви отримуєте -eі котирування навколо коду безкоштовно. Ref
Пітер Тейлор

0

Perl 6: 37 символів

say ({"\{@_.join()\}"}...*)["(input string)".chars]

або від STDIN:

say ({"\{@_.join()\}"}...*)[get.chars]

{"\{@_.join()\}"}...*складає лінивий список заданих форм натуральних чисел, і ми просто захоплюємо ту, яка нам потрібна get.chars.

У лінивому списку може бути зрозуміліше написано:

-> *@prev { '{'~ @prev.join ~'}' } ... *

Що читає досить схоже на визначення.


0

Дартс: 85 символів

a(p,i)=>(--i).isNegative?p:a("$p{$p}",i);
main(s){print("{${a("",s.first.length)}}");}

(з додатковою новою лінією для читабельності).

Вимога не використовувати "0" справді загрожує, інакше .firstбуло б [0]і (..).isNegativeбуло б ..<0.


0

Pyth, 13 байт

+u++GG\}z\{\}

Це еквівалент Pyth Golf у відповідь на відповідь Python @ xnor. Зауважте, що Pyth є більш новим, ніж це питання, тому ця відповідь не може перемогти у цьому виклику.

Демонстрація.



0

Javascript, 171 149 147 142 байт

(Можливо, пізніше піде гольф)

n = prompt (). split (""); for (a = []; n.pop ();) a.push (a.slice ()); alert (JSON.stringify ({a: a}) [ R = "замінити"] (/ [^ \ [\]] / g, "") [R] (/ \ [/ g, "{") [R] (/ \] / g, "}")) ;
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.