Moja Squiggly Lamp

13

Podczas ruchu zepsułem lampę. Teraz potrzebuję nowego. Twoim zadaniem jest uczynić ze mnie lampę! Nie jestem pewien, jakiego rozmiaru chcę, ale wiem, że chcę taki zawijasowy.

Twój program / funkcja musi wprowadzić liczbę i wydrukować lampę z tyloma wstrząsami / nierównościami.

Przykłady:

Wejście:2

Wynik:

/ - \
 ()
 ()
/ __ \

Wejście:3

Wynik:

/ - \
 ()
 ()
 ()
/ __ \

Wejście:5

Wynik:

/ - \
 ()
 ()
 ()
 ()
 ()
/ __ \

Zasady:

  • 0 i liczby ujemne nie mają znaczenia
  • Aby lampy (wyzwanie) były bardziej różnorodne, musisz zmienić klosz lampy.
    • Muszą mieć 4 znaki szerokości i 1 znak wysokości.
    • Mogą mieć dowolny kształt, w tym kształty inne niż abażur.
    • Nie mogą zawierać białych znaków.
    • Baza musi pozostać taka sama.
  • Musisz pokazać przykładowe wejście i wyjście z kloszem lampy.
  • Najkrótszy kod wygrywa!
faza
źródło
Ale wcale się nie porusza! Bardzo by się podobało, gdyby dane wejściowe> 5 sprawiły, że się zakręci.
Optymalizator
22
Przegłosowałem. Myślę, że to nudna sztuka ASCII. Pośrodku znajduje się powtarzająca się sekcja, która nie zachodzi na części, które są zbyt krótkie, aby można je było skompresować. Po prostu ma formę ABBB..BBBC. Wymóg zmiany sekcji oznacza po prostu, że ludzie będą używać krótkiego wbudowanego ciągu.
xnor
7
Wszyscy już możecie przestać głosować! Myślę, że OP dostał wiadomość.
xnor
1
@xnor współczuję biednemu facetowi. Jest to prawdopodobnie jedno z najczęściej zadawanych pytań w historii: / i.stack.imgur.com/T4A7X.jpg
Beta Decay
1
Nie głosowałem w żaden sposób sam, ale biorąc pod uwagę podobieństwo z Draw a Lightning Bolt ASCII , rozumiem downvoters. Jakiś drobny zwrot akcji, taki jak posiadanie większej podstawy dla wyższej lampy lub powtarzanie dekoracji tylko na każdym n-tym pokrętle, uczyniłoby to nieco innym.
manatwork

Odpowiedzi:

4

Pyth - 16 bajtów

Używa cudzysłowu dla odcienia, ponieważ N jest do tego wstępnie zainicjowany.

*N4VQ+d`();"/__\

Wypróbuj online tutaj .

* 4            String repetition 4x, implicit print
 N             Preinitialized to Quote
VQ             For N in range(Q)
 +             String concat
  d            Space
   `()         Repr of empty tuple
;              Close for loop
"/__\          Implicitly print string, implicit close quote

Próbka dla 5:

""""
 ()
 ()
 ()
 ()
 ()
/__\
Maltysen
źródło
7

Snowman 0.2.0 , 42 znaki

)vg10sB]"[--]
"sP:" ()
"sP;bR"/__"sP92wRsP

Przykładowy przebieg:

llama@llama:...Code/snowman/ppcg53483lamp$ snowman lamp.snowman
5
[--]
 ()
 ()
 ()
 ()
 ()
/__\

Zauważyłem więc tylko, że kiedy rozwiązałem to wyzwanie, zapomniałem zaimplementować zdolność ucieczki przed odwrotnymi ukośnikami w łańcuchach. Z pewnością tak będzie w następnej wersji, ale na razie oto, co zrobiłem, aby wydrukować ostatnią linię:

"/__"sP92wRsP

92jest kodem ASCII dla odwrotnego ukośnika, wRzawija go w tablicę, a teraz mogę go wydrukować, sPponieważ „ciągi znaków” w Snowman to tak naprawdę tablice liczb.

Klamka
źródło
7
Chcesz zbudować lampę śnieżną?
Alex A.,
3

> <> , 43 41 38 bajtów

"\__/"aiv
"&-1v!?:<&a" ()
~"!_\
?!;o>l

Wprowadzanie za pomocą punktu kodowego, np. Spacja to 32. W ten sposób abażur wykorzystuje część własnego kodu programu, co daje efekt przypominający antenę satelitarną:

~\_!
 ()
 ()
 ()
 ()
 ()
/__\

(Sugestia dzięki @randomra)

W przypadku trzech kolejnych bajtów możemy zmienić trzeci wiersz, aby dodać nieco więcej dostosowania:

"\__/"aiv
"&-1v!?:<&a" ()
__\"\~"/
?!;o>l

Daje to jedną z tych lamp, które strzelają światłem w górę, z powodu braku lepszego sposobu na umieszczenie go:

\__/
 ()
 ()
 ()
 ()
 ()
/__\
Sp3000
źródło
3

R, 54 52 46 bajtów

cat("RRRR",rep(" ()",scan()),"/__\\",sep="\n")

W tej wersji wejście i wyjście są prawie pomieszane:

{wejście / wyjście} PUT:

> cat("RRRR",rep(" ()",scan()),"/__\\",sep="\n")
1: 4
2: 
Read 1 item
RRRR
 ()
 ()
 ()
 ()
/__\

EDYCJA 1 : -2 bajty dzięki komentarzowi @manatwork.
EDYCJA 2 : -6 bajtów. Pełny kredyt trafia ponownie do @manatwork

Frédéric
źródło
1
Zmienia tylko wygląd: " /_\\"powinien być "/__\\". BTW, czy to \rkonieczne?
manatwork
@manatwork Zmienił kształt stopy lampy, czyniąc ją bardziej stabilną + twoja uwaga na temat \rzaoszczędzenia mi dwóch bajtów! Powinienem ponownie przeczytać mój kod! Dzięki !
Frédéric
1
Hmm… Dziwne narzędzie. Nie można sprawić, by działał nieinteraktywnie. W każdym razie cat("RRRR",rep(" ()",scan()),"/__\\",sep="\n")wydaje się , że działa.
manatwork
@manatwork: cóż ... Nigdy nie myślałem, że to może zadziałać! To naprawdę fajne rozwiązanie. R jest pełen niespodzianek!
Frédéric
Bonjour Frédéric, jeśli nadal jesteś aktywny na PPCG , możesz zaoszczędzić 5 bajtów
JayCe
3

Słoma , 26 bajtów (niekonkurencyjna)

<#~('--'
)>( ()
)-*>(/__\)>

Użyj '--'jako abażur, przyjmuj dane jednoznacznie teraz w systemie dziesiętnym

TuxCrafting
źródło
Jak to działa?
Conor O'Brien
@BetaDecay * w związku z tym niekonkurujący
Conor O'Brien
2

CJam, 18 bajtów

"/__\
"" ()
"ri*1$

Przykładowy przebieg dla wejścia 5:

/__\
 ()
 ()
 ()
 ()
 ()
/__\

Wypróbuj online tutaj

Optymalizator
źródło
2

JavaScript ES6, 34 bajty

i=>`|==|
${` ()
`.repeat(i)}/__\\`

Nowe linie są znaczące

Przykład z wprowadzeniem 5:

|==|
 ()
 ()
 ()
 ()
 ()
/__\
Downgoat
źródło
2

sed, 28 bajtów

s#.# ()\n#g
s#^\|$#/__\\\n#g

Pobiera dane wejściowe unarne. Odcień jest oczywistym wyborem (taki sam jak baza).

Testowe uruchomienie

$ echo -n 111 | sed -f lamp.sed
/__\
 ()
 ()
 ()
/__\
Dennis
źródło
1

Gema: 30 znaków

*=gema\n@repeat{*;\ ()\n}/__\\

Przykładowy przebieg:

bash-4.3$ gema '*=gema\n@repeat{*;\ ()\n}/__\\' <<< 3
gema
 ()
 ()
 ()
/__\
człowiek w pracy
źródło
1

jq: 30 znaków

(Kod 29 znaków + opcja wiersza poleceń 1 znak.)

8888,(range(.)|" ()"),"/__\\"

Przykładowy przebieg:

bash-4.3$ jq -r '8888,(range(.)|" ()"),"/__\\"' <<< 3
8888
 ()
 ()
 ()
/__\

Test on-line (Przekazanie -radresu URL nie jest obsługiwane - sprawdź sam wynik wyjściowy).

człowiek w pracy
źródło
1

C, 54 bajty

Zadzwoń f()z żądaną wysokością lampy.

f(n){for(puts("||||");n--;puts(" ()"));puts("/__\\");}

Wypróbuj na ideone.

Przykładowe dane wyjściowe dla 5:

||||
 ()
 ()
 ()
 ()
 ()
/__\
owacoder
źródło
1

Pyke, 15 bajtów

" ()"~mQAD"/__\

Wypróbuj tutaj!

     ~m         - 1000
" ()"           -  " ()"
       QAD      - duplicate(^) input times
          "/__\ - "/__\"

Wyjścia:

1000
 ()
 ()
/__\
niebieski
źródło
1

Biała spacja , 169 bajtów

[S S S N
_Push_0][T  N
T   T   _Read_STDIN_as_integer][S S S T S T T   T   S S N
_Push_92_\][S S S T S T T   T   T   T   N
_Push_95__][S N
S _Duplicate_95__][S S S T  S T T   T   T   N
_Push_47_/][N
S S N
_Create_Label_LOOP][S S S N
_Push_0][T  T   T   _Retrieve_at_address_0][S S S T N
_Push_1][T  S S T   _Subtract][S N
S _Duplicate][S S S N
_Push_0][S N
T   _Swap_top_two][T    T   S _Store_at_address_0][N
T   T   S N
_If_neg_Jump_to_Label_PRINT][S S S T    S T S N
_Push_10_newline][S S S T   S T S S T   N
_Push_41_)][S S S T S T S S S N
_Push_40_(][S S S T S S S S S N
_Push_32_space][N
S N
N
_Jump_to_Label_LOOP][N
S S S N
_Create_Label_PRINT][S S S T    S T S N
_Push_10_newline][S S S T   S S S S T   N
_Push_33_!][S N
S _Duplicate_33_!][S N
S _Duplicate_33_!][S N
S _Duplicate_33_!][N
S S T   N
_Create_Label_LOOP_2][T N
S S _Print_as_character][N
S N
T   N
_Jump_to_Label_LOOP_2]

Dodane litery S(spacja), T(tab) i N(nowa linia) tylko jako wyróżnienia.
[..._some_action]dodano tylko jako wyjaśnienie.

Wypróbuj online (tylko z surowymi spacjami, tabulatorami i nowymi wierszami).

Objaśnienie w pseudo-kodzie:

Wypycha wszystkie znaki w odwrotnej kolejności na stos, a następnie drukuje je w pętli.

Integer i = STDIN as input
Push "\__/" to the stack
Start LOOP:
  i = i - 1
  if(i is negative):
    Go to function PRINT
  Push "\n)( " to the stack
  Go to next iteration of LOOP

function PRINT:
  Push "\n!!!!" to the stack
  Start LOOP_2:
    Print top as character to STDOUT
    Go to next iteration of LOOP_2

UWAGA: iw powyższym pseudokodzie jest przechowywany z powrotem na stosie przy każdej iteracji LOOP, ponieważ nie chcemy pozostawiać go na stosie, aby został wydrukowany na końcu.

Kevin Cruijssen
źródło
1

Płótno , 8 bajtów

(×_¶/e⟳║

Wypróbuj tutaj!

Wyjaśnienie:

(×        repeat "(" input times
  _¶/e    encase it on both sides in "_\n/"
          the 1st line is surrounded in "_" and the second ends and starts with "/"
      ⟳   rotate the string clockwise without changing characters
       ║  palindromize horizontally with 0 overlap
dzaima
źródło
1

05AB1E , 17 15 13 11 bajtów

„ (и„/_.ø)˜∞

-2 bajty (17 → 15) dzięki @EriktheOutgolfer .
-2 bajty (13 → 11) po inspiracji odpowiedzią Canvas @dzaima .

Cap jest taki sam jak base ( /__\).

Wyjaśnienie:

 (            # Literal string " ("
   и           # Repeat " (" the input amount of times
               #  i.e. " (" and 3 → [' (',' (',' (']
    „/_        # Literal string "/_"
             # Surround the list of " (" with "/_" on both ends
               #  i.e. [' (',' (',' ('] → ['/_',[' (',' (',' (',' ('],'/_']
         ˜     # Flatten this list
               #  i.e. ['/_',[' (',' (',' ('],'/_'] → ['/_',' (',' (',' (','/_']
              # Mirror each item
               #  i.e. ['/_',' (',' (',' (','/_'] → ['/__\',' () ',' () ',' () ','/__\']
               # And output the list new-line delimited (implicitly due to the mirror)

Stara 13 bajtów odpowiedź:

„/_D (Iиs)˜∞

Wypróbuj online.

Kevin Cruijssen
źródło
1

Excel, 31 bajtów

Anonimowa funkcja arkusza roboczego, która pobiera dane liczbowe z zakresu [A1]i danych wyjściowych do komórki wywołującej.

Ta lampa jest muzyczna - pomoże ożywić i rozjaśnić Twój dzień.

="/\
"&REPT(" ()
",A1)&"/__\"

Wynik

kocham lampę

Taylor Scott
źródło
1

PowerShell 5.1, 28 26 bajtów

Dzięki Mazzy za 2 bajty

8008;," ()"*"$args";"/__\"

Ponieważ cień może mieć dowolne 4 znaki, użycie liczby pozwala zaoszczędzić parę cudzysłowów. Najtrudniejsze było znalezienie ładnie wyglądającego cienia.

Wynik:

PS C:\Users\ItsMe\Desktop> .\scratch.ps1 4
8008
 ()
 ()
 ()
 ()
/__\
Veskah
źródło
ładny abażur)
mazzy
1
spróbuj tego8008;," ()"*"$args";"/__\"
mazzy
1

Python 2, 36 bajtów

print"-"*4+"\n ()"*input()+"\n/__\\"

Dla wejścia 4:

----
 ()
 ()
 ()
 ()
/__\

Zauważ, że dla Pythona, że ​​dowolny abażur za pomocą rur jest mniej bajtowy.

-1 bajtów dzięki @Alex!

Rozpad beta
źródło
1
Myślę, że jeśli zmienisz abażur na jedną postać i pomnożysz go przez 4, możesz zapisać jeden bajt:print"-"*4+"\n ()"*input()+"\n/__\\"
Alex,
1

Japt , 17 bajtów

Æ` ()`Ãi¥² p"/__\

Wypróbuj online!

Dane wyjściowe dla 5:

====
 ()
 ()
 ()
 ()
 ()
/__\
Oliver
źródło
Niezła sztuczka z ¥.
Kudłaty
@Shaggy Dziękujemy! : D
Oliver
0

SWI-Prolog, 73 60 bajtów

a(X):-write(golf),writef("%r",["\n ()",X]),write("\n/__\\").

a(5). wyjścia

golf
 ()
 ()
 ()
 ()
 ()
/__\
Fatalizować
źródło
0

Julia, 36 bajtów

n->print("|~~|\n"*" ()\n"^n*"/__\\")

Tworzy to nienazwaną funkcję, która przyjmuje liczbę całkowitą jako dane wejściowe i wypisuje na standardowe wyjście.

Przykład:

julia> f(4)
|~~|
 ()
 ()
 ()
 ()
/__\
Alex A.
źródło
0

Bash + coreutils, 37 bajtów

yes ' ()'|sed '1i####
'$1'{a/__\\
q}'

Nowe wiersze są konieczne i są liczone w bajtach ogółem. GNU sed jest wymagany.

Biegać:

./squiggly_lamp.sh 2

Wynik:

####
 ()
 ()
/__\
seshoumara
źródło
0

Rubin, 42 bajty

i=gets.to_i
puts "|--|\n#{" ()\n"*i}/__\\"
dkudriavtsev
źródło
0

Java 7 11, 84 83 37 bajtów

n->"i!!i\n"+" ()\n".repeat(n)+"/__\\"

Wypróbuj online. (UWAGA: Java 11 nie jest jeszcze obsługiwana w TIO, więc String.repeat(int)została emulowana z repeat(String,int)tą samą liczbą bajtów.)

Używa i!!ijako cap. ¡!!¡wygląda lepiej , ale ma jeszcze dwa bajty.

Wyjaśnienie:

n->                    // Method with integer parameter and String return-type
  "i!!i\n"             //  Return the cap + new-line
  " ()\n".repeat(n)    //   appended with " ()" and a new-line `n` amount of times
  "/__\\"              //   append with "/__\"
Kevin Cruijssen
źródło
0

Dalej , 38 bajtów

I"|MM|"Wr
~W" ()"oN<s!:-1~
@W"/__\"oN<

Wypróbuj online!

Próbki

1
|MM|
 ()
/__\

2
|MM|
 ()
 ()
/__\

3
|MM|
 ()
 ()
 ()
/__\
ślimak_
źródło
2
Czy możesz podać link do internetowego środowiska testowego, aby łatwo uruchomić przesyłanie?
Jonathan Frech
@JonathanFrech Link do TIO jest już dostępny
snail_
0

PHP, 38 bajtów

/--\<?while($argn--)echo"
 ()"?>

/__\

Zapisz do pliku; uruchom jako potok z -nFlub spróbuj online .

Tytus
źródło