Wyzwanie
Twoim zadaniem jest stworzenie programu, który pobiera dane wejściowe z ciągu i generuje dane wyjściowe w formacie kwadratu. Puste ciągi powinny zwracać pusty ciąg.
Przykłady
Biorąc pod uwagę wkład:
golf
Twój program powinien wypisać:
golf
o l
l o
flog
Wkład:
123
Wydajność:
123
2 2
321
Wkład:
a
Wydajność:
a
Wkład:
Hello, world!
Dane wyjściowe (zwróć uwagę na odstęp między i w - przerwa nie jest tylko nową linią):
Hello, world!
e d
l l
l r
o o
, w
w ,
o o
r l
l l
d e
!dlrow ,olleH
Punktacja
To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w każdym języku.
code-golf
string
code-golf
number
sequence
combinatorics
code-golf
tips
javascript
code-golf
kolmogorov-complexity
fibonacci
restricted-time
code-golf
ascii-art
code-golf
string
text-processing
code-golf
sequence
set-partitions
code-golf
kolmogorov-complexity
natural-language
code-golf
string
code-golf
math
code-challenge
restricted-source
code-golf
code-golf
number
base-conversion
cops-and-robbers
encryption
code-challenge
quine
optimized-output
king-of-the-hill
python
SpookyGengar
źródło
źródło
Odpowiedzi:
Węgiel ,
75 bajtówWypróbuj online! Link jest do pełnej wersji kodu. Edycja: Zapisano 2 bajty dzięki @CarlosAlejo. Wyjaśnienie:
(Wiele wskazówek do polecenia Odbicie jest uruchamianych kolejno, a nie jednocześnie).
źródło
θ‖B↙↘
. Wypróbuj online!ReflectOverlap
zamiastReflectButterfly
unikać odwracania postaci. :-)MATL ,
201611 bajtówWypróbuj w MATL online!
EDYCJA: Kod działa w wersji 20.2.1, która poprzedza wyzwanie. Link używa tej wersji. (W 20.2.2 kod byłby krótszy, ale byłby późniejszy od wyzwania).
Wyjaśnienie
źródło
Galaretka ,
29 2217 bajtówWęgiel
będziesprać + D to wynik ...Monadyczny link pobierający i zwracający listy znaków; lub pełny program drukujący wynik.
Wypróbuj online!
W jaki sposób?
źródło
'Hello'
„Spooky's”"123"
, itp. (Python służy do interpretacji danych wejściowych).C, 109 bajtów
Wypróbuj online!
Godne uwagi sztuczki:
Zamiast marnować bajty
strlen
, po prostu chwytamy długość łańcucha, jednocześnie drukując pierwszą linię:Działa to, ponieważ
printf
zwraca liczbę zapisanych bajtów.W środkowych liniach musimy zapętlić łańcuch, ale wykluczamy zarówno pierwszy, jak i ostatni znak. Osiąga się to z warunkiem
(który jest krótszy niż
(++s)[1]
), który pomija pierwszy znak z powodu++
jego bycia w stanie i pomija ostatni znak, zatrzymując się, gdy znak minie obecny znak'\0'
(zamiast zatrzymywać się na'\0'
).W ciele pierwszej pętli
wypisujemy bieżący znak, a następnie odpowiedni znak „dublowany” (śledząc z
j
, który przechodzi w negatywy, co powoduje dziwną sytuację indeksowania w łańcuch z liczbą ujemną) dopełniany do długościi
spacjami (gdziei
jest dogodniestrlen(s) - 1
).Odwrócony druk w ostatnim wierszu jest dość prosty; jedyną sztuczką jest to
*s*~i--
, że jest to najkrótszy sposób na uzyskaniei+2
iteracji ciała pętli (od którego nie zależyi
; wszystko, coi
jest używane, to liczyć). Funky*s*
część zapewnia, że pętla nie uruchomi się, jeśli*s
jest'\0'
, co dzieje się na wejściu o długości 1.źródło
Oktawa, 40 bajtów
Wypróbuj online!
To moja odpowiedź, ale opublikowana po odpowiedzi na @Luis MATL
źródło
Haskell ,
8478 bajtówWypróbuj online! Zastosowanie:
f "test"
. Zwraca listę linii.Edycja: -6 bajtów dzięki Dianne!
źródło
reverse
;r=reverse;f s@(_:x)|_:y<-r x=s:[a:(y>>" ")++[b]|(a,b)<-zip x y]++[r s];f s=[s]
ma 78 bajtów.Python 2 ,
89818886 bajtówWypróbuj online!
źródło
R , 113 bajtów
Wypróbuj online!
źródło
05AB1E ,
17161519 bajtówWypróbuj online!
Wyjaśnienie
Przykład z
input = golf
Poprawka dla wprowadzania 1-literowego była dość droga.
Czuję, że inne podejście może być teraz lepsze.
źródło
Python 2 ,
9988 bajtów-4 bajty dzięki musicman523.
Wypróbuj online!
Zwraca listę ciągów.
źródło
s
is[::-1]
dojoin
Mathematica, 128 bajtów
źródło
C, 96 bajtów
Wersja premiowa (122 bajty):
źródło
Swift 3 ,
215199 bajtówWypróbuj online
źródło
Python 3, 88 bajtów
źródło
l+1 and
można to przepisać,l+1and
aby zaoszczędzić bajt.0or
, w którym Python nie analizuje, ponieważ0o
jest to ósemkowy przedrostek.JavaScript (ES8),
108112 bajtówMniej golphed
Podziękowania dla Justina Marinera za zaoszczędzenie dużej ilości bajtów, które następnie przyzwyczaiły się do dodawania kontroli zerowej lub pojedynczej postaci potrzebnej do wykonania wyzwania. Łapiesz to :-(
źródło
`+s[i+1].padEnd(s.length-1)+v,s)+`
i używającr.join``
.String.prototype.padStart
i otagowano literały szablonów. Potrzebowałem tego, aby ograniczyć dodawanie kontroli długości do minimum :-)(n=s.length-1)?(r=<...>+r.join``:s
i używającpadEnd(n)
. Jeśli długość wynosi1
,length-1
wynosi0
(fałsz).padEnd
jest ES2017.PHP , 118 bajtów
Wypróbuj online!
źródło
APL , 58 bajtów
Z
⎕IO←0
.Wypróbuj online!
W jaki sposób?
c←≢⍵
- długość sznurkar←⍳
- zasięgo←∘.⌈⍨
- produkt zewnętrzny z minimumo⌊⌽⊖
- zminimalizować z samym sobą obróconym o 180 o×
- pomnóż przezx←∘....⍨r
- produkt zewnętrzny z zakresu((c-1)=⍺⌈⍵)∨0=⍺⌊⍵
- rama matrycyx+
- dodaj ramkę(' ',⍵)[...]
- pobierz według indeksu z łańcucha połączonego w spacjęźródło
⍉⊖⍉⊖
być⌽⊖
?JavaScript (ES2017), 87 bajtów
Wersja ES6: 93 bajty
Mniej golfa
źródło
padEnd
jest ES2017.l+~i
, unikając konieczności odejmowania 1 dwa razy zamiast tego możesz odjąć 2 raz.l-~-i
s=>[...s].reverse(l=s.length).map((c,i,z)=>i?l+~i?s[i]+' '.repeat(l-2)+c:z.join``:s).join`\n`
ales=>[...s].reverse(l=s.length-2).map((c,i,z)=>i?i+~l?s[i]+' '.repeat(l)+c:z.join``:s).join`\n`
też działa.Java, 191 bajtów
źródło
(s)
może być sprawiedliwys
. Pętle z pojedynczymi liniami wewnątrz mogą mieć usunięte nawiasy klamrowe. Możesz powrócić zamiast drukowania, jeśli pozwoli ci to zaoszczędzić bajty. Używaszint i
w obu pętlach, nie wiem, czy mają różne zakresy, ale warto na nie zwrócić uwagę. Inicjalizacja podobnie jak zmienne zwykle oszczędza bajty.for(int i=0;i<l;i++){o.print(s.charAt(l-1-i));}
->for(int i=0;i<l;){o.print(s.charAt(l-1-i++));}
. Nie potrzebujesz końcowego średnika.C # (.NET Core) ,
179161 bajtów-18 bajtów dzięki TheLethalCoder
Wypróbuj online!
Nie jestem pewien co do reguł, jeśli jest to potrzebne do liczenia bajtów, czy nie:Ktoś, proszę, popraw mnie w tej sprawie.Nie golfowany:
źródło
using
w swojej liczbie bajtów. Ponieważ używasz LinqToCharArray()
może być po prostuToArray()
, czy naprawdę potrzebujesz go wcześniejReverse()
? Podczas używaniaString
musisz go w pełni zakwalifikować lub włączyć używanie, można to jednak łatwo naprawić, zmieniając gostring
.if
Może być krótszy jak potrójny podobnegos+=l>1?if code:"";
. Możesz usunąći++
pętlę i zwiększyć ją od[i++]
.i
pomocąl
likeint l=s.Length-1,i=1;
. I myślę, że to może być to!Siatkówka , 106 bajtów
Wypróbuj online! Wyjaśnienie:
Jeśli są co najmniej dwa znaki, zduplikuj dane wejściowe.
Odwróć duplikat.
Zamień struny w trójkąty. Górny trójkąt zaczyna się od wejścia i za każdym razem usuwa pierwszy znak, a dolny trójkąt zaczyna się od pierwszej litery odwróconego wejścia i za każdym razem dodaje znak.
Połącz trójkąty, nakładając się na siebie, aby ostatnia postać tworzyła
/
przekątną.Zmień wszystkie postacie na spacje, jeśli są przynajmniej jedną postacią od końca z każdej strony.
Usuń wszelkie pozostałe puste linie.
źródło
Python 3, 85 bajtów
Używanie danych wejściowych dla górnego rzędu :)
źródło
Lua , 104 bajty
Wypróbuj online!
źródło
p
raz ...Python 3, 106 bajtów
Wersja funkcjonalna ...
źródło
Python 2 , 100 bajtów
Wypróbuj online!
źródło
Mathematica,
13891 bajtówMożesz wypróbować online, wklejając następujące elementy w piaskownicy chmurowej Wolfram i klikając „oceniaj komórkę” lub naciskając Shift + Enter lub Numpad Enter:
źródło