Napisz efekt domina

25

Używając najmniejszej liczby znaków Unicode, napisz funkcję, która akceptuje trzy parametry:

  • Łączna liczba domino
  • nth dotknięte domino
  • Przewróć kierunek dotkniętego domina ( 0lub Lw lewo 1lub Rw prawo)

Gdy domino zostanie obalone, musi również obalić pozostałe domino w tym samym kierunku.

Powinieneś wyprowadzać domino |reprezentując domino stojące \i /reprezentując domino obalone odpowiednio po lewej i prawej stronie.

Przykłady

10, 5, 1powinien wrócić ||||//////
6, 3, 0powinien wrócić\\\|||

rybo111
źródło
Czy trzecim parametrem powinien być ciąg znaków, czy bool / int będzie robić jak 0: left, 1: right?
user80551
Twój przykład sugeruje, że jeśli jest 10 domino, a 5 jest przewróconych w prawo, powinniśmy wyświetlić sześć z dziesięciu przewróconych domino.
algorytmshark
1
@ algorytmshark Myślę, że powinniśmy pokazać wynik, jeśli piąte domino zostanie przewrócone w prawo.
user80551
@ rybo111 Czy możesz pozwolić, aby trzeci parametr był liczbą całkowitą, ponieważ może to skrócić operacje porównywania. Po prostu if(third_parameter)zamiastif(third_paramter=='l')
user80551
Czy możemy wybrać kolejność parametrów?
Justin

Odpowiedzi:

14

Rubinowy, 38 (46) znaków

e=->n,k,r{k-=r;'\|'[r]*k+'|/'[r]*n-=k}

Ta funkcja przyjmuje kierunek jako liczbę całkowitą ( 1dla prawej, 0dla lewej). Funkcja, która pobiera ciąg, ma 8 znaków dłużej:

d=->n,k,r{n-=k;r<?r??\\*k+?|*n :?|*~-k+?/*-~n}

Przykłady użycia:

puts e[10, 5, 1] # or d[10, 5, 'r']
||||//////
puts e[10, 5, 0] # or d[10, 5, 'l']
\\\\\|||||
Ventero
źródło
dlaczego w drugim przykładzie zostało już tylko 5 domino?
Clyde Lobo,
1
@ClydeLobo Ponieważ zaczynasz od pozycji 5 i przewracasz domino w lewo, co z kolei przewraca 4 domino w lewo, w sumie 5. W pierwszym przykładzie, zaczynając od pozycji 5, powala 6 domino: Ten w pozycji 5 plus 5 po prawej stronie.
Ventero,
8

Haskell, 70

f R i l=(i-1)#'|'++(l-i+1)#'/'
f L i l=i#'\\'++(l-i)#'|'
(#)=replicate

zakładając, że jest typu kierunek , który ma konstruktorów R i L .

dumny haskeller
źródło
8

J - 32 26 znaków

J nie może obsłużyć więcej niż dwóch argumentów bez użycia listy i nie może obsłużyć niejednorodnych list bez boksu. Zatem posiadanie danych wejściowych jako listy trzech liczb całkowitych jest idealne. Kolejność parametrów jest odwrotna do standardowej: 0 dla lewej lub 1 dla prawej, następnie pozycja, a następnie całkowita liczba domino. Powodem tego jest to, że J ostatecznie przejdzie przez nie od prawej do lewej.

{`(('|/\'{~-@>:,:<:)1+i.)/

Oto co się dzieje. F`G/zastosowane do listy x,y,zoceni x F (y G z). y G zkonstruuje oba możliwe sposoby obalenia domina, a następnie Fużywa, xaby wybrać, który z nich ma zostać użyty.

Poniżej znajduje się tam iz powrotem z J REPL, który wyjaśnia, w jaki sposób funkcja jest budowana razem: wcięte linie są wprowadzane do REPL, a odpowiedzi są wyrównane z lewym marginesem. Przypomnij sobie, że J ocenia dokładnie od prawej do lewej, chyba że istnieją pareny:

   1 ] 3 (]) 10            NB. ] ignores the left argument and returns the right
10
   1 ] 3 (] 1+i.) 10       NB. hook: x (F G) y  is  x F (G y)
1 2 3 4 5 6 7 8 9 10
   1 ] 3 (>: 1+i.) 10      NB. "greater than or equal to" bitmask
1 1 1 0 0 0 0 0 0 0
   1 ] 3 (-@>: 1+i.) 10    NB. negate
_1 _1 _1 0 0 0 0 0 0 0
   1 ] 3 (<: 1+i.) 10      NB. "less than or equal to"
0 0 1 1 1 1 1 1 1 1
   1 ] 3 ((-@>:,:<:)1+i.) 10          NB. laminate together
_1 _1 _1 0 0 0 0 0 0 0
 0  0  1 1 1 1 1 1 1 1
   1 ] 3 (('|/\'{~-@>:,:<:)1+i.) 10   NB. turn into characters
\\\|||||||
||////////
   1 { 3 (('|/\'{~-@>:,:<:)1+i.) 10   NB. select left or right version
||////////
   {`(('|/\'{~-@>:,:<:)1+i.)/ 1 3 10  NB. refactor
||////////
   {`(('|/\'{~-@>:,:<:)1+i.)/ 0 3 10
\\\|||||||

Kosztem kilku znaków możemy ustawić kolejność na standardową: wystarczy dołączyć @|.na końcu funkcji:

   |. 10 3 1
1 3 10
   {`(('|/\'{~-@>:,:<:)1+i.)/@|. 10 3 1
||////////

Dostosowanie tego do pracy z argumentem ciągu dla kierunku byłoby jednak znacznie droższe.

algorytmshark
źródło
Wiem, że minęło trochę czasu, odkąd napisałeś tę odpowiedź, ale jej struktura jest bardzo fajna. Naprawdę podoba mi się sposób, w jaki wykorzystałeś gerunds, a /także sposób, w jaki budujesz dwa wyjścia i wybierasz żądane. Wydaje mi się, że czuję, że brakuje mu uznania, na które zasługuje.
cole
Co powiedział @cole, byłem zachwycony.
FrownyFrog,
7

PowerShell, 66

filter d($n,$k,$d){"$('\|'[$d])"*($k-$d)+"$('|/'[$d])"*($n-$k+$d)}

Prawdopodobnie ten sam pomysł wszyscy mieli.

  • Pobiera 0 lub 1 jako parametr kierunku (odpowiednio dla lewej i prawej)
Joey
źródło
6

Golfscript (44 53 )

Mój pierwszy w historii program Golfscript. Zajęło mi to znacznie więcej czasu, niż powinno i prawdopodobnie można to zrobić w mądrzejszy, bardziej zwięzły sposób (jestem pewien, że ktoś to udowodni :)):

:d;:j;:^,{:x j<d&'\\'{x^j)->d!&'/''|'if}if}%

Przykładowe dane wejściowe to 10 5 0.

Nie golfowany:

:d;:j;:^      # save input in variables and discard from stack, except total length ^
,             # create an array of numbers of length ^
{             # start block for map call
  :x          # save current element (= index) in variable
  j<          # check whether we are left of the first knocked over domino
  d           # check whether the direction is to the left
  &           # AND both results
  '\\'        # if true, push a backslash (escaped)
  {           # if false, start a new block
    x^j)->    # check whether we are on the right of the knocked over domino
    d!        # check whether the direction is to the right
    &         # AND both results
    '/'       # if true, push a slash
    '|'       # if false, push a non-knocked over domino
    if
  }
  if
}%            # close block and call map
Ingo Bürk
źródło
1
Dowód zrobiony ;-), chociaż nie jestem jeszcze zadowolony z mojego rozwiązania.
Howard,
1
Kilka porad: można wybrać dsię 0/ 1zamiast 'l'/ 'r'co daje pewną krótszy kod. W przeciwnym razie, jeśli przechowujesz d'l'=w zmiennej, oyu może użyć jej zamiast drugiego porównania z d. W ramach tego terminu x i jmożna zapisać obie białe spacje, jeśli zamiast nazwy używa się niealfanumerycznej nazwy zmiennej i.
Howard,
@Howard Dzięki za wskazówki! Wybrałem 'l'/ 'r'ponieważ w tym czasie nie widziałem jeszcze, że możemy swobodnie używać liczb całkowitych. Nie alfanumeryczna sztuczka jest zręczna, dzięki! Może zaktualizuję odpowiedź później.
Ingo Bürk
4

GolfScript, 28 23 znaków

'\\'@*2$'|/'*$-1%1>+@/=

Argumenty na szczycie stosu, spróbuj online :

> 10 5 1
||||//////

> 10 5 0
\\\\\|||||
Howard
źródło
Niesamowity. Uwielbiam uczyć się od wszystkich tych rozwiązań w golfa :)
Ingo Bürk
4

Python - 45 52

Wymaga to 1dla prawej i 0lewej.

x=lambda n,k,d:'\\|'[d]*(k-d)+"|/"[d]*(n-k+d)

Oto wersja, która trwa ri lprawidłowo, na 58 :

def x(n,k,d):d=d=='r';return'\\|'[d]*(k-d)+"|/"[d]*(n-k+d)

Niektóre przykłady użycia ...

>>> print(x(10,3,0))
\\\|||||||
>>> print(x(10,3,1))
||////////
>>> print(x(10,5,1))
||||//////
>>> print(x(10,5,0))
\\\\\|||||
>>> print(x(10,3,0))
\\\|||||||
cjfaure
źródło
4

JS (ES6) - 79 74 72 65 62

dzięki @nderscore!

Trzeci parametr jest wartością logiczną (0: lewy / 1: prawy)

d=(a,b,c)=>"\\|"[a-=--b,c].repeat(c?b:a)+"|/"[c].repeat(c?a:b)

// Test
d(10,3,1); // => "||////////"
d(10,3,0); // => "\\\\\\\\||"
Xem
źródło
1
ten wpis może być kartą referencyjną dla ECMAScript 6: D
bebe
@bebe haha, i to nawet nie jest ostateczna forma. ES6 może być bardzo brudny.
xem
1
65:d=(a,b,c)=>"\\"[r="repeat"](!c&&a-b+1)+"|"[r](--b)+"/"[r](c&&a-b)
nderscore,
1
świetny! Znalazłem też tę szaloną rzecz, ale jest ona dłuższa (67): d = (a, b, c, d = a-b + 1) => "\\ |" [c] .repeat (c? B-1: d ) + "| /" [c] .repeat (c? d: b-1)
xem. 10'14
Nie sądzę, żeby warto było powtarzać aliasing. [r='repeat'][r]15 znaków. .repeat.repeat14 znaków
edc65
3

Python2 / 3 - 54

Ta ostatnia dodana reguła była całkiem niezła (0/1 zamiast „l” / „r”). Zrobił mój faktycznie mniejszy niż istniejące rozwiązanie python. 0 jest w lewo, 1 jest w prawo

def f(a,b,c):d,e='\|/'[c:2+c];h=b-c;return d*h+e*(a-h)

# Usage:
print(f(10,5,1)) # => ||||//////
print(f(10,5,0)) # => \\\\\|||||
pseudonim117
źródło
3

Haskell , 42 bajty

(n%k)b=["\\|/"!!(b-div(k-b-c)n)|c<-[1..n]]

Wypróbuj online!

Pobiera dane wejściowe jak w (%) n k bprzypadku ndomina, kprzewrócone domino b.

Znajduje znak w każdej pozycji c, od 1do n, używając wyrażenia arytmetycznego do obliczenia indeksu znaku 0, 1 lub 2.

Przypadki testowe wzięte stąd .


Haskell , 44 bajty

(n%k)b=take n$drop(n+n*b+b-k)$"\\|/"<*[1..n]

Wypróbuj online!

Ciekawa strategia, która okazała się nieco dłuższa. Generuje ciąg "\\|/"<*[1..n]z nkolejnymi kopiami każdego symbolu, a następnie pobiera plasterek nciągłych znaków o ustalonej arytmetycznie pozycji początkowej.

xnor
źródło
2

Python 2.7, 68 65 61 59 58 znaków

Użyj d=1dla lewej i d=0prawej

f=lambda a,p,d:['|'*(p-1)+'/'*(a-p+1),'\\'*p+'|'*(a-p)][d]

Uwaga: Dzięki @TheRare za dalsze granie w golfa.

użytkownik80551
źródło
1
Dlaczego nie d and'\\'...or'/'...?
patrz
Mógłbyś także zrobić('\\'...,'/'...)[d]
patrz
@ TheRare Potrzebowałbym dwóch z tych list.
user80551
Nie wydaje mi się f=lambda a,p,d:('|'*(p-1)+'/'*(a-p+1),'\\'*p+'|'*(a-p))[d]
patrz
@ TheRare Also, I don't think your code works when falling left.Czy możesz podać test, aby to udowodnić?
user80551
2

JavaScript, 46 znaków

Wygląda na to, że oszustwo robi 0 = 1, a 1 = r, ale jest. Zmniejszyłem to z niewielką rekurencją.

f=(a,p,d)=>a?'\\|/'[(p-d<1)+d]+f(a-1,p-1,d):''

edycja: brakowało oczywistej postaci

użytkownik29119
źródło
2

JavaScript (ES6) 61 63

Edytować To było buggy - wstyd mnie.

Nie różni się tak bardzo od @xem, ale sam go znalazłem i jest krótszy. Parametr d wynosi 0/1 dla lewej / prawej

F=(a,p,d,u='|'.repeat(--p),v='\\/'[d].repeat(a-p))=>d?u+v:v+u

Przetestuj w konsoli Firefox

for(i=1;i<11;i+=3) console.log('L'+i+' '+F(10,i,0) + ' R'+i+' '+ F(10,i,1))

Wydajność

L1 \\\\\\\\\\ R1 //////////
L4 \\\\\\\||| R4 |||///////
L7 \\\\|||||| R7 ||||||////
L10 \||||||||| R10 |||||||||/
edc65
źródło
1
Powinno być --p?
nderscore
@nderscore tak powinno, źle parametry, głupio mnie.
edc65
2

Perl, 67 65 znaków

sub l{($t,$p,$d)=@_;$p-=$d;($d?'|':'\\')x$p.($d?'/':'|')x($t-$p)}

Przypisz pierwsze trzy parametry (suma, pozycja, kierunek jako liczba całkowita [0 w lewo, 1 w prawo]). Dodatki trafiają do eteru. Odejmij 1 od pozycji, jeśli zmierzamy w prawo, aby domino w pozycji X również zostało odwrócone.

titanofold
źródło
1
wymienić $p--if$dz $p-=$dstracić dwa znaki :)
chiński Perl goth
2

Haskell , 57 bajtów

4 bajty zapisane dzięki tej wskazówce

f 0 b _=[]
f a b c=last("|/":["\\|"|b>c])!!c:f(a-1)(b-1)c

Wypróbuj online!

Haskell , 69 61 60 58 bajtów

(0!b)_=[]
(a!b)c|b==c=a!b$c+1|1>0="\\|/"!!c:((a-1)!(b-1))c

Wypróbuj online!

Niezbyt złożona odpowiedź, ale bije obie z istniejących odpowiedzi Haskella.

Kreator pszenicy
źródło
2

R , 75 68 61 57 bajtów

Anonimowa funkcja. W razie zainteresowania opublikuję pełniejsze wyjaśnienie.

function(t,n,d)cat(c("\\","|","/")[(1:t>n-d)+1+d],sep="")

Wypróbuj online!

rturnbull
źródło
2

Haskell , 51 bajtów

f a b c=("\\|"!!c<$[1..b-c])++("|/"!!c<$[b-c..a-1])

a= liczba domino, b= indeks dotkniętego 1 na podstawie, c= kierunek ( 0jest lewy i 1prawy).

Wypróbuj online!

Max Yekhlakov
źródło
Definiowanie operatora Infix działa również na więcej niż dwa wejścia: (a#b)c= ....
Laikoni
1

PHP - 64

function f($a,$b,$c){for($w='\|/';++$i<=$a;)echo$w[$c+($i>$b)];}

Prosta pętla i echo postaci.

Generuje a Notice: Undefined variable: i, oto kolejna wersja wyciszająca błąd (65 znaków):

function f($a,$b,$c){for($w='\|/';@++$i<=$a;)echo$w[$c+($i>$b)];}

Wersja bez żadnego błędu (69 znaków):

function f($a,$b,$c){for($w='\|/',$i=0;++$i<=$a;)echo$w[$c+($i>$b)];}

Inne funkcje w PHP:

sprintf/ printfpadding

function f($a,$b,$c){printf("%'{${0*${0}=$c?'|':'\\'}}{$a}s",sprintf("%'{${0*${0}=$c?'/':'|'}}{${0*${0}=$a-$b+$c}}s",''));}

wypełnianie przez str_pad/ str_repeatfunkcje

function f($a,$b,$c){$f='str_repeat';echo$f($c?'|':'\\',$b-$c).$f($c?'/':'|',$a-$b+$c);}
function f($a,$b,$c){echo str_pad(str_repeat($c?'|':'\\',$b-$c),$a,$c?'/':'|');}

Używając obu printfi str_repeatfunkcji

function f($a,$b,$c){printf("%'{${0*${0}=$c?'|':'\\'}}{$a}s",str_repeat($c?'/':'|',$a-$b+$c));}
function f($a,$b,$c){$w='\|/';printf("%'$w[$c]{$a}s",str_repeat($w[$c+1],$a-$b+$c));}
NPlay
źródło
1

Scala 75 znaków

def f(l:Int,p:Int,t:Char)=if(t=='l')"\\"*p++"|"*(l-p) else "|"*(l-p):+"/"*p
jcw
źródło
1

CJam - 20

q~
:X-_"\|"X=*o-"|/"X=*

Główny kod znajduje się w drugim wierszu, pierwszy wiersz służy tylko do pobierania parametrów ze standardowego wejścia (w przeciwnym razie należy umieścić parametry w kodzie).

Wypróbuj na http://cjam.aditsu.net/

Przykłady:

12 4 1
|||/////////

8 5 0
\\\\\|||

Wyjaśnienie:

:Xprzechowuje ostatni parametr (kierunek 0/1) w zmiennej X
-odejmuje X od pozycji przewrócenia, uzyskując długość pierwszej sekwencji znaków (nazwijmy to L)
_sprawia, że ​​kopia L
"\|"X=pobiera znak do użycia w pierwszej kolejności: \dla X = 0 |do x = 1
*powtarza się, że czasy postać L
odrukuje łańcucha, usuwanie go ze stosu
-odejmuje L od liczby domina, uzyskując długość drugiej sekwencji znaków (Zawołajmy to R)
"|/"X=uzyskuje znak użyj dalej: |dla X = 0 i /dla X = 1
*powtarza ten znak R razy

aditsu
źródło
1

Common Lisp

Nie wygra to w golfa kodowego, ale podkreśla dyrektywę dotyczącą formatu uzasadnienia Common Lisp:

(lambda (n p d &aux (x "\\|/"))
   (format t "~v,,,v<~v,,,v<~>~>" n (aref x d) (+ d (- n p)) (aref x (1+ d))))

Arytmetyka nie jest zła: njest całkowitą liczbą domino; pjest pozycją pierwszego obalonego domina; djest albo, 0albo 1reprezentuje lewą i prawą (jak dozwolone w komentarzach) i jest używany jako indeks do x; xjest ciągiem \, |i /. Łańcuch formatu używa dwóch (zagnieżdżonych) dyrektyw justowania, z których każda pozwala na dopełnianie znaku. A zatem:

(dotimes (d 2)
  (dotimes (i 10)
    ((lambda (n p d &aux (x "\\|/"))
       (format t "~v,,,v<~v,,,v<~>~>" n (aref x d) (+ d (- n p)) (aref x (1+ d))))
     10 (1+ i) d)
    (terpri)))

\|||||||||
\\||||||||
\\\|||||||
\\\\||||||
\\\\\|||||
\\\\\\||||
\\\\\\\|||
\\\\\\\\||
\\\\\\\\\|
\\\\\\\\\\
//////////
|/////////
||////////
|||///////
||||//////
|||||/////
||||||////
|||||||///
||||||||//
|||||||||/
Joshua Taylor
źródło
1

PHP, 89 znaków

function o($a,$p,$d){for($i=0;$i<$a;$i++)echo$d==0?($i+1>$p)?'|':'\\':($i+1<$p?'|':'/');}

Tylko dlatego, że kocham PHP.

EDYCJA: Poniższy kod robi to samo.

function dominoes ($number, $position, $direction) {
    for ($i=0; $i<$number; $i++){
        if ($direction==0) {
            if (($i+1) > $position) {
                echo '|';
            } else {
                echo '\\';
            }
        } else {
            if (($i+1) < $position) {
                echo '|';
            } else {
                echo '/';
            }
        }
    }
}
Wódz plemienia
źródło
Masz bardziej szczegółową wersję?
Martijn
1
@Martijn, edytowałem mój post, aby go uwzględnić.
TribalChief
Teraz widzę, co robi. Nic nadzwyczajnego, ale +1 :)
Martijn
Dzięki! Rozwiązania @NPlay wyglądają jednak fantazyjnie!
TribalChief
kilka wskazówek golfowych: 1) Niepotrzebne nawiasy na ($i+1>$p). 2) Przepisanie wyrażenia trójskładnikowego w celu $d?($i+1<$p?'|':'/'):$i+1>$p?'|':'\\'zapisania kolejnych 3 bajtów. Lub po prostu usuń ==0i odwróć wskazówki. 3) $i++<$aMożesz usunąć $i++warunek z posta i użyć $izamiast $i+1(-6 bajtów). 4) $i=0nie jest konieczne; ale --nmusisz usunąć powiadomienia (opcja ), jeśli je usuniesz (-4 bajty).
Tytus
1

J , 23 21 19 bajtów

'|/\'{~{:-(>i.)~`-/

Wypróbuj online!

Dane wejściowe to lista liczb całkowitych w standardowej kolejności.

FrownyFrog
źródło
1

05AB1E , 19 bajtów

αα©„\|³è×¹®-„|/³è×J

Nadal mam wrażenie, że jest trochę długi, ale działa .. I lepszy niż początkowe 23 bajtowe rozwiązanie, które miałem z konstrukcją if-else, którą szybko upuściłem ..

Kolejność wejścia jest taki sam jak w wyzwaniu: długość całkowita, indeks, 1/ 0na lewo / prawo.

Wypróbuj online lub sprawdź oba przypadki testowe .

Wyjaśnienie:

α                     # Take the absolute difference of the first two (implicit) inputs
                      #  i.e. 10 and 5 → 5
                      #  i.e. 6 and 3 → 3
 α                    # Then take the absolute difference with the third (implicit) input
                      #  i.e. 5 and 1 → 4
                      #  i.e. 3 and 0 → 3
  ©                   # Store this number in the register (without popping)
   \|                # Push "\|"
      ³è              # Use the third input to index into this string
                      #  i.e. 1 → "|"
                      #  i.e. 0 → "\"
        ×             # Repeat the character the value amount of times
                      #  i.e. 4 and "|" → "||||"
                      #  i.e. 3 and "\" → "\\\"
         ¹®-          # Then take the first input, and subtract the value from the register
                      #  i.e. 10 and 4 → 6
                      #  i.e. 6 and 3 → 3
            „|/       # Push "|/"
               ³è     # Index the third input also in it
                      #  i.e. 1 → "/"
                      #  i.e. 0 → "|"
                 ×    # Repeat the character the length-value amount of times
                      #  i.e. 6 and "/" → "//////"
                      #  i.e. 3 and "|" → "|||"
                  J   # Join the strings together (and output implicitly)
                      #  i.e. "||||" and "//////" → "||||//////"
                      #  i.e. "///" and "|||" → "///|||"
Kevin Cruijssen
źródło
0

C ++ 181

#define C(x) cin>>x;
#define P(x) cout<<x;
int n,k,i;char p;
int main(){C(n)C(k)C(p)
for(;i<n;i++){if(p=='r'&&i>=k-1)P('/')else if(p=='l'&&i<=k-1)P('\\')else P('|')}
return 0;}
Bacchusbeale
źródło
1
W rzeczywistości nie trzeba jawnie return 0od main.
zennehoy
Nie kompiluje się dla mnie, ponieważ cin i cout nie znajdują się w globalnej przestrzeni nazw - jakiego kompilatora używasz? Czy też C(n)>>k>>pbyłoby zwarte, niż C(n)C(k)C(p)nie? A gdyby definicja P () mogła sprecyzować argument, czy nie zapisałoby to znaków dla wszystkich cudzysłowów? A gdy porównasz p do „l” i „r”: 0 i 1 byłyby krótsze - w szczególności> 0 zamiast == 'r' i <1 zamiast == 'l' (zakładając, że dobrze jest używać liczb zamiast r / l - jeśli nie <<r 'jest nadal krótszy niż ==' l 'i>' l 'jest nadal krótszy niż ==' r ')
Jerry Jeremiah
@JerryJeremiah dla cin i cout potrzebujesz „using namespace std”.
bacchusbeale
Wiem, ale ponieważ jest używany tylko dwa razy, jest krótszy, aby zakwalifikować funkcje. Żaden sposób nie działa na moim kompilatorze bez uwzględnienia.
Jerry Jeremiah
0

PHP - 105,97 , 96

 function a($r,$l,$f){$a=str_repeat('|',$l-$f);$b=str_repeat($r?'/':'\\',$f);echo$r?$a.$b:$b.$a;}

Przykładowe wyniki:

a(true,10,4);  -> \\\\||||||
a(false,10,5); -> |||||/////
a(false,10,2); -> ||||||||//
Martijn
źródło
0

JavaScript, 81 85 znaków

funkcja e (a, b, c) {l = 'powtórz'; d = '|' [l] (- a-b ++); zwróć c> 'q'? d + "/" [l] (b): „\\” [l] (b) + d}

Po raz pierwszy próbowałem codegolf, było fajnie dzięki :)

Mata
źródło
Równie dobrze może zmodyfikować funkcję, aby była funkcją ES6, ponieważ ciąg znaków to ES6 (nie działa w Chrome).
Matt
0

JavaScript - 85 znaków

function d(a,b,c){for(r=c?"\\":"/",p="",b=a-b;a--;)p+=c?a<b?"|":r:a>b?"|":r;return p}

1 = w lewo, 0 = w prawo

d(10,3,1)
\\\|||||||
d(10,3,0)
||////////
d(10,7,1)
\\\\\\\|||
d(10,7,0)
||||||////
Matt
źródło
0

Clojure, 81 znaków

(defn g[a,p,d](apply str(map #(nth "\\|/"(+(if(>= % (- p d)) 1 0) d))(range a))))
użytkownik29119
źródło
0

vb.net (~ 75c)

Dim f=Function(l,p,d)(If(d="l",StrDup(p,"\"),"")& StrDup(l-p-If(d="l",1,0),"|")).PadRight(l,"/")
Adam Speight
źródło