Wprowadzenie:
Zainspirowany tym komentarzem @MagicOctopusUrn na @Emigna „s 05AB1E odpowiedź dla mojego « To było po prostu bug »wyzwanie :
8F9ÝÀNð×ý}».∊
Zrobiłem zrobiłem paszczę statku kosmicznego! Byłem podekscytowany sugestią 12-bajtowej edycji. - Magic Octopus Urn 17 lipca 17 o 20:10
Który jest programem 05AB1E (starszym), w wyniku czego:
1234567890
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1234567890
Wyzwanie:
Dane wejściowe: niepuste ciąg
Wyjście: Z zewnątrz idąc do wewnątrz, dodaj jedną spację między każdym znakiem w każdym wierszu, podobnie jak na powyższym wyjściu, równą length - 1
. Tak więc dla danych wejściowych 1234567890
wyjście byłoby w rzeczywistości takie:
1234567890
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
1234567890
Czemu? Długość 1234567890
wynosi 10
. Zaczynamy od wypisania 10 linii: pierwsza linia bez spacji; drugi z jednym ogranicznikiem spacji; trzeci z dwoma; itd. A następnie (bez length - 1
zduplikowanej linii środkowej ze spacjami) wracamy do początkowego wejścia podczas schodzenia.
Zasady konkursu:
- Dane wejściowe są gwarantowane jako niepuste (długość
>= 1
). (Dla danych wejściowych dla pojedynczego znaku po prostu wypisujemy ten znak.) - Dowolna ilość spacji / wiodących spacji / znaków nowej linii jest dozwolona, pod warunkiem że dane wyjściowe (gdziekolwiek na ekranie) są poprawne. (Puste linie między wierszami wyjściowymi również nie są dozwolone.)
- Dane wejściowe będą zawierać tylko drukowalne znaki ASCII z wyjątkiem białych znaków (zakres punktów kodowych
[33, 126]
) - I / O jest elastyczny. Dane wejściowe można traktować jako parametr STDIN, argument lub funkcję. Może być listą / tablicą / strumieniem znaków zamiast łańcucha. Wyjściem może być również lista / tablica / strumień znaków zamiast ciągów; można wydrukować na STDOUT; zwrócone jako ciąg rozdzielany znakiem nowej linii; itp.
Główne zasady:
- To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w bajtach.
Nie pozwól, aby języki gry w golfa zniechęcały Cię do publikowania odpowiedzi w językach niekodujących golfa. Spróbuj znaleźć możliwie najkrótszą odpowiedź na „dowolny” język programowania. - Do odpowiedzi mają zastosowanie standardowe reguły , więc możesz używać STDIN / STDOUT, funkcji / metody z odpowiednimi parametrami i zwracanymi typami, pełnych programów. Twoja decyzja.
- Domyślne luki są zabronione.
- Jeśli to możliwe, dodaj link z testem swojego kodu.
- Zalecane jest również dodanie wyjaśnienia do odpowiedzi.
Przypadki testowe:
Input: @
Output:
@
Input: test
Output:
test
t e s t
t e s t
t e s t
t e s t
t e s t
test
Input: ?!
Output:
?!
? !
?!
Input: Spaceship
Output:
Spaceship
S p a c e s h i p
S p a c e s h i p
S p a c e s h i p
S p a c e s h i p
S p a c e s h i p
S p a c e s h i p
S p a c e s h i p
S p a c e s h i p
S p a c e s h i p
S p a c e s h i p
S p a c e s h i p
S p a c e s h i p
S p a c e s h i p
S p a c e s h i p
S p a c e s h i p
Spaceship
Input: 05AB1E
Output:
05AB1E
0 5 A B 1 E
0 5 A B 1 E
0 5 A B 1 E
0 5 A B 1 E
0 5 A B 1 E
0 5 A B 1 E
0 5 A B 1 E
0 5 A B 1 E
0 5 A B 1 E
05AB1E
Input: )}/\
Output:
)}/\
) } / \
) } / \
) } / \
) } / \
) } / \
)}/\
ಠ_ಠ
a potem zdajesz sobie sprawę, że to dlatego, że przypadkiem udało ci się go rok temuಠ⌣ಠ
.Odpowiedzi:
Japt ,
86 bajtówPobiera dane wejściowe jako tablicę znaków, wyświetla tablicę ciągów znaków.
Spróbuj
Wyjaśnienie
Oryginał, 8 bajtów
I / O to ciąg znaków. Używa
-R
flagi. Zawiera końcowe spacje w każdej linii.Spróbuj
Wyjaśnienie
źródło
S.ç()
FTW jeszcze raz :-)R ,
10599858479 bajtów-6 dzięki @Kevin Cruissen i @Giuseppe
-14 od zmiany na metodę opartą na wyrażeniach regularnych
-1 dzięki @Giuseppe
-5 dzięki @digEmALl
Wypróbuj online!
źródło
in(r<-
.s
raz, więc możesz po prostu użyć go jako argumentuwrite
bezpośrednio; sprowadzając cię do 99 bajtów1
raczej niż""
wwrite
? Kopię twoje wykorzystanieMap
!collapse
argumentem,paste
ale tak się nie dzieje ...JavaScript (ES6), 53 bajty
Pobiera dane wejściowe jako tablicę znaków.
Wypróbuj online!
źródło
Węgiel drzewny , 10 bajtów
Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:
źródło
[
się]
- czy to innego odrębnego polecenia?Płótno , 8 bajtów
Wypróbuj tutaj!
Wersja 7-bajtowa była zbyt dobra do tego wyzwania.
źródło
/
s w jedenX
?─
- pionowa palindromize. Palindromizacja płótna robi fajne rzeczy . Nakładająca się część ma również swój własny charakter .Python 2 ,
7270686665 bajtów-2 bajty dzięki Kevin Cruijssen
-3 bajty dzięki ovs
Wypróbuj online!
źródło
c==len(w)-1
można zagrać w golfa o 1 bajt za pomocąc+2>len(w)
. EDYCJA: W nowej wersji 70-bajtowej0<c
może byćc
.05AB1E ,
109 bajtówZaoszczędzono 1 bajt dzięki Adnan
Wypróbuj online!
Wyjaśnienie
źródło
S
. Wprowadzanie danych jest elastyczne, więc wprowadzanie danych jest dozwolone.»
można pominąć.»
i zmienisz pętlęv
na mapęε
.εINð×ý}û»
również?Rubin ,
5449 bajtówWypróbuj online!
Pobiera dane wejściowe jako tablicę znaków, wyświetla tablicę ciągów znaków.
źródło
Japt ,
98 bajtów-1 bajt z @Shaggy
Wypróbuj online!
źródło
SpX
->Xî
dla oszczędności 1 bajtu.PowerShell ,
6654 bajtów-12 bajtów dzięki mazzy
Wypróbuj online!
Pobiera dane wejściowe poprzez rozpryskiwanie, które w TIO przejawia się jako osobne argumenty wiersza poleceń dla każdego znaku.
Najpierw ustawiamy
$a=$args
jako argument wejściowy. Następnie ustawiamy wartość$x
równą.count
tej tablicy-1
. Następnie musimy zapętlić litery, aby zbudować statek kosmiczny. Dokonuje się tego, konstruując zakres od0
do$x
, a następnie z$x
powrotem do0
, a następnie używając,Get-Unique
aby wyciągnąć tylko odpowiedni zakres.W każdej iteracji bierzemy nasze argumenty wejściowe i
-join
je razem z odpowiednią liczbą spacji. Każdy z tych ciągów pozostaje w kolejce, a domniemanyWrite-Output
daje nam nowe wiersze za darmo po zakończeniu programu.źródło
0..($x=($a=$args).count-1)+$x..0|gu|%{$a-join(' '*$_)}
Get-Unique
działa w tym zakresie? To szalone! Dzięki!05AB1E (starsza wersja) , 9 bajtów
Wprowadź jako listę znaków.
Wypróbuj online lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie:
źródło
[
,]
i(
,)
. Może chcę dodać te skrzynki, aby złapać węgiel drzewny. (Przeniosłem pozostałe komentarze do odpowiedzi Emigny, ponieważ był odpowiedzią, na którą pierwotnie skomentowałem)û»
zamiast.∊
.Haskell ,
6059 bajtówWypróbuj online!
Wyjaśnienie
W przypadku ciągu (np.
"abc"
) Najpierw stosujemyktóry jest taki sam jak
Dotyczy to wielokrotnie
(?)
(dodaje spację do każdego znaku w zakresie [33 ..] ),str
dopóki nie będzie tylu łańcuchów, ilestr
znaków:["abc","a b c ", "a b c "]
Teraz musimy tylko połączyć wynik (minus ostatni element) z jego odwróconą częścią przeciwną:
źródło
MATL ,
252213 bajtówWypróbuj online!
Podziękowania dla Luisa Mendo za zasugerowanie 5-bajtowego golfa, który następnie zainspirował mnie do ogolenia 4 kolejnych bajtów!
Objaśnienie, z przykładowym wejściem
'abc'
:źródło
Galaretka , 9 bajtów
Wypróbuj online!
Zwraca listę linii; wyjście prettified ponad TIO.
źródło
,€⁶$LСŒḄ
. Inne, bardziej podobne, 9-te:J’⁶ẋŒḄɓjⱮ
iJ’⁶ẋŒḄjⱮ@
(szukałem krótszej, ale jeszcze nie radości)LḶ⁶ẋ
lubŒḄ
. Jeśli jednak uda ci się znaleźć zapis, zrób ping do mnie. :-),€⁶$LСŒḄ
może nie być poprawne, ponieważ ma szalone zagnieżdżanie, więc może potrzebowaćY
pełnego programu.['I', 'f', [[' '], 't', 'h', [['i']], 's'], ' ', 'i', ['s', ' '], 'a', [[' ', 's', 't'], 'r', ['i', 'n', 'g'], ' '], 'w', ['e', ' ', 'a', 'r', 'e'], ' ', 'd', 'o', ['o'], 'm', [[[[['e']]]]], [[[['d']]]], '!']
Przynajmniej pokonałem 05AB1E ...Pyth , 12 bajtów
Tylko moje obowiązkowe zgłoszenie w języku Pyth. Jestem z tego dość dumny, więc wyjaśnienie prawdopodobnie nastąpi wkrótce.
Wypróbuj tutaj!
Wypróbuj tutaj!
źródło
Stax , 10 bajtów
Uruchom i debuguj
Dane wyjściowe z końcowymi spacjami w każdej linii.
Wyjaśnienie:
źródło
Java (JDK 10) , 115 bajtów
Wypróbuj online!
źródło
l-Math.abs(i)
można grać w golfai<0?l+i:l-i
na -2 bajty.l-i<0?-i:i
?l-(i<0?-i:i)
(12 bajtów).K (oK) ,
2524 bajtówRozwiązanie:
Wypróbuj online!
Wyjaśnienie:
Port mojego rozwiązania K4 :
Uwagi:
źródło
,:'
->+,
Pascal (FPC) ,
143135 bajtówWypróbuj online!
Prawdopodobnie wygram tylko z Lenguage ...
źródło
PHP,
8889 bajtówwymaga PHP w wersji 5 lub nowszej
str_split
. Uruchom jako potok z-nR
lub spróbuj online .źródło
K4 , 23 bajty
Rozwiązanie:
Przykład:
Wyjaśnienie:
W każdej linii ma końcowe spacje.
źródło
C #,
11310598 bajtówWypróbuj online!
źródło
s=>{
przed i}
po, aby uczynić go funkcją lambda. Ponadto jedną z rzeczy do golfa jest usunięcie wsporników wokół pętli for. Wypróbuj online.Scala , 82 bajty
Wypróbuj online
Scala ma wiele skrótów, które mi tu pomagają i jest to całkiem czytelne! Wypróbuj Scala
źródło
0
dolength
liczby spacji, zamiast0
dolength-1
ilości spacji. Nie znam zbyt dobrze Scali, ale wydaje się, że możesz rozwiązać oba problemy z +4 bajtami (łącznie 86 bajtów) w ten sposób:for(i<-(0 to a.size-1)union(-a.size+2 to 0))println(a.map(_+" "*Math.abs(i)).mkString)
Ponownie witamy i życzymy miłego pobytu! :)Oracle SQL, 115 bajtów
Nie język golfa, ale ...
Zakładając, że wartość znajduje się w kolumnie
v
tabelit
:SQL Fiddle
Konfiguracja schematu Oracle 11g R2 :
Zapytanie 1 :
Wyniki :
(SQLFiddle drukuje wartości wyrównane do kolumny z jakiegoś powodu ... nie ma spacji wiodących)
źródło
(.)
grać w golfa.
, używając\0
zamiast na\1
przykład w Javie? EDYCJA: Nieważne, to znaczy$0
nie,\0
( przykład Java o co mi chodziło ).Kod maszynowy 8086,
5653 bajtówZmontowano z:
Przypadek testowy:
źródło
length
liczbę spacji i jest w sumie 9 linii, ale środkowa linia powinna miećlength-1
ilość spacji i zamiast tego powinno być w sumie 7 linii (dla 4-literowego słowa „test”) ..: (Mam nadzieję, że naprawa nie jest zbyt droga pod względem bajtów?Haskell,
646059 bajtówWypróbuj online!
źródło
Bash ,
115,109,105,100,97,96,92,91, 90 bajtów-5 i -3 dzięki Kevin Cruissen
Wypróbuj online!
Należy zauważyć, że ponieważ
\
jest powłoką char ucieczka, przypadek testowy)}/\
powinien być wprowadzony z dodatkowym\
takiego:)}/\\
.źródło
in
iprintf
jak w Pythonie?bash
kod wejść tylko na łańcuch, ( czyli tylko jedna linia). Wszystkie przypadki testowe działają jednak, ale)}/\
muszą być tak cytowane<<< ')}/\' read s; ...etc.
. Spacje poin
iprintf
są potrzebne.for
ido
można je usunąć.f=1
można zmienić nac=f=1
. If=f+c
może byćf+=c
.f!=0
sięf
w pętlę for. Podobnie jak w JavaScript i Python,0
jest falsey, a każda dodatnia / ujemna liczba całkowita jest pozornie prawdziwa w Bash.Perl 6 , 43 bajtów
Wypróbuj online!
Zwraca listę wierszy.
Wyjaśnienie:
źródło
C (gcc) ,
131129111 bajtówWypróbuj online!
-20 bajtów dzięki pułapowi cat !
Wypróbuj online!
Lub, jeśli długość można zaakceptować jako parametr:
C (gcc),
105102 bajtów-1 bajt dzięki pułapkowi cat!
Wypróbuj online!
źródło
x
glob jest zacieniony, a zatem nadmiarowo zadeklarowany.PHP,
148146143141 bajtówMożesz to przetestować w następujący sposób:
Wydajność
Piaskownica
Wersja rozszerzona
Próba 2, 92 bajtów
po zobaczeniu odpowiedzi @Titus zredukowałem mój do tego:
Próbowałem wymyślić sposób użycia 1 pętli zamiast 2 ... Wierzcie lub nie, prawie nigdy nie używam
for
pętli w „prawdziwym” kodzie. To było~
trochę nie. Nie tęskniłem ...Jest trochę dłużej,
92
więc nie czuję się tak źle. Ale i tak zastosuję to jako drugą próbę.$argn
to dane wejściowe z wiersza poleceńPiaskownica
źródło
f
zamiast przypisywania anonimowy jeden do$f
-function f(
oszczędność ponad 2 bajty$f=function(
, i zaoszczędzić kolejny bajt za każdym razem zadzwonićf(...)
zamiast$f(...)
. Alternatywnie możesz przechwycić$s
, zapisując 2 bajty -($i)use($s)
jest o 4 bajty dłuższy niż($i,$s)
, ale zapisujesz 3 bajty dla każdego wywołania$f($i)
zamiast$f($s,$i)
; w językach z automatycznym przechwytywaniem, takich jak JS, jest to częściej realne oszczędności, ponieważ nie płacisz kary zause
wyciąg.use
ale wydaje mi się, że dłużej, aby poczucie tego$i
było dynamiczne, musiałoby zostać przekazane przez odniesienie. Tak musi byćuse(&$i)
i$i
musi zostać zdefiniowane przed przekazaniem go przez odniesienie$f
. Co oznacza ustawienie go w funkcji nadrzędnej lub przed jakąkolwiek inną. Dla funkcji może to byćfunction s($s,$i)
i po prostu wiedzieć, że należy ją wywołać,s($s,0)
ale wydaje się brzydka, i to już jest11 bytes, use(&$i),$i
$s
i zmienić\n
rzeczywisty powrót do linii. To prowadzi do143
2 od końca linii i 1 od użyciaf
zamiast zamknięcia:function s($s){for(;$i<strlen($s);++$i)f($i,$s);for(--$i;--$i>=0;)f($i,$s);}function f($i,$s){echo chunk_split($s,1,str_repeat(' ',$i))." ";}
dodatkowe funkcje tego typu są dozwolone zgodnie z tym meta postem: codegolf.meta.stackexchange.com/questions/7614/…