Urutan Berlekuk


29

Semua kredit untuk Adnan untuk datang dengan tantangan ini.

Tantangan terakhir saya, sebelum saya istirahat .

Tugas

Diberikan bilangan bulat positif n, jika nganjil, ulangi /berkali-kali; jika nada, ulangi \berkali-kali.

(Serius, testcases akan jauh lebih jelas daripada deskripsi ini, jadi lihat saja testcases.)

Spesifikasi

Testcases

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

Jawaban:


17

Javascript, 22 byte

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

Menentukan fungsi anonim.

Jika hanya *mengulang string di Javascript. mendesah


1
Akhirnya Anda menemukan operator yang tepat
Leaky Nun

@ LeakyNun Apa yang kamu bicarakan?
DanTheMan

Anda menggunakan operator ternary untuk memilih karakter, bukan?
Leaky Nun

@LeakyNun Awalnya, ya, tetapi jika Anda melihat obrolan, saya juga memposting ini sekitar satu menit kemudian.
DanTheMan

2
@Jordumus Anda baik bisa menetapkan fungsi ke variabel: f=n=>..., Anda langsung bisa menyebutnya: (n=>...)(5). (Atau jika Anda menggunakan Node.js REPL, maka Anda bisa menggunakan this._, yang merupakan singkatan dari hal terakhir yang dimasukkan)
DanTheMan



9

Perl, 20 byte

Termasuk +1 untuk -p

Jalankan dengan input pada STDIN:

squigly.pl <<< 6

squigly.pl

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

Mungkin versi Perl saya (saya masih di 5.10) tetapi ini melempar kesalahan kecuali saya menambahkan ekstra; sampai akhir. Saya pikir itu karena Anda menggunakan titik koma sebagai pemisah untuk y dan Anda perlu satu lagi untuk menyelesaikan pernyataan (dan akan membutuhkan dua jika Anda memiliki lebih banyak baris kode setelah ini)
theLambGoat

@theLambGoat Anda yakin menggunakan -popsi ini? Saya menggunakan ;transliterate karena -pmemiliki implisit ;di akhir kode sehingga saya dapat menyimpan 1 byte lagi. Ini telah bekerja sejak setidaknya perl 5.6 (mungkin selama -popsi itu ada)
Ton Hospel

@theLambGoat Mm, saya menemukan redhat tua dengan perl 5.10 di mana memang tidak berfungsi. Entah ini tambalan redhat atau memang tidak bekerja sekitar 5.10 (saya yakin ini bekerja di perl yang lebih lama dan juga bekerja di perl yang lebih baru)
Ton Hospel

Saya menjalankan SUSE Enterprise Server 11 sehingga bukan hanya redhat. Tapi saya pikir selama ini berhasil di beberapa versi, itu masih harus menjadi jawaban yang valid. (Saya juga baru saja memeriksa 5.08, satu-satunya versi lain yang saya punya akses saat ini dan juga tidak berfungsi di sana)
theLambGoat

1
Trik dengan ;ditambah oleh -pitu cukup mengagumkan, dilakukan dengan baik.
Dada


7

C #, 42 byte

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

Pilih karakter yang benar, kemudian buat string baru yang terdiri dari karakter yang diulang nkali.


7

PHP, 38 byte

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

(varian 38 byte)

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

(varian 38 byte)

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

(varian 40 byte)

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



6

J, 10 byte

#'\/'{~2|]

Ini adalah kata kerja enam-kereta, yang terdiri dari:

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

Ini adalah pengait antara #dan ('\/' {~ 2 | ]); sebuah kait (f g) ymengembang ke y f (g y), jadi ini mengembang ke y # (... y), yang, untuk karakter tunggal, menghasilkan daftar ykarakter.

Bagian kedua adalah kereta 5, yang terdiri dari:

'\/' {~ 2 | ]

Ini mengevaluasi ke dua garpu:

'\/' {~ (2 | ])

Garpu bagian dalam 2 | ],, adalah modulus dua. Garpu luar, oleh karena itu, adalah:

'\/' {~ mod2

Yang mengambil ( {~) indeks mod2 ( mod2) dari string /.

Kemudian, gunakan kait dari atas:

y # (apt char)

Ini menghasilkan apa yang kita inginkan, dan kita selesai.


6

Haskell, 25 byte

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

-1 byte terima kasih kepada Damien dengan cycle.


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

@ Damen Wow, bagaimana saya bisa melupakan siklus.
xnor

Saya tidak tahu Tapi saya senang memiliki kesempatan untuk "mengalahkan" Anda sekali :)
Damien

6

Mathematica, 34 32 28 byte

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

Fungsi anonim. Mengambil integer sebagai input dan mengembalikan daftar karakter sebagai output.


Anda bisa menggunakannya ~Table~#.
Martin Ender

Saya pikir itu ditambahkan pada 10.2.
Martin Ender

Juga, saya pikir Anda bisa membuang <>""dan mengembalikan daftar karakter.
Martin Ender

1
@ MartinEnder Mereka juga harus menambahkan ~Do~Infinitydan dalam 10.2+ juga ...
LegionMammal978

5

Powershell, 30 27 byte

Memperbarui:

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

Beralih ke param, terima kasih timmyd .


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

atau sedikit lebih mudah dibaca

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

Uji:

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

3
Selamat datang di PPCG! Senang melihat pengguna PowerShell lain di sekitar sini. Anda dapat mencukur beberapa byte dengan mengambil input sebagai param($n)gantinya $args, seperti mengikuti selama 27 byte -param($n)('\','/')[$n%2]*$n
AdmBorkBork

5

Mathematica, 29 byte

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

Cruelly mengeksploitasi fakta yang [[1]]mengembalikan argumen pertama dari suatu fungsi sementara [[0]]mengembalikan fungsi (kepala) itu sendiri, diterapkan pada fungsi aneh "\\"yang dinamai yang sedang "dievaluasi" di "/".


Ini sedikit kurang aneh ketika Anda menganggap bahwa sesuatu dari bentuk a[b]itu hanya ekspresi umum dengan kepala a(indeks 0) dan elemen b(indeks 1), dan fungsi hanyalah jenis ekspresi khusus (sebenarnya, itu akan lebih tepat untuk mengatakan bahwa fungsi tidak ' t ekspresi sama sekali, tetapi hanya aturan untuk mengubah ekspresi yang biasanya berbentuk f[x...]). :)
Martin Ender

2
Saya telah melihat banyak bahasa dilecehkan di situs ini, tetapi saya pikir ini adalah penyalahgunaan pertama Mathematica yang pernah saya lihat. Kerja bagus!
DanTheMan



4

Brachylog , 15 byte

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

Cobalah online!

Penjelasan

: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_"\/"=*

Cobalah online!

Penjelasan

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

> <> (Ikan), 30 Bytes

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

Pertama kali menggunakan bahasa ini, tapi saya pikir saya setidaknya menyelamatkan sedikit ruang dengan menggunakan / sebagai bagian dari output atau mirror untuk mengarahkan aliran. Mungkin masih sangat tidak efisien, saya merasa mungkin bisa mengurangi sedikit lebih sedikit.

Input adalah tumpukan awal, output stdout

Cobalah online!


Selamat Datang di Programming Puzzles & Code Golf!
Dennis

@Dennis Terima kasih! Saya menghargai sambutannya.
Callum Kerr

4

Dyalog APL , 11 byte

Membutuhkan ⎕IO←0yang default pada banyak sistem.

⊢⍴'\/'⊃⍨2|⊢

argumen

membentuk kembali (pengulangan)

'\/'⊃⍨ string "/" dipilih oleh

2|⊢ pembagian tersisa ketika argumen dibagi dua

TryAPL online!


Keren! Sangat mirip dengan J.
Conor O'Brien

@ ConorO'Brien Ya, satu-satunya perbedaan adalah bahwa 2-kereta di J adalah pengait, sementara mereka di atas di Dyalog, sehingga diperlukan tine kiri yang eksplisit.
Adám

Ah, saya bertanya-tanya mengapa argumen itu ada di sana.
Conor O'Brien

1
Akhirnya jawaban APL dengan semua karakter diberikan dengan benar untuk saya!
Cyoce

@Cyoce Ya, saya berharap kita bisa menentukan (dan menyematkan) font pada 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 disimpan berkat @ user902383 dan @SeanBean .

Sama seperti dengan jawaban ini , kode-golf terpendek tampaknya loop dan dicetak. Keduanya bersifat rekursif dan
void c(int i){System.out.print(new String(new char[i]).replace("\0",i%2<1?"\\":"/"));}
tampaknya lebih panjang.

Tidak digabungkan & kode uji:

Coba di sini.

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();
    }
  }
}

Keluaran:

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

Hai Kevin. Mengapa bukan Ekspresi Lambda?
Vale

@ Hai Hi Vale. Karena saya seorang programmer Java 7 mode lama. :) Jika Anda memiliki jawaban Java 8 atau 9 yang sedikit berbeda dari jawaban saya, jangan ragu untuk mempostingnya.
Kevin Cruijssen

2
@Vale (dia aneh seperti itu: P)
Shaun Wild

1
saya pikir jika Anda mengubah x=-1;++x<ike x=0;x++<iAnda dapat mengurangi oleh satu byte
user902383

1
Anda juga dapat menggantinya "\\" : "/"dengan 92:'/';)
Shaun Wild

3

R, 47 46 byte

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

Di R, Anda harus melarikan diri dari garis miring terbalik. argumennya sepjuga harus ditentukan secara lengkap karena muncul setelahnya .... Dengan demikian, sangat sedikit peluang untuk menyelamatkan karakter :(

Berkat bouncyball untuk bermain golf sejauh satu byte.


1
Simpan satu byte dengan menggunakan pengindeksan:n=scan();cat(rep(c('\\','/')[n%%2+1],n),sep='')
bouncyball

3

T-SQL 50 byte

Tentu saja tidak di STDINsini, jadi mari kita asumsikan INTvariabel hardcode seperti ini: DECLARE @ INTmaka solusinya adalah:

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

3

Pip , 8 byte

"\/"@aXa

Mudah. Menggunakan pengindeksan modular untuk memilih karakter dan pengulangan string untuk melipatgandakannya.Cobalah online!


Pertanyaan ini menyajikan perbandingan yang menarik antara Pip, Pyth , dan Jelly , dua yang terakhir masing-masing memiliki skor 5 byte. Ketiga bahasa memiliki output implisit, dengan operator char tunggal untuk pengindeksan modular dan pengulangan string, dan tidak ada persyaratan untuk melarikan diri backslash dalam string. Namun ada dua perbedaan utama:

  1. Dalam keadaan tertentu, Pyth dan Jelly hanya perlu satu pembatas untuk mendefinisikan string;
  2. Pyth dan Jelly memiliki sintaksis sehingga input tidak perlu secara eksplisit diwakili dalam kode (meskipun untuk alasan yang sangat berbeda, seperti dijelaskan Maltysen kepada saya ).

Tidak satu pun dari fitur-fitur ini yang kemungkinan muncul di Pip 1 (saya tidak suka estetika pembatas tidak seimbang, dan sintaks bebas poin atau operan implisit tampak seperti mereka akan terlalu asing bagi parser ekspresi infiks saya), tapi saya ' Aku baik-baik saja dengan memainkan biola ketiga. Meskipun "keterbacaan" sangat relatif saat bermain golf, saya berpendapat bahwa tiga byte tambahan ini membuat program Pip lebih mudah dipahami dalam sekejap - dan dalam buku saya, itu merupakan tradeoff yang berharga.

1 Meskipun, string karakter tunggal di Pip menggunakan 'pembatas tunggal , terinspirasi oleh CJam dan dengan mengutip dalam Lisp.


Saya tidak yakin bahwa keterbacaan merupakan nilai tambah dalam kode golf? Tidak dengan biaya byte !
GreenAsJade

@GreenAsJade Saya berharap banyak orang merasakan hal yang sama. Saya hanya akan membuat satu perbedaan:! code golf= golflang design. Sekarang Anda mungkin berpendapat bahwa prinsip yang sama (lebih pendek selalu lebih baik) berlaku untuk desain bahasa juga. Saya hanya mengatakan bahwa bagi saya, kegunaan dan bahkan estetika adalah pertimbangan.
DLosc

Kiat pro untuk membuat bahasa golf: jangan gunakan infiks
Cyoce


pyth tidak memiliki sintaks gratis point implisit. itu bekerja hampir sama dengan cara kerjanya di python, membuatnya bisa dibaca namun pendek. komentar Anda tentang pembatas yang tidak seimbang di sisi lain cukup benar
Maltysen




2

SpecBAS - 28 byte

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

ODDmengembalikan 1 jika angka ganjil, lalu menggunakannya sebagai indeks untuk mencetak karakter yang benar dan beberapa kali. Harus menambahkan 1 sebagai string SpecBAS mulai dari karakter 1.


2

Java 8, 56 byte

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

Saya ingin mengucapkan terima kasih kepada @Kevin Cruijssen untuk mahir golf jawaban saya lebih lanjut.

Program Tes Tidak Berkumpul

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

Sebenarnya 10 byte

Saran bermain golf diterima. Cobalah online!

;'\'/2(%I*

Bagaimana itu bekerja

       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.
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.