Độ dài của chuỗi sử dụng lý thuyết tập hợp


20

Từ Wikipedia Định nghĩa lý thuyết về số tự nhiên

Tập N của các số tự nhiên được định nghĩa là tập nhỏ nhất chứa 0 và được đóng dưới hàm kế tiếp S được xác định bởi S (n) = n {n}.

Một vài số đầu tiên được xác định theo cách này là 0 = {}, 1 = {0} = {{}}, 2 = {0,1} = {{}, {{}}}, 3 = {0,1,2 } = {{}, {{}}, {{}, {{}}}}.

Sử dụng định nghĩa này của các số tự nhiên đếm chiều dài của một chuỗi.

Nhập một chuỗi ký tự từ a-zA-Z có độ dài bất kỳ

Xuất độ dài của chuỗi trong ký hiệu đặt mà không có dấu phân cách

Ví dụ

Nhập chuỗi rỗng

Đầu ra {}

Nhập một

Đầu ra {{}}

Nhập aaaa

Đầu ra {{} {{}} {{} {{}}} {{} {{}} {{} {{}}}}}

Đối với đầu ra khả năng đọc cho 'aaaa' với dấu phân cách là

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

Điều kiện

  1. Không có chữ số 0 đến 9 để xuất hiện trong mã;
  2. Không sử dụng chuyển đổi mã ký tự để tạo số;
  3. Không sử dụng + - * / cho các phép tính số học bao gồm tăng và giảm;
  4. Không có phép toán nào khác ngoài Boolean Logic;
  5. Chuỗi đầu vào không được tính trong việc xác định độ dài byte;

Người chiến thắng Chiều dài mã ngắn nhất tính bằng byte.

Vì đây là câu hỏi đầu tiên của tôi, tôi hy vọng tôi đã làm cho nó rõ ràng và đủ nghiêm ngặt. Lời khuyên thân thiện được chấp nhận.


Hừm, bạn có thể thực hiện một định nghĩa đệ quy mà không cần gọi f(n-1)không?
Martin Ender

1
Tôi có một giải pháp (không tối ưu về độ dài byte) mà không sử dụng đệ quy. Nếu A là một mảng thì A.pop (); f (A) là đệ quy.
jing3142

Đó là một điểm hay.
Martin Ender

1
@ jing3142 Kudos đã tự mình thực hiện một giải pháp để đảm bảo có thể. +1 cho câu hỏi tuyệt vời.
Kyle Strand

Giới hạn đối với a-zA-Z có nghĩa là gì? Chúng ta có nên phát hiện khoảng trắng / rubish? hoặc chúng ta chỉ nên mong đợi điều này và báo cáo độ dài của chuỗi, liên quan đến nội dung?
VX

Câu trả lời:


7

GolfScript ( 18 17 byte)

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

Lấy đầu vào trên ngăn xếp (vì vậy nếu chạy như một chương trình, thông qua stdin). Để đầu ra là hai chuỗi trên ngăn xếp (vì vậy nếu chạy như một chương trình, đầu ra chính xác được gửi đến thiết bị xuất chuẩn).

Để để lại một chuỗi trên ngăn xếp, hãy nối +vào concat hoặc sử dụng thay thế

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

Mổ xẻ

# 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
'}'

Thay thế:

# 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>
    ++
}/

Tác động của những hạn chế

Nếu giảm được cho phép, nó sẽ cho phép giải pháp 15 byte

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

12

Chức năng Haskell, 35 34 ký tự

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

Chương trình Haskell với đầu vào được mã hóa cứng, 48 hoặc 49 47 hoặc 48 ký tự

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

(47 ký tự nếu bạn không nhớ các trích dẫn thêm xung quanh đầu ra; nếu có, hãy sử dụng putStrthay vì printtổng cộng 48 ký tự)

Chương trình Haskell, 51 50 ký tự

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

Nếu bạn đồng ý đảo ngược thứ tự, vì đó là một tập hợp, bạn có thể sử dụng: f [] = "{}"; f (_: x) = '{': f x ++ (tail.f) x để lưu a tính cách.
isaacg

@isaacg Đẹp một cái. OP nên nói với chúng tôi nếu anh ấy quan tâm, mặc dù.
John Dvorak

Vì thứ tự đã đặt không thành vấn đề nên đề xuất của @isaacg là tốt
jing3142

5

Con trăn 3 - 64

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

Nếu nội tuyến được cho phép:

Con trăn 2 - 54

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

Không phải là raw-input () phương thức nhập không phải là chuỗi đầu vào. Không quen thuộc với phạm vi ngôn ngữ có thể, tôi đã không cho phép độ dài chuỗi nếu thứ gì đó như w = 'aaaaaaaaaaaa' là cần thiết trong mã. Xin lỗi nếu không rõ ràng. Bất kỳ trợ giúp trong câu hỏi lại từ ngữ được chấp nhận.
jing3142

Tôi hiểu rồi. Tôi sẽ viết lại mã của tôi cho phù hợp. Tuy nhiên, nói chung, tôi nghĩ bạn nên bỏ dòng đó ra. Về cơ bản mọi ngôn ngữ đều có hệ thống I / O.
isaacg

Bạn có thể lưu biểu tượng bằng cách sử dụng o[-1]thay vìo.pop()
aland

1
"Không có chữ số 0 đến 9 để xuất hiện trong mã;"
isaacg

1
Một ký tự lạ - lưu cho cái đầu tiên: Khởi tạo o=[], xuất hiện o=['{}']sau một bước và kéo dài đầu vào bằng cách thay thế nó bằng '_'+input(), cắt khoảng trống sau in.
xnor

3

Javascript 70 (ký tự)

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

Đây là nỗ lực của tôi trước khi đặt câu hỏi. Tôi cho rằng ai đó có nhiều kiến ​​thức về Javascript hơn tôi có thể đánh bại nó.

Cảm ơn Jan Dvorak và Peter Taylor đã giảm thêm

bây giờ 62

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

và bây giờ 61

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

Giải thích về Mã gốc

đặt s để trống

nhập chuỗi vào c và chia thành một mảng

trong khi có thể bật () một ký tự từ c làm như vậy và đặt lại s = s {s} làm người kế vị

đầu ra hiện tại s nhưng cần phải bao quanh với dấu ngoặc đặt.


Bạn không cần niềng răng sau while(lưu một ký tự).
John Dvorak

1
Có một tiết kiệm 7 char mà không cần thêm kiến ​​thức về JS: khởi tạo s='{'và bỏ hai cái '{'+. (Điều này sau đó hành xử như giải pháp GS của tôi). Có thêm 1-char tiết kiệm bằng cách sử dụng forthay vì whilevà kéo vào một trong hai lần khởi tạo để khởi tạo vòng lặp for.
Peter Taylor

@ peter-taylor không chắc bạn muốn áp dụng for-loop như thế nào. Tôi chỉ từng sử dụng nó để đếm.
jing3142

3
for(a;b;c){d}là tương đương trực tiếp với a;while(b){d;c}hầu hết các ngôn ngữ có cả hai. Vì vậy, trong khi for(;b;)giống hệt với while(b)hiệu ứng và số lượng ký tự, hãy for(a;b;)lưu một char a;while(b)và hiệu ứng giống hệt nhau.
Peter Taylor

@ peter-taylor +1 để giải thích rất rõ ràng và súc tích trong một nhận xét
jing3142

3

J - 22 20 char

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

Làm thế nào điều này có thể được bắt nguồn:

   #'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
{{{{}}{}}{{}}{}}

Ngoài ra, điều này có thể được viết '{','{'&(,,~)&'}'@#, có nghĩa là điều tương tự.

Sử dụng:

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

2

Haskell - 35 charactes

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

Giải pháp bị ảnh hưởng bởi người của Jan Dvorak, nhưng không đảo ngược trật tự.


2

Scala, 64 ký tự

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

Lưu ý vai trò kép mà cả niềng răng và schơi trong mã này.

EDIT: đã xóa một chữ số


Có một chữ số trong mã
jing3142

@ jing3142 Rất tiếc. Không còn nữa.
Karol S

2

Con trăn 3 (44)

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

Ở mỗi bước, slà chuỗi đại diện cho tập hợp }bị loại bỏ cuối cùng . Chúng ta tạo tập đại diện n+1từ tập đại diện nthông qua mối quan hệ f (n + 1) = f (n) {f (n)}. Để triển khai liên kết với các chuỗi, chúng tôi nối thêm chuỗi cho {f (n)}, chính xác snhưng với kết quả cuối cùng được }trả về và bỏ qua việc đưa }kết quả cuối cùng vào kết quả. Cuối cùng, chúng tôi thêm lại một bản cuối cùng '}'trước khi in.

Nếu tôi có thể mã hóa chuỗi, số ký tự sẽ giảm xuống còn 35 ký tự, chuyển sang Python 2 để lưu các ký hiệu trên print.

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

Có thể có một cách để tiết kiệm không gian sau khi printthực hiện một thao tác như print'{'+sđảo ngược s, nhưng điều này gây rối với phần +=phụ ở bên phải.


2

gs2, 12 byte

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

ghi nhớ:

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

1

Toán học, 115 ký tự

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

Mã hoàn chỉnh như được hiển thị có 121 ký tự, nhưng 6 ký tự được sử dụng cho chuỗi đầu vào ( "test"), theo quy tắc, không được tính.

Nếu không có yêu cầu không có dấu phân cách, độ dài mã có thể giảm thêm 24 ký tự; không có chuyển đổi rõ ràng thành chuỗi thì 9 ký tự khác có thể bị xóa.


1
Tôi nghĩ rằng việc loại bỏ sự cần thiết của các dấu phân cách, thường được yêu cầu trong ký hiệu đặt, tôi đã giúp giảm kích thước mã. Vì vậy, nếu sử dụng chúng làm giảm kích thước mã của bạn hãy tiếp tục và sử dụng chúng.
jing3142

1

Ruby, 27 tuổi, loại gian lận

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

Điều đáng ngờ:

  1. Đầu ra trông như [[], [[]], [[], [[]]], [[], [[]], [[], [[]]]]]
  2. Hầu hết các phương thức nhập vào ruby ​​sẽ bao gồm một dòng mới, làm tăng số lượng bằng 1.

1
Nó là hoàn toàn hợp pháp nếu bạn inspectmảng bằng tay và trkết quả.
John Dvorak

1

Bash thuần khiết, 54

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

Đầu ra:

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

1

Julia 43

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

Cấu trúc {z ...} mở rộng chuỗi z thành một mảng. Gấp các vòng lặp trên tất cả các phần tử của mảng bỏ qua nội dung và thay vào đó xây dựng từ chuỗi trống. Chức năng Foldl có sẵn trong Julia 0,30.

Đầu ra mẫu

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


1

Toán học, 45 57 48 byte

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

Một giải pháp 36 byte:

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

Tuy nhiên, nó sử dụng một số tính toán số học.


0

Delphi XE3 (264)

Ok tôi thậm chí không đến gần người khác nhưng thật vui khi làm điều đó :)
Có lẽ là đánh giá cao nó. Đi để xem nếu có một cách tốt hơn để làm điều này.

Chơi gôn

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.

Ung dung

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.

Kết quả kiểm tra

Các chuỗi thử nghiệm có chiều dài 0..10

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

Cảm ơn đã cố gắng. Trong tâm trí của tôi, tôi đã xem xét độ dài như là một phép toán khi nó trả về một số và cũng như việc sử dụng vòng lặp 'for' liên quan đến việc đếm.
jing3142

0

Perl 5: 33 ký tự

Nó không hoàn toàn rõ ràng những nhân vật tôi nên tính là một phần của giải pháp. Có lẽ không phải là echo ... |một phần bởi vì đó chỉ được sử dụng để cung cấp một dòng vào stdin. Có lẽ không phải là tên của nhị phân perl, bởi vì bạn có thể đổi tên bất cứ thứ gì bạn muốn.

Vì vậy, tôi đã đếm các công tắc dòng lệnh được truyền cho perl, các dấu ngoặc kép bao quanh mã Perl và chính mã Perl.

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

Ngoài ra, liên quan .


1
Bạn nên tính pllà tiêu chuẩn, nhưng bạn nhận được -evà các trích dẫn xung quanh mã miễn phí. Tham chiếu
Peter Taylor

0

Perl 6: 37 ký tự

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

hoặc từ STDIN:

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

{"\{@_.join()\}"}...*lập một danh sách lười biếng về các dạng tập hợp của các số tự nhiên và chúng ta chỉ cần lấy mẫu mà chúng ta cần get.chars.

Danh sách lười biếng có thể được viết dễ đọc hơn:

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

Mà đọc khá giống với định nghĩa.


0

Phi tiêu: 85 ký tự

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

(có thêm dòng mới để dễ đọc).

Yêu cầu không sử dụng "0" thực sự cắn, nếu không .firstsẽ [0](..).isNegativesẽ được ..<0.


0

Bình thường, 13 byte

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

Đây là câu hỏi tương đương với Pyth của câu trả lời Python của @ xnor. Lưu ý rằng Pyth mới hơn câu hỏi này, vì vậy câu trả lời này không đủ điều kiện để chiến thắng thử thách này.

Trình diễn.



0

Javascript, 171 149 147 142 byte

(Có thể sẽ được đánh gôn thêm sau)

n = prompt (). split (""); for (a = []; n.pop ();) a.push (a.slice ()); alert (JSON.opesify ({a: a}) [ R = "thay thế"] (/ [^ \ [\]] / g, "") [R] (/ \ [/ g, "{") [R] (/ \] / g, "}")) ;
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.