Jako dziecko moja siostra pokazała mi tę małą kalkulację miłości, aby zobaczyć, jak wiele masz szans na nawiązanie udanego związku ze swoją sympatią. Wszystko czego potrzebujesz to 2 nazwiska i kartka papieru.
- Jan
- Jane
Następnie oddzielasz te nazwy słowem Loves . Możesz to napisać w jednym wierszu lub w nowych wierszach.
John
Loves
Jane
Następnie rozpoczyna się obliczanie. Zaczynasz od zliczenia, ile razy postać występuje od lewej do prawej, aw przypadku korzystania z nowych linii również od góry do dołu. Każda postać jest liczona raz, więc po policzeniu J Jana nie musisz ich liczyć ponownie, kiedy zaczynasz z Jane. Wynik tego przykładu będzie następujący:
J: 2 ([J] ohn | [J] ane)
O: 2 (J [o] hn | L [o] ves)
H: 1 (Jo [h] n)
N: 2 (Joh [n] | Ja [n] e)
__
L: 1 ([L] oves)
O: pominięty
V: 1 (Lo [v] es)
E: 2 (Lov [e] s | Jan [e])
S: 1 (Love [s ])
__
J: pominięto
A: 1 (J [a] ne)
N: pominięto
E: pominięto
__
Wynik końcowy: 2 2 1 2 1 1 2 1 1
Następnym krokiem będzie dodanie cyfr pracujących z zewnątrz na środek.
2 2 1 2 1 1 2 1 1 (2 + 1 = 3)
2 2 1 2 1 1 2 1 1 (2 + 1 = 3)
2 2 1 2 1 1 2 1 1 (1 + 2 = 3)
2 2 1 2 1 1 2 1 1 (2 + 1 = 3)
2 2 1 2 1 1 2 1 1 (1)
__
Wynik: 3 3 3 3 1
Będziesz to robić, dopóki nie pozostanie liczba całkowita mniejsza lub równa 100.
3 3 3 3 1
4 6 3
76%
Może się zdarzyć, że suma 2 cyfr stanie się ≥ 10, w tym przypadku liczba zostanie podzielona na 2 w następnym rzędzie.
Przykład:
5 3 1 2 5 4 1 8
13 (Będzie wykorzystany jako 1 3)
1 3 4 5 7
8 8 4 (8 + 4 = 12 użyty jako 1 2)
1 2 8
92%
Wymagania
- Twój program powinien być w stanie zaakceptować dowolną nazwę o rozsądnej długości (100 znaków)
- Dozwolone są znaki [A..Z, a..z].
- Bez rozróżniania wielkości liter, więc A == a
Bezpłatnie, aby zdecydować
- Jak obsługiwać znaki specjalne (Ö, è itp.)
- Uwzględnij nazwiska tak lub nie, spacje zostaną zignorowane
- Dowolny język jest dozwolony.
Zwycięzca zostanie wyłoniony w głosowaniu 28 lutego 14 lutego.
Szczęśliwego kodowania
Ps To pierwszy raz, kiedy coś tu umieszczam, jeśli jest jakiś sposób, aby to poprawić, daj mi znać = 3
Edycja: Zmieniono datę zakończenia na Walentynki, uważam, że byłoby to bardziej odpowiednie dla tego wyzwania :)
źródło
1-love_result
:-)Odpowiedzi:
Sclipting
Oczekuje danych wejściowych jako dwóch słów oddzielonych spacją (np
John Jane
.). Rozróżnia małe i wielkie litery, ale obsługuje tylko znaki, które nie są specjalnymi znakami regularnymi (więc nie używaj(
ani*
w swoim imieniu!). Oczekuje również tylko dwóch słów, więc jeśli twoją miłością jest „Mary Jane”, musisz wpisaćMaryJane
jedno słowo; inaczej oceni „YourName kocha Mary kocha Jane”.Wyjaśnienie
Najtrudniej było poradzić sobie z przypadkiem nieparzystej liczby cyfr: musisz zostawić środkową cyfrę w spokoju, zamiast dodawać ją samą. Myślę, że moje rozwiązanie jest interesujące.
Kiedy pozostanie ci coś ≤ 100, pętla właśnie się skończy, odpowiedź będzie na stosie, a zatem wynik.
źródło
改
(bez rozróżniania wielkości liter ciąg znaków) w odpowiedzi na to wyzwanie, ale nie zamierzam z niego korzystać tutaj.Funciton
Ten program oczekuje, że dane wejściowe zostaną oddzielone spacją (np
John Jane
.). Rozróżnia małe i wielkie litery dla znaków AZ / az; w przypadku każdego innego znaku Unicode „pomyli” dwa znaki, które są równe, gdy lub z 32, (np.Ā
iĠ
, lub?
i_
). Ponadto nie mam pojęcia, co ten program zrobi, jeśli dane wejściowe zawierają znak NUL (\0
), więc nie używaj tego :)Ponadto, ponieważ StackExchange dodaje zbyt duże odstępy między wierszami, oto surowy tekst na pastebin . Alternatywnie uruchom następujący kod w konsoli JavaScript przeglądarki, aby go naprawić tutaj:
$('pre').css('line-height',1)
Szybkie wyjaśnienie
Program po prostu przyjmuje STDIN i dzwoni
Ḷ
z nim.Ḷ
znajduje pierwszą spację w ciągu, zastępuje jąloves
i przekazuje wynik doỌ
.Ọ
wielokrotnie pobiera pierwszy znak z ciągu wejściowego, wywołujeṢ
go i konkatenuje liczbę wystąpień w ciągu wynikowym. Gdy łańcuch wejściowy jest pusty, wywołujeṾ
łańcuch wynikowy.Ṿ
wielokrotnie wywołuje,Ẹ
dopóki nie uzyska wyniku, który jest równy"100"
lub ma długość mniejszą niż 3. (100
może się zdarzyć: rozważ dane wejściowelovvvv eeeeeess
.) Kiedy to zrobi, dodaje"%"
i zwraca to.Ẹ
oblicza jedną pełną iterację algorytmu obliczania miłości; tzn. pobiera ciąg cyfr i zwraca następny ciąg cyfr.Ṛ
pobiera stóg siana i igłę i znajduje indeks pierwszego wystąpienia igły w stogu siana przy użyciu kryterium faux niewrażliwości na wielkość liter (or 32
).Ṣ
bierze stóg siana i igłę i wielokrotnie stosuje sięṚ
do usunięcia wszystkich wystąpień igły . Zwraca końcowy wynik po wszystkich usunięciach, a także liczbę wykonanych usunięć.źródło
Rubin
Drukuje serce, jeśli szansa na związek przekracza 50%
I drukuje złamane serce, jeśli szanse są poniżej 50% :(
Cholerny John ...
W każdym razie nie uwzględnia wielkości liter i obsługuje zapytania poligamiczne (np
ruby ♥.rb Alice Bob Carol Dave
.).źródło
APL, 80
Bo
miłość to miłośćkod-golf to kod-golf (nawet jeśli nie jest)Obowiązkowa wersja w kształcie ♥::
Wersja w golfa daje mi nieco nieobliczalne zachowanie, z powodu błędu,
∪⍦
który badam u programistów NARS:Ale udało mi się uruchomić go fragmentarycznie i uzyskać prawidłowy wynik:
źródło
JavaScript
Prawdopodobnie może być czystszy, ale działa. Pełen przykład
źródło
Pyton
Myślałem, że to golf golfowy ...
Nie golfowany:
źródło
reduce(list.__add__,xyz)
zsum(xyz,[])
. :)PHP
przykładowy wynik
źródło
GolfScript
Kod obowiązkowy Odpowiedź golfa w GolfScript:
Akceptuje wprowadzanie jako nazwy oddzielone spacjami, np
źródło
DO#
źródło
q[i] + q[j]
ma 10 lub więcej?Haskell
Moja wersja jest dość długa, ponieważ postanowiłem skoncentrować się na czytelności. Pomyślałem, że sformalizowanie algorytmu w kodzie będzie interesujące. Sumuję liczby znaków w lewej zakładce , w zasadzie śnieżkami je razem i kolejność jest w kolejności ich występowania w ciągu. Udało mi się również zastąpić część algorytmu, która normalnie wymagałaby indeksowania tablicy przez gięcie list . Okazuje się, że twój algorytm zasadniczo polega na zwijaniu listy liczb na pół i dodawaniu wyrównanych liczb razem. Istnieją dwa przypadki zginania, parzyste listy dzielone ładnie na środku, nieparzyste listy wyginają się wokół środkowego elementu i ten element nie uczestniczy dodatkowo. Rozłam bierze listę i dzieli liczby, które nie są już pojedynczymi cyframi, jak> = 10 . Musiałem napisać własny rozkład , nie jestem pewien, czy to rzeczywiście rozkład , ale wydaje się, że robi to, czego potrzebuję. Cieszyć się.
Niektóre wyniki:
„Romeo” „Julia” 97% - ważne są testy empiryczne
„Romeo” „Julier” 88% - nowoczesna wersja skrócona ...
„Horst Draper” „Jane” 20%
„Horst Draper” „Jane (koń)” 70% - Nastąpił rozwój ...
„Bender Bender Rodriguez” „Fenny Wenchworth” 41% - Bender mówi „Składanie jest dla kobiet!”
„Philip Fry” „Turanga Leela” 53% - Cóż, widać, dlaczego zajęło im 7 sezonów, by poślubić
„Marię” „Abraham” - 98%
„John” „Jane” 76%
źródło
Rubin
Zminimalizowane:
Nazwać:
źródło
l=->a{...}
zamiastl=lambda do|a|...end
, i możesz także zrobićl[...]
zamiastl.call(...)
.Python 3
Proste rozwiązanie bez użycia modułów. I / O jest dość ładny.
Użyłem łapania błędów jako kopii zapasowej, gdy drugi iterator jest poza zakresem; jeśli wyłapie błąd indeksu Pythona, przyjmuje 1. Dziwne, ale działa.
Oto przykładowy przebieg:
źródło
for
nanames
wprost?25211111111.363221.485.98
. myślę, że kod nie dodaje 5 „a”Jawa
Co jeśli liczba jest równa 10? Właśnie dodałem 1 i 0, czy to prawda?
Postanowiłem zignorować przypadek.
wkład:
wydajność:
wkład:
wydajność:
źródło
do
Może być wiele ulepszeń, ale kodowanie było fajne.
I oczywiście obowiązkowa wersja gry w golfa: 496
źródło
Python 3
To zajmie dwie nazwy jako dane wejściowe. usuń dodatkowe spacje, a następnie oblicz miłość. Sprawdź dane wyjściowe, aby uzyskać więcej informacji.
wkład:
wydajność:
Lub spróbuj tego;)
wkład:
wydajność:
źródło
k, 80
Oto seria:
źródło
jot
Oto prosty w J:
Pobiera nazwy w wierszu poleceń, np .:
źródło
Groovy
Oto wersja Groovy z testami.
Wyjaśnienie:
CodeGolf Groovy, 213 znaków
Widząc, że to codegolf , możemy wprowadzić zamknięcia i sprowadzić to do tego:
zapisz to jako lovecalc.groovy. Uruchom „Groovy Lovecalc John Jane”
Wynik:
źródło
Jawa
To bierze 2 parametry Ciąg na początku i wypisuje liczbę każdego znaku i wynik.
Z pewnością nie najkrótsza (to Java), ale jasna i czytelna.
Więc jeśli zadzwonisz
dostajesz wynik
źródło
R
Nie zamierzam wygrać żadnych nagród za zwięzłość, ale i tak dobrze się bawiłem:
Testowane: ważne dla „John” i „Jane” oraz dla „Romeo” i „Juliet”. na mój komentarz pod pytaniem
źródło