Otrzymałeś ciąg. Wypisuj ciąg z jedną spacją na słowo.
Wyzwanie
Wejście będzie ciąg (nie null
lub pusta), otoczony z cytatami ( "
) wysyłane za pośrednictwem stdin
. Usuń z niego początkowe i końcowe spacje. Ponadto, jeśli pomiędzy dwoma słowami (lub symbolami lub czymkolwiek) jest więcej niż jedna spacja, przycinaj ją do tylko jednej spacji. Wyjście zmodyfikowanego ciągu z cudzysłowami.
Zasady
- Ciąg nie będzie dłuższy niż 100 znaków i będzie zawierać tylko znaki ASCII w zakresie
(spacja) do
~
(tylda) (kody znaków od 0x20 do 0x7E włącznie), z wyjątkiem"
, tzn. Ciąg nie będzie zawierał cudzysłowów ("
) i innych znaków poza zakres określony powyżej. Zobacz tabelę ASCII w celach informacyjnych. - Musisz wziąć dane wejściowe z
stdin
(lub najbliższej alternatywy). - Dane wyjściowe muszą zawierać quotes (
"
). - Możesz napisać pełny program lub funkcję, która pobiera dane wejściowe (z
stdin
) i generuje końcowy ciąg znaków
Przypadki testowe
"this is a string " --> "this is a string"
" blah blah blah " --> "blah blah blah"
"abcdefg" --> "abcdefg"
" " --> ""
"12 34 ~5 6 (7, 8) - 9 - " --> "12 34 ~5 6 (7, 8) - 9 -"
Punktacja
To jest kod golfowy, więc wygrywa najkrótsze przesłanie (w bajtach).
must take input from stdin
, a potem mówisz...or a function which takes input, and outputs the final string
. Czy to oznacza, że funkcja również musi pobierać dane wejściowestdin
?" "aa" "
->""aa""
(czy cytaty są poprawne w ciągu wejściowym?)Odpowiedzi:
CJam, 7 bajtów
Objaśnienie kodu
CJam zastrzegł wszystkie duże litery jako zmienne wbudowane. Więc
S
ma wartość przestrzeni tutaj.Usuwa to również spacje końcowe i wiodące
Wypróbuj online tutaj
źródło
/// : 18 znaków
Przykładowy przebieg:
(Użycie interpretera faubiguy z jego odpowiedzi Perla na Interpretacja /// (wymawiane „ukośniki”) .)
źródło
Perl, 22
(20 bajtów kodu plus 2 przełączniki wiersza poleceń)
Musi być uruchamiany za pomocą
-np
przełącznika, aby$_
był automatycznie napełniany przez standardowe wejście i drukowany na standardowe wyjście. Zakładam, że to dodaje 2 do liczby bajtów.źródło
sed -E 's/ +/ /g;s/" | "/"/g'
-p
implikuje-n
, więc musisz tylko wziąć tutaj karę +1 (zakładając, że nie przełączasz się tylko na inny język, jak sugerują inni komentatorzy).Ruby,
31292523 bajtówObjaśnienie kodu:
p
wypisuje ciąg znaków w podwójnych cudzysłowach doSTDOUT
( jest jednak coś więcej ...)$*
jest tablicą danychSTDIN
wejściowych,$*[0]
bierze pierwsząstrip
usuwa początkowe i końcowe spacjesqueeze ' '
zastępuje> 1 znak spacji jednym spacjąPrzypadki testowe:
źródło
ARGV
z$*
oszczędności dwa bajty.gsub /\s+/, ' '
można zastąpićsqueeze ' '
na kolejne 4 bajty$*
, nie wiedziałem o tym. Ale nie możemy wymienićgsub /\s+/, ' '
zsqueeze
ponieważ nie są one takie same .squeeze ' '
będzie ściskać tylko spacje."yellow moon".squeeze "l" => "yelow moon"
p
i jego parametr, jaksqueeze
i jego parametr są niepotrzebne.Pyth,
17151110 bajtów(dzięki Ypnypn i FryAmTheEggman )
Prawdopodobnie można by grać w golfa więcej.
Jeśli
'
zamiast tego można użyć danych wyjściowych,"
potrzebuję tylko 8 bajtów:źródło
N
zamiast\"
d
.d
wszystkiego, do czego można go wykorzystać?p
aby zaoszczędzić kilka bajtów na łączeniu łańcuchów zamiast wielu+
es.pjd-cQdkNN
Bash,
3632 bajtówJako funkcja, program lub po prostu w potoku:
Wyjaśnienie
Pierwszy
xargs
usuwa znaki cudzysłowu.Drugi
xargs
przycina lewą stronę i zastępuje wiele sąsiednich spacji w środku łańcucha jedną spacją, biorąc każde „słowo” i oddzielając je spacją.xargs -i echo '"{}"'
Przycina prawą stronę i rewraps wynikowy ciąg w cudzysłowach.źródło
x=xargs;$x|$x|$x -i echo '"{}"'
Haskell,
3125 bajtówwords
dzieli ciąg na listę ciągów ze spacjami jako ogranicznikami iunwords
łączy listę ciągów z pojedynczymi spacjami pomiędzy nimi. Cytaty"
są usuwane i odkładane przez funkcje Haskellread
ishow
(domyślnie przez REPL) na łańcuchach.Wyprowadzanie przez samą funkcję jest trzy bajty dłuższe, tj. 28 bajtów:
Edycja: @ Mauris wskazał na
readLn
funkcję, która zapisała niektóre bajty.źródło
Parse error: naked expression at top level
kiedy testowałem oba kody tutajmain=interact$show.unwords.words.read
. Na froncie haskell.org znajduje się internetowa REPL (wymaga włączonej obsługi plików cookie), gdzie możesz spróbowaćfmap(unwords.words.read)getLine
.fmap(unwords.words)readLn
iprint.unwords.words=<<readLn
są nieco krótsi.readLn
.R, 45 bajtów
The
readline()
Funkcja czyta ze standardowego wejścia, automatyczne usuwanie jakichkolwiek początkowe i końcowe spacje. Nadmiar spacji między słowami usuwa się za pomocągsub()
. Wreszcie, cudzysłowy są dodawane i dołączane, a wynik jest drukowany do STDOUT.Przykłady:
źródło
[1] "This is a string"
Python2, 37
Zmniejszony o 1 bajt dzięki @ygramul.
Orginalna wersja:
Przypadki testowe:
źródło
print" ".join(raw_input().split())
, ale miałby spację w ostatnim znaku cudzysłowu, gdyby po ostatnim słowie były spacje ...JavaScript (ES6), 49
52 58Edytuj 6 bajtów krócej dzięki @Optimizer
Edytuj 2 2-3, dzięki @nderscore
Wejście / wyjście przez wyskakujące okienko. Używanie ciągu szablonu do wycięcia 1 bajtu w łączeniu ciągu.
Uruchom fragment kodu, aby przetestować w przeglądarce Firefox.
źródło
alert(`"${eval(prompt()).match(/\S+/g).join(" ")}"`)
- 52alert(`"${prompt().match(/[^ "]+/g).join(" ")}"`)
05AB1E , 9 bajtów
Wypróbuj online!
źródło
Mathematica, 75 bajtów
źródło
KDB (Q), 28 bajtów
Wyjaśnienie
Test
źródło
Java 8, 43 bajty
Wyjaśnienie:
Wypróbuj tutaj.
źródło
Oktawa , 44 bajty
Wypróbuj online!
źródło
Perl 5 , 17 bajtów
16 bajtów kodu + 1 dla
-p
Wypróbuj online!
źródło
Jq 1,5 , 42 bajty
Przykładowy przebieg
Wypróbuj online
źródło
Tcl , 69 bajtów
Wypróbuj online!
Tcl , 79 bajtów
Wypróbuj online!
źródło
Japt
-Q
,104 bajtówSpróbuj
źródło
golfua, 42 bajty
Prosta zamiana pasujących wzorów: znajdź dowolne cudzysłowy (
\"
) otoczone 0 lub więcej spacjami (%s*
) i zwróć pojedynczy cudzysłów, a następnie zamień wszystkie 1 lub więcej spacji (%s+
) na jedną spację.Byłby to odpowiednik Lua
źródło
Kobra - 68
Jako funkcja anonimowa:
źródło
Cel C 215
Wersja nieskompresowana:
źródło
Bash, 14 bajtów
źródło
PowerShell, 40 bajtów
Całkiem prosto i niezbyt imponująco.
Wyjaśnienie
Weź parametr wejściowy za pomocą (predefiniowanej) zmiennej args, zamień wszystkie wiele spacji na jeden, przycinaj spacje wiodące i końcowe za pomocą metody trim () - dodaj cudzysłowy. Program PowerShell wypisze ciągi do konsoli jako zachowanie domyślne.
źródło
k4, 23 bajty
źródło
Zsh , 15 bajtów
Wypróbuj online!
Ciąg wejściowy zawiera osadzone cudzysłowy. Wyjąć
Q
dla 14 bajtów , jeśli ciąg wejściowy nie zawiera osadzone cytaty, jak to ma miejsce w niektórych innych odpowiedzi tutaj.Flagi ekspansji parametrów:
Q
usuwają cudzysłowy, a następniez
dzielą się na słowa, tak jak robi to powłoka. Słowa są następnie domyślnie łączone spacjami.źródło
Strzyżyk , 56 bajtów
Czekać. Zamiennik robi to tylko raz ? Teraz muszę użyć kombinacji split-join.
Wypróbuj online!
Wyjaśnienie
źródło
GolfScript , 8 bajtów
Wypróbuj online!
Wyjaśnienie
Logika jest dość prosta:
źródło
Python2, 28 bajtów
Wyjaśnienie
Anonimowa funkcja, która przyjmuje jako dane wejściowe.
Zwraca listę słów (oddzielonych dowolnymi ciągami znaków spacji) ciągu s.
Łączy listę z powrotem w ciąg, a każde słowo jest oddzielone spacją („”).
źródło