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
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.
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