Trình tự Squiggly


29

Tất cả các khoản tín dụng cho Adnan để đưa ra thách thức này.

Thử thách cuối cùng của tôi, trước khi tôi nghỉ giải lao .

Bài tập

Cho số nguyên dương n, nếu nlà số lẻ, lặp lại /nhiều lần; nếu nlà chẵn, lặp lại \nhiều lần

(Nghiêm túc mà nói, các testcase sẽ rõ ràng hơn nhiều so với mô tả này, vì vậy chỉ cần nhìn vào các testcase.)

Thông số kỹ thuật

  • Bất kỳ định dạng đầu vào / đầu ra hợp lý.
  • Tiêu chuẩn áp dụng.

Tủ thử

n output
1 /
2 \\
3 ///
4 \\\\
5 /////
6 \\\\\\

Câu trả lời:


17

Javascript, 22 byte

n=>"\\/"[n%2].repeat(n)

Xác định một hàm ẩn danh.

Nếu chỉ *lặp lại chuỗi trong Javascript. thở dài


1
Cuối cùng, bạn đã tìm đúng toán tử
Leaky Nun

@LeakyNun Bạn đang nói về cái gì vậy?
DanTheMan

Bạn đang sử dụng toán tử ternary để chọn nhân vật, phải không?
Nữ tu bị rò rỉ

@LeakyNun Ban đầu, vâng, nhưng nếu bạn xem trò chuyện, tôi cũng đã đăng bài này khoảng một phút sau.
DanTheMan

2
@Jordumus Bạn có thể gán hàm cho một biến : f=n=>..., bạn có thể gọi nó trực tiếp : (n=>...)(5). (Hoặc nếu bạn đang sử dụng REPL của Node.js, thì bạn có thể sử dụng this._, viết tắt của từ cuối cùng được nhập)
DanTheMan

16

Python, 20 byte

lambda n:'\/'[n%2]*n

Tuyệt vời, đơn giản và thanh lịch ^ _ ^
ABcDexter


9

Perl, 20 byte

Bao gồm +1 cho -p

Chạy với đầu vào trên STDIN:

squigly.pl <<< 6

squigly.pl

#!/usr/bin/perl -p
$_=$_%2x$_;y;01;\\/

Nó có thể chỉ là phiên bản Perl của tôi (Tôi vẫn ở 5.10) nhưng điều này sẽ gây ra lỗi trừ khi tôi thêm một phần bổ sung; đến cuối cùng. Tôi nghĩ đó là bởi vì bạn đang sử dụng dấu chấm phẩy làm dấu phân cách cho y và bạn cần thêm một để hoàn thành câu lệnh (và sẽ cần hai nếu bạn có nhiều dòng mã hơn sau này)
theLambGoat

@theLambGoat Bạn có chắc chắn đang sử dụng -ptùy chọn này không? Tôi sử dụng ;trong phiên âm chính xác bởi vì -pcó một ẩn ;ở cuối mã để tôi có thể tiết kiệm thêm 1 byte. Điều này đã hoạt động kể từ ít nhất perl 5.6 (có thể miễn là -ptùy chọn tồn tại trên thực tế)
TonMedel

@theLambGoat Mm, tôi đã tìm thấy một redhat cũ với perl 5.10 trong đó thực sự nó không hoạt động. Đây là một bản vá lỗi hoặc nó thực sự không hoạt động trong khoảng 5.10 (Tôi chắc chắn rằng nó hoạt động trong các bản cũ hơn và nó cũng hoạt động trong các bản mới hơn)
TonMedel

Tôi đang chạy trên SUSE Enterprise Server 11 vì vậy nó không chỉ là một thứ gì đó. Nhưng tôi nghĩ miễn là nó hoạt động trong một số phiên bản, thì nó vẫn là một câu trả lời hợp lệ. (Tôi cũng vừa mới kiểm tra 5.08, phiên bản khác duy nhất tôi có quyền truy cập vào lúc này và nó cũng không hoạt động ở đó)
theLambGoat

1
Thủ thuật đó ;được thêm vào -plà khá tuyệt vời, được thực hiện tốt.
Dada


7

C #, 42 byte

string f(int n)=>new string("\\/"[n%2],n);

Chọn đúng ký tự, sau đó tạo một chuỗi mới bao gồm các ký tự đó được lặp lại nhiều nlần.


7

PHP, 38 byte

for(;$i++<$a=$argv[1];)echo'\/'[$a%2];

(biến thể 38 byte)

while($i++<$a=$argv[1])echo'\/'[$a%2];

(biến thể 38 byte)

<?=str_pad('',$a=$argv[1],'\/'[$a%2]);

(biến thể 40 byte)

<?=str_repeat('\/'[($a=$argv[1])%2],$a);



6

J, 10 byte

#'\/'{~2|]

Đây là một động từ sáu tàu, bao gồm:

# ('\/' {~ 2 | ])

Đây là một cái móc giữa #('\/' {~ 2 | ]); một cái móc (f g) ymở rộng ra y f (g y), do đó, cái này mở rộng ra y # (... y), mà, đối với các ký tự đơn, sẽ tạo ra một danh sách các yký tự.

Phần thứ hai là 5 chuyến tàu, bao gồm:

'\/' {~ 2 | ]

Điều này đánh giá hai nhánh:

'\/' {~ (2 | ])

Các ngã ba bên trong 2 | ], là mô-đun hai. Các ngã ba bên ngoài, do đó, là:

'\/' {~ mod2

Mà lấy ( {~) chỉ số mod2 ( mod2) từ chuỗi /.

Sau đó, sử dụng móc từ phía trên:

y # (apt char)

Điều này mang lại những gì chúng ta muốn, và chúng ta đã hoàn thành.


6

Haskell, 25 byte

f n=cycle"\\/"!!n<$[1..n]

-1 byte nhờ Damien với cycle.


1
f n=cycle"\\/"!!n<$[1..n]
Damien

@Damien Wow, làm thế nào tôi quên chu kỳ.
xnor

Tôi không biết. Nhưng tôi rất vui vì đã có cơ hội "đánh bại" bạn một lần :)
Damien

6

Toán học, 34 32 28 byte

If[OddQ@#,"/","\\"]~Table~#&

Chức năng ẩn danh. Lấy một số nguyên làm đầu vào và trả về một danh sách các ký tự làm đầu ra.


Bạn có thể sử dụng ~Table~#.
Martin Ender

Tôi nghĩ rằng nó đã được thêm vào trong 10.2.
Martin Ender

Ngoài ra, tôi nghĩ rằng bạn có thể bỏ qua <>""và trả về một danh sách các nhân vật.
Martin Ender

1
@MartinEnder Họ cũng phải thêm ~Do~Infinityvà như vậy trong 10.2+ nữa ...
LegionMammal978

5

Powershell, 30 27 byte

Cập nhật:

param($n)('\','/')[$n%2]*$n

Chuyển sang param, nhờ timmyd .


"$("\/"[$args[0]%2])"*$args[0]

hoặc dễ đọc hơn một chút

("\","/")[$args[0]%2]*$args[0]

Kiểm tra:

> 1..10 | % { ./run.ps1 $_ }
/
\\
///
\\\\
/////
\\\\\\
///////
\\\\\\\\
/////////
\\\\\\\\\\

3
Chào mừng đến với PPCG! Rất vui khi thấy một người dùng PowerShell khác ở đây. Bạn có thể cạo một vài byte bằng cách lấy đầu vào param($n)thay vì $args, như sau cho 27 byte -param($n)('\','/')[$n%2]*$n
admBorkBork

5

Toán học, 29 byte

"\\"["/"][[#~Mod~2]]~Table~#&

Khai thác một cách tàn nhẫn thực tế [[1]]trả về đối số đầu tiên của hàm trong khi [[0]]trả về chính hàm (đầu), được áp dụng cho hàm hợp lệ lạ có tên "\\"đang được "đánh giá" tại "/".


Hơi lạ một chút khi bạn cho rằng một cái gì đó có dạng a[b]chỉ là một biểu thức chung với phần đầu a(chỉ mục 0) và phần tử b(chỉ mục 1), và các hàm chỉ là các loại biểu thức đặc biệt (thực ra, sẽ đúng hơn khi nói rằng các hàm đó là ' t biểu thức ở tất cả, nhưng chỉ đơn giản là các quy tắc để chuyển đổi các biểu thức thường có dạng f[x...]). :)
Martin Ender

2
Tôi đã thấy nhiều ngôn ngữ bị lạm dụng trên trang web này, nhưng tôi nghĩ rằng đây là lần lạm dụng đầu tiên của Mathicala mà tôi đã thấy. Làm tốt lắm!
DanTheMan



4

Brachylog , 15 byte

:2%:"\/"rm:?jbw

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

Giải trình

:2%                Input mod 2…
   :"\/"rm         …is the index of the element in string "\/",…
          :?j      …element that we juxtapose Input times to itself…
             bw    …and print to STDOUT after removing one slash/backslash

4

CJam , 9 byte

ri_"\/"=*

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

Giải trình

ri     e# Read input and convert to integer N.
_      e# Duplicate N.
"\/"=  e# Use N as cyclic index into "\/", giving '\ for even and '/ for odd inputs.
*      e# Repeat N times.

4

> <> (Cá), 30 byte

:2%?'/'o1-:?!;30.
30.  >'\'50p

Lần đầu tiên sử dụng ngôn ngữ này, nhưng tôi nghĩ rằng ít nhất tôi đã tiết kiệm được một căn phòng nhỏ bằng cách sử dụng có điều kiện / như một phần của đầu ra hoặc gương để chuyển hướng dòng chảy. Có lẽ vẫn còn kém hiệu quả khủng khiếp, tôi cảm thấy như nó có thể bị cắt giảm ít nhất một chút.

Đầu vào là ngăn xếp ban đầu, đầu ra là stdout

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


Chào mừng bạn đến với Câu đố lập trình & Code Golf!
Dennis

@Dennis Cảm ơn! Tôi đánh giá cao sự chào đón.
Callum Kerr

4

APL Dyalog , 11 byte

Yêu cầu ⎕IO←0mặc định trên nhiều hệ thống.

⊢⍴'\/'⊃⍨2|⊢

tranh luận

định hình lại (lặp lại)

'\/'⊃⍨ chuỗi "/" được chọn bởi

2|⊢ phần còn lại khi đối số được chia cho hai

Dùng thử trực tuyến!


Mát mẻ! Rất giống với J.
Conor O'Brien

@ ConorO'Brien Có, sự khác biệt duy nhất là 2 tàu trong J là móc, trong khi chúng ở trên đỉnh Dyalog, do đó cần có một tine bên trái rõ ràng.
Adám

Ah, tôi đã tự hỏi tại sao tranh luận ở đó.
Conor O'Brien

1
Cuối cùng, một câu trả lời APL với tất cả các ký tự được hiển thị chính xác cho tôi!
Cyoce

@Cyoce Vâng, tôi ước chúng ta có thể chỉ định (và nhúng) phông chữ trên SE.
Adám

3

Java 7, 68 65 byte

void c(int i){for(int x=0;x++<i;)System.out.print(i%2<1?92:'/');}

3 byte được lưu nhờ vào @ user902383@SeanBean .

Giống như với câu trả lời này , golf-code ngắn nhất dường như lặp lại và in. Cả đệ quy và
void c(int i){System.out.print(new String(new char[i]).replace("\0",i%2<1?"\\":"/"));}
dường như dài hơn.

Mã thử nghiệm & mã hóa:

Hãy thử nó ở đây.

class M{
  static void c(int i){
    for(int x = 0; x++ < i;){
      System.out.print(i % 2 < 1
                        ? 92
                        : '/');
    }
  }

  public static void main(String[] a){
    for(int i = 0; i < 10; i++){
      c(i);
      System.out.println();
    }
  }
}

Đầu ra:

/
\\
///
\\\\
/////
\\\\\\
///////
\\\\\\\\
/////////

Xin chào Kevin. Tại sao không phải là một biểu hiện Lambda?
Vale

@Vale Hi Vale. Bởi vì tôi là một lập trình viên Java 7 lỗi thời. :) Nếu bạn có câu trả lời Java 8 hoặc 9 hơi khác so với câu trả lời của tôi, vui lòng đăng nó.
Kevin Cruijssen

2
@Vale (anh ấy kỳ quặc như thế: P)
Shaun Wild

1
tôi nghĩ rằng nếu bạn thay đổi x=-1;++x<ithành x=0;x++<ibạn có thể giảm thêm một byte
user902383

1
Ngoài ra, bạn có thể thay thế "\\" : "/"bằng 92:'/';)
Shaun Wild

3

R, 47 46 byte

n=scan();cat(rep(c("\\","/")[n%%2+1],n),sep="")

Trong R, bạn phải thoát dấu gạch chéo ngược. đối số sepcũng phải được chỉ định đầy đủ vì nó xuất hiện sau... . Vì vậy, rất ít cơ hội để tiết kiệm ký tự :(

Cảm ơn bouncyball để chơi golf một byte.


1
Lưu một byte bằng cách sử dụng lập chỉ mục:n=scan();cat(rep(c('\\','/')[n%%2+1],n),sep='')
bouncyball

3

T-SQL 50 byte

Tất nhiên là không có STDINở đây, vì vậy hãy giả sử một INTbiến được mã hóa cứng như thế này: DECLARE @ INTthì giải pháp là:

PRINT IIF(@%2=0,REPLICATE('\',@),REPLICATE('/',@))

3

Pip , 8 byte

"\/"@aXa

Nói thẳng ra. Sử dụng lập chỉ mục mô-đun để chọn lặp lại ký tự và chuỗi để nhân nó. Hãy thử trực tuyến!


Câu hỏi này đưa ra một so sánh thú vị giữa Pip, PythJelly , hai câu hỏi sau mỗi câu có 5 byte. Tất cả ba ngôn ngữ đều có đầu ra ngầm định, với các toán tử char đơn để lập chỉ mục mô-đun và lặp lại chuỗi, và không có yêu cầu thoát dấu gạch chéo ngược trong chuỗi. Có hai điểm khác biệt chính:

  1. Trong một số trường hợp nhất định, Pyth và Jelly chỉ cần một dấu phân cách để xác định chuỗi;
  2. Pyth và Jelly có cú pháp sao cho đầu vào không cần phải được trình bày rõ ràng trong mã (mặc dù vì những lý do rất khác nhau, như Maltysen đã giải thích với tôi ).

Không một trong số các tính năng này có khả năng hiển thị trong Pip 1 (Tôi không thích tính thẩm mỹ của các dấu phân cách không cân bằng và cú pháp không có điểm hoặc các toán hạng ngầm có vẻ như chúng quá xa lạ với trình phân tích cú pháp biểu thức kết hợp của tôi), nhưng tôi m ổn với chơi fiddle thứ ba. Mặc dù "khả năng đọc" cực kỳ tương đối khi chơi golf, tôi cho rằng ba byte bổ sung đó làm cho chương trình Pip trở nên dễ hiểu hơn rất nhiều - và trong cuốn sách của tôi, đó là một sự đánh đổi đáng giá.

1 Mặc dù, các chuỗi ký tự đơn trong Pip sử dụng một 'dấu phân cách duy nhất , lấy cảm hứng từ CJam và bằng cách trích dẫn trong Lisp.


Tôi không chắc chắn rằng khả năng đọc là một lợi thế, trong môn đánh gôn? Không phải chi phí byte !
GreenAsJade

@GreenAsJade Tôi mong đợi rất nhiều người cảm thấy như vậy. Tôi sẽ chỉ làm một phân biệt : code golf! = golflang design. Bây giờ bạn cũng có thể lập luận rằng cùng một nguyên tắc (ngắn hơn luôn luôn tốt hơn) cũng áp dụng cho thiết kế ngôn ngữ. Tôi chỉ nói rằng đối với tôi, tính khả dụng và thậm chí cả tính thẩm mỹ là những điều cần cân nhắc.
DLosc

Mẹo chuyên nghiệp để tạo ngôn ngữ chơi gôn: không sử dụng infix
Cyoce

Trò chuyện @Cyoce.stackexchange.com/transcript/message/ 31933195
DLosc

pyth không có cú pháp điểm miễn phí ngầm định. nó hoạt động khá giống với cách làm của python, khiến nó có thể đọc được nhưng ngắn. mặt khác, nhận xét của bạn về các dấu phân cách không cân bằng là khá đúng
Maltysen




2

SpecBAS - 28 byte

1 INPUT n: ?"\/"(ODD(n)+1)*n

ODDtrả về 1 nếu số là số lẻ, sau đó sử dụng số đó làm chỉ mục để in đúng số ký tự n số lần. Phải thêm 1 vì chuỗi SpecBAS bắt đầu từ ký tự 1.


2

Java 8, 56 byte

(i,j)->{for(j=i;j-->0;)System.out.print(i%2<1?92:'/');};

Tôi muốn cảm ơn @Kevin Cruijssen vì đã nâng cao câu trả lời của tôi.

Chương trình kiểm tra Ungolfed

public static void main(String[] args) {
    BiConsumer<Integer, Integer> consumer = (i, j) -> {
        for (j = i; j-- > 0;) {
            System.out.print(i % 2 < 1 ? 92 : '/');
        }
    };

    consumer.accept(5, 0);
    consumer.accept(1, 0);
    consumer.accept(8, 0);
}

2

Trên thực tế, 10 byte

Gợi ý chơi golf chào mừng. Hãy thử trực tuyến!

;'\'/2(%I*

Làm thế nào nó hoạt động

       Implicit input of n
;      Duplicate n
'\'/   The strings "/" and "\"
2(%    n mod 2
I      If n mod 2, then "/", else "\"
*      Multiply by n. Implicit print at the end.
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.