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!

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:

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

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.


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:

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

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


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



2

JavaScript ES6, 34 bajty

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

Nowe linie są znaczące

Przykład z wprowadzeniem 5:

|==|
 ()
 ()
 ()
 ()
 ()
/__\

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
/__\
 ()
 ()
 ()
/__\

1

Gema: 30 znaków

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

Przykładowy przebieg:

bash-4.3$ gema '*=gema\n@repeat{*;\ ()\n}/__\\' <<< 3
gema
 ()
 ()
 ()
/__\

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).


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:

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



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.


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

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.


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ę


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
 ()
 ()
 ()
 ()
/__\

ł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!


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,


0

SWI-Prolog, 73 60 bajtów

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

a(5). wyjścia

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

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)
|~~|
 ()
 ()
 ()
 ()
/__\

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:

####
 ()
 ()
/__\



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 "/__\"


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|
 ()
 ()
 ()
/__\

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_


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.