Das 18. Offline-Echtzeit-Schreiben eines Referenzproblems in Python

Klicken Sie hier für das Problem http://nabetani.sakura.ne.jp/hena/ord18mafovafo/ Klicken Sie hier für Ausführungsergebnisse http://ideone.com/ZSJEH2 Klicken Sie hier, um die Antwortbeispiele anderer Personen anzuzeigen http://qiita.com/Nabetani/items/373105e7fafd12f5e9fd Klicken Sie hier für die Veranstaltungsankündigung der Yokohama Henachoko Programming Study Group "18. Offline-Echtzeitschreiben" http://atnd.org/events/47025 (am Samstag, den 01. Februar 2014)

#!/usr/bin/env python

# FOLD = { operation:(front side fold, back side fold), ... }
# '0':front side paper, '1':back side paper, 'm':mountain fold, 'V':valley fold
FOLD = {'L':('1V0','1m0'), 'J':('0V1','0m1'), 'Z':('0m1V0','1m0V1'), 'U':('1V0V1','0m1m0'), 'S':('0V1m0','1V0m1'), '':('','')}

solve = lambda operation, side=0: ''.join(solve(operation[1:], int(f)) if f in '01' else f for f in FOLD[operation[:1]][side])

def test(data, correct):
    answer = solve(data)
    print 'xo'[answer==correct], data, correct, answer

0, test( "JZ", "mVVmV" );
1, test( "J", "V" );
2, test( "L", "V" );
3, test( "Z", "mV" );
4, test( "U", "VV" );
5, test( "S", "Vm" );
6, test( "JL", "VVm" );
7, test( "JS", "VmVVm" );
8, test( "JU", "VVVmm" );
9, test( "LU", "mmVVV" );
10, test( "SL", "VVmmV" );
11, test( "SS", "VmVVmmVm" );
12, test( "SU", "VVVmmmVV" );
13, test( "SZ", "mVVmVmmV" );
14, test( "UL", "mVVVm" );
15, test( "UU", "mmVVVVmm" );
16, test( "UZ", "mVVmVVmV" );
17, test( "ZJ", "VmmVV" );
18, test( "ZS", "VmmVmVVm" );
19, test( "ZZ", "mVmmVVmV" );
20, test( "JJJ", "VVmVVmm" );
21, test( "JJZ", "mVVmVVmVmmV" );
22, test( "JSJ", "VVmmVVmVVmm" );
23, test( "JSS", "VmVVmmVmVVmVVmmVm" );
24, test( "JUS", "VmVVmVVmVVmmVmmVm" );
25, test( "JUU", "mmVVVVmmVVVmmmmVV" );
26, test( "JUZ", "mVVmVVmVVmVmmVmmV" );
27, test( "LJJ", "VmmVVVm" );
28, test( "LLS", "VmmVmVVmVVm" );
29, test( "LLU", "mmmVVVmmVVV" );
30, test( "LLZ", "mVmmVVmVVmV" );
31, test( "LSU", "mmVVVmmmVVVVmmmVV" );
32, test( "LSZ", "mVVmVmmVVmVVmVmmV" );
33, test( "LZL", "mmVVmVVmmVV" );
34, test( "LZS", "VmmVmVVmVVmmVmVVm" );
35, test( "LZU", "mmmVVVmmVVVmmmVVV" );
36, test( "SJL", "VVmVVmmmVVm" );
37, test( "SLU", "mmVVVVmmmVVmmmVVV" );
38, test( "SLZ", "mVVmVVmVmmVmmVVmV" );
39, test( "SSU", "VVVmmmVVVmmVVVmmmmVVVmmmVV" );
40, test( "SUJ", "mVVVmVVmmmVmmVVVm" );
41, test( "SUS", "VmVVmVVmVVmmVmmVmmVmVVmVVm" );
42, test( "SZZ", "mVmmVVmVVmVmmVVmVmmVmmVVmV" );
43, test( "UJJ", "VmmVVVmVVmm" );
44, test( "ULU", "mmmVVVmmVVVVmmmVV" );
45, test( "ULZ", "mVmmVVmVVmVVmVmmV" );
46, test( "UUU", "VVmmmmVVVmmVVVVmmVVVmmmmVV" );
47, test( "ZJU", "VVVmmmVVmmmVVVVmm" );
48, test( "ZLS", "VmVVmmVmmVmVVmVVm" );
49, test( "ZSJ", "VVmmVmmVVmmVVVmmV" );
50, test( "ZUJ", "mVVVmmVmmmVVmVVVm" );
51, test( "JJLJ", "mVVVmmVVmVVmmmV" );
52, test( "JLJJ", "VmmVVVmVVmmmVVm" );
53, test( "JLJL", "VmmVVVmVVmmmVVm" );
54, test( "LJJL", "VVmmVmmVVVmVVmm" );
55, test( "LLJJ", "VmmmVVmVVmmVVVm" );
56, test( "SZUS", "VmVVmVVmmVmmVmmVmVVmVVmVVmVVmmVmmVmmVmVVmVVmVVmmVmmVmmVmVVmVVmmVmmVmmVmVVmVVmVVm" );
57, test( "ULLS", "VmmVmmVmVVmVVmmVmVVmVVmVVmmVmmVmVVm" );
58, test( "JJJJZJ", "VmmVVVmmVVmVVmmVVmmmVVmVVmmVVVmmVVmmVmmVVmmmVVmVVmmVVVmmVVmVVmmVVmmmVVmmVmmVVVmmVVmmVmmVVmmmVVm" );
59, test( "JULLLJ", "mmVmmVVmmmVVmVVVmmVmmVVVmmVVmVVVmmVmmVVmmmVVmVVVmmVmmVVVmmVVmVVmmmVmmVVmmmVVmVVmmmVmmVVVmmVVmVV" );
60, test( "LJJJUL", "mVVVmVVmmmVVmVVVmmVmmmVmmVVVmVVmmmVmmVVVmmVmmmVVmVVVmVVmmmVVmVVVmmVmmmVVmVVVmVVmmmVmmVVVmmVmmmV" );
61, test( "LJSJJL", "VVmVVmmVVVmmVmmmVVmVVmmmVVmmVmmVVVmVVmmmVVmmVmmVVVmVVmmVVVmmVmmmVVmVVmmVVVmmVmmVVVmVVmmmVVmmVmm" );
62, test( "LZLLLJ", "mmVmmVVmmmVVmVVmmmVmmVVVmmVVmVVVmmVmmVVmmmVVmVVVmmVmmVVVmmVVmVVmmmVmmVVmmmVVmVVVmmVmmVVVmmVVmVV" );
63, test( "SJJJJL", "VVmVVmmVVVmmVmmVVVmVVmmmVVmmVmmVVVmVVmmVVVmmVmmmVVmVVmmmVVmmVmmmVVmVVmmVVVmmVmmVVVmVVmmmVVmmVmm" );
64, test( "ZLJLJL", "VmmVVVmmVmmmVVmVVmmVVVmVVmmmVVmmVmmVVVmmVmmmVVmmVmmVVVmVVmmmVVmVVmmVVVmmVmmmVVmVVmmVVVmVVmmmVVm" );

Kommentar

doukaku_18.png

Die Vorderseite des Papiers ist '0', die Rückseite ist '1' und die Bergfalte ist 'm'. Lass die Talfalte 'V' sein. Das L-fache Ergebnis auf der Vorderseite ist (hinten, Tal, vorne), also '1V0'. Das L-fache Ergebnis auf der Rückseite ist (hinten, Berg, vorne), also '1m0'. Konvertieren Sie die Konvertierung von L-Faltung in das Faltungsergebnis in die Wörterbuchdaten FOLD = {'L': ('1V0', '1m0')}. Das L-Fold-Ergebnis auf der Vorderseite kann mit FOLD ['L'] [0] als '1V0' abgerufen werden. Das Ergebnis der L-Faltung auf der Rückseite ist FOLD ['L'] [1] und '1m0' kann herausgenommen werden. Wenn es nur eine L-Falte gibt, besteht die Antwort darin, nur das 'V' der Knickdaten von '1V0' zu extrahieren. Im Fall der LL-Faltung können 1 und 0, die den Papierteil von '1V0' darstellen, durch das Ergebnis der L-Faltung ersetzt werden. LL-Fold-Ergebnis = Weitere L-Fold-Operation für L-Fold-Ergebnis auf der Vorderseite → Falten FALTEN ['L'] [0] weiter L. → Weiterer L-facher Betrieb von '1V0' (L-facher Betrieb für 1 und 0) → FOLD['L'][1]+'V'+FOLD['L'][0] → '1m0'+'V'+'1V0' → '1m0V1V0' Sammeln Sie dann nur die Knickzeichen und antworten Sie mit 'mVV'. Wenn dies zu einem Programm gemacht wird, ist es wie folgt.

  1. Extrahieren Sie das erste Operationszeichen aus der Operationszeichenfolge
  2. In Operationszeichen konvertieren Suchen Sie im Wörterbuch nach und konvertieren Sie in das Faltergebnis
  3. Wenn es eine nachfolgende Operation gibt, führen Sie die zweite und nachfolgende Operation rekursiv für 0 und 1 des Faltungsergebnisses aus.
  4. Schließlich wird die Arbeit des Entfernens von Nullen und Einsen am Ende durch '' als leere Operation ersetzt. Dies führt zu einem Fehler, wenn das Operationszeichen verschwindet, wenn das Operationszeichen mit der Operation [0] abgerufen wird. Wenn jedoch keine Operation durch Schreiben der Operation [: 1] erfolgt, wird es zu einem leeren Zeichen und das Falzergebnis für das leere Zeichen Wenn Sie sich im Konvertierungswörterbuch als '': ('', '') registrieren, werden '0' und '1' durch leere Zeichen ersetzt, wenn keine Operationszeichen mehr vorhanden sind.
solve = lambda operation, side=0: ...
    #Funktionsdefinition lösen. Entspricht der unten gezeigten Funktion mit def
    # def solve(operation, side=0):
    #     return ...    
operation[:1]
    #Extrahieren Sie das erste Operationszeichen in der Operationszeichenfolge
    #Wenn die Operation eine leere Zeichenfolge ist''werden
FOLD[operation[:1]][side]
    #Extrahieren Sie die faltbare Zeichenfolge für das erste Operationszeichen der Operationszeichenfolge
    #Wenn die Operation eine leere Zeichenfolge ist''werden
for f in FOLD[operation[:1]][side]
    #Für jedes Zeichen in der Faltzeichenfolge
operation[1:]
    #Zeichenfolgen für die zweite und nachfolgende Operation
solve(operation[1:], int(f)) if f in '01' else f
    # '0'Oder'1'Führen Sie dann die zweite und die nachfolgenden Operationen rekursiv aus.'m'Oder'V'Dann dieser Charakter
    #In der letzten Operation geblieben'0'Wann'1'Lösen('', side)Anruf''werden
''.join(...)
    #Faltbare Zeichenketten von Teilteilen werden lückenlos zu einer Zeichenkette kombiniert

Recommended Posts

Das 15. Offline-Echtzeit-Schreiben eines Referenzproblems in Python
Das 14. Referenzproblem beim Schreiben in Echtzeit in Python
Das 18. Offline-Echtzeit-Schreiben eines Referenzproblems in Python
Das 16. Offline-Echtzeit-Schreiben eines Referenzproblems zur Lösung mit Python
Das 19. Offline-Echtzeit-Schreiben eines Referenzproblems zur Lösung mit Python
20. Offline-Echtzeit So schreiben Sie Probleme in Python
Das 16. Offline-Echtzeit-Schreibproblem wurde mit Python gelöst
Das 15. Offline-Problem beim Schreiben in Echtzeit wurde mit Python gelöst
Das 18. Offline-Echtzeit-Schreibproblem in Python
Das 19. Offline-Echtzeit-Schreibproblem in Python
17. Offline-Echtzeit So lösen Sie Schreibprobleme mit Python
Beim 15. Offline-Echtzeitversuch habe ich versucht, das Problem des Schreibens mit Python zu lösen
Das 14. Referenzproblem beim Offline-Schreiben in Echtzeit mit Python
Teil 1 Ich habe die Antwort auf das Referenzproblem geschrieben, wie man in Python in Echtzeit offline schreibt
13. Offline-Echtzeit So lösen Sie Schreibprobleme mit Python
Das 10. Referenzproblem beim Schreiben in Echtzeit. Implementierungsbeispiel von Python.
Offline-Echtzeit zum Schreiben eines Python-Implementierungsbeispiels für das E15-Problem
Das 11. Referenzproblem beim Schreiben in Echtzeit. Implementierungsbeispiel von Python.
Antwort auf "Offline in Echtzeit, wie man ein F02-Problem schreibt"
Antwort auf "Offline-Echtzeit, wie man ein F01-Problem schreibt"
Antwort auf "Offline-Echtzeit, wie man ein E13-Problem schreibt"
Teil 1 Ich habe ein Beispiel für die Antwort auf das Referenzproblem geschrieben, wie man in Python in Echtzeit offline schreibt
Offline-Echtzeit zum Schreiben eines E14 Python-Implementierungsbeispiels
So schreiben Sie offline in Echtzeit Lösen von E05-Problemen mit Python
Das zwölfte Offline-Echtzeit-Schreibreferenzproblem. Implementiert von Python
Wie schreibe ich Ruby to_s in Python
Offline in Echtzeit, wie man ein Implementierungsbeispiel für E11 Ruby und Python schreibt
Ich habe versucht, das Problem von F02 zu lösen, wie man mit Python offline in Echtzeit schreibt
Verwendung der C-Bibliothek in Python
Tipps zum Schreiben werden in Python kurz abgeflacht
So erhalten Sie die Dateien im Ordner [Python]
So rufen Sie den n-ten größten Wert in Python ab
So erhalten Sie den Variablennamen selbst in Python
Grundlegende Informationen Schreiben Sie das Problem mit dem Herbst 2018-Algorithmus in Python
So ermitteln Sie die Anzahl der Stellen in Python
So schreiben Sie in Python die Verkettung von Zeichenfolgen in mehrere Zeilen
Wie Sie das aktuelle Verzeichnis in Python in Blender kennen
Verwendung des in Lobe in Python erlernten Modells
Wie man in Python entwickelt
[Python] So geben Sie Listenwerte der Reihe nach aus
So schreiben Sie eine benutzerdefinierte Validierung in Django REST Framework
[Python] So überprüfen Sie, ob der Schlüssel im Wörterbuch vorhanden ist
So debuggen Sie eine Standard-Python-Bibliothek in Visual Studio
[Python] Wie schreibe ich eine if-Anweisung in einen Satz?
So erhalten Sie den letzten (letzten) Wert in einer Liste in Python
[Python] Wie man PCA mit Python macht
So sammeln Sie Bilder in Python
Verwendung von SQLite in Python
Im Python-Befehl zeigt Python auf Python3.8
Wie man MySQL mit Python benutzt
So verpacken Sie C in Python
Verwendung von PubChem mit Python
Umgang mit Japanisch mit Python
So bestimmen Sie die Existenz eines Selenelements in Python
[Python] Lösen des Importproblems aufgrund der unterschiedlichen Einstiegspunkte
Wie Sie die interne Struktur eines Objekts in Python kennen
So überprüfen Sie die Speichergröße einer Variablen in Python
So stellen Sie fest, dass in Python3 ein Kreuzschlüssel eingegeben wurde