Balanceakt
Überblick
Bei einer Eingabe von 3 einstelligen positiven Ganzzahlen, die einen Satz von Gewichten darstellen, geben Sie eine ASCII-Darstellung einer Wippe mit den darauf platzierten Gewichten aus, sodass sie um einen zentralen Drehpunkt herum im Gleichgewicht ist, wobei Hebeleffekte berücksichtigt werden.
Jede Zahl hat ein Gewicht, das ihrem Wert entspricht. Das Drehmoment jeder Zahl ist das Gewicht multipliziert mit dem Abstand von der Mitte in Zeichen. Für die Wippe im Gleichgewicht zu sein, wie die Summe Drehmoment der Gewichte auf der linken Seite der Wippe müssen die derjenigen , auf der rechten Seite gleich, dies .
Eingang
3 ganze Zahlen im Bereich von 1-9. Sie können die Ganzzahlen bequem eingeben, z. B. ein Tupel, 3 durch Kommas getrennte Werte usw. Ihr Programm muss jedoch in der Lage sein, die eingegebenen Zahlen in beliebiger Reihenfolge zu verarbeiten (dh es muss nicht davon ausgegangen werden, dass die Werte sortiert werden). Es können doppelte Zahlen eingegeben werden (zB 2,3,2).
Die Eingaben lassen mathematisch immer eine gültige Ausgabe zu, andernfalls ist die Eingabe ungültig.
Ausgabe
Die Ausgabe sollte eine 2-zeilige ASCII-Darstellung der Wippe mit den darauf platzierten Gewichten sein. In der ersten Zeile stehen die Ziffern, um sie auf der Wippe auszugleichen.
Zahlen dürfen nicht genau in der Mitte der Skala platziert werden, wo der Abstand und damit das Drehmoment Null wäre. Gültige Abstände vom Mittelpunkt liegen zwischen 1 und 10 Zeichen links oder rechts vom Drehpunkt.
In den von den Zahlen nicht belegten Feldern stehen 18 Unterstriche (ein mittlerer Unterstrich und 10 auf jeder Seite abzüglich der 3 von den Zahlen belegten Stellen). In der letzten Zeile befindet sich ein einzelnes Caret-Zeichen, das an der Mitte der Skala ausgerichtet ist und den Drehpunkt darstellt.
Beispiele
Eingang:
4,7,2
Ausgabe:
________7___42_______
^
7 * 2 = 4 * 2 + 2 * 3
Zahlen können auf beiden Seiten ausgegeben werden, zum Beispiel wäre dies auch gültig:
_______24___7________
^
2 * 3 + 4 * 2 = 7 * 2
Zahlen können an einer beliebigen Stelle auf der Skala platziert werden, solange sie ausgeglichen sind, z. B .:
Eingang:
3,1,5
Ausgabe:
_____5________1__3___
^
5 * 5 = 1 * 4 + 3 * 7
oder
____5________1_____3_
^
5 * 6 = 1 * 3 + 3 * 9
oder
____5___________1_3__
^
5 * 6 = 1 * 6 + 3 * 8
etc
Ihr Programm muss nur eine der gültigen Ausgaben ausgeben. Es muss kein Fehler ausgegeben werden, wenn die Eingabe ungültig ist.
Anmerkungen
- Das ist Code-Golf, also gewinnt das kürzeste Programm in Bytes
- Das Programm kann ein eigenständiges Programm oder eine Funktion sein, die die Zahlen als Eingabe akzeptiert und eine Zeichenfolge zurückgibt.
- Das Nachziehen von Zeilenumbrüchen und Leerzeichen in der letzten Zeile ist optional
- Wenn Sie nicht wissen, was eine Wippe ist, wird sie auch als Wippe oder Wippe bezeichnet.
Antworten:
CJam,
403938 BytesProbieren Sie es online aus.
Wie es funktioniert
quelle
CJam,
4644 BytesTeste es hier.
Erläuterung
Erstens eine Bemerkung: Wir müssen niemals zwei Ziffern an den Enden der Wippe anbringen. Immer wenn es sich um eine gültige Lösung handelt, gibt es mindestens eine andere gültige Lösung (gemäß dem Pastebin im Kommentar zur Herausforderung).
quelle
Java,
519414321 BytesMein erster Golfversuch.
Sie können es mit aufrufen
f(a,b,c)
. Versuch es hier ausBEARBEITEN: Verwendete Izlin-Prüfmethode
(a*i+b*j+c*k)==0
EDIT: Danke, J Atkin für die Golfvorschläge.
quelle
p
auf ändernObject a
und anstelle der anderen 2System.out.print(ln)
s verwenden.a
es nur einmal verwendet wird, können Sie es einbinden.Pyth,
67585349 BytesDas fühlt sich für Pyth ein wenig gewaltig an, aber ich kenne mich mit der Sprache noch nicht so gut aus, dass ich sie noch viel kleiner machen kann.Sub 50 Bytes, damit bin ich endlich zufrieden!Die Eingabe wird beispielsweise als Array von Ganzzahlen erwartet
[1,2,3]
. Probieren Sie es hier aus.Erklärung:
Und zum Schluss einige Beispiele für Ein- und Ausgänge:
quelle
C -
237228 BytesSie können es mit aufrufen
f(a,b,c)
.Probieren Sie es hier aus .
Beispielausgaben:
quelle
Python 2.7
235226219 BytesTesten Sie es mit einigen grundlegenden Beispielen -
(1,1,1),(1,2,1),(3,1,5),(4,7,2)
Ergebnisse in:Ausgänge für alle möglichen Eingaben eingefügt hier
quelle
"".join(l) -> 'l'[2::5]
ist ein Byte kürzer (ersetzen Sie die Anführungszeichen durch Backticks).repr
. :)PHP, 278 Bytes
Eine Brute-Force-Lösung, die eine Reihe verschachtelter Schleifen und einige Tests verwendet.
Setzen Sie es wie immer in eine Datei (nennen wir es
seesaw.php
), verbinden Sie die Zeilen (hier zwecks Lesbarkeit aufgeteilt), setzen Sie den PHP-Marker (<?php
) an den Anfang der Datei (technisch gesehen ist er nicht Teil des Programms) und Sie Es ist gut zu gehen.Ein Beispiel für die Ausführung:
Es werden alle Lösungen (ohne Reflexionen) generiert und angezeigt, die Duplikate werden jedoch nicht entfernt (wenn die Eingabewerte Duplikate enthalten).
quelle
Julia, 154 Bytes
Ungolfed + Erklärung:
quelle
C 252 (214) Bytes
Rufen Sie mit a, b, c als Argumente in der Befehlszeile auf.
Wenn main weggelassen werden kann, sinkt die Anzahl der Bytes für eine Funktion auf 214.
Beide verwenden dieselbe Strategie: Platzieren Sie das erste Gewicht links, scannen Sie dann die möglichen zweiten Gewichtspositionen ab und berechnen Sie das dritte Gewicht. Dies ermöglicht das Entfernen einer inneren Schleife.
quelle