Bei Auslandsgesprächen wird den Telefonnummern ein Code vorangestellt, der angibt, in welchem Land sich die Nummer befindet. Diese Codes sind Präfixcodes , dh, kein Code ist ein Präfix eines anderen.
Sie haben heute früher einen Anruf verpasst und sind irgendwie neugierig, woher dieser Anruf gekommen sein könnte. Sie möchten also die Vorwahl nachschlagen. Da es sich jedoch um einen Präfix-Code handelt, sind Sie sich nicht sicher, wo er endet. Schreiben Sie daher ein Programm, um den aufrufenden Code vom Rest der Nummer zu trennen.
Eingang
Als Eingabe erhalten Sie eine Zeichenfolge, die aus den Ziffern besteht 0-9
. Die ersten Ziffern sind eine der unten aufgeführten Ländervorwahlen (dies bedeutet, dass die erste Ziffer niemals verwendet wird 0
). Nach der Ländervorwahl enthält der Rest der Eingabe null oder mehr Ziffern in beliebiger Reihenfolge. Es wird nicht garantiert, dass es sich um eine gültige Telefonnummer handelt. Ihr Programm muss Eingaben mit mindestens 15 Stellen verarbeiten können
Ausgabe
Ihr Programm sollte die eindeutige Ländervorwahl ausgeben, die ein Präfix der Nummer ist. Die gültigen Ausgaben lauten wie folgt:
1
20
211
212
213
216
218
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
260
261
262
263
264
265
266
267
268
269
27
290
291
297
298
299
30
31
32
33
34
350
351
352
353
354
355
356
357
358
359
36
370
371
372
373
374
375
376
377
378
379
380
381
382
383
385
386
387
389
39
40
41
420
421
423
43
44
45
46
47
48
49
500
501
502
503
504
505
506
507
508
509
51
52
53
54
55
56
57
58
590
591
592
593
594
595
596
597
598
5993
5994
5997
5999
60
61
62
63
64
65
66
670
672
673
674
675
676
677
678
679
680
681
682
683
685
686
687
688
689
690
691
692
7
800
808
81
82
84
850
852
853
855
856
86
870
875
876
877
878
879
880
881
882
883
886
888
90
91
92
93
94
95
960
961
962
963
964
965
966
967
968
970
971
972
973
974
975
976
977
979
98
991
992
993
994
995
996
998
Diese Liste basiert auf den genannten Codes auf Wikipedias Liste der Ländervorwahlen Seite als Überarbeitungs 915410826, mit einigen Änderungen
- Alle Codes, die als nicht zugewiesen oder eingestellt aufgeführt sind, und einige Codes, die als für die zukünftige Verwendung reserviert aufgeführt sind, wurden weggelassen
- Wenn ein auf Wikipedia gelisteter Code ein Präfix eines anderen ist, wurde letzterer weggelassen
- Wenn ein einzelnes Land oder Gebiet mehr als einen Code haben würde und diese Codes ein gemeinsames Präfix haben würden, werden diese Codes zugunsten ihres gemeinsamen Präfixes weggelassen.
Dies kann dazu führen, dass unabhängige Länder zusammengelegt werden oder umstrittene Gebiete mit einem bestimmten Antragsteller zusammengelegt werden. Dies ist keine politische Äußerung, und Entscheidungen über die Einbeziehung oder Unterlassung von Gebieten und Staaten wurden auf der Grundlage der Kodizes getroffen, nicht aufgrund meiner Überzeugungen über das Eigentum oder die Souveränität der Unternehmen, die diese verwenden.
Bei einer Eingabe, die nicht mit einem dieser Codes beginnt, ist das Verhalten Ihres Programms undefiniert.
Und schlussendlich:
- Das ist Code-Golf , weniger Code- Bytes sind besser
- Ihre Einreichung kann entweder eine Funktion oder ein vollständiges Programm sein
- Alle Standard-E / A-Methoden sind in Ordnung
- Die Standardlücken sind verboten
Testfälle
input -> output
5292649259 -> 52
3264296721 -> 32
1550 -> 1
33121394 -> 33
7 -> 7
2542112543 -> 254
2005992972 -> 20
350 -> 350
360 -> 36
8505234469 -> 850
9795586334 -> 979
148985513598795 -> 1
222222 -> 222
5999995 -> 5999
input | output
stattdessen eine Strichlinie darunter setzen, es sei denn, Sie möchteninput
übersetzt werdenoutput
.Antworten:
JavaScript (ES6),
75 7371 Bytes1 Byte dank @Shaggy
gespeichert 2 Byte dank @Neil gespeichert
Probieren Sie es online!
quelle
599?|50
kann ersetzen599|5[09]
.s=>/(2[^07]|3[578]|42|599?|50|6[789]|8[0578]|9[679]|[^17]|)./.exec(s)[0]
für 72 Bytes?05AB1E ,
282524 BytesProbieren Sie es online!
quelle
Retina 0.8.2 , 60 Bytes
Probieren Sie es online!
quelle
Python 3 ,
12078 BytesProbieren Sie es online!
Enthält einige nicht druckbare Elemente:
Etwas ungolfed (frühere) Version:
Probieren Sie es online!
quelle
Bash , 328
341410BytesNicht sehr konkurrenzfähig für eine Golf-Punktzahl, aber jede davon hilft meinen Schlagfähigkeiten!
Einsparung von 13 Byte durch Eliminierung der Verarbeitung von 2-Byte-Lauflängenwerten; Das Speichern von nur 3 Bytes fügt 8 Bytes zu T hinzu, vereinfacht jedoch die case-Anweisung erheblich.
Einsparung von 69 Bytes durch Änderung des Ansatzes von der Bash-Erweiterung zum Speichern von Deltas. Der vorherige TIO-Link steht am Ende meiner Antwort.
Probieren Sie es online!
Die Zeichenfolge T = "16D73r42 [...] -3UR132", die den obigen Regeln folgt, wird zu einer Liste von Deltas: "1 6 D 7 3 r4 2 [...] 4995 1 3 2"
Könnte 2-3 weitere Bytes einsparen, wenn ein höherer Radix als 36 verwendet wird (wie 62-64), aber Excel unterstützt nur nativ bis zu 36, und genau das hat die Liste der Deltas und deren Konvertierungen durchgeführt.
Das Erweitern von T, S wird zu: "1 7 20 27 30 31 32 33 34 36 [...] 5993 5994 5997 5999"
Probieren Sie es online!quelle
Perl 5 (-p), 44 Bytes
Probieren Sie es online!
Sowohl TIO als auch SO haben Probleme mit nicht druckbaren Zeichen, daher wird das Programm mit Escape-Sequenzen angezeigt. Hier ist ein Hexdump der tatsächlichen 44 Bytes:
quelle
PHP , 219 Bytes
Ich habe das Gefühl, dass es viel Raum gibt, um den Regex zu verbessern - ich habe es so weit wie möglich ausprobiert, aber ich wette, es kann viel kürzer sein ...
Probieren Sie es online!
quelle
Java 8, 84 Bytes
Port von @Arnauld 's JavaScript-Regex , also stelle sicher, dass du ihn unterstützt!
Probieren Sie es online aus.
Erläuterung:
Regex Erklärung:
quelle
Python 3 , 96 Bytes
Probieren Sie es online!
Die JavaScript-Antwort von Port of Arnauld.
quelle
Scala ,
411402330 BytesDies setzt voraus, dass das Argument nur Ziffern enthält.
Probieren Sie es online!
quelle