Tor
Berechnen Sie bei einer Zeichenfolge mit einer Folge von Hashes deren Gesamtlänge und dividieren Sie diese durch die Entfernung vom Anfang bis zum Ende.
Simulation
Was simulieren wir? Nach dieser Arbeit beträgt das Verhältnis der Länge eines Flusses zur Entfernung zwischen Anfang und Ende ungefähr Pi! (Dies wurde möglicherweise empirisch widerlegt, aber ich konnte die Daten finden und für diese Herausforderung gehen wir davon aus, dass sie wahr sind.)
Wie simulieren wir das?
- Nehmen Sie eine Zeichenfolgeeingabe von Leerzeichen und Hashes
- Jedem Hash sind zwei weitere benachbart
- Mit Ausnahme des ersten und letzten Hashs, der nur 1 hat
- Jeder Charakter liegt auf einem Gitterpunkt
(x, y)
x
ist der Index des Charakters in seiner Zeile- zB
c
ist das 4. Zeichen in0123c567
- zB
y
ist die Zeilennummer des Zeichens- zB
c
steht in der 3. Zeile:
- zB
0line
1line
2line
3c...
- Summieren Sie die Entfernungen zwischen benachbarten Hashes, nennen Sie es
S
- Nehmen Sie den Abstand zwischen dem ersten und letzten Hash, nennen Sie es
D
- Rückkehr
S/D
Spezifikation
- Eingang
- Flexibel, Eingaben auf eine der Standardarten (zB Funktionsparameter, STDIN) und in einem beliebigen Standardformat (zB String, Binary)
- Ausgabe
- Flexibel, Ausgabe auf eine der Standardarten (z. B. Rückgabe, Druck)
- Leerzeichen, nachfolgende und führende Leerzeichen sind zulässig
- Genauigkeit, geben Sie bitte mindestens 4 Dezimalstellen Genauigkeit (dh
3.1416
)
- Wertung
- Kürzester Code gewinnt!
Testfälle
Dies sind meine Annäherungen an die Flüsse. Meine Annäherungen könnten schlecht sein oder dies könnte eine schlechte Stichprobe der Flussbevölkerung sein. Auch diese Berechnungen habe ich von Hand gemacht; Ich hätte es vermissen können.
### ####
# # #
# # #
# # #
# # #
# # #
## # # #####
## # #
##
1.6519
#
#
#
#
#
#
#
#
# #
# # #
# #
#
##
#
#
#
#
#
#
#
#
# #
# ##
#
#
#
#
#
#
#
#
#
#
#
1.5498
###
# #
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
###
#
#
#
#
#
#
#
#
#
##
#
#
##
##
##
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
####
#
#
1.5257
TL; DR
Diese Herausforderungen sind Simulationen von Algorithmen, für die nur die Natur und Ihr Gehirn (und möglicherweise einige wiederverwendbare Ressourcen) erforderlich sind, um sich dem Pi anzunähern. Wenn Sie Pi während der Zombie-Apokalypse wirklich brauchen, verschwenden diese Methoden keine Munition ! Insgesamt gibt es neun Herausforderungen .
#<tag>
Antworten:
MATL ,
4844423733 BytesDank der Idee von rahnema1 (Oktavenantwort), zwei Windungen in eine zu brechen, konnten einige Bytes gespart werden
Dies nimmt die Eingabe als binäre Matrix mit
;
als Zeilentrennzeichen.1
entspricht Hash und0
Space.Probieren Sie es online! Oder überprüfen Sie alle Testfälle .
Hier ist ein Formatkonverter, der Eingaben als 2D - Zeichen - Arrays akzeptiert (wieder mit
;
als Trennzeichen) verwendet und Zeichenfolgendarstellungen der entsprechenden binären Matrizen erstellt.Erläuterung
Das hat Spaß gemacht! Der Code verwendet
dreizwei 2D-Faltungen, jede für einen anderen Zweck:Um vertikale und horizontale Nachbarn zu erkennen, die einen Abstand von sich geben
1
, wäre die erforderliche MaskeAber wir wollen nur jedes Paar von Nachbarn einmal erkannt werden. Also nehmen wir die halbe Maske (und die letzte Nullenreihe kann entfernt werden):
Ähnlich wäre es, diagonale Nachbarn zu erkennen, die einen Abstand von
sqrt(2)
der Maske beitragenaber durch die gleiche Überlegung wie oben wird es
Wenn diese Maske
sqrt(2)
mit der ersten multipliziert und zu dieser addiert wird, können die beiden Windungen durch eine Windung mit der kombinierten Maske ersetzt werdenStart- und Endpunkt sind per Definition die Punkte mit nur einem Nachbarn. Um sie zu entdecken, arbeiten wir mit
und sehen, welche Punkte
1
als Ergebnis geben.Um die kombinierte Maske von Punkt 1 zu erzeugen, ist es kürzer, das Quadrat zu erzeugen und dann die Quadratwurzel zu ziehen. Die Maske in Punkt 2 ist ein vordefiniertes Literal.
quelle
Oktave, 99 Bytes
fast die gleiche Methode wie MATL Antwort, aber hier Kernel von Windungen ist
, Das
sqrt(2) =1.41
ist für diagonale Nachbarn und1
ist für die direkten Nachbarn so , wenn wir Werte des Ergebnisses über den Fluss fassen wir zweimal die genaue Entfernung zu bekommen.ungolfed version :
Probieren Sie es auf Octave Online aus (fügen Sie es ein)
quelle
{[x y]=find(c<2&c>0),pdist([x y])}{2}
ist so verdammt schlau !!!JavaScript (ES6), 178
Eingabe als Zeichenfolge mit Zeilenumbrüchen in rechteckiger Form : Jede Zeile wird mit Leerzeichen auf die gleiche Länge aufgefüllt (wie in den Beispielen).
Weniger golfen
Prüfung
quelle