Als Kind hat mir meine Schwester diese kleine Liebesberechnung gezeigt, um zu sehen, wie groß die Chance ist, dass Sie eine erfolgreiche Beziehung mit Ihrem Schwarm eingehen. Sie benötigen lediglich 2 Namen und ein Blatt Papier.
- John
- Jane
Dann trennen Sie diese Namen mit dem Wort Loves . Sie können dies entweder in eine Zeile oder in neue Zeilen schreiben.
John
liebt
Jane
Dann beginnt die Berechnung. Sie zählen zunächst, wie oft ein Zeichen von links nach rechts vorkommt, und falls Sie neue Zeilen verwenden, auch von oben nach unten. Jeder Charakter wird einmal gezählt. Nachdem Sie also das J von John gezählt haben, müssen Sie sie nicht erneut zählen, wenn Sie mit Jane beginnen. Das Ergebnis dieses Beispiels lautet wie folgt:
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: übersprungen
V: 1 (Lo [v] es)
E: 2 (Lov [e] s | Jan [e])
S: 1 (Love [s ])
__
J: übersprungen
A: 1 (J [a] ne)
N: übersprungen
E: übersprungen
__
Endergebnis: 2 2 1 2 1 1 2 1 1
Der nächste Schritt wird das Hinzufügen der Ziffern von außen zur Mitte sein.
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 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)
__
Ergebnis: 3 3 3 3 1
Sie werden dies so lange tun, bis eine ganze Zahl kleiner oder gleich 100 übrig ist.
3 3 3 3 1
4 6 3
76%
Es kann vorkommen, dass die Summe der 2 Ziffern ≥ 10 wird. In diesem Fall wird die Zahl in der nächsten Zeile in 2 geteilt.
Beispiel:
5 3 1 2 5 4 1 8
13 (Wird als 1 3 verwendet)
1 3 4 5 7
8 8 4 (8 + 4 = 12 wird als 1 2)
1 2 8
92%
Bedarf
- Ihr Programm sollte in der Lage sein, jeden Namen mit angemessener Länge (100 Zeichen) zu akzeptieren.
- [A..Z, a..z] Zeichen sind erlaubt.
- Groß- und Kleinschreibung wird nicht berücksichtigt, also A == a
Sie können frei entscheiden
- Umgang mit Sonderzeichen (Ö, è usw.)
- Nachnamen mit Ja oder Nein, Leerzeichen werden ignoriert
- Jede Sprache ist erlaubt.
Der Gewinner wird am 28. und 14. Februar durch Abstimmung ermittelt .
Fröhliches Codieren
PS: Es ist das erste Mal, dass ich hier etwas aufstelle. Wenn es eine Möglichkeit gibt, es zu verbessern, lass es mich wissen = 3
Edit: Enddatum in Valentinstag geändert, dachte, das wäre besser für diese Herausforderung geeignet :)
quelle
1-love_result
:-)Antworten:
Sclipting
Erwartet die Eingabe als zwei durch Leerzeichen getrennte Wörter (z
John Jane
. B. ). Die Groß- und Kleinschreibung wird nicht beachtet, es werden jedoch nur Zeichen unterstützt, bei denen es sich nicht um reguläre Sonderzeichen handelt (verwenden Sie also nicht(
oder*
in Ihrem Namen!). Es werden auch nur zwei Wörter erwartet. Wenn Ihr Liebesinteresse also "Mary Jane" lautet, müssen SieMaryJane
ein Wort eingeben. Andernfalls wird "YourName liebt Mary liebt Jane" ausgewertet.Erläuterung
Das Schwierigste war, den Fall einer ungeraden Anzahl von Ziffern zu behandeln: Sie müssen die mittlere Ziffer in Ruhe lassen, anstatt sie mit sich selbst zu addieren. Ich finde meine Lösung interessant.
Wenn etwas ≤ 100 übrig bleibt, endet die Schleife, die Antwort befindet sich auf dem Stapel und wird daher ausgegeben.
quelle
改
Reaktion auf diese Herausforderung habe ich beispielsweise " String-Ersetzen ohne Berücksichtigung der Groß- / Kleinschreibung" eingeführt , aber ich werde es hier nicht verwenden.Funktion
Dieses Programm erwartet die Eingabe durch ein Leerzeichen (zB
John Jane
) getrennt. Bei den Zeichen AZ / az wird die Groß- / Kleinschreibung nicht berücksichtigt. Für jedes andere Unicode-Zeichen werden zwei Zeichen "verwechselt", die gleich oder gleich 32 sind (z. B.Ā
undĠ
, oder?
und_
). Außerdem habe ich keine Ahnung, was dieses Programm tun wird, wenn die Eingabe ein NUL (\0
) -Zeichen enthält, also benutze das nicht :)Da StackExchange zu viel Zeilenabstand hinzufügt, ist hier der Rohtext im Pastebin . Alternativ können Sie den folgenden Code in der JavaScript-Konsole Ihres Browsers ausführen, um ihn hier zu beheben:
$('pre').css('line-height',1)
Schnelle Erklärung
Das Programm nimmt nur STDIN und ruft
Ḷ
damit auf.Ḷ
findet das erste Leerzeichen in der Zeichenkette, ersetzt es durchloves
und übergibt das Ergebnis anỌ
.Ọ
Nimmt wiederholt das erste Zeichen aus der Eingabezeichenfolge, ruftṢ
damit auf und verknüpft die Anzahl der Vorkommen mit einer Ergebniszeichenfolge. Wenn die Eingabezeichenfolge leer ist, wird sieṾ
mit der Ergebniszeichenfolge aufgerufen.Ṿ
ruft wiederholt auf,Ẹ
bis das Ergebnis gleich"100"
oder kürzer als 3 ist. (100
Kann tatsächlich auftreten: Eingabe berücksichtigenlovvvv eeeeeess
.) Wenn dies der Fall ist, wird dies hinzugefügt"%"
und zurückgegeben.Ẹ
berechnet eine vollständige Iteration des Liebesberechnungsalgorithmus; Das heißt, es wird eine Ziffernfolge verwendet und die nächste Ziffernfolge zurückgegeben.Ṛ
Nimmt einen Heuhaufen und eine Nadel und ermittelt den Index des ersten Auftretens einer Nadel im Heuhaufen unter Verwendung des Kriteriums der Unterscheidung nach Groß- und Kleinschreibung (or 32
).Ṣ
Nimmt einen Heuhaufen und eine Nadel und wiederholt angewendetṚ
, um alle Instanzen der Nadel zu entfernen . Es wird das Endergebnis nach allen Entfernungen sowie der Anzahl der vorgenommenen Entfernungen zurückgegeben.quelle
Rubin
Druckt ein Herz, wenn die Wahrscheinlichkeit einer Beziehung über 50% liegt
Und druckt ein gebrochenes Herz, wenn die Chancen unter 50% liegen :(
Verdammter John ...
Auf jeden Fall wird die Groß- und Kleinschreibung nicht berücksichtigt und polygame Abfragen (z
ruby ♥.rb Alice Bob Carol Dave
. B. ) werden unterstützt.quelle
APL, 80
Denn
Liebe ist LiebeCode-Golf ist Code-Golf (auch wenn es nicht ist)Obligatorische ♥ ︎-Form:
Die Golf-Version verhält sich etwas unberechenbar, da
∪⍦
ich wegen eines Fehlers bei den Entwicklern von NARS nachforsche:Aber ich konnte es stückweise ausführen und das richtige Ergebnis erzielen:
quelle
Javascript
Wahrscheinlich könnte sauberer sein, aber es funktioniert. Ausführliches Beispiel
quelle
Python
Nun, ich dachte, es wäre ein Code-Golf ...
Ungolfed:
quelle
reduce(list.__add__,xyz)
mitsum(xyz,[])
. :)PHP
Probenergebnis
quelle
GolfScript
Obligatorische Code Golf Antwort in GolfScript:
Akzeptiert Eingaben als durch Leerzeichen getrennte Namen, z
quelle
C #
quelle
q[i] + q[j]
10 oder höher ist?Haskell
Meine Version ist ziemlich lang, weil ich mich auf die Lesbarkeit konzentriert habe. Ich dachte, es wäre interessant, Ihren Algorithmus in Code zu formalisieren. Wenn ich die Anzahl der Zeichen in einer linken Falte zusammenfasse , werden sie im Grunde genommen zusammengeschneit, und die Reihenfolge ist in der Reihenfolge ihres Auftretens in der Zeichenfolge. Ich habe es auch geschafft, den Teil des Algorithmus, der normalerweise eine Array-Indizierung erfordert, durch List Bending zu ersetzen . Es stellt sich heraus, dass Ihr Algorithmus im Wesentlichen darin besteht, eine Liste von Zahlen in zwei Hälften zu falten und ausgerichtete Zahlen zu addieren. Es gibt zwei Fälle für das Biegen, gerade Listen, die schön in der Mitte geteilt sind, ungerade Listen, die um ein zentrales Element gebogen sind und dieses Element nicht zusätzlich beteiligt ist. Fission nimmt die Liste und teilt Zahlen auf, die keine einzelnen Ziffern mehr sind, wie> = 10 . Ich musste mein eigenes entfalten schreiben , ich bin nicht sicher, ob es tatsächlich ein entfalten ist , aber es scheint zu tun, was ich brauche. Genießen.
Einige Ergebnisse:
"Romeo" "Juliet" 97% - Empirische Tests sind wichtig
"Romeo" "Julier" 88% - Moderne Kurzfassung ...
"Horst Draper" "Jane" 20%
"Horst Draper" "Jane (Pferd)" 70% - Es gab eine Entwicklung ...
"Bender Bender Rodriguez" "Fenny Wenchworth" 41% - Bender sagt "Falten ist für Frauen!"
"Philip Fry" "Turanga Leela" 53% - Nun, Sie können sehen, warum sie 7 Saisons gebraucht haben, um "Maria" "Abraham" zu heiraten
- 98%
"John" "Jane" 76%
quelle
Rubin
Minimiert:
Nennen:
quelle
l=->a{...}
anstelle von verwendenl=lambda do|a|...end
, und Sie könnten auchl[...]
anstelle von tunl.call(...)
.Python 3
Eine einfache Lösung, die keine Module verwendet. I / O ist hübsch genug.
Ich habe das Abfangen von Fehlern als Backup verwendet, wenn der zweite Iterator außerhalb der Grenzen liegt. Wenn es den Indexfehler von Python abfängt, nimmt es an, dass 1. Weird, aber es funktioniert.
Hier ist ein Probelauf:
quelle
for
aufnames
direkt?25211111111.363221.485.98
. Ich denke, Sie Code schlägt fehl, die 5 "a" hinzufügenJava
Was ist, wenn die Zahl gleich 10 ist? Ich habe gerade 1 und 0 hinzugefügt, ist das richtig?
Ich beschloss, den Fall zu ignorieren.
Eingang:
Ausgabe:
Eingang:
Ausgabe:
quelle
C
Es könnte viele Verbesserungen geben, aber das Programmieren hat Spaß gemacht.
Und natürlich die obligatorische Golfversion: 496
quelle
Python 3
Dies nimmt zwei Namen als Eingabe an. ziehe zusätzliche Räume aus und berechne dann die Liebe. Weitere Informationen finden Sie unter Input output.
Eingang:
Ausgabe:
Oder probier mal dieses;)
Eingang:
Ausgabe:
quelle
k, 80
Hier ist eine kleine Auswahl:
quelle
J
Hier ist eine einfache in J:
Es nimmt die Namen auf der Kommandozeile an, zB:
quelle
Groovy
Hier ist die groovige Version mit Tests.
Erläuterung:
CodeGolf Groovy, 213 Zeichen
Wenn wir sehen, dass dies Codegolf ist, können wir die Verschlüsse inline setzen und es auf folgendes bringen:
Speichern Sie es als lovecalc.groovy. starte "groovy lovecalc john jane"
Ausgabe:
quelle
Java
Beim Start werden 2 String-Parameter verwendet, und die Anzahl der einzelnen Zeichen und das Ergebnis werden ausgedruckt.
Sicher nicht die kürzeste (es ist Java), aber eine klare und lesbare.
Also, wenn Sie anrufen
Sie erhalten die Ausgabe
quelle
R
Ich werde keine Kompaktheitspreise gewinnen, aber ich hatte trotzdem Spaß:
Getestet: gültig für 'john' & 'jane' und 'romeo' & 'juliet'. gemäß meinem Kommentar unter der Frage,
quelle