Zwycięzca: Chilemagic , ogromne 21 bajtów!
Możesz kontynuować przesyłanie odpowiedzi, jednak nie możesz już wygrać. Zachowano oryginalny post:
Twoim celem jest znalezienie wszystkich liczb w ciągu i pomnożenie każdej z nich indywidualnie przez wartość wprowadzoną przez użytkownika
- Nie będziesz musiał się martwić o ułamki dziesiętne
- Użytkownik wprowadzi liczbę i ciąg znaków
- Użytkownik musi w pewnym momencie wpisać liczbę i ciąg znaków, jednak metoda odczytana przez program nie ma znaczenia. Może to być standardowe wejście, czytanie pliku tekstowego itp., Jednak użytkownik musi w pewnym momencie nacisnąć przycisk 9 na klawiaturze (na przykład)
- Wszystko, co można skompilować i uruchomić, jest dopuszczalne
Przykład:
Wprowadzanie zdań: To 1 to22a 3352 zdanie 50
Wprowadzanie liczb: 3
Wyjście: to 3 to 66a 10056odsetność 150
- Konkurs kończy się 6 września 2014 r. (7 dni od opublikowania).
- To jest golf golfowy , więc wygrywa najkrótszy kod
Odpowiedzi:
Aktualizacja - Perl - 17
15 znaków + 2 dla
-i
i-p
flagi.Możemy użyć
-i
flagi do wprowadzenia rozszerzenia pliku, ale ponieważ nie czytamy żadnych plików, możemy go użyć, aby uzyskać numer, a zmienna$^I
zostanie mu przypisana.Biegnij z:
Perl - 21
Zaktualizowano zgodnie z komentarzem @ Dennisa.
Uruchom z
-p
flagą.Przykładowy przebieg:
Wyjaśnienie:
$n=<>;
przeczytaj numer-p
wypisuje dane wyjściowes/\d+/$&*$n/ge
Odczytaj dane wejściowe za pomocą <> i wyszukaj jedną lub więcej cyfr i zastąp je cyframi pomnożonymi przez liczbę.g
jest globalny,e
jesteval
miksturą zastępującą s ///.$&
zawiera co zostało dopasowane i pomnożona przez liczbę,$n
.Możesz przeczytać więcej na temat
s///
w perlop więcej o Perl regexes w perlre .Inne rozwiązanie:
@ F.Hauri wskazał, że możesz również użyć
s
przełącznika, aby przypisać$n
zmienną do 4. Nie jestem pewien, ile znaków to liczy, ale zostawię ją tutaj:źródło
<>=~
zamiast_$=<>;
. Czy mógłbyś również wyjaśnić, co oznaczas
część wyrażenia regularnego dla nas, nowicjuszy?$&
zamiast$1
, możesz skrócić(\d)
do\d
. 2. Jeśli użyjesz-p
przełącznika i zmienisz kolejność wprowadzania, możesz upuścićsay<>=~
ir
.-s
przycisku, aby whipe$n=<>
się:perl -spe 's/\d+/$&*$n/ge' -- -n=4 <<<'This 1 is22a 3352sentence 50'
(czynią:This 4 is88a 13408sentence 200
)JavaScript (ES6) -
4844 znakówDzięki @bebe za uratowanie jednej postaci. Aktualizacja: 8 / Mar / 16, usunęła kolejne cztery postacie
Nie golfowany :
43 znaki:
Wymaga podania liczby, a następnie zdania. Wytnij tutaj jeszcze jeden znak dzięki dzięki @bebe!
źródło
(p=prompt)(p(b=p()).replace(/\d+/g,y=>y*b))
inny (ale najpierw prosi o mnożnik)Python 2 (79)
Przykładowy przebieg
Wejście: Wynik:Demo online: http://ideone.com/V6jpyQ
źródło
re.sub
metoda Beta Decay i ja (pozostałe dwa zgłoszenia w języku Python) próbowaliśmy ponownie wdrożyć. Byłoby to takie proste ... Czegoś innego się nauczyłem! ;)re.sub
bok, wykonałeś świetną robotę w grze w golfa w logice zastąpienia łańcuchare.sub
właśnie tego chciałem!Python 2 - 126
Pierwsze wejście: liczba całkowita
n
.Drugie wejście: ciąg znaków
s
(np"abc42"
. Ze znakami cudzysłowu ).źródło
CJam,
473330 bajtówOdczytuje liczbę i ciąg (w tej kolejności i oddzielone pojedynczym odstępem) od STDIN.
Wypróbuj online.
Przykładowy przebieg
Jak to działa
źródło
Bash + coreutils, 38 bajtów
Odczytuje ciąg wejściowy ze STDIN i mnożnika jako parametr wiersza poleceń.
Wynik:
źródło
1 D4R3 Y0U: ; rm -rf /
C # w LINQPad, 124
Bezpośredni. Proszę użyć CTRL + 2 w LINQPad (Język: Instrukcje C #).
Jeśli jako pierwszy parametr wejściowy podano mnożnik, można to zrobić za pomocą 116 znaków:
EDYTOWAĆ:
Dzięki poniższemu komentarzowi Abbasa można go jeszcze bardziej pograć w golfa za pomocą statycznej metody Regex , zamiast tworzyć jej instancję:
źródło
var k=int.Parse(Console.ReadLine());Regex.Replace(Console.ReadLine(),"\\d+",t=>""+int.Parse(t.Value)*k).Dump();
. W obu wersjach zapisuje to kolejne 5 znaków, co daje 119 na dłuższą wersję i 111 na pierwszą wersję z mnożnikiemKobra - 171
źródło
Python 3-141
Nie sądzę, żebym mógł już grać w golfa ...
Przykład:
źródło
n=2
is="1 2"
daje4 4
, ponieważreplace
dwukrotnie modyfikuje pierwszą liczbę. Z tym samym problemem mam teraz do czynienia w Pythonie 2 ...;)m=input()
nic cię nie oszczędza. Ix=int
faktycznie jest o 2 bajty dłuższy niżint(...)
dwukrotne wywołanie .Mathematica
7161Z 10 znakami zapisanymi dzięki Martinowi Buttnerowi.
Odstępy w kodzie służą do odczytu.
f
to funkcja, w którejs
jest ciąg wejściowy in
liczba, przez którą należy pomnożyć odkryte liczby ciągów.Przykłady
Liczba całkowita
Liczba wymierna
Liczba zespolona
źródło
StringReplace
niego nie ma znaczenia, czy znajdują się miejsca. Użyłem przykładów podanych pierwotnie przez Chiperyman.StringReplace
Nie ma znaczenia, czy są spacje.Rubin 40
Dane wejściowe ze standardowego wejścia.
Przykładowy przebieg:
Demo online: http://ideone.com/4BiHC8
źródło
Lua:
7369 znakówPrzykładowy przebieg:
źródło
JavaScript, ES6, 43 znaki
To moja pierwsza próba gry w golfa!
Uruchom to w najnowszej konsoli Firefox. Pierwsze wejście to liczba, a drugie wejście to ciąg, z którego liczby należy pomnożyć przez pierwszy numer wejścia.
Ostatni monit wyświetla dane wyjściowe.
źródło
Perl - 48 znaków
Przeczytaj cyfrę w pierwszym wierszu, a następnie przeczytaj zdanie i podziel je na części z cyfr lub bez cyfr. Wydrukuj cyfry bez zmian, a liczby zostaną pomnożone.
źródło
J - 63 znak
Program wczytuje liczbę, a następnie zdanie.
Wyjaśnione przez wybuch:
Jeśli skorzystamy z biblioteki PCRE J. i sprawimy, że zdanie będzie najważniejsze, możemy zmniejszyć liczbę znaków do 54 :
Wyjaśnione przez wybuch:
J jest w tym zły, co mogę powiedzieć. Jest to niewygodne, ponieważ J. jest taki nieimperatywny.
Kilka przykładów:
źródło
CJam - 35
Wypróbuj na http://cjam.aditsu.net/
Przykładowe dane wejściowe:
Przykładowe dane wyjściowe:
Wyjaśnienie:
Program przechodzi przez każdy znak, zbierając cyfry na stosie, i dla każdej cyfry najpierw drukuje zebraną liczbę (jeśli istnieje) pomnożoną przez wejście numeryczne, a następnie drukuje znak.
li:X;
odczytuje wejście numeryczne i zapisuje je w XlN+
odczytuje ciąg i dołącza nowy wiersz (pomaga w końcowych liczbach){…}/
dla każdego znaku w ciągu-
_s
kopiuje znak i konwertuje na ciąg-
A,s-,
usuwa wszystkie cyfry i zlicza pozostałe znaki; wynik będzie wynosił 0, jeśli znak był cyfrą lub 1, jeśli nie-
{…}*
wykonuje blok, jeśli liczba wynosiła 1 (tj. nie cyfra); dla cyfr nic nie robi, więc pozostają na stosie-
]
zbiera znaki ze stosu do tablicy (tzn. łańcucha); znaki to dowolne cyfry z poprzednich iteracji plus bieżący znak-
)\
oddziela ostatni element (aktualny znak) i przenosi go przed (pozostałym) ciągiem-
_!!
kopiuje ciąg i konwertuje go na wartość logiczną - 0 jeśli pusty, 1 jeśli nie-
{…}*
wykonuje blok, jeśli ciąg nie był pusty, tzn. mieliśmy kilka cyfr przed bieżącym znakiem innym niż cyfra---
iX*
konwertuje ciąg na liczbę całkowitą i mnoży przez X-
o
drukuje górę stosu - pomnożoną liczbę lub pusty ciąg, jeśli nie mamy liczby-
o
(drugi) drukuje nową górę stosu - bieżący non- znak cyfrowyźródło
Haskell (161)
Grał w golfa
Nie golfił
Niestety, Haskell nie ma biblioteki Regex w swoim Preludium .
źródło
{}
aby zyskać 1 znak. też właśnie opublikowałem to rozwiązanie Haskell z 70 bajtami: codegolf.stackexchange.com/questions/37110/…flex (-lekser) (
9489 znaków)Wersja bez golfa, która nie segfaga, jeśli zapomnisz argumentu wiersza poleceń (niewiele dłużej):
Połącz z:
lub:
Na przykład:
źródło
Groovy
- 124Kliknij tytuł, aby zobaczyć wykonalny przykład
Przykłady Wypróbowane:
źródło
GNU Awk: 86 znaków
Przykładowy przebieg:
źródło
PHP -
75/11568/109Dwie wersje, nowsze wersje php mogą to zrobić:
Starsze wersje php: nie policzyłem nowego wiersza, dodałem te dla czytelności.
Przykładowe wejście + wyjście
Trochę trudne, słowa „funkcja” i „preg_replace_callback” zajmują wiele znaków.
Spacja po
global
ireturn
nie są potrzebne, jeśli po niej następuje $ var (-2 znaki)źródło
\d
klasy postaci (-2 znaki); nie ma potrzeby ujmowania funkcji w podwójne cudzysłowy (-2 znaki); musisz poprawnie zakończyć instrukcję wewnątrz funkcji średnikiem (+1 znak). Nawiasem mówiąc,\d
w cudzysłowie należy napisać jako\\d
, więc lepiej zmień cudzysłowy na pojedyncze.0-9
na \ d. Nie byłem pewien co do cytatów wokół funkcji, nie mogę tego przetestować, moja lokalna wersja php na to nie pozwala.C (
142134 znaków)Dodano nową linię dla lepszej czytelności. Przekaż czynnik jako pierwszy, łańcuch jako drugą opcję wiersza poleceń. Ta implementacja wymaga
dprintf
funkcji, która jest częścią POSIX.1 2008 i może nie być dostępna w systemie Windows. Oto niezminimalizowane źródło:Ulepszenia
strspn
istrcspn
zamiast zapętlać ciąg.źródło
Python 89
na przykład:
źródło
Rebol - 117
Nie golfowany:
źródło
Clojure -
141140128 znakówJestem początkującym Clojure, ale FWIW:
Przykładowy przebieg:
Nie golfista (brzydki, ale mam nadzieję, że nieco łatwiejszy do odczytania):
źródło
Python - 142
źródło
Java 218
Ktoś musiał zrobić java. Ciąg wejściowy to 2 tokeny w wierszu poleceń.
java M 'This 1 is22a 3352sentence 50' 3
źródło
if
warunek działa|
również bitowo , czyli o 1 znak krótszy.Dwie odpowiedzi: perl + bash
Pure Bash (~ 262)
Po pierwsze, istnieje niezbyt krótka wersja czysto bashowa (bez rozwidlenia, bez zewnętrznych plików binarnych)!
Pokażmy:
(Które zdanie jest całkowicie nieprawdopodobne)
Perl trochę zaciemniony (tylko dla zabawy)
Ta wersja (oparta na odpowiedzi @ Chilemagic ) nie jest krótsza, ale została zaprojektowana jako skrypt totemowy :
Przykładowy przebieg:
źródło
Haskell, 70
szkoda, że jestem za późno IMHO to całkiem nieźle jak na to konkretne pytanie i język. inne rozwiązanie Haskell tutaj ma 161 znaków.
działa to przy użyciu
reads
funkcji, która częściowo analizuje ciąg. na przykładreads "34abc" = [(34, "abc")]
. to oczywiście czyni go idealnym do tego wyzwania.stosowanie:
źródło