Zainspirowany Kata Codewars .
Twoim celem jest pobranie ciągu wejściowego takiego jak ten:
"'Twas a dark and stormy night..."
i zwraca ciąg zawierający pozycję każdego znaku w alfabecie, oddzielony spacjami i ignorujący znaki niealfabetyczne, takie jak to:
"20 23 1 19 1 4 1 18 11 1 14 4 19 20 15 18 13 25 14 9 7 8 20"
Za dodatkową wyzwanie, można zastąpić żadnych znaków numerycznych w oryginalnym ciąg ze sobą + 27. Na przykład, "25"
byłoby stać "29, 32"
. Jest to całkowicie opcjonalne.
Należy użyć 1-(indeksowanie 'a'==1
, 'b'==2
itp)
Dodatkowe zasady:
Musisz zwrócić ciąg, a nie tablicę.
Końcowe białe znaki są OK.
Zwycięzca ma najniższą liczbę bajtów.
Powodzenia!
Odpowiedzi:
05AB1E , (5?) 7 bajtów
Prawie dwa bajty to formatowanie wyjściowe
Port mojej odpowiedzi Jelly , ale O5AB1E jest bardziej zwięzły do filtrowania alfabetycznego.
Wypróbuj online!
W jaki sposób?
źródło
ðý
można dodać końcowe . Ale skoro połowa listy wyjściowej odpowiedzi wydaje się po prostu zostawić na razie.Java 8,
8278726962 bajtów-13 bajtów dzięki @ OlivierGrégoire .
Wypróbuj online.
Wyjaśnienie:
źródło
s->s.chars().forEach(c->{if(c>64&~-c%32<26)System.out.print(c%32+" ");})
(72 bajty).s->{for(int c:s)System.out.print(c>64&~-c%32<26?c%32+" ":"");}
(62 bajty) przy użyciuchar[]
jako wejścia zamiast aString
.Python 3 ,
626049 bajtów-5 bajtów dzięki Jo King .
-8 bajtów dzięki pLOPeGG .
Po tych ulepszeń, ta odpowiedź jest teraz podobna do Jonathan Allan „s odpowiedź .
Wypróbuj online!
źródło
%32
działaR ,
5550 bajtówWypróbuj online!
Odczytuje dane wejściowe ze standardowego wejścia,
konwertuje na wielkie litery,usuwaliterynie zawierającewielkichliter, konwertuje na punkty kodowe,odejmuje do 64modów o 32 i drukuje na standardowe, oddzielone spacjami.Dzięki Kevin Cruijssen za golfa!
źródło
[^A-z]
APL (Dyalog Unicode) ,
24, 20, 1413 bajtów-4 bajty dzięki Zacharý (i Mr. Xcoder)!
-6 bajtów dzięki Adámowi!
-1 bajt dzięki ngn!
Wypróbuj online!
Wyjaśnienie:
Moje wstępne rozwiązanie:
APL (Dyalog Unicode) ,
2420 bajtówWypróbuj online!
Wyjaśnienie:
Nie śmiej się ze mnie, jestem nowy w APL :)
źródło
{1(819⌶)⍵}
może być1(819⌶)⊢
. W przeciwnym razie niesamowita robota! Mam nadzieję, że spodoba ci się APL w przyszłości!1
do819⌶
zaoszczędzisz pięciu usuwając 27s bezpośrednio:27~⍨⎕A⍳819⌶⍨∘1
; lub skrzyżuj z alfabetem:⎕A⍳⎕A∩⍨819⌶⍨∘1
Python 2 , (45?) 55 bajtów
Dodano 11 bajtów w celu sformatowania danych wyjściowych, co powoduje, że jest to również niezgodne z Python 3)
Kolejny port mojej odpowiedzi na żelki.
Wypróbuj online!
Wersja niesformatowana (zwracająca listę liczb całkowitych):
źródło
JavaScript (Node.js) ,
695554 bajtówWypróbuj online!
Objaśnienie:
11 bajtów zapisanych dzięki @Kevin
Jeszcze 1 bajt dzięki @Neil
Możesz dodać obsługę liczb dla niektórych dodatkowych bajtów (dzięki @neil)
JavaScript (Node.js) , 62 bajty
Wypróbuj online!
źródło
a-z
naA-Za-z
ii.toLowerCase().charCodeAt()-96
nai.charCodeAt()%32
parseInt(i,36)-9
zapisuje kolejny bajt..match(/[^_\W]/g).map(i=>(parseInt(i,36)+26)%36+1)
pozwala na obsługę liczb, nie jestem pewien, czy to najlepszy sposób.Galaretka , (7?) 8 bajtów
Prawym bajtem jest formatowanie wyjściowe
Pełny program akceptujący ciąg znaków w formacie Python, który wypisuje wynik na STDOUT
Wypróbuj online!
W jaki sposób?
źródło
Japt v2.0a0
-S
,1210 bajtówSpróbuj
Wyjaśnienie
źródło
kod operacji x86, 35 bajtów
Zakładając, że wynik zawiera co najmniej jedną literę i nie
{|}~
40 bajtów, dopuszczając wszystkie znaki ASCII
źródło
Stax ,
9109 bajtówUruchom i debuguj
-1 bajt dzięki @recursive
Wyjaśnienie:
Stax , 7 bajtów
Uruchom i debuguj
Wyprowadza to rozdzielone znakiem nowej linii. Rozpakowaniu:
vmVaI^|c
. Podobne, ale z mapą, która domyślnie wyprowadza końcowy znak nowej linii.źródło
Biała spacja ,
152117 bajtów-35 bajtów dzięki @Lynn .
Dodane litery
S
(spacja),T
(tab) iN
(nowa linia) tylko jako wyróżnienia.[..._some_action]
dodano tylko jako wyjaśnienie.Wypróbuj online (tylko z surowymi spacjami, tabulatorami i nowymi wierszami).
Objaśnienie w pseudo-kodzie:
źródło
05AB1E , 8 bajtów
Wypróbuj online!
lub, jeśli możemy zwrócić tablicę:
05AB1E , 6 bajtów
Wyjaśnienie:
Wypróbuj online!
lub jeśli chcesz liczyć liczby:
05AB1E , 13 bajtów
Wypróbuj online!
źródło
05AB1E , 14 bajtów
Obsługuje również liczby
Wypróbuj online!
źródło
Węgiel drzewny , 21 bajtów
Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:
Dołącz cyfry do predefiniowanej zmiennej małych liter.
Pętla nad małymi literami.
Jeśli bieżącym znakiem jest litera lub cyfra,
wydrukuj indeks 1-indeksowany,
i zostaw miejsce na następną wartość.
źródło
Czerwony , 93 bajty
Wypróbuj online!
źródło
#"a"-#"z"
go zmienić zarówno na małe, jak i na wielkie litery; a następnielowercase
można usunąć; i-96 + to-char c
może być modulo-32? Nie jestem jednak pewien, czy to nawet oszczędza bajty na czerwono.parse
Funkcja @KevinCruijssen zbiera ciągi, nawet jeśli dopasowanie jest pojedynczym znakiem, dlatego zawsze tego potrzebujęto-char
. W przypadku wielkich liter musiałbym dodać do zestawu znaków # „A” - # „Z”, co psuje zysk (jeśli w ogóle) z eliminacjilowercase
.#"A"-#"Z"
że może nie zyskać dużo w porównaniu dolowercase
, ponieważ jest tylko 1 bajt krótszy. I wiedziałem, że będziesz potrzebowaćto-char
, po prostu nie byłem pewien, czy-96 +
i modulo-32 będą miały podobny rozmiar.Perl 5 , 47 bajtów
Z dodatkowym wyzwaniem polegającym na analizie cyfr:
Wypróbuj online!
Zmniejszony do 38 bajtów przez ignorowanie cyfr
źródło
PHP , 70 bajtów
Wypróbuj online!
-5 bajtów dzięki Kevinowi
źródło
&&
może być&
iord(strtolower($c))-96
może byćord($c)%32
. Myślę też, że możesz usunąć~
wcześniej$c
, ale nie jestem pewien. Nie zaprogramowałem zbyt wiele w PHP i tak naprawdę nie wiem, do czego~
jest używany.Perl 5
-p
, 35 bajtówWypróbuj online!
Obejmuje dodatkową część dotyczącą cyfr.
źródło
/\w/
obejmuje_
-F/[^0-9\pL]|/
: Wypróbuj online!Japt 2.0
-S
, 9 bajtówUruchom to online
Wyjaśnienie:
źródło
Perl 6 , 32 bajty (alfa), 41 bajtów (alfa + cyfra)
Wypróbuj (32 bajty alfa)
Wypróbuj (41 bajtów alfa + cyfra)
Rozszerzony:
32 bajty alfa
41 bajtów alfa + cyfra
źródło
Э
, ale poprosiłem OP o wyjaśnienie, czy dane wejściowe są tylko ASCII, czy nie.Tcl , 93 bajty
Wypróbuj online!
źródło
PHP
108105 bajtówWypróbuj online (108 bajtów)
Tri it online (105 bajtów)
-3 Bajty, dzięki @manassehkatz (Zmień poziom strtolower i usuń AZ z wyrażenia regularnego)
Kod, starał się unikać pętli
Wyjaśnienie
źródło
strtolower($argv)
i usuwając kapitałA-Z
z wyrażenia regularnego$argv[1]
czy$argn
zamiast$argv
?join
jest o 3 bajty krótszy niżimplode
.Python 3 , 84 bajtów
Wypróbuj online!
źródło
Python 2,
110 bajtów104 bajty , z danymi wejściowymi użytkownikaWypróbuj online!
Python 2,
105 bajtów 104 bajty96 bajtów , gdziet
jest predefiniowany:Wypróbuj online!
Podzielmy to na bardziej czytelną wersję:
Po pierwsze, definiujemy
alphabet
jako cóż, alfabet.Następnie używamy rozumienia listy do:
t
Wreszcie łączymy to wszystko razem i drukujemy.
Edycja: Zmieniono na
print
(i utracono przenośność), aby zapisać bajty i sprawić, że będzie działać poza funkcjąEdycja 2: Dodano wersję z
input()
predefiniowanymi zmiennymiEdycja 3: Usunięto 8 bajtów w rozwiązaniach 1 i 2 dzięki Jo Kingowi
źródło
+
), gdzie są pozostałe?if
,for
i" "
[]
wjoin
PowerShell , 63 bajty
Wypróbuj online!
(Wydaje się długi ...)
Pobiera dane wejściowe
$args
, konwertuje wielkość liter, rzutuje.ToUpper
je nachar
tablicę, przekazuje je dofor each
pętli. Wewnątrz pętli odejmiemy samą albo 64 od wartości ASCII (int), na podstawie tego, czy bieżąca wartość jest-in
zasięg65
do90
(czyli jest to litera ASCII). Te wartości są pozostawione w potoku, a my używamy-n
ote
Qual, aby wyeliminować wartości inne niż litery (ponieważ wszystkie są zerowe). Liczby te są enkapsulowane w łańcuch, ponieważ domyślnym szeregowaniem macierzy jest rozdzielenie spacji, więc otrzymujemy to dość tanio. Ten ciąg jest pozostawiony w potoku, a dane wyjściowe są niejawne.źródło
MS-SQL, 133 bajty
Zgodnie z naszymi zasadami IO , wejście zostanie podjęta przez istniejący wcześniej tabeli T z pola varchar s .
Wymagany jest SQL 2017 lub nowszy. Musi być również uruchomiony w
master
bazie danych, ponieważ korzystam z tabeli systemowej o nazwiespt_values
, która (po przefiltrowaniutype='P'
) zawiera liczby zliczające od 0 do 2047.Zasadniczo dołączam do tabeli liczb za pomocą ciągu wejściowego
SUBSTRING()
, który zwraca osobny wiersz dla każdego znaku. Jest to filtrowane tylko przy użyciu literLIKE'[a-z]'
, a następnie otrzymujemy ich wartość ASCII i odejmujemy 64. Te liczby są ponownie łączone w ciąg za pomocą funkcji (nowość w SQL 2017)STRING_AGG
.źródło
Pyth , 10 bajtów
Jestem prawie pewien, że można to trochę pograć w golfa ... -2 bajty, jeśli mogę wyprowadzić jako listę, niektóre odpowiedzi wydają się, ale nie ma tego w specyfikacji
Wypróbuj online!
źródło
d
(jdfTmhGr0
10 bajtów).C (gcc) , 67 bajtów
Wypróbuj online!
Konwertuje każdy znak na małe litery, przesuwa kod o -96, a jeśli mieści się w zakresie 1-indeksowanego alfabetu, drukuje kod przesunięcia
źródło
jq , 45 bajtów
Wypróbuj online
źródło