Wstaw tutaj piaskownicę .
Utwórz funkcję lub program, który „Springify” ciąg.
- Dane wejściowe będą ciągiem w standardowym standardzie lub najbliższą alternatywą
- Dane wejściowe będą zawierać tylko drukowalne ASCII i / lub spacje
- Dane wyjściowe będą do Stdout lub najbliższej alternatywy
- Końcowe znaki nowej linii i spacje są dopuszczalne
Jak sprifyfikować ciąg
- Sformatuj ciąg w dowolną liczbę cewek sprężynowych ASCII
- Wypełnij cewki odstępami, aż do najbliższej cewki
- Odczytaj postacie, podążając za sprężyną wokół cewek
To jest cewka sprężynowa ASCII:
#
# ####
# #
# ####
#
Gdzie #
s są znakami ciągu
Oto przykład:
abcdefghijklmnopqrstuvwxyz
staje się
a
b cdef
g h
i jklm
n
o
p qrst
u v
w xyz.
.
Gdzie .
s zastępują spacje dla widoczności.
Następnie ciąg jest odczytywany ponownie, po sprężynie ASCII w dół, wokół pętli, uderzając w g
i u
dwukrotnie:
1| a <-3
V b cdef
g h
4| i jklm
V n 2->
...
...dający:
abgjklmhfedcginopuxyz vtsrquw
(ze spacją)
Przypadki testowe
(dodano cytaty w celu podkreślenia końcowych spacji - zignoruj je pod względem IO)
I: "abcdefghijklmnopqrstuvwxyz"
O: "abgjklmhfedcginopuxyz vtsrquw "
I: "!@#"
O: "!@ # "
I: ""
O: ""
I: "12345 67890"
O: "12690 7 54368 "
I: " "
O: " "
Należy pamiętać, że długość wyjściowa jest zawsze wielokrotnością 15, czyli długości cewki sprężynowej
To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w bajtach.
Odpowiedzi:
Galaretka , 26 bajtów
TryItOnline!
W jaki sposób?
źródło
Python 2,
10410298 bajtówDzięki za pomoc w komentarzach!
https://tio.run/#2VDVy
Oryginalny:
źródło
input()
i pobrać dane w formacie"<stuff>"
.lambda
aby nadać anonimowej funkcji zamiast programu - często jest to krótsze .+13
się+14
i+1
aby+(len(t)%14>0)
to zrobić, ale nie musi być krótsza droga.JavaScript (ES6), 79 bajtów
Szesnastkowy ciąg bezwstydnie skradziony z @ETHproductions.
źródło
Siatkówka , 71 bajtów
Wypróbuj online!
Umożliwianie ciągów znaków nie jest dokładnie zwięzłe w Retina ...
źródło
JavaScript (ES7),
144143141114104103 bajtówDzięki ETHProductions za 10B oszczędności!
Przykład
Wynik
źródło
+('0x'+whatever)
do konwersji na liczbę:(_,c)=>b[(c/15|0)*14+ +('0x'+'0169abc7543268d'[c%15])]
'0x'+'...'[c%15]-0+(c/15|0)*14
uratować sobie parę nawiasów :-)Perl 6 , 61 bajtów
Jak to działa
Podstawowa struktura jest następująca:
Wyrażenie używane do indeksowania do każdego 14-znakowego segmentu to
"abgjklmhfedcgin".ords X- 97
, które działa w następujący sposób:abgjklmhfedcgin
.97 98 103 106 107 108 109 104 102 101 100 99 103 105 110
.0 1 6 9 10 11 12 7 5 4 3 2 6 8 13
.Perl 6 , 64 bajtów
Wypróbuj online!
Jak to działa
Podstawowa struktura jest następująca:
Te same indeksy jak wyżej, ale ponieważ jesteśmy nazywając
.flat
tak, możemy użyć zagnieżdżonej (1 bajt, ale krótszy) wyrażenie dla nich0,1,6,9..12,7,5...2,6,8,13
.(Wygląda na trywialne, ale tak naprawdę polega na analizie osobliwości Rakudo Perl 6, która jest prawdopodobnie błędem . Aby napisać go bez wykorzystania tego błędu, trzeba by dodać pareny wokół
5...2
.)źródło
Befunge-93, 97 bajtów
Wypróbuj online!
Jest to podział kodu źródłowego z wyróżnieniem różnych części składowych.
Główna pętla rozpoczyna wykonywanie od prawej do lewej, owijając się po prawej stronie pola gry. Tutaj czytamy pierwszy znak ze standardowego wejścia i kończymy, jeśli jest to EOF.
Następna sekcja upewnia się, że wszystkie znaki EOF są konwertowane na spacje za pomocą formuły
c = c + 31*!(c+1)
. Chociaż nie będzie to miało zastosowania przy pierwszej iteracji, może wystąpić przy kolejnych przebiegach.Kopia znaku jest zapisywana w pamięci tymczasowej, a następnie w tabeli w wierszu czwartym ( ) wykonywane jest wyszukiwanie bieżącego indeksu w celu ustalenia, czy znak powinien zostać wyprowadzony, czy nie.
Jeśli postać musi zostać wyprowadzona, bierzemy lewą gałąź. Tutaj wykonywana jest zamiana, aby anulować zamianę, która nastąpi potem, a następnie naciśnięcie zera powoduje wymuszenie prawidłowego rozgałęzienia.
Jeśli postać nie została wypisana, zamieniamy ją na stos pod licznikiem indeksów (jest to zamiana, która zostaje anulowana w lewej gałęzi). I w obu przypadkach zapisujemy znak do pamięci przy bieżącym przesunięciu indeksu, zwiększamy indeks i sprawdzamy, czy jest on większy niż 13.
Jeśli nie, odczytujemy kolejny znak ze standardowego wejścia i powtarzamy wewnętrzną pętlę.
Jeśli tak, skończymy zestaw 14 znaków, 7 zostało wypisanych (
abgjklm
), a 7 pozostało na stosie (cdefhin
). Mamy upuść dwa ostatnie wyjście pozostałe 5 (hfedc
), a następnie pobrać i wyjściowe szczególne przypadkig
,i
in
z pamięci.To sprowadza nas z powrotem do początku głównej pętli, w której powtarzamy proces ponownie dla następnych 14 znaków.
źródło
Mathematica,
7772 bajtówDzięki JungHwan Min za oszczędność 5 bajtów!
Funkcja bez nazwy, która przyjmuje listę znaków jako dane wejściowe i zwraca listę znaków.
Partition[#,14,14,{1,1}," "]
dzieli dane wejściowe na podlisty o długości 14, w razie potrzeby dopełniając spacjami.LetterNumber@"abgjklmhfedcgin"
ocenia na{1,2,7,10,11,12,13,8,6,5,4,3,7,9,14}
, co wskazuje na kolejność przyjmowania każdej podlisty o długości 14 (odpowiednio powtarzając siódmy element). Następnie[[;;,...]]
bierze elementy wszystkich podlist o długości 14 w tej kolejności iJoin@@
łączy odpowiedzi razem.Poprzednie zgłoszenie:
źródło
LetterNumber@"abgjklmhfedcgin"
to krótszy sposób na skompresowanie listy. Również;;
zamiastAll
zapisuje bajt.Python 3 , 86 bajtów
Wypróbuj online!
Jako bonus, ciąg
Tq>]zQ|1/X;:L$o
jest prawidłowym programem CJam, który drukuje unikalne znaki na standardowym wejściu, posortowane. Wypróbuj online! (+ wyjaśnienie)źródło
PHP, 94 bajty
dzieli argument wiersza poleceń na 14-bajtowe fragmenty i zapętla łańcuch tłumaczenia jako indeks podciągu. Uruchom z
php -nr '<code>' <string>
.Z przyjemnością dowiedziałem się, że
??
akceptuje również pusty ciąg (dla „nieprawidłowego” indeksu) jako zerowy.źródło
Rubinowy, 83 bajty
Pierwszym pomysłem było użycie liczb szesnastkowych, ale ord-48 oszczędza kolejny bajt (skradziony z odpowiedzi Throksa).
źródło