Wyzwanie
Napisz program lub funkcję, która przyjmuje parametry s
i liczbę całkowitą n
jako parametry. Twój program powinien wydrukować (lub zwrócić) ciąg po przekształceniu w następujący sposób:
Zaczynając w lewym górnym rogu i przechodząc w dół i w prawo, pisz s
jako fala wysokości n
. Następnie, od góry do dołu, połącz każdy wiersz jako ciąg (bez spacji).
Przykład
Biorąc pod uwagę ciąg „WATERMELON” i wysokość 3:
Fala powinna wyglądać następująco:
W R O
A E M L N
T E
Następnie połącz rzędy od góry do dołu:
WRO
AEMLN
TE
Twój program powinien więc zwrócić ciąg „WROAEMLNTE”
Podobnie „WATERMELON” o wysokości 4 powinien wytworzyć następującą falę:
W E
A M L
T R O
E N
Twój program powinien następnie zwrócić ciąg „WEAMLTROEN”
Zasady
Wkład
Dane wejściowe można przyjmować w dowolnym rozsądnym formacie. Ciąg może być w każdym przypadku, który wolisz. Możesz to założyć0 < n <= s.length
Wydajność
Dane wyjściowe powinny składać się tylko z transformowanego ciągu (zwracanego lub drukowanego do STDOUT) oraz wszelkich końcowych znaków nowej linii.
Punktacja
To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w bajtach! Standardowe luki są niedozwolone.
Przypadki testowe
Input Output
programmingpuzzles, 5 -> piermnlsomgzgapzru
codegolf, 3 -> cgoeofdl
elephant, 4 -> enlatehp
1234567, 3 -> 1524637
qwertyuiop, 1 -> qwertyuiop
n
> 1? Wyjaśnij, a jeśli nie, dodaj skrzynkę testowąn > 0
, alen=1
jest to uzasadniony przypadek. Zaktualizuję teraz pytanie.Odpowiedzi:
Łuska , 6 bajtów
Wypróbuj online!
Działa
n = 1
również dla.Wyjaśnienie
Funkcja wyższego rzędu
δ
działa w ten sposób pod maską. Załóżmy, że masz funkcję wyższego rzędu, która przyjmuje jednoargumentową funkcję i listę i zwraca nową listę. Na przykładÖ
bierze funkcję i sortuje listę, używając jej jako klucza. NastępnieδÖ
bierze funkcję binarną i dwie listy, zamyka listy razem, stosuje sięÖ
do sortowania par za pomocą funkcji binarnej jako klucza, a na koniec rzutuje pary na drugą współrzędną. UżywamyK
jako funkcji klucza, która po prostu zwraca swój pierwszy argument, a ignoruje drugi.źródło
MATL , 16 bajtów
Wypróbuj online! Lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie
Rozważmy wejść
5
,'programmingpuzzles'
.źródło
Haskell , 64 bajty
Wypróbuj online!
źródło
J ,
54, 29, 2726 bajtów-1 bajt dzięki hoosierEE
Wypróbuj online!
źródło
n=1
od samego początku|@i:
zamiast[:|i:
oszczędza bajtR , 68 bajtów
Wypróbuj online!
n=1
poprawiono wielkość liter dzięki @ J.Doeźródło
Python 2 ,
11910898929197939190 bajtówWypróbuj online!
-1 bajt, dzięki Jonathan Frech
źródło
05AB1E (starsza wersja) ,
118 bajtówZainspirowany odpowiedzią MATL @LuisMendo .
-3 bajty dzięki @Adnan, bo jestem idiotą ..>.>
Wypróbuj online .
Wyjaśnienie:
UWAGA:
counter_variable
Jest używany, ponieważ w starszej wersji 05AB1E w PythonieΣ
nie miał wbudowanego indeksuN
, co ma w nowej wersji 05AB1E przepisującej Elixir. Dlaczego więc nadal używam wersji Legacy? Ponieważ w przepisywaniu Elixir niejawnie przekształca ciąg w listę znaków, co wymaga dodatkowego}J
przekształcenia go z powrotem w ciąg wyjściowy (i zawiera również błąd, w którymè
obecnie nie działa wcale, aby indeksować do wydłużonej listy ..: S)źródło
¹g∍
części, ponieważ 05AB1E używa cyklicznego indeksowania dlaè
.Japt , 16 bajtów
Przetestuj online!
Wyjaśnienie
źródło
ü
metoda jest nowa?-P
flagi, aby zapisać kolejny 2.Galaretka , 8 bajtów
6 bajtów kończy się niepowodzeniem dla wysokości 1; dwa bajty użyte do rozwiązania tego problemu ... może 7 można znaleźć?
Dyadyczny link akceptujący dodatnią liczbę całkowitą i listę znaków, która daje listę znaków.
Wypróbuj online!
W jaki sposób?
źródło
JavaScript (ES6), 75 bajtów
Krótsza formuła sugerowana przez @MattH (-3 bajty)
Pobiera dane wejściowe jako
(string)(n)
.Wypróbuj online!
JavaScript (ES7), 78 bajtów
Zaoszczędź 4 bajty dzięki @ETHproductions
Pobiera dane wejściowe jako
(string)(n)
.Wypróbuj online!
źródło
o
zx/n&1?n-x%n:x%n
zamiast zamiastn*n-(x%(n*2)-n)**2
.K ( Kona ), 23 bajty
Tłumaczenie odpowiedzi J przez Galena
źródło
MBASIC ,
146159155 bajtówZaktualizowano do obsługi n = 1
Wydajność:
źródło
Perl 6 , 49 bajtów
Wypróbuj online!
Pobiera dane wejściowe jako funkcję curry.
Wyjaśnienie:
Sekwencja, według której jest sortowana, wygląda następująco (dla
n=5
):źródło
J , 24 bajty
Wypróbuj online!
Czasownik wyraźny. Uruchom to jak
'codegolf' f 3
.Jak to działa
Zwykle funkcja jawna zajmuje dodatkowe 5 bajtów w postaci
n :'...'
. Ale jeśli dodana zostanie obsługa błędów, różnica spadnie do 2 bajtów ze względu na pareny i miejsce w(tacit)<space>::
.źródło
sort up
? Twój jawny czasownik jest nadal o 3 bajty krótszy. Dobra decyzja!APL (Dyalog Classic) , 23 bajty
Wypróbuj online!
źródło
PowerShell,
9995 bajtówSkrypt testowy:
Wydajność:
Wyjaśnienie
Scenariusz:
Wyrażenie
((1..$n+$n..1)*$s.Length|gu
generuje sekwencję podobną1,2,3,3,2,1,1,2,3,3,2,1...
i usuwa sąsiadujące duplikaty.gu
jest pseudonimem Get-Unique .$n=3
deduplikowanej sekwencji jest:1,2,3,2,1,2,3,2,1...
$n=1
deduplikowanej sekwencji jest:1
Wyrażenie
$i++*($n-gt1)
zwraca indeks w sekwencji deduplikowanej.=$i++
jeśli$n>1
inaczej=0
źródło
Rubinowy ,
7565 bajtówWypróbuj online!
Pobiera dane wejściowe jako tablicę znaków, zwraca ciąg znaków
Jak to pisze:
h
ciągih
a następnie w dół aż do0
itd.)źródło
C,
142134 bajtów8 bajtów zaoszczędzonych dzięki Jonathanowi Frechowi
Kod:
Wyjaśnienie:
Wypróbuj online!
źródło
Węgiel drzewny , 21 bajtów
źródło
SNOBOL4 (CSNOBOL4) , 191 bajtów
Wypróbuj online!
Zajmuje
S
to następnieN
osobne linie.Wyjaśnienie:
źródło
Czysty ,
10584 bajtówWypróbuj online!
źródło
JavaScript (Node.js) , 83 bajty
Wypróbuj online!
źródło
Pyth ,
2221 bajtówPobiera dane wejściowe, jak
n
następujes
w osobnych wierszach. Spróbuj go online tutaj , lub sprawdzić wszystkie przypadki testowe od razu tutaj .Edycja: zapisano bajt, przenosząc pusty czek na koniec przetwarzania. Poprzednia wersja:
seMhD,V*lz|+PUQP_UQ]0z
źródło
Czerwony , 153 bajty
Wypróbuj online!
Wyjaśnienie:
źródło
Mam dwa rozwiązania tego problemu. Pierwsze rozwiązanie, które zrobiłem najpierw, to pomyślałem o innym sposobie zrobienia tego, o którym myślałem, że pozwoli to zaoszczędzić bajty, ale tak się nie stało, więc i tak go uwzględniłem.
Rozwiązanie 1
PHP ,
152144116 bajtówWypróbuj online!
Rozwiązanie 2
PHP , 162 bajty
Wypróbuj online!
źródło
$f
i$n-1-$i
możesz być$n-~$i
. 144 bajtyn=1
. Ten działa dla tej samej liczby bajtów.echo
aby zaoszczędzić 5 dodatkowych bajtówRubinowy , 84 bajtów
Wypróbuj online!
źródło