Podany ciąg zawierający liczby dziesiętne:
teststring134this 123test string54 100
zwiększ każdą liczbę w tym ciągu o jeden, aby dać nowy ciąg
teststring135this 124test string55 101
.
Ciąg może być podany jako:
- argument wiersza poleceń
- STDIN
- argument zmiennej lub funkcji zakodowany na stałe
Obejmuj wszystkie możliwe pozycje dla liczby:
- jako przedrostek słowa;
123test
►124test
- jako przyrostek dla słowa;
test123
►test124
- wewnątrz słowa;
te123st
►te124st
- sam
test 123 test
►test 124 test
Oto rozwiązanie do gry w golfa w Pythonie:
NUMBERS = '0123456789'
def increment(s):
out = ''
number = ''
for c in s:
if c in NUMBERS:
number += c
else:
if number != '':
out += str(int(number) + 1)
number = ''
out += c
if number != '':
out += str(int(number) + 1)
number = ''
return out
print "\"%s\"" % (increment('teststring134this 123test string54 100'))
To code-golf
pytanie, wygrywa najkrótszy kod.
Odpowiedzi:
Perl, 14 bajtów
Wymaga
-p
przełącznika, który liczyłem jako jeden bajt.Przykładowy przebieg
źródło
Rubinowy,
3024 bajtówOczekuje, że dane wejściowe zostaną zapisane
s
.źródło
$1.next
można użyć w bloku?next
że to było tak wyrafinowane.Vim - 13 naciśnięć klawiszy
Oczekuje, że wejście będzie bieżącą linią.
Lub dla skończonej liczby (np. 999) w 8 + suficie (log (n)):
źródło
JavaScript (ES6) - 28
Uruchom za pomocą
H("test 123 234t")
.źródło
H=
i po prostu mieć anonimową funkcję.Perl, 23
Zakłada, że ciąg wejściowy jest przypisany
$_
źródło
Python 2 - 59
Podaj ciąg jako zmienną
n
źródło
C99 - 86 (GCC 4.9.0 i Visual C ++ 2013)
Edycja: Zarówno GCC 4.9.0 (z -std = c99), jak i Visual C ++ 2013 pomyślnie zbudowały (z ostrzeżeniami) ten sam kod bez dołączeń. Nie wiedziałem, że możesz to zrobić! Dzięki za podpowiedź.
Edycja: Nawet nie przyszło mi do głowy, że powinienem napisać go na ekranie w locie zamiast tworzyć ciąg, a następnie drukować. To ogromna różnica. Dzięki Dennis!
Używa to łańcucha zakodowanego na stałe, ale zawartość łańcucha nie jest wliczana do sumy (liczone jest = "").
Zasadniczo przebiega przez ciąg po jednym znaku, sprawdzając każdy z nich, aby sprawdzić, czy jest liczbą całkowitą. Jeśli tak, to zwiększa liczbę całkowitą i zapisuje ją na wyjściu, w przeciwnym razie kopiuje bieżący znak na wyjście.
To przecieka zakodowany na stałe ciąg, ponieważ zwiększa on s.
źródło
include
s i nadal będzie dobrze kompilować się z gcc.99
?J (20)
Oczekuje, że dane wejściowe zostaną zapisane w zmiennej
a
.Test:
źródło
(f?) lex (39)
Plik
inc.l
:Skompilować:
Biegać:
Nie testowałem tego z oryginałem
lex
. Komentarze są mile widziane.źródło
%%
ponieważ nie jest to kod użytkownika: flex.sourceforge.net/manual/…Emacs - 20 znaków
Wymaga przetworzenia tekstu w obecnym buforze. Liczyłem CM-% jako jeden znak, ponieważ można go wprowadzić jednym naciśnięciem klawisza, przytrzymując trzy modyfikatory.
źródło
GNU sed, 304 (w tym 1 dla flagi -r)
Głosowałem za tym pytaniem jako możliwym duplikatem, ale być może jest to sprzeczne z tym, ponieważ nie można w prosty sposób zmienić tej odpowiedzi, aby tam działała. Zdecydowanie najdłuższa odpowiedź.
Zainspirowany tym przykładem z dokumentacji sed , choć wymagał trochę pracy, aby obsłużyć wiele liczb w ciągu:
Wynik:
Zauważ, że tymczasowo wstawia
_
znaki, więc może prowadzić do niepoprawnych wyników, jeśli są one_
w strumieniu wejściowym. Aby to złagodzić, możemy zamienić_
skrypt w sed na znak niedrukowalny (np. ASCII 0x07 BEL) i założyć, że strumień wejściowy zawiera tylko drukowalny ASCII. To wydaje się działać dobrze, kiedy go testuję.źródło
Rakieta 74
źródło
Lua - 68 znaków
Oczekuje, że dane wejściowe zostaną zapisane w s.
źródło
CJam,
67 58 534831 znakówTo pytanie jest jak najgorsze pytanie dla CJam. Bez wyrażenia regularnego, bez dopasowania wzorca, bez wychwytywania wyjątków. Ale zaczynamy (#YOLO)
Ten dzieli ciąg na grupę tylko alfabetów i samych cyfr. Inkrementuje każdą cyfrę i zszywa dwie tablice, biorąc po jednym elemencie na raz.
Poprzednie rozwiązanie:
Wypróbuj online tutaj
Jak to działa:
Podstawową ideą jest przechowywanie osobnego znaku w ciągu, jeśli jest on cyfrą i zrzucenie przyrostowej wartości na końcowy ciąg, gdy otrzymamy znak inny niż cyfrowy.
źródło
Kobra - 88
źródło
C # -
178169157 znakówZakłada się, że liczby takie jak 999 mogą przepełnić się do 000 i że - + ,. E nie są częścią liczby.
Lepsza czytelna forma:
Jestem tu nowy, nigdy nie próbowałem golfa kodowego, po prostu spróbowałem :)
Zastanawiam się, czy ktoś ma pomysły, aby skrócić go jeszcze bardziej ...
Aby wziąć udział w C #, byłoby miło, gdybyśmy mogli pominąć wszystkie niezbędne ramy wokół rzeczywistego kodu - wtedy miałoby to tylko 82 znaki, i to bez wywoływania żadnych potężnych funkcji systemowych.
To samo dotyczy wskaźników (182 znaków):
Teraz bez przepełnienia poprawnie obsługuje skrzynkę 999 (223 znaków):
Kolejny inny starszy, odczytuje ze standardowego wejścia i używa rekurencji:
Uwaga:
Console.ReadKey();
i sam łańcuch nie powinien być liczony.Poprawiłem to już wiele razy, patrz komentarze. Powiedziałbym, że jest jeszcze miejsce na więcej ulepszeń :) Przykro mi z powodu długości, ale myślę, że różne wersje są wystarczająco interesujące, aby je zachować ...
źródło
if(c==57)
tym, jak możesz napisaćc--;
zamiastc=48;
, a co z operatorem trójskładnikowym. istnieje wiele sztuczek golfowych. może powinieneś odwiedzić codegolf.stackexchange.com/questions/2203/tips-for-golfing-in-c... ? ... : c++*b--
Groovy, 38 bajtów
Uggghhh ... Absolutnie nienawidzę tych słów,
replace
aall
one niszczą dla mnie wszystkie regexowe golfa.źródło
(it as int)+1
→it.next()
PHP - 91 bajtów
Nie chciałem używać wyrażeń regularnych. PHP nie jest w stanie bezpośrednio zwiększyć przesunięcia łańcucha, więc musiałem dodać kilka bajtów w kroku przyrostu. Ten jednoliniowy skrypt przypomina mi bardzo mroczny wiek skryptów PHP ...
źródło
K, 56
źródło
sed i bash - 40 (w tym wywołanie i fajki)
Wyjścia:
źródło
42;rm -rf /
zadziałał za pierwszym razem.\0
na&
(-1 znak),$((…))
na$[…]
(-2 znaki),s/^/echo /
naiecho \\
(-2 znaki), aby skrócić swój obecny kod. Lepiej jednak najpierw popraw błąd wymieniony przez @Dennis. (Pisał „Udało się po raz pierwszy” dla zabawy i jako wskazówkę na temat problemu Właściwie Twój kod nie działa na wejście zawierające.;
,#
,`…`
,$(…)
I może też inne znaki specjalne.)eval echo `sed 's/[0-9]\+/$[&+1]/g'`
- nadal występuje problem z wstrzykiwaniem kodu, zgodnie z moją odpowiedzią na inne podobne pytanie codegolf.stackexchange.com/a/37145/11259Java 7, 119 bajtów
Jeśli wymaganiem jest program zamiast funkcji, to 149 bajtów:
Kod niepoznany i testowy:
Wypróbuj tutaj.
Wynik:
źródło
Gema, 14 znaków
Przykładowy przebieg:
źródło
DASH , 16 bajtów (niekonkurencyjny)
Zwraca funkcję / częściową aplikację.
Stosowanie:
Wyjaśnienie
źródło
CJam, 18 bajtów
Wypróbuj tutaj.
Wyjaśnienie
źródło
R, 83 bajty
Późno na imprezę. Zakłada, że dane wejściowe są przechowywane w zmiennej
x
. Prawdopodobnie nie jest potrzebny doregmatches
rozwiązania tego problemu, ale nie mogłem wymyślić wektorowych zamienników bez żadnych zewnętrznych pakietów.Nie golfił i wyjaśnił
Przykładowe dane wyjściowe
źródło
C # (interaktywny kompilator Visual C #) z opcją wiersza polecenia
/u:System.Text.RegularExpressions.Regex;System.Int32
, 40 bajtówOczekuje, że dane wejściowe będą w zmiennej o nazwie n.
Wypróbuj online!
źródło