Podczas wykonywania połączeń międzynarodowych numery telefonów są poprzedzone kodem wskazującym kraj, w którym znajduje się numer. Kody te są kodami prefiksów , co oznacza, że żaden kod nie jest prefiksem innego.
Teraz, wcześniej tego dnia nie udało Ci się odebrać połączenia i jesteś trochę ciekawy, skąd to połączenie mogło pochodzić. Więc chcesz sprawdzić kod wywołujący. Ale będąc kodem prefiksu, nie jesteś do końca pewien, gdzie się kończy, więc decydujesz się napisać program, który oddzieli kod wywołujący od reszty numeru.
Wejście
Jako dane wejściowe otrzymasz ciąg składający się z cyfr 0-9
. Pierwsze kilka cyfr będzie jednym z wymienionych poniżej numerów kierunkowych kraju (oznacza to, że pierwsza cyfra nigdy nie będzie 0
). Po kraju kodu wywołującego, reszta wejściu będzie zawierać zero lub więcej cyfr w dowolnej kolejności - to nie gwarantuje się poprawny numer telefonu. Twój program musi być w stanie obsłużyć dane wejściowe zawierające co najmniej 15 cyfr
Wynik
Twój program powinien wypisać unikalny kod kraju, który jest prefiksem numeru. Prawidłowe dane wyjściowe są następujące:
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
Ta lista oparta jest na kodach wymienionych na stronie z listą kodów krajowych w Wikipedii w wersji 915410826, z kilkoma modyfikacjami
- Wszystkie kody wymienione jako nieprzypisane lub wycofane, a niektóre kody wymienione jako zastrzeżone do wykorzystania w przyszłości zostały pominięte
- Jeśli kod wymieniony w Wikipedii jest prefiksem innego, ten ostatni został pominięty
- Jeżeli jeden kraj lub terytorium miałby więcej niż jeden kod i jeśli kody te miałyby wspólny prefiks, kody te są pomijane na korzyść ich wspólnego prefiksu.
Może to spowodować skupienie niepodległych krajów lub spory o terytoria z określonym roszczeniem. Nie jest to zamierzone oświadczenie polityczne, a decyzje o włączeniu lub zaniechaniu terytoriów i państw zostały podjęte na podstawie kodeksów, a nie jakichkolwiek moich przekonań dotyczących własności lub suwerenności podmiotów je wykorzystujących.
Jeśli podano dane wejściowe, które nie zaczynają się od żadnego z tych kodów, zachowanie programu jest niezdefiniowane.
I w końcu:
- To jest golf golfowy , im mniej bajtów kodu, tym lepiej
- Twoje zgłoszenie może być funkcją lub pełnym programem
- Każda z domyślnych metod We / Wy jest w porządku
- Standardowe luki są zabronione
Przypadki testowe
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
zamiast tego zrobić kreskę pod linią, chyba że chceszinput
zostać przetłumaczonyoutput
.Odpowiedzi:
JavaScript (ES6),
75 7371 bajtówZapisano 1 bajt dzięki @Shaggy
Zapisano 2 bajty dzięki @Neil
Wypróbuj online!
źródło
599?|50
może zastąpić599|5[09]
.s=>/(2[^07]|3[578]|42|599?|50|6[789]|8[0578]|9[679]|[^17]|)./.exec(s)[0]
działa na 72 bajty?05AB1E ,
282524 bajtówWypróbuj online!
źródło
Retina 0.8.2 , 60 bajtów
Wypróbuj online!
źródło
Python 3 ,
12078 bajtówWypróbuj online!
Zawiera niektóre niedrukowalne:
Nieco golfowa (wcześniejsza) wersja:
Wypróbuj online!
źródło
Bash , 328
341410bajtówNiezbyt konkurencyjny dla wyniku golfowego, ale każdy z nich pomaga moim umiejętnościom bashowym!
Zaoszczędzono 13 bajtów, eliminując obsługę 2-bajtowych wartości długości przebiegu; przechowywanie tylko 3 bajtów dodaje 8 bajtów do T, ale znacznie ułatwia instrukcję case.
Zaoszczędzono 69 bajtów, zmieniając podejście z rozwijania bash na przechowywanie delt. Poprzedni link TIO znajduje się na dole mojej odpowiedzi.
Wypróbuj online!
Ciąg T = „16D73r42 [...] -3UR132” zgodny z powyższymi regułami staje się listą delt: „1 6 D 7 3 r4 2 [...] 4995 1 3 2”
Można zaoszczędzić 2-3 bajty więcej, stosując wyższą podstawę niż 36 (jak 62-64), ale Excel natywnie obsługuje tylko do 36, i to właśnie robiło listę delt i ich konwersji.
Rozszerzenie T, S staje się: „1 7 20 27 30 31 32 33 34 36 [...] 5993 5994 5997 5999”
Wypróbuj online!źródło
Perl 5 (-p), 44 bajty
Wypróbuj online!
Zarówno TIO, jak i SO mają problemy z niedrukowalnymi znakami, więc program wyświetla sekwencje specjalne. Oto zrzut rzeczywistych 44 bajtów:
źródło
PHP , 219 bajtów
Wydaje mi się, że jest wiele miejsca na poprawienie wyrażenia regularnego - grałem w golfa tak daleko, jak to możliwe, ale założę się, że może być znacznie krótszy ...
Wypróbuj online!
źródło
Java 8, 84 bajtów
Port wyrażenia regularnego JavaScript w @Arnauld , więc upewnij się, że go głosujesz!
Wypróbuj online.
Wyjaśnienie:
Wyjaśnienie Regex:
źródło
Python 3 , 96 bajtów
Wypróbuj online!
Odpowiedź JavaScript na Port of Arnauld.
źródło
Scala ,
411402330 bajtówZakłada się, że argument zawiera tylko cyfry.
Wypróbuj online!
źródło