При международных телефонных звонках к телефонным номерам добавляется код, указывающий, в какой стране находится номер. Эти коды являются префиксными кодами , то есть ни один код не является префиксом другого.
Итак, ранее сегодня вы пропустили звонок, и вам любопытно, откуда этот звонок мог прийти. Итак, вы хотите посмотреть код вызова. Но, будучи префиксным кодом, вы не совсем уверены, где он заканчивается, поэтому вы решили написать программу, чтобы отделить вызывающий код от остальной части номера.
вход
В качестве ввода вы получите строку, состоящую из цифр 0-9
. Первые несколько цифр будут одним из кодов вызова страны, перечисленных ниже (это означает, что первая цифра никогда не будет 0
). После кода вызова страны оставшаяся часть ввода будет содержать ноль или более цифр в любом порядке - это не обязательно будет действительный номер телефона. Ваша программа должна быть способна обрабатывать вводы, содержащие не менее 15 цифр
Выход
Ваша программа должна вывести уникальный код вызова страны, который является префиксом номера. Действительные выходы следующие:
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
Этот список основан на кодах, перечисленных на странице со списком кодов вызовов в Википедии по состоянию на редакции 915410826, с некоторыми изменениями.
- Все коды, указанные как неназначенные или снятые с производства, а некоторые коды, зарезервированные для будущего использования, были опущены
- Если код, указанный в Википедии, является префиксом другого, последний был опущен
- Если в одной стране или территории будет более одного кода, и если эти коды будут иметь общий префикс, эти коды опускаются в пользу их общего префикса.
Это может привести к тому, что независимые страны будут смешаны вместе или спорные территории будут объединены с конкретным заявителем. Это не является политическим заявлением, и решения о включении или исключении территорий и государств были приняты на основе кодексов, а не каких-либо убеждений, которые я придерживаюсь относительно собственности или суверенитета субъектов, использующих их.
Если задан ввод, который не начинается ни с одного из этих кодов, поведение вашей программы не определено.
И наконец:
- Это код-гольф , чем меньше байт кода, тем лучше
- Ваша заявка может быть либо функцией, либо полной программой
- Любой из I по умолчанию / методы вывода отлично
- Стандартные лазейки запрещены
Контрольные примеры
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
вместо этого пунктирную линию внизу, если вы не хотитеinput
переводитьсяoutput
.Ответы:
JavaScript (ES6),
75 7371 байтСохранено 1 байт благодаря @Shaggy
Сохранено 2 байта благодаря @Neil
Попробуйте онлайн!
источник
599?|50
можно заменить599|5[09]
.s=>/(2[^07]|3[578]|42|599?|50|6[789]|8[0578]|9[679]|[^17]|)./.exec(s)[0]
на 72 байта?05AB1E ,
282524 байтаПопробуйте онлайн!
источник
Сетчатка 0.8.2 , 60 байт
Попробуйте онлайн!
источник
Python 3 ,
12078 байтПопробуйте онлайн!
Содержит некоторые непечатаемые:
Несколько негольфированная (более ранняя) версия:
Попробуйте онлайн!
источник
Баш , 328
341410байтНе очень конкурентоспособен для игры в гольф, но каждый из них помогает мне в игре!
Сохранено 13 байтов за счет исключения обработки 2-байтовых значений длины пробега; хранение только 3 байтов добавляет 8 байтов к T, но значительно упрощает инструкцию case.
Сохранено 69 байт путем изменения подхода от расширения bash к хранению дельт. Предыдущая ссылка TIO внизу моего ответа.
Попробуйте онлайн!
Строка T = "16D73r42 [...] -3UR132", соответствующая приведенным выше правилам, становится списком дельт: "1 6 D 7 3 r4 2 [...] 4995 1 3 2"
Можно было бы сэкономить на 2-3 байта больше, используя более высокое основание, чем 36 (например, 62-64), но Excel поддерживает только до 36, и это то, что использовалось для составления списка дельт и их преобразований.
Расширяя T, S становится: «1 7 20 27 30 31 32 33 34 36 [...] 5993 5994 5997 5999»
Попробуйте онлайн!источник
Perl 5 (-p), 44 байта
Попробуйте онлайн!
И TIO, и SO имеют проблемы с непечатаемыми символами, поэтому программа показана с escape-последовательностями. Вот hexdump фактических 44 байтов:
источник
PHP , 219 байт
Я чувствую, что есть много возможностей для улучшения регулярных выражений - игра в гольф, насколько я могу, но держу пари, что это может быть намного короче ....
Попробуйте онлайн!
источник
Java 8, 84 байта
Port of @Arnauld 's JavaScript regex , так что убедитесь, что поддержали его!
Попробуйте онлайн.
Объяснение:
Regex объяснение:
источник
Python 3 , 96 байт
Попробуйте онлайн!
Порт Арнаулда JavaScript ответ.
источник
Scala ,
411402330 байтовЭто предполагает, что аргумент содержит только цифры.
Попробуйте онлайн!
источник