Konwertuj ciąg zawierający cyfry jako słowa na liczbę całkowitą, ignorując początkowe zera.
Przykłady
"four two"
->42
."zero zero zero one"
->1
.
Założenia
Zgłoszenia mogą zakładać, że:
- Łańcuch wejściowy składa się z cyfr oddzielonych spacjami.
- Wszystkie słowa są poprawne (w zakresie „zero” .. „dziewięć”) i małe litery. Zachowanie pustych danych wejściowych jest niezdefiniowane.
- Łańcuch wejściowy zawsze reprezentuje liczbę bez znaku w zakresie
int
i nigdy nie jest łańcuchem pustym.
Punktacja
Odpowiedzi będą oceniane w bajtach, przy czym mniej bajtów będzie lepszych.
code-golf
string
number
conversion
Brylant
źródło
źródło
range "zero".."nine"
nie jest to w pełni określone.Interpreter@"SemanticNumber"
robi to dokładnie w Mathematica - z tym wyjątkiem, że zawodzi na ciągach zaczynających się odzero zero
.Odpowiedzi:
PHP , 74 bajty
Wypróbuj online!
Próbowałem znaleźć rozwiązanie, które nie kopiuje istniejących odpowiedzi. Dostaję cykliczną redundancję sumy kontrolnej wielomianu 32-bitowych długości ( crc32 ) dla każdego słowa, a następnie robię na nim mod 20 i mod 11, aby uzyskać pomieszane unikalne wartości od 0 do 10 (brak 6) dla każdej cyfry. Następnie za pomocą tej unikalnej wartości znajduję rzeczywistą cyfrę.
Kolejna 74 bajtowa alternatywa CRC32 przy użyciu
%493%10
:Wypróbuj online!Kolejna 74 bajtowa alternatywa CRC32 z wykorzystaniem
%2326%11
: Wypróbuj online!PHP , 74 bajty
Wypróbuj online!
Inna alternatywa o tej samej długości, bierze 22 znak
md5
tego słowa (jedyny znak, który daje unikalną wartość dla każdego słowa), a następnie używa tego znaku do mapowania na cyfrę.źródło
Python 2 ,
7170 bajtów-1 dzięki ovs (użyj
find
zamiastindex
)Wypróbuj online!
źródło
JavaScript (ES6),
70 67 6662 bajtówZaoszczędzono 3 bajty dzięki @ovs
Wypróbuj online!
źródło
'2839016547'[parseInt(s,36)%204%13]
jest o 3 bajty krótszy.Galaretka ,
1917 bajtówMonadyczny link akceptujący listę znaków, który daje liczbę całkowitą.
Wypróbuj online!
Prawie port mojej odpowiedzi w Pythonie 2.
Poprzedni
Wypróbuj online!
Być
możeistnieje krótsza droga, ale ta właśnie przyszła mi do głowy.źródło
Python 3 ,
107,91,77, 90 bajtów-16 bajtów autorstwa Sriotchilism O'Zaic
+13 bajtów, aby usunąć wiodące zera
Wypróbuj online!
źródło
lstrip
Metoda paski każdy znak w łańcuchu, który jest podany jako argument, że to, więc „osiem dwa” staje się „rawo dwa”, jak „e” zostanie pozbawiony. Również „zero zero zero” powinno wypisać „0”, a nie dawać błędu.Perl 6 ,
3532 bajtówWypróbuj online!
Wyjaśnienie
źródło
C (gcc) , 89 bajtów
Wypróbuj online!
Dzięki najmądrzejszym sztuczkom @Ceilingcat:
źródło
05AB1E ,
1816 bajtówWypróbuj online.
Wyjaśnienie:
Zobacz moją wskazówkę 05AB1E (sekcja Jak kompresować ciągi znaków nie będące częścią słownika? ), Aby zrozumieć, dlaczego tak
.•ƒ/ÿßÇf•
jest"rothuvsein"
.źródło
05AB1E ,
1716 bajtówWypróbuj online!
Idealny remis z drugą odpowiedzią 05AB1E , ale z zupełnie innym podejściem.
źródło
Retina 0.8.2 ,
4645 bajtówWypróbuj online! Link zawiera przypadki testowe. Wyjaśnienie:
Umieść każde słowo w osobnej linii i potrój je.
Transliteruj siódmy znak każdego wiersza za pomocą ciągu @ UnrelatedString.
Usuń wszystkie pozostałe znaki inne niż cyfry.
Usuń zera na początku (ale zostaw przynajmniej jedną cyfrę).
Poprzednie 46-bajtowe bardziej tradycyjne rozwiązanie:
Wypróbuj online! Link zawiera przypadki testowe. Wyjaśnienie:
Słowa
zero
,two
,four
,six
ieight
jednoznacznie zawierać literyzwuxg
. Przetłumacz je na cyfry parzyste.W przypadku cyfr nieparzystych wystarczy dopasować pierwsze dwie litery każdego słowa osobno.
Usuń wszystkie pozostałe znaki inne niż cyfry.
Usuń zera na początku (ale zostaw przynajmniej jedną cyfrę).
źródło
Galaretka ,
201817 bajtówWypróbuj online!
-2 bajty od uruchomienia „rothuvsein” do kompresora ciągów user202729 .
-1 bajt od kradzieży łańcucha zerowego Jonathana Allana i umieszczenia go w programie o nieznacznie innej strukturze.
źródło
C ++ (gcc) ,
478218142 bajtów- (bardzo) dzięki Jo King
Wypróbuj online!
źródło
Japt , 13 bajtów
Spróbuj
Wygląda na to, że wszyscy inni pobili mnie do tego samego pomysłu - mógłbym zaoszczędzić sobie trudu pisania scenariusza, aby brutalnie wymusić optymalny ciąg znaków do kompresji, tylko po to, by to znaleźć, aż do indeksu
1,000,000
(było wcześnie, nie miałem kofeina jeszcze!), „rothuvsein” to jedyny możliwy ciąg!Sprężone ciąg zawiera znaki na codepoints
206
,168
,117
,118
,160
i136
.źródło
Rubinowy ,
63 bajty,52 bajty, 50 bajtów-2 dzięki wartościowej końcówce atramentu
źródło
$*
jest pseudonimemARGV
, więc możesz użyć go, aby zaoszczędzić dodatkowe bajty.T-SQL, 110 bajtów
Podział linii służy wyłącznie do odczytu.
Dane wejściowe są pobierane za pomocą tabelija , zgodnie z naszymi zasadami IO . Mógłbym zapisać 14 bajtów, wypełniając wstępnie zmienną łańcuchową, ale jest to dozwolone tylko wtedy, gdy język nie ma innych metod wprowadzania.
Wyjaśnienie:
STRING_SPLIT
pobiera ciąg wejściowy i oddziela go w spacjachCHARINDEX
pobiera pierwsze 2 znaki i zwraca pozycję (na podstawie 1) w ciągu'_ontwthfofisiseeini'
.'ze'
dla zera nie ma w ciągu i zwraca 0 dla „nie znaleziono”. Podkreślenie zapewnia, że otrzymujemy tylko wielokrotności dwóch.STRING_AGG
rozbija cyfry z powrotem bez separatora0+
wymusza niejawną konwersję na INT i usuwa wszelkie początkowe zera.1*
też by działał.źródło
kod maszynowy x86, 46 bajtów
Hexdump:
Jest to
fastcall
funkcja - otrzymuje wskaźnik do łańcucha wecx
i zwraca wynikeax
.Funkcja haszująca mnoży się przez liczbę magiczną
1856645926
, wykonuje aXOR
bajt wejściowy i przesuwa się w prawo o 2 bity.Zapisywanie i przywracanie rejestrów noclobber (
edi
iebx
) zajmowało 4 bajty, ale nie znalazłem bardziej wydajnego sposobu na wdrożenie tego. Przechowywanie stałej 10ebx
było szczególnie denerwujące!Demontaż z odpowiednimi bajtami kodu:
Równoważny kod C:
źródło
Czysty , 88 bajtów
Wypróbuj online!
Mocno oparty na Jonathana Allana .
Używa zrozumienia do indeksowania zamiast
indexOf
/elemIndex
.źródło
jot , 38 bajtów
Wypróbuj online!
źródło
Węgiel drzewny , 19 bajtów
Wypróbuj online! Link jest do pełnej wersji kodu. Port z odpowiedzią 05AB1E @ KevinCruijssen. Wyjaśnienie:
źródło
PowerShell , 48 bajtów
Wypróbuj online!
Wykorzystuje tę samą
rothuvsein
sztuczkę, co inni, dzięki Jonathanowi Allanowi. Oczekuje argumentów wejściowych poprzez splatting, które w TIO przejawiają się jako osobne argumenty wiersza poleceń.źródło
Kotlin, 83 bajty
+1 bajt, jeśli chcesz wspierać długie
toLong()
Sama rothuvsein trik jak inni, oszczędzając cenne bajty dzięki Nicei Kotlin za
toInt()
ifold()
. Po prostu nie mogę pozbyć się wrażenia, że więcej bajtów można zgolić ...źródło
sed -re , 78 bajtów
źródło
Pakiet Windows, 169 bajtów
źródło
Perl 6 , 45 bajtów
Wypróbuj online!
źródło
VBA, 160 bajtów
Dopasowuje dwa pierwsze znaki w ciągu, z wyłączeniem zero.
źródło
BaCon ,
8372 bajtyZakładając, że ciąg jest podany w w $, ten kod wyszukuje indeks w „zeontwthfofisiseeini” przy użyciu wyrażenia regularnego opartego na unikalnych pierwszych 2 znakach każdego słowa. Indeks jest następnie dzielony przez 2, zapewniając poprawny wynik.
źródło