Squiggly Sırası


29

Bu zorluğun üstesinden gelmek için Adnan’a verilen tüm krediler.

Benim son meydan okuma, önce ben tatilinde gitmek .

Görev

Verilen pozitif tamsayı n, eğer ntek ise , /bunu birçok kez tekrarlayın ; eğer öyleyse n, tekrarla\ bunu birçok kez .

(Cidden, test senaryoları bu tanımdan çok daha net olacaktır, bu yüzden test testlerine bakın.)

gözlük

testcases

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

Yanıtlar:


17

Javascript, 22 bayt

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

Anonim bir işlev tanımlar.

*Javascript sadece tekrarlanan dizeleri. İç çeker


1
Sonunda doğru operatörü buldun
Leaky Nun

@LeakyNun Neden bahsediyorsun?
DanTheMan

Üçlü operatörü karakter seçmek için kullanıyordun, değil mi?
Sızdıran Rahibe,

@ LeakyNun Başlangıçta, evet, ama sohbete bakarsanız, bunu bir dakika sonra da gönderdim.
DanTheMan

2
Ya bir değişkene işlev atayabilirsiniz @Jordumus: f=n=>...doğrudan diyebiliriz: (n=>...)(5). (Ya da Node.js REPL kullanıyorsanız this._, girilen son şeyin anlamına gelen kullanabilirsiniz. )
DanTheMan



9

Perl, 20 bayt

İçin +1 içerir -p

STDIN'de giriş ile çalıştırın:

squigly.pl <<< 6

squigly.pl

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

Bu sadece benim Perl versiyonum olabilir (hala 5.10'dayım), fakat fazladan eklemediğim sürece bu bir hata veriyor; sonuna kadar. Sanırım bunun için yarı-kolonu ayırıcı olarak kullanıyorsunuz ve ifadeyi bitirmek için bir
taneye

@ theLambGoat Bu -pseçeneği kullandığınızdan emin misiniz ? Kullandığım ;tam da transliterasyon içinde -pörtük vardır ;ben 1 byte daha kaydedebilmek için kodun sonuna. Bu, en azından 5.6 -p
perl'den

@ TheLambGoat Mm, perl 5.10 ile eski bir redhat buldum. Ya bu bir redhat yaması ya da gerçekten 5,10 civarında işe yaramadı (eminim eski perls'de çalıştığından ve daha yeni perls'de çalıştığından eminim)
Ton Hospel

SUSE Enterprise Server 11 ile çalışıyorum, bu yüzden sadece redhat bir şey değil. Ancak bazı versiyonlarda çalıştığı sürece hala geçerli bir cevap olması gerektiğini düşünüyorum. (Ayrıca şu anda erişebildiğim tek diğer sürüm olan
5.08’de

1
;Tarafından eklenen bu hile -poldukça awsome, aferin.
Dada


7

C #, 42 bayt

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

Doğru karakteri seçtikten sonra, tekrarlanan nzamanlardan bu karakterden oluşan yeni bir dize oluşturur .


7

PHP, 38 bayt

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

(değişken 38 bayt)

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

(değişken 38 bayt)

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

(40 bayt değişken)

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



6

J, 10 bayt

#'\/'{~2|]

Bu altı tren fiili olup, şunlardan oluşur:

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

Bu #ve arasında bir kanca ('\/' {~ 2 | ]); bir kanca (f g) ygenişler y f (g y), böylece y # (... y)tek karakter için bir ykarakter listesi veren genişler .

İkinci bölüm, aşağıdakilerden oluşan 5 trenidir:

'\/' {~ 2 | ]

Bu iki çatal değerlendirir:

'\/' {~ (2 | ])

İç çatal, 2 | ]iki modüldür. Bu nedenle dış çatal:

'\/' {~ mod2

Hangi ( {~) mod2 index ( mod2) dizeden alır /.

Ardından kancayı yukarıdan kullanın:

y # (apt char)

Bu istediğimizi verir ve biz yapılır.


6

Haskell, 25 bayt

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

Damien ile birlikte -1 bayt cycle.


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

@Damien Wow, çevrimi nasıl unuttum?
xnor

Bilmiyorum. Ama seni bir kez "dövmek" fırsatını bulduğuma sevindim :)
Damien

6

Mathematica, 34 32 28 bayt

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

Anonim işlev Girdi olarak bir tamsayı alır ve çıktı olarak bir karakter listesi döndürür.


Kullanabilirsiniz ~Table~#.
Martin Ender

10.2'de eklendiğini düşünüyorum.
Martin Ender,

Ayrıca, hendek <>""ve bir karakter listesini döndürebilirsiniz düşünüyorum .
Martin Ender

1
@MartinEnder Ayrıca ~Do~Infinity10.2+ de eklenmiş
olmalılar

5

Powershell, 30 27 bayt

Güncelleştirme:

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

Geçiş paramsayesinde, timmyd .


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

veya biraz daha okunabilir

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

Ölçek:

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

3
PPCG'ye Hoşgeldiniz! Buralarda başka bir PowerShell kullanıcısı görmek güzel. Girdi param($n)yerine, $args27 bayt için aşağıdaki gibi giriş yaparak birkaç baytı tıraş edebilirsiniz -param($n)('\','/')[$n%2]*$n
AdmBorkBork

5

Mathematica, 29 bayt

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

Cruelly [[1]], bir fonksiyonun ilk argümanını [[0]]döndürürken, işlevi (başın) döndürürken, "\\""değerlendirilen" olarak adlandırılan garip bir şekilde geçerli fonksiyona uygulanan gerçeği kullanır "/".


Formdaki bir a[b]şeyin yalnızca kafa (dizin ) ve öğe (dizin ) içeren genel bir ifade olduğunu ve işlevlerin yalnızca özel ifade biçimleri olduğunu düşünmeniz biraz daha gariptir (aslında, işlevlerin olmadığını söylemek daha doğru olur ' t İfadeler hiç, ancak basitçe, genellikle biçimli ifadeleri dönüştürmek için kurallardır ). :)a0b1f[x...]
Martin Ender

2
Bu sitede kötüye kullanılan birçok dil gördüm, ancak sanırım bu gördüğüm Mathematica'nın ilk suiistimali. Aferin!
DanTheMan



4

Brachylog , 15 bayt

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

Çevrimiçi deneyin!

açıklama

: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 bayt

ri_"\/"=*

Çevrimiçi deneyin!

açıklama

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

> <> (Balık), 30 Bayt

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

Bu dili ilk defa kullanıyorum, ancak akış yönünü değiştirmek için / çıktısının bir parçası veya aynasını kullanarak koşullu olarak en azından küçük bir oda biriktirdiğimi düşünüyorum. Muhtemelen hala korkunç derecede verimsiz olsa da, en azından biraz daha fazla kesilebileceğini hissediyorum.

Giriş başlangıç ​​yığınıdır, çıkış stdout

Çevrimiçi deneyin!


Programlama Bulmacaları ve Kod Golf'üne Hoş Geldiniz!
Dennis,

@Dennis Teşekkürler! Hoşgeldin için teşekkür ederim.
Callum Kerr

4

Dyalog APL , 11 bayt

⎕IO←0Birçok sistemde varsayılan olanı gerektirir .

⊢⍴'\/'⊃⍨2|⊢

argüman

yeniden şekillendirir (tekrarlar)

'\/'⊃⍨ tarafından seçilen "/" dizesi

2|⊢ argüman ikiye bölündüğünde, kalan bölüm

TryAPL çevrimiçi!


Güzel! J. ile çok benzer
Conor O'Brien

@ ConorO'Brien Evet, tek fark, J'deki 2 trenin kanca olması, Dyalog'da iken, açık bir sol dişe ihtiyaç duymasıdır.
Adám

Ah, tartışmanın neden orada olduğunu merak ediyordum.
Conor O'Brien,

1
Sonunda benim için doğru şekilde işlenen tüm karakterlerin yer aldığı bir APL cevabı!
Cyoce

@Cyoce Evet, keşke SE'de yazı tiplerini belirleyebilmeyi (ve yerleştirmeyi) diliyorum.
Adám

3

Java 7, 68 65 bayt

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

@ User902383 ve @SeanBean sayesinde 3 bayt kaydedildi .

Tıpkı bu cevapta olduğu gibi , en kısa kod-golf döngü ve baskı gibi görünüyor. Her ikisi de özyinelemeli ve
void c(int i){System.out.print(new String(new char[i]).replace("\0",i%2<1?"\\":"/"));}
daha uzun gibi görünüyor.

Ungolfed ve test kodu:

Burada dene.

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

Çıktı:

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

Merhaba kevin. Neden Lambda İfadesi Değil?
Vale,

@Vale Hi Vale. Çünkü ben eski moda bir Java 7 programcısıyım. :) Cevabımdan biraz farklı olan bir Java 8 veya 9 cevabınız varsa, cevaplamaktan çekinmeyin.
Kevin Cruijssen

2
@Vale (O kadar garip: P)
Shaun Wild

1
i değiştirirseniz düşünmek x=-1;++x<iiçin x=0;x++<isize bir byte tarafından azaltabilir
user902383

1
Ayrıca ; "\\" : "/"ile değiştirebilirsiniz 92:'/';)
Shaun Wild

3

R, 47 46 bayt

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

R'de ters eğik çizgilerden kaçmanız gerekir. Argümanın sepda bundan sonra geldiğinden beri tam olarak belirtilmesi gerekir.... . Böylece karakterleri kurtarmak için can sıkıcı birkaç fırsat :(

Bir bayt uzak golf oynamak için zıplayan top için teşekkürler.


1
İndekslemeyi kullanarak bir bayttan n=scan();cat(rep(c('\\','/')[n%%2+1],n),sep='')
tasarruf edin

3

T-SQL 50 bayt

Tabii ki hayır STDINburada, öyleyse şöyle bir sabit kodlanmış INTdeğişkeni varsayalım : DECLARE @ INTo zaman çözüm:

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

3

Pip , 8 bayt

"\/"@aXa

Basit. Çoğaltılacak karakter ve dize tekrarını seçmek için modüler indeksleme kullanır. Çevrimiçi deneyin!


Bu soru Pip, Pyth ve Jelly , her ikisi de 5 byte puan alan ilginç bir karşılaştırma sunuyor . Üç dilin tümü, modüler indeksleme ve dize tekrarı için tek karakterli operatörlerle ve dizelerde ters eğik çizgiden kaçma zorunluluğu olmayan örtük bir çıktıya sahiptir. Yine de iki önemli fark var:

  1. Belirli koşullar altında Pyth ve Jelly bir dize tanımlamak için yalnızca bir sınırlayıcıya ihtiyaç duyar;
  2. Pyth ve Jelly, girişin kodda açıkça gösterilmesi gerekmeyecek şekilde sözdizimine sahiptir (ancak Maltysen'in bana açıkladığı gibi, çok farklı nedenlerden dolayı ).

Bu özelliklerden hiçbirinin Pip 1'de görünmesi muhtemel değildir (dengesiz sınırlandırıcıların estetiğini sevmiyorum ve noktasuz sözdizimi veya örtülü işlenenler, benim ek ifade çözümleyicime yabancı gibi görünüyorlar), ama ben Tamam üçüncü keman çalmakla tamam. Golf oynarken "okunabilirlik" oldukça göreceli olsa da, bu üç ekstra baytın Pip programının bir bakışta anlaşılmasını çok daha kolay hale getirdiğini savunuyorum - ve kitabımda bu çok değerli bir sonuç.

1 Bununla birlikte, 'Pip'deki tek karakterli dizeler , CJam'dan ilham alınarak ve Lisp'te alıntı yaparak tek bir sınırlayıcı kullanır .


Okunabilirliğin kod golf açısından bir artı olduğundan emin değilim? Bayt pahasına değil !
GreenAsJade,

@GreenAsJade Birçok insanın aynı hissetmesini bekliyorum. Sadece bir ayrım yapardım:! code golf= golflang design. Şimdi, aynı prensibin (her zaman daha kısadır) dil tasarımında da geçerli olduğunu iddia edebilirsiniz. Ben sadece benim için, kullanılabilirlik ve hatta estetik söylüyorum vardır hususlar.
DLosc

Bir golf dili yapmak için profesyonel ipucu: infix kullanmayın
Cyoce


pyth, örtük nokta ücretsiz sözdizimine sahip değil. Python ile aynı şekilde çalışır, kısa ve okunabilir hale getirir. Öte yandan, dengesiz sınırlayıcılar hakkındaki yorumunuz oldukça doğrudur
Maltysen




2

SpecBAS - 28 bayt

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

ODDsayı tek ise 1 değerini döndürür, sonra doğru karakteri n sayıda yazdırmak için bunu bir dizin olarak kullanır. SpecBAS dizgileri karakter 1'den başlarken 1 eklemek zorundasınız.


2

Java 8, 56 bayt

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

Cevabımı daha fazla golf oynadığı için @Kevin Cruijssen'e teşekkür ediyorum.

Ungolfed Test Programı

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

Aslında 10 bayt

Golf önerileri kabul edilir. Çevrimiçi deneyin!

;'\'/2(%I*

Nasıl çalışır

       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.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.