Spodziewałem się opublikować coś bardziej złożonego jako moją pierwszą łamigłówkę w PCG, ale szczególne pytanie ... o pracę domową w Stack Overflow zainspirowało mnie do opublikowania tego. Chcą:
wydrukuj następujący wzór dla dowolnego słowa zawierającego nieparzystą liczbę liter:
P M R A O R G O R R A P M
Zwróć uwagę, że litery to ruch rycerza na wzór, który chcesz wydrukować. Tak więc każda inna kolumna jest pusta. - (Dzięki xnor za zwrócenie na to uwagi.)
Zasady
- Używanie C ++ jest zabronione. Ponieważ mogę tam powiązać to pytanie.
- Możesz użyć
stdout
lub w jakikolwiek sposób, aby szybko wygenerować ciąg znaków (np.alert()
W JavaScript). - Jak zawsze, najkrótszy kod wygrywa.
Odpowiedzi:
Pyth , 22 lata
Test:
Wyjaśnienie:
źródło
~
bitowo nie było w Pyth. Następnie możemy zmienićt-lzd
na+lz~d
- nadal 5 znaków.Vz
to fajna sztuczka: nie wiedziałem, że toU<string>
dałorange(len(<string>))
.APL (
37353427)Pobiera dane z klawiatury, takie jak:
źródło
Python 2 -
94 90 8988Wkład:
Wydajność:
źródło
i in[j,L+~j]
.L+~j
.+~
sztuczce ...for i in R:print" ".join([s[j]," "][j!=i!=L+~j]for j in R)
uratować postać? (Nie mam teraz dostępu do Pythona 2 do testowania.)Python 3: 75 znaków
W przypadku wiersza
i
zaczynamy od listy spacji i ustawiamy wpisyi
od przodu i od tyłu, aby były równe literom ciągu wejściowego. Następnie wydrukujemy wynik.Ciągi w języku Python są niezmienne, więc
a
zamiast tego musi być lista znaków. Listaa
musi zostać zainicjowana wewnątrz pętli, inaczej zmiany będą przenoszone między pętlami. Używamyprint(*a)
do drukowania każdego znaku na liście, oddzielając spacje, co wymaga Python 3.Linie wyjściowe są symetryczne, więc możemy
i
odliczać, a nie zwiększać za pomocą pętli while.Działa również na parzystą liczbę liter.
źródło
VlzJ*]dlz=@JN@zN=@Jt_N@_zNjdJ
29 bajtów ... Chyba będę musiał spróbować czegoś innego, aby pokonać APL. Ponadto +1 za dowód, że Python 3 możelen("raw_input()") + len("print ") > len("input()") + len("print()")
.input()
to również Pythona 2 (po prostu działa nieco inaczej), więc jeśli dane wejściowe do wyzwania nie są dość surowe, python 2 zazwyczaj wygrywa.print" ".join(a)
twój kod jest krótszy (82) niż mój.CJam,
2725 bajtówWypróbuj online.
Przykładowy przebieg
Jako przykład w odpowiedzi każda linia ma końcowe białe znaki.
Jak to działa
źródło
Java - 168
Prosta pętla zagnieżdżona, tutaj nie dzieje się nic specjalnego.
Z podziałami linii:
źródło
Pure Bash, 94 bajty
źródło
t%l
obliczeń. Zapisz go przy pierwszym użyciu do zmiennej,((x=t%l))
a następnie użyj zmiennej, aby zmniejszyć ją do 94 znaków.x=t%l
iy=t/l
było dłużej ... nie przyszło mi do głowy, żeby użyć tylko xRuby, 64
Wyjaśnienie
String
.n
łącznie):n
spacji.i
th in-i
th (~i
dzięki xnor) spacjąi
th in-i
th znakiem wejścia.źródło
-i-1
jako bitowe uzupełnienie~i
.gets.size.times{|x|u=?\s*~/$/;u[x]=$_[x];u[~x]=$_[~x];puts u}
(zakłada, że wejście nie jest zakończone znakiem nowej linii, npecho -n CODE-GOLF
.). Następnie można dodatkowo wykorzystać,.chars
aby uratować inną postać:x=0;gets.chars{|r|u=?\s*~/$/;u[x]=r;u[~x]=$_[-x+=1];puts u}
JavaScript (E6) 101
95 129 136Edytuj Niewłaściwe odstępy między literami. Naprawiony.
Edytuj Prostsze i krótsze za pomocą klasycznych pętli
Jako funkcja, wyprowadzaj przez wyskakujące okienko.
Poprzednia wersja korzystająca z .map
Testuj w konsoli FireFox / FireBug
Wydajność
źródło
Befunge-93,
6871Możesz to przetestować tutaj . Przy każdym przejściu pojawi się okno dialogowe wprowadzania danych
~
; wprowadzaj słowo po jednym znaku na raz (w końcu oznacza to, że wpis jest „klunky”), kończąc spacją.Nie będzie drukować na konsoli; w końcu nie byłoby to Befunge bez śladu samodoskonalenia! Zamiast tego zmodyfikuje własną siatkę, aby wyświetlić komunikat. Po zakończeniu siatka będzie wyglądać mniej więcej tak:
(Zwróć uwagę na szlachetne poświęcenie komórki w (0,0), gdy wiemy, że wskaźnik już tam nie pójdzie, w celu przechowywania fragmentu danych.)
Działa również z wejściami o równej długości. Zauważ, że ponieważ Befunge-93 jest ograniczony do siatki 80x25, rozmiar wejściowy jest ograniczony do 21 znaków, jeśli uruchomisz go w interpreterie Befunge-93. Uruchamianie go jako Befunge-98 powinno usunąć ten limit.
Edycja - teraz działa bardziej zgodnie z zamierzonym wyjściem, kosztem tylko trzech znaków długości.
źródło
JavaScript 102
84 85Edycja: musiał naprawić odstępy. Już nie taki mały.
źródło
function(s)
skoro się nie powtórzysz?CJam,
3836353432 bajtySprawdź to tutaj. Odczytuje słowo wejściowe ze STDIN. Działa również dla parzystej liczby znaków. Spowoduje to wydrukowanie końcowej kolumny spacji, ale nie widzę nic w regułach przeciwko temu.
Wyjaśnienie
Zawartość stosu jest drukowana automatycznie na końcu programu.
źródło
l:I,,_f{f{_2$=@2$+I,(=|\I=S?S}N}
na serwetce niż↑{∊2↑¨⍵↑¨I}¨↓(+∨⌽)∘.=⍨⍳⍴I←⍞
... chichotC 105
dwa nieco inne sposoby na zrobienie tego.
Jeśli chcesz dodać dodatkowe spacje, należy wymienić
putchar(
zprintf(" %c",
za dodatkową 5 znaków.źródło
J -
3630 bajtów:Edycja: 6 znaków krótszych, kredyty trafiają do @algorithmshark .
na przykład:
Bonus: działa również z łańcuchami o równej długości:
źródło
Prolog - 240 bajtów
Wezwanie:
Czytelny:
źródło
Płótno , 5 bajtów
Wypróbuj tutaj!
Wyjaśnienie:
źródło
R ,
99989389 bajtówWypróbuj online!
Wiersz 1 odczytuje łańcuch wejściowy, dzieli go na znaki, przechowuje jego długość i tworzy matrycę ze słowem na głównej przekątnej - litery tego słowa są nakładane na matrycę tożsamości (i domyślnie powtarzane w celu dopasowania do długości) i tylko te pasujące 1 są zachowywane, inne zastępowane są spacjami.
Linia 2 drukuje matrycę utworzoną z elementów matrycy ukośnej lub jej lustrzanej wersji, w zależności od tego, która wartość jest większa.
-2 + 1 = -1 bajt dzięki JayCe
−4 bajty dzięki Giuseppe
źródło
pmax
i wstawianie kolejnych zadań.C # (
214212)(Z pewnością źle) Wersja w golfa:
Wersja bez golfa:
Wszelkie podpowiedzi, porady, wskazówki i uwagi są bardzo mile widziane, ponieważ jest to moja pierwsza próba CodeGolf. Chciałem tylko spróbować, choć wiem, że mój bajt C # nie zbliży się nawet do podwojenia najlepszych rozwiązań;)
A jak liczycie bajty? Właśnie zamieściłem powyższe w oknie Quick Watch i zrobiłem to
.Length
. Mógłbym napisać mały program do liczenia bajtów dla mnie, ale założę się, że istnieje łatwiejszy sposób, którego jeszcze nie znam.źródło
for(;i < l;i++)
.JavaScript (ES6) -
185177175170 bajtówUmieść to w konsoli Firefox i uruchom jako
f('PROGRAM')
:f("CODE-GOLF")
:źródło
Mathematica, 149 bajtów
Dane wejściowe przekazywane jako parametr do funkcji; funkcja zwraca ciąg wyjściowy. Na końcu wyniku znajduje się końcowy znak nowej linii.
Objaśnienie: Tworzymy macierz ukośną ze sznurkiem, a następnie tworzymy jej kopię odwróconą w pionie za pomocą,
Reverse@#
aby odwrócić rzędy. Następnie mamy trzecią macierz o takich samych wymiarach, zawierającą tylko 32 (przestrzeń ascii). UżywamyMapThread
do wzięcia pod uwagę elementu tych 3 macierzy. Na koniecRiffle
spacje w każdym rzędzie,Append
nowa linia na końcu iFlatten
wynik.źródło
C , 119
To może nie być skompilowane jako C ++, więc mam nadzieję, że nie naruszyłem zasad :)
źródło
i=0
ij=0
nie jest potrzebne, ponieważ zmienne globalne są inicjowane na zero. 3. Możesz użyćmain(l,v)char**v;
zamiastmain(int l,char**v)
. 4. Jeśli zaktualizujeszi
jakoi+=puts("")
, możesz pozbyć się nawiasów klamrowych zewnętrznej pętli.Perl - 90
Może być możliwe wyciśnięcie kilku innych postaci z tego:
89
+1
dla-n
.Biegnij z:
Wydajność:
źródło
T-SQL: 180
Biorąc dane wejściowe ze zmiennej @i
Powoduje to umieszczanie pojedynczych znaków w / zmniejszanie od początku i na końcu w ciągu spacji.
Wynik testu
źródło
PowerShell
11810297Wyjścia:
źródło
Galaretka , 11 bajtów
Wypróbuj online!
źródło
JavaScript (Node.js) , 81 bajtów
EDYCJA : -1 Dzięki Joe King. Nie widziałem, że TIO daje wstępnie sformatowaną bezpośrednią pastę dla CG.
Wypróbuj online!
źródło
-i-1
może być+~i
C # 208
źródło
t+=i==j?s[i]:i==n-j-1?s[n-i-1]:"";
.GolfScript 46 ( DEMO )
źródło
Nie ważne jak długo, zawsze będzie odpowiedź w ...
Java -
289234 bajtyNie golfowany:
Wyjściowo wykonane, jest:
DodałemCholera, naprawdę jestem do niczego.import java.util.Scanner
kod wewnętrzny, ponieważ nigdy nie pamiętam, czy import liczy się do liczby bajtów ...źródło
from math import floor as f
która jest nieco podstępnaSystem.out.print
wywołania w jedno, używając kilku operatorów trójskładnikowych.System.out.print
połączenia na końcu.C # (192/170)
Lub jako „Tylko główny ()”:
źródło