Papier- und Umschlagformate

17

Aufgabe

Geben Sie bei einem gegebenen Buchstaben (A, B, C) und einer Zahl (0-10) das Format des passenden Standardpapierformats (Serie A und B) oder des passenden Standardumschlagformats (Serie C) in Millimetern im Format aus aaaa x bbbbwo aaaaund bbbbsind die Breiten- und Höhenmaße in Millimetern nach ISO216 (Serie A & B) oder ISO296 (Serie C)

Um die Sache zu vereinfachen, zitiere ich aus der Papiergrößentabelle von Wikipedia

ISO paper sizes in portrait view
Format  A series    B series    C series
Size     mm × mm      mm × mm    mm × mm
0       841 × 1189  1000 × 1414 917 × 1297
1       594 × 841    707 × 1000 648 × 917
2       420 × 594    500 × 707  458 × 648
3       297 × 420    353 × 500  324 × 458
4       210 × 297    250 × 353  229 × 324
5       148 × 210    176 × 250  162 × 229
6       105 × 148    125 × 176  114 × 162
7        74 × 105     88 × 125   81 × 114
8        52 × 74      62 × 88    57 × 81
9        37 × 52      44 × 62    40 × 57
10       26 × 37      31 × 44    28 × 40

Also Beispiele für Ein- und Ausgabe:

**Test case 1**
Input: A4
Output: 210 x 297

**Test Case 2**
Input: B6
Output: 125 x 176

**Test Case 3**
Input: C2
Output: 458 x 648

Dinge zu beachten:

  1. Das Format "210 x 297" oder "1000 x 1414" usw. Obwohl dies das bevorzugte Format ist, können Sie das "x" in Ihrer Ausgabe weglassen, z. B. in Form eines Arrays oder zweier Zahlen, oder was auch immer Sie anspricht solange das Breitenmaß vor der Höhe ausgegeben wird.
  2. Das Verhältnis zwischen Höhe und Breite entspricht in etwa der Quadratwurzel von 2, sodass bei der Berechnung der Höhen die Breite mit sqrt (2) multipliziert und dann auf den nächsten Millimeter auf- oder abgerundet wird die Maße in der obigen Tabelle. Dies kann Ihnen helfen, Ihren Code zu verbessern.
  3. In aufeinanderfolgenden Größen für eine Serie wird die Breite für eine Größe zur Höhe für die nächste. Dies kann Ihnen auch dabei helfen, Ihren Code abzuspielen.

Regeln:

  1. Das ist Code-Golf. Als Ergebnis gelten Standardregeln. Die Bewertung basiert auf der Anzahl der Bytes. Die niedrigste Anzahl gewinnt.
  2. Keine dummen Schlupflöcher , wir waren schon mal dort ... Wir werden das nicht noch einmal durchmachen.
  3. Wenn Sie es codieren können, sollten Sie auch einen Link zu einer Arbeitsinstanz Ihres Codes anhängen, damit andere Programmierer und Golfer lernen können, wie Ihr Code funktioniert. Dies ist nicht obligatorisch, aber ich möchte andere dazu ermutigen, damit wir alle voneinander lernen können. Ich würde auf jeden Fall gerne mehr über die Sprachen anderer Golfer lernen, wo dies möglich ist.

Viel Glück.

WallyWest
quelle
Bn ist das geometrische Mittel von An und An + 1 und Cn ist das geometrische Mittel von An und Bn.
Adám

Antworten:

9

JavaScript (ES7), 57 Byte

1 Byte dank @WallyWest gespeichert

s=>n=>[n,n-1].map(x=>.707**x*{A:841,B:1e3,C:917}[s]+.2|0)
ETHproductions
quelle
3
Gute Arbeit ... Sie können es mit 57 machen s=>n=>[n,n-1].map(x=>.707**x*{A:841,B:1e3,C:917}[s]+.2|0)und es wird immer noch die gleiche Präzision in Ihrer Ausgabe haben.
WallyWest
@WallyWest Danke für den Tipp. Ich hatte mit verschiedenen Ersatz für rumgespielt .7071und .2für eine Weile und nur gab ein bisschen, wenn ich etwas gefunden , das funktioniert: P
ETHproductions
Keine Sorge, alles im Namen von Code Golf ...;) Mir war nicht klar, dass die Karte es einem erlaubt, nicht zitierte Schlüssel innerhalb eines solchen Objekts zu referenzieren ...? Ich werde das irgendwann in Kürze nutzen müssen ...
WallyWest
1
@WallyWest Das hat nichts damit zu tun .map, du kannst es {key1:1,key2:2,key3:3}[myKey]jederzeit benutzen . Sie müssen die Schlüssel nur in Anführungszeichen setzen, wenn es sich nicht um gültige Variablennamen handelt.
ETHproductions
Genial
6

C (gcc) , 113 111 90 78 70 Bytes

Es muss -lmauf TIO ausgeführt werden, funktioniert aber auch auf meinem Computer ohne die Option.

20 Bytes dank pizzapants184 gespart .

Rückgabe von Werten per Zeiger.

f(a,b,c,d)int*c,*d;{float x=1e3*pow(.707,b+a%3/4.)+.2;*c=x,*d=x/.707;}

Erläuterung:

f(a,b,c,d)int*c,*d;{          // calling by char, but receive as int
    float x = 1e3 * pow(.707, // float gives enough precision 
            a % 3 / 4.        // series: a%3/4.=.5,0,.25 when a=65,66,67
            + b) - .2;        // magic number to get correct roundings
    *c = x, *d = x / .707;
}
Colera Su
quelle
1
94 Bytes + -lm durch Eingabe als charundint
pizzapants184
1
91 Bytes + -lm durch Ändern (a^66?a^67:0.5:0.25:0)aufabs(a-66)/(a-63.)
pizzapants184
3

Batch, 105 Bytes

@set/aA=1189,B=1414,C=1297,h=%1,w=h*29/41
@for /l %%i in (1,1,%2)do @set/at=w,w=h/2,h=t
@echo %w% x %h%

41/29 ≅ √2

Neil
quelle
Sind in Batch, @Neil keine Dezimalstellen möglich? Ich hätte gedacht, h*.707wäre besser als h*41/29? Wohlgemerkt, geniale Annäherung!
WallyWest
@WallyWest Nein, nur 32-Bit-Ganzzahlen mit Vorzeichen.
Neil
Oh, ich verstehe! Lerne jeden Tag etwas Neues!
WallyWest
3

JavaScript, 53 Byte

L=>N=>[N+1,N].map(p=>1091/2**(p/2+~{B:2,C:1}[L]/8)|0)

Sparen Sie dank Neil viele Bytes mithilfe eines alternativen Ausgabeformats.

tsh
quelle
1
66 Bytes:L=>N=>(g=p=>1000.2/2**(N/2+p-{A:2,B:4,C:3}[L]/8)|0)(.5)+' x '+g(0)
Neil
1
Oder 58 Bytes, wenn Sie das alternative Ausgabeformat verwenden:L=>N=>[N+1,N].map(p=>1000.2/2**(p/2-{A:2,B:4,C:3}[L]/8)|0)
Neil
@Neil bearbeitet. Und auch auf 56 Bytes reduziert
tsh
3

APL (Dyalog) , 31 28 Bytes

-2 danke an ngn.

Voller Programmteil. Nimmt an ⎕IO( I ndex O rigin) zu sein 0, was auf vielen Systemen Standard ist. Fordert zur Eingabe von Zahlen und Buchstaben von STDIN auf. Druckt nach STDOUT.

.2+1E3÷2*8÷⍨('BC'⍳⍞)+4×⎕-⍳2

Probieren Sie es online!

Mit einer leicht modifizierten Version können wir alle Möglichkeiten auf einmal testen: Probieren Sie es online aus!

⍳2 Die ersten beiden Indexe , dh 0 und 1

⎕- subtrahieren Sie das von numerischer Eingabe

 multiplizieren Sie vier mit dem

()+ Fügen Sie Folgendes hinzu

 Zeicheneingabe…

'BC'⍳ … 'S ɩ ndex in dieser Zeichenfolge ("A" ergibt 2 als Index nach dem letzten)

8÷⍨ dividiere das durch 8

2* erhöhen Sie 2 zur Energie von dem

1E3÷ 1000 geteilt durch das

.2+ füge ⅕ hinzu

 boden (abrunden)

Adam
quelle
@ H.PWiz Ja. Tippfehler. Vielen Dank.
Adám
2

Befunge, 69 56 55 Bytes

"}"8*~3%:"L"*7vv\p00-1_$..@
")"*":":-*!!\+<>2/00g:^:&\/

Probieren Sie es online!

Erläuterung

Wir haben in Befunge nicht den Luxus eines Fließkommas oder einer ähnlichen Funktion, also berechnen wir die Basisgröße für das angegebene Formatzeichen f wie folgt:

fn = f % 3
width = 1000 - (n * 76 + 7) * !!n
height = width * 58 / 41

Wir drehen und teilen diese Dimensionen dann wiederholt, um zur entsprechenden Unterteilung für die angegebene Größenanzahl zu gelangen.

"}"8*                         Push 1000 for later use in the width calculation.
     ~                        Read the format character from stdin.
      3%                      Convert into a number in the range 0 to 2.
        :"L"*7v               Calculate width = 1000 - (fn * 76 + 7) * !!fn
        -*!!\+<                  where fn is the format number derived above.
")"*":":                  /   Calculate height = width * 58 / 41.
                         \    Swap so the width is above the height on the stack.
                      v:&     Read the numeric size from stdin and duplicate for testing.
                      _       While not zero, go left.
                 p00-1        Decrement the size and move it from the stack into memory.
               v/             Swap the width and height.
               >2/            Divide the new width by 2.
                  00g:        Restore the size from memory and duplicate for testing.
                      _       While not zero, repeat this loop.
                       $      When zero, continue to the right and drop the size.
                        ..@   Output the width and height, then exit.
James Holderness
quelle