Advertisement
SashkoKlincharov

[Java][НП] - Уникатни имиња

Aug 26th, 2021
43
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.26 KB | None | 0 0
  1.  
  2.  
  3. Да се имплементира класа Names со следните методи:
  4.  
  5. public void addName(String name) - додавање на име
  6. public void printN(int n) - ги печати сите имиња кои се појавуваат n или повеќе пати, подредени лексикографски според името, на крајот на зборот во загради се печати бројот на појавувања, а по него на крај бројот на уникатни букви во зборот (не се прави разлика на големи и мали)
  7. public String findName(int len, int x) - го враќа името кое со наоѓа на позиција x (почнува од 0) во листата од уникатни имиња подредени лексикографски, по бришење на сите имиња со големина поголема или еднаква на len. Позицијата x може да биде поголема од бројот на останати имиња, во тој случај се продожува со броење од почетокот на листата. Пример за листа со 3 имиња A, B, C, ако x = 7, се добива B. A0, B1, C2, A3, B4, C5, A6, B7.
  8.  
  9.  
  10.  
  11.  
  12. import java.util.*;
  13. import java.util.stream.Collectors;
  14.  
  15. class Name implements Comparable<Name> {
  16. private String name;
  17. private int num_occurs;
  18.  
  19. public Name(String name) {
  20. this.name = name;
  21. num_occurs = 0;
  22. }
  23.  
  24. public String getName() {
  25. return name;
  26. }
  27.  
  28. public void setNum_occurs(int num_occurs) {
  29. this.num_occurs = num_occurs;
  30. }
  31.  
  32. public int getNum_occurs() {
  33. return num_occurs;
  34. }
  35.  
  36. @Override
  37. public String toString() {
  38. return String.format("%s (%d) %d",
  39. name,getNum_occurs(),getUniqueChars());
  40. }
  41.  
  42. public int getUniqueChars() {
  43. return (int)name.toLowerCase().chars().distinct().count();
  44. }
  45.  
  46. @Override
  47. public int compareTo(Name o) {
  48. return this.name.toLowerCase().compareTo(o.name.toLowerCase());
  49. }
  50. }
  51.  
  52. class Names {
  53. private Map<Name, Integer> numOccursByName;
  54. private Set<Name> allNames;
  55.  
  56. public Names() {
  57. numOccursByName = new TreeMap<>();
  58. allNames = new TreeSet<>();
  59. }
  60.  
  61. public void addName(String name) {
  62. Name n = new Name(name);
  63. numOccursByName.putIfAbsent(n, 0);
  64. numOccursByName.computeIfPresent(n, (k, v) ->
  65. {
  66. ++v;
  67. return v;
  68. });
  69. allNames.add(n);
  70.  
  71. }
  72.  
  73. public void printN(int n){
  74. numOccursByName.entrySet()
  75. .stream()
  76. .filter(each -> each.getValue() >= n)
  77. .forEach(s -> System.out.printf("%s (%d) %d\n",s.getKey().getName(), s.getValue(),s.getKey().getUniqueChars()));
  78.  
  79. }
  80.  
  81. public String findName(int len, int index) {
  82. List<Name> filteredNames = allNames.stream().filter(each -> each.getName().length()<len).collect(Collectors.toList());
  83. Collections.sort(filteredNames,Name::compareTo);
  84. return filteredNames.stream().skip((index%filteredNames.size())).findFirst().orElse(null).getName();
  85. }
  86. }
  87.  
  88.  
  89. public class NamesTest {
  90. public static void main(String[] args) {
  91. Scanner scanner = new Scanner(System.in);
  92. int n = scanner.nextInt();
  93. scanner.nextLine();
  94. Names names = new Names();
  95. for (int i = 0; i < n; ++i) {
  96. String name = scanner.nextLine();
  97. names.addName(name);
  98. }
  99. n = scanner.nextInt();
  100. System.out.printf("===== PRINT NAMES APPEARING AT LEAST %d TIMES =====\n", n);
  101. names.printN(n);
  102. System.out.println("===== FIND NAME =====");
  103. int len = scanner.nextInt();
  104. int index = scanner.nextInt();
  105. System.out.println(names.findName(len, index));
  106. scanner.close();
  107.  
  108. }
  109. }
  110.  
  111. // vashiot kod ovde
  112.  
  113.  
  114.  
  115.  
  116.  
  117. Sample input
  118.  
  119. 440
  120. Alyssa
  121. Brianna
  122. Sarah
  123. Emma
  124. William
  125. Nathan
  126. Mia
  127. Michael
  128. John
  129. Ryan
  130. James
  131. David
  132. Mia
  133. Hannah
  134. Chloe
  135. Matthew
  136. Nicholas
  137. Jonathan
  138. Mia
  139. Anthony
  140. Jacob
  141. Emma
  142. Ethan
  143. Andrew
  144. Joshua
  145. Grace
  146. Emma
  147. Emma
  148. Elizabeth
  149. Daniel
  150. Tyler
  151. Natalie
  152. Sophia
  153. Tyler
  154. Sarah
  155. Ashley
  156. Isabella
  157. William
  158. Nicholas
  159. Joseph
  160. Alyssa
  161. Ashley
  162. Samantha
  163. Alexander
  164. Jonathan
  165. Nathan
  166. Sarah
  167. Sarah
  168. Nicholas
  169. Joseph
  170. Joseph
  171. James
  172. Brianna
  173. Mia
  174. Mia
  175. Andrew
  176. Emily
  177. Matthew
  178. Sarah
  179. Sarah
  180. Tyler
  181. Tyler
  182. Tyler
  183. Samantha
  184. Samantha
  185. Sarah
  186. Olivia
  187. Tyler
  188. Olivia
  189. Natalie
  190. Joseph
  191. Matthew
  192. Christopher
  193. David
  194. Michael
  195. Alexis
  196. Sophia
  197. Mia
  198. Samantha
  199. James
  200. David
  201. Mia
  202. Tyler
  203. Grace
  204. Natalie
  205. Brianna
  206. James
  207. Joshua
  208. David
  209. Chloe
  210. Matthew
  211. Nathan
  212. Christopher
  213. Ethan
  214. Hannah
  215. Sophia
  216. John
  217. Isabella
  218. Chloe
  219. Ethan
  220. Christopher
  221. Samantha
  222. Jonathan
  223. Matthew
  224. James
  225. Andrew
  226. Tyler
  227. Isabella
  228. Matthew
  229. Tyler
  230. John
  231. Elizabeth
  232. Michael
  233. Mia
  234. Emily
  235. Tyler
  236. Anthony
  237. Hannah
  238. James
  239. Grace
  240. Ryan
  241. Sarah
  242. Natalie
  243. Elizabeth
  244. Christopher
  245. Joshua
  246. Brianna
  247. Elizabeth
  248. Christopher
  249. Madison
  250. Hannah
  251. Grace
  252. Ava
  253. Emily
  254. John
  255. Matthew
  256. Mia
  257. Grace
  258. Olivia
  259. Alexis
  260. Nicholas
  261. Joseph
  262. Alexis
  263. Abigail
  264. Daniel
  265. Nicholas
  266. Nathan
  267. Abigail
  268. Jonathan
  269. Samantha
  270. Ryan
  271. Ava
  272. Nathan
  273. Alexis
  274. Samantha
  275. James
  276. David
  277. Alexander
  278. Olivia
  279. Chloe
  280. Sarah
  281. Grace
  282. Alexander
  283. Matthew
  284. Christopher
  285. Michael
  286. Sophia
  287. Emma
  288. Joseph
  289. Brianna
  290. Andrew
  291. Joseph
  292. Emma
  293. Sophia
  294. Alyssa
  295. Alexander
  296. Madison
  297. Samantha
  298. Abigail
  299. Matthew
  300. Joshua
  301. Emma
  302. Emily
  303. Nicholas
  304. Nathan
  305. Michael
  306. Sophia
  307. Mia
  308. Sophia
  309. Sarah
  310. Emily
  311. Brianna
  312. Michael
  313. Hannah
  314. Elizabeth
  315. Nicholas
  316. Jonathan
  317. Chloe
  318. James
  319. Ethan
  320. David
  321. Samantha
  322. Grace
  323. Natalie
  324. Sophia
  325. Jacob
  326. Chloe
  327. William
  328. Ethan
  329. William
  330. Abigail
  331. Michael
  332. William
  333. Christopher
  334. Daniel
  335. Alyssa
  336. Jonathan
  337. William
  338. Emma
  339. John
  340. Alyssa
  341. Natalie
  342. Mia
  343. Chloe
  344. Brianna
  345. Tyler
  346. Natalie
  347. Jonathan
  348. Sarah
  349. William
  350. Ryan
  351. Mia
  352. Abigail
  353. Andrew
  354. Emma
  355. Andrew
  356. William
  357. Olivia
  358. Hannah
  359. Alexander
  360. Joshua
  361. Joseph
  362. Nicholas
  363. William
  364. Nathan
  365. Matthew
  366. Christopher
  367. Isabella
  368. Sophia
  369. Hannah
  370. Elizabeth
  371. Hannah
  372. Ryan
  373. Tyler
  374. Jonathan
  375. Christopher
  376. Jacob
  377. Alexis
  378. Chloe
  379. Elizabeth
  380. Grace
  381. Natalie
  382. Madison
  383. Jacob
  384. Elizabeth
  385. Mia
  386. Brianna
  387. Nicholas
  388. James
  389. Michael
  390. Emily
  391. Tyler
  392. John
  393. Christopher
  394. Alexander
  395. Ava
  396. Tyler
  397. Tyler
  398. Samantha
  399. Olivia
  400. Hannah
  401. Christopher
  402. Anthony
  403. John
  404. Emma
  405. Joseph
  406. Ryan
  407. Grace
  408. Grace
  409. Nicholas
  410. John
  411. Tyler
  412. Ryan
  413. Andrew
  414. Anthony
  415. Jonathan
  416. Jacob
  417. Nicholas
  418. Michael
  419. Emma
  420. Samantha
  421. Nathan
  422. Chloe
  423. Natalie
  424. Emily
  425. Tyler
  426. Daniel
  427. Alyssa
  428. Samantha
  429. Ashley
  430. Tyler
  431. Joshua
  432. Elizabeth
  433. Andrew
  434. James
  435. Matthew
  436. Michael
  437. Ethan
  438. Ryan
  439. Alexander
  440. Joshua
  441. Emily
  442. Emma
  443. Jonathan
  444. Abigail
  445. Emily
  446. Alyssa
  447. Nicholas
  448. John
  449. Samantha
  450. William
  451. Jonathan
  452. David
  453. Chloe
  454. Daniel
  455. Ethan
  456. Abigail
  457. Abigail
  458. Joseph
  459. Emma
  460. Anthony
  461. Natalie
  462. Michael
  463. Nathan
  464. James
  465. Jacob
  466. Daniel
  467. Christopher
  468. Joseph
  469. Elizabeth
  470. Christopher
  471. Christopher
  472. Emily
  473. Joseph
  474. Samantha
  475. Jacob
  476. Samantha
  477. Alexander
  478. Alyssa
  479. Christopher
  480. Matthew
  481. Alyssa
  482. Ava
  483. Tyler
  484. Nicholas
  485. Matthew
  486. Ashley
  487. Elizabeth
  488. Matthew
  489. Grace
  490. Andrew
  491. Nathan
  492. Andrew
  493. Natalie
  494. William
  495. Ava
  496. Jonathan
  497. Emily
  498. Alexis
  499. Natalie
  500. Emma
  501. Samantha
  502. Brianna
  503. Daniel
  504. Joshua
  505. Daniel
  506. Michael
  507. Jonathan
  508. Joshua
  509. Michael
  510. Natalie
  511. Alyssa
  512. Joseph
  513. Chloe
  514. Grace
  515. Jonathan
  516. Joshua
  517. William
  518. Joseph
  519. James
  520. Alexander
  521. Sophia
  522. Daniel
  523. Jacob
  524. Michael
  525. Anthony
  526. Daniel
  527. Alexis
  528. Emma
  529. Mia
  530. Nathan
  531. Abigail
  532. Michael
  533. Tyler
  534. Natalie
  535. Daniel
  536. William
  537. Daniel
  538. Brianna
  539. Andrew
  540. Ava
  541. Michael
  542. Grace
  543. John
  544. Olivia
  545. Madison
  546. Emma
  547. Christopher
  548. Tyler
  549. Anthony
  550. Jonathan
  551. Hannah
  552. Brianna
  553. Elizabeth
  554. Abigail
  555. William
  556. William
  557. Michael
  558. Chloe
  559. Brianna
  560. 6
  561. 7
  562. 144
  563.  
  564. Sample output
  565.  
  566. ===== PRINT NAMES APPEARING AT LEAST 6 TIMES =====
  567. Abigail (10) 5
  568. Alexander (9) 7
  569. Alexis (7) 6
  570. Alyssa (10) 4
  571. Andrew (11) 6
  572. Anthony (7) 6
  573. Ava (6) 2
  574. Brianna (12) 5
  575. Chloe (12) 5
  576. Christopher (16) 9
  577. Daniel (12) 6
  578. David (7) 4
  579. Elizabeth (12) 8
  580. Emily (11) 5
  581. Emma (16) 3
  582. Ethan (7) 5
  583. Grace (13) 5
  584. Hannah (10) 3
  585. Jacob (8) 5
  586. James (12) 5
  587. John (10) 4
  588. Jonathan (15) 6
  589. Joseph (14) 6
  590. Joshua (10) 6
  591. Matthew (14) 6
  592. Mia (14) 3
  593. Michael (17) 7
  594. Natalie (14) 6
  595. Nathan (11) 4
  596. Nicholas (13) 8
  597. Olivia (7) 5
  598. Ryan (8) 4
  599. Samantha (16) 6
  600. Sarah (11) 4
  601. Sophia (10) 6
  602. Tyler (21) 5
  603. William (15) 5
  604. ===== FIND NAME =====
  605. Nathan
  606.  
  607.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement