Pyth-Übung 2


21

Zeit für eine weitere Pyth-Übung. Ich präsentiere hier jeweils 8 Problemstellungen mit einer Pyth-Lösung. Diese Lösungen wurden von einem Pyth-Anfänger geschrieben. Er ist ziemlich glücklich über diese Lösungen, da sie viel kürzer sind als seine Python-Antworten. Ihre Aufgabe ist es jedoch, ihn besser zu zeigen. Erstellen Sie gleichwertige, aber kürzere Programme.

Dies ist eine Herausforderung in Bezug auf die Tricks und Optimierungen, die beim Golfen in Pyth angewendet werden können. Pyth-Golfer können viele der Tricks erkennen, die zu kürzeren Lösungen führen. Einige Probleme erfordern jedoch einige ungewöhnliche Ansätze, die selten verwendet werden. Einige der Tricks, die ich in freier Wildbahn noch nie gesehen habe. Aber keine Lösung erfordert Fehler oder seltsames Verhalten, das von den Entwicklern von Pyth nicht beabsichtigt war. Alle Antworten müssen für das letzte Pyth-Commit ( 2b1562b ) zum Zeitpunkt der Veröffentlichung dieser Frage gültig sein . Sie können den Pyth-Interpreter verwendenzum Prüfen. Es ist aktuell und ich erwarte keine großen Änderungen in Pyth, die optimale Lösungen ungültig machen oder kürzere Lösungen ermöglichen. Der Online-Interpreter verfügt auch über die neue Zeichenreferenz. Da es ziemlich neu ist, können (sollten) Sie auch die alten Dokumente verwenden , falls etwas nicht stimmt oder fehlt.

Ziel: Die Referenzlösungen umfassen insgesamt 81 Bytes. Ihr Ziel ist es, das so weit wie möglich zu übertreffen. Die Übermittlung, die alle 8 Probleme mit der kleinsten Gesamtanzahl von Bytes löst, gewinnt. Tiebreaker ist der Abgabetermin.

Natürlich sind nur Einsendungen gültig, die Lösungen für alle 8 Probleme enthalten. Sie können die Referenzimplementierung verwenden, wenn Sie die Bewertung eines (oder mehrerer) Probleme nicht verbessern können.

Ihre Lösungen müssen genau die gleiche Ausgabe wie die Referenzlösungen drucken. Bis auf einen optionalen nachgestellten Zeilenumbruch.

Da dies eine Pyth-Praxis ist, sind nur Programme zulässig, die in der Sprache Pyth geschrieben sind.

Beantwortung: Bitte verderben Sie Ihre gesamte Antwort mit Ausnahme Ihrer Gesamtpunktzahl. Es ist beabsichtigt, dass Sie sich nicht die Antworten anderer ansehen, bevor Sie Ihre eigenen einreichen. Sie können Spoiler erstellen, indem Sie>! vor jeder Zeile wie:

>! Problem 1: V9m?>dNd0S9 (11 bytes)
>! Problem 2: VTN)VGN (7 bytes)
>! ...

Ich hoffe, ich habe nicht zu schwierige oder zu triviale Probleme gewählt. Ich hoffe auf viele Teilnehmer und auf ein paar neue Einblicke in Pyth. Viel Spaß beim Golfen!

Problem 1:

Erstellen Sie die folgende 9x9-Matrix und drucken Sie sie aus:

[1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 0, 3, 4, 5, 6, 7, 8, 9]
[0, 0, 0, 4, 5, 6, 7, 8, 9]
[0, 0, 0, 0, 5, 6, 7, 8, 9]
[0, 0, 0, 0, 0, 6, 7, 8, 9]
[0, 0, 0, 0, 0, 0, 7, 8, 9]
[0, 0, 0, 0, 0, 0, 0, 8, 9]
[0, 0, 0, 0, 0, 0, 0, 0, 9]

Referenzlösung ( Link ):

V9m?>dNd0S9 (11 bytes)

Problem 2:

Gib alle Ziffern und Buchstaben in separaten Zeilen aus:

0
...
9
a
...
z

Referenzlösung ( Link ):

VTN)VGN (7 bytes)

Problem 3:

Finden Sie das lexikographisch kleinste Palindrom, das lexikographisch größer oder gleich einer Eingabezeichenfolge ist, die Kleinbuchstaben enthält und mit der Eingabezeichenfolge identisch ist.

a -> a
abc -> aca
adcb -> adda

Referenzlösung ( Link ):

hf&gTzqT_T^Glz (14 bytes)

Problem 4:

Prüfen Sie, ob eine Zahl im Bereich von [0, eingegebene Zahl] liegt. Dies sollte auch bei Schwimmern funktionieren.

4, 6 -> True
5.5, 6 -> True
6, 6 -> False
6, 6.1 -> True

Referenzlösung ( Link ):

&gQ0<QE (7 bytes)

Das Referenzformat ist to be tested value<newline>end value. Sie können jedoch ein anderes Eingabeformat auswählen. Wichtig ist nur, dass Sie die Problemstellung durchführen und die richtigen Ergebnisse erzielen.

Problem 5:

Analysieren Sie eine Eingabezeichenfolge im Format "\ d + [a-zA-Z] +". Beachten Sie, dass es sich bei der Zahl wirklich um eine Zahl handeln muss, nicht um eine Zeichenfolge mit Ziffern.

'123Test' -> [123, 'Test']

Referenzlösung ( Link ):

A.ggk\Az,sGH (12 bytes)

Problem 6:

Berechnen Sie die Summe der Zahlen, die durch ein oder mehrere Kommas getrennt sind. Sie können davon ausgehen, dass die Zeichenfolge mindestens eine Zahl enthält.

11,2,,,3,5,,8 -> 29

Referenzlösung ( Link ):

svM:z",+"3 (10 bytes)

Problem 7:

Lesen Sie positive Ganzzahlen von der Eingabe, bis Sie die Zahl 0 erhalten. Geben Sie die Summe aller Zahlen aus.

Referenzlösung ( Link ):

WJE=+ZJ)Z (9 bytes)

Problem 8:

Summieren Sie alle Elemente einer quadratischen Matrix mit Ausnahme derjenigen der Hauptdiagonale (linke obere Ecke bis rechte untere Ecke).

Referenzlösung ( Link ):

-ssQs.e@bkQ (11 bytes)

Mir gefällt die Idee, sprachspezifische Fragen zu stellen (und ich habe diese Frage positiv bewertet). Aber ich dachte, sprachspezifische Fragen wären in PPCG verpönt?
Luis Mendo

3
@LuisMendo Ich denke, sprachspezifische Fragen werden nur verpönt, wenn der Grund für die Frage eine generelle Abneigung gegen Golfsprachen wie CJam, Pyth, ... ist oder weil das OP nur bestimmte Sprachen versteht. Das hier ist ein bisschen anders. Diese Frage wurde hauptsächlich entwickelt, um einige der verborgensten Merkmale einer populären (in PPCG) Sprache aufzuzeigen. In gewisser Weise ist es wie eine Sammlung von Tricks. Es macht keinen Sinn, es jeder Sprache zu erlauben. Hier ist ein Meta-Post zu diesem Thema: link
Jakube 28.12.15

Sind die Zahlen in 6 positive einstellige ganze Zahlen?
xnor

@xnor Sie können davon ausgehen, dass sie positiv sind, sie können jedoch aus mehr als einer Ziffer bestehen. Ich werde den Testfall ändern.
Jakube

1
Ich stimme dafür, diese Frage als "Off-Topic" zu schließen, da es sich um eine mehrteilige Herausforderung ohne Wechselwirkung zwischen den Teilen handelt
pppery

Antworten:


9

59 58 56 Bytes

Problem 1:

j.tmLdS9Z (9 Bytes)

Problem 2:

MTjG (5 Bytes) (Das erste Zeichen ist eine Newline)

Problem 3:

h.f_IZ1z (8 Bytes)

Problem 4:

%IQE (4 Bytes)

Problem 5:

,J.vz-zJ (8 Bytes)

Problem 6:

srXz\,d7 (8 Bytes)

Problem 7:

u+GE0 (5 Bytes)

Problem 8:

ss.DR~hZQ (9 Bytes)


2

66 Bytes

1. 10 Bytes: V9+mZN}hN9
2. 6 Bytes: jUT)jG
3. 8 Bytes: h.f_IZ1z
4. (Referenzimplementierung) 7 Bytes: &gQ0<QE
5. 11 Bytes: ,sK-rzZG-zK
6. 7 Bytes: ssMcz\,
7. 8 Bytes: s<.Qx.QZ
8. 9 Bytes:ss.eXbkZQ


2

68 67 66 65 Bytes

Aufgabe 1

10 Bytes: V9m*d>dNS9

Aufgabe 2

5 Bytes: \nMTjGWo \nist ein Zeilenumbruch?

Aufgabe 3

9 Bytes: h.fqZ_Z1z

Aufgabe 4

5 Bytes: qQ%QE

Aufgabe 5

Referenzlösung, 12 Bytes: A.ggk\Az,sGH

Aufgabe 6

7 Bytes: ssMcz\,

Aufgabe 7

8 Bytes: s<.Qx.Q0

Aufgabe 8

9 Bytes: ss.DVQUlQ


1

54 Bytes

Hier sind die beabsichtigten Lösungen. Mit Ausnahme von Aufgabe 8 wurden alle Lösungen gefunden.

1. j.tmLdS9Z (9 Bytes) unter Verwendung der Karte für links-map, transponieren und füllt mit Nullen
2. \ nMTjG (5 Bytes) Zeilenumbrüche für die Verwendung der Karte
3. h.f_IZ1z (8 Byte) erzeugen , die möglichen Zeichenfolgen mit .F
4 .% IQE (4 Bytes) hat einen Usecase gefunden, in dem der Invariantenoperator 2 Parameter
5 benötigt ., J.vz-zJ (8 Bytes) .v wertet nur die erste Anweisung eines Strings aus und ignoriert den Rest
. 7 Bytes) s "" = 0
7. u + GE0 (5 Bytes) verkleinern, bis eine Kennzahl
8 erreicht ist. Ss.DVQUQ (8 Bytes) löscht die Diagonale unter Verwendung der Vektorisierung


Verdammt, ich habe Ues lauf Listen vergessen !
Lirtosiast

1
Schön, Isaacg in seiner eigenen Sprache zu schlagen.
Stan Strum

1

 60 59  57 Bytes

1. 9 Bytes :j.tmRdS9Z


2. 6 Bytes :jbUTjG


3. 8 Bytes :h.f_IZ1z


4. 4 Bytes :}sEU


5. 8 Bytes :,K.vz-zK


6. 7 Bytes :ssMcz\,


7. 8 Bytes :s<FxB.Q0


8. 11 10 7 Bytes : ss.DVQU Vorherige Version:ss.e+<bk>bh

Beachten Sie, dass ich diese Lösungen völlig unabhängig von anderen Antworten entwickelt habe, obwohl ich ziemlich spät zur Party komme.


Netter Versuch. Das dritte Problem sind jedoch 8 Bytes.
Jakube

Und ich bin mir ziemlich sicher, dass die Lösung für Problem 8 damals noch nicht kompiliert wurde. Aber ich habe es nicht getestet.
Jakube

@Jakube Oh, danke, dass du es bemerkt hast!
Mr. Xcoder
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.