Ihr Chef hat Ihnen gerade eine Liste mit 12 Programmieraufgaben per E-Mail geschickt, die er so schnell wie möglich erledigen muss. Die Aufgaben sind einfach genug, aber Ihr Chef, ein junger Softwaremagnat, der von sozialen Netzwerken begeistert ist, besteht darauf, dass Ihre Lösungen in einen einzelnen Twitter- Tweet passen .
Das bedeutet, dass Sie nur Code im Wert von 140 Byte haben, um alle Aufgaben zu lösen, durchschnittlich 11,67 Byte pro Aufgabe. (Ja, Twitter zählt die Zeichen, aber Ihr Chef hat speziell die Bytes gesagt.)
Sie erkennen, dass es keine Möglichkeit gibt, alle 12 Aufgaben in 140 Byte zu lösen, aber Sie vermuten, dass Ihr Chef nicht alle Ihre Lösungen tatsächlich testet. Sie lösen so viele Aufgaben wie möglich und überspringen einige davon vollständig. Ihre Einstellung ist, dass es nicht darauf ankommt, welche Teilmenge der Aufgaben Sie erledigen, sondern nur darauf, dass die Teilmenge so groß wie möglich ist .
Wie viele Aufgaben kannst du erledigen?
Herausforderung
Schreiben Sie bis zu 12 verschiedene Programme, von denen jedes genau eine der 12 unten aufgeführten Aufgaben löst. Die kumulative Summe der Längen dieser Programme darf 140 Byte nicht überschreiten
Alternativ können Sie ein einzelnes Programm mit einer Länge von maximal 140 Byte schreiben, das eine Ganzzahl von 1 bis 12 benötigt und (idealerweise) mit der Lösung der entsprechenden Aufgabe fortfährt, wobei bei Bedarf weitere Eingaben erforderlich sind. Nicht alle Aufgaben müssen funktionieren, sondern nur diejenigen, die für Ihre Punktzahl zählen. Aufgaben, die nicht funktionieren, dürfen fehlerhaft sein oder etwas anderes tun.
In beiden Fällen kann ein "Programm" tatsächlich eine Funktion sein, die die Eingabe als Argumente verwendet oder dazu auffordert und die Ausgabe ausgibt oder zurückgibt. So könnten Sie beispielsweise eine 140-Byte-Funktion schreiben, die aussieht f(taskNumber, taskInput)
, oder Sie könnten separate Codeausschnitte für jede Aufgabe schreiben, einige als Funktionen und andere als vollwertige Programme.
Andere Details:
Der gesamte Code muss in derselben Sprache geschrieben sein.
Wie üblich sollte die Eingabe von stdin, der Befehlszeile, einem Funktionsargument oder was auch immer für Ihre Sprache üblich ist, kommen. Die Ausgabe wird auf stdout oder die nächstgelegene Alternative Ihrer Sprache gedruckt oder in einem geeigneten Typ zurückgegeben.
Ein angemessenes Maß an Eingabeformatierung ist in Ordnung. zB Anführungszeichen um Zeichenfolgen oder
\n
anstelle von tatsächlichen Zeilenumbrüchen.Die Ausgabe sollte genau das sein, was erforderlich ist, ohne überflüssige Formatierungen oder Leerzeichen. Die Ausnahme ist eine optionale einfache nachgestellte Zeile.
Code, der nur in einer REPL- Umgebung ausgeführt wird, ist kein Programm oder keine Funktion.
Sie dürfen nicht mehrere Programme schreiben, die mehrere Aufgaben lösen. Es ist entweder ein Programm, das (idealerweise) alle Aufgaben löst, oder (idealerweise) 12 Programme, die jeweils eine einzelne Aufgabe lösen.
Das Posten einer Aufgabenlösung, die Sie nicht oder nur geringfügig geändert haben, ist nicht gestattet, ohne dass der ursprüngliche Autor angegeben wurde, und im Idealfall auch, um Erlaubnis zu erhalten. Wenn Ihre Antwort in erster Linie die kürzesten Lösungen aus allen anderen Antworten zusammensetzt, sollte es sich um ein Community-Wiki handeln.
Wertung
Der Beitrag, der die meisten Aufgaben erledigt, ist der Gewinner. Stimmen zwei Einsendungen überein, gewinnt der mit den wenigsten Bytes. Wenn die Anzahl der Bytes gleich ist, gewinnt die frühere Übermittlung. Community-Wiki-Antworten dürfen nicht gewinnen.
Teilen Sie uns unbedingt mit, welche Aufgaben Sie gelöst haben, nicht nur wie viele!
Handicap für Nichtgolfer:
Es ist wahrscheinlich, dass diese Herausforderung von Golfsprachen dominiert wird . Viele Sprachen haben möglicherweise Probleme, auch nur eine oder zwei Aufgaben innerhalb von 140 Byte zu lösen. Aus diesem Grund können Sie eine nicht konkurrierende Antwort einreichen , wenn das Limit 3 Tweets, dh 420 Bytes, beträgt. Alle anderen Regeln bleiben gleich.
Aufgaben
Aufgabe 1 - Können drei Zahlen ein Dreieck bilden?
Nehmen Sie drei positive ganze Zahlen auf und geben Sie einen Wahrheits- / Falschwert aus , der angibt, ob drei Linien mit diesen Längen ein Dreieck bilden könnten oder nicht . Sie können nicht davon ausgehen, dass die Nummern in einer bestimmten Reihenfolge vorliegen.
Wahrheitsbeispiele (eines pro Zeile):
20 82 63
1 1 1
2 3 4
1 2 2
Falsche Beispiele:
6 4 10
171 5 4
1 1 2
1 2 3
Aufgabe 2 - Einer Million am nächsten
Ordnen Sie sie bei einer Zeichenfolge mit genau 7 Dezimalstellen (0-9) neu an, um eine Zahl zu erhalten, die einer Million möglichst nahe kommt. Das heißt, abs(1000000 - rearrangedNumber)
sollte minimiert werden.
Geben Sie die resultierende Zahl als Ganzzahl und nicht als Zeichenfolge aus oder geben Sie sie zurück (es sollten also keine führenden Nullen vorhanden sein, es sei denn, dies ist die Norm für Ihre Sprache).
zB sollte eine Eingabe von 9034318
zu 984331
(und nicht 1033489
) führen.
2893984
sollte werden 2348899
.
0001000
sollte werden 1000000
.
0000020
sollte werden 200000
.
Aufgabe 3 - Einfacher Tastatursimulator
Nehmen Sie eine Reihe von Kleinbuchstaben (az), Leerzeichen und spitzen Klammern auf <>
. Von links nach rechts gelesen, stellt diese Zeichenfolge die Tasten dar, die auf einer Standardtastatur gedrückt wurden, während ein ursprünglich leerer Texteditor geöffnet war. Die Buchstaben und Leerzeichen entsprechen den normalen Tasten, <
entsprechen jedoch den Pfeiltasten nach links und >
nach rechts, die beide den Cursor bewegen, wenn sie gedrückt werden.
<
Bewegt den Cursor um ein Zeichen nach links oder tut nichts, wenn sich der Cursor am Anfang der Zeichenfolge befindet.
>
Bewegt den Cursor um ein Zeichen nach rechts oder tut nichts, wenn sich der Cursor am Ende der Zeichenfolge befindet.
Geben Sie die Zeichenfolge aus, die sich im Texteditor befinden würde, wenn alle Tasten in der Eingabezeichenfolge gedrückt wurden. Die Ausgabe von Escape-Codes zum Bewegen des Cursors ist nicht zulässig.
In der Eingabe ist immer mindestens ein Zeichen enthalten, das keine Pfeiltaste ist.
zB sollte der Input ui<<q>>ck <<<<<<the<<<<>>> >>>>>>>>brown x<o<f
nachgeben the quick brown fox
.
op<<l>>t<<<lam>>>>>>imi<<<><>>>zer<<<<<<<<<<<<<<<<<<>>><>m
sollte geben llammoptimizer
.
e< <c<b<a
sollte geben abc e
.
<<<>><><<><toast>><<>><><<>><
sollte geben toast
.
Aufgabe 4 - Briefe filtern
In vielen Schriftarten, 6 der Groß englischen Alphabet Buchstaben bestehen vollständig aus horizontalen und vertikalen Linien: E
, F
, H
, I
, L
, und T
. Wir werden diese die FILTHE-Buchstaben nennen.
Nehmen Sie eine Folge von Großbuchstaben (AZ) und zählen Sie die Anzahl der Zeilen in den FILTHE-Buchstaben, wobei Sie die resultierende Ganzzahl ausgeben.
E
, F
, H
, I
, L
, Und T
hat 4, 3, 3, 3, 2 und 2 Zeilen auf.
zB GEOBITS
hat 4 + 3 + 2 = 9 Zeilen einen Teil der FILTHE-Buchstaben (für .E..IT.
), so sollte die Ausgabe sein 9
.
ABCDEFGHIJKLMNOPQRSTUVWXYZ
sollte ausgeben 17
.
ABCDGJKMNOPQRSUVWXYZ
sollte ausgeben 0
.
FILTHYLINESINLETTERS
sollte ausgeben 39
.
Aufgabe 5 - Alex Recursive A.
Unser Moderator Alex A. hat eine ziemlich mysteriöse Initiale "A".
Jetzt bin ich mir nicht sicher, aber ich denke das A.
steht für .A xelA
. Und ich bin mir auch ziemlich sicher, dass das .A
da schleichend für steht Alex A.
.
Um also Alex 'vollen Namen zu erhalten, müssen wir das A.
' s und .A
's erweitern:
Alex A. -> Alex [A.] -> Alex [.A xelA] -> Alex .A xelA -> Alex [.A] xelA -> Alex [Alex A.] xelA -> Alex Alex A. xelA -> etc.
Lassen Sie Ihr Programm eine nicht negative Ganzzahl aufnehmen und Alex A.
diese so oft erweitern, bis die resultierende Zeichenfolge ausgegeben wird.
So
0
wird Alex A.
,
1
wird Alex .A xelA
,
2
wird Alex Alex A. xelA
,
3
wird Alex Alex .A xelA xelA
,
4
wird Alex Alex Alex A. xelA xelA
,
5
wird Alex Alex Alex .A xelA xelA xelA
,
und so weiter.
(Ich habe das gemacht, weil ich mich schlecht gefühlt habe, weil ich Alex versehentlich aus meiner Mod Tribute Challenge ausgeschlossen habe .: P)
Aufgabe 6 - Numpad-Rotation
Geben Sie eine ganze Zahl von 1 bis einschließlich 9 ein (Sie können sie auch als Zeichenfolge verwenden). Geben Sie das 3 × 3-stellige Quadrat aus
789
456
123
in 90 ° -Schritten gedreht, so dass die eingegebene Ziffer an einer beliebigen Stelle in der oberen Reihe erscheint. Wenn 5
eingegeben wird, ist jede Drehung eine gültige Ausgabe, da sie 5
nicht nach oben gedreht werden kann.
zB wenn 3
eingegeben wird, beides
963
852
741
und
321
654
987
sind gültige Ausgaben.
4
Nur zur Eingabe
147
258
369
ist gültige Ausgabe.
Aufgabe 7 - Aufteilen von Ziffern in Zehner
Nehmen Sie eine nicht leere Folge von Dezimalstellen (0-9) und geben Sie einen Wahrheitswert aus, wenn diese in zusammenhängende Abschnitte unterteilt werden kann, wobei alle Stellen in jedem Abschnitt genau 10 ergeben. Wenn dies nicht möglich ist, geben Sie einen falschen Wert aus.
zB 19306128
können 19|3061|28
die Abschnitte wie folgt aufgeteilt werden: Alle werden zu 10 summiert (1 + 9, 3 + 0 + 6 + 1, 2 + 8), daher sollte ein wahrer Wert ausgegeben werden.
Wahrheitsbeispiele (eines pro Zeile):
19306128
073
730
0028115111043021333109010
2222255
Falsche Beispiele:
6810410
9218
12341
5222225
000
Aufgabe 8 - Quadratische Uhr
Nehmen Sie eine gleich große mehrzeilige Saite auf.
Ausgabe, 12
wenn die Eingabe ist
_ _
| | |
|_ _|
Ausgabe, 3
wenn die Eingabe ist
_ _
| |_|
|_ _|
Ausgabe, 6
wenn die Eingabe ist
_ _
| | |
|_|_|
Ausgabe, 9
wenn die Eingabe ist
_ _
|_| |
|_ _|
Es gibt keine anderen Eingabefälle.
Schritt 9 - Halterung Art.-Nr.
Nehmen Sie in einem 4 - Byte - String eine von jedem der linken Klammern enthält (
, [
, {
, und <
in beliebiger Reihenfolge.
Fügen Sie die entsprechenden rechten Klammern hinzu, damit die Zeichenfolge 8 Byte lang ist und eine vertikale Symmetrielinie aufweist. zB [<({
wird [<({})>]
.
Kehren Sie dann jede Klammer in dieser Zeichenfolge um. zB [<({})>]
wird ]>)}{(<[
.
Geben Sie die ursprüngliche 8-Byte-Klammer mit der umgekehrten Version oben und unten in separaten Zeilen aus.
Die endgültige Ausgabe für die Eingabe [<({
wäre also
]>)}{(<[
[<({})>]
]>)}{(<[
Ebenso sollte die Ausgabe für <({[
sein
>)}][{(<
<({[]})>
>)}][{(<
Die Eingabe (<<[
ist ungültig, da die {
fehlt und es ein Extra gibt <
.
Aufgabe 10 - Perimiterize
Nehmen Sie ein rechteckiges Textraster (mindestens 1 × 1) auf .
, das aus leeren Feldern und X
durchgezogenen Feldern besteht. Zellen außerhalb der Gittergrenzen werden als leer betrachtet. Sie können davon ausgehen, dass jede der 4 Gitterkantenzeilen und -spalten mindestens eine enthält X
.
zB eine gültige Eingabe könnte sein:
XXX.....X.....
X..X...X.X....
XXX.....X....X
Geben Sie ein weiteres rechteckiges Textgitter aus, in dem jede leere Zelle, die X
orthogonal oder diagonal benachbart ist , einschließlich derjenigen außerhalb des Eingabegitters , zu wird o
. Im Wesentlichen wird ein Perimiter von o
's um alle Teile von Volltonkacheln gezogen. Das neue Gitter sollte nicht größer sein als es sein muss.
Die Ausgabe des obigen Beispiels wäre also:
ooooo...ooo.....
oXXXoo.ooXoo....
oXooXo.oXoXo.ooo
oXXXoo.ooXoo.oXo
ooooo...ooo..ooo
Ebenso sollte die Ausgabe der Eingabe XXX..X.X
sein
oooooooooo
oXXXooXoXo
oooooooooo
und ausgeben
oooooooooo.
oXXXooXoXo.
oooooooooo.
wäre ungültig, da die leere Spalte ganz rechts nicht erforderlich ist.
Sie können alle 3 verschiedene verwenden druckbaren ASCII - Zeichen anstelle von .
, X
, und o
.
Aufgabe 11 - Sator Square
Ausgabe des Satorquadrats :
SATOR
AREPO
TENET
OPERA
ROTAS
Jeder der Buchstaben kann in Klein- oder Großbuchstaben geschrieben werden
SatOR
aRePO
tenet
OPERa
RoTaS
ist auch eine gültige Ausgabe.
Es erfolgt keine Eingabe.
Aufgabe 12 - Prime Tweet
Nehmen Sie keine Eingabe vor, sondern geben Sie eine druckbare 140-Byte- ASCII- Zeichenfolge aus, die mindestens eines der 95 druckbaren ASCII-Zeichen enthält. (45 Zeichen werden also dupliziert.)
Die Summe der Zeichencodes aller 140 Bytes in dieser Zeichenfolge muss eine Sophie Germain-Primzahl sein , dh eine Primzahl p
, 2p+1
die auch eine Primzahl ist. Der Zeichencode für Leerzeichen ist 32, 33 für !
, 34 für "
und so weiter bis zu 126 für ~
. Die Summe könnte in Python als berechnet werden sum(map(ord, myString))
.
Eine Beispielausgabe ist:
! "#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~STUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~d
Die Zeichencodesumme ist die Primzahl 12203, deren entsprechende sichere Primzahl 24407 ist.
import
s zählen? Angenommen, ich schreibe 5 Funktionen, von denen 2 dasselbe Modul benötigen (z. B. import Math
). Wird dies zweimal gezählt?