Problem:
Tworzysz nowy telefon, na którym ludzie mogą na przykład wpisywać wyspecjalizowane numery telefonów 1-800-program
, i zostaną one automatycznie przekonwertowane na użyteczny numer telefonu, taki jak 1-800-7764726
(w poprzednim przykładzie).
Twój program otrzyma ciąg znaków, jeśli ma dowolną długość z cyframi, literami i myślnikami, i przekonwertuje wszystkie litery na odpowiadające im liczby.
Oto klawiatura w celach informacyjnych:
Zasady:
- Twój program otrzyma ciąg
- Przetworzy go i zwróci / wydrukuje kolejny ciąg
- Każdy język jest akceptowany
- Ponieważ jest to gra w golfa , wygrywa najkrótszy kod
Odpowiedzi:
GolfScript, 24 znaki
Wejście testowe:
Wyjście testowe:
Wyjaśnienie:
{ }%
stosuje kod między nawiasami klamrowymi do każdego znaku wejścia..96>{ }*
wykonuje kod między wewnętrznymi nawiasami klamrowymi tylko wtedy, gdy kod ASCII znaku jest większy niż 96 (tzn. jest to mała litera).Pierwszy
,
zamienia znak w listę wszystkich znaków o niższych kodach ASCII i91,'qx'+-
odfiltrowuje wszystkie znaki o kodach ASCII mniejszych niż 91, a także literyq
ix
z listy. W ten sposób na przykład postaća
zostaje zamieniona na listę 6-znakową[\]^_`
, az
zostaje zamieniona na listę 29-znakową[\]^_`abcdefghijklmnoprstuvwy
.Drugi
,
zlicza elementy pozostałe na liście i3/
dzieli tę liczbę przez trzy (zaokrąglając w dół). Na koniec`
zamienia wynikową liczbę (w zakresie 2–9) na ciąg.Tak więc, zgodnie ze specyfikacją, myślniki i liczby pozostają niezmienione, podczas gdy małe litery są mapowane na liczby zgodnie ze schematem klawiatury referencyjnej. Kod faktycznie przejdzie czysto przez wszystkie drukowalne znaki ASCII, z wyjątkiem małych liter (które są odwzorowane zgodnie z opisem) i znaków
{
,|
oraz}
(które są mapowane do ciągu dwóch znaków10
). 8-bitowe wejście inne niż ASCII spowoduje powstanie różnego rodzaju dziwnych danych liczbowych.Po tym wszystkim trochę rozczarowujące jest to, że pokonuje to trywialne rozwiązanie bash tylko o sześć znaków.
źródło
Bash, 30
Edycja: Dziękuję Klamce za wyeliminowanie 3 znaków
Przykład:
źródło
9
sekund?C,
837877656362http://ideone.com/qMsIFQ
źródło
~(c=getchar())
getch()
zamiastgetchar()
?getch()
nie jest standardem C, dlatego wydaje mi się, że nie łączy się w ideone. Mimo to przetestowałem go w MSVC i tak naprawdę nie działa to smutno - ponieważ bezpośrednio zużywa klawiaturę, nie ma możliwości wyjścia z programu, chociaż tłumaczy to, co piszesz w locie, co jest całkiem fajne.JavaScript - 103 znaki
źródło
charCodeAt(0)
zecharCodeAt()
można użyć funkcji strzałki dlafunction(y)...
zaoszczędzić kilka bajtów i~~(y/3)
można użyćy/3|0
Ruby, 75 znaków
Używa przestarzałego
chars
bloku i drukuje każdą literę indywidualnie za pomocą$><<
. Ja też lubię[[*?a..?z].index(c)||-1]
; pobiera znak odpowiadający tej literze alfabetu, jeśli jest to litera, a ostatni znak (który jest niezmienionym znakiem testowym), jeśli nie.Rubinowy, 43 (lub 35) znaków
Rażąco kradnie z @ace;)
Ogol 8 znaków, jeśli mogę uruchomić w IRB ze zmienną
s
jako ciągiem:źródło
C ++ - 222 znaków
Najdłuższe jak dotąd rozwiązanie:
źródło
Frink, 92
Wiem dość gadatliwy język. Sprawdza to 8 wartości zamiast 26 bez konieczności wpisywania porównań. Czy którekolwiek z powyższych rozwiązań „222333444 ..” można zmniejszyć w podobny sposób?
Korzystanie z wbudowanych struktur, 107
Korzystanie z niestandardowej funkcji rekurencyjnej 92
źródło
Smalltalk,
7970dane wejściowe to s:
prawdopodobnie nie jest kandydatem na bycie najkrótszym - ale może zainteresować starą sztuczką, aby uniknąć testu na nie znaleziony warunek (indexOf: w tym przypadku zwraca 0). Dlatego nie jest wymagany specjalny test na litery. Niektóre Smalltalks mają jednak niezmienne ciągi i potrzebujemy 4 dodatkowych znaków („kopiuj”).
Och, lepsza wersja, która nawet zajmuje niezmienne ciągi znaków w 70 znakach:
źródło
Mathematica 90
Jest to zgodne z logiką rozwiązania @ ace:
Przykład
źródło
1
się#1
:)1
. Nadal 90 znaków, ale wycinanie i wklejanie będzie działać. Rozumiesz oczywiście motywację do korzystania ze strzały jednoznakowej.Perl, 50
Kolejna oczywista kopia odpowiedzi Ace na bash
źródło
-p
zamiast tego przełącznika, który pozwala ładnie przejść przez każdą linię standardowego wejścia. W tym momencie zakresy w / y nie muszą być umieszczane w nawiasach kwadratowych. Możemy również pozbyć się trzech 9 pozostawiając tylko jeden i usunąć ostatni średnik: Proszę-p y/a-z/22233344455566677778889/
, 30 + 1 za-p
. Dziękujemy za skorzystanie z usług golfowych i optymalizacyjnych Enterprise Chinese Perl i życzę miłego dnia.R, bardzo długie, ale zabawne
źródło
k [32 znaki]
Stosowanie
źródło
JavaScript, 85
JavaScript nigdy nie wygra wojen golfowych, ale lubię to i chciałem zrobić coś innego niż wskoczyć na modę @ace.
źródło
PHP, 141
Nie najkrótszy, ale bardziej zabawny:
Bardziej czytelny:
źródło
strtolower
Python 2.7, 80
Jestem nowy w Pythonie, więc jestem pewien, że musi istnieć sposób na grę w golfa jeszcze bardziej , to inne podejście, mam nadzieję, że wam się podoba, mój Boże, ładna jest Python!
Uruchom przykład:
źródło
T-SQL, 216 bajtów
Spędziłem sporo czasu w ciągu ostatnich kilku nocy, starannie opracowując matematyczną funkcję sekwencji, która zaokrąglałaby poprawnie, aby wygenerować odpowiednie kody ASCII dla liczb z alfabetycznych kodów ASCII. Miał śmieszną liczbę miejsc po przecinku we współczynnikach, ale działał.
Jednak racjonalne podejście Mattnewport działa również w języku SQL, przy znacznie niższym koszcie bajtów, więc bezwstydnie pozbywam się własnej matematyki na jego korzyść. Głosuj w górę, to eleganckie rozwiązanie!
To moje:
Wykorzystuje rekurencyjne CTE, aby zaimprowizowany stos znaków w numerze telefonu i tłumaczyć litery w locie, a następnie trochę sztuczek SQL (SELECT @ p = @ p + columnValue), aby ponownie skomponować ciąg z CTE bez konieczności kolejny konstrukt rekurencyjny.
Wydajność:
źródło
Python 2.7,
6665Anakata's Original
Dalsza gra w golfa
Nie mam wystarczającej reputacji, aby skomentować odpowiedź @ anakata, dlatego napisałem tutaj osobny post. Miałem ten sam pomysł (biorąc moduł zarządzający 3), ale nie mogłem wymyślić, jak wydrukować odpowiednie liczby dla s - z .
W każdym razie ulepszenia wprowadzone przez golfa:
zmieniony
raw_input
nainput
usunięto obce
'\b'
i nawiasy oraz pojedyncze cudzysłowyusunięto
+2
przesunięcie i umieściłem je w pierwotnym odjęciu (97 - (3 * 2) = 91)Przetestowano przy użyciu interpretera języka Python 2.7.6. Zakłada, zgodnie z regułami, ciąg znaków.
źródło
PHP, 87
źródło
q [38 znaków]
Zainspirowany rozwiązaniem @ ace
Przykład
źródło
XQuery, 71
BaseX został użyty jako procesor XQuery.
$i
jest wejściem.Nie najkrótsza odpowiedź, ale dość krótka i bardzo czytelna.
źródło
Python, bardzo nie golfowy
Ponieważ wszyscy kopiują asa, przed wysłaniem pytania postanowiłem opublikować kod, który przygotowałem:
źródło
EcmaScript 6 (103 bajty):
Oczekuje
i
zawierać ciąg.Wypróbuj w dowolnej najnowszej wersji Firefoksa. Nie próbowałem Google Chrome.
źródło
Python 3, 121
źródło
Haskell, 93 ° C
Stosowanie
źródło
C # 140
źródło
Pyton
źródło
ECMASCRIPT, 101 (z wejściem)
Dodano nową linię dla przejrzystości. 85 znaków, jeśli wejście jest w zmiennej.
źródło
Perl, 54
Strzelaj, @RobHoare wciąż bije mnie o 4 znaki. :)
źródło
QBasic, 155
Ach, wspomnienia ...
Powinno to być krótsze, ale testowałem przy użyciu repl.it , który nie zezwala na
IF
instrukcje jednowierszowe i zachowuje się dziwnie, jeśli pominiesz zmiennąNEXT i
. Nie rozpoznaje równieżASC
funkcji, więc aby uruchomić kod, musisz dodać to obejście na początku:(Za drugim razem, gdy go uruchomisz, tłumacz narzeka, chyba że usuniesz
DECLARE FUNCTION
linię, idź na rysunek.)źródło
R 110
Przykład:
źródło